From 588ea704eb92490362c057582cb0f69162b98f26 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 4 Oct 2023 22:38:06 +0300 Subject: [PATCH 001/689] L28: Update assignment URLs --- lesson28.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson28.md b/lesson28.md index 0a6129983..3561c7793 100644 --- a/lesson28.md +++ b/lesson28.md @@ -806,11 +806,11 @@ def regex(request, text): # Практика / Домашнее задание: Вся домашка на ближайшие много занятий описана вот -[тут](https://edu-python-course.github.io/_build/html/uk/appx/blog.html). +[тут](https://edu-python-course.github.io/_build/html/uk/appx/blog/spec.html). Там прописаны все задачи разбитые на подзадачи, что бы собрать их в один цельный проект -[Задание](https://edu-python-course.github.io/_build/html/uk/appx/blog.html#challenge-functional-views) на это занятие: +[Задание](https://edu-python-course.github.io/_build/html/uk/appx/blog/spec.html#challenge-functional-views) на это занятие: From 551ede0c92bdfe3f845de30142eb26d0ae09f0a6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 7 Oct 2023 15:37:50 +0300 Subject: [PATCH 002/689] L29, L30: update assignment links --- lesson29.md | 2 +- lesson30.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson29.md b/lesson29.md index 2e8902db7..1ba871990 100644 --- a/lesson29.md +++ b/lesson29.md @@ -651,7 +651,7 @@ def index(request): Продолжаем собирать блог -https://edu-python-course.github.io/_build/html/uk/appx/blog.html#challenge-templates +https://edu-python-course.github.io/_build/html/uk/appx/blog/spec.html#challenge-templates На данном этапе мы пока не можем реализовать все что указанно в спецификации поэтому на текущем моменте надо реализовать такие страницы как: diff --git a/lesson30.md b/lesson30.md index 4b35ec3ca..6ea0fd5bb 100644 --- a/lesson30.md +++ b/lesson30.md @@ -531,7 +531,7 @@ class Membership(models.Model): # Домашнее задание / Практика: -https://edu-python-course.github.io/_build/html/uk/appx/blog.html#challenge-data-models +https://edu-python-course.github.io/_build/html/uk/appx/blog/spec.html#challenge-data-models topic <--> blogpost = m2m: у blogpost повинен бути хоча б 1 topic From 1c52266fd121120aa21e227a7028a23073dc6f94 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 3 Nov 2022 23:50:32 +0200 Subject: [PATCH 003/689] Started global course updated Updated gitignore rules. Added project dependencies suitable for pip and poetry. Added builds automation config: make. --- .gitignore | 27 +- Makefile | 42 +++ README.rst | 33 +++ poetry.lock | 645 +++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 45 ++++ requirements.txt | 174 +++++++++++++ src/conf.py | 40 +++ src/index.txt | 7 + 8 files changed, 1012 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 README.rst create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 src/conf.py create mode 100644 src/index.txt diff --git a/.gitignore b/.gitignore index 744eb8cad..3ce2145a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,27 @@ +# virtual environemt +/.venv/ +/.env/ +/venv/ +/env/ + +# ide configs +/.vscode/ /.idea/ -.vscode + +# emacs cache and backup files +\#* +*~ + +# temporary files storage +/temp/ +/tmp/ + +# documentation builds +_builds/ +_build/ +builds/ +build/ + +# translation object files +*.pot +*.mo diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..050679cb3 --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +# Python training course makefile for builds automation + +# Sphinx settings +SPHINX_SRC = src +SPHINX_CONFIG = $(SPHINX_SRC)/conf.py + +# Internationalization +SPHINXINTL_LANGUAGE ?= ua +LANGUAGE ?= en + +# Sphinx build directories +_SPHINX_OUT_BASE = _build +GETTEXT_DIR = $(_SPHINX_OUT_BASE)/gettext +LATEX_DIR = $(_SPHINX_OUT_BASE)/latex/$(LANGUAGE) +HTML_DIR = $(_SPHINX_OUT_BASE)/html/$(LANGUAGE) + +# Sphinx builders +SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) + +# Makefile targets +all : clean + +clean : + @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" + @rm -rf $(_SPHINX_OUT_BASE) + +html : + @echo "LANGUAGE=$(LANGUAGE): generating HTML output at $(HTML_DIR)" + @$(SPHINX_BUILD) -b html $(SPHINX_SRC) $(HTML_DIR) + +latex : + @echo "LANGUAGE=$(LANGUAGE): generating LaTeX output at $(LATEX_DIR)" + @$(SPHINX_BUILD) -b latex $(SPHINX_SRC) $(LATEX_DIR) + +pdf : latex + @make -C "$(LATEX_DIR)" + +gettext : + @$(SPHINX_BUILD) -b gettext $(SPHINX_SRC) $(GETTEXT_DIR) + +locales : gettext + @sphinx-intl -c $(SPHINX_CONFIG) update -p $(GETTEXT_DIR) diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..2fc5c6d43 --- /dev/null +++ b/README.rst @@ -0,0 +1,33 @@ +############################################################################### + PYTHON TRAINING COURSE +############################################################################### + +This is the training course to master the Python programming language. This +includes the very basics programming topics like data types, variables and +object-oriented programming and advanced topics like multithreading and +web-frameworks for Python. + +Getting started +=============== + +Installing dependencies +----------------------- + +This project comes with dependencies listed in formats suitable for `pip`_ +and `poetry`_ package managers. It's recommended to use virtual environment +while working with this project. + +To install dependencies via pip do: + +.. code-block:: + + pip install -r requirements.txt + +To do the same using poetry: + +.. code-block:: + + poetry install + +.. _pip: https://pip.pypa.io +.. _poetry: https://python-poetry.org diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..7730312c0 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,645 @@ +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "babel" +version = "2.11.0" +description = "Internationalization utilities" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +name = "certifi" +version = "2022.9.24" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "charset-normalizer" +version = "2.1.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "5.0.0" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markdown-it-py" +version = "2.1.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] +profiling = ["gprof2dot"] +plugins = ["mdit-py-plugins"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] +code_style = ["pre-commit (==2.6)"] +benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mdit-py-plugins" +version = "0.3.1" +description = "Collection of plugins for markdown-it-py" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" + +[package.extras] +code_style = ["pre-commit"] +rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "myst-parser" +version = "0.18.1" +description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +docutils = ">=0.15,<0.20" +jinja2 = "*" +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = ">=0.3.1,<0.4.0" +pyyaml = "*" +sphinx = ">=4,<6" +typing-extensions = "*" + +[package.extras] +code_style = ["pre-commit (>=2.12,<3.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +rtd = ["ipython", "sphinx-book-theme", "sphinx-design", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] +testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.0)", "sphinx-pytest", "sphinx (<5.2)"] + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pygments" +version = "2.13.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "pytz" +version = "2022.6" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.28.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "5.3.0" +description = "Python documentation generator" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.20" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.12" +requests = ">=2.5.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest (>=4.6)", "html5lib", "typed-ast", "cython"] + +[[package]] +name = "sphinx-intl" +version = "2.0.1" +description = "Sphinx utility that make it easy to translate and to apply translation." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +babel = "*" +click = "*" +sphinx = "*" + +[package.extras] +test = ["pytest", "mock"] +transifex = ["transifex_client (>=0.11)"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.1.0" +description = "Read the Docs theme for Sphinx" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6,<6" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +test = ["html5lib", "pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["mypy", "flake8", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "urllib3" +version = "1.26.12" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" + +[package.extras] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "zipp" +version = "3.10.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.9" +content-hash = "51f6df5deeeab6ac6526e6be2fa9b37d26f6d30651d3d4f7ee661b97d456fecb" + +[metadata.files] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +babel = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, +] +certifi = [ + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +imagesize = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] +importlib-metadata = [ + {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, + {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, +] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +markdown-it-py = [ + {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, + {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +mdit-py-plugins = [ + {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"}, + {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"}, +] +mdurl = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] +myst-parser = [ + {file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d"}, + {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pygments = [ + {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, + {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pytz = [ + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, +] +sphinx-intl = [ + {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, + {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.1.0-py2.py3-none-any.whl", hash = "sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5"}, + {file = "sphinx_rtd_theme-1.1.0.tar.gz", hash = "sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] +urllib3 = [ + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, +] +zipp = [ + {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, + {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..8ec234817 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,45 @@ +[tool.poetry] +name = "python-course" +version = "0.1.0" +description = "" +license = "MIT" +authors = [ + "Vladyslav Ponomaryov", + "Serhii Horodilov " +] +maintainers = [ + "Serhii Horodilov " +] +readme = "README.rst" +homepage = "" # todo: +repository = "https://github.com/edu-python-course/edu-python-course.github.io" +keywords = [ + "python", + "training", + "course", + "education" +] +classifiers = [ + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Natural Language :: Ukrainian", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Documentation", + "Topic :: Documentation :: Sphinx", + "Topic :: Education" +] + +[tool.poetry.dependencies] +python = "^3.9" +Sphinx = "^5.3.0" +sphinx-intl = "^2.0.1" +sphinx-rtd-theme = "^1.1.0" +myst-parser = "^0.18.1" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..8edb53729 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,174 @@ +alabaster==0.7.12; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 +babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ + --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 +certifi==2022.9.24; python_version >= "3.7" and python_version < "4" \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 +charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +click==8.1.3; python_version >= "3.7" \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e +colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 +docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 \ + --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 +idna==3.4; python_version >= "3.7" and python_version < "4" \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 +imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a +importlib-metadata==5.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ + --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 \ + --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab +jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 +markdown-it-py==2.1.0; python_version >= "3.7" \ + --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da \ + --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 +markupsafe==2.1.1; python_version >= "3.7" \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b +mdit-py-plugins==0.3.1; python_version >= "3.7" \ + --hash=sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441 \ + --hash=sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1 +mdurl==0.1.2; python_version >= "3.7" \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +myst-parser==0.18.1; python_version >= "3.7" \ + --hash=sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d \ + --hash=sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8 +packaging==21.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb +pygments==2.13.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 \ + --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 +pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.6" \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb +pytz==2022.6; python_version >= "3.6" \ + --hash=sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427 \ + --hash=sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2 +pyyaml==6.0; python_version >= "3.7" \ + --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ + --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ + --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 \ + --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ + --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ + --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ + --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ + --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ + --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ + --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ + --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ + --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ + --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ + --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ + --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ + --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ + --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ + --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ + --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ + --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ + --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ + --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ + --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ + --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ + --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ + --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ + --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 +requests==2.28.1; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 +snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 +sphinx-intl==2.0.1; python_version >= "3.5" \ + --hash=sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4 \ + --hash=sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55 +sphinx-rtd-theme==1.1.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") \ + --hash=sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5 \ + --hash=sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3 +sphinx==5.3.0; python_version >= "3.6" \ + --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 \ + --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d +sphinxcontrib-applehelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 \ + --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a +sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \ + --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e +sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 \ + --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 +sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 +sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ + --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 \ + --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd +typing-extensions==4.4.0; python_version >= "3.7" \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa +urllib3==1.26.12; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e +zipp==3.10.0; python_version < "3.10" and python_version >= "3.7" \ + --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ + --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 diff --git a/src/conf.py b/src/conf.py new file mode 100644 index 000000000..cf76ae6af --- /dev/null +++ b/src/conf.py @@ -0,0 +1,40 @@ +# Sphinx documentation generator configuration + +from datetime import datetime + +# project information +project = "Python Training Course" +project_copyright = \ + f"{datetime.now().year}, Python training course authors and contributors" +authors = "Vladyslav Ponomaryov \\and Serhii Horodilov" +version = "2022.11.dev" + +# general configuration +master_doc = root_doc = "index" +extensions = [ + "sphinx_rtd_theme", + "myst_parser", +] +source_suffix = { + ".txt": "restructuredtext", + ".rst": "restructuredtext", + ".md": "markdown", +} +needs_sphinx = "4.0" +exclude_patterns = [] +suppress_warnings = [] + +# options for internationalization +language = "en" +locale_dirs = ["_locales"] + +# options for HTML output +html_theme = "sphinx_rtd_theme" +# html_favicon = "relative/path/to/favicon" todo + +# options for LaTeX output +latex_doc = project.title().replace(" ", "") + ".tex" +latex_engine = "xelatex" +latex_documents = [ + (master_doc, latex_doc, project, authors, "manual", False), +] diff --git a/src/index.txt b/src/index.txt new file mode 100644 index 000000000..05a855ca1 --- /dev/null +++ b/src/index.txt @@ -0,0 +1,7 @@ +.. master document + +############################################################################### + PYTHON TRAINING COURSE +############################################################################### + +This is a training course that will help master Python programming language. From ee9f67fbf650759fdd39e86286cdbfdb52708ce2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 4 Nov 2022 01:54:37 +0200 Subject: [PATCH 004/689] Created base documentation structure --- src/basics/controlflow.txt | 3 +++ src/basics/datatypes.txt | 3 +++ src/basics/exceptions.txt | 3 +++ src/basics/functions.txt | 3 +++ src/basics/index.txt | 15 +++++++++++++++ src/basics/modules.txt | 3 +++ src/basics/pep8.txt | 3 +++ src/basics/testing.txt | 3 +++ src/basics/variables.txt | 3 +++ src/deploy/index.txt | 6 ++++++ src/django/index.txt | 6 ++++++ src/flask/index.txt | 6 ++++++ src/index.txt | 12 +++++++++++- src/intro/index.txt | 3 +++ src/linux/index.txt | 6 ++++++ src/oop/index.txt | 11 +++++++++++ src/oop/inheritance.txt | 3 +++ src/oop/intro.txt | 3 +++ src/oop/patterns.txt | 3 +++ src/oop/solid.txt | 3 +++ src/rdbms/index.txt | 6 ++++++ 21 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/basics/controlflow.txt create mode 100644 src/basics/datatypes.txt create mode 100644 src/basics/exceptions.txt create mode 100644 src/basics/functions.txt create mode 100644 src/basics/index.txt create mode 100644 src/basics/modules.txt create mode 100644 src/basics/pep8.txt create mode 100644 src/basics/testing.txt create mode 100644 src/basics/variables.txt create mode 100644 src/deploy/index.txt create mode 100644 src/django/index.txt create mode 100644 src/flask/index.txt create mode 100644 src/intro/index.txt create mode 100644 src/linux/index.txt create mode 100644 src/oop/index.txt create mode 100644 src/oop/inheritance.txt create mode 100644 src/oop/intro.txt create mode 100644 src/oop/patterns.txt create mode 100644 src/oop/solid.txt create mode 100644 src/rdbms/index.txt diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt new file mode 100644 index 000000000..93b4e4add --- /dev/null +++ b/src/basics/controlflow.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Control Flow +******************************************************************************* diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt new file mode 100644 index 000000000..b49e455dd --- /dev/null +++ b/src/basics/datatypes.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Data Types +******************************************************************************* diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt new file mode 100644 index 000000000..2d5056873 --- /dev/null +++ b/src/basics/exceptions.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Errors and Exceptions +******************************************************************************* diff --git a/src/basics/functions.txt b/src/basics/functions.txt new file mode 100644 index 000000000..36a1acce6 --- /dev/null +++ b/src/basics/functions.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Functions +******************************************************************************* diff --git a/src/basics/index.txt b/src/basics/index.txt new file mode 100644 index 000000000..e59340e4f --- /dev/null +++ b/src/basics/index.txt @@ -0,0 +1,15 @@ +############################################################################### + Python Basics +############################################################################### + +.. toctree:: + :name: basics + + variables + datatypes + controlflow + functions + modules + exceptions + pep8 + testing diff --git a/src/basics/modules.txt b/src/basics/modules.txt new file mode 100644 index 000000000..6e757289f --- /dev/null +++ b/src/basics/modules.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Pythons Modules and Imports +******************************************************************************* diff --git a/src/basics/pep8.txt b/src/basics/pep8.txt new file mode 100644 index 000000000..4f805f71b --- /dev/null +++ b/src/basics/pep8.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Style Guides: PEP8 +******************************************************************************* diff --git a/src/basics/testing.txt b/src/basics/testing.txt new file mode 100644 index 000000000..6507d155f --- /dev/null +++ b/src/basics/testing.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Testing +******************************************************************************* diff --git a/src/basics/variables.txt b/src/basics/variables.txt new file mode 100644 index 000000000..99cd15899 --- /dev/null +++ b/src/basics/variables.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Variables +******************************************************************************* diff --git a/src/deploy/index.txt b/src/deploy/index.txt new file mode 100644 index 000000000..2bcaf44bc --- /dev/null +++ b/src/deploy/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Application Deployment +############################################################################### + +.. toctree:: + :name: deploy diff --git a/src/django/index.txt b/src/django/index.txt new file mode 100644 index 000000000..2fe584b69 --- /dev/null +++ b/src/django/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Django Framework +############################################################################### + +.. toctree:: + :name: django diff --git a/src/flask/index.txt b/src/flask/index.txt new file mode 100644 index 000000000..607e139fa --- /dev/null +++ b/src/flask/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Flask Framework +############################################################################### + +.. toctree:: + :name: flask diff --git a/src/index.txt b/src/index.txt index 05a855ca1..0d5b6e006 100644 --- a/src/index.txt +++ b/src/index.txt @@ -4,4 +4,14 @@ PYTHON TRAINING COURSE ############################################################################### -This is a training course that will help master Python programming language. +.. toctree:: + :name: master + + intro/index + basics/index + rdbms/index + oop/index + flask/index + django/index + linux/index + deploy/index diff --git a/src/intro/index.txt b/src/intro/index.txt new file mode 100644 index 000000000..aca6a9589 --- /dev/null +++ b/src/intro/index.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Introduction to Python +******************************************************************************* diff --git a/src/linux/index.txt b/src/linux/index.txt new file mode 100644 index 000000000..363585aa9 --- /dev/null +++ b/src/linux/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Linux Basics +############################################################################### + +.. toctree:: + :name: linux diff --git a/src/oop/index.txt b/src/oop/index.txt new file mode 100644 index 000000000..eac03d924 --- /dev/null +++ b/src/oop/index.txt @@ -0,0 +1,11 @@ +############################################################################### + Object-Oriented Programming +############################################################################### + +.. toctree:: + :name: oop + + intro + inheritance + patterns + solid diff --git a/src/oop/inheritance.txt b/src/oop/inheritance.txt new file mode 100644 index 000000000..30cded93f --- /dev/null +++ b/src/oop/inheritance.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Inheritance +******************************************************************************* diff --git a/src/oop/intro.txt b/src/oop/intro.txt new file mode 100644 index 000000000..03be8014c --- /dev/null +++ b/src/oop/intro.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Classes and Objects +******************************************************************************* diff --git a/src/oop/patterns.txt b/src/oop/patterns.txt new file mode 100644 index 000000000..dddb5de33 --- /dev/null +++ b/src/oop/patterns.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Design Patterns +******************************************************************************* diff --git a/src/oop/solid.txt b/src/oop/solid.txt new file mode 100644 index 000000000..75f1952a1 --- /dev/null +++ b/src/oop/solid.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Solid Principles +******************************************************************************* diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt new file mode 100644 index 000000000..d9bcfbed7 --- /dev/null +++ b/src/rdbms/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Relational Database +############################################################################### + +.. toctree:: + :name: rdbms From f901c572a93c9083954162dba3518a1cb3ef6841 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 7 Nov 2022 15:44:39 +0200 Subject: [PATCH 005/689] Added variables description. Added data types description: str, int, float. --- poetry.lock | 17 ++++-- pyproject.toml | 2 +- src/basics/datatypes.txt | 126 +++++++++++++++++++++++++++++++++++++++ src/basics/variables.txt | 10 ++++ 4 files changed, 149 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7730312c0..0e93f78b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -150,9 +150,9 @@ python-versions = ">=3.7" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.16.1,<0.17.0)", "attrs"] code_style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" @@ -311,7 +311,7 @@ transifex = ["transifex_client (>=0.11)"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.0" +version = "1.1.1" description = "Read the Docs theme for Sphinx" category = "main" optional = false @@ -560,6 +560,13 @@ pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, @@ -604,8 +611,8 @@ sphinx-intl = [ {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, ] sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.1.0-py2.py3-none-any.whl", hash = "sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5"}, - {file = "sphinx_rtd_theme-1.1.0.tar.gz", hash = "sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3"}, + {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, + {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, diff --git a/pyproject.toml b/pyproject.toml index 8ec234817..f06c2f2e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "0.1.0" +version = "2022.11.dev" description = "" license = "MIT" authors = [ diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index b49e455dd..df4c63c1b 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -1,3 +1,129 @@ ******************************************************************************* Data Types ******************************************************************************* + +In programming data types is an important concept. Data may represent different +things. + +Data may represent different things and require various operations available. +In programming data types is an important concept. Python has the following +data types built-in by default in these categories: + +:Text: + ``str`` + +:Numeric: + ``int``, ``float``, ``complex`` + +:Sequence: + ``list``, ``tuple``, ``range`` + +:Mapping: + ``dict`` + +:Set: + ``set``, ``frozenset`` + +:Boolean: + ``bool`` + +:None: + ``None`` + +Python uses dynamic typing. This means as a developer you should not declare +a variable with its data type - the interpreter will do this for you. Other +popular language using dynamic typing are JavaScript and PHP. Setting variables +in Python is as easy as: + +.. code-block:: python + + variable = "Hello World" # create variable of str type + +Casting +======= + +You may specify the data type of a variable with casting: + +.. code-block:: python + + x = str(3) # x will be '3' + y = int(3) # y will be 3 + z = float(3) # z will be 3.0 + +Text +==== + +Text data are stored as strings (``str`` data type) in Python. Strings are +surrounded by either single quotation marks, or double quotation marks. So +``'Python'`` is the same as ``"Python"``. To assign string to a variable: + +.. code-block:: python + + string = "string" + string = str("string") # declare using casting + +Multiline strings +----------------- + +You can assign a multiline string using three quotes: + +.. code-block:: python + + variable = """Well, ye scrawny mate- set sails for riddle! + Never love a lagoon.""" + +Single quotes or double quotes +------------------------------ + +Don't care. Use any quote mark you like. Remember the string is any characters +surrounded by the same quotes. So you are use single quotes if double quote +mark is the part of your string data and vice versa. It's not recommended to +mess various quote marks in the same project. + +Strings are subscriptable +------------------------- + +Strings in Python are arrays of bytes representing unicode characters. This is +common for many programming languages. However Python does not have a data type +to represent a single character itself; a single character in Python is of +string type as well. You can get the character at a specific position in +a string. + +.. code-block:: python + + text = "Plank of a salty strength, endure the fortune!" + character = text[10] + +Strings are iterable +-------------------- + +Since strings are arrays, we can loop through the characters in a string with +a ``for`` loop: + +.. code-block:: python + + for character in "foobar": + print(character) + +Integers +======== + +``int``, or integer, is a whole number, positive or negative, without decimals. + +.. code-block:: python + + integer_number = 42 + integer_number = int(42) # declare using casting + +Floats +====== + +``float``, or floating point number, is a number, positive or negative, +containing one or more decimals. + +.. code-block:: python + + float_number = 42. # will assign 42.0 + float_number = .42 # will assign 0.42 + float_number = 4.2 # will assign 4.2 + float_number = float(42) # declare using casting (42.0) diff --git a/src/basics/variables.txt b/src/basics/variables.txt index 99cd15899..d5dd7522a 100644 --- a/src/basics/variables.txt +++ b/src/basics/variables.txt @@ -1,3 +1,13 @@ ******************************************************************************* Variables ******************************************************************************* + +Variables are container for storing data. There is no syntax for declaring +variables in Python. A variable is created the moment you first assign a value +to it. + +.. code-block:: python + + foo = 42 + bar = "some string data" + foobar = 42.0 From c84c5583591c31e07978222bb4cdfb1325bf4783 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Nov 2022 16:24:40 +0200 Subject: [PATCH 006/689] Added favicon to assets --- assets/favicon.ico | Bin 0 -> 1150 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/favicon.ico diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..26727d4762173079aa8d81d2c75aa3f2888d3ee4 GIT binary patch literal 1150 zcmc(dF%H5o3`Kt>b~>@b$QhV93?oP25|z4fC@#Xt7XAk;tj0+L45a!^YUh2sO@WSA z--GuJ4hvufU`sK?$TQ9fV6J8CFDXU(mQAlA&pD5%?ytP}jOw3{yJX_t(eJOVZRKH=4qudQ|A44UfC{R>fV g5#wWGZ2W_-eGlKKt#51Kx_s-@Stg&A^LxeK0a(iVDgXcg literal 0 HcmV?d00001 From 20d6dd13f878c443f8ef5b7f404d91a8ff1b5338 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Nov 2022 16:25:57 +0200 Subject: [PATCH 007/689] Updated dependencies --- poetry.lock | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0e93f78b8..020042a1f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -150,9 +150,9 @@ python-versions = ">=3.7" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.16.1,<0.17.0)", "attrs"] code_style = ["pre-commit"] +rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" @@ -405,11 +405,11 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.12" +version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] @@ -560,13 +560,6 @@ pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, @@ -643,8 +636,8 @@ typing-extensions = [ {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, ] zipp = [ {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, From 318c92511f10e1fd8d932d16c13a7dabf6dee5e2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 15:17:06 +0200 Subject: [PATCH 008/689] Updated project dependencies list --- poetry.lock | 293 +++++++++++++++++++++++++++++------------------ requirements.txt | 208 ++++++--------------------------- 2 files changed, 218 insertions(+), 283 deletions(-) diff --git a/poetry.lock b/poetry.lock index 020042a1f..57c1dd236 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,10 @@ [[package]] name = "alabaster" -version = "0.7.12" +version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "babel" @@ -19,7 +19,7 @@ pytz = ">=2015.7" [[package]] name = "certifi" -version = "2022.9.24" +version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -27,14 +27,11 @@ python-versions = ">=3.6" [[package]] name = "charset-normalizer" -version = "2.1.1" +version = "3.0.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] +python-versions = "*" [[package]] name = "click" @@ -81,7 +78,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "5.0.0" +version = "6.0.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -91,9 +88,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8", "importlib-resources (>=1.3)"] [[package]] name = "jinja2" @@ -132,7 +129,7 @@ benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] [[package]] name = "markupsafe" -version = "2.1.1" +version = "2.1.2" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false @@ -140,7 +137,7 @@ python-versions = ">=3.7" [[package]] name = "mdit-py-plugins" -version = "0.3.1" +version = "0.3.3" description = "Collection of plugins for markdown-it-py" category = "main" optional = false @@ -187,18 +184,15 @@ testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytes [[package]] name = "packaging" -version = "21.3" +version = "23.0" description = "Core utilities for Python packages" category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" [[package]] name = "pygments" -version = "2.13.0" +version = "2.14.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -207,20 +201,9 @@ python-versions = ">=3.6" [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["railroad-diagrams", "jinja2"] - [[package]] name = "pytz" -version = "2022.6" +version = "2022.7.1" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -236,7 +219,7 @@ python-versions = ">=3.6" [[package]] name = "requests" -version = "2.28.1" +version = "2.28.2" description = "Python HTTP for Humans." category = "main" optional = false @@ -244,7 +227,7 @@ python-versions = ">=3.7, <4" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" @@ -326,15 +309,15 @@ dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" [package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" @@ -405,7 +388,7 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.13" +version = "1.26.14" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -418,15 +401,15 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "zipp" -version = "3.10.0" +version = "3.12.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8"] [metadata] lock-version = "1.1" @@ -435,20 +418,106 @@ content-hash = "51f6df5deeeab6ac6526e6be2fa9b37d26f6d30651d3d4f7ee661b97d456fecb [metadata.files] alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] babel = [ {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, ] certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, + {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, + {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, ] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, @@ -471,8 +540,8 @@ imagesize = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] importlib-metadata = [ - {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, - {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, + {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, + {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, ] jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, @@ -483,50 +552,60 @@ markdown-it-py = [ {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, ] markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, ] mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"}, - {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"}, + {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, + {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, ] mdurl = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, @@ -537,20 +616,16 @@ myst-parser = [ {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, ] packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, ] pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, ] pytz = [ - {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, - {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, + {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, + {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -588,8 +663,8 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, @@ -608,8 +683,8 @@ sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, ] sphinxcontrib-devhelp = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, @@ -636,10 +711,10 @@ typing-extensions = [ {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] urllib3 = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, ] zipp = [ - {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, - {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, + {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, + {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, ] diff --git a/requirements.txt b/requirements.txt index 8edb53729..827eed2dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,174 +1,34 @@ -alabaster==0.7.12; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ - --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 -babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ - --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 -certifi==2022.9.24; python_version >= "3.7" and python_version < "4" \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 -charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f -click==8.1.3; python_version >= "3.7" \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e -colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 -docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ - --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 \ - --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 -idna==3.4; python_version >= "3.7" and python_version < "4" \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 -imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ - --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a -importlib-metadata==5.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ - --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 \ - --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab -jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 -markdown-it-py==2.1.0; python_version >= "3.7" \ - --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da \ - --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 -markupsafe==2.1.1; python_version >= "3.7" \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b -mdit-py-plugins==0.3.1; python_version >= "3.7" \ - --hash=sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441 \ - --hash=sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1 -mdurl==0.1.2; python_version >= "3.7" \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba -myst-parser==0.18.1; python_version >= "3.7" \ - --hash=sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d \ - --hash=sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8 -packaging==21.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb -pygments==2.13.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 -pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.6" \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb -pytz==2022.6; python_version >= "3.6" \ - --hash=sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427 \ - --hash=sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2 -pyyaml==6.0; python_version >= "3.7" \ - --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ - --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ - --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ - --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ - --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 \ - --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ - --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ - --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ - --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ - --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ - --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ - --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ - --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ - --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ - --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ - --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ - --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ - --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ - --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ - --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ - --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ - --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ - --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ - --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ - --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ - --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ - --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ - --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ - --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ - --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ - --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ - --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ - --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 -requests==2.28.1; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 -snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 -sphinx-intl==2.0.1; python_version >= "3.5" \ - --hash=sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4 \ - --hash=sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55 -sphinx-rtd-theme==1.1.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") \ - --hash=sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5 \ - --hash=sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3 -sphinx==5.3.0; python_version >= "3.6" \ - --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 \ - --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d -sphinxcontrib-applehelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 \ - --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a -sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \ - --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e -sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 \ - --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 -sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 -sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ - --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 -sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 \ - --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd -typing-extensions==4.4.0; python_version >= "3.7" \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa -urllib3==1.26.12; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e -zipp==3.10.0; python_version < "3.10" and python_version >= "3.7" \ - --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ - --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 +alabaster==0.7.13; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +certifi==2022.12.7; python_version >= "3.7" and python_version < "4" +charset-normalizer==3.0.1; python_version >= "3.7" and python_version < "4" +click==8.1.3; python_version >= "3.7" +colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") +docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" +idna==3.4; python_version >= "3.7" and python_version < "4" +imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +importlib-metadata==6.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") +jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +markdown-it-py==2.1.0; python_version >= "3.7" +markupsafe==2.1.2; python_version >= "3.7" +mdit-py-plugins==0.3.3; python_version >= "3.7" +mdurl==0.1.2; python_version >= "3.7" +myst-parser==0.18.1; python_version >= "3.7" +packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +pygments==2.14.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +pytz==2022.7.1; python_version >= "3.6" +pyyaml==6.0; python_version >= "3.7" +requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") +snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinx-intl==2.0.1; python_version >= "3.5" +sphinx-rtd-theme==1.1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") +sphinx==5.3.0; python_version >= "3.6" +sphinxcontrib-applehelp==1.0.4; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" +sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +typing-extensions==4.4.0; python_version >= "3.7" +urllib3==1.26.14; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" +zipp==3.12.0; python_version < "3.10" and python_version >= "3.7" From d8c542db2d0712d512707a214e44165ff7d36931 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 06:40:14 +0200 Subject: [PATCH 009/689] Added problem sets The problem sets are implemented within its own repository. Added it as a submodule to current project. --- .gitmodules | 3 +++ problem-sets | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 problem-sets diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..fbf6f4a41 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "problem-sets"] + path = problem-sets + url = https://github.com/edu-python-course/problem-sets diff --git a/problem-sets b/problem-sets new file mode 160000 index 000000000..738e6d464 --- /dev/null +++ b/problem-sets @@ -0,0 +1 @@ +Subproject commit 738e6d464d7173d5027d6ff882602109f19088b5 From 82fd16d28528070e441b70fa66f754edb84ba9c5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 15:04:37 +0200 Subject: [PATCH 010/689] Updated Sphinx configuration Added base directory path and adjusted relative paths: - added "problem-sets" to system path - added favicon path for HTML outtup --- src/conf.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/conf.py b/src/conf.py index cf76ae6af..bb3768dd8 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1,7 +1,13 @@ # Sphinx documentation generator configuration +import sys +from pathlib import Path from datetime import datetime +# set up paths +BASE_DIR = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(BASE_DIR / "problem-sets" / "src")) + # project information project = "Python Training Course" project_copyright = \ @@ -12,6 +18,7 @@ # general configuration master_doc = root_doc = "index" extensions = [ + "sphinx.ext.autodoc", "sphinx_rtd_theme", "myst_parser", ] @@ -30,7 +37,7 @@ # options for HTML output html_theme = "sphinx_rtd_theme" -# html_favicon = "relative/path/to/favicon" todo +html_favicon = str(BASE_DIR / "assets" / "favicon.ico") # options for LaTeX output latex_doc = project.title().replace(" ", "") + ".tex" From caf77f7d7b9249647f22327c49012b493236d54e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 18:10:46 +0200 Subject: [PATCH 011/689] Added bibliography Installed 3rd party package for working with bibliography database. Updated Sphinx configuration and project dependencies files. Added references to the master document. --- poetry.lock | 128 ++++++++++++++++++++++++++++++++++++++--------- pyproject.toml | 1 + requirements.txt | 7 ++- src/conf.py | 8 ++- src/index.txt | 5 ++ src/refs.bib | 0 6 files changed, 124 insertions(+), 25 deletions(-) create mode 100644 src/refs.bib diff --git a/poetry.lock b/poetry.lock index 57c1dd236..e725373fd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -106,6 +106,17 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "latexcodec" +version = "2.0.1" +description = "A lexer and codec to work with LaTeX code in Python." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +six = ">=1.4.1" + [[package]] name = "markdown-it-py" version = "2.1.0" @@ -190,6 +201,34 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "pybtex" +version = "0.24.0" +description = "A BibTeX-compatible bibliography processor in Python" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" + +[package.dependencies] +latexcodec = ">=1.0.4" +PyYAML = ">=3.01" +six = "*" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "pybtex-docutils" +version = "1.0.2" +description = "A docutils backend for pybtex." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +docutils = ">=0.8" +pybtex = ">=0.16" + [[package]] name = "pygments" version = "2.14.0" @@ -235,6 +274,14 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "snowballstemmer" version = "2.2.0" @@ -319,6 +366,21 @@ python-versions = ">=3.8" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +[[package]] +name = "sphinxcontrib-bibtex" +version = "2.5.0" +description = "Sphinx extension for BibTeX style citations." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +docutils = ">=0.8" +importlib-metadata = { version = ">=3.6", markers = "python_version < \"3.10\"" } +pybtex = ">=0.24" +pybtex-docutils = ">=1.0.0" +Sphinx = ">=2.1" + [[package]] name = "sphinxcontrib-devhelp" version = "1.0.2" @@ -414,7 +476,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-co [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "51f6df5deeeab6ac6526e6be2fa9b37d26f6d30651d3d4f7ee661b97d456fecb" +content-hash = "9dfe764900129c00fa319ad0ed0ca07186e410a65bee83b291a0359f806d3f78" [metadata.files] alabaster = [ @@ -544,12 +606,16 @@ importlib-metadata = [ {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, ] jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + { file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" }, + { file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852" }, +] +latexcodec = [ + { file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271" }, + { file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a" }, ] markdown-it-py = [ - {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, - {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, + { file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da" }, + { file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27" }, ] markupsafe = [ {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, @@ -609,26 +675,34 @@ mdit-py-plugins = [ ] mdurl = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, + { file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" }, ] myst-parser = [ - {file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d"}, - {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, + { file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d" }, + { file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8" }, ] packaging = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + { file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2" }, + { file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" }, +] +pybtex = [ + { file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f" }, + { file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755" }, +] +pybtex-docutils = [ + { file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016" }, + { file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239" }, ] pygments = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + { file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" }, + { file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297" }, ] pytz = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, + { file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" }, + { file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0" }, ] pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + { file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53" }, {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, @@ -663,12 +737,16 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] requests = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + { file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa" }, + { file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" }, +] +six = [ + { file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" }, + { file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" }, ] snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, + { file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" }, + { file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1" }, ] sphinx = [ {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, @@ -683,12 +761,16 @@ sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + { file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e" }, + { file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228" }, +] +sphinxcontrib-bibtex = [ + { file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa" }, + { file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76" }, ] sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + { file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" }, + { file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e" }, ] sphinxcontrib-htmlhelp = [ {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, diff --git a/pyproject.toml b/pyproject.toml index f06c2f2e4..2b5aba184 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ Sphinx = "^5.3.0" sphinx-intl = "^2.0.1" sphinx-rtd-theme = "^1.1.0" myst-parser = "^0.18.1" +sphinxcontrib-bibtex = "^2.5.0" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index 827eed2dc..f3e31cb75 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,21 +9,26 @@ idna==3.4; python_version >= "3.7" and python_version < "4" imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" importlib-metadata==6.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +latexcodec==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" markdown-it-py==2.1.0; python_version >= "3.7" markupsafe==2.1.2; python_version >= "3.7" mdit-py-plugins==0.3.3; python_version >= "3.7" mdurl==0.1.2; python_version >= "3.7" myst-parser==0.18.1; python_version >= "3.7" packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +pybtex-docutils==1.0.2; python_version >= "3.6" +pybtex==0.24.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6" pygments==2.14.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" pytz==2022.7.1; python_version >= "3.6" -pyyaml==6.0; python_version >= "3.7" +pyyaml==6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") +six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" sphinx-intl==2.0.1; python_version >= "3.5" sphinx-rtd-theme==1.1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") sphinx==5.3.0; python_version >= "3.6" sphinxcontrib-applehelp==1.0.4; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" +sphinxcontrib-bibtex==2.5.0; python_version >= "3.6" sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" diff --git a/src/conf.py b/src/conf.py index bb3768dd8..f780e8970 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1,8 +1,8 @@ # Sphinx documentation generator configuration import sys -from pathlib import Path from datetime import datetime +from pathlib import Path # set up paths BASE_DIR = Path(__file__).resolve().parent.parent @@ -19,6 +19,8 @@ master_doc = root_doc = "index" extensions = [ "sphinx.ext.autodoc", + + "sphinxcontrib.bibtex", "sphinx_rtd_theme", "myst_parser", ] @@ -31,6 +33,10 @@ exclude_patterns = [] suppress_warnings = [] +# options for bibliography +bibtex_bibfiles = ["refs.bib"] +bibtex_reference_style = "label" + # options for internationalization language = "en" locale_dirs = ["_locales"] diff --git a/src/index.txt b/src/index.txt index 0d5b6e006..a6b7a1184 100644 --- a/src/index.txt +++ b/src/index.txt @@ -15,3 +15,8 @@ django/index linux/index deploy/index + +.. rubric:: References + +.. bibliography:: + :all: diff --git a/src/refs.bib b/src/refs.bib new file mode 100644 index 000000000..e69de29bb From 832031b21be7dae5c757870a09d26b523f8893ba Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 29 Jan 2023 05:38:11 +0200 Subject: [PATCH 012/689] Introduction to Python (#28) Added introduction part including Python brief history and pros, installation and usage guides. Added some static files to the repo and updated bib db with references. Added draft documents for future appendixes (included to toctree in the master document). --- src/_static/img/celebrate.svg | 44 +++++ src/_static/img/cmd-python.png | Bin 0 -> 15353 bytes src/_static/img/dropbox.svg | 17 ++ src/_static/img/emacs.svg | 2 + src/_static/img/facebook.svg | 17 ++ src/_static/img/geany.svg | 10 ++ src/_static/img/google.svg | 28 ++++ src/_static/img/guido-headshot-2019.jpg | Bin 0 -> 288230 bytes src/_static/img/guido-headshot-2019.png | Bin 0 -> 1180935 bytes src/_static/img/instagram.svg | 27 ++++ src/_static/img/microsoft-store-get.png | Bin 0 -> 20391 bytes src/_static/img/microsoft-store-search.png | Bin 0 -> 456351 bytes src/_static/img/netflix.svg | 21 +++ src/_static/img/npp.svg | 122 ++++++++++++++ src/_static/img/pycharm.svg | 106 ++++++++++++ src/_static/img/python.svg | 15 ++ src/_static/img/quora.svg | 4 + src/_static/img/reddit.svg | 17 ++ src/_static/img/spotify.svg | 17 ++ src/_static/img/start-menu-python.png | Bin 0 -> 73292 bytes src/_static/img/terminal-python.png | Bin 0 -> 20583 bytes src/_static/img/vim.svg | 56 +++++++ src/_static/img/vscode.svg | 2 + src/appx/code_edit.txt | 8 + src/appx/env_path.txt | 3 + src/conf.py | 8 +- src/index.txt | 9 ++ src/intro/index.txt | 177 ++++++++++++++++++++- src/intro/install.txt | 133 ++++++++++++++++ src/intro/interact.txt | 151 ++++++++++++++++++ src/refs.bib | 49 ++++++ 31 files changed, 1040 insertions(+), 3 deletions(-) create mode 100644 src/_static/img/celebrate.svg create mode 100644 src/_static/img/cmd-python.png create mode 100644 src/_static/img/dropbox.svg create mode 100644 src/_static/img/emacs.svg create mode 100644 src/_static/img/facebook.svg create mode 100644 src/_static/img/geany.svg create mode 100644 src/_static/img/google.svg create mode 100644 src/_static/img/guido-headshot-2019.jpg create mode 100644 src/_static/img/guido-headshot-2019.png create mode 100644 src/_static/img/instagram.svg create mode 100644 src/_static/img/microsoft-store-get.png create mode 100644 src/_static/img/microsoft-store-search.png create mode 100644 src/_static/img/netflix.svg create mode 100644 src/_static/img/npp.svg create mode 100644 src/_static/img/pycharm.svg create mode 100644 src/_static/img/python.svg create mode 100644 src/_static/img/quora.svg create mode 100644 src/_static/img/reddit.svg create mode 100644 src/_static/img/spotify.svg create mode 100644 src/_static/img/start-menu-python.png create mode 100644 src/_static/img/terminal-python.png create mode 100644 src/_static/img/vim.svg create mode 100644 src/_static/img/vscode.svg create mode 100644 src/appx/code_edit.txt create mode 100644 src/appx/env_path.txt create mode 100644 src/intro/install.txt create mode 100644 src/intro/interact.txt diff --git a/src/_static/img/celebrate.svg b/src/_static/img/celebrate.svg new file mode 100644 index 000000000..21bae043b --- /dev/null +++ b/src/_static/img/celebrate.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/cmd-python.png b/src/_static/img/cmd-python.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8113576c77500c7d63b1549199c58a782f8ffb GIT binary patch literal 15353 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 + + + + Dropbox-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/emacs.svg b/src/_static/img/emacs.svg new file mode 100644 index 000000000..64afe6f03 --- /dev/null +++ b/src/_static/img/emacs.svg @@ -0,0 +1,2 @@ + +file_type_emacs \ No newline at end of file diff --git a/src/_static/img/facebook.svg b/src/_static/img/facebook.svg new file mode 100644 index 000000000..88c648577 --- /dev/null +++ b/src/_static/img/facebook.svg @@ -0,0 +1,17 @@ + + + + + Facebook-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/geany.svg b/src/_static/img/geany.svg new file mode 100644 index 000000000..7d47d524c --- /dev/null +++ b/src/_static/img/geany.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/google.svg b/src/_static/img/google.svg new file mode 100644 index 000000000..b26d4a451 --- /dev/null +++ b/src/_static/img/google.svg @@ -0,0 +1,28 @@ + + + + + Google-color + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/guido-headshot-2019.jpg b/src/_static/img/guido-headshot-2019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28b0e9bd660cfa676eddbcf1a724fbd6881d0c75 GIT binary patch literal 288230 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%0DURW#UTg;G#Uq{X&royzDeQv-H1Uo7KrS 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≻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

V*i@VeVM)d)eud^iW_yFFRD0t=tJH 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 YQdEZPXIX~+7NdSM|9zeRzy3`84?}#Hvj6}9 literal 0 HcmV?d00001 diff --git a/src/_static/img/guido-headshot-2019.png b/src/_static/img/guido-headshot-2019.png new file mode 100644 index 0000000000000000000000000000000000000000..13c3ac23775967cb0900f04dfd336849ee920f4a GIT binary patch literal 1180935 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

cCt5;e3E3$<+|D08_+fUtV7NvBU#oorZ@@CD3yp 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≫JauM(FK((qRFIt0-^NbI=D(RanNWSj}!F=87!!Iq-17L zG&auuVXDm;ODC+`YI~h~aa~K~^4jNZjnBm6hEB^QNDHYiC_oqLCrKsA z$R5$Y$!hc)ej>SKuiq5SQ}KX&4x&TReM-Co1>KdN3u$#6 zMNKrGwQQ+m({5GAj%=v8D~eyYo4DUkY_nX_9L(+L<(Z}O0@Y#BllEbMv?`}bhzDUw zcpF`dr?ICtN*k8QCN&N!ee|?1lG<}&jb-l26HSunY+)hIb+K3$t!Qm#L+$y51*1vJ z;pH@KTD{)1-TjA}+mwE1Z;NMXE`S66jL`}J?M+rQmD{`T*;+xl8}-1m3FtC9lu?Y{kbH6(5UfXQ@VgJE03TFpiR6_n5- zewHL-BuMh4bHu#s!7oWcf{{Rv09-a(l%Rr3q=YE}bKjE^I1n6&lf!BWIV zpGue%SfzR5C<(0>^{Uqq4@)rN{Xq9kBOKCy0i7(CM2#J{bYfsL0_8CYxenH&@l{P= z0mW`_Ai+IkV}Wm8BvvARo<0NEus}BjhVt12212Xrw|qM3R!lBn&u1l|{)y>!cUv5-ZyvTF5G;JBi`1T3w4ou6GfP#~OO z6+=Ju{`3dLx(Y1m+E@~q4_qfN&(2+dW{q%r#VtOg;}HtO$+-1-FqsKl{Qh=G5tLN~r$9KmWe{$v^uetD}fGICLu$UJ=B$V-*i9u>e)wegC>v^;+qS z0Z$5CYME0)DE|1L|B(dSu!Q|RpSP>4ss!7Jj%Cea;`ej?wkokS7Z~sLS`vVpUZWl> zHzm=iI)H`m;{4jnovjk$4Fs^O`mSd0eeiAD-FYCPT;mi_VSKG-&rVLx^bidRq?G&| z$_?VmzrVk0B*Y_$Tfc`T?;NwWT??>ldepzL=yG6jfl>O-JVEoUAK?^a_U7>%7hUk8 zAf)E8eU`8s07mBz`yKHRTy_^03nVm;0_Fl>xIU+FMaKmm1z$#c3-h(c z8z^UNkxdDZr9Ht}>hOWhMaxm$AK!&YzF@IM$Y~QgpGF1XQ7~w&3Adqy*nHHtMI_)n zuB-hDkQB;QKed?!?j3P!1LE~T{s80#_#Ls`bFC3xHza){q$UAR(aqQ|Bk>mUd_+Zq zA@!eF_V~s_8+4i;4q!2XE=tDfnk3Sk4#iuwk>}!bgxX}Z-bw9~nAUP6dhXSG9yd=J z$=yO;>s0soCmA2!5dceK+TA@~j<2g;vi)8eC{rRGB~@%eVE;Yz)uqa){~hdT#e zt>D><=ax^Vbw9#)dbaoYeFxN&Zo`hAy|9?Bnb8{ciPav87PTjE;V1t|N_`z`E^HdG z%hNM~`-ZLq*o>&}Y3-+$<+5R|rGRx^w5D?}v=5Up@i@(AWph(wZQDil+H*dfy+UCZ zvCQU{&zp5LKh2r#?rr*-vQ|O$^X&ZC*N|!tfuPn~8|Lif)ae*62c8Mov5;#Aor2%INt>>BB+y+^VN9EglhV0?b7lDCc6ylIFH#u~g7r zfBsz0u%gA%;-4Zxo!QP>rCcXD0bW2!SHZD4x)>K<(DH>&=GW)4_)JA%X;@ZpH%T0DV9ULNdv_Bx<;; zDCcoaN*Glt8=l3zCm>R5)dT>Rx>i{7iUdl5fS!a9Tpn}Dgj?7t?L~cR01d5}%X>U8 z$%wcgpanpSsN?m@1u$y0+A5w;eK9y%gLiS9FSS3uwjhP(iPM#JeCjl2Th1rKPX&A|`^&;Yu!s0jhd-{KdaSl{~ByCh%|p%M#fJe{$F-Li!9!6u=Q z=4`I<;jRvlst9A*x4N#jBPN22OXEUDojy4g9B`&`x z02CIOKv~llXzmDL++5?X9`vzBgkS)QSd%F;6qYc2el8%YJ9f3ESgG>@nkYPog#~o( z3y702?a7Ph>UT__zCg)(2j3gF){y5)c=hT#`^|5@@OfuGcr20dY^S;_@cY0M^)YvV zb;f}}nv#H9I@tAW(fLx*-kzQbnD*^>@4yNI4fCOBaXq!0+PMIF(1D0<8 z8`-$;S4(9F{*X7c8vWf2LfE&<@XwY2t4K>fj`8@Kf+3DwdGv$ViRCT6o{&lMbmT2P7)zLN+i zbzkiR&21noP?X7gNQH>aRudf=r0#W8;5Q&lyz+1nY?vNaB9u64b_8bAqKTY`DUbvY zUY69}(L`B1FCHhp5z#q}SsTDh#R)AMp*SSm!`+x;EUZ2(1*VAo)|{e%n*B=n+x&#8(}jJE(1#&s!u7DIHH+v1=O?Z+p$3NdF{%<@8`e# zg?)SS((0!d_Sw&VZliI}rj4fajzp%Qb<_C6D{D1sqHR4}1a@bld&-)zHz-w!Ql}{Z zPN~DS_zcQVlBH@WHXV*#K~Yk_yRD}9U_tvVV$VPS+%9i!Y|t6nZYE(bzxu)wm3=E5 zKePTq^N~wyPo+H9MLLtzy+z*ww_ZU-JorX@o%{&pO3{^>#KfPxdF#&ylJZS8M?8;6 zj7kU!iT`Q>?osgwk|*L7fzorTHCeAFdbW0~KbWb{l-1ij-$Ft0%VbzIN+Qv|%|(-0 z@n)VEA+4Kt2m7$w+bGIhd8d5}k6`_srwu#S(=&-M9`-*W1}O7L zEKArDUUdL=_BDAjh>s_f=lbkqUB4pF&3(IXf70#m|v?e^r*wx54&2R}41AG+3$z5ce{?xX(xV?EsNOT68;pIo~YSSP(ik{bL10Tn?XfenyaD&(wO%-f*bbF0ek?!HmGJ0oC1mThnAU+hpIw}AwL4HSqBMJ`6wuJ?f5gaGefrKdurRr-Ym30Al zC}Hd1Xy1i$eosYWe&4DDO|4qdxdM-FS(JeM=H+*Gb8%_Am0h=b75H7kzoyb! zqC4hpJR)=b+G>|Id;9LK17R%Vo&XS<6CmdttZjHaVBLiN2*W@i$Eprp0KB0g6lILd z1#Ha^AOmF)zma*JxO8I4QP8k|*ki6F5Lg8m;sTGtV@I#J)({%s0K2Hx2jC!z7A=P2 zVFz(23D}o0t!+m82#Xwh6R?Z|h`mULZ{5r+rF$o|xB6Ni_Wy(!et`<@63U$s=MM0R ztVC;Aiw|~fnaSFa?*t%&+WQ1Jut6reW?Xx9A-00&i7Vr}eFw&A3YF_xUbb*9fTB4F z3*gO%jD?Ko0$PM4=sL?}THpuomZ_JUTlL3=DvL61GXblCz{#T3x0sHFkHv!87c+rW z?Td9%eb?5&DoHXo6fa&f4w*ss2fSnXBuvH?nB-hA0VU0eD>QV>d_)X<(C0D&P@)n+ zO!TKc$r`a|Lecalo>)94sQyr^n-YouFG|Ky4IwN*xx`Zi3%?d=rMZoBuI6Q-`QAC) z*WR1Cf)8aWpuJqJxVt)wibv5pg5?#Le({^W=)K-{52WhBq0JH+>v)r!focRO9R}i; z<=tH)uLPk0j0sxClZVipkyjR(xFtLu#oazG9;N*#;I~&PyY>02-~Cp5@6htOlzs8l zmmXG=-^*J2;;mg?Tv>Vl(3;}kGx5E}GGY&(Jhg02bH7^H_2rFtOV!=&wF-9p?2(>B zW9yAJ$_Zkx!=boU3Kbh`JiKS0z(=UP-fq_1vxV=A#eK`{mh9^6t#vx*nwylJfA^gj z`pTaD;uGffW;eCKk(|Q>>hYR&6Vb@Cq6Xj_3c9Z6E}D&Rlo;ZH+5f+s^6*LB3Rz4T?P>-2}B3C}T(L8&?xQ0Muu(({MsWWU?d zXS{eOt_1L~5baWu(V=u2iiQTF^{$TVbes0})z|COcdyr*M78(rzWr%6@yYKk0k_4H zcQNG;ZS23huMf44eNX!#_x`?Xe_sb_XIa8*SZPYCdm3I3v0_nN~Q0hyja zXq32Lu{g5%VnqQsA#mgNPakOX6`;ajESp#=5fHJe<2Aqw@Pl=q*~?Yj@7Q~)q=P%Zd zu!)@3cp+eXBO#p3)q{51TD2<^jBueJVIK*X*m|t8SoH~Uzzc&g4BUXBnRf!c2%@Z& zgILW6U>z5D)^sV*fmMCn8#%D0ZzN2+s9jrkGL%q$;PIrL&OpaYsBibJI~Z@Q=n{ZY zW(?FH%9Ra7FX?Q`l};!qh&dnjh8{c4{46CXUtXNrZ-4!Tb($@&=}&EC+~COupGmlQTzWIzRKXk!9NJJ&fql^%U-vV|NMOecCb(~w**tjNE zRzMqIp4#g48IZ}|MrpzPOmv-SJZ7cJj^%K-6)>5Kp0R!d0s*AVFQD`4`r1LGdw2-I zvIkJmtkqX6@6ZJOg?dTsH_?7+Ypm2ir##qPV-NdtTZ}+ki*?5}Sxmq}0{^kW$P&74 zFs^G%7dEYn#O$drQKTv78JDhv2s)qIVq$3NAYEd**K zx>-u|91Sgm$EFrp%r##V3uOg(!;%jK#L0di)Y?aMzl7#Bl#N?&+;?kfWUc<``UGwV z1=Mg!U&qiK1T7WPy3ICWL4>1_oKKs=t?4K+h$Ck1v2Lc`ht~i;0q-a&Q>&n*BbpoB zmvygcNOLJZMzS-&@cin=mbI3xTRmG31l$1E>}S!ryV{Gd;c>uqlK_4=2i^#{y^CiO zlA*!sTXWi*=^j|h0pYBzF5-ML5)63%;boNkqte9w-l3KD_Ou5mM@hbfsdej3=h>Bm zeYZs8WmCVn5Iv+k2_Xungy?iOTUk04x17d;B80gti#E$Cc*ew<0)J1mC#K>zCokXF z&wuf$fML`3DM{)2lnd4U8kFoyWHl!VE0&8ICu_HKIwQepEFBl^7PSYuu3&`UL8I&$ z0DLl$afMV^{qKp-0p1D0ii;;KS8@C0&wpwAPY&($rfI2g+6tnl#@n~nzZqD*SQXEn z+tGuET3^kecs2WtjP`qbJ3bC#*Lf~<1$@sg&+O5$_IX^qQlJ=q+H5skp~`v>hJEi# z^SWl!*?6Pa)H4U=aXeeK$s%T?VeJ}sUV%oo=OO7LSjb|M${5;Fy8T`gx66<#F0nULh zp#*UEdCfm`fN~d?`u+X=4+_us?Y{k&ZsG&~H~j&}{ip`*-^Q6gv~BkquOHHW$Z>yc zKfV{Vf9zsEw8PuRb?&~l-`{Q9?{44Y?)^S?|J&E5-9GNl_y5QD+M4@z-+oe!hcudY z2dVS1O-3CXODGx(bm98l6)>DhxI+NifOf#ghDn9PaS2K(qc%Bim-X7Eguu4I9@(ll zE}00ASY|>x7T0UZiVo%hbO6<<1W>H+2?>jUr=|cMLI##nTz%&PqiF#RYOVvuV-lh$ z9hOZBh)kB&X|?rzNP?Yyi{jo`v9v(JWxHVw^`#_Gigj@$uuGq?!UI;ZP!=R`01Ei&fUSzV}r zN+cAECCMHNp@zW7+p{+=_+JYUB7Blq4kZTjjJtO#nUes#QO-bXj~+eHZvwh&EJ1V2 zWYfMz%sb;qq(ujXyw|tJMU^?im7QxM=+jseX#4#9)Lwu0t-H*UXo?bgfNw2}A5Wi! zcQybz@ID?~vv+*-5P`rGC6Xch}81ebKUR?WSF&|nfowDgjYoq>-HTFWP5JdQPP6>)(7M{*ltT zB|AI6^6C{CU8h*y5x~u8e~2fD*AOPKSE<^IM@Js!fC4M7`8hv1v0we_SFX6I6ifEq zSHIKmnvd?lzia6E6Vm$5^o*Nyx^{VeCf<$mVX1vE5TD<1e!HG`U2&N$?P(iywC^L@ zXQJc5(3KcFM~6PvT)ybE2Ty``!?WN!0Bd+S)Q#5%`;!nJLZ49NvX^-_gn|j(JEZq% z%VzQp^jT;449ZW+`vJ^RK5!otsVL70LCWU~_VCg34-47%?Y{l#w2xZbw~goD-FEjo zK5t*Q+lS7*-G0pP{_J?)w)gx)*SXvLG4w-D;%2vR_`-{1c2L)YB?{-FVG z+wJ#1q}@6`FXly|{`+>{ep1ad#!I-`0QZFivA%$Z07b8@_d^LflJX?vA|#NM$t_3P zHg17PW&Pofu#d$TOEiM43$*WrEaXW9CldQ`9&x1D$wQK%5h!{R^09!gB^(j^2zZzf zS1*u{B@eJboHj1uB+H2iTw)m@QC1?9v~F+YeW0c<$$${ly&RMJdETzOu$7bW(G(z{ zA6UHrW4MeGlRF!XtS*p+wGmfgt_3KB&v0+f!LrF`<_Bc}NtFP}Si(^{0M<_h84;~n`l$kT`6$wQ=(|SbnGS+t~3FgFW zlQ}pd;4@LbaP1xwUm1>S{x*X4bh5Tr-@WxYArAq{3&38bRJCTiSkK2p+E|j zsY0n_Hv;Dw64Ws-cnd&1xT5rH?Q7$tarJPwU*|Z*ia$jO}**hDs ztvMltK>L*WB%YtY^_!Z{D`1`&Ue+97IU>uwz+*($84GySYBj$nVH#MFE4h+QbbLCK zarfO#opFI=(L2=(u)dA-J2?ybErD<>nf01g_xIez`buDX)6dvuZ|nSp00iX<<70vS z?%3%GS9|)2=gV4Sb;Z(JKzTTI@DmapF9j~bn!`jXVevxL+M|wJ0ZEw1eq?MY{oKvJ zJMrX?x~c`V2BE2FMzj=cYHtgyMb!^m3kWAmHWMfd!k^SXlq&I1Ouxq+?)?qm_| zv2|!|BoLf;dpb2Bo`QjWWg+psi2z{`#f<29MRG_yPof%+<`uBY*p`I;=%j%9N{9!w zzEM`7tmDOca4)R$G3F|f)$k`45Ko~b-D)i`Z37DlJOBlIYiaNdl12EG~4 ze4wo&cfr-^r4747&%mymZ029|38BEVQ(CLI#tW^&5AbGc62@U8S01BVK7O(sB&wg$forbmF)$QTa7vfhDYilp2k_9_>{?L_KqoH`kB4nkq_Bydn z0`Bmmw16jk2k#Sj1Qu=-Q(Y7UTGzPv+FZ||U}$OGR^4+`R4O~pGrQxik7HqY}-62zO|pT+UrwSu%*P8Q3l4f?t%5pLqZx?H?B}Zx%1-bGgq`cIz0A% zU0z>UU-YAmYJ`#{#AgSiO$~LtY}j)F{g%sTtZ_{O(4w9p5k0$VRz7^Fwb9Ire+quP z(g?7eBMx8uo$`Co1bir+6s_yp@GQLBPbJP_xv^+@rN4y4uuv#?dA{Sl!@kCP&)!Dquz&P8u(NvzqrGqU?N7RC&w=9}Za#gy z-NlOR;~&~M_xAamyM1lj-Rpm>{W16bzUFn>e@I8RpSQ={{(Sqq?dQ9%yXSwb-9GN_ zJ?_3f)`xAoeeA8@@7?0>+fTA#+4UI2@yHeuQpcm34SP+GNu436Nq~?T;6fkP+sKma z)DkKsKv6mim+vbHBDlvQm{d{~uiHBqwrn!rWWJ6_m`Di}A%r9(WX*%PPY!J;L3R+B zTQU~3LkU~~31e6plL*oMuH8rgLfCFf0IAOeA_SHb5;{u~%E_ubS_~wRjBSPIton!& zK=P3bvnT?}Iu@%qN$9WyZeskBZaK&$G7e0x1-`KSB_zC{h~VYYrsP@HGkL34!&2fJhvRj)eDarzv6f)G9k= z39DhNmJV&56xc`vJyF@RC(tjTeYjT?Nbgu%U@oltku`p&vTLj5%&pvjfI>0papSmq zx|OF8^EK)ZuN^>4b>E$Q-ev-0fJZFTlml!x>Na2Y91OIZUA=mCan`V}zIZ`|;YfTec z!*WS$C;>VRZ3(>RG=X)C(fdiaZ?m!JEhAtPP3nOfvW1?x z^YK!^NuOi9r>eush5{}tT_ZBq_;2bKRG-7yj0J}?n+iBCMB`!2t7gO^Y0J)n`03h$Rn@e6iIOIMa6kDe-{u^_fjOqMzD3(RV{2RD6wRd_emm z4FD3D4Cs7Zh|?tt1+>>hBUl&Lp|~0Qs#vj=z#6gfQQbEp(CQZUx%ePT0@MZCrw$^; zX9D6WxFh3!vRFI@gk65PCrfsEh2qlNsHp`3esGlMechRRlyAZQJM4U%K zOF@kYs_P?picSLP*i4?mHE~vA`y@0wvhl#W#8mh==71 z_NvvgoAXO6SHz#YS9bmSt@caSdfL|x!=70 zRzxfwr+GW+y|H*Mt}*BJ9HFkf_|FcZl8a@B2Nt?cnY9u^VmM?ceU6d$)b; z_dj&r?e?)_|Iolc&>l)?`9HmXf8XxgPpav8y~)x(6L=JO8A+f(n0E`e9@yLc1d{_; zNX`?WkwBssV1FubfOX{R=F-|@0WPe80tRU6Imh{iz(3%Pm{iF}ZY^^ws$N)OaR22z z;VH{Y0K-~E#%Piv_2v_sN{Gy2$jqxyu z2*h#Cgun{8B@h<4pnkT%ir|FPMpFVfHI%Vvzk2n`l>{l`vIR;u;3;G=tvfaJS$~oZ zrt}w@04(EmFjha@I;{0%oq10}KBrT?JPuxKfJ=EcjaNm;j*hG9(8Su^OLryS+u!l* z{wSqLT(^A|VYQl*m`i|>#94TLxV6fE-Rw1>ANv6>43sx(wuR1TEwGjo0zh)XiGV3q zG?YlhrDI_WYK&fyLF=zB`WWf6$Fl2uto?XYjM%@UvE?PaR|G^4_YXw>n_LipQM@7W zG9iPwE2cCTSS)dUhwf0CV5J45ZM|?%IIx!}g;p(>JlR=TV3N%GBq1ZKwJ@~zciJ2| zpxk}*+bt6m4L{i({;-(bJG{25%Z|Zza zyg>cb!dh%X`PrA@oUX-wVXm?Xi*QZ$G9e@yPduMdUqxf0J#vI#rKLX;%{SgYxJ1K$ z@v=Z!18;-xv2G6FbuV1@pWyxsP z=?0!eeu}X80}3|wA9MKC%ir109zC<3u8}FE)X%WxN<~}FMy|kHh=*MZu;YD$TYE}; zlKc(hYr;#`c6{*E>CyT8Nc&(-=#oJEQZzh|Xup=NKUjJE_+Bn-fBSF$Kkn%i7jW+{ z+n!e=s_UfGN5W|KDkXt@0rzFdD!aRO)4#Uilq~9^&w11`(Tp8dceEeJ7R_eFKRXtg zYu{*}vY)T7>$Vb4d47DPK4q+^H3=>@VPWJ7DdY~-|Dc{3SJrA@+ViJ>?tFFBCpn?k zV%!(+gm(q3(K*-nht?Z+ExgcJpFXx}U}W{nGw~I{ZA!6DhrTx>VLc=HZng1jLupOy z|3v+UH=vYT+0^>IhQ3#Sbq=9syhqUvZQ>2V9$>BUxZ=9vLO!Ry<{BT~V^Y(<@Zu)$0WxsDf*|w4Z|BPe2N z^7T=_nOgup;~xOXbS~-H?zdN&fqvb+<3a^OwNtCjMtSgdm_59iAKNt8Ld2RGWGHcbnea&Uc{_Vg18+-cn zsXck}L|`OtF#)5jgnb0ffdBvi6ycM<0j(uTqzJiSUI3XWF<5hyJ%A6sPwN^etJ)er zAQ)v%P69A7^m7TsB;^C-6Guxn{a`d`7grLtHUEI|Vm0gM4EkehG};>_fB=|V#NX2r z?yUfPXanGm(u5dTXam=H&*ZH2qsBW~p2@@yEp<9QcXfaL>aDx}lNaFX>dHYo@5d8? zH1&hp*1OeRPyUAsF#rao6$&71ZN2WmJwQ;Hu}|2aG%S!<=9z!$$pf;8Q9n33a>2bO zz>Cre`kHFJ0oBAYM?@n4O6rHNl4(y+HXaXvzP8kN)ZCwHzt2}eTWaqF1<)uB#~vpR ze{gnV)6vwT0_;(NxLLMf9nINL;3c572x!mE7G!+a`ALCh(R)yvcsU%q6%plM9@l-m zfMWX=O6*!Nr7`D9HWz>;$=7Nr`d$PrTFGlYBtRkNh-SvYm51F>5n!n$8gsv(K$n1z z{&VjIZ9aV$@mOQ_p1Yk#6V9Jdv@mw3Da{v&5W@oZalMZUDC5%Z*}fOLk7zKg@h0J` z;+@b8^eyz{W!qLm@uTU;UEhVSblpu!OWe+>e~u!6a30PJk7pt#9V1>!%sZ~^A(RQx zsM8bGH&EoUrqEeP^yl)K=l~u%60c!Tu-1IfKFMm$sS(fffDj`17>YOO1LbC4YZr;6 zH2)D>YE0eQwLSjixsAF*%ZN9&2joJTSX|ejBqa2jrd*r)iPDMd4aY4Dt-`JdJ2`D= z`9cEKE75MthV8CK8HL;&r{Qcy>->F+I1s9)2)r z4=tTfTOnJvKehl4GzLb0@D1ay0550lLrL}8!+m^zOUf)j_efMDfS% zIi5}72#Nakyu=>KK?%`fk4|;Zt>O(=fT(yI9y2IhBB8Z)c&6yS@Zy>H>v&A)m)2P8 zqYi1F@p}>dX?<7AvB;3ps~aW$iU;t0yKjF#+TSSw_pt^K{4wqBd3^pM*Mi^PeQm%0 zvCZA%Z?|n{wjKII9lL!jZTtBTo%gYJyFa%Fxox*Uf9xLH@9!M@XYaK#_wBy@vJ$AVa3UPCZvcx3et;1^lW>d}zQL$(U4fY4kR)X*$p}jagJkwa z2*irFvAAypU>br2zi}Nvf#H&;q>T@O>b2d<2*LC-CJAqkcM?TiGLO1>(=PXdhu zHe!s)((G0T38M6y7(W0Jzzl&A!3dDCwH5(v0Av6p#=`yiZGV5?Yfuwc%4}DHvzdLoI7WdtZ03YSn5R?H@^bbpHOu{qno6H5*z@7c8 zufBAb{ILXhGAl;~1c_xVN-)Hwe?Ae2Cze;^CzTut_;A?lfsb`M8(J=(bkN8A=SiwpD%y(|&#Y2?=!xp6rG9x;*Szl7d>pZxizUBbXgg`OpalGG8LM@&p%qPHIRPWa(_J1`G==xXIsP*mY zqN6$6WTpm)mn6t1QV9=h$mBDAEovc)Jl%7IZ0*&`?)%Kz8}EQYx9<1FtMlE|zrJrGR(La)qqBy<;6GECJf(#T+rth=6QffMut;=KuxI79MpZ zkirF?(s+{1eeT%@{Pm<~x<0gkMY$!K1ze!`fmYdLtP}U?2`unkRv?18Be5D;wE-Dq zo%VQoZRL9|L6tLPDLst-1pG#8M0F&U^aYUs$tsqdg;_Er1phppGq; z7S$eD3DgBvLxJ6)%{AVHfD54u!M3h=_?bZB1MORZKoY%$sc#-}psr2l{aQ0eIw!1s zgclIC=uwP$?SG9MrDR0(!a4>4;^GIwrWS}3>Y%9+5N93(+V2}MrEB9~JzsmQxDNMy zNO(X%Yl2cKnurLjQ*i4nX0X({y`K3OT1 zbss!`lGeJovUoCU`J-L&UNWsWMem~T<;3?k&y##9W%1ZbJfmjq`ldp-IB-RE zfQcT>o$k+WuI#mV7tcAom|ByO4c#MUW|wCz_qHJ{0FCHi-14xRs`w&RQm!t(wJge% z@Jciv7foo*<7w;bnU+fwET1Xcd=_v;=%~N4-QB0Qj_TQU`OcQJkR2U9*0tx(Yp9-5 z5pZWO^DKb3hQp%C1@Y}c?QIfRCOyQg)w&YTxv{MHU@DW>(%^5f)G>2ch|k1_$l)*@ zOkDYfH^^MzpAaUz>1Ly`hhyEGovj=1%f3;+{p#|3eW{ld(tW#ce5_d9pHNl3kra8G!bCYaR?Ov6hIEvIV?C>@DcjTrK%MR zRS85%qmFH(aqYqo34m~cjv#1C=#NWC0g!Vo6aw56K^nJQT*cu9ShxX303a-k9z(7B z0#HykV4(ys(MTeOu!bukWA=Wl&%9_@FAzGJ3ji>Udemepr(YzW1At-K0F1*@aF@je zmA;S!3M)6|&`AE2E0Wz@0;hy4>aQb!Uu!&?4he<{x2WNgO%8x7Y60tfS0YHf!p)hn z6*D>OssDV>x&W#{4aC`V{^j+RX9Neh^AOlt+7Pxq;aV_cHG$GXA?IV_Il;NaWWRX! z!mb6bM*@6!J+y8b_HY08SN8Q+uYE0w)x3KKV3jH4Hg34oPM6H@^Llx4W?%lzzq4=t z_A6^%b?w>XPwlgxeQpEXO|?iV0rZOI0I>Jl-~QUY8=!@tP)k5UE`n&el(AvArR!() zD%#20Qy11rf|kfZA7cTtmRtUy5vm)!el3Aqpbzkhmq=DLdw8_3b=zcKXRNrW1J+4k z$J%Ux^p+N&6|Bp%sel{+X0?e2O=+ER=f}c@^62`ip}q=q&Xxl3Rr~z&&qPO>OM$a& zPV1p-Gw-|zcYs!zXQ~~zg&FU<}{}ZLp`9i@xTLW4Ird ze)a=c<>l))etlltn|?C}tb=?vP(QgopCiku^~W6n4)r}0w@|L+AvN=fK=piJt&=P3 z2#_T-*Q=eJ1ygZL6$GmBV9+Xs;sRR&;3up@7!wWj1{OM~SXjT$LJNzm zCfbVun-ivjHB$V>x0k*H1d)4ya*Cb^PCS7M4)7qamyeZPfE8Xu_Bh{{qCG72Bbv}vg0GD_hd5!|jJ4&6A))r+0Yfij03Mwykse3~U(2FaN^qHiM3p@n0_EZD$ zn0WBzxxIY(tpwmy7J^DlO5P4VtY zr(>&F+H&F-7pL#E7jt%WaA?sSrS>%Tte%xc@!|DI`);V;$$7CWUQ}{EyhQma+GC$X zikl4co97{WJD}%yNY6rOhIM5xQ;lMXmjq!sL(Qeu3R<4&IZ7f=a#V~4P3yJKt<}7; zhF)*J{oR^5pi!0JzTLM!!S+Ef>i5|1@3fD7|3lh`aOj5`$K8Ix$8Nv>u}xe5$2A7c z&A+exq2IUdL&x2o)a^h&)@~pBk;V9H3F`mo{rmfN-+oe!GBLCHXk%rcj~x^cJGhWw zg@A^z$3q^$A3+&caop&ZI%cYeI1l^bY^2v@0}Lf#^Wq#VgMeT%f)m#`K&VkMe-f0xVta{y-pH;821l3KJ}>)Z+#qbeaIil?&gim4JSx=yAcZm;iaJEwB`H z5JpYxt^_+=GRY21ygQ|r@L(V=I;44F4oPa4N(=N!_#^ARTRe4Nu0b4W7q5zTcQaQK zJOQvMHm0MM`m?snvr8Kf)US5WM&q`PG;e2D*Y?F1U)b9>Uu#bK_TT=ue`UY?{Bx~4 z$-4sf^UprDXHOnmNq`z}0>A@q*Bj--(#n;rot<7dU3~i4V@sw&ZV|)fcSiu8qk9oz|&Ujc`jf0LJI*uVd6D z^(AB3d_gE?{3q21=o4BYJR%h@*kCLWC_oG_S_K8sS~c}u`)fV1$X?Nk#{d}Zbv?cl0Chm3 z=5CQsdB0c7kxdE$>$`bdPp;jn8Y(=nM0VfZn&%d_=p4`}fH}dEjFmWKWW7jbcPy!X zpeb1Asuryr>R0gv0q)3(q<@;bQO8VcH^&R3*|pH5X^D1C*AYPJ_uR!8a7%ec)`8}r zTk{cO-GWg8dlCmO1-$i{eH0d`)xH8;1K25-##mSYzv6Gi(R)=7?Q?`Sl#)T68_A}$exehs z|KcIsW96PK;OPyIjp}@=0`MGQ{{iSnT3^x-6F`YnOwph~m zSK0#?med|TJ3F(TojtFp04*V!q1Y;yOXA<^qrM~YCmsoh)r$C1+Y+Ie?NrJ(5j~@n z!Fr8HLG|GS(M;1W-=1%j4&rT;UMuZZ{aM6Na@mqyoL{ML2YMaZ%h&H*sglkW{hUHM zsj;@K_021R+CAHU`pm}KgH+iFClj_7@!^in^Xkcqr@B9&dup+C-jX@W*9GjM_{p%< zu(&{UHka3PVPvgN+cL3~eg5QA%NI8ZL4&ikrL+#CVb|J&YggK43q{|XVNoUg_u}%z z|CXT1D0~SvEs9+U_^#)Aex&X3!;+o8`%b(_dq?yz8r)dBQ?q!c;GS&#aoxjVNTj+6 zTN7<80-v3s+k7d7aKgo7|d9@~M{B$~zK!mliCE*=wIPP_u z*u#K?N`&gsbmj?r5I`mp#v5IMT>)TRyaBoFF9dfI0|D?oo>D-B;{gplYA*-bdrJvL z94|prLL!18mM`wNO}d3kH+z&=*NlLy$5%=SE=XtrytaEC2V)2!Sc*88`y;fFXo>8; zToV8cDCaN7tko9>ITCLDz7i4v-&o8!9}o`!1_TWSm;i3ffm;u=Sr=}50>8v>a~>WF z=QkHF5ECg3;{`MU_5rpC^pu6eQp`26NQVVJ5w?c97uI*i)ewkYEmkf#;#!X|hf)LU z#*KtU9MmU^iCZ!d)`(9;fXA{-DKF-AXZO$rw~^LzDL6xUDZv953UTYlBcP~$^t%JQ zywo)$P{#EgxdyPt-_&Ye>I--F_I1O{g-tXErJbss*RC~JGkfvmk#&1*8;_>;@Zm!T zXb5;HB8WvtF@sXZX+%IUl#AL`_geQC0qNRT7ngQ(dTO&y-KJV6z$q5qqx}OTHh6Dm z-!0Mm`-k@U=?i=G_?ZLi=Mtv>>aYIFv(q>0Ez4)i_VmdoRw`HA-IoM*0AR*KOf?+eO`uoZ!V^W|A%Ri_nt-N= z2@Nbmx?jUujka5b@nkqYc>F+RWidE3i@SpkTsH zH6|Kh|1f@%z7aZr;sm;zi)Ik~NvP*Z^|W6i0&&@N0S6gZBH&t`Nv0fZB{c^2Bd*j5 z^?Uby{cQw(6hcGxNxR`n925txIMd!{Klr?8&ycW;do!k1z2V*=fHJJa76kNBJ3L`m zm)8zz13}HJ_Ka>~1A!P}EVs~(0f(YJ>SaUY(UsuWWaX~aO96Iu)B;mcZZv6g0Y5B) zxP7mqqASX-WplP3i>Qlvz0cUZIdBC7z?UR@>~HdLtV9b5t%DZN7VWl;&d)8-7f2VM zn~mD~i&9BoZKq-xSF{OGr(!nM`i{eC3$I4ncL3$7&jovgM2CPV;=+js1|YM+m|MIb zP;B5egwiIIVqVm5^-XUyR)OY3%+C#F#8U+L2|I!B&|l7BZQv>J#_5;@c1xdEUd(e$ zYY@;{uCUDar$*EPuH)2 zUd&~+|2F)7qjU;6EmGDG4-Uo$FQZ?XOwRe@azWTi)Glicd;ILVjZsdCmIfMsJz%_{jE;p4yjRf9d-!U~#KY$J&nxiw4DizWc4k zQ$d|i@-^{PjiXfAvsAt;np@bx!JZW>Rl97QiNlTeG_dH5q}vA1v=CKeV8GZu2PlOuGJ%Ug~hs8Y;w zp`8eM%<;+Vch-`y|M=NsEAN)vs@Co`ES8E|sag=wT3h3?W6z&Hv?tH@?aAXq8wgY+ z6BYLySlZNn^|xPW4VIdtxxIY(*2}jcMCSxNi@A!{p*wc}ZZTenu2AZR8QsZ{p)!(z{x z0!D`tz_-s1{tBO1p|r_)K(aWj$bjy_5KxsAXehf&ICF?+2qmiOHA=_TB`A|II_H+j zqCgXwy{RYtdt zfm9Mes!AwlFHz^8-z(*^J`XJ~!5WZ`^_8{GXgnyd`kl7Z6E5nt`nAW<<844fJd)OJ z`$7yn^}b0?2(3bYDBH+-PajeOd}nxVxc5lfJs_x5FznPkV>|oW1i3!I;fS|CzXX%Np24S1Et_7aXExu0L_+0BJ zP&gA9A<5igHM69~7SK3DVWAaTM&LLofSFv|I2zLa&{#B&;bhe^d%v_{?y;BjiWHN! z)Yu{#Q-tJsQxbEHj9TP`yfF7}i56|3#0X;j=CA07ep7j39TD&@X5Djv^;`>hqksvH zmlhVkqioh(_gIM`!1Dn0Q{8VJ*DO);Pv3`<5wE#UNz1V2KO%mxipOjUKNEk72w+7Q z0SjuL376JDZIRI&>OCOPYkdp-Eww)gIamuw!vopx^quu}o-UqGQbhL2TK(lO9z{N7 zqDziv42&D)7yAVs4xfcCBJfhJIlPQI=tmEZEu#JS^wSqMAxk`fPju5CboF~jd$w-V z;li@oGjZ`Ryb#*0u7yO;f!InQ+U(h*hc=Jvxufwl1ybMr?QiViljj{zpHn3K^W;?q@(bkQj>MKF=JiJmd_>l>?zZ)QtbyLtUmK(uZV(MIL)$N?&Rl4=R`pJ&@>*|&@4 znY|X@MbT9~s))0VJ;7cynzy|@loTP41@Ct+#G`5!#i}k^7;0}6idEnLwd)HD%z~DT zWzc`wRDHuzUh7=ixY@Cc`VdX!ZPXYFbSJbgD5n>;@4kI&hX;>bK|xJ=))plreJz!8 zHeXDgZ;)|58limQCPC_aIrY7VHJxW7UOn32;w5SKoJgiAhbMq9;GW2eClnrP&h#oC zs4ry!_O#OhR{JO(3*wLWR`&b$r`+D-yuaQ)<3EHCx4+T&{X@t6q2{u~t?O*x-~Rit z@9uv8W155ZyY2SHZx8J506%u)yXSBJe(3$}Yi!Tkes}j8w?FgZ^Y*uG`@nVYt?c*h zC)sY!F4kmAUP*u>+00UaH!z-9TtY=OoRhG*5EvN=08KnL4r>k;R%$*^rUQ#;FOeK+ zp!2cVW_Z9y6P{#jAj3lb!?kFg*Lz`Q*D&daGGFeA`MB%qI$0w%h5PlDsOtt(e96cbnraj(^l z5Zoll;7W|!D%Kyu0HPAcNi?zo`i=8n64M1pcr!c2cQbRff6x`T!U^r^=K*P306Na)PxH9mpqzCcP-AP~<0 z;&z#{NOW!4w19NHVBrw1$uj|hfKAkgnEnCaqxqEPNYba+Gx4Mu0p+3q$D5Pix$xHN zpbQAxgTjt06{0Dvr^ZPw-g5!=$x_04He|ToCnb>gwdS~k4>Xt0{=v^}G3;A?+_aVM zALR+qo!CLSBp@Jg5)e=%YqWp??(@y2Kz(}G(wVq`V@@k%l&pGCaga+^=hrXa*zbPxt*C9S1E*yX!Rd-3cO0hfS<)|;vV#CM~NnM`|@E9Y%zr(!b!FfE_fw{O8%&=TYd z(AddifVCSh39{h>BFK^-4JNFZu39ly)tGiXhW?lT;4f|O=#iCo4>v$|I<(qN%LVv+ zE@iQ#MDv7bzL>J=?v7UlX!Tm!7g@Jhk>oCwrVN|}`cS}*4-YLRVHdE+^`J2<@ql%5 zN1)WeH6Adv!ZlU*qYgeU!6+Fh&jhGP;0NstyB!WOjwvV+t?1+p6UL>Ud?Ac?>3;aeUyyNn^7JadQ4oYRTd#-pQc9^7- znL^qw&je^RSG&2Am9*xB$1Jp`Qlho>Q2R?KX!$hfA)5Liykns?CWHRGCmOnZW8qZA0+Xgq!wUiQjP^}N z>$iz3A0(mzlmdmdhP(AHwTFWm`%-&0nbUa!Igv+CT`@UnTwA2uuywa(OYM2Gp|d6d z?GcY}r%pY95tH_~Z?jR;D20XB#XP*!T1G4){;{TPnD&2IyoSVV3(Y?n<^kUT*Cm!$ ztyPG*i3tFU{$|O9t|7*tG2&?u)OxG}8w)pa{bULc0=Tsv4%GGAVl}nJdhTxai?R5i z#;|O|%TOwbhSle=C5#ecA?<_J0%fS^JEV0L$PL6dF7oiNm3S_S0AwMo-vIJC9y|a* z?Iq&av)a9>Rm@uA(*V|`K>1AfFNx;aYXRM>7$;d;YvXz!Oj%O*ng;}tdu;)|l7|cI z6to7BwROj18;B)`*Bh^bwufTr5wVcWru}z(_{idcg!qTZTC{L>eP)Yp(@Oc0yVMsS zJr|8k?Lyyo#M=me8g@pS=d@Kthy9xyTZlg&KY3vZPiz^rKy^nTl~9nJ?LPR_GL<8n zs&CYK4`eDf95!v*OR*%P}=62*B3CExP!Y1>eJ^TFU znuCORXTauS@TZrTIx1|x`1xOommNF*yi`AXqneE;B&LkpXgCvZ?%6s%_Yf0pd5de$ zm#QTr;p$Rr7>+{cYukTt;MF~9?He1`>y`)#-0NB`JzvGtEG3>cA75Mh=1l7s@|yJ? zo|YHy+CA2}0@R|nWHex-UdO$MP{0sgFlm#cWg_04*K;hY{n&TUiRD7HBH9Ur6Q0Wi z`daz(dF_e{yrC#(7m4It0Z$kji5e?=`@a{c@7sO*Q*C|HJ6aeaaae( z0<&0l5xR&4_1I25xRVl?TLKUK9t(yon=eYZ70?&>Ai)mq;aKfFDUZ&>RhK=9MaRn> zsd;iX3CMi`1CpFgbsSb9TzxO=)ES>zF_|_m7e`6C>C%F;poF_idwYFqDS>h211GF8j~_hpdE=V6pyH~`m{EYB3_%EWF9ut= z3qJj4ocT=26$n_)){^e9@?n)4X^wNc2HEQ+`}&x+F17R(KuS15zu$9!=w`HQ)|P6OnZ+CLj0k5wBh7|G!H3_X&pkq`oCl9+k+ zDm2T}jW7=YH|tv}RRq*x>RZ6QF|=q_t6zHACgM}a#JK8rTxap>=xPqST2FE!kij1s zE72mE;{)-e34`0Z*|dnjb2PtExGl9`0JI+F zk<$6%539dIeELXblsZaKd<2^|qxoMnNA7XiTBO)FJ}Q^R@Pg z`cJ7hEcimo>TBHRZY6#b9M7Fkk^z1x+GU+$C;>D#o`6pC84!J=Se=oeF&eaVbW@ga zRm^D81+;=QOX5QR_G-gdZQ+T@)^YLWbV4*Yw=gdGD0848(aZ{Wb@3X?$%S+VUOY>! zUkbRdu`$MZe3OKetn%;_5{r^OT-eR&kT4y}&Mo8Wzm899Uf-R(vO+Rx3(;PsdT4#| zO1v=$dD!r_lu@msA|BTs_eH}oS2~`YoVa2^DA)5n5OxDt?N3^I4eag9SDI+`OY=hC zraCmBFD_2rh|Wc$x*iIaV!7(>-EHx&^>F200A%l9YF@&Lur=Csn~5$XVg}c*UfJ2- z{u>MGb5{JiqvyvED|oJ8LydPR-j2nYt(_@mbx%Fd4j$M|qprO>v3#y9%>~_%op>{x%oC zZ?*I+7VWS;Paf)?3GskV@Q$-}L?o+?ro|xt0`!G49mT0z_C>qwMPB#q zzWse@;%Sfc=O6Qaixcm@|3mGE9C!D+ANzc}!B=m;er$8lPP=;%K7Z)Oe@wgG!4JLe zw%Y^VzP9c5`#+-HXNiXjHhcs0AeJSw-gVC|8#M`$Q#-2eT2g{B$(J_n zy-^8H5dj1V$$mEh0a%N`%6@gv-KwWc0S#SuDdE~(e>FZpCVh0!v{*P`?n@xbrUe|t zYp}*OyJWA&8VaZ)jx}VtQqgN-XC%aqB~)YS4A>^l7T}EF%6Lg|R%_~fEM^)@T0kL! zl|;fBwY7= }@YxWk>CK13yKW8tHO5_8`j^flKg3;^`{4L4KuEt>^AhAl2Z6(P*s zoh3|TX!d}3M6%R(RkMF6qy#AcI89Pow$g3@E$8(={~ zDaJw_VzLiYnuxmALygHxVTqoI*AGQf?p9vWxu1RVRQD68mOy{<>ZM(so!IHS6MJ<0 z+(yGqhV@bW!Vz{TkT{*X)zm792EeJZOp!^lWl-Vv#8c zw8j?b_RPfZu;{M`qF2%ULTeA$66f=|4GO6)a3{{F^D*Mrwf{BdQ9yi4;BqyniB_-N zQzDqic^rOdKCz(Ye6AOP{HzBd8zfl+aFIYx9kw-qQZz>B!9w>DCvpDfyfq5w-mE*f#ct6S)siJ5n)@|55F$E9*Qfsxyqr+F0w4wS^fmb{ zn0FK+Nqv_T9YjQ1mWq+H&)1s}8{sq?;MLJQ#NSzthB%D%1xrYDS?(2KSzr?e;gL->#{Gf4ZhX6(ppeKCF|aCtS!%XywaxH4|6;!pjnL{r5p9zMd8|`+5;$` zv}uEybH)_a^O>~=>|dU~TT}K8K6~Hp+n;h1z5m|3dW$ppyM1ljU3_`>x4W;~-_t&H z&D-DIe$nn;>&Ld=gZ8`a4_$cMk?(7NOea5f%nv>PZh!RoABV$Xv@ZAUzWrp{&GqHl zEmaZ%5n3nXz612JKsy;=c>rUn!#W!gFvr42(ynd7G0A=cmblMH-n(^2twf?Y1T=v( z8t!+9JTnPQ#MmO_ttAwYbPX#ez>Gc1Uj#(leX)d+Mr>RH7F;65YZ05GlywCx`rSWA5ZT#z&g#e)lH z0#9M$Ry9sys_TuGUEehP+Qc(clOA_WEb%0NW9|@ECju;Otq)eMxn3awcPuCkeJ6Rz zYr6xM5TH;RAZ*V8_>nlu83C-MyPcvuz?zKEh@i!EFz?X8)p^7Aj*bPG2AZ3+1kMWy zr73}cxC72cyXA?Vh|T9Ztf!agizPHRVj?%S&vC)VQpUU>@CG6}MgXQti6fzbX02nt z`geb8wVMlT)Glm)r){_z8Qc>G90;EBhuFGU!{f5!zz zo;~~264jzjmLqGQpV&_I(5mICyUqT^FaM$CvSkNuQwg2`TC8M*LlBS6SW$Y+5KKjb zNdc0b{T){bX$jo>07VlP>Ak%@e-+9(+dta3&p-d%9z1xonJ)>+9nI4hzxvAlm;d=+ zTI;5%@1~mLiPf&p?EK`7K>dvbX92lU*F9OVToEb~6+PG9T?mlQtr#Z;SpZys0zueT z0v%)OuqSM%jIdwUJnY)>Vbyjk#Kx9vZ>MO-N4vJGzoFnJeih3)e^V*qSXtwS?<*{7 z|InAJmc=Fjw()e(UiUqzxg>|c zSU{j$%)7OCaMN~AntVw>M*HbTbcb8Gmq!!r#WN_)hEBIA#(aMZ?8Z?-sV}Zf!(}@g zw?s(b51P&h0#3CjCrgV*V(xxSOg`Q|lsTJfzlI;Z(A*1Htil#bZptf$u|zKiZfRxD zhvMo(LN^o-2q%hqBe)@uH4>0Edl65+GA1i9ux*)gfIc8nXVH{#65l=t9d}+8Rb)OC0;^?c+G1tqOq@* zo&b$=;WdPy1jJ+5%TXP_!WCNlH>~|6O0fv;&RMLaW3TKGNF?>G_8Oi_g_Q0c5s%Po z6%yZ`Y+RTZ+KprN2t`{!6OSTIf8(MX=LOkpqku~Aoik8*$MO?`Y6i+%0S{ane& zNdZ54`1pY&66|jTU~EN2$gthXk|x_9=qa-y|8<*=Na}hdL9t7kD{z5@Q$(+#U2XO z$+RQ78i;n5;_E#<3s#oZvy;3UgwFIe_Q`POxd2L)vhyx#wiil8{Z18xu?@uw;qh_Z zLu6=|+Pmi(56L0fLs9j$*YA482fW;Hk4KCT1rx4-UD?8#tsA$pqoBauoxCY{+L142 zj>nGHhZ^`x&DCP6wOs<>Q7+GXj67fUDD-DB^p6(>asx_%`*z>{)SI4dZf)OU!jECq z+u#48W4Ddpw=a17_O)%>_qYGv{{8m(Kel+3(v=uCZ@$ZN@r=phQh}YOk&(bYYP}^Uebt>kk4I*6NXjKOWXR)KiI=$3mmc zL(89jAIFZh4$B^bp4Sg2Rk6b!IT7JN=UhdUE3F6fQ8UM>kE=S@g5M1FrSnF zo{;c&DWQbSx$pt*v(2JC>rd_E=G-m^H{Rca(!PYpkXt_jYf8nXVPIa43D6DTINm$5 zhx^C27I3OH8$M=0D2bQ&%ZvUpb~0%bBZxJ=uX!N(j)N8f6JmRb@p~kY2@v8sxUF7Y zUpoLF3mC=(6i8}UZ?-*zfOE6BUka3yD33&Y#M$re?rY2f5)!nMiL|v_eYe6B6HG#@ zvBr*d4-WtYKynML5ZE;~5}AQJD3M0}<#P$OYXm9yql8(;LPmX*5eSl%@{SAct!B@T z9~|1b0A{X8-hrf*1-hD7E%iAn!8GIGggWlTFmo@~^3|KyzQzs`^92dnj6rnZ7Os}% zB}}4xNWNc7);uP9Amcqr4pID|`0zw~ae-ijVhOIZ1+lsd`>VhDZ?t~Y0Tw`7Z`?Jp zVD=h40fwIK9PHcv!yVhNX6)kSYa29At=oF*E}@_Q?9c4z$s>F4=_7me*$eyZXTNa4 z8U@1T&9!~~_16;Kdv3KuiIT}Bt-4#XgaAABj#2Q$M9Wy~sW;viV0wFUZl~v08fQ=6 zVc8zK@(C{o6dG^dzVqXt6B=F*Ev&tv!-dwuN{rTyc)-C7)KSyGLzZS5c4JLMV zc52gc*Oe6CeDjUH5kR=U>Dy2=$Cyz{tOSxKD8Tf&QER%;jK$kMSH_d~`*h?k{p>aN z6`8kLC-xKIA)6Mc78uE93hvdQg>=_{svVSfsuqcE)@-c(Pf|maJ*@dm=ioV!*KrMv zt=6tvOyERJ!xbvasjewdLI2|dGjYvDxmY$~85;<6%sio+0Jp$rKEK~)uG7e&w^RNJS%H{&#VS$4+!0F*bk!;2RXSQ11xbzClP}@AH zIazDZM+J%lDbX3Z1Oz|;=G;3XfCCT2^M&|rtkTh}kbN@d@3DHLl(bmJX5pBv@e~kU zNAnqhW0KB^m-PgsbuI2Ug?9?*uj5$$Q=bkE>G{8M~|GF)NtjX-DM_1IAnM8zW)b&~Sw z5}~C9#G9xN!Ft1kDAP%W0l+lW)aX_Ow~p4oVeC81F#pbOla;1FG3ju-=b6{ zB^m)|c-^2Z+RK&w*?=248OI4|vtN?yuoYuj z8xn0bYAut``SXeSd8p^Y zU^cLm^S1)&gdqfMZ%1>WYbUf9_YWUxk6$`KCyxalGo$`yFJR^8*-7pXPcVun2y`|a zy3&I^Pi_>-X_iF$?E9s7!`a&tSK8%@1<}Y_&y%M1K+=-&f_vOB7Tn!=7PPyU;;|hY zbh@HF?M?9zLMeiQrLL!axg6=cg$P4iOway__#FU#OvQzML-W%UEoeXK9K3h%5y6Y% z^zC=+i+6ASqlNSPcHjOpx8LJG`0ef2_B+}S#hO3l7~1XQw)eQ*?)KxyG-UI?)3!JM zp&k8L7E^d00|R|u>`%YCp#h; z-CF@5YUl#us7FrRIKU$%!Dw&qzzz;5Efy0HmOv^{LR{cO0l{v!ZA$?Q1R`Rc5u{Km z;G)f(Fm_z05neeiB%v1fNBTqDFhGuZOXxFyFRrhwQmMMdn{i_G!@?exRE?nAqC}6r zlZfr(zY$Oc;NpJlIRGRK?G#E{pRp@fFr<;_j%@B&;6@VQaS5isfK5Q0Ta+YRk-eL1 z0uGjowH5LuuV@z==l}r!^hrcPR4Y%cF=GK}VVxy&f1}m3f`r#^Uw-AT*;v8b5_$ps zxcQS`psnKp`;4X2BSF?&!erbP7XVVO#WhQ1^+V@jNpug5;o1%lk0nUfCD6tMVz2%F zGXb3LU}h%*^0=A)`7i&%e);)l_Qk*c*Y@SFer^BoFaOGunlW}fFj}p))pdP9b4@}x zZkpj-Lg2k@`Ko}?ylLNk_Z!>YtJ=>#`_u*I-O9da$R}Q%?C7`xCnU%dM~cO{ySl8~TJ&F$ zU{6>HG3ARH>n9<87PNMwZ@ms-D|2hM1QM3iavxf^GZcNV)%S$E$(D;1&$-~?3!1zA zo&DdhH*VA2R#$s>qX^;qLxG29PoMhUtqGKzzkR2%Z}x0T0Ek3%K>@&pz$9Rg{XmGs z)5piINTLi>b#LDWU5!a|*4H(Hn!kY77Y_nx6ANuDEwIoVSw!G>jip!nN619$pR1$)Q}cprGYR568KTy}%h8F30;2z=zOz8Y=9)X`i7)_?dlEhb7{@xw zep#r`@HS_Pnj7~#LV=Ko+q~ZQ7bs$wjOKmlZ z#$uuYV%l{K9#O=!Llf%|@#b#eet`#tp)mkD8I4Y8FJCzFHDmmlT*(vE!Jh%nBz_x@M60?!`42LQr1p8;W8&dW`_&yA zsNdvY80%R?NY(-?x90Zco7e6UlN9a1>$o@1tFZQqSzPND()+b$W#P0x5tw(&x%x2~ zjy%+fb9l`K(h0*MX)D*ql8#pl&lR4V&g;c1c)mgpc$B%96%V8PcHjPl+t%8?`Lt=! zGq3IYkG0#!+&<@SyZ!y$-*@cYrtj{p?Dy>_+W?g_fhV-?6mEyb!o{=a$`XfNXh044#2TI zVqF8oon2j9T_C+F0R@35&uM-Az&liV=cyY8cWj>a85RM z3F!Hv?jx{N%I59#-CMVSmkL!0^Wsesb^u5KkaR-A+i+s-ZdZU`pd}Hpez)gf3b$~| z=JhvOMLt~Httz~OC-*-OX`HZIpFC75qq)>#+g8nKEK(+qHKcW}=STTAmof&+YB& zmwLT%fY=uR`}&)&?33r8yJZ)pNM7?wi6<;d`!AkZR08nj%PU*Of&znCT`TQ$^4s71 z$_3HO*Qa*&^;>H-I--xT0Q|167s=F)j*h&9T}eWIPC_sM_VTjkN{vpt=OGa&XEFl0 zj~?t>wOq6!Lc3^+wWo9x<0FpsVDHfD-e+|k?`OVf`}*$a=#hQ$>Cf!=(Gz?A;&aVU zOhWl^W7(nv-J5q_j*7KH;d7+pBC)jQUhAWI%UALO5NXllO5++yK%d%V9+2>@i53Xl z+dsCwqlfCx%!;BhlHa*&tN;Tb1&cP8UEI9!8kkPzK6g#Zunqej0+26cy%s(I10aJ1 z6|3=gzx$mH1fs|fzA^hf6TY!00fPI(m1S+Um&bktcK==kBFx1D#lOm(}g1=Dq zZlhFCA9X$G37REy`7)Ljs1~=-K83bXq4`(@Tq3&Zyfv}}{6u_Zc5`F>H)j@8zpavW zxAN6^p#39&D}KTrz-^wyjZ5*1wXP2cj!Xs?6-_KBBMS`MwrJnjyw|dE^W2l_g|iu5 zAH(9@U7r^Mx${Qbt(r;oNVDjQ7UIhZ`N0)_E{3)OxZnjc6!?i|#9OpJS64Q^dbf#F zkK`?-vA_dKbO(@)i>?5;?8&+Q;t2z=3Ioox@2SJi+>kY$*GPMHUDSBB-`MX7_k_@Q zqMMNT4sPp#Lf)c7@rHcfmb(=j3&hWR0^hw&A~W3eDL3W`=@6L$;^nchubcB@bt9-T z<+L}V>7<1+X-kNXDfNlR1hL~~0byukAijaMn(+bLmw;`7=-GTEph-y5rd%V+J}O_d zE-wUZqxR(a3s07Iczop6X|B5rt1CjplQrR3+OwifLY2r#QYhwZ-tUWlWG%1tIo{c` zgm?kZnnAy5W33+vIU`;nB3=B9RY<#pZBDumNCj6|7uvk^iNz=%%9_|;7OY3&Nwq4>m>=ZwaHZ#=ZLz6+lBD-Um> zKPbNFGa*tg2ZSSfM#l7v+>`M27dRq_n+@$+3(v=wjums z^~U9vI9DuZ0CYef4IvUCp3f6K+}F5hOK_D8=Wfu{C7w%QM$n!~V8C711q=bxumoG& z*>@$-5DSPEpB;y=$-^9F0Ky`GHYebOn>*jT5G%nOV1es4LR_!cw`RZVzyWuA+yU2< zr8TZ@+zN!?c-^?NsP_5s&Y|rT%GT)#Fj96)poCIe`GSN`{SJ_nT;lzF_wJp&IX|_l zcFWchyxmn-0uKqZ2=4^kdyKe1J3vSm@M~-o2J?-JqdwDDEGq~xSSYE#eYAfd05i5@ z{q<5~LtR@y;Pga-yk_xW_rON|vAsJv^EoaH4C)5fK?xyni5CFLs>l=%XuocDY@+d# z&6>nuYt1*{nKc_}EXd&5Y}#F)`Hp^(y&pk#>m7iF*@bgmhb-gs`Pf~i$C^L*VLTzh zFDgOz@u#|;uBmnFVYwWP-O6-*ed(_LC=lW?0c{DpFFyO!Eu|zaDwhfp*yrypxgodo z)3=0x^g#6W#TQ>VFwCS&TFZz8LiH;YwntAM*h*mI>fM?8Iq{rYQx%%RpfAaI2xd|>rf)6N7odc&ST^1v$9w52mKtrs2^ zBxDr8IK8%EZ)T0lmff6RTm9B*P?T!F{ zMKm3?NL)Zz$E{N_Ply)P{z(+Fo`4TU;yNC79x@NkZ6UxG1IXs`mP{12XHvEb=Pi*v zw3YTmP;?nclKW$%>k1I+8iXJF`LK@1O}!_&D~d111(5O7IREygm5+9H-M9eo$PSJUosUw6vYbg- zrC2m_i~s~Lu4;DEXn1vx-ca{$51hYH4(`0yvAXCC7yRbUrA-@M%T#tPsrlh~QLi;D zAlk@=)8d06d-mCLdwKH43IgFMU{D;hPZQc#gz-Sjm*-dZ$)Ek1HJ5!`X?>vEcu`{) zZ=dQOi?9GWR%7jt(2DYy5zj@@YqUfMqBqUmNb^GyQxs$SN5@`UzpMEq`CC*Eqe8ai ze72@@NN}0T1TCM}Oba#RQPpT(3)J^49D$F=1=@$M3`?b{!5?m%L0Sa$1+1Q9WX&dyOY3 zS(oB-Rm+OTQO;HN_N`E@f)9}4mJ?Y{kqHSPDmV{K=zZeQEax7*#%A8N>9+rPJ8x7+u9zJ326(>$jA zcKguHZojr|`~Lg>Zr{_k9pwdc;I;j{ZMWawZnv*PyL;UB^ZR?=TiNg1Pqs}Zyp1Iw zdij?=*={%PaR{2YMk0i{%bNsUoaop)?glGi5+_U-0cg+ja8^O(n4y=8mHhXT59?a`wh3yraU#{>!&79TCGApwu2 z&Pb39NKnI)9gM_XSRV;!{_e}~TzDj3z*_UWvYCXyiN?R!#N!6@68M5v70_&4*DWuA zd3t%}bX6`_?e#aW?ak?Tc5->@04$b?SYfAP0}1FYjpOB;Z|(J)w`Qr39X?}zCFrlP z#3t!No;lsH?A zb?jslS^-d_{(DkDd)y~+RLkc5p52_hvr(sGZIbW_5a0&g)o04tjWoA)0hV{K&h6^$ zwRKx<%SmW|aIj;4{_{`m=%^$CL*o(P-7i&b(CBIJ4ZQT!N-s|aC2$#uM=V#$TXCmg ziFDLrxrhK>P(UH+%ARC8qj?P2#k)%@rHc+GXY-!BOov2=S%IDjG07ry?8-fXv&Q+2 z1+dub`kpLHdmgWWxz=Gg>3F?oc!X!L*55(1ZHZ`7fFoLl!@r^An-`c#cd9k4dYG+=K4HxpD_{vQ84izi566g&?w3o!kX4(g1?UkiK z?1Wfw?SZs_$gI;ep(24v0k>pPdp~Gnjc=`a3nw!Ata;b<@T3W9yo+p3ymcl17q_+6 zebwn(usd?VyA+5?h(F>cPuVu&w?hlEa>L5zt|%b+-&|l37xZW1ZFHj{KOo(}`vKf!D4{C4YL1E&{ zgR@tn$GXMCC^3?vTNF5RTTwz&#}tz~M?4N*gXcp=02B|LrTW#;+K^Q~Lef921Io>T z0A>K|vc@$QV}st}aWSan#7^J5a_^*pcq#GkS`3YAs68nVsktTwKcRU~X}vE_&+N}W z`9$}b+Lv#>);-}ZdIk{^plvx_YV8*x>s+1NTx&=!hGcYVf<;tu>Q?ki|s$q1!9&> zYc56qOY~_1-d>VW9P;w!MEs-Sd13kj<*`E2j-EZzdZulnak5YNzLLdrD`JOxkKM}s z-J92hPI(TUL-A5Kr<+blh78i(* z>fV$XO=~ZaV`1DM2%L}nc}*pfl_q~CT3qP9C^=)nw58((_lAI<-p(9f-8l%Lkh*X8 z?N7aZ3=h7?ivHrccKh?k+U?^%gkiVme&{+MI_}4|&_DgB|MdOa&4ur_?ag@6$=mJj z=iBFhU&lT)sBOD_zuVWl-L~I<;CEu#|H=FJ_wBy@q}t8J<=QRmorVnt4GFUXenR1Z zxrqb-EI~5??2T2Cq%|QUb2F}QO9^aPEaw6#Ugkx@06>}8=WHTvnN-?cV98cY`50XK zX1X33(8)GE1^nt*1W!P59BV;3>sIC2N}yAqdNP+#sp}q8_N|&P+m(cJT*o5?Kqu)5=Q;pYOD z^=3;w+r<3i*4k;e9Ux=9q4xKi)3;WTAdYKwGMe_7^Eoc65>Ahg9%?*fzi;8~F3>?% z`hYc?T^oS@qbK8dtuMw>Pg|OUNA9Sb{hiq=#eXMnG1) z+~f6Ub2~kKCt9G!ci0ory*oLzBY|ctFQC?4f$wZG=ir2-c+^WL9N_8G=k8f?etu>> z%_rrkD0xI;rnEp0VGNy4*IiKKiMTcEUAq#{CxKhJT=ryejBz|C5n$h1H+8SQ&hMd! zXjN-KU39F`6#?~v0PN|zGrPRHwk%d;%@>wq=qD)pgvMtJ(fd*_(VYle$B<(oCIOmt z8HpysqKC9+(@zWZCItxA0&oG1(`g!|h3J>^c}szMtno2{53KzwiQr^xpG{F-5w9H) zI1pXx`Z4XPk>+sY5wTGe>1+$@ehA9Lp@d`gkMWX`8sFTX|NL`nwHxZ|z%l{>(O6pR zj(e-X1|b~kd#Ba1(O~TRl{vt5mARy}Ag=DXukY{fYfq_P+UKkX{ZFTozQ3Byy2i|0 zV)Y|i_QVbz3;YPIZAz<|MK#}%bleq4AzhoKSH$LH^-PEcR_gac`@St;Th@96X9B~T zpSk9NJt?xVD4w+fhLktNHFpx8TSUi%#tVySzsESS)~ zND0X3zG3m0AOKk#CM@7L6ObaQTo4Z-&1EnV6@S>Qmu~GI6_H3zpb6k>PNb4>ln53HAMo@v0P5; zjwO6zN%fzyb?}$4TThn)pIYlsLgS7K$m@avhG+#70OyGMuYHF1O;~-`B5&%UYi`3M z@!w3`lZOeyTPU4#Yb(h>MaZHnjai6wq*q9Dh&K_ER6yfgu{HtC1+E&pS16@>if%&c z-)yb>3E?gRqB-%*pvHigz-T&j9wkE3zS8g7TXRhS`A*j2E6M7v0IXAwkH>|R_*?UP#@eN9ChV`2#CtOhBqF`@c3gA~Mc}QqbLpx$6o>%hc z(wTSxbo}7(K>Jo>&XQy;VuKDAXN_0a53WNxV`jako^hS2?LK>|`OvqDwepBK%Gx6nQGQW8~Ydul|+UwxbuCA{vuK64Gr{Z%}f$6S?D20{+(CSC8H?ckO zVR%d|lG1r;&G$gOz3t@;#VthVE#0ecgJIjo`n%HFi#%+K;$=E;rRElRpiFQ@Cwo+V zOeXLo3HkG$->drv8px)(m0h3yr~m2y`hR)<)qT5ff0FH=|MP$TfB$Fy?4Mz6|ANmS z!<2X1_Z|14-}r9({oTK`+uz;({>QZc0CjJH^cGa#1=ico+navq7}~aDw>xwo};g@>rKwH`Z;}C0MQf-nf6`p2>Z1*(VOZTH2M6lynzG;zqG>j%O2% zY3zMpE=SfCc*Tm3MZF-Q5ZBG5gkpFK;2Z%2_y3*!J} zSkZ7gw#&w~0I~!zfvUK`nAhkPfS~^Pa{=}@uU^^fw{QHKT>(qV$)W5ZYdNm4%=zK| zf!1T}3GL{QySWbr9=6aS#!~YLklKtzLcZ=p9c6L~Fn0*bcN~Wd@K_$QAX_2uXl!xscA9VOeXnnm(`a;%yQtvLplOQMhCz1e3_f zGrMbkP^ipAo49;aOP!4J#Zt+#TI0tr9tl8*u5b$$*q}_*zxr2yH7l@B_PCra4cwI zQ|hW`S64M_wCbWo?G>RxEQ|R<$xEq`lxiZNMJ9Lp04N1m^+X3)pLHn-%<5-DbE18b z&ZRdl#_C&yxb!eFu~`KOramVNdfwUFnRkeP6VKQjARg z#P`xK=-%VXwb97uKv)Xn7;5dvI!}2hJa6a+C8z-QxYjdXyb9Q-6%v8PAVgiuiwe=P)p+d^A32@d10?t9Lzd$5>rzj9L#W5qJ zy(;q2hiE8m%haxix}b0))}16=i%!Q@+Gl{yxvm=&FInk6l&pjwq{M#`@w}~YwH9sT z$qOLTzdt8tmCz>Lc`f6BYj37pBVP)o~?={f!3&n zwN|}m*VfvzlxRb7LAG@EA0bVK@_}pU*r@ZqkVSBJUuzGFmIITSMTN-2zUkc)>xzdh=I|1zZ!V;Q~tk#%hqVT1cFJB92#;sf|h^E^f2M)h{`0&_Bs)jU*ANQLa+(FceX@_idVaR^%92 zYfn=eZmjR{cG%y0U={5xatgrjP^Jc>E9ZZyOwp>ldp4bGzt<_nII!2RzV@6ccpqd^ zF}IqJv=>v+qGgjsSM>1AU|eB6FVbmh+rQoJ z%_BJY<1I&`#c++f}1&6A7)j>q?HX&tH6InIK@oEL(_MK_Dh6fo%8iky~&Z^(#Br zIk3rWWfK9WR7Aikn6x*SS5_BzqfR{cVlF9z1TaB3@+4sD8z5{(!XW)d-C!)T^t0XT z`+0zJuYauffG$8GW5q(x8UiNCB5wi()5*$RDRGltE zI>E%wzP&gTa7j2#aGkaUdFG$_OQ$lPF&-eEDds)fIl?pv*qCG1xK^vHFJv&zYAynz zE5>B@^><%eEFSV$>3kvQv8Cx8Ndi+2Vo@xR1s%)wShOm1X4FGwUI2Z+`ORk|+33ral2xl!KL({%TXYiF7*KRU zzf>FGcN7w2l1EWQHveQI;{X|21E^8wo_fr2(HAb+nRHQLDJ;QV{jD5&7)7IwRczr| zsM{^keKhoYAsW|a02=GhT$72L`9!&MeR1vayX;e{8r;;ie%i<&6`l|c#-69+n?IkRsIY1FHy&}=pCV?Sww^0G|M1J35nwOEl zNFXcV852lOYpz9W^Qpk5!0J+c=RV7j0EJKr>nTFE;81&{C3+4BNab^uIDRP5Dj>QP zPn#_*y3iO*fMzWKh$X&sXo2bjTW5->2lU{mdnSWx5FT#|u& z9Ss=u^0jSkF5oAGWwTsTv>332_SRVE64Rd5Jdpc=IPkat_)0v+!;l0Z0c!v?=n-o; z0Nk_4Ys4YZ(0H`TZ892Z-S8q2t#S^aKM@un42pMa9}HSOOKCiL?Uf_Z4vIZ3wE*KL zi#mIk`sma(N71#^*!Fg-9`4lXHmxWSKN2q?U&is{Cr)QbXefF}WG56Wo)z_yf=zgl z#*fzr$}V_IyVRB|m9f9ZCb=_(=9h;yK2}VU<5o>iu?lk~# zCZ7qOXhZR1EsMrF^1Vzx7?jPaWL|4i(|7|$t@c*8Vcqt~cEnTC;#cGONOLPdE}DCF z@}2$at8c`U_x)M;<=0;s_2DC;p=Q0I`C9n6MuWDV+oxvYeeCn?@9!Q%`$L`oV+Y4Q-rwim%6{K| za_#!^W_@vTzMc!nd8Xg#Py)eJ!i~WDf_Ov$?m^cr1nez90D>|gW~y^M+pT`5Op#}P zme7ZlDJ@J@huomUJ$e=>bagoy^Jr_WeS6bFHwz#8AM0I+NJFiOn1>CRWI9 zN}(Z8##3?27jqJzC6tC&*2Rh^FzH#R1+V~k+y{#a8G-$pong`LcO+O2)!m@Ie)n2`*8;F4S0lT4VgsC5ZLMLwUbE^>NqyA1 zNGQ&#&y39#M~quw5MYf^PGZBp=%^*2e0Fv&J}!_NPgz&sVIgqTZ*II0L`IswV}bZ% z0m70kwcddQ0F>lg3;XiRFE^I1Sj??O%mbFf`b|yXx8cd^>KY6A4@gvqCj(YatX>Zv zJQcuBOXwDT3%p=?Du@e|8r zdBn^whGW0SUa6w>n)@DdWtjGyKV@}XNBv2Oe!Sv><}$bv;1I7UYHv-NeH+(0wrCD) zsC`BlieRjOp8g*TSf6SPS9J>)1)f6!r=yXjsQ;ZS+bW*-(qw^5$VS>rn0e#jjDUMV zeacw8T(za{u@0up%10KgKGNP7=*^ae3}w zjR2ems<{^{6aA2FUPNnS%{2-=)_NUFS)g=e;p$_*&q6dB-ru)?-bYhh zOEd~#)y`ty1;lqf^Sb!fB9hkJ>pjsBC;_LsQGQP#kGJ-mV5RR$~W?vu+Q-5pz=pdfRp_l6)(>U&_)Sm z$QLbAE|{g*pp-3(Zos?v2mBF0KNjCwYwh>MfALz%6pA`dfDgW+wI*R@So69RZ7|MK zNx)Ojk(p?uSj=nRiNA|~?HnDrd;VlOb^hP&Gz3PAqSdHfU0r!HQ?k6nSIO9p;^E7$ ze&@Uu(G=y^&Bdjac8KVky3%(mc{Yf5Kkj?Cz(r#hP#@xxW>@6ZtcpIpw&{^LfShhHz-xwz1A}# ziV|Zbeo1mpqCe8k2jN>{hBni>uLb&x)qUT`>>ca`P_Z`d)pizZfTkJA$A1jQZO0{%I=+$!9pv%C zGEEXWT=*pRxPUg+@d!gSO2q(ncwrsPO1PIS>Dg>aG=~s^zz@*u3c&d_C14|DV0i}g zV{r#`#RcS&5;{qIM~!#@CGm-?XvkUu-z4rqki`;$V1SD+f=o0Fuupg*vqz7f2zd8g zXdupz7<$Ub1tf%ErA?{7bdY*(scoOfIG%R zLa23UX-^*>+2>CmS|Jg&hsOsR&(aza;0_-hT0W7pad&Q`Wx&pEE-)IpOZ;WMZG-8+ z<1s4&Fp@tl5DmE7{$Ie;9i`BcCP5IC3c zj-|UGVVU@HtT3z#uJ8!608_zjygd5ExBenf zUSFMStRcJ6+~JB&w)dNx8#{S>>h~e`oMRDu{l1zBLME^_0m_+M+@2Ar$tKUdbDVoK zNI0cGJ33!0=E{PZfE%6|JX4?xXpuU|w43Wq?Rfw&^X^tj3E9w)XV})dMkEm9nZozk zOiF7#w{$|FM*Cv(9M$s>FsHH8CoH1wCcU0%FR6b3TP-Koq;Fdf0u&_x0`?m~JRtCZ zf{OV6i27I)0LGgJ%V&zcp+_QpOsVgHCzNaO0BDDP4tsq&Iv}Z)_P)jhz=S6ZYc1V7 z;z~A3IMRoy?%8kkgmE+O?O(O^EYtd6BI=2>VZ5H4V@ zy&G3IBH9l#JYxh%lLC2^t6R3)W}4UFSYQY6sPzm9q=wSsQvz7?cHhPVcM}1rx%SDV zHxTG*S_qGs(b}TDwv7Zr76P?nEbj+Z6WS8M57|olHWbh`CIY)!`(#$2Q0q%VyLF>w zORalk))$EG*=*SLy~ujOlc>YKPUQr20?s#4RIJ6bLPPacU^pyb7!WU+Pqf!G*XwFU zhluA1fc1s)quRrP&L+f#{T9$#1p5;U!{;XAdAe63Ec(!;1KJl$0n3Q~1w=D=kp$WU z-~XX>+J>!~1+|w++{gZ3ipRkJsEM8y01xQA6`A$%2*9Gf77&kOJr8SMw8ZKIHT!4c z^(pZ;T%G4rf&0nAm1&HJ(2rCpy8-bi26PRB{vI29MTsxvYRrf2{R`H$Yod1c{;S;rXri9Iw$i@8lTv z#?{&BA1|!mxBK>AxQUjrw*U8=Pn*WRz5Uv@+xYeFZ`=2GfB(=iA8OzC+YfDSY2SA8 z_G{bj-sJY@yT@)D$J~B>=sRAV%U{~!bJ5%KJ^ zslcMPwS+ew%m^BQbYkY>5i*5Kz|cc|B7g{(LGzDbftKInQzZ=H{>fhK;=(r-IF}%o zbHR*+OEb6p0#K3?K(-b>1QN<90Vog>5SBTHdq)L4ub#F%ke#)Lb zd@4W~5KScP`l2pD(rkCHYKI5=Ml}KiYe4_u-o70O1mh-7?B;qUzM}Ar+yW>IJ8#Z$%hOySN};y<^7@9|%~ityC%6VA#{#koCAPp+9A< z>zYl5BO@mR!fT^hvsP37IZ$Oreu_!Q#7YktsVbLR=1^_;UbdDu~9LlB8 z)^kL(9~R&$70M2zGO3KlL)zCGC;ojp6KV@aHP6S^skg0hQS-Qc;-~>m zm6E`|)=p1U-G|Vasn0ixFz67##eQYZ{P`)sjzt|HOa^jw&j!<>E04%uKx{qb!4k2g zhtB}=0GZ4a3WTJDocjD|r(_agBkJkDZatPA&wf`xfg%alL85 zo&f*VrA4&fv6&X5er@4N$7{TkT+!E4@9FnEq&<|=b+w;@`Is%!G1G>E0a`GbvWVta z3v8zTg@+_*8`(Ui?@4|(YzWw$*;;E$o{NQOjFNJzzIfbZWh(*SnZ^+dq%?m5#9HUT zOrRcxfOurEAh4@>Auc_#n0m&1G=L$|Ttxkv2~Y-dSr13DtN^OkDLh?^=cdIEG|yVU zaC2yjX3t^*{)-7#T=DX;AnI6s);KA9NvX`W`1?w0AB-$5B0dw%mUQe=d!lV&0a}zi z#GcPYYfhV@8bTtXDSV6}EOOzl{(JlK5+Jg4W0+%R+ zFV8P*XQwKDG_tcd=a$cv?cn%<_<75dw^2Tly?}z?`tnNWX>W_4@ztJyeZG*k>)Mqo z878_9$tD{&r*`!4x%2;CyQg&-I*8nR_C(h>w@f8t>vX`w08sK(9v>UYCp-0)?d%`9 zoBc%mYv=i=7Sx`~sGleT;n^fE+&w(9*3E_UQ4$EApM34l2$V1Ay-@b1)Q{hO{f$2> zQEJ69Dfhl%@AEmTwakc5lHY)YjM@NBd&Gp3bgtgGbbf<36Z>w(W)go#d6y6$)UMLL zZE1~q&TB|`iK00o+9~Ff&QlB7s>VLBj-J0~=a+VNR`aNWZ5= zKEw3mJ-=|PD&Vnk)Am~1-@JU~8Sb%6VcC3q@W?)W_^EyQ+wW{FqaJ%cz~->@3Gf2saU)(JtO_XkT4{bre#Jb& z2U#avsj*5TK(kI|0a;wENe+iV>vLQw>s-wp08HcVc5uxnLw3^Yn(vK8C2#qB+AS-o zxcacv{7nPyeo1C{+$4#!90)X#ak$l}+tKl%t~+*tc&&NG6&g!RSH~sdQRHh0)_4IF z?C9vw`-Bqi~^qIlyY;u6bimpFY(X7EUKFv@elsr|z zi+Km1Va?6Pot@Zq0Y1%rM!%Cio+Nqz|B>duFQCa>Bdp@Fg2w@h7nC5-92Uld2geqS zMLg3xbAi>`l`(oQbvhEfaWj?}j>iPRwkS|e;w^-G_AJ8t!QsB{5%u+}-CX$|MWIF| z0l*O%kzT1K-!w*YZB`5Ch2Q^7n7+CI$c*10Wz7BoMDsi>dBT1|8}6_4q=vTocLfGm|QPNwd`%oEv#(ot6~#;_KP z9+t7Sh4=Cn*x$GL(Xp)suB}V9?YLXcXN#`QwC3qR%m!RAwmwBTCVwY#kJMhfkt8(~At_LTwga z3*e{nW~r*J5*b^CwU0XuiwK-0#KRJrFXnzdSy)J*KSIBAMYBx7CfS^=^Lv&UieDCY zMfXXY#sfA>=WQvV8Jw+bDmn`6>iD^2A_43L)^M%sT0m`{5`7eknj3-m(A=i$kwpZE zR|3`{?dO4LEi6!o3-@}ZIhanoOke=MufHqt@W6CsD}jG_@M6%`?<5;tSSpjZL@?~R zEmp&cgJe8_h{I=p5_&>X%-OgjJ|a3oaiDn_>U^yAB!t7G%EA$`K4^Mqd9A%oH(o1y zkB)88om%5Ud;jqZf%l?&$PkV((b~jvS*Ljvt>h3uS&2C+jnn0uf$aS ze(>a(RS$Obp0%gK2=(Ikt(@DlldoU88$VeDmfeK~yKAfLKNRiGalx^K_J@ayh+pQD zW#=0YU%b#>j(AP>p=+=_cmpx~&Id&MVkzR6S~ool^0}&e z7d4w_77O7u5wKWV;2pJhWaVL15%KeN)NBlYE|$FpJk>K|(URq|tEcq*Qq%vqsu zU}^C@o{P=em4{}L=LBUwruM~p?0h~d;t6OEqu6q96VcNQ`Cu~qy|OW)=hs%|<}WY2 z{QQgicHjP_nX>K}^epfQJXmVO!Ij-~Yt|gpwFwszuDJ$D$p!*cH`W@|+_KHJFs;+i)7qJh z0#mmv#|8TKiW%E0?MMj9+GH?x%LTwAA>k!3AFB5YONV2UH-mO5P+CpoEvEB`56%me zJlNTHE50q3o@Jgo^H_AQdtLkb-HFwyIlY>C{AXLBGoLBig?=9)SPEpnJHNEXplhWn z0Cyv-J~()4pFH{8{?)(v{~_C0d)T$z(w;pmKeTVZd#%2Q+`4sob>kLA1mJ*#-(SD} z)?Qz{RbLifB5y5Fg+K;?BH@rG!1@xj`HQ6`orv2A;A(RlYF&uoCp$CiK)J7-{Jx#k z>NeMS1FMkjRrl;hfNdFwcp@bfCN+W0qCn_$(z0g1tFbpEgb7&cI^`$FcJk_177;*L z=pGv@dtJh9#K9Ud?7cxpAU>-Nk$@*VT z=n51@lUgs)UR%df-CvZr~sL@0KHJ!D5 zD&q;!TD76h2b68H@!yElcNfqDk=u{l3)xSZQC)1sW=q9WRxpC9!_}TH8BdIbA!n zT-zj!Z_P~C99vMJhGh@LR~8$J{<;ETqQ$5H^eiI4yqpLq2z+ZS8mxt4fZdGmQmcR zp^@fvEMBI)Al^bLG9By+&SfH^^^Mq4fHn?wiJzH3j~JrOL~~*BI(_L0>{x=ZXd^Th zZLXR&7dVV$kG%9-pk23>#uBa^iNA=?XfA`XjD>El)JOGIyg7->^Ui^dG{&`PBrp;v zPwD=Zk_C@;oo7!wqPJAS(we(yMst7yaniR?bg6a0U7j!{%}Z}?`Jna$8UFP?q;cc! zAJ_W3@@O?we?t}=p`S!Cpt)O&J!AcFJh$eE+$aq@5{}V zjfrj&ZsmuEPJ;_uXz!u?879J-jHo?1d}2xc)e2ch`!rGBx7I|@4ADtp=ZVF$dE0&X z%+|xc4eFN`&PT;7^jr}rO^9!XawsKl^qg2(a;IQxly#!bmB#z}xBpUeIJ5X{seLOT zuf30zzpXy*936{4*Q|bdYL&--q5BQ2@# zz;b(rvXXEUJ&&h)?rMJG$*QH`9pQ*&gK66-9r}9XQ4>n!1dQSQGx39oc%|q=KQ8p_ zK;bbPah;KkdRLYUr!A8x>N%%9Bz_zZlQc7IN0o{z$ULvsjcHjP9HDSl!du89noVVK+bMlwh_So%b+U@VQf4A>xAG-eCV}49? zw7tCuH~GGS(C+@ux!dz@|MsEIf9&_$?L*(+KJQL@7!HU3hxhOA+kN}VG>KB$7kco| zXA&4UR%9Of+ZRs3Y;LsW02r(z0|9DW%CYoeNkN!N;Q}jRieva5%P7KZv5>Rf14`Fy z%7~F=n^;>EZCEAw4y!N%Hh=k^^NB|!9@pzyV-b)51`xk#H{CjtipGr+NVuHWdL0LS z-O1RlBsgJx&j=_?X98*x3PbV4CQ+8a&a3NlYt4yS4>_m{3pg=uKu=eFLm8n-FtU30 zC8(0<4dI27In-}I-r4i4_d62C)47a;uxd4HpFMqQ#dO(X(X1UF9J!nN7Xq-kf`p&R z#HzU7tN*XxowzG9^Lg34_Aml!*W-T7cyT?(%^RT$LGaDViPh>&PbhUEfKO>WY7Zm$ zB1i#>x&BB(J9CUBlQ|?wS|MNd^&oZ?%k#nUk-H?5Ko1WA#)>r;S55SuSaf~;bzQs^ zsMG!U_>tC#DOtKTIHWb+*Z5Fs92^|@TEPARmRuJrHLmmRcFQK?p#<-mmr=r-p{{!Z z@~Hw)(RY;IgC00b zl&-^-|KQ+(b^0S~w7MQm*6W)>?PUt_1~dLn!iy;f2<)D9^+{ z+Tv|Pfti{5Dj+$%d}pa}#&cE7TbGv9o(`uI7RVIL#v%2sXoz`<;X#? zv@l8r_`E=~i4TTF1H)QZ#|iZ68gpG@t$QXlmQW<6zH2_2@2TF5^ob4 z-gNU$yheL*F0e{XeUt^GR>SwpGM+YwHlN+I+Wk7!@@raf20JrrLML20Z3(V*yBgxKm{I*^BVknj~R z1r(3$XZ9X^H5$oST>Itv`a*L(6)!1jO>l~6>$zOCW~-y;;7Ctb@wD!ZV0K9NUg>!@ zwN7{J)m=V$^2|OzerStc->#c=izKz7wBHHsq5NYmTM)m?iVw%tHxdqXx{I<|7fC5Q=i zxGOF%9?m@p_`CpoXxiffM$})=CR1!Kw>APeU7!#kCUZ6M<~-B^#(){_NenJ7n=js}fI$*! z<>MLaNua|Ox|GUVPy%8@pt2x=?zph;0wwY7U4fQ&7w4`_Kv*Hc55J`-Nd|b+nE9TV zU1GMe`2OPa7xwv!Czem9EfGuGkpv%V4uAF4mtJCNG@d%JBkuFN@4oYda=5{|u&kFS zgOhMZ9rk{==R)S?<)s5w#zR>#T&%|uph*fxnLC6d;@wH~L-{=1CNsIL9UksGpCj`= z*JpllXGG}%7%rEpc6NGYV_cQhAJ#KpEDE4+O68H^-;+E^xZ2%6@L2x3j^EuWNf?}Y z@;j0V0u~RB4jo({>`~u3VJ}{MYF~f-wF6qNMM5%4vLUp!+HEUhwG$8;iZ)nV))XZG z6$u=0s(%@$6#*d$?SOOuJ~fiLF3G=eF=xJ*Ps+)?dGp5Sl-l5cVb%>r0>F}MJbduT zKKtx5SALW$1$*@P$mtD0Ot?T^fC0Df*RNmuydtcVv41e^`~68wNL~hL6M^%gfGCY| z3)gP;3l?U93Fy5bAVPfkO8drLfJL7Oxp<)PJ0;$Vg^Gmb%^s;@!Hdl8@bN6@cQJ&>i^?#=2%w=b@Bh?Zrl{bo9_F#U1zB z!7Us2b(Bt-V#1YgBh6{+?9v80Hu*?vrtuRNP^s?OY&^8N0C6zJ{#^Jz$4!13-_e)` zwr-wTWEr%K_Fjbb2}CuHyw)Qw@F~7vNn7^Bp9JnuBqTC|FvMC5463u9^fJ*O*znD% z^*c8f)Ump-QH^3Y>01y`uC-hUT(8t$lH_&gnnyr&HenxI{g=r*i=Q4%f~3y8k-T5a)d8(ZNSsu6hMPUl1;j%3 zTZ}LCo)Tf~d%QC!OBT~}W2N7c;$4=C*)+;?XJHl5R3;Sm?D;9J^XbKjct^lJjkp)( z$f(k>bGR#7m^jaC^$Fcr+lBTr&jb`3JNsp8tG^@!r9>us@2gke>G=`$M0dE3r;24S z1&CE2g;=3bu;%Hdd!j^&S$}Tbyn5~XIT+Vo*7)!c>2>>}owWA@E3&qSKNq@90d!*Q z^I5B(omsk2vOV#Q;rz;#fU{u2ngY&C6a%{tOjKpX-KqoXPOWA;J4bpJ72RWl(sJYz zKmkBC7pk}b;8}lM3Zv8wiEuS120kX1E4 z!m3bS;MoF?U@oECX1gK4J#%FoUUA_NIXbAwk#T;u()T3v<2`&bE;@_oeN5mVkBNZR zj>-f)JHxsGe3_Ti=Y6|x|Mj&0!~4JgLA#4LY1_}+_Q&AZyXXF=YQL}3ez!9p>fDEp zx%(a0yZim!V{SKot-M61qBl#2wZvY`^&Jjofb68LjR1wAz zO8A~~QIuCBCKs$tJT%GC5Zn=-9k640)jk6RW7S3I1ng1@tBo~Jz@2hdo@7qf9tn&B zj;Mo8$r->A_h#Q>xdFVE1;P+C>YauIps<8Kjv1+ch%BXa!2qK`T)&FMfC>=+#)z5k zb=&UJkM(gZFbYV*I-bd-+&W%NW~`FQ+fafEf^S2BuqMEPCjsCwD`1$=_yCAxyD#U< zZaqv3)SO(ON+4OeYhy_B*X<5;Oj4jCXK&A5S-p1c!ryqh7Ld<+O>Qj2B!FYgfOSAM zU}-4eL|%Yx{cAuE0uJ*K2~!F!YSnVpYBzQ7Bl7{U_G1L3nTPpu?8osL3orl}B>-Um z?c3Lqt;6=&&px#`CvSCsTqh@f9Wo>Xggc$4&Ru%!epqXllfZd!c<3?A{T8)_gGO>T zEc(>ro#+~GPEOr300qO7C(nclL>DBn)A?lF&#MnP&2=cS5-1SBQo~Zt@6~d}k`n3x z4O9SNPBuV)qp;ycBD4LYLl1QzDIx2}_W))TIgEGXA+Yk=;9KvFu0YkW)3d3B&87O= z6>vH{s_H>NE(HBqNIag7G*6qPRh^dRG@3T53gojH?*}ocSk4oooq>QFb4|_zFW1(r zdB3rC{d*yFAs|L#I_;J9)FQ$wsbs{~638png7(1Dl33jZyv|PE+12@l*EVNdSjjV~ zf(^Pud;H{6?VC+0wSyfA@&dG-t8@GIU;bM=|J`@?_Se6)-~NlgvCFSt+0E;B)_i+z zm*2j0OFEtq%u%y`W20f;6;4yuD;D{ERRm}b?*K|1UR<78SAzdyIq|VGpX@naRDyu6 zSgUWp{nqy!IR}_uEWIKK(SpE6zF={!82}PR61CW=W$!sM#^NdAkj3*EOBFJnJaM{M zT8zD%OL;=HR_(^di?OxFJt4iQ#RMRUcMod52In_ceEQ7N0+b2$V=cZTJmH=Lgh7y$ zZr%{T2`>dQ^Ol?lP0dCY$R=$rAU=vyB_c22D&V8>F2V_|Q&eLR_|)Dcaa`10+5@)G z`^a8afH-XZ<~yyXXe_j}puqD|_nzvyt6|4N{e~^OO#wH75EDomYlW{{7HD-WI1g%# z;a{swz4N6&dM0VMcVvrv%)#DVgrT8Xe7X`aU)osPf|6~E0f{z)7S+Bm{T9&N%>~#< z5(f_qYRr5`$V*u3G}e2*p9&CBi#({kMh=2_x@@6oTm9Djtiw7cVxi)$`V-bTG+)}s zi-4}(Yl|=HzERB$G4MeFs)VkiPKM*!vjTKW#vmTF*8QRa{sHm5aE_b|0^u5ccp`dZ z&#P}#fIzW@_Xm3uo{yIjpw9&U+27#+3I;qjruOdajh+R4D^>SxJX?xai^s$T3^O@f z=sI{pXz;c|8K!;!By+ipXOqX<1IurBII$PcKedDE?uKSXk5m24$CCE-H!nTc#?hYk zz1DbN`|EGN`^tH;n1c4v-Dj%74b?+{;@}U%^QnSlRr4KWq*^bF_2j3`%}$X$a7!}uP!a0KeSvqC0<(7^Q7e7 zE;pBNJ^uq)=kdrPktpG57iX7NDevm|qI-GaO-AL7#cZlRqOjh0w6R}NM#7f}!vV}E zQ(Bo&T>P1Ga^xf_Y8*9f8WN2XPL}ih0z8jH+BdkkuUDca@$_qrYrNk-MH--o!!3v*mirM|FP}vqJR(@jj*+r(1p7+LOkCgxC2&r0kTNg#y-O;j4*)kj*#!=+w>Wr1rS2G z!&1xl2pnkPLqQ2G60%5E29W1iPfn)a5dOF}$Kq~FUGt%Y*ti5E$qN1+H+bsvk}L}W zk$%vx4nm-WiHDCLSwP^bNvwW2V5LgMk0pzEX}9bN@?M?4^M3yS+558}N!RVX6I(IQ zb41QV&3iukoI{FKx72Q`(S`xT7wW%2y0qc8D7ImsZ%DDpi-rNQCANLjSAs8nse20$ zAV{J_vB`7J9;$W?S(RgC%=0|>_pGQqN|kD#fusyeJKx%|Gc)3g?|X;!u6I3al*Kgx z2$TS%jOebVPA%C??QS8O?3 z+4cD)!foGX^i6Sxvgo`%KXvP~+=Uenm`rYJqpSZx=1$L6{{_HRYg^E;c3t%{V6w7E zxXz~q0ypl?-N z=umE;jaJJ;C1geGu@{by?=vpIA&? z6V|NTo7XQ*N!8@xq0og%AJ8|9*vlV3wP|gc`&i{cF{EFs(At84tpcEF4u}kJ zZ^iZx0p_xTO9`cZDvrJb5E1|ry-HwCres~;gXVLtfYE#jShQI`S-BO`B5*I)_9SyH z4;BFzc{hmmn@uT@l<{6xHHE;$UD43&v_0HJbKhu4i7|5Pc#gd+3#VLWb@Hz0tCIN5 z00c|XO||ZG1qPu%T_}@2uqWj;qPf(|Y3l6C6=%tK#ZX7U?yvkaNLscmjGZsv0`oc-Xfo|z*fbRk15GqumWFDsYc#g04fvZtXpms z;~OcJ&5}h^wT(HQk7x4i;ew6%UHos|R{6J{1s@!HX88%=&;WPJOdn5|oX<@r(893G z?@CgpVtVX()^GtZi?B99|4M&Yh<@~22$8lCJ=KTE_zPG=M&2B0a(?Z+$~nT>|m?WbT5J^YpIOy zIw!r{+-PF?9rg=ruvGT{h|WJL51~DHdb4`Lo}b%Z{)t<)2X9_jI-0Zc@xC?Qd}E<; z$dfUaw&isZrf)sFzB+ZfTbjy2raTl%dw0RyivMbV>u;TpQcj51D}kT(@@P2cHet`0 zUo0M2tNX?k1Uj?A@vQ9~Kk|?T<@b2a^ZV_V1(*jZ@*>H&d&X2$gP(J#)9*pM8*dKn zOXt<_oH^^L{1}~flldFDGE!a+Gxojcslc3-D?5PrBD`3kDgV9!?ylXn{}dYg@IP8F z?a=T1&hNba_1}W!cbndScjM~4Z@XUYeV^a{`}XHIKX0D#?)Prm&3Aa^VbuTl?b~ zum#pu{x=6S0*-`ty#$C2o(}G5DX$n@FDi1T$2?uexr@ov%CR3``xb9 z0f)LlN?F0#-famK0R3V*L!Z_*k+qgFD1Li}U?;atxsR&ck`xjGg9lqXb_BpoB7~~k zT)We?Cc>^V_r?{A$(Uz6S0GM8r(6$}6i?Z&n>@dm2UH+fMF54dXbf<%P*cIJhlOSRb;BD^~MAGlmU>9JT6~W-7FwU<<&ILdbSi60&H?~e)9Mc z&kp)n%7B8E1Y2Ip1}@8}GI+-jm^H6C1nFX7+b*xp-O8zF2wZV<%jVNouhp3|zCT+z zFwX&e8UQz0-IY6_$oB;@yHM2{apm~ux)ScA{57* zX7s(Uzx>h#TE%@!a1;=iC&$JEM4ku{gu}9Z`YYdemv}u_)_KLrN-5%r(;%U5o?lt@ z>Kefl0U5wvES4CXF<;lrMG7z~3)%qi6S2zHww)t1@9dU2M?`W_TLWY+t}Z=4gREm& z`lMRtn!mJa9Wy@lSC($MhDPZ}4}rf}Ec;#=561T5#Y^w=9w6Fd;dwRc04?Z#x*k}i zEag+qE?=L$bpfASsVrsC8ju^ZZm-WX*;9;3+2RE_(jmb1m8UB9_voMGE}c;Dw)p&pS1fF-)H^_0G_=hkwmhkgRvI~MLuZ5p53DqXP% zU?KouT*O$PPMx`$S*QpooYUt_+7_y17G|f4CRgyianqK75m2Wk;WH~hdJs@15Imo+ zEeNk!0?I-K?b8H+41i8wRf&L&Ep!a5TJl+jz0bO{mYO4#l$%ZF76AB1*I`r1Kq(?u z0ImRZp+spRc-d0mN9EH}8C!JaK>`TpnTlTyu?NIc!i*=#J``_NhHj<)Qnq{n?lquS zKeed>iXE=kEuci27yl!E#m{8iVi0I}gz+9JcL4H&m9*(-RJ_zQ&0 z+(1#0kj(=t3oQ7ZYr>+pA#(xm2_>Z{fR{k)N}e}|4y6o~5dAcf@-Fnxklhy*9CW zwaVU&nM!-A!ohj{+O~31gwCu#AK4C|F$-U4^&2*(zbd_Xb_yU)WNdf;0J4=onZD?CmLAMrs+*D6(-W^e0Ukr#`+ z$e28MAT-B4MI(~66&kgFaQuFO{I1=#|47^K{oe2WW3X?YU*8I>nyrlOVWpb6dG} zc05F2nDjY_<(|F(fK51{RbzdVWJXpMY2K3vi^@_i_ib+BU|E)0?QOZq^JN5rwF|Ct zXH?Af0wF*^PL^yvQ{Z07tQOp0hyW%qpbXZo&F5P6P4^ii=r#b?N-8Heb-4z1mEZ=! ztqhP<>|8t{t76>ZNd$j@#vUM009!J834ue&)IL6bXvJ8@s@F|>`s$6fF6)M<=N1G3 zUkOagATO|@u_~5PpyJSDySMBR@S39U0)l0PP`wuh+G;F{RbFzhgT06L>gBopvw!(7 z5ONV{c~<}p$;G_|G~Q;nZK_Ex%Vig#RbCAOGXkR;vxFg8rxiyktGd9|o3jg#Sr_0l z0ELtca>ETp5;mGFJjU|svgUKHcv0yaR31!qxnI6|Bz)RLNF(4ig&PDjVb_RZ6;-0MJP-ICCV z#wP$?K)}@;Y7X?Q7~lc9&VLuJD4Y7h@sWF6NcfY0tJr;kU2bmaRF?S}ySIZZOaiW= zjT?^-&7tmp_WIOR&wnDppFYWbR=ELE^z-@47tF&5V5xfeX?ywN+mu1a~yimRlLSJj4Pwzq8e z$z#t9J_NvLiX}U#GOzIva})RSaPe#b5K~aW2nW>KgBPzZt;c*7kN0d2P>H}3Mz1d{ zSSeU2&WpKMY^@FF76D8w;Y;&{@=+Xm`L5ZpZRkX3u`b3*ajU`0$LLAIl0pJp?iovx?H((ahU{cGY>=PJXtPTBAm3)*|`O{hm<3+ z_E>4zY!=vL$DdF5&QiQG>;O+|t-U9DP~5t_6;{lBc&!izcmsS;^RyoIY@ra1b`Khw z+bj<_&ZRB1w`=iI#jHDVYjIi%G5}Rbz)U#?VhEe`Q!(o6c*1$;3jVDSsu29!`a=u0 zI?R&FelmLcp)dm}MwJso2}QL=3Qh7n06ar`M;;8oMAk#@_RJS_zMMhxwQGQ6khv(> zILQ88&nzM!4LwVFs>%xD>k1V~Grt1>ujp6cUZD+NKmW!$*LBNellJi5eY`_V2NCW^2pqHnN6qysw(m6aYtTj(^&eYnL zh0iS`6Z+cma+OjvC*d6lctq{|!o$u~axMhTCgFuU@a`>mz0P3eiV=X<+{WUp-C9by z6`)yOay{mwXmjQ=9D>Il9C>bzDSJOoKjX|}Jht&P$Q6ptFT$Lw;#VapCFXO_@gXmz zv&&Oct$BIfsnn>#;pFL|b5cB9I-@>(OF41e-5;K=B(Do8{OOw#Ws2u}m5IA{*Z$LN zjw5el+uJx)zu*4*|6iJ$$8I`()5)8T-X6^R+U)`9+Mjp5+U@(l+unWuefQKg;c)nO z-~M^m?%H>*3HazW1_UdCm`W2VkquHULXk3yPuxvVT6eduCpK=fvYtpV6cA7*Ssl&- z1`_54nk29(9#Ym20r!OjRD@!=W$XL8{$@YQ9akB|^*vb+B)sc0S=i)uC*eT$QY9KI zAk?U~`4U0s;NZaGe8*$N5gr%QiCaXK%ltB1yc6;^(0^aM>GaDjI zp0=A-<)u30veK#@a!=I(FK<<>q-^F0A@U~Ba};wfppyh_DM6Yn!~5Gic5jD%MA8Ui z1v@{xw(F}4%a;JDovPn+whUPVpe_cfu@$-R(cUI;SXA+d2)lA)RxG{p0BDZIn=~JC zX;x-=Alu7+x{m~ygfYrF%D#SGYj}bsmCf5iuvZ=6FTehR{+PQ&D;E3eVw25SX_@j zBEU~Ej#AzT5GhHV3%vjiB_&hS+DoAjM@UqBysTh~dzNdb67D@?ebhI(=Bwua(a}A? zWY$!FUkU{ES@+O$)uaSc|7)ig_9y@HkF8a$Sp(1rxmdZpWhv(J_~^bJJt*48-}}It zjhrNA6mz`Bid2&7J5>ZtiL|z>{(i$eq875Ux-M(V~=8;scHA8X#*X zoZ@t$vFoQ4d9u0n0p}BWc*;NEV9y~jR+4)X{5)?r+Q zdj}RBLpO|1io0FbDHx4dDVetk`#QuPToshHTJ*KH#Dcz0Is2ijNEf~Va8`1;iE=@t z**hVCcQk2{@{X;BEn5N>wZ=1rjId6subuz|MM4>iZXa8?v}3UpfE+%hWO9l{UNV27 zao;V=iU$t@tfK-T%u5*l7-7FHr-1Ke8~_uu5a2UTFT(U$7I(RU&sIH)1yyUjZ{uFm zmh1~zrPqKtl?{vY%pvO#$X9Hh2Y@l}f$6}e2G0cqt4!hq{uvLhECQeo7jm`~z@#7I z4FT3-4e!+VU;s8|E=`I`c{ZdAfXRsk#>`I~ek&RsDz;b_^0-YGA)D;I9OPo;jZHBz;fA|3Pzd zyN+fVTNpk+kmn1aaw4!VMJG@{n=;ZaO1>leL)PZELUh^svjaknv(ZO7b zxeHi6m2*CvF6C_mNSD%9KvSV7Q+QKfv=0p^)N0yod5)5;t+I96R~CmSEIM5aPwB^2 zfoq@(=03igHzZNmZ&DjuxKPo3oDqipso`onp0I-}+<)P8JU02U7mDvK2m#lX6 z+Ma#&BhHdN&JDBIC#UeMD_7ujn6LBmOF#Qm?lF}tIuFvAC)2J}I`D=h>pFro6z8t; zZky7BQ)nitP0T$rtj$V_66S5l`4fl6ij^%_P6)uOT@5>?Tqi06seR-XEZ&B(NNFOu zV8wmAy_TN~n*^i)dw7m`yDaQ#;$g2}o$%nhcGv#XYHx9*EEzwu>HN~`rn&6F>o3x7 z-|v@gKTSmUzV@?j{Oyvt6f~L z6%#w13_ad-g;1s@D~SXE3H{2XJ(+JTCCWbQCAK((R|u7=(cbE}tvl*?)?k4ew}b(J zCQ4d^P`?i7dk8?Wpo8ut0<*{dtygZH5y%D~A;6_PzELrp0{;@q66|5s9$Lhf0HUOA z7js_rNUnTGMZj{p!3#%i%D4toMu+yjSfCLG9N}$tdcdUm{A3>l>q$3E^ zYtMKu>%yGp4X3J|4f93d-rw4@sBD5&x_TK)!efZ>|eQ@tFf>p^kHPhWu0!* znw@LrVeX*^6}}q>w9!F3d-KX_)k_53GaEx2d*ve^8|c#Re|l^WK7C@1;mm-r)|<}l zi!Z-+AygpX@MsS~IpcBiv2@Z(%-{Wwj_k=NAGi>@S^}t`)jdGN0RTH&l65TNWusm{ zJ+qfzzV>*1B}7yl?Agl;yMB3Xr{@U%(~(60qH^Iy{s%x!w2YQ01TFhk5SDeTTkCDy zh7qQlS8zWwHeT!@#Nl0VyUH2;Q*_H;SxTx2UBv5m&0b{OZImU%vLz zV6Ce&+pFYk@1SJGy|SgY@)l=bNpKGXoaAPkDdgR98_%$A(5Ff}s*GR=LA-RZYeB#e zOv5tl3%R#T^ROJq(zpf~0>ly-JNV>@CE_`QaoAbojZNVJr`NCTfc4Gi%APDNvYoX0 zs|)t^mMsA4y&13W)V3ZSSbDLt{8D3qJ_Y>J@C@d5-mO|7B@YwZBR=$f=dEYI&YiM|+By+Olrz$pW)lKEK=Hf$qXVPr|ej*#C z3gBbuUM&log#anCRyMC~RtFf*;d{d-+aoKLqD{xGjpbQZXLjvmv<83!>Y3YMzix}Z zyqcIl09&{*}L%BWwUP4)ePP?wy0{;Lu^5Sa(KyoqzvM-Xs2f}#x#d7ExQ*M znT9O3y~{krYz;q)&8N16-jqx)9xI3mc?rj8I%m<`wv7$opW?oNP1TB*@@`3A){1XW z#a+py*zgd*IF!*OWE}$ zzX1-*DY=D@;n{PWaDfzfSM8cTx&PR%8rQb74Q;bOve06W?>?`dSuhr|4E?Vv;pS-O z3L=$>%O=w7xw!SGZFmajMI_;SfH&C%29FQf0DdcFi(KIo%NUzAYM0d}0}vk%TPB#b zL@sOH)|JiS**W^2%on^o+yZtKhdM&448T8m=M+m@R_ECh_)#dFvO+uy_#Qe~_au+& zv8hUeN>yH7zOwUgo>}Gio~0}B4DK~&4(h!I^EQQ-_bkmBHtIAi$$2$hM*!q0WAd5P zqAi%S*`jNiT$ro&+t>fHO)|nS)NVig7kS{#H8%se zX*UDW>)rd@ynoZa<@dWXZ+GoG+vKvRgfdEYHUYRV5C#yv5xh3>iE_V|R$ng(gHq1l z>@$7t$+7_U((Ws%jp|~{q#`gnRl+9@XvG=ou$If+Vm1eOAzXAQFkV1y2Hpk_yRXS($BB#ww=-N$hD^LrZ{5CE(J%RA*V` z+f)}_y;h%drGn+H+r!nJ@o3j$cx$wex<&xd)0_fXa zs{u$<$GB1itml}kV%l9z<*KPz!pU@Kz5dYu&ZtZh!lS;=1pAm($6E7g>xCr|Xca~v z%j(P5uRPPRtld(m$h}

+gPRw-}$I%#cw@Pi*%f7G?vT$!Nd@*OtSE#E0-t=6wu zDFqrw!%UZ*^ej96L; zuM!b!vbJ(@ZFL5Ab$Y>Cw>&9cD#N^;oYR*c*EDT70OYaXPN1tHAT-T$!>pOC`sIUt zudHy@Y`Fzg)euxlO^cr|ZA#^_L%g>80-+hn9D!TbVf!B(xj^2iUfcQWH+J&P zE2}CwVjsGM9;DzNvbL&m{qp$>r(wBTtMpkWp0=%G+4i<}Jb|4&Ei$an$&2UEyDXUE z4@;{-k7Fc&U0KZ$(pSU2HQ5_pbAGk7-Lk3?R4kzWmXGY}Sia zCCjs~74t1??yLb&i$~motB`_80x(!&Kg@fese>6z+9 zEBWN2S+y|$cs%I>MgX;pL!c%K80%kMS`hvrpd4vcZ4m-+#G@8o^ej}00WeoKs-Bp& zF97@l=QC0+2Hc_#Zv(m*dp90Z*|?x|CV({H8N5`qrc_V_jVX5W@if z*)q7vz+NoSzqm!$F`F@eY{pGC`ULZ*HOnX5C4I>ri6%21M$(=1;k)zAGe!47`T+kG zeNSr*cd?H#{t$Dgq;SbO;~xg$`zd$-5Ad1z%z8AnDD$Rh^r_tT6$=i}mdA{$j>M&8 zf^SXd{7%2rWHDAu^@24W!>_`8KO>K#T*gCaq-^YsCxB9Mj39Houy{c6*fTpgI)o)f z;kRS^um7w6+Ma&-wS+u7-rI%Kh#Sy=2%<|^aR@K?AvpyP4!eb`RQxyUx1#L1K z;@sNeT-fJ4PT8xIr}paXwYAyD!+8_l`_fL{d;{-Qxz;}8sQOw)V=B?vfw!_g{ie0q zC&PipxVFpF4LIN0-UqxN1`dzz1+@0+*Im17{|UB#2T#6>Nq>>1@7%_!YTtrg|5Dmd zW7^g9@SE4o-}?OKn%kf0z1x3(Tf6=JU$)(R@7DK!1Lkr6?eBN(u6^g)CN@>B)l-Cy zIYQUM4|2T(q|_9o!%pG zL|mY`e|*mhx#CY<_XJku0;$Z}NdyJOl&YR_4#BJh7?B(75Mk*}?ZO4NULQbpeSttf zVlGymab9u7I{-sTJvG4kO8Ku~A)S5)@Kv=Cl64c{eO<3wnrCXB1k%R{P-Es-F7!&e zloi<497dI74PjU!Edr?Gl2zYUZkPwVTLAW~gQ!Vw5;}>YUb8Nvfs*(NZ~Q89UpmiLu=TwgPm=wUR=_j0>EYN;Sf^T$aCV=>z6iRJ|tQSJ?1;eg4OP@^84$+CKa2Gi$UPw!gp2S^&U%9S8iv zNGX7E3P7~CzYnc0tkYI`GkJLgY{GgfNnkdeaxklm`)6lw9L!6g-U56|fLGroK&w=o z;?+m2p@7KCub#RUuX=iJCtp3YLA_O&0e@pL_`5EqQiQZ=`H`UbQzr`N|c5 zIrfHJq^InQEc;gFtmd7jdy|9#Q|d#Ub<+LiB@t5=YVJ4Xy5VTGQC5|57E&yGX0xxf z7P2e{0B6c_u5bYIDebKDjgh>tVRcs}Vx9*6%sU`En%^8xer(fUaJ^=d48$?xl+;g6o=2VR_xs|dtQo; z06;hvfOkP}A3WTnmqQDRL9_q=>_4J^BtnFCw_(6-YHszgNcuoYKIE0p< zE1tgvA4;d<*1Uqx$vqsfue~s2j-~vQqO{X$SR^p=Fp+!rpEwx4l8ZX$MT4_T+LT7~ z+)9PA)!{okl_OiSe@2WgK)+V-MJ0G0cZL>)9#ib)zPv-AZ=F%=LB|4IALFce_Qj7( zNkI1=KXIkwPPqaw9=OtX&N-{IBppvdV-aifJ@MUctLxWF0p`i?WVMH{7Rz$uAKFz_ z`!@TM8zYZ zuXMI#Ir^(S221wUsNZn6{=W7xB=K(B+1U&1?(Y6Mu%wocrB|Mr7_UZ;Q2PX0OWb7y70Yv0*+d49E)(5J*e0*Mm3 zW(Y#c7%u>=*ktV)eI_s@5F)F&1b7MNqql%vKuSXX0H7lfB+I+LCr!U%wB^dJUV=3?^&S7{HW6z|3bV0L_+zdM4NvA*12U5&$lNY$gAbLPc|| zdg@BPr@u#ov1j~N@;gsJhmfjgYyFl8jWYyGfhWZ@-+%bn!E+&(@zP^6gu4kKzfo&g z2LV+vjgeKv-khES;47vY!mW1Gl`o2OmIbkl5UFhP5;(UHw!A;;hdvX1sMJ{-!7Yk# zta5f*ZvlOkD^nb_z?{n0NdcnLOGyCa5CQ$oOi6W zod&cZ(C_8xGeIc^y}+OuOcA$Gg?mEvb33Ref8ixRbJVjV$3q$~9TqlK?l1i$U_1@8a z3j(xPtbLz3Xm=aT*QwX~&NBanCm-1LS;QRi)9N!_t9X~*3}wV44~NTST32hpuoDy=&_&Zjn`8TKo8Nu5bz+q+hXHBu2}yV z;3l58{sf@Q{zwD?M&f(3wSz@vU5}(o7La#GB4wdj$QFQ*QJ?Gi8I@uUJ{EyD1lhBS z5m&fDjEPaQIhFZKCsaOBM)!%W6>0;RlsmNMbPjLQo|pybEA$Xzd~(H?8?)l*<*~5r z)U5yJ!luweB%`tAY`mHSV5c@+j%)}`LSz;wrX3_kCu{d^65vufx#?`@t!Z7YP_#ub z?qMPNP7J;hC!>7qeNnWAh%gI9Yo9`LF%julZd6$ya}7 z#|MYZ;lfT&Uc1sx$u-vi|8hR(_vr(mr5MQM%AO2v2@jK(mco6;%+bNa51bbb8dZZu zDk+CuoS#_jvSGW&_iP$coVUWsLe87CH{c`$>s9fd-WDvFH^v#IxLk zKpI%Rpz|X8ZaL{OUlCI|zc2svPdE<}wsrIXP`*jfs#g*KEro;5Qq``H@@!f2RTgf@ z*%D-a!_dTyrlTftTbLPCA zDcPL9FIRR67AiX#1jB=gf|He0+pUnj^{}DcPk$NEfxxU40uf>#2m9HSf!HUI~fx-8W~a4oVw<0)ct=7N9>_gqb7)VNB!V z+DajBPaZt56oR#~(C4?e?eO7!```iKud-_`K+tuoYjMEBVi^LEH|*8fiG!px*N0{4 zK!_WTdo~8tNcd|FdOk)eIF9xYTwuxr;FbvBBY>uWtdthY%&&UvvTQSCz<9!A+3Pg~ zPy{x)*DAyCaMZPIHjhxW0ZKP(lFO&8vRiVYN^d9=y7-%t1PK&IrThT+%k_E%Ae3?> z39tzAFs)^RJ}5MxrG#6|sT2ap-GI52m&Q}}DK&Av>xzERWw%$|1H1%8A;+1a zc!co3v{x@r?B(-UPIrM7f-ge3d`ty^1^n;bJFpFp2 zS^Whj^!IQe_t2=<@jpF#ZI=LhcMpe_8jY6qhhqe6c~#W?UZQ2S%kxvuj@%pe9C+$} zbj+^4d1aBo%-xIk5#k>_ddU64&=_l1V;ulmjLxT7GZW9{t+qR@~dRmtQ}#)o|l>9YP4tDLGptEuR{#5~r2^o336 zBT$aLk+fK0%c6O}cPwC2z_z?Pa>T#0{+j)u81@DGMY#~zd=`by zW-UM`0BgPsTDT1;mXR4+j3lF$W8aTi&qyZjz(R@A6nDJ>aLXln5sld*kgx!tTkh`y zh#^4wBrvzRmuQ5a&HEPW0Akh*VD4;cmPz&@*3>T+-qtk z5MOhiKZ0LOI7d`ZT$$Q4@IED3Qw;g{KK{sR@Tc?F=eDaVw;2_s_SyjrVlI5}m?uD?tT9~rR3*gV`gFt}S+~!$HzS9M0 zw0bRVU>D?6^ERE!0)ha#3j|LDVSaV%X$T=)_s-{vZVlA^WNDZntP}v`nRLd%azp?X zVJNNa$jb%7P0UNJUAAgA0Wc2&OUq`;b`Rk$vEge9E=tKZa@Hk zM-VQRxT-J9Cctzs=vco!un+=|`l?#l$^q~g@GtAIEblYsNrGlxv8Rl4G#$FUySuY( z86^NqN39A_ysB0$5sv`M6Wl9iGlW{XW-3lQpUu8iRLm@ofG+O{t&6Ua@<1R-09}Aq z!1eO-in-k+1rmso0!7KrCgYKP_`zd)_03cI8FWyrcuU1RDrueSYs*EvGwoTLbw00N zyCtdH>pFd`xzF+8ea5V~{I(U#Id^3i056tHrkHfqU)Qxt61B6v?YviDT~?ux1XBcd zc}vI(K?;sHuTJdI!w25?O1WaMPF~ydS1+Urw$fG^0eLE|u+RAvdeQohS;HFhwFJmW zX{2?D0yu^Pc@?A)P?;ZuWeK*bJKS!zO!d?&07)q`MECLlQLcscJjlH#mP}sPrrC(Jp^=loX8UU;DaZ8hrN)9SiVxS z!~GpAvVNsv$z6T(^iQ>*RSHfn^a6jXp?`gO?Q!NYXn*_QkhNv40sAxdOo%=yQB(@B zrd$b9jA=X*_V79pX6`G1iln{x=D7piTqfi3_(A5kz`AU_Ttp+PEuVts0rB(|a`jSC zea5>4u&1JNz}pb|&$@R=y$1LItVUvC+uH{~unwZT2aoPUgUlOaZUNdGs*4Uy?gCO0 zjG+NNMA)qIeh_UnXCuppl9s>EKAQz>R&81oKvbkJr*AIo(GNeeWgi+TDr-F;icLMG zbEE4k=#)MJq}J@!SrqV?fZy=!wOqwjs*QUG^JRD0hP809lz0mOmU14n;ZLEBdp)3W z4u}cMMVz?{gy9*lzVeLjatm0EJ7xf!P~`yT2GEMEZC2WI_y3^w3E(Qs{Ky4cN&xvd zEZG;)6l=lUD^6UAID=uX;aTAs^uQPbfEvEwpG{j=7Fmp43Ba3-Vaoe43qwbm?=WLo zu{T2LgiUy!^r?|<&uhy^l&Fq=$Qr*`tXUJ*isvMPvgn6+Zp1Cl5&AM?%&I0aS4af3 z9#ourzv~_>ZrzQjBp19o8MEnd;I8SbVAPh-OcJ_QsYNEuBJhmBbq~-Ad|yCMOqKFT zM7UPT=cK3=5LJ>%eHajkgx4uog!qo!`hz@Apw+#&v_{bWv^R9+owS832AN>|Q|Max zBa}-b!dO%jejx<`_syi@rckUna}|rH-2Gqm(3P=1z#~)4g%nEz_>!tDg!#KwYgwE< zoz3tWzBi2atn9FD2>F{m%Ns#p)G2T3UquFk{k}<&gD2IxQ zwbUCmXd0Sd8GEnokwJ=vDbzsgc>@9e^hXWXl2hX?m;*zefu*Drm1TU*EM(e>LWiB{(c`wOXs)dt+GQ_jB-Wrc*md{tbqQo+w(1VmkLTUS-{_ubLA0&I+ zwY&D8dIJalkNo&4zWiBu_1iwX{r>IW-@≠pU)S?KVii{kz(25U%&$*MXn+-n;jD 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 x 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

Sh@JtRA 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%0Duf18b~vFL+@^NH5!}+(AxX0vru|z?9wRD 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

$woZUfn!#x<2qo-L@^W^!ErKz76v5oZsnG) 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 z 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 JPDHLkV1fn(1{VMT literal 0 HcmV?d00001 diff --git a/src/_static/img/instagram.svg b/src/_static/img/instagram.svg new file mode 100644 index 000000000..b7b97924b --- /dev/null +++ b/src/_static/img/instagram.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/microsoft-store-get.png b/src/_static/img/microsoft-store-get.png new file mode 100644 index 0000000000000000000000000000000000000000..34921faa58175d321c6bfa26698a05087c056427 GIT binary patch literal 20391 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 literal 0 HcmV?d00001 diff --git a/src/_static/img/microsoft-store-search.png b/src/_static/img/microsoft-store-search.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca927db3e8eba553a81d4ffb9d4cdcfe88c879a GIT binary patch literal 456351 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

cCt5;e3E3$<+|D08_+fUtV7NvBU#oorZ@@CD3yp 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≫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

@#Y&jPNs|^M4KMdEhiUI#<0AT{ZZ9?uMB#;?& zUveK$NWS{!ZZ-B>^AJi0jBKK(noyksmH0KJPA+{qnW;K>Oody;ZORZN%7f=hTo1EIF=uF}w4XKT+dKhbnn*oM!C{(f(R^;c?sH7%=kqA`gK*~UrC~$4q-jw#VDe+x8v6G25L{;a zxb%FP06BdI5lv0NqcT7`hc=t_boomsCqypWupb9ELV9p;D38WsO-zou1zB#RE7|q^ zm6<(lGM1^@3`zyW@tqc6UDu&NMGg z!B99{_XvZTsH<&af_5G~L0m!Sf*hVm+b*@^vrOxy_Kn}J$8djfE{fkn9pc=lg3+rZ zM6-VhjE;MLU-6X(Sy4s&K2D4CRA}DD>pbRo69ee`<)6rYT68-gq#b}_bk@$ynWYEq z@n3Q=;nDof(8oK-{MeE~roDu_zL-yWM1X?GyLUG~*XHeStttBZ1l|p!a0=dW$yOD@ z`aWG>G@caNim(_&JL5arD>s%TEv$7Mgc@AZHq@q8`%a^M4jG-1vkk=iv!iy54Rlg< zof}0rEYGJ$h4b)(y&GGQR$Tn`=)vc0k-u>zHr|!UXGfe5Gi%}mARaAWLtZor_<2|` z+3d0$M=uf3I5rHT9U$;Or>3hK&U=mDMMXt<$qRB_trXB-l!}5M#4b7d`_J)=v~_lh zD2c`xLvMv^1&BJ$3(M02yhiwVc)sMu@#}vVYe(mFK(H^U>~fPy>VL=viEP@mFZ~xg zz8M^i8#uhjxBG-O;}QTGu?nmAzo@y~%Dyh9c=m&TCuoLSUkVlsq2#bh$&(A+wm z54`b*A2i_m79eY~J~qLLkLYF_eDUgQrw(D#>}HJ3$#orzEnb?>tO10YQhJ;ajv!I$ zoA_Tysn@Y&kgiTh-8n`5NcW5#*I}qb{q5y#GV>!1Gx3?)89wT6x5hU?aax2G!5yul#}n$4H+3KygjrYYc}Rp$|HXUKI|Ja6o27Tk5qDZ_hoCnO-i}*5Z|$} z>9H?=O3?}DQ|69#JC>JZY8SJ+F{^_1s9j&Ou^H2i$CzkKy)v`w9)oNYWJ4EgL@r^j zy|Q?I)!XI^I^|E$jg;WCqIV9D&xh`U3mRtzP)iWflfH8NX0W<9h0>@g(N-h^jmB8uZ;q^ORZH|Wc(cT^;#3#ElP9ou2pq_`JUum2^jjAu2mfte4Z@Qy&^x|a9<7piI z8_@hz9BnwXfhiUb{q4*pk-hG9TK3g0?AZkS#?QAx-z}e`AKrJ2 ziK2ZWF!X2UA)5JMu1uEPingzdl$f2HkN>Ap9)H-dFX?LNi$^~E&s~Q^J`a>hIa|rB zNs4)Sd6g6P3`JkOXkP_lqRpY0@IC=@IhsouVEt&$Bbv*uV3^I_xkVPK%ZD`Rm&inb zn0H6QeY54~)U&--Vd-9 zY!UuxV|yFU%6GwE$kTP}s@EF+%E`7O zw7__Zm~s*VYfW|#J*pwXS>UR9nfoP^NDL8gZ)S-hwSMQfl3|y;rl2xDKEax;s#@*L zvF7vU!jL*?K(l*!ImG78{rmSw#F}g>l101-nKN~jwOEGZEu;016-mACSWB9u+UdxZ zS%t)3zB$WKK+A4fx4ky&-aqpv8I;^8SQltOvJ-xrY54g@ww9m{0KdyzsvTDen4kNo za`f?iE=62$ANTDm&|vfAQRHfA?Ly*OJ3Q)?&(_mXXQVjgH~gXXgZ)!b>bKd|{JuWk z?(OM_`ipVis4&B-XL>~Js{^H)=~-X(ssf_kOW_hhSJZ;igY`2hizEqiV5DzG#@9p? z%BcV4yQ*aX+P>&`G-bn^h4)P*nFwB3RERTOLE%AB=ZHQd?W--(?>kF|y3fWPyZeuA z3j(z&)bg4pQX)=#qf + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/npp.svg b/src/_static/img/npp.svg new file mode 100644 index 000000000..a0331d399 --- /dev/null +++ b/src/_static/img/npp.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/pycharm.svg b/src/_static/img/pycharm.svg new file mode 100644 index 000000000..86bb6d44c --- /dev/null +++ b/src/_static/img/pycharm.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/python.svg b/src/_static/img/python.svg new file mode 100644 index 000000000..25df8268f --- /dev/null +++ b/src/_static/img/python.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/quora.svg b/src/_static/img/quora.svg new file mode 100644 index 000000000..a4c327ddc --- /dev/null +++ b/src/_static/img/quora.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/_static/img/reddit.svg b/src/_static/img/reddit.svg new file mode 100644 index 000000000..64b767668 --- /dev/null +++ b/src/_static/img/reddit.svg @@ -0,0 +1,17 @@ + + + + + Reddit-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/spotify.svg b/src/_static/img/spotify.svg new file mode 100644 index 000000000..fb46e3ac8 --- /dev/null +++ b/src/_static/img/spotify.svg @@ -0,0 +1,17 @@ + + + + + Spotify-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/start-menu-python.png b/src/_static/img/start-menu-python.png new file mode 100644 index 0000000000000000000000000000000000000000..419ae72b448636669216d41db028686fa84fb15d GIT binary patch literal 73292 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 M<952(!S~_+0cY-dqyPW_ literal 0 HcmV?d00001 diff --git a/src/_static/img/terminal-python.png b/src/_static/img/terminal-python.png new file mode 100644 index 0000000000000000000000000000000000000000..1d86fe5a8b2a23dfcdc2c55d336d1a5aba0cb64b GIT binary patch literal 20583 zcmc%wXH-*N7dDJyMO3h$BGOcpq7LKi_!Yf9IS(Cu3x1?>*L9*?Z2lX1V6IK0GwhWj}rGGz$w0 zyS|>5ISb1P_~CiYsgsAt#L+>};m;9&bKM6lmHoUchZo1)G>kP^SiZ-f*?)54@S5#~ zo~=I%3&+pD-y>b1;%6)@ru+I@8kWI8(iAA>G7k2Kmc3-QCj8a8hd*p>#pgkMdjGGc zajCk=^F;~Ci^f;6*Vt1|UDy6`>dnOuS8BYhpNvO5N*S6s^)M{?!qIU(!6O=ex`OY1 zV+QliwzuJ~)l+7NItOaPt{Ck=9?!DnoxN8@`4MI^R-(Q$U5cb09@fda$l2|JvNE4B z#Uc~N>L^*|o5xtGm4wEfzmNU*^RkkDj3W8(ISWgH#-D5doj+7M4nOkWd4cBt ze{Y{Fx2s(>)D8^|onMDgME$6PcLxj(&`zAT4WblfIC^Q3(x;Q1(zemncP=8khs55J z(zsYOY)5NQL6Uf?ymmb|b7;%aZwKc4i5_@$DFGI}HDykyL|ByeD%l}fpoyVOako+x zBdDw1gpSugLYW4!qc(GS!$Q)O1Ta0j{qZjS;T(U3ai3di6KNSbKlH)P<# zjGACo*}WPuC`B}+ovQ)MzZPbc73{B-(o*%MMfG96nypOvL9;N~>Biuhf8<#joq*#z zA2tsj(OZ?Ars?^hV2}4}8pC^ZfppXoS8e=)(>X@xS|a~S$b#ttTQhtfH91cCx?lI? zcwoFr=pJ`SzGMe#!*gO_C(be1eq{08$?3hPo=TmnoPwKgF6((|lHMuS3V4lUdEiYa z$c91VEKXvRsRSpw<$4o|7tUf#mp7W(h_3Z|i1?-|t8_g+oP2KKE(FDM(<7th%K-r4 zza2^++P`6Xbdug_O~8db zotOLjb~y%DLmY)h01GCVNsYl3ncI-Ym8lB9*%b54Rvvl|ea17@maMj`&2|jeJA)KnpgjrW`F9%U z-rGbTdm7)=-^+)v!zSQ-bxo98a4Nm>>zii$slt+~x6xatrk!^d5-!ove8yAv?3A)h z#4^y`#1xmX`L9D=^9ke?mhTMxt>u+VE`zr6#;Rs$iGyuuFRVJdXUepxc6I0%R2DUP zJXy1@XUdfd^8hS34U~fIT`F}+6m={5B>#tLpPJxVm*{(Ynfs(&P7i^UAWQGfgqE15 zeon!Emz&j(ZqI=J-mbOQr60yLT=)HHM?{b@L7$ec((r?M3y|l*v(<9uKxn5>JuwXX zE?(cXz1ZP-&;n(J=;yhl>(_O58S-aAJz3Xgg52n{hx4O+GGQNnRJkQjsL|Q!KBsVeW5gHA8EJYmiLtC7KXevPgNTQg|%7>Mp-TX&T}+vdc!P(8t~KmRjnb2ca9 zn>e}`t^wl96C~{ z3AlcF1#}TN8_bnkS2#u7b-p&7vWX{<#C;>Ger* ziT<`JN+SYT3v7JQ89YpVW?T4VH+M(4X#{dzrOVH!g_xoy;Mer@$HSW4*Iq!O-WcGZ0#?X!kNRoBxBr)t74t zy7h|a=x~>}HU?E<_Qzp{6Q>QZOt+YvS?LugoUpn%)jOW!Xhv%-7QgdmErg;?i_l~+ zVfz?UA3TVjmBjUc7?E8r1wM$(e#6=@lHPK|`sLV!D<$np6NZB?Ai^xJndTOIxaJxA z`)H_8mx;PCK}w)jnr={Q7Iy7u8ws0%nOXMV#Cc>KRJp^j^6~LnKGi1doAnxKrB|N+ zOxim)Rf3!S?lbk`TP;z+OU`M87gmdzxUBg3ZRPA9E(#V}KlsYQ^G)&ax3#SJsib2{ zp90+CnN7X{i<~unj!n#}R_aK_RzgyBiyNvHsdt6~%kCGR&vtj{e zc^ngJaNTii#O=8-rU~Dmk=$eSK7586^x zE~*`V;YBrsWlWc+G0y$7FiyN-h1-OW#a!JlmxHtm2Q94Q1LMZAy7aJT<93|iN+4nY z20CJsheqm;{~4Lhe#9RZ*V;1OxQPI|X|W&^_;_~?Vh4&q$To@#A!0Hj&&3WDpRt3r z+x}#SRX=S(DkBhN$>^ISJB-*#@aFExI3#uZ9ar&{prqAir(Y`)0e>b<)Hl;6>s~WV z5YPGeGE%cZ8FK+78Nv<~WvZEW-^l4qw_t^;km;8TR1Hbb0LWDcrRRVis>N)7xmE6^ z?q{pM@w;M)J7jjDYrgGmMrjP>>ZhtaUH-Lt0>qc1P6Aw^SiVkMHY0pOGUC{z$rA*!f) z)2T=_l)}v&6FPg-C>ywK8{${P7y|1U;Z2VhONaNNZd@)haIMV!G`C77^^;C;E`8Z>W_l-AYlHH<+9@^g0<8vpu*gKu+Mk{eA zW*r2!>bc%t36=R!Euc<2_ubURxa;{=Mj+4+aTu+ME?)h|h79WeZX=pjqWRq3RP;l` z-P^A*cAv+vd=gY>*tZI~r=T{Y8b#*$j=!V8G9?newLYaOq#6bK(I`fQJb!B|FH82O zJ)0iz>7T<6QHDZZVtjp%O?oi;pFeWTZ%KUJ#^$=zVeE48p?o;NLyzyX&0=kf5hN&S@B68$MF@Fp}@zc zb4B=okljKAvob1cBKdFmn) z((F9>MX6mqcOu)o)A0La-=kwFGwizYOQBd%?qPrPsN*NsAe`qvE8XJXIjQ%1y>}^l zU&n{E|IjBR!(Cse8;=HpQysTe54yd{Cu30>IF+XpcUw?o;$nS&l@|(CjWLlLO3V2U zn(h3pzHNMUIsfd3Z2v|hpGmQs4Ay^Mq5F<>a0Nt-;fW~Gl~PKSO>cO^xOz~%`TRZ$ zK4Wx%W37SaNeJ&X{O&6zQlYD&%^LaRpJ%5+rkvMI`7X-lPQVp!zbBKGh<=e{LamIj zrSJPjnMpT#|5%_hyZedU782BhM5TOH0_J`95S``+Dtxmz&aqS&<(~d{n4S^ZzJ>X8 zVWf>#Q7x8{t!C?-OyW2hJ5_VjwELRd{5P4s#$3UOsS6X7gA2+e173g7!DNP*)C|=| zgOpFKYvTT9M7ev9`fm~ut%aYdMW^Na7I8ew$n4sb3wdTw)EmoU3k#^_SZ;`?+ppVa zpD@k3A~%eaJb3&tg&Gm@Qw)FU5@lEDo7ji&?P{5!uQn$qlWu%CmOhQld|az)ZkNn; zS2s|{r}vY>6|>b(gVH4-D`6K2*I!VY4E2EY+_wdH^!qDX_M#@nbJ(6=-YGPiL-kg9 z`IwuGUhOf~yeSP86uF1I&ef;&)+Fw^+tv=NI!ysL1G3)Gu~Zjh6f#N(`{(G!fD*r_ z3zuz3PoY0DWJ&%n!V*0Se;3~VCrZ!JoMnYG!fD^^%XvTPmM6T-?ty9ID!LfWyfp&7 z#?&-94X2j_@coRmQ!fxI7q8qGd;GfHh#1?KIw`2ii85=xoq&r76!xjnxvQ+P*ZJWZ zk1VT&@t^&#Hq07d0Yw*)B9&QS@27Z(%Xb>pEat=gvNlze*{fhE$Ddn(Q`Tw{rg0ez z#0!gctvFuH$lPW(dQs@%#|**v2+3RCeOqpeq6srRzIFrh%Bf)V4yMXWqUpmm%Gqm; z?t1feO#)RIe;c3iBiP?JXiNjQt)N{pYp?(3pXb*Dx7m9a2ayk}^f@4jQu0feL1^}H zx=u&qp*c2+`9i){5k$jblm`wY8o#xLtyg~`2Nss$Q|v(Xt=^G9AaN+Ga0s!wG*o2# zQpsbB;=K93Kd9N9feP)IJ@ZkL2Wp+QwS>n0HfuIEnJM3PU#$@ouPVo7ONQ*bOP*`s z*n~ysWZk2eSZ+=XtOr4j#GQ4%oIIJCAp{M09TB?OY$!MkkNkXQr{X2C$`=OgH`mMO`u8#iX+gL9x2vOy{yXm^k>Ur6ZR%Anv*u~9MV+- z9*A!dQ4cK`035Z45Nxs%TlniiEPCG7Od+_xfzWh!AU9Knh94Oyfs88nF6O9NhvJ3P zZw{^d4iRi5-C9zUA)9$4g6rSex0OT4>DALWXhX%-Ce4*x3ty_U|B?Q34y$#A9kt-5 zs;a6VF61;YWI5T5l=C#{ZH9D9wW7#~U_7!d_l1*KxKI$VMKnm=onNyg5@m{rpJ1is zZhznR9Lay4GF0R;c)AxNR1er!`n}wDmguN>9c|oNn^xN=$)6a}>?lsZJB_NEN0z7j zrtit7CWduYo-BN`l6EygIEsvhsS4o`Y&olt#qy=Q*53yBn;~S_!HxQ9AGO!ME!E^* zVNuR?auoC&hAFWcJF$+Ce`UE7gxBA!f4c8unHF#&DLR-6B%yI*sI#ZHXxmSc{(&6i z`3QCNI|0p7y>G{+_myNHf>_gkwge4sD^-bQbOZ@8Cr|5O35fLTr=I zZ=i>OJc0?^98pz|=i3L@sSf_gj3IBu-`c5D3}~G69tz3Lh+J2CL3i5>Zx5=(McnS< z5SNVw4j`w!)_B;wb(G3T%rmu9?AB_xp^QSAP*eg{6}r(Ccpd4Y?&;y=Xio3lAJyZV zbFP1eX<*`MP^W)1@%l|%6LX(*aD&pdmN^!9`slkoTh`ZckX!!ZN6bi-hbV>Hv~(yf zrRB!vV}kQ$d&Yol?CG%x!TP|6d@RYBW90=ltlId#9PBKSF^`;_r1&~VfT&F16MXu+ zLrVztGvT|=ky&i^o#F*GPN|UT!l#|GY|f-ks?O(sq20Uw0v4AcogY%weck8Usgm&3 z^JPXp&oiHmU2ueIE-QI0l;O~Ck5@*2a&KnV-BEc_u~M~E6BH3j!-rXN$BGXXcVUwR@ufJ#(6NCV>lb9261)OK&yzs ziw)~2sKS;%H-U1O=5EZ#MM?WPu^x07%41%6k`m(=SUnKut~90Cj?&LPg_zdD(^G4E z-`e4#veATjDb|0154J<;nN&R4TGjRQRJ#5m&%#4th4rZJ3FjeSoumFuuli1cud%|Q z3eV@g^RMQ8aHi<2M7&rd&%=lFCH@`Z{U@Ivou{VtY*aODyWjsbjSvj_DHPs5J3s$q z-ChE^Wl$hvaLjT0ThlkJiSS07q>^-i;$V=FQRs)aiirC&|3ZqFuJ0UrtkdRd66fSh zI}3y(D8|pWJ8B26zHPiUnM`2L%Mhm`CDolxeQ@_|Gi4CdBM+YQyuY_+tn3D^f8BYP zK2I-#WsdF47r_Bb#{Xo{EZw?HcghO@S_5U*($`*+el=j^ycTlR;j_MQs--z?#wtqsuIqgwf z081{|J(iots^&&*5djP~H1S{KP55A;yHI1o zRTWgr`2EKR5#Zqv7$fl`p)=C{+3bv&dES5R?{jG%hm!)XCMGtzGyopAgUKG_H9PN( zV$!p@K70k2xdb=h_Wz0e4?8SJ4bD*aB6Xi7UjA8ONNPXAjc+iH!>wf(b=LL#`lX*% zI!66BusUo!e@7u$wLx3{93JE;3{2J>!MRwUeAeN|=n+Rq2}>&nSxqaI9}MjME8D{k zew5Zyt1^^jeo>L``ZORrE-qsq8=6Ed+r(xvUuX$Qtf&0m)8@v5fv!|t#7K$3)_ag! z^RcQ3y3lx2VC`0#5&sz~H{#Ep6vE3p@u#gxvv)OwcrGg$qI8eEKRt6rQ57M@)JhVE z66|+=j2;;e(W%e`QH1`3a}xT+QQ!kZ>yKA#nk8yI$-M{}n`0=`R+Q4N=D5mQLGXua z;D16B$(u>Q;fPg_n^%(Mh<*7nk&Izb3-Kjz#i>a6qsmQs!1-TX10>?1As348jnkmK zT0k~|pL9l)F`4`{L7XZqi7o}sbMEU90j!tV~g&XhU>26!To;?L0W5g_HhUSV zhZUgUdLy99-J)}Gm#&?!jYQxurfR4QScdVja>;C&yx7C+@NDH_c9oZ z254@s`VryAZMT%q_2F0His+8ek3aRVbsq{l{;xQafqu?!h$5b8w#{NHTKDs$^67GGh z>M4R5q!UMU=o2=QaOJy|6_alCZ6ur%z@bjYO9;E@ITrRi)~c6&;xVbo+7kG$bISWK zZN!Dyvlr|9q)h34QfQBm8#lT9yAbZ$;rNC8vn2!FmxZB$ZyN+_lx1y&{_7QB-!wyg z+_FW462XWkkemjM*_T^<+J62v(S6WsNy2-jnKJshFy0|zy-$sK)Tl(Jq}3n5^m`At z(Z=o{Dm2ai#t~ze(gpG`6I${H(BDFMc(o*=INxJMjixi|rfa@5KOIg#+j2|!r0)C) zPtBiD^@prNiUIZ2L3v*6Jk4rIeRzT5C;>1$(ux0*0l?5 z$C|BMfAQ1G)Of58T7qhs0ttKCimA6mcx?{sxHnBtmejd0+VZLfwE8@S)2Rc%JM&|^%zV2xV5#_Jw@Msr-_g6%~zcS*g23Z6f9YKVPb$$&8KZsKU0#+6;Lw(rxN`Nc3N0wP30~>+QcBh`{FxH+fAv9ol-2 z`m?&>ONR?IWbV&cVUn;d?tc?^;j+SJ=yqS3bl`06s0Uc)^tdU+x>3YJn4>$&;TVqe zi>RtrR{@!^qb$suD4ESI{KSv$WG9?R{EU2LvoKhB>=n`eA--aV(x395%VJ>>^LZr* z=TQ_4PmBec2zNf8{iXA4cGl;viyo<6UeQv^gY!Sx-@ozH=vRZoUPaQC`gxtVeiCr? z=d6`y&^_$`H4rh1nW;5{quD8SqbGHrb%_eQfgKBhJ4;3XdR`V5OO2SC8?Yp4@9uw$ zt=V2*e4RG;$&BYVGvV`)3cm{*2jQukWBFCqcv% zCAZf4ODPmt>b)g`;vVP#!-8mbV=iAK45wS}-L@%&qswWsL8S@lzmRrOsRP}=Dk)Of zYFV-oN32gmMTU(b6a)`iDyxhe!f+#AtT#DGgx_j^S+4%q!+F8gw_$Z{7skI+Z`(Sj zj9giju||X%CYL=uTg<4{2U^g}2E_3mPGi%_fPTm1@wk|4+zB6|8@0QhIH!)ZgP&{+ z#mgG6_Btwy@^CoGWiP%9P153CH9Pt>uVX(~Cr**DqfdoEgtg1UFKxiMT@v*&=j>Y= z^zi+=q$qq;XVO7&S`0~NwN3&ZdKZh8(+e@#@GQ26U3JWG&1i(gT=el@q$FU<24wug z=MG&w)IrP*?_5{JlowuexIzrFoN~fh?vR|z>25g7gK~_bbPnlT3IJEtK}|;9cAN^@ zYy0V=-ZkDu+G`zOeY{6K1oWX(_15V01rI0!pPhpdYl8KCH~lrrv|Lh>?WnEBZb9fGh4nNsfv^I%6j&w#ri?iPJ&dekL2e9&6s(;qF9`!T3|b4l2exrU`r5 zz1C|YOiKtn3LOm3to{lvO|TROYCU`#>_^riz9ECVFEJ>8bjAT8HLc3eOa1>EJg38` z;hNGL(#pxr;d!6&(V9$)%F{hA1xj$vQVp18@-+13w_eI0pEOIlhpvXpIEbM^pD$BB z0JVF)C_Zzn%BO#vApkA00JOyIyWXDE6`Qb zy>;M_WOgcJEQlPFgr6L99-UHB2wUuuw!)FE(Wuk&P?CM4byQ#2zM zY5hFa1{v*A<*}4>ThxVNeB00~e+FfHh;7BKf_^n%!eaS8&GpAw2s0t{`s0=_0(u{i za(QjK+MzL>CJsp_h)}CY1mK|Sba~H3%deC5`j-u?LJB9T9XWR+-S??=@v(|{Qu1BL zZxooqeeiN!DQ7mYVq$u3U5ScH_uUyQ%tcoziF(VINEQN}(glkxxTl_}pU71bUpkG9 zHdOtXcZ(__u4>ok1tQ)JwtPMIq%N?!AI@c_ChyO`mcHW5-qmrS1e9s1exL6Ra2;s6 z))0RUxHx2{y1CdqIWh6SDPA^?bx|sk9n`o@Wl-%^dpq~auddW1!n#CK8JV-;qsz!9 zD$*8y=b+$RYbmh#FjPQ|}7@8mxD>h--U5 ztsf{!d^Zj}aOSA?5J3G-S$LUf6^8}MC0-ky#?TU~Ixq--)C-cG)Dh^anbAVAE^IC! zoH_?mY5{7|9?2587g7qQo_BfLTq!K{Tf5}u4ydXD+hXlI>LgmKq-q%Ngo^VeRDePK zue7_XFjGo8+Ss-?hY|4!3nn`F7+AZ->V3X^fn;Eq3kKPl6FXIJ;nGKPqct44JH^j< z#Id5g4(WO%0EKX<N)m+E)%&JCL=Y^lu|+H}A$~W`6wlph}p-gt?Qla@*owj6)jp{#v15 zZPWRS)xD#@w|*0%MJhy;!QjZv+oFlL)r)c>EqSsef2yr7R z=IW+i0&KR~6d0`W=bq2OP&*MbMa^A5>XhtnA%o>>gT0$u0#*GDnXykQ(4&Z%t#im$ zJf1J&wZ67o_qzvmLE9gLgp1YZqn^7m_0l9)Y!b?7HQ+opf&)^ufpkE)zGm0R zv$nvt^${_TpVJM6ibKpghq1r=NYAdY(ck3FO_SxC9#j%)nkqG`{oqHO9h3p?yt@Hb z)Bdlk5=u19>ukJfI&x)ugS=NIEz-me6g#Xx1j8(Lo{pU(^A6uzRW)YRUfPA=J9JL3 zs~2$q=^^nZ#l0anOup{KK5zU4-Frhb)#kfL*-fGujnFUwaVc13U^?U>*r&F0(*9#2 zTuq0JpHluw#zBqzBJ@Om~G@+abK(-Q8!!sp+auqJ;A0ce*F zDD#J?#qntbsRU%HJF-4N`v*IhD&s0bmS@?}rmKtk27ij*HxfJq-ekUq@J$|_;9WJ7 zDjzz6mC-JRSh~#CUJaS4N?HmChdDByTN;j=)5rNPUvp5a&<)XC{qao(^oAzVyjY;6bm*E73x#l@+14pVHKg{nS>2Yom}J%$PIB(B$(mG#TL{wuZ^RlCbH?x zLr(5G`9j|KXwiWlOWzE~k^c8TurKvO6d1DPlZkxgC1|?MgY7)>tb$LLT`GBl`Cw6> z&C<)M23F%T%u*V&*kUI)-L zud(s%8`toykSYr7>3y~`AbR;DPH{=9*70unxm+=>M%!|9c;!^|ehVn!dxC-=8&IMEUHS38jj4*LSltO3nifhDQU+FK);4xmZ z_Q!$mdq*q2T8-rOy-{{Ih6&WiW~f`0)W>Huf|T6Mi^!+m`77TAEZN7w_!r8AxqT(B z*R+P4YroJ9o}YRgJW1xi_J-P1CQ*EbS(2ji3YDqZ+{Wduw7aJ2vr={jr4kV8WNZtq zFA1lu@5^HaoA-|>RuVtM5$_jcve*Q`MIolIv@)MhMW;3JU0*eOs*TG_T2PEezcWp* za><^7DerAtun9TkO;pakJJwrNd1lWHNUcLi1mnw@KJD!yKf}O>nzYCySFC=un9lRl zM=n(_I%K;}e+(f)?GGtLpQTgE{4#fB?)Z&@l`oKVzIr>RY?mH`MESfBP?XPWx#OL{ zpJzR7jE#d4ow+|`z$?75&NHAWN;+k01cv{nF!DdOOC5_Ia9L&JX)5$J(q$)K3@1rQPO_}^RG7>);JGUH4i|AJEjIqn^Vm4bNY32w!KXn zFH~KlibOx7cBhX`q>1R0=IW~76-f-JVd9mulstxiX*phYOx7&bd~zTt_YS+iBwe>Vu5mp>-GbJF%w$IR=`!@|Mh{<91 z_nHmyp_M6^G{3n}c85$3%_e!_(BnaeOHHhYm;mjZUw2?x-u`9aEEAINtyaZDsW(FS zUhSzBZCpAx*#cp2QX>;)=i`Nc%qqemL9cokzW3#L!obYJEpF zFZH7{O`ThUTCN8~6QJhoj`^c$X+ICIJbnz<@cGMHOLpYEN?6yv?c4`CcCvuZA`(K}y) znv}jAgmPMRX%JYv^&)?7)2VWO=XiRp5%?bYW6>!W0dl6Tr>qGqWp#<;MPBe(Hg3np z;@)S>QZ6{9uA{l%e~!ms(76AzBXr?1Pfs-{C49bi)j=`j-mzo2D}?q~_MrOAM)m~+ zF;nX{KgPn9DyUVO7c_bN!aIO4PlwrA_)%hxE2Uc$svXokpz~QP?qBfVP#Lh z;DOEOH@VCGPEt4(c~5~PpsK2HQ+YDs{BKU1<*5F{^ktcaAT-vxVp76*R8EUOwSH>w z7XZ;j@(FhsY5bYCB_Tj9ZjKwv8(mQB1N(ji~4`f zs1%l%%w!1V2?NE;9>WO0avxyI+fQY(6~RZCzS~;h zdtFo^fM6H6_nW)bPM`3VGX7HUs)%K(&wa~cn3!|ctcl+tM+K<9CuHo!n`3o9>~brq z?6_T%OVvp4CAfcGM@1@jMhM(j7?3%toYn8Z?$W|E;N~W;Q-WThYL7qu|ehf&+CDhGAngHO-~q_}{D7b7VG$cG3e@-ya+p%1>C? zigk%>gQ-JhO(ibAqGTA$)doe!o_>#8F!U9LOWyD002dpccnq-c*FOEn|rP$!d_nF zLui}t%+h*_OnQ}95Ns;WWS%d5Hc}%RX7h@;$wYjTo;h>%ve~Q1J7ya$Lx9)ioI&jn z`opDGrBT1{0^SUbzhs&#vT^TUWFhrFNf!H^sPe;1z6{_wE>^xEM+lAH#q5vod$Q z3Wn88b(j5ZAHZjmI(1P3f?Xupa{h^d@7c>U+^;lGjvdj(Im%A7@g9 zt~ggFco<{|Ap6W6lp94gXWu6%-7@vbHnh5MptpW8rKc*(;tn_5zmm1WTOMFj&hY5x zWN#z9HopbdH-l6kjl`ii+W#0v+5`#@#8#FG9}~(l46bz5WBiowJTyJ z&N5G2>&D#qPM@)B$lLg-oWx}N*{_|PcnLr0@IgM{&(SXL7u71K({m+`2RXBlqYEGx-qeTW9ue^}#LBag#<4 zFXlq&nv(jel2v1ZrhRHbb8k__T}{VRfUrXMQD+Led8NER&$)le%oJGQi62>Aq=`U% z`*kq}O5a=$tE?FO?#1af_Qtj~vL^?5y*K=J8a)@bYFc*)4-~KYSF%0GI*%^mkpEac z9nf^4{7E8$270fg(YcTB3D>5w`H%e;ewYYU4inY1RP<8QSts5nzKPJTw?V2YgYygE z=5^Ax({1U=F*rqBBy#;r#@&9Y0O1o;YEQRAE{J~qIH)FX-X79s_WTd>$?Qi);7{Z| zxyxmmi&q|kAMU_DrV0b(oOIoS$!2MPmS|S2-RXTjsw^*Zwk)as0i<6mw8*pD3{=0>;E``@jjZWUq9~jVe6SG@*?3D zq4#XL%=t>rggVY`2g)mK0 z#XyGoslxUMNTNl5euvU7xZL~YO+&uX&*cEsgG>j^(j^9@uGk;i*CsIaDcAJNySUD0 z;h!Cq!;W3a^|z!i1sX`@h~+e&UPyAE%C1p+=z_eh4nE8m(*{KU>K!1Qm4vZw#RWA# zuau!xR{Pyl$8Ix6mp~cSebRjo_Ru67C$145MCdD51w0#DGIsnMo%ur?t{oQu(O=7i|C~!gJj0jARfL%h0!dmxTE%{NS6RVYU23^R zag-)_AJ%VFh8(r@R4k9z&{F+amD7uTi?b4Tuk_8K169ISZT|j{0+C#7|!^s}k zgZ$L&b^L08MCP1$VvVv**YE8giWjNwD3vexW+d`C|D5n{vs6AScUTq zYJA0K(to2eSJ$_F2CK21zX+)VE8|(D9i^fTo(p{WD$Cfz>h_7suDP_jKb|Pby9c1~5ql{0qjZiK1>Dt8ef=%`0gC zQ;upC`=sp+_U8M;obmF;N~?p^T=@d5z{b@q@FCQ0N2o<`*e)1K5{4Bmy*r5gN*SsC zb&Z&fS|JU;emBg5CTqaCH}TWmRppu_fSb^2?n>2YXm}>$5-eMN$It47V>cLP#qaHi z3-~6Hq%mCAd=`nqlsa@N3CQsT3^$dWY3)vka-1pL()(dJ^ z!uCwE(RO%_DdtMcS9);A@kd)hdIT=gqFfv}%hZBjW_3Okws|?gWXR>I5u6Z?g(z;Z z`45hNi4kPhR%b|Sk@D*DY#652tCoD+__Bw4!5v~F1tN(qYDEpDd~nZc_4g)8~8aySs@hAs2RM*MG2#%}hV>L}*%HWDm*%7pdjQ;=9#rfF%6UmH;5UH8W*QFv7!QRGS=I4D&SZ@`xrsS6SEx!Rh zjjA%4&R04Gmot4`nAW3_xo>m^SGiyThv|+ZdQMnoX32J>HpVN(-i}7TJQ@?%=u#S( zYqY}7l5^@ZBCzsKzi9EN@R6v7p5Kg*Uz%8od);!t%-J_y2KmsqNpLKZm=kR?av5uT-7H@&DEB{{P!Te{7Gc z6G-kcZpP9lK6v{*w`=A;WB`QO*k}Js38=IutNtZyT^Nc!aR7Z4j>kUNi36z!rD9CA z_3GisvXA%}1>_^v%c~D+5%k;$v(7+Rsx2iX**AR7uo)iSGE%%tk(|A2=y>&z%2h#k z`pldLuE=DMi%2eW^xisTV#(?NxmH3Quk_j1m~}upHpB;Ct|b&U=GVD-nvggTWXF&o<#|Gd$r(t-71diOi074Fg*D)j^0vub_#B%O)WNn<<*%l$Jtz@S4|SnJ4a=`3n?chM`KVJ zs93iUn(GN)FZ5<*$@GvR891{a*}|#SxZ&SZY64 zWBEfMyQPdLXJC@__m5TvSGiooo@&+6cdkVY*rFsXoZ-Fp{{IKzErW4pZ=(bkudQAx zf0%67p>BCbK@vZV63rX`I4c4m&02Zw%?y_TJNR}q6ZLmbfYL5xihB!>xs){`W%v51 zn;WicWunnD!AZeFZNxXV{tB6a(!OGV2^i@3>wG2}VsLwS1d;$exk$yZ?p)adff zc7L4sPN%*biz(yTu{v`=FtlZ5t?ypxiJkWKD#9=wJTBtiiY@de6u{2fSqD5u@AC$P zk0dRrpsl)h92-h{DF{Ecby!n{#ij_))M85VRc}WQQhv&Icv2JpiOl%)c+;o|lk&~X z;0*K)U`wNw+-ib_#F}52Grgh7wZCy2v5TxVE*g`!&DJh&^d!`eEZhN44U}-)S&&Rr zOuh^8!l_DnV%19aFj94j@%}-pb3}bqHsvl43(F<(r9Y$ zAWWbj@J6xoue%JQ&a(%whdV1K@5sE9Ma*?nPhOSaJm}ntNzc5GXKr+q$s47FLjuvw z#M`ji5T?aW=N$;_Cs<;XU|~8^{?_x zjlcbuz(|*i^&hc<;20su(iF;AJ&EsdpRm!(p*^DtdhJCB!2{@dt0MBUWTHDd8JMb8 zXWgRcm4Oaa>p^CZ)DN(*1Q;9=X$#fQE2{>=%Wb(-ls5;rQ`^@M`ntnLuo+kOw95Lk zs~#$gI`?~ForR}bnnjnNYJ(Mk{_BONB@0{9i*kWaJ0tcjvfrGGTMjD7Rc^#Cn=&9% z-l*sNwpN57&sO;$8of|S$8c~jGSKbeNS?|yS2qFW>s_AIR^D_?Jakzc_agjU_pc=K zu1-KMr$AojDtxQ-%xRg^9W5lJgVF)v;`KB&S5$V0Vhc|shmQi66+7Jkf)kZliha*- zo2!0~zwL7|M?WkT)~~chR=hiu=N^7o_*}doZ)kZaYy*qRs+vS>2fVu3WBetFJ-JY2 z$*gi~2V93(q1)lh@o^bgXsXU(h*DZ*rp-N}FAnDG``YpZ7C+kZfv)I|_D`kj!K^W% z`E|N{f~ucw;OI0bH;ijDyNoq0V4@AhT)?)(RYC|p$z?HMCqpY%nPp&_kyE7@l{;;i zxLF_X3fq%c=<(7QMYeM-mc7c|>pODl z118z2fJ~0TO=cm)HjbRJc2!(s^`=`jkL4J>bY)`^LG+{jDciL6Ki}~Cbu(=jm^v=A zx~mg7soE1~7D2_aU7^=QtOs&@K5qS~-&{QvhR>I@ytbXZR|z6*zNS7o67sGQ-ZwA= zKK~)V;*9v`q%tv5zFlB7;}pn{Z+LWjdU>)he1lyfuh4b=!N^YS_IDrUT>iJ@8eTlI zzgF>bGLmBvM|eT}Ohb6{WFS>+Dol&}(LSv`5!xn6l|bv$$8`&cLovJnm)XuH;0L9} z)v{5OUnQqq)tg-y)|#~CiJb~NgvaF;j{m2XbB|~8?c@0BNzz#qWko3q;iYogqJB9R zDN2M5%?QQQoW=Y~ba2WcQsgWnTa9fP8zI>$5?i*I^I>Zi8X2=^J@NbXJpVlX@!bF2 z_v^au>-v80>%P9P>-+k=zZdImN)9?c-fYGPs|8F1&$BEg(ZJhHYA%JO(kcQ{t^xoZ z;XhQV^Vt*CQc^n74C*c}uw2LNl{e|-*@jhOzS2%6KiRZpo-}!A>I^O8#HYDnh~rNk zsAl8bnaG5UJb?=@9%w8aOnfmU?|vo6xC}J?{dM&to4|zWQp#*>-1}T_RFFjADU~FA zE;@Wrdg#ncj0@AsRXW9rS=({YqlVgPo8*tP7~}?%qYvyXXi7?1;u)8xntdRfGOFON)MjzGKK7JL)j8(o{y0Z=H_lX z9nxz7>E?SI{jx}Ed>2p~y*1%;+EreRexZI-*v-gEqJ3 zegR?nZRe5KLqN3$qM%pOU$`Q!fbNi|ibN$Qs*We=mre(cjojL~n?dv;+LZCbg#9~u zbe-Q53@HQ*hfbH|qb1Vk6GrlKbr(UWLI;ThV^MNuhRJgb1n09o`EIkl9Hl8c zL3FSvl{*yaP)=ctQ1vR6<3edZ;_+j~@J02pleo*OR}|0%oYlvKxBA|_Lyw+_5+ zL&LZYY~eN&YM-s{wcgGPcyP5MEs%H!A7MtaLlr|TV!V)V@??}W6KVl~(%M_M826uK zxZ~^khZ)E{M9rZ6tOOtvuPWuJ&*FZ~G&t30!<@pH=a(a&NAM*qjW0wj& zza>o3wact|W*zWnPP;N-5T6lPH=CB#_1=}pX<$p@O!3>6UBxd5n`MHqdx~}1zojf@ zI2&tBF4$wH?J?nI$+MbkLUpqbxyl5?~eQ+u+1Q+$xl5Lic7`5>wT0_Gia`&W))^IXjvA~Ku zIqq3PrR%hrZCp8Rd_)(XPwK+x9WM3E`X)$JC_z0JCXP_z27v1UP8#bs!ph^tnxndB z{a*8A!y6+)qAmJpTg{LlpzjidEMrea+QCYE*InhKOWLck(7s?N+`D@qAB+ zn!v)p_nxzM({1GSBs*CFajOJksO%wZxYJI{hhl{mZFL%uZtn=M`J{2`ZT)zXwr6T_ zPEd?I`PmlNf8dt-WzUPjDp=$QP1$vaIWhQa5hez~3ov^)c7P6Y^%a!*u|v^NKhJZ5 z!#fRMms5nCTw5Kpx z_;P?j$PBaxMuX!A>Maqka+5C|X}w|@c;{oNodmr!!rX9V9jEtgI(sK&L=l0eKwmoR zb45kuLR4_-jj24)b#QkN@OeC0VrhO(5RK9YtIrnokxxJd>G}JL)g4Xgp>`BV8RzEw z+Y;2C-3A5`r;iFXu!POmim@@h+<+pTAHQIA7srl4=G&9#Z}RRVI_r({3E`FEY(GLM zlE`A;@BComacXu(SkXsT4|J0UoP++CWcE*ibURali%)Cw+U2OAkeQuU(uMFnq{06p zIgE6pjUBJtTzJiD&-f{lmP-*Sjuhm( zs%x<>?E`CRP|wj55RlI>jqh1>rcA2QIf5IZT0cBmsWc>M^68AA0K0HJWY+I)ETvs z@}C>B=*Vo+Tol9&Gwox5<#PW$7N0WkfW+iV1jQ=&L6v% ztYnhy`~^fS$@VAZogQB>i|)g|6Xat<@n4=C+b37plCZWWGR&p_rN-yf(hWUD{-805 zHU;l$x+l0Yr;Q5(OC0khOSzm)45S#K9HBa2Lg1#&QlX*pALx6}#eqL1E?Lm0>#Bse ztt<8f^A{wPOyajPM>X&EQaB4&&oN|l>2}XNTkL#$=Yxg!!tGvmyCk1QP8Gr2yzBmu zFkcTUKdE9rD*aFmSET>LqcHrK?j)d)b~-5G^9R6bjH+vyb~`-1Xes0#7C7Eu-M**RxcE{E7a`)rtE%}z33R66%mz^7-Xg}A!8M3G*PXaO3|RR zVa9*Fy?fN=9D1TH?fGK*Y_cRdqE$e+E7|;iTsyFm+{YSQ|LyQp0|g&bD)ve18y8|Z zdENOFo*C1M2n+?fO&1NT?6`MR}Ghpc`OI}^g_VU zDkGC(P?^l5ot9_6AE=qBVjeb1#h#O|HKJsga^ZaBPmewR{ zZzCuur*1*bvPX!c2CstuHrJtLBaDSwD5qpr;_nQ%@KNXYEJfgCwv+IOmZzH+u}uoA z6}m)Pe7k8sS7y7|%s-c;CceA`vHxX`ROLs}LrTl=0Lm>lWeDCnj1ws9{^Hu=|0vJ) z?%Ccri`Ef*efb%{d_e*atW!xBS1~FOD|kh>97F=oh)QkzIru)EE?esRCdZ1o>%Y8E zuVo!<%MZ$-IZ2sO95UF7ydta>9OwOF-$Qe0thA-)WwHNG{Z+$1Sq5%2ll%9Fqi)E3 zVJH0nbOzA#SVh<4YmE|ZCGoZ+Ry_TEC|PVE8f}zTPS-&NM0t^B(2GO7<0%T_ep93G z9QFBUkkJ{#+P~c8Zgqiha}aPiKB|qmmkR z+Iz39TXA@h;$P6n|7WrP9%8aQ{BI1IDmyP;^-lkT_v1!DC` A9{>OV literal 0 HcmV?d00001 diff --git a/src/_static/img/vim.svg b/src/_static/img/vim.svg new file mode 100644 index 000000000..4c4dbfcf2 --- /dev/null +++ b/src/_static/img/vim.svg @@ -0,0 +1,56 @@ + + + + + + + + + file_type_vim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/vscode.svg b/src/_static/img/vscode.svg new file mode 100644 index 000000000..0efbaffc7 --- /dev/null +++ b/src/_static/img/vscode.svg @@ -0,0 +1,2 @@ + +file_type_vscode3 \ No newline at end of file diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt new file mode 100644 index 000000000..5a30e7b7e --- /dev/null +++ b/src/appx/code_edit.txt @@ -0,0 +1,8 @@ +############################################################################### + Code Editors +############################################################################### + +Writing Python using IDLE or the Python Shell is great for simple things, but +those tools quickly turn larger programming projects into frustrating pits of +despair. Using an IDE, or even just a good dedicated code editor, makes coding +fun — but which one is best for you? :cite:`realpython:code-edit` diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt new file mode 100644 index 000000000..704d464f0 --- /dev/null +++ b/src/appx/env_path.txt @@ -0,0 +1,3 @@ +############################################################################### + Issue - System Environment PATH +############################################################################### diff --git a/src/conf.py b/src/conf.py index f780e8970..4b3dad418 100644 --- a/src/conf.py +++ b/src/conf.py @@ -12,13 +12,15 @@ project = "Python Training Course" project_copyright = \ f"{datetime.now().year}, Python training course authors and contributors" -authors = "Vladyslav Ponomaryov \\and Serhii Horodilov" +authors = "Vladyslav Ponomaryov \\and " \ + "Serhii Horodilov" version = "2022.11.dev" # general configuration master_doc = root_doc = "index" extensions = [ "sphinx.ext.autodoc", + "sphinx.ext.imgconverter", "sphinxcontrib.bibtex", "sphinx_rtd_theme", @@ -51,3 +53,7 @@ latex_documents = [ (master_doc, latex_doc, project, authors, "manual", False), ] +latex_appendices = [ + "appx/code_edit", + "appx/env_path", +] diff --git a/src/index.txt b/src/index.txt index a6b7a1184..c3202897d 100644 --- a/src/index.txt +++ b/src/index.txt @@ -16,6 +16,15 @@ linux/index deploy/index +.. only:: builder_html + + .. toctree:: + :name: appx + :caption: Additional materials + + appx/code_edit + appx/env_path + .. rubric:: References .. bibliography:: diff --git a/src/intro/index.txt b/src/intro/index.txt index aca6a9589..d27f152ed 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -1,3 +1,176 @@ -******************************************************************************* + + There are a whole bunch of common programming tasks that are easy in + Python. For someone who is not yet a programmer, who wants to become + a programmer, for those people Python is particularly easy to get. + In Python, every symbol you type is essential. + + |guido| Guido van Rossum + +############################################################################### Introduction to Python -******************************************************************************* +############################################################################### + +|python| **Python** is a high-level, interpreted scripting language. +It was created in the early 1990s by Guido van Rossum at Stichting Mathematisch +Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of +a language called ABC. Guido remains Python’s principal author, although it +includes many contributions from others. + +Python 2.0 was released in 2000, and the 2.x versions were the prevalent +releases until December 2008. At that time, the development team made +the decision to release version 3.0, which contained a few relatively small but +significant changes that were not backward compatible with the 2.x versions. +Python 2 and 3 are very similar, and some features of Python 3 have been +backported to Python 2. But in general, they remain not quite compatible. + +Both Python 2 and 3 have continued to be maintained and developed, with +periodic release updates for both. However, an official End Of Life date of +January 1, 2020 has been established for Python 2, after which time it will no +longer be maintained. + +Python is still maintained by a core development team at the Institute, and +Guido is still in charge, having been given the title of BDFL (Benevolent +Dictator For Life) by the Python community. The name Python, by the way, +derives not from the snake, but from the British comedy troupe Monty Python’s +Flying Circus, of which Guido was, and presumably still is, a fan. It is common +to find references to Monty Python sketches and movies scattered throughout +the Python documentation. + +Here are some significant facts about Python. + +.. seealso:: + The original article in English by :cite:author:`realpython:py3-intro` + +.. rubric:: Python is popular + +Python has been growing in popularity over the last few years. +The 2018 Stack Overflow Developer Survey ranked Python as the 7th most popular +and the number one most wanted technology of the year. +By the end of Q-4 in 2022 Python is the **top** language on all GitHut metrics +:cite:label:`github:stats`. + +Here are some logos of unknown companies across the globe who uses Python: + +.. centered:: + |google| |facebook| |instagram| |spotify| |quora| |netflix| |dropbox| + |reddit| + +.. rubric:: Python is interpreted + +Many languages are compiled, meaning the source code you create needs to be +translated into machine code, the language of your computer’s processor, before +it can be run. Programs written in an interpreted language are passed straight +to an interpreter that runs them directly. + +This makes for a quicker development cycle because you just type in your code +and run it, without the intermediate compilation step. + +.. rubric:: Python is free + +The Python interpreter is developed under an OSI-approved open-source license, +making it free to install, use, and distribute, even for commercial purposes. + +.. rubric:: Python is portable + +Because Python code is interpreted and not compiled into native machine +instructions, code written for one platform will work on any other platform +that has the Python interpreter installed. +This is true of any interpreted language, not just Python. + +.. rubric:: Python is simple + +As programming languages go, Python is relatively uncluttered, +and the developers have deliberately kept it that way. A rough estimate of +the complexity of a language can be gleaned from the number of keywords or +reserved words in the language. These are words that are reserved for special +meaning by the compiler or interpreter because they designate specific built-in +functionality of the language. +There are only 35 :cite:`docs-python:keywords` in Python and they are: + ++--------+----------+---------+----------+--------+ +| False | await | else | import | pass | ++--------+----------+---------+----------+--------+ +| None | break | except | in | raise | ++--------+----------+---------+----------+--------+ +| True | class | finally | is | return | ++--------+----------+---------+----------+--------+ +| and | continue | for | lambda | try | ++--------+----------+---------+----------+--------+ +| as | def | from | nonlocal | while | ++--------+----------+---------+----------+--------+ +| assert | del | global | not | with | ++--------+----------+---------+----------+--------+ +| async | elif | if | or | yield | ++--------+----------+---------+----------+--------+ + +.. rubric:: Python is general purpose + +Python is everywhere. Talking more specific common scopes for Python developers +are :cite:`python-usage`: + +- Web Scraping Applications +- Data Science Solutions +- Machine Learning Applications +- Web Development +- Game Development +- Scientific and Numeric Applications +- Image Design and Graphic Design Applications +- Finance Fintech Platform +- Language Development +- Operating Systems + + +.. toctree:: + :caption: Contents + :name: intro + + install + interact + +.. static files within this document + +.. |python| image:: ../_static/img/python.svg + :width: 24 + +.. |google| image:: ../_static/img/google.svg + :width: 64 + :alt: Google + :target: https://about.google/ + +.. |facebook| image:: ../_static/img/facebook.svg + :width: 64 + :alt: Facebook + :target: https://www.facebook.com/ + +.. |instagram| image:: ../_static/img/instagram.svg + :width: 64 + :alt: Instagram + :target: https://about.instagram.com/ + +.. |spotify| image:: ../_static/img/spotify.svg + :width: 64 + :alt: Spotify + :target: https://support.spotify.com/us/article/what-is-spotify/ + +.. |quora| image:: ../_static/img/quora.svg + :width: 64 + :alt: Quora + :target: https://www.quora.com/about + +.. |netflix| image:: ../_static/img/netflix.svg + :width: 64 + :alt: Netflix + :target: https://about.netflix.com + +.. |dropbox| image:: ../_static/img/dropbox.svg + :width: 64 + :alt: Dropbox + :target: https://www.dropbox.com/about + +.. |reddit| image:: ../_static/img/reddit.svg + :width: 64 + :alt: Reddit + :target: https://www.redditinc.com/ + +.. |guido| image:: ../_static/img/guido-headshot-2019.jpg + :width: 100 diff --git a/src/intro/install.txt b/src/intro/install.txt new file mode 100644 index 000000000..eba2332b0 --- /dev/null +++ b/src/intro/install.txt @@ -0,0 +1,133 @@ +******************************************************************************* + Install Python +******************************************************************************* + +The `Python wiki `_ +briefly describes the installation process. + +.. note:: To become a **true** professional, you need a special software called + :abbr:`IDE (Integrated Development Environment)` or at least a code + editor supporting syntax highlight. Refer :doc:`/appx/code_edit` for + more information. + +Linux +===== + +On most Linux distros Python comes pre-installed and/or all distro have it +available in their package repository (I haven't seen the one which does have). +The installation process depends on the distro, but here are some examples how +you can install it: + +.. code-block:: + :caption: Install Python + + # Debian / Ubuntu (and other distros that uses ``apt``) + apt install python3 python3-dev + + # ArchLinux + pacman -S python3 + + # RedHat, CentOS, Fedora + dnf install python3 python3-devel + + # Gentoo + # ... you should know what to do + +MacOS +===== + +For newer versions of MacOS Python is no longer included by default and you +will have to download and install it. + +The process is described at: `Using Python on a Mac`_. + +Briefly, you are invited to visit `downloads`_ and download the latest +stable version of Python. A "universal binary" build of Python runs natively on +Mac's new Intel and legacy PPC CPUs. + +After the installation you would get: + +- `Python 3.x` folder in `Applications` folder. + Standard development environment (`IDLE`) and `PythonLauncher` included. +- A framework `/Library/Frameworks/Python.framework` included libraries and + executables. + +Install from Homebrew +--------------------- + +Python for MacOS is available via Homebrew. You are to search `formulae`_ for +the latest available version. In general, it's as easy as: + +.. code-block:: shell + + brew install python@3.9 + +Windows +======= + +As for MacOS, here is the official documentation: `Using Python on Windows`_. + +For Windows' users the stable release is available from `downloads`_. Just +download the installer and proceed to common steps to install software. + +.. important:: It's recommended to **Add Python3.x to PATH**, this will avoid + problems at the beginning of your journey with Python + +.. image:: https://docs.python.org/3/_images/win_installer.png + :width: 600 + +Going on with **Install Now**: + +- Python will be installed to your user directory +- Python Launcher will be installed according to the option at the bottom + of the page + +Using **Customize installation** will perform an *all-users* installation. + +Removing the MAX_PATH Limitation +-------------------------------- + +Windows historically has limited path lengths to 260 characters. This meant +that paths longer than this would not resolve and errors would result. In the +latest versions of Windows, this limitation can be expanded to approximately +32,000 characters. This allows the open() function, the os module and most +other path functionality to accept and return paths longer than 260 characters. + +You will need PC administrator assistance to perform this action. + +Install from the Microsoft Store +-------------------------------- + +You can install from the Microsoft Store in two steps: + +#. Open the Microsoft Store app and search for ``Python`` + The result should look like: + + .. figure:: ../_static/img/microsoft-store-search.png + :align: center + + Microsoft Store - search results for "Python" + + Select ``Python 3.9`` or the higher available version. + +#. Click **GET** and wait until the installer is downloaded. The installation + process should run automatically. Follow the installer's instructions. + + .. figure:: ../_static/img/microsoft-store-get.png + :scale: 50% + :align: center + +Online Interpreters +=================== + +Installing or updating Python on your computer is the first step to becoming +a Python programmer :cite:`realpython:install-and-setup`. + +But if you cannot install Python at the moment for some reason, are can go +with online interpreters. `repl.it `_ provides the ability +to create and store Python scripts (they are called *repl* here) for free. + +.. _formulae: https://formulae.brew.sh/formula/ +.. _Using Python on Windows: https://docs.python.org/3/using/windows.html +.. _Using Python on a Mac: https://docs.python.org/3/using/mac.html +.. _downloads: https://www.python.org/downloads/ diff --git a/src/intro/interact.txt b/src/intro/interact.txt new file mode 100644 index 000000000..19655ecaf --- /dev/null +++ b/src/intro/interact.txt @@ -0,0 +1,151 @@ +******************************************************************************* + Interacting with Python Interpreter +******************************************************************************* + + It’s time to write some Python code! + + :cite:t:`realpython:interact` + +In short there are three major ways to do something with Python: + +- interactive Python console +- running code from file [#]_ +- use online editors (like `repl.it `_) + +Using Python interpreter interactively +====================================== + +Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight +forward way to start talking to Python. This simply means starting up the +interpreter and typing commands to it directly :cite:`realpython:interact`. +The interpreter: + +- Reads the command you enter +- Evaluates and executes it +- Prints the output (if any) back to the console +- Loops back and repeats + +Starting the interpreter +------------------------ + +In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the +installer placed a shortcut on the desktop to launch the Python. + +For example in Windows the interpreter can be found in the **Start** menu +labeled **Python 3.x**: + +.. figure:: ../_static/img/start-menu-python.png + :align: center + + Windows start menu Python group + +.. hint:: In case you are getting error saying python is not installed, but you + are sure that the interpreter **is installed** - this means you have + no Python in your ``PATH``. Message may look like: + ``'python' is not recognized as an internal or external command`` / + ``python: command not found`` + + Refer :doc:`/appx/env_path` for problem solution. + +The alternative is to launch from a terminal window: + +- **Command Prompt** in Windows +- **Terminal** both in macOS and Linux + +.. figure:: ../_static/img/cmd-python.png + :align: center + + Start Python via Command Prompt + +.. figure:: ../_static/img/terminal-python.png + :align: center + + Start Python via Terminal + +Running code +------------ + +Put the Python code in interactive console and press enter to execute it. + +#. Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after + it +#. Type the command ``print("Hello, World!")`` +#. Press enter + +.. code-block:: python + + print("Hello, World!") + +Your session should look like: + +:: + + print("Hello, World!") + "Hello, World!" + +If you've seen string "Hello, World!" printed back, congrats - you've run your +first program in Python. + +.. image:: ../_static/img/celebrate.svg + :width: 200 + :align: center + +Exiting the interpreter +----------------------- + +To exit the interactive console type "exit" and hit enter. + +.. code-block:: python + + exit() + +Running code from file +====================== + +A Python script is a reusable set of code. It is essentially a Python program - +a sequence of Python instructions - contained in a file. You can run the +program by specifying the name of the script file to the interpreter. + +Python scripts are just plain text, so you can edit them with any text editor. +If you have a favorite programmer’s editor that operates on text files, it +should be fine to use. Otherwise here are some options for the first time: + +- Windows: |npp| `Notepad++ `_ +- Linux: |geany| `Geany `_ + +Using whatever editor create a script file called ``hello.py`` and put the code +in it: + +.. code-block:: python + + print("Hello, World!") + +Save file keeping track on the directory you choose to save into. Now, open +the terminal or command prompt in this directory. + +.. hint:: In window you may open Command Prompt in the directory by typing + "cmd" to the address bar in explorer. + +In the terminal (or command prompt) type: + +.. code-block:: + + python hello.py + +Python will print string "Hello, World!". Your session should look like: + +:: + + python hello.py + Hello, World! + +.. footnotes + +.. [#] Files containing Python code are called *modules*. + +.. static files within document + +.. |npp| image:: ../_static/img/npp.svg + :width: 24 +.. |geany| image:: ../_static/img/geany.svg + :width: 24 diff --git a/src/refs.bib b/src/refs.bib index e69de29bb..fd8f08bde 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -0,0 +1,49 @@ +******************************************************************************* +Python training course bibliography database +******************************************************************************* + +@misc{realpython:py3-intro, + title = "Intoduction to Python 3", + author = "John Sturtz", + url = {https://realpython.com/python-introduction/}, + urldate = {2018.5.21}, +} + +@misc{github:stats, + title = "{GitHut 2.0}", + author = "Fabian Beuke", + url = {https://madnight.github.io/githut/#/2022/4}, +} + +@misc{docs-python:keywords, + title = "{Python Documentation}", + url = {https://docs.python.org/3.10/reference/lexical_analysis.html#keywords}, +} + +@misc{python-usage, + title = "Top 10 Python Uses for 2022", + author = "Yancy Dennis", + url = {https://python.plainenglish.io/top-10-python-uses-for-2022-a10cbfb5f041}, + urldate = {2022.1.24}, +} + +@misc{realpython:install-and-setup, + title = "Python 3 Installation & Setup Guide", + author = "{Real Python}", + url = {https://realpython.com/installing-python/}, + urldate = {2020.8.31}, +} + +@misc{realpython:interact, + title = "Interacting with Python", + author = "John Sturtz", + url = {https://realpython.com/interacting-with-python/}, + urldate = {2018.5.28}, +} + +@misc{realpython:code-edit, + title = "Python IDEs and Code Editors (Guide)", + author = "Jon Fincher", + url = {https://realpython.com/python-ides-code-editors-guide/}, + urldata = {2018.3.13}, +} \ No newline at end of file From 083b35031366f5106834265cbfd16042de9967b3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 29 Jan 2023 06:05:49 +0200 Subject: [PATCH 013/689] Moved images to "assets" --- {src/_static => assets}/img/celebrate.svg | 0 {src/_static => assets}/img/cmd-python.png | Bin {src/_static => assets}/img/dropbox.svg | 0 {src/_static => assets}/img/emacs.svg | 0 {src/_static => assets}/img/facebook.svg | 0 {src/_static => assets}/img/geany.svg | 0 {src/_static => assets}/img/google.svg | 0 .../img/guido-headshot-2019.jpg | Bin {src/_static => assets}/img/instagram.svg | 0 .../img/microsoft-store-get.png | Bin .../img/microsoft-store-search.png | Bin {src/_static => assets}/img/netflix.svg | 0 {src/_static => assets}/img/npp.svg | 0 {src/_static => assets}/img/pycharm.svg | 0 {src/_static => assets}/img/python.svg | 0 {src/_static => assets}/img/quora.svg | 0 {src/_static => assets}/img/reddit.svg | 0 {src/_static => assets}/img/spotify.svg | 0 .../img/start-menu-python.png | Bin .../img/terminal-python.png | Bin {src/_static => assets}/img/vim.svg | 0 {src/_static => assets}/img/vscode.svg | 0 src/_static/img/guido-headshot-2019.png | Bin 1180935 -> 0 bytes src/intro/index.txt | 25 ++++++++---------- src/intro/install.txt | 9 ++++--- src/intro/interact.txt | 12 ++++----- 26 files changed, 23 insertions(+), 23 deletions(-) rename {src/_static => assets}/img/celebrate.svg (100%) rename {src/_static => assets}/img/cmd-python.png (100%) rename {src/_static => assets}/img/dropbox.svg (100%) rename {src/_static => assets}/img/emacs.svg (100%) rename {src/_static => assets}/img/facebook.svg (100%) rename {src/_static => assets}/img/geany.svg (100%) rename {src/_static => assets}/img/google.svg (100%) rename {src/_static => assets}/img/guido-headshot-2019.jpg (100%) rename {src/_static => assets}/img/instagram.svg (100%) rename {src/_static => assets}/img/microsoft-store-get.png (100%) rename {src/_static => assets}/img/microsoft-store-search.png (100%) rename {src/_static => assets}/img/netflix.svg (100%) rename {src/_static => assets}/img/npp.svg (100%) rename {src/_static => assets}/img/pycharm.svg (100%) rename {src/_static => assets}/img/python.svg (100%) rename {src/_static => assets}/img/quora.svg (100%) rename {src/_static => assets}/img/reddit.svg (100%) rename {src/_static => assets}/img/spotify.svg (100%) rename {src/_static => assets}/img/start-menu-python.png (100%) rename {src/_static => assets}/img/terminal-python.png (100%) rename {src/_static => assets}/img/vim.svg (100%) rename {src/_static => assets}/img/vscode.svg (100%) delete mode 100644 src/_static/img/guido-headshot-2019.png diff --git a/src/_static/img/celebrate.svg b/assets/img/celebrate.svg similarity index 100% rename from src/_static/img/celebrate.svg rename to assets/img/celebrate.svg diff --git a/src/_static/img/cmd-python.png b/assets/img/cmd-python.png similarity index 100% rename from src/_static/img/cmd-python.png rename to assets/img/cmd-python.png diff --git a/src/_static/img/dropbox.svg b/assets/img/dropbox.svg similarity index 100% rename from src/_static/img/dropbox.svg rename to assets/img/dropbox.svg diff --git a/src/_static/img/emacs.svg b/assets/img/emacs.svg similarity index 100% rename from src/_static/img/emacs.svg rename to assets/img/emacs.svg diff --git a/src/_static/img/facebook.svg b/assets/img/facebook.svg similarity index 100% rename from src/_static/img/facebook.svg rename to assets/img/facebook.svg diff --git a/src/_static/img/geany.svg b/assets/img/geany.svg similarity index 100% rename from src/_static/img/geany.svg rename to assets/img/geany.svg diff --git a/src/_static/img/google.svg b/assets/img/google.svg similarity index 100% rename from src/_static/img/google.svg rename to assets/img/google.svg diff --git a/src/_static/img/guido-headshot-2019.jpg b/assets/img/guido-headshot-2019.jpg similarity index 100% rename from src/_static/img/guido-headshot-2019.jpg rename to assets/img/guido-headshot-2019.jpg diff --git a/src/_static/img/instagram.svg b/assets/img/instagram.svg similarity index 100% rename from src/_static/img/instagram.svg rename to assets/img/instagram.svg diff --git a/src/_static/img/microsoft-store-get.png b/assets/img/microsoft-store-get.png similarity index 100% rename from src/_static/img/microsoft-store-get.png rename to assets/img/microsoft-store-get.png diff --git a/src/_static/img/microsoft-store-search.png b/assets/img/microsoft-store-search.png similarity index 100% rename from src/_static/img/microsoft-store-search.png rename to assets/img/microsoft-store-search.png diff --git a/src/_static/img/netflix.svg b/assets/img/netflix.svg similarity index 100% rename from src/_static/img/netflix.svg rename to assets/img/netflix.svg diff --git a/src/_static/img/npp.svg b/assets/img/npp.svg similarity index 100% rename from src/_static/img/npp.svg rename to assets/img/npp.svg diff --git a/src/_static/img/pycharm.svg b/assets/img/pycharm.svg similarity index 100% rename from src/_static/img/pycharm.svg rename to assets/img/pycharm.svg diff --git a/src/_static/img/python.svg b/assets/img/python.svg similarity index 100% rename from src/_static/img/python.svg rename to assets/img/python.svg diff --git a/src/_static/img/quora.svg b/assets/img/quora.svg similarity index 100% rename from src/_static/img/quora.svg rename to assets/img/quora.svg diff --git a/src/_static/img/reddit.svg b/assets/img/reddit.svg similarity index 100% rename from src/_static/img/reddit.svg rename to assets/img/reddit.svg diff --git a/src/_static/img/spotify.svg b/assets/img/spotify.svg similarity index 100% rename from src/_static/img/spotify.svg rename to assets/img/spotify.svg diff --git a/src/_static/img/start-menu-python.png b/assets/img/start-menu-python.png similarity index 100% rename from src/_static/img/start-menu-python.png rename to assets/img/start-menu-python.png diff --git a/src/_static/img/terminal-python.png b/assets/img/terminal-python.png similarity index 100% rename from src/_static/img/terminal-python.png rename to assets/img/terminal-python.png diff --git a/src/_static/img/vim.svg b/assets/img/vim.svg similarity index 100% rename from src/_static/img/vim.svg rename to assets/img/vim.svg diff --git a/src/_static/img/vscode.svg b/assets/img/vscode.svg similarity index 100% rename from src/_static/img/vscode.svg rename to assets/img/vscode.svg diff --git a/src/_static/img/guido-headshot-2019.png b/src/_static/img/guido-headshot-2019.png deleted file mode 100644 index 13c3ac23775967cb0900f04dfd336849ee920f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180935 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≠pU)S?KVii{kz(25U%&$*MXn+-n;jD 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 x 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

Sh@JtRA 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%0Duf18b~vFL+@^NH5!}+(AxX0vru|z?9wRD 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

$woZUfn!#x<2qo-L@^W^!ErKz76v5oZsnG) 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 z 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 JPDHLkV1fn(1{VMT diff --git a/src/intro/index.txt b/src/intro/index.txt index d27f152ed..322bee8fb 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -38,16 +38,13 @@ the Python documentation. Here are some significant facts about Python. -.. seealso:: - The original article in English by :cite:author:`realpython:py3-intro` - .. rubric:: Python is popular Python has been growing in popularity over the last few years. The 2018 Stack Overflow Developer Survey ranked Python as the 7th most popular and the number one most wanted technology of the year. By the end of Q-4 in 2022 Python is the **top** language on all GitHut metrics -:cite:label:`github:stats`. +:cite:`github:stats`. Here are some logos of unknown companies across the globe who uses Python: @@ -129,48 +126,48 @@ are :cite:`python-usage`: .. static files within this document -.. |python| image:: ../_static/img/python.svg +.. |python| image:: /../assets/img/python.svg :width: 24 -.. |google| image:: ../_static/img/google.svg +.. |google| image:: /../assets/img/google.svg :width: 64 :alt: Google :target: https://about.google/ -.. |facebook| image:: ../_static/img/facebook.svg +.. |facebook| image:: /../assets/img/facebook.svg :width: 64 :alt: Facebook :target: https://www.facebook.com/ -.. |instagram| image:: ../_static/img/instagram.svg +.. |instagram| image:: /../assets/img/instagram.svg :width: 64 :alt: Instagram :target: https://about.instagram.com/ -.. |spotify| image:: ../_static/img/spotify.svg +.. |spotify| image:: /../assets/img/spotify.svg :width: 64 :alt: Spotify :target: https://support.spotify.com/us/article/what-is-spotify/ -.. |quora| image:: ../_static/img/quora.svg +.. |quora| image:: /../assets/img/quora.svg :width: 64 :alt: Quora :target: https://www.quora.com/about -.. |netflix| image:: ../_static/img/netflix.svg +.. |netflix| image:: /../assets/img/netflix.svg :width: 64 :alt: Netflix :target: https://about.netflix.com -.. |dropbox| image:: ../_static/img/dropbox.svg +.. |dropbox| image:: /../assets/img/dropbox.svg :width: 64 :alt: Dropbox :target: https://www.dropbox.com/about -.. |reddit| image:: ../_static/img/reddit.svg +.. |reddit| image:: /../assets/img/reddit.svg :width: 64 :alt: Reddit :target: https://www.redditinc.com/ -.. |guido| image:: ../_static/img/guido-headshot-2019.jpg +.. |guido| image:: /../assets/img/guido-headshot-2019.jpg :width: 100 diff --git a/src/intro/install.txt b/src/intro/install.txt index eba2332b0..359ba78ef 100644 --- a/src/intro/install.txt +++ b/src/intro/install.txt @@ -73,8 +73,11 @@ download the installer and proceed to common steps to install software. .. important:: It's recommended to **Add Python3.x to PATH**, this will avoid problems at the beginning of your journey with Python -.. image:: https://docs.python.org/3/_images/win_installer.png +.. figure:: https://docs.python.org/3/_images/win_installer.png :width: 600 + :align: center + + Python installer first page Going on with **Install Now**: @@ -103,7 +106,7 @@ You can install from the Microsoft Store in two steps: #. Open the Microsoft Store app and search for ``Python`` The result should look like: - .. figure:: ../_static/img/microsoft-store-search.png + .. figure:: /../assets/img/microsoft-store-search.png :align: center Microsoft Store - search results for "Python" @@ -113,7 +116,7 @@ You can install from the Microsoft Store in two steps: #. Click **GET** and wait until the installer is downloaded. The installation process should run automatically. Follow the installer's instructions. - .. figure:: ../_static/img/microsoft-store-get.png + .. figure:: /../assets/img/microsoft-store-get.png :scale: 50% :align: center diff --git a/src/intro/interact.txt b/src/intro/interact.txt index 19655ecaf..9b78646f2 100644 --- a/src/intro/interact.txt +++ b/src/intro/interact.txt @@ -34,7 +34,7 @@ installer placed a shortcut on the desktop to launch the Python. For example in Windows the interpreter can be found in the **Start** menu labeled **Python 3.x**: -.. figure:: ../_static/img/start-menu-python.png +.. figure:: /../assets/img/start-menu-python.png :align: center Windows start menu Python group @@ -52,12 +52,12 @@ The alternative is to launch from a terminal window: - **Command Prompt** in Windows - **Terminal** both in macOS and Linux -.. figure:: ../_static/img/cmd-python.png +.. figure:: /../assets/img/cmd-python.png :align: center Start Python via Command Prompt -.. figure:: ../_static/img/terminal-python.png +.. figure:: /../assets/img/terminal-python.png :align: center Start Python via Terminal @@ -86,7 +86,7 @@ Your session should look like: If you've seen string "Hello, World!" printed back, congrats - you've run your first program in Python. -.. image:: ../_static/img/celebrate.svg +.. image:: /../assets/img/celebrate.svg :width: 200 :align: center @@ -145,7 +145,7 @@ Python will print string "Hello, World!". Your session should look like: .. static files within document -.. |npp| image:: ../_static/img/npp.svg +.. |npp| image:: /../assets/img/npp.svg :width: 24 -.. |geany| image:: ../_static/img/geany.svg +.. |geany| image:: /../assets/img/geany.svg :width: 24 From 7c6eeab28b17ffcc8bc7cfdf5446d08ef2759659 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 29 Jan 2023 16:25:09 +0200 Subject: [PATCH 014/689] Added 'make all' instruction (target) Updated Makefile with a target to build all the documentations. This action performs '_build' directory clean up and generates HTML and PDF outputs in 'en' and 'ua' languages. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 050679cb3..0234fb152 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,8 @@ SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) # Makefile targets all : clean + @make LANGUAGE=en html pdf + @make LANGUAGE=ua html pdf clean : @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" From 1137aa0074c6677b37427fbe76a294f84ab16e27 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 4 Feb 2023 03:36:28 +0200 Subject: [PATCH 015/689] Added appx.: userful software list --- src/appx/software_list.md | 96 +++++++++++++++++++++++++++++++++++++++ src/conf.py | 3 ++ src/index.txt | 1 + 3 files changed, 100 insertions(+) create mode 100644 src/appx/software_list.md diff --git a/src/appx/software_list.md b/src/appx/software_list.md new file mode 100644 index 000000000..fe72f2848 --- /dev/null +++ b/src/appx/software_list.md @@ -0,0 +1,96 @@ +Software List +============= + +7zip +---- + +**7-Zip** is **free software** with **open source**. + +- High compression ratio in [7z format](https://7-zip.org/7z.html) with + **LZMA** and **LZMA2** compression +- Supported formats: + - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM + - Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, + GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, + SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z. +- Self-extracting capability for 7z format +- Integration with Windows Shell + +https://7-zip.org/ + +cygwin +------ + +It is a large collection of GNU and Open Source tools which provide +functionality similar to a +[Linux distribution](https://en.wikipedia.org/wiki/Linux_distribution) on +Windows and a DLL (cygwin1.dll) which provides substantial POSIX API +functionality. + +**Cygwin is not**: + +- a way to run native Linux apps on Windows. You must rebuild your application + *from source* if you want it to run on Windows. +- a way to magically make native Windows apps aware of UNIX® functionality like + `signals`, `ptys` etc. Again, you need to build your apps *from source* if + you want to take advantage of Cygwin functionality. + +https://www.cygwin.com/ + +git[^cygwin-pkg] +--- + +Git is a [free and open source](https://git-scm.com/about/free-and-open-source) +distributed version control system designed to handle everything from small to +very large projects with speed and efficiency. + +https://git-scm.com/ + +PostgreSQL[^cygwin-pkg] +---------- + +PostgreSQL is a powerful, open source object-relational database system with +over 35 years of active development that has earned it a strong reputation for +reliability, feature robustness, and performance. + +https://www.postgresql.org/ + +psql[^cygwin-pkg] +---- + +A terminal-based front-end to PostgreSQL. It enables you to type in queries +interactively, issue them to PostgreSQL, and see the query results. +Alternatively, input can be from a file or from command line arguments. +In addition, psql provides a number of meta-commands and various shell-like +features to facilitate writing scripts and automating a wide variety of tasks. + +On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux +look for `postgresql-client` package. + +https://www.postgresql.org/docs/current/app-psql.html + +pgAdmin +------- + +pgAdmin is the most popular and feature rich Open Source administration and +development platform for PostgreSQL, the most advanced Open Source database +in the world. + +It is a PostgreSQL client (like a `psql`), but with web based GUI. + +https://pgadmin.org/ + +SQLite[^cygwin-pkg] +------ + +SQLite is a C-language library that implements a +[small](https://sqlite.org/footprint.html), +[fast](https://sqlite.org/fasterthanfs.html), +[self-contained](https://sqlite.org/selfcontained.html), +[high-reliability](https://sqlite.org/hirely.html), +[full-featured](https://sqlite.org/fullsql.html), SQL database engine. + +https://sqlite.org/ + +[^cygwin-pkg]: available for installation as a cygwin package + diff --git a/src/conf.py b/src/conf.py index 4b3dad418..844f50c9d 100644 --- a/src/conf.py +++ b/src/conf.py @@ -52,8 +52,11 @@ latex_engine = "xelatex" latex_documents = [ (master_doc, latex_doc, project, authors, "manual", False), + ("appx/software_list", "Software.tex", project, authors, "howto", False), + ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ] latex_appendices = [ + "appx/software_list", "appx/code_edit", "appx/env_path", ] diff --git a/src/index.txt b/src/index.txt index c3202897d..a0fbf68e3 100644 --- a/src/index.txt +++ b/src/index.txt @@ -22,6 +22,7 @@ :name: appx :caption: Additional materials + appx/software_list appx/code_edit appx/env_path From bb84b1bb6e930759cc4d5d9845f587f51268778a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 18 Feb 2023 14:48:39 +0200 Subject: [PATCH 016/689] Added docker to software list appx --- src/appx/software_list.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/appx/software_list.md b/src/appx/software_list.md index fe72f2848..9d5d6f34a 100644 --- a/src/appx/software_list.md +++ b/src/appx/software_list.md @@ -46,6 +46,19 @@ very large projects with speed and efficiency. https://git-scm.com/ +Docker +------ + +> The most-loved Tool in Stack Overflow’s 2022 Developer Survey. + +Docker helps developers bring their ideas to life by conquering the complexity +of app development. We simplify and accelerate development workflows with +an integrated dev pipeline and through the consolidation of application +components. Actively used by millions of developers around the world, +Docker Desktop and Docker Hub provide unmatched simplicity, agility and choice. + +https://www.docker.com/ + PostgreSQL[^cygwin-pkg] ---------- @@ -92,5 +105,6 @@ SQLite is a C-language library that implements a https://sqlite.org/ + [^cygwin-pkg]: available for installation as a cygwin package From 0fdaa9a2a629ab6942116bd8d6ea727f81e60519 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 00:17:47 +0200 Subject: [PATCH 017/689] Minor change - updated appxs headings --- src/appx/code_edit.txt | 8 +++++--- src/appx/env_path.txt | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt index 5a30e7b7e..f3308f071 100644 --- a/src/appx/code_edit.txt +++ b/src/appx/code_edit.txt @@ -1,6 +1,8 @@ -############################################################################### - Code Editors -############################################################################### +.. appendix + +############ +Code Editors +############ Writing Python using IDLE or the Python Shell is great for simple things, but those tools quickly turn larger programming projects into frustrating pits of diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 704d464f0..6786d036e 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -1,3 +1,5 @@ -############################################################################### - Issue - System Environment PATH -############################################################################### +.. appendix + +############################### +Issue - System Environment PATH +############################### From 9c37bbcc9854b988b62196fd5f2f685ad2b958ff Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 00:53:51 +0200 Subject: [PATCH 018/689] Added operator precedence appendix Added operator precedence table with description and footnotes. Updated references file. --- src/appx/precedence.txt | 68 +++++++++++++++++++++++++++++++++++++++++ src/refs.bib | 7 ++++- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/appx/precedence.txt diff --git a/src/appx/precedence.txt b/src/appx/precedence.txt new file mode 100644 index 000000000..d88a0a8ee --- /dev/null +++ b/src/appx/precedence.txt @@ -0,0 +1,68 @@ +.. appendix + +.. todo: + https://docs.python.org/3/reference/expressions.html#operator-precedence + +################### +Operator Precedence +################### + +The following table summarizes the operator precedence in Python, from highest +precedence (most binding) to lowest precedence (least binding) +:cite:`docs-python:operator-precedence`. Operators in the same cell have the +same precedence (use left-to-right precedence). + ++------------------------+----------------------------------------------------+ +| Operator | Description | ++========================+====================================================+ +| ``(expressions...)``, | Binding or parenthesized expression, list display, | +| ``[expressions...]``, | dictionary display, set display | +| ``{key: value...}``, | | +| ``{expressions...}`` | | ++------------------------+----------------------------------------------------+ +| ``x[index]``, | Subscription, slicing, call, attribute reference | +| ``x[index:index]``, | | +| ``x(arguments...)``, | | +| ``x.attribute`` | | ++------------------------+----------------------------------------------------+ +| ``await x`` | Await expression | ++------------------------+----------------------------------------------------+ +| ``**`` | Exponentiation[#]_ | ++------------------------+----------------------------------------------------+ +| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | ++------------------------+----------------------------------------------------+ +| ``*``, ``@``, ``/``, | Multiplication, matrix multiplication, division, | +| ``//``, ``%`` | floor division, remainder[#]_ | ++------------------------+----------------------------------------------------+ +| ``+``, ``-`` | Addition and subtraction | ++------------------------+----------------------------------------------------+ +| ``<<``, ``>>`` | Shifts | ++------------------------+----------------------------------------------------+ +| ``&`` | Bitwise AND | ++------------------------+----------------------------------------------------+ +| ``^`` | Bitwise XOR | ++------------------------+----------------------------------------------------+ +| ``|`` | Bitwise OR | ++------------------------+----------------------------------------------------+ +| ``in``, ``not in``, | Comparisons, including membership tests and | +| ``is``, ``is not``, | identity tests | +| ``<``, ``<=``, ``>``, | | +| ``>=``, ``==``, ``!=`` | | ++------------------------+----------------------------------------------------+ +| ``not x`` | Boolean NOT | ++------------------------+----------------------------------------------------+ +| ``and`` | Boolean AND | ++------------------------+----------------------------------------------------+ +| ``or`` | Boolean OR | ++------------------------+----------------------------------------------------+ +| ``if - else`` | Conditional expression (ternary ``if``) | ++------------------------+----------------------------------------------------+ +| ``lambda`` | Lambda expression | ++------------------------+----------------------------------------------------+ +| ``=``, ``:=`` | Assignment expression | ++------------------------+----------------------------------------------------+ + +.. [#] the power operator binds less tightly than an arithmetic or bitwise + unary operator on its right (``2 ** -1`` is ``0.5``). +.. [#] the ``%`` operator is also used for string formatting; + the same precedence applies. diff --git a/src/refs.bib b/src/refs.bib index fd8f08bde..88658275d 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -46,4 +46,9 @@ @misc{realpython:code-edit author = "Jon Fincher", url = {https://realpython.com/python-ides-code-editors-guide/}, urldata = {2018.3.13}, -} \ No newline at end of file +} + +@misc{docs-python:operator-precedence, + title = "{Python Documentation}", + url = {https://docs.python.org/3/reference/expressions.html#operator-precedence}, +} From 6d8924ce25cae63385fa56d309159e73e76f1588 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 02:25:53 +0200 Subject: [PATCH 019/689] Added string formating appendix Added conversion descriptions without code examples. Updated references file. --- src/appx/printf.txt | 73 +++++++++++++++++++++++++++++++++++++++++++++ src/refs.bib | 5 ++++ 2 files changed, 78 insertions(+) create mode 100644 src/appx/printf.txt diff --git a/src/appx/printf.txt b/src/appx/printf.txt new file mode 100644 index 000000000..5a7ea0f79 --- /dev/null +++ b/src/appx/printf.txt @@ -0,0 +1,73 @@ +.. appendix + +.. todo: add code examples + +################################## +``printf-style`` String Formatting +################################## + +String objects have one unique built-in operation: the ``%`` operator (modulo). +This is also known as the string *formatting* or *interpolation* operator +:cite:`docs-python:printf-style`. Given ``format % values`` (where *format* is +a string), ``%`` conversion specifications in *format* are replaced with zero +or more elements of *values*. If *format* requires a single argument, *values* +may be a single non-tuple object. + +The conversion flag characters are: + ++------------+----------------------------------------------------------------+ +| Flag | Meaning | ++============+================================================================+ +| ``#`` | The value conversion will use the "alternative form" | ++------------+----------------------------------------------------------------+ +| ``0`` | The conversion will be zero padded for numeric values | ++------------+----------------------------------------------------------------+ +| ``'-'`` | The converted value is left adjusted (override the ``'0'`` if | +| | both are given) | ++------------+----------------------------------------------------------------+ +| ``' '`` | (a space) A blank should be left before a positive number | ++------------+----------------------------------------------------------------+ +| ``'+'`` | A sign character (``'+'`` or ``'-'``) will precede | +| | the conversion (overrides a "space" flag) | ++------------+----------------------------------------------------------------+ + +The conversion types are: + ++------------+----------------------------------------------------------------+ +| Conversion | Meaning | ++============+================================================================+ +| ``'d'`` | Signed integer decimal | ++------------+----------------------------------------------------------------+ +| ``'i'`` | Signed integer decimal | ++------------+----------------------------------------------------------------+ +| ``'o'`` | Signed octal value | ++------------+----------------------------------------------------------------+ +| ``'u'`` | Obsolete type - it is identical to ``'d'`` | ++------------+----------------------------------------------------------------+ +| ``'x'`` | Signed hexadecimal (lowercase) | ++------------+----------------------------------------------------------------+ +| ``'X'`` | Signed hexadecimal (uppercase) | ++------------+----------------------------------------------------------------+ +| ``'e'`` | Floating point exponential format (lowercase) | ++------------+----------------------------------------------------------------+ +| ``'E'`` | Floating point exponential format (uppercase) | ++------------+----------------------------------------------------------------+ +| ``'f'`` | Floating point decimal format | +| ``'F'`` | | ++------------+----------------------------------------------------------------+ +| ``'g'`` | Floating point format. Uses lowercase exponential format if | +| | exponent is less that -4 or not less than precision, decimal | +| | format overwise. | +| ``'G'`` | | ++------------+----------------------------------------------------------------+ +| ``'c'`` | Single character (accepts integer or single character string) | ++------------+----------------------------------------------------------------+ +| ``'r'`` | Converts any Python object using ``repr()`` | ++------------+----------------------------------------------------------------+ +| ``'s'`` | Converts any Python object using ``str()`` | ++------------+----------------------------------------------------------------+ +| ``'a'`` | Converts any Python object using ``ascii()`` | ++------------+----------------------------------------------------------------+ +| ``'%'`` | No arguments is converted, results in a ``'%'`` character in | +| | the result. | ++------------+----------------------------------------------------------------+ diff --git a/src/refs.bib b/src/refs.bib index 88658275d..569696c29 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -52,3 +52,8 @@ @misc{docs-python:operator-precedence title = "{Python Documentation}", url = {https://docs.python.org/3/reference/expressions.html#operator-precedence}, } + +@misc{docs-python:printf-formating, + title = "{Python Documentation}", + url = {https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting}, +} From 1dd0145a53edeaa47fbd808b060f571a5ef29c2d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 02:59:15 +0200 Subject: [PATCH 020/689] Added appendecies files to Sphinx builder config --- src/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/conf.py b/src/conf.py index 844f50c9d..1020d144e 100644 --- a/src/conf.py +++ b/src/conf.py @@ -59,4 +59,6 @@ "appx/software_list", "appx/code_edit", "appx/env_path", + "appx/precedence", + "appx/printf", ] From f79b995b07ea678baedb23e6fad190b9c21158da Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 22:48:16 +0200 Subject: [PATCH 021/689] OOP introduction Added OOP introduction document. Updated OOP index file to suite changes. --- src/oop/index.txt | 4 + src/oop/intro.txt | 338 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 342 insertions(+) diff --git a/src/oop/index.txt b/src/oop/index.txt index eac03d924..2dba1e612 100644 --- a/src/oop/index.txt +++ b/src/oop/index.txt @@ -2,6 +2,10 @@ Object-Oriented Programming ############################################################################### +Object-oriented programming (OOP) is one of the biggest and most important +subjects in all of programming. It is a method of structuring a program by +bundling related properties and behavior into individual objects. + .. toctree:: :name: oop diff --git a/src/oop/intro.txt b/src/oop/intro.txt index 03be8014c..e45e7b8d3 100644 --- a/src/oop/intro.txt +++ b/src/oop/intro.txt @@ -1,3 +1,341 @@ ******************************************************************************* Classes and Objects ******************************************************************************* + +Conceptually, objects are like the components of a system. Think of a program +as a factory assembly line of sorts. At each step of the assembly line a system +component processes some material, ultimately transforming raw material into a +finished product. + +An object contains data, like the raw or preprocessed materials at each step on +an assembly line, and behavior, like the action each assembly line component +performs. + +Paradigm of Object-Oriented Programming +======================================= + +Object-oriented programming is a programming paradigm that provides a means of +structuring programs so that properties and behaviors are bundled together +into individual **objects**. + +For instance, an object could represent a person with **properties** like +a name, age, and address and **behaviors** such as walking, talking, running. +Or it could represent an email with properties like a recipient list, subject, +and body and behaviors like adding attachments and sending. + +Put another way, object-oriented programming is an approach for modeling +concrete, real-world things, like cars, as well as relations between things, +like companies and employees, students and teachers, and so on. OOP models +real-world entities as software objects that have some data associated with +them and can perform certain functions. + + +Object-Oriented Programming Concepts +==================================== + +So far, we can discuss the major concepts within the OOP paradigm. +And they are: + +:**encapsulation**: + + In OOP refers to the bundling of data with methods that operate that data, + or restricting of direct access to some of an object's components. + + .. note:: Encapsulation mechanism is often confused with *hiding*. It's not + actually that encapsulation does, but data hiding is available to + us due to the encapsulation. + +:**inheritance**: + + It's a mechanism of basing an object or a class upon another object + (prototype-based inheritance) or class (class-based inheritance), + retaining similar implementation. Also defined as deriving new classes + (subclasses) from existing ones such as a super class or base class and + forming them into a hierarchy of classes. + +:**polymorphism**: + + It's a provision of a single interface to entities of different types or + the use of a single symbol to represent multiple different types. + The concept is borrowed from a principle in biology where an organism or + species can have many different forms or stages. + +:**abstraction**: + + The process of removing or generalizing details or attributes in the study + of objects or systems to focus attention on details of greater importance, + it is similar in nature to the process of generalization. + The creation of abstract concept-objects by mirroring common features or + attributes of various non-abstract objects or systems of study is the + result of the process of abstraction. + +Define a Class in Python +======================== + +Primitive data-structures - like numbers, strings, lists etc. - are designed to +represent simple pieces of information, such as the cost of a product, the name +of a novel, or someone's favorite colors. What if you want to represent things +that are more complex? + +For example, let's say you want to track employees in an organization. You need +to store some basic information about each employee. Let's start from a very +beginning and try to represent an individual employee as a bunch of variables: + +.. code-block:: python + + first_name = "Serhii" + last_name = "Horodilov" + job_title = "Software Engineer" + +This approach has number of issues. Once it's required to store information +for more that one person, you are to create another set of variables: +``first_name_1``, ``first_name_2`` etc. The most terrifying issue is that these +portions of data have no relations to each other. Let's try to use ``list`` for +this purpose: + +.. code-block:: python + + serhii = ["Serhii", "Horodilov", "Software Engineer"] + vlad = ["Vladyslav", "Ponomaryov", "Release Manager"] + +There are number of issues with this approach as well. + +First, it can make larger code files more difficult to manage. If you reference +``serhii[0]`` several lines away from where ``serhii`` list is declared, will +you remember that the element with ``index 0`` is the person's name? Of course, +you can use ``dict`` structure, but... + +Second, it can introduce errors if not every person has the same number of +properties. + +A great way to make this type of code more manageable and more maintainable is +to use **classes**. + +All classes definitions in Python start with the keyword ``class``, which is +followed by the name of the class and a colon. Any code that is indented below +the class definition is considered the part of the class's body. + +.. code-block:: python + + class Person: + """Person class implementation""" + +Classes vs Instances +==================== + +Classes are used to create user-defined data structures. As it was mentioned +above OOP is about bundling data and behaviors. Classes define data structures; +each portion of data bundled within a classes is called **property** or +**field**. Classes also define functions called **methods**, which identify the +behavior and actions that an object created from the class can perform with its +data. + +.. code-block:: python + + class Person: + """Person class implementation""" + + first_name: str = "" + last_name: str = "" + job_title: str = "" + +A class is a blueprint for how something should be defined. It doesn't actually +contain any data. The person class above specifies that ``first_name`` and +``last_name`` properties are bundled within this class, but it don't actually +contain the person's name. + +While classes are blueprints, an **instance** is an **object** that is built +from a form has been filled out with information. Just like many people can +fill out the same form with their own unique information, many instances can +be created from a single class. + +.. code-block:: python + + serhii = Person() + serhii.first_name = "Serhii" + serhii.last_name = "Horodilov" + serhii.job_title = "Software Engineer" + + vlad = Person() + vlad.first_name = "Vladyslav" + vlad.last_name = "Ponomaryov" + vlad.job_title = "Release Manager" + +Methods +======= + +A function bundled within a class is called **method**. There are several ways +to define a class method. For now it's needed to know, that each method will +get a special argument at the first position. This argument is a reference to +an actual object. By convention, this argument is called ``self``. + +.. code-block:: python + + class Person: + """Person class implementation""" + + first_name: str = "" + last_name: str = "" + job_title: str = "" + + def get_fullname(self) -> str: + """Return a person's fullname""" + + return " ".join([self.first_name, self.last_name]) + +Initializing Instance with Data +------------------------------- + +There are several methods surrounded with double underscores (``__method__``) +that are called **dunder methods** or **magic methods**. We'll take a closer +look at these methods in the future. For now, it's ok to just one of these +special methods: ``__init__``. It initializes an instance with some specific +data. + +.. code-block:: python + + class Person: + """Person class implementation""" + + programming_language: str = "Python" + + def __init__( + self, first_name: str, last_name: str, job_title: str + ) -> None: + """Initialize a person instance""" + + self.first_name = first_name + self.last_name = last_name + self.job_title = job_title + + def get_fullname(self) -> str: + """Return a person's fullname""" + + return " ".join([self.first_name, self.last_name]) + + + serhii = Person("Serhii", "Horodilov", "Software Engineer") + vlad = Person("Vladyslav", "Ponomaryov", "Release Manager") + + serhii.first_name # Serhii + serhii.last_name # Horodilov + +Note, this call definition has a property called ``programming_language`` +defined outside of the ``__init__`` method. This property is shared across +all the class instances. + +Some More Details on ``self`` +----------------------------- + +``self`` is nothing except the convention. Instance methods will receive +a pointer to the instance itself as the first argument. In two words: it is +the actual object to call the method with. For example, the student class +defines attributes (student's name and scores) and methods available for +each student instance: complete the challenge or skip classes. While the +actual student instance contains data and methods related to the exact one +student. The ``self`` is a referer to this exact object. + +Data Hiding +=========== + +Many programming languages has *access modifiers* implemented. The Python has +also, but actually no. It's implemented as a convention-level. All class's +members starting with underscore are considered to be **protected** members +and should not be accessible outside the class instance; on the other hand +members starting with two underscores are considered to be **private** members +and shouldn't be accessible outside the class instance as well. + +.. code-block:: python + + class Employee: + """Employee class implementation""" + + def __init__(self, salary: float, hours: int = None) -> None: + """Initialize an employee instance""" + + self.__salary = salary + self._hours = hours + + def report_hours(self, hours: int) -> None: + """Report working hours""" + + # some validation stuff goes here + self._hours += hours + + def change_salary(salary: float) -> None: + """Change salary size""" + + self.__salary = salary + + def get_payment(self) -> float: + """Return a payment size""" + + return round(self.__salary * self._hours, 2) + +With the implementation above there are **public** attributes, but you can +still access data outside the class, but you definitely shouldn't. + +.. code-block:: python + + employee = Employee(100_500) + # you're able to make changes to protected member, but this code smells + # use dedicated method `report_hours` instead + employee._hours = 100 + # accessing Employee.__salary attribute will raise an exception + # the interpreter will add _className before each private member + # but you know - `change_salary` method is that you need + employee._Employee__salary + +Few Words about Inheritance +=========================== + +.. note:: Just in two words. This topic is discovered in the future articles. + +You can derive your classes from a super class. Derived classes are called +*sub classes* and the class used to inherit from is called *super class*. +Other terms are *child* class and *parent* class, but they are not common +(this is author's personal opinion). + +Just put a super class in parenthesis two inherit from it: + +.. code-block:: python + + class Dog(): + """Abstract dog implementation""" + + + class JackRussellTerrier(Dog): + """Jack russell terrier species implementation""" + +Few Words about Polymorphism +============================ + +You've already use this. The most simple explanation is **addition operator**. +For different types of data it would produce different types of output: + +.. code-block:: python + + ["a", "b", "c"] + ["d"] # the result is ["a", "b", "c", "d"] + "a" + "b" + "cd" # the result is "abcd" + +For example you may have various classes inherited from a base class, that +provides a common interface, but each derived class may implement the method +in its own way. + +.. code-block:: python + + class Animal: + """Abstract animal""" + + def voice(self): + pass + + + class Cat(Animal): + def voice(self): + print("MEOW") + + + class Dog(Animal): + def voice(self): + print("ARF) From fdcb84af873830acd0c106a7d66ae4db1457a734 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 22:49:07 +0200 Subject: [PATCH 022/689] OOP translation Added introduction translation. --- src/_locales/ua/LC_MESSAGES/oop.po | 474 +++++++++++++++++++++++++++++ 1 file changed, 474 insertions(+) create mode 100644 src/_locales/ua/LC_MESSAGES/oop.po diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/ua/LC_MESSAGES/oop.po new file mode 100644 index 000000000..3b7ceaf55 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/oop.po @@ -0,0 +1,474 @@ +# OBJECT-ORIENTED PROGRAMMING TOPICS +# +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-21 17:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.11.0\n" + +#: ../../src/oop/index.txt:3 +msgid "Object-Oriented Programming" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:5 +msgid "" +"Object-oriented programming (OOP) is one of the biggest and most " +"important subjects in all of programming. It is a method of structuring a" +" program by bundling related properties and behavior into individual " +"objects." +msgstr "" +"Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " +"найважливіших тем у всьому програмуванні. Це метод структурування" +"програми шляхом об'єднання пов'язаних властивостей і поведінки в окремі " +"об'єкти." + +#: ../../src/oop/inheritance.txt:3 +msgid "Inheritance" +msgstr "Наслідування" + +#: ../../src/oop/intro.txt:3 +msgid "Classes and Objects" +msgstr "Класи та Об'єкти" + +#: ../../src/oop/intro.txt:5 +msgid "" +"Conceptually, objects are like the components of a system. Think of a " +"program as a factory assembly line of sorts. At each step of the assembly" +" line a system component processes some material, ultimately transforming" +" raw material into a finished product." +msgstr "" +"Концептуально об'єкти схожі на компоненти системи. Думайте про програму як " +"про заводську конвеєрну лінію. На кожному кроці складання системний компонент" +" обробляє певний матеріал, остаточно перетворюючи сировину на закінчений " +"продукт." + +#: ../../src/oop/intro.txt:10 +msgid "" +"An object contains data, like the raw or preprocessed materials at each " +"step on an assembly line, and behavior, like the action each assembly " +"line component performs." +msgstr "" +"Об'єкт містить дані, як-от необроблені або попередньо оброблені матеріали на " +"кожному кроці складальної лінії, і поведінку, як-от дію, яку виконує кожен " +"компонент складальної лінії." + +#: ../../src/oop/intro.txt:15 +msgid "Paradigm of Object-Oriented Programming" +msgstr "Парадигма Об'єктно-Орієнтованого Програмування" + +#: ../../src/oop/intro.txt:17 +msgid "" +"Object-oriented programming is a programming paradigm that provides a " +"means of structuring programs so that properties and behaviors are " +"bundled together into individual **objects**." +msgstr "" +"Об'єктно-орієнтоване програмування - це парадигма програмування, яка " +"надає засоби структурування програм так, що властивості та поведінка " +"об'єднуються в окремі **об'єкти**." + +#: ../../src/oop/intro.txt:21 +msgid "" +"For instance, an object could represent a person with **properties** like" +" a name, age, and address and **behaviors** such as walking, talking, " +"running. Or it could represent an email with properties like a recipient " +"list, subject, and body and behaviors like adding attachments and " +"sending." +msgstr "" +"Наприклад, об'єкт може представляти особу з такими **властивостями**, як" +" ім'я, вік та адреса, а також такими **поведінками**, як ходьба, розмова, " +"біг. Або він може представляти електронний лист із такими властивостями, як " +"список одержувачів, тема , а також тіло та поведінку, як-от додавання " +"вкладень і надсилання." + +#: ../../src/oop/intro.txt:26 +msgid "" +"Put another way, object-oriented programming is an approach for modeling " +"concrete, real-world things, like cars, as well as relations between " +"things, like companies and employees, students and teachers, and so on. " +"OOP models real-world entities as software objects that have some data " +"associated with them and can perform certain functions." +msgstr "" +"Інакше кажучи, об'єктно-орієнтоване програмування - це підхід до моделювання " +"конкретних речей реального світу, таких як автомобілі, а також відносин між " +"речами, такими як компанії та працівники, студенти та викладачі тощо. " +"ООП моделює сутності реального світу як програмні об'єкти, які " +"мають деякі дані, пов'язані з ними та можуть виконувати певні функції." + +#: ../../src/oop/intro.txt:34 +msgid "Object-Oriented Programming Concepts" +msgstr "Концепції Об'єктно-Орієнтованого Програмування" + +#: ../../src/oop/intro.txt:36 +msgid "" +"So far, we can discuss the major concepts within the OOP paradigm. And " +"they are:" +msgstr "" +"Поки що ми можемо обговорити основні концепції парадигми ООП. І вони:" + +#: ../../src/oop/intro.txt +msgid "**encapsulation**" +msgstr "**інкапсуляція**" + +#: ../../src/oop/intro.txt:41 +msgid "" +"In OOP refers to the bundling of data with methods that operate that " +"data, or restricting of direct access to some of an object's components." +msgstr "" +"В ООП означає об'єднання даних із методами, які обробляють ці дані, або " +"обмеження прямого доступу до деяких компонентів об'єкта." + +#: ../../src/oop/intro.txt:44 +msgid "" +"Encapsulation mechanism is often confused with *hiding*. It's not " +"actually that encapsulation does, but data hiding is available to us due " +"to the encapsulation." +msgstr "" +"Механізм інкапсуляції часто плутають із приховуванням. Насправді інкапсуляція" +" це не робить, але приховування даних доступне для нас завдяки інкапсуляції." + +#: ../../src/oop/intro.txt +msgid "**inheritance**" +msgstr "**наслідування**" + +#: ../../src/oop/intro.txt:50 +msgid "" +"It's a mechanism of basing an object or a class upon another object " +"(prototype-based inheritance) or class (class-based inheritance), " +"retaining similar implementation. Also defined as deriving new classes " +"(subclasses) from existing ones such as a super class or base class and " +"forming them into a hierarchy of classes." +msgstr "" +"Це механізм базування об'єкта або класу на іншому об'єкті " +"(успадкування на основі прототипу) або класу (успадкування на основі класу), " +"зберігаючи подібну реалізацію. Також визначається як отримання нових класів " +"(підкласів) із існуючих такі як суперклас або базовий клас і " +"формування їх у ієрархію класів." + +#: ../../src/oop/intro.txt +msgid "**polymorphism**" +msgstr "**поліморфізм**" + +#: ../../src/oop/intro.txt:58 +msgid "" +"It's a provision of a single interface to entities of different types or " +"the use of a single symbol to represent multiple different types. The " +"concept is borrowed from a principle in biology where an organism or " +"species can have many different forms or stages." +msgstr "" +"Це надання єдиного інтерфейсу для сутностей різних типів або " +"використання одного символу для представлення кількох різних типів. " +"Концепція запозичена з принципу в біології, згідно з яким організм або " +"вид може мати багато різних форми чи етапи." + +#: ../../src/oop/intro.txt +msgid "**abstraction**" +msgstr "**абстракція**" + +#: ../../src/oop/intro.txt:65 +msgid "" +"The process of removing or generalizing details or attributes in the " +"study of objects or systems to focus attention on details of greater " +"importance, it is similar in nature to the process of generalization. The" +" creation of abstract concept-objects by mirroring common features or " +"attributes of various non-abstract objects or systems of study is the " +"result of the process of abstraction." +msgstr "" +"Процес видалення або узагальнення деталей або атрибутів під час дослідження " +"об'єктів або систем, щоб зосередити увагу на деталях більшої важливості, " +"подібний за своєю природою до процесу узагальнення. Створення абстрактних " +"понять-об'єктів шляхом віддзеркалення спільних рис або атрибутів різних " +"неабстрактних об'єктів або систем дослідження є результатом процесу " +"абстрагування." + +#: ../../src/oop/intro.txt:73 +msgid "Define a Class in Python" +msgstr "Визначення Классу в Python" + +#: ../../src/oop/intro.txt:75 +msgid "" +"Primitive data-structures - like numbers, strings, lists etc. - are " +"designed to represent simple pieces of information, such as the cost of a" +" product, the name of a novel, or someone's favorite colors. What if you " +"want to represent things that are more complex?" +msgstr "" +"Примітивні структури даних - як-от числа, рядки, списки тощо - призначені " +"для представлення простих фрагментів інформації, таких як вартість продукту, " +"назва роману чи чиїсь улюблені кольори. Що, якщо ви бажаєте представити " +"складніші речі?" + +#: ../../src/oop/intro.txt:80 +msgid "" +"For example, let's say you want to track employees in an organization. " +"You need to store some basic information about each employee. Let's start" +" from a very beginning and try to represent an individual employee as a " +"bunch of variables:" +msgstr "" +"Наприклад, скажімо, ви хочете відслідковувати співробітників в організації. " +"Вам потрібно зберегти деяку базову інформацію про кожного працівника. " +"Давайте почнемо з самого початку та спробуємо представити окремого " +"працівника як групу змінних:" + +#: ../../src/oop/intro.txt:90 +msgid "" +"This approach has number of issues. Once it's required to store " +"information for more that one person, you are to create another set of " +"variables: ``first_name_1``, ``first_name_2`` etc. The most terrifying " +"issue is that these portions of data have no relations to each other. " +"Let's try to use ``list`` for this purpose:" +msgstr "" +"Цей підхід має низку проблем. Після того, як буде потрібно зберігати " +"інформацію про більше ніж одну особу, ви повинні створити інший набір " +"змінних: ``first_name_1``, ``first_name_2`` тощо. Найжахливіше проблема " +"в тому, що ці частини даних не мають жодного відношення одна до одної. " +"Давайте спробуємо використати ``список`` для цієї мети:" + +#: ../../src/oop/intro.txt:101 +msgid "There are number of issues with this approach as well." +msgstr "З цим підходом також виникає ряд проблем." + +#: ../../src/oop/intro.txt:103 +msgid "" +"First, it can make larger code files more difficult to manage. If you " +"reference ``serhii[0]`` several lines away from where ``serhii`` list is " +"declared, will you remember that the element with ``index 0`` is the " +"person's name? Of course, you can use ``dict`` structure, but..." +msgstr "" +"По-перше, це може ускладнити керування великими файлами коду. Якщо ви " +"посилаєтеся на ``serhii[0]`` на кілька рядків від місця, де оголошено список " +"``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я " "особи? " +"Звичайно, ви можете використовувати структуру ``dict``, але..." + +#: ../../src/oop/intro.txt:108 +msgid "" +"Second, it can introduce errors if not every person has the same number " +"of properties." +msgstr "" +"По-друге, це може призвести до помилок, якщо не кожна особа має однакову " +"кількість властивостей." + +#: ../../src/oop/intro.txt:111 +msgid "" +"A great way to make this type of code more manageable and more " +"maintainable is to use **classes**." +msgstr "" +"Чудовий спосіб зробити цей тип коду більш керованим і придатним для " +"обслуговування - це використання **класів**." + +#: ../../src/oop/intro.txt:114 +msgid "" +"All classes definitions in Python start with the keyword ``class``, which" +" is followed by the name of the class and a colon. Any code that is " +"indented below the class definition is considered the part of the class's" +" body." +msgstr "" +"Усі визначення класів у Python починаються з ключового слова ``class``, за " +"яким йдуть ім'я класу та двокрапка. Будь-який код, який має відступ під " +"визначенням класу, вважається частиною тіла класу." + +#: ../../src/oop/intro.txt:124 +msgid "Classes vs Instances" +msgstr "Класи та Екземпляри Класу" + +#: ../../src/oop/intro.txt:126 +msgid "" +"Classes are used to create user-defined data structures. As it was " +"mentioned above OOP is about bundling data and behaviors. Classes define " +"data structures; each portion of data bundled within a classes is called " +"**property** or **field**. Classes also define functions called " +"**methods**, which identify the behavior and actions that an object " +"created from the class can perform with its data." +msgstr "" +"Класи використовуються для створення визначених користувачем структур даних. " +"Як було зазначено вище, ООП стосується об'єднання даних і поведінки. Класи " +"визначають структури даних; кожна частина даних, об'єднаних у класи, " +"називається властивістю або полем. Класи також визначають функції, " +"які називаються методами, які ідентифікують поведінку та дії, які об'єкт, " +"створений з класу, може виконувати зі своїми даними." + +#: ../../src/oop/intro.txt:142 +msgid "" +"A class is a blueprint for how something should be defined. It doesn't " +"actually contain any data. The person class above specifies that " +"``first_name`` and ``last_name`` properties are bundled within this " +"class, but it don't actually contain the person's name." +msgstr "" +"Клас - це схема того, як щось має бути визначено. Він насправді не містить " +"жодних даних. Клас person вище вказує, що властивості " "first_name`` і " +"``last_name`` об'єднані в цей класу, але насправді він не містить імені " +"людини." + +#: ../../src/oop/intro.txt:147 +msgid "" +"While classes are blueprints, an **instance** is an **object** that is " +"built from a form has been filled out with information. Just like many " +"people can fill out the same form with their own unique information, many" +" instances can be created from a single class." +msgstr "" +"Хоча класи є кресленнями, екземпляр - це об'єкт, створений із форми, " +"заповненої інформацією. Подібно до того, як багато людей можуть заповнювати " +"ту саму форму своєю унікальною інформацією, багато екземплярів можуть бути " +"створений з одного класу." + +#: ../../src/oop/intro.txt:165 +msgid "Methods" +msgstr "Методи" + +#: ../../src/oop/intro.txt:167 +msgid "" +"A function bundled within a class is called **method**. There are several" +" ways to define a class method. For now it's needed to know, that each " +"method will get a special argument at the first position. This argument " +"is a reference to an actual object. By convention, this argument is " +"called ``self``." +msgstr "" +"Функція, об'єднана в клас, називається методом. Існує кілька способів " +"визначення методу класу. Наразі необхідно знати, що кожен метод отримає " +"спеціальний аргумент у першій позиції. Цей аргумент є посилання на реальний " +"об'єкт. За домовленістю цей аргумент називається ``self``." + +#: ../../src/oop/intro.txt:187 +msgid "Initializing Instance with Data" +msgstr "Ініціалізація Екземпляру з Даними" + +#: ../../src/oop/intro.txt:189 +msgid "" +"There are several methods surrounded with double underscores " +"(``__method__``) that are called **dunder methods** or **magic methods**." +" We'll take a closer look at these methods in the future. For now, it's " +"ok to just one of these special methods: ``__init__``. It initializes an " +"instance with some specific data." +msgstr "" +"Є кілька методів, позначених подвійним підкресленням (``__method__``), які " +"називаються методами dunder або магічними методами. Ми детальніше розглянемо " +"ці методи в майбутньому. Наразі можна використовувати лише один із цих " +"спеціальних методів: ``__init__``. Він ініціалізує примірник певними даними." + +#: ../../src/oop/intro.txt:223 +msgid "" +"Note, this call definition has a property called ``programming_language``" +" defined outside of the ``__init__`` method. This property is shared " +"across all the class instances." +msgstr "" +"Зверніть увагу, що це визначення виклику має властивість під назвою " +"``programming_language``, визначену за межами методу ``__init__``. Ця " +"властивість є спільною для всіх екземплярів класу." + +#: ../../src/oop/intro.txt:228 +msgid "Some More Details on ``self``" +msgstr "Дещо Більше про ``self``" + +#: ../../src/oop/intro.txt:230 +msgid "" +"``self`` is nothing except the convention. Instance methods will receive " +"a pointer to the instance itself as the first argument. In two words: it " +"is the actual object to call the method with. For example, the student " +"class defines attributes (student's name and scores) and methods " +"available for each student instance: complete the challenge or skip " +"classes. While the actual student instance contains data and methods " +"related to the exact one student. The ``self`` is a referer to this exact" +" object." +msgstr "" +"``self`` - це не що інше, як конвенція. Методи екземпляра отримають " +"вказівник на сам екземпляр як перший аргумент. У двох словах: це фактичний " +"об'єкт для виклику методу. Наприклад, Клас студента визначає атрибути (ім'я " +"студента та бали) і методи, доступні для кожного екземпляра студента: " +"виконайте завдання або пропустіть заняття. Тоді як фактичний екземпляр " +"студента містить дані та методи, пов'язані з одним студентом. ``self`` є " +"посиланням саме на цей об'єкт." + +#: ../../src/oop/intro.txt:239 +msgid "Data Hiding" +msgstr "Приховання Даних" + +#: ../../src/oop/intro.txt:241 +msgid "" +"Many programming languages has *access modifiers* implemented. The Python" +" has also, but actually no. It's implemented as a convention-level. All " +"class's members starting with underscore are considered to be " +"**protected** members and should not be accessible outside the class " +"instance; on the other hand members starting with two underscores are " +"considered to be **private** members and shouldn't be accessible outside " +"the class instance as well." +msgstr "" +"Багато мов програмування мають реалізовані модифікатори доступу. Python" +" також має, але насправді ні. Він реалізований на рівні конвенції. Усі " +"члени класу, які починаються з підкреслення, вважаються захищеними членами " +"та не повинні бути доступними за межами екземпляр класу; з іншого боку, " +"члени, які починаються з двох символів підкреслення, вважаються приватними " +"членами та не повинні бути доступними за межами екземпляра класу." + +#: ../../src/oop/intro.txt:276 +msgid "" +"With the implementation above there are **public** attributes, but you " +"can still access data outside the class, but you definitely shouldn't." +msgstr "" +"З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " +"можете отримати доступ до даних за межами класу, але точно не повинні." + +#: ../../src/oop/intro.txt:287 +msgid "Few Words about Inheritance" +msgstr "Кілька Слів про Наслідування" + +#: ../../src/oop/intro.txt:289 +msgid "Just in two words. This topic is discovered in the future articles." +msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." + +#: ../../src/oop/intro.txt:291 +msgid "" +"You can derive your classes from a super class. Derived classes are " +"called *sub classes* and the class used to inherit from is called *super " +"class*. Other terms are *child* class and *parent* class, but they are " +"not common (this is author's personal opinion)." +msgstr "" +"Ви можете отримати свої класи від суперкласу. Похідні класи називаються " +"*підкласами*, а клас, який використовується для успадкування, називається " +"*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " +"вони не є поширеними ( це особиста думка автора)." + +#: ../../src/oop/intro.txt:296 +msgid "Just put a super class in parenthesis two inherit from it:" +msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" + +#: ../../src/oop/intro.txt:308 +msgid "Few Words about Polymorphism" +msgstr "Кілька Слів про Поліморфізм" + +#: ../../src/oop/intro.txt:310 +msgid "" +"You've already use this. The most simple explanation is **addition " +"operator**. For different types of data it would produce different types " +"of output:" +msgstr "" +"Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " +"Для різних типів даних він створюватиме різні типи виводу:" + +#: ../../src/oop/intro.txt:318 +msgid "" +"For example you may have various classes inherited from a base class, " +"that provides a common interface, but each derived class may implement " +"the method in its own way." +msgstr "" +"Наприклад, у вас можуть бути різні класи, успадковані від базового класу, " +"який забезпечує загальний інтерфейс, але кожен похідний клас може " +"реалізовувати метод по-своєму." + +#: ../../src/oop/patterns.txt:3 +msgid "Design Patterns" +msgstr "" + +#: ../../src/oop/solid.txt:3 +msgid "Solid Principles" +msgstr "" + From 55b3d3ae0ab71125cb575c895875d7e8eb59c0d9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 14 Mar 2023 03:08:33 +0200 Subject: [PATCH 023/689] Project dependencies Updated "myst-parser" to stable release version. Updated sphinx and related packages. Signed-off-by: Serhii Horodilov --- poetry.lock | 790 ++++++++++++++++++++++++----------------------- pyproject.toml | 8 +- requirements.txt | 79 ++--- 3 files changed, 453 insertions(+), 424 deletions(-) diff --git a/poetry.lock b/poetry.lock index e725373fd..3cba978bf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. + [[package]] name = "alabaster" version = "0.7.13" @@ -5,6 +7,10 @@ description = "A configurable sidebar-enabled Sphinx theme" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] [[package]] name = "babel" @@ -13,6 +19,10 @@ description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, +] [package.dependencies] pytz = ">=2015.7" @@ -24,6 +34,10 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] [[package]] name = "charset-normalizer" @@ -32,6 +46,96 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "main" optional = false python-versions = "*" +files = [ + {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, + {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, +] [[package]] name = "click" @@ -40,6 +144,10 @@ description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -51,14 +159,22 @@ description = "Cross-platform colored terminal text." category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "docutils" -version = "0.17.1" +version = "0.18.1" description = "Docutils -- Python Documentation Utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, + {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, +] [[package]] name = "idna" @@ -67,6 +183,10 @@ description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] [[package]] name = "imagesize" @@ -75,6 +195,10 @@ description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" @@ -83,14 +207,18 @@ description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, + {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, +] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8", "importlib-resources (>=1.3)"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "jinja2" @@ -99,6 +227,10 @@ description = "A very fast and expressive template engine." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -113,6 +245,10 @@ description = "A lexer and codec to work with LaTeX code in Python." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, + {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, +] [package.dependencies] six = ">=1.4.1" @@ -124,19 +260,23 @@ description = "Python port of markdown-it. Markdown parsing, done right!" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, + {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, +] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] -profiling = ["gprof2dot"] -plugins = ["mdit-py-plugins"] +benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] +code-style = ["pre-commit (==2.6)"] +compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] -compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] -code_style = ["pre-commit (==2.6)"] -benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" @@ -145,20 +285,76 @@ description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] [[package]] name = "mdit-py-plugins" -version = "0.3.3" +version = "0.3.5" description = "Collection of plugins for markdown-it-py" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, + {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, +] [package.dependencies] markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit"] +code-style = ["pre-commit"] rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] @@ -169,29 +365,37 @@ description = "Markdown URL utilities" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] [[package]] name = "myst-parser" -version = "0.18.1" -description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." +version = "1.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, + {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, +] [package.dependencies] docutils = ">=0.15,<0.20" jinja2 = "*" markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.1,<0.4.0" +mdit-py-plugins = ">=0.3.4,<0.4.0" pyyaml = "*" -sphinx = ">=4,<6" -typing-extensions = "*" +sphinx = ">=5,<7" [package.extras] -code_style = ["pre-commit (>=2.12,<3.0)"] +code-style = ["pre-commit (>=3.0,<4.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "sphinx-book-theme", "sphinx-design", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] -testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.0)", "sphinx-pytest", "sphinx (<5.2)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] [[package]] name = "packaging" @@ -200,6 +404,10 @@ description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] [[package]] name = "pybtex" @@ -208,6 +416,10 @@ description = "A BibTeX-compatible bibliography processor in Python" category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +files = [ + {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, + {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, +] [package.dependencies] latexcodec = ">=1.0.4" @@ -224,6 +436,10 @@ description = "A docutils backend for pybtex." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016"}, + {file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239"}, +] [package.dependencies] docutils = ">=0.8" @@ -236,6 +452,10 @@ description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] [package.extras] plugins = ["importlib-metadata"] @@ -247,6 +467,10 @@ description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +files = [ + {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, + {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, +] [[package]] name = "pyyaml" @@ -255,6 +479,48 @@ description = "YAML parser and emitter for Python" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] [[package]] name = "requests" @@ -263,6 +529,10 @@ description = "Python HTTP for Humans." category = "main" optional = false python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] [package.dependencies] certifi = ">=2017.4.17" @@ -272,7 +542,24 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "67.6.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.6.0-py3-none-any.whl", hash = "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2"}, + {file = "setuptools-67.6.0.tar.gz", hash = "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -281,6 +568,10 @@ description = "Python 2 and 3 compatibility utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "snowballstemmer" @@ -289,26 +580,34 @@ description = "This package provides 29 stemmers for 28 languages generated from category = "main" optional = false python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] name = "sphinx" -version = "5.3.0" +version = "6.1.3" description = "Python documentation generator" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "Sphinx-6.1.3.tar.gz", hash = "sha256:0dac3b698538ffef41716cf97ba26c1c7788dba73ce6f150c1ff5b4720786dd2"}, + {file = "sphinx-6.1.3-py3-none-any.whl", hash = "sha256:807d1cb3d6be87eb78a381c3e70ebd8d346b9a25f3753e9947e866b2786865fc"}, +] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.13" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -319,40 +618,49 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest (>=4.6)", "html5lib", "typed-ast", "cython"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-intl" -version = "2.0.1" +version = "2.1.0" description = "Sphinx utility that make it easy to translate and to apply translation." category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" +files = [ + {file = "sphinx-intl-2.1.0.tar.gz", hash = "sha256:9d9849ae42515b39786824e99f1e30db0404c377b01bb022690fc932b0221c02"}, + {file = "sphinx_intl-2.1.0-py3-none-any.whl", hash = "sha256:9798946b995989de691387651d70c3fc191275b587e2e519655541edfd7bbd68"}, +] [package.dependencies] babel = "*" click = "*" +setuptools = "*" sphinx = "*" [package.extras] -test = ["pytest", "mock"] -transifex = ["transifex_client (>=0.11)"] +test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.1" +version = "1.2.0" description = "Read the Docs theme for Sphinx" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "sphinx_rtd_theme-1.2.0-py2.py3-none-any.whl", hash = "sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2"}, + {file = "sphinx_rtd_theme-1.2.0.tar.gz", hash = "sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8"}, +] [package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" +docutils = "<0.19" +sphinx = ">=1.6,<7" +sphinxcontrib-jquery = {version = ">=2.0.0,<3.0.0 || >3.0.0", markers = "python_version > \"3\""} [package.extras] -dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" @@ -361,9 +669,13 @@ description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -373,10 +685,14 @@ description = "Sphinx extension for BibTeX style citations." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa"}, + {file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76"}, +] [package.dependencies] docutils = ">=0.8" -importlib-metadata = { version = ">=3.6", markers = "python_version < \"3.10\"" } +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} pybtex = ">=0.24" pybtex-docutils = ">=1.0.0" Sphinx = ">=2.1" @@ -388,10 +704,14 @@ description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -400,10 +720,29 @@ description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML h category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-jquery" +version = "2.0.0" +description = "Extension to include jQuery on newer Sphinx releases" +category = "main" +optional = false +python-versions = ">=2.7" +files = [ + {file = "sphinxcontrib-jquery-2.0.0.tar.gz", hash = "sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa"}, + {file = "sphinxcontrib_jquery-2.0.0-py3-none-any.whl", hash = "sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995"}, +] + +[package.dependencies] +setuptools = "*" [[package]] name = "sphinxcontrib-jsmath" @@ -412,9 +751,13 @@ description = "A sphinx extension which renders display math in HTML via JavaScr category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] -test = ["mypy", "flake8", "pytest"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -423,10 +766,14 @@ description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp d category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -435,19 +782,15 @@ description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -[[package]] -name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - [[package]] name = "urllib3" version = "1.26.14" @@ -455,10 +798,14 @@ description = "HTTP library with thread-safe connection pooling, file post, and category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, +] [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -468,335 +815,16 @@ description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, + {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, +] [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.9" -content-hash = "9dfe764900129c00fa319ad0ed0ca07186e410a65bee83b291a0359f806d3f78" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] -babel = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -charset-normalizer = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, -] -jinja2 = [ - { file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" }, - { file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852" }, -] -latexcodec = [ - { file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271" }, - { file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a" }, -] -markdown-it-py = [ - { file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da" }, - { file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27" }, -] -markupsafe = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, -] -mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, - {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, -] -mdurl = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - { file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" }, -] -myst-parser = [ - { file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d" }, - { file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8" }, -] -packaging = [ - { file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2" }, - { file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" }, -] -pybtex = [ - { file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f" }, - { file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755" }, -] -pybtex-docutils = [ - { file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016" }, - { file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239" }, -] -pygments = [ - { file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" }, - { file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297" }, -] -pytz = [ - { file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" }, - { file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0" }, -] -pyyaml = [ - { file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53" }, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -requests = [ - { file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa" }, - { file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" }, -] -six = [ - { file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" }, - { file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" }, -] -snowballstemmer = [ - { file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" }, - { file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1" }, -] -sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, -] -sphinx-intl = [ - {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, - {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, - {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, -] -sphinxcontrib-applehelp = [ - { file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e" }, - { file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228" }, -] -sphinxcontrib-bibtex = [ - { file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa" }, - { file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76" }, -] -sphinxcontrib-devhelp = [ - { file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" }, - { file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e" }, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -urllib3 = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, -] -zipp = [ - {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, - {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, -] +content-hash = "8cd52ebd6491a532634639dcece042cb9d8dade3b412c454cabd4d6852f55c6f" diff --git a/pyproject.toml b/pyproject.toml index 2b5aba184..b6fe31691 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,10 +33,10 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.9" -Sphinx = "^5.3.0" -sphinx-intl = "^2.0.1" -sphinx-rtd-theme = "^1.1.0" -myst-parser = "^0.18.1" +Sphinx = "^6.1.3" +sphinx-intl = "^2.1.0" +sphinx-rtd-theme = "^1.2.0" +myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index f3e31cb75..65b689912 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,39 +1,40 @@ -alabaster==0.7.13; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -certifi==2022.12.7; python_version >= "3.7" and python_version < "4" -charset-normalizer==3.0.1; python_version >= "3.7" and python_version < "4" -click==8.1.3; python_version >= "3.7" -colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") -docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" -idna==3.4; python_version >= "3.7" and python_version < "4" -imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -importlib-metadata==6.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") -jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -latexcodec==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -markdown-it-py==2.1.0; python_version >= "3.7" -markupsafe==2.1.2; python_version >= "3.7" -mdit-py-plugins==0.3.3; python_version >= "3.7" -mdurl==0.1.2; python_version >= "3.7" -myst-parser==0.18.1; python_version >= "3.7" -packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -pybtex-docutils==1.0.2; python_version >= "3.6" -pybtex==0.24.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6" -pygments==2.14.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -pytz==2022.7.1; python_version >= "3.6" -pyyaml==6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" -requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") -six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinx-intl==2.0.1; python_version >= "3.5" -sphinx-rtd-theme==1.1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") -sphinx==5.3.0; python_version >= "3.6" -sphinxcontrib-applehelp==1.0.4; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" -sphinxcontrib-bibtex==2.5.0; python_version >= "3.6" -sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -typing-extensions==4.4.0; python_version >= "3.7" -urllib3==1.26.14; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" -zipp==3.12.0; python_version < "3.10" and python_version >= "3.7" +alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" +babel==2.11.0 ; python_version >= "3.9" and python_version < "4.0" +certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4" +charset-normalizer==3.0.1 ; python_version >= "3.9" and python_version < "4" +click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" +docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" +idna==3.4 ; python_version >= "3.9" and python_version < "4" +imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==6.0.0 ; python_version >= "3.9" and python_version < "3.10" +jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +markdown-it-py==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" +myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" +pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2022.7.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" +requests==2.28.2 ; python_version >= "3.9" and python_version < "4" +setuptools==67.6.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==1.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jquery==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" +urllib3==1.26.14 ; python_version >= "3.9" and python_version < "4" +zipp==3.12.0 ; python_version >= "3.9" and python_version < "3.10" From 312f85e79708fc1e715a345a862661649787ef30 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 05:01:31 +0200 Subject: [PATCH 024/689] Completed variables document --- src/basics/variables.txt | 51 +++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/src/basics/variables.txt b/src/basics/variables.txt index d5dd7522a..cc4525a03 100644 --- a/src/basics/variables.txt +++ b/src/basics/variables.txt @@ -2,12 +2,51 @@ Variables ******************************************************************************* -Variables are container for storing data. There is no syntax for declaring -variables in Python. A variable is created the moment you first assign a value -to it. +In computer science a **variable** is a named storage location in memory that +can hold a value (*data*). The value stored in a variable can be changed or +accessed by the program during its execution. + +In Python, variables are created dynamically once a value is assigned to them. +This makes Python a dynamically typed language, which means that the data type +of a variable is inferred from the value assigned to it. So, you do not need +to declare a variable before using it, as in statically typed languages. + +The ability to create variables dynamically and infer their data type makes +Python code more concise and easier to read. However, it also requires careful +attention to variable naming and assignment to avoid unexpected behavior. + +In Python ``=`` (assignment operator) is used to set a value to some variable, +the portion on the left of the operator is a *variable name* and the portion +on the right is a *value* to assign to a variable. .. code-block:: python + :caption: Variable assignment in Python + + number_of_students = 10 + greeting = "hello" + pi = 3.14 + +.. code-block:: java + :caption: Variable assignment in Java + + int number_of_students = 10; + String greeting = "hello"; + double pi = 3.14; + +Naming +====== + +In Python there are several rules that describe how to name your variables. +Some of these are requirements and cannot be ignored, others are rather +recommended than required and can be omitted. For now note, that a variable +name **cannot**: + +- a language keyword (like ``pass``, ``def`` or ``class``) +- start with a number (e.g. ``123``, ``1_something``) +- contain special operators in it (``+``, ``-``, ``=`` etc.) +- contain white spaces + +Also here are some general recommendation on naming anything: - foo = 42 - bar = "some string data" - foobar = 42.0 +- do not use built-in functions as a variable name (e.g. ``len = 42``) +- keep names meaningful (``x = 10`` vs ``number_of_student = 100``) From 3df5d95d217b2c207cf26e65b2c142dcacd3d680 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 05:03:55 +0200 Subject: [PATCH 025/689] Added syntax document --- src/basics/index.txt | 1 + src/basics/syntax.txt | 109 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 src/basics/syntax.txt diff --git a/src/basics/index.txt b/src/basics/index.txt index e59340e4f..df8f9a5e2 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -6,6 +6,7 @@ :name: basics variables + syntax datatypes controlflow functions diff --git a/src/basics/syntax.txt b/src/basics/syntax.txt new file mode 100644 index 000000000..704f16599 --- /dev/null +++ b/src/basics/syntax.txt @@ -0,0 +1,109 @@ +******************************************************************************* + Python Syntax +******************************************************************************* + +.. note:: As a natural language like English or Ukrainian has its own rules to + write down something, programming languages do. + This makes them programming **languages**. + +A programming language syntax is the set of rules and principles that govern +how code is written and structured in a given programming language. Syntax +encompasses the rules for writing statements, expressions, variables, data +types, control structures, and other constructs that make up the language. + +The syntax of a programming language defines how code is organized and +interpreted by a compiler or interpreter. It defines the rules for writing +valid statements and expressions that can be understood and executed by +the language's runtime system. + +A programming language's syntax is designed to be both readable and expressive, +allowing programmers to write code that is easy to understand and modify. +Syntax often influences the style and structure of code, as well as its +maintainability and performance. + +Different programming languages have different syntax, with some languages +being more concise and expressive than others. While syntax is an important +aspect of a programming language, it is only one of several factors that +determine its ease of use, flexibility, and suitability for different +programming tasks. + +In the case of Python, the language's syntax defines how code is written and +structured in a way that is consistent, readable, and easy to understand. +A general overview is provided below, no need to dive deep in this now. All of +the following is to be discussed during the course. So, some of the key aspects +of Python's syntax include: + +:Indentation: + Python uses whitespace, specifically indentation, to delimit blocks of + code, such as loops, conditionals, and functions. This means that + the indentation level of a line determines which block of code it belongs + to. + +:Statement structure: + Python statements are typically written on one line, with the end of + the line indicating the end of the statement. However, if a statement is + too long to fit on one line, it can be continued across multiple lines + using backslashes. + +:Variables: + In Python, variables are created automatically when a value is assigned to + them, and their type is inferred from the value. Variables can be assigned + values of different types, including integers, floats, strings, and more + complex data structures like lists and dictionaries. + +:Operators: + Python supports a wide range of operators for performing arithmetic, + comparison, and logical operations. These include arithmetic operators like + ``+``, ``-``, ``*``, and ``/``, as well as comparison operators like + ``<``, ``>``, ``==``, and ``!=``. + +:Control flow: + Python provides control flow statements like if, else, elif, for, and + while to control the flow of execution in a program. These statements are + used to make decisions, repeat code, or perform actions based on + conditions. + +:Functions: + In Python, functions are defined using the def keyword and can take + arguments and return values. The body of a function is defined using + a block of indented code. + +:Modules: + Python has a large library of modules that provide pre-written code for + a variety of tasks. Modules can be imported into a program using the import + statement. + +:Exception handling: + Python provides a way to handle errors and exceptions in a program using + the try, except, else, and finally keywords. These statements allow + a program to gracefully recover from errors and continue executing. + +In few words: + +.. code-block:: python + :caption: Input/Output example script + + # This is a comment. + # It is used to provide additional information or context in a script. + + # Getting input from the user + name = input("What is your name? ") # stores string input by the user + age = int(input("How old are you? ")) + is_student = input("Are you a student? (yes/no) ") + + # Converting user input to boolean + is_student = is_student.lower() == "yes" + + # Displaying values of variables + print("My name is", name) + print("I am", age, "years old") + print("I am a student:", is_student) + +The code snippet above demonstrates some basics abilities of Python to gather +data from the user, process it and print out back. Note the words starting with +a **#** (hash) symbol. This is a comment. Any sequence of characters after +the hash and till the line end are considered to be a comment. These are for +those people, who see the code and they are ignored by the interpreter. + +On the other hand each individual line is the instruction for the interpreter +to perform some action, like gather inputs, do math, store data in memory etc. From abdf814431e52ca786a4db9e3932f530b5727300 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 05:34:31 +0200 Subject: [PATCH 026/689] Updated data types overview --- src/basics/datatypes.txt | 66 +++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 38 deletions(-) diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index df4c63c1b..6ac8e28e3 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -2,33 +2,11 @@ Data Types ******************************************************************************* -In programming data types is an important concept. Data may represent different -things. - Data may represent different things and require various operations available. -In programming data types is an important concept. Python has the following -data types built-in by default in these categories: - -:Text: - ``str`` - -:Numeric: - ``int``, ``float``, ``complex`` - -:Sequence: - ``list``, ``tuple``, ``range`` - -:Mapping: - ``dict`` - -:Set: - ``set``, ``frozenset`` - -:Boolean: - ``bool`` - -:None: - ``None`` +In programming data types is an important concept. For example **1984** may be +a number (``1984``), a text (``"1984``) or event a date. The data type +describes the operations, that are allowed for the data, like additions for +numbers or concatenation for text (e.g. ``1 + 2 -> 3``, ``"1" + "3" -> "13"``). Python uses dynamic typing. This means as a developer you should not declare a variable with its data type - the interpreter will do this for you. Other @@ -37,18 +15,30 @@ in Python is as easy as: .. code-block:: python - variable = "Hello World" # create variable of str type - -Casting -======= - -You may specify the data type of a variable with casting: - -.. code-block:: python - - x = str(3) # x will be '3' - y = int(3) # y will be 3 - z = float(3) # z will be 3.0 + script_name = "Circle area" # create a text variable + radius = 5 # create an integer variable + area = 2 * 3.14 * 5 ** 2 # create a floating-point variable + +Built-In Data Types +=================== + +Python has the following data types built-in: + +- Integers (``int``) +- Floating-point numbers (``float``) +- Complex numbers (``complex``) +- Booleans (``bool``) +- Strings (``str``) +- Bytes (``bytes``) +- Byte arrays (``bytearray``) +- Lists (``list``) +- Tuples (``tuple``) +- Sets (``set``) +- Frozen sets (``frozenset``) +- Dictionaries (``dict``) +- None (``NoneType``) + +Any one can use them without additional imports or packages installations. Text ==== From 73a831fee05ba9321f0fa8a5a36aea0ed8ebb897 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 06:36:07 +0200 Subject: [PATCH 027/689] Updated strings: indexes, slices, immutable --- src/basics/datatypes.txt | 113 ++++++++++++++++++++++++++++++++------- 1 file changed, 93 insertions(+), 20 deletions(-) diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index 6ac8e28e3..5377cf63f 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -43,46 +43,109 @@ Any one can use them without additional imports or packages installations. Text ==== -Text data are stored as strings (``str`` data type) in Python. Strings are -surrounded by either single quotation marks, or double quotation marks. So -``'Python'`` is the same as ``"Python"``. To assign string to a variable: +Text data are stored as strings (``str`` data type) in Python. Any sequence of +letters, digits, punctuation marks and whitespace characters enclosed with +quotes is considered to be a string literal. Both single quotes (``'``) and +double quotes (``"``) can be used interchangeably to create a string in Python. .. code-block:: python - string = "string" - string = str("string") # declare using casting + variable = 'string' + variable = "string" + variable = str("string") # declare using built-in constructor + +Escaping +-------- + +In programming this is a process of using a special character to indicate that +the following character(s) should be treated differently from their literal +meaning. The common usage is to include a special character(s) within strings. +A **backslash** character is used to *escape* the following one. + +.. code-block:: python + :caption: Example of Escaping in Python + + # Escaping single quotes within a string + print('She said, "I\'m ready for the test!"') + + # Escaping double quotes within a string + print("He replied, \"I'll be there in a minute.\"") + + # Escaping backslash itself + print("Backslash \\ is a special character for escaping other characters") + + # Escaping a newline character + print("Hello\nworld") + + # Escaping a tab character + print("Name\tAge\tGender") + +Single quotes or double quotes +------------------------------ + +Don't care. Use any quote mark you like. A *string* is a sequence of characters +after the opening quote and till the closing one. You may use double quotes in +case a single quote is a part of the text (e.g. ``"It's a Serhii's document"``) +and vise versa (e.g. ``'The name of the ship was a "Billy of Tea"'``). It's +a good practice not to mess single and double quotes within one project. Just +keep using a chosen one character for all strings. Multiline strings ----------------- -You can assign a multiline string using three quotes: +You can assign a multiline string by using triple quotes: Both single quote +and double quote characters are available. .. code-block:: python variable = """Well, ye scrawny mate- set sails for riddle! Never love a lagoon.""" + variable = '''Hello + World''' -Single quotes or double quotes ------------------------------- - -Don't care. Use any quote mark you like. Remember the string is any characters -surrounded by the same quotes. So you are use single quotes if double quote -mark is the part of your string data and vice versa. It's not recommended to -mess various quote marks in the same project. +The same syntax is used to create docstring, which are a special case of string +usage. We will look on these in the future. Strings are subscriptable ------------------------- -Strings in Python are arrays of bytes representing unicode characters. This is -common for many programming languages. However Python does not have a data type -to represent a single character itself; a single character in Python is of -string type as well. You can get the character at a specific position in -a string. +.. note:: ``str`` is not the only one subscriptable data type in Python. + +This means you can access individual characters or slices within a string using +indexes. A string is a *sequence* of characters and each character within +a string has its own position - an *index*. Indexing starts at 0, so the first +character in a string is at index 0, the second one is at index 1, and so on. +Negative indexing is also possible, with -1 representing the last character in +a string, -2 representing the second-to-last character, and so on. Use square +brackets (``[]``) to access the index. + +.. code-block:: python + + variable = "Plank of a salty strength, endure the fortune!" + + variable[0] # P + variable[-4] # u + +You can also *slice* strings, this means to get a subsequence of characters. +The slice syntax consists of 3 digits: + +- the first one represent the index to start (inclusive), defaults to 0 +- the second one represent the index to stop (non-inclusive), defaults to + the length of the sequence +- the third one represents a step, defaults to 1 + +These numbers are separated within colon (``:``) and enclosed within square +brackets. Any slice digit may be omitted. .. code-block:: python + :caption: Sequence slicing + + variable = "0123456789" # a string of digits - text = "Plank of a salty strength, endure the fortune!" - character = text[10] + variable[0:10:1] # 0123456789 + variable[:10:2] # 02468 + variable[:-2] # 01234567 + variable[::-1] # 9876543210 Strings are iterable -------------------- @@ -95,6 +158,16 @@ a ``for`` loop: for character in "foobar": print(character) +Strings are immutable +--------------------- + +This means, you cannot change an individual character within a string. + +.. code-block:: python + + variable = "variable" + variable[0] = "V" # this action will cause an error + Integers ======== From 278ac0650b78c5c6b5e90a49035ccf79a08e9847 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 07:36:05 +0200 Subject: [PATCH 028/689] Added string operations --- src/basics/datatypes.txt | 65 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index 5377cf63f..14915fe97 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -106,6 +106,71 @@ and double quote characters are available. The same syntax is used to create docstring, which are a special case of string usage. We will look on these in the future. +Supported operations +-------------------- + +.. note:: This subsection describes only the most common operations. + +:Concatenation: + The ``+`` operator is used to concatenate (join) two or more strings. + + .. code-block:: python + + "Serhii" + " " + "Horodilov" # "Serhii Horodilov" + + On the other hand the ``join`` method concatenates a collection of strings, + which may be more efficient than using ``+``. + + .. code-block:: python + + " ".join(["Serhii", "Horodilov"]) # "Serhii Horodilov" + +:Repetition: + The ``*`` operator is used to repeat a string a specified number of times. + Only multipliers of the ``int`` type are allowed. + + .. code-block:: python + + "Serhii" * 5 # "SerhiiSerhiiSerhiiSerhiiSerhii" + +:Length: + The ``len`` function is used to find the length of a string. + + .. code-block:: python + + len("Serhii Horodilov") # 8 + +:Case conversion: + The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform + actions on case. + + ``lower`` creates a new string with all lower-case characters. + + ``upper`` creates a new string with all upper-case characters. + + ``capitalize`` creates a new string with the upper-case 1st character. + + ``title`` will make all characters after whitespace upper case. + + .. code-block:: python + + name = "serhii horodilov" + name.lower() # "serhii horodilov" + name.upper() # "SERHII HORODILOV" + name.capitalize() # "Serhii horodilov" + name.title() # "Serhii Horodilov" + +:Stripping: + The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove + leading and/or trailing whitespace characters. + + .. code-block:: python + + name = " Serhii Horodilov " + name.strip() # "Serhii Horodilov" + name.lstrip() # "Serhii Horodilov " + name.rstrip() # " Serhii Horodilov" + Strings are subscriptable ------------------------- From e287667dda2cd97913250eafe1a26baef6c503d8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 03:04:33 +0200 Subject: [PATCH 029/689] Rebased 'feature/basics' onto 'devel' branch --- src/basics/index.txt | 1 + src/basics/stdtypes.txt | 113 ++++++++++++++++++++++++++++++++++++++++ src/refs.bib | 10 ++++ 3 files changed, 124 insertions(+) create mode 100644 src/basics/stdtypes.txt diff --git a/src/basics/index.txt b/src/basics/index.txt index df8f9a5e2..9f8a2b8a0 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -8,6 +8,7 @@ variables syntax datatypes + stdtypes controlflow functions modules diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt new file mode 100644 index 000000000..d4af9152a --- /dev/null +++ b/src/basics/stdtypes.txt @@ -0,0 +1,113 @@ +******************************************************************************* + Built-in Types +******************************************************************************* + +The principal built-in types are numerics, sequences, mappings, classes, +instances and exceptions :cite:`docs-python:stdtypes`. This section covers +only the most base of them. Others will be discussed in the future within +their own topics. + +Numeric types +============= + +There are 3 distinct numeric types: *integers*, *floating point numbers*, and +*complex numbers*. In addition, Booleans are a subtype of integers. Integers +have unlimited precision. Floating point numbers are usually implemented usign +``double`` in C. Complex numbers have a real and imaginary part, which are each +a floating point number. + +Numbers are created by numeric literals or as the result of built-in functions +and operators. Unadorned integer literals (including hex, octal and binary +numbers) yield integers. Numeric literals containing a decimal point or an +exponent sign yield floating point numbers. Appending ``j`` or ``J`` to a +numeric literal yields an imaginary number (a complex number with a zero real +part) which you can add to an integer or float to get a complex number with +real and imaginary parts. + +Supported operations +-------------------- + ++---------------------+-------------------------------------------------------+ +| Operation | Result | ++=====================+=======================================================+ +| ``x + y`` | sum of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x - y`` | difference of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x * y`` | product of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x / y`` | quotient of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x // y`` | floored quotient of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x % y`` | remainder of ``x / y`` | ++---------------------+-------------------------------------------------------+ +| ``-x`` | *x* negated | ++---------------------+-------------------------------------------------------+ +| ``+x`` | *y* unchanged | ++---------------------+-------------------------------------------------------+ +| ``abs(x)`` | absolute value or magnitude of *x* | ++---------------------+-------------------------------------------------------+ +| ``int(x)`` | *x* converted to integer | ++---------------------+-------------------------------------------------------+ +| ``float(x)`` | *x* converted to floating point | ++---------------------+-------------------------------------------------------+ +| ``complex(re, im)`` | a complex number with real part *re*, imaginary part | +| | *im*. *im* defaults to zero. | ++---------------------+-------------------------------------------------------+ +| ``divmod(x, y)`` | the pair ``(x // y, x % y)`` | ++---------------------+-------------------------------------------------------+ +| ``pow(x, y)`` | *x* to the power *y* | +| ``x ** y`` | | ++---------------------+-------------------------------------------------------+ + +.. note:: ``x // y`` also referred to as integer division. The resultant value + is a whole integer, through the result's type is not necessarily int. + The result is always rounded towards minus infinity: + ``1 // 2`` is ``0`` + +.. note:: ``float(x)`` also accepts the strings ``"nan"`` and ``"inf"`` with + an optional prefix "+" or "-" for :abbr:Nan(Not a Number) and + positive and negative infinity. + +Code examples +------------- + +.. code-block:: python + :caption: Integer numbers + + x = 42 + y = 24 + a = int(42) + b = int(42.24) + + result = x + y # for both int operands only + result = x - y # for both int operands only + result = x * y # for both int operands only + result = x // y # for any numeric operands + +.. code-block:: python + :caption: Floating point numbers + + x = 42. + y = .24 + z = 42.24 + a = float(42) + b = float(42.24) + + result = x + y # for any float operand + result = x - y # for any float operand + result = x * y # for any float operand + result = x / y # for any numeric operands + +Sequence types +============== + +Text sequence type +================== + +Set types +========= + +Mapping type +============ diff --git a/src/refs.bib b/src/refs.bib index 569696c29..446cc4a9d 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -2,6 +2,11 @@ Python training course bibliography database ******************************************************************************* +@misc{docs-python, + title = "{Python Documentation}", + url = {https://docs.python.org}, +} + @misc{realpython:py3-intro, title = "Intoduction to Python 3", author = "John Sturtz", @@ -57,3 +62,8 @@ @misc{docs-python:printf-formating title = "{Python Documentation}", url = {https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting}, } + +@misc{docs-python:stdtypes, + title = "{Python Documentation}", + url = {https://docs.python.org/library/stdtypes.html} +} From fd56709c29ae258f4bb72bd6d7f1f96a0ba6db7c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:37:51 +0200 Subject: [PATCH 030/689] Added general sequence types description and operations --- src/basics/stdtypes.txt | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index d4af9152a..ecbf03019 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -103,6 +103,41 @@ Code examples Sequence types ============== +There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. +Additional sequence types tailored for processing of binary data and text +strings are described in dedicated sections. + +Common operations +----------------- + ++----------------------+------------------------------------------------------+ +| Operation | Result | ++======================+======================================================+ +| ``x in s`` | ``True`` if an item of *s* equal to *x* | +| ``x not in s`` | ``False`` if an item of *s* equal to *x* | ++----------------------+------------------------------------------------------+ +| ``s + t`` | the concatenation of *s* and *t* | ++----------------------+------------------------------------------------------+ +| ``s * n`` | equivalent to adding *s* to itself *n* times | ++----------------------+------------------------------------------------------+ +| ``s[i]`` | *i*-th item of *s*, origin 0 | ++----------------------+------------------------------------------------------+ +| ``s[i:j]`` | slice of *s* from *i* to *j* with step *k*. any of | +| ``s[i:j:k]`` | these (or even all 3) may be omitted. | ++----------------------+------------------------------------------------------+ +| ``len(s)`` | length of *s* | ++----------------------+------------------------------------------------------+ +| ``min(s)`` | smallest item of *s* | ++----------------------+------------------------------------------------------+ +| ``max(s)`` | largest item of *s* | ++----------------------+------------------------------------------------------+ +| ``s.count(x)`` | total number of occurrences of *x* in *s* | ++----------------------+------------------------------------------------------+ +| ``s.index(x)`` | index of the first occurrence of *x* in *s* | +| ``s.index(x, i)`` | (at or after index *i* and before index *j*) | +| ``s.index(x, i, j)`` | | ++----------------------+------------------------------------------------------+ + Text sequence type ================== From f8e8fffcc1b783170013b13a7f384bd3e0828506 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:42:18 +0200 Subject: [PATCH 031/689] Updated numeric types with values comparison section --- src/basics/stdtypes.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index ecbf03019..0c8e3d5f3 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -100,6 +100,17 @@ Code examples result = x * y # for any float operand result = x / y # for any numeric operands +Value comparison +---------------- + +Numbers of built-in numeric types can be compared within and across their types +(with the restriction that complex numbers do not support order comparison). +Within the limits of the types involved, they compare mathematically correct +without loss of precision. + +The "not-a-number" values ``float("NaN")`` and ``decimal.Decimal('NaN')`` are +special. Any ordered comparison of a number to a not-a-number value is false. + Sequence types ============== From 173c09d4dc90d72f990717eaf25c4d2dff4331bb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:49:04 +0200 Subject: [PATCH 032/689] Updated sequences types with value comparison section --- src/basics/stdtypes.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 0c8e3d5f3..84496935b 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -149,6 +149,27 @@ Common operations | ``s.index(x, i, j)`` | | +----------------------+------------------------------------------------------+ +Value comparison +---------------- + +.. todo: make TypeError a link + +Sequences can be compared only within each of their types, with the restriction +that ranges do not support order comparison. Equality comparison across these +types results in inequality, and ordering comparison across these types raises +``TypeError``. + +Sequences compare lexicographically using comparison of corresponding elements. +The built-in containers typically assume identical objects are equal to +themselves. Lexicographical comparison between buit-in collections works as +follows: + +- For two collections to compare equal, they must be of the same type, have + the same length, and each pair of corresponding elements must compare equal. +- Collections that supports order comparison are ordered the same as their + first unequal elements. If corresponding element does not exist, the shorter + collection is ordered first. + Text sequence type ================== From b9639c2889f798f30cde62b08e59acfa897d542c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:54:25 +0200 Subject: [PATCH 033/689] Updated sets types with values comparison section --- src/basics/stdtypes.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 84496935b..ada85d26f 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -176,5 +176,14 @@ Text sequence type Set types ========= +Value comparison +---------------- + +Sets (instances of ``set`` or ``frozenset``) can be compared within and across +their types. They define order comparison operators to mean subset and superset +tests. Those relations do not define total ordering (e.g. two sets ``{1, 2}`` +and ``{2, 3}`` are not equal, nor subsets of one another, nor supersets of one +another). + Mapping type ============ From 9b9e02ff76414d1987216f5ab7caf41a5cb59dbf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:55:37 +0200 Subject: [PATCH 034/689] Minor changes in subsection headings --- src/basics/stdtypes.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index ada85d26f..1bca07bff 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -100,8 +100,8 @@ Code examples result = x * y # for any float operand result = x / y # for any numeric operands -Value comparison ----------------- +Value comparisons +----------------- Numbers of built-in numeric types can be compared within and across their types (with the restriction that complex numbers do not support order comparison). @@ -149,8 +149,8 @@ Common operations | ``s.index(x, i, j)`` | | +----------------------+------------------------------------------------------+ -Value comparison ----------------- +Value comparisons +----------------- .. todo: make TypeError a link @@ -176,8 +176,8 @@ Text sequence type Set types ========= -Value comparison ----------------- +Value comparisons +----------------- Sets (instances of ``set`` or ``frozenset``) can be compared within and across their types. They define order comparison operators to mean subset and superset From 23fad33984798689758472cca1e1662a67a0a1c6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:59:58 +0200 Subject: [PATCH 035/689] Updated mapping type with value comparison section --- src/basics/stdtypes.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 1bca07bff..79887f9cc 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -187,3 +187,11 @@ another). Mapping type ============ + +Value comparisons +----------------- + +Instances of ``dict`` compare equal if and only if they have equal key-value +pairs. + +Order comparisons raise ``TypeError``. From d3ab70264fd39f526807aac63859946ff7b83420 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 00:04:56 +0200 Subject: [PATCH 036/689] Update string type with value comparison section --- src/basics/stdtypes.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 79887f9cc..2ca9073e6 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -173,6 +173,12 @@ follows: Text sequence type ================== +Value comparisons +----------------- + +Strings compare lexicographically using the numerical Unicode code points of +their characters. + Set types ========= From c6992fa989dca990026040a988e92372a185300c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:25:32 +0200 Subject: [PATCH 037/689] Added list operations --- src/basics/stdtypes.txt | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 2ca9073e6..b64a21c74 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -170,6 +170,47 @@ follows: first unequal elements. If corresponding element does not exist, the shorter collection is ordered first. +Mutable sequence types +---------------------- + ++--------------------+--------------------------------------------------------+ +| Operation | Result | ++====================+========================================================+ +| ``s[i] = x`` | item *i* of *s* is replaced by *x* | ++--------------------+--------------------------------------------------------+ +| ``s[i:j] = t`` | slice of *s* from *i* to *j* replaced by the contents | +| | of *t* | ++--------------------+--------------------------------------------------------+ +| ``del s[i:j]`` | same as ``s[i:j] = []`` | ++--------------------+--------------------------------------------------------+ +| ``s[i:j:k] = t`` | the elements of *s* are replaced by those of *t*[#]_ | ++--------------------+--------------------------------------------------------+ +| ``del s[i:j:k]`` | removes the elements of ``s[i:j:k]`` from the list | ++--------------------+--------------------------------------------------------+ +| ``s.append(x)`` | appends *x* to the end of the sequence; the same as | +| | ``s[len(s):len(s)] = [x]`` | ++--------------------+--------------------------------------------------------+ +| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#3.3]_ | ++--------------------+--------------------------------------------------------+ +| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#3.3]_ | ++--------------------+--------------------------------------------------------+ +| ``s.extend(t)`` | extends *s* with the contents of *t* | +| ``s += t`` | | ++--------------------+--------------------------------------------------------+ +| ``s.insert(i, x)`` | inserts *x* into *s* at the index *i*; same as | +| | ``s[i:i] = [x]`` | ++--------------------+--------------------------------------------------------+ +| ``s.pop()``, | retrieves the item at *i* and also removes it from *s* | +| ``s.pop(i)`` | (if *i* is omitted - use the last one available index) | ++--------------------+--------------------------------------------------------+ +| ``s.remove(x)`` | remove the first item that is equal to *x* from *s* | ++--------------------+--------------------------------------------------------+ +| ``s.reverse()`` | reverses the items of *s* in place | ++--------------------+--------------------------------------------------------+ + +.. [#] *t* must have the same length as the slice it is replacing +.. [#3.3] new in Python version 3.3 + Text sequence type ================== From edfea4d161b7f40284ee33f92d1511c8bf313d00 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:37:59 +0200 Subject: [PATCH 038/689] Added list constructor --- src/basics/stdtypes.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index b64a21c74..9a75b08de 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -118,6 +118,17 @@ There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. Additional sequence types tailored for processing of binary data and text strings are described in dedicated sections. +Lists +----- + +Lists are mutable sequences, typically used to store collections of items. +They may be constructed in several ways: + +- using a pair of square brackets to denote the empty list: ``[]`` +- using square brackets, separating items with commas: ``[a]``, ``[a, b, c]`` +- using a list comprehension: ``[x for x in iterable]`` +- using the type constuctor: ``list()`` or ``list(iterable)`` + Common operations ----------------- From 1378ab1edcacc9e7f7ac1d5e3675aabd60aa7d2d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:42:32 +0200 Subject: [PATCH 039/689] Added tuple constructor --- src/basics/stdtypes.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 9a75b08de..e68c4f3f5 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -129,6 +129,19 @@ They may be constructed in several ways: - using a list comprehension: ``[x for x in iterable]`` - using the type constuctor: ``list()`` or ``list(iterable)`` +Tuples +------ + +Tuples are immutable sequences, typically used to store collections of data or +for cases where an immutable sequence of data is needed (such as allowing +storage in a ``set`` or ``dict`` instances). +They may be constructed in a number of ways: + +- using a pair of parentheses to denote the empty tuple: ``()`` +- using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)`` +- separating items with commas: ``a, b, c`` or ``(a, b, c)`` +- using the type constructor: ``tuple()`` or ``tuple(iterable)`` + Common operations ----------------- From a8986b5512d016252c4eaeff1e560a7a63957299 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:55:28 +0200 Subject: [PATCH 040/689] Added string methods placeholder --- src/basics/stdtypes.txt | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index e68c4f3f5..9a23c8daa 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -238,6 +238,51 @@ Mutable sequence types Text sequence type ================== +String methods +-------------- + +Strings implement all of the common sequence operations, along with the +additional methods. + +.. todo: methods to be described + str.capitalize() + str.center() + str.count() + str.encode() + str.endswith(suffix) + str.expandtabs(tabsize=8) + str.find(sub) + str.format() + str.index(sub) + str.isalnum() + srt.isalpha() + str.isascii() + str.isdecimal() + str.isdigit() + str.islower() + str.isnumeric() + str.isprintable() + str.isspace() + str.istitle() + str.isupper() + str.join() + str.ljust() + str.lower() + str.lstrip() + str.replace() + str.rfind() + str.rindex() + str.rjust() + str.rsplit() + str.rstrip() + str.split() + str.splitlines() + str.startswith(prefix) + str.strip() + str.swapcase() + str.title() + str.upper() + Value comparisons ----------------- From aa955729e97b7ef51f16368380b92df609f51196 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 02:38:40 +0200 Subject: [PATCH 041/689] Added brief mapping type description --- src/basics/stdtypes.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 9a23c8daa..d513bf45c 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -304,6 +304,23 @@ another). Mapping type ============ +A mapping object maps hashable values to arbitrary objects. Mappings are +mutable objects. There is currently ony one standard mapping type, the +*dictionary*. In few words mappings are collections of keys and their values. + +A dictionary's keys are almost arbitrary values. Values that are not hashable +may not be used as keys. Values that compare equal (such as ``1``, ``1.0`` and +``True``) can be used interchangeably to index the same dictionary entry. + +Dictionaries can be created by several means: + +- Use braces to denote the empty dictionary: ``{}`` +- Use a comma-separated list of ``key: value`` pairs with braces: + ``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} +- Use a dict comprehension: `{x: x ** 2 for x in range(10)}`` +- Use the type constructor: ``dict()``, ``dict([('key', 100)])``, + ``dict(key=100)`` + Value comparisons ----------------- From 93a0e570252ec306f0314010d563c4e6ebe9e47f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 18 Mar 2023 00:44:50 +0200 Subject: [PATCH 042/689] Removed deprecated datatypes file Basis types are described within 'stdtypes.txt'. Fixed typos and references mistakes. --- src/appx/precedence.txt | 4 +- src/appx/printf.txt | 10 +- src/basics/datatypes.txt | 257 --------------------------------------- src/basics/index.txt | 1 - src/basics/stdtypes.txt | 18 +-- src/index.txt | 2 + src/refs.bib | 2 +- 7 files changed, 19 insertions(+), 275 deletions(-) delete mode 100644 src/basics/datatypes.txt diff --git a/src/appx/precedence.txt b/src/appx/precedence.txt index d88a0a8ee..5fce07b0a 100644 --- a/src/appx/precedence.txt +++ b/src/appx/precedence.txt @@ -27,12 +27,12 @@ same precedence (use left-to-right precedence). +------------------------+----------------------------------------------------+ | ``await x`` | Await expression | +------------------------+----------------------------------------------------+ -| ``**`` | Exponentiation[#]_ | +| ``**`` | Exponentiation [#]_ | +------------------------+----------------------------------------------------+ | ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | +------------------------+----------------------------------------------------+ | ``*``, ``@``, ``/``, | Multiplication, matrix multiplication, division, | -| ``//``, ``%`` | floor division, remainder[#]_ | +| ``//``, ``%`` | floor division, remainder [#]_ | +------------------------+----------------------------------------------------+ | ``+``, ``-`` | Addition and subtraction | +------------------------+----------------------------------------------------+ diff --git a/src/appx/printf.txt b/src/appx/printf.txt index 5a7ea0f79..af9dda63b 100644 --- a/src/appx/printf.txt +++ b/src/appx/printf.txt @@ -8,10 +8,10 @@ String objects have one unique built-in operation: the ``%`` operator (modulo). This is also known as the string *formatting* or *interpolation* operator -:cite:`docs-python:printf-style`. Given ``format % values`` (where *format* is -a string), ``%`` conversion specifications in *format* are replaced with zero -or more elements of *values*. If *format* requires a single argument, *values* -may be a single non-tuple object. +:cite:`docs-python:printf-formatting`. Given ``format % values`` (where +*format* is a string), ``%`` conversion specifications in *format* are replaced +with zero or more elements of *values*. If *format* requires a single argument, +*values* may be a single non-tuple object. The conversion flag characters are: @@ -57,7 +57,7 @@ The conversion types are: +------------+----------------------------------------------------------------+ | ``'g'`` | Floating point format. Uses lowercase exponential format if | | | exponent is less that -4 or not less than precision, decimal | -| | format overwise. | +| | format otherwise. | | ``'G'`` | | +------------+----------------------------------------------------------------+ | ``'c'`` | Single character (accepts integer or single character string) | diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt deleted file mode 100644 index 14915fe97..000000000 --- a/src/basics/datatypes.txt +++ /dev/null @@ -1,257 +0,0 @@ -******************************************************************************* - Data Types -******************************************************************************* - -Data may represent different things and require various operations available. -In programming data types is an important concept. For example **1984** may be -a number (``1984``), a text (``"1984``) or event a date. The data type -describes the operations, that are allowed for the data, like additions for -numbers or concatenation for text (e.g. ``1 + 2 -> 3``, ``"1" + "3" -> "13"``). - -Python uses dynamic typing. This means as a developer you should not declare -a variable with its data type - the interpreter will do this for you. Other -popular language using dynamic typing are JavaScript and PHP. Setting variables -in Python is as easy as: - -.. code-block:: python - - script_name = "Circle area" # create a text variable - radius = 5 # create an integer variable - area = 2 * 3.14 * 5 ** 2 # create a floating-point variable - -Built-In Data Types -=================== - -Python has the following data types built-in: - -- Integers (``int``) -- Floating-point numbers (``float``) -- Complex numbers (``complex``) -- Booleans (``bool``) -- Strings (``str``) -- Bytes (``bytes``) -- Byte arrays (``bytearray``) -- Lists (``list``) -- Tuples (``tuple``) -- Sets (``set``) -- Frozen sets (``frozenset``) -- Dictionaries (``dict``) -- None (``NoneType``) - -Any one can use them without additional imports or packages installations. - -Text -==== - -Text data are stored as strings (``str`` data type) in Python. Any sequence of -letters, digits, punctuation marks and whitespace characters enclosed with -quotes is considered to be a string literal. Both single quotes (``'``) and -double quotes (``"``) can be used interchangeably to create a string in Python. - -.. code-block:: python - - variable = 'string' - variable = "string" - variable = str("string") # declare using built-in constructor - -Escaping --------- - -In programming this is a process of using a special character to indicate that -the following character(s) should be treated differently from their literal -meaning. The common usage is to include a special character(s) within strings. -A **backslash** character is used to *escape* the following one. - -.. code-block:: python - :caption: Example of Escaping in Python - - # Escaping single quotes within a string - print('She said, "I\'m ready for the test!"') - - # Escaping double quotes within a string - print("He replied, \"I'll be there in a minute.\"") - - # Escaping backslash itself - print("Backslash \\ is a special character for escaping other characters") - - # Escaping a newline character - print("Hello\nworld") - - # Escaping a tab character - print("Name\tAge\tGender") - -Single quotes or double quotes ------------------------------- - -Don't care. Use any quote mark you like. A *string* is a sequence of characters -after the opening quote and till the closing one. You may use double quotes in -case a single quote is a part of the text (e.g. ``"It's a Serhii's document"``) -and vise versa (e.g. ``'The name of the ship was a "Billy of Tea"'``). It's -a good practice not to mess single and double quotes within one project. Just -keep using a chosen one character for all strings. - -Multiline strings ------------------ - -You can assign a multiline string by using triple quotes: Both single quote -and double quote characters are available. - -.. code-block:: python - - variable = """Well, ye scrawny mate- set sails for riddle! - Never love a lagoon.""" - variable = '''Hello - World''' - -The same syntax is used to create docstring, which are a special case of string -usage. We will look on these in the future. - -Supported operations --------------------- - -.. note:: This subsection describes only the most common operations. - -:Concatenation: - The ``+`` operator is used to concatenate (join) two or more strings. - - .. code-block:: python - - "Serhii" + " " + "Horodilov" # "Serhii Horodilov" - - On the other hand the ``join`` method concatenates a collection of strings, - which may be more efficient than using ``+``. - - .. code-block:: python - - " ".join(["Serhii", "Horodilov"]) # "Serhii Horodilov" - -:Repetition: - The ``*`` operator is used to repeat a string a specified number of times. - Only multipliers of the ``int`` type are allowed. - - .. code-block:: python - - "Serhii" * 5 # "SerhiiSerhiiSerhiiSerhiiSerhii" - -:Length: - The ``len`` function is used to find the length of a string. - - .. code-block:: python - - len("Serhii Horodilov") # 8 - -:Case conversion: - The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform - actions on case. - - ``lower`` creates a new string with all lower-case characters. - - ``upper`` creates a new string with all upper-case characters. - - ``capitalize`` creates a new string with the upper-case 1st character. - - ``title`` will make all characters after whitespace upper case. - - .. code-block:: python - - name = "serhii horodilov" - name.lower() # "serhii horodilov" - name.upper() # "SERHII HORODILOV" - name.capitalize() # "Serhii horodilov" - name.title() # "Serhii Horodilov" - -:Stripping: - The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove - leading and/or trailing whitespace characters. - - .. code-block:: python - - name = " Serhii Horodilov " - name.strip() # "Serhii Horodilov" - name.lstrip() # "Serhii Horodilov " - name.rstrip() # " Serhii Horodilov" - -Strings are subscriptable -------------------------- - -.. note:: ``str`` is not the only one subscriptable data type in Python. - -This means you can access individual characters or slices within a string using -indexes. A string is a *sequence* of characters and each character within -a string has its own position - an *index*. Indexing starts at 0, so the first -character in a string is at index 0, the second one is at index 1, and so on. -Negative indexing is also possible, with -1 representing the last character in -a string, -2 representing the second-to-last character, and so on. Use square -brackets (``[]``) to access the index. - -.. code-block:: python - - variable = "Plank of a salty strength, endure the fortune!" - - variable[0] # P - variable[-4] # u - -You can also *slice* strings, this means to get a subsequence of characters. -The slice syntax consists of 3 digits: - -- the first one represent the index to start (inclusive), defaults to 0 -- the second one represent the index to stop (non-inclusive), defaults to - the length of the sequence -- the third one represents a step, defaults to 1 - -These numbers are separated within colon (``:``) and enclosed within square -brackets. Any slice digit may be omitted. - -.. code-block:: python - :caption: Sequence slicing - - variable = "0123456789" # a string of digits - - variable[0:10:1] # 0123456789 - variable[:10:2] # 02468 - variable[:-2] # 01234567 - variable[::-1] # 9876543210 - -Strings are iterable --------------------- - -Since strings are arrays, we can loop through the characters in a string with -a ``for`` loop: - -.. code-block:: python - - for character in "foobar": - print(character) - -Strings are immutable ---------------------- - -This means, you cannot change an individual character within a string. - -.. code-block:: python - - variable = "variable" - variable[0] = "V" # this action will cause an error - -Integers -======== - -``int``, or integer, is a whole number, positive or negative, without decimals. - -.. code-block:: python - - integer_number = 42 - integer_number = int(42) # declare using casting - -Floats -====== - -``float``, or floating point number, is a number, positive or negative, -containing one or more decimals. - -.. code-block:: python - - float_number = 42. # will assign 42.0 - float_number = .42 # will assign 0.42 - float_number = 4.2 # will assign 4.2 - float_number = float(42) # declare using casting (42.0) diff --git a/src/basics/index.txt b/src/basics/index.txt index 9f8a2b8a0..468d9cc36 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -7,7 +7,6 @@ variables syntax - datatypes stdtypes controlflow functions diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index d513bf45c..bbabe1b9d 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -12,7 +12,7 @@ Numeric types There are 3 distinct numeric types: *integers*, *floating point numbers*, and *complex numbers*. In addition, Booleans are a subtype of integers. Integers -have unlimited precision. Floating point numbers are usually implemented usign +have unlimited precision. Floating point numbers are usually implemented using ``double`` in C. Complex numbers have a real and imaginary part, which are each a floating point number. @@ -127,7 +127,7 @@ They may be constructed in several ways: - using a pair of square brackets to denote the empty list: ``[]`` - using square brackets, separating items with commas: ``[a]``, ``[a, b, c]`` - using a list comprehension: ``[x for x in iterable]`` -- using the type constuctor: ``list()`` or ``list(iterable)`` +- using the type constructor: ``list()`` or ``list(iterable)`` Tuples ------ @@ -185,7 +185,7 @@ types results in inequality, and ordering comparison across these types raises Sequences compare lexicographically using comparison of corresponding elements. The built-in containers typically assume identical objects are equal to -themselves. Lexicographical comparison between buit-in collections works as +themselves. Lexicographical comparison between built-in collections works as follows: - For two collections to compare equal, they must be of the same type, have @@ -207,16 +207,16 @@ Mutable sequence types +--------------------+--------------------------------------------------------+ | ``del s[i:j]`` | same as ``s[i:j] = []`` | +--------------------+--------------------------------------------------------+ -| ``s[i:j:k] = t`` | the elements of *s* are replaced by those of *t*[#]_ | +| ``s[i:j:k] = t`` | the elements of *s* are replaced by those of *t* [#]_ | +--------------------+--------------------------------------------------------+ | ``del s[i:j:k]`` | removes the elements of ``s[i:j:k]`` from the list | +--------------------+--------------------------------------------------------+ | ``s.append(x)`` | appends *x* to the end of the sequence; the same as | | | ``s[len(s):len(s)] = [x]`` | +--------------------+--------------------------------------------------------+ -| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#3.3]_ | +| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#new]_ | +--------------------+--------------------------------------------------------+ -| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#3.3]_ | +| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#new]_ | +--------------------+--------------------------------------------------------+ | ``s.extend(t)`` | extends *s* with the contents of *t* | | ``s += t`` | | @@ -233,7 +233,7 @@ Mutable sequence types +--------------------+--------------------------------------------------------+ .. [#] *t* must have the same length as the slice it is replacing -.. [#3.3] new in Python version 3.3 +.. [#new] new in Python version 3.3 Text sequence type ================== @@ -316,8 +316,8 @@ Dictionaries can be created by several means: - Use braces to denote the empty dictionary: ``{}`` - Use a comma-separated list of ``key: value`` pairs with braces: - ``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} -- Use a dict comprehension: `{x: x ** 2 for x in range(10)}`` + ``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}`` +- Use a dict comprehension: ``{x: x ** 2 for x in range(10)}`` - Use the type constructor: ``dict()``, ``dict([('key', 100)])``, ``dict(key=100)`` diff --git a/src/index.txt b/src/index.txt index a0fbf68e3..8da277c3e 100644 --- a/src/index.txt +++ b/src/index.txt @@ -25,6 +25,8 @@ appx/software_list appx/code_edit appx/env_path + appx/precedence + appx/printf .. rubric:: References diff --git a/src/refs.bib b/src/refs.bib index 446cc4a9d..de0048798 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -58,7 +58,7 @@ @misc{docs-python:operator-precedence url = {https://docs.python.org/3/reference/expressions.html#operator-precedence}, } -@misc{docs-python:printf-formating, +@misc{docs-python:printf-formatting, title = "{Python Documentation}", url = {https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting}, } From 129b92e9e7c6925c0bb87b4d88a8cc8c4e24552b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Mar 2023 17:34:30 +0200 Subject: [PATCH 043/689] Fixed "stdtypes" footnotes Signed-off-by: Serhii Horodilov --- src/basics/stdtypes.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index bbabe1b9d..46f69fe30 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -214,9 +214,9 @@ Mutable sequence types | ``s.append(x)`` | appends *x* to the end of the sequence; the same as | | | ``s[len(s):len(s)] = [x]`` | +--------------------+--------------------------------------------------------+ -| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#new]_ | +| ``s.clear()`` | removes all items from *s* (``del s[:]``) [#py33]_ | +--------------------+--------------------------------------------------------+ -| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#new]_ | +| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``) [#py33]_ | +--------------------+--------------------------------------------------------+ | ``s.extend(t)`` | extends *s* with the contents of *t* | | ``s += t`` | | @@ -232,8 +232,8 @@ Mutable sequence types | ``s.reverse()`` | reverses the items of *s* in place | +--------------------+--------------------------------------------------------+ -.. [#] *t* must have the same length as the slice it is replacing -.. [#new] new in Python version 3.3 +.. [#] *t* must have the same length as the slice it is replacing +.. [#py33] new in Python version 3.3 Text sequence type ================== From 2553992b4fa92d321961c3fdb2c3f4e005985f85 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 04:11:32 +0200 Subject: [PATCH 044/689] DB - Aggregate functions Signed-off-by: Serhii Horodilov --- assets/img/aggregate-function.svg | 78 +++++++++++++++++ assets/sql/products.pg13-1.dump.sql | 103 ++++++++++++++++++++++ src/rdbms/aggregation.txt | 127 ++++++++++++++++++++++++++++ src/rdbms/index.txt | 20 +++++ src/rdbms/products_table.csv | 11 +++ 5 files changed, 339 insertions(+) create mode 100644 assets/img/aggregate-function.svg create mode 100644 assets/sql/products.pg13-1.dump.sql create mode 100644 src/rdbms/aggregation.txt create mode 100644 src/rdbms/products_table.csv diff --git a/assets/img/aggregate-function.svg b/assets/img/aggregate-function.svg new file mode 100644 index 000000000..f1cae6e44 --- /dev/null +++ b/assets/img/aggregate-function.svg @@ -0,0 +1,78 @@ + + + + + + + aggregate-func + + + + ( + + + + + + DISTINCT + + + + + + + + expr + + + + ) + + + + filter-clause + + + + + + + + + + + + + , + + + + + + * + + + + + + + + + diff --git a/assets/sql/products.pg13-1.dump.sql b/assets/sql/products.pg13-1.dump.sql new file mode 100644 index 000000000..b7ff37b33 --- /dev/null +++ b/assets/sql/products.pg13-1.dump.sql @@ -0,0 +1,103 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 13.1 (Debian 13.1-1.pgdg100+1) +-- Dumped by pg_dump version 14.5 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: product; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.product ( + id integer NOT NULL, + name text NOT NULL, + price integer NOT NULL, + category text NOT NULL, + sold integer NOT NULL +); + + +ALTER TABLE public.product OWNER TO postgres; + +-- +-- Name: product_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.product_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.product_id_seq OWNER TO postgres; + +-- +-- Name: product_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.product_id_seq OWNED BY public.product.id; + + +-- +-- Name: product id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.product ALTER COLUMN id SET DEFAULT nextval('public.product_id_seq'::regclass); + + +-- +-- Data for Name: product; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.product (id, name, price, category, sold) FROM stdin; +1 Samsung Galaxy 100000 Phones 500 +2 iPhone 13 Pro 120000 Phones 300 +3 MacBook Pro 350000 Laptops 100 +4 Lenovo ThinkPad 150000 Laptops 200 +5 HP Printer 20000 Printers 800 +6 Dell Monitor 50000 Monitors 400 +7 Sony Headphones 30000 Audio 0 +8 Bose Soundbar 70000 Audio 0 +9 Xbox Series X 60000 Gaming 250 +10 PlayStation 5 55000 Gaming 350 +\. + + +-- +-- Name: product_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.product_id_seq', 10, true); + + +-- +-- Name: product product_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.product + ADD CONSTRAINT product_pkey PRIMARY KEY (id); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt new file mode 100644 index 000000000..fd23691f6 --- /dev/null +++ b/src/rdbms/aggregation.txt @@ -0,0 +1,127 @@ +******************************************************************************* + Data Aggregation +******************************************************************************* + +Here is some dummy data, that will be used as example in this section. + +.. csv-table:: product + :align: center + :file: products_table.csv + :header-rows: 1 + +.. only:: builder_html + + The same dataset is available as: + + - :download:`csv file <./products_table.csv>` + - :download:`postgres dump file ` + +Aggregate functions +=================== + +*Aggregate functions* compute a single result from a set of input values. +Various RDBMS implement various built-in aggregate functions. In this section +we will review 5 basic functions that are available in all RDBMS. + +.. image:: /../assets/img/aggregate-function.svg + +Count +----- + +The ``count(field)`` function returns a count of the number of times that +``field`` is not ``NULL`` in a group. +The ``count(*)`` function (with no arguments) returns the total number of rows +in the group. + +.. code-block:: sql + + SELECT count(*) as "total products" FROM product; + +:: + + total_products + ---------------- + 10 + +Maximum value +------------- + +The ``max()`` aggregate function returns the maximum value of all values in +the group. The maximum value is the value that would be returned last in +an ORDER BY on the same column. +Aggregate function returns ``NULL`` if and only if there are no non-NULL values +in the group. + +.. code-block:: sql + + SELECT max(price) as "maximum price" FROM product; + +:: + + maximum price +--------------- + 350000 + +Minimum value +------------- + +The ``min()`` aggregate function returns the minimum non-NULL value of all +values in the group. The minimum value is the first non-NULL value that would +appear in an ORDER BY of the column. +Aggregate function returns ``NULL`` if and only if there are no non-NULL values +in the group. + +.. code-block:: sql + + SELECT min(price) as "minimum price" FROM product; + +:: + + minimum price +--------------- + 20000 + +Average value +------------- + +The ``avg()`` function returns the average value of all non-NULL inputs within +a group. String and BLOB values that do not look like numbers are interpreted +as 0. The result is always a floating point value whenever there is at least +one non-NULL input even if all inputs are integers. +The result is ``NULL`` if and only if there are no non-NULL inputs. + +.. code-block:: sql + + SELECT avg(price) as "average price" FROM product; + +:: + + average price + --------------------- + 100500.000000000000 + + +Sum of values +------------- + +The ``sum()`` aggregate functions return the sum of all non-NULL values in +the group. +If there are no non-NULL input rows then function returns ``NULL``. + +.. note:: + NULL is not normally a helpful result for the sum of no rows but + the SQL standard requires it. + + SQLite implements ``total`` aggregate function, that is similar to + ``sum``, but returns ``0.0`` (always floating point) if there are + no non-NULL input rows. + +.. code-block:: sql + + SELECT sum(sold) as "total sold items" FROM product; + +:: + + total sold items + ------------------ + 3750 diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index d9bcfbed7..5b7ae7612 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -2,5 +2,25 @@ Relational Database ############################################################################### +:abbr:`RDBMS (Relational Database Management System)` is a type of software +that helps users to create, update, manage, and access relational databases. +Relational databases organize data into tables, which consist of rows and +columns. Each column represents a specific attribute of the data, while each +row represents a specific instance of that data. + +RDBMS allow users to interact with the database using +:abbr:`SQL (Structured Query Language)`, which is a standard language for +managing and manipulating relational databases. SQL allows users to perform +a variety of operations on the database, including adding, updating, and +deleting data, as well as retrieving data based on specific criteria. + +RDBMS also provide a range of features to ensure data integrity, such as +enforcing data constraints, supporting transactions, and providing backup +and recovery capabilities. Additionally, RDBMS systems often provide tools +for managing the database, such as user interfaces for creating and modifying +tables and views, and monitoring tools for optimizing database performance. + .. toctree:: :name: rdbms + + aggregation diff --git a/src/rdbms/products_table.csv b/src/rdbms/products_table.csv new file mode 100644 index 000000000..4e4549145 --- /dev/null +++ b/src/rdbms/products_table.csv @@ -0,0 +1,11 @@ +id,name,price,category,sold +1,"Samsung Galaxy",100000,Phones,500 +2,"iPhone 13 Pro",120000,Phones,300 +3,"MacBook Pro",350000,Laptops,100 +4,"Lenovo ThinkPad",150000,Laptops,200 +5,"HP Printer",20000,Printers,800 +6,"Dell Monitor",50000,Monitors,400 +7,"Sony Headphones",30000,Audio,0 +8,"Bose Soundbar",70000,Audio,0 +9,"Xbox Series X",60000,Gaming,250 +10,"PlayStation 5",55000,Gaming,350 From 932364aebff1acf27ee3228fbf0645a1ba2206ed Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 05:18:55 +0200 Subject: [PATCH 045/689] DB - Group by and having Signed-off-by: Serhii Horodilov --- src/rdbms/aggregation.txt | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index fd23691f6..ea4fedf04 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -125,3 +125,100 @@ If there are no non-NULL input rows then function returns ``NULL``. total sold items ------------------ 3750 + +Grouping data +============= + +Getting some aggregated values is not very helpful itself. Most cases require +to group outputs in some specific manner. + +For example, if the task is to count number of registered categories it is +simple to solve as: + +.. code-block:: + + SELECT count(DISTINCT category) FROM product; + +:: + + count + ------- + 6 + +But in case, the task is to count **sold** items for each category, this +becomes impossible to solve without grouping items. ``GROUP BY`` clause +provides the ability to group rows based on some field(s) values. + +General syntax is: + +:: + + SELECT select_list + FROM ... + [WHERE ...] + GROUP BY grouping_column_reference [, grouping_column_reference]... + +.. code-block:: + + SELECT category, sum(sold) as sold FROM product GROUP BY category; + +.. table:: + :align: center + + ======== ==== + category sold + ======== ==== + Audio 0 + Printers 800 + Gaming 600 + Monitors 400 + Laptops 300 + Phones 800 + ======== ==== + +If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` clause, +then each of the expressions specified as part of the GROUP BY clause is +evaluated for each row of the dataset according to the processing rules stated +below for ORDER BY expressions. Each row is then assigned to a "group" based on +the results; rows for which the results of evaluating the GROUP BY expressions +are the same get assigned to the same group. For the purposes of grouping rows, +``NULL`` values are considered equal. The usual rules for selecting a collation +sequence with which to compare text values apply when evaluating expressions in +a GROUP BY clause. The expressions in the GROUP BY clause do not have to be +expressions that appear in the result. The expressions in a GROUP BY clause may +not be aggregate expressions. + +Having clause +------------- + +But what, if the task is to filter categories, that have less than 500 sold +items in it? ``WHERE`` clause will be useless, cause it's evaluated before +grouping output. In other words, only rows that suite WHERE filter will be +selected. + +.. code-block:: sql + + SELECT category, sum(sold) as sold + FROM product + GROUP BY category + HAVING sum(sold) < 500; + +.. table:: + :align: center + + ======== ==== + category sold + ======== ==== + Audio 0 + Monitors 400 + Laptops 300 + ======== ==== + +If a ``HAVING`` clause is specified, it is evaluated once for each group of +rows as a boolean expression. If the result of evaluating the HAVING clause is +false, the group is discarded. If the HAVING clause is an aggregate expression, +it is evaluated across all rows in the group. + +If a HAVING clause is a non-aggregate expression, it is evaluated with respect +to an arbitrarily selected row from the group. The HAVING expression may refer +to values, even aggregate functions, that are not in the result. From 4441602b41313a566c0cfe28f27081ab56c53570 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 27 Mar 2023 17:26:54 +0300 Subject: [PATCH 046/689] Rebased onto 'devel' branch and resolved conflicts Signed-off-by: Serhii Horodilov # Conflicts: # poetry.lock # requirements.txt --- poetry.lock | 256 +++++++++++++++++------------------- pyproject.toml | 1 + requirements.txt | 18 +-- src/conf.py | 1 + src/rdbms/index.txt | 1 + src/rdbms/normalization.txt | 142 ++++++++++++++++++++ 6 files changed, 274 insertions(+), 145 deletions(-) create mode 100644 src/rdbms/normalization.txt diff --git a/poetry.lock b/poetry.lock index 3cba978bf..7a858d484 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,19 +14,16 @@ files = [ [[package]] name = "babel" -version = "2.11.0" +version = "2.12.1" description = "Internationalization utilities" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] -[package.dependencies] -pytz = ">=2015.7" - [[package]] name = "certifi" version = "2022.12.7" @@ -41,100 +38,87 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.0.1" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = "*" -files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] [[package]] @@ -202,14 +186,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.0.0" +version = "6.1.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, + {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, + {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, ] [package.dependencies] @@ -255,24 +239,24 @@ six = ">=1.4.1" [[package]] name = "markdown-it-py" -version = "2.1.0" +version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, - {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, + {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, + {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, ] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] -code-style = ["pre-commit (==2.6)"] -compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] @@ -460,18 +444,6 @@ files = [ [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pytz" -version = "2022.7.1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, -] - [[package]] name = "pyyaml" version = "6.0" @@ -715,14 +687,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.0" +version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, ] [package.extras] @@ -731,18 +703,18 @@ test = ["html5lib", "pytest"] [[package]] name = "sphinxcontrib-jquery" -version = "2.0.0" +version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" category = "main" optional = false python-versions = ">=2.7" files = [ - {file = "sphinxcontrib-jquery-2.0.0.tar.gz", hash = "sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa"}, - {file = "sphinxcontrib_jquery-2.0.0-py3-none-any.whl", hash = "sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995"}, + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, ] [package.dependencies] -setuptools = "*" +Sphinx = ">=1.8" [[package]] name = "sphinxcontrib-jsmath" @@ -759,6 +731,18 @@ files = [ [package.extras] test = ["flake8", "mypy", "pytest"] +[[package]] +name = "sphinxcontrib-mermaid" +version = "0.8.1" +description = "Mermaid diagrams in yours Sphinx powered docs" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinxcontrib-mermaid-0.8.1.tar.gz", hash = "sha256:fa3e5325d4ba395336e6137d113f55026b1a03ccd115dc54113d1d871a580466"}, + {file = "sphinxcontrib_mermaid-0.8.1-py3-none-any.whl", hash = "sha256:15491c24ec78cf1626b1e79e797a9ce87cb7959cf38f955eb72dd5512aeb6ce9"}, +] + [[package]] name = "sphinxcontrib-qthelp" version = "1.0.3" @@ -793,14 +777,14 @@ test = ["pytest"] [[package]] name = "urllib3" -version = "1.26.14" +version = "1.26.15" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, ] [package.extras] @@ -810,21 +794,21 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "zipp" -version = "3.12.0" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, - {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "8cd52ebd6491a532634639dcece042cb9d8dade3b412c454cabd4d6852f55c6f" +content-hash = "1a2e7b2d16a856baa85023359e142ff950911a5a26e41614c462053ddca4a8dd" diff --git a/pyproject.toml b/pyproject.toml index b6fe31691..36544b23c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ sphinx-intl = "^2.1.0" sphinx-rtd-theme = "^1.2.0" myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" +sphinxcontrib-mermaid = "^0.8.1" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index 65b689912..1cb4a09e6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,16 +1,16 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.11.0 ; python_version >= "3.9" and python_version < "4.0" +babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4" -charset-normalizer==3.0.1 ; python_version >= "3.9" and python_version < "4" +charset-normalizer==3.1.0 ; python_version >= "3.9" and python_version < "4" click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.4 ; python_version >= "3.9" and python_version < "4" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.0.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==6.1.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" -markdown-it-py==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" @@ -19,7 +19,6 @@ packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" -pytz==2022.7.1 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" requests==2.28.2 ; python_version >= "3.9" and python_version < "4" setuptools==67.6.0 ; python_version >= "3.9" and python_version < "4.0" @@ -31,10 +30,11 @@ sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-jquery==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" -urllib3==1.26.14 ; python_version >= "3.9" and python_version < "4" -zipp==3.12.0 ; python_version >= "3.9" and python_version < "3.10" +urllib3==1.26.15 ; python_version >= "3.9" and python_version < "4" +zipp==3.15.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/src/conf.py b/src/conf.py index 1020d144e..4060685b5 100644 --- a/src/conf.py +++ b/src/conf.py @@ -23,6 +23,7 @@ "sphinx.ext.imgconverter", "sphinxcontrib.bibtex", + "sphinxcontrib.mermaid", "sphinx_rtd_theme", "myst_parser", ] diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 5b7ae7612..c6929e386 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -24,3 +24,4 @@ tables and views, and monitoring tools for optimizing database performance. :name: rdbms aggregation + normalization diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt new file mode 100644 index 000000000..3affcaa67 --- /dev/null +++ b/src/rdbms/normalization.txt @@ -0,0 +1,142 @@ +******************************************************************************* + Database Normalization +******************************************************************************* + +Normalization is a process of organizing data in a database so that it is free +from redundancy and dependency. It helps to eliminate data inconsistencies and +anomalies, thereby improving data integrity. Normalization is a set of rules or +guidelines to design a database schema in such a way that it avoids data +duplication, data redundancy, and data inconsistency. + +There are several normal forms, each building on the previous one, which guide +us in the normalization process. The most commonly used normal forms are: + +- **First Normal Form (1NF)**: + Each column should hold atomic (indivisible) values. + There should be no repeating groups or arrays of data in a table. +- **Second Normal Form (2NF)**: + Each non-key column should be functionally dependent on the entire primary + key. In other words, every column in a table should be related to + the primary key and not dependent on any other non-key columns. +- **Third Normal Form (3NF)**: + All non-key columns should be dependent only on the primary key and not on + any other non-key columns. This eliminates transitive dependencies. + +Normalization reduces data redundancy and dependency, making the database more +efficient, flexible, and scalable. It also helps in maintaining data +consistency and accuracy, and ensures that updates and deletions are properly +handled. + +First normal form (1NF) +======================= + +It's easier to understand normalization via examples. +Let's start with some dummy orders data. + +.. csv-table:: Initial data + :header-rows: 1 + + order,customer,product,quantity,price,total + 1,"John Doe","(Apple, Orange)","(2, 3)","(100, 50)","(200, 150)" + 2,"Jane Smith","Banana",4,25,100 + +This table violates 1NF, since its columns contain multiple values. To bring +this to 1NF all data within the table are to be atomic. + +.. csv-table:: 1NF applied + :header-rows: 1 + + order,customer,product,quantity,price,total + 1,"John Doe","Apple",2,100 ,200 + 2,"John Doe","Orange",3,50 ,150 + 3,"Jane Smith","Banana",4,25,100 + +From now each peace of data is represented as atomic value. + +Second normal form (2NF) +======================== + +The table above is in 1NF, but ``item price`` is dependent on the *item* entity +itself and have low cohesion to *orders*. To bring it into 2NF a dedicated +table to store information about items themselves is to be created. After that +``order`` and ``product`` table are connected (related) to each other via a +foreign key. + +.. csv-table:: ``order`` table + :header-rows: 1 + + id, customer, product_id, quantity + 1, "John Doe", 1, 2 + 2, "John Doe", 2, 3 + 3, "Jane Smith", 3, 4 + +.. csv-table:: ``product`` table + :header-rows: 1 + + id, product, price + 1, "Apple", 100 + 2, "Orange", 50 + 3, "Banana", 25 + +.. mermaid:: + :align: center + + erDiagram + ORDER ||--|{ PRODUCT : contains + ORDER { + int id pk + string customer + int product_id fk + int quantity + } + PRODUCT { + int id pk + string name + int price + } + +.. note:: ``total`` field is also removed, since now it can be calculated + as product of ``product.price`` and ``order.quantity``. + +Third normal form (3NF) +======================= + +At last it's time to remove a transitive functional dependency. Customer's name +is not actually dependent on a product, but on a person, who places an order. + +.. csv-table:: ``order`` table + :header-rows: 1 + + id, customer_id, product_id, quantity + 1, 1, 1, 2 + 2, 1, 2, 3 + 3, 2, 3, 4 + +.. csv-table:: ``customer`` table + :header-rows: 1 + + id, customer + 1, "John Doe" + 3, "Jane Smith" + +.. mermaid:: + :align: center + + erDiagram + CUSTOMER }o--|| ORDER : places + ORDER ||--|{ PRODUCT : contains + ORDER { + int id pk + int customer_id fk + int product_id fk + int quantity + } + PRODUCT { + int id pk + string name + int price + } + CUSTOMER { + int id pk + string name + } From 7ed4619db5857da44e12596096ef45a6414d5981 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 08:25:29 +0200 Subject: [PATCH 047/689] DB - Relationships Signed-off-by: Serhii Horodilov --- src/rdbms/index.txt | 1 + src/rdbms/relations.txt | 130 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 src/rdbms/relations.txt diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index c6929e386..337ec1331 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -24,4 +24,5 @@ tables and views, and monitoring tools for optimizing database performance. :name: rdbms aggregation + relations normalization diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt new file mode 100644 index 000000000..b4d4a6053 --- /dev/null +++ b/src/rdbms/relations.txt @@ -0,0 +1,130 @@ +******************************************************************************* + Data Relationships +******************************************************************************* + +It's time to talk about **data relations**. + +For example your database contains two tables: ``weather`` and ``city``. The +diagram below demonstrates the overall data structure: + +.. mermaid:: + :align: center + + erDiagram + weather { + string city + int temp_lo + int temp_hi + date date + } + city { + string name + point location + } + +Consider the following problem: you want to make sure no one can insert +a record into ``weather`` without a matching entry in ``city`` table. +This is called maintaining the *referential integrity* of your data. +In simplistic database systems this would be implemented (if at all) by first +looking at the cities table to check if a matching record exists, and then +inserting or rejecting the new weather records. This approach has a number of +problems and is very inconvenient. + +.. code-block:: sql + + CREATE TABLE city ( + name varchar(80) primary key, + location point + ); + + CREATE TABLE weather ( + city varchar(80) references cities(name), + temp_lo int, + temp_hi int, + date date + ); + +This declaration creates a relationship between two (or even more) tables. + +Foreign key (FK) +=========== + +So far, you have knowledge about **primary** keys. +The **foreign** key is a column, that *references* some another table. +In common, it's a reference to another table's PK; but there is no limitation +of this kind, any column can be referenced by another one. +FKs handle data integrity only, it's not required for FK to be non-NULL value. + +The relation's properties are described by CONSTRAINTS and the database's +structure. + +For example, modifying declaration with ``NOT NULL`` constraint grants +that each record within a table has a matching one entity in another table. + +.. code-block:: sql + + CREATE TABLE weather ( + city varchar(80) references cities(name) NOT NULL, + ... + ); + +This brings us to various relationship models. + +One-to-many relationship (1-to-N) +------------------------ + +This is the most common relationship. + +For the example above there are no limitations on temperature measurements in +a specified city. So, a single city may has 0 or N related records in +``weather`` table. But each weather record is related to the only one city. + +Another example is employees and office buildings they work in. Some big +company may have multiple offices and employee across the globe. +Multiple employees can be present in a single office building at a time. +But each employee can be physically located only in a single office at a time. + +.. mermaid:: + + erDiagram + employee }o--|| office : located + employee { + int id + string first_name + string last_name + email email + int office_id fk + } + office { + int id + point location + text address + } + +One-to-one relationship (1-to-1) +----------------------- + +``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is +and only one matching record. Back to the example with employees. Multiple +workstations (personal computers) are located in each office building. +The only one person can occupy the only one work station at a time. + +.. mermaid:: + + erDiagram + employee ||--|| work_station : occupies + +Many-to-many relationship (N-to-N) +------------------------- + +These relationships require additional table. +A good example may be a *project role*. There are many of them in a production +team. And some employees may be assigned to the same role (e.g. developers, +testers etc.). But also a single person can be a developer and tester at +a time. + +.. mermaid:: + + erDiagram + employee }o--|{ employee_role : execute + role }o--|{ employee_role : assign From 1100a1abd42aad633ef05a1cc7863f9b7b4d187f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 09:21:19 +0200 Subject: [PATCH 048/689] DB - Joins Signed-off-by: Serhii Horodilov --- src/rdbms/relations.txt | 234 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index b4d4a6053..ebdfcfb2c 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -128,3 +128,237 @@ a time. erDiagram employee }o--|{ employee_role : execute role }o--|{ employee_role : assign + +Joining data +============ + +``JOIN`` is used to *join* data fetched from multiple related tables. +To build a valid query you are to set the tables to join and parameter to use +for this operation. + +Common syntax is: + +:: + + T1 join_type T2 [ join_condition ] + +There are various join types available. +Here are is some dummy data to demonstrate their purpose. + +.. table:: poem + + +----+------------------------+-----------+ + | id | title | author_id | + +====+========================+===========+ + | 1 | On the Field of Battle | 1 | + +----+------------------------+-----------+ + | 2 | Moses | 2 | + +----+------------------------+-----------+ + | 3 | The Forest Song | 1 | + +----+------------------------+-----------+ + | 4 | In the Catacombs | null | + +----+------------------------+-----------+ + | 5 | The Singing Stones | 1 | + +----+------------------------+-----------+ + | 6 | Ancient Fairy Tales | null | + +----+------------------------+-----------+ + | 7 | My Thoughts | 2 | + +----+------------------------+-----------+ + | 8 | To Shevchenko | null | + +----+------------------------+-----------+ + + +.. table:: author + + +----+---------------+ + | id | name | + +====+===============+ + | 1 | Larysa Kosach | + +----+---------------+ + | 2 | Ivan Franko | + +----+---------------+ + | 3 | John Doe | + +----+---------------+ + +.. code-block:: sql + + CREATE TABLE author + ( + id SERIAL PRIMARY KEY, + name VARCHAR(32) NOT NULL UNIQUE + ); + CREATE TABLE poem + ( + id SERIAL PRIMARY KEY, + title VARCHAR(32) NOT NULL UNIQUE, + author_id INT REFERENCES author (id) + ); + INSERT INTO author(name) + VALUES ('Larysa Kosach'), + ('Ivan Franko'), + ('John Doe'); + INSERT INTO poem(title, author_id) + VALUES ('On the Field of Battle', 1), + ('Moses', 2), + ('The Forest Song', 1), + ('In the Catacombs', null), + ('The Singing Stones', 1), + ('Ancient Fairy Tales', null), + ('My Thoughts', 2), + ('To Shevchenko', null) + ; + +Join types +---------- + +:Cross join: + + .. code-block:: + + T1 CROSS JOIN T2 + + For every possible combination of rows from T1 and T2 + (i.e., a Cartesian product), the joined table will contain a row consisting + of all columns in T1 followed by all columns in T2. If the tables have N + and M rows respectively, the joined table will have N * M rows. + +:Qualified joins: + + .. code-block:: + + T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON condition + + The words ``INNER`` and ``OUTER`` are optional for all forms. + ``INNER`` is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` + join. + +INNER JOIN +---------- + +For each row R1 of T1, the joined table has a row for each row in T2 that +satisfies the join condition with R1. + +.. code-block:: sql + :caption: Inner join + + SELECT p.title, a.name + FROM poem p + JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ + +LEFT OUTER JOIN +--------------- + +First, an inner join is performed. Then, for each row in T1 that does not +satisfy the join condition with any row in T2, a joined row is added with null +values in columns of T2. Thus, the joined table always has at least one row for +each row in T1. + +.. code-block:: sql + :caption: Left join + + SELECT p.title, a.name + FROM poem p + LEFT JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| In the Catacombs | null | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| Ancient Fairy Tales | null | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ +| To Shevchenko | null | ++------------------------+---------------+ + +RIGHT OUTER JOIN +---------------- + +First, an inner join is performed. Then, for each row in T2 that does not +satisfy the join condition with any row in T1, a joined row is added with +null values in columns of T1. This is the converse of a left join: the result +table will always have a row for each row in T2. + +.. code-block:: sql + :caption: Right join + + SELECT p.title, a.name + FROM poem p + RIGHT JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ +| null | John Doe | ++------------------------+---------------+ + +FULL OUTER JOIN +--------------- + +First, an inner join is performed. Then, for each row in T1 that does not +satisfy the join condition with any row in T2, a joined row is added with +null values in columns of T2. Also, for each row of T2 that does not satisfy +the join condition with any row in T1, a joined row with null values in +the columns of T1 is added. + +.. code-block:: sql + :caption: Full join + + SELECT p.title, a.name + FROM poem p + FULL JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| In the Catacombs | null | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| Ancient Fairy Tales | null | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ +| To Shevchenko | null | ++------------------------+---------------+ +| null | John Doe | ++------------------------+---------------+ From 7c6855036fb090e7fe8702e2bb17c99894c1dbb1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 22:56:30 +0200 Subject: [PATCH 049/689] Added training course index page Start implementing GitHub pages deployment. Added index file to track entire course content. --- index.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 000000000..2c3c0d2e3 --- /dev/null +++ b/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Python Training Course + + +
+

Python Training Course

+
+ + From d8b6fca1c63f8afa21343042d498811e963eb77e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 23:23:30 +0200 Subject: [PATCH 050/689] Deploy to GitHub Pages Added a workflow to deploy static content to Pages. --- .github/workflows/deploy_pages.yml | 52 ++++++++++++++++++++++++++++++ index.html | 10 ++++++ 2 files changed, 62 insertions(+) create mode 100644 .github/workflows/deploy_pages.yml diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml new file mode 100644 index 000000000..930ee80fe --- /dev/null +++ b/.github/workflows/deploy_pages.yml @@ -0,0 +1,52 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: + - gh-pages + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v2 + - name: Install dependencies + run: | + pip install sphinx sphinx_rtd_theme myst_parser + - name: Build documents + run: | + LANGUAGE=en make html + LANGUAGE=ua make html + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: "." + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/index.html b/index.html index 2c3c0d2e3..7ce3f3ce1 100644 --- a/index.html +++ b/index.html @@ -13,6 +13,16 @@
From d36ff3b7df29eb4decf3db5fa5aade025bbf3cee Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 24 Mar 2023 17:11:21 +0200 Subject: [PATCH 051/689] Fixed headers --- src/rdbms/relations.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index ebdfcfb2c..7f9a19d17 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -47,7 +47,7 @@ problems and is very inconvenient. This declaration creates a relationship between two (or even more) tables. Foreign key (FK) -=========== +================ So far, you have knowledge about **primary** keys. The **foreign** key is a column, that *references* some another table. @@ -71,7 +71,7 @@ that each record within a table has a matching one entity in another table. This brings us to various relationship models. One-to-many relationship (1-to-N) ------------------------- +--------------------------------- This is the most common relationship. @@ -102,7 +102,7 @@ But each employee can be physically located only in a single office at a time. } One-to-one relationship (1-to-1) ------------------------ +-------------------------------- ``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is and only one matching record. Back to the example with employees. Multiple @@ -115,7 +115,7 @@ The only one person can occupy the only one work station at a time. employee ||--|| work_station : occupies Many-to-many relationship (N-to-N) -------------------------- +---------------------------------- These relationships require additional table. A good example may be a *project role*. There are many of them in a production From 2ef6ded1bb3090b6e2b5a03f3721e9e004b52af0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 24 Mar 2023 18:26:52 +0200 Subject: [PATCH 052/689] DB - translation UA --- src/_locales/ua/LC_MESSAGES/rdbms.po | 1133 ++++++++++++++++++++++++++ src/rdbms/aggregation.txt | 12 +- 2 files changed, 1139 insertions(+), 6 deletions(-) create mode 100644 src/_locales/ua/LC_MESSAGES/rdbms.po diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po new file mode 100644 index 000000000..733037fc8 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -0,0 +1,1133 @@ +# COURSE/RELATIONAL DATABASES TRANSLATION. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# Serhii Horodilov , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course.github.io/issues\n" +"POT-Creation-Date: 2023-03-24 17:08+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Serhii Horodilov \n" +"Language: ua\n" +"Language-Team: ua \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: ../../src/rdbms/aggregation.txt:3 +msgid "Data Aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:5 +msgid "Here is some dummy data, that will be used as example in this section." +msgstr "" +"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі" + +#: ../../src/rdbms/aggregation.txt:7 ../../src/rdbms/normalization.txt:1 +msgid "product" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:174 +msgid "id" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:174 +#: ../../src/rdbms/relations.txt:249 ../../src/rdbms/relations.txt:278 +#: ../../src/rdbms/relations.txt:313 ../../src/rdbms/relations.txt:345 +msgid "name" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +msgid "price" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/products_table.csv:1 +msgid "category" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/products_table.csv:1 +msgid "sold" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:157 +#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:176 +msgid "1" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Samsung Galaxy" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "100000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/products_table.csv:1 +msgid "Phones" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "500" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:165 +#: ../../src/rdbms/relations.txt:178 +msgid "2" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "iPhone 13 Pro" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "120000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/products_table.csv:1 +msgid "300" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:180 +msgid "3" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "MacBook Pro" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/products_table.csv:1 +msgid "Laptops" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +msgid "100" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:159 +msgid "4" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Lenovo ThinkPad" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "150000" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +msgid "200" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:161 +msgid "5" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "HP Printer" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "20000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/products_table.csv:1 +msgid "Printers" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/aggregation.txt:176 +#: ../../src/rdbms/products_table.csv:1 +msgid "800" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:163 +msgid "6" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Dell Monitor" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "50000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/products_table.csv:1 +msgid "Monitors" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/products_table.csv:1 +msgid "400" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:165 +msgid "7" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Sony Headphones" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "30000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/products_table.csv:1 +msgid "Audio" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/products_table.csv:1 +msgid "0" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:167 +msgid "8" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Bose Soundbar" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "70000" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "9" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Xbox Series X" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "60000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:173 ../../src/rdbms/products_table.csv:1 +msgid "Gaming" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "250" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "10" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "PlayStation 5" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "55000" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:14 +msgid "The same dataset is available as:" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:16 +msgid ":download:`csv file <./products_table.csv>`" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:17 +msgid ":download:`postgres dump file `" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:20 +msgid "Aggregate functions" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:22 +msgid "" +"*Aggregate functions* compute a single result from a set of input values." +" Various RDBMS implement various built-in aggregate functions. In this " +"section we will review 5 basic functions that are available in all RDBMS." +msgstr "" +"*Агрегатні функції* обчислюють один результат із набору вхідних значень." +" Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " +"розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." + +#: ../../src/rdbms/aggregation.txt:29 +msgid "Count" +msgstr "Підрахунок" + +#: ../../src/rdbms/aggregation.txt:31 +msgid "" +"The ``count(field)`` function returns a count of the number of times that" +" ``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no" +" arguments) returns the total number of rows in the group." +msgstr "" +"Функція ``count(field)`` повертає кількість разів, коли" " ``field`` не є " +"``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " +"кількість рядків у групі." + +#: ../../src/rdbms/aggregation.txt:47 +msgid "Maximum value" +msgstr "Максимальне значення" + +#: ../../src/rdbms/aggregation.txt:49 +msgid "" +"The ``max()`` aggregate function returns the maximum value of all values " +"in the group. The maximum value is the value that would be returned last " +"in an ORDER BY on the same column. Aggregate function returns ``NULL`` if" +" and only if there are no non-NULL values in the group." +msgstr "" +"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень " +"у групі. Максимальне значення - це значення, яке буде повернуто останнім " +"у ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, " +"якщо і лише якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:66 +msgid "Minimum value" +msgstr "Мінімальне значення" + +#: ../../src/rdbms/aggregation.txt:68 +msgid "" +"The ``min()`` aggregate function returns the minimum non-NULL value of " +"all values in the group. The minimum value is the first non-NULL value " +"that would appear in an ORDER BY of the column. Aggregate function " +"returns ``NULL`` if and only if there are no non-NULL values in the " +"group." +msgstr "" +"Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " +"значень у групі. Мінімальне значення - це перше значення не NULL, яке " +"з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " +"якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:85 +msgid "Average value" +msgstr "Середнє значення" + +#: ../../src/rdbms/aggregation.txt:87 +msgid "" +"The ``avg()`` function returns the average value of all non-NULL inputs " +"within a group. String and BLOB values that do not look like numbers are " +"interpreted as 0. The result is always a floating point value whenever " +"there is at least one non-NULL input even if all inputs are integers. The" +" result is ``NULL`` if and only if there are no non-NULL inputs." +msgstr "" +"Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " +"групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " +"як 0. Результат завжди значення з плаваючою комою щоразу, коли " +"є принаймні один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. " +"Результатом є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." + +#: ../../src/rdbms/aggregation.txt:105 +msgid "Sum of values" +msgstr "Сума значень" + +#: ../../src/rdbms/aggregation.txt:107 +msgid "" +"The ``sum()`` aggregate functions return the sum of all non-NULL values " +"in the group. If there are no non-NULL input rows then function returns " +"``NULL``." +msgstr "" +"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від NULL," +" у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." + +#: ../../src/rdbms/aggregation.txt:112 +msgid "" +"NULL is not normally a helpful result for the sum of no rows but the SQL " +"standard requires it." +msgstr "" +"NULL зазвичай не є корисним результатом для суми відсутності рядків, але " +"стандарт SQL вимагає цього." + +#: ../../src/rdbms/aggregation.txt:115 +msgid "" +"SQLite implements ``total`` aggregate function, that is similar to " +"``sum``, but returns ``0.0`` (always floating point) if there are no non-" +"NULL input rows." +msgstr "" +"SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " +"повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " +"відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:130 +msgid "Grouping data" +msgstr "Групування даних" + +#: ../../src/rdbms/aggregation.txt:132 +msgid "" +"Getting some aggregated values is not very helpful itself. Most cases " +"require to group outputs in some specific manner." +msgstr "" +"Отримання деяких агрегованих значень не є дуже корисним саме по собі. " +"Більшість випадків вимагають згрупувати виходи певним чином." + +#: ../../src/rdbms/aggregation.txt:135 +msgid "" +"For example, if the task is to count number of registered categories it " +"is simple to solve as:" +msgstr "" +"Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " +"категорій, його " "просто вирішити так:" + +#: ../../src/rdbms/aggregation.txt:148 +msgid "" +"But in case, the task is to count **sold** items for each category, this " +"becomes impossible to solve without grouping items. ``GROUP BY`` clause " +"provides the ability to group rows based on some field(s) values." +msgstr "" +"Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " +"кожної категорії, це " "стає неможливим вирішити без групування товарів. " +"Пункт ``GROUP BY`` надає можливість групувати рядки на основі певного " +"значення поля(ів)." + +#: ../../src/rdbms/aggregation.txt:152 +msgid "General syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/aggregation.txt:173 +msgid "600" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:179 +msgid "" +"If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " +"clause, then each of the expressions specified as part of the GROUP BY " +"clause is evaluated for each row of the dataset according to the " +"processing rules stated below for ORDER BY expressions. Each row is then " +"assigned to a \"group\" based on the results; rows for which the results " +"of evaluating the GROUP BY expressions are the same get assigned to the " +"same group. For the purposes of grouping rows, ``NULL`` values are " +"considered equal. The usual rules for selecting a collation sequence with" +" which to compare text values apply when evaluating expressions in a " +"GROUP BY clause. The expressions in the GROUP BY clause do not have to be" +" expressions that appear in the result. The expressions in a GROUP BY " +"clause may not be aggregate expressions." +msgstr "" +"Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " +"тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " +"для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " +"для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " +"результатів; рядки, для яких результати оцінювання виразів GROUP BY " +"однакові призначаються до однієї групи. Для цілей групування рядків значення " +"``NULL`` вважаються рівними. Звичайні правила для вибору послідовності " +"порівняння, з якою порівнюються текстові значення, застосовуються під час " +"оцінювання виразів у Речення GROUP BY. Вирази в пункті GROUP BY не " +"обов'язково повинні бути виразами, які з'являються в результаті. " +"Вирази в пункті GROUP BY " "не можуть бути сукупними виразами." + +#: ../../src/rdbms/aggregation.txt:192 +msgid "Having clause" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:194 +msgid "" +"But what, if the task is to filter categories, that have less than 500 " +"sold items in it? ``WHERE`` clause will be useless, cause it's evaluated " +"before grouping output. In other words, only rows that suite WHERE filter" +" will be selected." +msgstr "" +"Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " +"500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " +"перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " +"вибрано фільтр." + +#: ../../src/rdbms/aggregation.txt:217 +msgid "" +"If a ``HAVING`` clause is specified, it is evaluated once for each group " +"of rows as a boolean expression. If the result of evaluating the HAVING " +"clause is false, the group is discarded. If the HAVING clause is an " +"aggregate expression, it is evaluated across all rows in the group." +msgstr "" +"Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " +"групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " +"хибний, групу відкидають. Якщо речення HAVING є " +"агрегатним виразом, воно обчислюється в усіх рядках у групі." + +#: ../../src/rdbms/aggregation.txt:222 +msgid "" +"If a HAVING clause is a non-aggregate expression, it is evaluated with " +"respect to an arbitrarily selected row from the group. The HAVING " +"expression may refer to values, even aggregate functions, that are not in" +" the result." +msgstr "" +"Якщо речення HAVING є неагрегатним виразом, воно оцінюється " +"щодо довільно вибраного рядка з групи. Вираз HAVING може посилатися на " +"значення, навіть агрегатні функції, яких немає в результат." + +#: ../../src/rdbms/index.txt:3 +msgid "Relational Database" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:5 +msgid "" +":abbr:`RDBMS (Relational Database Management System)` is a type of " +"software that helps users to create, update, manage, and access " +"relational databases. Relational databases organize data into tables, " +"which consist of rows and columns. Each column represents a specific " +"attribute of the data, while each row represents a specific instance of " +"that data." +msgstr "" +":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " +"забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " +"отримувати доступ до реляційних баз даних. Реляційні бази даних " +"організовують дані в таблиці, які складаються з рядків і стовпців. " +"Кожен стовпець представляє певний " "атрибут даних, тоді як кожен рядок " +"представляє конкретний екземпляр цих даних." + +#: ../../src/rdbms/index.txt:11 +msgid "" +"RDBMS allow users to interact with the database using :abbr:`SQL " +"(Structured Query Language)`, which is a standard language for managing " +"and manipulating relational databases. SQL allows users to perform a " +"variety of operations on the database, including adding, updating, and " +"deleting data, as well as retrieving data based on specific criteria." +msgstr "" +"СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " +"(Structured Query Language)`, яка є стандартною мовою для керування " +"і маніпулювання реляційними базами даних. SQL дозволяє користувачам " +"виконувати різноманітність операцій з базою даних, включаючи додавання, " +"оновлення та видалення даних, а також отримання даних на основі певних " +"критеріїв." + +#: ../../src/rdbms/index.txt:17 +msgid "" +"RDBMS also provide a range of features to ensure data integrity, such as " +"enforcing data constraints, supporting transactions, and providing backup" +" and recovery capabilities. Additionally, RDBMS systems often provide " +"tools for managing the database, such as user interfaces for creating and" +" modifying tables and views, and monitoring tools for optimizing database" +" performance." +msgstr "" +"СУБД також надає низку функцій для забезпечення цілісності даних, таких як " +"дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " +"резервного копіювання" "і відновлення. Крім того, системи РСУБД часто " +"надають інструменти для керування базою даних, такі як інтерфейси " +"користувача для створення та модифікації таблиць і представлень, а також " +"інструменти моніторингу для оптимізації продуктивності бази даних." + +#: ../../src/rdbms/normalization.txt:3 +msgid "Database Normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:5 +msgid "" +"Normalization is a process of organizing data in a database so that it is" +" free from redundancy and dependency. It helps to eliminate data " +"inconsistencies and anomalies, thereby improving data integrity. " +"Normalization is a set of rules or guidelines to design a database schema" +" in such a way that it avoids data duplication, data redundancy, and data" +" inconsistency." +msgstr "" +"Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " +"вона була вільна від надлишковості та залежності. Це допомагає усунути " +"невідповідності та аномалії даних, тим самим покращуючи цілісність даних. " +"Нормалізація - це набір правил або вказівки щодо розробки схеми бази даних " +"таким чином, щоб уникнути дублювання даних, надмірності даних і " +"неузгодженості даних." + +#: ../../src/rdbms/normalization.txt:11 +msgid "" +"There are several normal forms, each building on the previous one, which " +"guide us in the normalization process. The most commonly used normal " +"forms are:" +msgstr "" +"Існує кілька нормальних форм, кожна з яких будується на попередній, які " +"скеровують нас у процесі нормалізації. Найпоширенішими звичайними " +"формами є:" + +#: ../../src/rdbms/normalization.txt:14 +msgid "" +"**First Normal Form (1NF)**: Each column should hold atomic (indivisible)" +" values. There should be no repeating groups or arrays of data in a " +"table." +msgstr "" +"Перша нормальна форма (1NF): кожен стовпець має містити атомарні (неподільні)" +" значення. У таблиці не повинно бути повторюваних груп або масивів даних." + +#: ../../src/rdbms/normalization.txt:17 +msgid "" +"**Second Normal Form (2NF)**: Each non-key column should be functionally " +"dependent on the entire primary key. In other words, every column in a " +"table should be related to the primary key and not dependent on any other" +" non-key columns." +msgstr "" +"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " +"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " +"таблиці має бути пов'язаний із первинним ключем, а не залежати від " +"будь-яких інших неключових стовпців." + +#: ../../src/rdbms/normalization.txt:21 +msgid "" +"**Third Normal Form (3NF)**: All non-key columns should be dependent only" +" on the primary key and not on any other non-key columns. This eliminates" +" transitive dependencies." +msgstr "" +"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише" +" від первинного ключа, а не від будь-яких інших неключових стовпців. " +"Це усуває транзитивні залежності." + +#: ../../src/rdbms/normalization.txt:25 +msgid "" +"Normalization reduces data redundancy and dependency, making the database" +" more efficient, flexible, and scalable. It also helps in maintaining " +"data consistency and accuracy, and ensures that updates and deletions are" +" properly handled." +msgstr "" +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних" +" більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень " +"і видалень." + +#: ../../src/rdbms/normalization.txt:31 +msgid "First normal form (1NF)" +msgstr "Перша нормальна форма (1NF)" + +#: ../../src/rdbms/normalization.txt:33 +msgid "" +"It's easier to understand normalization via examples. Let's start with " +"some dummy orders data." +msgstr "" +"Легше зрозуміти нормалізацію на прикладах. Почнемо з " +"деяких фіктивних даних про замовлення." + +#: ../../src/rdbms/normalization.txt:36 +msgid "Initial data" +msgstr "Початкові дані" + +#: ../../src/rdbms/normalization.txt:1 +msgid "order" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "quantity" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "total" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:180 +#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:363 +msgid "John Doe" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(Apple, Orange)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(2, 3)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(100, 50)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(200, 150)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Jane Smith" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Banana" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "25" +msgstr "" + +#: ../../src/rdbms/normalization.txt:43 +msgid "" +"This table violates 1NF, since its columns contain multiple values. To " +"bring this to 1NF all data within the table are to be atomic." +msgstr "" +"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " +"привести це до 1NF, усі дані в таблиці мають бути атомарними." + +#: ../../src/rdbms/normalization.txt:46 +msgid "1NF applied" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Apple" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Orange" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "50" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "150" +msgstr "" + +#: ../../src/rdbms/normalization.txt:54 +msgid "From now each peace of data is represented as atomic value." +msgstr "Відтепер кожна частина даних представлена як атомарне значення." + +#: ../../src/rdbms/normalization.txt:57 +msgid "Second normal form (2NF)" +msgstr "Друга нормальна форма (2NF)" + +#: ../../src/rdbms/normalization.txt:59 +msgid "" +"The table above is in 1NF, but ``item price`` is dependent on the *item* " +"entity itself and have low cohesion to *orders*. To bring it into 2NF a " +"dedicated table to store information about items themselves is to be " +"created. After that ``order`` and ``product`` table are connected " +"(related) to each other via a foreign key." +msgstr "" +"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " +"елемента і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " +"спеціальну таблицю для зберігання інформації про самі товари має бути " +"створено. Після цього таблиці ``order`` і ``product`` з'єднуються " +"(пов'язані) одна з одною за допомогою зовнішнього ключа." + +#: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 +msgid "``order`` table" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "product_id" +msgstr "" + +#: ../../src/rdbms/normalization.txt:73 +msgid "``product`` table" +msgstr "" + +#: ../../src/rdbms/normalization.txt:98 +msgid "" +"``total`` field is also removed, since now it can be calculated as " +"product of ``product.price`` and ``order.quantity``." +msgstr "" +"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " +"добуток ``product.price`` і ``order.quantity``." + +#: ../../src/rdbms/normalization.txt:102 +msgid "Third normal form (3NF)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:104 +msgid "" +"At last it's time to remove a transitive functional dependency. " +"Customer's name is not actually dependent on a product, but on a person, " +"who places an order." +msgstr "" +"Нарешті настав час видалити транзитивну функціональну залежність. " +"Ім'я клієнта насправді залежить не від продукту, а від особи, " +"яка робить замовлення." + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer_id" +msgstr "" + +#: ../../src/rdbms/normalization.txt:115 +msgid "``customer`` table" +msgstr "" + +#: ../../src/rdbms/relations.txt:3 +msgid "Data Relationships" +msgstr "Зв'язки даних" + +#: ../../src/rdbms/relations.txt:5 +msgid "It's time to talk about **data relations**." +msgstr "Настав час поговорити про **відносини даних**." + +#: ../../src/rdbms/relations.txt:7 +msgid "" +"For example your database contains two tables: ``weather`` and ``city``. " +"The diagram below demonstrates the overall data structure:" +msgstr "" +"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " +"Діаграма нижче демонструє загальну структуру даних:" + +#: ../../src/rdbms/relations.txt:25 +msgid "" +"Consider the following problem: you want to make sure no one can insert a" +" record into ``weather`` without a matching entry in ``city`` table. This" +" is called maintaining the *referential integrity* of your data. In " +"simplistic database systems this would be implemented (if at all) by " +"first looking at the cities table to check if a matching record exists, " +"and then inserting or rejecting the new weather records. This approach " +"has a number of problems and is very inconvenient." +msgstr "" +"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити" +" запис до ``weather`` без відповідного запису в ``city`` таблиці. Це" +"називається підтримкою посилальної цілісності ваші дані. У " +"спрощених системах баз даних це було б реалізовано (якщо взагалі) " +"спочатку переглядаючи таблицю міст, щоб перевірити, чи існує відповідний " +"запис, а потім вставляв або відхиляв нові записи погоди. Цей підхід " +"має низку проблем і дуже незручно." + +#: ../../src/rdbms/relations.txt:47 +msgid "" +"This declaration creates a relationship between two (or even more) tables." +msgstr "" +"Це оголошення створює зв'язок між двома (або навіть більше) таблицями." + +#: ../../src/rdbms/relations.txt:50 +msgid "Foreign key (FK)" +msgstr "Зовнішній ключ (FK)" + +#: ../../src/rdbms/relations.txt:52 +msgid "" +"So far, you have knowledge about **primary** keys. The **foreign** key is" +" a column, that *references* some another table. In common, it's a " +"reference to another table's PK; but there is no limitation of this kind," +" any column can be referenced by another one. FKs handle data integrity " +"only, it's not required for FK to be non-NULL value." +msgstr "" +"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це" +" стовпець, який посилається на іншу таблицю. Загалом, це посилання на PK " +"іншої таблиці; але такого роду обмежень немає ," +" на будь-який стовпець може посилатися інший. FK обробляє лише " +"цілісність даних, не обов'язково, щоб значення FK було відмінним від NULL." + +#: ../../src/rdbms/relations.txt:58 +msgid "" +"The relation's properties are described by CONSTRAINTS and the database's" +" structure." +msgstr "" +"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." + +#: ../../src/rdbms/relations.txt:61 +msgid "" +"For example, modifying declaration with ``NOT NULL`` constraint grants " +"that each record within a table has a matching one entity in another " +"table." +msgstr "" +"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що " +"кожний запис у таблиці має відповідну сутність в іншій таблиці." + +#: ../../src/rdbms/relations.txt:71 +msgid "This brings us to various relationship models." +msgstr "Це підводить нас до різних моделей відносин." + +#: ../../src/rdbms/relations.txt:74 +msgid "One-to-many relationship (1-to-N)" +msgstr "Зв'язок один-до-багатьох (1-до-N)" + +#: ../../src/rdbms/relations.txt:76 +msgid "This is the most common relationship." +msgstr "Це найпоширеніший зв'язок." + +#: ../../src/rdbms/relations.txt:78 +msgid "" +"For the example above there are no limitations on temperature " +"measurements in a specified city. So, a single city may has 0 or N " +"related records in ``weather`` table. But each weather record is related " +"to the only one city." +msgstr "" +"Для наведеного вище прикладу немає обмежень на вимірювання " +"температури у визначеному місті. Отже, окреме місто може мати 0 або N " +"пов'язаних записів у таблиці ``погода``. Але кожен запис погоди пов'язаний " +"до єдиного міста." + +#: ../../src/rdbms/relations.txt:82 +msgid "" +"Another example is employees and office buildings they work in. Some big " +"company may have multiple offices and employee across the globe. Multiple" +" employees can be present in a single office building at a time. But each" +" employee can be physically located only in a single office at a time." +msgstr "" +"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " +"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " +"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " +"одночасно. Але кожен працівник може фізично перебувати лише в одному " +"офісі одночасно." + +#: ../../src/rdbms/relations.txt:105 +msgid "One-to-one relationship (1-to-1)" +msgstr "" + +#: ../../src/rdbms/relations.txt:107 +msgid "" +"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there" +" is and only one matching record. Back to the example with employees. " +"Multiple workstations (personal computers) are located in each office " +"building. The only one person can occupy the only one work station at a " +"time." +msgstr "" +"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " +"наявність лише одного відповідного запису. Повернемося до прикладу зі " +"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " +"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " +"одну робочу станцію одночасно." + +#: ../../src/rdbms/relations.txt:118 +msgid "Many-to-many relationship (N-to-N)" +msgstr "Зв'язок багато-до-багатьох (N-до-N)" + +#: ../../src/rdbms/relations.txt:120 +msgid "" +"These relationships require additional table. A good example may be a " +"*project role*. There are many of them in a production team. And some " +"employees may be assigned to the same role (e.g. developers, testers " +"etc.). But also a single person can be a developer and tester at a time." +msgstr "" +"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути " +"роль у проекті. Їх багато у виробничій команді. І деяким " +"працівникам може бути призначено ту саму роль (наприклад, розробники, " +"тестувальники і т. д.). Але також одна людина може бути розробником і " +"тестувальником одночасно." + +#: ../../src/rdbms/relations.txt:133 +msgid "Joining data" +msgstr "Об'єднання даних" + +#: ../../src/rdbms/relations.txt:135 +msgid "" +"``JOIN`` is used to *join* data fetched from multiple related tables. To " +"build a valid query you are to set the tables to join and parameter to " +"use for this operation." +msgstr "" +"``JOIN`` використовується для об'єднання даних, отриманих з кількох " +"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " +"таблиці для об'єднання та параметр, який використовується для цієї операції." + +#: ../../src/rdbms/relations.txt:139 +msgid "Common syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/relations.txt:145 +msgid "" +"There are various join types available. Here are is some dummy data to " +"demonstrate their purpose." +msgstr "" +"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб " +"продемонструвати їх призначення." + +#: ../../src/rdbms/relations.txt:148 +msgid "poem" +msgstr "" + +#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:249 +#: ../../src/rdbms/relations.txt:278 ../../src/rdbms/relations.txt:313 +#: ../../src/rdbms/relations.txt:345 +msgid "title" +msgstr "" + +#: ../../src/rdbms/relations.txt:151 +msgid "author_id" +msgstr "" + +#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:251 +#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:315 +#: ../../src/rdbms/relations.txt:347 +msgid "On the Field of Battle" +msgstr "" + +#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:253 +#: ../../src/rdbms/relations.txt:282 ../../src/rdbms/relations.txt:317 +#: ../../src/rdbms/relations.txt:349 +msgid "Moses" +msgstr "" + +#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:255 +#: ../../src/rdbms/relations.txt:284 ../../src/rdbms/relations.txt:319 +#: ../../src/rdbms/relations.txt:351 +msgid "The Forest Song" +msgstr "" + +#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:286 +#: ../../src/rdbms/relations.txt:353 +msgid "In the Catacombs" +msgstr "" + +#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:163 +#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:286 +#: ../../src/rdbms/relations.txt:290 ../../src/rdbms/relations.txt:294 +#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:353 +#: ../../src/rdbms/relations.txt:357 ../../src/rdbms/relations.txt:361 +#: ../../src/rdbms/relations.txt:363 +msgid "null" +msgstr "" + +#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:257 +#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:321 +#: ../../src/rdbms/relations.txt:355 +msgid "The Singing Stones" +msgstr "" + +#: ../../src/rdbms/relations.txt:163 ../../src/rdbms/relations.txt:290 +#: ../../src/rdbms/relations.txt:357 +msgid "Ancient Fairy Tales" +msgstr "" + +#: ../../src/rdbms/relations.txt:165 ../../src/rdbms/relations.txt:259 +#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:323 +#: ../../src/rdbms/relations.txt:359 +msgid "My Thoughts" +msgstr "" + +#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:294 +#: ../../src/rdbms/relations.txt:361 +msgid "To Shevchenko" +msgstr "" + +#: ../../src/rdbms/relations.txt:171 +msgid "author" +msgstr "" + +#: ../../src/rdbms/relations.txt:176 ../../src/rdbms/relations.txt:251 +#: ../../src/rdbms/relations.txt:255 ../../src/rdbms/relations.txt:257 +#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:284 +#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:315 +#: ../../src/rdbms/relations.txt:319 ../../src/rdbms/relations.txt:321 +#: ../../src/rdbms/relations.txt:347 ../../src/rdbms/relations.txt:351 +#: ../../src/rdbms/relations.txt:355 +msgid "Larysa Kosach" +msgstr "" + +#: ../../src/rdbms/relations.txt:178 ../../src/rdbms/relations.txt:253 +#: ../../src/rdbms/relations.txt:259 ../../src/rdbms/relations.txt:282 +#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:317 +#: ../../src/rdbms/relations.txt:323 ../../src/rdbms/relations.txt:349 +#: ../../src/rdbms/relations.txt:359 +msgid "Ivan Franko" +msgstr "" + +#: ../../src/rdbms/relations.txt:212 +msgid "Join types" +msgstr "" + +#: ../../src/rdbms/relations.txt +msgid "Cross join" +msgstr "" + +#: ../../src/rdbms/relations.txt:220 +msgid "" +"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " +"product), the joined table will contain a row consisting of all columns " +"in T1 followed by all columns in T2. If the tables have N and M rows " +"respectively, the joined table will have N * M rows." +msgstr "" +"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто, декартового " +"добутку), об'єднана таблиця міститиме рядок, що складається з усіх стовпців " +"у T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " +"відповідно, об'єднана таблиця матиме N M рядків." + +#: ../../src/rdbms/relations.txt +msgid "Qualified joins" +msgstr "" + +#: ../../src/rdbms/relations.txt:231 +msgid "" +"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` " +"is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +msgstr "" +"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` " +"є типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." + +#: ../../src/rdbms/relations.txt:236 +msgid "INNER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:238 +msgid "" +"For each row R1 of T1, the joined table has a row for each row in T2 that" +" satisfies the join condition with R1." +msgstr "" +"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " +"який задовольняє умову об'єднання з R1." + +#: ../../src/rdbms/relations.txt:241 +msgid "Inner join" +msgstr "" + +#: ../../src/rdbms/relations.txt:263 +msgid "LEFT OUTER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:265 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not" +" satisfy the join condition with any row in T2, a joined row is added " +"with null values in columns of T2. Thus, the joined table always has at " +"least one row for each row in T1." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " +"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." + +#: ../../src/rdbms/relations.txt:270 +msgid "Left join" +msgstr "" + +#: ../../src/rdbms/relations.txt:298 +msgid "RIGHT OUTER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:300 +msgid "" +"First, an inner join is performed. Then, for each row in T2 that does not" +" satisfy the join condition with any row in T1, a joined row is added " +"with null values in columns of T1. This is the converse of a left join: " +"the result table will always have a row for each row in T2." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " +"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " +"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " +"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного " +"рядка в T2." + +#: ../../src/rdbms/relations.txt:305 +msgid "Right join" +msgstr "" + +#: ../../src/rdbms/relations.txt:329 +msgid "FULL OUTER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:331 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not" +" satisfy the join condition with any row in T2, a joined row is added " +"with null values in columns of T2. Also, for each row of T2 that does not" +" satisfy the join condition with any row in T1, a joined row with null " +"values in the columns of T1 is added." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " +"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " +"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." + +#: ../../src/rdbms/relations.txt:337 +msgid "Full join" +msgstr "" + diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index ea4fedf04..f8eadbd3e 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -58,9 +58,9 @@ in the group. :: - maximum price ---------------- - 350000 + maximum price + --------------- + 350000 Minimum value ------------- @@ -77,9 +77,9 @@ in the group. :: - minimum price ---------------- - 20000 + minimum price + --------------- + 20000 Average value ------------- From 05877b6059383fa57574c982951e1e4a99f61417 Mon Sep 17 00:00:00 2001 From: Un1corN1k Date: Tue, 14 Mar 2023 23:05:55 +0200 Subject: [PATCH 053/689] Added translations for Python/Basics Signed-off-by: Oleksandr Yeromin --- src/_locales/ua/LC_MESSAGES/basics.po | 1445 +++++++++++++++++++++++++ 1 file changed, 1445 insertions(+) create mode 100644 src/_locales/ua/LC_MESSAGES/basics.po diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po new file mode 100644 index 000000000..b5423286b --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -0,0 +1,1445 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-14 22:40+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.11.0\n" + +#: ../../src/basics/controlflow.txt:3 +msgid "Control Flow" +msgstr "" + +#: ../../src/basics/datatypes.txt:3 +msgid "Data Types" +msgstr "Типи Даних" + +#: ../../src/basics/datatypes.txt:5 +msgid "" +"Data may represent different things and require various operations " +"available. In programming data types is an important concept. For example" +" **1984** may be a number (``1984``), a text (``\"1984"``) or event a " +"date. The data type describes the operations, that are allowed for the " +"data, like additions for numbers or concatenation for text (e.g. ``1 + 2 " +"-> 3``, ``\"1\" + \"3\" -> \"13\"``)." +msgstr "" +"Дані можуть представляти різні речі та вимагати різноманітних доступних" +"операцій. У програмуванні типи даних є важливою концепцією. " +"Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984"`` ) " +"або подією чи датою. Тип даних описує можливі операції, дозволені для даних, " +"як-от додавання чисел або конкатенація для тексту " +"(наприклад, ``1 + 2 " "-> 3``, ``\"1\" + \"3 \" -> \"13\"``). " + +#: ../../src/basics/datatypes.txt:11 +msgid "" +"Python uses dynamic typing. This means as a developer you should not " +"declare a variable with its data type - the interpreter will do this for " +"you. Other popular language using dynamic typing are JavaScript and PHP. " +"Setting variables in Python is as easy as:" +msgstr "" +"Python використовує динамічну типізацію. Це означає, що ви, як розробник, " +"не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " +"за вас. Іншими популярними мовами, які використовують динамічну типізацію, " +"є JavaScript і PHP. Налаштування змінних у Python доволі просто, як: " + +#: ../../src/basics/datatypes.txt:23 +msgid "Built-In Data Types" +msgstr "Вбудовані типи даних" + +#: ../../src/basics/datatypes.txt:25 +msgid "Python has the following data types built-in:" +msgstr "Python має такі вбудовані типи даних:" + +#: ../../src/basics/datatypes.txt:27 +msgid "Integers (``int``)" +msgstr "Цілі числа (``int``)" + +#: ../../src/basics/datatypes.txt:28 +msgid "Floating-point numbers (``float``)" +msgstr "Числа з плаваючою крапкою (``float``)" + +#: ../../src/basics/datatypes.txt:29 +msgid "Complex numbers (``complex``)" +msgstr "Комплексні числа (``complex``)" + +#: ../../src/basics/datatypes.txt:30 +msgid "Booleans (``bool``)" +msgstr "Логічні значення (``bool``)" + +#: ../../src/basics/datatypes.txt:31 +msgid "Strings (``str``)" +msgstr "Рядки (``str``)" + +#: ../../src/basics/datatypes.txt:32 +msgid "Bytes (``bytes``)" +msgstr "Байти (``bytes``)" + +#: ../../src/basics/datatypes.txt:33 +msgid "Byte arrays (``bytearray``)" +msgstr "Масиви байтів (``bytearray``)" + +#: ../../src/basics/datatypes.txt:34 +msgid "Lists (``list``)" +msgstr "Списки (``list``)" + +#: ../../src/basics/datatypes.txt:35 +msgid "Tuples (``tuple``)" +msgstr "Кортежі (``tuple``)" + +#: ../../src/basics/datatypes.txt:36 +msgid "Sets (``set``)" +msgstr "Cети (``set``)" + +#: ../../src/basics/datatypes.txt:37 +msgid "Frozen sets (``frozenset``)" +msgstr "Заморожені сети (``frozenset``)" + +#: ../../src/basics/datatypes.txt:38 +msgid "Dictionaries (``dict``)" +msgstr "Словники (``dict``)" + +#: ../../src/basics/datatypes.txt:39 +msgid "None (``NoneType``)" +msgstr "Жодного (``NoneType``)" + +#: ../../src/basics/datatypes.txt:41 +msgid "" +"Any one can use them without additional imports or packages installations." +msgstr "" +"Будь-хто може використовувати їх без додаткового імпорту " +"чи встановлення пакетів. " + +#: ../../src/basics/datatypes.txt:44 +msgid "Text" +msgstr "Текстові дані" + +#: ../../src/basics/datatypes.txt:46 +msgid "" +"Text data are stored as strings (``str`` data type) in Python. Any " +"sequence of letters, digits, punctuation marks and whitespace characters " +"enclosed with quotes is considered to be a string literal. Both single " +"quotes (``'``) and double quotes (``\"``) can be used interchangeably to " +"create a string in Python." +msgstr "" +"Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-яка " +"послідовність літер, цифр, знаків пунктуації та пробілів, взята в лапки, " +"вважається рядковим літералом. Обидві одинарні лапки (``'``) або подвійні " +"лапки (``\"``) можна взаємозамінно використовувати для створення рядків." + +#: ../../src/basics/datatypes.txt:58 +msgid "Escaping" +msgstr "Екранування" + +#: ../../src/basics/datatypes.txt:60 +msgid "" +"In programming this is a process of using a special character to indicate" +" that the following character(s) should be treated differently from their" +" literal meaning. The common usage is to include a special character(s) " +"within strings. A **backslash** character is used to *escape* the " +"following one." +msgstr "" +"У програмуванні це процес використання спеціального символу, щоб вказати, що " +"наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне значення. " +"Загальне використання полягає в тому, щоб включити спеціальний(і) символ(и) " +"в рядки. Символ **backslash** використовується для екранування наступного. " + +#: ../../src/basics/datatypes.txt:65 +msgid "Example of Escaping in Python" +msgstr "Приклади Екранування в Python" + +#: ../../src/basics/datatypes.txt:84 +msgid "Single quotes or double quotes" +msgstr "Одинарні або подвійні лапки" + +#: ../../src/basics/datatypes.txt:86 +msgid "" +"Don't care. Use any quote mark you like. A *string* is a sequence of " +"characters after the opening quote and till the closing one. You may use " +"double quotes in case a single quote is a part of the text (e.g. ``\"It's" +" a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship " +"was a \"Billy of Tea\"'``). It's a good practice not to mess single and " +"double quotes within one project. Just keep using a chosen one character " +"for all strings." +msgstr "" +"Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " +"після початкової лапки та до кінцевої. Ви можете використовувати подвійні " +"лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " +"Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of Tea\"'``). " +"Рекомендується не плутати одинарні та подвійні лапки в одному проекті. " +"Просто продовжуйте використовувати один вибраний символ для всіх рядків. " + +#: ../../src/basics/datatypes.txt:94 +msgid "Multiline strings" +msgstr "Багатострічкові рядки" + +#: ../../src/basics/datatypes.txt:96 +msgid "" +"You can assign a multiline string by using triple quotes: Both single " +"quote and double quote characters are available." +msgstr "" +"Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: в " +"середині них доступні як одинарні, так і подвійні лапки. " + +#: ../../src/basics/datatypes.txt:106 +msgid "" +"The same syntax is used to create docstring, which are a special case of " +"string usage. We will look on these in the future." +msgstr "" +"Такий самий синтаксис використовується для створення рядка документації, " +"який є окремим випадком використання рядка. Ми розглянемо це в майбутньому. " + +#: ../../src/basics/datatypes.txt:110 ../../src/basics/stdtypes.txt:28 +msgid "Supported operations" +msgstr "Операції підтримки" + +#: ../../src/basics/datatypes.txt:112 +msgid "This subsection describes only the most common operations." +msgstr "" +"У цьому розділі описано лише найпоширеніші операції. " + +#: ../../src/basics/datatypes.txt +msgid "Concatenation" +msgstr "Конкатинація" + +#: ../../src/basics/datatypes.txt:115 +msgid "The ``+`` operator is used to concatenate (join) two or more strings." +msgstr "" +"Оператор ``+`` використовується для конкатенації (об'єднання) двох або " +"більше рядків. " + +#: ../../src/basics/datatypes.txt:121 +msgid "" +"On the other hand the ``join`` method concatenates a collection of " +"strings, which may be more efficient than using ``+``." +msgstr "" +"З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " +"ефективнішим, ніж використання ``+``. " + +#: ../../src/basics/datatypes.txt +msgid "Repetition" +msgstr "Повторення" + +#: ../../src/basics/datatypes.txt:129 +msgid "" +"The ``*`` operator is used to repeat a string a specified number of " +"times. Only multipliers of the ``int`` type are allowed." +msgstr "" +"Оператор ``*`` використовується для повторення рядка вказану кількість " +"разів. Дозволені операції лише з множниками типу ``int``. " + +#: ../../src/basics/datatypes.txt +msgid "Length" +msgstr "Довжина" + +#: ../../src/basics/datatypes.txt:137 +msgid "The ``len`` function is used to find the length of a string." +msgstr "Функція ``len`` використовується для визначення довжини рядка." + +#: ../../src/basics/datatypes.txt +msgid "Case conversion" +msgstr "Перетворення регістру" + +#: ../../src/basics/datatypes.txt:144 +msgid "" +"The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " +"actions on case." +msgstr "" +"Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " +"зміною регістра. " + +#: ../../src/basics/datatypes.txt:147 +msgid "``lower`` creates a new string with all lower-case characters." +msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." + +#: ../../src/basics/datatypes.txt:149 +msgid "``upper`` creates a new string with all upper-case characters." +msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." + +#: ../../src/basics/datatypes.txt:151 +msgid "``capitalize`` creates a new string with the upper-case 1st character." +msgstr "``capitalize`` створює новий рядок із першим символом у верхньому " +"регістрі. " + +#: ../../src/basics/datatypes.txt:153 +msgid "``title`` will make all characters after whitespace upper case." +msgstr "``title`` зробить усі символи після пробілів верхнім регістром." + +#: ../../src/basics/datatypes.txt +msgid "Stripping" +msgstr "Зачистка" + +#: ../../src/basics/datatypes.txt:164 +msgid "" +"The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " +"leading and/or trailing whitespace characters." +msgstr "" +"Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " +"початкових і/або кінцевих пробільних символів. " + +#: ../../src/basics/datatypes.txt:175 +msgid "Strings are subscriptable" +msgstr "Рядки можна підписувати" + +#: ../../src/basics/datatypes.txt:177 +msgid "``str`` is not the only one subscriptable data type in Python." +msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." + +#: ../../src/basics/datatypes.txt:179 +msgid "" +"This means you can access individual characters or slices within a string" +" using indexes. A string is a *sequence* of characters and each character" +" within a string has its own position - an *index*. Indexing starts at 0," +" so the first character in a string is at index 0, the second one is at " +"index 1, and so on. Negative indexing is also possible, with -1 " +"representing the last character in a string, -2 representing the second-" +"to-last character, and so on. Use square brackets (``[]``) to access the " +"index." +msgstr "" +"Це означає, що ви можете отримати доступ до окремих символів або фрагментів " +"у рядку за допомогою індексів. Рядок — це послідовність символів, і кожен " +"символ у рядку має власну позицію — індекс. Індексація починається з 0, " +"отже, перший символ у рядку має індекс 0, другий - індекс 1 і так далі. " +"Також можливе від'ємне індексування, коли -1 представляє останній символ у " +"рядку, а -2 представляє передостанній символ і так далі. Використовуйте " +"квадратні дужки (``[]``), щоб отримати доступ до індексу. " + +#: ../../src/basics/datatypes.txt:194 +msgid "" +"You can also *slice* strings, this means to get a subsequence of " +"characters. The slice syntax consists of 3 digits:" +msgstr "" +"Ви також можете *розрізати* рядки, тобто отримати підпослідовність символів. " +"Синтаксис фрагмента складається з 3 цифр: " + +#: ../../src/basics/datatypes.txt:197 +msgid "the first one represent the index to start (inclusive), defaults to 0" +msgstr "" +"Перший представляє початковий індекс (включно), за замовчанням " +"дорівнює 0. " + +#: ../../src/basics/datatypes.txt:198 +msgid "" +"the second one represent the index to stop (non-inclusive), defaults to " +"the length of the sequence" +msgstr "" +"Другий представляє індекс для зупинки (не включно), за замовчуванням довжина " +"послідовності. " + +#: ../../src/basics/datatypes.txt:200 +msgid "the third one represents a step, defaults to 1" +msgstr "Третій представляє крок, за замовчуванням 1." + +#: ../../src/basics/datatypes.txt:202 +msgid "" +"These numbers are separated within colon (``:``) and enclosed within " +"square brackets. Any slice digit may be omitted." +msgstr "" +"Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " +"цифра зрізу може бути упущена. " + +#: ../../src/basics/datatypes.txt:205 +msgid "Sequence slicing" +msgstr "Нарізка послідовності" + +#: ../../src/basics/datatypes.txt:216 +msgid "Strings are iterable" +msgstr "Рядки можна повторювати" + +#: ../../src/basics/datatypes.txt:218 +msgid "" +"Since strings are arrays, we can loop through the characters in a string " +"with a ``for`` loop:" +msgstr "" +"Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " +"допомогою циклу ``for``: " + +#: ../../src/basics/datatypes.txt:227 +msgid "Strings are immutable" +msgstr "Рядки незмінні" + +#: ../../src/basics/datatypes.txt:229 +msgid "This means, you cannot change an individual character within a string." +msgstr "Це означає, що ви не можете змінити окремий символ у рядку." + +#: ../../src/basics/datatypes.txt:237 +msgid "Integers" +msgstr "Цілі числа" + +#: ../../src/basics/datatypes.txt:239 +msgid "" +"``int``, or integer, is a whole number, positive or negative, without " +"decimals." +msgstr "" +"``int``, тобто ціле число, може бути додатнім або від'ємним, без десяткових " +"знаків. " + +#: ../../src/basics/datatypes.txt:247 +msgid "Floats" +msgstr "Числа з плаваючою комою" + +#: ../../src/basics/datatypes.txt:249 +msgid "" +"``float``, or floating point number, is a number, positive or negative, " +"containing one or more decimals." +msgstr "" +"``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, що " +"містить один або більше десяткових знаків. " + +#: ../../src/basics/exceptions.txt:3 +msgid "Errors and Exceptions" +msgstr "Помилки та винятки" + +#: ../../src/basics/functions.txt:3 ../../src/basics/syntax.txt +msgid "Functions" +msgstr "Функції" + +#: ../../src/basics/index.txt:3 +msgid "Python Basics" +msgstr "Основи Python" + +#: ../../src/basics/modules.txt:3 +msgid "Pythons Modules and Imports" +msgstr "Модулі та імпорт Pythons" + +#: ../../src/basics/pep8.txt:3 +msgid "Style Guides: PEP8" +msgstr "Керівництво по стилю: PEP8" + +#: ../../src/basics/stdtypes.txt:3 +msgid "Built-in Types" +msgstr "Вбудовані типи" + +#: ../../src/basics/stdtypes.txt:5 +msgid "" +"The principal built-in types are numerics, sequences, mappings, classes, " +"instances and exceptions :cite:`docs-python:stdtypes`. This section " +"covers only the most base of them. Others will be discussed in the future" +" within their own topics." +msgstr "" +"Основними вбудованими типами є числа, послідовності, відображення, класи, " +"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " +"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " +"власних тем. " + +#: ../../src/basics/stdtypes.txt:11 +msgid "Numeric types" +msgstr "Числові типи" + +#: ../../src/basics/stdtypes.txt:13 +msgid "" +"There are 3 distinct numeric types: *integers*, *floating point numbers*," +" and *complex numbers*. In addition, Booleans are a subtype of integers. " +"Integers have unlimited precision. Floating point numbers are usually " +"implemented usign ``double`` in C. Complex numbers have a real and " +"imaginary part, which are each a floating point number." +msgstr "" +"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " +"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " +"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " +"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " +"кожна з яких є числом з плаваючою комою. " + +#: ../../src/basics/stdtypes.txt:19 +msgid "" +"Numbers are created by numeric literals or as the result of built-in " +"functions and operators. Unadorned integer literals (including hex, octal" +" and binary numbers) yield integers. Numeric literals containing a " +"decimal point or an exponent sign yield floating point numbers. Appending" +" ``j`` or ``J`` to a numeric literal yields an imaginary number (a " +"complex number with a zero real part) which you can add to an integer or " +"float to get a complex number with real and imaginary parts." +msgstr "" +"Числа створюються за допомогою числових літералів або як результат " +"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " +"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " +"літерали, що містять десяткову кому або знак експоненти, дають числа з " +"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " +"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " +"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " +"з дійсною та уявною частинами. " + +#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 +#: ../../src/basics/stdtypes.txt:201 +msgid "Operation" +msgstr "Операції" + +#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 +#: ../../src/basics/stdtypes.txt:201 +msgid "Result" +msgstr "Результат" + +#: ../../src/basics/stdtypes.txt:33 +msgid "``x + y``" +msgstr "``x + y``" + +#: ../../src/basics/stdtypes.txt:33 +msgid "sum of *x* and *y*" +msgstr "сума *x* і *y*" + +#: ../../src/basics/stdtypes.txt:35 +msgid "``x - y``" +msgstr "``x - y``" + +#: ../../src/basics/stdtypes.txt:35 +msgid "difference of *x* and *y*" +msgstr "різниця між *x* і *y*" + +#: ../../src/basics/stdtypes.txt:37 +msgid "``x * y``" +msgstr "``x * y``" + +#: ../../src/basics/stdtypes.txt:37 +msgid "product of *x* and *y*" +msgstr "добуток *x* і *y*" + +#: ../../src/basics/stdtypes.txt:39 +msgid "``x / y``" +msgstr "``x / y``" + +#: ../../src/basics/stdtypes.txt:39 +msgid "quotient of *x* and *y*" +msgstr "частка *x* і *y*" + +#: ../../src/basics/stdtypes.txt:41 +msgid "``x // y``" +msgstr "``x // y``" + +#: ../../src/basics/stdtypes.txt:41 +msgid "floored quotient of *x* and *y*" +msgstr "цілочисельне ділення *x* і *y*" + +#: ../../src/basics/stdtypes.txt:43 +msgid "``x % y``" +msgstr "``x % y``" + +#: ../../src/basics/stdtypes.txt:43 +msgid "remainder of ``x / y``" +msgstr "залишок від ділення``x / y``" + +#: ../../src/basics/stdtypes.txt:45 +msgid "``-x``" +msgstr "``-x``" + +#: ../../src/basics/stdtypes.txt:45 +msgid "*x* negated" +msgstr "*x* заперечено" + +#: ../../src/basics/stdtypes.txt:47 +msgid "``+x``" +msgstr "``+x``" + +#: ../../src/basics/stdtypes.txt:47 +msgid "*y* unchanged" +msgstr "*y* без змін" + +#: ../../src/basics/stdtypes.txt:49 +msgid "``abs(x)``" +msgstr "``abs(x)``" + +#: ../../src/basics/stdtypes.txt:49 +msgid "absolute value or magnitude of *x*" +msgstr "абсолютне значення або величина *x*" + +#: ../../src/basics/stdtypes.txt:51 +msgid "``int(x)``" +msgstr "``int(x)``" + +#: ../../src/basics/stdtypes.txt:51 +msgid "*x* converted to integer" +msgstr "*x* перетворено на ціле число" + +#: ../../src/basics/stdtypes.txt:53 +msgid "``float(x)``" +msgstr "``float(x)``" + +#: ../../src/basics/stdtypes.txt:53 +msgid "*x* converted to floating point" +msgstr "*x* перетворено на число з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:55 +msgid "``complex(re, im)``" +msgstr "``complex(re, im)``" + +#: ../../src/basics/stdtypes.txt:55 +msgid "" +"a complex number with real part *re*, imaginary part *im*. *im* defaults " +"to zero." +msgstr "" +"Комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " +"замовчуванням на нуль. " + +#: ../../src/basics/stdtypes.txt:58 +msgid "``divmod(x, y)``" +msgstr "``divmod(x, y)``" + +#: ../../src/basics/stdtypes.txt:58 +msgid "the pair ``(x // y, x % y)``" +msgstr "об'єднує ``(x // y, x % y)``" + +#: ../../src/basics/stdtypes.txt:60 +msgid "``pow(x, y)`` ``x ** y``" +msgstr "``pow(x, y)`` ``x ** y`" + +#: ../../src/basics/stdtypes.txt:60 +msgid "*x* to the power *y*" +msgstr "*x* у степені *y*" + +#: ../../src/basics/stdtypes.txt:64 +msgid "" +"``x // y`` also referred to as integer division. The resultant value is a" +" whole integer, through the result's type is not necessarily int. The " +"result is always rounded towards minus infinity: ``1 // 2`` is ``0``" +msgstr "" +"``x // y`` також називають цілим діленням. Результуюче значення є цілим " +"числом, через тип результату не обов'язково int. Результат завжди " +"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0`` " + +#: ../../src/basics/stdtypes.txt:69 +msgid "" +"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an" +" optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive " +"and negative infinity." +msgstr "" +"``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " +"префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " +"нескінченність. " + +#: ../../src/basics/stdtypes.txt:74 +msgid "Code examples" +msgstr "Приклади коду" + +#: ../../src/basics/stdtypes.txt:76 +msgid "Integer numbers" +msgstr "Цілі числа" + +#: ../../src/basics/stdtypes.txt:89 +msgid "Floating point numbers" +msgstr "Числа з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:104 ../../src/basics/stdtypes.txt:177 +#: ../../src/basics/stdtypes.txt:287 ../../src/basics/stdtypes.txt:296 +#: ../../src/basics/stdtypes.txt:325 +msgid "Value comparisons" +msgstr "Порівняння цінностей" + +#: ../../src/basics/stdtypes.txt:106 +msgid "" +"Numbers of built-in numeric types can be compared within and across their" +" types (with the restriction that complex numbers do not support order " +"comparison). Within the limits of the types involved, they compare " +"mathematically correct without loss of precision." +msgstr "" +"Числа вбудованих числових типів можна порівнювати всередині та між типами " +"(з обмеженням, що комплексні числа не підтримують порядок порівняння). У " +"межах залучених типів вони порівняються математично правильно без втрати " +"точності. " + +#: ../../src/basics/stdtypes.txt:111 +msgid "" +"The \"not-a-number\" values ``float(\"NaN\")`` and " +"``decimal.Decimal('NaN')`` are special. Any ordered comparison of a " +"number to a not-a-number value is false." +msgstr "" +"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` " +"є спеціальними. Будь-яке впорядковане порівняння числа з нечисловим " +"значенням є хибним." + +#: ../../src/basics/stdtypes.txt:115 +msgid "Sequence types" +msgstr "Типи послідовностей" + +#: ../../src/basics/stdtypes.txt:117 +msgid "" +"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*." +" Additional sequence types tailored for processing of binary data and " +"text strings are described in dedicated sections." +msgstr "" +"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " +"Додаткові типи послідовностей, призначені для обробки двійкових даних і " +"текстових рядків, описані у інших розділах. " + +#: ../../src/basics/stdtypes.txt:122 +msgid "Lists" +msgstr "Списки" + +#: ../../src/basics/stdtypes.txt:124 +msgid "" +"Lists are mutable sequences, typically used to store collections of " +"items. They may be constructed in several ways:" +msgstr "" +"Списки - це змінні послідовності, які зазвичай використовуються для " +"зберігання колекцій елементів. Вони можуть бути побудовані кількома способами:" + +#: ../../src/basics/stdtypes.txt:127 +msgid "using a pair of square brackets to denote the empty list: ``[]``" +msgstr "" +"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" + +#: ../../src/basics/stdtypes.txt:128 +msgid "" +"using square brackets, separating items with commas: ``[a]``, ``[a, b, " +"c]``" +msgstr "" +"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, " +"``[a, b, c]`` " + +#: ../../src/basics/stdtypes.txt:129 +msgid "using a list comprehension: ``[x for x in iterable]``" +msgstr "використовуючи генератори списків: ``[x for x in iterable]``" + +#: ../../src/basics/stdtypes.txt:130 +msgid "using the type constuctor: ``list()`` or ``list(iterable)``" +msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" + +#: ../../src/basics/stdtypes.txt:133 +msgid "Tuples" +msgstr "Кортежі" + +#: ../../src/basics/stdtypes.txt:135 +msgid "" +"Tuples are immutable sequences, typically used to store collections of " +"data or for cases where an immutable sequence of data is needed (such as " +"allowing storage in a ``set`` or ``dict`` instances). They may be " +"constructed in a number of ways:" +msgstr "" +"Кортежі - це незмінні послідовності, які зазвичай використовуються для " +"зберігання колекцій даних або для випадків, коли потрібна незмінна " +"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " +"``dict``). Вони можуть бути конструйовані декількома способами: " + +#: ../../src/basics/stdtypes.txt:140 +msgid "using a pair of parentheses to denote the empty tuple: ``()``" +msgstr "" +"використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" + +#: ../../src/basics/stdtypes.txt:141 +msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" +msgstr "" +"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або " +"``(a, b, c)``" + +#: ../../src/basics/stdtypes.txt:142 +msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" +msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" + +#: ../../src/basics/stdtypes.txt:143 +msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" +msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" + +#: ../../src/basics/stdtypes.txt:146 +msgid "Common operations" +msgstr "Загальні операції" + +#: ../../src/basics/stdtypes.txt:151 +msgid "``x in s`` ``x not in s``" +msgstr "``x in s`` ``x not in s``" + +#: ../../src/basics/stdtypes.txt:151 +msgid "" +"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal" +" to *x*" +msgstr "" +"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* " +"дорівнює *x*" + +#: ../../src/basics/stdtypes.txt:154 +msgid "``s + t``" +msgstr "``s + t``" + +#: ../../src/basics/stdtypes.txt:154 +msgid "the concatenation of *s* and *t*" +msgstr "конкатенація s і t" + +#: ../../src/basics/stdtypes.txt:156 +msgid "``s * n``" +msgstr "``s * n``" + +#: ../../src/basics/stdtypes.txt:156 +msgid "equivalent to adding *s* to itself *n* times" +msgstr "еквівалентно додаванню *s* до себе *n* разів" + +#: ../../src/basics/stdtypes.txt:158 +msgid "``s[i]``" +msgstr "``s[i]``" + +#: ../../src/basics/stdtypes.txt:158 +msgid "*i*-th item of *s*, origin 0" +msgstr "*i*-й елемент *s*, джерело 0" + +#: ../../src/basics/stdtypes.txt:160 +msgid "``s[i:j]`` ``s[i:j:k]``" +msgstr "``s[i:j]`` ``s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:160 +msgid "" +"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) " +"may be omitted." +msgstr "" +"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " +"3) можна опустити. " + +#: ../../src/basics/stdtypes.txt:163 +msgid "``len(s)``" +msgstr "``len(s)``" + +#: ../../src/basics/stdtypes.txt:163 +msgid "length of *s*" +msgstr "довжина *s*" + +#: ../../src/basics/stdtypes.txt:165 +msgid "``min(s)``" +msgstr "``min(s)``" + +#: ../../src/basics/stdtypes.txt:165 +msgid "smallest item of *s*" +msgstr "найменший елемент *s*" + +#: ../../src/basics/stdtypes.txt:167 +msgid "``max(s)``" +msgstr "``max(s)``" + +#: ../../src/basics/stdtypes.txt:167 +msgid "largest item of *s*" +msgstr "найбільший елемент *s*" + +#: ../../src/basics/stdtypes.txt:169 +msgid "``s.count(x)``" +msgstr "``s.count(x)``" + +#: ../../src/basics/stdtypes.txt:169 +msgid "total number of occurrences of *x* in *s*" +msgstr "загальна кількість входжень *x* у *s*" + +#: ../../src/basics/stdtypes.txt:171 +msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" +msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" + +#: ../../src/basics/stdtypes.txt:171 +msgid "" +"index of the first occurrence of *x* in *s* (at or after index *i* and " +"before index *j*)" +msgstr "" +"індекс першого входження *x* у *s* (в або після індексу *i* та перед " +"індексом *j*) " + +#: ../../src/basics/stdtypes.txt:181 +msgid "" +"Sequences can be compared only within each of their types, with the " +"restriction that ranges do not support order comparison. Equality " +"comparison across these types results in inequality, and ordering " +"comparison across these types raises ``TypeError``." +msgstr "" +"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, " +"що діапазони не підтримують порівняння порядку. Порівняння рівності між " +"цими типами призводить до нерівності, а впорядковане порівняння цих " +"типів викликає ``TypeError``. " + +#: ../../src/basics/stdtypes.txt:186 +msgid "" +"Sequences compare lexicographically using comparison of corresponding " +"elements. The built-in containers typically assume identical objects are " +"equal to themselves. Lexicographical comparison between buit-in " +"collections works as follows:" +msgstr "" +"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " +"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " +"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " +"таким чином: " + +#: ../../src/basics/stdtypes.txt:191 +msgid "" +"For two collections to compare equal, they must be of the same type, have" +" the same length, and each pair of corresponding elements must compare " +"equal." +msgstr "" +"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " +"мати однакову довжину, і кожна пара відповідних елементів повинна " +"порівнюватися. " + +#: ../../src/basics/stdtypes.txt:193 +msgid "" +"Collections that supports order comparison are ordered the same as their " +"first unequal elements. If corresponding element does not exist, the " +"shorter collection is ordered first." +msgstr "" +"Колекції, які підтримують порівняння порядку, упорядковуються так само, як " +"і їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"впорядковується коротша колекція. " + +#: ../../src/basics/stdtypes.txt:198 +msgid "Mutable sequence types" +msgstr "Змінні типи послідовностей" + +#: ../../src/basics/stdtypes.txt:203 +msgid "``s[i] = x``" +msgstr "``s[i] = x``" + +#: ../../src/basics/stdtypes.txt:203 +msgid "item *i* of *s* is replaced by *x*" +msgstr "елемент *i* з *s* замінюється на *x*" + +#: ../../src/basics/stdtypes.txt:205 +msgid "``s[i:j] = t``" +msgstr "``s[i:j] = t``" + +#: ../../src/basics/stdtypes.txt:205 +msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" +msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" + +#: ../../src/basics/stdtypes.txt:208 +msgid "``del s[i:j]``" +msgstr "``del s[i:j]``" + +#: ../../src/basics/stdtypes.txt:208 +msgid "same as ``s[i:j] = []``" +msgstr "те саме, що ``s[i:j] = []``" + +#: ../../src/basics/stdtypes.txt:210 +msgid "``s[i:j:k] = t``" +msgstr "``s[i:j:k] = t``" + +#: ../../src/basics/stdtypes.txt:210 +msgid "the elements of *s* are replaced by those of *t*[#]_" +msgstr "елементи *s* замінюються елементами *t*[#]_" + +#: ../../src/basics/stdtypes.txt:212 +msgid "``del s[i:j:k]``" +msgstr "``del s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:212 +msgid "removes the elements of ``s[i:j:k]`` from the list" +msgstr "видаляє елементи ``s[i:j:k]`` зі списку" + +#: ../../src/basics/stdtypes.txt:214 +msgid "``s.append(x)``" +msgstr "``s.append(x)``" + +#: ../../src/basics/stdtypes.txt:214 +msgid "" +"appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " +"[x]``" +msgstr "" +"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]`` " + +#: ../../src/basics/stdtypes.txt:217 +msgid "``s.clear()``" +msgstr "``s.clear()``" + +#: ../../src/basics/stdtypes.txt:217 +msgid "removes all items from *s* (``del s[:]``)[#3.3]_" +msgstr "видаляє всі елементи з *s* (``del s[:]``)[#3.3]_" + +#: ../../src/basics/stdtypes.txt:219 +msgid "``s.copy()``" +msgstr "``s.copy()``" + +#: ../../src/basics/stdtypes.txt:219 +msgid "creates a shallow copy of *s* (``s[:]``)[#3.3]_" +msgstr "створює поверхневу копію *s* (``s[:]``)[#3.3]_" + +#: ../../src/basics/stdtypes.txt:221 +msgid "``s.extend(t)`` ``s += t``" +msgstr "``s.extend(t)`` ``s += t`` + +#: ../../src/basics/stdtypes.txt:221 +msgid "extends *s* with the contents of *t*" +msgstr "розширює *s* вмістом *t*" + +#: ../../src/basics/stdtypes.txt:224 +msgid "``s.insert(i, x)``" +msgstr "``s.insert(i, x)``" + +#: ../../src/basics/stdtypes.txt:224 +msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" +msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" + +#: ../../src/basics/stdtypes.txt:227 +msgid "``s.pop()``, ``s.pop(i)``" +msgstr "``s.pop()``, ``s.pop(i)``" + +#: ../../src/basics/stdtypes.txt:227 +msgid "" +"retrieves the item at *i* and also removes it from *s* (if *i* is omitted" +" - use the last one available index)" +msgstr "" +"отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " +"пропущено - використовуйте останній доступний індекс)" + +#: ../../src/basics/stdtypes.txt:230 +msgid "``s.remove(x)``" +msgstr "``s.remove(x)``" + +#: ../../src/basics/stdtypes.txt:230 +msgid "remove the first item that is equal to *x* from *s*" +msgstr "видалити перший елемент, який дорівнює *x*, із *s*" + +#: ../../src/basics/stdtypes.txt:232 +msgid "``s.reverse()``" +msgstr "``s.reverse()``" + +#: ../../src/basics/stdtypes.txt:232 +msgid "reverses the items of *s* in place" +msgstr "перевертає елементи *s* на місце" + +#: ../../src/basics/stdtypes.txt:235 +msgid "*t* must have the same length as the slice it is replacing" +msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" + +#: ../../src/basics/stdtypes.txt:236 +msgid "new in Python version 3.3" +msgstr "нове у версії Python 3.3" + +#: ../../src/basics/stdtypes.txt:239 +msgid "Text sequence type" +msgstr "Тип текстової послідовності" + +#: ../../src/basics/stdtypes.txt:242 +msgid "String methods" +msgstr "Рядкові методи" + +#: ../../src/basics/stdtypes.txt:244 +msgid "" +"Strings implement all of the common sequence operations, along with the " +"additional methods." +msgstr "" +"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " +"методами. " + +#: ../../src/basics/stdtypes.txt:289 +msgid "" +"Strings compare lexicographically using the numerical Unicode code points" +" of their characters." +msgstr "" +"Рядки порівнюються лексикографічно з використанням числових кодових точок " +"Unicode своїх символів. " + +#: ../../src/basics/stdtypes.txt:293 +msgid "Set types" +msgstr "Типи сетів" + +#: ../../src/basics/stdtypes.txt:298 +msgid "" +"Sets (instances of ``set`` or ``frozenset``) can be compared within and " +"across their types. They define order comparison operators to mean subset" +" and superset tests. Those relations do not define total ordering (e.g. " +"two sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one " +"another, nor supersets of one another)." +msgstr "" +"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " +"між типами. Вони визначають оператори порівняння порядку, щоб проходити " +"тести підмножини та надмножини. Ці відношення не визначають загального " +"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " +"підмножини одного іншого, ані надмножини один одного). " + +#: ../../src/basics/stdtypes.txt:305 +msgid "Mapping type" +msgstr "Тип відображення" + +#: ../../src/basics/stdtypes.txt:307 +msgid "" +"A mapping object maps hashable values to arbitrary objects. Mappings are " +"mutable objects. There is currently ony one standard mapping type, the " +"*dictionary*. In few words mappings are collections of keys and their " +"values." +msgstr "" +"Об’єкт зіставлення зіставляє хешовані значення з довільними об’єктами. " +"Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " +"відображення, *dictionary*. Якщо кількома словами, то відображення - це " +"набори ключів та їхніх значень. " + +#: ../../src/basics/stdtypes.txt:311 +msgid "" +"A dictionary's keys are almost arbitrary values. Values that are not " +"hashable may not be used as keys. Values that compare equal (such as " +"``1``, ``1.0`` and ``True``) can be used interchangeably to index the " +"same dictionary entry." +msgstr "" +"Ключі словника - це майже довільні значення. Значення, які не хешуються, " +"не можуть бути використані як ключі. Значення, які порівнюються (такі як " +"``1``, ``1.0`` і ``True``), можна використовувати як взаємозамінні для " +"індексування тієї самої словникової статті. " + +#: ../../src/basics/stdtypes.txt:315 +msgid "Dictionaries can be created by several means:" +msgstr "Словники можна створювати кількома способами:" + +#: ../../src/basics/stdtypes.txt:317 +msgid "Use braces to denote the empty dictionary: ``{}``" +msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" + +#: ../../src/basics/stdtypes.txt:318 +msgid "" +"Use a comma-separated list of ``key: value`` pairs with braces: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}" +msgstr "" +"Використовуйте розділений комами список пар ``key: value`` з дужками: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} " + +#: ../../src/basics/stdtypes.txt:320 +msgid "Use a dict comprehension: `{x: x ** 2 for x in range(10)}``" +msgstr "Використовуючи генератори списків: `{x: x 2 for x in range(10)}``" + +#: ../../src/basics/stdtypes.txt:321 +msgid "" +"Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)``" +msgstr "" +"Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)`` " + +#: ../../src/basics/stdtypes.txt:327 +msgid "" +"Instances of ``dict`` compare equal if and only if they have equal key-" +"value pairs." +msgstr "" +"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони " +"мають однакові пари ключ-значення. " + +#: ../../src/basics/stdtypes.txt:330 +msgid "Order comparisons raise ``TypeError``." +msgstr "Порівняння порядку викликає ``TypeError``." + +#: ../../src/basics/syntax.txt:3 +msgid "Python Syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:5 +msgid "" +"As a natural language like English or Ukrainian has its own rules to " +"write down something, programming languages do. This makes them " +"programming **languages**." +msgstr "" +"Оскільки природна мова, як-от англійська чи українська, має власні правила " +"запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " +"мовами програмування." + +#: ../../src/basics/syntax.txt:9 +msgid "" +"A programming language syntax is the set of rules and principles that " +"govern how code is written and structured in a given programming " +"language. Syntax encompasses the rules for writing statements, " +"expressions, variables, data types, control structures, and other " +"constructs that make up the language." +msgstr "" +"Синтаксис мови програмування - це набір правил і принципів, які регулюють " +"написання та структурування коду даною мовою програмування. Синтаксис " +"охоплює правила написання операторів, виразів, змінних, типів даних, " +"керуючих структур та інших конструкцій, які складають мову." + +#: ../../src/basics/syntax.txt:14 +msgid "" +"The syntax of a programming language defines how code is organized and " +"interpreted by a compiler or interpreter. It defines the rules for " +"writing valid statements and expressions that can be understood and " +"executed by the language's runtime system." +msgstr "" +"Синтаксис мови програмування визначає, як код організовується та " +"інтерпретується компілятором або інтерпретатором. Він визначає правила " +"написання дійсних операторів і виразів, які можуть бути зрозумілі та " +"виконані системою виконання мови. " + +#: ../../src/basics/syntax.txt:19 +msgid "" +"A programming language's syntax is designed to be both readable and " +"expressive, allowing programmers to write code that is easy to understand" +" and modify. Syntax often influences the style and structure of code, as " +"well as its maintainability and performance." +msgstr "" +"Синтаксис мови програмування розроблено таким чином, щоб він був " +"читабельним і виразним, дозволяючи програмістам писати код, який легко " +"зрозуміти та змінювати. Синтаксис часто впливає на стиль і структуру коду, " +"а також на його зручність обслуговування та продуктивність. " + +#: ../../src/basics/syntax.txt:24 +msgid "" +"Different programming languages have different syntax, with some " +"languages being more concise and expressive than others. While syntax is " +"an important aspect of a programming language, it is only one of several " +"factors that determine its ease of use, flexibility, and suitability for " +"different programming tasks." +msgstr "" +"Різні мови програмування мають різний синтаксис, при цьому деякі мови є " +"більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " +"аспектом мови програмування, він є лише одним із кількох факторів, які " +"визначають її легкість у використанні, гнучкість і придатність для різних " +"завдань програмування. " + +#: ../../src/basics/syntax.txt:30 +msgid "" +"In the case of Python, the language's syntax defines how code is written " +"and structured in a way that is consistent, readable, and easy to " +"understand. A general overview is provided below, no need to dive deep in" +" this now. All of the following is to be discussed during the course. So," +" some of the key aspects of Python's syntax include:" +msgstr "" +"У випадку Python синтаксис мови визначає, як код буде написаний і " +"структурований таким чином, щоб він був послідовним, читабельним і легким " +"для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " +"занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " +"курсу. Отже, деякі з ключових аспектів синтаксису Python включають: " + +#: ../../src/basics/syntax.txt +msgid "Indentation" +msgstr "Відступ" + +#: ../../src/basics/syntax.txt:37 +msgid "" +"Python uses whitespace, specifically indentation, to delimit blocks of " +"code, such as loops, conditionals, and functions. This means that the " +"indentation level of a line determines which block of code it belongs to." +msgstr "" +"Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " +"таких як цикли, умови та функції. Це означає, що рівень відступу рядка " +"визначає, до якого блоку коду він належить. " + +#: ../../src/basics/syntax.txt +msgid "Statement structure" +msgstr "Структура коду" + +#: ../../src/basics/syntax.txt:43 +msgid "" +"Python statements are typically written on one line, with the end of the " +"line indicating the end of the statement. However, if a statement is too " +"long to fit on one line, it can be continued across multiple lines using " +"backslashes." +msgstr "" +"Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " +"вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " +"поміститися в один рядок, його можна продовжити в кількох рядках, " +"використовуючи зворотні похилі риски. " + +#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:3 +msgid "Variables" +msgstr "Змінні" + +#: ../../src/basics/syntax.txt:49 +msgid "" +"In Python, variables are created automatically when a value is assigned " +"to them, and their type is inferred from the value. Variables can be " +"assigned values of different types, including integers, floats, strings, " +"and more complex data structures like lists and dictionaries." +msgstr "" +"У Python змінні створюються автоматично, якщо їм присвоюється значення, і " +"їхній тип визначається на основі значення. Змінним можна присвоювати " +"значення різних типів, включаючи цілі числа, числа з плаваючою комою, рядки " +"та складніші структури даних, такі як списки та словники." + +#: ../../src/basics/syntax.txt +msgid "Operators" +msgstr "Оператори" + +#: ../../src/basics/syntax.txt:55 +msgid "" +"Python supports a wide range of operators for performing arithmetic, " +"comparison, and logical operations. These include arithmetic operators " +"like ``+``, ``-``, ``*``, and ``/``, as well as comparison operators like" +" ``<``, ``>``, ``==``, and ``!=``." +msgstr "" +"Python підтримує широкий спектр операторів для виконання арифметичних, " +"порівнянь і логічних операцій. До них належать арифметичні оператори, такі " +"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як ``<`` " +", ``>``, ``==`` і ``!=``. " + +#: ../../src/basics/syntax.txt +msgid "Control flow" +msgstr "Контроль потоку" + +#: ../../src/basics/syntax.txt:61 +msgid "" +"Python provides control flow statements like if, else, elif, for, and " +"while to control the flow of execution in a program. These statements are" +" used to make decisions, repeat code, or perform actions based on " +"conditions." +msgstr "" +"Python надає оператори потоку керування, як-от if, else, elif, for та while, " +"для керування потоком виконання в програмі. Ці оператори використовуються " +"для прийняття рішень, повторення коду або виконання дій на основі заданих " +"умов." + +#: ../../src/basics/syntax.txt:67 +msgid "" +"In Python, functions are defined using the def keyword and can take " +"arguments and return values. The body of a function is defined using a " +"block of indented code." +msgstr "" +"У Python функції визначаються за допомогою ключового слова def і можуть " +"отримувати аргументи та повертати значення. Тіло функції визначається за " +"допомогою блоку коду з відступами. " + +#: ../../src/basics/syntax.txt +msgid "Modules" +msgstr "Модулі" + +#: ../../src/basics/syntax.txt:72 +msgid "" +"Python has a large library of modules that provide pre-written code for a" +" variety of tasks. Modules can be imported into a program using the " +"import statement." +msgstr "" +"Python має велику бібліотеку модулів, які містять попередньо написаний код " +"для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " +"оператора імпорту." + +#: ../../src/basics/syntax.txt +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/syntax.txt:77 +msgid "" +"Python provides a way to handle errors and exceptions in a program using " +"the try, except, else, and finally keywords. These statements allow a " +"program to gracefully recover from errors and continue executing." +msgstr "" +"Python надає спосіб обробки помилок і винятків у програмі за допомогою " +"ключових слів try, except, else і finally. Ці оператори дозволяють програмі " +"плавно відновлюватися після помилок і продовжувати виконання. " + +#: ../../src/basics/syntax.txt:81 +msgid "In few words:" +msgstr "У кількох словах:" + +#: ../../src/basics/syntax.txt:83 +msgid "Input/Output example script" +msgstr "Приклад сценарію Input/Output" + +#: ../../src/basics/syntax.txt:102 +msgid "" +"The code snippet above demonstrates some basics abilities of Python to " +"gather data from the user, process it and print out back. Note the words " +"starting with a **#** (hash) symbol. This is a comment. Any sequence of " +"characters after the hash and till the line end are considered to be a " +"comment. These are for those people, who see the code and they are " +"ignored by the interpreter." +msgstr "" +"Наведений вище фрагмент коду демонструє деякі основні можливості Python " +"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть " +"увагу на слова, що починаються символом **#**(решітка). Це коментар. " +"Будь-яка послідовність символів після хеша і до кінця рядка вважається " +"коментарем. Це необхідно, щоб люди які бачать код могли його зрозуміти, при " +"цьому інтерпретатор їх ігнорує. " + +#: ../../src/basics/syntax.txt:108 +msgid "" +"On the other hand each individual line is the instruction for the " +"interpreter to perform some action, like gather inputs, do math, store " +"data in memory etc." +msgstr "" +"З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " +"певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " +"збереження даних у пам'яті тощо. " + +#: ../../src/basics/testing.txt:3 +msgid "Testing" +msgstr "Тестування" + +#: ../../src/basics/variables.txt:5 +msgid "" +"In computer science a **variable** is a named storage location in memory " +"that can hold a value (*data*). The value stored in a variable can be " +"changed or accessed by the program during its execution." +msgstr "" +"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " +"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " +"змінено або доступне програмою під час її виконання. " + +#: ../../src/basics/variables.txt:9 +msgid "" +"In Python, variables are created dynamically once a value is assigned to " +"them. This makes Python a dynamically typed language, which means that " +"the data type of a variable is inferred from the value assigned to it. " +"So, you do not need to declare a variable before using it, as in " +"statically typed languages." +msgstr "" +"У Python змінні створюються динамічно після присвоєння їм значення. Це " +"робить Python динамічно типізованою мовою, а це означає, що тип даних " +"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " +"оголошувати змінну перед її використанням, як у статично типізованих мовах. " + +#: ../../src/basics/variables.txt:14 +msgid "" +"The ability to create variables dynamically and infer their data type " +"makes Python code more concise and easier to read. However, it also " +"requires careful attention to variable naming and assignment to avoid " +"unexpected behavior." +msgstr "" +"Можливість динамічно створювати змінні та виводити їхні типи даних робить " +"код Python більш лаконічним і легшим для читання. Однак це також вимагає " +"пильної уваги до іменування та призначення змінних, щоб уникнути " +"неочікуваної поведінки. " + +#: ../../src/basics/variables.txt:18 +msgid "" +"In Python ``=`` (assignment operator) is used to set a value to some " +"variable, the portion on the left of the operator is a *variable name* " +"and the portion on the right is a *value* to assign to a variable." +msgstr "" +"У Python ``=`` (оператор присвоєння) використовується для встановлення " +"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " +"частина праворуч - це значення, яке призначається для неї. " + +#: ../../src/basics/variables.txt:22 +msgid "Variable assignment in Python" +msgstr "Присвоєння змінної в Python" + +#: ../../src/basics/variables.txt:29 +msgid "Variable assignment in Java" +msgstr "Присвоєння змінної в Java" + +#: ../../src/basics/variables.txt:37 +msgid "Naming" +msgstr "Присвоєння назви" + +#: ../../src/basics/variables.txt:39 +msgid "" +"In Python there are several rules that describe how to name your " +"variables. Some of these are requirements and cannot be ignored, others " +"are rather recommended than required and can be omitted. For now note, " +"that a variable name **cannot**:" +msgstr "" +"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " +"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " +"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" + +#: ../../src/basics/variables.txt:44 +msgid "a language keyword (like ``pass``, ``def`` or ``class``)" +msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" + +#: ../../src/basics/variables.txt:45 +msgid "start with a number (e.g. ``123``, ``1_something``)" +msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" + +#: ../../src/basics/variables.txt:46 +msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" +msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" + +#: ../../src/basics/variables.txt:47 +msgid "contain white spaces" +msgstr "містити пробіли" + +#: ../../src/basics/variables.txt:49 +msgid "Also here are some general recommendation on naming anything:" +msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" + +#: ../../src/basics/variables.txt:51 +msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" +msgstr "" +"не використовуйте вбудовані функції як назву змінної (наприклад, " +"``len = 42``)" + +#: ../../src/basics/variables.txt:52 +msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" +msgstr "" +"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``) " + From 7778a8c0d426c9e92efc4b434b59fc42708e96d1 Mon Sep 17 00:00:00 2001 From: Oleksandr Yeromin <127413390+Un1corN1k@users.noreply.github.com> Date: Sun, 26 Mar 2023 21:11:42 +0300 Subject: [PATCH 054/689] Apply suggestions from code review Co-authored-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/basics.po | 84 +++++++++++++-------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index b5423286b..6c1e5e16c 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -1,8 +1,8 @@ -# SOME DESCRIPTIVE TITLE. +# PYTHON/BASICS TRANSLATION # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. +# FIRST AUTHOR OLEKSANDR YEROMIN , 2023. # #, fuzzy msgid "" @@ -20,7 +20,7 @@ msgstr "" #: ../../src/basics/controlflow.txt:3 msgid "Control Flow" -msgstr "" +msgstr "Керування виконанням" #: ../../src/basics/datatypes.txt:3 msgid "Data Types" @@ -40,7 +40,7 @@ msgstr "" "Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984"`` ) " "або подією чи датою. Тип даних описує можливі операції, дозволені для даних, " "як-от додавання чисел або конкатенація для тексту " -"(наприклад, ``1 + 2 " "-> 3``, ``\"1\" + \"3 \" -> \"13\"``). " +"(наприклад, ``1 + 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." #: ../../src/basics/datatypes.txt:11 msgid "" @@ -482,7 +482,7 @@ msgstr "Результат" #: ../../src/basics/stdtypes.txt:33 msgid "``x + y``" -msgstr "``x + y``" +msgstr "" #: ../../src/basics/stdtypes.txt:33 msgid "sum of *x* and *y*" @@ -490,7 +490,7 @@ msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:35 msgid "``x - y``" -msgstr "``x - y``" +msgstr "" #: ../../src/basics/stdtypes.txt:35 msgid "difference of *x* and *y*" @@ -498,7 +498,7 @@ msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:37 msgid "``x * y``" -msgstr "``x * y``" +msgstr "" #: ../../src/basics/stdtypes.txt:37 msgid "product of *x* and *y*" @@ -506,7 +506,7 @@ msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:39 msgid "``x / y``" -msgstr "``x / y``" +msgstr "" #: ../../src/basics/stdtypes.txt:39 msgid "quotient of *x* and *y*" @@ -514,7 +514,7 @@ msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:41 msgid "``x // y``" -msgstr "``x // y``" +msgstr "" #: ../../src/basics/stdtypes.txt:41 msgid "floored quotient of *x* and *y*" @@ -522,7 +522,7 @@ msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:43 msgid "``x % y``" -msgstr "``x % y``" +msgstr "" #: ../../src/basics/stdtypes.txt:43 msgid "remainder of ``x / y``" @@ -530,15 +530,15 @@ msgstr "залишок від ділення``x / y``" #: ../../src/basics/stdtypes.txt:45 msgid "``-x``" -msgstr "``-x``" +msgstr "" #: ../../src/basics/stdtypes.txt:45 msgid "*x* negated" -msgstr "*x* заперечено" +msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:47 msgid "``+x``" -msgstr "``+x``" +msgstr "" #: ../../src/basics/stdtypes.txt:47 msgid "*y* unchanged" @@ -546,7 +546,7 @@ msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:49 msgid "``abs(x)``" -msgstr "``abs(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:49 msgid "absolute value or magnitude of *x*" @@ -554,7 +554,7 @@ msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:51 msgid "``int(x)``" -msgstr "``int(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:51 msgid "*x* converted to integer" @@ -562,7 +562,7 @@ msgstr "*x* перетворено на ціле число" #: ../../src/basics/stdtypes.txt:53 msgid "``float(x)``" -msgstr "``float(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:53 msgid "*x* converted to floating point" @@ -570,7 +570,7 @@ msgstr "*x* перетворено на число з плаваючою ком #: ../../src/basics/stdtypes.txt:55 msgid "``complex(re, im)``" -msgstr "``complex(re, im)``" +msgstr "" #: ../../src/basics/stdtypes.txt:55 msgid "" @@ -582,7 +582,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:58 msgid "``divmod(x, y)``" -msgstr "``divmod(x, y)``" +msgstr "" #: ../../src/basics/stdtypes.txt:58 msgid "the pair ``(x // y, x % y)``" @@ -590,7 +590,7 @@ msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:60 msgid "``pow(x, y)`` ``x ** y``" -msgstr "``pow(x, y)`` ``x ** y`" +msgstr "" #: ../../src/basics/stdtypes.txt:60 msgid "*x* to the power *y*" @@ -744,7 +744,7 @@ msgstr "Загальні операції" #: ../../src/basics/stdtypes.txt:151 msgid "``x in s`` ``x not in s``" -msgstr "``x in s`` ``x not in s``" +msgstr "" #: ../../src/basics/stdtypes.txt:151 msgid "" @@ -756,7 +756,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:154 msgid "``s + t``" -msgstr "``s + t``" +msgstr "" #: ../../src/basics/stdtypes.txt:154 msgid "the concatenation of *s* and *t*" @@ -764,7 +764,7 @@ msgstr "конкатенація s і t" #: ../../src/basics/stdtypes.txt:156 msgid "``s * n``" -msgstr "``s * n``" +msgstr "" #: ../../src/basics/stdtypes.txt:156 msgid "equivalent to adding *s* to itself *n* times" @@ -772,7 +772,7 @@ msgstr "еквівалентно додаванню *s* до себе *n* раз #: ../../src/basics/stdtypes.txt:158 msgid "``s[i]``" -msgstr "``s[i]``" +msgstr "" #: ../../src/basics/stdtypes.txt:158 msgid "*i*-th item of *s*, origin 0" @@ -780,7 +780,7 @@ msgstr "*i*-й елемент *s*, джерело 0" #: ../../src/basics/stdtypes.txt:160 msgid "``s[i:j]`` ``s[i:j:k]``" -msgstr "``s[i:j]`` ``s[i:j:k]``" +msgstr "" #: ../../src/basics/stdtypes.txt:160 msgid "" @@ -792,7 +792,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:163 msgid "``len(s)``" -msgstr "``len(s)``" +msgstr "" #: ../../src/basics/stdtypes.txt:163 msgid "length of *s*" @@ -800,7 +800,7 @@ msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:165 msgid "``min(s)``" -msgstr "``min(s)``" +msgstr "" #: ../../src/basics/stdtypes.txt:165 msgid "smallest item of *s*" @@ -808,7 +808,7 @@ msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:167 msgid "``max(s)``" -msgstr "``max(s)``" +msgstr "" #: ../../src/basics/stdtypes.txt:167 msgid "largest item of *s*" @@ -816,7 +816,7 @@ msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:169 msgid "``s.count(x)``" -msgstr "``s.count(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:169 msgid "total number of occurrences of *x* in *s*" @@ -824,7 +824,7 @@ msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:171 msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" +msgstr "" #: ../../src/basics/stdtypes.txt:171 msgid "" @@ -884,7 +884,7 @@ msgstr "Змінні типи послідовностей" #: ../../src/basics/stdtypes.txt:203 msgid "``s[i] = x``" -msgstr "``s[i] = x``" +msgstr "" #: ../../src/basics/stdtypes.txt:203 msgid "item *i* of *s* is replaced by *x*" @@ -892,7 +892,7 @@ msgstr "елемент *i* з *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:205 msgid "``s[i:j] = t``" -msgstr "``s[i:j] = t``" +msgstr "" #: ../../src/basics/stdtypes.txt:205 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" @@ -900,7 +900,7 @@ msgstr "фрагмент *s* від *i* до *j*, замінений вміст #: ../../src/basics/stdtypes.txt:208 msgid "``del s[i:j]``" -msgstr "``del s[i:j]``" +msgstr "" #: ../../src/basics/stdtypes.txt:208 msgid "same as ``s[i:j] = []``" @@ -908,7 +908,7 @@ msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:210 msgid "``s[i:j:k] = t``" -msgstr "``s[i:j:k] = t``" +msgstr "" #: ../../src/basics/stdtypes.txt:210 msgid "the elements of *s* are replaced by those of *t*[#]_" @@ -916,7 +916,7 @@ msgstr "елементи *s* замінюються елементами *t*[#]_ #: ../../src/basics/stdtypes.txt:212 msgid "``del s[i:j:k]``" -msgstr "``del s[i:j:k]``" +msgstr "" #: ../../src/basics/stdtypes.txt:212 msgid "removes the elements of ``s[i:j:k]`` from the list" @@ -924,7 +924,7 @@ msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:214 msgid "``s.append(x)``" -msgstr "``s.append(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:214 msgid "" @@ -935,7 +935,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:217 msgid "``s.clear()``" -msgstr "``s.clear()``" +msgstr "" #: ../../src/basics/stdtypes.txt:217 msgid "removes all items from *s* (``del s[:]``)[#3.3]_" @@ -943,7 +943,7 @@ msgstr "видаляє всі елементи з *s* (``del s[:]``)[#3.3]_" #: ../../src/basics/stdtypes.txt:219 msgid "``s.copy()``" -msgstr "``s.copy()``" +msgstr "" #: ../../src/basics/stdtypes.txt:219 msgid "creates a shallow copy of *s* (``s[:]``)[#3.3]_" @@ -951,7 +951,7 @@ msgstr "створює поверхневу копію *s* (``s[:]``)[#3.3]_" #: ../../src/basics/stdtypes.txt:221 msgid "``s.extend(t)`` ``s += t``" -msgstr "``s.extend(t)`` ``s += t`` +msgstr "" #: ../../src/basics/stdtypes.txt:221 msgid "extends *s* with the contents of *t*" @@ -959,7 +959,7 @@ msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:224 msgid "``s.insert(i, x)``" -msgstr "``s.insert(i, x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:224 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" @@ -967,7 +967,7 @@ msgstr "вставляє *x* у *s* за індексом *i*; те саме, щ #: ../../src/basics/stdtypes.txt:227 msgid "``s.pop()``, ``s.pop(i)``" -msgstr "``s.pop()``, ``s.pop(i)``" +msgstr "" #: ../../src/basics/stdtypes.txt:227 msgid "" @@ -979,7 +979,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:230 msgid "``s.remove(x)``" -msgstr "``s.remove(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:230 msgid "remove the first item that is equal to *x* from *s*" @@ -987,7 +987,7 @@ msgstr "видалити перший елемент, який дорівнює #: ../../src/basics/stdtypes.txt:232 msgid "``s.reverse()``" -msgstr "``s.reverse()``" +msgstr "" #: ../../src/basics/stdtypes.txt:232 msgid "reverses the items of *s* in place" From 793351d6d185b13e0bb054d108e86714c503cf85 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 27 Mar 2023 18:11:59 +0300 Subject: [PATCH 055/689] Added blog submodule "blog" is a Django project. It contains challenges for the web-development training block. --- .gitmodules | 3 +++ blog | 1 + 2 files changed, 4 insertions(+) create mode 160000 blog diff --git a/.gitmodules b/.gitmodules index fbf6f4a41..f858bdca8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "problem-sets"] path = problem-sets url = https://github.com/edu-python-course/problem-sets +[submodule "blog"] + path = blog + url = https://github.com/edu-python-course/blog diff --git a/blog b/blog new file mode 160000 index 000000000..2e531410b --- /dev/null +++ b/blog @@ -0,0 +1 @@ +Subproject commit 2e531410b5d0e5a2781bb679b4583d80039df531 From a7eb22010f785bc85f973637854452dd14643464 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 4 Apr 2023 16:17:22 +0300 Subject: [PATCH 056/689] Added appendixes Added specification for Django project. Added convenience store challenge description. --- src/appx/blog.md | 2 ++ src/appx/conv_store.txt | 1 + src/conf.py | 2 ++ src/index.txt | 2 ++ 4 files changed, 7 insertions(+) create mode 100644 src/appx/blog.md create mode 100644 src/appx/conv_store.txt diff --git a/src/appx/blog.md b/src/appx/blog.md new file mode 100644 index 000000000..835e1d15f --- /dev/null +++ b/src/appx/blog.md @@ -0,0 +1,2 @@ +```{include} /../blog/docs/spec.md +``` diff --git a/src/appx/conv_store.txt b/src/appx/conv_store.txt new file mode 100644 index 000000000..cb1d4aaa1 --- /dev/null +++ b/src/appx/conv_store.txt @@ -0,0 +1 @@ +.. include:: /../problem-sets/src/conv_store/challenge.rst diff --git a/src/conf.py b/src/conf.py index 4060685b5..40cb0d14f 100644 --- a/src/conf.py +++ b/src/conf.py @@ -62,4 +62,6 @@ "appx/env_path", "appx/precedence", "appx/printf", + "appx/conv_store", + "appx/blog", ] diff --git a/src/index.txt b/src/index.txt index 8da277c3e..8e98da58f 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,6 +27,8 @@ appx/env_path appx/precedence appx/printf + appx/conv_store + appx/blog .. rubric:: References From 5a18a3f99b4aae2bc4495f3f62b6d151c061a78b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 4 Apr 2023 16:18:28 +0300 Subject: [PATCH 057/689] Added "conv store" translation --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 1445 +++++++++++++++++++++++++++ 2 files changed, 1446 insertions(+), 1 deletion(-) create mode 100644 src/_locales/ua/LC_MESSAGES/appx.po diff --git a/problem-sets b/problem-sets index 738e6d464..d73d389d9 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 738e6d464d7173d5027d6ff882602109f19088b5 +Subproject commit d73d389d9b78f0dbbbf7cfe7a39d7bfab193718c diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po new file mode 100644 index 000000000..68c519a02 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -0,0 +1,1445 @@ +# APPENDIXES TRANSLATION FILE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-04 15:54+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: ua\n" +"Language-Team: ua \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: ../../blog/docs/spec.md:2 +msgid "Blog Project Specification" +msgstr "" + +#: ../../blog/docs/spec.md:5 +msgid "" +"As a developer you were asked to create a simple blog site. The goal is " +"to create a place on the Internet where users can share their stories to " +"public." +msgstr "" + +#: ../../blog/docs/spec.md:8 +msgid "" +"This document applies requirements for the entire project step-by-step. " +"You will start from creating the appropriate URL dispatcher and " +"connecting a PostgreSQL database to store the data and will finish with " +"implementing REST API for the blog." +msgstr "" + +#: ../../blog/docs/spec.md:13 +msgid "" +"There are some boiler plates, that may be useful in your future work, but" +" you aren't forced to use them. It's on your choice." +msgstr "" + +#: ../../blog/docs/spec.md:16 +msgid "[Starter template](https://github.com/edu-python-course/django-template)" +msgstr "" + +#: ../../blog/docs/spec.md:17 +msgid "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +msgstr "" + +#: ../../blog/docs/spec.md:20 +msgid "Challenge: Site views" +msgstr "" + +#: ../../blog/docs/spec.md:23 +msgid "" +"It's ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." +msgstr "" + +#: ../../blog/docs/spec.md:29 +msgid "" +"`/blogs/`: A site's homepage. This will contain a list of blogs available" +" via the django site." +msgstr "" + +#: ../../blog/docs/spec.md:32 +msgid "" +"`/about/`: Provides a regular text for a user, describing the " +"functionalities of the django site." +msgstr "" + +#: ../../blog/docs/spec.md:35 +msgid "`/`: same as `/blogs/`" +msgstr "" + +#: ../../blog/docs/spec.md:37 +msgid "" +"`//`: A single blog post detail view. The URL contains dynamic part" +" in it. This will be used to fetch a single blogpost from the database." +msgstr "" + +#: ../../blog/docs/spec.md:40 +msgid "`/comment/`: This view will be used to add comments to a blogpost." +msgstr "" + +#: ../../blog/docs/spec.md:42 +msgid "`/create/`: A post creation form." +msgstr "" + +#: ../../blog/docs/spec.md:44 +msgid "`//update/`: A view to update an existing post data." +msgstr "" + +#: ../../blog/docs/spec.md:46 +msgid "`//delete/`: A view to confirm post deletion." +msgstr "" + +#: ../../blog/docs/spec.md:48 +msgid "`/profile/`: A site user's personal page." +msgstr "" + +#: ../../blog/docs/spec.md:50 +msgid "" +"`/change_password/`: This route will be used to change users' credential " +"data." +msgstr "" + +#: ../../blog/docs/spec.md:52 +msgid "`/register/`: This view contains a user registration form." +msgstr "" + +#: ../../blog/docs/spec.md:54 +msgid "`/login/`: This view contains a login form." +msgstr "" + +#: ../../blog/docs/spec.md:56 +msgid "`/logout/`: Logout page. This view should redirect user back to homepage." +msgstr "" + +#: ../../blog/docs/spec.md:61 +msgid "Challenge: Data models" +msgstr "" + +#: ../../blog/docs/spec.md:64 +msgid "You are to implement data models for the blog site." +msgstr "" + +#: ../../blog/docs/spec.md:66 +msgid "The `auth.User` will be used as `user` model." +msgstr "" + +#: ../../blog/docs/spec.md:68 +msgid "" +"`post.slug` value should be autogenerated when a record is created or " +"updated and follow the pattern:" +msgstr "" + +#: ../../blog/docs/spec.md:75 +msgid "" +"User preferred topics should be marked with a `notify` flag. This value " +"should be `True` by default." +msgstr "" + +#: ../../blog/docs/spec.md:108 +msgid "Challenge: ORM" +msgstr "" + +#: ../../blog/docs/spec.md:111 +msgid "" +"Update existing views to represent entities that are actually stored " +"inside the project's database." +msgstr "" + +#: ../../blog/docs/spec.md:114 +msgid "`/blogs/` or `/`: should represent a list of existing blogposts." +msgstr "" + +#: ../../blog/docs/spec.md:116 +msgid "`//`: should represent a single existing blogpost." +msgstr "" + +#: ../../blog/docs/spec.md:118 +msgid "" +"`/profile/`: should contain information about user and a list " +"of posts authored by this user." +msgstr "" + +#: ../../blog/docs/spec.md:121 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise `Http404` in case entity couldn't be fetched." +msgstr "" + +#: ../../blog/docs/spec.md:126 +msgid "Challenge: Templates" +msgstr "" + +#: ../../blog/docs/spec.md:129 +msgid "" +"It's time to work with data representations. You're to add HTML template " +"to the blog site project. Keep templates together with appropriate " +"applications, we don't need mess in project files." +msgstr "" + +#: ../../blog/docs/spec.md:134 +msgid "Application-level templates should be extended from the base one." +msgstr "" + +#: ../../blog/docs/spec.md:135 +msgid "" +"Each page should contain a navbar at the top. Navbar will contain " +"permalinks to the home and about pages." +msgstr "" + +#: ../../blog/docs/spec.md:137 +msgid "" +"For anonymous users `/register/` and `/login/` links should be visible in" +" navbar." +msgstr "" + +#: ../../blog/docs/spec.md:139 +msgid "" +"For authenticated users `/logout/` and `/create/` links should be visible" +" in navbar." +msgstr "" + +#: ../../blog/docs/spec.md:141 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin " +"page." +msgstr "" + +#: ../../blog/docs/spec.md:142 +msgid "" +"Each page should contain a list of links to archive views for the last " +"year." +msgstr "" + +#: ../../blog/docs/spec.md:143 +msgid "For the `post_list.html` each post entity should provide the information:" +msgstr "" + +#: ../../blog/docs/spec.md:144 +msgid "title (each word should be capitalized)" +msgstr "" + +#: ../../blog/docs/spec.md:145 +msgid "creation date" +msgstr "" + +#: ../../blog/docs/spec.md:146 +msgid "list of related topics (first 3 topics)" +msgstr "" + +#: ../../blog/docs/spec.md:147 +msgid "trimmed content (~50 words or fewer)" +msgstr "" + +#: ../../blog/docs/spec.md:148 +msgid "number of comments" +msgstr "" + +#: ../../blog/docs/spec.md:149 +msgid "Each post entity on a list view should be a link to corresponding post." +msgstr "" + +#: ../../blog/docs/spec.md:150 +msgid "Detail view should contain links to `/update/` and `/delete/`." +msgstr "" + +#: ../../blog/docs/spec.md:151 +msgid "Detail view should contain a list of post related comments." +msgstr "" + +#: ../../blog/docs/spec.md:152 +msgid "" +"Auth views should use `register.html` and `login.html` with corresponding" +" forms." +msgstr "" + +#: ../../blog/docs/spec.md:155 +msgid "" +"For now, it's ok to use admin as \"test user\". Authentication system " +"will be implemented in the future challenges. `user` object is available " +"(by default) in any template context. To test anonymous access you can " +"use `usar.is_authenticated`, which returns `False` for non-authenticated " +"users." +msgstr "" + +#: ../../blog/docs/spec.md:162 +msgid "Challenge: Auth forms" +msgstr "" + +#: ../../blog/docs/spec.md:165 +msgid "Create form for new users registration with required fields:" +msgstr "" + +#: ../../blog/docs/spec.md:166 +msgid "`username`" +msgstr "" + +#: ../../blog/docs/spec.md:167 +msgid "`email`" +msgstr "" + +#: ../../blog/docs/spec.md:168 +msgid "`password`" +msgstr "" + +#: ../../blog/docs/spec.md:169 +msgid "`confirm password`" +msgstr "" + +#: ../../blog/docs/spec.md:170 +msgid "`username` value should be validated against existing values" +msgstr "" + +#: ../../blog/docs/spec.md:171 +msgid "`password` and `confirm password` values should match" +msgstr "" + +#: ../../blog/docs/spec.md:172 +msgid "Create form for existing users login" +msgstr "" + +#: ../../blog/docs/spec.md:173 +msgid "Validations errors are to be rendered on the template" +msgstr "" + +#: ../../blog/docs/spec.md:175 +msgid "Challenge: Blogpost Creation and Update" +msgstr "" + +#: ../../blog/docs/spec.md:178 +msgid "Create a form to work with the blogpost model." +msgstr "" + +#: ../../blog/docs/spec.md:179 +msgid "" +"Create a form to gather a comment from a user. Form should be used within" +" a \"post detail\" view." +msgstr "" + +#: ../../blog/docs/spec.md:181 +msgid "Form should be used for *create* and *update* view." +msgstr "" + +#: ../../blog/docs/spec.md:183 +msgid "It's ok to use a *pre-defined* user as a post's author for now." +msgstr "" + +#: ../../blog/docs/spec.md:187 +msgid "Challenge: Authentication" +msgstr "" + +#: ../../blog/docs/spec.md:190 +msgid "" +"`/register/`: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " +"authentication process. Invalid form should provide information about " +"error(s)." +msgstr "" + +#: ../../blog/docs/spec.md:195 +msgid "" +"`/login/`: Users should provide their credentials to login. In case login" +" is successful they should be redirected to their profile (if no " +"`next=url` query string available)." +msgstr "" + +#: ../../blog/docs/spec.md:199 +msgid "" +"`/create/`: Only authenticated users should be able to visit this page. " +"In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to post creation. Then a post is created, it should be authored " +"by the currently authenticated user." +msgstr "" + +#: ../../blog/docs/spec.md:205 +msgid "" +"`//comment`: Currently authenticated user should be referenced as a" +" comment's author." +msgstr "" + +#: ../../blog/docs/spec.md:207 +msgid "Posts may be modified or deleted only by their authors (no exceptions)." +msgstr "" + +#: ../../blog/docs/spec.md:211 +msgid "Challenge: Class-Based Views" +msgstr "" + +#: ../../blog/docs/spec.md:214 +msgid "Replace **all** existing views via ``CBV``." +msgstr "" + +#: ../../blog/docs/spec.md:215 +msgid "Existing functionality should not be corrupted." +msgstr "" + +#: ../../blog/docs/spec.md:217 +msgid "It's ok to use Django built-in views for auth." +msgstr "" + +#: ../../blog/docs/spec.md:226 +msgid "Challenge: Serializers" +msgstr "" + +#: ../../blog/docs/spec.md:229 +msgid "Create serializers for:" +msgstr "" + +#: ../../blog/docs/spec.md:230 +msgid "Blogpost entity" +msgstr "" + +#: ../../blog/docs/spec.md:231 +msgid "Blogpost comment" +msgstr "" + +#: ../../blog/docs/spec.md:232 +msgid "User" +msgstr "" + +#: ../../blog/docs/spec.md:236 +msgid "Challenge: API views" +msgstr "" + +#: ../../blog/docs/spec.md:239 +msgid "" +"All blog-site functionality are to be reflected via REST API. It's ok to " +"use *pre-defined* user as a post's author for now." +msgstr "" + +#: ../../blog/docs/spec.md:244 +msgid "Challenge: Authentication and Permissions" +msgstr "" + +#: ../../blog/docs/spec.md:247 +msgid "Implement REST authentication system." +msgstr "" + +#: ../../blog/docs/spec.md:248 +msgid "Only account owner can change their account data." +msgstr "" + +#: ../../blog/docs/spec.md:249 +msgid "Only authenticated users can create posts and comments." +msgstr "" + +#: ../../blog/docs/spec.md:250 +msgid "Only authors can change their posts." +msgstr "" + +#: ../../src/appx/code_edit.txt:5 +msgid "Code Editors" +msgstr "" + +#: ../../src/appx/code_edit.txt:7 +msgid "" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:3 +msgid "Convenience Store Challenge" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:5 +msgid "" +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." +msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " "попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " "це буде складним завданням застосувати сучасний підхід до цього" " місця та реорганізувати процеси. На щастя, ви розробник " "Python, який знає, як працювати з різними доходами та результатами даних. " "Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" " деякі примітки, щоб розділити весь проект на окремі частини для " "поетапної реалізації." + +#: ../../problem-sets/src/conv_store/challenge.rst:14 +msgid "Your notes are here," +msgstr "Ваші нотатки тут," + +#: ../../problem-sets/src/conv_store/challenge.rst:18 +msgid "Products and Carts" +msgstr "Товари та кошик" + +#: ../../problem-sets/src/conv_store/challenge.rst:20 +msgid "" +"It's a good idea to with basics - the objects you're going to work with. " +"At stage one the main goal is to implement data models - classes to work " +"around data in the future." +msgstr "" +"Це гарна ідея з основами - об'єктами, з якими ви збираєтеся працювати. " +"На першому етапі головною метою є реалізація моделей даних - класів для " +"роботи з даними в майбутньому." + +#: ../../problem-sets/src/conv_store/challenge.rst:25 +msgid "Product" +msgstr "Товар" + +#: ../../problem-sets/src/conv_store/challenge.rst:27 +msgid "This class represents goods available to purchase in the store." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: ../../problem-sets/src/conv_store/challenge.rst:29 +msgid "Each product instance should have next attributes:" +msgstr "Кожен екземпляр продукту повинен мати такі атрибути:" + +#: ../../problem-sets/src/conv_store/challenge.rst:31 +msgid "``name`` - a product title (e.g. \"apple\", \"juice\")" +msgstr "``name`` - назва товару (прик. \"apple\", \"juice\")" + +#: ../../problem-sets/src/conv_store/challenge.rst:32 +msgid "``price`` - a price for a single product unit (e.g. 3655, 500, 12999)" +msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" + +#: ../../problem-sets/src/conv_store/challenge.rst:33 +msgid "``unit`` - a size of a single product's unit (e.g. 1, 0.500, 12)" +msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: ../../problem-sets/src/conv_store/challenge.rst:35 +msgid "" +"``Product`` class should implement ``get_total`` method to calculate " +"price for a specified quantity of a product. Quantity arguments is " +"something you can think about as \"total number of product's units\". It " +"is of a numeric type (``int`` or ``float``) and it may be omitted. In " +"case argument hasn't been passed just consider it is equal to unit " +"attribute value." +msgstr "" +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"ціни для визначеної кількості товару. Аргументи кількості - це те, " +"що ви можете розглядати як \"загальну кількість одиниць продукту\". " +"Він має числовий тип (``int`` або ``float``), і його можна опустити. " +"У випадку, якщо аргумент не було передано, просто вважайте, що він дорівнює " +"одиничному значенню атрибута." + +#: ../../problem-sets/src/conv_store/challenge.rst:43 +#: ../../problem-sets/src/conv_store/challenge.rst:68 +#: ../../problem-sets/src/conv_store/challenge.rst:112 +#: ../../problem-sets/src/conv_store/challenge.rst:175 +#: ../../problem-sets/src/conv_store/challenge.rst:210 +msgid "Test Cases" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:54 +msgid "Shopping Cart" +msgstr "Кошик для покупок" + +#: ../../problem-sets/src/conv_store/challenge.rst:56 +msgid "" +"This class represents the container for the products. It's main " +"responsibility is to store information about the purchases and their " +"amount (quantities)." +msgstr "" +"Цей клас представляє контейнер для продуктів. Його основна відповідальність -" +" зберігати інформацію про покупки та їх кількість." + +#: ../../problem-sets/src/conv_store/challenge.rst:59 +msgid "" +"Each cart instance should store data about ``Product`` objects in it and " +"corresponding quantity value for each individual product." +msgstr "" +"Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " +"ньому та відповідне значення кількості для кожного окремого продукту." + +#: ../../problem-sets/src/conv_store/challenge.rst:61 +msgid "" +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." +msgstr "" +"``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " +"вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " +"пропущено, просто використовує натомість значення ``Product.unit``." + +#: ../../problem-sets/src/conv_store/challenge.rst:64 +msgid "" +"``ShoppingCart`` should implement ``get_total`` method to calculate the " +"total price for the entire cart contents." +msgstr "" +"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення загальної" +" ціни всього вмісту кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:83 +msgid "Initialization, Representation and Type Casting" +msgstr "Ініціалізація, представлення та приведення типів" + +#: ../../problem-sets/src/conv_store/challenge.rst:85 +msgid "" +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." +msgstr "" +"Важко встановлювати властивості одну за одною, також неінформативно" +"отримувати представлення рядків об'єктів за замовчуванням. Настав час це " +"виправити." + +#: ../../problem-sets/src/conv_store/challenge.rst:88 +msgid "``Product`` should be initialized with all required data, no defaults." +msgstr "" +"``Продукт`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." + +#: ../../problem-sets/src/conv_store/challenge.rst:89 +msgid "" +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." +msgstr "" +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." + +#: ../../problem-sets/src/conv_store/challenge.rst:91 +msgid "Provide a human readable representations. For example:" +msgstr "Надайте представлення, зрозумілі людині. Наприклад:" + +#: ../../problem-sets/src/conv_store/challenge.rst:93 +msgid "``Product('juice', 35.66, 1)``" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:94 +msgid "````" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:96 +msgid "" +"While casting product instance to ``str`` type it should be equal to its " +"``name`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``str`` він повинен " +"дорівнювати значенню атрибута ``name``." + +#: ../../problem-sets/src/conv_store/challenge.rst:98 +msgid "" +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." + +#: ../../problem-sets/src/conv_store/challenge.rst:100 +msgid "" +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." +msgstr "" +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." + +#: ../../problem-sets/src/conv_store/challenge.rst:102 +msgid "" +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." +msgstr "" +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:105 +msgid "Implement equality operator support for your objects:" +msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" + +#: ../../problem-sets/src/conv_store/challenge.rst:107 +msgid "consider products equal if all their properties are the same" +msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:108 +msgid "" +"consider carts equal if products and corresponding quantities are the same" +msgstr "" +"вважати кошики рівними, якщо продукти та відповідна кількість однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:134 +msgid "Payment Processors" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:136 +msgid "" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:139 +msgid "cart validation - it should not be empty or already purchased" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:140 +msgid "payment validation - various payment types requires various validations" +msgstr "" +"підтвердження платежу - різні типи платежу вимагають різних перевірок" + +#: ../../problem-sets/src/conv_store/challenge.rst:141 +msgid "purchasing the cart" +msgstr "купівля кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:143 +msgid "" +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." +msgstr "" +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." + +#: ../../problem-sets/src/conv_store/challenge.rst:146 +msgid "" +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." +msgstr "" +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість " "захищеною, оскільки до неї не слід звертатися поза " +"екземпляром картки." + +#: ../../problem-sets/src/conv_store/challenge.rst:149 +msgid "" +"Implement ``PaymentValidator`` class with ``is_valid`` that takes no " +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." +msgstr "" +"Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " +"аргументів і повертає значення логічного типу. Це абстрактний клас " +"для майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:152 +msgid "" +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." +msgstr "" +"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який " +"бере об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний " +"клас для майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:155 +msgid "" +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." +msgstr "" +"Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " +"цього класу вважаються завжди дійсними." + +#: ../../problem-sets/src/conv_store/challenge.rst:157 +msgid "Inherit ``CodeValidator`` from the base validator." +msgstr "Успадкувати ``CodeValidator`` від основного валідатора." + +#: ../../problem-sets/src/conv_store/challenge.rst:159 +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." + +#: ../../problem-sets/src/conv_store/challenge.rst:160 +msgid "" +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." +msgstr "" +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." + +#: ../../problem-sets/src/conv_store/challenge.rst:164 +msgid "" +"Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." +msgstr "" +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." + +#: ../../problem-sets/src/conv_store/challenge.rst:169 +msgid "" +"Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing card payment...\" and \"Security code: {code}\" should be " +"printed out." +msgstr "" +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка платежу карткою...\" і \"Код безпеки : {code}\" слід " +"роздрукувати." + +#: ../../problem-sets/src/conv_store/challenge.rst:189 +msgid "More Enhancements for Shopping Carts" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:191 +msgid "Make your ``ShoppingCart`` an actual container" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:193 +msgid "" +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." +msgstr "" +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." + +#: ../../problem-sets/src/conv_store/challenge.rst:195 +msgid "" +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." +msgstr "" +"Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " +"товар та відповідну кількість " +"(type hint: ``Tuple[Product, Union[int, " "float]] ``)." + +#: ../../problem-sets/src/conv_store/challenge.rst:199 +msgid "" +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." +msgstr "" +"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати примірник" +" продукту та відповідну кількість для кожної ітерації." + +#: ../../problem-sets/src/conv_store/challenge.rst:201 +msgid "" +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." +msgstr "" +"Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " +"кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " +"натомість відповідне значення кількості." + +#: ../../problem-sets/src/conv_store/challenge.rst:204 +msgid "" +"Implement ``remove_product`` method to completely remove some product " +"from the cart." +msgstr "" +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти " +"з кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:206 +msgid "" +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." +msgstr "" +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:235 +msgid "Testing Software" +msgstr "Тестування програмного забезпечення" + +#: ../../problem-sets/src/conv_store/challenge.rst:237 +msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." +msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." + +#: ../../problem-sets/src/conv_store/challenge.rst:239 +msgid "Tests should be located inside of \"tests\" directory." +msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." + +#: ../../problem-sets/src/conv_store/challenge.rst:240 +msgid "``pytest`` and ``coverage`` libraries will be used for testing." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." + +#: ../../problem-sets/src/conv_store/challenge.rst:241 +#, python-format +msgid "At least 50% coverage." +msgstr "Принаймні 50% покриття." + +#: ../../problem-sets/src/conv_store/challenge.rst:242 +msgid "Project dependencies are to be updated." +msgstr "Залежності проекту потрібно оновити." + +#: ../../src/appx/env_path.txt:5 +msgid "Issue - System Environment PATH" +msgstr "" + +#: ../../src/appx/precedence.txt:8 +msgid "Operator Precedence" +msgstr "" + +#: ../../src/appx/precedence.txt:10 +msgid "" +"The following table summarizes the operator precedence in Python, from " +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." +msgstr "" + +#: ../../src/appx/precedence.txt:16 +msgid "Operator" +msgstr "" + +#: ../../src/appx/precedence.txt:16 +msgid "Description" +msgstr "" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" +msgstr "" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" +msgstr "" + +#: ../../src/appx/precedence.txt:23 +msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" +msgstr "" + +#: ../../src/appx/precedence.txt:23 +msgid "Subscription, slicing, call, attribute reference" +msgstr "" + +#: ../../src/appx/precedence.txt:28 +msgid "``await x``" +msgstr "" + +#: ../../src/appx/precedence.txt:28 +msgid "Await expression" +msgstr "" + +#: ../../src/appx/precedence.txt:30 +msgid "``**``" +msgstr "" + +#: ../../src/appx/precedence.txt:30 +msgid "Exponentiation [#]_" +msgstr "" + +#: ../../src/appx/precedence.txt:32 +msgid "``+x``, ``-x``, ``~x``" +msgstr "" + +#: ../../src/appx/precedence.txt:32 +msgid "Positive, negative, bitwise NOT" +msgstr "" + +#: ../../src/appx/precedence.txt:34 +msgid "``*``, ``@``, ``/``, ``//``, ``%``" +msgstr "" + +#: ../../src/appx/precedence.txt:34 +msgid "" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" +msgstr "" + +#: ../../src/appx/precedence.txt:37 +msgid "``+``, ``-``" +msgstr "" + +#: ../../src/appx/precedence.txt:37 +msgid "Addition and subtraction" +msgstr "" + +#: ../../src/appx/precedence.txt:39 +msgid "``<<``, ``>>``" +msgstr "" + +#: ../../src/appx/precedence.txt:39 +msgid "Shifts" +msgstr "" + +#: ../../src/appx/precedence.txt:41 +msgid "``&``" +msgstr "" + +#: ../../src/appx/precedence.txt:41 +msgid "Bitwise AND" +msgstr "" + +#: ../../src/appx/precedence.txt:43 +msgid "``^``" +msgstr "" + +#: ../../src/appx/precedence.txt:43 +msgid "Bitwise XOR" +msgstr "" + +#: ../../src/appx/precedence.txt:45 +msgid "``|``" +msgstr "" + +#: ../../src/appx/precedence.txt:45 +msgid "Bitwise OR" +msgstr "" + +#: ../../src/appx/precedence.txt:47 +msgid "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" +msgstr "" + +#: ../../src/appx/precedence.txt:47 +msgid "Comparisons, including membership tests and identity tests" +msgstr "" + +#: ../../src/appx/precedence.txt:52 +msgid "``not x``" +msgstr "" + +#: ../../src/appx/precedence.txt:52 +msgid "Boolean NOT" +msgstr "" + +#: ../../src/appx/precedence.txt:54 +msgid "``and``" +msgstr "" + +#: ../../src/appx/precedence.txt:54 +msgid "Boolean AND" +msgstr "" + +#: ../../src/appx/precedence.txt:56 +msgid "``or``" +msgstr "" + +#: ../../src/appx/precedence.txt:56 +msgid "Boolean OR" +msgstr "" + +#: ../../src/appx/precedence.txt:58 +msgid "``if - else``" +msgstr "" + +#: ../../src/appx/precedence.txt:58 +msgid "Conditional expression (ternary ``if``)" +msgstr "" + +#: ../../src/appx/precedence.txt:60 +msgid "``lambda``" +msgstr "" + +#: ../../src/appx/precedence.txt:60 +msgid "Lambda expression" +msgstr "" + +#: ../../src/appx/precedence.txt:62 +msgid "``=``, ``:=``" +msgstr "" + +#: ../../src/appx/precedence.txt:62 +msgid "Assignment expression" +msgstr "" + +#: ../../src/appx/precedence.txt:65 +msgid "" +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." +msgstr "" + +#: ../../src/appx/precedence.txt:67 +msgid "" +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." +msgstr "" + +#: ../../src/appx/printf.txt:7 +msgid "``printf-style`` String Formatting" +msgstr "" + +#: ../../src/appx/printf.txt:9 +msgid "" +"String objects have one unique built-in operation: the ``%`` operator " +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" + +#: ../../src/appx/printf.txt:16 +msgid "The conversion flag characters are:" +msgstr "" + +#: ../../src/appx/printf.txt:19 +msgid "Flag" +msgstr "" + +#: ../../src/appx/printf.txt:19 ../../src/appx/printf.txt:37 +msgid "Meaning" +msgstr "" + +#: ../../src/appx/printf.txt:21 +msgid "``#``" +msgstr "" + +#: ../../src/appx/printf.txt:21 +msgid "The value conversion will use the \"alternative form\"" +msgstr "" + +#: ../../src/appx/printf.txt:23 +msgid "``0``" +msgstr "" + +#: ../../src/appx/printf.txt:23 +msgid "The conversion will be zero padded for numeric values" +msgstr "" + +#: ../../src/appx/printf.txt:25 +msgid "``'-'``" +msgstr "" + +#: ../../src/appx/printf.txt:25 +msgid "" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" +msgstr "" + +#: ../../src/appx/printf.txt:28 +msgid "``' '``" +msgstr "" + +#: ../../src/appx/printf.txt:28 +msgid "(a space) A blank should be left before a positive number" +msgstr "" + +#: ../../src/appx/printf.txt:30 +msgid "``'+'``" +msgstr "" + +#: ../../src/appx/printf.txt:30 +msgid "" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" +msgstr "" + +#: ../../src/appx/printf.txt:34 +msgid "The conversion types are:" +msgstr "" + +#: ../../src/appx/printf.txt:37 +msgid "Conversion" +msgstr "" + +#: ../../src/appx/printf.txt:39 +msgid "``'d'``" +msgstr "" + +#: ../../src/appx/printf.txt:39 ../../src/appx/printf.txt:41 +msgid "Signed integer decimal" +msgstr "" + +#: ../../src/appx/printf.txt:41 +msgid "``'i'``" +msgstr "" + +#: ../../src/appx/printf.txt:43 +msgid "``'o'``" +msgstr "" + +#: ../../src/appx/printf.txt:43 +msgid "Signed octal value" +msgstr "" + +#: ../../src/appx/printf.txt:45 +msgid "``'u'``" +msgstr "" + +#: ../../src/appx/printf.txt:45 +msgid "Obsolete type - it is identical to ``'d'``" +msgstr "" + +#: ../../src/appx/printf.txt:47 +msgid "``'x'``" +msgstr "" + +#: ../../src/appx/printf.txt:47 +msgid "Signed hexadecimal (lowercase)" +msgstr "" + +#: ../../src/appx/printf.txt:49 +msgid "``'X'``" +msgstr "" + +#: ../../src/appx/printf.txt:49 +msgid "Signed hexadecimal (uppercase)" +msgstr "" + +#: ../../src/appx/printf.txt:51 +msgid "``'e'``" +msgstr "" + +#: ../../src/appx/printf.txt:51 +msgid "Floating point exponential format (lowercase)" +msgstr "" + +#: ../../src/appx/printf.txt:53 +msgid "``'E'``" +msgstr "" + +#: ../../src/appx/printf.txt:53 +msgid "Floating point exponential format (uppercase)" +msgstr "" + +#: ../../src/appx/printf.txt:55 +msgid "``'f'`` ``'F'``" +msgstr "" + +#: ../../src/appx/printf.txt:55 +msgid "Floating point decimal format" +msgstr "" + +#: ../../src/appx/printf.txt:58 +msgid "``'g'``" +msgstr "" + +#: ../../src/appx/printf.txt:61 +msgid "``'G'``" +msgstr "" + +#: ../../src/appx/printf.txt:58 +msgid "" +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." +msgstr "" + +#: ../../src/appx/printf.txt:63 +msgid "``'c'``" +msgstr "" + +#: ../../src/appx/printf.txt:63 +msgid "Single character (accepts integer or single character string)" +msgstr "" + +#: ../../src/appx/printf.txt:65 +msgid "``'r'``" +msgstr "" + +#: ../../src/appx/printf.txt:65 +msgid "Converts any Python object using ``repr()``" +msgstr "" + +#: ../../src/appx/printf.txt:67 +msgid "``'s'``" +msgstr "" + +#: ../../src/appx/printf.txt:67 +msgid "Converts any Python object using ``str()``" +msgstr "" + +#: ../../src/appx/printf.txt:69 +msgid "``'a'``" +msgstr "" + +#: ../../src/appx/printf.txt:69 +msgid "Converts any Python object using ``ascii()``" +msgstr "" + +#: ../../src/appx/printf.txt:71 +msgid "``'%'``" +msgstr "" + +#: ../../src/appx/printf.txt:71 +msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgstr "" + +#: ../../src/appx/software_list.md:1 +msgid "Software List" +msgstr "" + +#: ../../src/appx/software_list.md:4 +msgid "7zip" +msgstr "" + +#: ../../src/appx/software_list.md:7 +msgid "**7-Zip** is **free software** with **open source**." +msgstr "" + +#: ../../src/appx/software_list.md:9 +msgid "" +"High compression ratio in [7z format](https://7-zip.org/7z.html) with " +"**LZMA** and **LZMA2** compression" +msgstr "" + +#: ../../src/appx/software_list.md:11 +msgid "Supported formats:" +msgstr "" + +#: ../../src/appx/software_list.md:12 +msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" +msgstr "" + +#: ../../src/appx/software_list.md:13 +msgid "" +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +msgstr "" + +#: ../../src/appx/software_list.md:16 +msgid "Self-extracting capability for 7z format" +msgstr "" + +#: ../../src/appx/software_list.md:17 +msgid "Integration with Windows Shell" +msgstr "" + +#: ../../src/appx/software_list.md:19 +msgid "https://7-zip.org/" +msgstr "" + +#: ../../src/appx/software_list.md:21 +msgid "cygwin" +msgstr "" + +#: ../../src/appx/software_list.md:24 +msgid "" +"It is a large collection of GNU and Open Source tools which provide " +"functionality similar to a [Linux " +"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " +"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " +"functionality." +msgstr "" + +#: ../../src/appx/software_list.md:30 +msgid "**Cygwin is not**:" +msgstr "" + +#: ../../src/appx/software_list.md:32 +msgid "" +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." +msgstr "" + +#: ../../src/appx/software_list.md:34 +msgid "" +"a way to magically make native Windows apps aware of UNIX® functionality " +"like `signals`, `ptys` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." +msgstr "" + +#: ../../src/appx/software_list.md:38 +msgid "https://www.cygwin.com/" +msgstr "" + +#: ../../src/appx/software_list.md:40 +msgid "git[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:43 +msgid "" +"Git is a [free and open source](https://git-scm.com/about/free-and-open-" +"source) distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." +msgstr "" + +#: ../../src/appx/software_list.md:47 +msgid "https://git-scm.com/" +msgstr "" + +#: ../../src/appx/software_list.md:49 +msgid "Docker" +msgstr "" + +#: ../../src/appx/software_list.md:52 +msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." +msgstr "" + +#: ../../src/appx/software_list.md:54 +msgid "" +"Docker helps developers bring their ideas to life by conquering the " +"complexity of app development. We simplify and accelerate development " +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" + +#: ../../src/appx/software_list.md:60 +msgid "https://www.docker.com/" +msgstr "" + +#: ../../src/appx/software_list.md:62 +msgid "PostgreSQL[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:65 +msgid "" +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." +msgstr "" + +#: ../../src/appx/software_list.md:69 +msgid "https://www.postgresql.org/" +msgstr "" + +#: ../../src/appx/software_list.md:71 +msgid "psql[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:74 +msgid "" +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." +msgstr "" + +#: ../../src/appx/software_list.md:80 +msgid "" +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for `postgresql-client` package." +msgstr "" + +#: ../../src/appx/software_list.md:83 +msgid "https://www.postgresql.org/docs/current/app-psql.html" +msgstr "" + +#: ../../src/appx/software_list.md:85 +msgid "pgAdmin" +msgstr "" + +#: ../../src/appx/software_list.md:88 +msgid "" +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." +msgstr "" + +#: ../../src/appx/software_list.md:92 +msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." +msgstr "" + +#: ../../src/appx/software_list.md:94 +msgid "https://pgadmin.org/" +msgstr "" + +#: ../../src/appx/software_list.md:96 +msgid "SQLite[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:99 +msgid "" +"SQLite is a C-language library that implements a " +"[small](https://sqlite.org/footprint.html), " +"[fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-" +"reliability](https://sqlite.org/hirely.html), [full-" +"featured](https://sqlite.org/fullsql.html), SQL database engine." +msgstr "" + +#: ../../src/appx/software_list.md:106 +msgid "https://sqlite.org/" +msgstr "" + +#: ../../src/appx/software_list.md:109 +msgid "available for installation as a cygwin package" +msgstr "" + From 2e423fe4dace38bd98585a5a297bc8d73750b715 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 4 Apr 2023 16:25:34 +0300 Subject: [PATCH 058/689] Updated pages deployment workflow --- .github/workflows/deploy_pages.yml | 4 +++- src/_locales/ua/LC_MESSAGES/appx.po | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 930ee80fe..93ebaa607 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -31,11 +31,13 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + submodules: true - name: Setup Python uses: actions/setup-python@v2 - name: Install dependencies run: | - pip install sphinx sphinx_rtd_theme myst_parser + pip install -r requirements.txt - name: Build documents run: | LANGUAGE=en make html diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 68c519a02..1bc659b75 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -468,7 +468,16 @@ msgid "" "After some time the scope of works and timelines were discussed and wrote" " some notes to split the entire project into individual pieces to " "implement step-by-step." -msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " "попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " "це буде складним завданням застосувати сучасний підхід до цього" " місця та реорганізувати процеси. На щастя, ви розробник " "Python, який знає, як працювати з різними доходами та результатами даних. " "Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" " деякі примітки, щоб розділити весь проект на окремі частини для " "поетапної реалізації." +msgstr "" +"Місцевий магазин має проблеми з системою реєстрації платежів. Власник " +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " +"це буде складним завданням застосувати сучасний підхід до цього " +"місця та реорганізувати процеси. На щастя, ви розробник " +"Python, який знає, як працювати з різними доходами та результатами даних. " +"Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" +" деякі примітки, щоб розділити весь проект на окремі частини для " +"поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -662,17 +671,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:134 msgid "Payment Processors" -msgstr "" +msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:136 msgid "" "The owner asked you to implement a flexible payment system. Purchasing " "the shopping card consists of several steps:" msgstr "" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:139 msgid "cart validation - it should not be empty or already purchased" -msgstr "" +msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" #: ../../problem-sets/src/conv_store/challenge.rst:140 msgid "payment validation - various payment types requires various validations" @@ -774,11 +785,11 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:189 msgid "More Enhancements for Shopping Carts" -msgstr "" +msgstr "Більше покращень для кошиків для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:191 msgid "Make your ``ShoppingCart`` an actual container" -msgstr "" +msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" #: ../../problem-sets/src/conv_store/challenge.rst:193 msgid "" From 32d5651fdb8616a4baf0e29dfaca5373d62ac152 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 5 Apr 2023 16:21:00 +0300 Subject: [PATCH 059/689] Updated problem-sets submodule Updated translations Signed-off-by: Serhii Horodilov --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 336 +++++++++++++++++----------- 2 files changed, 204 insertions(+), 134 deletions(-) diff --git a/problem-sets b/problem-sets index d73d389d9..d138fe5b0 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit d73d389d9b78f0dbbbf7cfe7a39d7bfab193718c +Subproject commit d138fe5b02e31d316e4360c9c34421d779d59aff diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 1bc659b75..7f20885cb 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 15:54+0300\n" +"POT-Creation-Date: 2023-04-05 16:17+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"Last-Translator: Serhii Horodilov \n" "Language: ua\n" "Language-Team: ua \n" "MIME-Version: 1.0\n" @@ -470,14 +470,14 @@ msgid "" "implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " -"це буде складним завданням застосувати сучасний підхід до цього " -"місця та реорганізувати процеси. На щастя, ви розробник " -"Python, який знає, як працювати з різними доходами та результатами даних. " -"Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" -" деякі примітки, щоб розділити весь проект на окремі частини для " -"поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -488,14 +488,15 @@ msgid "Products and Carts" msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 +#, fuzzy msgid "" -"It's a good idea to with basics - the objects you're going to work with. " -"At stage one the main goal is to implement data models - classes to work " -"around data in the future." +"It's a good idea to start with basics - the objects you're going to work " +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" -"Це гарна ідея з основами - об'єктами, з якими ви збираєтеся працювати. " -"На першому етапі головною метою є реалізація моделей даних - класів для " -"роботи з даними в майбутньому." +"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. " +"На першому етапі головною метою є впровадження моделей даних - класів для" +" роботи з даними в майбутньому." #: ../../problem-sets/src/conv_store/challenge.rst:25 msgid "Product" @@ -523,42 +524,113 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"``Product`` class should implement ``get_total`` method to calculate " -"price for a specified quantity of a product. Quantity arguments is " -"something you can think about as \"total number of product's units\". It " -"is of a numeric type (``int`` or ``float``) and it may be omitted. In " -"case argument hasn't been passed just consider it is equal to unit " -"attribute value." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." +msgstr "" +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." + +#: ../../problem-sets/src/conv_store/challenge.rst:39 +#, fuzzy +msgid "" +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" "Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"ціни для визначеної кількості товару. Аргументи кількості - це те, " -"що ви можете розглядати як \"загальну кількість одиниць продукту\". " -"Він має числовий тип (``int`` або ``float``), і його можна опустити. " -"У випадку, якщо аргумент не було передано, просто вважайте, що він дорівнює " -"одиничному значенню атрибута." +"загальної ціни на вказану кількість продукту для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу " +"(``int`` або ``float``). Якщо аргумент кількості пропущено, просто " +"використовуйте значення атрибута ``unit``." -#: ../../problem-sets/src/conv_store/challenge.rst:43 -#: ../../problem-sets/src/conv_store/challenge.rst:68 -#: ../../problem-sets/src/conv_store/challenge.rst:112 -#: ../../problem-sets/src/conv_store/challenge.rst:175 -#: ../../problem-sets/src/conv_store/challenge.rst:210 -msgid "Test Cases" +#: ../../problem-sets/src/conv_store/challenge.rst:46 +msgid "Code notes" +msgstr "" + +#: conv_store.models.Product:1 of +msgid "Product model implementation" +msgstr "Реалізація моделі товару" + +#: conv_store.models.Product:3 of +#, fuzzy +msgid "Instances of this class represent a product available for purchase." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: conv_store.models.Product of +msgid "Variables" +msgstr "Змінні" + +#: conv_store.models.Product:5 of +msgid "the name of a product" +msgstr "назва товару" + +#: conv_store.models.Product:7 of +#, fuzzy +msgid "the price for a single product unit" +msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" + +#: conv_store.models.Product:9 of +#, fuzzy +msgid "the size of a single product unit" +msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: conv_store.models.Product.get_total:1 of +msgid "Return the total price for a specified amount of a product" +msgstr "Повертає загальну ціну за вказану кількість товару" + +#: conv_store.models.Product.get_total:3 of +msgid "" +"If the quantity argument is omitted, unit attribute value should be used " +"instead." msgstr "" +"Якщо аргумент кількості пропущено, замість нього слід використовувати " +"значення атрибута одиниці." + +#: conv_store.models.Product.get_total of +msgid "Parameters" +msgstr "Параметри" + +#: conv_store.models.Product.get_total:6 of +msgid "a quantity to purchase, defaults to None" +msgstr "кількість для покупки, за замовчуванням None" + +#: conv_store.models.Product.get_total of +msgid "Returns" +msgstr "Повертає" + +#: conv_store.models.Product.get_total:9 of +msgid "total price for a specified amount of a product" +msgstr "загальна ціна за вказану кількість товару" + +#: conv_store.models.Product.get_total of +msgid "Return type" +msgstr "Тип повернення" -#: ../../problem-sets/src/conv_store/challenge.rst:54 +#: ../../problem-sets/src/conv_store/challenge.rst:51 +#: ../../problem-sets/src/conv_store/challenge.rst:78 +#: ../../problem-sets/src/conv_store/challenge.rst:122 +#: ../../problem-sets/src/conv_store/challenge.rst:185 +#: ../../problem-sets/src/conv_store/challenge.rst:220 +msgid "Test cases" +msgstr "Тестові приклади" + +#: ../../problem-sets/src/conv_store/challenge.rst:63 msgid "Shopping Cart" msgstr "Кошик для покупок" -#: ../../problem-sets/src/conv_store/challenge.rst:56 +#: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " "responsibility is to store information about the purchases and their " "amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність -" -" зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." -#: ../../problem-sets/src/conv_store/challenge.rst:59 +#: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" "Each cart instance should store data about ``Product`` objects in it and " "corresponding quantity value for each individual product." @@ -566,7 +638,7 @@ msgstr "" "Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " "ньому та відповідне значення кількості для кожного окремого продукту." -#: ../../problem-sets/src/conv_store/challenge.rst:61 +#: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" "``ShoppingCart`` should implement ``add_product`` method to put a " "specified quantity into a cart. ``quantity`` argument is optional, if " @@ -576,54 +648,54 @@ msgstr "" "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " "пропущено, просто використовує натомість значення ``Product.unit``." -#: ../../problem-sets/src/conv_store/challenge.rst:64 +#: ../../problem-sets/src/conv_store/challenge.rst:73 msgid "" "``ShoppingCart`` should implement ``get_total`` method to calculate the " "total price for the entire cart contents." msgstr "" -"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення загальної" -" ціни всього вмісту кошика." +"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " +"загальної ціни всього вмісту кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:83 +#: ../../problem-sets/src/conv_store/challenge.rst:93 msgid "Initialization, Representation and Type Casting" msgstr "Ініціалізація, представлення та приведення типів" -#: ../../problem-sets/src/conv_store/challenge.rst:85 +#: ../../problem-sets/src/conv_store/challenge.rst:95 msgid "" "It's difficult to set properties one-by-one, also it's not informative to" " get default objects string representations. It's time to fix this." msgstr "" -"Важко встановлювати властивості одну за одною, також неінформативно" -"отримувати представлення рядків об'єктів за замовчуванням. Настав час це " -"виправити." +"Важко встановлювати властивості одну за одною, також " +"неінформативноотримувати представлення рядків об'єктів за замовчуванням. " +"Настав час це виправити." -#: ../../problem-sets/src/conv_store/challenge.rst:88 +#: ../../problem-sets/src/conv_store/challenge.rst:98 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" "``Продукт`` має бути ініціалізований усіма необхідними даними, без " "значень за замовчуванням." -#: ../../problem-sets/src/conv_store/challenge.rst:89 +#: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" "Apply ``ShoppingCart.__init__`` to separate products and quantities " "between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." -#: ../../problem-sets/src/conv_store/challenge.rst:91 +#: ../../problem-sets/src/conv_store/challenge.rst:101 msgid "Provide a human readable representations. For example:" msgstr "Надайте представлення, зрозумілі людині. Наприклад:" -#: ../../problem-sets/src/conv_store/challenge.rst:93 +#: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "``Product('juice', 35.66, 1)``" msgstr "" -#: ../../problem-sets/src/conv_store/challenge.rst:94 +#: ../../problem-sets/src/conv_store/challenge.rst:104 msgid "````" msgstr "" -#: ../../problem-sets/src/conv_store/challenge.rst:96 +#: ../../problem-sets/src/conv_store/challenge.rst:106 msgid "" "While casting product instance to ``str`` type it should be equal to its " "``name`` attribute value." @@ -631,49 +703,48 @@ msgstr "" "Під час приведення екземпляра продукту до типу ``str`` він повинен " "дорівнювати значенню атрибута ``name``." -#: ../../problem-sets/src/conv_store/challenge.rst:98 +#: ../../problem-sets/src/conv_store/challenge.rst:108 msgid "" "While casting product instance to ``float`` type it should be equal to " "its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." -#: ../../problem-sets/src/conv_store/challenge.rst:100 +#: ../../problem-sets/src/conv_store/challenge.rst:110 msgid "" "While casting shopping cart instance to ``float`` type it should be equal" " to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." -#: ../../problem-sets/src/conv_store/challenge.rst:102 +#: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" "While casting shopping cart instance to ``bool`` consider it ``True`` if " "at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:105 +#: ../../problem-sets/src/conv_store/challenge.rst:115 msgid "Implement equality operator support for your objects:" msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" -#: ../../problem-sets/src/conv_store/challenge.rst:107 +#: ../../problem-sets/src/conv_store/challenge.rst:117 msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:108 -msgid "" -"consider carts equal if products and corresponding quantities are the same" -msgstr "" -"вважати кошики рівними, якщо продукти та відповідна кількість однакові" +#: ../../problem-sets/src/conv_store/challenge.rst:118 +msgid "consider carts equal if products and corresponding quantities are the same" +msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:134 +#: ../../problem-sets/src/conv_store/challenge.rst:144 msgid "Payment Processors" msgstr "Опрацювання платежів" -#: ../../problem-sets/src/conv_store/challenge.rst:136 +#: ../../problem-sets/src/conv_store/challenge.rst:146 msgid "" "The owner asked you to implement a flexible payment system. Purchasing " "the shopping card consists of several steps:" @@ -681,20 +752,19 @@ msgstr "" "Власник попросив вас запровадити гнучку платіжну систему. Придбання " "картки покупок складається з кількох кроків:" -#: ../../problem-sets/src/conv_store/challenge.rst:139 +#: ../../problem-sets/src/conv_store/challenge.rst:149 msgid "cart validation - it should not be empty or already purchased" msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" -#: ../../problem-sets/src/conv_store/challenge.rst:140 +#: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "payment validation - various payment types requires various validations" -msgstr "" -"підтвердження платежу - різні типи платежу вимагають різних перевірок" +msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" -#: ../../problem-sets/src/conv_store/challenge.rst:141 +#: ../../problem-sets/src/conv_store/challenge.rst:151 msgid "purchasing the cart" msgstr "купівля кошика" -#: ../../problem-sets/src/conv_store/challenge.rst:143 +#: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "" "For now there are two payment types available in the store: cash and " "credit card, but they maybe extended at any time." @@ -702,37 +772,37 @@ msgstr "" "Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " "але їх можна продовжити в будь-який час." -#: ../../problem-sets/src/conv_store/challenge.rst:146 +#: ../../problem-sets/src/conv_store/challenge.rst:156 msgid "" "Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " "this property *protected*, since it should not be accessed outside the " "card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість " "захищеною, оскільки до неї не слід звертатися поза " +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість \" \"захищеною, оскільки до неї не слід звертатися поза " "екземпляром картки." -#: ../../problem-sets/src/conv_store/challenge.rst:149 +#: ../../problem-sets/src/conv_store/challenge.rst:159 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " "arguments and return a value of a boolean type. This is an abstract class" " for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " -"аргументів і повертає значення логічного типу. Це абстрактний клас " -"для майбутнього використання." +"аргументів і повертає значення логічного типу. Це абстрактний клас для " +"майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:152 +#: ../../problem-sets/src/conv_store/challenge.rst:162 msgid "" "Implement ``PaymentProcessor`` class with ``purchase`` method that takes " "a ``ShoppingCart`` object and returns nothing. This is an abstract class " "for the future usage." msgstr "" -"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який " -"бере об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний " -"клас для майбутнього використання." +"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " +"об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " +"майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:155 +#: ../../problem-sets/src/conv_store/challenge.rst:165 msgid "" "Inherit ``CashPaymentValidator`` from the base validator. The instances " "of this class are considered to be always valid." @@ -740,17 +810,15 @@ msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." -#: ../../problem-sets/src/conv_store/challenge.rst:157 +#: ../../problem-sets/src/conv_store/challenge.rst:167 msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." -#: ../../problem-sets/src/conv_store/challenge.rst:159 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +#: ../../problem-sets/src/conv_store/challenge.rst:169 +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." -#: ../../problem-sets/src/conv_store/challenge.rst:160 +#: ../../problem-sets/src/conv_store/challenge.rst:170 msgid "" "``is_valid`` method should ask a customer for a security code and check " "it against the stored value. In case codes are equal payment considered " @@ -759,65 +827,65 @@ msgstr "" "Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " "зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." -#: ../../problem-sets/src/conv_store/challenge.rst:164 +#: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " "\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" " printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." -#: ../../problem-sets/src/conv_store/challenge.rst:169 +#: ../../problem-sets/src/conv_store/challenge.rst:179 msgid "" "Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка платежу карткою...\" і \"Код безпеки : {code}\" слід " -"роздрукувати." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка платежу карткою...\" і \"Код безпеки :" +" {code}\" слід роздрукувати." -#: ../../problem-sets/src/conv_store/challenge.rst:189 +#: ../../problem-sets/src/conv_store/challenge.rst:199 msgid "More Enhancements for Shopping Carts" msgstr "Більше покращень для кошиків для покупок" -#: ../../problem-sets/src/conv_store/challenge.rst:191 +#: ../../problem-sets/src/conv_store/challenge.rst:201 msgid "Make your ``ShoppingCart`` an actual container" msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" -#: ../../problem-sets/src/conv_store/challenge.rst:193 +#: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "" "Implement ``len(cart_obj)`` and make it return the number of products in " "the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." -#: ../../problem-sets/src/conv_store/challenge.rst:195 +#: ../../problem-sets/src/conv_store/challenge.rst:205 msgid "" "Implement ``cart[...]`` behavior to take a ``tuple`` containing product " "and corresponding quantity (type hint: ``Tuple[Product, Union[int, " "float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " -"товар та відповідну кількість " -"(type hint: ``Tuple[Product, Union[int, " "float]] ``)." +"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, \" " +"\"float]] ``)." -#: ../../problem-sets/src/conv_store/challenge.rst:199 +#: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" "Make your ``ShoppingCart`` iterable - let it provide the product instance" " and corresponding quantity for each iteration." msgstr "" -"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати примірник" -" продукту та відповідну кількість для кожної ітерації." +"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " +"примірник продукту та відповідну кількість для кожної ітерації." -#: ../../problem-sets/src/conv_store/challenge.rst:201 +#: ../../problem-sets/src/conv_store/challenge.rst:211 msgid "" "Avoid products duplication. In case someone tries to put the product into" " a cart and this product already is present there, do not it for the " @@ -827,45 +895,44 @@ msgstr "" "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " "натомість відповідне значення кількості." -#: ../../problem-sets/src/conv_store/challenge.rst:204 +#: ../../problem-sets/src/conv_store/challenge.rst:214 msgid "" "Implement ``remove_product`` method to completely remove some product " "from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти " -"з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:206 +#: ../../problem-sets/src/conv_store/challenge.rst:216 msgid "" "Implement ``sub_product`` to decrease some product quantity. If quantity " "is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:235 +#: ../../problem-sets/src/conv_store/challenge.rst:245 msgid "Testing Software" msgstr "Тестування програмного забезпечення" -#: ../../problem-sets/src/conv_store/challenge.rst:237 +#: ../../problem-sets/src/conv_store/challenge.rst:247 msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." -#: ../../problem-sets/src/conv_store/challenge.rst:239 +#: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Tests should be located inside of \"tests\" directory." msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." -#: ../../problem-sets/src/conv_store/challenge.rst:240 +#: ../../problem-sets/src/conv_store/challenge.rst:250 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." -#: ../../problem-sets/src/conv_store/challenge.rst:241 +#: ../../problem-sets/src/conv_store/challenge.rst:251 #, python-format msgid "At least 50% coverage." msgstr "Принаймні 50% покриття." -#: ../../problem-sets/src/conv_store/challenge.rst:242 +#: ../../problem-sets/src/conv_store/challenge.rst:252 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." @@ -1454,3 +1521,6 @@ msgstr "" msgid "available for installation as a cygwin package" msgstr "" +#~ msgid "Test Cases" +#~ msgstr "" + From c1849b1a5bc7b2be794e4785b9d3b69dc2e32cf3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 6 Apr 2023 03:39:22 +0300 Subject: [PATCH 060/689] Relink submodules via SSH --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index f858bdca8..9442fc6e5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "problem-sets"] path = problem-sets - url = https://github.com/edu-python-course/problem-sets + url = git@github.com:edu-python-course/problem-sets [submodule "blog"] path = blog - url = https://github.com/edu-python-course/blog + url = git@github.com:edu-python-course/blog From cdf43d5b52d018c57e32614eb1c9ddf36150f931 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 6 Apr 2023 12:27:14 +0300 Subject: [PATCH 061/689] Updated translations: appx --- src/_locales/ua/LC_MESSAGES/appx.po | 515 ++++++++++++++-------------- 1 file changed, 252 insertions(+), 263 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 7f20885cb..73ca3a908 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -4,20 +4,22 @@ # Course package. # SERHII HORODILOV , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-05 16:17+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"POT-Creation-Date: 2023-04-06 12:11+0300\n" +"PO-Revision-Date: 2023-04-06 12:24+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: ua\n" "Language-Team: ua \n" +"Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../blog/docs/spec.md:2 msgid "Blog Project Specification" @@ -25,31 +27,32 @@ msgstr "" #: ../../blog/docs/spec.md:5 msgid "" -"As a developer you were asked to create a simple blog site. The goal is " -"to create a place on the Internet where users can share their stories to " -"public." +"As a developer you were asked to create a simple blog site. The goal is to " +"create a place on the Internet where users can share their stories to public." msgstr "" #: ../../blog/docs/spec.md:8 msgid "" -"This document applies requirements for the entire project step-by-step. " -"You will start from creating the appropriate URL dispatcher and " -"connecting a PostgreSQL database to store the data and will finish with " -"implementing REST API for the blog." +"This document applies requirements for the entire project step-by-step. You " +"will start from creating the appropriate URL dispatcher and connecting a " +"PostgreSQL database to store the data and will finish with implementing REST " +"API for the blog." msgstr "" #: ../../blog/docs/spec.md:13 msgid "" -"There are some boiler plates, that may be useful in your future work, but" -" you aren't forced to use them. It's on your choice." +"There are some boiler plates, that may be useful in your future work, but " +"you aren't forced to use them. It's on your choice." msgstr "" #: ../../blog/docs/spec.md:16 -msgid "[Starter template](https://github.com/edu-python-course/django-template)" +msgid "" +"[Starter template](https://github.com/edu-python-course/django-template)" msgstr "" #: ../../blog/docs/spec.md:17 -msgid "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +msgid "" +"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" msgstr "" #: ../../blog/docs/spec.md:20 @@ -58,15 +61,15 @@ msgstr "" #: ../../blog/docs/spec.md:23 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" #: ../../blog/docs/spec.md:29 msgid "" -"`/blogs/`: A site's homepage. This will contain a list of blogs available" -" via the django site." +"`/blogs/`: A site's homepage. This will contain a list of blogs available " +"via the django site." msgstr "" #: ../../blog/docs/spec.md:32 @@ -81,12 +84,13 @@ msgstr "" #: ../../blog/docs/spec.md:37 msgid "" -"`//`: A single blog post detail view. The URL contains dynamic part" -" in it. This will be used to fetch a single blogpost from the database." +"`//`: A single blog post detail view. The URL contains dynamic part in " +"it. This will be used to fetch a single blogpost from the database." msgstr "" #: ../../blog/docs/spec.md:40 -msgid "`/comment/`: This view will be used to add comments to a blogpost." +msgid "" +"`/comment/`: This view will be used to add comments to a blogpost." msgstr "" #: ../../blog/docs/spec.md:42 @@ -120,7 +124,8 @@ msgid "`/login/`: This view contains a login form." msgstr "" #: ../../blog/docs/spec.md:56 -msgid "`/logout/`: Logout page. This view should redirect user back to homepage." +msgid "" +"`/logout/`: Logout page. This view should redirect user back to homepage." msgstr "" #: ../../blog/docs/spec.md:61 @@ -153,8 +158,8 @@ msgstr "" #: ../../blog/docs/spec.md:111 msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project's database." +"Update existing views to represent entities that are actually stored inside " +"the project's database." msgstr "" #: ../../blog/docs/spec.md:114 @@ -167,8 +172,8 @@ msgstr "" #: ../../blog/docs/spec.md:118 msgid "" -"`/profile/`: should contain information about user and a list " -"of posts authored by this user." +"`/profile/`: should contain information about user and a list of " +"posts authored by this user." msgstr "" #: ../../blog/docs/spec.md:121 @@ -183,8 +188,8 @@ msgstr "" #: ../../blog/docs/spec.md:129 msgid "" -"It's time to work with data representations. You're to add HTML template " -"to the blog site project. Keep templates together with appropriate " +"It's time to work with data representations. You're to add HTML template to " +"the blog site project. Keep templates together with appropriate " "applications, we don't need mess in project files." msgstr "" @@ -194,36 +199,35 @@ msgstr "" #: ../../blog/docs/spec.md:135 msgid "" -"Each page should contain a navbar at the top. Navbar will contain " -"permalinks to the home and about pages." +"Each page should contain a navbar at the top. Navbar will contain permalinks " +"to the home and about pages." msgstr "" #: ../../blog/docs/spec.md:137 msgid "" -"For anonymous users `/register/` and `/login/` links should be visible in" -" navbar." +"For anonymous users `/register/` and `/login/` links should be visible in " +"navbar." msgstr "" #: ../../blog/docs/spec.md:139 msgid "" -"For authenticated users `/logout/` and `/create/` links should be visible" -" in navbar." +"For authenticated users `/logout/` and `/create/` links should be visible in " +"navbar." msgstr "" #: ../../blog/docs/spec.md:141 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" #: ../../blog/docs/spec.md:142 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" #: ../../blog/docs/spec.md:143 -msgid "For the `post_list.html` each post entity should provide the information:" +msgid "" +"For the `post_list.html` each post entity should provide the information:" msgstr "" #: ../../blog/docs/spec.md:144 @@ -260,17 +264,16 @@ msgstr "" #: ../../blog/docs/spec.md:152 msgid "" -"Auth views should use `register.html` and `login.html` with corresponding" -" forms." +"Auth views should use `register.html` and `login.html` with corresponding " +"forms." msgstr "" #: ../../blog/docs/spec.md:155 msgid "" -"For now, it's ok to use admin as \"test user\". Authentication system " -"will be implemented in the future challenges. `user` object is available " -"(by default) in any template context. To test anonymous access you can " -"use `usar.is_authenticated`, which returns `False` for non-authenticated " -"users." +"For now, it's ok to use admin as \"test user\". Authentication system will " +"be implemented in the future challenges. `user` object is available (by " +"default) in any template context. To test anonymous access you can use `usar." +"is_authenticated`, which returns `False` for non-authenticated users." msgstr "" #: ../../blog/docs/spec.md:162 @@ -323,8 +326,8 @@ msgstr "" #: ../../blog/docs/spec.md:179 msgid "" -"Create a form to gather a comment from a user. Form should be used within" -" a \"post detail\" view." +"Create a form to gather a comment from a user. Form should be used within a " +"\"post detail\" view." msgstr "" #: ../../blog/docs/spec.md:181 @@ -350,24 +353,24 @@ msgstr "" #: ../../blog/docs/spec.md:195 msgid "" -"`/login/`: Users should provide their credentials to login. In case login" -" is successful they should be redirected to their profile (if no " -"`next=url` query string available)." +"`/login/`: Users should provide their credentials to login. In case login is " +"successful they should be redirected to their profile (if no `next=url` " +"query string available)." msgstr "" #: ../../blog/docs/spec.md:199 msgid "" -"`/create/`: Only authenticated users should be able to visit this page. " -"In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to post creation. Then a post is created, it should be authored " -"by the currently authenticated user." +"`/create/`: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"post creation. Then a post is created, it should be authored by the " +"currently authenticated user." msgstr "" #: ../../blog/docs/spec.md:205 msgid "" -"`//comment`: Currently authenticated user should be referenced as a" -" comment's author." +"`//comment`: Currently authenticated user should be referenced as a " +"comment's author." msgstr "" #: ../../blog/docs/spec.md:207 @@ -416,8 +419,8 @@ msgstr "" #: ../../blog/docs/spec.md:239 msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to " -"use *pre-defined* user as a post's author for now." +"All blog-site functionality are to be reflected via REST API. It's ok to use " +"*pre-defined* user as a post's author for now." msgstr "" #: ../../blog/docs/spec.md:244 @@ -446,11 +449,11 @@ msgstr "" #: ../../src/appx/code_edit.txt:7 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:3 @@ -459,44 +462,41 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," -msgstr "Ваші нотатки тут," +msgstr "Ваші нотатки ось," #: ../../problem-sets/src/conv_store/challenge.rst:18 msgid "Products and Carts" msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 -#, fuzzy msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" -"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. " -"На першому етапі головною метою є впровадження моделей даних - класів для" -" роботи з даними в майбутньому." +"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " +"першому етапі головною метою є впровадження моделей даних - класів для " +"роботи з даними в майбутньому." #: ../../problem-sets/src/conv_store/challenge.rst:25 msgid "Product" @@ -524,27 +524,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" "Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " "зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 -#, fuzzy msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" "Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість продукту для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу " -"(``int`` або ``float``). Якщо аргумент кількості пропущено, просто " -"використовуйте значення атрибута ``unit``." +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " +"``float``). Якщо аргумент кількості пропущено, просто використовуйте " +"значення атрибута ``unit``." #: ../../problem-sets/src/conv_store/challenge.rst:46 msgid "Code notes" @@ -555,7 +553,6 @@ msgid "Product model implementation" msgstr "Реалізація моделі товару" #: conv_store.models.Product:3 of -#, fuzzy msgid "Instances of this class represent a product available for purchase." msgstr "Цей клас представляє товари, які можна придбати в магазині." @@ -568,12 +565,10 @@ msgid "the name of a product" msgstr "назва товару" #: conv_store.models.Product:7 of -#, fuzzy msgid "the price for a single product unit" msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" #: conv_store.models.Product:9 of -#, fuzzy msgid "the size of a single product unit" msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" @@ -624,11 +619,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -640,9 +635,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " @@ -662,8 +657,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:95 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -672,16 +667,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:98 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:101 msgid "Provide a human readable representations. For example:" @@ -705,28 +700,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:108 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:110 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:115 msgid "Implement equality operator support for your objects:" @@ -737,7 +731,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:118 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:144 @@ -746,11 +741,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:146 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:149 msgid "cart validation - it should not be empty or already purchased" @@ -766,27 +761,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:156 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість \" \"захищеною, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:159 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -794,9 +789,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:162 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -804,8 +799,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:165 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -815,29 +810,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:169 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:170 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:179 msgid "" @@ -846,10 +843,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка платежу карткою...\" і \"Код безпеки :" -" {code}\" слід роздрукувати." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:199 msgid "More Enhancements for Shopping Carts" @@ -861,35 +857,34 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:205 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " -"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, \" " -"\"float]] ``)." +"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " +"float]]``)." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:211 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -897,19 +892,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:214 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:216 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:245 msgid "Testing Software" @@ -925,12 +920,13 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:250 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:251 #, python-format msgid "At least 50% coverage." -msgstr "Принаймні 50% покриття." +msgstr "Хоча б 50% покриття тестами." #: ../../problem-sets/src/conv_store/challenge.rst:252 msgid "Project dependencies are to be updated." @@ -947,9 +943,9 @@ msgstr "" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" #: ../../src/appx/precedence.txt:16 @@ -968,8 +964,8 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" #: ../../src/appx/precedence.txt:23 @@ -1010,8 +1006,8 @@ msgstr "" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "" #: ../../src/appx/precedence.txt:37 @@ -1114,14 +1110,14 @@ msgstr "" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" #: ../../src/appx/printf.txt:7 @@ -1131,12 +1127,11 @@ msgstr "" #: ../../src/appx/printf.txt:9 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." msgstr "" #: ../../src/appx/printf.txt:16 @@ -1173,8 +1168,7 @@ msgstr "" #: ../../src/appx/printf.txt:25 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" #: ../../src/appx/printf.txt:28 @@ -1191,8 +1185,8 @@ msgstr "" #: ../../src/appx/printf.txt:30 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" #: ../../src/appx/printf.txt:34 @@ -1281,8 +1275,8 @@ msgstr "" #: ../../src/appx/printf.txt:58 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" #: ../../src/appx/printf.txt:63 @@ -1322,7 +1316,8 @@ msgid "``'%'``" msgstr "" #: ../../src/appx/printf.txt:71 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "" #: ../../src/appx/software_list.md:1 @@ -1353,9 +1348,9 @@ msgstr "" #: ../../src/appx/software_list.md:13 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" #: ../../src/appx/software_list.md:16 @@ -1377,10 +1372,9 @@ msgstr "" #: ../../src/appx/software_list.md:24 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux " -"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " -"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " -"functionality." +"functionality similar to a [Linux distribution](https://en.wikipedia.org/" +"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " +"substantial POSIX API functionality." msgstr "" #: ../../src/appx/software_list.md:30 @@ -1389,15 +1383,15 @@ msgstr "" #: ../../src/appx/software_list.md:32 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" #: ../../src/appx/software_list.md:34 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from " -"source* if you want to take advantage of Cygwin functionality." +"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " +"if you want to take advantage of Cygwin functionality." msgstr "" #: ../../src/appx/software_list.md:38 @@ -1431,10 +1425,10 @@ msgstr "" msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." msgstr "" #: ../../src/appx/software_list.md:60 @@ -1447,9 +1441,9 @@ msgstr "" #: ../../src/appx/software_list.md:65 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" #: ../../src/appx/software_list.md:69 @@ -1462,18 +1456,18 @@ msgstr "" #: ../../src/appx/software_list.md:74 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" #: ../../src/appx/software_list.md:80 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for `postgresql-client` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for `postgresql-client` package." msgstr "" #: ../../src/appx/software_list.md:83 @@ -1486,9 +1480,9 @@ msgstr "" #: ../../src/appx/software_list.md:88 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" #: ../../src/appx/software_list.md:92 @@ -1505,12 +1499,11 @@ msgstr "" #: ../../src/appx/software_list.md:99 msgid "" -"SQLite is a C-language library that implements a " -"[small](https://sqlite.org/footprint.html), " -"[fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-" -"reliability](https://sqlite.org/hirely.html), [full-" -"featured](https://sqlite.org/fullsql.html), SQL database engine." +"SQLite is a C-language library that implements a [small](https://sqlite.org/" +"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-reliability]" +"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." +"html), SQL database engine." msgstr "" #: ../../src/appx/software_list.md:106 @@ -1519,8 +1512,4 @@ msgstr "" #: ../../src/appx/software_list.md:109 msgid "available for installation as a cygwin package" -msgstr "" - -#~ msgid "Test Cases" -#~ msgstr "" - +msgstr "доступно для встановлення як пакет cygwin" From 562568482e46350bb8c0078915e62b21f131e609 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 8 Apr 2023 17:43:09 +0300 Subject: [PATCH 062/689] Added WRW challenge description (exam task - OOP block) --- src/appx/wrw_game.txt | 1 + src/index.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 src/appx/wrw_game.txt diff --git a/src/appx/wrw_game.txt b/src/appx/wrw_game.txt new file mode 100644 index 000000000..b75805cd6 --- /dev/null +++ b/src/appx/wrw_game.txt @@ -0,0 +1 @@ +.. include:: /../problem-sets/src/wrw_game/challenge.rst diff --git a/src/index.txt b/src/index.txt index 8e98da58f..7dcf895fa 100644 --- a/src/index.txt +++ b/src/index.txt @@ -28,6 +28,7 @@ appx/precedence appx/printf appx/conv_store + appx/wrw_game appx/blog .. rubric:: References From d918e82da930adf0168f557be684fb47edacea21 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 8 Apr 2023 19:09:59 +0300 Subject: [PATCH 063/689] Updated "appx" translations Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 897 +++++++++++++++++++++++----- 1 file changed, 738 insertions(+), 159 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 73ca3a908..d18645d3c 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,13 +8,13 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 12:11+0300\n" -"PO-Revision-Date: 2023-04-06 12:24+0300\n" +"POT-Creation-Date: 2023-04-08 17:35+0300\n" +"PO-Revision-Date: 2023-04-08 19:09+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" @@ -23,13 +23,16 @@ msgstr "" #: ../../blog/docs/spec.md:2 msgid "Blog Project Specification" -msgstr "" +msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.md:5 msgid "" "As a developer you were asked to create a simple blog site. The goal is to " "create a place on the Internet where users can share their stories to public." msgstr "" +"Вас, як розробника, попросили створити простий сайт блогу. Мета - \" " +"\"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " +"історіями з громадськістю." #: ../../blog/docs/spec.md:8 msgid "" @@ -38,26 +41,34 @@ msgid "" "PostgreSQL database to store the data and will finish with implementing REST " "API for the blog." msgstr "" +"Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " +"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " +"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " +"API для блог." #: ../../blog/docs/spec.md:13 msgid "" "There are some boiler plates, that may be useful in your future work, but " "you aren't forced to use them. It's on your choice." msgstr "" +"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " +"ви не змушені їх використовувати. Це на ваш вибір." #: ../../blog/docs/spec.md:16 msgid "" "[Starter template](https://github.com/edu-python-course/django-template)" msgstr "" +"[Starter template](https://github.com/edu-python-course/django-template)" #: ../../blog/docs/spec.md:17 msgid "" "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" msgstr "" +"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" #: ../../blog/docs/spec.md:20 msgid "Challenge: Site views" -msgstr "" +msgstr "Завдання: Site views" #: ../../blog/docs/spec.md:23 msgid "" @@ -65,126 +76,154 @@ msgid "" "are available and provide correct data. Use anything you like to return " "within HTTP response." msgstr "" +"Це нормально поки що не повертати фактичний вміст. Просто переконайтеся, що " +"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " +"хочете, щоб повернути у відповіді HTTP." #: ../../blog/docs/spec.md:29 msgid "" "`/blogs/`: A site's homepage. This will contain a list of blogs available " "via the django site." msgstr "" +"`блоги`: домашня сторінка сайту. Вона міститиме список блогів, доступних " +"через сайт django." #: ../../blog/docs/spec.md:32 msgid "" "`/about/`: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" +"`about`: надає звичайний текст для користувача, описуючи функції сайту " +"django." #: ../../blog/docs/spec.md:35 msgid "`/`: same as `/blogs/`" -msgstr "" +msgstr "`/`: те ж саме `/blogs/`" #: ../../blog/docs/spec.md:37 msgid "" "`//`: A single blog post detail view. The URL contains dynamic part in " "it. This will be used to fetch a single blogpost from the database." msgstr "" +"``: детальний перегляд окремої публікації блогу. URL-адреса містить у " +"ній динамічну частину. Це буде використано для отримання окремої публікації " +"блогу з бази даних." #: ../../blog/docs/spec.md:40 msgid "" "`/comment/`: This view will be used to add comments to a blogpost." msgstr "" +"`/comment/`: Використовуватиметься для додавання коментарів до " +"публікації блогу." #: ../../blog/docs/spec.md:42 msgid "`/create/`: A post creation form." -msgstr "" +msgstr "`/create/`: Форма для створення допису." #: ../../blog/docs/spec.md:44 msgid "`//update/`: A view to update an existing post data." -msgstr "" +msgstr "`//update/`: Сторінка для оновлення даних існуючого допису." #: ../../blog/docs/spec.md:46 msgid "`//delete/`: A view to confirm post deletion." -msgstr "" +msgstr "`//delete/`: Підтверждення видалення допису." #: ../../blog/docs/spec.md:48 msgid "`/profile/`: A site user's personal page." -msgstr "" +msgstr "`/profile/`: Персональна сторінка користувача." #: ../../blog/docs/spec.md:50 msgid "" "`/change_password/`: This route will be used to change users' credential " "data." msgstr "" +"`/change_password/`: Ця сторінка використовуватиметься для зміни облікових " +"даних користувачів." #: ../../blog/docs/spec.md:52 msgid "`/register/`: This view contains a user registration form." -msgstr "" +msgstr "`/register/`: Сторінка з формою для реєстрації нового користувача." #: ../../blog/docs/spec.md:54 msgid "`/login/`: This view contains a login form." -msgstr "" +msgstr "`/login/`: Сторінка з формою для логіна." #: ../../blog/docs/spec.md:56 msgid "" "`/logout/`: Logout page. This view should redirect user back to homepage." msgstr "" +"`/logout/`: Логаут. Має перенаправляти користувача назад на домашню " +"сторінку.." #: ../../blog/docs/spec.md:61 msgid "Challenge: Data models" -msgstr "" +msgstr "Завдання: моделі даних" #: ../../blog/docs/spec.md:64 msgid "You are to implement data models for the blog site." -msgstr "" +msgstr "Ви повинні реалізувати моделі даних для сайту блогу." #: ../../blog/docs/spec.md:66 msgid "The `auth.User` will be used as `user` model." -msgstr "" +msgstr "`auth.User` використовуватиметься як модель `user`." #: ../../blog/docs/spec.md:68 msgid "" "`post.slug` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" +"Значення `post.slug` має автоматично генеруватися під час створення або " +"оновлення запису та слідувати шаблону:" #: ../../blog/docs/spec.md:75 msgid "" "User preferred topics should be marked with a `notify` flag. This value " "should be `True` by default." msgstr "" +"Вибрані користувачем теми мають бути позначені прапорцем `notify`. За " +"замовчуванням це значення має бути `True`." #: ../../blog/docs/spec.md:108 msgid "Challenge: ORM" -msgstr "" +msgstr "Завдання: ORM" #: ../../blog/docs/spec.md:111 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." msgstr "" +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." #: ../../blog/docs/spec.md:114 msgid "`/blogs/` or `/`: should represent a list of existing blogposts." msgstr "" +"`/blogs/` або `/`: має представляти список існуючих публікацій у блозі." #: ../../blog/docs/spec.md:116 msgid "`//`: should represent a single existing blogpost." -msgstr "" +msgstr "`//`: має представляти одну наявну публікацію в блозі." #: ../../blog/docs/spec.md:118 msgid "" "`/profile/`: should contain information about user and a list of " "posts authored by this user." msgstr "" +"`/profile/`: має містити інформацію про користувача та список " +"публікацій, автором яких є цей користувач." #: ../../blog/docs/spec.md:121 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise `Http404` in case entity couldn't be fetched." msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " +"не вдалося отримати." #: ../../blog/docs/spec.md:126 msgid "Challenge: Templates" -msgstr "" +msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.md:129 msgid "" @@ -192,81 +231,100 @@ msgid "" "the blog site project. Keep templates together with appropriate " "applications, we don't need mess in project files." msgstr "" +"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" +"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " +"додатками, нам не потрібен безлад у файлах проекту." #: ../../blog/docs/spec.md:134 msgid "Application-level templates should be extended from the base one." -msgstr "" +msgstr "Шаблони прикладного рівня повинні бути розширені з базового." #: ../../blog/docs/spec.md:135 msgid "" "Each page should contain a navbar at the top. Navbar will contain permalinks " "to the home and about pages." msgstr "" +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " +"міститиме постійні посилання на домашню сторінку та сторінку про." #: ../../blog/docs/spec.md:137 msgid "" "For anonymous users `/register/` and `/login/` links should be visible in " "navbar." msgstr "" +"Для анонімних користувачів посилання `/register/` та `/login/` мають бути " +"видимими на навігаційній панелі." #: ../../blog/docs/spec.md:139 msgid "" "For authenticated users `/logout/` and `/create/` links should be visible in " "navbar." msgstr "" +"Для автентифікованих користувачів посилання `/logout/` і `/create/` мають " +"бути видимими на навігаційній панелі." #: ../../blog/docs/spec.md:141 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.md:142 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../blog/docs/spec.md:143 msgid "" "For the `post_list.html` each post entity should provide the information:" msgstr "" +"Для `post_list.html` кожна сутність повідомлення повинна надавати інформацію:" #: ../../blog/docs/spec.md:144 msgid "title (each word should be capitalized)" -msgstr "" +msgstr "назва (кожне слово має бути великим)" #: ../../blog/docs/spec.md:145 msgid "creation date" -msgstr "" +msgstr "дата створення" #: ../../blog/docs/spec.md:146 msgid "list of related topics (first 3 topics)" -msgstr "" +msgstr "список пов'язаних тем (перші 3 теми)" #: ../../blog/docs/spec.md:147 msgid "trimmed content (~50 words or fewer)" -msgstr "" +msgstr "обрізаний вміст (~50 слів або менше)" #: ../../blog/docs/spec.md:148 msgid "number of comments" -msgstr "" +msgstr "кількість коментарів" #: ../../blog/docs/spec.md:149 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" +"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " +"публікацію." #: ../../blog/docs/spec.md:150 -msgid "Detail view should contain links to `/update/` and `/delete/`." -msgstr "" +msgid "Detail view should contain links to `/update/` and `/update/`." +msgstr "Детальний перегляд має містити посилання на `/update/` та `/update/`." #: ../../blog/docs/spec.md:151 msgid "Detail view should contain a list of post related comments." msgstr "" +"Подання деталей має містити список коментарів, пов'язаних із публікацією." #: ../../blog/docs/spec.md:152 msgid "" "Auth views should use `register.html` and `login.html` with corresponding " "forms." msgstr "" +"Подання авторизації повинні використовувати `register.html` і `login.html` з " +"відповідними формами." #: ../../blog/docs/spec.md:155 msgid "" @@ -275,72 +333,83 @@ msgid "" "default) in any template context. To test anonymous access you can use `usar." "is_authenticated`, which returns `False` for non-authenticated users." msgstr "" +"Наразі можна використовувати адміністратора як \"тестового користувача\". " +"Система автентифікації буде впроваджена в майбутніх викликах. Об'єкт `user` " +"доступний (за замовчуванням) у будь-якому контексті шаблону. перевірте " +"анонімний доступ, ви можете використовувати `usar.is_authenticated`, який " +"повертає `False` для неавтентифікованих користувачів." #: ../../blog/docs/spec.md:162 msgid "Challenge: Auth forms" -msgstr "" +msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.md:165 msgid "Create form for new users registration with required fields:" msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.md:166 msgid "`username`" -msgstr "" +msgstr "`username`" #: ../../blog/docs/spec.md:167 msgid "`email`" -msgstr "" +msgstr "`email`" #: ../../blog/docs/spec.md:168 msgid "`password`" -msgstr "" +msgstr "`password`" #: ../../blog/docs/spec.md:169 msgid "`confirm password`" -msgstr "" +msgstr "`confirm password`" #: ../../blog/docs/spec.md:170 msgid "`username` value should be validated against existing values" msgstr "" +"значення `username` має перевірятися на відповідність існуючим значенням" #: ../../blog/docs/spec.md:171 msgid "`password` and `confirm password` values should match" -msgstr "" +msgstr "значення `password` і `confirm password` мають збігатися" #: ../../blog/docs/spec.md:172 msgid "Create form for existing users login" -msgstr "" +msgstr "Створити форму для входу існуючих користувачів" #: ../../blog/docs/spec.md:173 msgid "Validations errors are to be rendered on the template" -msgstr "" +msgstr "Помилки перевірки мають бути відображені в шаблоні" #: ../../blog/docs/spec.md:175 msgid "Challenge: Blogpost Creation and Update" -msgstr "" +msgstr "Завдання: Створення та Оновлення Дописів" #: ../../blog/docs/spec.md:178 msgid "Create a form to work with the blogpost model." -msgstr "" +msgstr "Створіть форму для роботи з моделлю допису." #: ../../blog/docs/spec.md:179 msgid "" "Create a form to gather a comment from a user. Form should be used within a " "\"post detail\" view." msgstr "" +"Створіть форму для збору коментарів від користувача. Форму слід " +"використовувати в перегляді \"подробиць публікації\"." #: ../../blog/docs/spec.md:181 msgid "Form should be used for *create* and *update* view." -msgstr "" +msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." #: ../../blog/docs/spec.md:183 msgid "It's ok to use a *pre-defined* user as a post's author for now." msgstr "" +"Поки що можна використовувати попередньо визначеного користувача як автора " +"допису." #: ../../blog/docs/spec.md:187 msgid "Challenge: Authentication" -msgstr "" +msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.md:190 msgid "" @@ -350,6 +419,11 @@ msgid "" "authentication process. Invalid form should provide information about " "error(s)." msgstr "" +"`/register/`: користувачі повинні надати всю необхідну інформацію про себе: " +"бажане ім'я користувача та електронну пошту. Дані імені (як ім'я, так і " +"останнє) є необов'язковими. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процес автентифікації. " +"Недійсна форма повинна надавати інформацію про \" \"помилку(и)." #: ../../blog/docs/spec.md:195 msgid "" @@ -357,6 +431,9 @@ msgid "" "successful they should be redirected to their profile (if no `next=url` " "query string available)." msgstr "" +"`/login/`: користувачі повинні надати свої облікові дані для входу. Якщо " +"вхід буде успішним, вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту `next=url`)." #: ../../blog/docs/spec.md:199 msgid "" @@ -366,86 +443,98 @@ msgid "" "post creation. Then a post is created, it should be authored by the " "currently authenticated user." msgstr "" +"`/create/`: Лише автентифіковані користувачі повинні мати змогу відвідувати " +"цю сторінку. У випадку, якщо анонімний користувач намагається надіслати " +"запит на цей перегляд, його слід спочатку переспрямувати до перегляду входу, " +"а після успішної автентифікації повернутися до створення допису. Потім " +"створюється допис, автором якого має бути наразі автентифікований користувач." #: ../../blog/docs/spec.md:205 msgid "" "`//comment`: Currently authenticated user should be referenced as a " "comment's author." msgstr "" +"`//comment`: наразі автентифікований користувач має вказуватися як " +"автор коментаря." #: ../../blog/docs/spec.md:207 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" +"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." #: ../../blog/docs/spec.md:211 msgid "Challenge: Class-Based Views" -msgstr "" +msgstr "Завдання: Class-Based Views" #: ../../blog/docs/spec.md:214 msgid "Replace **all** existing views via ``CBV``." -msgstr "" +msgstr "Замінити **всі** існуючі перегляди через ``CBV``." #: ../../blog/docs/spec.md:215 msgid "Existing functionality should not be corrupted." -msgstr "" +msgstr "Існуюча функціональність не повинна бути пошкоджена." #: ../../blog/docs/spec.md:217 msgid "It's ok to use Django built-in views for auth." -msgstr "" +msgstr "Використовувати вбудовані представлення Django для авторизації можна." #: ../../blog/docs/spec.md:226 msgid "Challenge: Serializers" -msgstr "" +msgstr "Завдання: Серіалізатори" #: ../../blog/docs/spec.md:229 msgid "Create serializers for:" -msgstr "" +msgstr "Створіть серіалізатори для:" #: ../../blog/docs/spec.md:230 msgid "Blogpost entity" -msgstr "" +msgstr "Об'єкт публікації в блозі" #: ../../blog/docs/spec.md:231 msgid "Blogpost comment" -msgstr "" +msgstr "Коментар у блозі" #: ../../blog/docs/spec.md:232 msgid "User" -msgstr "" +msgstr "Користувач" #: ../../blog/docs/spec.md:236 msgid "Challenge: API views" -msgstr "" +msgstr "Завдання: API views" #: ../../blog/docs/spec.md:239 msgid "" "All blog-site functionality are to be reflected via REST API. It's ok to use " "*pre-defined* user as a post's author for now." msgstr "" +"Усі функції сайту блогу мають бути відображені через REST API. Наразі можна " +"використовувати попередньо визначеного користувача як автора публікації." #: ../../blog/docs/spec.md:244 msgid "Challenge: Authentication and Permissions" -msgstr "" +msgstr "Завдання: Автентифікація та Дозволи" #: ../../blog/docs/spec.md:247 msgid "Implement REST authentication system." -msgstr "" +msgstr "Запровадити систему автентифікації REST." #: ../../blog/docs/spec.md:248 msgid "Only account owner can change their account data." msgstr "" +"Лише власник облікового запису може змінити дані свого облікового запису." #: ../../blog/docs/spec.md:249 msgid "Only authenticated users can create posts and comments." msgstr "" +"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." #: ../../blog/docs/spec.md:250 msgid "Only authors can change their posts." -msgstr "" +msgstr "Тільки автори можуть змінювати свої повідомлення." #: ../../src/appx/code_edit.txt:5 msgid "Code Editors" -msgstr "" +msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:7 msgid "" @@ -455,10 +544,15 @@ msgid "" "makes coding fun — but which one is best for you? :cite:`realpython:code-" "edit`" msgstr "" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" -msgstr "" +msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" @@ -546,7 +640,7 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:46 msgid "Code notes" -msgstr "" +msgstr "Примітки до коду" #: conv_store.models.Product:1 of msgid "Product model implementation" @@ -684,11 +778,11 @@ msgstr "Надайте представлення, зрозумілі людин #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "``Product('juice', 35.66, 1)``" -msgstr "" +msgstr "``Product('juice', 35.66, 1)``" #: ../../problem-sets/src/conv_store/challenge.rst:104 msgid "````" -msgstr "" +msgstr "````" #: ../../problem-sets/src/conv_store/challenge.rst:106 msgid "" @@ -924,7 +1018,6 @@ msgstr "" "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:251 -#, python-format msgid "At least 50% coverage." msgstr "Хоча б 50% покриття тестами." @@ -934,11 +1027,11 @@ msgstr "Залежності проекту потрібно оновити." #: ../../src/appx/env_path.txt:5 msgid "Issue - System Environment PATH" -msgstr "" +msgstr "Проблема - System Environment PATH" #: ../../src/appx/precedence.txt:8 msgid "Operator Precedence" -msgstr "" +msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" @@ -947,182 +1040,197 @@ msgid "" "`docs-python:operator-precedence`. Operators in the same cell have the same " "precedence (use left-to-right precedence)." msgstr "" +"У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " +"найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " +"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" -msgstr "" +msgstr "Оператор" #: ../../src/appx/precedence.txt:16 msgid "Description" -msgstr "" +msgstr "Опис" #: ../../src/appx/precedence.txt:18 msgid "" "``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " "``{expressions...}``" msgstr "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" #: ../../src/appx/precedence.txt:18 msgid "" "Binding or parenthesized expression, list display, dictionary display, set " "display" msgstr "" +"Прив’язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" -msgstr "" +msgstr "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" #: ../../src/appx/precedence.txt:23 msgid "Subscription, slicing, call, attribute reference" -msgstr "" +msgstr "Підписка, нарізка, виклик, посилання на атрибути" #: ../../src/appx/precedence.txt:28 msgid "``await x``" -msgstr "" +msgstr "``await x``" #: ../../src/appx/precedence.txt:28 msgid "Await expression" -msgstr "" +msgstr "Вираз Await" #: ../../src/appx/precedence.txt:30 msgid "``**``" -msgstr "" +msgstr "``**``" #: ../../src/appx/precedence.txt:30 msgid "Exponentiation [#]_" -msgstr "" +msgstr "Піднесення до степеня [#]_" #: ../../src/appx/precedence.txt:32 msgid "``+x``, ``-x``, ``~x``" -msgstr "" +msgstr "``+x``, ``-x``, ``~x``" #: ../../src/appx/precedence.txt:32 msgid "Positive, negative, bitwise NOT" -msgstr "" +msgstr "Позитивне, негативне, побітове НІ" #: ../../src/appx/precedence.txt:34 msgid "``*``, ``@``, ``/``, ``//``, ``%``" -msgstr "" +msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" "Multiplication, matrix multiplication, division, floor division, remainder " "[#]_" -msgstr "" +msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 msgid "``+``, ``-``" -msgstr "" +msgstr "``+``, ``-``" #: ../../src/appx/precedence.txt:37 msgid "Addition and subtraction" -msgstr "" +msgstr "Додавання і віднімання" #: ../../src/appx/precedence.txt:39 msgid "``<<``, ``>>``" -msgstr "" +msgstr "``<<``, ``>>``" #: ../../src/appx/precedence.txt:39 msgid "Shifts" -msgstr "" +msgstr "Зсуви" #: ../../src/appx/precedence.txt:41 msgid "``&``" -msgstr "" +msgstr "``&``" #: ../../src/appx/precedence.txt:41 msgid "Bitwise AND" -msgstr "" +msgstr "Побітове І" #: ../../src/appx/precedence.txt:43 msgid "``^``" -msgstr "" +msgstr "``^``" #: ../../src/appx/precedence.txt:43 msgid "Bitwise XOR" -msgstr "" +msgstr "Побітове XOR" #: ../../src/appx/precedence.txt:45 msgid "``|``" -msgstr "" +msgstr "``|``" #: ../../src/appx/precedence.txt:45 msgid "Bitwise OR" -msgstr "" +msgstr "Порозрядне АБО" #: ../../src/appx/precedence.txt:47 msgid "" "``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " "``==``, ``!=``" msgstr "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" #: ../../src/appx/precedence.txt:47 msgid "Comparisons, including membership tests and identity tests" -msgstr "" +msgstr "Порівняння, включаючи тести на приналежність і тести на ідентифікацію" #: ../../src/appx/precedence.txt:52 msgid "``not x``" -msgstr "" +msgstr "``not x``" #: ../../src/appx/precedence.txt:52 msgid "Boolean NOT" -msgstr "" +msgstr "Логічне НІ" #: ../../src/appx/precedence.txt:54 msgid "``and``" -msgstr "" +msgstr "``and``" #: ../../src/appx/precedence.txt:54 msgid "Boolean AND" -msgstr "" +msgstr "Логічне І" #: ../../src/appx/precedence.txt:56 msgid "``or``" -msgstr "" +msgstr "``or``" #: ../../src/appx/precedence.txt:56 msgid "Boolean OR" -msgstr "" +msgstr "Логічне АБО" #: ../../src/appx/precedence.txt:58 msgid "``if - else``" -msgstr "" +msgstr "``if - else``" #: ../../src/appx/precedence.txt:58 msgid "Conditional expression (ternary ``if``)" -msgstr "" +msgstr "Умовний вираз (трійковий ``if``)" #: ../../src/appx/precedence.txt:60 msgid "``lambda``" -msgstr "" +msgstr "``lambda``" #: ../../src/appx/precedence.txt:60 msgid "Lambda expression" -msgstr "" +msgstr "Lambda вирази" #: ../../src/appx/precedence.txt:62 msgid "``=``, ``:=``" -msgstr "" +msgstr "``=``, ``:=``" #: ../../src/appx/precedence.txt:62 msgid "Assignment expression" -msgstr "" +msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" "the power operator binds less tightly than an arithmetic or bitwise unary " "operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" +"оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " +"унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" "the ``%`` operator is also used for string formatting; the same precedence " "applies." msgstr "" +"оператор ``%`` також використовується для форматування рядків; " +"застосовується той самий пріоритет." #: ../../src/appx/printf.txt:7 msgid "``printf-style`` String Formatting" -msgstr "" +msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:9 msgid "" @@ -1133,218 +1241,233 @@ msgid "" "are replaced with zero or more elements of *values*. If *format* requires a " "single argument, *values* may be a single non-tuple object." msgstr "" +"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об’єктом." #: ../../src/appx/printf.txt:16 msgid "The conversion flag characters are:" -msgstr "" +msgstr "Символи перетворення:" #: ../../src/appx/printf.txt:19 msgid "Flag" -msgstr "" +msgstr "Символ" #: ../../src/appx/printf.txt:19 ../../src/appx/printf.txt:37 msgid "Meaning" -msgstr "" +msgstr "Значення" #: ../../src/appx/printf.txt:21 msgid "``#``" -msgstr "" +msgstr "``#``" #: ../../src/appx/printf.txt:21 msgid "The value conversion will use the \"alternative form\"" -msgstr "" +msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" #: ../../src/appx/printf.txt:23 msgid "``0``" -msgstr "" +msgstr "``0``" #: ../../src/appx/printf.txt:23 msgid "The conversion will be zero padded for numeric values" -msgstr "" +msgstr "Перетворення буде доповнено нулем для числових значень" #: ../../src/appx/printf.txt:25 msgid "``'-'``" -msgstr "" +msgstr "``'-'``" #: ../../src/appx/printf.txt:25 msgid "" "The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:28 msgid "``' '``" -msgstr "" +msgstr "``' '``" #: ../../src/appx/printf.txt:28 msgid "(a space) A blank should be left before a positive number" -msgstr "" +msgstr "(пробіл) Перед додатним числом слід залишити пробіл" #: ../../src/appx/printf.txt:30 msgid "``'+'``" -msgstr "" +msgstr "``'+'``" #: ../../src/appx/printf.txt:30 msgid "" "A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " "a \"space\" flag)" msgstr "" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:34 msgid "The conversion types are:" -msgstr "" +msgstr "Типи перетворення:" #: ../../src/appx/printf.txt:37 msgid "Conversion" -msgstr "" +msgstr "Перетворення" #: ../../src/appx/printf.txt:39 msgid "``'d'``" -msgstr "" +msgstr "``'d'``" #: ../../src/appx/printf.txt:39 ../../src/appx/printf.txt:41 msgid "Signed integer decimal" -msgstr "" +msgstr "Ціле десяткове число зі знаком" #: ../../src/appx/printf.txt:41 msgid "``'i'``" -msgstr "" +msgstr "``'i'``" #: ../../src/appx/printf.txt:43 msgid "``'o'``" -msgstr "" +msgstr "``'o'``" #: ../../src/appx/printf.txt:43 msgid "Signed octal value" -msgstr "" +msgstr "Вісімкове значення зі знаком" #: ../../src/appx/printf.txt:45 msgid "``'u'``" -msgstr "" +msgstr "``'u'``" #: ../../src/appx/printf.txt:45 msgid "Obsolete type - it is identical to ``'d'``" -msgstr "" +msgstr "Застарілий тип - ідентичний ``'d``" #: ../../src/appx/printf.txt:47 msgid "``'x'``" -msgstr "" +msgstr "``'x'``" #: ../../src/appx/printf.txt:47 msgid "Signed hexadecimal (lowercase)" -msgstr "" +msgstr "Шістнадцяткове число зі знаком (маленький регістр)" #: ../../src/appx/printf.txt:49 msgid "``'X'``" -msgstr "" +msgstr "``'X'``" #: ../../src/appx/printf.txt:49 msgid "Signed hexadecimal (uppercase)" -msgstr "" +msgstr "Шістнадцяткове число зі знаком (верхній регістр)" #: ../../src/appx/printf.txt:51 msgid "``'e'``" -msgstr "" +msgstr "``'e'``" #: ../../src/appx/printf.txt:51 msgid "Floating point exponential format (lowercase)" -msgstr "" +msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" #: ../../src/appx/printf.txt:53 msgid "``'E'``" -msgstr "" +msgstr "``'E'``" #: ../../src/appx/printf.txt:53 msgid "Floating point exponential format (uppercase)" -msgstr "" +msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" #: ../../src/appx/printf.txt:55 msgid "``'f'`` ``'F'``" -msgstr "" +msgstr "``'f'`` ``'F'``" #: ../../src/appx/printf.txt:55 msgid "Floating point decimal format" -msgstr "" +msgstr "Десятковий формат із плаваючою комою" #: ../../src/appx/printf.txt:58 msgid "``'g'``" -msgstr "" +msgstr "``'g'``" #: ../../src/appx/printf.txt:61 msgid "``'G'``" -msgstr "" +msgstr "``'G'``" #: ../../src/appx/printf.txt:58 msgid "" "Floating point format. Uses lowercase exponential format if exponent is less " "that -4 or not less than precision, decimal format otherwise." msgstr "" +"Формат з плаваючою комою. Використовує нижній регістр експоненціального " +"формату, якщо показник степеня менший за -4 або не менший за точність, " +"десятковий формат інакше." #: ../../src/appx/printf.txt:63 msgid "``'c'``" -msgstr "" +msgstr "``'c'``" #: ../../src/appx/printf.txt:63 msgid "Single character (accepts integer or single character string)" -msgstr "" +msgstr "Один символ (приймає ціле число або рядок з одним символом)" #: ../../src/appx/printf.txt:65 msgid "``'r'``" -msgstr "" +msgstr "``'r'``" #: ../../src/appx/printf.txt:65 msgid "Converts any Python object using ``repr()``" -msgstr "" +msgstr "Перетворює будь-який об’єкт Python за допомогою ``repr()``" #: ../../src/appx/printf.txt:67 msgid "``'s'``" -msgstr "" +msgstr "``'s'``" #: ../../src/appx/printf.txt:67 msgid "Converts any Python object using ``str()``" -msgstr "" +msgstr "Перетворює будь-який об’єкт Python за допомогою ``str()``" #: ../../src/appx/printf.txt:69 msgid "``'a'``" -msgstr "" +msgstr "``'a'``" #: ../../src/appx/printf.txt:69 msgid "Converts any Python object using ``ascii()``" -msgstr "" +msgstr "Перетворює будь-який об’єкт Python за допомогою ``ascii()``" #: ../../src/appx/printf.txt:71 msgid "``'%'``" -msgstr "" +msgstr "``'%'``" #: ../../src/appx/printf.txt:71 msgid "" "No arguments is converted, results in a ``'%'`` character in the result." -msgstr "" +msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.md:1 msgid "Software List" -msgstr "" +msgstr "Список Програмного Забезпечення" #: ../../src/appx/software_list.md:4 msgid "7zip" -msgstr "" +msgstr "7zip" #: ../../src/appx/software_list.md:7 msgid "**7-Zip** is **free software** with **open source**." msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.md:9 msgid "" "High compression ratio in [7z format](https://7-zip.org/7z.html) with " "**LZMA** and **LZMA2** compression" msgstr "" +"Високий ступінь стиснення у [форматі 7z](https://7-zip.org/7z.html) зі " +"стисненням **LZMA** і **LZMA2**" #: ../../src/appx/software_list.md:11 msgid "Supported formats:" -msgstr "" +msgstr "Підтримувані формати:" #: ../../src/appx/software_list.md:12 msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" -msgstr "" +msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" #: ../../src/appx/software_list.md:13 msgid "" @@ -1352,22 +1475,25 @@ msgid "" "HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " "UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" +"Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." #: ../../src/appx/software_list.md:16 msgid "Self-extracting capability for 7z format" -msgstr "" +msgstr "Можливість саморозпакування для формату 7z" #: ../../src/appx/software_list.md:17 msgid "Integration with Windows Shell" -msgstr "" +msgstr "Інтеграція з Windows Shell" #: ../../src/appx/software_list.md:19 msgid "https://7-zip.org/" -msgstr "" +msgstr "https://7-zip.org/" #: ../../src/appx/software_list.md:21 msgid "cygwin" -msgstr "" +msgstr "cygwin" #: ../../src/appx/software_list.md:24 msgid "" @@ -1376,16 +1502,22 @@ msgid "" "wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " "substantial POSIX API functionality." msgstr "" +"Це велика колекція інструментів GNU та Open Source, які забезпечують " +"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" +"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.md:30 msgid "**Cygwin is not**:" -msgstr "" +msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.md:32 msgid "" "a way to run native Linux apps on Windows. You must rebuild your application " "*from source* if you want it to run on Windows." msgstr "" +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.md:34 msgid "" @@ -1393,14 +1525,18 @@ msgid "" "like `signals`, `ptys` etc. Again, you need to build your apps *from source* " "if you want to take advantage of Cygwin functionality." msgstr "" +"спосіб чарівним чином зробити рідні програми Windows відомими " +"функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " +"потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " +"перевагами функціональності Cygwin." #: ../../src/appx/software_list.md:38 msgid "https://www.cygwin.com/" -msgstr "" +msgstr "https://www.cygwin.com/" #: ../../src/appx/software_list.md:40 msgid "git[^cygwin-pkg]" -msgstr "" +msgstr "git[^cygwin-pkg]" #: ../../src/appx/software_list.md:43 msgid "" @@ -1408,18 +1544,24 @@ msgid "" "source) distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" +"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." +"com/about/free-and-open-source) розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.md:47 msgid "https://git-scm.com/" -msgstr "" +msgstr "https://git-scm.com/" #: ../../src/appx/software_list.md:49 msgid "Docker" -msgstr "" +msgstr "Docker" #: ../../src/appx/software_list.md:52 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.md:54 msgid "" @@ -1430,14 +1572,20 @@ msgid "" "world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " "and choice." msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.md:60 msgid "https://www.docker.com/" -msgstr "" +msgstr "https://www.docker.com/" #: ../../src/appx/software_list.md:62 msgid "PostgreSQL[^cygwin-pkg]" -msgstr "" +msgstr "PostgreSQL[^cygwin-pkg]" #: ../../src/appx/software_list.md:65 msgid "" @@ -1445,14 +1593,17 @@ msgid "" "over 35 years of active development that has earned it a strong reputation " "for reliability, feature robustness, and performance." msgstr "" +"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.md:69 msgid "https://www.postgresql.org/" -msgstr "" +msgstr "https://www.postgresql.org/" #: ../../src/appx/software_list.md:71 msgid "psql[^cygwin-pkg]" -msgstr "" +msgstr "psql[^cygwin-pkg]" #: ../../src/appx/software_list.md:74 msgid "" @@ -1463,20 +1614,28 @@ msgid "" "features to facilitate writing scripts and automating a wide variety of " "tasks." msgstr "" +"Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.md:80 msgid "" "On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " "look for `postgresql-client` package." msgstr "" +"У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " +"знайдіть пакет `postgresql-client`." #: ../../src/appx/software_list.md:83 msgid "https://www.postgresql.org/docs/current/app-psql.html" -msgstr "" +msgstr "https://www.postgresql.org/docs/current/app-psql.html" #: ../../src/appx/software_list.md:85 msgid "pgAdmin" -msgstr "" +msgstr "pgAdmin" #: ../../src/appx/software_list.md:88 msgid "" @@ -1484,18 +1643,23 @@ msgid "" "development platform for PostgreSQL, the most advanced Open Source database " "in the world." msgstr "" +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.md:92 msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." msgstr "" +"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" +"інтерфейсу." #: ../../src/appx/software_list.md:94 msgid "https://pgadmin.org/" -msgstr "" +msgstr "https://pgadmin.org/" #: ../../src/appx/software_list.md:96 msgid "SQLite[^cygwin-pkg]" -msgstr "" +msgstr "SQLite[^cygwin-pkg]" #: ../../src/appx/software_list.md:99 msgid "" @@ -1505,11 +1669,426 @@ msgid "" "(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." "html), SQL database engine." msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" +"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " +"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" +"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" +"fullsql.html) , двигун бази даних SQL." #: ../../src/appx/software_list.md:106 msgid "https://sqlite.org/" -msgstr "" +msgstr "https://sqlite.org/" #: ../../src/appx/software_list.md:109 msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" + +#: ../../problem-sets/src/wrw_game/challenge.rst:3 +msgid "WARRIORS, ROBBERS AND WIZARDS GAME" +msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" + +#: ../../problem-sets/src/wrw_game/challenge.rst:5 +msgid "" +"Warriors, robbers and wizards (WRW) game is a \"Paper, Rock and Scissors\" " +"clone, but in a fantasy setting. It comes with a simple command line " +"interface where the use must type in his or her choice. The enemy is " +"controlled by the script. The player's goal is to gain as many score points, " +"as it possible." +msgstr "" +"Гра Warriors, robbers and wizards (WRW) є клоном \"Paper, Rock and " +"Scissors\", але у фентезійній обстановці. Вона постачається з простим " +"інтерфейсом командного рядка, де для використання потрібно вводити його або " +"її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога більше " +"очок." + +#: ../../problem-sets/src/wrw_game/challenge.rst:12 +msgid "Code Organization" +msgstr "Організація коду" + +#: ../../problem-sets/src/wrw_game/challenge.rst:14 +msgid "Use separate modules to maintain your code base. For example:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:26 +msgid "General Playground Description" +msgstr "Загальний опис ігрового майданчика" + +#: ../../problem-sets/src/wrw_game/challenge.rst:28 +msgid "" +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." +msgstr "" +"Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " +"захисту. Раунди повторюються, поки гравець не буде переможений." + +#: ../../problem-sets/src/wrw_game/challenge.rst:32 +msgid "Fight Rules" +msgstr "Правила боротьби" + +#: ../../problem-sets/src/wrw_game/challenge.rst:34 +msgid "It's simple..." +msgstr "Це просто..." + +#: ../../problem-sets/src/wrw_game/challenge.rst:36 +msgid "**Warrior** beats **Robber**" +msgstr "Воїн перемагає розбійника" + +#: ../../problem-sets/src/wrw_game/challenge.rst:37 +msgid "**Robber** beats **Wizard**" +msgstr "**Розбійник** перемагає **Чарівника**" + +#: ../../problem-sets/src/wrw_game/challenge.rst:38 +msgid "**Wizard** beats **Warrior**" +msgstr "**Чарівник** перемагає **Воїна**" + +#: ../../problem-sets/src/wrw_game/challenge.rst:41 +msgid "Attack Stage" +msgstr "Стадія атаки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:43 +msgid "" +"Player selects the choice to attack from **warrior**, **robber** or " +"**wizard**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог обирає " +"вибір для захисту з тих самих варіантів за допомогою\" \"довільного. Якщо " +"атака успішна:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:47 +msgid "enemy health is decreased" +msgstr "здоров'я ворога зменшено" + +#: ../../problem-sets/src/wrw_game/challenge.rst:48 +msgid "player gains score points" +msgstr "гравець отримує очки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:50 +msgid "In case enemy is defeated:" +msgstr "Якщо ворог переможений:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:52 +msgid "a new enemy instance is initialized using higher level" +msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" + +#: ../../problem-sets/src/wrw_game/challenge.rst:53 +msgid "player gains some extra score points" +msgstr "гравець отримує додаткові очки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:54 +msgid "next defence stage is skipped, and player attacks again" +msgstr "наступний етап захисту пропущено, і гравець атакує знову" + +#: ../../problem-sets/src/wrw_game/challenge.rst:57 +msgid "Defence Stage" +msgstr "Стадія захисту" + +#: ../../problem-sets/src/wrw_game/challenge.rst:59 +msgid "" +"Player selects the choice to defend from **warrior**, **robber** or " +"**wizard**, enemy selects the choice to attack from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника, " +"ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " +"атака успішна:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:63 +msgid "player health is decreased" +msgstr "здоров'я гравця знижено" + +#: ../../problem-sets/src/wrw_game/challenge.rst:65 +msgid "If player is defeated:" +msgstr "Якщо гравець переможений:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:67 +msgid "report the message about gained score points to the terminal" +msgstr "повідомляти повідомлення про набрані бали на термінал" + +#: ../../problem-sets/src/wrw_game/challenge.rst:68 +msgid "write down player's name and score points to \"scores.txt\" file" +msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" + +#: ../../problem-sets/src/wrw_game/challenge.rst:72 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:75 +msgid "Enemy Down" +msgstr "Enemy Down" + +#: ../../problem-sets/src/wrw_game/challenge.rst:77 +msgid "" +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." +msgstr "" +"Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." + +#: ../../problem-sets/src/wrw_game/challenge.rst:82 +msgid "Game Over" +msgstr "Game Over" + +#: ../../problem-sets/src/wrw_game/challenge.rst:84 +msgid "" +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." +msgstr "" +"Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." + +#: ../../problem-sets/src/wrw_game/challenge.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../problem-sets/src/wrw_game/challenge.rst:93 +msgid "Enemy" +msgstr "Ворог" + +#: ../../problem-sets/src/wrw_game/challenge.rst:95 +msgid "" +"Represents the playing enemy-bot. All choices made by this model are random. " +"The model should implement methods:" +msgstr "" +"Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " +"випадкові. Модель має реалізовувати методи:" + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``__init__``" +msgstr "``__init__``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:99 +msgid "" +"Initialize enemy instance. Initializer should receive one argument of " +"integer type - ``level: int``. Health points value should be set equal to " +"level value." +msgstr "" +"Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " +"аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " +"встановлено рівним значенню рівня." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``descrease_health``" +msgstr "``descrease_health``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:104 +msgid "" +"Method decreases the health points value by 1 (one). If this value becomes " +"less that 1 (one) the ``EnemyDown`` exception is raised." +msgstr "" +"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стає " +"меншим за 1 (один), виникає виняток ``EnemyDown``." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``select_attack``" +msgstr "``select_attack``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:108 +msgid "Return a random attack choice from valid choices." +msgstr "Повернути випадковий вибір атаки з дійсних виборів." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``select_defence``" +msgstr "``select_defence``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:111 +msgid "Return a random defence choice from valid choices." +msgstr "Повернути випадковий вибір захисту з дійсних виборів." + +#: ../../problem-sets/src/wrw_game/challenge.rst:113 +msgid "You are free to implement other methods you like, if needed." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." + +#: ../../problem-sets/src/wrw_game/challenge.rst:116 +msgid "Player" +msgstr "Гравець" + +#: ../../problem-sets/src/wrw_game/challenge.rst:118 +msgid "" +"This model is controlled by the user. It represents a playing user. All " +"choices are controlled by the user. The model should implement methods:" +msgstr "" +"Цією моделлю керує користувач. Вона представляє гравця. Усі вибори контролює " +"користувач. Модель має реалізовувати методи:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:122 +msgid "" +"Initialize player instance. Initializer should receive player's name as an " +"argument - ``name: str``. Health points are to be set from settings. Score " +"points should be initialized with 0 (zero)." +msgstr "" +"Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця як " +"аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " +"налаштувань. Очки мають бути ініціалізовані 0 (нулем)." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``decrease_health``" +msgstr "``decrease_health``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:127 +msgid "" +"Method decreases the health points value by 1 (one). If this value becomes " +"less that 1 (one) the ``GameOver`` exception is raised." +msgstr "" +"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " +"менше 1 (один), виникає виняток ``GameOver``." + +#: ../../problem-sets/src/wrw_game/challenge.rst:131 +#: ../../problem-sets/src/wrw_game/challenge.rst:134 +msgid "Return a fight choice made by the user. Performs choice validation." +msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``fight``" +msgstr "``fight``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:137 +msgid "" +"Static method to perform a fight. Takes two arguments representing attack " +"and defence choices. Performs fight result calculation and return it back." +msgstr "" +"Статичний метод для проведення бою. Бере два аргументи, що представляють " +"атаку та вибір захисту. Виконує обчислення результату бою та повертає його " +"назад." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``attack``" +msgstr "``attack``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:141 +msgid "" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" +msgstr "" +"Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:147 +msgid "``\"YOUR ATTACK IS SUCCESSFUL!\"``" +msgstr "``\"YOUR ATTACK IS SUCCESSFUL!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:148 +msgid "``\"YOUR ATTACK IS FAILED!\"``" +msgstr "``\"YOUR ATTACK IS FAILED!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:149 +#: ../../problem-sets/src/wrw_game/challenge.rst:160 +msgid "``IT'S A DRAW!\"``" +msgstr "``IT'S A DRAW!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``defence``" +msgstr "``defence``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:152 +msgid "" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" +msgstr "" +"Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:158 +msgid "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" +msgstr "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:159 +msgid "``\"YOUR DEFENCE IS FAILED!\"``" +msgstr "``\"YOUR DEFENCE IS FAILED!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:164 +msgid "Settings" +msgstr "Налаштування" + +#: ../../problem-sets/src/wrw_game/challenge.rst:166 +msgid "" +"**settings.py** module contains constants values for the game (e.g. " +"``INITIAL_PLAYER_HEALTH = 5``)." +msgstr "" +"Модуль settings.py містить значення констант для гри (наприклад, " +"``INITIAL_PLAYER_HEALTH = 5``)." + +#: ../../problem-sets/src/wrw_game/challenge.rst:171 +msgid "Engine" +msgstr "Ігровий рушій" + +#: ../../problem-sets/src/wrw_game/challenge.rst:173 +msgid "Engine module should provide two functions:" +msgstr "Модуль двигуна має забезпечувати дві функції:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:175 +msgid "``get_player_name``" +msgstr "``get_player_name``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:176 +msgid "``play``" +msgstr "``play``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:179 +msgid "Player name getter" +msgstr "Отримання імені гравця" + +#: ../../problem-sets/src/wrw_game/challenge.rst:181 +msgid "" +"Asks the user to type in his or her name and return it back. Leading and " +"trailing whitespaces are to be trimmed. Name should contain at least one " +"character." +msgstr "" +"Просить користувача ввести своє ім'я та повернути його назад. Пробіли на " +"початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " +"символ." + +#: ../../problem-sets/src/wrw_game/challenge.rst:186 +msgid "Play" +msgstr "Гра" + +#: ../../problem-sets/src/wrw_game/challenge.rst:188 +msgid "" +"This function initializes player and enemy instance. It processes game " +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." +msgstr "" +"Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." + +#: ../../problem-sets/src/wrw_game/challenge.rst:199 +msgid "Optional Enhancements" +msgstr "Додаткові Вдосконалення" + +#: ../../problem-sets/src/wrw_game/challenge.rst:201 +msgid "Add scores processor to show top-10 scores from a record table." +msgstr "" +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." + +#: ../../problem-sets/src/wrw_game/challenge.rst:202 +msgid "Create game menu, for example: ::" +msgstr "Створити меню гри, наприклад: ::" From cf1fb18e5fccf6bbfd628340e8f1a7a88cecb345 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 8 Apr 2023 19:41:43 +0300 Subject: [PATCH 064/689] Updated translations Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 4 +- src/_locales/ua/LC_MESSAGES/basics.po | 1219 ++++++++++++------------- src/_locales/ua/LC_MESSAGES/oop.po | 342 ++++--- src/_locales/ua/LC_MESSAGES/rdbms.po | 658 +++++++------ src/basics/stdtypes.txt | 2 +- src/basics/syntax.txt | 2 +- src/oop/solid.txt | 2 +- src/rdbms/aggregation.txt | 2 +- 8 files changed, 1081 insertions(+), 1150 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index d18645d3c..f2cdf2980 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-08 17:35+0300\n" -"PO-Revision-Date: 2023-04-08 19:09+0300\n" +"PO-Revision-Date: 2023-04-08 19:13+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -310,7 +310,7 @@ msgstr "" "публікацію." #: ../../blog/docs/spec.md:150 -msgid "Detail view should contain links to `/update/` and `/update/`." +msgid "Detail view should contain links to `/update/` and `/delete/`." msgstr "Детальний перегляд має містити посилання на `/update/` та `/update/`." #: ../../blog/docs/spec.md:151 diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index 6c1e5e16c..8256b04f2 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -2,401 +2,29 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR OLEKSANDR YEROMIN , 2023. +# OLEKSANDR YEROMIN , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-14 22:40+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-04-08 19:38+0300\n" +"PO-Revision-Date: 2023-04-08 19:40+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../src/basics/controlflow.txt:3 msgid "Control Flow" msgstr "Керування виконанням" -#: ../../src/basics/datatypes.txt:3 -msgid "Data Types" -msgstr "Типи Даних" - -#: ../../src/basics/datatypes.txt:5 -msgid "" -"Data may represent different things and require various operations " -"available. In programming data types is an important concept. For example" -" **1984** may be a number (``1984``), a text (``\"1984"``) or event a " -"date. The data type describes the operations, that are allowed for the " -"data, like additions for numbers or concatenation for text (e.g. ``1 + 2 " -"-> 3``, ``\"1\" + \"3\" -> \"13\"``)." -msgstr "" -"Дані можуть представляти різні речі та вимагати різноманітних доступних" -"операцій. У програмуванні типи даних є важливою концепцією. " -"Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984"`` ) " -"або подією чи датою. Тип даних описує можливі операції, дозволені для даних, " -"як-от додавання чисел або конкатенація для тексту " -"(наприклад, ``1 + 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." - -#: ../../src/basics/datatypes.txt:11 -msgid "" -"Python uses dynamic typing. This means as a developer you should not " -"declare a variable with its data type - the interpreter will do this for " -"you. Other popular language using dynamic typing are JavaScript and PHP. " -"Setting variables in Python is as easy as:" -msgstr "" -"Python використовує динамічну типізацію. Це означає, що ви, як розробник, " -"не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " -"за вас. Іншими популярними мовами, які використовують динамічну типізацію, " -"є JavaScript і PHP. Налаштування змінних у Python доволі просто, як: " - -#: ../../src/basics/datatypes.txt:23 -msgid "Built-In Data Types" -msgstr "Вбудовані типи даних" - -#: ../../src/basics/datatypes.txt:25 -msgid "Python has the following data types built-in:" -msgstr "Python має такі вбудовані типи даних:" - -#: ../../src/basics/datatypes.txt:27 -msgid "Integers (``int``)" -msgstr "Цілі числа (``int``)" - -#: ../../src/basics/datatypes.txt:28 -msgid "Floating-point numbers (``float``)" -msgstr "Числа з плаваючою крапкою (``float``)" - -#: ../../src/basics/datatypes.txt:29 -msgid "Complex numbers (``complex``)" -msgstr "Комплексні числа (``complex``)" - -#: ../../src/basics/datatypes.txt:30 -msgid "Booleans (``bool``)" -msgstr "Логічні значення (``bool``)" - -#: ../../src/basics/datatypes.txt:31 -msgid "Strings (``str``)" -msgstr "Рядки (``str``)" - -#: ../../src/basics/datatypes.txt:32 -msgid "Bytes (``bytes``)" -msgstr "Байти (``bytes``)" - -#: ../../src/basics/datatypes.txt:33 -msgid "Byte arrays (``bytearray``)" -msgstr "Масиви байтів (``bytearray``)" - -#: ../../src/basics/datatypes.txt:34 -msgid "Lists (``list``)" -msgstr "Списки (``list``)" - -#: ../../src/basics/datatypes.txt:35 -msgid "Tuples (``tuple``)" -msgstr "Кортежі (``tuple``)" - -#: ../../src/basics/datatypes.txt:36 -msgid "Sets (``set``)" -msgstr "Cети (``set``)" - -#: ../../src/basics/datatypes.txt:37 -msgid "Frozen sets (``frozenset``)" -msgstr "Заморожені сети (``frozenset``)" - -#: ../../src/basics/datatypes.txt:38 -msgid "Dictionaries (``dict``)" -msgstr "Словники (``dict``)" - -#: ../../src/basics/datatypes.txt:39 -msgid "None (``NoneType``)" -msgstr "Жодного (``NoneType``)" - -#: ../../src/basics/datatypes.txt:41 -msgid "" -"Any one can use them without additional imports or packages installations." -msgstr "" -"Будь-хто може використовувати їх без додаткового імпорту " -"чи встановлення пакетів. " - -#: ../../src/basics/datatypes.txt:44 -msgid "Text" -msgstr "Текстові дані" - -#: ../../src/basics/datatypes.txt:46 -msgid "" -"Text data are stored as strings (``str`` data type) in Python. Any " -"sequence of letters, digits, punctuation marks and whitespace characters " -"enclosed with quotes is considered to be a string literal. Both single " -"quotes (``'``) and double quotes (``\"``) can be used interchangeably to " -"create a string in Python." -msgstr "" -"Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-яка " -"послідовність літер, цифр, знаків пунктуації та пробілів, взята в лапки, " -"вважається рядковим літералом. Обидві одинарні лапки (``'``) або подвійні " -"лапки (``\"``) можна взаємозамінно використовувати для створення рядків." - -#: ../../src/basics/datatypes.txt:58 -msgid "Escaping" -msgstr "Екранування" - -#: ../../src/basics/datatypes.txt:60 -msgid "" -"In programming this is a process of using a special character to indicate" -" that the following character(s) should be treated differently from their" -" literal meaning. The common usage is to include a special character(s) " -"within strings. A **backslash** character is used to *escape* the " -"following one." -msgstr "" -"У програмуванні це процес використання спеціального символу, щоб вказати, що " -"наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне значення. " -"Загальне використання полягає в тому, щоб включити спеціальний(і) символ(и) " -"в рядки. Символ **backslash** використовується для екранування наступного. " - -#: ../../src/basics/datatypes.txt:65 -msgid "Example of Escaping in Python" -msgstr "Приклади Екранування в Python" - -#: ../../src/basics/datatypes.txt:84 -msgid "Single quotes or double quotes" -msgstr "Одинарні або подвійні лапки" - -#: ../../src/basics/datatypes.txt:86 -msgid "" -"Don't care. Use any quote mark you like. A *string* is a sequence of " -"characters after the opening quote and till the closing one. You may use " -"double quotes in case a single quote is a part of the text (e.g. ``\"It's" -" a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship " -"was a \"Billy of Tea\"'``). It's a good practice not to mess single and " -"double quotes within one project. Just keep using a chosen one character " -"for all strings." -msgstr "" -"Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " -"після початкової лапки та до кінцевої. Ви можете використовувати подвійні " -"лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " -"Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of Tea\"'``). " -"Рекомендується не плутати одинарні та подвійні лапки в одному проекті. " -"Просто продовжуйте використовувати один вибраний символ для всіх рядків. " - -#: ../../src/basics/datatypes.txt:94 -msgid "Multiline strings" -msgstr "Багатострічкові рядки" - -#: ../../src/basics/datatypes.txt:96 -msgid "" -"You can assign a multiline string by using triple quotes: Both single " -"quote and double quote characters are available." -msgstr "" -"Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: в " -"середині них доступні як одинарні, так і подвійні лапки. " - -#: ../../src/basics/datatypes.txt:106 -msgid "" -"The same syntax is used to create docstring, which are a special case of " -"string usage. We will look on these in the future." -msgstr "" -"Такий самий синтаксис використовується для створення рядка документації, " -"який є окремим випадком використання рядка. Ми розглянемо це в майбутньому. " - -#: ../../src/basics/datatypes.txt:110 ../../src/basics/stdtypes.txt:28 -msgid "Supported operations" -msgstr "Операції підтримки" - -#: ../../src/basics/datatypes.txt:112 -msgid "This subsection describes only the most common operations." -msgstr "" -"У цьому розділі описано лише найпоширеніші операції. " - -#: ../../src/basics/datatypes.txt -msgid "Concatenation" -msgstr "Конкатинація" - -#: ../../src/basics/datatypes.txt:115 -msgid "The ``+`` operator is used to concatenate (join) two or more strings." -msgstr "" -"Оператор ``+`` використовується для конкатенації (об'єднання) двох або " -"більше рядків. " - -#: ../../src/basics/datatypes.txt:121 -msgid "" -"On the other hand the ``join`` method concatenates a collection of " -"strings, which may be more efficient than using ``+``." -msgstr "" -"З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " -"ефективнішим, ніж використання ``+``. " - -#: ../../src/basics/datatypes.txt -msgid "Repetition" -msgstr "Повторення" - -#: ../../src/basics/datatypes.txt:129 -msgid "" -"The ``*`` operator is used to repeat a string a specified number of " -"times. Only multipliers of the ``int`` type are allowed." -msgstr "" -"Оператор ``*`` використовується для повторення рядка вказану кількість " -"разів. Дозволені операції лише з множниками типу ``int``. " - -#: ../../src/basics/datatypes.txt -msgid "Length" -msgstr "Довжина" - -#: ../../src/basics/datatypes.txt:137 -msgid "The ``len`` function is used to find the length of a string." -msgstr "Функція ``len`` використовується для визначення довжини рядка." - -#: ../../src/basics/datatypes.txt -msgid "Case conversion" -msgstr "Перетворення регістру" - -#: ../../src/basics/datatypes.txt:144 -msgid "" -"The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " -"actions on case." -msgstr "" -"Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " -"зміною регістра. " - -#: ../../src/basics/datatypes.txt:147 -msgid "``lower`` creates a new string with all lower-case characters." -msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." - -#: ../../src/basics/datatypes.txt:149 -msgid "``upper`` creates a new string with all upper-case characters." -msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." - -#: ../../src/basics/datatypes.txt:151 -msgid "``capitalize`` creates a new string with the upper-case 1st character." -msgstr "``capitalize`` створює новий рядок із першим символом у верхньому " -"регістрі. " - -#: ../../src/basics/datatypes.txt:153 -msgid "``title`` will make all characters after whitespace upper case." -msgstr "``title`` зробить усі символи після пробілів верхнім регістром." - -#: ../../src/basics/datatypes.txt -msgid "Stripping" -msgstr "Зачистка" - -#: ../../src/basics/datatypes.txt:164 -msgid "" -"The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " -"leading and/or trailing whitespace characters." -msgstr "" -"Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " -"початкових і/або кінцевих пробільних символів. " - -#: ../../src/basics/datatypes.txt:175 -msgid "Strings are subscriptable" -msgstr "Рядки можна підписувати" - -#: ../../src/basics/datatypes.txt:177 -msgid "``str`` is not the only one subscriptable data type in Python." -msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." - -#: ../../src/basics/datatypes.txt:179 -msgid "" -"This means you can access individual characters or slices within a string" -" using indexes. A string is a *sequence* of characters and each character" -" within a string has its own position - an *index*. Indexing starts at 0," -" so the first character in a string is at index 0, the second one is at " -"index 1, and so on. Negative indexing is also possible, with -1 " -"representing the last character in a string, -2 representing the second-" -"to-last character, and so on. Use square brackets (``[]``) to access the " -"index." -msgstr "" -"Це означає, що ви можете отримати доступ до окремих символів або фрагментів " -"у рядку за допомогою індексів. Рядок — це послідовність символів, і кожен " -"символ у рядку має власну позицію — індекс. Індексація починається з 0, " -"отже, перший символ у рядку має індекс 0, другий - індекс 1 і так далі. " -"Також можливе від'ємне індексування, коли -1 представляє останній символ у " -"рядку, а -2 представляє передостанній символ і так далі. Використовуйте " -"квадратні дужки (``[]``), щоб отримати доступ до індексу. " - -#: ../../src/basics/datatypes.txt:194 -msgid "" -"You can also *slice* strings, this means to get a subsequence of " -"characters. The slice syntax consists of 3 digits:" -msgstr "" -"Ви також можете *розрізати* рядки, тобто отримати підпослідовність символів. " -"Синтаксис фрагмента складається з 3 цифр: " - -#: ../../src/basics/datatypes.txt:197 -msgid "the first one represent the index to start (inclusive), defaults to 0" -msgstr "" -"Перший представляє початковий індекс (включно), за замовчанням " -"дорівнює 0. " - -#: ../../src/basics/datatypes.txt:198 -msgid "" -"the second one represent the index to stop (non-inclusive), defaults to " -"the length of the sequence" -msgstr "" -"Другий представляє індекс для зупинки (не включно), за замовчуванням довжина " -"послідовності. " - -#: ../../src/basics/datatypes.txt:200 -msgid "the third one represents a step, defaults to 1" -msgstr "Третій представляє крок, за замовчуванням 1." - -#: ../../src/basics/datatypes.txt:202 -msgid "" -"These numbers are separated within colon (``:``) and enclosed within " -"square brackets. Any slice digit may be omitted." -msgstr "" -"Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " -"цифра зрізу може бути упущена. " - -#: ../../src/basics/datatypes.txt:205 -msgid "Sequence slicing" -msgstr "Нарізка послідовності" - -#: ../../src/basics/datatypes.txt:216 -msgid "Strings are iterable" -msgstr "Рядки можна повторювати" - -#: ../../src/basics/datatypes.txt:218 -msgid "" -"Since strings are arrays, we can loop through the characters in a string " -"with a ``for`` loop:" -msgstr "" -"Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " -"допомогою циклу ``for``: " - -#: ../../src/basics/datatypes.txt:227 -msgid "Strings are immutable" -msgstr "Рядки незмінні" - -#: ../../src/basics/datatypes.txt:229 -msgid "This means, you cannot change an individual character within a string." -msgstr "Це означає, що ви не можете змінити окремий символ у рядку." - -#: ../../src/basics/datatypes.txt:237 -msgid "Integers" -msgstr "Цілі числа" - -#: ../../src/basics/datatypes.txt:239 -msgid "" -"``int``, or integer, is a whole number, positive or negative, without " -"decimals." -msgstr "" -"``int``, тобто ціле число, може бути додатнім або від'ємним, без десяткових " -"знаків. " - -#: ../../src/basics/datatypes.txt:247 -msgid "Floats" -msgstr "Числа з плаваючою комою" - -#: ../../src/basics/datatypes.txt:249 -msgid "" -"``float``, or floating point number, is a number, positive or negative, " -"containing one or more decimals." -msgstr "" -"``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, що " -"містить один або більше десяткових знаків. " - #: ../../src/basics/exceptions.txt:3 msgid "Errors and Exceptions" msgstr "Помилки та винятки" @@ -424,14 +52,14 @@ msgstr "Вбудовані типи" #: ../../src/basics/stdtypes.txt:5 msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " -"instances and exceptions :cite:`docs-python:stdtypes`. This section " -"covers only the most base of them. Others will be discussed in the future" -" within their own topics." +"instances and exceptions :cite:`docs-python:stdtypes`. This section covers " +"only the most base of them. Others will be discussed in the future within " +"their own topics." msgstr "" "Основними вбудованими типами є числа, послідовності, відображення, класи, " "екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " "найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " -"власних тем. " +"власних тем." #: ../../src/basics/stdtypes.txt:11 msgid "Numeric types" @@ -439,27 +67,27 @@ msgstr "Числові типи" #: ../../src/basics/stdtypes.txt:13 msgid "" -"There are 3 distinct numeric types: *integers*, *floating point numbers*," -" and *complex numbers*. In addition, Booleans are a subtype of integers. " +"There are 3 distinct numeric types: *integers*, *floating point numbers*, " +"and *complex numbers*. In addition, Booleans are a subtype of integers. " "Integers have unlimited precision. Floating point numbers are usually " -"implemented usign ``double`` in C. Complex numbers have a real and " -"imaginary part, which are each a floating point number." +"implemented using ``double`` in C. Complex numbers have a real and imaginary " +"part, which are each a floating point number." msgstr "" "Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " "numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " "мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " "через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " -"кожна з яких є числом з плаваючою комою. " +"кожна з яких є числом з плаваючою комою." #: ../../src/basics/stdtypes.txt:19 msgid "" "Numbers are created by numeric literals or as the result of built-in " -"functions and operators. Unadorned integer literals (including hex, octal" -" and binary numbers) yield integers. Numeric literals containing a " -"decimal point or an exponent sign yield floating point numbers. Appending" -" ``j`` or ``J`` to a numeric literal yields an imaginary number (a " -"complex number with a zero real part) which you can add to an integer or " -"float to get a complex number with real and imaginary parts." +"functions and operators. Unadorned integer literals (including hex, octal " +"and binary numbers) yield integers. Numeric literals containing a decimal " +"point or an exponent sign yield floating point numbers. Appending ``j`` or " +"``J`` to a numeric literal yields an imaginary number (a complex number with " +"a zero real part) which you can add to an integer or float to get a complex " +"number with real and imaginary parts." msgstr "" "Числа створюються за допомогою числових літералів або як результат " "вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " @@ -468,7 +96,11 @@ msgstr "" "плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " "число (комплексне число з нульовою дійсною частиною), яке ви можете додати " "до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " -"з дійсною та уявною частинами. " +"з дійсною та уявною частинами." + +#: ../../src/basics/stdtypes.txt:28 +msgid "Supported operations" +msgstr "Операції підтримки" #: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 #: ../../src/basics/stdtypes.txt:201 @@ -482,7 +114,7 @@ msgstr "Результат" #: ../../src/basics/stdtypes.txt:33 msgid "``x + y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:33 msgid "sum of *x* and *y*" @@ -490,7 +122,7 @@ msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:35 msgid "``x - y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:35 msgid "difference of *x* and *y*" @@ -498,7 +130,7 @@ msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:37 msgid "``x * y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:37 msgid "product of *x* and *y*" @@ -506,7 +138,7 @@ msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:39 msgid "``x / y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:39 msgid "quotient of *x* and *y*" @@ -514,7 +146,7 @@ msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:41 msgid "``x // y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:41 msgid "floored quotient of *x* and *y*" @@ -522,7 +154,7 @@ msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:43 msgid "``x % y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:43 msgid "remainder of ``x / y``" @@ -530,7 +162,7 @@ msgstr "залишок від ділення``x / y``" #: ../../src/basics/stdtypes.txt:45 msgid "``-x``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:45 msgid "*x* negated" @@ -538,7 +170,7 @@ msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:47 msgid "``+x``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:47 msgid "*y* unchanged" @@ -546,7 +178,7 @@ msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:49 msgid "``abs(x)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:49 msgid "absolute value or magnitude of *x*" @@ -554,7 +186,7 @@ msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:51 msgid "``int(x)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:51 msgid "*x* converted to integer" @@ -562,7 +194,7 @@ msgstr "*x* перетворено на ціле число" #: ../../src/basics/stdtypes.txt:53 msgid "``float(x)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:53 msgid "*x* converted to floating point" @@ -570,19 +202,19 @@ msgstr "*x* перетворено на число з плаваючою ком #: ../../src/basics/stdtypes.txt:55 msgid "``complex(re, im)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:55 msgid "" -"a complex number with real part *re*, imaginary part *im*. *im* defaults " -"to zero." +"a complex number with real part *re*, imaginary part *im*. *im* defaults to " +"zero." msgstr "" -"Комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " -"замовчуванням на нуль. " +"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " +"замовчуванням на нуль." #: ../../src/basics/stdtypes.txt:58 msgid "``divmod(x, y)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:58 msgid "the pair ``(x // y, x % y)``" @@ -590,7 +222,7 @@ msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:60 msgid "``pow(x, y)`` ``x ** y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:60 msgid "*x* to the power *y*" @@ -598,23 +230,23 @@ msgstr "*x* у степені *y*" #: ../../src/basics/stdtypes.txt:64 msgid "" -"``x // y`` also referred to as integer division. The resultant value is a" -" whole integer, through the result's type is not necessarily int. The " -"result is always rounded towards minus infinity: ``1 // 2`` is ``0``" +"``x // y`` also referred to as integer division. The resultant value is a " +"whole integer, through the result's type is not necessarily int. The result " +"is always rounded towards minus infinity: ``1 // 2`` is ``0``" msgstr "" "``x // y`` також називають цілим діленням. Результуюче значення є цілим " "числом, через тип результату не обов'язково int. Результат завжди " -"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0`` " +"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" #: ../../src/basics/stdtypes.txt:69 msgid "" -"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an" -" optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive " -"and negative infinity." +"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " +"optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive and " +"negative infinity." msgstr "" "``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " "префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " -"нескінченність. " +"нескінченність." #: ../../src/basics/stdtypes.txt:74 msgid "Code examples" @@ -636,25 +268,24 @@ msgstr "Порівняння цінностей" #: ../../src/basics/stdtypes.txt:106 msgid "" -"Numbers of built-in numeric types can be compared within and across their" -" types (with the restriction that complex numbers do not support order " +"Numbers of built-in numeric types can be compared within and across their " +"types (with the restriction that complex numbers do not support order " "comparison). Within the limits of the types involved, they compare " "mathematically correct without loss of precision." msgstr "" -"Числа вбудованих числових типів можна порівнювати всередині та між типами " -"(з обмеженням, що комплексні числа не підтримують порядок порівняння). У " -"межах залучених типів вони порівняються математично правильно без втрати " -"точності. " +"Числа вбудованих числових типів можна порівнювати всередині та між типами (з " +"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " +"залучених типів вони порівняються математично правильно без втрати точності." #: ../../src/basics/stdtypes.txt:111 msgid "" -"The \"not-a-number\" values ``float(\"NaN\")`` and " -"``decimal.Decimal('NaN')`` are special. Any ordered comparison of a " -"number to a not-a-number value is false." +"The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." +"Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" +"number value is false." msgstr "" -"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` " -"є спеціальними. Будь-яке впорядковане порівняння числа з нечисловим " -"значенням є хибним." +"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " +"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " +"є хибним." #: ../../src/basics/stdtypes.txt:115 msgid "Sequence types" @@ -662,13 +293,13 @@ msgstr "Типи послідовностей" #: ../../src/basics/stdtypes.txt:117 msgid "" -"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*." -" Additional sequence types tailored for processing of binary data and " -"text strings are described in dedicated sections." +"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " +"Additional sequence types tailored for processing of binary data and text " +"strings are described in dedicated sections." msgstr "" "Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " "Додаткові типи послідовностей, призначені для обробки двійкових даних і " -"текстових рядків, описані у інших розділах. " +"текстових рядків, описані у інших розділах." #: ../../src/basics/stdtypes.txt:122 msgid "Lists" @@ -676,11 +307,12 @@ msgstr "Списки" #: ../../src/basics/stdtypes.txt:124 msgid "" -"Lists are mutable sequences, typically used to store collections of " -"items. They may be constructed in several ways:" +"Lists are mutable sequences, typically used to store collections of items. " +"They may be constructed in several ways:" msgstr "" "Списки - це змінні послідовності, які зазвичай використовуються для " -"зберігання колекцій елементів. Вони можуть бути побудовані кількома способами:" +"зберігання колекцій елементів. Вони можуть бути побудовані кількома " +"способами:" #: ../../src/basics/stdtypes.txt:127 msgid "using a pair of square brackets to denote the empty list: ``[]``" @@ -689,18 +321,17 @@ msgstr "" #: ../../src/basics/stdtypes.txt:128 msgid "" -"using square brackets, separating items with commas: ``[a]``, ``[a, b, " -"c]``" +"using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" -"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, " -"``[a, b, c]`` " +"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " +"b, c]``" #: ../../src/basics/stdtypes.txt:129 msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" #: ../../src/basics/stdtypes.txt:130 -msgid "using the type constuctor: ``list()`` or ``list(iterable)``" +msgid "using the type constructor: ``list()`` or ``list(iterable)``" msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" #: ../../src/basics/stdtypes.txt:133 @@ -709,15 +340,15 @@ msgstr "Кортежі" #: ../../src/basics/stdtypes.txt:135 msgid "" -"Tuples are immutable sequences, typically used to store collections of " -"data or for cases where an immutable sequence of data is needed (such as " -"allowing storage in a ``set`` or ``dict`` instances). They may be " -"constructed in a number of ways:" +"Tuples are immutable sequences, typically used to store collections of data " +"or for cases where an immutable sequence of data is needed (such as allowing " +"storage in a ``set`` or ``dict`` instances). They may be constructed in a " +"number of ways:" msgstr "" "Кортежі - це незмінні послідовності, які зазвичай використовуються для " "зберігання колекцій даних або для випадків, коли потрібна незмінна " "послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " -"``dict``). Вони можуть бути конструйовані декількома способами: " +"``dict``). Вони можуть бути конструйовані декількома способами:" #: ../../src/basics/stdtypes.txt:140 msgid "using a pair of parentheses to denote the empty tuple: ``()``" @@ -727,8 +358,8 @@ msgstr "" #: ../../src/basics/stdtypes.txt:141 msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" -"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або " -"``(a, b, c)``" +"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " +"c)``" #: ../../src/basics/stdtypes.txt:142 msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" @@ -744,19 +375,19 @@ msgstr "Загальні операції" #: ../../src/basics/stdtypes.txt:151 msgid "``x in s`` ``x not in s``" -msgstr "" +msgstr "``x in s`` ``x not in s``" #: ../../src/basics/stdtypes.txt:151 msgid "" -"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal" -" to *x*" +"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " +"*x*" msgstr "" -"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* " -"дорівнює *x*" +"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " +"*x*" #: ../../src/basics/stdtypes.txt:154 msgid "``s + t``" -msgstr "" +msgstr "``s + t``" #: ../../src/basics/stdtypes.txt:154 msgid "the concatenation of *s* and *t*" @@ -764,7 +395,7 @@ msgstr "конкатенація s і t" #: ../../src/basics/stdtypes.txt:156 msgid "``s * n``" -msgstr "" +msgstr "``s * n``" #: ../../src/basics/stdtypes.txt:156 msgid "equivalent to adding *s* to itself *n* times" @@ -772,7 +403,7 @@ msgstr "еквівалентно додаванню *s* до себе *n* раз #: ../../src/basics/stdtypes.txt:158 msgid "``s[i]``" -msgstr "" +msgstr "``s[i]``" #: ../../src/basics/stdtypes.txt:158 msgid "*i*-th item of *s*, origin 0" @@ -780,19 +411,19 @@ msgstr "*i*-й елемент *s*, джерело 0" #: ../../src/basics/stdtypes.txt:160 msgid "``s[i:j]`` ``s[i:j:k]``" -msgstr "" +msgstr "``s[i:j]`` ``s[i:j:k]``" #: ../../src/basics/stdtypes.txt:160 msgid "" -"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) " -"may be omitted." +"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " +"be omitted." msgstr "" "фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " -"3) можна опустити. " +"3) можна опустити." #: ../../src/basics/stdtypes.txt:163 msgid "``len(s)``" -msgstr "" +msgstr "``len(s)``" #: ../../src/basics/stdtypes.txt:163 msgid "length of *s*" @@ -800,7 +431,7 @@ msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:165 msgid "``min(s)``" -msgstr "" +msgstr "``min(s)``" #: ../../src/basics/stdtypes.txt:165 msgid "smallest item of *s*" @@ -808,7 +439,7 @@ msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:167 msgid "``max(s)``" -msgstr "" +msgstr "``max(s)``" #: ../../src/basics/stdtypes.txt:167 msgid "largest item of *s*" @@ -816,7 +447,7 @@ msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:169 msgid "``s.count(x)``" -msgstr "" +msgstr "``s.count(x)``" #: ../../src/basics/stdtypes.txt:169 msgid "total number of occurrences of *x* in *s*" @@ -824,59 +455,58 @@ msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:171 msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -msgstr "" +msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" #: ../../src/basics/stdtypes.txt:171 msgid "" -"index of the first occurrence of *x* in *s* (at or after index *i* and " -"before index *j*)" +"index of the first occurrence of *x* in *s* at or after index *i* and before " +"index *j*" msgstr "" -"індекс першого входження *x* у *s* (в або після індексу *i* та перед " -"індексом *j*) " +"індекс першого входження *x* у *s* на або після індексу *i* та перед " +"індексом *j*" #: ../../src/basics/stdtypes.txt:181 msgid "" "Sequences can be compared only within each of their types, with the " -"restriction that ranges do not support order comparison. Equality " -"comparison across these types results in inequality, and ordering " -"comparison across these types raises ``TypeError``." +"restriction that ranges do not support order comparison. Equality comparison " +"across these types results in inequality, and ordering comparison across " +"these types raises ``TypeError``." msgstr "" -"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, " -"що діапазони не підтримують порівняння порядку. Порівняння рівності між " -"цими типами призводить до нерівності, а впорядковане порівняння цих " -"типів викликає ``TypeError``. " +"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " +"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " +"типами призводить до нерівності, а впорядковане порівняння цих типів " +"викликає ``TypeError``." #: ../../src/basics/stdtypes.txt:186 msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " -"equal to themselves. Lexicographical comparison between buit-in " -"collections works as follows:" +"equal to themselves. Lexicographical comparison between built-in collections " +"works as follows:" msgstr "" "Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " "елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " "рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " -"таким чином: " +"таким чином:" #: ../../src/basics/stdtypes.txt:191 msgid "" -"For two collections to compare equal, they must be of the same type, have" -" the same length, and each pair of corresponding elements must compare " -"equal." +"For two collections to compare equal, they must be of the same type, have " +"the same length, and each pair of corresponding elements must compare equal." msgstr "" "Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " "мати однакову довжину, і кожна пара відповідних елементів повинна " -"порівнюватися. " +"порівнюватися." #: ../../src/basics/stdtypes.txt:193 msgid "" "Collections that supports order comparison are ordered the same as their " -"first unequal elements. If corresponding element does not exist, the " -"shorter collection is ordered first." +"first unequal elements. If corresponding element does not exist, the shorter " +"collection is ordered first." msgstr "" -"Колекції, які підтримують порівняння порядку, упорядковуються так само, як " -"і їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " -"впорядковується коротша колекція. " +"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " +"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"впорядковується коротша колекція." #: ../../src/basics/stdtypes.txt:198 msgid "Mutable sequence types" @@ -884,7 +514,7 @@ msgstr "Змінні типи послідовностей" #: ../../src/basics/stdtypes.txt:203 msgid "``s[i] = x``" -msgstr "" +msgstr "``s[i] = x``" #: ../../src/basics/stdtypes.txt:203 msgid "item *i* of *s* is replaced by *x*" @@ -892,7 +522,7 @@ msgstr "елемент *i* з *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:205 msgid "``s[i:j] = t``" -msgstr "" +msgstr "``s[i:j] = t``" #: ../../src/basics/stdtypes.txt:205 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" @@ -900,7 +530,7 @@ msgstr "фрагмент *s* від *i* до *j*, замінений вміст #: ../../src/basics/stdtypes.txt:208 msgid "``del s[i:j]``" -msgstr "" +msgstr "``del s[i:j]``" #: ../../src/basics/stdtypes.txt:208 msgid "same as ``s[i:j] = []``" @@ -908,15 +538,15 @@ msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:210 msgid "``s[i:j:k] = t``" -msgstr "" +msgstr "``s[i:j:k] = t``" #: ../../src/basics/stdtypes.txt:210 -msgid "the elements of *s* are replaced by those of *t*[#]_" -msgstr "елементи *s* замінюються елементами *t*[#]_" +msgid "the elements of *s* are replaced by those of *t* [#]_" +msgstr "елементи *s* замінюються елементами *t* [#]_" #: ../../src/basics/stdtypes.txt:212 msgid "``del s[i:j:k]``" -msgstr "" +msgstr "``del s[i:j:k]``" #: ../../src/basics/stdtypes.txt:212 msgid "removes the elements of ``s[i:j:k]`` from the list" @@ -924,34 +554,34 @@ msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:214 msgid "``s.append(x)``" -msgstr "" +msgstr "``s.append(x)``" #: ../../src/basics/stdtypes.txt:214 msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" msgstr "" -"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]`` " +"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" #: ../../src/basics/stdtypes.txt:217 msgid "``s.clear()``" -msgstr "" +msgstr "``s.clear()``" #: ../../src/basics/stdtypes.txt:217 -msgid "removes all items from *s* (``del s[:]``)[#3.3]_" -msgstr "видаляє всі елементи з *s* (``del s[:]``)[#3.3]_" +msgid "removes all items from *s* (``del s[:]``) [#py33]_" +msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:219 msgid "``s.copy()``" -msgstr "" +msgstr "``s.copy()``" #: ../../src/basics/stdtypes.txt:219 -msgid "creates a shallow copy of *s* (``s[:]``)[#3.3]_" -msgstr "створює поверхневу копію *s* (``s[:]``)[#3.3]_" +msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" +msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:221 msgid "``s.extend(t)`` ``s += t``" -msgstr "" +msgstr "``s.extend(t)`` ``s += t``" #: ../../src/basics/stdtypes.txt:221 msgid "extends *s* with the contents of *t*" @@ -959,7 +589,7 @@ msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:224 msgid "``s.insert(i, x)``" -msgstr "" +msgstr "``s.insert(i, x)``" #: ../../src/basics/stdtypes.txt:224 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" @@ -967,19 +597,19 @@ msgstr "вставляє *x* у *s* за індексом *i*; те саме, щ #: ../../src/basics/stdtypes.txt:227 msgid "``s.pop()``, ``s.pop(i)``" -msgstr "" +msgstr "``s.pop()``, ``s.pop(i)``" #: ../../src/basics/stdtypes.txt:227 msgid "" -"retrieves the item at *i* and also removes it from *s* (if *i* is omitted" -" - use the last one available index)" +"retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " +"use the last one available index)" msgstr "" "отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " "пропущено - використовуйте останній доступний індекс)" #: ../../src/basics/stdtypes.txt:230 msgid "``s.remove(x)``" -msgstr "" +msgstr "``s.remove(x)``" #: ../../src/basics/stdtypes.txt:230 msgid "remove the first item that is equal to *x* from *s*" @@ -987,7 +617,7 @@ msgstr "видалити перший елемент, який дорівнює #: ../../src/basics/stdtypes.txt:232 msgid "``s.reverse()``" -msgstr "" +msgstr "``s.reverse()``" #: ../../src/basics/stdtypes.txt:232 msgid "reverses the items of *s* in place" @@ -1015,15 +645,15 @@ msgid "" "additional methods." msgstr "" "Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " -"методами. " +"методами." #: ../../src/basics/stdtypes.txt:289 msgid "" -"Strings compare lexicographically using the numerical Unicode code points" -" of their characters." +"Strings compare lexicographically using the numerical Unicode code points of " +"their characters." msgstr "" "Рядки порівнюються лексикографічно з використанням числових кодових точок " -"Unicode своїх символів. " +"Unicode своїх символів." #: ../../src/basics/stdtypes.txt:293 msgid "Set types" @@ -1032,16 +662,16 @@ msgstr "Типи сетів" #: ../../src/basics/stdtypes.txt:298 msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " -"across their types. They define order comparison operators to mean subset" -" and superset tests. Those relations do not define total ordering (e.g. " -"two sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one " -"another, nor supersets of one another)." +"across their types. They define order comparison operators to mean subset " +"and superset tests. Those relations do not define total ordering (e.g. two " +"sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " +"nor supersets of one another)." msgstr "" "Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " "між типами. Вони визначають оператори порівняння порядку, щоб проходити " "тести підмножини та надмножини. Ці відношення не визначають загального " "порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " -"підмножини одного іншого, ані надмножини один одного). " +"підмножини одного іншого, ані надмножини один одного)." #: ../../src/basics/stdtypes.txt:305 msgid "Mapping type" @@ -1051,25 +681,24 @@ msgstr "Тип відображення" msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " -"*dictionary*. In few words mappings are collections of keys and their " -"values." +"*dictionary*. In few words mappings are collections of keys and their values." msgstr "" "Об’єкт зіставлення зіставляє хешовані значення з довільними об’єктами. " "Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " "відображення, *dictionary*. Якщо кількома словами, то відображення - це " -"набори ключів та їхніх значень. " +"набори ключів та їхніх значень." #: ../../src/basics/stdtypes.txt:311 msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " -"hashable may not be used as keys. Values that compare equal (such as " -"``1``, ``1.0`` and ``True``) can be used interchangeably to index the " -"same dictionary entry." +"hashable may not be used as keys. Values that compare equal (such as ``1``, " +"``1.0`` and ``True``) can be used interchangeably to index the same " +"dictionary entry." msgstr "" -"Ключі словника - це майже довільні значення. Значення, які не хешуються, " -"не можуть бути використані як ключі. Значення, які порівнюються (такі як " -"``1``, ``1.0`` і ``True``), можна використовувати як взаємозамінні для " -"індексування тієї самої словникової статті. " +"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " +"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " +"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " +"тієї самої словникової статті." #: ../../src/basics/stdtypes.txt:315 msgid "Dictionaries can be created by several means:" @@ -1082,14 +711,14 @@ msgstr "Використовуйте дужки для позначення по #: ../../src/basics/stdtypes.txt:318 msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}" +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" msgstr "" "Використовуйте розділений комами список пар ``key: value`` з дужками: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" #: ../../src/basics/stdtypes.txt:320 -msgid "Use a dict comprehension: `{x: x ** 2 for x in range(10)}``" -msgstr "Використовуючи генератори списків: `{x: x 2 for x in range(10)}``" +msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" +msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" #: ../../src/basics/stdtypes.txt:321 msgid "" @@ -1097,15 +726,15 @@ msgid "" "``dict(key=100)``" msgstr "" "Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " -"``dict(key=100)`` " +"``dict(key=100)``" #: ../../src/basics/stdtypes.txt:327 msgid "" -"Instances of ``dict`` compare equal if and only if they have equal key-" -"value pairs." +"Instances of ``dict`` compare equal if and only if they have equal key-value " +"pairs." msgstr "" -"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони " -"мають однакові пари ключ-значення. " +"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " +"однакові пари ключ-значення." #: ../../src/basics/stdtypes.txt:330 msgid "Order comparisons raise ``TypeError``." @@ -1117,9 +746,9 @@ msgstr "Синтаксис Python" #: ../../src/basics/syntax.txt:5 msgid "" -"As a natural language like English or Ukrainian has its own rules to " -"write down something, programming languages do. This makes them " -"programming **languages**." +"As a natural language like English or Ukrainian has its own rules to write " +"down something, programming languages do. This makes them programming " +"**languages**." msgstr "" "Оскільки природна мова, як-от англійська чи українська, має власні правила " "запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " @@ -1127,11 +756,10 @@ msgstr "" #: ../../src/basics/syntax.txt:9 msgid "" -"A programming language syntax is the set of rules and principles that " -"govern how code is written and structured in a given programming " -"language. Syntax encompasses the rules for writing statements, " -"expressions, variables, data types, control structures, and other " -"constructs that make up the language." +"A programming language syntax is the set of rules and principles that govern " +"how code is written and structured in a given programming language. Syntax " +"encompasses the rules for writing statements, expressions, variables, data " +"types, control structures, and other constructs that make up the language." msgstr "" "Синтаксис мови програмування - це набір правил і принципів, які регулюють " "написання та структурування коду даною мовою програмування. Синтаксис " @@ -1141,54 +769,54 @@ msgstr "" #: ../../src/basics/syntax.txt:14 msgid "" "The syntax of a programming language defines how code is organized and " -"interpreted by a compiler or interpreter. It defines the rules for " -"writing valid statements and expressions that can be understood and " -"executed by the language's runtime system." +"interpreted by a compiler or interpreter. It defines the rules for writing " +"valid statements and expressions that can be understood and executed by the " +"language's runtime system." msgstr "" "Синтаксис мови програмування визначає, як код організовується та " "інтерпретується компілятором або інтерпретатором. Він визначає правила " "написання дійсних операторів і виразів, які можуть бути зрозумілі та " -"виконані системою виконання мови. " +"виконані системою виконання мови." #: ../../src/basics/syntax.txt:19 msgid "" "A programming language's syntax is designed to be both readable and " -"expressive, allowing programmers to write code that is easy to understand" -" and modify. Syntax often influences the style and structure of code, as " -"well as its maintainability and performance." +"expressive, allowing programmers to write code that is easy to understand " +"and modify. Syntax often influences the style and structure of code, as well " +"as its maintainability and performance." msgstr "" -"Синтаксис мови програмування розроблено таким чином, щоб він був " -"читабельним і виразним, дозволяючи програмістам писати код, який легко " -"зрозуміти та змінювати. Синтаксис часто впливає на стиль і структуру коду, " -"а також на його зручність обслуговування та продуктивність. " +"Синтаксис мови програмування розроблено таким чином, щоб він був читабельним " +"і виразним, дозволяючи програмістам писати код, який легко зрозуміти та " +"змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " +"його зручність обслуговування та продуктивність." #: ../../src/basics/syntax.txt:24 msgid "" -"Different programming languages have different syntax, with some " -"languages being more concise and expressive than others. While syntax is " -"an important aspect of a programming language, it is only one of several " -"factors that determine its ease of use, flexibility, and suitability for " -"different programming tasks." +"Different programming languages have different syntax, with some languages " +"being more concise and expressive than others. While syntax is an important " +"aspect of a programming language, it is only one of several factors that " +"determine its ease of use, flexibility, and suitability for different " +"programming tasks." msgstr "" "Різні мови програмування мають різний синтаксис, при цьому деякі мови є " "більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " "аспектом мови програмування, він є лише одним із кількох факторів, які " "визначають її легкість у використанні, гнучкість і придатність для різних " -"завдань програмування. " +"завдань програмування." #: ../../src/basics/syntax.txt:30 msgid "" -"In the case of Python, the language's syntax defines how code is written " -"and structured in a way that is consistent, readable, and easy to " -"understand. A general overview is provided below, no need to dive deep in" -" this now. All of the following is to be discussed during the course. So," -" some of the key aspects of Python's syntax include:" +"In the case of Python, the language's syntax defines how code is written and " +"structured in a way that is consistent, readable, and easy to understand. A " +"general overview is provided below, no need to dive deep in this now. All of " +"the following is to be discussed during the course. So, some of the key " +"aspects of Python's syntax include:" msgstr "" "У випадку Python синтаксис мови визначає, як код буде написаний і " "структурований таким чином, щоб він був послідовним, читабельним і легким " "для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " "занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " -"курсу. Отже, деякі з ключових аспектів синтаксису Python включають: " +"курсу. Отже, деякі з ключових аспектів синтаксису Python включають:" #: ../../src/basics/syntax.txt msgid "Indentation" @@ -1196,13 +824,13 @@ msgstr "Відступ" #: ../../src/basics/syntax.txt:37 msgid "" -"Python uses whitespace, specifically indentation, to delimit blocks of " -"code, such as loops, conditionals, and functions. This means that the " -"indentation level of a line determines which block of code it belongs to." +"Python uses whitespace, specifically indentation, to delimit blocks of code, " +"such as loops, conditionals, and functions. This means that the indentation " +"level of a line determines which block of code it belongs to." msgstr "" "Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " "таких як цикли, умови та функції. Це означає, що рівень відступу рядка " -"визначає, до якого блоку коду він належить. " +"визначає, до якого блоку коду він належить." #: ../../src/basics/syntax.txt msgid "Statement structure" @@ -1218,7 +846,7 @@ msgstr "" "Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " "вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " "поміститися в один рядок, його можна продовжити в кількох рядках, " -"використовуючи зворотні похилі риски. " +"використовуючи зворотні похилі риски." #: ../../src/basics/syntax.txt ../../src/basics/variables.txt:3 msgid "Variables" @@ -1226,10 +854,10 @@ msgstr "Змінні" #: ../../src/basics/syntax.txt:49 msgid "" -"In Python, variables are created automatically when a value is assigned " -"to them, and their type is inferred from the value. Variables can be " -"assigned values of different types, including integers, floats, strings, " -"and more complex data structures like lists and dictionaries." +"In Python, variables are created automatically when a value is assigned to " +"them, and their type is inferred from the value. Variables can be assigned " +"values of different types, including integers, floats, strings, and more " +"complex data structures like lists and dictionaries." msgstr "" "У Python змінні створюються автоматично, якщо їм присвоюється значення, і " "їхній тип визначається на основі значення. Змінним можна присвоювати " @@ -1243,14 +871,14 @@ msgstr "Оператори" #: ../../src/basics/syntax.txt:55 msgid "" "Python supports a wide range of operators for performing arithmetic, " -"comparison, and logical operations. These include arithmetic operators " -"like ``+``, ``-``, ``*``, and ``/``, as well as comparison operators like" -" ``<``, ``>``, ``==``, and ``!=``." +"comparison, and logical operations. These include arithmetic operators like " +"``+``, ``-``, ``*``, and ``/``, as well as comparison operators like ``<``, " +"``>``, ``==``, and ``!=``." msgstr "" "Python підтримує широкий спектр операторів для виконання арифметичних, " "порівнянь і логічних операцій. До них належать арифметичні оператори, такі " -"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як ``<`` " -", ``>``, ``==`` і ``!=``. " +"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як " +"``<`` , ``>``, ``==`` і ``!=``." #: ../../src/basics/syntax.txt msgid "Control flow" @@ -1258,10 +886,9 @@ msgstr "Контроль потоку" #: ../../src/basics/syntax.txt:61 msgid "" -"Python provides control flow statements like if, else, elif, for, and " -"while to control the flow of execution in a program. These statements are" -" used to make decisions, repeat code, or perform actions based on " -"conditions." +"Python provides control flow statements like if, else, elif, for, and while " +"to control the flow of execution in a program. These statements are used to " +"make decisions, repeat code, or perform actions based on conditions." msgstr "" "Python надає оператори потоку керування, як-от if, else, elif, for та while, " "для керування потоком виконання в програмі. Ці оператори використовуються " @@ -1271,12 +898,12 @@ msgstr "" #: ../../src/basics/syntax.txt:67 msgid "" "In Python, functions are defined using the def keyword and can take " -"arguments and return values. The body of a function is defined using a " -"block of indented code." +"arguments and return values. The body of a function is defined using a block " +"of indented code." msgstr "" "У Python функції визначаються за допомогою ключового слова def і можуть " "отримувати аргументи та повертати значення. Тіло функції визначається за " -"допомогою блоку коду з відступами. " +"допомогою блоку коду з відступами." #: ../../src/basics/syntax.txt msgid "Modules" @@ -1284,9 +911,9 @@ msgstr "Модулі" #: ../../src/basics/syntax.txt:72 msgid "" -"Python has a large library of modules that provide pre-written code for a" -" variety of tasks. Modules can be imported into a program using the " -"import statement." +"Python has a large library of modules that provide pre-written code for a " +"variety of tasks. Modules can be imported into a program using the import " +"statement." msgstr "" "Python має велику бібліотеку модулів, які містять попередньо написаний код " "для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " @@ -1298,13 +925,13 @@ msgstr "Обробка винятків" #: ../../src/basics/syntax.txt:77 msgid "" -"Python provides a way to handle errors and exceptions in a program using " -"the try, except, else, and finally keywords. These statements allow a " -"program to gracefully recover from errors and continue executing." +"Python provides a way to handle errors and exceptions in a program using the " +"try, except, else, and finally keywords. These statements allow a program to " +"gracefully recover from errors and continue executing." msgstr "" "Python надає спосіб обробки помилок і винятків у програмі за допомогою " "ключових слів try, except, else і finally. Ці оператори дозволяють програмі " -"плавно відновлюватися після помилок і продовжувати виконання. " +"плавно відновлюватися після помилок і продовжувати виконання." #: ../../src/basics/syntax.txt:81 msgid "In few words:" @@ -1318,27 +945,27 @@ msgstr "Приклад сценарію Input/Output" msgid "" "The code snippet above demonstrates some basics abilities of Python to " "gather data from the user, process it and print out back. Note the words " -"starting with a **#** (hash) symbol. This is a comment. Any sequence of " +"starting with a # (hash) symbol. This is a comment. Any sequence of " "characters after the hash and till the line end are considered to be a " -"comment. These are for those people, who see the code and they are " -"ignored by the interpreter." +"comment. These are for those people, who see the code and they are ignored " +"by the interpreter." msgstr "" "Наведений вище фрагмент коду демонструє деякі основні можливості Python " -"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть " -"увагу на слова, що починаються символом **#**(решітка). Це коментар. " -"Будь-яка послідовність символів після хеша і до кінця рядка вважається " -"коментарем. Це необхідно, щоб люди які бачать код могли його зрозуміти, при " -"цьому інтерпретатор їх ігнорує. " +"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть увагу " +"на слова, що починаються символом #(решітка). Це коментар. Будь-яка " +"послідовність символів після хеша і до кінця рядка вважається коментарем. Це " +"необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " +"інтерпретатор їх ігнорує." #: ../../src/basics/syntax.txt:108 msgid "" "On the other hand each individual line is the instruction for the " -"interpreter to perform some action, like gather inputs, do math, store " -"data in memory etc." +"interpreter to perform some action, like gather inputs, do math, store data " +"in memory etc." msgstr "" "З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " "певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " -"збереження даних у пам'яті тощо. " +"збереження даних у пам'яті тощо." #: ../../src/basics/testing.txt:3 msgid "Testing" @@ -1352,42 +979,42 @@ msgid "" msgstr "" "В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " "зберігати значення (дані). Значення, яке зберігається у змінній, може бути " -"змінено або доступне програмою під час її виконання. " +"змінено або доступне програмою під час її виконання." #: ../../src/basics/variables.txt:9 msgid "" "In Python, variables are created dynamically once a value is assigned to " -"them. This makes Python a dynamically typed language, which means that " -"the data type of a variable is inferred from the value assigned to it. " -"So, you do not need to declare a variable before using it, as in " -"statically typed languages." +"them. This makes Python a dynamically typed language, which means that the " +"data type of a variable is inferred from the value assigned to it. So, you " +"do not need to declare a variable before using it, as in statically typed " +"languages." msgstr "" "У Python змінні створюються динамічно після присвоєння їм значення. Це " "робить Python динамічно типізованою мовою, а це означає, що тип даних " "змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " -"оголошувати змінну перед її використанням, як у статично типізованих мовах. " +"оголошувати змінну перед її використанням, як у статично типізованих мовах." #: ../../src/basics/variables.txt:14 msgid "" -"The ability to create variables dynamically and infer their data type " -"makes Python code more concise and easier to read. However, it also " -"requires careful attention to variable naming and assignment to avoid " -"unexpected behavior." +"The ability to create variables dynamically and infer their data type makes " +"Python code more concise and easier to read. However, it also requires " +"careful attention to variable naming and assignment to avoid unexpected " +"behavior." msgstr "" "Можливість динамічно створювати змінні та виводити їхні типи даних робить " "код Python більш лаконічним і легшим для читання. Однак це також вимагає " "пильної уваги до іменування та призначення змінних, щоб уникнути " -"неочікуваної поведінки. " +"неочікуваної поведінки." #: ../../src/basics/variables.txt:18 msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " -"variable, the portion on the left of the operator is a *variable name* " -"and the portion on the right is a *value* to assign to a variable." +"variable, the portion on the left of the operator is a *variable name* and " +"the portion on the right is a *value* to assign to a variable." msgstr "" "У Python ``=`` (оператор присвоєння) використовується для встановлення " "значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " -"частина праворуч - це значення, яке призначається для неї. " +"частина праворуч - це значення, яке призначається для неї." #: ../../src/basics/variables.txt:22 msgid "Variable assignment in Python" @@ -1403,10 +1030,10 @@ msgstr "Присвоєння назви" #: ../../src/basics/variables.txt:39 msgid "" -"In Python there are several rules that describe how to name your " -"variables. Some of these are requirements and cannot be ignored, others " -"are rather recommended than required and can be omitted. For now note, " -"that a variable name **cannot**:" +"In Python there are several rules that describe how to name your variables. " +"Some of these are requirements and cannot be ignored, others are rather " +"recommended than required and can be omitted. For now note, that a variable " +"name **cannot**:" msgstr "" "У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " "них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " @@ -1435,11 +1062,329 @@ msgstr "Також ось деякі загальні рекомендації #: ../../src/basics/variables.txt:51 msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" -"не використовуйте вбудовані функції як назву змінної (наприклад, " -"``len = 42``)" +"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " +"42``)" #: ../../src/basics/variables.txt:52 msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" -"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``) " - +"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" + +#~ msgid "Data Types" +#~ msgstr "Типи Даних" + +#~ msgid "" +#~ "Data may represent different things and require various operations " +#~ "available. In programming data types is an important concept. For example " +#~ "**1984** may be a number (``1984``), a text (``\"1984\"``) or event a " +#~ "date. The data type describes the operations, that are allowed for the " +#~ "data, like additions for numbers or concatenation for text (e.g. ``1 + 2 -" +#~ "> 3``, ``\"1\" + \"3\" -> \"13\"``)." +#~ msgstr "" +#~ "Дані можуть представляти різні речі та вимагати різноманітних " +#~ "доступнихоперацій. У програмуванні типи даних є важливою концепцією. " +#~ "Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984\"`` ) " +#~ "або подією чи датою. Тип даних описує можливі операції, дозволені для " +#~ "даних, як-от додавання чисел або конкатенація для тексту (наприклад, ``1 " +#~ "+ 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." + +#~ msgid "" +#~ "Python uses dynamic typing. This means as a developer you should not " +#~ "declare a variable with its data type - the interpreter will do this for " +#~ "you. Other popular language using dynamic typing are JavaScript and PHP. " +#~ "Setting variables in Python is as easy as:" +#~ msgstr "" +#~ "Python використовує динамічну типізацію. Це означає, що ви, як розробник, " +#~ "не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " +#~ "за вас. Іншими популярними мовами, які використовують динамічну " +#~ "типізацію, є JavaScript і PHP. Налаштування змінних у Python доволі " +#~ "просто, як: " + +#~ msgid "Built-In Data Types" +#~ msgstr "Вбудовані типи даних" + +#~ msgid "Python has the following data types built-in:" +#~ msgstr "Python має такі вбудовані типи даних:" + +#~ msgid "Integers (``int``)" +#~ msgstr "Цілі числа (``int``)" + +#~ msgid "Floating-point numbers (``float``)" +#~ msgstr "Числа з плаваючою крапкою (``float``)" + +#~ msgid "Complex numbers (``complex``)" +#~ msgstr "Комплексні числа (``complex``)" + +#~ msgid "Booleans (``bool``)" +#~ msgstr "Логічні значення (``bool``)" + +#~ msgid "Strings (``str``)" +#~ msgstr "Рядки (``str``)" + +#~ msgid "Bytes (``bytes``)" +#~ msgstr "Байти (``bytes``)" + +#~ msgid "Byte arrays (``bytearray``)" +#~ msgstr "Масиви байтів (``bytearray``)" + +#~ msgid "Lists (``list``)" +#~ msgstr "Списки (``list``)" + +#~ msgid "Tuples (``tuple``)" +#~ msgstr "Кортежі (``tuple``)" + +#~ msgid "Sets (``set``)" +#~ msgstr "Cети (``set``)" + +#~ msgid "Frozen sets (``frozenset``)" +#~ msgstr "Заморожені сети (``frozenset``)" + +#~ msgid "Dictionaries (``dict``)" +#~ msgstr "Словники (``dict``)" + +#~ msgid "None (``NoneType``)" +#~ msgstr "Жодного (``NoneType``)" + +#~ msgid "" +#~ "Any one can use them without additional imports or packages installations." +#~ msgstr "" +#~ "Будь-хто може використовувати їх без додаткового імпорту чи встановлення " +#~ "пакетів. " + +#~ msgid "Text" +#~ msgstr "Текстові дані" + +#~ msgid "" +#~ "Text data are stored as strings (``str`` data type) in Python. Any " +#~ "sequence of letters, digits, punctuation marks and whitespace characters " +#~ "enclosed with quotes is considered to be a string literal. Both single " +#~ "quotes (``'``) and double quotes (``\"``) can be used interchangeably to " +#~ "create a string in Python." +#~ msgstr "" +#~ "Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-" +#~ "яка послідовність літер, цифр, знаків пунктуації та пробілів, взята в " +#~ "лапки, вважається рядковим літералом. Обидві одинарні лапки (``'``) або " +#~ "подвійні лапки (``\"``) можна взаємозамінно використовувати для створення " +#~ "рядків." + +#~ msgid "Escaping" +#~ msgstr "Екранування" + +#~ msgid "" +#~ "In programming this is a process of using a special character to indicate " +#~ "that the following character(s) should be treated differently from their " +#~ "literal meaning. The common usage is to include a special character(s) " +#~ "within strings. A **backslash** character is used to *escape* the " +#~ "following one." +#~ msgstr "" +#~ "У програмуванні це процес використання спеціального символу, щоб вказати, " +#~ "що наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне " +#~ "значення. Загальне використання полягає в тому, щоб включити " +#~ "спеціальний(і) символ(и) в рядки. Символ **backslash** використовується " +#~ "для екранування наступного. " + +#~ msgid "Example of Escaping in Python" +#~ msgstr "Приклади Екранування в Python" + +#~ msgid "Single quotes or double quotes" +#~ msgstr "Одинарні або подвійні лапки" + +#~ msgid "" +#~ "Don't care. Use any quote mark you like. A *string* is a sequence of " +#~ "characters after the opening quote and till the closing one. You may use " +#~ "double quotes in case a single quote is a part of the text (e.g. ``\"It's " +#~ "a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship was " +#~ "a \"Billy of Tea\"'``). It's a good practice not to mess single and " +#~ "double quotes within one project. Just keep using a chosen one character " +#~ "for all strings." +#~ msgstr "" +#~ "Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " +#~ "після початкової лапки та до кінцевої. Ви можете використовувати подвійні " +#~ "лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " +#~ "Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of " +#~ "Tea\"'``). Рекомендується не плутати одинарні та подвійні лапки в одному " +#~ "проекті. Просто продовжуйте використовувати один вибраний символ для всіх " +#~ "рядків. " + +#~ msgid "Multiline strings" +#~ msgstr "Багатострічкові рядки" + +#~ msgid "" +#~ "You can assign a multiline string by using triple quotes: Both single " +#~ "quote and double quote characters are available." +#~ msgstr "" +#~ "Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: " +#~ "в середині них доступні як одинарні, так і подвійні лапки. " + +#~ msgid "" +#~ "The same syntax is used to create docstring, which are a special case of " +#~ "string usage. We will look on these in the future." +#~ msgstr "" +#~ "Такий самий синтаксис використовується для створення рядка документації, " +#~ "який є окремим випадком використання рядка. Ми розглянемо це в " +#~ "майбутньому. " + +#~ msgid "This subsection describes only the most common operations." +#~ msgstr "У цьому розділі описано лише найпоширеніші операції. " + +#~ msgid "Concatenation" +#~ msgstr "Конкатинація" + +#~ msgid "" +#~ "The ``+`` operator is used to concatenate (join) two or more strings." +#~ msgstr "" +#~ "Оператор ``+`` використовується для конкатенації (об'єднання) двох або " +#~ "більше рядків. " + +#~ msgid "" +#~ "On the other hand the ``join`` method concatenates a collection of " +#~ "strings, which may be more efficient than using ``+``." +#~ msgstr "" +#~ "З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " +#~ "ефективнішим, ніж використання ``+``. " + +#~ msgid "Repetition" +#~ msgstr "Повторення" + +#~ msgid "" +#~ "The ``*`` operator is used to repeat a string a specified number of " +#~ "times. Only multipliers of the ``int`` type are allowed." +#~ msgstr "" +#~ "Оператор ``*`` використовується для повторення рядка вказану кількість " +#~ "разів. Дозволені операції лише з множниками типу ``int``. " + +#~ msgid "Length" +#~ msgstr "Довжина" + +#~ msgid "The ``len`` function is used to find the length of a string." +#~ msgstr "Функція ``len`` використовується для визначення довжини рядка." + +#~ msgid "Case conversion" +#~ msgstr "Перетворення регістру" + +#~ msgid "" +#~ "The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " +#~ "actions on case." +#~ msgstr "" +#~ "Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " +#~ "зміною регістра. " + +#~ msgid "``lower`` creates a new string with all lower-case characters." +#~ msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." + +#~ msgid "``upper`` creates a new string with all upper-case characters." +#~ msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." + +#~ msgid "" +#~ "``capitalize`` creates a new string with the upper-case 1st character." +#~ msgstr "" +#~ "``capitalize`` створює новий рядок із першим символом у верхньому " +#~ "регістрі. " + +#~ msgid "``title`` will make all characters after whitespace upper case." +#~ msgstr "``title`` зробить усі символи після пробілів верхнім регістром." + +#~ msgid "Stripping" +#~ msgstr "Зачистка" + +#~ msgid "" +#~ "The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " +#~ "leading and/or trailing whitespace characters." +#~ msgstr "" +#~ "Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " +#~ "початкових і/або кінцевих пробільних символів. " + +#~ msgid "Strings are subscriptable" +#~ msgstr "Рядки можна підписувати" + +#~ msgid "``str`` is not the only one subscriptable data type in Python." +#~ msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." + +#~ msgid "" +#~ "This means you can access individual characters or slices within a string " +#~ "using indexes. A string is a *sequence* of characters and each character " +#~ "within a string has its own position - an *index*. Indexing starts at 0, " +#~ "so the first character in a string is at index 0, the second one is at " +#~ "index 1, and so on. Negative indexing is also possible, with -1 " +#~ "representing the last character in a string, -2 representing the second-" +#~ "to-last character, and so on. Use square brackets (``[]``) to access the " +#~ "index." +#~ msgstr "" +#~ "Це означає, що ви можете отримати доступ до окремих символів або " +#~ "фрагментів у рядку за допомогою індексів. Рядок — це послідовність " +#~ "символів, і кожен символ у рядку має власну позицію — індекс. Індексація " +#~ "починається з 0, отже, перший символ у рядку має індекс 0, другий - " +#~ "індекс 1 і так далі. Також можливе від'ємне індексування, коли -1 " +#~ "представляє останній символ у рядку, а -2 представляє передостанній " +#~ "символ і так далі. Використовуйте квадратні дужки (``[]``), щоб отримати " +#~ "доступ до індексу. " + +#~ msgid "" +#~ "You can also *slice* strings, this means to get a subsequence of " +#~ "characters. The slice syntax consists of 3 digits:" +#~ msgstr "" +#~ "Ви також можете *розрізати* рядки, тобто отримати підпослідовність " +#~ "символів. Синтаксис фрагмента складається з 3 цифр: " + +#~ msgid "" +#~ "the first one represent the index to start (inclusive), defaults to 0" +#~ msgstr "" +#~ "Перший представляє початковий індекс (включно), за замовчанням дорівнює " +#~ "0. " + +#~ msgid "" +#~ "the second one represent the index to stop (non-inclusive), defaults to " +#~ "the length of the sequence" +#~ msgstr "" +#~ "Другий представляє індекс для зупинки (не включно), за замовчуванням " +#~ "довжина послідовності. " + +#~ msgid "the third one represents a step, defaults to 1" +#~ msgstr "Третій представляє крок, за замовчуванням 1." + +#~ msgid "" +#~ "These numbers are separated within colon (``:``) and enclosed within " +#~ "square brackets. Any slice digit may be omitted." +#~ msgstr "" +#~ "Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " +#~ "цифра зрізу може бути упущена. " + +#~ msgid "Sequence slicing" +#~ msgstr "Нарізка послідовності" + +#~ msgid "Strings are iterable" +#~ msgstr "Рядки можна повторювати" + +#~ msgid "" +#~ "Since strings are arrays, we can loop through the characters in a string " +#~ "with a ``for`` loop:" +#~ msgstr "" +#~ "Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " +#~ "допомогою циклу ``for``: " + +#~ msgid "Strings are immutable" +#~ msgstr "Рядки незмінні" + +#~ msgid "" +#~ "This means, you cannot change an individual character within a string." +#~ msgstr "Це означає, що ви не можете змінити окремий символ у рядку." + +#~ msgid "Integers" +#~ msgstr "Цілі числа" + +#~ msgid "" +#~ "``int``, or integer, is a whole number, positive or negative, without " +#~ "decimals." +#~ msgstr "" +#~ "``int``, тобто ціле число, може бути додатнім або від'ємним, без " +#~ "десяткових знаків. " + +#~ msgid "Floats" +#~ msgstr "Числа з плаваючою комою" + +#~ msgid "" +#~ "``float``, or floating point number, is a number, positive or negative, " +#~ "containing one or more decimals." +#~ msgstr "" +#~ "``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, " +#~ "що містить один або більше десяткових знаків. " diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/ua/LC_MESSAGES/oop.po index 3b7ceaf55..44383228d 100644 --- a/src/_locales/ua/LC_MESSAGES/oop.po +++ b/src/_locales/ua/LC_MESSAGES/oop.po @@ -3,20 +3,22 @@ # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-21 17:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-04-08 19:28+0300\n" +"PO-Revision-Date: 2023-04-08 19:29+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../src/oop/index.txt:3 msgid "Object-Oriented Programming" @@ -24,15 +26,13 @@ msgstr "Об'єктно-орієнтоване програмування" #: ../../src/oop/index.txt:5 msgid "" -"Object-oriented programming (OOP) is one of the biggest and most " -"important subjects in all of programming. It is a method of structuring a" -" program by bundling related properties and behavior into individual " -"objects." +"Object-oriented programming (OOP) is one of the biggest and most important " +"subjects in all of programming. It is a method of structuring a program by " +"bundling related properties and behavior into individual objects." msgstr "" "Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " -"найважливіших тем у всьому програмуванні. Це метод структурування" -"програми шляхом об'єднання пов'язаних властивостей і поведінки в окремі " -"об'єкти." +"найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " +"шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." #: ../../src/oop/inheritance.txt:3 msgid "Inheritance" @@ -45,20 +45,20 @@ msgstr "Класи та Об'єкти" #: ../../src/oop/intro.txt:5 msgid "" "Conceptually, objects are like the components of a system. Think of a " -"program as a factory assembly line of sorts. At each step of the assembly" -" line a system component processes some material, ultimately transforming" -" raw material into a finished product." +"program as a factory assembly line of sorts. At each step of the assembly " +"line a system component processes some material, ultimately transforming raw " +"material into a finished product." msgstr "" "Концептуально об'єкти схожі на компоненти системи. Думайте про програму як " -"про заводську конвеєрну лінію. На кожному кроці складання системний компонент" -" обробляє певний матеріал, остаточно перетворюючи сировину на закінчений " -"продукт." +"про заводську конвеєрну лінію. На кожному кроці складання системний " +"компонент обробляє певний матеріал, остаточно перетворюючи сировину на " +"закінчений продукт." #: ../../src/oop/intro.txt:10 msgid "" -"An object contains data, like the raw or preprocessed materials at each " -"step on an assembly line, and behavior, like the action each assembly " -"line component performs." +"An object contains data, like the raw or preprocessed materials at each step " +"on an assembly line, and behavior, like the action each assembly line " +"component performs." msgstr "" "Об'єкт містить дані, як-от необроблені або попередньо оброблені матеріали на " "кожному кроці складальної лінії, і поведінку, як-от дію, яку виконує кожен " @@ -70,24 +70,23 @@ msgstr "Парадигма Об'єктно-Орієнтованого Прогр #: ../../src/oop/intro.txt:17 msgid "" -"Object-oriented programming is a programming paradigm that provides a " -"means of structuring programs so that properties and behaviors are " -"bundled together into individual **objects**." +"Object-oriented programming is a programming paradigm that provides a means " +"of structuring programs so that properties and behaviors are bundled " +"together into individual **objects**." msgstr "" -"Об'єктно-орієнтоване програмування - це парадигма програмування, яка " -"надає засоби структурування програм так, що властивості та поведінка " -"об'єднуються в окремі **об'єкти**." +"Об'єктно-орієнтоване програмування - це парадигма програмування, яка надає " +"засоби структурування програм так, що властивості та поведінка об'єднуються " +"в окремі **об'єкти**." #: ../../src/oop/intro.txt:21 msgid "" -"For instance, an object could represent a person with **properties** like" -" a name, age, and address and **behaviors** such as walking, talking, " -"running. Or it could represent an email with properties like a recipient " -"list, subject, and body and behaviors like adding attachments and " -"sending." +"For instance, an object could represent a person with **properties** like a " +"name, age, and address and **behaviors** such as walking, talking, running. " +"Or it could represent an email with properties like a recipient list, " +"subject, and body and behaviors like adding attachments and sending." msgstr "" -"Наприклад, об'єкт може представляти особу з такими **властивостями**, як" -" ім'я, вік та адреса, а також такими **поведінками**, як ходьба, розмова, " +"Наприклад, об'єкт може представляти особу з такими **властивостями**, як " +"ім'я, вік та адреса, а також такими **поведінками**, як ходьба, розмова, " "біг. Або він може представляти електронний лист із такими властивостями, як " "список одержувачів, тема , а також тіло та поведінку, як-от додавання " "вкладень і надсилання." @@ -95,16 +94,16 @@ msgstr "" #: ../../src/oop/intro.txt:26 msgid "" "Put another way, object-oriented programming is an approach for modeling " -"concrete, real-world things, like cars, as well as relations between " -"things, like companies and employees, students and teachers, and so on. " -"OOP models real-world entities as software objects that have some data " -"associated with them and can perform certain functions." +"concrete, real-world things, like cars, as well as relations between things, " +"like companies and employees, students and teachers, and so on. OOP models " +"real-world entities as software objects that have some data associated with " +"them and can perform certain functions." msgstr "" "Інакше кажучи, об'єктно-орієнтоване програмування - це підхід до моделювання " "конкретних речей реального світу, таких як автомобілі, а також відносин між " -"речами, такими як компанії та працівники, студенти та викладачі тощо. " -"ООП моделює сутності реального світу як програмні об'єкти, які " -"мають деякі дані, пов'язані з ними та можуть виконувати певні функції." +"речами, такими як компанії та працівники, студенти та викладачі тощо. ООП " +"моделює сутності реального світу як програмні об'єкти, які мають деякі дані, " +"пов'язані з ними та можуть виконувати певні функції." #: ../../src/oop/intro.txt:34 msgid "Object-Oriented Programming Concepts" @@ -112,10 +111,9 @@ msgstr "Концепції Об'єктно-Орієнтованого Прогр #: ../../src/oop/intro.txt:36 msgid "" -"So far, we can discuss the major concepts within the OOP paradigm. And " -"they are:" -msgstr "" -"Поки що ми можемо обговорити основні концепції парадигми ООП. І вони:" +"So far, we can discuss the major concepts within the OOP paradigm. And they " +"are:" +msgstr "Поки що ми можемо обговорити основні концепції парадигми ООП. І вони:" #: ../../src/oop/intro.txt msgid "**encapsulation**" @@ -123,20 +121,21 @@ msgstr "**інкапсуляція**" #: ../../src/oop/intro.txt:41 msgid "" -"In OOP refers to the bundling of data with methods that operate that " -"data, or restricting of direct access to some of an object's components." +"In OOP refers to the bundling of data with methods that operate that data, " +"or restricting of direct access to some of an object's components." msgstr "" "В ООП означає об'єднання даних із методами, які обробляють ці дані, або " "обмеження прямого доступу до деяких компонентів об'єкта." #: ../../src/oop/intro.txt:44 msgid "" -"Encapsulation mechanism is often confused with *hiding*. It's not " -"actually that encapsulation does, but data hiding is available to us due " -"to the encapsulation." +"Encapsulation mechanism is often confused with *hiding*. It's not actually " +"that encapsulation does, but data hiding is available to us due to the " +"encapsulation." msgstr "" -"Механізм інкапсуляції часто плутають із приховуванням. Насправді інкапсуляція" -" це не робить, але приховування даних доступне для нас завдяки інкапсуляції." +"Механізм інкапсуляції часто плутають із приховуванням. Насправді " +"інкапсуляція це не робить, але приховування даних доступне для нас завдяки " +"інкапсуляції." #: ../../src/oop/intro.txt msgid "**inheritance**" @@ -145,16 +144,16 @@ msgstr "**наслідування**" #: ../../src/oop/intro.txt:50 msgid "" "It's a mechanism of basing an object or a class upon another object " -"(prototype-based inheritance) or class (class-based inheritance), " -"retaining similar implementation. Also defined as deriving new classes " -"(subclasses) from existing ones such as a super class or base class and " -"forming them into a hierarchy of classes." +"(prototype-based inheritance) or class (class-based inheritance), retaining " +"similar implementation. Also defined as deriving new classes (subclasses) " +"from existing ones such as a super class or base class and forming them into " +"a hierarchy of classes." msgstr "" -"Це механізм базування об'єкта або класу на іншому об'єкті " -"(успадкування на основі прототипу) або класу (успадкування на основі класу), " -"зберігаючи подібну реалізацію. Також визначається як отримання нових класів " -"(підкласів) із існуючих такі як суперклас або базовий клас і " -"формування їх у ієрархію класів." +"Це механізм базування об'єкта або класу на іншому об'єкті (успадкування на " +"основі прототипу) або класу (успадкування на основі класу), зберігаючи " +"подібну реалізацію. Також визначається як отримання нових класів (підкласів) " +"із існуючих такі як суперклас або базовий клас і формування їх у ієрархію " +"класів." #: ../../src/oop/intro.txt msgid "**polymorphism**" @@ -162,15 +161,15 @@ msgstr "**поліморфізм**" #: ../../src/oop/intro.txt:58 msgid "" -"It's a provision of a single interface to entities of different types or " -"the use of a single symbol to represent multiple different types. The " -"concept is borrowed from a principle in biology where an organism or " -"species can have many different forms or stages." +"It's a provision of a single interface to entities of different types or the " +"use of a single symbol to represent multiple different types. The concept is " +"borrowed from a principle in biology where an organism or species can have " +"many different forms or stages." msgstr "" -"Це надання єдиного інтерфейсу для сутностей різних типів або " -"використання одного символу для представлення кількох різних типів. " -"Концепція запозичена з принципу в біології, згідно з яким організм або " -"вид може мати багато різних форми чи етапи." +"Це надання єдиного інтерфейсу для сутностей різних типів або використання " +"одного символу для представлення кількох різних типів. Концепція запозичена " +"з принципу в біології, згідно з яким організм або вид може мати багато " +"різних форми чи етапи." #: ../../src/oop/intro.txt msgid "**abstraction**" @@ -178,12 +177,12 @@ msgstr "**абстракція**" #: ../../src/oop/intro.txt:65 msgid "" -"The process of removing or generalizing details or attributes in the " -"study of objects or systems to focus attention on details of greater " -"importance, it is similar in nature to the process of generalization. The" -" creation of abstract concept-objects by mirroring common features or " -"attributes of various non-abstract objects or systems of study is the " -"result of the process of abstraction." +"The process of removing or generalizing details or attributes in the study " +"of objects or systems to focus attention on details of greater importance, " +"it is similar in nature to the process of generalization. The creation of " +"abstract concept-objects by mirroring common features or attributes of " +"various non-abstract objects or systems of study is the result of the " +"process of abstraction." msgstr "" "Процес видалення або узагальнення деталей або атрибутів під час дослідження " "об'єктів або систем, щоб зосередити увагу на деталях більшої важливості, " @@ -198,10 +197,10 @@ msgstr "Визначення Классу в Python" #: ../../src/oop/intro.txt:75 msgid "" -"Primitive data-structures - like numbers, strings, lists etc. - are " -"designed to represent simple pieces of information, such as the cost of a" -" product, the name of a novel, or someone's favorite colors. What if you " -"want to represent things that are more complex?" +"Primitive data-structures - like numbers, strings, lists etc. - are designed " +"to represent simple pieces of information, such as the cost of a product, " +"the name of a novel, or someone's favorite colors. What if you want to " +"represent things that are more complex?" msgstr "" "Примітивні структури даних - як-от числа, рядки, списки тощо - призначені " "для представлення простих фрагментів інформації, таких як вартість продукту, " @@ -210,10 +209,10 @@ msgstr "" #: ../../src/oop/intro.txt:80 msgid "" -"For example, let's say you want to track employees in an organization. " -"You need to store some basic information about each employee. Let's start" -" from a very beginning and try to represent an individual employee as a " -"bunch of variables:" +"For example, let's say you want to track employees in an organization. You " +"need to store some basic information about each employee. Let's start from a " +"very beginning and try to represent an individual employee as a bunch of " +"variables:" msgstr "" "Наприклад, скажімо, ви хочете відслідковувати співробітників в організації. " "Вам потрібно зберегти деяку базову інформацію про кожного працівника. " @@ -222,17 +221,17 @@ msgstr "" #: ../../src/oop/intro.txt:90 msgid "" -"This approach has number of issues. Once it's required to store " -"information for more that one person, you are to create another set of " -"variables: ``first_name_1``, ``first_name_2`` etc. The most terrifying " -"issue is that these portions of data have no relations to each other. " -"Let's try to use ``list`` for this purpose:" +"This approach has number of issues. Once it's required to store information " +"for more that one person, you are to create another set of variables: " +"``first_name_1``, ``first_name_2`` etc. The most terrifying issue is that " +"these portions of data have no relations to each other. Let's try to use " +"``list`` for this purpose:" msgstr "" "Цей підхід має низку проблем. Після того, як буде потрібно зберігати " "інформацію про більше ніж одну особу, ви повинні створити інший набір " -"змінних: ``first_name_1``, ``first_name_2`` тощо. Найжахливіше проблема " -"в тому, що ці частини даних не мають жодного відношення одна до одної. " -"Давайте спробуємо використати ``список`` для цієї мети:" +"змінних: ``first_name_1``, ``first_name_2`` тощо. Найжахливіше проблема в " +"тому, що ці частини даних не мають жодного відношення одна до одної. Давайте " +"спробуємо використати ``список`` для цієї мети:" #: ../../src/oop/intro.txt:101 msgid "There are number of issues with this approach as well." @@ -247,31 +246,30 @@ msgid "" msgstr "" "По-перше, це може ускладнити керування великими файлами коду. Якщо ви " "посилаєтеся на ``serhii[0]`` на кілька рядків від місця, де оголошено список " -"``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я " "особи? " +"``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я \" \"особи? " "Звичайно, ви можете використовувати структуру ``dict``, але..." #: ../../src/oop/intro.txt:108 msgid "" -"Second, it can introduce errors if not every person has the same number " -"of properties." +"Second, it can introduce errors if not every person has the same number of " +"properties." msgstr "" "По-друге, це може призвести до помилок, якщо не кожна особа має однакову " "кількість властивостей." #: ../../src/oop/intro.txt:111 msgid "" -"A great way to make this type of code more manageable and more " -"maintainable is to use **classes**." +"A great way to make this type of code more manageable and more maintainable " +"is to use **classes**." msgstr "" "Чудовий спосіб зробити цей тип коду більш керованим і придатним для " "обслуговування - це використання **класів**." #: ../../src/oop/intro.txt:114 msgid "" -"All classes definitions in Python start with the keyword ``class``, which" -" is followed by the name of the class and a colon. Any code that is " -"indented below the class definition is considered the part of the class's" -" body." +"All classes definitions in Python start with the keyword ``class``, which is " +"followed by the name of the class and a colon. Any code that is indented " +"below the class definition is considered the part of the class's body." msgstr "" "Усі визначення класів у Python починаються з ключового слова ``class``, за " "яким йдуть ім'я класу та двокрапка. Будь-який код, який має відступ під " @@ -283,38 +281,38 @@ msgstr "Класи та Екземпляри Класу" #: ../../src/oop/intro.txt:126 msgid "" -"Classes are used to create user-defined data structures. As it was " -"mentioned above OOP is about bundling data and behaviors. Classes define " -"data structures; each portion of data bundled within a classes is called " -"**property** or **field**. Classes also define functions called " -"**methods**, which identify the behavior and actions that an object " -"created from the class can perform with its data." +"Classes are used to create user-defined data structures. As it was mentioned " +"above OOP is about bundling data and behaviors. Classes define data " +"structures; each portion of data bundled within a classes is called " +"**property** or **field**. Classes also define functions called **methods**, " +"which identify the behavior and actions that an object created from the " +"class can perform with its data." msgstr "" "Класи використовуються для створення визначених користувачем структур даних. " "Як було зазначено вище, ООП стосується об'єднання даних і поведінки. Класи " "визначають структури даних; кожна частина даних, об'єднаних у класи, " -"називається властивістю або полем. Класи також визначають функції, " -"які називаються методами, які ідентифікують поведінку та дії, які об'єкт, " +"називається властивістю або полем. Класи також визначають функції, які " +"називаються методами, які ідентифікують поведінку та дії, які об'єкт, " "створений з класу, може виконувати зі своїми даними." #: ../../src/oop/intro.txt:142 msgid "" "A class is a blueprint for how something should be defined. It doesn't " "actually contain any data. The person class above specifies that " -"``first_name`` and ``last_name`` properties are bundled within this " -"class, but it don't actually contain the person's name." +"``first_name`` and ``last_name`` properties are bundled within this class, " +"but it don't actually contain the person's name." msgstr "" "Клас - це схема того, як щось має бути визначено. Він насправді не містить " -"жодних даних. Клас person вище вказує, що властивості " "first_name`` і " +"жодних даних. Клас person вище вказує, що властивості \" \"first_name`` і " "``last_name`` об'єднані в цей класу, але насправді він не містить імені " "людини." #: ../../src/oop/intro.txt:147 msgid "" -"While classes are blueprints, an **instance** is an **object** that is " -"built from a form has been filled out with information. Just like many " -"people can fill out the same form with their own unique information, many" -" instances can be created from a single class." +"While classes are blueprints, an **instance** is an **object** that is built " +"from a form has been filled out with information. Just like many people can " +"fill out the same form with their own unique information, many instances can " +"be created from a single class." msgstr "" "Хоча класи є кресленнями, екземпляр - це об'єкт, створений із форми, " "заповненої інформацією. Подібно до того, як багато людей можуть заповнювати " @@ -327,11 +325,11 @@ msgstr "Методи" #: ../../src/oop/intro.txt:167 msgid "" -"A function bundled within a class is called **method**. There are several" -" ways to define a class method. For now it's needed to know, that each " -"method will get a special argument at the first position. This argument " -"is a reference to an actual object. By convention, this argument is " -"called ``self``." +"A function bundled within a class is called **method**. There are several " +"ways to define a class method. For now it's needed to know, that each method " +"will get a special argument at the first position. This argument is a " +"reference to an actual object. By convention, this argument is called " +"``self``." msgstr "" "Функція, об'єднана в клас, називається методом. Існує кілька способів " "визначення методу класу. Наразі необхідно знати, що кожен метод отримає " @@ -345,10 +343,10 @@ msgstr "Ініціалізація Екземпляру з Даними" #: ../../src/oop/intro.txt:189 msgid "" "There are several methods surrounded with double underscores " -"(``__method__``) that are called **dunder methods** or **magic methods**." -" We'll take a closer look at these methods in the future. For now, it's " -"ok to just one of these special methods: ``__init__``. It initializes an " -"instance with some specific data." +"(``__method__``) that are called **dunder methods** or **magic methods**. " +"We'll take a closer look at these methods in the future. For now, it's ok to " +"just one of these special methods: ``__init__``. It initializes an instance " +"with some specific data." msgstr "" "Є кілька методів, позначених подвійним підкресленням (``__method__``), які " "називаються методами dunder або магічними методами. Ми детальніше розглянемо " @@ -357,9 +355,9 @@ msgstr "" #: ../../src/oop/intro.txt:223 msgid "" -"Note, this call definition has a property called ``programming_language``" -" defined outside of the ``__init__`` method. This property is shared " -"across all the class instances." +"Note, this call definition has a property called ``programming_language`` " +"defined outside of the ``__init__`` method. This property is shared across " +"all the class instances." msgstr "" "Зверніть увагу, що це визначення виклику має властивість під назвою " "``programming_language``, визначену за межами методу ``__init__``. Ця " @@ -371,14 +369,13 @@ msgstr "Дещо Більше про ``self``" #: ../../src/oop/intro.txt:230 msgid "" -"``self`` is nothing except the convention. Instance methods will receive " -"a pointer to the instance itself as the first argument. In two words: it " -"is the actual object to call the method with. For example, the student " -"class defines attributes (student's name and scores) and methods " -"available for each student instance: complete the challenge or skip " -"classes. While the actual student instance contains data and methods " -"related to the exact one student. The ``self`` is a referer to this exact" -" object." +"``self`` is nothing except the convention. Instance methods will receive a " +"pointer to the instance itself as the first argument. In two words: it is " +"the actual object to call the method with. For example, the student class " +"defines attributes (student's name and scores) and methods available for " +"each student instance: complete the challenge or skip classes. While the " +"actual student instance contains data and methods related to the exact one " +"student. The ``self`` is a referer to this exact object." msgstr "" "``self`` - це не що інше, як конвенція. Методи екземпляра отримають " "вказівник на сам екземпляр як перший аргумент. У двох словах: це фактичний " @@ -394,71 +391,71 @@ msgstr "Приховання Даних" #: ../../src/oop/intro.txt:241 msgid "" -"Many programming languages has *access modifiers* implemented. The Python" -" has also, but actually no. It's implemented as a convention-level. All " -"class's members starting with underscore are considered to be " -"**protected** members and should not be accessible outside the class " -"instance; on the other hand members starting with two underscores are " -"considered to be **private** members and shouldn't be accessible outside " -"the class instance as well." +"Many programming languages has *access modifiers* implemented. The Python " +"has also, but actually no. It's implemented as a convention-level. All " +"class's members starting with underscore are considered to be **protected** " +"members and should not be accessible outside the class instance; on the " +"other hand members starting with two underscores are considered to be " +"**private** members and shouldn't be accessible outside the class instance " +"as well." msgstr "" -"Багато мов програмування мають реалізовані модифікатори доступу. Python" -" також має, але насправді ні. Він реалізований на рівні конвенції. Усі " -"члени класу, які починаються з підкреслення, вважаються захищеними членами " -"та не повинні бути доступними за межами екземпляр класу; з іншого боку, " -"члени, які починаються з двох символів підкреслення, вважаються приватними " -"членами та не повинні бути доступними за межами екземпляра класу." +"Багато мов програмування мають реалізовані модифікатори доступу. Python " +"також має, але насправді ні. Він реалізований на рівні конвенції. Усі члени " +"класу, які починаються з підкреслення, вважаються захищеними членами та не " +"повинні бути доступними за межами екземпляр класу; з іншого боку, члени, які " +"починаються з двох символів підкреслення, вважаються приватними членами та " +"не повинні бути доступними за межами екземпляра класу." -#: ../../src/oop/intro.txt:276 +#: ../../src/oop/intro.txt:275 msgid "" -"With the implementation above there are **public** attributes, but you " -"can still access data outside the class, but you definitely shouldn't." +"With the implementation above there are **public** attributes, but you can " +"still access data outside the class, but you definitely shouldn't." msgstr "" "З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " "можете отримати доступ до даних за межами класу, але точно не повинні." -#: ../../src/oop/intro.txt:287 +#: ../../src/oop/intro.txt:290 msgid "Few Words about Inheritance" msgstr "Кілька Слів про Наслідування" -#: ../../src/oop/intro.txt:289 +#: ../../src/oop/intro.txt:292 msgid "Just in two words. This topic is discovered in the future articles." msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." -#: ../../src/oop/intro.txt:291 +#: ../../src/oop/intro.txt:294 msgid "" -"You can derive your classes from a super class. Derived classes are " -"called *sub classes* and the class used to inherit from is called *super " -"class*. Other terms are *child* class and *parent* class, but they are " -"not common (this is author's personal opinion)." +"You can derive your classes from a super class. Derived classes are called " +"*sub classes* and the class used to inherit from is called *super class*. " +"Other terms are *child* class and *parent* class, but they are not common " +"(this is author's personal opinion)." msgstr "" "Ви можете отримати свої класи від суперкласу. Похідні класи називаються " "*підкласами*, а клас, який використовується для успадкування, називається " "*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " "вони не є поширеними ( це особиста думка автора)." -#: ../../src/oop/intro.txt:296 +#: ../../src/oop/intro.txt:299 msgid "Just put a super class in parenthesis two inherit from it:" msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" -#: ../../src/oop/intro.txt:308 +#: ../../src/oop/intro.txt:311 msgid "Few Words about Polymorphism" msgstr "Кілька Слів про Поліморфізм" -#: ../../src/oop/intro.txt:310 +#: ../../src/oop/intro.txt:313 msgid "" "You've already use this. The most simple explanation is **addition " -"operator**. For different types of data it would produce different types " -"of output:" +"operator**. For different types of data it would produce different types of " +"output:" msgstr "" "Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " "Для різних типів даних він створюватиме різні типи виводу:" -#: ../../src/oop/intro.txt:318 +#: ../../src/oop/intro.txt:321 msgid "" -"For example you may have various classes inherited from a base class, " -"that provides a common interface, but each derived class may implement " -"the method in its own way." +"For example you may have various classes inherited from a base class, that " +"provides a common interface, but each derived class may implement the method " +"in its own way." msgstr "" "Наприклад, у вас можуть бути різні класи, успадковані від базового класу, " "який забезпечує загальний інтерфейс, але кожен похідний клас може " @@ -466,9 +463,8 @@ msgstr "" #: ../../src/oop/patterns.txt:3 msgid "Design Patterns" -msgstr "" +msgstr "Патерни Проектування" #: ../../src/oop/solid.txt:3 -msgid "Solid Principles" -msgstr "" - +msgid "SOLID Principles" +msgstr "Принципи SOLID" diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po index 733037fc8..138a92235 100644 --- a/src/_locales/ua/LC_MESSAGES/rdbms.po +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -4,20 +4,21 @@ # Course package. # Serhii Horodilov , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course.github.io/issues\n" -"POT-Creation-Date: 2023-03-24 17:08+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-04-08 19:28+0300\n" +"PO-Revision-Date: 2023-04-08 19:29+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: ua\n" "Language-Team: ua \n" +"Language: ua\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../src/rdbms/aggregation.txt:3 msgid "Data Aggregation" @@ -26,254 +27,256 @@ msgstr "Агрегація даних" #: ../../src/rdbms/aggregation.txt:5 msgid "Here is some dummy data, that will be used as example in this section." msgstr "" -"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі" +"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." #: ../../src/rdbms/aggregation.txt:7 ../../src/rdbms/normalization.txt:1 msgid "product" -msgstr "" +msgstr "product" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:174 msgid "id" -msgstr "" +msgstr "id" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:174 #: ../../src/rdbms/relations.txt:249 ../../src/rdbms/relations.txt:278 #: ../../src/rdbms/relations.txt:313 ../../src/rdbms/relations.txt:345 msgid "name" -msgstr "" +msgstr "name" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 msgid "price" -msgstr "" +msgstr "price" #: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 #: ../../src/rdbms/products_table.csv:1 msgid "category" -msgstr "" +msgstr "category" #: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 #: ../../src/rdbms/products_table.csv:1 msgid "sold" -msgstr "" +msgstr "sold" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:157 #: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:176 msgid "1" -msgstr "" +msgstr "1" #: ../../src/rdbms/products_table.csv:1 msgid "Samsung Galaxy" -msgstr "" +msgstr "Samsung Galaxy" #: ../../src/rdbms/products_table.csv:1 msgid "100000" -msgstr "" +msgstr "100000" #: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/products_table.csv:1 msgid "Phones" -msgstr "" +msgstr "Phones" #: ../../src/rdbms/products_table.csv:1 msgid "500" -msgstr "" +msgstr "500" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:165 #: ../../src/rdbms/relations.txt:178 msgid "2" -msgstr "" +msgstr "2" #: ../../src/rdbms/products_table.csv:1 msgid "iPhone 13 Pro" -msgstr "" +msgstr "iPhone 13 Pro" #: ../../src/rdbms/products_table.csv:1 msgid "120000" -msgstr "" +msgstr "120000" #: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 #: ../../src/rdbms/products_table.csv:1 msgid "300" -msgstr "" +msgstr "300" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:180 msgid "3" -msgstr "" +msgstr "3" #: ../../src/rdbms/products_table.csv:1 msgid "MacBook Pro" -msgstr "" +msgstr "MacBook Pro" #: ../../src/rdbms/products_table.csv:1 msgid "350000" -msgstr "" +msgstr "350000" #: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 #: ../../src/rdbms/products_table.csv:1 msgid "Laptops" -msgstr "" +msgstr "Laptops" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 msgid "100" -msgstr "" +msgstr "100" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:159 msgid "4" -msgstr "" +msgstr "4" #: ../../src/rdbms/products_table.csv:1 msgid "Lenovo ThinkPad" -msgstr "" +msgstr "Lenovo ThinkPad" #: ../../src/rdbms/products_table.csv:1 msgid "150000" -msgstr "" +msgstr "150000" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 msgid "200" -msgstr "" +msgstr "200" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:161 msgid "5" -msgstr "" +msgstr "5" #: ../../src/rdbms/products_table.csv:1 msgid "HP Printer" -msgstr "" +msgstr "HP Printer" #: ../../src/rdbms/products_table.csv:1 msgid "20000" -msgstr "" +msgstr "20000" #: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/products_table.csv:1 msgid "Printers" -msgstr "" +msgstr "Printers" #: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/aggregation.txt:176 #: ../../src/rdbms/products_table.csv:1 msgid "800" -msgstr "" +msgstr "800" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:163 msgid "6" -msgstr "" +msgstr "6" #: ../../src/rdbms/products_table.csv:1 msgid "Dell Monitor" -msgstr "" +msgstr "Dell Monitor" #: ../../src/rdbms/products_table.csv:1 msgid "50000" -msgstr "" +msgstr "50000" #: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 #: ../../src/rdbms/products_table.csv:1 msgid "Monitors" -msgstr "" +msgstr "Monitors" #: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 #: ../../src/rdbms/products_table.csv:1 msgid "400" -msgstr "" +msgstr "400" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:165 msgid "7" -msgstr "" +msgstr "7" #: ../../src/rdbms/products_table.csv:1 msgid "Sony Headphones" -msgstr "" +msgstr "Sony Headphones" #: ../../src/rdbms/products_table.csv:1 msgid "30000" -msgstr "" +msgstr "30000" #: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 #: ../../src/rdbms/products_table.csv:1 msgid "Audio" -msgstr "" +msgstr "Audio" #: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 #: ../../src/rdbms/products_table.csv:1 msgid "0" -msgstr "" +msgstr "0" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:167 msgid "8" -msgstr "" +msgstr "8" #: ../../src/rdbms/products_table.csv:1 msgid "Bose Soundbar" -msgstr "" +msgstr "Bose Soundbar" #: ../../src/rdbms/products_table.csv:1 msgid "70000" -msgstr "" +msgstr "70000" #: ../../src/rdbms/products_table.csv:1 msgid "9" -msgstr "" +msgstr "9" #: ../../src/rdbms/products_table.csv:1 msgid "Xbox Series X" -msgstr "" +msgstr "Xbox Series X" #: ../../src/rdbms/products_table.csv:1 msgid "60000" -msgstr "" +msgstr "60000" #: ../../src/rdbms/aggregation.txt:173 ../../src/rdbms/products_table.csv:1 msgid "Gaming" -msgstr "" +msgstr "Gaming" #: ../../src/rdbms/products_table.csv:1 msgid "250" -msgstr "" +msgstr "250" #: ../../src/rdbms/products_table.csv:1 msgid "10" -msgstr "" +msgstr "10" #: ../../src/rdbms/products_table.csv:1 msgid "PlayStation 5" -msgstr "" +msgstr "PlayStation 5" #: ../../src/rdbms/products_table.csv:1 msgid "55000" -msgstr "" +msgstr "55000" #: ../../src/rdbms/products_table.csv:1 msgid "350" -msgstr "" +msgstr "350" #: ../../src/rdbms/aggregation.txt:14 msgid "The same dataset is available as:" -msgstr "" +msgstr "The same dataset is available as:" #: ../../src/rdbms/aggregation.txt:16 msgid ":download:`csv file <./products_table.csv>`" -msgstr "" +msgstr ":download:`csv file <./products_table.csv>`" #: ../../src/rdbms/aggregation.txt:17 -msgid ":download:`postgres dump file `" +msgid "" +":download:`postgres dump file `" msgstr "" +":download:`postgres dump file `" #: ../../src/rdbms/aggregation.txt:20 msgid "Aggregate functions" -msgstr "" +msgstr "Агрегуючі функції" #: ../../src/rdbms/aggregation.txt:22 msgid "" -"*Aggregate functions* compute a single result from a set of input values." -" Various RDBMS implement various built-in aggregate functions. In this " +"*Aggregate functions* compute a single result from a set of input values. " +"Various RDBMS implement various built-in aggregate functions. In this " "section we will review 5 basic functions that are available in all RDBMS." msgstr "" -"*Агрегатні функції* обчислюють один результат із набору вхідних значень." -" Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " +"*Агрегатні функції* обчислюють один результат із набору вхідних значень. " +"Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " "розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." #: ../../src/rdbms/aggregation.txt:29 @@ -282,11 +285,11 @@ msgstr "Підрахунок" #: ../../src/rdbms/aggregation.txt:31 msgid "" -"The ``count(field)`` function returns a count of the number of times that" -" ``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no" -" arguments) returns the total number of rows in the group." +"The ``count(field)`` function returns a count of the number of times that " +"``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " +"arguments) returns the total number of rows in the group." msgstr "" -"Функція ``count(field)`` повертає кількість разів, коли" " ``field`` не є " +"Функція ``count(field)`` повертає кількість разів, коли\" \" ``field`` не є " "``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " "кількість рядків у групі." @@ -296,15 +299,15 @@ msgstr "Максимальне значення" #: ../../src/rdbms/aggregation.txt:49 msgid "" -"The ``max()`` aggregate function returns the maximum value of all values " -"in the group. The maximum value is the value that would be returned last " -"in an ORDER BY on the same column. Aggregate function returns ``NULL`` if" -" and only if there are no non-NULL values in the group." +"The ``max()`` aggregate function returns the maximum value of all values in " +"the group. The maximum value is the value that would be returned last in an " +"ORDER BY on the same column. Aggregate function returns ``NULL`` if and only " +"if there are no non-NULL values in the group." msgstr "" -"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень " -"у групі. Максимальне значення - це значення, яке буде повернуто останнім " -"у ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, " -"якщо і лише якщо в групі немає значень, відмінних від NULL." +"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень у " +"групі. Максимальне значення - це значення, яке буде повернуто останнім у " +"ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " +"і лише якщо в групі немає значень, відмінних від NULL." #: ../../src/rdbms/aggregation.txt:66 msgid "Minimum value" @@ -312,11 +315,10 @@ msgstr "Мінімальне значення" #: ../../src/rdbms/aggregation.txt:68 msgid "" -"The ``min()`` aggregate function returns the minimum non-NULL value of " -"all values in the group. The minimum value is the first non-NULL value " -"that would appear in an ORDER BY of the column. Aggregate function " -"returns ``NULL`` if and only if there are no non-NULL values in the " -"group." +"The ``min()`` aggregate function returns the minimum non-NULL value of all " +"values in the group. The minimum value is the first non-NULL value that " +"would appear in an ORDER BY of the column. Aggregate function returns " +"``NULL`` if and only if there are no non-NULL values in the group." msgstr "" "Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " "значень у групі. Мінімальне значення - це перше значення не NULL, яке " @@ -331,15 +333,15 @@ msgstr "Середнє значення" msgid "" "The ``avg()`` function returns the average value of all non-NULL inputs " "within a group. String and BLOB values that do not look like numbers are " -"interpreted as 0. The result is always a floating point value whenever " -"there is at least one non-NULL input even if all inputs are integers. The" -" result is ``NULL`` if and only if there are no non-NULL inputs." +"interpreted as 0. The result is always a floating point value whenever there " +"is at least one non-NULL input even if all inputs are integers. The result " +"is ``NULL`` if and only if there are no non-NULL inputs." msgstr "" "Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " "групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " -"як 0. Результат завжди значення з плаваючою комою щоразу, коли " -"є принаймні один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. " -"Результатом є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." +"як 0. Результат завжди значення з плаваючою комою щоразу, коли є принаймні " +"один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " +"є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." #: ../../src/rdbms/aggregation.txt:105 msgid "Sum of values" @@ -347,12 +349,12 @@ msgstr "Сума значень" #: ../../src/rdbms/aggregation.txt:107 msgid "" -"The ``sum()`` aggregate functions return the sum of all non-NULL values " -"in the group. If there are no non-NULL input rows then function returns " +"The ``sum()`` aggregate functions return the sum of all non-NULL values in " +"the group. If there are no non-NULL input rows then function returns " "``NULL``." msgstr "" -"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від NULL," -" у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." +"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " +"NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." #: ../../src/rdbms/aggregation.txt:112 msgid "" @@ -364,9 +366,9 @@ msgstr "" #: ../../src/rdbms/aggregation.txt:115 msgid "" -"SQLite implements ``total`` aggregate function, that is similar to " -"``sum``, but returns ``0.0`` (always floating point) if there are no non-" -"NULL input rows." +"SQLite implements ``total`` aggregate function, that is similar to ``sum``, " +"but returns ``0.0`` (always floating point) if there are no non-NULL input " +"rows." msgstr "" "SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " "повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " @@ -386,11 +388,11 @@ msgstr "" #: ../../src/rdbms/aggregation.txt:135 msgid "" -"For example, if the task is to count number of registered categories it " -"is simple to solve as:" +"For example, if the task is to count number of registered categories it is " +"simple to solve as:" msgstr "" "Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " -"категорій, його " "просто вирішити так:" +"категорій, його \" \"просто вирішити так:" #: ../../src/rdbms/aggregation.txt:148 msgid "" @@ -399,7 +401,7 @@ msgid "" "provides the ability to group rows based on some field(s) values." msgstr "" "Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " -"кожної категорії, це " "стає неможливим вирішити без групування товарів. " +"кожної категорії, це \" \"стає неможливим вирішити без групування товарів. " "Пункт ``GROUP BY`` надає можливість групувати рядки на основі певного " "значення поля(ів)." @@ -409,45 +411,44 @@ msgstr "Загальний синтаксис:" #: ../../src/rdbms/aggregation.txt:173 msgid "600" -msgstr "" +msgstr "600" #: ../../src/rdbms/aggregation.txt:179 msgid "" "If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " "clause, then each of the expressions specified as part of the GROUP BY " -"clause is evaluated for each row of the dataset according to the " -"processing rules stated below for ORDER BY expressions. Each row is then " -"assigned to a \"group\" based on the results; rows for which the results " -"of evaluating the GROUP BY expressions are the same get assigned to the " -"same group. For the purposes of grouping rows, ``NULL`` values are " -"considered equal. The usual rules for selecting a collation sequence with" -" which to compare text values apply when evaluating expressions in a " -"GROUP BY clause. The expressions in the GROUP BY clause do not have to be" -" expressions that appear in the result. The expressions in a GROUP BY " -"clause may not be aggregate expressions." +"clause is evaluated for each row of the dataset according to the processing " +"rules stated below for ORDER BY expressions. Each row is then assigned to a " +"\"group\" based on the results; rows for which the results of evaluating the " +"GROUP BY expressions are the same get assigned to the same group. For the " +"purposes of grouping rows, ``NULL`` values are considered equal. The usual " +"rules for selecting a collation sequence with which to compare text values " +"apply when evaluating expressions in a GROUP BY clause. The expressions in " +"the GROUP BY clause do not have to be expressions that appear in the result. " +"The expressions in a GROUP BY clause may not be aggregate expressions." msgstr "" "Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " "тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " "для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " "для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " -"результатів; рядки, для яких результати оцінювання виразів GROUP BY " -"однакові призначаються до однієї групи. Для цілей групування рядків значення " -"``NULL`` вважаються рівними. Звичайні правила для вибору послідовності " -"порівняння, з якою порівнюються текстові значення, застосовуються під час " -"оцінювання виразів у Речення GROUP BY. Вирази в пункті GROUP BY не " -"обов'язково повинні бути виразами, які з'являються в результаті. " -"Вирази в пункті GROUP BY " "не можуть бути сукупними виразами." +"результатів; рядки, для яких результати оцінювання виразів GROUP BY однакові " +"призначаються до однієї групи. Для цілей групування рядків значення ``NULL`` " +"вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " +"якою порівнюються текстові значення, застосовуються під час оцінювання " +"виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " +"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY \" " +"\"не можуть бути сукупними виразами." #: ../../src/rdbms/aggregation.txt:192 -msgid "Having clause" +msgid "HAVING clause" msgstr "" #: ../../src/rdbms/aggregation.txt:194 msgid "" -"But what, if the task is to filter categories, that have less than 500 " -"sold items in it? ``WHERE`` clause will be useless, cause it's evaluated " -"before grouping output. In other words, only rows that suite WHERE filter" -" will be selected." +"But what, if the task is to filter categories, that have less than 500 sold " +"items in it? ``WHERE`` clause will be useless, cause it's evaluated before " +"grouping output. In other words, only rows that suite WHERE filter will be " +"selected." msgstr "" "Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " "500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " @@ -456,26 +457,25 @@ msgstr "" #: ../../src/rdbms/aggregation.txt:217 msgid "" -"If a ``HAVING`` clause is specified, it is evaluated once for each group " -"of rows as a boolean expression. If the result of evaluating the HAVING " -"clause is false, the group is discarded. If the HAVING clause is an " -"aggregate expression, it is evaluated across all rows in the group." +"If a ``HAVING`` clause is specified, it is evaluated once for each group of " +"rows as a boolean expression. If the result of evaluating the HAVING clause " +"is false, the group is discarded. If the HAVING clause is an aggregate " +"expression, it is evaluated across all rows in the group." msgstr "" "Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " "групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " -"хибний, групу відкидають. Якщо речення HAVING є " -"агрегатним виразом, воно обчислюється в усіх рядках у групі." +"хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " +"обчислюється в усіх рядках у групі." #: ../../src/rdbms/aggregation.txt:222 msgid "" "If a HAVING clause is a non-aggregate expression, it is evaluated with " -"respect to an arbitrarily selected row from the group. The HAVING " -"expression may refer to values, even aggregate functions, that are not in" -" the result." +"respect to an arbitrarily selected row from the group. The HAVING expression " +"may refer to values, even aggregate functions, that are not in the result." msgstr "" -"Якщо речення HAVING є неагрегатним виразом, воно оцінюється " -"щодо довільно вибраного рядка з групи. Вираз HAVING може посилатися на " -"значення, навіть агрегатні функції, яких немає в результат." +"Якщо речення HAVING є неагрегатним виразом, воно оцінюється щодо довільно " +"вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " +"агрегатні функції, яких немає в результат." #: ../../src/rdbms/index.txt:3 msgid "Relational Database" @@ -483,47 +483,45 @@ msgstr "Реляційні бази даних" #: ../../src/rdbms/index.txt:5 msgid "" -":abbr:`RDBMS (Relational Database Management System)` is a type of " -"software that helps users to create, update, manage, and access " -"relational databases. Relational databases organize data into tables, " -"which consist of rows and columns. Each column represents a specific " -"attribute of the data, while each row represents a specific instance of " -"that data." +":abbr:`RDBMS (Relational Database Management System)` is a type of software " +"that helps users to create, update, manage, and access relational databases. " +"Relational databases organize data into tables, which consist of rows and " +"columns. Each column represents a specific attribute of the data, while each " +"row represents a specific instance of that data." msgstr "" ":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " "забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " "отримувати доступ до реляційних баз даних. Реляційні бази даних " -"організовують дані в таблиці, які складаються з рядків і стовпців. " -"Кожен стовпець представляє певний " "атрибут даних, тоді як кожен рядок " +"організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " +"стовпець представляє певний \" \"атрибут даних, тоді як кожен рядок " "представляє конкретний екземпляр цих даних." #: ../../src/rdbms/index.txt:11 msgid "" -"RDBMS allow users to interact with the database using :abbr:`SQL " -"(Structured Query Language)`, which is a standard language for managing " -"and manipulating relational databases. SQL allows users to perform a " -"variety of operations on the database, including adding, updating, and " -"deleting data, as well as retrieving data based on specific criteria." +"RDBMS allow users to interact with the database using :abbr:`SQL (Structured " +"Query Language)`, which is a standard language for managing and manipulating " +"relational databases. SQL allows users to perform a variety of operations on " +"the database, including adding, updating, and deleting data, as well as " +"retrieving data based on specific criteria." msgstr "" "СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " -"(Structured Query Language)`, яка є стандартною мовою для керування " -"і маніпулювання реляційними базами даних. SQL дозволяє користувачам " -"виконувати різноманітність операцій з базою даних, включаючи додавання, " -"оновлення та видалення даних, а також отримання даних на основі певних " -"критеріїв." +"(Structured Query Language)`, яка є стандартною мовою для керування і " +"маніпулювання реляційними базами даних. SQL дозволяє користувачам виконувати " +"різноманітність операцій з базою даних, включаючи додавання, оновлення та " +"видалення даних, а також отримання даних на основі певних критеріїв." #: ../../src/rdbms/index.txt:17 msgid "" "RDBMS also provide a range of features to ensure data integrity, such as " -"enforcing data constraints, supporting transactions, and providing backup" -" and recovery capabilities. Additionally, RDBMS systems often provide " -"tools for managing the database, such as user interfaces for creating and" -" modifying tables and views, and monitoring tools for optimizing database" -" performance." +"enforcing data constraints, supporting transactions, and providing backup " +"and recovery capabilities. Additionally, RDBMS systems often provide tools " +"for managing the database, such as user interfaces for creating and " +"modifying tables and views, and monitoring tools for optimizing database " +"performance." msgstr "" "СУБД також надає низку функцій для забезпечення цілісності даних, таких як " "дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " -"резервного копіювання" "і відновлення. Крім того, системи РСУБД часто " +"резервного копіювання\" \"і відновлення. Крім того, системи РСУБД часто " "надають інструменти для керування базою даних, такі як інтерфейси " "користувача для створення та модифікації таблиць і представлень, а також " "інструменти моніторингу для оптимізації продуктивності бази даних." @@ -534,12 +532,12 @@ msgstr "Нормалізація баз даних" #: ../../src/rdbms/normalization.txt:5 msgid "" -"Normalization is a process of organizing data in a database so that it is" -" free from redundancy and dependency. It helps to eliminate data " +"Normalization is a process of organizing data in a database so that it is " +"free from redundancy and dependency. It helps to eliminate data " "inconsistencies and anomalies, thereby improving data integrity. " -"Normalization is a set of rules or guidelines to design a database schema" -" in such a way that it avoids data duplication, data redundancy, and data" -" inconsistency." +"Normalization is a set of rules or guidelines to design a database schema in " +"such a way that it avoids data duplication, data redundancy, and data " +"inconsistency." msgstr "" "Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " "вона була вільна від надлишковості та залежності. Це допомагає усунути " @@ -551,55 +549,54 @@ msgstr "" #: ../../src/rdbms/normalization.txt:11 msgid "" "There are several normal forms, each building on the previous one, which " -"guide us in the normalization process. The most commonly used normal " -"forms are:" +"guide us in the normalization process. The most commonly used normal forms " +"are:" msgstr "" "Існує кілька нормальних форм, кожна з яких будується на попередній, які " -"скеровують нас у процесі нормалізації. Найпоширенішими звичайними " -"формами є:" +"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" #: ../../src/rdbms/normalization.txt:14 msgid "" -"**First Normal Form (1NF)**: Each column should hold atomic (indivisible)" -" values. There should be no repeating groups or arrays of data in a " -"table." +"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " +"values. There should be no repeating groups or arrays of data in a table." msgstr "" -"Перша нормальна форма (1NF): кожен стовпець має містити атомарні (неподільні)" -" значення. У таблиці не повинно бути повторюваних груп або масивів даних." +"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " +"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " +"масивів даних." #: ../../src/rdbms/normalization.txt:17 msgid "" "**Second Normal Form (2NF)**: Each non-key column should be functionally " -"dependent on the entire primary key. In other words, every column in a " -"table should be related to the primary key and not dependent on any other" -" non-key columns." +"dependent on the entire primary key. In other words, every column in a table " +"should be related to the primary key and not dependent on any other non-key " +"columns." msgstr "" "Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " "залежати від усього первинного ключа. Іншими словами, кожен стовпець у " -"таблиці має бути пов'язаний із первинним ключем, а не залежати від " -"будь-яких інших неключових стовпців." +"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " +"інших неключових стовпців." #: ../../src/rdbms/normalization.txt:21 msgid "" -"**Third Normal Form (3NF)**: All non-key columns should be dependent only" -" on the primary key and not on any other non-key columns. This eliminates" -" transitive dependencies." +"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " +"the primary key and not on any other non-key columns. This eliminates " +"transitive dependencies." msgstr "" -"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише" -" від первинного ключа, а не від будь-яких інших неключових стовпців. " -"Це усуває транзитивні залежності." +"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " +"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " +"транзитивні залежності." #: ../../src/rdbms/normalization.txt:25 msgid "" -"Normalization reduces data redundancy and dependency, making the database" -" more efficient, flexible, and scalable. It also helps in maintaining " -"data consistency and accuracy, and ensures that updates and deletions are" -" properly handled." +"Normalization reduces data redundancy and dependency, making the database " +"more efficient, flexible, and scalable. It also helps in maintaining data " +"consistency and accuracy, and ensures that updates and deletions are " +"properly handled." msgstr "" -"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних" -" більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " -"узгодженість і точність даних, а також гарантує належну обробку оновлень " -"і видалень." +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " +"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень і " +"видалень." #: ../../src/rdbms/normalization.txt:31 msgid "First normal form (1NF)" @@ -607,11 +604,11 @@ msgstr "Перша нормальна форма (1NF)" #: ../../src/rdbms/normalization.txt:33 msgid "" -"It's easier to understand normalization via examples. Let's start with " -"some dummy orders data." +"It's easier to understand normalization via examples. Let's start with some " +"dummy orders data." msgstr "" -"Легше зрозуміти нормалізацію на прикладах. Почнемо з " -"деяких фіктивних даних про замовлення." +"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " +"про замовлення." #: ../../src/rdbms/normalization.txt:36 msgid "Initial data" @@ -668,8 +665,8 @@ msgstr "" #: ../../src/rdbms/normalization.txt:43 msgid "" -"This table violates 1NF, since its columns contain multiple values. To " -"bring this to 1NF all data within the table are to be atomic." +"This table violates 1NF, since its columns contain multiple values. To bring " +"this to 1NF all data within the table are to be atomic." msgstr "" "Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " "привести це до 1NF, усі дані в таблиці мають бути атомарними." @@ -707,8 +704,8 @@ msgid "" "The table above is in 1NF, but ``item price`` is dependent on the *item* " "entity itself and have low cohesion to *orders*. To bring it into 2NF a " "dedicated table to store information about items themselves is to be " -"created. After that ``order`` and ``product`` table are connected " -"(related) to each other via a foreign key." +"created. After that ``order`` and ``product`` table are connected (related) " +"to each other via a foreign key." msgstr "" "Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " "елемента і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " @@ -718,45 +715,45 @@ msgstr "" #: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 msgid "``order`` table" -msgstr "" +msgstr "таблиця ``order``" #: ../../src/rdbms/normalization.txt:1 msgid "product_id" -msgstr "" +msgstr "product_id" #: ../../src/rdbms/normalization.txt:73 msgid "``product`` table" -msgstr "" +msgstr "таблиця ``product``" #: ../../src/rdbms/normalization.txt:98 msgid "" -"``total`` field is also removed, since now it can be calculated as " -"product of ``product.price`` and ``order.quantity``." +"``total`` field is also removed, since now it can be calculated as product " +"of ``product.price`` and ``order.quantity``." msgstr "" "Поле ``total`` також видалено, оскільки тепер його можна обчислити як " "добуток ``product.price`` і ``order.quantity``." #: ../../src/rdbms/normalization.txt:102 msgid "Third normal form (3NF)" -msgstr "" +msgstr "3-тя нормальна форма (3NF)" #: ../../src/rdbms/normalization.txt:104 msgid "" -"At last it's time to remove a transitive functional dependency. " -"Customer's name is not actually dependent on a product, but on a person, " -"who places an order." +"At last it's time to remove a transitive functional dependency. Customer's " +"name is not actually dependent on a product, but on a person, who places an " +"order." msgstr "" -"Нарешті настав час видалити транзитивну функціональну залежність. " -"Ім'я клієнта насправді залежить не від продукту, а від особи, " -"яка робить замовлення." +"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " +"клієнта насправді залежить не від продукту, а від особи, яка робить " +"замовлення." #: ../../src/rdbms/normalization.txt:1 msgid "customer_id" -msgstr "" +msgstr "customer_id" #: ../../src/rdbms/normalization.txt:115 msgid "``customer`` table" -msgstr "" +msgstr "таблиця ``customer``" #: ../../src/rdbms/relations.txt:3 msgid "Data Relationships" @@ -768,35 +765,34 @@ msgstr "Настав час поговорити про **відносини д #: ../../src/rdbms/relations.txt:7 msgid "" -"For example your database contains two tables: ``weather`` and ``city``. " -"The diagram below demonstrates the overall data structure:" +"For example your database contains two tables: ``weather`` and ``city``. The " +"diagram below demonstrates the overall data structure:" msgstr "" "Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " "Діаграма нижче демонструє загальну структуру даних:" #: ../../src/rdbms/relations.txt:25 msgid "" -"Consider the following problem: you want to make sure no one can insert a" -" record into ``weather`` without a matching entry in ``city`` table. This" -" is called maintaining the *referential integrity* of your data. In " -"simplistic database systems this would be implemented (if at all) by " -"first looking at the cities table to check if a matching record exists, " -"and then inserting or rejecting the new weather records. This approach " -"has a number of problems and is very inconvenient." -msgstr "" -"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити" -" запис до ``weather`` без відповідного запису в ``city`` таблиці. Це" -"називається підтримкою посилальної цілісності ваші дані. У " -"спрощених системах баз даних це було б реалізовано (якщо взагалі) " -"спочатку переглядаючи таблицю міст, щоб перевірити, чи існує відповідний " -"запис, а потім вставляв або відхиляв нові записи погоди. Цей підхід " -"має низку проблем і дуже незручно." +"Consider the following problem: you want to make sure no one can insert a " +"record into ``weather`` without a matching entry in ``city`` table. This is " +"called maintaining the *referential integrity* of your data. In simplistic " +"database systems this would be implemented (if at all) by first looking at " +"the cities table to check if a matching record exists, and then inserting or " +"rejecting the new weather records. This approach has a number of problems " +"and is very inconvenient." +msgstr "" +"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " +"запис до ``weather`` без відповідного запису в ``city`` таблиці. " +"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " +"системах баз даних це було б реалізовано (якщо взагалі) спочатку " +"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " +"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " +"і дуже незручно." #: ../../src/rdbms/relations.txt:47 msgid "" "This declaration creates a relationship between two (or even more) tables." -msgstr "" -"Це оголошення створює зв'язок між двома (або навіть більше) таблицями." +msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." #: ../../src/rdbms/relations.txt:50 msgid "Foreign key (FK)" @@ -804,33 +800,32 @@ msgstr "Зовнішній ключ (FK)" #: ../../src/rdbms/relations.txt:52 msgid "" -"So far, you have knowledge about **primary** keys. The **foreign** key is" -" a column, that *references* some another table. In common, it's a " -"reference to another table's PK; but there is no limitation of this kind," -" any column can be referenced by another one. FKs handle data integrity " -"only, it's not required for FK to be non-NULL value." -msgstr "" -"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це" -" стовпець, який посилається на іншу таблицю. Загалом, це посилання на PK " -"іншої таблиці; але такого роду обмежень немає ," -" на будь-який стовпець може посилатися інший. FK обробляє лише " -"цілісність даних, не обов'язково, щоб значення FK було відмінним від NULL." +"So far, you have knowledge about **primary** keys. The **foreign** key is a " +"column, that *references* some another table. In common, it's a reference to " +"another table's PK; but there is no limitation of this kind, any column can " +"be referenced by another one. FKs handle data integrity only, it's not " +"required for FK to be non-NULL value." +msgstr "" +"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " +"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " +"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " +"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " +"відмінним від NULL." #: ../../src/rdbms/relations.txt:58 msgid "" -"The relation's properties are described by CONSTRAINTS and the database's" -" structure." +"The relation's properties are described by CONSTRAINTS and the database's " +"structure." msgstr "" "Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." #: ../../src/rdbms/relations.txt:61 msgid "" -"For example, modifying declaration with ``NOT NULL`` constraint grants " -"that each record within a table has a matching one entity in another " -"table." +"For example, modifying declaration with ``NOT NULL`` constraint grants that " +"each record within a table has a matching one entity in another table." msgstr "" -"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що " -"кожний запис у таблиці має відповідну сутність в іншій таблиці." +"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " +"запис у таблиці має відповідну сутність в іншій таблиці." #: ../../src/rdbms/relations.txt:71 msgid "This brings us to various relationship models." @@ -846,40 +841,37 @@ msgstr "Це найпоширеніший зв'язок." #: ../../src/rdbms/relations.txt:78 msgid "" -"For the example above there are no limitations on temperature " -"measurements in a specified city. So, a single city may has 0 or N " -"related records in ``weather`` table. But each weather record is related " -"to the only one city." +"For the example above there are no limitations on temperature measurements " +"in a specified city. So, a single city may has 0 or N related records in " +"``weather`` table. But each weather record is related to the only one city." msgstr "" -"Для наведеного вище прикладу немає обмежень на вимірювання " -"температури у визначеному місті. Отже, окреме місто може мати 0 або N " -"пов'язаних записів у таблиці ``погода``. Але кожен запис погоди пов'язаний " -"до єдиного міста." +"Для наведеного вище прикладу немає обмежень на вимірювання температури у " +"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " +"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." #: ../../src/rdbms/relations.txt:82 msgid "" "Another example is employees and office buildings they work in. Some big " -"company may have multiple offices and employee across the globe. Multiple" -" employees can be present in a single office building at a time. But each" -" employee can be physically located only in a single office at a time." +"company may have multiple offices and employee across the globe. Multiple " +"employees can be present in a single office building at a time. But each " +"employee can be physically located only in a single office at a time." msgstr "" "Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " "Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " "світу. Декілька працівників можуть бути присутні в одній офісній будівлі " -"одночасно. Але кожен працівник може фізично перебувати лише в одному " -"офісі одночасно." +"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " +"одночасно." #: ../../src/rdbms/relations.txt:105 msgid "One-to-one relationship (1-to-1)" -msgstr "" +msgstr "One-to-one relationship (1-to-1)" #: ../../src/rdbms/relations.txt:107 msgid "" -"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there" -" is and only one matching record. Back to the example with employees. " -"Multiple workstations (personal computers) are located in each office " -"building. The only one person can occupy the only one work station at a " -"time." +"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " +"and only one matching record. Back to the example with employees. Multiple " +"workstations (personal computers) are located in each office building. The " +"only one person can occupy the only one work station at a time." msgstr "" "Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " "наявність лише одного відповідного запису. Повернемося до прикладу зі " @@ -895,14 +887,13 @@ msgstr "Зв'язок багато-до-багатьох (N-до-N)" msgid "" "These relationships require additional table. A good example may be a " "*project role*. There are many of them in a production team. And some " -"employees may be assigned to the same role (e.g. developers, testers " -"etc.). But also a single person can be a developer and tester at a time." +"employees may be assigned to the same role (e.g. developers, testers etc.). " +"But also a single person can be a developer and tester at a time." msgstr "" -"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути " -"роль у проекті. Їх багато у виробничій команді. І деяким " -"працівникам може бути призначено ту саму роль (наприклад, розробники, " -"тестувальники і т. д.). Але також одна людина може бути розробником і " -"тестувальником одночасно." +"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " +"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " +"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " +"також одна людина може бути розробником і тестувальником одночасно." #: ../../src/rdbms/relations.txt:133 msgid "Joining data" @@ -911,8 +902,8 @@ msgstr "Об'єднання даних" #: ../../src/rdbms/relations.txt:135 msgid "" "``JOIN`` is used to *join* data fetched from multiple related tables. To " -"build a valid query you are to set the tables to join and parameter to " -"use for this operation." +"build a valid query you are to set the tables to join and parameter to use " +"for this operation." msgstr "" "``JOIN`` використовується для об'єднання даних, отриманих з кількох " "пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " @@ -927,45 +918,45 @@ msgid "" "There are various join types available. Here are is some dummy data to " "demonstrate their purpose." msgstr "" -"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб " -"продемонструвати їх призначення." +"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " +"їх призначення." #: ../../src/rdbms/relations.txt:148 msgid "poem" -msgstr "" +msgstr "poem" #: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:249 #: ../../src/rdbms/relations.txt:278 ../../src/rdbms/relations.txt:313 #: ../../src/rdbms/relations.txt:345 msgid "title" -msgstr "" +msgstr "title" #: ../../src/rdbms/relations.txt:151 msgid "author_id" -msgstr "" +msgstr "author_id" #: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:251 #: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:315 #: ../../src/rdbms/relations.txt:347 msgid "On the Field of Battle" -msgstr "" +msgstr "On the Field of Battle" #: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:253 #: ../../src/rdbms/relations.txt:282 ../../src/rdbms/relations.txt:317 #: ../../src/rdbms/relations.txt:349 msgid "Moses" -msgstr "" +msgstr "Moses" #: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:255 #: ../../src/rdbms/relations.txt:284 ../../src/rdbms/relations.txt:319 #: ../../src/rdbms/relations.txt:351 msgid "The Forest Song" -msgstr "" +msgstr "The Forest Song" #: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:286 #: ../../src/rdbms/relations.txt:353 msgid "In the Catacombs" -msgstr "" +msgstr "In the Catacombs" #: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:163 #: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:286 @@ -974,33 +965,33 @@ msgstr "" #: ../../src/rdbms/relations.txt:357 ../../src/rdbms/relations.txt:361 #: ../../src/rdbms/relations.txt:363 msgid "null" -msgstr "" +msgstr "null" #: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:257 #: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:321 #: ../../src/rdbms/relations.txt:355 msgid "The Singing Stones" -msgstr "" +msgstr "The Singing Stones" #: ../../src/rdbms/relations.txt:163 ../../src/rdbms/relations.txt:290 #: ../../src/rdbms/relations.txt:357 msgid "Ancient Fairy Tales" -msgstr "" +msgstr "Ancient Fairy Tales" #: ../../src/rdbms/relations.txt:165 ../../src/rdbms/relations.txt:259 #: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:323 #: ../../src/rdbms/relations.txt:359 msgid "My Thoughts" -msgstr "" +msgstr "My Thoughts" #: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:294 #: ../../src/rdbms/relations.txt:361 msgid "To Shevchenko" -msgstr "" +msgstr "To Shevchenko" #: ../../src/rdbms/relations.txt:171 msgid "author" -msgstr "" +msgstr "author" #: ../../src/rdbms/relations.txt:176 ../../src/rdbms/relations.txt:251 #: ../../src/rdbms/relations.txt:255 ../../src/rdbms/relations.txt:257 @@ -1010,7 +1001,7 @@ msgstr "" #: ../../src/rdbms/relations.txt:347 ../../src/rdbms/relations.txt:351 #: ../../src/rdbms/relations.txt:355 msgid "Larysa Kosach" -msgstr "" +msgstr "Larysa Kosach" #: ../../src/rdbms/relations.txt:178 ../../src/rdbms/relations.txt:253 #: ../../src/rdbms/relations.txt:259 ../../src/rdbms/relations.txt:282 @@ -1018,66 +1009,66 @@ msgstr "" #: ../../src/rdbms/relations.txt:323 ../../src/rdbms/relations.txt:349 #: ../../src/rdbms/relations.txt:359 msgid "Ivan Franko" -msgstr "" +msgstr "Ivan Franko" #: ../../src/rdbms/relations.txt:212 msgid "Join types" -msgstr "" +msgstr "Join types" #: ../../src/rdbms/relations.txt msgid "Cross join" -msgstr "" +msgstr "Cross join" #: ../../src/rdbms/relations.txt:220 msgid "" "For every possible combination of rows from T1 and T2 (i.e., a Cartesian " -"product), the joined table will contain a row consisting of all columns " -"in T1 followed by all columns in T2. If the tables have N and M rows " +"product), the joined table will contain a row consisting of all columns in " +"T1 followed by all columns in T2. If the tables have N and M rows " "respectively, the joined table will have N * M rows." msgstr "" -"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто, декартового " -"добутку), об'єднана таблиця міститиме рядок, що складається з усіх стовпців " -"у T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " -"відповідно, об'єднана таблиця матиме N M рядків." +"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " +"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " +"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " +"відповідно, об’єднана таблиця матиме N * M рядків." #: ../../src/rdbms/relations.txt msgid "Qualified joins" -msgstr "" +msgstr "Qualified joins" #: ../../src/rdbms/relations.txt:231 msgid "" -"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` " -"is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " +"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." msgstr "" -"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` " -"є типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." +"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " +"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." #: ../../src/rdbms/relations.txt:236 msgid "INNER JOIN" -msgstr "" +msgstr "INNER JOIN" #: ../../src/rdbms/relations.txt:238 msgid "" -"For each row R1 of T1, the joined table has a row for each row in T2 that" -" satisfies the join condition with R1." +"For each row R1 of T1, the joined table has a row for each row in T2 that " +"satisfies the join condition with R1." msgstr "" "Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " "який задовольняє умову об'єднання з R1." #: ../../src/rdbms/relations.txt:241 msgid "Inner join" -msgstr "" +msgstr "Inner join" #: ../../src/rdbms/relations.txt:263 msgid "LEFT OUTER JOIN" -msgstr "" +msgstr "LEFT OUTER JOIN" #: ../../src/rdbms/relations.txt:265 msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not" -" satisfy the join condition with any row in T2, a joined row is added " -"with null values in columns of T2. Thus, the joined table always has at " -"least one row for each row in T1." +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Thus, the joined table always has at least one " +"row for each row in T1." msgstr "" "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " "який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " @@ -1086,40 +1077,40 @@ msgstr "" #: ../../src/rdbms/relations.txt:270 msgid "Left join" -msgstr "" +msgstr "Left join" #: ../../src/rdbms/relations.txt:298 msgid "RIGHT OUTER JOIN" -msgstr "" +msgstr "RIGHT OUTER JOIN" #: ../../src/rdbms/relations.txt:300 msgid "" -"First, an inner join is performed. Then, for each row in T2 that does not" -" satisfy the join condition with any row in T1, a joined row is added " -"with null values in columns of T1. This is the converse of a left join: " -"the result table will always have a row for each row in T2." +"First, an inner join is performed. Then, for each row in T2 that does not " +"satisfy the join condition with any row in T1, a joined row is added with " +"null values in columns of T1. This is the converse of a left join: the " +"result table will always have a row for each row in T2." msgstr "" "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " "який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " "рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " -"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного " -"рядка в T2." +"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " +"в T2." #: ../../src/rdbms/relations.txt:305 msgid "Right join" -msgstr "" +msgstr "Right join" #: ../../src/rdbms/relations.txt:329 msgid "FULL OUTER JOIN" -msgstr "" +msgstr "FULL OUTER JOIN" #: ../../src/rdbms/relations.txt:331 msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not" -" satisfy the join condition with any row in T2, a joined row is added " -"with null values in columns of T2. Also, for each row of T2 that does not" -" satisfy the join condition with any row in T1, a joined row with null " -"values in the columns of T1 is added." +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Also, for each row of T2 that does not satisfy " +"the join condition with any row in T1, a joined row with null values in the " +"columns of T1 is added." msgstr "" "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " "який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " @@ -1129,5 +1120,4 @@ msgstr "" #: ../../src/rdbms/relations.txt:337 msgid "Full join" -msgstr "" - +msgstr "Full join" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 46f69fe30..bf5a7477a 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -169,7 +169,7 @@ Common operations | ``s.count(x)`` | total number of occurrences of *x* in *s* | +----------------------+------------------------------------------------------+ | ``s.index(x)`` | index of the first occurrence of *x* in *s* | -| ``s.index(x, i)`` | (at or after index *i* and before index *j*) | +| ``s.index(x, i)`` | at or after index *i* and before index *j* | | ``s.index(x, i, j)`` | | +----------------------+------------------------------------------------------+ diff --git a/src/basics/syntax.txt b/src/basics/syntax.txt index 704f16599..6f9f45432 100644 --- a/src/basics/syntax.txt +++ b/src/basics/syntax.txt @@ -101,7 +101,7 @@ In few words: The code snippet above demonstrates some basics abilities of Python to gather data from the user, process it and print out back. Note the words starting with -a **#** (hash) symbol. This is a comment. Any sequence of characters after +a # (hash) symbol. This is a comment. Any sequence of characters after the hash and till the line end are considered to be a comment. These are for those people, who see the code and they are ignored by the interpreter. diff --git a/src/oop/solid.txt b/src/oop/solid.txt index 75f1952a1..b616b5aae 100644 --- a/src/oop/solid.txt +++ b/src/oop/solid.txt @@ -1,3 +1,3 @@ ******************************************************************************* - Solid Principles + SOLID Principles ******************************************************************************* diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index f8eadbd3e..8b5385edd 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -188,7 +188,7 @@ a GROUP BY clause. The expressions in the GROUP BY clause do not have to be expressions that appear in the result. The expressions in a GROUP BY clause may not be aggregate expressions. -Having clause +HAVING clause ------------- But what, if the task is to filter categories, that have less than 500 sold From 982b130e06a83686724e887542b44a85af49c569 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 9 Apr 2023 01:10:07 +0300 Subject: [PATCH 065/689] Updated submodules to latest versions --- blog | 2 +- problem-sets | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blog b/blog index 2e531410b..111fe1623 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 2e531410b5d0e5a2781bb679b4583d80039df531 +Subproject commit 111fe162309264de92ecf0cde4262ee2fcc9acf2 diff --git a/problem-sets b/problem-sets index d138fe5b0..d0b5a7412 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit d138fe5b02e31d316e4360c9c34421d779d59aff +Subproject commit d0b5a74121c75af4e15e4ef83385d833b60e970c From 313d4f49fc9ecf26b7329fa546ddb1e1749de253 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 9 Apr 2023 02:02:40 +0300 Subject: [PATCH 066/689] Updated blog documents Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 477 ++++++++++++++-------------- src/appx/blog.md | 2 - src/appx/blog.txt | 1 + 3 files changed, 248 insertions(+), 232 deletions(-) delete mode 100644 src/appx/blog.md create mode 100644 src/appx/blog.txt diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index f2cdf2980..aa064a8bb 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 17:35+0300\n" -"PO-Revision-Date: 2023-04-08 19:13+0300\n" +"POT-Creation-Date: 2023-04-09 01:18+0300\n" +"PO-Revision-Date: 2023-04-09 01:33+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -21,11 +21,11 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../blog/docs/spec.md:2 +#: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" msgstr "Специфікація Проекту Блогу" -#: ../../blog/docs/spec.md:5 +#: ../../blog/docs/spec.rst:12 msgid "" "As a developer you were asked to create a simple blog site. The goal is to " "create a place on the Internet where users can share their stories to public." @@ -34,7 +34,7 @@ msgstr "" "\"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " "історіями з громадськістю." -#: ../../blog/docs/spec.md:8 +#: ../../blog/docs/spec.rst:16 msgid "" "This document applies requirements for the entire project step-by-step. You " "will start from creating the appropriate URL dispatcher and connecting a " @@ -46,200 +46,199 @@ msgstr "" "бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " "API для блог." -#: ../../blog/docs/spec.md:13 +#: ../../blog/docs/spec.rst:21 msgid "" "There are some boiler plates, that may be useful in your future work, but " -"you aren't forced to use them. It's on your choice." +"you aren’t forced to use them. It’s on your choice." msgstr "" "Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " "ви не змушені їх використовувати. Це на ваш вибір." -#: ../../blog/docs/spec.md:16 -msgid "" -"[Starter template](https://github.com/edu-python-course/django-template)" -msgstr "" -"[Starter template](https://github.com/edu-python-course/django-template)" +#: ../../blog/docs/spec.rst:24 +msgid "`Starter template`_" +msgstr "`Starter template`_" -#: ../../blog/docs/spec.md:17 -msgid "" -"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" -msgstr "" -"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#: ../../blog/docs/spec.rst:25 +msgid "`Bootstrap template`_" +msgstr "`Bootstrap template`_" -#: ../../blog/docs/spec.md:20 +#: ../../blog/docs/spec.rst:28 msgid "Challenge: Site views" msgstr "Завдання: Site views" -#: ../../blog/docs/spec.md:23 +#: ../../blog/docs/spec.rst:30 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " +"It’s ok not to return **actual** content for now. Just ensure all the routes " "are available and provide correct data. Use anything you like to return " "within HTTP response." msgstr "" -"Це нормально поки що не повертати фактичний вміст. Просто переконайтеся, що " -"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " -"хочете, щоб повернути у відповіді HTTP." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " +"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " +"щоб повернути у відповіді HTTP." -#: ../../blog/docs/spec.md:29 +#: ../../blog/docs/spec.rst:34 msgid "" -"`/blogs/`: A site's homepage. This will contain a list of blogs available " +"``/blogs/``: A site’s homepage. This will contain a list of blogs available " "via the django site." msgstr "" -"`блоги`: домашня сторінка сайту. Вона міститиме список блогів, доступних " -"через сайт django." +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " +"на сайті django." -#: ../../blog/docs/spec.md:32 +#: ../../blog/docs/spec.rst:36 msgid "" -"`/about/`: Provides a regular text for a user, describing the " +"``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"`about`: надає звичайний текст для користувача, описуючи функції сайту " +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " "django." -#: ../../blog/docs/spec.md:35 -msgid "`/`: same as `/blogs/`" -msgstr "`/`: те ж саме `/blogs/`" +#: ../../blog/docs/spec.rst:38 +msgid "``/``: same as ``/blogs/``" +msgstr "``/``: те ж саме ``/blogs/``" -#: ../../blog/docs/spec.md:37 +#: ../../blog/docs/spec.rst:39 msgid "" -"`//`: A single blog post detail view. The URL contains dynamic part in " -"it. This will be used to fetch a single blogpost from the database." +"``//``: A single blog post detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single blogpost from the database." msgstr "" -"``: детальний перегляд окремої публікації блогу. URL-адреса містить у " -"ній динамічну частину. Це буде використано для отримання окремої публікації " -"блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " +"містить динамічну частину. Це буде використано для отримання однієї " +"публікації блогу з бази даних." -#: ../../blog/docs/spec.md:40 +#: ../../blog/docs/spec.rst:42 msgid "" -"`/comment/`: This view will be used to add comments to a blogpost." +"``//comment/``: This view will be used to add comments to a " +"blogpost." msgstr "" -"`/comment/`: Використовуватиметься для додавання коментарів до " -"публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання " +"коментарів до публікації блогу." -#: ../../blog/docs/spec.md:42 -msgid "`/create/`: A post creation form." -msgstr "`/create/`: Форма для створення допису." +#: ../../blog/docs/spec.rst:44 +msgid "``/create/``: A post creation form." +msgstr "``/create/``: форма створення публікації." -#: ../../blog/docs/spec.md:44 -msgid "`//update/`: A view to update an existing post data." -msgstr "`//update/`: Сторінка для оновлення даних існуючого допису." +#: ../../blog/docs/spec.rst:45 +msgid "``//update/``: A view to update an existing post data." +msgstr "" +"``//update/``: перегляд для оновлення наявних даних публікації." -#: ../../blog/docs/spec.md:46 -msgid "`//delete/`: A view to confirm post deletion." -msgstr "`//delete/`: Підтверждення видалення допису." +#: ../../blog/docs/spec.rst:46 +msgid "``//delete/``: A view to confirm post deletion." +msgstr "" +"``//delete/``: перегляд для підтвердження видалення публікації." -#: ../../blog/docs/spec.md:48 -msgid "`/profile/`: A site user's personal page." -msgstr "`/profile/`: Персональна сторінка користувача." +#: ../../blog/docs/spec.rst:47 +msgid "``/profile//``: A site user’s personal page." +msgstr "``/profile//``: Персональна сторінка користувача." -#: ../../blog/docs/spec.md:50 +#: ../../blog/docs/spec.rst:48 msgid "" -"`/change_password/`: This route will be used to change users' credential " +"``/change_password/``: This route will be used to change users’ credential " "data." msgstr "" -"`/change_password/`: Ця сторінка використовуватиметься для зміни облікових " +"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " "даних користувачів." -#: ../../blog/docs/spec.md:52 -msgid "`/register/`: This view contains a user registration form." -msgstr "`/register/`: Сторінка з формою для реєстрації нового користувача." +#: ../../blog/docs/spec.rst:50 +msgid "``/register/``: This view contains a user registration form." +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../blog/docs/spec.md:54 -msgid "`/login/`: This view contains a login form." -msgstr "`/login/`: Сторінка з формою для логіна." +#: ../../blog/docs/spec.rst:51 +msgid "``/login/``: This view contains a login form." +msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../blog/docs/spec.md:56 +#: ../../blog/docs/spec.rst:52 msgid "" -"`/logout/`: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" -"`/logout/`: Логаут. Має перенаправляти користувача назад на домашню " +"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.md:61 +#: ../../blog/docs/spec.rst:56 msgid "Challenge: Data models" msgstr "Завдання: моделі даних" -#: ../../blog/docs/spec.md:64 +#: ../../blog/docs/spec.rst:58 msgid "You are to implement data models for the blog site." msgstr "Ви повинні реалізувати моделі даних для сайту блогу." -#: ../../blog/docs/spec.md:66 -msgid "The `auth.User` will be used as `user` model." -msgstr "`auth.User` використовуватиметься як модель `user`." +#: ../../blog/docs/spec.rst:60 +msgid "The ``auth.User`` will be used as ``user`` model." +msgstr "``auth.User`` використовуватиметься як модель ``user``." -#: ../../blog/docs/spec.md:68 +#: ../../blog/docs/spec.rst:62 msgid "" -"`post.slug` value should be autogenerated when a record is created or " +"``post.slug`` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" -"Значення `post.slug` має автоматично генеруватися під час створення або " +"Значення ``post.slug`` має автоматично генеруватися під час створення або " "оновлення запису та слідувати шаблону:" -#: ../../blog/docs/spec.md:75 +#: ../../blog/docs/spec.rst:69 msgid "" -"User preferred topics should be marked with a `notify` flag. This value " -"should be `True` by default." +"User preferred topics should be marked with a ``notify`` flag. This value " +"should be ``True`` by default." msgstr "" -"Вибрані користувачем теми мають бути позначені прапорцем `notify`. За " -"замовчуванням це значення має бути `True`." +"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " +"замовчуванням це значення має бути ``True``." -#: ../../blog/docs/spec.md:108 +#: ../../blog/docs/spec.rst:102 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../blog/docs/spec.md:111 +#: ../../blog/docs/spec.rst:104 msgid "" "Update existing views to represent entities that are actually stored inside " -"the project's database." +"the project’s database." msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " +"базі даних проекту." -#: ../../blog/docs/spec.md:114 -msgid "`/blogs/` or `/`: should represent a list of existing blogposts." +#: ../../blog/docs/spec.rst:107 +msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." msgstr "" -"`/blogs/` або `/`: має представляти список існуючих публікацій у блозі." +"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." -#: ../../blog/docs/spec.md:116 -msgid "`//`: should represent a single existing blogpost." -msgstr "`//`: має представляти одну наявну публікацію в блозі." +#: ../../blog/docs/spec.rst:108 +msgid "``//``: should represent a single existing blogpost." +msgstr "``//``: має представляти одну наявну публікацію в блозі." -#: ../../blog/docs/spec.md:118 +#: ../../blog/docs/spec.rst:109 msgid "" -"`/profile/`: should contain information about user and a list of " -"posts authored by this user." +"``/profile//``: should contain information about user and a " +"list of posts authored by this user." msgstr "" -"`/profile/`: має містити інформацію про користувача та список " -"публікацій, автором яких є цей користувач." +"``/profile//``: має містити інформацію про користувача та " +"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.md:121 +#: ../../blog/docs/spec.rst:111 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise `Http404` in case entity couldn't be fetched." +"*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " "*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " "не вдалося отримати." -#: ../../blog/docs/spec.md:126 +#: ../../blog/docs/spec.rst:116 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.md:129 +#: ../../blog/docs/spec.rst:118 msgid "" -"It's time to work with data representations. You're to add HTML template to " +"It’s time to work with data representations. You’re to add HTML template to " "the blog site project. Keep templates together with appropriate " -"applications, we don't need mess in project files." +"applications, we don’t need mess in project files." msgstr "" "Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" "шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " "додатками, нам не потрібен безлад у файлах проекту." -#: ../../blog/docs/spec.md:134 +#: ../../blog/docs/spec.rst:122 msgid "Application-level templates should be extended from the base one." msgstr "Шаблони прикладного рівня повинні бути розширені з базового." -#: ../../blog/docs/spec.md:135 +#: ../../blog/docs/spec.rst:123 msgid "" "Each page should contain a navbar at the top. Navbar will contain permalinks " "to the home and about pages." @@ -247,149 +246,153 @@ msgstr "" "Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " "міститиме постійні посилання на домашню сторінку та сторінку про." -#: ../../blog/docs/spec.md:137 +#: ../../blog/docs/spec.rst:125 msgid "" -"For anonymous users `/register/` and `/login/` links should be visible in " -"navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання `/register/` та `/login/` мають бути " -"видимими на навігаційній панелі." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." -#: ../../blog/docs/spec.md:139 +#: ../../blog/docs/spec.rst:127 msgid "" -"For authenticated users `/logout/` and `/create/` links should be visible in " -"navbar." +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." msgstr "" -"Для автентифікованих користувачів посилання `/logout/` і `/create/` мають " -"бути видимими на навігаційній панелі." +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.md:141 +#: ../../blog/docs/spec.rst:129 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.md:142 +#: ../../blog/docs/spec.rst:131 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../blog/docs/spec.md:143 +#: ../../blog/docs/spec.rst:133 msgid "" -"For the `post_list.html` each post entity should provide the information:" +"For the ``post_list.html`` each post entity should provide the information:" msgstr "" -"Для `post_list.html` кожна сутність повідомлення повинна надавати інформацію:" +"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" -#: ../../blog/docs/spec.md:144 +#: ../../blog/docs/spec.rst:136 msgid "title (each word should be capitalized)" msgstr "назва (кожне слово має бути великим)" -#: ../../blog/docs/spec.md:145 +#: ../../blog/docs/spec.rst:137 msgid "creation date" msgstr "дата створення" -#: ../../blog/docs/spec.md:146 +#: ../../blog/docs/spec.rst:138 msgid "list of related topics (first 3 topics)" msgstr "список пов'язаних тем (перші 3 теми)" -#: ../../blog/docs/spec.md:147 +#: ../../blog/docs/spec.rst:139 msgid "trimmed content (~50 words or fewer)" msgstr "обрізаний вміст (~50 слів або менше)" -#: ../../blog/docs/spec.md:148 +#: ../../blog/docs/spec.rst:140 msgid "number of comments" msgstr "кількість коментарів" -#: ../../blog/docs/spec.md:149 +#: ../../blog/docs/spec.rst:142 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" "Кожна сутність публікації в поданні списку має бути посиланням на відповідну " "публікацію." -#: ../../blog/docs/spec.md:150 -msgid "Detail view should contain links to `/update/` and `/delete/`." -msgstr "Детальний перегляд має містити посилання на `/update/` та `/update/`." +#: ../../blog/docs/spec.rst:144 +msgid "Detail view should contain links to ``/update/`` and ``/delete/``." +msgstr "" +"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." -#: ../../blog/docs/spec.md:151 +#: ../../blog/docs/spec.rst:145 msgid "Detail view should contain a list of post related comments." msgstr "" "Подання деталей має містити список коментарів, пов'язаних із публікацією." -#: ../../blog/docs/spec.md:152 +#: ../../blog/docs/spec.rst:146 msgid "" -"Auth views should use `register.html` and `login.html` with corresponding " -"forms." +"Auth views should use ``register.html`` and ``login.html`` with " +"corresponding forms." msgstr "" -"Подання авторизації повинні використовувати `register.html` і `login.html` з " -"відповідними формами." +"Подання авторизації повинні використовувати ``register.html`` і ``login." +"html`` з відповідними формами." -#: ../../blog/docs/spec.md:155 +#: ../../blog/docs/spec.rst:149 msgid "" -"For now, it's ok to use admin as \"test user\". Authentication system will " -"be implemented in the future challenges. `user` object is available (by " -"default) in any template context. To test anonymous access you can use `usar." -"is_authenticated`, which returns `False` for non-authenticated users." +"For now, it’s ok to use admin as “test user”. Authentication system will be " +"implemented in the future challenges. ``user`` object is available (by " +"default) in any template context. To test anonymous access you can use " +"``user.is_authenticated``, which returns ``False`` for non-authenticated " +"users." msgstr "" -"Наразі можна використовувати адміністратора як \"тестового користувача\". " -"Система автентифікації буде впроваджена в майбутніх викликах. Об'єкт `user` " -"доступний (за замовчуванням) у будь-якому контексті шаблону. перевірте " -"анонімний доступ, ви можете використовувати `usar.is_authenticated`, який " -"повертає `False` для неавтентифікованих користувачів." +"Наразі можна використовувати адміністратора як «тестового користувача». " +"Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " +"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " +"Щоб перевірити анонімний доступ, ви можете використовувати ``user." +"is_authenticated``, який повертає ``False`` для неавтентифікованих " +"користувачів." -#: ../../blog/docs/spec.md:162 +#: ../../blog/docs/spec.rst:156 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.md:165 +#: ../../blog/docs/spec.rst:158 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.md:166 -msgid "`username`" -msgstr "`username`" +#: ../../blog/docs/spec.rst:160 +msgid "``username``" +msgstr "``username``" -#: ../../blog/docs/spec.md:167 -msgid "`email`" -msgstr "`email`" +#: ../../blog/docs/spec.rst:161 +msgid "``email``" +msgstr "``email``" -#: ../../blog/docs/spec.md:168 -msgid "`password`" -msgstr "`password`" +#: ../../blog/docs/spec.rst:162 +msgid "``password``" +msgstr "``password``" -#: ../../blog/docs/spec.md:169 -msgid "`confirm password`" -msgstr "`confirm password`" +#: ../../blog/docs/spec.rst:163 +msgid "``confirm password``" +msgstr "``confirm password``" -#: ../../blog/docs/spec.md:170 -msgid "`username` value should be validated against existing values" +#: ../../blog/docs/spec.rst:165 +msgid "``username`` value should be validated against existing values" msgstr "" -"значення `username` має перевірятися на відповідність існуючим значенням" +"Значення \"ім'я користувача\" має перевірятися на відповідність існуючим " +"значенням" -#: ../../blog/docs/spec.md:171 -msgid "`password` and `confirm password` values should match" -msgstr "значення `password` і `confirm password` мають збігатися" +#: ../../blog/docs/spec.rst:166 +msgid "``password`` and ``confirm password`` values should match" +msgstr "Значення ``password`` і ``confirm password`` мають збігатися" -#: ../../blog/docs/spec.md:172 +#: ../../blog/docs/spec.rst:167 msgid "Create form for existing users login" msgstr "Створити форму для входу існуючих користувачів" -#: ../../blog/docs/spec.md:173 +#: ../../blog/docs/spec.rst:168 msgid "Validations errors are to be rendered on the template" msgstr "Помилки перевірки мають бути відображені в шаблоні" -#: ../../blog/docs/spec.md:175 +#: ../../blog/docs/spec.rst:171 msgid "Challenge: Blogpost Creation and Update" msgstr "Завдання: Створення та Оновлення Дописів" -#: ../../blog/docs/spec.md:178 +#: ../../blog/docs/spec.rst:173 msgid "Create a form to work with the blogpost model." msgstr "Створіть форму для роботи з моделлю допису." -#: ../../blog/docs/spec.md:179 +#: ../../blog/docs/spec.rst:174 msgid "" "Create a form to gather a comment from a user. Form should be used within a " "\"post detail\" view." @@ -397,138 +400,140 @@ msgstr "" "Створіть форму для збору коментарів від користувача. Форму слід " "використовувати в перегляді \"подробиць публікації\"." -#: ../../blog/docs/spec.md:181 +#: ../../blog/docs/spec.rst:176 msgid "Form should be used for *create* and *update* view." msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." -#: ../../blog/docs/spec.md:183 -msgid "It's ok to use a *pre-defined* user as a post's author for now." +#: ../../blog/docs/spec.rst:178 +msgid "It’s ok to use a *pre-defined* user as a post’s author for now." msgstr "" -"Поки що можна використовувати попередньо визначеного користувача як автора " -"допису." +"Наразі можна використовувати *попередньо визначеного* користувача як автора " +"публікації." -#: ../../blog/docs/spec.md:187 +#: ../../blog/docs/spec.rst:181 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.md:190 +#: ../../blog/docs/spec.rst:183 msgid "" -"`/register/`: Users should provide all required information about them: " +"``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " "After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" -"`/register/`: користувачі повинні надати всю необхідну інформацію про себе: " -"бажане ім'я користувача та електронну пошту. Дані імені (як ім'я, так і " -"останнє) є необов'язковими. Після створення користувача вони повинні бути " -"перенаправлені на сторінку входу для виконання процес автентифікації. " -"Недійсна форма повинна надавати інформацію про \" \"помилку(и)." +"``/register/``: користувачі повинні надати всю необхідну інформацію про " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім’я та " +"прізвище) необов’язкові. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процесу автентифікації. " +"Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.md:195 +#: ../../blog/docs/spec.rst:188 msgid "" -"`/login/`: Users should provide their credentials to login. In case login is " -"successful they should be redirected to their profile (if no `next=url` " -"query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"`/login/`: користувачі повинні надати свої облікові дані для входу. Якщо " -"вхід буде успішним, вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту `next=url`)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.md:199 +#: ../../blog/docs/spec.rst:191 msgid "" -"`/create/`: Only authenticated users should be able to visit this page. In " +"``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " "to the login view first, and after successful authentication get back to " "post creation. Then a post is created, it should be authored by the " "currently authenticated user." msgstr "" -"`/create/`: Лише автентифіковані користувачі повинні мати змогу відвідувати " -"цю сторінку. У випадку, якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, його слід спочатку переспрямувати до перегляду входу, " -"а після успішної автентифікації повернутися до створення допису. Потім " -"створюється допис, автором якого має бути наразі автентифікований користувач." +"``/create/``: лише автентифіковані користувачі повинні мати змогу " +"відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " +"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " +"входу, а після успішної автентифікації повернутися до створення публікації. " +"Потім створюється допис, автором якого має бути поточний автентифікований " +"користувач." -#: ../../blog/docs/spec.md:205 +#: ../../blog/docs/spec.rst:196 msgid "" -"`//comment`: Currently authenticated user should be referenced as a " -"comment's author." +"``//comment``: Currently authenticated user should be referenced " +"as a comment’s author." msgstr "" -"`//comment`: наразі автентифікований користувач має вказуватися як " -"автор коментаря." +"``//comment``: як автора коментаря має бути вказано поточного " +"автентифікованого користувача." -#: ../../blog/docs/spec.md:207 +#: ../../blog/docs/spec.rst:198 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" "Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." -#: ../../blog/docs/spec.md:211 +#: ../../blog/docs/spec.rst:202 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.md:214 +#: ../../blog/docs/spec.rst:204 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.md:215 +#: ../../blog/docs/spec.rst:205 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.md:217 -msgid "It's ok to use Django built-in views for auth." -msgstr "Використовувати вбудовані представлення Django для авторизації можна." +#: ../../blog/docs/spec.rst:207 +msgid "It’s ok to use Django built-in views for auth." +msgstr "" +"Для автентифікації можна використовувати вбудовані представлення Django." -#: ../../blog/docs/spec.md:226 +#: ../../blog/docs/spec.rst:210 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.md:229 +#: ../../blog/docs/spec.rst:212 msgid "Create serializers for:" msgstr "Створіть серіалізатори для:" -#: ../../blog/docs/spec.md:230 +#: ../../blog/docs/spec.rst:214 msgid "Blogpost entity" msgstr "Об'єкт публікації в блозі" -#: ../../blog/docs/spec.md:231 +#: ../../blog/docs/spec.rst:215 msgid "Blogpost comment" msgstr "Коментар у блозі" -#: ../../blog/docs/spec.md:232 +#: ../../blog/docs/spec.rst:216 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.md:236 +#: ../../blog/docs/spec.rst:219 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.md:239 +#: ../../blog/docs/spec.rst:221 msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to use " -"*pre-defined* user as a post's author for now." +"All blog-site functionality are to be reflected via REST API. It’s ok to use " +"*pre-defined* user as a post’s author for now." msgstr "" -"Усі функції сайту блогу мають бути відображені через REST API. Наразі можна " -"використовувати попередньо визначеного користувача як автора публікації." +"Усі функції сайту блогу мають відображатися через REST API. Наразі можна " +"використовувати *попередньо визначеного* користувача як автора публікації." -#: ../../blog/docs/spec.md:244 +#: ../../blog/docs/spec.rst:225 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.md:247 +#: ../../blog/docs/spec.rst:227 msgid "Implement REST authentication system." msgstr "Запровадити систему автентифікації REST." -#: ../../blog/docs/spec.md:248 +#: ../../blog/docs/spec.rst:228 msgid "Only account owner can change their account data." msgstr "" "Лише власник облікового запису може змінити дані свого облікового запису." -#: ../../blog/docs/spec.md:249 +#: ../../blog/docs/spec.rst:229 msgid "Only authenticated users can create posts and comments." msgstr "" "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." -#: ../../blog/docs/spec.md:250 +#: ../../blog/docs/spec.rst:230 msgid "Only authors can change their posts." msgstr "Тільки автори можуть змінювати свої повідомлення." @@ -639,8 +644,8 @@ msgstr "" "значення атрибута ``unit``." #: ../../problem-sets/src/conv_store/challenge.rst:46 -msgid "Code notes" -msgstr "Примітки до коду" +msgid "Code explanation" +msgstr "Пояснення коду" #: conv_store.models.Product:1 of msgid "Product model implementation" @@ -1018,10 +1023,6 @@ msgstr "" "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:251 -msgid "At least 50% coverage." -msgstr "Хоча б 50% покриття тестами." - -#: ../../problem-sets/src/conv_store/challenge.rst:252 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." @@ -2092,3 +2093,19 @@ msgstr "" #: ../../problem-sets/src/wrw_game/challenge.rst:202 msgid "Create game menu, for example: ::" msgstr "Створити меню гри, наприклад: ::" + +#~ msgid "" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" +#~ msgstr "" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" + +#~ msgid "" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#~ msgstr "" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" + +#~ msgid "Code notes" +#~ msgstr "Примітки до коду" + +#~ msgid "At least 50% coverage." +#~ msgstr "Хоча б 50% покриття тестами." diff --git a/src/appx/blog.md b/src/appx/blog.md deleted file mode 100644 index 835e1d15f..000000000 --- a/src/appx/blog.md +++ /dev/null @@ -1,2 +0,0 @@ -```{include} /../blog/docs/spec.md -``` diff --git a/src/appx/blog.txt b/src/appx/blog.txt new file mode 100644 index 000000000..d2c1bd5b1 --- /dev/null +++ b/src/appx/blog.txt @@ -0,0 +1 @@ +.. include:: /../blog/docs/spec.rst From 5c943e078ba29c4931ac385f6ad597e900a2472c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 17:59:50 +0300 Subject: [PATCH 067/689] Applied fixes: #48, #49 Signed-off-by: Serhii Horodilov --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 171 ++++++++++++++++++---------- 2 files changed, 114 insertions(+), 59 deletions(-) diff --git a/problem-sets b/problem-sets index d0b5a7412..aca9b8b8b 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit d0b5a74121c75af4e15e4ef83385d833b60e970c +Subproject commit aca9b8b8b48d5739c363ea286704cd562835944d diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index aa064a8bb..224a8f72e 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-09 01:18+0300\n" -"PO-Revision-Date: 2023-04-09 01:33+0300\n" +"POT-Creation-Date: 2023-04-10 17:46+0300\n" +"PO-Revision-Date: 2023-04-10 17:59+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -30,9 +30,9 @@ msgid "" "As a developer you were asked to create a simple blog site. The goal is to " "create a place on the Internet where users can share their stories to public." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - \" " -"\"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " -"історіями з громадськістю." +"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " +"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " +"громадськістю." #: ../../blog/docs/spec.rst:16 msgid "" @@ -644,6 +644,7 @@ msgstr "" "значення атрибута ``unit``." #: ../../problem-sets/src/conv_store/challenge.rst:46 +#: ../../problem-sets/src/conv_store/challenge.rst:77 msgid "Code explanation" msgstr "Пояснення коду" @@ -655,7 +656,7 @@ msgstr "Реалізація моделі товару" msgid "Instances of this class represent a product available for purchase." msgstr "Цей клас представляє товари, які можна придбати в магазині." -#: conv_store.models.Product of +#: conv_store.models.Product conv_store.models.ShoppingCart of msgid "Variables" msgstr "Змінні" @@ -665,11 +666,11 @@ msgstr "назва товару" #: conv_store.models.Product:7 of msgid "the price for a single product unit" -msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" +msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" #: conv_store.models.Product:9 of msgid "the size of a single product unit" -msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" +msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" #: conv_store.models.Product.get_total:1 of msgid "Return the total price for a specified amount of a product" @@ -683,7 +684,8 @@ msgstr "" "Якщо аргумент кількості пропущено, замість нього слід використовувати " "значення атрибута одиниці." -#: conv_store.models.Product.get_total of +#: conv_store.models.Product.get_total +#: conv_store.models.ShoppingCart.add_product of msgid "Parameters" msgstr "Параметри" @@ -691,23 +693,25 @@ msgstr "Параметри" msgid "a quantity to purchase, defaults to None" msgstr "кількість для покупки, за замовчуванням None" -#: conv_store.models.Product.get_total of +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of msgid "Returns" msgstr "Повертає" #: conv_store.models.Product.get_total:9 of msgid "total price for a specified amount of a product" -msgstr "загальна ціна за вказану кількість товару" +msgstr "вартість вказаної кількості товару" -#: conv_store.models.Product.get_total of +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of msgid "Return type" msgstr "Тип повернення" #: ../../problem-sets/src/conv_store/challenge.rst:51 -#: ../../problem-sets/src/conv_store/challenge.rst:78 -#: ../../problem-sets/src/conv_store/challenge.rst:122 -#: ../../problem-sets/src/conv_store/challenge.rst:185 -#: ../../problem-sets/src/conv_store/challenge.rst:220 +#: ../../problem-sets/src/conv_store/challenge.rst:82 +#: ../../problem-sets/src/conv_store/challenge.rst:126 +#: ../../problem-sets/src/conv_store/challenge.rst:189 +#: ../../problem-sets/src/conv_store/challenge.rst:224 msgid "Test cases" msgstr "Тестові приклади" @@ -750,11 +754,62 @@ msgstr "" "``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " "загальної ціни всього вмісту кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:93 +#: conv_store.models.ShoppingCart:1 of +msgid "Shopping cart model implementation" +msgstr "Реалізація моделі кошика" + +#: conv_store.models.ShoppingCart:3 of +msgid "" +"In general shopping cart is a container for products. Instances of this " +"class handle product and corresponding quantity for each item inside a " +"shopping cart instance." +msgstr "" +"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " +"класу обробляють продукт і відповідну кількість для кожного товару в " +"екземплярі кошика для покупок." + +#: conv_store.models.ShoppingCart:7 of +msgid "product appended to the shopping cart instance" +msgstr "товар, доданий до екземпляра кошика" + +#: conv_store.models.ShoppingCart:9 of +msgid "corresponding quantities for each product in cart" +msgstr "відповідна кількість для товару у кошику" + +#: conv_store.models.ShoppingCart.add_product:1 of +msgid "Add product to the shopping cart" +msgstr "Додає товар до кошика" + +#: conv_store.models.ShoppingCart.add_product:3 of +msgid "" +"This method adds a product instance and corresponding quantity value to the " +"cart." +msgstr "" +"Цей метод додає екземпляр продукту та відповідне значення кількості до " +"кошика." + +#: conv_store.models.ShoppingCart.add_product:6 of +msgid "a product instance to add to cart" +msgstr "екземпляр товару, щоб додати до кошика" + +#: conv_store.models.ShoppingCart.add_product:8 of +msgid "a quantity of a product to add. Defaults to the product unit value." +msgstr "" +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." + +#: conv_store.models.ShoppingCart.get_total:1 of +msgid "Return the total price for all the product in the cart" +msgstr "Повертає загальну вартість усіх товарів у кошику" + +#: conv_store.models.ShoppingCart.get_total:3 of +msgid "total cart price" +msgstr "загальна вартість кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:97 msgid "Initialization, Representation and Type Casting" msgstr "Ініціалізація, представлення та приведення типів" -#: ../../problem-sets/src/conv_store/challenge.rst:95 +#: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" "It's difficult to set properties one-by-one, also it's not informative to " "get default objects string representations. It's time to fix this." @@ -763,13 +818,13 @@ msgstr "" "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " "Настав час це виправити." -#: ../../problem-sets/src/conv_store/challenge.rst:98 +#: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" "``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " "за замовчуванням." -#: ../../problem-sets/src/conv_store/challenge.rst:99 +#: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" "Apply ``ShoppingCart.__init__`` to separate products and quantities between " "different carts." @@ -777,19 +832,19 @@ msgstr "" "Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " "між різними візками." -#: ../../problem-sets/src/conv_store/challenge.rst:101 +#: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" msgstr "Надайте представлення, зрозумілі людині. Наприклад:" -#: ../../problem-sets/src/conv_store/challenge.rst:103 +#: ../../problem-sets/src/conv_store/challenge.rst:107 msgid "``Product('juice', 35.66, 1)``" msgstr "``Product('juice', 35.66, 1)``" -#: ../../problem-sets/src/conv_store/challenge.rst:104 +#: ../../problem-sets/src/conv_store/challenge.rst:108 msgid "````" msgstr "````" -#: ../../problem-sets/src/conv_store/challenge.rst:106 +#: ../../problem-sets/src/conv_store/challenge.rst:110 msgid "" "While casting product instance to ``str`` type it should be equal to its " "``name`` attribute value." @@ -797,7 +852,7 @@ msgstr "" "Під час приведення екземпляра продукту до типу ``str`` він повинен " "дорівнювати значенню атрибута ``name``." -#: ../../problem-sets/src/conv_store/challenge.rst:108 +#: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" "While casting product instance to ``float`` type it should be equal to its " "``price`` attribute value." @@ -805,7 +860,7 @@ msgstr "" "Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " "значенню його атрибута ``price``." -#: ../../problem-sets/src/conv_store/challenge.rst:110 +#: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" "While casting shopping cart instance to ``float`` type it should be equal to " "its total price value." @@ -813,7 +868,7 @@ msgstr "" "Під час приведення екземпляра кошика для покупок до типу ``float`` він має " "дорівнювати загальному значенню ціни." -#: ../../problem-sets/src/conv_store/challenge.rst:112 +#: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" "While casting shopping cart instance to ``bool`` consider it ``True`` if at " "least one product is attach to current cart." @@ -821,24 +876,24 @@ msgstr "" "Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " "``True``, якщо принаймні один продукт приєднаний до поточного кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:115 +#: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" -#: ../../problem-sets/src/conv_store/challenge.rst:117 +#: ../../problem-sets/src/conv_store/challenge.rst:121 msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:118 +#: ../../problem-sets/src/conv_store/challenge.rst:122 msgid "" "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:144 +#: ../../problem-sets/src/conv_store/challenge.rst:148 msgid "Payment Processors" msgstr "Опрацювання платежів" -#: ../../problem-sets/src/conv_store/challenge.rst:146 +#: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" "The owner asked you to implement a flexible payment system. Purchasing the " "shopping card consists of several steps:" @@ -846,19 +901,19 @@ msgstr "" "Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " "покупок складається з кількох кроків:" -#: ../../problem-sets/src/conv_store/challenge.rst:149 +#: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" -#: ../../problem-sets/src/conv_store/challenge.rst:150 +#: ../../problem-sets/src/conv_store/challenge.rst:154 msgid "payment validation - various payment types requires various validations" msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" -#: ../../problem-sets/src/conv_store/challenge.rst:151 +#: ../../problem-sets/src/conv_store/challenge.rst:155 msgid "purchasing the cart" msgstr "купівля кошика" -#: ../../problem-sets/src/conv_store/challenge.rst:153 +#: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" "For now there are two payment types available in the store: cash and credit " "card, but they maybe extended at any time." @@ -866,7 +921,7 @@ msgstr "" "Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " "їх можна продовжити в будь-який час." -#: ../../problem-sets/src/conv_store/challenge.rst:156 +#: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" "Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " "property *protected*, since it should not be accessed outside the card " @@ -876,7 +931,7 @@ msgstr "" "властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " "картки." -#: ../../problem-sets/src/conv_store/challenge.rst:159 +#: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " "arguments and return a value of a boolean type. This is an abstract class " @@ -886,7 +941,7 @@ msgstr "" "аргументів і повертає значення логічного типу. Це абстрактний клас для " "майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:162 +#: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" "Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " "``ShoppingCart`` object and returns nothing. This is an abstract class for " @@ -896,7 +951,7 @@ msgstr "" "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " "майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:165 +#: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" "Inherit ``CashPaymentValidator`` from the base validator. The instances of " "this class are considered to be always valid." @@ -904,17 +959,17 @@ msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." -#: ../../problem-sets/src/conv_store/challenge.rst:167 +#: ../../problem-sets/src/conv_store/challenge.rst:171 msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." -#: ../../problem-sets/src/conv_store/challenge.rst:169 +#: ../../problem-sets/src/conv_store/challenge.rst:173 msgid "" "The instances of this class are created with ``security_code`` argument." msgstr "" "Екземпляри цього класу створено за допомогою аргументу ``security_code``." -#: ../../problem-sets/src/conv_store/challenge.rst:170 +#: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" "``is_valid`` method should ask a customer for a security code and check it " "against the stored value. In case codes are equal payment considered to be " @@ -923,7 +978,7 @@ msgstr "" "Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " "збереженим значенням. Якщо коди однакові, оплата вважається дійсною." -#: ../../problem-sets/src/conv_store/challenge.rst:174 +#: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " @@ -935,7 +990,7 @@ msgstr "" "\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " "слід роздрукувати." -#: ../../problem-sets/src/conv_store/challenge.rst:179 +#: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" "Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " @@ -946,15 +1001,15 @@ msgstr "" "і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " "повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." -#: ../../problem-sets/src/conv_store/challenge.rst:199 +#: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" msgstr "Більше покращень для кошиків для покупок" -#: ../../problem-sets/src/conv_store/challenge.rst:201 +#: ../../problem-sets/src/conv_store/challenge.rst:205 msgid "Make your ``ShoppingCart`` an actual container" msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" -#: ../../problem-sets/src/conv_store/challenge.rst:203 +#: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" "Implement ``len(cart_obj)`` and make it return the number of products in the " "cart." @@ -962,7 +1017,7 @@ msgstr "" "Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " "кошику." -#: ../../problem-sets/src/conv_store/challenge.rst:205 +#: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" "Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " "corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." @@ -971,7 +1026,7 @@ msgstr "" "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " "float]]``)." -#: ../../problem-sets/src/conv_store/challenge.rst:209 +#: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" "Make your ``ShoppingCart`` iterable - let it provide the product instance " "and corresponding quantity for each iteration." @@ -979,7 +1034,7 @@ msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." -#: ../../problem-sets/src/conv_store/challenge.rst:211 +#: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" "Avoid products duplication. In case someone tries to put the product into a " "cart and this product already is present there, do not it for the second " @@ -989,7 +1044,7 @@ msgstr "" "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " "натомість відповідне значення кількості." -#: ../../problem-sets/src/conv_store/challenge.rst:214 +#: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" "Implement ``remove_product`` method to completely remove some product from " "the cart." @@ -997,7 +1052,7 @@ msgstr "" "Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " "кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:216 +#: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" "Implement ``sub_product`` to decrease some product quantity. If quantity is " "equal to 0 (zero) or less - remove product from the cart." @@ -1005,24 +1060,24 @@ msgstr "" "Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " "дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:245 +#: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" msgstr "Тестування програмного забезпечення" -#: ../../problem-sets/src/conv_store/challenge.rst:247 +#: ../../problem-sets/src/conv_store/challenge.rst:251 msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." -#: ../../problem-sets/src/conv_store/challenge.rst:249 +#: ../../problem-sets/src/conv_store/challenge.rst:253 msgid "Tests should be located inside of \"tests\" directory." msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." -#: ../../problem-sets/src/conv_store/challenge.rst:250 +#: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." msgstr "" "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." -#: ../../problem-sets/src/conv_store/challenge.rst:251 +#: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." From dd7609c8172d762822dfd868096f3530299247b3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 16:21:44 +0300 Subject: [PATCH 068/689] Added base "Exceptions" materials Signed-off-by: Serhii Horodilov --- src/basics/exceptions.txt | 241 ++++++++++++++++++++++++++++++++++++++ src/refs.bib | 17 ++- 2 files changed, 254 insertions(+), 4 deletions(-) diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 2d5056873..498fa6666 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -1,3 +1,244 @@ +.. _built-in exceptions: + https://docs.python.org/library/exceptions.html#bltin-exceptions + ******************************************************************************* Errors and Exceptions ******************************************************************************* + +There are (at least) two distinguishable kinds of errors: +*syntax errors* and *exceptions* :cite:`docs-python:errors`. + +Syntax errors +============= + +Syntax errors are also known as parsing errors. + +.. code-block:: python + + >>> while True print("the loop is running...") + File "", line 1 + while True print('the loop is running...') + ^^^^^ + SyntaxError: invalid syntax + +The parser repeats the offending line and displays a little ‘arrow’ pointing at +the earliest point in the line where the error was detected. The error is +caused by (or at least detected at) the token preceding the arrow. + +Exceptions +========== + +Even if a statement or expression is syntactically correct, it may cause an +error when an attempt is made to execute it. Errors detected during execution +are called exceptions and are not unconditionally fatal: you will soon learn +how to handle them in Python programs. + +Exceptions come in different types, and the type is printed as part of +the message. + +For example, the ``div`` function implemented as + +.. code-block:: python + + def div(x: Union[int, float], y: Union[int, float]) -> float: + """Return the result of dividing `x` by `y`.""" + + return x / y + +may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` +parameter. + +Standard exception names are built-in identifiers (not reserved keywords). + +.. seealso:: The list of `built-in exceptions`_ + +Tracebacks +========== + +.. note:: "File" is replaced with a *dummy string* within the example above. + +Let's assume the following modules structure: + +:: + + / + |-- main.py + |-- func.py + +The **main** module imports a ``div`` function implemented above from the +**func** module. The code in main is implemented as follows: + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + print(f"{x = }, {y = } -> {div(x, y) = }") + +While running the code with correct inputs it will work fine. But there are +at two exceptions for this script. + +The first one is related on type conversion. While running the main script +there is case of invalid input. + +:: + + Please enter a number: 100 + Please enter a number: one + Traceback (most recent call last): + File "path/to/module.py", line 5, in + y = int(input("Please enter a number: ")) + ValueError: invalid literal for int() with base 10: 'one' + +Note the **traceback** indicates the module and the exact line of code that +causes the exception. + +The second one exception occurs when a 0 is passed as the second parameter to +``div`` function. The traceback would look like: + +:: + + Please enter a number: 100 + Please enter a number: 0 + Traceback (most recent call last): + File "path/to/main.py", line 6, in + print(f"{x = }, {y = } -> {div(x, y) = }") + File "path/to/func.py", line 11, in div + return x / y + ZeroDivisionError: division by zero + +The traceback indicates all calls (top to bottom) that cause an exception. + +Exception handling +================== + +It is possible to write programs that handle selected exceptions. +The ``try`` statement is used to do that. + +The try statement works as follows. + +#. First, the try clause (the statement(s) between the try and except + keywords) is executed. +#. If no exception occurs, the except clause is skipped and execution of + the try statement is finished. +#. If an exception occurs during execution of the try clause, the rest of + the clause is skipped. Then, if its type matches the exception named after + the except keyword, the except clause is executed, and then execution + continues after the try/except block. +#. If an exception occurs which does not match the exception named in + the except clause, it is passed on to outer try statements; if no handler + is found, it is an unhandled exception and execution stops with a message + as shown above. + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + try: + print(f"{x = }, {y = } -> {div(x, y) = }") + except: + print("An exception occurs") + +A try statement may have more than one except clause, to specify handlers for +different exceptions. + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + try: + print(f"{x = }, {y = } -> {div(x, y) = }") + except (ValueError, ZeroDivisionError): + print("An exception occurs") + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + try: + print(f"{x = }, {y = } -> {div(x, y) = }") + except ValueError as exc: + print(f"Value cannot be converted, {exc}") + except ZeroDivisionError: + print(f"Zero division error: {y = }") + +All exceptions +-------------- + +It's a bad practice to handle **all** exceptions. + +When indicating an ``except`` block without specifying an exception to catch it +will work for any exception, that occurs in ``try`` block. The same is relevant +for handling ``BaseException`` and ``Exception``. + +:: + + except: + ... + + except (BaseException, Exception): + ... + + except Exception: + ... + +All exceptions are inherited from ``Exception`` class, which is subclass of +``BaseException``. So, you can never know what exactly goes wrong with your +code. + +``finally`` statement +--------------------- + +The ``try`` statement cannot be used itself. This will cause ``SyntaxError``. +Either ``except`` or ``finally`` block is required to be included. + +While the ``except`` block tries to catch the exceptions if any, +the ``finally`` block will be always executed regardless of the exception +occurs. + +.. code-block:: python + + try: + ... # some code that may cause an exception + finally: + ... # this code will be always executed + + try: + result = 10 // 2 + except ZeroDivisionError: + print("zero division") + finally: + print("it's finished") + + try: + result = 10 // 0 + except ZeroDivisionError: + print("zero division") + finally: + print("it's finished") + +``else`` statement +------------------ + +.. todo: complete the block + +Raising exceptions +================== + +.. todo: complete the block + +Creating custom exceptions +========================== + +.. todo: complete the block diff --git a/src/refs.bib b/src/refs.bib index de0048798..468c010da 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -1,6 +1,10 @@ -******************************************************************************* -Python training course bibliography database -******************************************************************************* +############################################################################### +# Python training course bibliography database # +############################################################################### +# This document provides references to resources used during course creation. +# Most of them are online documentation from official resource and articles +# published at thematic sites. + @misc{docs-python, title = "{Python Documentation}", @@ -65,5 +69,10 @@ @misc{docs-python:printf-formatting @misc{docs-python:stdtypes, title = "{Python Documentation}", - url = {https://docs.python.org/library/stdtypes.html} + url = {https://docs.python.org/library/stdtypes.html}, } + +@misc{docs-python:errors, + title = "{Errors and Exceptions}", + url = {https://docs.python.org/3.11/tutorial/errors.html}, +} \ No newline at end of file From bc9cc1a60197d2c6015b5ccf9c0e0aae9a153a30 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 18:07:00 +0300 Subject: [PATCH 069/689] Added `try/else` section Signed-off-by: Serhii Horodilov --- src/basics/exceptions.txt | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 498fa6666..8b395913e 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -231,7 +231,26 @@ occurs. ``else`` statement ------------------ -.. todo: complete the block +The ``try`` statement can also use ``else`` (which is optional). +The statements within this block will be execute only in case there were +no exceptions raised while running the ``try``. + +.. code-block:: python + + try: + result = 10 // 2 + except ZeroDivisionError: + print("zero division") + else: + print("no errors occurred") # this **WILL** be printed out + + try: + result = 10 // 0 + except ZeroDivisionError: + print("zero division") + else: + print("no errors occurred") # this **WILL NOT** be printed out + Raising exceptions ================== From d09b6ad5142931e8aaa4bab8119681a3d7fe547d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 18:21:30 +0300 Subject: [PATCH 070/689] Added raising and creating exception sections Signed-off-by: Serhii Horodilov --- src/basics/exceptions.txt | 56 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 8b395913e..bbb33f02c 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -255,9 +255,61 @@ no exceptions raised while running the ``try``. Raising exceptions ================== -.. todo: complete the block +The ``raise`` statement allows the programmer to force a specified exception +to occur. The sole argument to raise indicates the exception to be raised. +This must be either an exception instance or an exception class (a class that +derives from ``BaseException``, such as ``Exception`` or one of its +subclasses). If an exception class is passed, it will be implicitly +instantiated by calling its constructor with no arguments. + +.. code-block:: python + + raise NameError("name error") + raise NameError Creating custom exceptions ========================== -.. todo: complete the block +Programs may name their own exceptions by creating a new exception class. +Exceptions should typically be derived from the Exception class, either +directly or indirectly. + +Exception classes can be defined which do anything any other class can do, +but are usually kept simple, often only offering a number of attributes that +allow information about the error to be extracted by handlers for +the exception. + +Most exceptions are defined with names that end in “Error”, similar to the +naming of the standard exceptions. + +Many standard modules define their own exceptions to report errors that may +occur in functions they define. + +.. code-block:: python + :caption: User-define exception + + class InvalidInputError(Exception): + """This is a custom exception for demo needs""" + + + class NegativeError(ValueError): + """Raised when a negative value passed""" + + + def sum_positive(x: int, y: int) -> int: + """Return the sum of positive integers""" + + if x < 0 or y < 0: + raise NegativeError + + return x + y + + + try: + x = int(input("Enter number x: ")) + y = int(input("Enter number y: ")) + result = sum_positive(x, y) + except ValueError: + raise InvalidInputError("could not convert to integer") + except NegativeError: + print("this function works only with positive integers") From c93e57116d0ddefa43c7d81fe5a45a0f638e6489 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 23:16:30 +0300 Subject: [PATCH 071/689] Applied fixes for translations and "exceptions" document Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/basics.po | 354 +++++++++++++++++++++++++- src/basics/exceptions.txt | 38 ++- src/basics/stdtypes.txt | 2 - 3 files changed, 378 insertions(+), 16 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index 8256b04f2..dde1e54aa 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 19:38+0300\n" -"PO-Revision-Date: 2023-04-08 19:40+0300\n" +"POT-Creation-Date: 2023-04-10 23:14+0300\n" +"PO-Revision-Date: 2023-04-10 23:14+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -25,10 +25,354 @@ msgstr "" msgid "Control Flow" msgstr "Керування виконанням" -#: ../../src/basics/exceptions.txt:3 +#: ../../src/basics/exceptions.txt:6 msgid "Errors and Exceptions" msgstr "Помилки та винятки" +#: ../../src/basics/exceptions.txt:8 +msgid "" +"There are (at least) two distinguishable kinds of errors: *syntax errors* " +"and *exceptions* :cite:`docs-python:errors`." +msgstr "" +"Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" +"cite:`docs-python:errors`." + +#: ../../src/basics/exceptions.txt:12 +msgid "Syntax errors" +msgstr "Синтаксичні помилки" + +#: ../../src/basics/exceptions.txt:14 +msgid "Syntax errors are also known as parsing errors." +msgstr "Синтаксичні помилки також відомі як помилки Python парсера." + +#: ../../src/basics/exceptions.txt:24 +msgid "" +"The parser repeats the offending line and displays a little \"arrow\" " +"pointing at the earliest point in the line where the error was detected. The " +"error is caused by (or at least detected at) the token preceding the arrow." +msgstr "" +"Синтаксичний аналізатор повторює неправильний рядок і відображає маленьку " +"\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " +"Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." + +#: ../../src/basics/exceptions.txt:29 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../src/basics/exceptions.txt:31 +msgid "" +"Even if a statement or expression is syntactically correct, it may cause an " +"error when an attempt is made to execute it. Errors detected during " +"execution are called exceptions and are not unconditionally fatal: you will " +"soon learn how to handle them in Python programs." +msgstr "" +"Навіть якщо оператор або вираз синтаксично правильний, це може спричинити " +"помилку під час спроби його виконання. Помилки, виявлені під час виконання, " +"називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " +"обробляти в програмах на Python." + +#: ../../src/basics/exceptions.txt:36 +msgid "" +"Exceptions come in different types, and the type is printed as part of the " +"message." +msgstr "" +"Винятки бувають різних типів, і тип друкується як частина повідомлення." + +#: ../../src/basics/exceptions.txt:39 +msgid "For example, the ``div`` function implemented as" +msgstr "Наприклад, функція ``div``, реалізована як" + +#: ../../src/basics/exceptions.txt:48 +msgid "" +"may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " +"parameter." +msgstr "" +"може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " +"``y``." + +#: ../../src/basics/exceptions.txt:51 +msgid "" +"Standard exception names are built-in identifiers (not reserved keywords)." +msgstr "" +"Стандартні назви винятків є вбудованими ідентифікаторами (а не " +"зарезервованими ключовими словами)." + +#: ../../src/basics/exceptions.txt:53 +msgid "The list of `built-in exceptions`_" +msgstr "Список `вбудованих винятків`_" + +#: ../../src/basics/exceptions.txt:56 +msgid "Tracebacks" +msgstr "Відстеження" + +#: ../../src/basics/exceptions.txt:58 +msgid "\"File\" is replaced with a *dummy string* within the examples." +msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." + +#: ../../src/basics/exceptions.txt:60 +msgid "Let's assume the following modules structure:" +msgstr "Припустимо наступну структуру модулів:" + +#: ../../src/basics/exceptions.txt:68 +msgid "" +"The **main** module imports a ``div`` function implemented above from the " +"**func** module. The code in main is implemented as follows:" +msgstr "" +"Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " +"**func**. Основний код реалізовано наступним чином:" + +#: ../../src/basics/exceptions.txt:80 +msgid "" +"While running the code with correct inputs it will work fine. But there are " +"at two exceptions for this script." +msgstr "" +"Під час виконання коду з правильними введеннями він працюватиме нормально. " +"Але для цього сценарію є два винятки." + +#: ../../src/basics/exceptions.txt:83 +msgid "" +"The first one is related on type conversion. While running the main script " +"there is case of invalid input." +msgstr "" +"Перший пов'язаний з перетворенням типів. Під час виконання основного " +"сценарію є випадок неправильного введення." + +#: ../../src/basics/exceptions.txt:95 +msgid "" +"Note the **traceback** indicates the module and the exact line of code that " +"causes the exception." +msgstr "" +"Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " +"викликає виняток." + +#: ../../src/basics/exceptions.txt:98 +msgid "" +"The second one exception occurs when a 0 is passed as the second parameter " +"to ``div`` function. The traceback would look like:" +msgstr "" +"Другий виняток виникає, коли 0 передається як другий параметр функції " +"``div``. Трасування виглядатиме так:" + +#: ../../src/basics/exceptions.txt:112 +msgid "" +"The traceback indicates all calls (top to bottom) that cause an exception." +msgstr "" +"Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " +"виняток." + +#: ../../src/basics/exceptions.txt:115 ../../src/basics/syntax.txt +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/exceptions.txt:117 +msgid "" +"It is possible to write programs that handle selected exceptions. The " +"``try`` statement is used to do that." +msgstr "" +"Можна писати програми, які оброблятимуть вибрані винятки. Для цього " +"використовується інструкція ``try``." + +#: ../../src/basics/exceptions.txt:120 +msgid "The try statement works as follows." +msgstr "Інструкція try працює наступним чином." + +#: ../../src/basics/exceptions.txt:122 +msgid "" +"First, the try clause (the statement(s) between the try and except keywords) " +"is executed." +msgstr "" +"Спочатку виконується речення try (вираз(и) між ключовими словами try і " +"except)." + +#: ../../src/basics/exceptions.txt:124 +msgid "" +"If no exception occurs, the except clause is skipped and execution of the " +"try statement is finished." +msgstr "" +"Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " +"оператора try завершується." + +#: ../../src/basics/exceptions.txt:126 +msgid "" +"If an exception occurs during execution of the try clause, the rest of the " +"clause is skipped. Then, if its type matches the exception named after the " +"except keyword, the except clause is executed, and then execution continues " +"after the try/except block." +msgstr "" +"Якщо під час виконання try виникає виняток, решта пропозиції пропускається. " +"Потім, якщо його тип збігається з винятком, названим за ключовим словом " +"osim, виконується пропозиція, а потім виконання продовжується після блоку " +"try/except." + +#: ../../src/basics/exceptions.txt:130 +msgid "" +"If an exception occurs which does not match the exception named in the " +"except clause, it is passed on to outer try statements; if no handler is " +"found, it is an unhandled exception and execution stops with a message as " +"shown above." +msgstr "" +"Якщо виникає виняток, який не збігається з винятком, названим у реченні " +"винятку, він передається зовнішнім операторам try; якщо обробник не " +"знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " +"повідомленням, як показано вище." + +#: ../../src/basics/exceptions.txt:147 +msgid "" +"A try statement may have more than one except clause, to specify handlers " +"for different exceptions." +msgstr "" +"Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " +"різних винятків." + +#: ../../src/basics/exceptions.txt:177 +msgid "Handling ALL exception" +msgstr "Опрацювання усіх винятків" + +#: ../../src/basics/exceptions.txt:179 +msgid "It's a bad practice to handle **all** exceptions." +msgstr "Обробляти **всі** винятки – це погана практика." + +#: ../../src/basics/exceptions.txt:181 +msgid "" +"When indicating an ``except`` block without specifying an exception to catch " +"it will work for any exception, that occurs in ``try`` block. The same is " +"relevant for handling ``BaseException`` and ``Exception``. But you can never " +"say what exact goes wrong." +msgstr "" +"Якщо вказати блок ``except`` без визначення винятку для перехоплення, він " +"працюватиме для будь-якого винятку, який виникає в блоці ``try``. Те саме " +"стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " +"можливо сказати, який саме виняток стався." + +#: ../../src/basics/exceptions.txt:186 +msgid "" +"However, this scenario may work for logging an exception and raising it " +"again to be handled on upper levels." +msgstr "" +"Проте, такий сценарій може працювати для логування винятків, після чого вони " +"підійматься заново, щоб бути опрацьованими на вищих рівнях програми." + +#: ../../src/basics/exceptions.txt:208 +msgid "" +"All exceptions are inherited from ``Exception`` class, which is subclass of " +"``BaseException``. So, you can never know what exactly goes wrong with your " +"code." +msgstr "" +"Усі винятки успадковуються від класу ``Exception``, який є підкласом " +"``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " +"вашим кодом." + +#: ../../src/basics/exceptions.txt:213 +msgid "``finally`` statement" +msgstr "Вираз ``finally``" + +#: ../../src/basics/exceptions.txt:215 +msgid "" +"The ``try`` statement cannot be used itself. This will cause " +"``SyntaxError``. Either ``except`` or ``finally`` block is required to be " +"included." +msgstr "" +"Оператор ``try`` не може бути використаний сам по собі. Це спричинить " +"``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." + +#: ../../src/basics/exceptions.txt:218 +msgid "" +"While the ``except`` block tries to catch the exceptions if any, the " +"``finally`` block will be always executed regardless of the exception occurs." +msgstr "" +"У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " +"блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." + +#: ../../src/basics/exceptions.txt:244 +msgid "``else`` statement" +msgstr "Вираз ``else``" + +#: ../../src/basics/exceptions.txt:246 +msgid "" +"The ``try`` statement can also use ``else`` (which is optional). The " +"statements within this block will be execute only in case there were no " +"exceptions raised while running the ``try``." +msgstr "" +"Оператор ``try`` також може використовувати ``else`` (який є " +"необов’язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " +"якщо під час виконання ``try`` не було викликано винятків." + +#: ../../src/basics/exceptions.txt:268 +msgid "Raising exceptions" +msgstr "Винятки: raising" + +#: ../../src/basics/exceptions.txt:270 +msgid "" +"The ``raise`` statement allows the programmer to force a specified exception " +"to occur. The sole argument to raise indicates the exception to be raised. " +"This must be either an exception instance or an exception class (a class " +"that derives from ``BaseException``, such as ``Exception`` or one of its " +"subclasses). If an exception class is passed, it will be implicitly " +"instantiated by calling its constructor with no arguments." +msgstr "" +"Інструкція ``raise`` дозволяє програмісту примусово викликати певний " +"виняток. Єдиний аргумент, який потрібно викликати, вказує на виняток, який " +"потрібно викликати. Це має бути екземпляр винятку або клас винятку (клас, " +"який походить від ``BaseException``, наприклад ``Exception`` або один із " +"його підкласів). Якщо передано клас винятків, він буде неявно створений " +"шляхом виклику його конструктора без аргументів." + +#: ../../src/basics/exceptions.txt:282 +msgid "" +"``raise`` statement itself will re-raise all the exceptions within the " +"context. Also exceptions can be raised again from the ``except`` block. It's " +"a common pattern to catch the exception for loggers and when re-raise it." +msgstr "" +"Сам оператор ``raise`` повторно викличе всі винятки в контексті опрацювання. " +"Крім того, винятки можуть бути викликані знову з блоку ``except``. Це " +"загальний шаблон для перехоплення винятку для реєстрації повідомлення про " +"виняткову ситуацію і повторного його підняття." + +#: ../../src/basics/exceptions.txt:295 +msgid "Creating custom exceptions" +msgstr "Створення винятків" + +#: ../../src/basics/exceptions.txt:297 +msgid "" +"Programs may name their own exceptions by creating a new exception class. " +"Exceptions should typically be derived from the Exception class, either " +"directly or indirectly." +msgstr "" +"Програми можуть називати власні винятки, створюючи новий клас винятків. " +"Винятки зазвичай мають бути похідними від класу Exception, прямо чи " +"опосередковано." + +#: ../../src/basics/exceptions.txt:301 +msgid "" +"Exception classes can be defined which do anything any other class can do, " +"but are usually kept simple, often only offering a number of attributes that " +"allow information about the error to be extracted by handlers for the " +"exception." +msgstr "" +"Можна визначити класи винятків, які роблять усе, що може зробити будь-який " +"інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " +"які дозволяють обробникам витягувати інформацію про помилку для винятку." + +#: ../../src/basics/exceptions.txt:306 +msgid "" +"Most exceptions are defined with names that end in \"Error\", similar to the " +"naming of the standard exceptions." +msgstr "" +"Більшість винятків визначено з іменами, які закінчуються на \"Error\", " +"подібно до назв стандартних винятків." + +#: ../../src/basics/exceptions.txt:309 +msgid "" +"Many standard modules define their own exceptions to report errors that may " +"occur in functions they define." +msgstr "" +"Багато стандартних модулів визначають власні винятки, щоб повідомляти про " +"помилки, які можуть виникнути у функціях, які вони визначають." + +#: ../../src/basics/exceptions.txt:312 +msgid "User-defined exception" +msgstr "Виняток, визначений користувачем" + #: ../../src/basics/functions.txt:3 ../../src/basics/syntax.txt msgid "Functions" msgstr "Функції" @@ -919,10 +1263,6 @@ msgstr "" "для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " "оператора імпорту." -#: ../../src/basics/syntax.txt -msgid "Exception handling" -msgstr "Обробка винятків" - #: ../../src/basics/syntax.txt:77 msgid "" "Python provides a way to handle errors and exceptions in a program using the " diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index bbb33f02c..51aa19e33 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -21,7 +21,7 @@ Syntax errors are also known as parsing errors. ^^^^^ SyntaxError: invalid syntax -The parser repeats the offending line and displays a little ‘arrow’ pointing at +The parser repeats the offending line and displays a little "arrow" pointing at the earliest point in the line where the error was detected. The error is caused by (or at least detected at) the token preceding the arrow. @@ -55,7 +55,7 @@ Standard exception names are built-in identifiers (not reserved keywords). Tracebacks ========== -.. note:: "File" is replaced with a *dummy string* within the example above. +.. note:: "File" is replaced with a *dummy string* within the examples. Let's assume the following modules structure: @@ -173,14 +173,26 @@ different exceptions. except ZeroDivisionError: print(f"Zero division error: {y = }") -All exceptions --------------- +Handling ALL exception +---------------------- It's a bad practice to handle **all** exceptions. When indicating an ``except`` block without specifying an exception to catch it will work for any exception, that occurs in ``try`` block. The same is relevant -for handling ``BaseException`` and ``Exception``. +for handling ``BaseException`` and ``Exception``. But you can never say what +exact goes wrong. + +.. note:: However, this scenario may work for logging an exception and raising + it again to be handled on upper levels. + + .. code-block:: python + + try: + ... # some code that may raise an exception + except: + ... # logging actions + raise # raise an exception again :: @@ -267,6 +279,18 @@ instantiated by calling its constructor with no arguments. raise NameError("name error") raise NameError +``raise`` statement itself will re-raise all the exceptions within the context. +Also exceptions can be raised again from the ``except`` block. It's a common +pattern to catch the exception for loggers and when re-raise it. + +.. code-block:: python + + try: + result = 10 // 0 + except: + print("zero division") + raise + Creating custom exceptions ========================== @@ -279,14 +303,14 @@ but are usually kept simple, often only offering a number of attributes that allow information about the error to be extracted by handlers for the exception. -Most exceptions are defined with names that end in “Error”, similar to the +Most exceptions are defined with names that end in "Error", similar to the naming of the standard exceptions. Many standard modules define their own exceptions to report errors that may occur in functions they define. .. code-block:: python - :caption: User-define exception + :caption: User-defined exception class InvalidInputError(Exception): """This is a custom exception for demo needs""" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index bf5a7477a..ce5054a4a 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -176,8 +176,6 @@ Common operations Value comparisons ----------------- -.. todo: make TypeError a link - Sequences can be compared only within each of their types, with the restriction that ranges do not support order comparison. Equality comparison across these types results in inequality, and ordering comparison across these types raises From 1c740810233f05e60fb5e43a19af56dae6036c40 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 01:56:13 +0300 Subject: [PATCH 072/689] Updated challenge: WRW -> WTK Signed-off-by: Serhii Horodilov --- problem-sets | 2 +- pyproject.toml | 4 ++-- src/appx/wrw_game.txt | 1 - src/appx/wtk.txt | 1 + src/conf.py | 2 +- src/index.txt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 src/appx/wrw_game.txt create mode 100644 src/appx/wtk.txt diff --git a/problem-sets b/problem-sets index aca9b8b8b..63d3c3e36 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit aca9b8b8b48d5739c363ea286704cd562835944d +Subproject commit 63d3c3e362420dd3ed3190dd47fd775accab2fbb diff --git a/pyproject.toml b/pyproject.toml index 36544b23c..7fb533276 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2022.11.dev" +version = "2023.04.dev" description = "" license = "MIT" authors = [ @@ -11,7 +11,7 @@ maintainers = [ "Serhii Horodilov " ] readme = "README.rst" -homepage = "" # todo: +homepage = "https://edu-python-course.github.io" repository = "https://github.com/edu-python-course/edu-python-course.github.io" keywords = [ "python", diff --git a/src/appx/wrw_game.txt b/src/appx/wrw_game.txt deleted file mode 100644 index b75805cd6..000000000 --- a/src/appx/wrw_game.txt +++ /dev/null @@ -1 +0,0 @@ -.. include:: /../problem-sets/src/wrw_game/challenge.rst diff --git a/src/appx/wtk.txt b/src/appx/wtk.txt new file mode 100644 index 000000000..1a55429df --- /dev/null +++ b/src/appx/wtk.txt @@ -0,0 +1 @@ +.. include:: /../problem-sets/src/wtk/challenge.rst diff --git a/src/conf.py b/src/conf.py index 40cb0d14f..8155e8f22 100644 --- a/src/conf.py +++ b/src/conf.py @@ -14,7 +14,7 @@ f"{datetime.now().year}, Python training course authors and contributors" authors = "Vladyslav Ponomaryov \\and " \ "Serhii Horodilov" -version = "2022.11.dev" +version = "2023.04.dev" # general configuration master_doc = root_doc = "index" diff --git a/src/index.txt b/src/index.txt index 7dcf895fa..06ef56b85 100644 --- a/src/index.txt +++ b/src/index.txt @@ -28,7 +28,7 @@ appx/precedence appx/printf appx/conv_store - appx/wrw_game + appx/wtk appx/blog .. rubric:: References From d844a20182d0aeb7c854534d64b112cad30d8552 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 02:04:30 +0300 Subject: [PATCH 073/689] Updated translations Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 1455 ++++++++++++++++----------- 1 file changed, 851 insertions(+), 604 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 224a8f72e..d39303e45 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:46+0300\n" +"POT-Creation-Date: 2023-04-11 02:01+0300\n" "PO-Revision-Date: 2023-04-10 17:59+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" "Language: uk\n" +"Language-Team: ua \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" #: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" @@ -27,32 +26,33 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"As a developer you were asked to create a simple blog site. The goal is to " -"create a place on the Internet where users can share their stories to public." +"As a developer you were asked to create a simple blog site. The goal is " +"to create a place on the Internet where users can share their stories to " +"public." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " -"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " -"громадськістю." +"Вас, як розробника, попросили створити простий сайт блогу. Мета - " +"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " +"історіями з громадськістю." #: ../../blog/docs/spec.rst:16 msgid "" -"This document applies requirements for the entire project step-by-step. You " -"will start from creating the appropriate URL dispatcher and connecting a " -"PostgreSQL database to store the data and will finish with implementing REST " -"API for the blog." +"This document applies requirements for the entire project step-by-step. " +"You will start from creating the appropriate URL dispatcher and " +"connecting a PostgreSQL database to store the data and will finish with " +"implementing REST API for the blog." msgstr "" "Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " -"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " -"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " -"API для блог." +"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до" +" бази даних PostgreSQL для зберігання даних і закінчите впровадженням " +"REST API для блог." #: ../../blog/docs/spec.rst:21 msgid "" -"There are some boiler plates, that may be useful in your future work, but " -"you aren’t forced to use them. It’s on your choice." +"There are some boiler plates, that may be useful in your future work, but" +" you aren’t forced to use them. It’s on your choice." msgstr "" -"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " -"ви не змушені їх використовувати. Це на ваш вибір." +"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, " +"але ви не змушені їх використовувати. Це на ваш вибір." #: ../../blog/docs/spec.rst:24 msgid "`Starter template`_" @@ -68,29 +68,29 @@ msgstr "Завдання: Site views" #: ../../blog/docs/spec.rst:30 msgid "" -"It’s ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." +"It’s ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " -"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " -"щоб повернути у відповіді HTTP." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " +"хочете, щоб повернути у відповіді HTTP." #: ../../blog/docs/spec.rst:34 msgid "" -"``/blogs/``: A site’s homepage. This will contain a list of blogs available " -"via the django site." +"``/blogs/``: A site’s homepage. This will contain a list of blogs " +"available via the django site." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " -"на сайті django." +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " +"доступних на сайті django." #: ../../blog/docs/spec.rst:36 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." +"``/about/``: надає звичайний текст для користувача, що описує функції " +"сайту django." #: ../../blog/docs/spec.rst:38 msgid "``/``: same as ``/blogs/``" @@ -98,20 +98,21 @@ msgstr "``/``: те ж саме ``/blogs/``" #: ../../blog/docs/spec.rst:39 msgid "" -"``//``: A single blog post detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single blogpost from the database." +"``//``: A single blog post detail view. The URL contains " +"dynamic part in it. This will be used to fetch a single blogpost from the" +" database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " -"містить динамічну частину. Це буде використано для отримання однієї " -"публікації блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. " +"URL-адреса містить динамічну частину. Це буде використано для отримання " +"однієї публікації блогу з бази даних." #: ../../blog/docs/spec.rst:42 msgid "" "``//comment/``: This view will be used to add comments to a " "blogpost." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання " -"коментарів до публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання" +" коментарів до публікації блогу." #: ../../blog/docs/spec.rst:44 msgid "``/create/``: A post creation form." @@ -119,13 +120,11 @@ msgstr "``/create/``: форма створення публікації." #: ../../blog/docs/spec.rst:45 msgid "``//update/``: A view to update an existing post data." -msgstr "" -"``//update/``: перегляд для оновлення наявних даних публікації." +msgstr "``//update/``: перегляд для оновлення наявних даних публікації." #: ../../blog/docs/spec.rst:46 msgid "``//delete/``: A view to confirm post deletion." -msgstr "" -"``//delete/``: перегляд для підтвердження видалення публікації." +msgstr "``//delete/``: перегляд для підтвердження видалення публікації." #: ../../blog/docs/spec.rst:47 msgid "``/profile//``: A site user’s personal page." @@ -133,11 +132,11 @@ msgstr "``/profile//``: Персональна сторінка к #: ../../blog/docs/spec.rst:48 msgid "" -"``/change_password/``: This route will be used to change users’ credential " -"data." +"``/change_password/``: This route will be used to change users’ " +"credential data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " -"даних користувачів." +"``/change_password/``: Ця сторінка використовуватиметься для зміни " +"облікових даних користувачів." #: ../../blog/docs/spec.rst:50 msgid "``/register/``: This view contains a user registration form." @@ -149,7 +148,8 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../blog/docs/spec.rst:52 msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to " +"homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -171,13 +171,13 @@ msgid "" "``post.slug`` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або " -"оновлення запису та слідувати шаблону:" +"Значення ``post.slug`` має автоматично генеруватися під час створення або" +" оновлення запису та слідувати шаблону:" #: ../../blog/docs/spec.rst:69 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value " -"should be ``True`` by default." +"User preferred topics should be marked with a ``notify`` flag. This value" +" should be ``True`` by default." msgstr "" "Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " "замовчуванням це значення має бути ``True``." @@ -188,16 +188,17 @@ msgstr "Завдання: ORM" #: ../../blog/docs/spec.rst:104 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project’s database." +"Update existing views to represent entities that are actually stored " +"inside the project’s database." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " -"базі даних проекту." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" +" в базі даних проекту." #: ../../blog/docs/spec.rst:107 msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." msgstr "" -"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." +"``/blogs/`` або ``/``: має представляти список існуючих публікацій у " +"блозі." #: ../../blog/docs/spec.rst:108 msgid "``//``: should represent a single existing blogpost." @@ -205,8 +206,8 @@ msgstr "``//``: має представляти одну наявну #: ../../blog/docs/spec.rst:109 msgid "" -"``/profile//``: should contain information about user and a " -"list of posts authored by this user." +"``/profile//``: should contain information about user and a" +" list of posts authored by this user." msgstr "" "``/profile//``: має містити інформацію про користувача та " "список публікацій, автором яких є цей користувач." @@ -217,8 +218,8 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " -"не вдалося отримати." +"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо " +"сутність не вдалося отримати." #: ../../blog/docs/spec.rst:116 msgid "Challenge: Templates" @@ -226,13 +227,13 @@ msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.rst:118 msgid "" -"It’s time to work with data representations. You’re to add HTML template to " -"the blog site project. Keep templates together with appropriate " +"It’s time to work with data representations. You’re to add HTML template " +"to the blog site project. Keep templates together with appropriate " "applications, we don’t need mess in project files." msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" -"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " -"додатками, нам не потрібен безлад у файлах проекту." +"Настав час попрацювати з представленнями даних. Ви повинні додати " +"HTML-шаблон до проекту сайту блогу. Зберігайте шаблони разом із " +"відповідними додатками, нам не потрібен безлад у файлах проекту." #: ../../blog/docs/spec.rst:122 msgid "Application-level templates should be extended from the base one." @@ -240,19 +241,19 @@ msgstr "Шаблони прикладного рівня повинні бути #: ../../blog/docs/spec.rst:123 msgid "" -"Each page should contain a navbar at the top. Navbar will contain permalinks " -"to the home and about pages." +"Each page should contain a navbar at the top. Navbar will contain " +"permalinks to the home and about pages." msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " -"міститиме постійні посилання на домашню сторінку та сторінку про." +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна " +"панель міститиме постійні посилання на домашню сторінку та сторінку про." #: ../../blog/docs/spec.rst:125 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be " +"visible in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " +"бути видимими на панелі навігації." #: ../../blog/docs/spec.rst:127 msgid "" @@ -264,23 +265,25 @@ msgstr "" #: ../../blog/docs/spec.rst:129 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"If authenticated user is admin or stuff they should see a link to admin " +"page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.rst:131 msgid "" -"Each page should contain a list of links to archive views for the last year." +"Each page should contain a list of links to archive views for the last " +"year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." +"Кожна сторінка має містити список посилань на перегляди архіву за " +"останній рік." #: ../../blog/docs/spec.rst:133 msgid "" -"For the ``post_list.html`` each post entity should provide the information:" -msgstr "" -"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" +"For the ``post_list.html`` each post entity should provide the " +"information:" +msgstr "Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" #: ../../blog/docs/spec.rst:136 msgid "title (each word should be capitalized)" @@ -305,41 +308,39 @@ msgstr "кількість коментарів" #: ../../blog/docs/spec.rst:142 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " -"публікацію." +"Кожна сутність публікації в поданні списку має бути посиланням на " +"відповідну публікацію." #: ../../blog/docs/spec.rst:144 msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -msgstr "" -"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +msgstr "Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." #: ../../blog/docs/spec.rst:145 msgid "Detail view should contain a list of post related comments." -msgstr "" -"Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." #: ../../blog/docs/spec.rst:146 msgid "" "Auth views should use ``register.html`` and ``login.html`` with " "corresponding forms." msgstr "" -"Подання авторизації повинні використовувати ``register.html`` і ``login." -"html`` з відповідними формами." +"Подання авторизації повинні використовувати ``register.html`` і " +"``login.html`` з відповідними формами." #: ../../blog/docs/spec.rst:149 msgid "" -"For now, it’s ok to use admin as “test user”. Authentication system will be " -"implemented in the future challenges. ``user`` object is available (by " -"default) in any template context. To test anonymous access you can use " +"For now, it’s ok to use admin as “test user”. Authentication system will " +"be implemented in the future challenges. ``user`` object is available (by" +" default) in any template context. To test anonymous access you can use " "``user.is_authenticated``, which returns ``False`` for non-authenticated " "users." msgstr "" "Наразі можна використовувати адміністратора як «тестового користувача». " "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " -"Щоб перевірити анонімний доступ, ви можете використовувати ``user." -"is_authenticated``, який повертає ``False`` для неавтентифікованих " -"користувачів." +"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону." +" Щоб перевірити анонімний доступ, ви можете використовувати " +"``user.is_authenticated``, який повертає ``False`` для неавтентифікованих" +" користувачів." #: ../../blog/docs/spec.rst:156 msgid "Challenge: Auth forms" @@ -347,8 +348,7 @@ msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.rst:158 msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.rst:160 msgid "``username``" @@ -394,8 +394,8 @@ msgstr "Створіть форму для роботи з моделлю доп #: ../../blog/docs/spec.rst:174 msgid "" -"Create a form to gather a comment from a user. Form should be used within a " -"\"post detail\" view." +"Create a form to gather a comment from a user. Form should be used within" +" a \"post detail\" view." msgstr "" "Створіть форму для збору коментарів від користувача. Форму слід " "використовувати в перегляді \"подробиць публікації\"." @@ -407,8 +407,8 @@ msgstr "Форму слід використовувати для перегля #: ../../blog/docs/spec.rst:178 msgid "It’s ok to use a *pre-defined* user as a post’s author for now." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як автора " -"публікації." +"Наразі можна використовувати *попередньо визначеного* користувача як " +"автора публікації." #: ../../blog/docs/spec.rst:181 msgid "Challenge: Authentication" @@ -416,9 +416,9 @@ msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.rst:183 msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them:" +" desired username and email. Name data (both first and last) is optional." +" After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -430,33 +430,33 @@ msgstr "" #: ../../blog/docs/spec.rst:188 msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case " +"login is successful they should be redirected to their profile (if no " +"``?next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У " +"разі успішного входу вони повинні бути перенаправлені до свого профілю " +"(якщо немає рядка запиту ``?next=url``)." #: ../../blog/docs/spec.rst:191 msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"post creation. Then a post is created, it should be authored by the " -"currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page." +" In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to post creation. Then a post is created, it should be authored " +"by the currently authenticated user." msgstr "" "``/create/``: лише автентифіковані користувачі повинні мати змогу " "відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " -"входу, а після успішної автентифікації повернутися до створення публікації. " -"Потім створюється допис, автором якого має бути поточний автентифікований " -"користувач." +"запит на цей перегляд, він повинен бути спершу перенаправлений до " +"перегляду входу, а після успішної автентифікації повернутися до створення" +" публікації. Потім створюється допис, автором якого має бути поточний " +"автентифікований користувач." #: ../../blog/docs/spec.rst:196 msgid "" -"``//comment``: Currently authenticated user should be referenced " -"as a comment’s author." +"``//comment``: Currently authenticated user should be " +"referenced as a comment’s author." msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." @@ -464,7 +464,8 @@ msgstr "" #: ../../blog/docs/spec.rst:198 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" -"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." +"Дописи можуть бути змінені або видалені лише їхніми авторами (без " +"винятків)." #: ../../blog/docs/spec.rst:202 msgid "Challenge: Class-Based Views" @@ -480,8 +481,7 @@ msgstr "Існуюча функціональність не повинна бу #: ../../blog/docs/spec.rst:207 msgid "It’s ok to use Django built-in views for auth." -msgstr "" -"Для автентифікації можна використовувати вбудовані представлення Django." +msgstr "Для автентифікації можна використовувати вбудовані представлення Django." #: ../../blog/docs/spec.rst:210 msgid "Challenge: Serializers" @@ -509,11 +509,12 @@ msgstr "Завдання: API views" #: ../../blog/docs/spec.rst:221 msgid "" -"All blog-site functionality are to be reflected via REST API. It’s ok to use " -"*pre-defined* user as a post’s author for now." +"All blog-site functionality are to be reflected via REST API. It’s ok to " +"use *pre-defined* user as a post’s author for now." msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора публікації." +"використовувати *попередньо визначеного* користувача як автора " +"публікації." #: ../../blog/docs/spec.rst:225 msgid "Challenge: Authentication and Permissions" @@ -525,13 +526,11 @@ msgstr "Запровадити систему автентифікації REST. #: ../../blog/docs/spec.rst:228 msgid "Only account owner can change their account data." -msgstr "" -"Лише власник облікового запису може змінити дані свого облікового запису." +msgstr "Лише власник облікового запису може змінити дані свого облікового запису." #: ../../blog/docs/spec.rst:229 msgid "Only authenticated users can create posts and comments." -msgstr "" -"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." +msgstr "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." #: ../../blog/docs/spec.rst:230 msgid "Only authors can change their posts." @@ -543,17 +542,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:7 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово " +"підходить для простих речей, але ці інструменти швидко перетворюють " +"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" +" або навіть просто хорошого спеціального редактора коду робить кодування " +"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" @@ -561,23 +560,25 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -590,8 +591,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -623,23 +624,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " +"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " +"дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" +" загальної ціни на вказану кількість товару для покупки. Бажану кількість" +" буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -656,7 +659,8 @@ msgstr "Реалізація моделі товару" msgid "Instances of this class represent a product available for purchase." msgstr "Цей клас представляє товари, які можна придбати в магазині." -#: conv_store.models.Product conv_store.models.ShoppingCart of +#: conv_store.models.Product conv_store.models.ShoppingCart of wtk.models.Enemy +#: wtk.models.Player msgid "Variables" msgstr "Змінні" @@ -685,7 +689,8 @@ msgstr "" "значення атрибута одиниці." #: conv_store.models.Product.get_total -#: conv_store.models.ShoppingCart.add_product of +#: conv_store.models.ShoppingCart.add_product of wtk.models.Enemy.__init__ +#: wtk.models.Player.__init__ msgid "Parameters" msgstr "Параметри" @@ -694,7 +699,9 @@ msgid "a quantity to purchase, defaults to None" msgstr "кількість для покупки, за замовчуванням None" #: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total -#: of +#: of wtk.engine.get_player_name wtk.models.Enemy.select_attack +#: wtk.models.Enemy.select_defence wtk.models.Player.select_attack +#: wtk.models.Player.select_defence msgid "Returns" msgstr "Повертає" @@ -722,11 +729,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." +"responsibility is to store information about the purchases and their " +"amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -738,9 +745,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " @@ -782,8 +789,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." +"This method adds a product instance and corresponding quantity value to " +"the cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -795,7 +802,8 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці " +"продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -811,8 +819,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -821,16 +829,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." +"``Продукт`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -854,27 +862,28 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -885,8 +894,7 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" +msgid "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -895,11 +903,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -915,27 +923,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість *protected*, оскільки до неї не слід звертатися поза " +"екземпляром картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -943,9 +951,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -953,8 +961,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -964,31 +972,29 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -997,9 +1003,10 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " +"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " +": {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1011,16 +1018,17 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1028,17 +1036,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1046,19 +1054,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." +"Implement ``remove_product`` method to completely remove some product " +"from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1074,8 +1082,7 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1092,15 +1099,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " -"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." +"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. " +"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " +"пріоритет зліва направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1120,11 +1127,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" msgstr "" -"Прив’язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" +"Прив’язка або вираз у дужках, відображення списку, відображення словника," +" відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1164,8 +1171,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1270,16 +1277,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1291,18 +1298,20 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:9 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об’єктом." +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" +"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` " +"(по модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" +" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " +"*format* замінюються нулем або більше елементами *значень*. Якщо для " +"*format* потрібен один аргумент, *values* може бути одним некортежним " +"об’єктом." #: ../../src/appx/printf.txt:16 msgid "The conversion flag characters are:" @@ -1338,9 +1347,11 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:25 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " +"обидва)" #: ../../src/appx/printf.txt:28 msgid "``' '``" @@ -1356,11 +1367,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:30 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " +"(перевизначає прапор \"пробіл\")" #: ../../src/appx/printf.txt:34 msgid "The conversion types are:" @@ -1448,8 +1459,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:58 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -1492,8 +1503,7 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:71 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." +msgid "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.md:1 @@ -1506,8 +1516,7 @@ msgstr "7zip" #: ../../src/appx/software_list.md:7 msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.md:9 msgid "" @@ -1527,9 +1536,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.md:13 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -1554,14 +1563,15 @@ msgstr "cygwin" #: ../../src/appx/software_list.md:24 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux distribution](https://en.wikipedia.org/" -"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " -"substantial POSIX API functionality." +"functionality similar to a [Linux " +"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " +"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " +"functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" -"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." +"функціональність, подібну до [дистрибутива " +"Linux](https://en.wikipedia.org/wiki/Linux_distribution) у Windows та DLL" +" (cygwin1.dll), яка забезпечує значний POSIX Функціонал API." #: ../../src/appx/software_list.md:30 msgid "**Cygwin is not**:" @@ -1569,17 +1579,18 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.md:32 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " +"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " +"Windows." #: ../../src/appx/software_list.md:34 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " -"if you want to take advantage of Cygwin functionality." +"like `signals`, `ptys` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." msgstr "" "спосіб чарівним чином зробити рідні програми Windows відомими " "функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " @@ -1600,10 +1611,10 @@ msgid "" "source) distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" -"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." -"com/about/free-and-open-source) розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." +"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-" +"scm.com/about/free-and-open-source) розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від " +"малих до дуже великих." #: ../../src/appx/software_list.md:47 msgid "https://git-scm.com/" @@ -1616,24 +1627,24 @@ msgstr "Docker" #: ../../src/appx/software_list.md:52 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" +" рік." #: ../../src/appx/software_list.md:54 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " +"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " +"розробки за допомогою інтегрованого конвеєра розробників і консолідації " +"компонентів програми. Активно використовувані мільйонами розробників у " +"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " +"простоту, гнучкість і вибір." #: ../../src/appx/software_list.md:60 msgid "https://www.docker.com/" @@ -1645,13 +1656,14 @@ msgstr "PostgreSQL[^cygwin-pkg]" #: ../../src/appx/software_list.md:65 msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." +"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим " +"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" +" вона заслужила міцну репутацію надійності, надійності функцій і " +"продуктивності." #: ../../src/appx/software_list.md:69 msgid "https://www.postgresql.org/" @@ -1663,24 +1675,24 @@ msgstr "psql[^cygwin-pkg]" #: ../../src/appx/software_list.md:74 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" +" запиту. Крім того, введення може бути з файлу або з аргументів " +"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" +" функцій, подібних до оболонки, для полегшення написання сценаріїв і " +"автоматизації різноманітних завдань." #: ../../src/appx/software_list.md:80 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for `postgresql-client` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for `postgresql-client` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет `postgresql-client`." @@ -1695,19 +1707,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.md:88 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа " +"адміністрування та розробки з відкритим кодом для PostgreSQL, " +"найдосконалішої бази даних з відкритим кодом у світі." #: ../../src/appx/software_list.md:92 msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" -"інтерфейсу." +"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." #: ../../src/appx/software_list.md:94 msgid "https://pgadmin.org/" @@ -1719,17 +1731,20 @@ msgstr "SQLite[^cygwin-pkg]" #: ../../src/appx/software_list.md:99 msgid "" -"SQLite is a C-language library that implements a [small](https://sqlite.org/" -"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-reliability]" -"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." -"html), SQL database engine." -msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" -"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " -"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" -"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" -"fullsql.html) , двигун бази даних SQL." +"SQLite is a C-language library that implements a " +"[small](https://sqlite.org/footprint.html), " +"[fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-" +"reliability](https://sqlite.org/hirely.html), [full-" +"featured](https://sqlite.org/fullsql.html), SQL database engine." +msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує " +"[маленьку](https://sqlite.org/footprint.html), " +"[швидку](https://sqlite.org/fasterthanfs.html), [самодостатню]( " +"https://sqlite.org/selfcontained.html), [висока " +"надійність](https://sqlite.org/hirely.html), " +"[повнофункціональний](https://sqlite.org/fullsql.html) , двигун бази " +"даних SQL." #: ../../src/appx/software_list.md:106 msgid "https://sqlite.org/" @@ -1739,371 +1754,478 @@ msgstr "https://sqlite.org/" msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" -#: ../../problem-sets/src/wrw_game/challenge.rst:3 -msgid "WARRIORS, ROBBERS AND WIZARDS GAME" -msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" +#: ../../problem-sets/src/wtk/challenge.rst:3 +msgid "Wizards, Thiefs and Knights" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:5 +#: ../../problem-sets/src/wtk/challenge.rst:5 +#, fuzzy msgid "" -"Warriors, robbers and wizards (WRW) game is a \"Paper, Rock and Scissors\" " -"clone, but in a fantasy setting. It comes with a simple command line " -"interface where the use must type in his or her choice. The enemy is " -"controlled by the script. The player's goal is to gain as many score points, " -"as it possible." +"\"Wizards, Thiefs and Knights\" (WTK) game is a \"Paper, Rock and " +"Scissors\" clone, but in a fantasy setting. It comes with a simple " +"command line interface where the use must type in his or her choice. The " +"enemy is controlled by the script. The player's goal is to gain as many " +"score points, as it possible." msgstr "" "Гра Warriors, robbers and wizards (WRW) є клоном \"Paper, Rock and " "Scissors\", але у фентезійній обстановці. Вона постачається з простим " -"інтерфейсом командного рядка, де для використання потрібно вводити його або " -"її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога більше " -"очок." +"інтерфейсом командного рядка, де для використання потрібно вводити його " +"або її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога " +"більше очок." -#: ../../problem-sets/src/wrw_game/challenge.rst:12 -msgid "Code Organization" +#: ../../problem-sets/src/wtk/challenge.rst:12 +#, fuzzy +msgid "Code organization" msgstr "Організація коду" -#: ../../problem-sets/src/wrw_game/challenge.rst:14 +#: ../../problem-sets/src/wtk/challenge.rst:14 msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" -#: ../../problem-sets/src/wrw_game/challenge.rst:26 -msgid "General Playground Description" +#: ../../problem-sets/src/wtk/challenge.rst:26 +#, fuzzy +msgid "General playground description" msgstr "Загальний опис ігрового майданчика" -#: ../../problem-sets/src/wrw_game/challenge.rst:28 +#: ../../problem-sets/src/wtk/challenge.rst:28 msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." +"The game process is divided into rounds. Each round consists of " +"**attack** and **defence** stages. Rounds are repeated, until player is " +"defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." -#: ../../problem-sets/src/wrw_game/challenge.rst:32 -msgid "Fight Rules" +#: ../../problem-sets/src/wtk/challenge.rst:32 +#, fuzzy +msgid "Fight rules" msgstr "Правила боротьби" -#: ../../problem-sets/src/wrw_game/challenge.rst:34 +#: ../../problem-sets/src/wtk/challenge.rst:34 msgid "It's simple..." msgstr "Це просто..." -#: ../../problem-sets/src/wrw_game/challenge.rst:36 -msgid "**Warrior** beats **Robber**" -msgstr "Воїн перемагає розбійника" +#: ../../problem-sets/src/wtk/challenge.rst:36 +#, fuzzy +msgid "**Knight** beats **Thief**" +msgstr "**Чарівник** перемагає **Воїна**" -#: ../../problem-sets/src/wrw_game/challenge.rst:37 -msgid "**Robber** beats **Wizard**" +#: ../../problem-sets/src/wtk/challenge.rst:37 +#, fuzzy +msgid "**Thief** beats **Wizard**" msgstr "**Розбійник** перемагає **Чарівника**" -#: ../../problem-sets/src/wrw_game/challenge.rst:38 -msgid "**Wizard** beats **Warrior**" +#: ../../problem-sets/src/wtk/challenge.rst:38 +#, fuzzy +msgid "**Wizard** beats **Knight**" msgstr "**Чарівник** перемагає **Воїна**" -#: ../../problem-sets/src/wrw_game/challenge.rst:41 -msgid "Attack Stage" +#: ../../problem-sets/src/wtk/challenge.rst:41 +#, fuzzy +msgid "Attack stage" msgstr "Стадія атаки" -#: ../../problem-sets/src/wrw_game/challenge.rst:43 +#: ../../problem-sets/src/wtk/challenge.rst:43 +#, fuzzy msgid "" -"Player selects the choice to attack from **warrior**, **robber** or " -"**wizard**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" +"Player selects the choice to attack from **knight**, **thief** or " +"**wizard**, enemy selects the choice for defence from the same options by" +" random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог обирає " -"вибір для захисту з тих самих варіантів за допомогою\" \"довільного. Якщо " -"атака успішна:" +"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог " +"обирає вибір для захисту з тих самих варіантів за допомогою\" " +"\"довільного. Якщо атака успішна:" -#: ../../problem-sets/src/wrw_game/challenge.rst:47 +#: ../../problem-sets/src/wtk/challenge.rst:47 msgid "enemy health is decreased" msgstr "здоров'я ворога зменшено" -#: ../../problem-sets/src/wrw_game/challenge.rst:48 +#: ../../problem-sets/src/wtk/challenge.rst:48 msgid "player gains score points" msgstr "гравець отримує очки" -#: ../../problem-sets/src/wrw_game/challenge.rst:50 +#: ../../problem-sets/src/wtk/challenge.rst:50 msgid "In case enemy is defeated:" msgstr "Якщо ворог переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:52 +#: ../../problem-sets/src/wtk/challenge.rst:52 msgid "a new enemy instance is initialized using higher level" msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" -#: ../../problem-sets/src/wrw_game/challenge.rst:53 +#: ../../problem-sets/src/wtk/challenge.rst:53 msgid "player gains some extra score points" msgstr "гравець отримує додаткові очки" -#: ../../problem-sets/src/wrw_game/challenge.rst:54 +#: ../../problem-sets/src/wtk/challenge.rst:54 msgid "next defence stage is skipped, and player attacks again" msgstr "наступний етап захисту пропущено, і гравець атакує знову" -#: ../../problem-sets/src/wrw_game/challenge.rst:57 -msgid "Defence Stage" +#: ../../problem-sets/src/wtk/challenge.rst:57 +#, fuzzy +msgid "Defence stage" msgstr "Стадія захисту" -#: ../../problem-sets/src/wrw_game/challenge.rst:59 +#: ../../problem-sets/src/wtk/challenge.rst:59 +#, fuzzy msgid "" -"Player selects the choice to defend from **warrior**, **robber** or " +"Player selects the choice to defend from **knight**, **thief** or " "**wizard**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника, " -"ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " +"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника," +" ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " "атака успішна:" -#: ../../problem-sets/src/wrw_game/challenge.rst:63 +#: ../../problem-sets/src/wtk/challenge.rst:63 msgid "player health is decreased" msgstr "здоров'я гравця знижено" -#: ../../problem-sets/src/wrw_game/challenge.rst:65 +#: ../../problem-sets/src/wtk/challenge.rst:65 msgid "If player is defeated:" msgstr "Якщо гравець переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:67 +#: ../../problem-sets/src/wtk/challenge.rst:67 msgid "report the message about gained score points to the terminal" msgstr "повідомляти повідомлення про набрані бали на термінал" -#: ../../problem-sets/src/wrw_game/challenge.rst:68 +#: ../../problem-sets/src/wtk/challenge.rst:68 msgid "write down player's name and score points to \"scores.txt\" file" msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" -#: ../../problem-sets/src/wrw_game/challenge.rst:72 +#: ../../problem-sets/src/wtk/challenge.rst:72 msgid "Exceptions" msgstr "Винятки" -#: ../../problem-sets/src/wrw_game/challenge.rst:75 -msgid "Enemy Down" +#: ../../problem-sets/src/wtk/challenge.rst:75 +#, fuzzy +msgid "Enemy down" msgstr "Enemy Down" -#: ../../problem-sets/src/wrw_game/challenge.rst:77 +#: ../../problem-sets/src/wtk/challenge.rst:77 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom " +"exception ``EnemyDown`` should be used to track these cases. Exception " +"should provide the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" +" повинен надавати деталі про екземпляр ворога, особливо його рівень." + +#: of wtk.exceptions.EnemyDown:1 +#, fuzzy +msgid "Raised when an enemy is defeated" +msgstr "Якщо ворог переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:82 -msgid "Game Over" +#: ../../problem-sets/src/wtk/challenge.rst:84 +#, fuzzy +msgid "Game over" msgstr "Game Over" -#: ../../problem-sets/src/wrw_game/challenge.rst:84 +#: ../../problem-sets/src/wtk/challenge.rst:86 msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." +"This is an exceptional scenario when player is defeated. A custom " +"exception ``GameOver`` should be used to track these cases. Exception " +"should provide the details on the player's instance, especially its score" +" points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати " +"бали." + +#: of wtk.exceptions.GameOver:1 +#, fuzzy +msgid "Raised when a player is defeated" +msgstr "Якщо гравець переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:90 +#: ../../problem-sets/src/wtk/challenge.rst:94 msgid "Models" msgstr "Моделі" -#: ../../problem-sets/src/wrw_game/challenge.rst:93 +#: ../../problem-sets/src/wtk/challenge.rst:97 msgid "Enemy" msgstr "Ворог" -#: ../../problem-sets/src/wrw_game/challenge.rst:95 -msgid "" -"Represents the playing enemy-bot. All choices made by this model are random. " -"The model should implement methods:" +#: of wtk.models.Enemy:1 +#, fuzzy +msgid "Enemy model" +msgstr "Enemy Down" + +#: of wtk.models.Enemy:3 +msgid "Represents the playing enemy-bot." msgstr "" -"Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " -"випадкові. Модель має реалізовувати методи:" -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``__init__``" -msgstr "``__init__``" +#: of wtk.models.Enemy:5 +msgid "enemy's level value" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:99 -msgid "" -"Initialize enemy instance. Initializer should receive one argument of " -"integer type - ``level: int``. Health points value should be set equal to " -"level value." +#: of wtk.models.Enemy:7 +msgid "enemy's instance health points" msgstr "" -"Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " -"аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " -"встановлено рівним значенню рівня." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``descrease_health``" -msgstr "``descrease_health``" +#: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 +msgid "Initialize instance" +msgstr "" + +#: of wtk.models.Enemy.__init__:3 +msgid "an enemy's level indicator" +msgstr "" + +#: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 +#, fuzzy +msgid "Decrease health points" +msgstr "``decrease_health``" -#: ../../problem-sets/src/wrw_game/challenge.rst:104 +#: of wtk.models.Enemy.decrease_health:3 +#, fuzzy msgid "" -"Method decreases the health points value by 1 (one). If this value becomes " -"less that 1 (one) the ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``EnemyDown`` exception is raised." msgstr "" "Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стає " "меншим за 1 (один), виникає виняток ``EnemyDown``." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``select_attack``" -msgstr "``select_attack``" +#: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health +msgid "raise" +msgstr "" + +#: of wtk.models.Enemy.decrease_health:6 +#, fuzzy +msgid "EnemyDown" +msgstr "Enemy Down" -#: ../../problem-sets/src/wrw_game/challenge.rst:108 -msgid "Return a random attack choice from valid choices." +#: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 +#, fuzzy +msgid "Return a random fight choice" msgstr "Повернути випадковий вибір атаки з дійсних виборів." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``select_defence``" -msgstr "``select_defence``" +#: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 +msgid "Choices made by an enemy are random." +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:111 -msgid "Return a random defence choice from valid choices." -msgstr "Повернути випадковий вибір захисту з дійсних виборів." +#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 +#: wtk.models.Player.select_attack:7 wtk.models.Player.select_defence:7 +msgid "a fight choice" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:113 +#: ../../problem-sets/src/wtk/challenge.rst:103 msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." -#: ../../problem-sets/src/wrw_game/challenge.rst:116 +#: ../../problem-sets/src/wtk/challenge.rst:106 msgid "Player" msgstr "Гравець" -#: ../../problem-sets/src/wrw_game/challenge.rst:118 -msgid "" -"This model is controlled by the user. It represents a playing user. All " -"choices are controlled by the user. The model should implement methods:" -msgstr "" -"Цією моделлю керує користувач. Вона представляє гравця. Усі вибори контролює " -"користувач. Модель має реалізовувати методи:" +#: of wtk.models.Player:1 +#, fuzzy +msgid "Player model" +msgstr "Гравець" -#: ../../problem-sets/src/wrw_game/challenge.rst:122 -msgid "" -"Initialize player instance. Initializer should receive player's name as an " -"argument - ``name: str``. Health points are to be set from settings. Score " -"points should be initialized with 0 (zero)." +#: of wtk.models.Player:3 +msgid "This model is controlled by the player." msgstr "" -"Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця як " -"аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " -"налаштувань. Очки мають бути ініціалізовані 0 (нулем)." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``decrease_health``" -msgstr "``decrease_health``" - -#: ../../problem-sets/src/wrw_game/challenge.rst:127 -msgid "" -"Method decreases the health points value by 1 (one). If this value becomes " -"less that 1 (one) the ``GameOver`` exception is raised." -msgstr "" -"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " -"менше 1 (один), виникає виняток ``GameOver``." +#: of wtk.models.Player:5 +#, fuzzy +msgid "player's name" +msgstr "Отримання імені гравця" -#: ../../problem-sets/src/wrw_game/challenge.rst:131 -#: ../../problem-sets/src/wrw_game/challenge.rst:134 -msgid "Return a fight choice made by the user. Performs choice validation." -msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." +#: of wtk.models.Player:7 +#, fuzzy +msgid "player's instance health points" +msgstr "гравець отримує очки" -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``fight``" -msgstr "``fight``" +#: of wtk.models.Player:9 +#, fuzzy +msgid "player's instance gained score points" +msgstr "гравець отримує очки" -#: ../../problem-sets/src/wrw_game/challenge.rst:137 +#: of wtk.models.Player.__init__:3 msgid "" -"Static method to perform a fight. Takes two arguments representing attack " -"and defence choices. Performs fight result calculation and return it back." +"This method performs player instance initialization. It set instance " +"name, initial score points value and health." msgstr "" -"Статичний метод для проведення бою. Бере два аргументи, що представляють " -"атаку та вибір захисту. Виконує обчислення результату бою та повертає його " -"назад." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``attack``" -msgstr "``attack``" +#: of wtk.models.Player.__init__:6 +#, fuzzy +msgid "a player's name" +msgstr "Отримання імені гравця" + +#: of wtk.models.Player.attack:1 +#, fuzzy +msgid "Attack an enemy" +msgstr "Стадія атаки" -#: ../../problem-sets/src/wrw_game/challenge.rst:141 +#: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" +"Perform attack on an enemy instance. This method takes an enemy instance " +"as an argument. After that, it takes attack choice from the player model " +"and the defence choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease enemy " +"health, assign score points etc.). Based on fight result should print out" +" a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" - -#: ../../problem-sets/src/wrw_game/challenge.rst:147 -msgid "``\"YOUR ATTACK IS SUCCESSFUL!\"``" +"противника як аргумент. Після цього він приймає вибір атаки з моделі " +"гравця та вибір захисту з моделі противника. Після результату битви " +"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " +"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" +" \"повідомлення:" + +#: of wtk.models.Player.attack:10 +#, fuzzy +msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" msgstr "``\"YOUR ATTACK IS SUCCESSFUL!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:148 -msgid "``\"YOUR ATTACK IS FAILED!\"``" +#: of wtk.models.Player.attack:11 +#, fuzzy +msgid "\"YOUR ATTACK IS FAILED!\"" msgstr "``\"YOUR ATTACK IS FAILED!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:149 -#: ../../problem-sets/src/wrw_game/challenge.rst:160 -msgid "``IT'S A DRAW!\"``" +#: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 +#, fuzzy +msgid "\"IT'S A DRAW!\"" msgstr "``IT'S A DRAW!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``defence``" -msgstr "``defence``" +#: of wtk.models.Player.decrease_health:3 +#, fuzzy +msgid "" +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``GameOver`` exception is raised." +msgstr "" +"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " +"менше 1 (один), виникає виняток ``GameOver``." + +#: of wtk.models.Player.decrease_health:6 +#, fuzzy +msgid "GameOver" +msgstr "Game Over" + +#: of wtk.models.Player.defence:1 +msgid "Defend from an enemy's attack" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:152 +#: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance" +" as an argument. After that, it takes defence choice from the player " +"model and the attack choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease player " +"health). Based on fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" - -#: ../../problem-sets/src/wrw_game/challenge.rst:158 -msgid "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та " +"вибір атаки від моделі ворога. Після результату бою необхідно виконати " +"операцію обчислення (зменшити здоров'я гравця). За результатами бою " +"повинно вийти повідомлення:" + +#: of wtk.models.Player.defence:10 +#, fuzzy +msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" msgstr "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:159 -msgid "``\"YOUR DEFENCE IS FAILED!\"``" +#: of wtk.models.Player.defence:11 +#, fuzzy +msgid "\"YOUR DEFENCE IS FAILED!\"" msgstr "``\"YOUR DEFENCE IS FAILED!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:164 +#: of wtk.models.Player.fight:1 +msgid "Fight result calculation interface" +msgstr "" + +#: of wtk.models.Player.fight:3 +msgid "The method calculates the fight result based on the game rules:" +msgstr "" + +#: of wtk.models.Player.fight:5 +#, fuzzy +msgid "**knight** beats **thief**" +msgstr "**Чарівник** перемагає **Воїна**" + +#: of wtk.models.Player.fight:6 +#, fuzzy +msgid "**thief** beats **wizard**" +msgstr "**Розбійник** перемагає **Чарівника**" + +#: of wtk.models.Player.fight:7 +#, fuzzy +msgid "**wizard** beats **knight**" +msgstr "**Чарівник** перемагає **Воїна**" + +#: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 +#, fuzzy +msgid "Return fight choice from the user's prompt" +msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." + +#: of wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 +msgid "" +"The player is asked to make their decision for the upcoming fight. The " +"chosen value is validated and if it is invalid the question is repeated." +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:115 msgid "Settings" msgstr "Налаштування" -#: ../../problem-sets/src/wrw_game/challenge.rst:166 -msgid "" -"**settings.py** module contains constants values for the game (e.g. " -"``INITIAL_PLAYER_HEALTH = 5``)." +#: ../../problem-sets/src/wtk/challenge.rst:117 +#, fuzzy +msgid "Settings module contains constants values for the game." msgstr "" "Модуль settings.py містить значення констант для гри (наприклад, " "``INITIAL_PLAYER_HEALTH = 5``)." -#: ../../problem-sets/src/wrw_game/challenge.rst:171 +#: ../../problem-sets/src/wtk/challenge.rst:119 +msgid "For example," +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:123 +msgid "Initial health meter value for a player instance" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst +msgid "type" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:125 +#: ../../problem-sets/src/wtk/challenge.rst:131 +#: ../../problem-sets/src/wtk/challenge.rst:137 +#: ../../problem-sets/src/wtk/challenge.rst:143 +msgid "int" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:129 +msgid "Indicates the level to initialize the first enemy instance." +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:135 +msgid "Set the score value to assign when an attack is successful" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:141 +msgid "Set the score value to assign when an enemy is defeated" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:147 msgid "Engine" msgstr "Ігровий рушій" -#: ../../problem-sets/src/wrw_game/challenge.rst:173 +#: ../../problem-sets/src/wtk/challenge.rst:149 msgid "Engine module should provide two functions:" msgstr "Модуль двигуна має забезпечувати дві функції:" -#: ../../problem-sets/src/wrw_game/challenge.rst:175 +#: ../../problem-sets/src/wtk/challenge.rst:151 msgid "``get_player_name``" msgstr "``get_player_name``" -#: ../../problem-sets/src/wrw_game/challenge.rst:176 +#: ../../problem-sets/src/wtk/challenge.rst:152 msgid "``play``" msgstr "``play``" -#: ../../problem-sets/src/wrw_game/challenge.rst:179 +#: ../../problem-sets/src/wtk/challenge.rst:155 msgid "Player name getter" msgstr "Отримання імені гравця" -#: ../../problem-sets/src/wrw_game/challenge.rst:181 +#: ../../problem-sets/src/wtk/challenge.rst:157 msgid "" "Asks the user to type in his or her name and return it back. Leading and " "trailing whitespaces are to be trimmed. Name should contain at least one " @@ -2113,54 +2235,179 @@ msgstr "" "початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " "символ." -#: ../../problem-sets/src/wrw_game/challenge.rst:186 +#: of wtk.engine.get_player_name:1 +msgid "Return a player's name from the user prompt" +msgstr "" + +#: of wtk.engine.get_player_name:3 +msgid "" +"A validation process is performed as well. The player name cannot be an " +"empty string." +msgstr "" + +#: of wtk.engine.get_player_name:6 +#, fuzzy +msgid "a player defined name" +msgstr "Якщо гравець переможений:" + +#: ../../problem-sets/src/wtk/challenge.rst:164 msgid "Play" msgstr "Гра" -#: ../../problem-sets/src/wrw_game/challenge.rst:188 +#: ../../problem-sets/src/wtk/challenge.rst:166 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated " +"- a new one should be initialized with level increased by 1 (one). This " +"case should be reported to the terminal. If a player is defeated - the " +"\"Game Over\" message should be reported to the terminal. " +"``KeyboardInterrupt`` should be handled as well - it's behavior is " +"similar to \"Game Over\" event, but \"game over\" message should be " +"omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." - -#: ../../problem-sets/src/wrw_game/challenge.rst:199 +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " +"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " +"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " +"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " +"також слід обробити - це поведінка подібно до події \"Game Over\", але " +"повідомлення \"Game Over\" має бути пропущено." + +#: of wtk.engine.play:1 +msgid "Run the game" +msgstr "" + +#: of wtk.engine.play:3 +msgid "" +"The function initializes player and enemy instances. After that it runs " +"the game process in an endless loop. Once the player is defeated - it " +"stops the execution." +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:179 msgid "Optional Enhancements" msgstr "Додаткові Вдосконалення" -#: ../../problem-sets/src/wrw_game/challenge.rst:201 +#: ../../problem-sets/src/wtk/challenge.rst:181 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" +" записів." -#: ../../problem-sets/src/wrw_game/challenge.rst:202 +#: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Create game menu, for example: ::" msgstr "Створити меню гри, наприклад: ::" +#: ../../problem-sets/src/wtk/challenge.rst:188 +msgid "Store score table to the database instead of using text file." +msgstr "" + #~ msgid "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" +#~ "[Starter template](https://github.com/edu-python-" +#~ "course/django-template)" #~ msgstr "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" +#~ "[Starter template](https://github.com/edu-python-" +#~ "course/django-template)" #~ msgid "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-" +#~ "course/blog-bootstrap)" #~ msgstr "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-" +#~ "course/blog-bootstrap)" #~ msgid "Code notes" #~ msgstr "Примітки до коду" #~ msgid "At least 50% coverage." #~ msgstr "Хоча б 50% покриття тестами." + +#~ msgid "WARRIORS, ROBBERS AND WIZARDS GAME" +#~ msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" + +#~ msgid "**Warrior** beats **Robber**" +#~ msgstr "Воїн перемагає розбійника" + +#~ msgid "" +#~ "Represents the playing enemy-bot. All" +#~ " choices made by this model are " +#~ "random. The model should implement " +#~ "methods:" +#~ msgstr "" +#~ "Представляє граючого ворожого бота. Усі " +#~ "вибори, зроблені цією моделлю, випадкові. " +#~ "Модель має реалізовувати методи:" + +#~ msgid "``__init__``" +#~ msgstr "``__init__``" + +#~ msgid "" +#~ "Initialize enemy instance. Initializer should" +#~ " receive one argument of integer type" +#~ " - ``level: int``. Health points " +#~ "value should be set equal to level" +#~ " value." +#~ msgstr "" +#~ "Ініціалізувати екземпляр противника. Ініціалізатор" +#~ " повинен отримати один аргумент цілого " +#~ "типу - ``level: int``. Значення очок " +#~ "здоров'я має бути встановлено рівним " +#~ "значенню рівня." + +#~ msgid "``descrease_health``" +#~ msgstr "``descrease_health``" + +#~ msgid "``select_attack``" +#~ msgstr "``select_attack``" + +#~ msgid "``select_defence``" +#~ msgstr "``select_defence``" + +#~ msgid "Return a random defence choice from valid choices." +#~ msgstr "Повернути випадковий вибір захисту з дійсних виборів." + +#~ msgid "" +#~ "This model is controlled by the " +#~ "user. It represents a playing user. " +#~ "All choices are controlled by the " +#~ "user. The model should implement " +#~ "methods:" +#~ msgstr "" +#~ "Цією моделлю керує користувач. Вона " +#~ "представляє гравця. Усі вибори контролює " +#~ "користувач. Модель має реалізовувати методи:" + +#~ msgid "" +#~ "Initialize player instance. Initializer should" +#~ " receive player's name as an argument" +#~ " - ``name: str``. Health points are" +#~ " to be set from settings. Score " +#~ "points should be initialized with 0 " +#~ "(zero)." +#~ msgstr "" +#~ "Ініціалізувати екземпляр гравця. Ініціалізатор " +#~ "має отримати ім'я гравця як аргумент " +#~ "- ``ім'я: str``. Очки здоров'я повинні" +#~ " бути встановлені з налаштувань. Очки " +#~ "мають бути ініціалізовані 0 (нулем)." + +#~ msgid "``fight``" +#~ msgstr "``fight``" + +#~ msgid "" +#~ "Static method to perform a fight. " +#~ "Takes two arguments representing attack " +#~ "and defence choices. Performs fight " +#~ "result calculation and return it back." +#~ msgstr "" +#~ "Статичний метод для проведення бою. Бере" +#~ " два аргументи, що представляють атаку " +#~ "та вибір захисту. Виконує обчислення " +#~ "результату бою та повертає його назад." + +#~ msgid "``attack``" +#~ msgstr "``attack``" + +#~ msgid "``defence``" +#~ msgstr "``defence``" + From cc1cc9eb13017f321b8aa51bf0ca20ccdf26b7cf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 14:18:50 +0300 Subject: [PATCH 074/689] Fixed #50 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0234fb152..c833158a2 100644 --- a/Makefile +++ b/Makefile @@ -19,8 +19,8 @@ SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) # Makefile targets all : clean - @make LANGUAGE=en html pdf - @make LANGUAGE=ua html pdf + @make LANGUAGE=en html + @make LANGUAGE=ua html clean : @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" From 962007b753781c53c743d0b11cb9e390d90cd50c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 16:07:22 +0300 Subject: [PATCH 075/689] Fixed typos in RDBMS translation - fixed #43 Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/rdbms.po | 72 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po index 138a92235..481ee4f54 100644 --- a/src/_locales/ua/LC_MESSAGES/rdbms.po +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -10,7 +10,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" "POT-Creation-Date: 2023-04-08 19:28+0300\n" -"PO-Revision-Date: 2023-04-08 19:29+0300\n" +"PO-Revision-Date: 2023-04-11 16:06+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -289,7 +289,7 @@ msgid "" "``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " "arguments) returns the total number of rows in the group." msgstr "" -"Функція ``count(field)`` повертає кількість разів, коли\" \" ``field`` не є " +"Функція ``count(field)`` повертає кількість разів, коли ``field`` не є " "``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " "кількість рядків у групі." @@ -392,7 +392,7 @@ msgid "" "simple to solve as:" msgstr "" "Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " -"категорій, його \" \"просто вирішити так:" +"категорій, його просто вирішити так:" #: ../../src/rdbms/aggregation.txt:148 msgid "" @@ -401,9 +401,9 @@ msgid "" "provides the ability to group rows based on some field(s) values." msgstr "" "Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " -"кожної категорії, це \" \"стає неможливим вирішити без групування товарів. " -"Пункт ``GROUP BY`` надає можливість групувати рядки на основі певного " -"значення поля(ів)." +"кожної категорії, це стає неможливим вирішити без групування товарів. Пункт " +"``GROUP BY`` надає можливість групувати рядки на основі певного значення " +"поля(ів)." #: ../../src/rdbms/aggregation.txt:152 msgid "General syntax is:" @@ -436,12 +436,12 @@ msgstr "" "вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " "якою порівнюються текстові значення, застосовуються під час оцінювання " "виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " -"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY \" " -"\"не можуть бути сукупними виразами." +"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " +"можуть бути сукупними виразами." #: ../../src/rdbms/aggregation.txt:192 msgid "HAVING clause" -msgstr "" +msgstr "Вираз HAVING" #: ../../src/rdbms/aggregation.txt:194 msgid "" @@ -493,8 +493,8 @@ msgstr "" "забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " "отримувати доступ до реляційних баз даних. Реляційні бази даних " "організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " -"стовпець представляє певний \" \"атрибут даних, тоді як кожен рядок " -"представляє конкретний екземпляр цих даних." +"стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " +"конкретний екземпляр цих даних." #: ../../src/rdbms/index.txt:11 msgid "" @@ -521,10 +521,10 @@ msgid "" msgstr "" "СУБД також надає низку функцій для забезпечення цілісності даних, таких як " "дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " -"резервного копіювання\" \"і відновлення. Крім того, системи РСУБД часто " -"надають інструменти для керування базою даних, такі як інтерфейси " -"користувача для створення та модифікації таблиць і представлень, а також " -"інструменти моніторингу для оптимізації продуктивності бази даних." +"резервного копіюванняі відновлення. Крім того, системи РСУБД часто надають " +"інструменти для керування базою даних, такі як інтерфейси користувача для " +"створення та модифікації таблиць і представлень, а також інструменти " +"моніторингу для оптимізації продуктивності бази даних." #: ../../src/rdbms/normalization.txt:3 msgid "Database Normalization" @@ -616,52 +616,52 @@ msgstr "Початкові дані" #: ../../src/rdbms/normalization.txt:1 msgid "order" -msgstr "" +msgstr "order" #: ../../src/rdbms/normalization.txt:1 msgid "customer" -msgstr "" +msgstr "customer" #: ../../src/rdbms/normalization.txt:1 msgid "quantity" -msgstr "" +msgstr "quantity" #: ../../src/rdbms/normalization.txt:1 msgid "total" -msgstr "" +msgstr "total" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:180 #: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:363 msgid "John Doe" -msgstr "" +msgstr "John Doe" #: ../../src/rdbms/normalization.txt:1 msgid "(Apple, Orange)" -msgstr "" +msgstr "(Apple, Orange)" #: ../../src/rdbms/normalization.txt:1 msgid "(2, 3)" -msgstr "" +msgstr "(2, 3)" #: ../../src/rdbms/normalization.txt:1 msgid "(100, 50)" -msgstr "" +msgstr "(100, 50)" #: ../../src/rdbms/normalization.txt:1 msgid "(200, 150)" -msgstr "" +msgstr "(200, 150)" #: ../../src/rdbms/normalization.txt:1 msgid "Jane Smith" -msgstr "" +msgstr "Jane Smith" #: ../../src/rdbms/normalization.txt:1 msgid "Banana" -msgstr "" +msgstr "Banana" #: ../../src/rdbms/normalization.txt:1 msgid "25" -msgstr "" +msgstr "25" #: ../../src/rdbms/normalization.txt:43 msgid "" @@ -673,23 +673,23 @@ msgstr "" #: ../../src/rdbms/normalization.txt:46 msgid "1NF applied" -msgstr "" +msgstr "Застосовано 1NF" #: ../../src/rdbms/normalization.txt:1 msgid "Apple" -msgstr "" +msgstr "Apple" #: ../../src/rdbms/normalization.txt:1 msgid "Orange" -msgstr "" +msgstr "Orange" #: ../../src/rdbms/normalization.txt:1 msgid "50" -msgstr "" +msgstr "50" #: ../../src/rdbms/normalization.txt:1 msgid "150" -msgstr "" +msgstr "150" #: ../../src/rdbms/normalization.txt:54 msgid "From now each peace of data is represented as atomic value." @@ -708,10 +708,10 @@ msgid "" "to each other via a foreign key." msgstr "" "Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " -"елемента і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " -"спеціальну таблицю для зберігання інформації про самі товари має бути " -"створено. Після цього таблиці ``order`` і ``product`` з'єднуються " -"(пов'язані) одна з одною за допомогою зовнішнього ключа." +"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " +"потрібно створити окрему таблицю для зберігання інформації про самі товари. " +"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " +"одною за допомогою зовнішнього ключа." #: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 msgid "``order`` table" From 5651b2dd0054fad6e97803ac6f700b92453782d8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 14:51:50 +0300 Subject: [PATCH 076/689] Issue #44 - updated "data hiding" section description. Signed-off-by: Serhii Horodilov --- assets/img/wy_ban.jpg | Bin 0 -> 300914 bytes src/_locales/ua/LC_MESSAGES/oop.po | 97 +++++++++++++++++++++-------- src/oop/intro.txt | 69 ++++++++++---------- src/refs.bib | 9 ++- 4 files changed, 115 insertions(+), 60 deletions(-) create mode 100644 assets/img/wy_ban.jpg diff --git a/assets/img/wy_ban.jpg b/assets/img/wy_ban.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb8122c6983d4b2608258abafe54b2e5a5f4712f GIT binary patch literal 300914 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�YrW9bVw3*SGdvmhM@Z}Bz_aC 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 (pinz^)hK?`s|gq+4o{A5>8T) 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≈LNgSn4b!da`!X-lKX|=Yd}ZcW`zrHf6=@zYg1r1 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 qV{}IFSI@adP+ysZlE0is=ULs9\n" "Language-Team: \n" "Language: uk\n" @@ -392,37 +392,58 @@ msgstr "Приховання Даних" #: ../../src/oop/intro.txt:241 msgid "" "Many programming languages has *access modifiers* implemented. The Python " -"has also, but actually no. It's implemented as a convention-level. All " -"class's members starting with underscore are considered to be **protected** " -"members and should not be accessible outside the class instance; on the " -"other hand members starting with two underscores are considered to be " -"**private** members and shouldn't be accessible outside the class instance " -"as well." +"has also." msgstr "" -"Багато мов програмування мають реалізовані модифікатори доступу. Python " -"також має, але насправді ні. Він реалізований на рівні конвенції. Усі члени " -"класу, які починаються з підкреслення, вважаються захищеними членами та не " -"повинні бути доступними за межами екземпляр класу; з іншого боку, члени, які " -"починаються з двох символів підкреслення, вважаються приватними членами та " -"не повинні бути доступними за межами екземпляра класу." +"У багатьох мовах програмування реалізовані *модифікатори доступу*. Python " +"також має." -#: ../../src/oop/intro.txt:275 +#: ../../src/oop/intro.txt:247 msgid "" -"With the implementation above there are **public** attributes, but you can " -"still access data outside the class, but you definitely shouldn't." +"\"Private\" instance variables that cannot be accessed except from inside an " +"object don't exist in Python :cite:`docs-python:private-variables`. It's " +"implemented as a convention-level." msgstr "" -"З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " -"можете отримати доступ до даних за межами класу, але точно не повинні." +"\"Приватні\" змінні екземплярів, до яких можна отримати доступ лише " +"зсередини об’єкта, не існують у Python :cite:`docs-python:private-" +"variables`. Це реалізовано на рівні домовленності." -#: ../../src/oop/intro.txt:290 +#: ../../src/oop/intro.txt:251 +msgid "" +"A name prefixed with an underscore (e.g. ``_spam``) should be treated as a " +"non-public part of the API (whether it is a function, a method or a data " +"member). These should not be used outside the class itself and can be " +"changed without notice." +msgstr "" +"Ім’я з префіксом підкреслення (наприклад, ``_spam``) слід розглядати як " +"закриту частину API (незалежно від того, чи це функція, метод або елемент " +"даних). Вони не повинні використовуватися поза межами самого класу та можуть " +"бути змінені без попередження." + +#: ../../src/oop/intro.txt:256 +msgid "" +"Since there is a valid use case for class-private members (namely to avoid " +"name clashes of names with names defined by subclasses), there is limited " +"support for such a mechanism, called *name mangling*. Any identifier with at " +"least two leading underscore (e.g. ``__spam``) is textually replaced with " +"``_classname__spam``, where ``_classname`` is the current class name with " +"leading underscore stripped." +msgstr "" +"Оскільки існує дійсний варіант використання для приватних членів класу (а " +"саме, щоб уникнути зіткнень імен з іменами, визначеними підкласами), існує " +"обмежена підтримка такого механізму, що називається *викривлення імен*. Будь-" +"який ідентифікатор із принаймні двома символами підкреслення на початку " +"(наприклад, ``__spam``) текстово замінюється на ``_classname__spam``, де " +"``_classname`` є поточною назвою класу з видаленням підкреслення на початку." + +#: ../../src/oop/intro.txt:295 msgid "Few Words about Inheritance" msgstr "Кілька Слів про Наслідування" -#: ../../src/oop/intro.txt:292 +#: ../../src/oop/intro.txt:297 msgid "Just in two words. This topic is discovered in the future articles." msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." -#: ../../src/oop/intro.txt:294 +#: ../../src/oop/intro.txt:299 msgid "" "You can derive your classes from a super class. Derived classes are called " "*sub classes* and the class used to inherit from is called *super class*. " @@ -434,15 +455,15 @@ msgstr "" "*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " "вони не є поширеними ( це особиста думка автора)." -#: ../../src/oop/intro.txt:299 +#: ../../src/oop/intro.txt:304 msgid "Just put a super class in parenthesis two inherit from it:" msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" -#: ../../src/oop/intro.txt:311 +#: ../../src/oop/intro.txt:316 msgid "Few Words about Polymorphism" msgstr "Кілька Слів про Поліморфізм" -#: ../../src/oop/intro.txt:313 +#: ../../src/oop/intro.txt:318 msgid "" "You've already use this. The most simple explanation is **addition " "operator**. For different types of data it would produce different types of " @@ -451,7 +472,7 @@ msgstr "" "Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " "Для різних типів даних він створюватиме різні типи виводу:" -#: ../../src/oop/intro.txt:321 +#: ../../src/oop/intro.txt:326 msgid "" "For example you may have various classes inherited from a base class, that " "provides a common interface, but each derived class may implement the method " @@ -468,3 +489,27 @@ msgstr "Патерни Проектування" #: ../../src/oop/solid.txt:3 msgid "SOLID Principles" msgstr "Принципи SOLID" + +#~ msgid "" +#~ "Many programming languages has *access modifiers* implemented. The Python " +#~ "has also, but actually no. It's implemented as a convention-level. All " +#~ "class's members starting with underscore are considered to be " +#~ "**protected** members and should not be accessible outside the class " +#~ "instance; on the other hand members starting with two underscores are " +#~ "considered to be **private** members and shouldn't be accessible outside " +#~ "the class instance as well." +#~ msgstr "" +#~ "Багато мов програмування мають реалізовані модифікатори доступу. Python " +#~ "також має, але насправді ні. Він реалізований на рівні конвенції. Усі " +#~ "члени класу, які починаються з підкреслення, вважаються захищеними " +#~ "членами та не повинні бути доступними за межами екземпляр класу; з іншого " +#~ "боку, члени, які починаються з двох символів підкреслення, вважаються " +#~ "приватними членами та не повинні бути доступними за межами екземпляра " +#~ "класу." + +#~ msgid "" +#~ "With the implementation above there are **public** attributes, but you " +#~ "can still access data outside the class, but you definitely shouldn't." +#~ msgstr "" +#~ "З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " +#~ "можете отримати доступ до даних за межами класу, але точно не повинні." diff --git a/src/oop/intro.txt b/src/oop/intro.txt index e45e7b8d3..fc2f9569e 100644 --- a/src/oop/intro.txt +++ b/src/oop/intro.txt @@ -239,52 +239,57 @@ Data Hiding =========== Many programming languages has *access modifiers* implemented. The Python has -also, but actually no. It's implemented as a convention-level. All class's -members starting with underscore are considered to be **protected** members -and should not be accessible outside the class instance; on the other hand -members starting with two underscores are considered to be **private** members -and shouldn't be accessible outside the class instance as well. +also. + +.. image:: /../assets/img/wy_ban.jpg + :align: center + +"Private" instance variables that cannot be accessed except from inside an +object don't exist in Python :cite:`docs-python:private-variables`. It's +implemented as a convention-level. + +A name prefixed with an underscore (e.g. ``_spam``) should be treated as +a non-public part of the API (whether it is a function, a method or a data +member). These should not be used outside the class itself and can be changed +without notice. + +Since there is a valid use case for class-private members (namely to avoid name +clashes of names with names defined by subclasses), there is limited support +for such a mechanism, called *name mangling*. Any identifier with at least two +leading underscore (e.g. ``__spam``) is textually replaced with +``_classname__spam``, where ``_classname`` is the current class name with +leading underscore stripped. .. code-block:: python class Employee: - """Employee class implementation""" + """Employee superclass example""" - def __init__(self, salary: float, hours: int = None) -> None: - """Initialize an employee instance""" - - self.__salary = salary - self._hours = hours + first_name: str = "" + last_name: str = "" - def report_hours(self, hours: int) -> None: - """Report working hours""" + _rate: int = 0 + __tax: float = 0.18 - # some validation stuff goes here - self._hours += hours + def _get_amount(self, hours: int) -> int: + return self._rate * hours - def change_salary(salary: float) -> None: - """Change salary size""" + def _get_tax(self, amount: int) -> int: + return int(round(self.__tax * amount, 0)) - self.__salary = salary + def get_balance(self, hours: int) -> int: + amount = self._get_amount(hours) + tax = self._get_tax(amount) - def get_payment(self) -> float: - """Return a payment size""" + return amount - tax - return round(self.__salary * self._hours, 2) + def set_rate(self, rate: int) -> None: + self._rate = rate -With the implementation above there are **public** attributes, but you can -still access data outside the class, but you definitely shouldn't. -.. code-block:: python + class Employee10PercentTax(Employee): + _Employee__tax = 0.10 - employee = Employee(100_500) - # you're able to make changes to protected member, but this code smells - # use dedicated method `report_hours` instead - employee._hours = 100 - # accessing Employee.__salary attribute will raise an exception - # the interpreter will add _className before each private member - # but you know - `change_salary` method is that you need - employee._Employee__salary Few Words about Inheritance =========================== diff --git a/src/refs.bib b/src/refs.bib index 468c010da..943d60b67 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -73,6 +73,11 @@ @misc{docs-python:stdtypes } @misc{docs-python:errors, - title = "{Errors and Exceptions}", + title = "{Python Documentation: Errors and Exceptions}", url = {https://docs.python.org/3.11/tutorial/errors.html}, -} \ No newline at end of file +} + +@misc{docs-python:private-variables, + title = "{Python Documentation: Private Variables}", + url = {https://docs.python.org/3/tutorial/classes.html?highlight=private#private-variables}, +} From 423bd26705149fab54c878271e7f594deba351d5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 12 Apr 2023 14:24:13 +0300 Subject: [PATCH 077/689] Updated translation for "wkt" --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 1169 +++++++++++++-------------- 2 files changed, 550 insertions(+), 621 deletions(-) diff --git a/problem-sets b/problem-sets index 63d3c3e36..8864d69c0 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 63d3c3e362420dd3ed3190dd47fd775accab2fbb +Subproject commit 8864d69c093a8a5e4ccee1b847253342905832a0 diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index d39303e45..a0945f508 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,17 +8,18 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 02:01+0300\n" -"PO-Revision-Date: 2023-04-10 17:59+0300\n" +"POT-Creation-Date: 2023-04-12 14:00+0300\n" +"PO-Revision-Date: 2023-04-12 14:22+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: ua \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" @@ -26,33 +27,32 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"As a developer you were asked to create a simple blog site. The goal is " -"to create a place on the Internet where users can share their stories to " -"public." +"As a developer you were asked to create a simple blog site. The goal is to " +"create a place on the Internet where users can share their stories to public." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - " -"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " -"історіями з громадськістю." +"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " +"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " +"громадськістю." #: ../../blog/docs/spec.rst:16 msgid "" -"This document applies requirements for the entire project step-by-step. " -"You will start from creating the appropriate URL dispatcher and " -"connecting a PostgreSQL database to store the data and will finish with " -"implementing REST API for the blog." +"This document applies requirements for the entire project step-by-step. You " +"will start from creating the appropriate URL dispatcher and connecting a " +"PostgreSQL database to store the data and will finish with implementing REST " +"API for the blog." msgstr "" "Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " -"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до" -" бази даних PostgreSQL для зберігання даних і закінчите впровадженням " -"REST API для блог." +"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " +"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " +"API для блог." #: ../../blog/docs/spec.rst:21 msgid "" -"There are some boiler plates, that may be useful in your future work, but" -" you aren’t forced to use them. It’s on your choice." +"There are some boiler plates, that may be useful in your future work, but " +"you aren’t forced to use them. It’s on your choice." msgstr "" -"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, " -"але ви не змушені їх використовувати. Це на ваш вибір." +"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " +"ви не змушені їх використовувати. Це на ваш вибір." #: ../../blog/docs/spec.rst:24 msgid "`Starter template`_" @@ -68,29 +68,29 @@ msgstr "Завдання: Site views" #: ../../blog/docs/spec.rst:30 msgid "" -"It’s ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It’s ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " -"хочете, щоб повернути у відповіді HTTP." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " +"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " +"щоб повернути у відповіді HTTP." #: ../../blog/docs/spec.rst:34 msgid "" -"``/blogs/``: A site’s homepage. This will contain a list of blogs " -"available via the django site." +"``/blogs/``: A site’s homepage. This will contain a list of blogs available " +"via the django site." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " -"доступних на сайті django." +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " +"на сайті django." #: ../../blog/docs/spec.rst:36 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції " -"сайту django." +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." #: ../../blog/docs/spec.rst:38 msgid "``/``: same as ``/blogs/``" @@ -98,21 +98,20 @@ msgstr "``/``: те ж саме ``/blogs/``" #: ../../blog/docs/spec.rst:39 msgid "" -"``//``: A single blog post detail view. The URL contains " -"dynamic part in it. This will be used to fetch a single blogpost from the" -" database." +"``//``: A single blog post detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single blogpost from the database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. " -"URL-адреса містить динамічну частину. Це буде використано для отримання " -"однієї публікації блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " +"містить динамічну частину. Це буде використано для отримання однієї " +"публікації блогу з бази даних." #: ../../blog/docs/spec.rst:42 msgid "" "``//comment/``: This view will be used to add comments to a " "blogpost." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання" -" коментарів до публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання " +"коментарів до публікації блогу." #: ../../blog/docs/spec.rst:44 msgid "``/create/``: A post creation form." @@ -120,11 +119,13 @@ msgstr "``/create/``: форма створення публікації." #: ../../blog/docs/spec.rst:45 msgid "``//update/``: A view to update an existing post data." -msgstr "``//update/``: перегляд для оновлення наявних даних публікації." +msgstr "" +"``//update/``: перегляд для оновлення наявних даних публікації." #: ../../blog/docs/spec.rst:46 msgid "``//delete/``: A view to confirm post deletion." -msgstr "``//delete/``: перегляд для підтвердження видалення публікації." +msgstr "" +"``//delete/``: перегляд для підтвердження видалення публікації." #: ../../blog/docs/spec.rst:47 msgid "``/profile//``: A site user’s personal page." @@ -132,11 +133,11 @@ msgstr "``/profile//``: Персональна сторінка к #: ../../blog/docs/spec.rst:48 msgid "" -"``/change_password/``: This route will be used to change users’ " -"credential data." +"``/change_password/``: This route will be used to change users’ credential " +"data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни " -"облікових даних користувачів." +"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " +"даних користувачів." #: ../../blog/docs/spec.rst:50 msgid "``/register/``: This view contains a user registration form." @@ -148,8 +149,7 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../blog/docs/spec.rst:52 msgid "" -"``/logout/``: Logout page. This view should redirect user back to " -"homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -171,13 +171,13 @@ msgid "" "``post.slug`` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або" -" оновлення запису та слідувати шаблону:" +"Значення ``post.slug`` має автоматично генеруватися під час створення або " +"оновлення запису та слідувати шаблону:" #: ../../blog/docs/spec.rst:69 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value" -" should be ``True`` by default." +"User preferred topics should be marked with a ``notify`` flag. This value " +"should be ``True`` by default." msgstr "" "Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " "замовчуванням це значення має бути ``True``." @@ -188,17 +188,16 @@ msgstr "Завдання: ORM" #: ../../blog/docs/spec.rst:104 msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project’s database." +"Update existing views to represent entities that are actually stored inside " +"the project’s database." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" -" в базі даних проекту." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " +"базі даних проекту." #: ../../blog/docs/spec.rst:107 msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." msgstr "" -"``/blogs/`` або ``/``: має представляти список існуючих публікацій у " -"блозі." +"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." #: ../../blog/docs/spec.rst:108 msgid "``//``: should represent a single existing blogpost." @@ -206,8 +205,8 @@ msgstr "``//``: має представляти одну наявну #: ../../blog/docs/spec.rst:109 msgid "" -"``/profile//``: should contain information about user and a" -" list of posts authored by this user." +"``/profile//``: should contain information about user and a " +"list of posts authored by this user." msgstr "" "``/profile//``: має містити інформацію про користувача та " "список публікацій, автором яких є цей користувач." @@ -218,8 +217,8 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо " -"сутність не вдалося отримати." +"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " +"не вдалося отримати." #: ../../blog/docs/spec.rst:116 msgid "Challenge: Templates" @@ -227,13 +226,13 @@ msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.rst:118 msgid "" -"It’s time to work with data representations. You’re to add HTML template " -"to the blog site project. Keep templates together with appropriate " +"It’s time to work with data representations. You’re to add HTML template to " +"the blog site project. Keep templates together with appropriate " "applications, we don’t need mess in project files." msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати " -"HTML-шаблон до проекту сайту блогу. Зберігайте шаблони разом із " -"відповідними додатками, нам не потрібен безлад у файлах проекту." +"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" +"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " +"додатками, нам не потрібен безлад у файлах проекту." #: ../../blog/docs/spec.rst:122 msgid "Application-level templates should be extended from the base one." @@ -241,19 +240,19 @@ msgstr "Шаблони прикладного рівня повинні бути #: ../../blog/docs/spec.rst:123 msgid "" -"Each page should contain a navbar at the top. Navbar will contain " -"permalinks to the home and about pages." +"Each page should contain a navbar at the top. Navbar will contain permalinks " +"to the home and about pages." msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна " -"панель міститиме постійні посилання на домашню сторінку та сторінку про." +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " +"міститиме постійні посилання на домашню сторінку та сторінку про." #: ../../blog/docs/spec.rst:125 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be " -"visible in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " -"бути видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." #: ../../blog/docs/spec.rst:127 msgid "" @@ -265,25 +264,23 @@ msgstr "" #: ../../blog/docs/spec.rst:129 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.rst:131 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за " -"останній рік." +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../blog/docs/spec.rst:133 msgid "" -"For the ``post_list.html`` each post entity should provide the " -"information:" -msgstr "Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" +"For the ``post_list.html`` each post entity should provide the information:" +msgstr "" +"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" #: ../../blog/docs/spec.rst:136 msgid "title (each word should be capitalized)" @@ -308,39 +305,41 @@ msgstr "кількість коментарів" #: ../../blog/docs/spec.rst:142 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на " -"відповідну публікацію." +"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " +"публікацію." #: ../../blog/docs/spec.rst:144 msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -msgstr "Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +msgstr "" +"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." #: ../../blog/docs/spec.rst:145 msgid "Detail view should contain a list of post related comments." -msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "" +"Подання деталей має містити список коментарів, пов'язаних із публікацією." #: ../../blog/docs/spec.rst:146 msgid "" "Auth views should use ``register.html`` and ``login.html`` with " "corresponding forms." msgstr "" -"Подання авторизації повинні використовувати ``register.html`` і " -"``login.html`` з відповідними формами." +"Подання авторизації повинні використовувати ``register.html`` і ``login." +"html`` з відповідними формами." #: ../../blog/docs/spec.rst:149 msgid "" -"For now, it’s ok to use admin as “test user”. Authentication system will " -"be implemented in the future challenges. ``user`` object is available (by" -" default) in any template context. To test anonymous access you can use " +"For now, it’s ok to use admin as “test user”. Authentication system will be " +"implemented in the future challenges. ``user`` object is available (by " +"default) in any template context. To test anonymous access you can use " "``user.is_authenticated``, which returns ``False`` for non-authenticated " "users." msgstr "" "Наразі можна використовувати адміністратора як «тестового користувача». " "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону." -" Щоб перевірити анонімний доступ, ви можете використовувати " -"``user.is_authenticated``, який повертає ``False`` для неавтентифікованих" -" користувачів." +"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " +"Щоб перевірити анонімний доступ, ви можете використовувати ``user." +"is_authenticated``, який повертає ``False`` для неавтентифікованих " +"користувачів." #: ../../blog/docs/spec.rst:156 msgid "Challenge: Auth forms" @@ -348,7 +347,8 @@ msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.rst:158 msgid "Create form for new users registration with required fields:" -msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.rst:160 msgid "``username``" @@ -394,8 +394,8 @@ msgstr "Створіть форму для роботи з моделлю доп #: ../../blog/docs/spec.rst:174 msgid "" -"Create a form to gather a comment from a user. Form should be used within" -" a \"post detail\" view." +"Create a form to gather a comment from a user. Form should be used within a " +"\"post detail\" view." msgstr "" "Створіть форму для збору коментарів від користувача. Форму слід " "використовувати в перегляді \"подробиць публікації\"." @@ -407,8 +407,8 @@ msgstr "Форму слід використовувати для перегля #: ../../blog/docs/spec.rst:178 msgid "It’s ok to use a *pre-defined* user as a post’s author for now." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як " -"автора публікації." +"Наразі можна використовувати *попередньо визначеного* користувача як автора " +"публікації." #: ../../blog/docs/spec.rst:181 msgid "Challenge: Authentication" @@ -416,9 +416,9 @@ msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.rst:183 msgid "" -"``/register/``: Users should provide all required information about them:" -" desired username and email. Name data (both first and last) is optional." -" After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -430,33 +430,33 @@ msgstr "" #: ../../blog/docs/spec.rst:188 msgid "" -"``/login/``: Users should provide their credentials to login. In case " -"login is successful they should be redirected to their profile (if no " -"``?next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У " -"разі успішного входу вони повинні бути перенаправлені до свого профілю " -"(якщо немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." #: ../../blog/docs/spec.rst:191 msgid "" -"``/create/``: Only authenticated users should be able to visit this page." -" In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to post creation. Then a post is created, it should be authored " -"by the currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"post creation. Then a post is created, it should be authored by the " +"currently authenticated user." msgstr "" "``/create/``: лише автентифіковані користувачі повинні мати змогу " "відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до " -"перегляду входу, а після успішної автентифікації повернутися до створення" -" публікації. Потім створюється допис, автором якого має бути поточний " -"автентифікований користувач." +"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " +"входу, а після успішної автентифікації повернутися до створення публікації. " +"Потім створюється допис, автором якого має бути поточний автентифікований " +"користувач." #: ../../blog/docs/spec.rst:196 msgid "" -"``//comment``: Currently authenticated user should be " -"referenced as a comment’s author." +"``//comment``: Currently authenticated user should be referenced " +"as a comment’s author." msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." @@ -464,8 +464,7 @@ msgstr "" #: ../../blog/docs/spec.rst:198 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" -"Дописи можуть бути змінені або видалені лише їхніми авторами (без " -"винятків)." +"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." #: ../../blog/docs/spec.rst:202 msgid "Challenge: Class-Based Views" @@ -481,7 +480,8 @@ msgstr "Існуюча функціональність не повинна бу #: ../../blog/docs/spec.rst:207 msgid "It’s ok to use Django built-in views for auth." -msgstr "Для автентифікації можна використовувати вбудовані представлення Django." +msgstr "" +"Для автентифікації можна використовувати вбудовані представлення Django." #: ../../blog/docs/spec.rst:210 msgid "Challenge: Serializers" @@ -509,12 +509,11 @@ msgstr "Завдання: API views" #: ../../blog/docs/spec.rst:221 msgid "" -"All blog-site functionality are to be reflected via REST API. It’s ok to " -"use *pre-defined* user as a post’s author for now." +"All blog-site functionality are to be reflected via REST API. It’s ok to use " +"*pre-defined* user as a post’s author for now." msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора " -"публікації." +"використовувати *попередньо визначеного* користувача як автора публікації." #: ../../blog/docs/spec.rst:225 msgid "Challenge: Authentication and Permissions" @@ -526,11 +525,13 @@ msgstr "Запровадити систему автентифікації REST. #: ../../blog/docs/spec.rst:228 msgid "Only account owner can change their account data." -msgstr "Лише власник облікового запису може змінити дані свого облікового запису." +msgstr "" +"Лише власник облікового запису може змінити дані свого облікового запису." #: ../../blog/docs/spec.rst:229 msgid "Only authenticated users can create posts and comments." -msgstr "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." +msgstr "" +"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." #: ../../blog/docs/spec.rst:230 msgid "Only authors can change their posts." @@ -542,17 +543,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:7 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово " -"підходить для простих речей, але ці інструменти швидко перетворюють " -"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" -" або навіть просто хорошого спеціального редактора коду робить кодування " -"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" @@ -560,25 +561,23 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -591,8 +590,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -624,25 +623,23 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " -"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " -"дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" -" загальної ціни на вказану кількість товару для покупки. Бажану кількість" -" буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -729,11 +726,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -745,9 +742,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " @@ -789,8 +786,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to " -"the cart." +"This method adds a product instance and corresponding quantity value to the " +"cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -802,8 +799,7 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці " -"продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -819,8 +815,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -829,16 +825,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -862,28 +858,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -894,7 +889,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -903,11 +899,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -923,27 +919,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість *protected*, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -951,9 +947,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -961,8 +957,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -972,29 +968,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1003,10 +1001,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " -"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " -": {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1018,17 +1015,16 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1036,17 +1032,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1054,19 +1050,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1082,7 +1078,8 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1099,15 +1096,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " -"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. " -"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " -"пріоритет зліва направо)." +"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1127,11 +1124,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" -"Прив’язка або вираз у дужках, відображення списку, відображення словника," -" відображення набору" +"Прив’язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1171,8 +1168,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1277,16 +1274,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1298,20 +1295,18 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:9 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." -msgstr "" -"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` " -"(по модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" -" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " -"*format* замінюються нулем або більше елементами *значень*. Якщо для " -"*format* потрібен один аргумент, *values* може бути одним некортежним " -"об’єктом." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об’єктом." #: ../../src/appx/printf.txt:16 msgid "The conversion flag characters are:" @@ -1347,11 +1342,9 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:25 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " -"обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:28 msgid "``' '``" @@ -1367,11 +1360,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:30 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " -"(перевизначає прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:34 msgid "The conversion types are:" @@ -1459,8 +1452,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:58 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -1503,7 +1496,8 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:71 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.md:1 @@ -1516,7 +1510,8 @@ msgstr "7zip" #: ../../src/appx/software_list.md:7 msgid "**7-Zip** is **free software** with **open source**." -msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.md:9 msgid "" @@ -1536,9 +1531,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.md:13 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -1563,15 +1558,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.md:24 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux " -"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " -"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " -"functionality." +"functionality similar to a [Linux distribution](https://en.wikipedia.org/" +"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " +"substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до [дистрибутива " -"Linux](https://en.wikipedia.org/wiki/Linux_distribution) у Windows та DLL" -" (cygwin1.dll), яка забезпечує значний POSIX Функціонал API." +"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" +"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.md:30 msgid "**Cygwin is not**:" @@ -1579,18 +1573,17 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.md:32 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " -"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " -"Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.md:34 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from " -"source* if you want to take advantage of Cygwin functionality." +"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " +"if you want to take advantage of Cygwin functionality." msgstr "" "спосіб чарівним чином зробити рідні програми Windows відомими " "функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " @@ -1611,10 +1604,10 @@ msgid "" "source) distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" -"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-" -"scm.com/about/free-and-open-source) розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від " -"малих до дуже великих." +"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." +"com/about/free-and-open-source) розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.md:47 msgid "https://git-scm.com/" @@ -1627,24 +1620,24 @@ msgstr "Docker" #: ../../src/appx/software_list.md:52 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" -" рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.md:54 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " -"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " -"розробки за допомогою інтегрованого конвеєра розробників і консолідації " -"компонентів програми. Активно використовувані мільйонами розробників у " -"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " -"простоту, гнучкість і вибір." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.md:60 msgid "https://www.docker.com/" @@ -1656,14 +1649,13 @@ msgstr "PostgreSQL[^cygwin-pkg]" #: ../../src/appx/software_list.md:65 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим " -"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" -" вона заслужила міцну репутацію надійності, надійності функцій і " -"продуктивності." +"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.md:69 msgid "https://www.postgresql.org/" @@ -1675,24 +1667,24 @@ msgstr "psql[^cygwin-pkg]" #: ../../src/appx/software_list.md:74 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" -" запиту. Крім того, введення може бути з файлу або з аргументів " -"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" -" функцій, подібних до оболонки, для полегшення написання сценаріїв і " -"автоматизації різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.md:80 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for `postgresql-client` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for `postgresql-client` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет `postgresql-client`." @@ -1707,19 +1699,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.md:88 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа " -"адміністрування та розробки з відкритим кодом для PostgreSQL, " -"найдосконалішої бази даних з відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.md:92 msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." +"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" +"інтерфейсу." #: ../../src/appx/software_list.md:94 msgid "https://pgadmin.org/" @@ -1731,20 +1723,17 @@ msgstr "SQLite[^cygwin-pkg]" #: ../../src/appx/software_list.md:99 msgid "" -"SQLite is a C-language library that implements a " -"[small](https://sqlite.org/footprint.html), " -"[fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-" -"reliability](https://sqlite.org/hirely.html), [full-" -"featured](https://sqlite.org/fullsql.html), SQL database engine." -msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує " -"[маленьку](https://sqlite.org/footprint.html), " -"[швидку](https://sqlite.org/fasterthanfs.html), [самодостатню]( " -"https://sqlite.org/selfcontained.html), [висока " -"надійність](https://sqlite.org/hirely.html), " -"[повнофункціональний](https://sqlite.org/fullsql.html) , двигун бази " -"даних SQL." +"SQLite is a C-language library that implements a [small](https://sqlite.org/" +"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-reliability]" +"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." +"html), SQL database engine." +msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" +"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " +"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" +"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" +"fullsql.html) , двигун бази даних SQL." #: ../../src/appx/software_list.md:106 msgid "https://sqlite.org/" @@ -1755,49 +1744,44 @@ msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" #: ../../problem-sets/src/wtk/challenge.rst:3 -msgid "Wizards, Thiefs and Knights" -msgstr "" +msgid "Wizards, Thieves and Knights" +msgstr "Чарівники, Злодії та Рицарі" #: ../../problem-sets/src/wtk/challenge.rst:5 -#, fuzzy msgid "" -"\"Wizards, Thiefs and Knights\" (WTK) game is a \"Paper, Rock and " -"Scissors\" clone, but in a fantasy setting. It comes with a simple " -"command line interface where the use must type in his or her choice. The " -"enemy is controlled by the script. The player's goal is to gain as many " -"score points, as it possible." +"\"Wizards, Thieves and Knights\" (WTK) game is a \"Paper, Rock and " +"Scissors\" clone but in a fantasy setting. It comes with a simple command " +"line interface where the use must type in his or her choice. The enemy is " +"controlled by the script. The player's goal is to gain as many score points, " +"as it possible." msgstr "" -"Гра Warriors, robbers and wizards (WRW) є клоном \"Paper, Rock and " -"Scissors\", але у фентезійній обстановці. Вона постачається з простим " -"інтерфейсом командного рядка, де для використання потрібно вводити його " -"або її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога " -"більше очок." +"Гра \"Чарівники, Злодії та Рицарі» (WTK) — це клон \"Камень, ножиці, " +"бумага\", але у фентезійному сеттингу. Вона має простий інтерфейс командного " +"рядка, де користувач повинен ввести свій вибір. Ворогом керує скрипт. Мета " +"гравця - набрати якомога більше очок." #: ../../problem-sets/src/wtk/challenge.rst:12 -#, fuzzy msgid "Code organization" msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:14 msgid "Use separate modules to maintain your code base. For example:" -msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:26 -#, fuzzy msgid "General playground description" -msgstr "Загальний опис ігрового майданчика" +msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:28 msgid "" -"The game process is divided into rounds. Each round consists of " -"**attack** and **defence** stages. Rounds are repeated, until player is " -"defeated." +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." #: ../../problem-sets/src/wtk/challenge.rst:32 -#, fuzzy msgid "Fight rules" msgstr "Правила боротьби" @@ -1806,35 +1790,29 @@ msgid "It's simple..." msgstr "Це просто..." #: ../../problem-sets/src/wtk/challenge.rst:36 -#, fuzzy -msgid "**Knight** beats **Thief**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**Wizard** beats **Knight**" +msgstr "**Чарівник** перемагає **Рицаря**" #: ../../problem-sets/src/wtk/challenge.rst:37 -#, fuzzy msgid "**Thief** beats **Wizard**" -msgstr "**Розбійник** перемагає **Чарівника**" +msgstr "**Злодій** перемагає **Чарівника**" #: ../../problem-sets/src/wtk/challenge.rst:38 -#, fuzzy -msgid "**Wizard** beats **Knight**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**Knight** beats **Thief**" +msgstr "**Рицар** перемагає **Злодія**" #: ../../problem-sets/src/wtk/challenge.rst:41 -#, fuzzy msgid "Attack stage" msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:43 -#, fuzzy msgid "" -"Player selects the choice to attack from **knight**, **thief** or " -"**wizard**, enemy selects the choice for defence from the same options by" -" random. If the attack is successful:" +"Player selects the choice to attack from **wizard**, **thief** or " +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог " -"обирає вибір для захисту з тих самих варіантів за допомогою\" " -"\"довільного. Якщо атака успішна:" +"Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " +"обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:47 msgid "enemy health is decreased" @@ -1861,20 +1839,17 @@ msgid "next defence stage is skipped, and player attacks again" msgstr "наступний етап захисту пропущено, і гравець атакує знову" #: ../../problem-sets/src/wtk/challenge.rst:57 -#, fuzzy msgid "Defence stage" msgstr "Стадія захисту" #: ../../problem-sets/src/wtk/challenge.rst:59 -#, fuzzy msgid "" -"Player selects the choice to defend from **knight**, **thief** or " -"**wizard**, enemy selects the choice to attack from the same options by " +"Player selects the choice to defend from **wizard**, **thief** or " +"**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника," -" ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " -"атака успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:63 msgid "player health is decreased" @@ -1897,46 +1872,40 @@ msgid "Exceptions" msgstr "Винятки" #: ../../problem-sets/src/wtk/challenge.rst:75 -#, fuzzy msgid "Enemy down" -msgstr "Enemy Down" +msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:77 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom " -"exception ``EnemyDown`` should be used to track these cases. Exception " -"should provide the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" -" повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 -#, fuzzy msgid "Raised when an enemy is defeated" -msgstr "Якщо ворог переможений:" +msgstr "Виникає, коли ворог переможений" #: ../../problem-sets/src/wtk/challenge.rst:84 -#, fuzzy msgid "Game over" -msgstr "Game Over" +msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:86 msgid "" -"This is an exceptional scenario when player is defeated. A custom " -"exception ``GameOver`` should be used to track these cases. Exception " -"should provide the details on the player's instance, especially its score" -" points." +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати " -"бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." #: of wtk.exceptions.GameOver:1 -#, fuzzy msgid "Raised when a player is defeated" -msgstr "Якщо гравець переможений:" +msgstr "Виникає, коли гравця переможено" #: ../../problem-sets/src/wtk/challenge.rst:94 msgid "Models" @@ -1947,263 +1916,244 @@ msgid "Enemy" msgstr "Ворог" #: of wtk.models.Enemy:1 -#, fuzzy msgid "Enemy model" -msgstr "Enemy Down" +msgstr "Модель супротивника" #: of wtk.models.Enemy:3 msgid "Represents the playing enemy-bot." -msgstr "" +msgstr "Представляє граючого ворога-бота." #: of wtk.models.Enemy:5 msgid "enemy's level value" -msgstr "" +msgstr "значення рівня противника" #: of wtk.models.Enemy:7 msgid "enemy's instance health points" -msgstr "" +msgstr "очки здоров'я ворога" #: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 msgid "Initialize instance" -msgstr "" +msgstr "Ініціалізувати екземпляр" #: of wtk.models.Enemy.__init__:3 msgid "an enemy's level indicator" -msgstr "" +msgstr "індикатор рівня противника" #: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 -#, fuzzy msgid "Decrease health points" -msgstr "``decrease_health``" +msgstr "Зменшує очоки здоров'я" #: of wtk.models.Enemy.decrease_health:3 -#, fuzzy msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стає " -"меншим за 1 (один), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" -msgstr "" +msgstr "raise" #: of wtk.models.Enemy.decrease_health:6 -#, fuzzy msgid "EnemyDown" -msgstr "Enemy Down" +msgstr "EnemyDown" #: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 -#, fuzzy msgid "Return a random fight choice" -msgstr "Повернути випадковий вибір атаки з дійсних виборів." +msgstr "Повертає випадковий варіант для бою" #: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 msgid "Choices made by an enemy are random." -msgstr "" +msgstr "Вибори, зроблені супротивником, випадкові." #: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 #: wtk.models.Player.select_attack:7 wtk.models.Player.select_defence:7 msgid "a fight choice" -msgstr "" +msgstr "варіант для бою" #: ../../problem-sets/src/wtk/challenge.rst:103 msgid "You are free to implement other methods you like, if needed." -msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:106 msgid "Player" msgstr "Гравець" #: of wtk.models.Player:1 -#, fuzzy msgid "Player model" -msgstr "Гравець" +msgstr "Модель гравця" #: of wtk.models.Player:3 msgid "This model is controlled by the player." -msgstr "" +msgstr "Ця модель керується гравцем." #: of wtk.models.Player:5 -#, fuzzy msgid "player's name" -msgstr "Отримання імені гравця" +msgstr "ім'я гравця" #: of wtk.models.Player:7 -#, fuzzy msgid "player's instance health points" -msgstr "гравець отримує очки" +msgstr "очки здоров'я гравця" #: of wtk.models.Player:9 -#, fuzzy msgid "player's instance gained score points" -msgstr "гравець отримує очки" +msgstr "очки, зароблені гравцем" #: of wtk.models.Player.__init__:3 msgid "" -"This method performs player instance initialization. It set instance " -"name, initial score points value and health." +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." msgstr "" +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров’я." #: of wtk.models.Player.__init__:6 -#, fuzzy msgid "a player's name" -msgstr "Отримання імені гравця" +msgstr "ім'я гравця" #: of wtk.models.Player.attack:1 -#, fuzzy msgid "Attack an enemy" -msgstr "Стадія атаки" +msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance " -"as an argument. After that, it takes attack choice from the player model " -"and the defence choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease enemy " -"health, assign score points etc.). Based on fight result should print out" -" a message:" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі " -"гравця та вибір захисту з моделі противника. Після результату битви " -"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " -"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" -" \"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" #: of wtk.models.Player.attack:10 -#, fuzzy msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" -msgstr "``\"YOUR ATTACK IS SUCCESSFUL!\"``" +msgstr "\"YOUR ATTACK IS SUCCESSFUL!\"" #: of wtk.models.Player.attack:11 -#, fuzzy msgid "\"YOUR ATTACK IS FAILED!\"" -msgstr "``\"YOUR ATTACK IS FAILED!\"``" +msgstr "\"YOUR ATTACK IS FAILED!\"" #: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 -#, fuzzy msgid "\"IT'S A DRAW!\"" -msgstr "``IT'S A DRAW!\"``" +msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 -#, fuzzy msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." msgstr "" -"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " -"менше 1 (один), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." #: of wtk.models.Player.decrease_health:6 -#, fuzzy msgid "GameOver" -msgstr "Game Over" +msgstr "GameOver" #: of wtk.models.Player.defence:1 msgid "Defend from an enemy's attack" -msgstr "" +msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance" -" as an argument. After that, it takes defence choice from the player " -"model and the attack choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease player " -"health). Based on fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та " -"вибір атаки від моделі ворога. Після результату бою необхідно виконати " -"операцію обчислення (зменшити здоров'я гравця). За результатами бою " -"повинно вийти повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" #: of wtk.models.Player.defence:10 -#, fuzzy msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" -msgstr "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" +msgstr "\"YOUR DEFENCE IS SUCCESSFUL!\"" #: of wtk.models.Player.defence:11 -#, fuzzy msgid "\"YOUR DEFENCE IS FAILED!\"" -msgstr "``\"YOUR DEFENCE IS FAILED!\"``" +msgstr "\"YOUR DEFENCE IS FAILED!\"" #: of wtk.models.Player.fight:1 msgid "Fight result calculation interface" -msgstr "" +msgstr "Інтерфейс для вирахування результатів двобою" #: of wtk.models.Player.fight:3 msgid "The method calculates the fight result based on the game rules:" -msgstr "" +msgstr "Метод розраховує результат бою за правилами гри:" #: of wtk.models.Player.fight:5 -#, fuzzy -msgid "**knight** beats **thief**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**wizard** beats **knight**" +msgstr "**чарівник** перемагає **рицаря**" #: of wtk.models.Player.fight:6 -#, fuzzy msgid "**thief** beats **wizard**" -msgstr "**Розбійник** перемагає **Чарівника**" +msgstr "**злодій** перемагає **чарівника**" #: of wtk.models.Player.fight:7 -#, fuzzy -msgid "**wizard** beats **knight**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**knight** beats **thief**" +msgstr "**рицар** перемагає **злодія**" #: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 -#, fuzzy msgid "Return fight choice from the user's prompt" -msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." +msgstr "Повертає варіант для поєдинку з вводу користувача" #: of wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 msgid "" "The player is asked to make their decision for the upcoming fight. The " "chosen value is validated and if it is invalid the question is repeated." msgstr "" +"Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " +"перевіряється, і якщо воно недійсне, запитання повторюється." #: ../../problem-sets/src/wtk/challenge.rst:115 msgid "Settings" msgstr "Налаштування" #: ../../problem-sets/src/wtk/challenge.rst:117 -#, fuzzy msgid "Settings module contains constants values for the game." -msgstr "" -"Модуль settings.py містить значення констант для гри (наприклад, " -"``INITIAL_PLAYER_HEALTH = 5``)." +msgstr "Модуль налаштувань містить значення констант для гри." #: ../../problem-sets/src/wtk/challenge.rst:119 msgid "For example," -msgstr "" +msgstr "Наприклад," #: ../../problem-sets/src/wtk/challenge.rst:123 msgid "Initial health meter value for a player instance" -msgstr "" +msgstr "Початкове значення індикатора стану здоров'я для екземпляру гравця" #: ../../problem-sets/src/wtk/challenge.rst msgid "type" -msgstr "" +msgstr "type" #: ../../problem-sets/src/wtk/challenge.rst:125 #: ../../problem-sets/src/wtk/challenge.rst:131 #: ../../problem-sets/src/wtk/challenge.rst:137 #: ../../problem-sets/src/wtk/challenge.rst:143 msgid "int" -msgstr "" +msgstr "int" #: ../../problem-sets/src/wtk/challenge.rst:129 msgid "Indicates the level to initialize the first enemy instance." -msgstr "" +msgstr "Вказує рівень для ініціалізації першого екземпляра ворога." #: ../../problem-sets/src/wtk/challenge.rst:135 msgid "Set the score value to assign when an attack is successful" msgstr "" +"Встановлює кількість балів, яку буде присвоєно, якщо атака буде успішною" #: ../../problem-sets/src/wtk/challenge.rst:141 msgid "Set the score value to assign when an enemy is defeated" msgstr "" +"Встановлює кількість балів, яку буде присвоєно, якщо ворог зазнає поразки" #: ../../problem-sets/src/wtk/challenge.rst:147 msgid "Engine" @@ -2237,18 +2187,18 @@ msgstr "" #: of wtk.engine.get_player_name:1 msgid "Return a player's name from the user prompt" -msgstr "" +msgstr "Повертає ім'я гравця з вводу користувача" #: of wtk.engine.get_player_name:3 msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." #: of wtk.engine.get_player_name:6 -#, fuzzy msgid "a player defined name" -msgstr "Якщо гравець переможений:" +msgstr "ім'я визначене гравцем" #: ../../problem-sets/src/wtk/challenge.rst:164 msgid "Play" @@ -2257,32 +2207,34 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:166 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated " -"- a new one should be initialized with level increased by 1 (one). This " -"case should be reported to the terminal. If a player is defeated - the " -"\"Game Over\" message should be reported to the terminal. " -"``KeyboardInterrupt`` should be handled as well - it's behavior is " -"similar to \"Game Over\" event, but \"game over\" message should be " -"omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " -"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " -"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " -"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " -"також слід обробити - це поведінка подібно до події \"Game Over\", але " -"повідомлення \"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" -msgstr "" +msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs " -"the game process in an endless loop. Once the player is defeated - it " -"stops the execution." +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." msgstr "" +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:179 msgid "Optional Enhancements" @@ -2291,8 +2243,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:181 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" -" записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Create game menu, for example: ::" @@ -2301,20 +2253,17 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:188 msgid "Store score table to the database instead of using text file." msgstr "" +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." #~ msgid "" -#~ "[Starter template](https://github.com/edu-python-" -#~ "course/django-template)" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" #~ msgstr "" -#~ "[Starter template](https://github.com/edu-python-" -#~ "course/django-template)" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" #~ msgid "" -#~ "[Bootstrap templates](https://github.com/edu-python-" -#~ "course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" #~ msgstr "" -#~ "[Bootstrap templates](https://github.com/edu-python-" -#~ "course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" #~ msgid "Code notes" #~ msgstr "Примітки до коду" @@ -2329,30 +2278,23 @@ msgstr "" #~ msgstr "Воїн перемагає розбійника" #~ msgid "" -#~ "Represents the playing enemy-bot. All" -#~ " choices made by this model are " -#~ "random. The model should implement " -#~ "methods:" +#~ "Represents the playing enemy-bot. All choices made by this model are " +#~ "random. The model should implement methods:" #~ msgstr "" -#~ "Представляє граючого ворожого бота. Усі " -#~ "вибори, зроблені цією моделлю, випадкові. " -#~ "Модель має реалізовувати методи:" +#~ "Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " +#~ "випадкові. Модель має реалізовувати методи:" #~ msgid "``__init__``" #~ msgstr "``__init__``" #~ msgid "" -#~ "Initialize enemy instance. Initializer should" -#~ " receive one argument of integer type" -#~ " - ``level: int``. Health points " -#~ "value should be set equal to level" -#~ " value." +#~ "Initialize enemy instance. Initializer should receive one argument of " +#~ "integer type - ``level: int``. Health points value should be set equal to " +#~ "level value." #~ msgstr "" -#~ "Ініціалізувати екземпляр противника. Ініціалізатор" -#~ " повинен отримати один аргумент цілого " -#~ "типу - ``level: int``. Значення очок " -#~ "здоров'я має бути встановлено рівним " -#~ "значенню рівня." +#~ "Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " +#~ "аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " +#~ "встановлено рівним значенню рівня." #~ msgid "``descrease_health``" #~ msgstr "``descrease_health``" @@ -2367,47 +2309,34 @@ msgstr "" #~ msgstr "Повернути випадковий вибір захисту з дійсних виборів." #~ msgid "" -#~ "This model is controlled by the " -#~ "user. It represents a playing user. " -#~ "All choices are controlled by the " -#~ "user. The model should implement " -#~ "methods:" +#~ "This model is controlled by the user. It represents a playing user. All " +#~ "choices are controlled by the user. The model should implement methods:" #~ msgstr "" -#~ "Цією моделлю керує користувач. Вона " -#~ "представляє гравця. Усі вибори контролює " -#~ "користувач. Модель має реалізовувати методи:" +#~ "Цією моделлю керує користувач. Вона представляє гравця. Усі вибори " +#~ "контролює користувач. Модель має реалізовувати методи:" #~ msgid "" -#~ "Initialize player instance. Initializer should" -#~ " receive player's name as an argument" -#~ " - ``name: str``. Health points are" -#~ " to be set from settings. Score " -#~ "points should be initialized with 0 " -#~ "(zero)." +#~ "Initialize player instance. Initializer should receive player's name as " +#~ "an argument - ``name: str``. Health points are to be set from settings. " +#~ "Score points should be initialized with 0 (zero)." #~ msgstr "" -#~ "Ініціалізувати екземпляр гравця. Ініціалізатор " -#~ "має отримати ім'я гравця як аргумент " -#~ "- ``ім'я: str``. Очки здоров'я повинні" -#~ " бути встановлені з налаштувань. Очки " -#~ "мають бути ініціалізовані 0 (нулем)." +#~ "Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця " +#~ "як аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " +#~ "налаштувань. Очки мають бути ініціалізовані 0 (нулем)." #~ msgid "``fight``" #~ msgstr "``fight``" #~ msgid "" -#~ "Static method to perform a fight. " -#~ "Takes two arguments representing attack " -#~ "and defence choices. Performs fight " -#~ "result calculation and return it back." +#~ "Static method to perform a fight. Takes two arguments representing attack " +#~ "and defence choices. Performs fight result calculation and return it back." #~ msgstr "" -#~ "Статичний метод для проведення бою. Бере" -#~ " два аргументи, що представляють атаку " -#~ "та вибір захисту. Виконує обчислення " -#~ "результату бою та повертає його назад." +#~ "Статичний метод для проведення бою. Бере два аргументи, що представляють " +#~ "атаку та вибір захисту. Виконує обчислення результату бою та повертає " +#~ "його назад." #~ msgid "``attack``" #~ msgstr "``attack``" #~ msgid "``defence``" #~ msgstr "``defence``" - From 58ba99bc22add27059031d50e1cd08d1de118137 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 14:36:32 +0300 Subject: [PATCH 078/689] Added "decorators" document - draft Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 194 ++++++++++++++++++++++++++++++++++++++ src/basics/index.txt | 1 + src/refs.bib | 21 +++++ 3 files changed, 216 insertions(+) create mode 100644 src/basics/decorators.txt diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt new file mode 100644 index 000000000..50983ed6a --- /dev/null +++ b/src/basics/decorators.txt @@ -0,0 +1,194 @@ +.. _first-class objects: + https://dbader.org/blog/python-first-class-functions + +******************************************************************************* + Decorators +******************************************************************************* + +Decorators provide a simple syntax for calling higher-order functions +:cite:`realpython:decorators`. + +.. important:: + + There is some kind of misunderstanding in definitions. + + **Decorator** is a function returning another function, usually applied + as a function transformation using the ``@wrapper`` syntax + :cite:`docs-python:term-decorator`. + + However, that's no quit enough to describe it. The more complete + definition is: + + **Decorator** is a structural design pattern that lets you attach new + behaviors to objects by placing these objects inside special wrapper + objects that contain the behaviors :cite:`refactoring.guru:decorator`. + +Before you understand decorators, you must first understand how functions +work. + +First-class objects +=================== + +In Python functions are `first-class objects`_. Everything in Python is an +object. Functions are objects too. + +Inner functions +--------------- + +Functions can be nested. This means it is possible to define functions +inside other functions. + +.. code-block:: python + :caption: Nested functions example + + def heap_sort(origin: List[int]) -> List[int]: + """Return a sorted collection using the heap sort algorithm""" + + def heapify(_ds: List[int], _size: int, _idx: int) -> List[int]: + ... + + ... + for idx in range(size, -1, -1): + heapify(result, size, idx) + ... + +The order in which inner functions are defined no matters. The function +definition does not execute the function body; this gets executed only when +the function is called. Furthermore, the inner functions are not defined until +the parent function is called. They are locally scoped to their parent. Trying +to call ``heapify`` function outside of ``heap_sort`` will cause ``NameError`` +exception. + +Functions are objects +--------------------- + +This means functions can be passed around and used as arguments, just like any +other object (e.g. *int*, *str* etc.). + +.. code-block:: python + + from typing import Callable + + + def say_hello(name: str) -> str: + return f"Hello, {name}!" + + + def be_awesome(name: str) -> str: + return f"Yo, {name}!" + + + def greet_serhii(greeting_func: Callable) -> str: + return greeting_func("Serhii") + + + if __name__ == "__main__": + print(f"{greet_serhii(say_hello) = }") + print(f"{greet_serhii(be_awesome) = }") + +Returning functions +------------------- + +Since function can be passed as an argument, it may be returned from another +function. + +.. code-block:: python + + from typing import Callable + + + def parent(idx: int) -> Callable: + def first_child(): + return "this is the first child" + + def second_child(): + return "this is the second child" + + return second if not num % 2 else first + + + first = parent(1) + second = parent(2) + +.. note:: + + ``parent`` returns functions themselves, there are no parentheses. + +After running the code snippet above, ``first`` refers the ``first_child`` +function from the inner ``parent`` scope. From now it can be used to call +the target function it refers. + +.. code-block:: + + >>> first() + "this is the first child" + >>> second() + "this is the second child" + +Simple decorators +================= + +Now you're ready to move on and see the magical beast that is the Python +decorators. Let's start with a simple example: + +.. code-block:: python + + def decorator(func: Callable) -> Callable: + def wrapper(): + print(f"before {func.__name__} call") + func() + print(f"after {func.__name__} call") + + return wrapper # no wrapper call, return reference to wrapper function + + def say_hello(): + print("Hello!") + + say_hello_decorated = decorator(say_hello) + +Running function: + +.. code-block:: + + >>> say_hello() + Hello! + >>> say_hello_decorated() + before say_hello call + Hello! + after say_hello call + +The common way to use decorators is to replace the original function with +a decorated one: + +.. code-block:: + + >>> say_hello = decorator(say_hello) + >>> say_hello() + before say_hello call + Hello! + after say_hello call + +``say_hello`` function is the reference to the ``decorator..wrapper``, +which itself is bound to the original ``say_hello`` function. There is a +syntactic sugar to do this, called *pie-syntax*. The following example does +exact the same things as the first decorator example: + +.. code-block:: python + + def decorator(func: Callable) -> Callable: + def wrapper(): + print(f"before {func.__name__} call") + func() + print(f"after {func.__name__} call") + + return wrapper # no wrapper call, return reference to wrapper function + + + @decorator + def say_hello(): + print("Hello!") + +.. important:: + + There is no way to *undecorate* object in Python. Once something is bound + to the decorator's wrapper - it is decorated forever. diff --git a/src/basics/index.txt b/src/basics/index.txt index 468d9cc36..4d1ade7d3 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -12,5 +12,6 @@ functions modules exceptions + decorators pep8 testing diff --git a/src/refs.bib b/src/refs.bib index 943d60b67..fb499b183 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -81,3 +81,24 @@ @misc{docs-python:private-variables title = "{Python Documentation: Private Variables}", url = {https://docs.python.org/3/tutorial/classes.html?highlight=private#private-variables}, } + +@misc{realpython:decorators, + title = "{Primer on Python Decorators}", + author = "{Geir Arne Hjelle }", + url = {https://realpython.com/primer-on-python-decorators/}, +} + +@misc{docs-python:term-decorator, + title = "{Python Documentation}", + url = {https://docs.python.org/glossary.html#term-decorator}, +} + +@misc{docs-python:function-definition, + title = "{Python Documentation}", + url = {https://docs.python.org/3/reference/compound_stmts.html#function}, +} + +@misc{refactoring.guru:decorator, + title = "{Refactoring Guru: Decorator}", + url = {https://refactoring.guru/design-patterns/decorator}, +} \ No newline at end of file From dd5a1742ee60b2f132ffe6696cd1ac9ce67fc7d5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 15:24:16 +0300 Subject: [PATCH 079/689] Added multi-decorator description and examples Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 50983ed6a..617480f28 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -192,3 +192,62 @@ exact the same things as the first decorator example: There is no way to *undecorate* object in Python. Once something is bound to the decorator's wrapper - it is decorated forever. + +A decorated function still remains a **function**. So, it can be decorated +once more time again, and again, and again... + +.. code-block:: python + + from typing import Callable + + + def bread(func: Callable) -> Callable: + def wrapper(): + print("<--bread-->") + func() + print("<--bread-->") + + return wrapper + + + def vegetables(func: Callable) -> Callable: + def wrapper(): + print("~~~salad~~~") + print("***tomato***") + func() + + return wrapper + + + def cheese(func: Callable) -> Callable: + def wrapper(): + func() + print("---cheese---") + + return wrapper + + + @bread + @vegetables + @cheese + def sandwich(): + print("_sliced_meat_") + +.. code-block:: + + >>> sandwich() + <--bread--> + ~~~salad~~~ + ***tomato*** + _sliced_meat_ + ---cheese--- + <--bread--> + +.. note:: + + "Wrapper" is the alternative nickname for the Decorator pattern that + clearly expresses the main idea of the pattern. A wrapper is an object that + can be linked with some target object. The wrapper contains the same set of + methods as the target and delegates to it all requests it receives. + However, the wrapper may alter the result by doing something either before + or after it passes the request to the target. From 45a5668689f0840299c0605f6844f17955843a2b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 17:03:05 +0300 Subject: [PATCH 080/689] Added inner-wrapper/decorator with arguments Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 93 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 617480f28..601f7a0f8 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -251,3 +251,96 @@ once more time again, and again, and again... methods as the target and delegates to it all requests it receives. However, the wrapper may alter the result by doing something either before or after it passes the request to the target. + +Passing arguments to the wrapper +================================ + +Until now the examples use *simple* decorators. But what if the decorated +function gets some arguments? This will cause ``TypeError`` exception that tell +that "arguments are missed". This can be fixed with just passing arguments to +the ``wrapper`` inner function. + +.. code-block:: python + + import logging + from typing import Callable + + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger(__name__) + + + def log(func: Callable) -> Callable: + def wrapper(x, y): + logger.info("%s called", func.__name__) + return func(x, y) + + return wrapper + + + @log + def sum_numbers(x, y): + return x + y + +If case you're trying to make a generic decorator, you may pass ``*args`` and +``**kwargs`` instead of exact arguments: + +.. code-block:: python + + from typing import Callable + + + def generic_decorator(func: Callable) -> Callable: + def wrapper(*args, **kwargs): + ... # do something before + result = func(*args, **kwargs) + ... # do something after + + return result + + return wrapper + +Passing arguments to decorator +============================== + +At last it's time to know how to pass arguments to the decorator. +Here is a simple implementation of ``defer`` decorator which deferred +the function execution for some time: + +.. code-block:: python + + import time + from typing import Callable + + + def defer(seconds: int = 3) -> Callable: + def decorator(func: Callable) -> Callable: + def wrapper(*args, **kwargs): + started_at = time.perf_counter() + time.sleep(seconds) + result = func(*args, **kwargs) + completed_in = round(time.perf_counter() - started_at, 2) + print("Completed in %.2f" % completed_in) + + return result + + return wrapper + + return decorator + + + @defer() + def function_a(): + return 42 + + + @defer(10) + def function_b(): + return 24 + + +.. code-block:: + + function_a() + Completed in 3.00 + function_b() + Completed in 10.00 From 0adbb5b51592d57e5678457e94665d647b55dcd4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 17:51:06 +0300 Subject: [PATCH 081/689] Added class decorators: classmethod, staticmethod, property Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 100 ++++++++++++++++++++++++++++++++++++-- src/refs.bib | 8 ++- 2 files changed, 103 insertions(+), 5 deletions(-) diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 601f7a0f8..3468a80b5 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -312,7 +312,7 @@ the function execution for some time: from typing import Callable - def defer(seconds: int = 3) -> Callable: + def slow_down(seconds: int = 3) -> Callable: def decorator(func: Callable) -> Callable: def wrapper(*args, **kwargs): started_at = time.perf_counter() @@ -328,19 +328,111 @@ the function execution for some time: return decorator - @defer() + @slow_down() def function_a(): return 42 - @defer(10) + @slow_down(10) def function_b(): return 24 - .. code-block:: function_a() Completed in 3.00 function_b() Completed in 10.00 + +Class decorators +================ + +There are some pre-defined decorators exists for usage together with classes. +They are: + +- ``classmethod`` +- ``staticmethod`` +- ``property`` + +If you develop an intuitive understanding for their differences you’ll be able to write object-oriented Python that communicates its intent more clearly and will be easier to maintain in the long run :cite:`realpython:methods-demystified`. + +Class methods +------------- + +Instead of accepting a self parameter, class methods take a ``cls`` parameter +that points to the class—and not the object instance—when the method is called. + +Because the class method only has access to this ``cls`` argument, it can't +modify object instance state. That would require access to ``self``. +However, class methods can still modify class state that applies across all +instances of the class. + +The common usage for ``classmethod`` is provide alternative initializers. + +Static methods +-------------- + +This type of method takes neither a ``self`` nor a ``cls`` parameter (but of +course it’s free to accept an arbitrary number of other parameters). + +Therefore a static method can neither modify object state nor class state. +Static methods are restricted in what data they can access - and they're +primarily a way to namespace your methods. + +It's tricky to explain ``staticmethod`` usage. Almost always you can create +a dedicated function instead of static method. But sometimes you need to +bind some logic independent from class itself or its instances to a class - +it common to encapsulate it with ``staticmethod``. + +Properties +---------- + +It's a way to bind a method name to access it as an attribute. Properties are +"read-only" by default. This means a value cannot be assigned to ``property +member``. + +Some examples +------------- + +.. code-block:: python + + import datetime + + + class Person: + """Person class implementation""" + + def __init__(self, first_name: str, last_name: str) -> None: + """Initialize instance""" + + self.first_name = first_name + self.last_name = last_name + + @classmethod + def from_fullname(cls, name: str) -> "Person": + """Return a person instance""" + + first_name, last_name = name.rsplit(" ", 1) + + return cls(first_name, last_name) + + @staticmethod + def format_date(date: datetime.date) -> str: + """Return a formatted date as string""" + + return date.strftime("%d-%m-%Y") + + @property + def fullname(self) -> str: + """Return person's fullname""" + + return " ".join([self.first_name, self.last_name]) + +.. code-block:: + + >>> sh = Person("Serhii", "Horodilov") + >>> vp = Person.from_fullname("Vladyslav Ponomaryov") + >>> sh.fullname + 'Serhii Horodilov' + >>> vp.fullname + 'Vladyslav Ponomaryov' diff --git a/src/refs.bib b/src/refs.bib index fb499b183..2887ad806 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -101,4 +101,10 @@ @misc{docs-python:function-definition @misc{refactoring.guru:decorator, title = "{Refactoring Guru: Decorator}", url = {https://refactoring.guru/design-patterns/decorator}, -} \ No newline at end of file +} + +@misc{realpython:methods-demystified, + title = "{Python's Instance, Class, and Static Methods Demystified}", + author = "{Dan Bader}", + url = {https://realpython.com/instance-class-and-static-methods-demystified/}, +} From 950dbfd0c342615469b21ce7cb18e43ab51cbaa1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 18:21:37 +0300 Subject: [PATCH 082/689] Added "decorators" translation Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/basics.po | 473 ++++++++++++++++++++++---- src/basics/decorators.txt | 14 +- 2 files changed, 425 insertions(+), 62 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index dde1e54aa..2391f5718 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 23:14+0300\n" -"PO-Revision-Date: 2023-04-10 23:14+0300\n" +"POT-Creation-Date: 2023-04-13 18:20+0300\n" +"PO-Revision-Date: 2023-04-13 18:21+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -25,6 +25,365 @@ msgstr "" msgid "Control Flow" msgstr "Керування виконанням" +#: ../../src/basics/decorators.txt:6 +msgid "Decorators" +msgstr "Декоратори" + +#: ../../src/basics/decorators.txt:8 +msgid "" +"Decorators provide a simple syntax for calling higher-order functions :cite:" +"`realpython:decorators`." +msgstr "" +"Декоратори забезпечують простий синтаксис для виклику функцій вищого " +"порядку :cite:`realpython:decorators`." + +#: ../../src/basics/decorators.txt:13 +msgid "There is some kind of misunderstanding in definitions." +msgstr "Є деяке непорозуміння у визначеннях." + +#: ../../src/basics/decorators.txt:15 +msgid "" +"**Decorator** is a function returning another function, usually applied as a " +"function transformation using the ``@wrapper`` syntax :cite:`docs-python:" +"term-decorator`." +msgstr "" +"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " +"застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" +"cite:`docs-python:term-decorator`." + +#: ../../src/basics/decorators.txt:19 +msgid "" +"However, that's no quit enough to describe it. The more complete definition " +"is:" +msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" + +#: ../../src/basics/decorators.txt:22 +msgid "" +"**Decorator** is a structural design pattern that lets you attach new " +"behaviors to objects by placing these objects inside special wrapper objects " +"that contain the behaviors :cite:`refactoring.guru:decorator`." +msgstr "" +"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " +"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " +"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." + +#: ../../src/basics/decorators.txt:26 +msgid "" +"Before you understand decorators, you must first understand how functions " +"work." +msgstr "" +"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " +"функції." + +#: ../../src/basics/decorators.txt:30 +msgid "First-class objects" +msgstr "Об'єкти першого класу" + +#: ../../src/basics/decorators.txt:32 +msgid "" +"In Python functions are `first-class objects`_. Everything in Python is an " +"object. Functions are objects too." +msgstr "" +"У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " +"Функції також є об'єктами." + +#: ../../src/basics/decorators.txt:36 +msgid "Inner functions" +msgstr "Внутрішні функції" + +#: ../../src/basics/decorators.txt:38 +msgid "" +"Functions can be nested. This means it is possible to define functions " +"inside other functions." +msgstr "" +"Функції можуть бути вкладеними. Це означає, що можна визначати функції " +"всередині інших функцій." + +#: ../../src/basics/decorators.txt:41 +msgid "Nested functions example" +msgstr "Приклад вкладених функцій" + +#: ../../src/basics/decorators.txt:55 +msgid "" +"The order in which inner functions are defined no matters. The function " +"definition does not execute the function body; this gets executed only when " +"the function is called. Furthermore, the inner functions are not defined " +"until the parent function is called. They are locally scoped to their " +"parent. Trying to call ``heapify`` function outside of ``heap_sort`` will " +"cause ``NameError`` exception." +msgstr "" +"Порядок визначення внутрішніх функцій не має значення. Визначення функції не " +"виконує тіло функції; це виконується лише під час виклику функції. Крім " +"того, внутрішні функції не визначені, доки не буде викликана батьківська " +"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " +"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " +"``NameError``." + +#: ../../src/basics/decorators.txt:63 +msgid "Functions are objects" +msgstr "Функції є об'єктами" + +#: ../../src/basics/decorators.txt:65 +msgid "" +"This means functions can be passed around and used as arguments, just like " +"any other object (e.g. *int*, *str* etc.)." +msgstr "" +"Це означає, що функції можна передавати й використовувати як аргументи, як і " +"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." + +#: ../../src/basics/decorators.txt:90 +msgid "Returning functions" +msgstr "Повернення функцій" + +#: ../../src/basics/decorators.txt:92 +msgid "" +"Since function can be passed as an argument, it may be returned from another " +"function." +msgstr "" +"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " +"функції." + +#: ../../src/basics/decorators.txt:115 +msgid "``parent`` returns functions themselves, there are no parentheses." +msgstr "``parent`` повертає самі функції, тут нема дужок." + +#: ../../src/basics/decorators.txt:117 +msgid "" +"After running the code snippet above, ``first`` refers the ``first_child`` " +"function from the inner ``parent`` scope. From now it can be used to call " +"the target function it refers." +msgstr "" +"Після виконання наведеного вище фрагмента коду ``first`` посилається на " +"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " +"можна використовувати для виклику цільової функції, на яку він посилається." + +#: ../../src/basics/decorators.txt:129 +msgid "Simple decorators" +msgstr "Прості декоратори" + +#: ../../src/basics/decorators.txt:131 +msgid "" +"Now you're ready to move on and see the magical beast that is the Python " +"decorators. Let's start with a simple example:" +msgstr "" +"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " +"Python. Почнемо з простого прикладу:" + +#: ../../src/basics/decorators.txt:149 +msgid "Running function:" +msgstr "Запуск функцій:" + +#: ../../src/basics/decorators.txt:160 +msgid "" +"The common way to use decorators is to replace the original function with a " +"decorated one:" +msgstr "" +"Поширеним способом використання декораторів є заміна оригінальної функції на " +"декоровану:" + +#: ../../src/basics/decorators.txt:171 +msgid "" +"``say_hello`` function is the reference to the ``decorator.." +"wrapper``, which itself is bound to the original ``say_hello`` function. " +"There is a syntactic sugar to do this, called *pie-syntax*. The following " +"example does exact the same things as the first decorator example:" +msgstr "" +"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " +"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " +"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " +"ті самі речі, що й перший приклад декоратора:" + +#: ../../src/basics/decorators.txt:193 +msgid "" +"There is no way to *undecorate* object in Python. Once something is bound to " +"the decorator's wrapper - it is decorated forever." +msgstr "" +"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " +"обгортки декоратора - воно прикрашене назавжди." + +#: ../../src/basics/decorators.txt:196 +msgid "" +"A decorated function still remains a **function**. So, it can be decorated " +"once more time again, and again, and again..." +msgstr "" +"Декорована функція все ще залишається **функцією**. Отже, його можна " +"прикрашати ще раз, і ще, і ще..." + +#: ../../src/basics/decorators.txt:248 +msgid "" +"\"Wrapper\" is the alternative nickname for the Decorator pattern that " +"clearly expresses the main idea of the pattern. A wrapper is an object that " +"can be linked with some target object. The wrapper contains the same set of " +"methods as the target and delegates to it all requests it receives. However, " +"the wrapper may alter the result by doing something either before or after " +"it passes the request to the target." +msgstr "" +"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " +"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " +"деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " +"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " +"результат, зробивши щось до або після того, як вона передає запит цільовому " +"об'єкту." + +#: ../../src/basics/decorators.txt:256 +msgid "Passing arguments to the wrapper" +msgstr "Передача аргументів до wrapper" + +#: ../../src/basics/decorators.txt:258 +msgid "" +"Until now the examples use *simple* decorators. But what if the decorated " +"function gets some arguments? This will cause ``TypeError`` exception that " +"tell that \"arguments are missed\". This can be fixed with just passing " +"arguments to the ``wrapper`` inner function." +msgstr "" +"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " +"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " +"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " +"аргументи внутрішній функції ``wrapper``." + +#: ../../src/basics/decorators.txt:284 +msgid "" +"If case you're trying to make a generic decorator, you may pass ``*args`` " +"and ``**kwargs`` instead of exact arguments:" +msgstr "" +"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " +"``*args`` і ``**kwargs`` замість точних аргументів:" + +#: ../../src/basics/decorators.txt:303 +msgid "Passing arguments to decorator" +msgstr "Передача аргументів декоратору" + +#: ../../src/basics/decorators.txt:305 +msgid "" +"At last it's time to know how to pass arguments to the decorator. Here is a " +"simple implementation of ``defer`` decorator which deferred the function " +"execution for some time:" +msgstr "" +"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " +"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " +"час:" + +#: ../../src/basics/decorators.txt:348 +msgid "Class decorators" +msgstr "Декоратори класів" + +#: ../../src/basics/decorators.txt:350 +msgid "" +"There are some pre-defined decorators exists for usage together with " +"classes. They are:" +msgstr "" +"Існують деякі попередньо визначені декоратори для використання разом із " +"класами. Це:" + +#: ../../src/basics/decorators.txt:353 +msgid "``classmethod``" +msgstr "``classmethod``" + +#: ../../src/basics/decorators.txt:354 +msgid "``staticmethod``" +msgstr "``staticmethod``" + +#: ../../src/basics/decorators.txt:355 +msgid "``property``" +msgstr "``property``" + +#: ../../src/basics/decorators.txt:357 +msgid "" +"If you develop an intuitive understanding for their differences you'll be " +"able to write object-oriented Python that communicates its intent more " +"clearly and will be easier to maintain in the long run :cite:`realpython:" +"methods-demystified`." +msgstr "" +"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " +"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " +"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" +"methods-demystified`." + +#: ../../src/basics/decorators.txt:363 +msgid "Class methods" +msgstr "Методи класу" + +#: ../../src/basics/decorators.txt:365 +msgid "" +"Instead of accepting a ``self`` parameter, class methods take a ``cls`` " +"parameter that points to the class — and not the object instance — when the " +"method is called." +msgstr "" +"Замість того, щоб приймати параметр self, під час виклику методу методи " +"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " +"класу." + +#: ../../src/basics/decorators.txt:369 +msgid "" +"Because the class method only has access to this ``cls`` argument, it can't " +"modify object instance state. That would require access to ``self``. " +"However, class methods can still modify class state that applies across all " +"instances of the class." +msgstr "" +"Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " +"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " +"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " +"екземплярів класу." + +#: ../../src/basics/decorators.txt:374 +msgid "" +"The common usage for ``classmethod`` is provide alternative initializers." +msgstr "" +"Загальним використанням ``методи класу`` є надання альтернативних " +"ініціалізаторів." + +#: ../../src/basics/decorators.txt:377 +msgid "Static methods" +msgstr "Статичні методи" + +#: ../../src/basics/decorators.txt:379 +msgid "" +"This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " +"course it's free to accept an arbitrary number of other parameters)." +msgstr "" +"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " +"він може приймати будь-яку кількість інших параметрів)." + +#: ../../src/basics/decorators.txt:382 +msgid "" +"Therefore a static method can neither modify object state nor class state. " +"Static methods are restricted in what data they can access - and they're " +"primarily a way to namespace your methods." +msgstr "" +"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " +"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " +"і вони, перш за все, є способом простору імен ваших методів." + +#: ../../src/basics/decorators.txt:386 +msgid "" +"It's tricky to explain ``staticmethod`` usage. Almost always you can create " +"a dedicated function instead of static method. But sometimes you need to " +"bind some logic independent from class itself or its instances to a class - " +"it common to encapsulate it with ``staticmethod``." +msgstr "" +"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " +"створити спеціальну функцію замість статичного методу. Але іноді вам " +"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " +"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." + +#: ../../src/basics/decorators.txt:392 +msgid "Properties" +msgstr "Властивості" + +#: ../../src/basics/decorators.txt:394 +msgid "" +"It's a way to bind a method name to access it as an attribute. Properties " +"are **read-only** by default. This means a value cannot be assigned to " +"``property member``." +msgstr "" +"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " +"замовчуванням властивості доступні **лише для читання**. Це означає, що " +"значення не можна призначити ``члену властивості``." + +#: ../../src/basics/decorators.txt:399 +msgid "Some examples" +msgstr "Деякі приклади" + #: ../../src/basics/exceptions.txt:6 msgid "Errors and Exceptions" msgstr "Помилки та винятки" @@ -294,7 +653,7 @@ msgid "" "exceptions raised while running the ``try``." msgstr "" "Оператор ``try`` також може використовувати ``else`` (який є " -"необов’язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " +"необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " "якщо під час виконання ``try`` не було викликано винятків." #: ../../src/basics/exceptions.txt:268 @@ -447,12 +806,12 @@ msgid "Supported operations" msgstr "Операції підтримки" #: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:199 msgid "Operation" msgstr "Операції" #: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:199 msgid "Result" msgstr "Результат" @@ -605,8 +964,8 @@ msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: ../../src/basics/stdtypes.txt:104 ../../src/basics/stdtypes.txt:177 -#: ../../src/basics/stdtypes.txt:287 ../../src/basics/stdtypes.txt:296 -#: ../../src/basics/stdtypes.txt:325 +#: ../../src/basics/stdtypes.txt:285 ../../src/basics/stdtypes.txt:294 +#: ../../src/basics/stdtypes.txt:323 msgid "Value comparisons" msgstr "Порівняння цінностей" @@ -809,7 +1168,7 @@ msgstr "" "індекс першого входження *x* у *s* на або після індексу *i* та перед " "індексом *j*" -#: ../../src/basics/stdtypes.txt:181 +#: ../../src/basics/stdtypes.txt:179 msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -821,7 +1180,7 @@ msgstr "" "типами призводить до нерівності, а впорядковане порівняння цих типів " "викликає ``TypeError``." -#: ../../src/basics/stdtypes.txt:186 +#: ../../src/basics/stdtypes.txt:184 msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " @@ -833,7 +1192,7 @@ msgstr "" "рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " "таким чином:" -#: ../../src/basics/stdtypes.txt:191 +#: ../../src/basics/stdtypes.txt:189 msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." @@ -842,7 +1201,7 @@ msgstr "" "мати однакову довжину, і кожна пара відповідних елементів повинна " "порівнюватися." -#: ../../src/basics/stdtypes.txt:193 +#: ../../src/basics/stdtypes.txt:191 msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " @@ -852,98 +1211,98 @@ msgstr "" "їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " "впорядковується коротша колекція." -#: ../../src/basics/stdtypes.txt:198 +#: ../../src/basics/stdtypes.txt:196 msgid "Mutable sequence types" msgstr "Змінні типи послідовностей" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:201 msgid "``s[i] = x``" msgstr "``s[i] = x``" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:201 msgid "item *i* of *s* is replaced by *x*" msgstr "елемент *i* з *s* замінюється на *x*" -#: ../../src/basics/stdtypes.txt:205 +#: ../../src/basics/stdtypes.txt:203 msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" -#: ../../src/basics/stdtypes.txt:205 +#: ../../src/basics/stdtypes.txt:203 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:206 msgid "``del s[i:j]``" msgstr "``del s[i:j]``" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:206 msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:208 msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:208 msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:210 msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:210 msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" -#: ../../src/basics/stdtypes.txt:214 +#: ../../src/basics/stdtypes.txt:212 msgid "``s.append(x)``" msgstr "``s.append(x)``" -#: ../../src/basics/stdtypes.txt:214 +#: ../../src/basics/stdtypes.txt:212 msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:215 msgid "``s.clear()``" msgstr "``s.clear()``" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:215 msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:217 msgid "``s.copy()``" msgstr "``s.copy()``" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:217 msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:221 +#: ../../src/basics/stdtypes.txt:219 msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" -#: ../../src/basics/stdtypes.txt:221 +#: ../../src/basics/stdtypes.txt:219 msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" -#: ../../src/basics/stdtypes.txt:224 +#: ../../src/basics/stdtypes.txt:222 msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" -#: ../../src/basics/stdtypes.txt:224 +#: ../../src/basics/stdtypes.txt:222 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" -#: ../../src/basics/stdtypes.txt:227 +#: ../../src/basics/stdtypes.txt:225 msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" -#: ../../src/basics/stdtypes.txt:227 +#: ../../src/basics/stdtypes.txt:225 msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -951,39 +1310,39 @@ msgstr "" "отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " "пропущено - використовуйте останній доступний індекс)" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:228 msgid "``s.remove(x)``" msgstr "``s.remove(x)``" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:228 msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" -#: ../../src/basics/stdtypes.txt:232 +#: ../../src/basics/stdtypes.txt:230 msgid "``s.reverse()``" msgstr "``s.reverse()``" -#: ../../src/basics/stdtypes.txt:232 +#: ../../src/basics/stdtypes.txt:230 msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" -#: ../../src/basics/stdtypes.txt:235 +#: ../../src/basics/stdtypes.txt:233 msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" -#: ../../src/basics/stdtypes.txt:236 +#: ../../src/basics/stdtypes.txt:234 msgid "new in Python version 3.3" msgstr "нове у версії Python 3.3" -#: ../../src/basics/stdtypes.txt:239 +#: ../../src/basics/stdtypes.txt:237 msgid "Text sequence type" msgstr "Тип текстової послідовності" -#: ../../src/basics/stdtypes.txt:242 +#: ../../src/basics/stdtypes.txt:240 msgid "String methods" msgstr "Рядкові методи" -#: ../../src/basics/stdtypes.txt:244 +#: ../../src/basics/stdtypes.txt:242 msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." @@ -991,7 +1350,7 @@ msgstr "" "Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " "методами." -#: ../../src/basics/stdtypes.txt:289 +#: ../../src/basics/stdtypes.txt:287 msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." @@ -999,11 +1358,11 @@ msgstr "" "Рядки порівнюються лексикографічно з використанням числових кодових точок " "Unicode своїх символів." -#: ../../src/basics/stdtypes.txt:293 +#: ../../src/basics/stdtypes.txt:291 msgid "Set types" msgstr "Типи сетів" -#: ../../src/basics/stdtypes.txt:298 +#: ../../src/basics/stdtypes.txt:296 msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -1017,22 +1376,22 @@ msgstr "" "порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " "підмножини одного іншого, ані надмножини один одного)." -#: ../../src/basics/stdtypes.txt:305 +#: ../../src/basics/stdtypes.txt:303 msgid "Mapping type" msgstr "Тип відображення" -#: ../../src/basics/stdtypes.txt:307 +#: ../../src/basics/stdtypes.txt:305 msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " "*dictionary*. In few words mappings are collections of keys and their values." msgstr "" -"Об’єкт зіставлення зіставляє хешовані значення з довільними об’єктами. " +"Об'єкт зіставлення зіставляє хешовані значення з довільними об'єктами. " "Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " "відображення, *dictionary*. Якщо кількома словами, то відображення - це " "набори ключів та їхніх значень." -#: ../../src/basics/stdtypes.txt:311 +#: ../../src/basics/stdtypes.txt:309 msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " @@ -1044,15 +1403,15 @@ msgstr "" "``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " "тієї самої словникової статті." -#: ../../src/basics/stdtypes.txt:315 +#: ../../src/basics/stdtypes.txt:313 msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" -#: ../../src/basics/stdtypes.txt:317 +#: ../../src/basics/stdtypes.txt:315 msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" -#: ../../src/basics/stdtypes.txt:318 +#: ../../src/basics/stdtypes.txt:316 msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" @@ -1060,11 +1419,11 @@ msgstr "" "Використовуйте розділений комами список пар ``key: value`` з дужками: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" -#: ../../src/basics/stdtypes.txt:320 +#: ../../src/basics/stdtypes.txt:318 msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" -#: ../../src/basics/stdtypes.txt:321 +#: ../../src/basics/stdtypes.txt:319 msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -1072,7 +1431,7 @@ msgstr "" "Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" -#: ../../src/basics/stdtypes.txt:327 +#: ../../src/basics/stdtypes.txt:325 msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." @@ -1080,7 +1439,7 @@ msgstr "" "Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " "однакові пари ключ-значення." -#: ../../src/basics/stdtypes.txt:330 +#: ../../src/basics/stdtypes.txt:328 msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 3468a80b5..04e4b2fc7 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -354,13 +354,17 @@ They are: - ``staticmethod`` - ``property`` -If you develop an intuitive understanding for their differences you’ll be able to write object-oriented Python that communicates its intent more clearly and will be easier to maintain in the long run :cite:`realpython:methods-demystified`. +If you develop an intuitive understanding for their differences you'll be able +to write object-oriented Python that communicates its intent more clearly and +will be easier to maintain in the long run +:cite:`realpython:methods-demystified`. Class methods ------------- -Instead of accepting a self parameter, class methods take a ``cls`` parameter -that points to the class—and not the object instance—when the method is called. +Instead of accepting a ``self`` parameter, class methods take a ``cls`` +parameter that points to the class — and not the object instance — when +the method is called. Because the class method only has access to this ``cls`` argument, it can't modify object instance state. That would require access to ``self``. @@ -373,7 +377,7 @@ Static methods -------------- This type of method takes neither a ``self`` nor a ``cls`` parameter (but of -course it’s free to accept an arbitrary number of other parameters). +course it's free to accept an arbitrary number of other parameters). Therefore a static method can neither modify object state nor class state. Static methods are restricted in what data they can access - and they're @@ -388,7 +392,7 @@ Properties ---------- It's a way to bind a method name to access it as an attribute. Properties are -"read-only" by default. This means a value cannot be assigned to ``property +**read-only** by default. This means a value cannot be assigned to ``property member``. Some examples From e3317f68af98d75064993714cde2cb801ceb799e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:19:23 +0300 Subject: [PATCH 083/689] Added metadata for appendixes Signed-off-by: Serhii Horodilov --- src/appx/blog.txt | 5 +++++ src/appx/code_edit.txt | 5 ++++- src/appx/conv_store.txt | 5 +++++ src/appx/env_path.txt | 5 ++++- src/appx/precedence.txt | 8 ++++---- src/appx/printf.txt | 5 ++++- src/appx/wtk.txt | 5 +++++ 7 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/appx/blog.txt b/src/appx/blog.txt index d2c1bd5b1..406074712 100644 --- a/src/appx/blog.txt +++ b/src/appx/blog.txt @@ -1 +1,6 @@ +.. meta:: + :description: Specification for Django blog training project + :author: Serhii Horodilov + :keywords: python, django, blog, project, training + .. include:: /../blog/docs/spec.rst diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt index f3308f071..bf670b741 100644 --- a/src/appx/code_edit.txt +++ b/src/appx/code_edit.txt @@ -1,4 +1,7 @@ -.. appendix +.. meta:: + :description: Code editors and IDEs for Python + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, editor, ide ############ Code Editors diff --git a/src/appx/conv_store.txt b/src/appx/conv_store.txt index cb1d4aaa1..5ac896ec7 100644 --- a/src/appx/conv_store.txt +++ b/src/appx/conv_store.txt @@ -1 +1,6 @@ +.. meta:: + :description: Convenience store challenge + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, basics, oop, object-oriented programming + .. include:: /../problem-sets/src/conv_store/challenge.rst diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 6786d036e..94de3dc45 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -1,4 +1,7 @@ -.. appendix +.. meta:: + :description: Setting up environment variables + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: settings, environment, variables ############################### Issue - System Environment PATH diff --git a/src/appx/precedence.txt b/src/appx/precedence.txt index 5fce07b0a..80af144d1 100644 --- a/src/appx/precedence.txt +++ b/src/appx/precedence.txt @@ -1,7 +1,7 @@ -.. appendix - -.. todo: - https://docs.python.org/3/reference/expressions.html#operator-precedence +.. meta:: + :description: Operator precedence in Python + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, basics, operator, precedence ################### Operator Precedence diff --git a/src/appx/printf.txt b/src/appx/printf.txt index af9dda63b..7842edf9b 100644 --- a/src/appx/printf.txt +++ b/src/appx/printf.txt @@ -1,4 +1,7 @@ -.. appendix +.. meta:: + :description: Formatted strings usage in Python + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, string, formatting .. todo: add code examples diff --git a/src/appx/wtk.txt b/src/appx/wtk.txt index 1a55429df..ef0a62d5d 100644 --- a/src/appx/wtk.txt +++ b/src/appx/wtk.txt @@ -1 +1,6 @@ +.. meta:: + :description: Knights, thieves and wizards game project + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, game, oop, object-oriented programming + .. include:: /../problem-sets/src/wtk/challenge.rst From a138d13039801e9df6f529a591ccd7d5a8e7c8eb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:27:36 +0300 Subject: [PATCH 084/689] Changed 'software list' file format to rst --- src/appx/software_list.md | 110 --------------------------------- src/appx/software_list.rst | 123 +++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 110 deletions(-) delete mode 100644 src/appx/software_list.md create mode 100644 src/appx/software_list.rst diff --git a/src/appx/software_list.md b/src/appx/software_list.md deleted file mode 100644 index 9d5d6f34a..000000000 --- a/src/appx/software_list.md +++ /dev/null @@ -1,110 +0,0 @@ -Software List -============= - -7zip ----- - -**7-Zip** is **free software** with **open source**. - -- High compression ratio in [7z format](https://7-zip.org/7z.html) with - **LZMA** and **LZMA2** compression -- Supported formats: - - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM - - Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, - GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, - SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z. -- Self-extracting capability for 7z format -- Integration with Windows Shell - -https://7-zip.org/ - -cygwin ------- - -It is a large collection of GNU and Open Source tools which provide -functionality similar to a -[Linux distribution](https://en.wikipedia.org/wiki/Linux_distribution) on -Windows and a DLL (cygwin1.dll) which provides substantial POSIX API -functionality. - -**Cygwin is not**: - -- a way to run native Linux apps on Windows. You must rebuild your application - *from source* if you want it to run on Windows. -- a way to magically make native Windows apps aware of UNIX® functionality like - `signals`, `ptys` etc. Again, you need to build your apps *from source* if - you want to take advantage of Cygwin functionality. - -https://www.cygwin.com/ - -git[^cygwin-pkg] ---- - -Git is a [free and open source](https://git-scm.com/about/free-and-open-source) -distributed version control system designed to handle everything from small to -very large projects with speed and efficiency. - -https://git-scm.com/ - -Docker ------- - -> The most-loved Tool in Stack Overflow’s 2022 Developer Survey. - -Docker helps developers bring their ideas to life by conquering the complexity -of app development. We simplify and accelerate development workflows with -an integrated dev pipeline and through the consolidation of application -components. Actively used by millions of developers around the world, -Docker Desktop and Docker Hub provide unmatched simplicity, agility and choice. - -https://www.docker.com/ - -PostgreSQL[^cygwin-pkg] ----------- - -PostgreSQL is a powerful, open source object-relational database system with -over 35 years of active development that has earned it a strong reputation for -reliability, feature robustness, and performance. - -https://www.postgresql.org/ - -psql[^cygwin-pkg] ----- - -A terminal-based front-end to PostgreSQL. It enables you to type in queries -interactively, issue them to PostgreSQL, and see the query results. -Alternatively, input can be from a file or from command line arguments. -In addition, psql provides a number of meta-commands and various shell-like -features to facilitate writing scripts and automating a wide variety of tasks. - -On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux -look for `postgresql-client` package. - -https://www.postgresql.org/docs/current/app-psql.html - -pgAdmin -------- - -pgAdmin is the most popular and feature rich Open Source administration and -development platform for PostgreSQL, the most advanced Open Source database -in the world. - -It is a PostgreSQL client (like a `psql`), but with web based GUI. - -https://pgadmin.org/ - -SQLite[^cygwin-pkg] ------- - -SQLite is a C-language library that implements a -[small](https://sqlite.org/footprint.html), -[fast](https://sqlite.org/fasterthanfs.html), -[self-contained](https://sqlite.org/selfcontained.html), -[high-reliability](https://sqlite.org/hirely.html), -[full-featured](https://sqlite.org/fullsql.html), SQL database engine. - -https://sqlite.org/ - - -[^cygwin-pkg]: available for installation as a cygwin package - diff --git a/src/appx/software_list.rst b/src/appx/software_list.rst new file mode 100644 index 000000000..35976d6ea --- /dev/null +++ b/src/appx/software_list.rst @@ -0,0 +1,123 @@ +.. meta:: + :description: Useful software list + :author: Serhii Horodilov + :keywords: software + +Software List +============= + +7zip +---- + +**7-Zip** is **free software** with **open source**. + +- High compression ratio in `7z format `__ + with **LZMA** and **LZMA2** compression +- Supported formats: + + - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM + - Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, + FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, + RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z. + +- Self-extracting capability for 7z format +- Integration with Windows Shell + +https://7-zip.org/ + +cygwin +------ + +It is a large collection of GNU and Open Source tools which provide +functionality similar to a `Linux +distribution `__ on +Windows and a DLL (cygwin1.dll) which provides substantial POSIX API +functionality. + +**Cygwin is not**: + +- a way to run native Linux apps on Windows. You must rebuild your + application *from source* if you want it to run on Windows. +- a way to magically make native Windows apps aware of UNIX® + functionality like ``signals``, ``ptys`` etc. Again, you need to + build your apps *from source* if you want to take advantage of Cygwin + functionality. + +https://www.cygwin.com/ + +git [#cygwin]_ +-------------- + +Git is a `free and open +source `__ distributed +version control system designed to handle everything from small to very +large projects with speed and efficiency. + +https://git-scm.com/ + +Docker +------ + + The most-loved Tool in Stack Overflow’s 2022 Developer Survey. + +Docker helps developers bring their ideas to life by conquering the +complexity of app development. We simplify and accelerate development +workflows with an integrated dev pipeline and through the consolidation +of application components. Actively used by millions of developers +around the world, Docker Desktop and Docker Hub provide unmatched +simplicity, agility and choice. + +https://www.docker.com/ + +PostgreSQL [#cygwin]_ +--------------------- + +PostgreSQL is a powerful, open source object-relational database system +with over 35 years of active development that has earned it a strong +reputation for reliability, feature robustness, and performance. + +https://www.postgresql.org/ + +.. _psqlcygwin-pkg: + +psql [#cygwin]_ +--------------- + +A terminal-based front-end to PostgreSQL. It enables you to type in +queries interactively, issue them to PostgreSQL, and see the query +results. Alternatively, input can be from a file or from command line +arguments. In addition, psql provides a number of meta-commands and +various shell-like features to facilitate writing scripts and automating +a wide variety of tasks. + +On Windows it will be installed within PostgreSQL RDBMS. For macOS and +Linux look for ``postgresql-client`` package. + +https://www.postgresql.org/docs/current/app-psql.html + +pgAdmin +------- + +pgAdmin is the most popular and feature rich Open Source administration +and development platform for PostgreSQL, the most advanced Open Source +database in the world. + +It is a PostgreSQL client (like a ``psql``), but with web based GUI. + +https://pgadmin.org/ + +SQLite [#cygwin]_ +----------------- + +SQLite is a C-language library that implements a +`small `__, +`fast `__, +`self-contained `__, +`high-reliability `__, +`full-featured `__, SQL database +engine. + +https://sqlite.org/ + +.. [#cygwin] + available for installation as a cygwin package From b40882c18ff00de17cae9f0a7e4a577f2499bef9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:35:18 +0300 Subject: [PATCH 085/689] Added metadata for basics Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 5 +++++ src/basics/decorators.txt | 5 +++++ src/basics/exceptions.txt | 5 +++++ src/basics/functions.txt | 5 +++++ src/basics/index.txt | 5 +++++ src/basics/modules.txt | 5 +++++ src/basics/pep8.txt | 5 +++++ src/basics/stdtypes.txt | 5 +++++ src/basics/syntax.txt | 5 +++++ src/basics/testing.txt | 5 +++++ src/basics/variables.txt | 5 +++++ 11 files changed, 55 insertions(+) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 93b4e4add..5914db841 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Control flow in Python + :author: Serhii Horodilov + :keywords: python, basics, control, if, for, while, condition, loop + ******************************************************************************* Control Flow ******************************************************************************* diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 04e4b2fc7..62dbfeeb5 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python decorators + :author: Serhii Horodilov + :keywords: python, basics, decorators + .. _first-class objects: https://dbader.org/blog/python-first-class-functions diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 51aa19e33..d2ca9c37f 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Handling exceptions in Python + :author: Serhii Horodilov + :keywords: python, exceptions, handling, try, except, finally + .. _built-in exceptions: https://docs.python.org/library/exceptions.html#bltin-exceptions diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 36a1acce6..7200e1b0d 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python functions + :author: Serhii Horodilov + :keywords: python, basics, functions + ******************************************************************************* Functions ******************************************************************************* diff --git a/src/basics/index.txt b/src/basics/index.txt index 4d1ade7d3..5f5ee1137 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python course - Basics + :author: Serhii Horodilov + :keywords: python, basics, index + ############################################################################### Python Basics ############################################################################### diff --git a/src/basics/modules.txt b/src/basics/modules.txt index 6e757289f..8e5ab24b8 100644 --- a/src/basics/modules.txt +++ b/src/basics/modules.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Modules and imports in Python + :author: Serhii Horodilov + :keywords: python, basics, modules, import + ******************************************************************************* Pythons Modules and Imports ******************************************************************************* diff --git a/src/basics/pep8.txt b/src/basics/pep8.txt index 4f805f71b..38170170f 100644 --- a/src/basics/pep8.txt +++ b/src/basics/pep8.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: PEP-8 style guide + :author: Serhii Horodilov + :keywords: python, style, guide + ******************************************************************************* Style Guides: PEP8 ******************************************************************************* diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index ce5054a4a..1cf40f323 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python built-in types + :author: Serhii Horodilov + :keywords: python, basics + ******************************************************************************* Built-in Types ******************************************************************************* diff --git a/src/basics/syntax.txt b/src/basics/syntax.txt index 6f9f45432..503ebd54b 100644 --- a/src/basics/syntax.txt +++ b/src/basics/syntax.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python syntax + :author: Serhii Horodilov + :keywords: python, basics, syntax + ******************************************************************************* Python Syntax ******************************************************************************* diff --git a/src/basics/testing.txt b/src/basics/testing.txt index 6507d155f..e4ea3f602 100644 --- a/src/basics/testing.txt +++ b/src/basics/testing.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Testing software in Python + :author: Serhii Horodilov + :keywords: python, testing, unittest, pytest + ******************************************************************************* Testing ******************************************************************************* diff --git a/src/basics/variables.txt b/src/basics/variables.txt index cc4525a03..96738f374 100644 --- a/src/basics/variables.txt +++ b/src/basics/variables.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Variables in programming + :author: Serhii Horodilov + :keywords: programming, basics, variables + ******************************************************************************* Variables ******************************************************************************* From 278d4806e46479d05aad377cf7bf7e5ba83d712e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:38:45 +0300 Subject: [PATCH 086/689] Added metadata for draft documents Signed-off-by: Serhii Horodilov --- src/deploy/index.txt | 5 +++++ src/django/index.txt | 5 +++++ src/flask/index.txt | 5 +++++ src/linux/index.txt | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/src/deploy/index.txt b/src/deploy/index.txt index 2bcaf44bc..740795f60 100644 --- a/src/deploy/index.txt +++ b/src/deploy/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Deploy Python application + :author: Serhii Horodilov + :keywords: python, deployment, index + ############################################################################### Application Deployment ############################################################################### diff --git a/src/django/index.txt b/src/django/index.txt index 2fe584b69..3c49e7f10 100644 --- a/src/django/index.txt +++ b/src/django/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Django web-framework + :author: Serhii Horodilov + :keywords: python, web, django, index + ############################################################################### Django Framework ############################################################################### diff --git a/src/flask/index.txt b/src/flask/index.txt index 607e139fa..5eeec5ca3 100644 --- a/src/flask/index.txt +++ b/src/flask/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Flask web-framework + :author: Serhii Horodilov + :keywords: python, web, flask, index + ############################################################################### Flask Framework ############################################################################### diff --git a/src/linux/index.txt b/src/linux/index.txt index 363585aa9..e1f6917b0 100644 --- a/src/linux/index.txt +++ b/src/linux/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Linux basics for Python developers + :author: Serhii Horodilov + :keywords: linux, basics, index + ############################################################################### Linux Basics ############################################################################### From d07a9fabdad9f1dd98b2d5b8cfd8335d73b5150d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:43:32 +0300 Subject: [PATCH 087/689] Added metadata for OOP Signed-off-by: Serhii Horodilov --- src/oop/index.txt | 5 +++++ src/oop/inheritance.txt | 5 +++++ src/oop/intro.txt | 5 +++++ src/oop/patterns.txt | 5 +++++ src/oop/solid.txt | 7 +++++++ 5 files changed, 27 insertions(+) diff --git a/src/oop/index.txt b/src/oop/index.txt index 2dba1e612..c0f491cae 100644 --- a/src/oop/index.txt +++ b/src/oop/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Object-oriented programming in Python + :author: Serhii Horodilov + :keywords: python, oop, object-oriented programming, index + ############################################################################### Object-Oriented Programming ############################################################################### diff --git a/src/oop/inheritance.txt b/src/oop/inheritance.txt index 30cded93f..1b90b6b18 100644 --- a/src/oop/inheritance.txt +++ b/src/oop/inheritance.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Inheritance in Python + :author: Serhii Horodilov + :keywords: python, inheritance, oop, object-oriented programming + ******************************************************************************* Inheritance ******************************************************************************* diff --git a/src/oop/intro.txt b/src/oop/intro.txt index fc2f9569e..7d065fa47 100644 --- a/src/oop/intro.txt +++ b/src/oop/intro.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Introduction to OOP + :author: Serhii Horodilov + :keywords: python, intro, introduction, oop, object-oriented programming + ******************************************************************************* Classes and Objects ******************************************************************************* diff --git a/src/oop/patterns.txt b/src/oop/patterns.txt index dddb5de33..bc2cdda15 100644 --- a/src/oop/patterns.txt +++ b/src/oop/patterns.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Design patterns + :author: Serhii Horodilov + :keywords: python, programming, design, patterns + ******************************************************************************* Design Patterns ******************************************************************************* diff --git a/src/oop/solid.txt b/src/oop/solid.txt index b616b5aae..107b3d668 100644 --- a/src/oop/solid.txt +++ b/src/oop/solid.txt @@ -1,3 +1,10 @@ +.. meta:: + :description: SOLID principles + :author: Serhii Horodilov + :keywords: python, solid, single, responsibility, open, closed, liskov, + substitution, interface, segregation, dependency, inversion, + oop, object-oriented programming + ******************************************************************************* SOLID Principles ******************************************************************************* From 25303e90ea1eb90c6d71edba5409936a8ba2e654 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:47:48 +0300 Subject: [PATCH 088/689] Added metadata for RDBMS Signed-off-by: Serhii Horodilov --- src/rdbms/aggregation.txt | 5 +++++ src/rdbms/index.txt | 5 +++++ src/rdbms/normalization.txt | 5 +++++ src/rdbms/relations.txt | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index 8b5385edd..d61db96df 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Data aggregation + :author: Serhii Horodilov + :keywords: sql, db, database, data, aggregation, functions + ******************************************************************************* Data Aggregation ******************************************************************************* diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 337ec1331..ac43a8f50 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Relational databases + :author: Serhii Horodilov + :keywords: sql, db, database, intro, introduction, index + ############################################################################### Relational Database ############################################################################### diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 3affcaa67..059146a32 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Database normalization + :author: Serhii Horodilov + :keywords: sql, db, database, normalization + ******************************************************************************* Database Normalization ******************************************************************************* diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index 7f9a19d17..4c950c40f 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: This document describes the database relationships + :author: Serhii Horodilov + :keywords: sql, db, database, relationship + ******************************************************************************* Data Relationships ******************************************************************************* From ef38a5ef3ef52c92b9aec053ea169f188e14a595 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 02:18:25 +0300 Subject: [PATCH 089/689] Updated translation files Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 339 ++++++++------ src/_locales/ua/LC_MESSAGES/basics.po | 645 +++++++++++++++----------- src/_locales/ua/LC_MESSAGES/deploy.po | 38 ++ src/_locales/ua/LC_MESSAGES/django.po | 38 ++ src/_locales/ua/LC_MESSAGES/flask.po | 38 ++ src/_locales/ua/LC_MESSAGES/index.po | 34 ++ src/_locales/ua/LC_MESSAGES/linux.po | 38 ++ src/_locales/ua/LC_MESSAGES/oop.po | 163 ++++--- src/_locales/ua/LC_MESSAGES/rdbms.po | 379 ++++++++------- 9 files changed, 1083 insertions(+), 629 deletions(-) create mode 100644 src/_locales/ua/LC_MESSAGES/deploy.po create mode 100644 src/_locales/ua/LC_MESSAGES/django.po create mode 100644 src/_locales/ua/LC_MESSAGES/flask.po create mode 100644 src/_locales/ua/LC_MESSAGES/index.po create mode 100644 src/_locales/ua/LC_MESSAGES/linux.po diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index a0945f508..1595e554f 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -1,15 +1,17 @@ -# APPENDIXES TRANSLATION FILE. +# APPENDIXES TRANSLATION. +# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# SERHII HORODILOV , 2023. +# +# SERHII HORODILOV # msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-12 14:00+0300\n" -"PO-Revision-Date: 2023-04-12 14:22+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:03+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -21,6 +23,18 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" +#: ../../src/appx/blog.txt:-1 +msgid "Specification for Django blog training project" +msgstr "Специфікація навчального проекту блогу Django" + +#: ../../src/appx/blog.txt:-1 ../../src/appx/software_list.rst:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/appx/blog.txt:-1 +msgid "python, django, blog, project, training" +msgstr "python, django, blog, project, training" + #: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" msgstr "Специфікація Проекту Блогу" @@ -217,7 +231,7 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." #: ../../blog/docs/spec.rst:116 @@ -369,8 +383,7 @@ msgstr "``confirm password``" #: ../../blog/docs/spec.rst:165 msgid "``username`` value should be validated against existing values" msgstr "" -"Значення \"ім'я користувача\" має перевірятися на відповідність існуючим " -"значенням" +"Значення ``username`` має перевірятися на відповідність існуючим значенням" #: ../../blog/docs/spec.rst:166 msgid "``password`` and ``confirm password`` values should match" @@ -537,11 +550,25 @@ msgstr "" msgid "Only authors can change their posts." msgstr "Тільки автори можуть змінювати свої повідомлення." -#: ../../src/appx/code_edit.txt:5 +#: ../../src/appx/code_edit.txt:-1 +msgid "Code editors and IDEs for Python" +msgstr "Редактори коду та IDE для Python" + +#: ../../src/appx/code_edit.txt:-1 ../../src/appx/conv_store.txt:-1 +#: ../../src/appx/env_path.txt:-1 ../../src/appx/precedence.txt:-1 +#: ../../src/appx/printf.txt:-1 ../../src/appx/wtk.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/code_edit.txt:-1 +msgid "python, editor, ide" +msgstr "python, editor, ide" + +#: ../../src/appx/code_edit.txt:8 msgid "Code Editors" msgstr "Редактори Коду" -#: ../../src/appx/code_edit.txt:7 +#: ../../src/appx/code_edit.txt:10 msgid "" "Writing Python using IDLE or the Python Shell is great for simple things, " "but those tools quickly turn larger programming projects into frustrating " @@ -555,6 +582,14 @@ msgstr "" "хорошого спеціального редактора коду робить кодування цікавим — але який з " "них найкращий для вас? :cite:`realpython:code-edit`" +#: ../../src/appx/conv_store.txt:-1 +msgid "Convenience store challenge" +msgstr "Завдання: продуктовий магазин" + +#: ../../src/appx/conv_store.txt:-1 +msgid "python, basics, oop, object-oriented programming" +msgstr "python, basics, oop, object-oriented programming" + #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" msgstr "Convenience Store Challenge" @@ -825,7 +860,7 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " "за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 @@ -1085,10 +1120,26 @@ msgstr "" msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." -#: ../../src/appx/env_path.txt:5 +#: ../../src/appx/env_path.txt:-1 +msgid "Setting up environment variables" +msgstr "Встановлення змінних середовища" + +#: ../../src/appx/env_path.txt:-1 +msgid "settings, environment, variables" +msgstr "settings, environment, variables" + +#: ../../src/appx/env_path.txt:8 msgid "Issue - System Environment PATH" msgstr "Проблема - System Environment PATH" +#: ../../src/appx/precedence.txt:-1 +msgid "Operator precedence in Python" +msgstr "Пріоритет операторів в Python" + +#: ../../src/appx/precedence.txt:-1 +msgid "python, basics, operator, precedence" +msgstr "python, basics, operator, precedence" + #: ../../src/appx/precedence.txt:8 msgid "Operator Precedence" msgstr "Пріоритет Операторів" @@ -1288,11 +1339,19 @@ msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." -#: ../../src/appx/printf.txt:7 +#: ../../src/appx/printf.txt:-1 +msgid "Formatted strings usage in Python" +msgstr "Використання форматованих рядків в Python" + +#: ../../src/appx/printf.txt:-1 +msgid "python, string, formatting" +msgstr "python, string, formatting" + +#: ../../src/appx/printf.txt:10 msgid "``printf-style`` String Formatting" msgstr "``printf-style`` Форматування рядків" -#: ../../src/appx/printf.txt:9 +#: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " "(modulo). This is also known as the string *formatting* or *interpolation* " @@ -1308,57 +1367,57 @@ msgstr "" "замінюються нулем або більше елементами *значень*. Якщо для *format* " "потрібен один аргумент, *values* може бути одним некортежним об’єктом." -#: ../../src/appx/printf.txt:16 +#: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" msgstr "Символи перетворення:" -#: ../../src/appx/printf.txt:19 +#: ../../src/appx/printf.txt:22 msgid "Flag" msgstr "Символ" -#: ../../src/appx/printf.txt:19 ../../src/appx/printf.txt:37 +#: ../../src/appx/printf.txt:22 ../../src/appx/printf.txt:40 msgid "Meaning" msgstr "Значення" -#: ../../src/appx/printf.txt:21 +#: ../../src/appx/printf.txt:24 msgid "``#``" msgstr "``#``" -#: ../../src/appx/printf.txt:21 +#: ../../src/appx/printf.txt:24 msgid "The value conversion will use the \"alternative form\"" msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" -#: ../../src/appx/printf.txt:23 +#: ../../src/appx/printf.txt:26 msgid "``0``" msgstr "``0``" -#: ../../src/appx/printf.txt:23 +#: ../../src/appx/printf.txt:26 msgid "The conversion will be zero padded for numeric values" msgstr "Перетворення буде доповнено нулем для числових значень" -#: ../../src/appx/printf.txt:25 +#: ../../src/appx/printf.txt:28 msgid "``'-'``" msgstr "``'-'``" -#: ../../src/appx/printf.txt:25 +#: ../../src/appx/printf.txt:28 msgid "" "The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" "Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" -#: ../../src/appx/printf.txt:28 +#: ../../src/appx/printf.txt:31 msgid "``' '``" msgstr "``' '``" -#: ../../src/appx/printf.txt:28 +#: ../../src/appx/printf.txt:31 msgid "(a space) A blank should be left before a positive number" msgstr "(пробіл) Перед додатним числом слід залишити пробіл" -#: ../../src/appx/printf.txt:30 +#: ../../src/appx/printf.txt:33 msgid "``'+'``" msgstr "``'+'``" -#: ../../src/appx/printf.txt:30 +#: ../../src/appx/printf.txt:33 msgid "" "A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " "a \"space\" flag)" @@ -1366,91 +1425,91 @@ msgstr "" "Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " "прапор \"пробіл\")" -#: ../../src/appx/printf.txt:34 +#: ../../src/appx/printf.txt:37 msgid "The conversion types are:" msgstr "Типи перетворення:" -#: ../../src/appx/printf.txt:37 +#: ../../src/appx/printf.txt:40 msgid "Conversion" msgstr "Перетворення" -#: ../../src/appx/printf.txt:39 +#: ../../src/appx/printf.txt:42 msgid "``'d'``" msgstr "``'d'``" -#: ../../src/appx/printf.txt:39 ../../src/appx/printf.txt:41 +#: ../../src/appx/printf.txt:42 ../../src/appx/printf.txt:44 msgid "Signed integer decimal" msgstr "Ціле десяткове число зі знаком" -#: ../../src/appx/printf.txt:41 +#: ../../src/appx/printf.txt:44 msgid "``'i'``" msgstr "``'i'``" -#: ../../src/appx/printf.txt:43 +#: ../../src/appx/printf.txt:46 msgid "``'o'``" msgstr "``'o'``" -#: ../../src/appx/printf.txt:43 +#: ../../src/appx/printf.txt:46 msgid "Signed octal value" msgstr "Вісімкове значення зі знаком" -#: ../../src/appx/printf.txt:45 +#: ../../src/appx/printf.txt:48 msgid "``'u'``" msgstr "``'u'``" -#: ../../src/appx/printf.txt:45 +#: ../../src/appx/printf.txt:48 msgid "Obsolete type - it is identical to ``'d'``" msgstr "Застарілий тип - ідентичний ``'d``" -#: ../../src/appx/printf.txt:47 +#: ../../src/appx/printf.txt:50 msgid "``'x'``" msgstr "``'x'``" -#: ../../src/appx/printf.txt:47 +#: ../../src/appx/printf.txt:50 msgid "Signed hexadecimal (lowercase)" msgstr "Шістнадцяткове число зі знаком (маленький регістр)" -#: ../../src/appx/printf.txt:49 +#: ../../src/appx/printf.txt:52 msgid "``'X'``" msgstr "``'X'``" -#: ../../src/appx/printf.txt:49 +#: ../../src/appx/printf.txt:52 msgid "Signed hexadecimal (uppercase)" msgstr "Шістнадцяткове число зі знаком (верхній регістр)" -#: ../../src/appx/printf.txt:51 +#: ../../src/appx/printf.txt:54 msgid "``'e'``" msgstr "``'e'``" -#: ../../src/appx/printf.txt:51 +#: ../../src/appx/printf.txt:54 msgid "Floating point exponential format (lowercase)" msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" -#: ../../src/appx/printf.txt:53 +#: ../../src/appx/printf.txt:56 msgid "``'E'``" msgstr "``'E'``" -#: ../../src/appx/printf.txt:53 +#: ../../src/appx/printf.txt:56 msgid "Floating point exponential format (uppercase)" msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" -#: ../../src/appx/printf.txt:55 +#: ../../src/appx/printf.txt:58 msgid "``'f'`` ``'F'``" msgstr "``'f'`` ``'F'``" -#: ../../src/appx/printf.txt:55 +#: ../../src/appx/printf.txt:58 msgid "Floating point decimal format" msgstr "Десятковий формат із плаваючою комою" -#: ../../src/appx/printf.txt:58 +#: ../../src/appx/printf.txt:61 msgid "``'g'``" msgstr "``'g'``" -#: ../../src/appx/printf.txt:61 +#: ../../src/appx/printf.txt:64 msgid "``'G'``" msgstr "``'G'``" -#: ../../src/appx/printf.txt:58 +#: ../../src/appx/printf.txt:61 msgid "" "Floating point format. Uses lowercase exponential format if exponent is less " "that -4 or not less than precision, decimal format otherwise." @@ -1459,77 +1518,85 @@ msgstr "" "формату, якщо показник степеня менший за -4 або не менший за точність, " "десятковий формат інакше." -#: ../../src/appx/printf.txt:63 +#: ../../src/appx/printf.txt:66 msgid "``'c'``" msgstr "``'c'``" -#: ../../src/appx/printf.txt:63 +#: ../../src/appx/printf.txt:66 msgid "Single character (accepts integer or single character string)" msgstr "Один символ (приймає ціле число або рядок з одним символом)" -#: ../../src/appx/printf.txt:65 +#: ../../src/appx/printf.txt:68 msgid "``'r'``" msgstr "``'r'``" -#: ../../src/appx/printf.txt:65 +#: ../../src/appx/printf.txt:68 msgid "Converts any Python object using ``repr()``" msgstr "Перетворює будь-який об’єкт Python за допомогою ``repr()``" -#: ../../src/appx/printf.txt:67 +#: ../../src/appx/printf.txt:70 msgid "``'s'``" msgstr "``'s'``" -#: ../../src/appx/printf.txt:67 +#: ../../src/appx/printf.txt:70 msgid "Converts any Python object using ``str()``" msgstr "Перетворює будь-який об’єкт Python за допомогою ``str()``" -#: ../../src/appx/printf.txt:69 +#: ../../src/appx/printf.txt:72 msgid "``'a'``" msgstr "``'a'``" -#: ../../src/appx/printf.txt:69 +#: ../../src/appx/printf.txt:72 msgid "Converts any Python object using ``ascii()``" msgstr "Перетворює будь-який об’єкт Python за допомогою ``ascii()``" -#: ../../src/appx/printf.txt:71 +#: ../../src/appx/printf.txt:74 msgid "``'%'``" msgstr "``'%'``" -#: ../../src/appx/printf.txt:71 +#: ../../src/appx/printf.txt:74 msgid "" "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." -#: ../../src/appx/software_list.md:1 +#: ../../src/appx/software_list.rst:-1 +msgid "Useful software list" +msgstr "Список корисного програмного забезпечення" + +#: ../../src/appx/software_list.rst:-1 +msgid "software" +msgstr "software" + +#: ../../src/appx/software_list.rst:7 msgid "Software List" msgstr "Список Програмного Забезпечення" -#: ../../src/appx/software_list.md:4 +#: ../../src/appx/software_list.rst:10 msgid "7zip" msgstr "7zip" -#: ../../src/appx/software_list.md:7 +#: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." msgstr "" "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." -#: ../../src/appx/software_list.md:9 +#: ../../src/appx/software_list.rst:14 msgid "" -"High compression ratio in [7z format](https://7-zip.org/7z.html) with " +"High compression ratio in `7z format `__ with " "**LZMA** and **LZMA2** compression" msgstr "" -"Високий ступінь стиснення у [форматі 7z](https://7-zip.org/7z.html) зі " +"Високий ступінь стиснення у `7z format `__ зі " "стисненням **LZMA** і **LZMA2**" -#: ../../src/appx/software_list.md:11 +#: ../../src/appx/software_list.rst:16 msgid "Supported formats:" msgstr "Підтримувані формати:" -#: ../../src/appx/software_list.md:12 +#: ../../src/appx/software_list.rst:18 msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" -#: ../../src/appx/software_list.md:13 +#: ../../src/appx/software_list.rst:19 msgid "" "Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " "HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " @@ -1539,39 +1606,39 @@ msgstr "" "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " "SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." -#: ../../src/appx/software_list.md:16 +#: ../../src/appx/software_list.rst:23 msgid "Self-extracting capability for 7z format" msgstr "Можливість саморозпакування для формату 7z" -#: ../../src/appx/software_list.md:17 +#: ../../src/appx/software_list.rst:24 msgid "Integration with Windows Shell" msgstr "Інтеграція з Windows Shell" -#: ../../src/appx/software_list.md:19 +#: ../../src/appx/software_list.rst:26 msgid "https://7-zip.org/" msgstr "https://7-zip.org/" -#: ../../src/appx/software_list.md:21 +#: ../../src/appx/software_list.rst:29 msgid "cygwin" msgstr "cygwin" -#: ../../src/appx/software_list.md:24 +#: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux distribution](https://en.wikipedia.org/" -"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " -"substantial POSIX API functionality." +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" -"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " "значний POSIX Функціонал API." -#: ../../src/appx/software_list.md:30 +#: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" msgstr "**Сygwin це не**:" -#: ../../src/appx/software_list.md:32 +#: ../../src/appx/software_list.rst:39 msgid "" "a way to run native Linux apps on Windows. You must rebuild your application " "*from source* if you want it to run on Windows." @@ -1579,51 +1646,51 @@ msgstr "" "спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " "програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." -#: ../../src/appx/software_list.md:34 +#: ../../src/appx/software_list.rst:41 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " -"if you want to take advantage of Cygwin functionality." +"like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." msgstr "" "спосіб чарівним чином зробити рідні програми Windows відомими " "функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " "потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " "перевагами функціональності Cygwin." -#: ../../src/appx/software_list.md:38 +#: ../../src/appx/software_list.rst:46 msgid "https://www.cygwin.com/" msgstr "https://www.cygwin.com/" -#: ../../src/appx/software_list.md:40 -msgid "git[^cygwin-pkg]" -msgstr "git[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:49 +msgid "git [#cygwin]_" +msgstr "git [#cygwin]_" -#: ../../src/appx/software_list.md:43 +#: ../../src/appx/software_list.rst:51 msgid "" -"Git is a [free and open source](https://git-scm.com/about/free-and-open-" -"source) distributed version control system designed to handle everything " +"Git is a `free and open source `__ distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" -"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." -"com/about/free-and-open-source) розподілена система контролю версій, " +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " "призначена для швидкого та ефективного керування всіма проектами, від малих " "до дуже великих." -#: ../../src/appx/software_list.md:47 +#: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../../src/appx/software_list.md:49 +#: ../../src/appx/software_list.rst:59 msgid "Docker" msgstr "Docker" -#: ../../src/appx/software_list.md:52 +#: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" "Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " "рік." -#: ../../src/appx/software_list.md:54 +#: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " @@ -1639,15 +1706,15 @@ msgstr "" "Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " "вибір." -#: ../../src/appx/software_list.md:60 +#: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" msgstr "https://www.docker.com/" -#: ../../src/appx/software_list.md:62 -msgid "PostgreSQL[^cygwin-pkg]" -msgstr "PostgreSQL[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:73 +msgid "PostgreSQL [#cygwin]_" +msgstr "PostgreSQL [#cygwin]_" -#: ../../src/appx/software_list.md:65 +#: ../../src/appx/software_list.rst:75 msgid "" "PostgreSQL is a powerful, open source object-relational database system with " "over 35 years of active development that has earned it a strong reputation " @@ -1657,15 +1724,15 @@ msgstr "" "кодом, активна розробка якої триває понад 35 років, завдяки чому вона " "заслужила міцну репутацію надійності, надійності функцій і продуктивності." -#: ../../src/appx/software_list.md:69 +#: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" msgstr "https://www.postgresql.org/" -#: ../../src/appx/software_list.md:71 -msgid "psql[^cygwin-pkg]" -msgstr "psql[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:84 +msgid "psql [#cygwin]_" +msgstr "psql [#cygwin]_" -#: ../../src/appx/software_list.md:74 +#: ../../src/appx/software_list.rst:86 msgid "" "A terminal-based front-end to PostgreSQL. It enables you to type in queries " "interactively, issue them to PostgreSQL, and see the query results. " @@ -1681,23 +1748,23 @@ msgstr "" "подібних до оболонки, для полегшення написання сценаріїв і автоматизації " "різноманітних завдань." -#: ../../src/appx/software_list.md:80 +#: ../../src/appx/software_list.rst:93 msgid "" "On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for `postgresql-client` package." +"look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " -"знайдіть пакет `postgresql-client`." +"знайдіть пакет ``postgresql-client``." -#: ../../src/appx/software_list.md:83 +#: ../../src/appx/software_list.rst:96 msgid "https://www.postgresql.org/docs/current/app-psql.html" msgstr "https://www.postgresql.org/docs/current/app-psql.html" -#: ../../src/appx/software_list.md:85 +#: ../../src/appx/software_list.rst:99 msgid "pgAdmin" msgstr "pgAdmin" -#: ../../src/appx/software_list.md:88 +#: ../../src/appx/software_list.rst:101 msgid "" "pgAdmin is the most popular and feature rich Open Source administration and " "development platform for PostgreSQL, the most advanced Open Source database " @@ -1707,42 +1774,50 @@ msgstr "" "та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " "відкритим кодом у світі." -#: ../../src/appx/software_list.md:92 -msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." +#: ../../src/appx/software_list.rst:105 +msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" -"інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." -#: ../../src/appx/software_list.md:94 +#: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" msgstr "https://pgadmin.org/" -#: ../../src/appx/software_list.md:96 -msgid "SQLite[^cygwin-pkg]" -msgstr "SQLite[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:110 +msgid "SQLite [#cygwin]_" +msgstr "SQLite [#cygwin]_" -#: ../../src/appx/software_list.md:99 +#: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a [small](https://sqlite.org/" -"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-reliability]" -"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." -"html), SQL database engine." +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" -"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " -"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" -"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" -"fullsql.html) , двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." -#: ../../src/appx/software_list.md:106 +#: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" msgstr "https://sqlite.org/" -#: ../../src/appx/software_list.md:109 +#: ../../src/appx/software_list.rst:123 msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" +#: ../../src/appx/wtk.txt:-1 +msgid "Knights, thieves and wizards game project" +msgstr "Проект гри рицарі, злодії та чарівники" + +#: ../../src/appx/wtk.txt:-1 +msgid "python, game, oop, object-oriented programming" +msgstr "python, game, oop, object-oriented programming" + #: ../../problem-sets/src/wtk/challenge.rst:3 msgid "Wizards, Thieves and Knights" msgstr "Чарівники, Злодії та Рицарі" diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index 2391f5718..1782d6ae1 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -1,15 +1,17 @@ -# PYTHON/BASICS TRANSLATION +# PYTHON BASICS BLOCK TRANSLATION. +# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. +# # OLEKSANDR YEROMIN , 2023. # msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 18:20+0300\n" -"PO-Revision-Date: 2023-04-13 18:21+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:10+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -21,15 +23,40 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/basics/controlflow.txt:3 +#: ../../src/basics/controlflow.txt:-1 +msgid "Control flow in Python" +msgstr "Контроль потоку в Python" + +#: ../../src/basics/controlflow.txt:-1 ../../src/basics/decorators.txt:-1 +#: ../../src/basics/exceptions.txt:-1 ../../src/basics/functions.txt:-1 +#: ../../src/basics/index.txt:-1 ../../src/basics/modules.txt:-1 +#: ../../src/basics/pep8.txt:-1 ../../src/basics/stdtypes.txt:-1 +#: ../../src/basics/syntax.txt:-1 ../../src/basics/testing.txt:-1 +#: ../../src/basics/variables.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/controlflow.txt:-1 +msgid "python, basics, control, if, for, while, condition, loop" +msgstr "python, basics, control, if, for, while, condition, loop" + +#: ../../src/basics/controlflow.txt:8 msgid "Control Flow" msgstr "Керування виконанням" -#: ../../src/basics/decorators.txt:6 +#: ../../src/basics/decorators.txt:-1 +msgid "Python decorators" +msgstr "Декоратори в Python" + +#: ../../src/basics/decorators.txt:-1 +msgid "python, basics, decorators" +msgstr "python, basics, decorators" + +#: ../../src/basics/decorators.txt:11 msgid "Decorators" msgstr "Декоратори" -#: ../../src/basics/decorators.txt:8 +#: ../../src/basics/decorators.txt:13 msgid "" "Decorators provide a simple syntax for calling higher-order functions :cite:" "`realpython:decorators`." @@ -37,11 +64,11 @@ msgstr "" "Декоратори забезпечують простий синтаксис для виклику функцій вищого " "порядку :cite:`realpython:decorators`." -#: ../../src/basics/decorators.txt:13 +#: ../../src/basics/decorators.txt:18 msgid "There is some kind of misunderstanding in definitions." msgstr "Є деяке непорозуміння у визначеннях." -#: ../../src/basics/decorators.txt:15 +#: ../../src/basics/decorators.txt:20 msgid "" "**Decorator** is a function returning another function, usually applied as a " "function transformation using the ``@wrapper`` syntax :cite:`docs-python:" @@ -51,13 +78,13 @@ msgstr "" "застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" "cite:`docs-python:term-decorator`." -#: ../../src/basics/decorators.txt:19 +#: ../../src/basics/decorators.txt:24 msgid "" "However, that's no quit enough to describe it. The more complete definition " "is:" msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" -#: ../../src/basics/decorators.txt:22 +#: ../../src/basics/decorators.txt:27 msgid "" "**Decorator** is a structural design pattern that lets you attach new " "behaviors to objects by placing these objects inside special wrapper objects " @@ -67,7 +94,7 @@ msgstr "" "нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " "об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." -#: ../../src/basics/decorators.txt:26 +#: ../../src/basics/decorators.txt:31 msgid "" "Before you understand decorators, you must first understand how functions " "work." @@ -75,11 +102,11 @@ msgstr "" "Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " "функції." -#: ../../src/basics/decorators.txt:30 +#: ../../src/basics/decorators.txt:35 msgid "First-class objects" msgstr "Об'єкти першого класу" -#: ../../src/basics/decorators.txt:32 +#: ../../src/basics/decorators.txt:37 msgid "" "In Python functions are `first-class objects`_. Everything in Python is an " "object. Functions are objects too." @@ -87,11 +114,11 @@ msgstr "" "У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " "Функції також є об'єктами." -#: ../../src/basics/decorators.txt:36 +#: ../../src/basics/decorators.txt:41 msgid "Inner functions" msgstr "Внутрішні функції" -#: ../../src/basics/decorators.txt:38 +#: ../../src/basics/decorators.txt:43 msgid "" "Functions can be nested. This means it is possible to define functions " "inside other functions." @@ -99,11 +126,11 @@ msgstr "" "Функції можуть бути вкладеними. Це означає, що можна визначати функції " "всередині інших функцій." -#: ../../src/basics/decorators.txt:41 +#: ../../src/basics/decorators.txt:46 msgid "Nested functions example" msgstr "Приклад вкладених функцій" -#: ../../src/basics/decorators.txt:55 +#: ../../src/basics/decorators.txt:60 msgid "" "The order in which inner functions are defined no matters. The function " "definition does not execute the function body; this gets executed only when " @@ -119,11 +146,11 @@ msgstr "" "викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " "``NameError``." -#: ../../src/basics/decorators.txt:63 +#: ../../src/basics/decorators.txt:68 msgid "Functions are objects" msgstr "Функції є об'єктами" -#: ../../src/basics/decorators.txt:65 +#: ../../src/basics/decorators.txt:70 msgid "" "This means functions can be passed around and used as arguments, just like " "any other object (e.g. *int*, *str* etc.)." @@ -131,11 +158,11 @@ msgstr "" "Це означає, що функції можна передавати й використовувати як аргументи, як і " "будь-який інший об'єкт (наприклад, *int*, *str* тощо)." -#: ../../src/basics/decorators.txt:90 +#: ../../src/basics/decorators.txt:95 msgid "Returning functions" msgstr "Повернення функцій" -#: ../../src/basics/decorators.txt:92 +#: ../../src/basics/decorators.txt:97 msgid "" "Since function can be passed as an argument, it may be returned from another " "function." @@ -143,11 +170,11 @@ msgstr "" "Оскільки функцію можна передати як аргумент, її можна повернути з іншої " "функції." -#: ../../src/basics/decorators.txt:115 +#: ../../src/basics/decorators.txt:120 msgid "``parent`` returns functions themselves, there are no parentheses." msgstr "``parent`` повертає самі функції, тут нема дужок." -#: ../../src/basics/decorators.txt:117 +#: ../../src/basics/decorators.txt:122 msgid "" "After running the code snippet above, ``first`` refers the ``first_child`` " "function from the inner ``parent`` scope. From now it can be used to call " @@ -157,11 +184,11 @@ msgstr "" "функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " "можна використовувати для виклику цільової функції, на яку він посилається." -#: ../../src/basics/decorators.txt:129 +#: ../../src/basics/decorators.txt:134 msgid "Simple decorators" msgstr "Прості декоратори" -#: ../../src/basics/decorators.txt:131 +#: ../../src/basics/decorators.txt:136 msgid "" "Now you're ready to move on and see the magical beast that is the Python " "decorators. Let's start with a simple example:" @@ -169,11 +196,11 @@ msgstr "" "Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " "Python. Почнемо з простого прикладу:" -#: ../../src/basics/decorators.txt:149 +#: ../../src/basics/decorators.txt:154 msgid "Running function:" msgstr "Запуск функцій:" -#: ../../src/basics/decorators.txt:160 +#: ../../src/basics/decorators.txt:165 msgid "" "The common way to use decorators is to replace the original function with a " "decorated one:" @@ -181,7 +208,7 @@ msgstr "" "Поширеним способом використання декораторів є заміна оригінальної функції на " "декоровану:" -#: ../../src/basics/decorators.txt:171 +#: ../../src/basics/decorators.txt:176 msgid "" "``say_hello`` function is the reference to the ``decorator.." "wrapper``, which itself is bound to the original ``say_hello`` function. " @@ -193,7 +220,7 @@ msgstr "" "синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " "ті самі речі, що й перший приклад декоратора:" -#: ../../src/basics/decorators.txt:193 +#: ../../src/basics/decorators.txt:198 msgid "" "There is no way to *undecorate* object in Python. Once something is bound to " "the decorator's wrapper - it is decorated forever." @@ -201,7 +228,7 @@ msgstr "" "У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " "обгортки декоратора - воно прикрашене назавжди." -#: ../../src/basics/decorators.txt:196 +#: ../../src/basics/decorators.txt:201 msgid "" "A decorated function still remains a **function**. So, it can be decorated " "once more time again, and again, and again..." @@ -209,7 +236,7 @@ msgstr "" "Декорована функція все ще залишається **функцією**. Отже, його можна " "прикрашати ще раз, і ще, і ще..." -#: ../../src/basics/decorators.txt:248 +#: ../../src/basics/decorators.txt:253 msgid "" "\"Wrapper\" is the alternative nickname for the Decorator pattern that " "clearly expresses the main idea of the pattern. A wrapper is an object that " @@ -225,11 +252,11 @@ msgstr "" "результат, зробивши щось до або після того, як вона передає запит цільовому " "об'єкту." -#: ../../src/basics/decorators.txt:256 +#: ../../src/basics/decorators.txt:261 msgid "Passing arguments to the wrapper" msgstr "Передача аргументів до wrapper" -#: ../../src/basics/decorators.txt:258 +#: ../../src/basics/decorators.txt:263 msgid "" "Until now the examples use *simple* decorators. But what if the decorated " "function gets some arguments? This will cause ``TypeError`` exception that " @@ -241,7 +268,7 @@ msgstr "" "повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " "аргументи внутрішній функції ``wrapper``." -#: ../../src/basics/decorators.txt:284 +#: ../../src/basics/decorators.txt:289 msgid "" "If case you're trying to make a generic decorator, you may pass ``*args`` " "and ``**kwargs`` instead of exact arguments:" @@ -249,11 +276,11 @@ msgstr "" "Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " "``*args`` і ``**kwargs`` замість точних аргументів:" -#: ../../src/basics/decorators.txt:303 +#: ../../src/basics/decorators.txt:308 msgid "Passing arguments to decorator" msgstr "Передача аргументів декоратору" -#: ../../src/basics/decorators.txt:305 +#: ../../src/basics/decorators.txt:310 msgid "" "At last it's time to know how to pass arguments to the decorator. Here is a " "simple implementation of ``defer`` decorator which deferred the function " @@ -263,11 +290,11 @@ msgstr "" "реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " "час:" -#: ../../src/basics/decorators.txt:348 +#: ../../src/basics/decorators.txt:353 msgid "Class decorators" msgstr "Декоратори класів" -#: ../../src/basics/decorators.txt:350 +#: ../../src/basics/decorators.txt:355 msgid "" "There are some pre-defined decorators exists for usage together with " "classes. They are:" @@ -275,19 +302,19 @@ msgstr "" "Існують деякі попередньо визначені декоратори для використання разом із " "класами. Це:" -#: ../../src/basics/decorators.txt:353 +#: ../../src/basics/decorators.txt:358 msgid "``classmethod``" msgstr "``classmethod``" -#: ../../src/basics/decorators.txt:354 +#: ../../src/basics/decorators.txt:359 msgid "``staticmethod``" msgstr "``staticmethod``" -#: ../../src/basics/decorators.txt:355 +#: ../../src/basics/decorators.txt:360 msgid "``property``" msgstr "``property``" -#: ../../src/basics/decorators.txt:357 +#: ../../src/basics/decorators.txt:362 msgid "" "If you develop an intuitive understanding for their differences you'll be " "able to write object-oriented Python that communicates its intent more " @@ -299,11 +326,11 @@ msgstr "" "який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" "methods-demystified`." -#: ../../src/basics/decorators.txt:363 +#: ../../src/basics/decorators.txt:368 msgid "Class methods" msgstr "Методи класу" -#: ../../src/basics/decorators.txt:365 +#: ../../src/basics/decorators.txt:370 msgid "" "Instead of accepting a ``self`` parameter, class methods take a ``cls`` " "parameter that points to the class — and not the object instance — when the " @@ -313,7 +340,7 @@ msgstr "" "класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " "класу." -#: ../../src/basics/decorators.txt:369 +#: ../../src/basics/decorators.txt:374 msgid "" "Because the class method only has access to this ``cls`` argument, it can't " "modify object instance state. That would require access to ``self``. " @@ -325,18 +352,18 @@ msgstr "" "методи класу все ще можуть змінювати стан класу, який застосовується до всіх " "екземплярів класу." -#: ../../src/basics/decorators.txt:374 +#: ../../src/basics/decorators.txt:379 msgid "" "The common usage for ``classmethod`` is provide alternative initializers." msgstr "" "Загальним використанням ``методи класу`` є надання альтернативних " "ініціалізаторів." -#: ../../src/basics/decorators.txt:377 +#: ../../src/basics/decorators.txt:382 msgid "Static methods" msgstr "Статичні методи" -#: ../../src/basics/decorators.txt:379 +#: ../../src/basics/decorators.txt:384 msgid "" "This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " "course it's free to accept an arbitrary number of other parameters)." @@ -344,7 +371,7 @@ msgstr "" "Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " "він може приймати будь-яку кількість інших параметрів)." -#: ../../src/basics/decorators.txt:382 +#: ../../src/basics/decorators.txt:387 msgid "" "Therefore a static method can neither modify object state nor class state. " "Static methods are restricted in what data they can access - and they're " @@ -354,7 +381,7 @@ msgstr "" "Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " "і вони, перш за все, є способом простору імен ваших методів." -#: ../../src/basics/decorators.txt:386 +#: ../../src/basics/decorators.txt:391 msgid "" "It's tricky to explain ``staticmethod`` usage. Almost always you can create " "a dedicated function instead of static method. But sometimes you need to " @@ -366,11 +393,11 @@ msgstr "" "потрібно прив'язати до класу певну логіку, незалежну від самого класу або " "його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." -#: ../../src/basics/decorators.txt:392 +#: ../../src/basics/decorators.txt:397 msgid "Properties" msgstr "Властивості" -#: ../../src/basics/decorators.txt:394 +#: ../../src/basics/decorators.txt:399 msgid "" "It's a way to bind a method name to access it as an attribute. Properties " "are **read-only** by default. This means a value cannot be assigned to " @@ -380,15 +407,23 @@ msgstr "" "замовчуванням властивості доступні **лише для читання**. Це означає, що " "значення не можна призначити ``члену властивості``." -#: ../../src/basics/decorators.txt:399 +#: ../../src/basics/decorators.txt:404 msgid "Some examples" msgstr "Деякі приклади" -#: ../../src/basics/exceptions.txt:6 +#: ../../src/basics/exceptions.txt:-1 +msgid "Handling exceptions in Python" +msgstr "Опрацювання винятків в Python" + +#: ../../src/basics/exceptions.txt:-1 +msgid "python, exceptions, handling, try, except, finally" +msgstr "python, exceptions, handling, try, except, finally" + +#: ../../src/basics/exceptions.txt:11 msgid "Errors and Exceptions" msgstr "Помилки та винятки" -#: ../../src/basics/exceptions.txt:8 +#: ../../src/basics/exceptions.txt:13 msgid "" "There are (at least) two distinguishable kinds of errors: *syntax errors* " "and *exceptions* :cite:`docs-python:errors`." @@ -396,15 +431,15 @@ msgstr "" "Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" "cite:`docs-python:errors`." -#: ../../src/basics/exceptions.txt:12 +#: ../../src/basics/exceptions.txt:17 msgid "Syntax errors" msgstr "Синтаксичні помилки" -#: ../../src/basics/exceptions.txt:14 +#: ../../src/basics/exceptions.txt:19 msgid "Syntax errors are also known as parsing errors." msgstr "Синтаксичні помилки також відомі як помилки Python парсера." -#: ../../src/basics/exceptions.txt:24 +#: ../../src/basics/exceptions.txt:29 msgid "" "The parser repeats the offending line and displays a little \"arrow\" " "pointing at the earliest point in the line where the error was detected. The " @@ -414,11 +449,11 @@ msgstr "" "\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " "Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." -#: ../../src/basics/exceptions.txt:29 +#: ../../src/basics/exceptions.txt:34 msgid "Exceptions" msgstr "Винятки" -#: ../../src/basics/exceptions.txt:31 +#: ../../src/basics/exceptions.txt:36 msgid "" "Even if a statement or expression is syntactically correct, it may cause an " "error when an attempt is made to execute it. Errors detected during " @@ -430,18 +465,18 @@ msgstr "" "називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " "обробляти в програмах на Python." -#: ../../src/basics/exceptions.txt:36 +#: ../../src/basics/exceptions.txt:41 msgid "" "Exceptions come in different types, and the type is printed as part of the " "message." msgstr "" "Винятки бувають різних типів, і тип друкується як частина повідомлення." -#: ../../src/basics/exceptions.txt:39 +#: ../../src/basics/exceptions.txt:44 msgid "For example, the ``div`` function implemented as" msgstr "Наприклад, функція ``div``, реалізована як" -#: ../../src/basics/exceptions.txt:48 +#: ../../src/basics/exceptions.txt:53 msgid "" "may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " "parameter." @@ -449,30 +484,30 @@ msgstr "" "може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " "``y``." -#: ../../src/basics/exceptions.txt:51 +#: ../../src/basics/exceptions.txt:56 msgid "" "Standard exception names are built-in identifiers (not reserved keywords)." msgstr "" "Стандартні назви винятків є вбудованими ідентифікаторами (а не " "зарезервованими ключовими словами)." -#: ../../src/basics/exceptions.txt:53 +#: ../../src/basics/exceptions.txt:58 msgid "The list of `built-in exceptions`_" msgstr "Список `вбудованих винятків`_" -#: ../../src/basics/exceptions.txt:56 +#: ../../src/basics/exceptions.txt:61 msgid "Tracebacks" msgstr "Відстеження" -#: ../../src/basics/exceptions.txt:58 +#: ../../src/basics/exceptions.txt:63 msgid "\"File\" is replaced with a *dummy string* within the examples." msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." -#: ../../src/basics/exceptions.txt:60 +#: ../../src/basics/exceptions.txt:65 msgid "Let's assume the following modules structure:" msgstr "Припустимо наступну структуру модулів:" -#: ../../src/basics/exceptions.txt:68 +#: ../../src/basics/exceptions.txt:73 msgid "" "The **main** module imports a ``div`` function implemented above from the " "**func** module. The code in main is implemented as follows:" @@ -480,7 +515,7 @@ msgstr "" "Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " "**func**. Основний код реалізовано наступним чином:" -#: ../../src/basics/exceptions.txt:80 +#: ../../src/basics/exceptions.txt:85 msgid "" "While running the code with correct inputs it will work fine. But there are " "at two exceptions for this script." @@ -488,7 +523,7 @@ msgstr "" "Під час виконання коду з правильними введеннями він працюватиме нормально. " "Але для цього сценарію є два винятки." -#: ../../src/basics/exceptions.txt:83 +#: ../../src/basics/exceptions.txt:88 msgid "" "The first one is related on type conversion. While running the main script " "there is case of invalid input." @@ -496,7 +531,7 @@ msgstr "" "Перший пов'язаний з перетворенням типів. Під час виконання основного " "сценарію є випадок неправильного введення." -#: ../../src/basics/exceptions.txt:95 +#: ../../src/basics/exceptions.txt:100 msgid "" "Note the **traceback** indicates the module and the exact line of code that " "causes the exception." @@ -504,7 +539,7 @@ msgstr "" "Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " "викликає виняток." -#: ../../src/basics/exceptions.txt:98 +#: ../../src/basics/exceptions.txt:103 msgid "" "The second one exception occurs when a 0 is passed as the second parameter " "to ``div`` function. The traceback would look like:" @@ -512,18 +547,18 @@ msgstr "" "Другий виняток виникає, коли 0 передається як другий параметр функції " "``div``. Трасування виглядатиме так:" -#: ../../src/basics/exceptions.txt:112 +#: ../../src/basics/exceptions.txt:117 msgid "" "The traceback indicates all calls (top to bottom) that cause an exception." msgstr "" "Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " "виняток." -#: ../../src/basics/exceptions.txt:115 ../../src/basics/syntax.txt +#: ../../src/basics/exceptions.txt:120 ../../src/basics/syntax.txt msgid "Exception handling" msgstr "Обробка винятків" -#: ../../src/basics/exceptions.txt:117 +#: ../../src/basics/exceptions.txt:122 msgid "" "It is possible to write programs that handle selected exceptions. The " "``try`` statement is used to do that." @@ -531,11 +566,11 @@ msgstr "" "Можна писати програми, які оброблятимуть вибрані винятки. Для цього " "використовується інструкція ``try``." -#: ../../src/basics/exceptions.txt:120 +#: ../../src/basics/exceptions.txt:125 msgid "The try statement works as follows." msgstr "Інструкція try працює наступним чином." -#: ../../src/basics/exceptions.txt:122 +#: ../../src/basics/exceptions.txt:127 msgid "" "First, the try clause (the statement(s) between the try and except keywords) " "is executed." @@ -543,7 +578,7 @@ msgstr "" "Спочатку виконується речення try (вираз(и) між ключовими словами try і " "except)." -#: ../../src/basics/exceptions.txt:124 +#: ../../src/basics/exceptions.txt:129 msgid "" "If no exception occurs, the except clause is skipped and execution of the " "try statement is finished." @@ -551,7 +586,7 @@ msgstr "" "Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " "оператора try завершується." -#: ../../src/basics/exceptions.txt:126 +#: ../../src/basics/exceptions.txt:131 msgid "" "If an exception occurs during execution of the try clause, the rest of the " "clause is skipped. Then, if its type matches the exception named after the " @@ -563,7 +598,7 @@ msgstr "" "osim, виконується пропозиція, а потім виконання продовжується після блоку " "try/except." -#: ../../src/basics/exceptions.txt:130 +#: ../../src/basics/exceptions.txt:135 msgid "" "If an exception occurs which does not match the exception named in the " "except clause, it is passed on to outer try statements; if no handler is " @@ -575,7 +610,7 @@ msgstr "" "знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " "повідомленням, як показано вище." -#: ../../src/basics/exceptions.txt:147 +#: ../../src/basics/exceptions.txt:152 msgid "" "A try statement may have more than one except clause, to specify handlers " "for different exceptions." @@ -583,15 +618,15 @@ msgstr "" "Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " "різних винятків." -#: ../../src/basics/exceptions.txt:177 +#: ../../src/basics/exceptions.txt:182 msgid "Handling ALL exception" msgstr "Опрацювання усіх винятків" -#: ../../src/basics/exceptions.txt:179 +#: ../../src/basics/exceptions.txt:184 msgid "It's a bad practice to handle **all** exceptions." msgstr "Обробляти **всі** винятки – це погана практика." -#: ../../src/basics/exceptions.txt:181 +#: ../../src/basics/exceptions.txt:186 msgid "" "When indicating an ``except`` block without specifying an exception to catch " "it will work for any exception, that occurs in ``try`` block. The same is " @@ -603,7 +638,7 @@ msgstr "" "стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " "можливо сказати, який саме виняток стався." -#: ../../src/basics/exceptions.txt:186 +#: ../../src/basics/exceptions.txt:191 msgid "" "However, this scenario may work for logging an exception and raising it " "again to be handled on upper levels." @@ -611,7 +646,7 @@ msgstr "" "Проте, такий сценарій може працювати для логування винятків, після чого вони " "підійматься заново, щоб бути опрацьованими на вищих рівнях програми." -#: ../../src/basics/exceptions.txt:208 +#: ../../src/basics/exceptions.txt:213 msgid "" "All exceptions are inherited from ``Exception`` class, which is subclass of " "``BaseException``. So, you can never know what exactly goes wrong with your " @@ -621,11 +656,11 @@ msgstr "" "``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " "вашим кодом." -#: ../../src/basics/exceptions.txt:213 +#: ../../src/basics/exceptions.txt:218 msgid "``finally`` statement" msgstr "Вираз ``finally``" -#: ../../src/basics/exceptions.txt:215 +#: ../../src/basics/exceptions.txt:220 msgid "" "The ``try`` statement cannot be used itself. This will cause " "``SyntaxError``. Either ``except`` or ``finally`` block is required to be " @@ -634,7 +669,7 @@ msgstr "" "Оператор ``try`` не може бути використаний сам по собі. Це спричинить " "``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." -#: ../../src/basics/exceptions.txt:218 +#: ../../src/basics/exceptions.txt:223 msgid "" "While the ``except`` block tries to catch the exceptions if any, the " "``finally`` block will be always executed regardless of the exception occurs." @@ -642,11 +677,11 @@ msgstr "" "У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " "блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." -#: ../../src/basics/exceptions.txt:244 +#: ../../src/basics/exceptions.txt:249 msgid "``else`` statement" msgstr "Вираз ``else``" -#: ../../src/basics/exceptions.txt:246 +#: ../../src/basics/exceptions.txt:251 msgid "" "The ``try`` statement can also use ``else`` (which is optional). The " "statements within this block will be execute only in case there were no " @@ -656,11 +691,11 @@ msgstr "" "необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " "якщо під час виконання ``try`` не було викликано винятків." -#: ../../src/basics/exceptions.txt:268 +#: ../../src/basics/exceptions.txt:273 msgid "Raising exceptions" msgstr "Винятки: raising" -#: ../../src/basics/exceptions.txt:270 +#: ../../src/basics/exceptions.txt:275 msgid "" "The ``raise`` statement allows the programmer to force a specified exception " "to occur. The sole argument to raise indicates the exception to be raised. " @@ -676,7 +711,7 @@ msgstr "" "його підкласів). Якщо передано клас винятків, він буде неявно створений " "шляхом виклику його конструктора без аргументів." -#: ../../src/basics/exceptions.txt:282 +#: ../../src/basics/exceptions.txt:287 msgid "" "``raise`` statement itself will re-raise all the exceptions within the " "context. Also exceptions can be raised again from the ``except`` block. It's " @@ -687,11 +722,11 @@ msgstr "" "загальний шаблон для перехоплення винятку для реєстрації повідомлення про " "виняткову ситуацію і повторного його підняття." -#: ../../src/basics/exceptions.txt:295 +#: ../../src/basics/exceptions.txt:300 msgid "Creating custom exceptions" msgstr "Створення винятків" -#: ../../src/basics/exceptions.txt:297 +#: ../../src/basics/exceptions.txt:302 msgid "" "Programs may name their own exceptions by creating a new exception class. " "Exceptions should typically be derived from the Exception class, either " @@ -701,7 +736,7 @@ msgstr "" "Винятки зазвичай мають бути похідними від класу Exception, прямо чи " "опосередковано." -#: ../../src/basics/exceptions.txt:301 +#: ../../src/basics/exceptions.txt:306 msgid "" "Exception classes can be defined which do anything any other class can do, " "but are usually kept simple, often only offering a number of attributes that " @@ -712,7 +747,7 @@ msgstr "" "інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " "які дозволяють обробникам витягувати інформацію про помилку для винятку." -#: ../../src/basics/exceptions.txt:306 +#: ../../src/basics/exceptions.txt:311 msgid "" "Most exceptions are defined with names that end in \"Error\", similar to the " "naming of the standard exceptions." @@ -720,7 +755,7 @@ msgstr "" "Більшість винятків визначено з іменами, які закінчуються на \"Error\", " "подібно до назв стандартних винятків." -#: ../../src/basics/exceptions.txt:309 +#: ../../src/basics/exceptions.txt:314 msgid "" "Many standard modules define their own exceptions to report errors that may " "occur in functions they define." @@ -728,31 +763,71 @@ msgstr "" "Багато стандартних модулів визначають власні винятки, щоб повідомляти про " "помилки, які можуть виникнути у функціях, які вони визначають." -#: ../../src/basics/exceptions.txt:312 +#: ../../src/basics/exceptions.txt:317 msgid "User-defined exception" msgstr "Виняток, визначений користувачем" -#: ../../src/basics/functions.txt:3 ../../src/basics/syntax.txt +#: ../../src/basics/functions.txt:-1 +msgid "Python functions" +msgstr "Функції в Python" + +#: ../../src/basics/functions.txt:-1 +msgid "python, basics, functions" +msgstr "python, basics, functions" + +#: ../../src/basics/functions.txt:8 ../../src/basics/syntax.txt msgid "Functions" msgstr "Функції" -#: ../../src/basics/index.txt:3 +#: ../../src/basics/index.txt:-1 +msgid "Python course - Basics" +msgstr "Курс Python - Основи" + +#: ../../src/basics/index.txt:-1 +msgid "python, basics, index" +msgstr "python, basics, index" + +#: ../../src/basics/index.txt:8 msgid "Python Basics" msgstr "Основи Python" -#: ../../src/basics/modules.txt:3 +#: ../../src/basics/modules.txt:-1 +msgid "Modules and imports in Python" +msgstr "Модулі та імпорти в Pythons" + +#: ../../src/basics/modules.txt:-1 +msgid "python, basics, modules, import" +msgstr "python, basics, modules, import" + +#: ../../src/basics/modules.txt:8 msgid "Pythons Modules and Imports" msgstr "Модулі та імпорт Pythons" -#: ../../src/basics/pep8.txt:3 +#: ../../src/basics/pep8.txt:-1 +msgid "PEP-8 style guide" +msgstr "Керівництво по стилю PEP8" + +#: ../../src/basics/pep8.txt:-1 +msgid "python, style, guide" +msgstr "python, style, guide" + +#: ../../src/basics/pep8.txt:8 msgid "Style Guides: PEP8" msgstr "Керівництво по стилю: PEP8" -#: ../../src/basics/stdtypes.txt:3 +#: ../../src/basics/stdtypes.txt:-1 +msgid "Python built-in types" +msgstr "Вбудовані типи даних в Python" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "python, basics" +msgstr "python, basics" + +#: ../../src/basics/stdtypes.txt:8 msgid "Built-in Types" msgstr "Вбудовані типи" -#: ../../src/basics/stdtypes.txt:5 +#: ../../src/basics/stdtypes.txt:10 msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " "instances and exceptions :cite:`docs-python:stdtypes`. This section covers " @@ -764,11 +839,11 @@ msgstr "" "найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " "власних тем." -#: ../../src/basics/stdtypes.txt:11 +#: ../../src/basics/stdtypes.txt:16 msgid "Numeric types" msgstr "Числові типи" -#: ../../src/basics/stdtypes.txt:13 +#: ../../src/basics/stdtypes.txt:18 msgid "" "There are 3 distinct numeric types: *integers*, *floating point numbers*, " "and *complex numbers*. In addition, Booleans are a subtype of integers. " @@ -782,7 +857,7 @@ msgstr "" "через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " "кожна з яких є числом з плаваючою комою." -#: ../../src/basics/stdtypes.txt:19 +#: ../../src/basics/stdtypes.txt:24 msgid "" "Numbers are created by numeric literals or as the result of built-in " "functions and operators. Unadorned integer literals (including hex, octal " @@ -801,113 +876,113 @@ msgstr "" "до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " "з дійсною та уявною частинами." -#: ../../src/basics/stdtypes.txt:28 +#: ../../src/basics/stdtypes.txt:33 msgid "Supported operations" msgstr "Операції підтримки" -#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:199 +#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:204 msgid "Operation" msgstr "Операції" -#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:199 +#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:204 msgid "Result" msgstr "Результат" -#: ../../src/basics/stdtypes.txt:33 +#: ../../src/basics/stdtypes.txt:38 msgid "``x + y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:33 +#: ../../src/basics/stdtypes.txt:38 msgid "sum of *x* and *y*" msgstr "сума *x* і *y*" -#: ../../src/basics/stdtypes.txt:35 +#: ../../src/basics/stdtypes.txt:40 msgid "``x - y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:35 +#: ../../src/basics/stdtypes.txt:40 msgid "difference of *x* and *y*" msgstr "різниця між *x* і *y*" -#: ../../src/basics/stdtypes.txt:37 +#: ../../src/basics/stdtypes.txt:42 msgid "``x * y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:37 +#: ../../src/basics/stdtypes.txt:42 msgid "product of *x* and *y*" msgstr "добуток *x* і *y*" -#: ../../src/basics/stdtypes.txt:39 +#: ../../src/basics/stdtypes.txt:44 msgid "``x / y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:39 +#: ../../src/basics/stdtypes.txt:44 msgid "quotient of *x* and *y*" msgstr "частка *x* і *y*" -#: ../../src/basics/stdtypes.txt:41 +#: ../../src/basics/stdtypes.txt:46 msgid "``x // y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:41 +#: ../../src/basics/stdtypes.txt:46 msgid "floored quotient of *x* and *y*" msgstr "цілочисельне ділення *x* і *y*" -#: ../../src/basics/stdtypes.txt:43 +#: ../../src/basics/stdtypes.txt:48 msgid "``x % y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:43 +#: ../../src/basics/stdtypes.txt:48 msgid "remainder of ``x / y``" msgstr "залишок від ділення``x / y``" -#: ../../src/basics/stdtypes.txt:45 +#: ../../src/basics/stdtypes.txt:50 msgid "``-x``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:45 +#: ../../src/basics/stdtypes.txt:50 msgid "*x* negated" msgstr "*x* від'ємне" -#: ../../src/basics/stdtypes.txt:47 +#: ../../src/basics/stdtypes.txt:52 msgid "``+x``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:47 +#: ../../src/basics/stdtypes.txt:52 msgid "*y* unchanged" msgstr "*y* без змін" -#: ../../src/basics/stdtypes.txt:49 +#: ../../src/basics/stdtypes.txt:54 msgid "``abs(x)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:49 +#: ../../src/basics/stdtypes.txt:54 msgid "absolute value or magnitude of *x*" msgstr "абсолютне значення або величина *x*" -#: ../../src/basics/stdtypes.txt:51 +#: ../../src/basics/stdtypes.txt:56 msgid "``int(x)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:51 +#: ../../src/basics/stdtypes.txt:56 msgid "*x* converted to integer" msgstr "*x* перетворено на ціле число" -#: ../../src/basics/stdtypes.txt:53 +#: ../../src/basics/stdtypes.txt:58 msgid "``float(x)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:53 +#: ../../src/basics/stdtypes.txt:58 msgid "*x* converted to floating point" msgstr "*x* перетворено на число з плаваючою комою" -#: ../../src/basics/stdtypes.txt:55 +#: ../../src/basics/stdtypes.txt:60 msgid "``complex(re, im)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:55 +#: ../../src/basics/stdtypes.txt:60 msgid "" "a complex number with real part *re*, imaginary part *im*. *im* defaults to " "zero." @@ -915,23 +990,23 @@ msgstr "" "комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " "замовчуванням на нуль." -#: ../../src/basics/stdtypes.txt:58 +#: ../../src/basics/stdtypes.txt:63 msgid "``divmod(x, y)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:58 +#: ../../src/basics/stdtypes.txt:63 msgid "the pair ``(x // y, x % y)``" msgstr "об'єднує ``(x // y, x % y)``" -#: ../../src/basics/stdtypes.txt:60 +#: ../../src/basics/stdtypes.txt:65 msgid "``pow(x, y)`` ``x ** y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:60 +#: ../../src/basics/stdtypes.txt:65 msgid "*x* to the power *y*" msgstr "*x* у степені *y*" -#: ../../src/basics/stdtypes.txt:64 +#: ../../src/basics/stdtypes.txt:69 msgid "" "``x // y`` also referred to as integer division. The resultant value is a " "whole integer, through the result's type is not necessarily int. The result " @@ -941,7 +1016,7 @@ msgstr "" "числом, через тип результату не обов'язково int. Результат завжди " "округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" -#: ../../src/basics/stdtypes.txt:69 +#: ../../src/basics/stdtypes.txt:74 msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " "optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive and " @@ -951,25 +1026,25 @@ msgstr "" "префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " "нескінченність." -#: ../../src/basics/stdtypes.txt:74 +#: ../../src/basics/stdtypes.txt:79 msgid "Code examples" msgstr "Приклади коду" -#: ../../src/basics/stdtypes.txt:76 +#: ../../src/basics/stdtypes.txt:81 msgid "Integer numbers" msgstr "Цілі числа" -#: ../../src/basics/stdtypes.txt:89 +#: ../../src/basics/stdtypes.txt:94 msgid "Floating point numbers" msgstr "Числа з плаваючою комою" -#: ../../src/basics/stdtypes.txt:104 ../../src/basics/stdtypes.txt:177 -#: ../../src/basics/stdtypes.txt:285 ../../src/basics/stdtypes.txt:294 -#: ../../src/basics/stdtypes.txt:323 +#: ../../src/basics/stdtypes.txt:109 ../../src/basics/stdtypes.txt:182 +#: ../../src/basics/stdtypes.txt:290 ../../src/basics/stdtypes.txt:299 +#: ../../src/basics/stdtypes.txt:328 msgid "Value comparisons" msgstr "Порівняння цінностей" -#: ../../src/basics/stdtypes.txt:106 +#: ../../src/basics/stdtypes.txt:111 msgid "" "Numbers of built-in numeric types can be compared within and across their " "types (with the restriction that complex numbers do not support order " @@ -980,7 +1055,7 @@ msgstr "" "обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " "залучених типів вони порівняються математично правильно без втрати точності." -#: ../../src/basics/stdtypes.txt:111 +#: ../../src/basics/stdtypes.txt:116 msgid "" "The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." "Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" @@ -990,11 +1065,11 @@ msgstr "" "спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " "є хибним." -#: ../../src/basics/stdtypes.txt:115 +#: ../../src/basics/stdtypes.txt:120 msgid "Sequence types" msgstr "Типи послідовностей" -#: ../../src/basics/stdtypes.txt:117 +#: ../../src/basics/stdtypes.txt:122 msgid "" "There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " "Additional sequence types tailored for processing of binary data and text " @@ -1004,11 +1079,11 @@ msgstr "" "Додаткові типи послідовностей, призначені для обробки двійкових даних і " "текстових рядків, описані у інших розділах." -#: ../../src/basics/stdtypes.txt:122 +#: ../../src/basics/stdtypes.txt:127 msgid "Lists" msgstr "Списки" -#: ../../src/basics/stdtypes.txt:124 +#: ../../src/basics/stdtypes.txt:129 msgid "" "Lists are mutable sequences, typically used to store collections of items. " "They may be constructed in several ways:" @@ -1017,31 +1092,31 @@ msgstr "" "зберігання колекцій елементів. Вони можуть бути побудовані кількома " "способами:" -#: ../../src/basics/stdtypes.txt:127 +#: ../../src/basics/stdtypes.txt:132 msgid "using a pair of square brackets to denote the empty list: ``[]``" msgstr "" "використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" -#: ../../src/basics/stdtypes.txt:128 +#: ../../src/basics/stdtypes.txt:133 msgid "" "using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" "використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " "b, c]``" -#: ../../src/basics/stdtypes.txt:129 +#: ../../src/basics/stdtypes.txt:134 msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" -#: ../../src/basics/stdtypes.txt:130 +#: ../../src/basics/stdtypes.txt:135 msgid "using the type constructor: ``list()`` or ``list(iterable)``" msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" -#: ../../src/basics/stdtypes.txt:133 +#: ../../src/basics/stdtypes.txt:138 msgid "Tuples" msgstr "Кортежі" -#: ../../src/basics/stdtypes.txt:135 +#: ../../src/basics/stdtypes.txt:140 msgid "" "Tuples are immutable sequences, typically used to store collections of data " "or for cases where an immutable sequence of data is needed (such as allowing " @@ -1053,34 +1128,34 @@ msgstr "" "послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " "``dict``). Вони можуть бути конструйовані декількома способами:" -#: ../../src/basics/stdtypes.txt:140 +#: ../../src/basics/stdtypes.txt:145 msgid "using a pair of parentheses to denote the empty tuple: ``()``" msgstr "" "використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" -#: ../../src/basics/stdtypes.txt:141 +#: ../../src/basics/stdtypes.txt:146 msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" "використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " "c)``" -#: ../../src/basics/stdtypes.txt:142 +#: ../../src/basics/stdtypes.txt:147 msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" -#: ../../src/basics/stdtypes.txt:143 +#: ../../src/basics/stdtypes.txt:148 msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" -#: ../../src/basics/stdtypes.txt:146 +#: ../../src/basics/stdtypes.txt:151 msgid "Common operations" msgstr "Загальні операції" -#: ../../src/basics/stdtypes.txt:151 +#: ../../src/basics/stdtypes.txt:156 msgid "``x in s`` ``x not in s``" msgstr "``x in s`` ``x not in s``" -#: ../../src/basics/stdtypes.txt:151 +#: ../../src/basics/stdtypes.txt:156 msgid "" "``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " "*x*" @@ -1088,35 +1163,35 @@ msgstr "" "``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " "*x*" -#: ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:159 msgid "``s + t``" msgstr "``s + t``" -#: ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:159 msgid "the concatenation of *s* and *t*" msgstr "конкатенація s і t" -#: ../../src/basics/stdtypes.txt:156 +#: ../../src/basics/stdtypes.txt:161 msgid "``s * n``" msgstr "``s * n``" -#: ../../src/basics/stdtypes.txt:156 +#: ../../src/basics/stdtypes.txt:161 msgid "equivalent to adding *s* to itself *n* times" msgstr "еквівалентно додаванню *s* до себе *n* разів" -#: ../../src/basics/stdtypes.txt:158 +#: ../../src/basics/stdtypes.txt:163 msgid "``s[i]``" msgstr "``s[i]``" -#: ../../src/basics/stdtypes.txt:158 +#: ../../src/basics/stdtypes.txt:163 msgid "*i*-th item of *s*, origin 0" msgstr "*i*-й елемент *s*, джерело 0" -#: ../../src/basics/stdtypes.txt:160 +#: ../../src/basics/stdtypes.txt:165 msgid "``s[i:j]`` ``s[i:j:k]``" msgstr "``s[i:j]`` ``s[i:j:k]``" -#: ../../src/basics/stdtypes.txt:160 +#: ../../src/basics/stdtypes.txt:165 msgid "" "slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " "be omitted." @@ -1124,43 +1199,43 @@ msgstr "" "фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " "3) можна опустити." -#: ../../src/basics/stdtypes.txt:163 +#: ../../src/basics/stdtypes.txt:168 msgid "``len(s)``" msgstr "``len(s)``" -#: ../../src/basics/stdtypes.txt:163 +#: ../../src/basics/stdtypes.txt:168 msgid "length of *s*" msgstr "довжина *s*" -#: ../../src/basics/stdtypes.txt:165 +#: ../../src/basics/stdtypes.txt:170 msgid "``min(s)``" msgstr "``min(s)``" -#: ../../src/basics/stdtypes.txt:165 +#: ../../src/basics/stdtypes.txt:170 msgid "smallest item of *s*" msgstr "найменший елемент *s*" -#: ../../src/basics/stdtypes.txt:167 +#: ../../src/basics/stdtypes.txt:172 msgid "``max(s)``" msgstr "``max(s)``" -#: ../../src/basics/stdtypes.txt:167 +#: ../../src/basics/stdtypes.txt:172 msgid "largest item of *s*" msgstr "найбільший елемент *s*" -#: ../../src/basics/stdtypes.txt:169 +#: ../../src/basics/stdtypes.txt:174 msgid "``s.count(x)``" msgstr "``s.count(x)``" -#: ../../src/basics/stdtypes.txt:169 +#: ../../src/basics/stdtypes.txt:174 msgid "total number of occurrences of *x* in *s*" msgstr "загальна кількість входжень *x* у *s*" -#: ../../src/basics/stdtypes.txt:171 +#: ../../src/basics/stdtypes.txt:176 msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -#: ../../src/basics/stdtypes.txt:171 +#: ../../src/basics/stdtypes.txt:176 msgid "" "index of the first occurrence of *x* in *s* at or after index *i* and before " "index *j*" @@ -1168,7 +1243,7 @@ msgstr "" "індекс першого входження *x* у *s* на або після індексу *i* та перед " "індексом *j*" -#: ../../src/basics/stdtypes.txt:179 +#: ../../src/basics/stdtypes.txt:184 msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -1180,7 +1255,7 @@ msgstr "" "типами призводить до нерівності, а впорядковане порівняння цих типів " "викликає ``TypeError``." -#: ../../src/basics/stdtypes.txt:184 +#: ../../src/basics/stdtypes.txt:189 msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " @@ -1192,7 +1267,7 @@ msgstr "" "рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " "таким чином:" -#: ../../src/basics/stdtypes.txt:189 +#: ../../src/basics/stdtypes.txt:194 msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." @@ -1201,7 +1276,7 @@ msgstr "" "мати однакову довжину, і кожна пара відповідних елементів повинна " "порівнюватися." -#: ../../src/basics/stdtypes.txt:191 +#: ../../src/basics/stdtypes.txt:196 msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " @@ -1211,98 +1286,98 @@ msgstr "" "їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " "впорядковується коротша колекція." -#: ../../src/basics/stdtypes.txt:196 +#: ../../src/basics/stdtypes.txt:201 msgid "Mutable sequence types" msgstr "Змінні типи послідовностей" -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:206 msgid "``s[i] = x``" msgstr "``s[i] = x``" -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:206 msgid "item *i* of *s* is replaced by *x*" msgstr "елемент *i* з *s* замінюється на *x*" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:208 msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:208 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" -#: ../../src/basics/stdtypes.txt:206 +#: ../../src/basics/stdtypes.txt:211 msgid "``del s[i:j]``" msgstr "``del s[i:j]``" -#: ../../src/basics/stdtypes.txt:206 +#: ../../src/basics/stdtypes.txt:211 msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:213 msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:213 msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:215 msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:215 msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:217 msgid "``s.append(x)``" msgstr "``s.append(x)``" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:217 msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" -#: ../../src/basics/stdtypes.txt:215 +#: ../../src/basics/stdtypes.txt:220 msgid "``s.clear()``" msgstr "``s.clear()``" -#: ../../src/basics/stdtypes.txt:215 +#: ../../src/basics/stdtypes.txt:220 msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:222 msgid "``s.copy()``" msgstr "``s.copy()``" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:222 msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:224 msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:224 msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" -#: ../../src/basics/stdtypes.txt:222 +#: ../../src/basics/stdtypes.txt:227 msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" -#: ../../src/basics/stdtypes.txt:222 +#: ../../src/basics/stdtypes.txt:227 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" -#: ../../src/basics/stdtypes.txt:225 +#: ../../src/basics/stdtypes.txt:230 msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" -#: ../../src/basics/stdtypes.txt:225 +#: ../../src/basics/stdtypes.txt:230 msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -1310,39 +1385,39 @@ msgstr "" "отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " "пропущено - використовуйте останній доступний індекс)" -#: ../../src/basics/stdtypes.txt:228 +#: ../../src/basics/stdtypes.txt:233 msgid "``s.remove(x)``" msgstr "``s.remove(x)``" -#: ../../src/basics/stdtypes.txt:228 +#: ../../src/basics/stdtypes.txt:233 msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:235 msgid "``s.reverse()``" msgstr "``s.reverse()``" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:235 msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" -#: ../../src/basics/stdtypes.txt:233 +#: ../../src/basics/stdtypes.txt:238 msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" -#: ../../src/basics/stdtypes.txt:234 +#: ../../src/basics/stdtypes.txt:239 msgid "new in Python version 3.3" msgstr "нове у версії Python 3.3" -#: ../../src/basics/stdtypes.txt:237 +#: ../../src/basics/stdtypes.txt:242 msgid "Text sequence type" msgstr "Тип текстової послідовності" -#: ../../src/basics/stdtypes.txt:240 +#: ../../src/basics/stdtypes.txt:245 msgid "String methods" msgstr "Рядкові методи" -#: ../../src/basics/stdtypes.txt:242 +#: ../../src/basics/stdtypes.txt:247 msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." @@ -1350,7 +1425,7 @@ msgstr "" "Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " "методами." -#: ../../src/basics/stdtypes.txt:287 +#: ../../src/basics/stdtypes.txt:292 msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." @@ -1358,11 +1433,11 @@ msgstr "" "Рядки порівнюються лексикографічно з використанням числових кодових точок " "Unicode своїх символів." -#: ../../src/basics/stdtypes.txt:291 +#: ../../src/basics/stdtypes.txt:296 msgid "Set types" msgstr "Типи сетів" -#: ../../src/basics/stdtypes.txt:296 +#: ../../src/basics/stdtypes.txt:301 msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -1376,11 +1451,11 @@ msgstr "" "порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " "підмножини одного іншого, ані надмножини один одного)." -#: ../../src/basics/stdtypes.txt:303 +#: ../../src/basics/stdtypes.txt:308 msgid "Mapping type" msgstr "Тип відображення" -#: ../../src/basics/stdtypes.txt:305 +#: ../../src/basics/stdtypes.txt:310 msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " @@ -1391,7 +1466,7 @@ msgstr "" "відображення, *dictionary*. Якщо кількома словами, то відображення - це " "набори ключів та їхніх значень." -#: ../../src/basics/stdtypes.txt:309 +#: ../../src/basics/stdtypes.txt:314 msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " @@ -1403,15 +1478,15 @@ msgstr "" "``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " "тієї самої словникової статті." -#: ../../src/basics/stdtypes.txt:313 +#: ../../src/basics/stdtypes.txt:318 msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" -#: ../../src/basics/stdtypes.txt:315 +#: ../../src/basics/stdtypes.txt:320 msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" -#: ../../src/basics/stdtypes.txt:316 +#: ../../src/basics/stdtypes.txt:321 msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" @@ -1419,11 +1494,11 @@ msgstr "" "Використовуйте розділений комами список пар ``key: value`` з дужками: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" -#: ../../src/basics/stdtypes.txt:318 +#: ../../src/basics/stdtypes.txt:323 msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" -#: ../../src/basics/stdtypes.txt:319 +#: ../../src/basics/stdtypes.txt:324 msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -1431,7 +1506,7 @@ msgstr "" "Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" -#: ../../src/basics/stdtypes.txt:325 +#: ../../src/basics/stdtypes.txt:330 msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." @@ -1439,15 +1514,23 @@ msgstr "" "Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " "однакові пари ключ-значення." -#: ../../src/basics/stdtypes.txt:328 +#: ../../src/basics/stdtypes.txt:333 msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." -#: ../../src/basics/syntax.txt:3 +#: ../../src/basics/syntax.txt:-1 +msgid "Python syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:-1 +msgid "python, basics, syntax" +msgstr "python, basics, syntax" + +#: ../../src/basics/syntax.txt:8 msgid "Python Syntax" msgstr "Синтаксис Python" -#: ../../src/basics/syntax.txt:5 +#: ../../src/basics/syntax.txt:10 msgid "" "As a natural language like English or Ukrainian has its own rules to write " "down something, programming languages do. This makes them programming " @@ -1457,7 +1540,7 @@ msgstr "" "запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " "мовами програмування." -#: ../../src/basics/syntax.txt:9 +#: ../../src/basics/syntax.txt:14 msgid "" "A programming language syntax is the set of rules and principles that govern " "how code is written and structured in a given programming language. Syntax " @@ -1469,7 +1552,7 @@ msgstr "" "охоплює правила написання операторів, виразів, змінних, типів даних, " "керуючих структур та інших конструкцій, які складають мову." -#: ../../src/basics/syntax.txt:14 +#: ../../src/basics/syntax.txt:19 msgid "" "The syntax of a programming language defines how code is organized and " "interpreted by a compiler or interpreter. It defines the rules for writing " @@ -1481,7 +1564,7 @@ msgstr "" "написання дійсних операторів і виразів, які можуть бути зрозумілі та " "виконані системою виконання мови." -#: ../../src/basics/syntax.txt:19 +#: ../../src/basics/syntax.txt:24 msgid "" "A programming language's syntax is designed to be both readable and " "expressive, allowing programmers to write code that is easy to understand " @@ -1493,7 +1576,7 @@ msgstr "" "змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " "його зручність обслуговування та продуктивність." -#: ../../src/basics/syntax.txt:24 +#: ../../src/basics/syntax.txt:29 msgid "" "Different programming languages have different syntax, with some languages " "being more concise and expressive than others. While syntax is an important " @@ -1507,7 +1590,7 @@ msgstr "" "визначають її легкість у використанні, гнучкість і придатність для різних " "завдань програмування." -#: ../../src/basics/syntax.txt:30 +#: ../../src/basics/syntax.txt:35 msgid "" "In the case of Python, the language's syntax defines how code is written and " "structured in a way that is consistent, readable, and easy to understand. A " @@ -1525,7 +1608,7 @@ msgstr "" msgid "Indentation" msgstr "Відступ" -#: ../../src/basics/syntax.txt:37 +#: ../../src/basics/syntax.txt:42 msgid "" "Python uses whitespace, specifically indentation, to delimit blocks of code, " "such as loops, conditionals, and functions. This means that the indentation " @@ -1539,7 +1622,7 @@ msgstr "" msgid "Statement structure" msgstr "Структура коду" -#: ../../src/basics/syntax.txt:43 +#: ../../src/basics/syntax.txt:48 msgid "" "Python statements are typically written on one line, with the end of the " "line indicating the end of the statement. However, if a statement is too " @@ -1551,11 +1634,11 @@ msgstr "" "поміститися в один рядок, його можна продовжити в кількох рядках, " "використовуючи зворотні похилі риски." -#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:3 +#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:8 msgid "Variables" msgstr "Змінні" -#: ../../src/basics/syntax.txt:49 +#: ../../src/basics/syntax.txt:54 msgid "" "In Python, variables are created automatically when a value is assigned to " "them, and their type is inferred from the value. Variables can be assigned " @@ -1571,7 +1654,7 @@ msgstr "" msgid "Operators" msgstr "Оператори" -#: ../../src/basics/syntax.txt:55 +#: ../../src/basics/syntax.txt:60 msgid "" "Python supports a wide range of operators for performing arithmetic, " "comparison, and logical operations. These include arithmetic operators like " @@ -1587,7 +1670,7 @@ msgstr "" msgid "Control flow" msgstr "Контроль потоку" -#: ../../src/basics/syntax.txt:61 +#: ../../src/basics/syntax.txt:66 msgid "" "Python provides control flow statements like if, else, elif, for, and while " "to control the flow of execution in a program. These statements are used to " @@ -1598,7 +1681,7 @@ msgstr "" "для прийняття рішень, повторення коду або виконання дій на основі заданих " "умов." -#: ../../src/basics/syntax.txt:67 +#: ../../src/basics/syntax.txt:72 msgid "" "In Python, functions are defined using the def keyword and can take " "arguments and return values. The body of a function is defined using a block " @@ -1612,7 +1695,7 @@ msgstr "" msgid "Modules" msgstr "Модулі" -#: ../../src/basics/syntax.txt:72 +#: ../../src/basics/syntax.txt:77 msgid "" "Python has a large library of modules that provide pre-written code for a " "variety of tasks. Modules can be imported into a program using the import " @@ -1622,7 +1705,7 @@ msgstr "" "для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " "оператора імпорту." -#: ../../src/basics/syntax.txt:77 +#: ../../src/basics/syntax.txt:82 msgid "" "Python provides a way to handle errors and exceptions in a program using the " "try, except, else, and finally keywords. These statements allow a program to " @@ -1632,15 +1715,15 @@ msgstr "" "ключових слів try, except, else і finally. Ці оператори дозволяють програмі " "плавно відновлюватися після помилок і продовжувати виконання." -#: ../../src/basics/syntax.txt:81 +#: ../../src/basics/syntax.txt:86 msgid "In few words:" msgstr "У кількох словах:" -#: ../../src/basics/syntax.txt:83 +#: ../../src/basics/syntax.txt:88 msgid "Input/Output example script" msgstr "Приклад сценарію Input/Output" -#: ../../src/basics/syntax.txt:102 +#: ../../src/basics/syntax.txt:107 msgid "" "The code snippet above demonstrates some basics abilities of Python to " "gather data from the user, process it and print out back. Note the words " @@ -1656,7 +1739,7 @@ msgstr "" "необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " "інтерпретатор їх ігнорує." -#: ../../src/basics/syntax.txt:108 +#: ../../src/basics/syntax.txt:113 msgid "" "On the other hand each individual line is the instruction for the " "interpreter to perform some action, like gather inputs, do math, store data " @@ -1666,11 +1749,27 @@ msgstr "" "певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " "збереження даних у пам'яті тощо." -#: ../../src/basics/testing.txt:3 +#: ../../src/basics/testing.txt:-1 +msgid "Testing software in Python" +msgstr "Тестування в Python" + +#: ../../src/basics/testing.txt:-1 +msgid "python, testing, unittest, pytest" +msgstr "python, testing, unittest, pytest" + +#: ../../src/basics/testing.txt:8 msgid "Testing" msgstr "Тестування" -#: ../../src/basics/variables.txt:5 +#: ../../src/basics/variables.txt:-1 +msgid "Variables in programming" +msgstr "Змінні в програмуванні" + +#: ../../src/basics/variables.txt:-1 +msgid "programming, basics, variables" +msgstr "programming, basics, variables" + +#: ../../src/basics/variables.txt:10 msgid "" "In computer science a **variable** is a named storage location in memory " "that can hold a value (*data*). The value stored in a variable can be " @@ -1680,7 +1779,7 @@ msgstr "" "зберігати значення (дані). Значення, яке зберігається у змінній, може бути " "змінено або доступне програмою під час її виконання." -#: ../../src/basics/variables.txt:9 +#: ../../src/basics/variables.txt:14 msgid "" "In Python, variables are created dynamically once a value is assigned to " "them. This makes Python a dynamically typed language, which means that the " @@ -1693,7 +1792,7 @@ msgstr "" "змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " "оголошувати змінну перед її використанням, як у статично типізованих мовах." -#: ../../src/basics/variables.txt:14 +#: ../../src/basics/variables.txt:19 msgid "" "The ability to create variables dynamically and infer their data type makes " "Python code more concise and easier to read. However, it also requires " @@ -1705,7 +1804,7 @@ msgstr "" "пильної уваги до іменування та призначення змінних, щоб уникнути " "неочікуваної поведінки." -#: ../../src/basics/variables.txt:18 +#: ../../src/basics/variables.txt:23 msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " "variable, the portion on the left of the operator is a *variable name* and " @@ -1715,19 +1814,19 @@ msgstr "" "значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " "частина праворуч - це значення, яке призначається для неї." -#: ../../src/basics/variables.txt:22 +#: ../../src/basics/variables.txt:27 msgid "Variable assignment in Python" msgstr "Присвоєння змінної в Python" -#: ../../src/basics/variables.txt:29 +#: ../../src/basics/variables.txt:34 msgid "Variable assignment in Java" msgstr "Присвоєння змінної в Java" -#: ../../src/basics/variables.txt:37 +#: ../../src/basics/variables.txt:42 msgid "Naming" msgstr "Присвоєння назви" -#: ../../src/basics/variables.txt:39 +#: ../../src/basics/variables.txt:44 msgid "" "In Python there are several rules that describe how to name your variables. " "Some of these are requirements and cannot be ignored, others are rather " @@ -1738,33 +1837,33 @@ msgstr "" "них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " "обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" -#: ../../src/basics/variables.txt:44 +#: ../../src/basics/variables.txt:49 msgid "a language keyword (like ``pass``, ``def`` or ``class``)" msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" -#: ../../src/basics/variables.txt:45 +#: ../../src/basics/variables.txt:50 msgid "start with a number (e.g. ``123``, ``1_something``)" msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" -#: ../../src/basics/variables.txt:46 +#: ../../src/basics/variables.txt:51 msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" -#: ../../src/basics/variables.txt:47 +#: ../../src/basics/variables.txt:52 msgid "contain white spaces" msgstr "містити пробіли" -#: ../../src/basics/variables.txt:49 +#: ../../src/basics/variables.txt:54 msgid "Also here are some general recommendation on naming anything:" msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" -#: ../../src/basics/variables.txt:51 +#: ../../src/basics/variables.txt:56 msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" "не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " "42``)" -#: ../../src/basics/variables.txt:52 +#: ../../src/basics/variables.txt:57 msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" "зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" diff --git a/src/_locales/ua/LC_MESSAGES/deploy.po b/src/_locales/ua/LC_MESSAGES/deploy.po new file mode 100644 index 000000000..fb09a6345 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/deploy.po @@ -0,0 +1,38 @@ +# DEPLOYMENT BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:10+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/deploy/index.txt:-1 +msgid "Deploy Python application" +msgstr "Розгортання застосунків Python" + +#: ../../src/deploy/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/deploy/index.txt:-1 +msgid "python, deployment, index" +msgstr "python, deployment, index" + +#: ../../src/deploy/index.txt:8 +msgid "Application Deployment" +msgstr "Розгортання Застосунків" diff --git a/src/_locales/ua/LC_MESSAGES/django.po b/src/_locales/ua/LC_MESSAGES/django.po new file mode 100644 index 000000000..aa6f13549 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# DJANGO BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/django/index.txt:-1 +msgid "Django web-framework" +msgstr "Веб-фреймворк Django" + +#: ../../src/django/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/django/index.txt:-1 +msgid "python, web, django, index" +msgstr "python, web, django, index" + +#: ../../src/django/index.txt:8 +msgid "Django Framework" +msgstr "Фреймворк Django" diff --git a/src/_locales/ua/LC_MESSAGES/flask.po b/src/_locales/ua/LC_MESSAGES/flask.po new file mode 100644 index 000000000..230a47bff --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/flask.po @@ -0,0 +1,38 @@ +# FLASK BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/flask/index.txt:-1 +msgid "Flask web-framework" +msgstr "Веб-фреймворк Flask" + +#: ../../src/flask/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/flask/index.txt:-1 +msgid "python, web, flask, index" +msgstr "python, web, flask, index" + +#: ../../src/flask/index.txt:8 +msgid "Flask Framework" +msgstr "Фреймворк Flask" diff --git a/src/_locales/ua/LC_MESSAGES/index.po b/src/_locales/ua/LC_MESSAGES/index.po new file mode 100644 index 000000000..5303a5129 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/index.po @@ -0,0 +1,34 @@ +# PYTHON TRAINING COURSE TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/index.txt:21 +msgid "Additional materials" +msgstr "Додаткові матеріали" + +#: ../../src/index.txt:5 +msgid "PYTHON TRAINING COURSE" +msgstr "НАВЧАЛЬНИЙ КУРС PYTHON" + +#: ../../src/index.txt:35 +msgid "References" +msgstr "Посилання" diff --git a/src/_locales/ua/LC_MESSAGES/linux.po b/src/_locales/ua/LC_MESSAGES/linux.po new file mode 100644 index 000000000..f2e9099a4 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/linux.po @@ -0,0 +1,38 @@ +# LINUX BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:12+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/linux/index.txt:-1 +msgid "Linux basics for Python developers" +msgstr "Основи Linux для Python розробників" + +#: ../../src/linux/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/linux/index.txt:-1 +msgid "linux, basics, index" +msgstr "linux, basics, index" + +#: ../../src/linux/index.txt:8 +msgid "Linux Basics" +msgstr "Основи Linux" diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/ua/LC_MESSAGES/oop.po index 9ac869a81..63d9c41fc 100644 --- a/src/_locales/ua/LC_MESSAGES/oop.po +++ b/src/_locales/ua/LC_MESSAGES/oop.po @@ -1,14 +1,17 @@ -# OBJECT-ORIENTED PROGRAMMING TOPICS +# OBJECT-ORIENTED PROGRAMMING BLOCK TRANSLATION. # # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. +# +# SERHII HORODILOV +# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 15:34+0300\n" -"PO-Revision-Date: 2023-04-11 15:36+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:08+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,11 +23,25 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/oop/index.txt:3 +#: ../../src/oop/index.txt:-1 +msgid "Object-oriented programming in Python" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:-1 ../../src/oop/inheritance.txt:-1 +#: ../../src/oop/intro.txt:-1 ../../src/oop/patterns.txt:-1 +#: ../../src/oop/solid.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/index.txt:-1 +msgid "python, oop, object-oriented programming, index" +msgstr "python, oop, object-oriented programming, index" + +#: ../../src/oop/index.txt:8 msgid "Object-Oriented Programming" msgstr "Об'єктно-орієнтоване програмування" -#: ../../src/oop/index.txt:5 +#: ../../src/oop/index.txt:10 msgid "" "Object-oriented programming (OOP) is one of the biggest and most important " "subjects in all of programming. It is a method of structuring a program by " @@ -34,15 +51,31 @@ msgstr "" "найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " "шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." -#: ../../src/oop/inheritance.txt:3 +#: ../../src/oop/inheritance.txt:-1 +msgid "Inheritance in Python" +msgstr "Наслідування в Python" + +#: ../../src/oop/inheritance.txt:-1 +msgid "python, inheritance, oop, object-oriented programming" +msgstr "python, inheritance, oop, object-oriented programming" + +#: ../../src/oop/inheritance.txt:8 msgid "Inheritance" msgstr "Наслідування" -#: ../../src/oop/intro.txt:3 +#: ../../src/oop/intro.txt:-1 +msgid "Introduction to OOP" +msgstr "Введення в ООП" + +#: ../../src/oop/intro.txt:-1 +msgid "python, intro, introduction, oop, object-oriented programming" +msgstr "python, intro, introduction, oop, object-oriented programming" + +#: ../../src/oop/intro.txt:8 msgid "Classes and Objects" msgstr "Класи та Об'єкти" -#: ../../src/oop/intro.txt:5 +#: ../../src/oop/intro.txt:10 msgid "" "Conceptually, objects are like the components of a system. Think of a " "program as a factory assembly line of sorts. At each step of the assembly " @@ -54,7 +87,7 @@ msgstr "" "компонент обробляє певний матеріал, остаточно перетворюючи сировину на " "закінчений продукт." -#: ../../src/oop/intro.txt:10 +#: ../../src/oop/intro.txt:15 msgid "" "An object contains data, like the raw or preprocessed materials at each step " "on an assembly line, and behavior, like the action each assembly line " @@ -64,11 +97,11 @@ msgstr "" "кожному кроці складальної лінії, і поведінку, як-от дію, яку виконує кожен " "компонент складальної лінії." -#: ../../src/oop/intro.txt:15 +#: ../../src/oop/intro.txt:20 msgid "Paradigm of Object-Oriented Programming" msgstr "Парадигма Об'єктно-Орієнтованого Програмування" -#: ../../src/oop/intro.txt:17 +#: ../../src/oop/intro.txt:22 msgid "" "Object-oriented programming is a programming paradigm that provides a means " "of structuring programs so that properties and behaviors are bundled " @@ -78,7 +111,7 @@ msgstr "" "засоби структурування програм так, що властивості та поведінка об'єднуються " "в окремі **об'єкти**." -#: ../../src/oop/intro.txt:21 +#: ../../src/oop/intro.txt:26 msgid "" "For instance, an object could represent a person with **properties** like a " "name, age, and address and **behaviors** such as walking, talking, running. " @@ -91,7 +124,7 @@ msgstr "" "список одержувачів, тема , а також тіло та поведінку, як-от додавання " "вкладень і надсилання." -#: ../../src/oop/intro.txt:26 +#: ../../src/oop/intro.txt:31 msgid "" "Put another way, object-oriented programming is an approach for modeling " "concrete, real-world things, like cars, as well as relations between things, " @@ -105,11 +138,11 @@ msgstr "" "моделює сутності реального світу як програмні об'єкти, які мають деякі дані, " "пов'язані з ними та можуть виконувати певні функції." -#: ../../src/oop/intro.txt:34 +#: ../../src/oop/intro.txt:39 msgid "Object-Oriented Programming Concepts" msgstr "Концепції Об'єктно-Орієнтованого Програмування" -#: ../../src/oop/intro.txt:36 +#: ../../src/oop/intro.txt:41 msgid "" "So far, we can discuss the major concepts within the OOP paradigm. And they " "are:" @@ -119,7 +152,7 @@ msgstr "Поки що ми можемо обговорити основні ко msgid "**encapsulation**" msgstr "**інкапсуляція**" -#: ../../src/oop/intro.txt:41 +#: ../../src/oop/intro.txt:46 msgid "" "In OOP refers to the bundling of data with methods that operate that data, " "or restricting of direct access to some of an object's components." @@ -127,7 +160,7 @@ msgstr "" "В ООП означає об'єднання даних із методами, які обробляють ці дані, або " "обмеження прямого доступу до деяких компонентів об'єкта." -#: ../../src/oop/intro.txt:44 +#: ../../src/oop/intro.txt:49 msgid "" "Encapsulation mechanism is often confused with *hiding*. It's not actually " "that encapsulation does, but data hiding is available to us due to the " @@ -141,7 +174,7 @@ msgstr "" msgid "**inheritance**" msgstr "**наслідування**" -#: ../../src/oop/intro.txt:50 +#: ../../src/oop/intro.txt:55 msgid "" "It's a mechanism of basing an object or a class upon another object " "(prototype-based inheritance) or class (class-based inheritance), retaining " @@ -159,7 +192,7 @@ msgstr "" msgid "**polymorphism**" msgstr "**поліморфізм**" -#: ../../src/oop/intro.txt:58 +#: ../../src/oop/intro.txt:63 msgid "" "It's a provision of a single interface to entities of different types or the " "use of a single symbol to represent multiple different types. The concept is " @@ -175,7 +208,7 @@ msgstr "" msgid "**abstraction**" msgstr "**абстракція**" -#: ../../src/oop/intro.txt:65 +#: ../../src/oop/intro.txt:70 msgid "" "The process of removing or generalizing details or attributes in the study " "of objects or systems to focus attention on details of greater importance, " @@ -191,11 +224,11 @@ msgstr "" "неабстрактних об'єктів або систем дослідження є результатом процесу " "абстрагування." -#: ../../src/oop/intro.txt:73 +#: ../../src/oop/intro.txt:78 msgid "Define a Class in Python" msgstr "Визначення Классу в Python" -#: ../../src/oop/intro.txt:75 +#: ../../src/oop/intro.txt:80 msgid "" "Primitive data-structures - like numbers, strings, lists etc. - are designed " "to represent simple pieces of information, such as the cost of a product, " @@ -207,7 +240,7 @@ msgstr "" "назва роману чи чиїсь улюблені кольори. Що, якщо ви бажаєте представити " "складніші речі?" -#: ../../src/oop/intro.txt:80 +#: ../../src/oop/intro.txt:85 msgid "" "For example, let's say you want to track employees in an organization. You " "need to store some basic information about each employee. Let's start from a " @@ -219,7 +252,7 @@ msgstr "" "Давайте почнемо з самого початку та спробуємо представити окремого " "працівника як групу змінних:" -#: ../../src/oop/intro.txt:90 +#: ../../src/oop/intro.txt:95 msgid "" "This approach has number of issues. Once it's required to store information " "for more that one person, you are to create another set of variables: " @@ -233,11 +266,11 @@ msgstr "" "тому, що ці частини даних не мають жодного відношення одна до одної. Давайте " "спробуємо використати ``список`` для цієї мети:" -#: ../../src/oop/intro.txt:101 +#: ../../src/oop/intro.txt:106 msgid "There are number of issues with this approach as well." msgstr "З цим підходом також виникає ряд проблем." -#: ../../src/oop/intro.txt:103 +#: ../../src/oop/intro.txt:108 msgid "" "First, it can make larger code files more difficult to manage. If you " "reference ``serhii[0]`` several lines away from where ``serhii`` list is " @@ -249,7 +282,7 @@ msgstr "" "``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я \" \"особи? " "Звичайно, ви можете використовувати структуру ``dict``, але..." -#: ../../src/oop/intro.txt:108 +#: ../../src/oop/intro.txt:113 msgid "" "Second, it can introduce errors if not every person has the same number of " "properties." @@ -257,7 +290,7 @@ msgstr "" "По-друге, це може призвести до помилок, якщо не кожна особа має однакову " "кількість властивостей." -#: ../../src/oop/intro.txt:111 +#: ../../src/oop/intro.txt:116 msgid "" "A great way to make this type of code more manageable and more maintainable " "is to use **classes**." @@ -265,7 +298,7 @@ msgstr "" "Чудовий спосіб зробити цей тип коду більш керованим і придатним для " "обслуговування - це використання **класів**." -#: ../../src/oop/intro.txt:114 +#: ../../src/oop/intro.txt:119 msgid "" "All classes definitions in Python start with the keyword ``class``, which is " "followed by the name of the class and a colon. Any code that is indented " @@ -275,11 +308,11 @@ msgstr "" "яким йдуть ім'я класу та двокрапка. Будь-який код, який має відступ під " "визначенням класу, вважається частиною тіла класу." -#: ../../src/oop/intro.txt:124 +#: ../../src/oop/intro.txt:129 msgid "Classes vs Instances" msgstr "Класи та Екземпляри Класу" -#: ../../src/oop/intro.txt:126 +#: ../../src/oop/intro.txt:131 msgid "" "Classes are used to create user-defined data structures. As it was mentioned " "above OOP is about bundling data and behaviors. Classes define data " @@ -295,7 +328,7 @@ msgstr "" "називаються методами, які ідентифікують поведінку та дії, які об'єкт, " "створений з класу, може виконувати зі своїми даними." -#: ../../src/oop/intro.txt:142 +#: ../../src/oop/intro.txt:147 msgid "" "A class is a blueprint for how something should be defined. It doesn't " "actually contain any data. The person class above specifies that " @@ -307,7 +340,7 @@ msgstr "" "``last_name`` об'єднані в цей класу, але насправді він не містить імені " "людини." -#: ../../src/oop/intro.txt:147 +#: ../../src/oop/intro.txt:152 msgid "" "While classes are blueprints, an **instance** is an **object** that is built " "from a form has been filled out with information. Just like many people can " @@ -319,11 +352,11 @@ msgstr "" "ту саму форму своєю унікальною інформацією, багато екземплярів можуть бути " "створений з одного класу." -#: ../../src/oop/intro.txt:165 +#: ../../src/oop/intro.txt:170 msgid "Methods" msgstr "Методи" -#: ../../src/oop/intro.txt:167 +#: ../../src/oop/intro.txt:172 msgid "" "A function bundled within a class is called **method**. There are several " "ways to define a class method. For now it's needed to know, that each method " @@ -336,11 +369,11 @@ msgstr "" "спеціальний аргумент у першій позиції. Цей аргумент є посилання на реальний " "об'єкт. За домовленістю цей аргумент називається ``self``." -#: ../../src/oop/intro.txt:187 +#: ../../src/oop/intro.txt:192 msgid "Initializing Instance with Data" msgstr "Ініціалізація Екземпляру з Даними" -#: ../../src/oop/intro.txt:189 +#: ../../src/oop/intro.txt:194 msgid "" "There are several methods surrounded with double underscores " "(``__method__``) that are called **dunder methods** or **magic methods**. " @@ -353,7 +386,7 @@ msgstr "" "ці методи в майбутньому. Наразі можна використовувати лише один із цих " "спеціальних методів: ``__init__``. Він ініціалізує примірник певними даними." -#: ../../src/oop/intro.txt:223 +#: ../../src/oop/intro.txt:228 msgid "" "Note, this call definition has a property called ``programming_language`` " "defined outside of the ``__init__`` method. This property is shared across " @@ -363,11 +396,11 @@ msgstr "" "``programming_language``, визначену за межами методу ``__init__``. Ця " "властивість є спільною для всіх екземплярів класу." -#: ../../src/oop/intro.txt:228 +#: ../../src/oop/intro.txt:233 msgid "Some More Details on ``self``" msgstr "Дещо Більше про ``self``" -#: ../../src/oop/intro.txt:230 +#: ../../src/oop/intro.txt:235 msgid "" "``self`` is nothing except the convention. Instance methods will receive a " "pointer to the instance itself as the first argument. In two words: it is " @@ -385,11 +418,11 @@ msgstr "" "студента містить дані та методи, пов'язані з одним студентом. ``self`` є " "посиланням саме на цей об'єкт." -#: ../../src/oop/intro.txt:239 +#: ../../src/oop/intro.txt:244 msgid "Data Hiding" msgstr "Приховання Даних" -#: ../../src/oop/intro.txt:241 +#: ../../src/oop/intro.txt:246 msgid "" "Many programming languages has *access modifiers* implemented. The Python " "has also." @@ -397,7 +430,7 @@ msgstr "" "У багатьох мовах програмування реалізовані *модифікатори доступу*. Python " "також має." -#: ../../src/oop/intro.txt:247 +#: ../../src/oop/intro.txt:252 msgid "" "\"Private\" instance variables that cannot be accessed except from inside an " "object don't exist in Python :cite:`docs-python:private-variables`. It's " @@ -407,7 +440,7 @@ msgstr "" "зсередини об’єкта, не існують у Python :cite:`docs-python:private-" "variables`. Це реалізовано на рівні домовленності." -#: ../../src/oop/intro.txt:251 +#: ../../src/oop/intro.txt:256 msgid "" "A name prefixed with an underscore (e.g. ``_spam``) should be treated as a " "non-public part of the API (whether it is a function, a method or a data " @@ -419,7 +452,7 @@ msgstr "" "даних). Вони не повинні використовуватися поза межами самого класу та можуть " "бути змінені без попередження." -#: ../../src/oop/intro.txt:256 +#: ../../src/oop/intro.txt:261 msgid "" "Since there is a valid use case for class-private members (namely to avoid " "name clashes of names with names defined by subclasses), there is limited " @@ -435,15 +468,15 @@ msgstr "" "(наприклад, ``__spam``) текстово замінюється на ``_classname__spam``, де " "``_classname`` є поточною назвою класу з видаленням підкреслення на початку." -#: ../../src/oop/intro.txt:295 +#: ../../src/oop/intro.txt:300 msgid "Few Words about Inheritance" msgstr "Кілька Слів про Наслідування" -#: ../../src/oop/intro.txt:297 +#: ../../src/oop/intro.txt:302 msgid "Just in two words. This topic is discovered in the future articles." msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." -#: ../../src/oop/intro.txt:299 +#: ../../src/oop/intro.txt:304 msgid "" "You can derive your classes from a super class. Derived classes are called " "*sub classes* and the class used to inherit from is called *super class*. " @@ -455,15 +488,15 @@ msgstr "" "*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " "вони не є поширеними ( це особиста думка автора)." -#: ../../src/oop/intro.txt:304 +#: ../../src/oop/intro.txt:309 msgid "Just put a super class in parenthesis two inherit from it:" msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" -#: ../../src/oop/intro.txt:316 +#: ../../src/oop/intro.txt:321 msgid "Few Words about Polymorphism" msgstr "Кілька Слів про Поліморфізм" -#: ../../src/oop/intro.txt:318 +#: ../../src/oop/intro.txt:323 msgid "" "You've already use this. The most simple explanation is **addition " "operator**. For different types of data it would produce different types of " @@ -472,7 +505,7 @@ msgstr "" "Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " "Для різних типів даних він створюватиме різні типи виводу:" -#: ../../src/oop/intro.txt:326 +#: ../../src/oop/intro.txt:331 msgid "" "For example you may have various classes inherited from a base class, that " "provides a common interface, but each derived class may implement the method " @@ -482,11 +515,33 @@ msgstr "" "який забезпечує загальний інтерфейс, але кожен похідний клас може " "реалізовувати метод по-своєму." -#: ../../src/oop/patterns.txt:3 +#: ../../src/oop/patterns.txt:-1 +msgid "Design patterns" +msgstr "Патерни проектування" + +#: ../../src/oop/patterns.txt:-1 +msgid "python, programming, design, patterns" +msgstr "python, programming, design, patterns" + +#: ../../src/oop/patterns.txt:8 msgid "Design Patterns" msgstr "Патерни Проектування" -#: ../../src/oop/solid.txt:3 +#: ../../src/oop/solid.txt:-1 +msgid "SOLID principles" +msgstr "Принципи SOLID" + +#: ../../src/oop/solid.txt:-1 +msgid "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" +msgstr "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" + +#: ../../src/oop/solid.txt:10 msgid "SOLID Principles" msgstr "Принципи SOLID" diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po index 481ee4f54..058d94f57 100644 --- a/src/_locales/ua/LC_MESSAGES/rdbms.po +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -1,16 +1,18 @@ -# COURSE/RELATIONAL DATABASES TRANSLATION. +# RELATIONAL DATABASES TRANSLATION. +# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# Serhii Horodilov , 2023. +# +# SERHII HORODILOV # msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" -"POT-Creation-Date: 2023-04-08 19:28+0300\n" -"PO-Revision-Date: 2023-04-11 16:06+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:09+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -20,27 +22,40 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/rdbms/aggregation.txt:3 +#: ../../src/rdbms/aggregation.txt:-1 +msgid "Data aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:-1 ../../src/rdbms/index.txt:-1 +#: ../../src/rdbms/normalization.txt:-1 ../../src/rdbms/relations.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "sql, db, database, data, aggregation, functions" +msgstr "sql, db, database, data, aggregation, functions" + +#: ../../src/rdbms/aggregation.txt:8 msgid "Data Aggregation" msgstr "Агрегація даних" -#: ../../src/rdbms/aggregation.txt:5 +#: ../../src/rdbms/aggregation.txt:10 msgid "Here is some dummy data, that will be used as example in this section." msgstr "" "Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." -#: ../../src/rdbms/aggregation.txt:7 ../../src/rdbms/normalization.txt:1 +#: ../../src/rdbms/aggregation.txt:12 ../../src/rdbms/normalization.txt:1 msgid "product" msgstr "product" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:174 +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 msgid "id" msgstr "id" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:174 -#: ../../src/rdbms/relations.txt:249 ../../src/rdbms/relations.txt:278 -#: ../../src/rdbms/relations.txt:313 ../../src/rdbms/relations.txt:345 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:179 +#: ../../src/rdbms/relations.txt:254 ../../src/rdbms/relations.txt:283 +#: ../../src/rdbms/relations.txt:318 ../../src/rdbms/relations.txt:350 msgid "name" msgstr "name" @@ -48,19 +63,19 @@ msgstr "name" msgid "price" msgstr "price" -#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 #: ../../src/rdbms/products_table.csv:1 msgid "category" msgstr "category" -#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 #: ../../src/rdbms/products_table.csv:1 msgid "sold" msgstr "sold" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:157 -#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:176 +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 msgid "1" msgstr "1" @@ -72,7 +87,7 @@ msgstr "Samsung Galaxy" msgid "100000" msgstr "100000" -#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/aggregation.txt:181 ../../src/rdbms/products_table.csv:1 msgid "Phones" msgstr "Phones" @@ -81,8 +96,8 @@ msgid "500" msgstr "500" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:165 -#: ../../src/rdbms/relations.txt:178 +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 +#: ../../src/rdbms/relations.txt:183 msgid "2" msgstr "2" @@ -94,13 +109,13 @@ msgstr "iPhone 13 Pro" msgid "120000" msgstr "120000" -#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 #: ../../src/rdbms/products_table.csv:1 msgid "300" msgstr "300" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:180 +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 msgid "3" msgstr "3" @@ -112,7 +127,7 @@ msgstr "MacBook Pro" msgid "350000" msgstr "350000" -#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 #: ../../src/rdbms/products_table.csv:1 msgid "Laptops" msgstr "Laptops" @@ -122,7 +137,7 @@ msgid "100" msgstr "100" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:159 +#: ../../src/rdbms/relations.txt:164 msgid "4" msgstr "4" @@ -138,7 +153,7 @@ msgstr "150000" msgid "200" msgstr "200" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:161 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:166 msgid "5" msgstr "5" @@ -150,16 +165,16 @@ msgstr "HP Printer" msgid "20000" msgstr "20000" -#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/products_table.csv:1 msgid "Printers" msgstr "Printers" -#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/aggregation.txt:176 +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/aggregation.txt:181 #: ../../src/rdbms/products_table.csv:1 msgid "800" msgstr "800" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:163 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:168 msgid "6" msgstr "6" @@ -171,17 +186,17 @@ msgstr "Dell Monitor" msgid "50000" msgstr "50000" -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 #: ../../src/rdbms/products_table.csv:1 msgid "Monitors" msgstr "Monitors" -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 #: ../../src/rdbms/products_table.csv:1 msgid "400" msgstr "400" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:165 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:170 msgid "7" msgstr "7" @@ -193,17 +208,17 @@ msgstr "Sony Headphones" msgid "30000" msgstr "30000" -#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 #: ../../src/rdbms/products_table.csv:1 msgid "Audio" msgstr "Audio" -#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 #: ../../src/rdbms/products_table.csv:1 msgid "0" msgstr "0" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:167 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:172 msgid "8" msgstr "8" @@ -227,7 +242,7 @@ msgstr "Xbox Series X" msgid "60000" msgstr "60000" -#: ../../src/rdbms/aggregation.txt:173 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/aggregation.txt:178 ../../src/rdbms/products_table.csv:1 msgid "Gaming" msgstr "Gaming" @@ -251,25 +266,25 @@ msgstr "55000" msgid "350" msgstr "350" -#: ../../src/rdbms/aggregation.txt:14 +#: ../../src/rdbms/aggregation.txt:19 msgid "The same dataset is available as:" msgstr "The same dataset is available as:" -#: ../../src/rdbms/aggregation.txt:16 +#: ../../src/rdbms/aggregation.txt:21 msgid ":download:`csv file <./products_table.csv>`" msgstr ":download:`csv file <./products_table.csv>`" -#: ../../src/rdbms/aggregation.txt:17 +#: ../../src/rdbms/aggregation.txt:22 msgid "" ":download:`postgres dump file `" msgstr "" ":download:`postgres dump file `" -#: ../../src/rdbms/aggregation.txt:20 +#: ../../src/rdbms/aggregation.txt:25 msgid "Aggregate functions" msgstr "Агрегуючі функції" -#: ../../src/rdbms/aggregation.txt:22 +#: ../../src/rdbms/aggregation.txt:27 msgid "" "*Aggregate functions* compute a single result from a set of input values. " "Various RDBMS implement various built-in aggregate functions. In this " @@ -279,11 +294,11 @@ msgstr "" "Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " "розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." -#: ../../src/rdbms/aggregation.txt:29 +#: ../../src/rdbms/aggregation.txt:34 msgid "Count" msgstr "Підрахунок" -#: ../../src/rdbms/aggregation.txt:31 +#: ../../src/rdbms/aggregation.txt:36 msgid "" "The ``count(field)`` function returns a count of the number of times that " "``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " @@ -293,11 +308,11 @@ msgstr "" "``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " "кількість рядків у групі." -#: ../../src/rdbms/aggregation.txt:47 +#: ../../src/rdbms/aggregation.txt:52 msgid "Maximum value" msgstr "Максимальне значення" -#: ../../src/rdbms/aggregation.txt:49 +#: ../../src/rdbms/aggregation.txt:54 msgid "" "The ``max()`` aggregate function returns the maximum value of all values in " "the group. The maximum value is the value that would be returned last in an " @@ -309,11 +324,11 @@ msgstr "" "ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " "і лише якщо в групі немає значень, відмінних від NULL." -#: ../../src/rdbms/aggregation.txt:66 +#: ../../src/rdbms/aggregation.txt:71 msgid "Minimum value" msgstr "Мінімальне значення" -#: ../../src/rdbms/aggregation.txt:68 +#: ../../src/rdbms/aggregation.txt:73 msgid "" "The ``min()`` aggregate function returns the minimum non-NULL value of all " "values in the group. The minimum value is the first non-NULL value that " @@ -325,11 +340,11 @@ msgstr "" "з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " "якщо в групі немає значень, відмінних від NULL." -#: ../../src/rdbms/aggregation.txt:85 +#: ../../src/rdbms/aggregation.txt:90 msgid "Average value" msgstr "Середнє значення" -#: ../../src/rdbms/aggregation.txt:87 +#: ../../src/rdbms/aggregation.txt:92 msgid "" "The ``avg()`` function returns the average value of all non-NULL inputs " "within a group. String and BLOB values that do not look like numbers are " @@ -343,11 +358,11 @@ msgstr "" "один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " "є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." -#: ../../src/rdbms/aggregation.txt:105 +#: ../../src/rdbms/aggregation.txt:110 msgid "Sum of values" msgstr "Сума значень" -#: ../../src/rdbms/aggregation.txt:107 +#: ../../src/rdbms/aggregation.txt:112 msgid "" "The ``sum()`` aggregate functions return the sum of all non-NULL values in " "the group. If there are no non-NULL input rows then function returns " @@ -356,7 +371,7 @@ msgstr "" "Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " "NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." -#: ../../src/rdbms/aggregation.txt:112 +#: ../../src/rdbms/aggregation.txt:117 msgid "" "NULL is not normally a helpful result for the sum of no rows but the SQL " "standard requires it." @@ -364,7 +379,7 @@ msgstr "" "NULL зазвичай не є корисним результатом для суми відсутності рядків, але " "стандарт SQL вимагає цього." -#: ../../src/rdbms/aggregation.txt:115 +#: ../../src/rdbms/aggregation.txt:120 msgid "" "SQLite implements ``total`` aggregate function, that is similar to ``sum``, " "but returns ``0.0`` (always floating point) if there are no non-NULL input " @@ -374,11 +389,11 @@ msgstr "" "повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " "відмінних від NULL." -#: ../../src/rdbms/aggregation.txt:130 +#: ../../src/rdbms/aggregation.txt:135 msgid "Grouping data" msgstr "Групування даних" -#: ../../src/rdbms/aggregation.txt:132 +#: ../../src/rdbms/aggregation.txt:137 msgid "" "Getting some aggregated values is not very helpful itself. Most cases " "require to group outputs in some specific manner." @@ -386,7 +401,7 @@ msgstr "" "Отримання деяких агрегованих значень не є дуже корисним саме по собі. " "Більшість випадків вимагають згрупувати виходи певним чином." -#: ../../src/rdbms/aggregation.txt:135 +#: ../../src/rdbms/aggregation.txt:140 msgid "" "For example, if the task is to count number of registered categories it is " "simple to solve as:" @@ -394,7 +409,7 @@ msgstr "" "Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " "категорій, його просто вирішити так:" -#: ../../src/rdbms/aggregation.txt:148 +#: ../../src/rdbms/aggregation.txt:153 msgid "" "But in case, the task is to count **sold** items for each category, this " "becomes impossible to solve without grouping items. ``GROUP BY`` clause " @@ -405,15 +420,15 @@ msgstr "" "``GROUP BY`` надає можливість групувати рядки на основі певного значення " "поля(ів)." -#: ../../src/rdbms/aggregation.txt:152 +#: ../../src/rdbms/aggregation.txt:157 msgid "General syntax is:" msgstr "Загальний синтаксис:" -#: ../../src/rdbms/aggregation.txt:173 +#: ../../src/rdbms/aggregation.txt:178 msgid "600" msgstr "600" -#: ../../src/rdbms/aggregation.txt:179 +#: ../../src/rdbms/aggregation.txt:184 msgid "" "If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " "clause, then each of the expressions specified as part of the GROUP BY " @@ -439,11 +454,11 @@ msgstr "" "бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " "можуть бути сукупними виразами." -#: ../../src/rdbms/aggregation.txt:192 +#: ../../src/rdbms/aggregation.txt:197 msgid "HAVING clause" msgstr "Вираз HAVING" -#: ../../src/rdbms/aggregation.txt:194 +#: ../../src/rdbms/aggregation.txt:199 msgid "" "But what, if the task is to filter categories, that have less than 500 sold " "items in it? ``WHERE`` clause will be useless, cause it's evaluated before " @@ -455,7 +470,7 @@ msgstr "" "перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " "вибрано фільтр." -#: ../../src/rdbms/aggregation.txt:217 +#: ../../src/rdbms/aggregation.txt:222 msgid "" "If a ``HAVING`` clause is specified, it is evaluated once for each group of " "rows as a boolean expression. If the result of evaluating the HAVING clause " @@ -467,7 +482,7 @@ msgstr "" "хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " "обчислюється в усіх рядках у групі." -#: ../../src/rdbms/aggregation.txt:222 +#: ../../src/rdbms/aggregation.txt:227 msgid "" "If a HAVING clause is a non-aggregate expression, it is evaluated with " "respect to an arbitrarily selected row from the group. The HAVING expression " @@ -477,11 +492,19 @@ msgstr "" "вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " "агрегатні функції, яких немає в результат." -#: ../../src/rdbms/index.txt:3 +#: ../../src/rdbms/index.txt:-1 +msgid "Relational databases" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:-1 +msgid "sql, db, database, intro, introduction, index" +msgstr "sql, db, database, intro, introduction, index" + +#: ../../src/rdbms/index.txt:8 msgid "Relational Database" msgstr "Реляційні бази даних" -#: ../../src/rdbms/index.txt:5 +#: ../../src/rdbms/index.txt:10 msgid "" ":abbr:`RDBMS (Relational Database Management System)` is a type of software " "that helps users to create, update, manage, and access relational databases. " @@ -496,7 +519,7 @@ msgstr "" "стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " "конкретний екземпляр цих даних." -#: ../../src/rdbms/index.txt:11 +#: ../../src/rdbms/index.txt:16 msgid "" "RDBMS allow users to interact with the database using :abbr:`SQL (Structured " "Query Language)`, which is a standard language for managing and manipulating " @@ -510,7 +533,7 @@ msgstr "" "різноманітність операцій з базою даних, включаючи додавання, оновлення та " "видалення даних, а також отримання даних на основі певних критеріїв." -#: ../../src/rdbms/index.txt:17 +#: ../../src/rdbms/index.txt:22 msgid "" "RDBMS also provide a range of features to ensure data integrity, such as " "enforcing data constraints, supporting transactions, and providing backup " @@ -526,11 +549,19 @@ msgstr "" "створення та модифікації таблиць і представлень, а також інструменти " "моніторингу для оптимізації продуктивності бази даних." -#: ../../src/rdbms/normalization.txt:3 +#: ../../src/rdbms/normalization.txt:-1 +msgid "Database normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "sql, db, database, normalization" +msgstr "sql, db, database, normalization" + +#: ../../src/rdbms/normalization.txt:8 msgid "Database Normalization" msgstr "Нормалізація баз даних" -#: ../../src/rdbms/normalization.txt:5 +#: ../../src/rdbms/normalization.txt:10 msgid "" "Normalization is a process of organizing data in a database so that it is " "free from redundancy and dependency. It helps to eliminate data " @@ -546,7 +577,7 @@ msgstr "" "таким чином, щоб уникнути дублювання даних, надмірності даних і " "неузгодженості даних." -#: ../../src/rdbms/normalization.txt:11 +#: ../../src/rdbms/normalization.txt:16 msgid "" "There are several normal forms, each building on the previous one, which " "guide us in the normalization process. The most commonly used normal forms " @@ -555,7 +586,7 @@ msgstr "" "Існує кілька нормальних форм, кожна з яких будується на попередній, які " "скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" -#: ../../src/rdbms/normalization.txt:14 +#: ../../src/rdbms/normalization.txt:19 msgid "" "**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " "values. There should be no repeating groups or arrays of data in a table." @@ -564,7 +595,7 @@ msgstr "" "(неподільні) значення. У таблиці не повинно бути повторюваних груп або " "масивів даних." -#: ../../src/rdbms/normalization.txt:17 +#: ../../src/rdbms/normalization.txt:22 msgid "" "**Second Normal Form (2NF)**: Each non-key column should be functionally " "dependent on the entire primary key. In other words, every column in a table " @@ -576,7 +607,7 @@ msgstr "" "таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " "інших неключових стовпців." -#: ../../src/rdbms/normalization.txt:21 +#: ../../src/rdbms/normalization.txt:26 msgid "" "**Third Normal Form (3NF)**: All non-key columns should be dependent only on " "the primary key and not on any other non-key columns. This eliminates " @@ -586,7 +617,7 @@ msgstr "" "первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " "транзитивні залежності." -#: ../../src/rdbms/normalization.txt:25 +#: ../../src/rdbms/normalization.txt:30 msgid "" "Normalization reduces data redundancy and dependency, making the database " "more efficient, flexible, and scalable. It also helps in maintaining data " @@ -598,11 +629,11 @@ msgstr "" "узгодженість і точність даних, а також гарантує належну обробку оновлень і " "видалень." -#: ../../src/rdbms/normalization.txt:31 +#: ../../src/rdbms/normalization.txt:36 msgid "First normal form (1NF)" msgstr "Перша нормальна форма (1NF)" -#: ../../src/rdbms/normalization.txt:33 +#: ../../src/rdbms/normalization.txt:38 msgid "" "It's easier to understand normalization via examples. Let's start with some " "dummy orders data." @@ -610,7 +641,7 @@ msgstr "" "Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " "про замовлення." -#: ../../src/rdbms/normalization.txt:36 +#: ../../src/rdbms/normalization.txt:41 msgid "Initial data" msgstr "Початкові дані" @@ -630,8 +661,8 @@ msgstr "quantity" msgid "total" msgstr "total" -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:180 -#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:363 +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:185 +#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:368 msgid "John Doe" msgstr "John Doe" @@ -663,7 +694,7 @@ msgstr "Banana" msgid "25" msgstr "25" -#: ../../src/rdbms/normalization.txt:43 +#: ../../src/rdbms/normalization.txt:48 msgid "" "This table violates 1NF, since its columns contain multiple values. To bring " "this to 1NF all data within the table are to be atomic." @@ -671,7 +702,7 @@ msgstr "" "Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " "привести це до 1NF, усі дані в таблиці мають бути атомарними." -#: ../../src/rdbms/normalization.txt:46 +#: ../../src/rdbms/normalization.txt:51 msgid "1NF applied" msgstr "Застосовано 1NF" @@ -691,15 +722,15 @@ msgstr "50" msgid "150" msgstr "150" -#: ../../src/rdbms/normalization.txt:54 +#: ../../src/rdbms/normalization.txt:59 msgid "From now each peace of data is represented as atomic value." msgstr "Відтепер кожна частина даних представлена як атомарне значення." -#: ../../src/rdbms/normalization.txt:57 +#: ../../src/rdbms/normalization.txt:62 msgid "Second normal form (2NF)" msgstr "Друга нормальна форма (2NF)" -#: ../../src/rdbms/normalization.txt:59 +#: ../../src/rdbms/normalization.txt:64 msgid "" "The table above is in 1NF, but ``item price`` is dependent on the *item* " "entity itself and have low cohesion to *orders*. To bring it into 2NF a " @@ -713,7 +744,7 @@ msgstr "" "Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " "одною за допомогою зовнішнього ключа." -#: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 +#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 msgid "``order`` table" msgstr "таблиця ``order``" @@ -721,11 +752,11 @@ msgstr "таблиця ``order``" msgid "product_id" msgstr "product_id" -#: ../../src/rdbms/normalization.txt:73 +#: ../../src/rdbms/normalization.txt:78 msgid "``product`` table" msgstr "таблиця ``product``" -#: ../../src/rdbms/normalization.txt:98 +#: ../../src/rdbms/normalization.txt:103 msgid "" "``total`` field is also removed, since now it can be calculated as product " "of ``product.price`` and ``order.quantity``." @@ -733,11 +764,11 @@ msgstr "" "Поле ``total`` також видалено, оскільки тепер його можна обчислити як " "добуток ``product.price`` і ``order.quantity``." -#: ../../src/rdbms/normalization.txt:102 +#: ../../src/rdbms/normalization.txt:107 msgid "Third normal form (3NF)" msgstr "3-тя нормальна форма (3NF)" -#: ../../src/rdbms/normalization.txt:104 +#: ../../src/rdbms/normalization.txt:109 msgid "" "At last it's time to remove a transitive functional dependency. Customer's " "name is not actually dependent on a product, but on a person, who places an " @@ -751,19 +782,27 @@ msgstr "" msgid "customer_id" msgstr "customer_id" -#: ../../src/rdbms/normalization.txt:115 +#: ../../src/rdbms/normalization.txt:120 msgid "``customer`` table" msgstr "таблиця ``customer``" -#: ../../src/rdbms/relations.txt:3 +#: ../../src/rdbms/relations.txt:-1 +msgid "This document describes the database relationships" +msgstr "Цей документ описує відносини в базах даних" + +#: ../../src/rdbms/relations.txt:-1 +msgid "sql, db, database, relationship" +msgstr "sql, db, database, relationship" + +#: ../../src/rdbms/relations.txt:8 msgid "Data Relationships" msgstr "Зв'язки даних" -#: ../../src/rdbms/relations.txt:5 +#: ../../src/rdbms/relations.txt:10 msgid "It's time to talk about **data relations**." msgstr "Настав час поговорити про **відносини даних**." -#: ../../src/rdbms/relations.txt:7 +#: ../../src/rdbms/relations.txt:12 msgid "" "For example your database contains two tables: ``weather`` and ``city``. The " "diagram below demonstrates the overall data structure:" @@ -771,7 +810,7 @@ msgstr "" "Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " "Діаграма нижче демонструє загальну структуру даних:" -#: ../../src/rdbms/relations.txt:25 +#: ../../src/rdbms/relations.txt:30 msgid "" "Consider the following problem: you want to make sure no one can insert a " "record into ``weather`` without a matching entry in ``city`` table. This is " @@ -789,16 +828,16 @@ msgstr "" "потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " "і дуже незручно." -#: ../../src/rdbms/relations.txt:47 +#: ../../src/rdbms/relations.txt:52 msgid "" "This declaration creates a relationship between two (or even more) tables." msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." -#: ../../src/rdbms/relations.txt:50 +#: ../../src/rdbms/relations.txt:55 msgid "Foreign key (FK)" msgstr "Зовнішній ключ (FK)" -#: ../../src/rdbms/relations.txt:52 +#: ../../src/rdbms/relations.txt:57 msgid "" "So far, you have knowledge about **primary** keys. The **foreign** key is a " "column, that *references* some another table. In common, it's a reference to " @@ -812,14 +851,14 @@ msgstr "" "обробляє лише цілісність даних, не обов'язково, щоб значення FK було " "відмінним від NULL." -#: ../../src/rdbms/relations.txt:58 +#: ../../src/rdbms/relations.txt:63 msgid "" "The relation's properties are described by CONSTRAINTS and the database's " "structure." msgstr "" "Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." -#: ../../src/rdbms/relations.txt:61 +#: ../../src/rdbms/relations.txt:66 msgid "" "For example, modifying declaration with ``NOT NULL`` constraint grants that " "each record within a table has a matching one entity in another table." @@ -827,19 +866,19 @@ msgstr "" "Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " "запис у таблиці має відповідну сутність в іншій таблиці." -#: ../../src/rdbms/relations.txt:71 +#: ../../src/rdbms/relations.txt:76 msgid "This brings us to various relationship models." msgstr "Це підводить нас до різних моделей відносин." -#: ../../src/rdbms/relations.txt:74 +#: ../../src/rdbms/relations.txt:79 msgid "One-to-many relationship (1-to-N)" msgstr "Зв'язок один-до-багатьох (1-до-N)" -#: ../../src/rdbms/relations.txt:76 +#: ../../src/rdbms/relations.txt:81 msgid "This is the most common relationship." msgstr "Це найпоширеніший зв'язок." -#: ../../src/rdbms/relations.txt:78 +#: ../../src/rdbms/relations.txt:83 msgid "" "For the example above there are no limitations on temperature measurements " "in a specified city. So, a single city may has 0 or N related records in " @@ -849,7 +888,7 @@ msgstr "" "визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " "таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." -#: ../../src/rdbms/relations.txt:82 +#: ../../src/rdbms/relations.txt:87 msgid "" "Another example is employees and office buildings they work in. Some big " "company may have multiple offices and employee across the globe. Multiple " @@ -862,11 +901,11 @@ msgstr "" "одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " "одночасно." -#: ../../src/rdbms/relations.txt:105 +#: ../../src/rdbms/relations.txt:110 msgid "One-to-one relationship (1-to-1)" msgstr "One-to-one relationship (1-to-1)" -#: ../../src/rdbms/relations.txt:107 +#: ../../src/rdbms/relations.txt:112 msgid "" "``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " "and only one matching record. Back to the example with employees. Multiple " @@ -879,11 +918,11 @@ msgstr "" "розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " "одну робочу станцію одночасно." -#: ../../src/rdbms/relations.txt:118 +#: ../../src/rdbms/relations.txt:123 msgid "Many-to-many relationship (N-to-N)" msgstr "Зв'язок багато-до-багатьох (N-до-N)" -#: ../../src/rdbms/relations.txt:120 +#: ../../src/rdbms/relations.txt:125 msgid "" "These relationships require additional table. A good example may be a " "*project role*. There are many of them in a production team. And some " @@ -895,11 +934,11 @@ msgstr "" "призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " "також одна людина може бути розробником і тестувальником одночасно." -#: ../../src/rdbms/relations.txt:133 +#: ../../src/rdbms/relations.txt:138 msgid "Joining data" msgstr "Об'єднання даних" -#: ../../src/rdbms/relations.txt:135 +#: ../../src/rdbms/relations.txt:140 msgid "" "``JOIN`` is used to *join* data fetched from multiple related tables. To " "build a valid query you are to set the tables to join and parameter to use " @@ -909,11 +948,11 @@ msgstr "" "пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " "таблиці для об'єднання та параметр, який використовується для цієї операції." -#: ../../src/rdbms/relations.txt:139 +#: ../../src/rdbms/relations.txt:144 msgid "Common syntax is:" msgstr "Загальний синтаксис:" -#: ../../src/rdbms/relations.txt:145 +#: ../../src/rdbms/relations.txt:150 msgid "" "There are various join types available. Here are is some dummy data to " "demonstrate their purpose." @@ -921,97 +960,97 @@ msgstr "" "Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " "їх призначення." -#: ../../src/rdbms/relations.txt:148 +#: ../../src/rdbms/relations.txt:153 msgid "poem" msgstr "poem" -#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:249 -#: ../../src/rdbms/relations.txt:278 ../../src/rdbms/relations.txt:313 -#: ../../src/rdbms/relations.txt:345 +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 +#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 +#: ../../src/rdbms/relations.txt:350 msgid "title" msgstr "title" -#: ../../src/rdbms/relations.txt:151 +#: ../../src/rdbms/relations.txt:156 msgid "author_id" msgstr "author_id" -#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:251 -#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:315 -#: ../../src/rdbms/relations.txt:347 +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:352 msgid "On the Field of Battle" msgstr "On the Field of Battle" -#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:253 -#: ../../src/rdbms/relations.txt:282 ../../src/rdbms/relations.txt:317 -#: ../../src/rdbms/relations.txt:349 +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:354 msgid "Moses" msgstr "Moses" -#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:255 -#: ../../src/rdbms/relations.txt:284 ../../src/rdbms/relations.txt:319 -#: ../../src/rdbms/relations.txt:351 +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 +#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 +#: ../../src/rdbms/relations.txt:356 msgid "The Forest Song" msgstr "The Forest Song" -#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:286 -#: ../../src/rdbms/relations.txt:353 +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:358 msgid "In the Catacombs" msgstr "In the Catacombs" -#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:163 -#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:286 -#: ../../src/rdbms/relations.txt:290 ../../src/rdbms/relations.txt:294 -#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:353 -#: ../../src/rdbms/relations.txt:357 ../../src/rdbms/relations.txt:361 -#: ../../src/rdbms/relations.txt:363 +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 +#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 +#: ../../src/rdbms/relations.txt:368 msgid "null" msgstr "null" -#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:257 -#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:321 -#: ../../src/rdbms/relations.txt:355 +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:360 msgid "The Singing Stones" msgstr "The Singing Stones" -#: ../../src/rdbms/relations.txt:163 ../../src/rdbms/relations.txt:290 -#: ../../src/rdbms/relations.txt:357 +#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 +#: ../../src/rdbms/relations.txt:362 msgid "Ancient Fairy Tales" msgstr "Ancient Fairy Tales" -#: ../../src/rdbms/relations.txt:165 ../../src/rdbms/relations.txt:259 -#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:323 -#: ../../src/rdbms/relations.txt:359 +#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 +#: ../../src/rdbms/relations.txt:364 msgid "My Thoughts" msgstr "My Thoughts" -#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:294 -#: ../../src/rdbms/relations.txt:361 +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:366 msgid "To Shevchenko" msgstr "To Shevchenko" -#: ../../src/rdbms/relations.txt:171 +#: ../../src/rdbms/relations.txt:176 msgid "author" msgstr "author" -#: ../../src/rdbms/relations.txt:176 ../../src/rdbms/relations.txt:251 -#: ../../src/rdbms/relations.txt:255 ../../src/rdbms/relations.txt:257 -#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:284 -#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:315 -#: ../../src/rdbms/relations.txt:319 ../../src/rdbms/relations.txt:321 -#: ../../src/rdbms/relations.txt:347 ../../src/rdbms/relations.txt:351 -#: ../../src/rdbms/relations.txt:355 +#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 +#: ../../src/rdbms/relations.txt:360 msgid "Larysa Kosach" msgstr "Larysa Kosach" -#: ../../src/rdbms/relations.txt:178 ../../src/rdbms/relations.txt:253 -#: ../../src/rdbms/relations.txt:259 ../../src/rdbms/relations.txt:282 -#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:317 -#: ../../src/rdbms/relations.txt:323 ../../src/rdbms/relations.txt:349 -#: ../../src/rdbms/relations.txt:359 +#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 +#: ../../src/rdbms/relations.txt:364 msgid "Ivan Franko" msgstr "Ivan Franko" -#: ../../src/rdbms/relations.txt:212 +#: ../../src/rdbms/relations.txt:217 msgid "Join types" msgstr "Join types" @@ -1019,7 +1058,7 @@ msgstr "Join types" msgid "Cross join" msgstr "Cross join" -#: ../../src/rdbms/relations.txt:220 +#: ../../src/rdbms/relations.txt:225 msgid "" "For every possible combination of rows from T1 and T2 (i.e., a Cartesian " "product), the joined table will contain a row consisting of all columns in " @@ -1035,7 +1074,7 @@ msgstr "" msgid "Qualified joins" msgstr "Qualified joins" -#: ../../src/rdbms/relations.txt:231 +#: ../../src/rdbms/relations.txt:236 msgid "" "The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " "the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." @@ -1043,11 +1082,11 @@ msgstr "" "Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " "типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." -#: ../../src/rdbms/relations.txt:236 +#: ../../src/rdbms/relations.txt:241 msgid "INNER JOIN" msgstr "INNER JOIN" -#: ../../src/rdbms/relations.txt:238 +#: ../../src/rdbms/relations.txt:243 msgid "" "For each row R1 of T1, the joined table has a row for each row in T2 that " "satisfies the join condition with R1." @@ -1055,15 +1094,15 @@ msgstr "" "Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " "який задовольняє умову об'єднання з R1." -#: ../../src/rdbms/relations.txt:241 +#: ../../src/rdbms/relations.txt:246 msgid "Inner join" msgstr "Inner join" -#: ../../src/rdbms/relations.txt:263 +#: ../../src/rdbms/relations.txt:268 msgid "LEFT OUTER JOIN" msgstr "LEFT OUTER JOIN" -#: ../../src/rdbms/relations.txt:265 +#: ../../src/rdbms/relations.txt:270 msgid "" "First, an inner join is performed. Then, for each row in T1 that does not " "satisfy the join condition with any row in T2, a joined row is added with " @@ -1075,15 +1114,15 @@ msgstr "" "об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " "об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." -#: ../../src/rdbms/relations.txt:270 +#: ../../src/rdbms/relations.txt:275 msgid "Left join" msgstr "Left join" -#: ../../src/rdbms/relations.txt:298 +#: ../../src/rdbms/relations.txt:303 msgid "RIGHT OUTER JOIN" msgstr "RIGHT OUTER JOIN" -#: ../../src/rdbms/relations.txt:300 +#: ../../src/rdbms/relations.txt:305 msgid "" "First, an inner join is performed. Then, for each row in T2 that does not " "satisfy the join condition with any row in T1, a joined row is added with " @@ -1096,15 +1135,15 @@ msgstr "" "лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " "в T2." -#: ../../src/rdbms/relations.txt:305 +#: ../../src/rdbms/relations.txt:310 msgid "Right join" msgstr "Right join" -#: ../../src/rdbms/relations.txt:329 +#: ../../src/rdbms/relations.txt:334 msgid "FULL OUTER JOIN" msgstr "FULL OUTER JOIN" -#: ../../src/rdbms/relations.txt:331 +#: ../../src/rdbms/relations.txt:336 msgid "" "First, an inner join is performed. Then, for each row in T1 that does not " "satisfy the join condition with any row in T2, a joined row is added with " @@ -1118,6 +1157,6 @@ msgstr "" "рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " "додається об'єднаний рядок із нульовими значеннями в стовпцях T1." -#: ../../src/rdbms/relations.txt:337 +#: ../../src/rdbms/relations.txt:342 msgid "Full join" msgstr "Full join" From e3e2981d0e0f4802ad4025b0430e9bd853769191 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 02:48:28 +0300 Subject: [PATCH 090/689] Change locale name - fixed #45 --- .github/workflows/deploy_pages.yml | 2 +- Makefile | 4 ++-- src/_locales/{ua => uk}/LC_MESSAGES/appx.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/basics.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/deploy.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/django.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/flask.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/index.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/linux.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/oop.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/rdbms.po | 0 11 files changed, 3 insertions(+), 3 deletions(-) rename src/_locales/{ua => uk}/LC_MESSAGES/appx.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/basics.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/deploy.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/django.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/flask.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/index.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/linux.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/oop.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/rdbms.po (100%) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 93ebaa607..22b778ab0 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -41,7 +41,7 @@ jobs: - name: Build documents run: | LANGUAGE=en make html - LANGUAGE=ua make html + LANGUAGE=uk make html - name: Setup Pages uses: actions/configure-pages@v2 - name: Upload artifact diff --git a/Makefile b/Makefile index c833158a2..efdbef95a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SPHINX_SRC = src SPHINX_CONFIG = $(SPHINX_SRC)/conf.py # Internationalization -SPHINXINTL_LANGUAGE ?= ua +SPHINXINTL_LANGUAGE ?= uk LANGUAGE ?= en # Sphinx build directories @@ -20,7 +20,7 @@ SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) # Makefile targets all : clean @make LANGUAGE=en html - @make LANGUAGE=ua html + @make LANGUAGE=uk html clean : @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/appx.po rename to src/_locales/uk/LC_MESSAGES/appx.po diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/basics.po rename to src/_locales/uk/LC_MESSAGES/basics.po diff --git a/src/_locales/ua/LC_MESSAGES/deploy.po b/src/_locales/uk/LC_MESSAGES/deploy.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/deploy.po rename to src/_locales/uk/LC_MESSAGES/deploy.po diff --git a/src/_locales/ua/LC_MESSAGES/django.po b/src/_locales/uk/LC_MESSAGES/django.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/django.po rename to src/_locales/uk/LC_MESSAGES/django.po diff --git a/src/_locales/ua/LC_MESSAGES/flask.po b/src/_locales/uk/LC_MESSAGES/flask.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/flask.po rename to src/_locales/uk/LC_MESSAGES/flask.po diff --git a/src/_locales/ua/LC_MESSAGES/index.po b/src/_locales/uk/LC_MESSAGES/index.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/index.po rename to src/_locales/uk/LC_MESSAGES/index.po diff --git a/src/_locales/ua/LC_MESSAGES/linux.po b/src/_locales/uk/LC_MESSAGES/linux.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/linux.po rename to src/_locales/uk/LC_MESSAGES/linux.po diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/uk/LC_MESSAGES/oop.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/oop.po rename to src/_locales/uk/LC_MESSAGES/oop.po diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/uk/LC_MESSAGES/rdbms.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/rdbms.po rename to src/_locales/uk/LC_MESSAGES/rdbms.po From 1529634f22f029690b049d1382124568e78a38d0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 20:50:00 +0300 Subject: [PATCH 091/689] Changed link to Ukrainian version in index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 7ce3f3ce1..7e33dcaca 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@

Course Materials

English version
  • - Ukrainian version + Ukrainian version
  • From 0a82f45c981c322fc4480596f4f121f360452961 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 15 Apr 2023 12:30:36 +0300 Subject: [PATCH 092/689] Installed 'copybutton' extension Updated project dependencies. Fixed appendixes for PDF output. Signed-off-by: Serhii Horodilov --- poetry.lock | 47 +++++++++++++++++++++++++++++++++-------------- pyproject.toml | 1 + requirements.txt | 9 +++++---- src/conf.py | 3 +++ 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7a858d484..56e0b0c69 100644 --- a/poetry.lock +++ b/poetry.lock @@ -186,14 +186,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.1.0" +version = "6.3.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, - {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, + {file = "importlib_metadata-6.3.0-py3-none-any.whl", hash = "sha256:8f8bd2af397cf33bd344d35cfe7f489219b7d14fc79a3f854b75b8417e9226b0"}, + {file = "importlib_metadata-6.3.0.tar.gz", hash = "sha256:23c2bcae4762dfb0bbe072d358faec24957901d75b6c4ab11172c0c982532402"}, ] [package.dependencies] @@ -383,14 +383,14 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "packaging" -version = "23.0" +version = "23.1" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -431,14 +431,14 @@ pybtex = ">=0.16" [[package]] name = "pygments" -version = "2.14.0" +version = "2.15.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, + {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, ] [package.extras] @@ -518,14 +518,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "67.6.0" +version = "67.6.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.6.0-py3-none-any.whl", hash = "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2"}, - {file = "setuptools-67.6.0.tar.gz", hash = "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077"}, + {file = "setuptools-67.6.1-py3-none-any.whl", hash = "sha256:e728ca814a823bf7bf60162daf9db95b93d532948c4c0bea762ce62f60189078"}, + {file = "setuptools-67.6.1.tar.gz", hash = "sha256:257de92a9d50a60b8e22abfcbb771571fde0dbf3ec234463212027a4eeecbe9a"}, ] [package.extras] @@ -593,6 +593,25 @@ docs = ["sphinxcontrib-websupport"] lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] test = ["cython", "html5lib", "pytest (>=4.6)"] +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, + {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, +] + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] + [[package]] name = "sphinx-intl" version = "2.1.0" @@ -811,4 +830,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "1a2e7b2d16a856baa85023359e142ff950911a5a26e41614c462053ddca4a8dd" +content-hash = "76de98805112ca4ea0dbf697b2c3dd421f99252b68f71bfc69353cefe367ef2e" diff --git a/pyproject.toml b/pyproject.toml index 7fb533276..9ec47e4ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ sphinx-rtd-theme = "^1.2.0" myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" sphinxcontrib-mermaid = "^0.8.1" +sphinx-copybutton = "^0.5.2" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index 1cb4a09e6..4f32b5241 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_pla docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.4 ; python_version >= "3.9" and python_version < "4" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.1.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==6.3.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" @@ -15,15 +15,16 @@ markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" -packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" +packaging==23.1 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" -pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.15.0 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" requests==2.28.2 ; python_version >= "3.9" and python_version < "4" -setuptools==67.6.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==67.6.1 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-rtd-theme==1.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" diff --git a/src/conf.py b/src/conf.py index 8155e8f22..62e443e70 100644 --- a/src/conf.py +++ b/src/conf.py @@ -26,6 +26,7 @@ "sphinxcontrib.mermaid", "sphinx_rtd_theme", "myst_parser", + "sphinx_copybutton", ] source_suffix = { ".txt": "restructuredtext", @@ -55,6 +56,7 @@ (master_doc, latex_doc, project, authors, "manual", False), ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), + ("appx/blog", "DjangoBlog.tex", project, authors, "howto", False), ] latex_appendices = [ "appx/software_list", @@ -63,5 +65,6 @@ "appx/precedence", "appx/printf", "appx/conv_store", + "appx/wtk", "appx/blog", ] From 3ed1c415ecb0f5c9f1f7232aa8dcdde03cc0f47e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 15 Apr 2023 14:28:39 +0300 Subject: [PATCH 093/689] Added node packages to project dependencies Deps: - mermaid-cli Dev. deps: - csso-cli - sass Signed-off-by: Serhii Horodilov --- .gitignore | 3 + package-lock.json | 1257 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 11 + src/conf.py | 3 + 4 files changed, 1274 insertions(+) create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index 3ce2145a2..64088ba20 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ /venv/ /env/ +# node packages +/node_modules/ + # ide configs /.vscode/ /.idea/ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..73fdf982f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1257 @@ +{ + "name": "python-course", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "python-course", + "dependencies": { + "@mermaid-js/mermaid-cli": "^10.1.0" + }, + "devDependencies": { + "csso-cli": "^4.0.2", + "sass": "^1.62.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.1.0.tgz", + "integrity": "sha512-O75bbknW9xe1KYpD0Zgjfa81oH4pjPdAPmR4miXBKTmoqPhQMzbbecCJJmJFLpa1D8UaSBr2lNgKoagXEzNT8Q==", + "dependencies": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "puppeteer": "^19.0.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^14.13 || >=16.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/puppeteer": { + "version": "19.9.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.9.0.tgz", + "integrity": "sha512-JDx8WwGlkdQYTaa3OMYDF+uFWimiwNnacg5FGEC5J6+VxDsLK30wHKU/Db2LqEhtAoIu4RwS+BRH4zRPlCsFpA==", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.4.1", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.9.0" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.1.tgz", + "integrity": "sha512-4IICvy1McAkT/HyNZHIs7sp8ngBX1dmO0TPQ+FWq9ATQMqI8p+Ulm5A3kS2wYDh5HDHHkYrrETOu6rlj64VuTw==", + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@puppeteer/browsers/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/@puppeteer/browsers/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chromium-bidi": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", + "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/clap": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/css-tree": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso-cli": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso-cli/-/csso-cli-4.0.2.tgz", + "integrity": "sha512-p/VipA45w8EmS8Lv6wGtE+UdsbFlqUBGhL9FCTGKxd5dC07mtg3BbZaMzMh0X+oIl2JUGR/mPx5YzuNnTM2a3w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "clap": "^3.1.1", + "csso": "^5.0.4", + "source-map-js": "^1.0.2" + }, + "bin": { + "csso": "bin/csso" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/mdn-data": { + "version": "2.0.28", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.9.0.tgz", + "integrity": "sha512-IJYfCE0oFpi5dTvNFqOwo8Dey6zzx7hANy7z6K2bjpCux9oPOSOIubq40awNhaHlfi8soYtgU4qabnzMXB7xBQ==", + "dependencies": { + "@puppeteer/browsers": "0.4.1", + "chromium-bidi": "0.4.6", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/sass": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz", + "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..44d87d0a8 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "python-course", + "private": true, + "dependencies": { + "@mermaid-js/mermaid-cli": "^10.1.0" + }, + "devDependencies": { + "csso-cli": "^4.0.2", + "sass": "^1.62.0" + } +} diff --git a/src/conf.py b/src/conf.py index 62e443e70..20e018eb2 100644 --- a/src/conf.py +++ b/src/conf.py @@ -41,6 +41,9 @@ bibtex_bibfiles = ["refs.bib"] bibtex_reference_style = "label" +# TODO: configure options for mermaid output for pdf +# mermaid-js/mermaid-cli is added to project's dependencies + # options for internationalization language = "en" locale_dirs = ["_locales"] From af339315a9db4d41ac9c1f9ee56194d3463de980 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 04:09:32 +0300 Subject: [PATCH 094/689] Updated submodules --- blog | 2 +- problem-sets | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blog b/blog index 111fe1623..158718694 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 111fe162309264de92ecf0cde4262ee2fcc9acf2 +Subproject commit 15871869482148ac845c412b62c518380e216c93 diff --git a/problem-sets b/problem-sets index 8864d69c0..0dffa6dcf 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 8864d69c093a8a5e4ccee1b847253342905832a0 +Subproject commit 0dffa6dcf7801dc7150c0a0496b5816f71ebff42 From a09f38155ed2937bf4d3fd443333a84dec4c5973 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 04:42:50 +0300 Subject: [PATCH 095/689] Updated "blog spec" translation Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/appx.po | 442 ++++++++++++++++------------ 1 file changed, 250 insertions(+), 192 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 1595e554f..6552c8f23 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:03+0300\n" +"POT-Creation-Date: 2023-04-21 04:34+0300\n" +"PO-Revision-Date: 2023-04-21 04:41+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -168,266 +166,272 @@ msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:56 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" - -#: ../../blog/docs/spec.rst:58 -msgid "You are to implement data models for the blog site." -msgstr "Ви повинні реалізувати моделі даних для сайту блогу." +#: ../../blog/docs/spec.rst:62 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.rst:60 -msgid "The ``auth.User`` will be used as ``user`` model." -msgstr "``auth.User`` використовуватиметься як модель ``user``." +#: ../../blog/docs/spec.rst:64 +msgid "" +"It’s time to work with data representations. You’re to add HTML template to " +"the blog site project." +msgstr "" +"Настав час попрацювати з представленнями даних. Ви повинні додати шаблон " +"HTML до проекту сайту блогу." -#: ../../blog/docs/spec.rst:62 +#: ../../blog/docs/spec.rst:67 msgid "" -"``post.slug`` value should be autogenerated when a record is created or " -"updated and follow the pattern:" +"Create \"templates\" folder in the project's root. This is the place to keep " +"your base templates. Make sure this path is included to the ``TEMPLATES`` " +"object in settings file." msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або " -"оновлення запису та слідувати шаблону:" +"Створіть папку \"templates\" в корені проекту. Це місце для зберігання ваших " +"базових шаблонів. Переконайтеся, що цей шлях включено до об'єкта " +"``TEMPLATES`` у файлі налаштувань." -#: ../../blog/docs/spec.rst:69 +#: ../../blog/docs/spec.rst:73 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value " -"should be ``True`` by default." +"There is no need to implement functional for forms for now. Just render " +"them. There is no need to pass any context to ``render`` function for now." msgstr "" -"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " -"замовчуванням це значення має бути ``True``." +"На даний момент немає необхідності впроваджувати функціонал для форм. Просто " +"візуалізуйте їх. Наразі немає потреби передавати будь-який контекст у " +"функцію ``render``." -#: ../../blog/docs/spec.rst:102 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" +#: ../../blog/docs/spec.rst:77 +msgid "**All** templates should be inherited from the base template." +msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." -#: ../../blog/docs/spec.rst:104 +#: ../../blog/docs/spec.rst:78 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project’s database." +"Each page should contain a navbar at the top. Navbar will contain permalinks " +"to the home and about pages." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " -"базі даних проекту." +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " +"міститиме постійні посилання на домашню сторінку та сторінку про." -#: ../../blog/docs/spec.rst:107 -msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." +#: ../../blog/docs/spec.rst:80 +msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." msgstr "" -"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." +"Панель навігації має містити посилання на сторінки ``/register/`` і ``/login/" +"``." -#: ../../blog/docs/spec.rst:108 -msgid "``//``: should represent a single existing blogpost." -msgstr "``//``: має представляти одну наявну публікацію в блозі." +#: ../../blog/docs/spec.rst:81 +msgid "``/register/`` page should render a user registration form." +msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." -#: ../../blog/docs/spec.rst:109 -msgid "" -"``/profile//``: should contain information about user and a " -"list of posts authored by this user." -msgstr "" -"``/profile//``: має містити інформацію про користувача та " -"список публікацій, автором яких є цей користувач." +#: ../../blog/docs/spec.rst:82 +msgid "``/login/`` page should render a user authentication form." +msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." -#: ../../blog/docs/spec.rst:111 -msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." +#: ../../blog/docs/spec.rst:83 +msgid "``/create/`` page should render a form to create a new post." msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." - -#: ../../blog/docs/spec.rst:116 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" +"Сторінка ``/create/`` має відобразити форму для створення нового допису." -#: ../../blog/docs/spec.rst:118 +#: ../../blog/docs/spec.rst:84 msgid "" -"It’s time to work with data representations. You’re to add HTML template to " -"the blog site project. Keep templates together with appropriate " -"applications, we don’t need mess in project files." +"``/`` and ``/blogs/`` page should provide a list of posts. Each post should " +"contain a link to its detail view (``/``). It's ok to use static " +"content for now." msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" -"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " -"додатками, нам не потрібен безлад у файлах проекту." +"Сторінки ``/`` і ``/blogs/`` мають надавати список публікацій. Кожен допис " +"має містити посилання на його детальний перегляд (``/``). Наразі " +"можна використовувати статичний вміст." -#: ../../blog/docs/spec.rst:122 -msgid "Application-level templates should be extended from the base one." -msgstr "Шаблони прикладного рівня повинні бути розширені з базового." - -#: ../../blog/docs/spec.rst:123 +#: ../../blog/docs/spec.rst:87 msgid "" -"Each page should contain a navbar at the top. Navbar will contain permalinks " -"to the home and about pages." +"``/`` page should provide details on a single post. It's ok to " +"use static content for now." msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " -"міститиме постійні посилання на домашню сторінку та сторінку про." +"Сторінка ``/`` має надавати детальну інформацію про одну " +"публікацію. Наразі можна використовувати статичний вміст." -#: ../../blog/docs/spec.rst:125 -msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +#: ../../blog/docs/spec.rst:89 +msgid "Detail view should contain links to ``/update/`` and ``/delete/``." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." + +#: ../../blog/docs/spec.rst:90 +msgid "``/profile//`` should render an author's personal page." +msgstr "``/profile//`` має відобразити особисту сторінку автора." -#: ../../blog/docs/spec.rst:127 +#: ../../blog/docs/spec.rst:97 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:99 +msgid "You are to implement data models for the blog site." +msgstr "Ви повинні реалізувати моделі даних для сайту блогу." + +#: ../../blog/docs/spec.rst:101 +msgid "The ``auth.User`` will be used as ``user`` model." +msgstr "``auth.User`` використовуватиметься як модель ``user``." + +#: ../../blog/docs/spec.rst:103 msgid "" -"For authenticated users ``/logout/`` and ``/create/`` links should be " -"visible in navbar." +"``post.slug`` value should be autogenerated when a record is created or " +"updated and follow the pattern:" msgstr "" -"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " -"мають бути видимими на панелі навігації." +"Значення ``post.slug`` має автоматично генеруватися під час створення або " +"оновлення запису та слідувати шаблону:" -#: ../../blog/docs/spec.rst:129 +#: ../../blog/docs/spec.rst:110 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"User preferred topics should be marked with a ``notify`` flag. This value " +"should be ``True`` by default." msgstr "" -"Якщо автентифікований користувач є адміністратором або іншим, він має " -"побачити посилання на сторінку адміністратора." +"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " +"замовчуванням це значення має бути ``True``." + +#: ../../blog/docs/spec.rst:143 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" -#: ../../blog/docs/spec.rst:131 +#: ../../blog/docs/spec.rst:145 msgid "" -"Each page should contain a list of links to archive views for the last year." +"Update existing views to represent entities that are actually stored inside " +"the project’s database." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " +"базі даних проекту." -#: ../../blog/docs/spec.rst:133 +#: ../../blog/docs/spec.rst:148 msgid "" -"For the ``post_list.html`` each post entity should provide the information:" +"Application-level templates should be located within appropriate " +"applications." +msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." + +#: ../../blog/docs/spec.rst:150 +msgid "``/`` and ``/blogs/``: should represent a list of existing blogposts." msgstr "" -"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" +"``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." + +#: ../../blog/docs/spec.rst:151 +msgid "Each post entity should provide the information about:" +msgstr "Кожен допис блогу повинен надавати інформацію про:" -#: ../../blog/docs/spec.rst:136 +#: ../../blog/docs/spec.rst:153 msgid "title (each word should be capitalized)" msgstr "назва (кожне слово має бути великим)" -#: ../../blog/docs/spec.rst:137 +#: ../../blog/docs/spec.rst:154 msgid "creation date" msgstr "дата створення" -#: ../../blog/docs/spec.rst:138 -msgid "list of related topics (first 3 topics)" -msgstr "список пов'язаних тем (перші 3 теми)" +#: ../../blog/docs/spec.rst:155 +msgid "list of related topics (first 3 topics or fewer)" +msgstr "список пов'язаних тем (перші 3 теми або менше)" -#: ../../blog/docs/spec.rst:139 +#: ../../blog/docs/spec.rst:156 msgid "trimmed content (~50 words or fewer)" msgstr "обрізаний вміст (~50 слів або менше)" -#: ../../blog/docs/spec.rst:140 +#: ../../blog/docs/spec.rst:157 msgid "number of comments" msgstr "кількість коментарів" -#: ../../blog/docs/spec.rst:142 +#: ../../blog/docs/spec.rst:159 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" "Кожна сутність публікації в поданні списку має бути посиланням на відповідну " "публікацію." -#: ../../blog/docs/spec.rst:144 -msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -msgstr "" -"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +#: ../../blog/docs/spec.rst:161 +msgid "``//``: should represent a single existing blogpost." +msgstr "``//``: має представляти одну наявну публікацію в блозі." -#: ../../blog/docs/spec.rst:145 +#: ../../blog/docs/spec.rst:162 msgid "Detail view should contain a list of post related comments." msgstr "" "Подання деталей має містити список коментарів, пов'язаних із публікацією." -#: ../../blog/docs/spec.rst:146 +#: ../../blog/docs/spec.rst:163 msgid "" -"Auth views should use ``register.html`` and ``login.html`` with " -"corresponding forms." +"``/profile//``: should contain information about user and a " +"list of posts authored by this user." msgstr "" -"Подання авторизації повинні використовувати ``register.html`` і ``login." -"html`` з відповідними формами." +"``/profile//``: має містити інформацію про користувача та " +"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.rst:149 +#: ../../blog/docs/spec.rst:165 msgid "" -"For now, it’s ok to use admin as “test user”. Authentication system will be " -"implemented in the future challenges. ``user`` object is available (by " -"default) in any template context. To test anonymous access you can use " -"``user.is_authenticated``, which returns ``False`` for non-authenticated " -"users." +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" -"Наразі можна використовувати адміністратора як «тестового користувача». " -"Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " -"Щоб перевірити анонімний доступ, ви можете використовувати ``user." -"is_authenticated``, який повертає ``False`` для неавтентифікованих " -"користувачів." +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." -#: ../../blog/docs/spec.rst:156 +#: ../../blog/docs/spec.rst:170 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:158 +#: ../../blog/docs/spec.rst:172 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:160 +#: ../../blog/docs/spec.rst:174 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:161 +#: ../../blog/docs/spec.rst:175 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:162 +#: ../../blog/docs/spec.rst:176 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:163 +#: ../../blog/docs/spec.rst:177 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:165 +#: ../../blog/docs/spec.rst:179 msgid "``username`` value should be validated against existing values" msgstr "" "Значення ``username`` має перевірятися на відповідність існуючим значенням" -#: ../../blog/docs/spec.rst:166 +#: ../../blog/docs/spec.rst:180 msgid "``password`` and ``confirm password`` values should match" msgstr "Значення ``password`` і ``confirm password`` мають збігатися" -#: ../../blog/docs/spec.rst:167 +#: ../../blog/docs/spec.rst:181 msgid "Create form for existing users login" msgstr "Створити форму для входу існуючих користувачів" -#: ../../blog/docs/spec.rst:168 +#: ../../blog/docs/spec.rst:182 msgid "Validations errors are to be rendered on the template" msgstr "Помилки перевірки мають бути відображені в шаблоні" -#: ../../blog/docs/spec.rst:171 -msgid "Challenge: Blogpost Creation and Update" -msgstr "Завдання: Створення та Оновлення Дописів" - -#: ../../blog/docs/spec.rst:173 -msgid "Create a form to work with the blogpost model." -msgstr "Створіть форму для роботи з моделлю допису." +#: ../../blog/docs/spec.rst:185 +msgid "Challenge: Authentication" +msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:174 +#: ../../blog/docs/spec.rst:187 msgid "" -"Create a form to gather a comment from a user. Form should be used within a " -"\"post detail\" view." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Створіть форму для збору коментарів від користувача. Форму слід " -"використовувати в перегляді \"подробиць публікації\"." - -#: ../../blog/docs/spec.rst:176 -msgid "Form should be used for *create* and *update* view." -msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." -#: ../../blog/docs/spec.rst:178 -msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +#: ../../blog/docs/spec.rst:189 +msgid "" +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як автора " -"публікації." +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:181 -msgid "Challenge: Authentication" -msgstr "Завдання: Автентифікація" +#: ../../blog/docs/spec.rst:191 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin page." +msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:183 +#: ../../blog/docs/spec.rst:193 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -436,12 +440,12 @@ msgid "" "error(s)." msgstr "" "``/register/``: користувачі повинні надати всю необхідну інформацію про " -"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім’я та " -"прізвище) необов’язкові. Після створення користувача вони повинні бути " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " +"прізвище) необов'язкові. Після створення користувача вони повинні бути " "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:188 +#: ../../blog/docs/spec.rst:198 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -451,7 +455,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:191 +#: ../../blog/docs/spec.rst:201 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -466,7 +470,7 @@ msgstr "" "Потім створюється допис, автором якого має бути поточний автентифікований " "користувач." -#: ../../blog/docs/spec.rst:196 +#: ../../blog/docs/spec.rst:206 msgid "" "``//comment``: Currently authenticated user should be referenced " "as a comment’s author." @@ -474,53 +478,79 @@ msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." -#: ../../blog/docs/spec.rst:198 +#: ../../blog/docs/spec.rst:208 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" "Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." -#: ../../blog/docs/spec.rst:202 +#: ../../blog/docs/spec.rst:212 +msgid "Challenge: Blogpost creation and update" +msgstr "Завдання: створення та оновлення блогу" + +#: ../../blog/docs/spec.rst:214 +msgid "Create a form to work with the blogpost model." +msgstr "Створіть форму для роботи з моделлю допису." + +#: ../../blog/docs/spec.rst:215 +msgid "" +"Create a form to gather a comment from a user. Form should be used within a " +"\"post detail\" view." +msgstr "" +"Створіть форму для збору коментарів від користувача. Форму слід " +"використовувати в перегляді \"подробиць публікації\"." + +#: ../../blog/docs/spec.rst:217 +msgid "Form should be used for *create* and *update* view." +msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." + +#: ../../blog/docs/spec.rst:219 +msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +msgstr "" +"Наразі можна використовувати *попередньо визначеного* користувача як автора " +"публікації." + +#: ../../blog/docs/spec.rst:222 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:204 +#: ../../blog/docs/spec.rst:224 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:205 +#: ../../blog/docs/spec.rst:225 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:207 +#: ../../blog/docs/spec.rst:227 msgid "It’s ok to use Django built-in views for auth." msgstr "" "Для автентифікації можна використовувати вбудовані представлення Django." -#: ../../blog/docs/spec.rst:210 +#: ../../blog/docs/spec.rst:230 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:212 +#: ../../blog/docs/spec.rst:232 msgid "Create serializers for:" msgstr "Створіть серіалізатори для:" -#: ../../blog/docs/spec.rst:214 +#: ../../blog/docs/spec.rst:234 msgid "Blogpost entity" msgstr "Об'єкт публікації в блозі" -#: ../../blog/docs/spec.rst:215 +#: ../../blog/docs/spec.rst:235 msgid "Blogpost comment" msgstr "Коментар у блозі" -#: ../../blog/docs/spec.rst:216 +#: ../../blog/docs/spec.rst:236 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:219 +#: ../../blog/docs/spec.rst:239 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:221 +#: ../../blog/docs/spec.rst:241 msgid "" "All blog-site functionality are to be reflected via REST API. It’s ok to use " "*pre-defined* user as a post’s author for now." @@ -528,25 +558,25 @@ msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " "використовувати *попередньо визначеного* користувача як автора публікації." -#: ../../blog/docs/spec.rst:225 +#: ../../blog/docs/spec.rst:245 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:227 +#: ../../blog/docs/spec.rst:247 msgid "Implement REST authentication system." msgstr "Запровадити систему автентифікації REST." -#: ../../blog/docs/spec.rst:228 +#: ../../blog/docs/spec.rst:248 msgid "Only account owner can change their account data." msgstr "" "Лише власник облікового запису може змінити дані свого облікового запису." -#: ../../blog/docs/spec.rst:229 +#: ../../blog/docs/spec.rst:249 msgid "Only authenticated users can create posts and comments." msgstr "" "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." -#: ../../blog/docs/spec.rst:230 +#: ../../blog/docs/spec.rst:250 msgid "Only authors can change their posts." msgstr "Тільки автори можуть змінювати свої повідомлення." @@ -782,7 +812,7 @@ msgid "" "uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " -"вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " +"вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " "пропущено, просто використовує натомість значення ``Product.unit``." #: ../../problem-sets/src/conv_store/challenge.rst:73 @@ -1152,8 +1182,8 @@ msgid "" "precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " -"найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " -"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " +"найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " "в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " "направо)." @@ -1178,7 +1208,7 @@ msgid "" "Binding or parenthesized expression, list display, dictionary display, set " "display" msgstr "" -"Прив’язка або вираз у дужках, відображення списку, відображення словника, " +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " "відображення набору" #: ../../src/appx/precedence.txt:23 @@ -1328,7 +1358,7 @@ msgid "" "the power operator binds less tightly than an arithmetic or bitwise unary " "operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" -"оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " +"оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 @@ -1360,12 +1390,12 @@ msgid "" "are replaced with zero or more elements of *values*. If *format* requires a " "single argument, *values* may be a single non-tuple object." msgstr "" -"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " "модулю). Це також відоме як оператор *форматування* рядка або " "*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " "значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " "замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об’єктом." +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -1532,7 +1562,7 @@ msgstr "``'r'``" #: ../../src/appx/printf.txt:68 msgid "Converts any Python object using ``repr()``" -msgstr "Перетворює будь-який об’єкт Python за допомогою ``repr()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``repr()``" #: ../../src/appx/printf.txt:70 msgid "``'s'``" @@ -1540,7 +1570,7 @@ msgstr "``'s'``" #: ../../src/appx/printf.txt:70 msgid "Converts any Python object using ``str()``" -msgstr "Перетворює будь-який об’єкт Python за допомогою ``str()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``str()``" #: ../../src/appx/printf.txt:72 msgid "``'a'``" @@ -1548,7 +1578,7 @@ msgstr "``'a'``" #: ../../src/appx/printf.txt:72 msgid "Converts any Python object using ``ascii()``" -msgstr "Перетворює будь-який об’єкт Python за допомогою ``ascii()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``ascii()``" #: ../../src/appx/printf.txt:74 msgid "``'%'``" @@ -1720,7 +1750,7 @@ msgid "" "over 35 years of active development that has earned it a strong reputation " "for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " "кодом, активна розробка якої триває понад 35 років, завдяки чому вона " "заслужила міцну репутацію надійності, надійності функцій і продуктивності." @@ -2082,7 +2112,7 @@ msgid "" "initial score points value and health." msgstr "" "Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров’я." +"екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.__init__:6 msgid "a player's name" @@ -2415,3 +2445,31 @@ msgstr "" #~ msgid "``defence``" #~ msgstr "``defence``" + +#~ msgid "" +#~ "Each page should contain a list of links to archive views for the last " +#~ "year." +#~ msgstr "" +#~ "Кожна сторінка має містити список посилань на перегляди архіву за " +#~ "останній рік." + +#~ msgid "" +#~ "Auth views should use ``register.html`` and ``login.html`` with " +#~ "corresponding forms." +#~ msgstr "" +#~ "Подання авторизації повинні використовувати ``register.html`` і ``login." +#~ "html`` з відповідними формами." + +#~ msgid "" +#~ "For now, it’s ok to use admin as “test user”. Authentication system will " +#~ "be implemented in the future challenges. ``user`` object is available (by " +#~ "default) in any template context. To test anonymous access you can use " +#~ "``user.is_authenticated``, which returns ``False`` for non-authenticated " +#~ "users." +#~ msgstr "" +#~ "Наразі можна використовувати адміністратора як «тестового користувача». " +#~ "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " +#~ "«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " +#~ "Щоб перевірити анонімний доступ, ви можете використовувати ``user." +#~ "is_authenticated``, який повертає ``False`` для неавтентифікованих " +#~ "користувачів." From ef9ae7af51cce5d59b6ab26254cb7e180623922f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 05:21:59 +0300 Subject: [PATCH 096/689] Added translations for "intro" Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/intro.po | 921 +++++++++++++++++++++++++++ 1 file changed, 921 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/intro.po diff --git a/src/_locales/uk/LC_MESSAGES/intro.po b/src/_locales/uk/LC_MESSAGES/intro.po new file mode 100644 index 000000000..a94e8d8ae --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro.po @@ -0,0 +1,921 @@ +# INTRODUCTION SECTION TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training Course package. +# +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-21 04:34+0300\n" +"PO-Revision-Date: 2023-04-21 05:21+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/intro/index.txt:120 +msgid "Contents" +msgstr "Зміст" + +#: ../../src/intro/index.txt:2 +msgid "" +"There are a whole bunch of common programming tasks that are easy in Python. " +"For someone who is not yet a programmer, who wants to become a programmer, " +"for those people Python is particularly easy to get. In Python, every symbol " +"you type is essential." +msgstr "" +"Існує ціла купа звичайних програмних завдань, які легко виконати на Python. " +"Для тих, хто ще не програміст, хто хоче стати програмістом, для цих людей " +"Python особливо легко отримати. У Python кожен символ, який ви вводите, є " +"важливим." + +#: ../../src/intro/index.txt:7 +msgid "|guido| Guido van Rossum" +msgstr "|guido| Гвідо ван Россум" + +#: ../../src/intro/index.txt:172 +msgid "guido" +msgstr "guido" + +#: ../../src/intro/index.txt:11 +msgid "Introduction to Python" +msgstr "Введення в Python" + +#: ../../src/intro/index.txt:13 +msgid "" +"|python| **Python** is a high-level, interpreted scripting language. It was " +"created in the early 1990s by Guido van Rossum at Stichting Mathematisch " +"Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of " +"a language called ABC. Guido remains Python’s principal author, although it " +"includes many contributions from others." +msgstr "" +"|python| **Python** — це інтерпретована скриптова мова високого рівня. Її " +"було створено на початку 1990-х років Гвідо ван Россумом у Stichting " +"Mathematisch Centrum (CWI, див. https://www.cwi.nl/) у Нідерландах як " +"наступника мови під назвою ABC. Гвідо залишається головним автором Python, " +"хоча мова містить багато внесків від інших авторів." + +#: ../../src/intro/index.txt:129 +msgid "python" +msgstr "python" + +#: ../../src/intro/index.txt:19 +msgid "" +"Python 2.0 was released in 2000, and the 2.x versions were the prevalent " +"releases until December 2008. At that time, the development team made the " +"decision to release version 3.0, which contained a few relatively small but " +"significant changes that were not backward compatible with the 2.x versions. " +"Python 2 and 3 are very similar, and some features of Python 3 have been " +"backported to Python 2. But in general, they remain not quite compatible." +msgstr "" +"Python 2.0 був випущений у 2000 році, а версії 2.x були поширеними випусками " +"до грудня 2008 року. У той час команда розробників прийняла рішення " +"випустити версію 3.0, яка містила кілька відносно невеликих, але значних " +"змін, які не були зворотно сумісними. з версіями 2.x. Python 2 і 3 дуже " +"схожі, і деякі функції Python 3 були перенесені в Python 2. Але загалом вони " +"залишаються не зовсім сумісними." + +#: ../../src/intro/index.txt:26 +msgid "" +"Both Python 2 and 3 have continued to be maintained and developed, with " +"periodic release updates for both. However, an official End Of Life date of " +"January 1, 2020 has been established for Python 2, after which time it will " +"no longer be maintained." +msgstr "" +"І Python 2, і 3 продовжували підтримуватися та розроблятися з періодичними " +"оновленнями для обох. Однак для Python 2 було встановлено офіційну дату " +"завершення життя 1 січня 2020 року, після якої він більше не " +"підтримуватиметься." + +#: ../../src/intro/index.txt:31 +msgid "" +"Python is still maintained by a core development team at the Institute, and " +"Guido is still in charge, having been given the title of BDFL (Benevolent " +"Dictator For Life) by the Python community. The name Python, by the way, " +"derives not from the snake, but from the British comedy troupe Monty " +"Python’s Flying Circus, of which Guido was, and presumably still is, a fan. " +"It is common to find references to Monty Python sketches and movies " +"scattered throughout the Python documentation." +msgstr "" +"Python все ще підтримується основною командою розробників в Інституті, і " +"Гвідо все ще керує, отримавши звання BDFL (Доброзичливий диктатор на все " +"життя) від спільноти Python. Назва Python, до речі, походить не від імені " +"змії, а від британської комедійної трупи Monty Python’s Flying Circus, " +"шанувальником якої був і, мабуть, залишається Гвідо. Посилання на ескізи та " +"фільми Monty Python часто можна знайти в документації Python." + +#: ../../src/intro/index.txt:39 +msgid "Here are some significant facts about Python." +msgstr "Ось кілька важливих фактів про Python." + +#: ../../src/intro/index.txt:42 +msgid "Python is popular" +msgstr "Python популярний" + +#: ../../src/intro/index.txt:43 +msgid "" +"Python has been growing in popularity over the last few years. The 2018 " +"Stack Overflow Developer Survey ranked Python as the 7th most popular and " +"the number one most wanted technology of the year. By the end of Q-4 in 2022 " +"Python is the **top** language on all GitHut metrics :cite:`github:stats`." +msgstr "" +"Python набирає популярності протягом останніх кількох років. Опитування " +"розробників Stack Overflow 2018 року поставило Python на сьоме місце за " +"популярністю та на перше місце серед найпопулярніших технологій року. До " +"кінця четвертого кварталу 2022 року Python є **найпопулярнішою** мовою за " +"всіма показниками GitHut :cite:`github:stats`." + +#: ../../src/intro/index.txt:49 +msgid "" +"Here are some logos of unknown companies across the globe who uses Python:" +msgstr "" +"Ось кілька логотипів невідомих компаній по всьому світі, які використовують " +"Python:" + +#: ../../src/intro/index.txt:54 +msgid "google facebook instagram spotify quora netflix dropbox reddit" +msgstr "google facebook instagram spotify quora netflix dropbox reddit" + +#: ../../src/intro/index.txt:0 +msgid "Google" +msgstr "Google" + +#: ../../src/intro/index.txt:0 +msgid "Facebook" +msgstr "Facebook" + +#: ../../src/intro/index.txt:0 +msgid "Instagram" +msgstr "Instagram" + +#: ../../src/intro/index.txt:0 +msgid "Spotify" +msgstr "Spotify" + +#: ../../src/intro/index.txt:0 +msgid "Quora" +msgstr "Quora" + +#: ../../src/intro/index.txt:0 +msgid "Netflix" +msgstr "Netflix" + +#: ../../src/intro/index.txt:0 +msgid "Dropbox" +msgstr "Dropbox" + +#: ../../src/intro/index.txt:0 +msgid "Reddit" +msgstr "Reddit" + +#: ../../src/intro/index.txt:56 +msgid "Python is interpreted" +msgstr "Python інтерпретується" + +#: ../../src/intro/index.txt:57 +msgid "" +"Many languages are compiled, meaning the source code you create needs to be " +"translated into machine code, the language of your computer’s processor, " +"before it can be run. Programs written in an interpreted language are passed " +"straight to an interpreter that runs them directly." +msgstr "" +"Багато мов компілюється, тобто вихідний код, який ви створюєте, має бути " +"переведений у машинний код, мовою процесора вашого комп’ютера, перш ніж його " +"можна буде запустити. Програми, написані на інтерпретованій мові, " +"передаються прямо до інтерпретатора, який їх безпосередньо запускає." + +#: ../../src/intro/index.txt:62 +msgid "" +"This makes for a quicker development cycle because you just type in your " +"code and run it, without the intermediate compilation step." +msgstr "" +"Це забезпечує швидший цикл розробки, оскільки ви просто вводите код і " +"запускаєте його без проміжного етапу компіляції." + +#: ../../src/intro/index.txt:66 +msgid "Python is free" +msgstr "Python безкоштовний" + +#: ../../src/intro/index.txt:67 +msgid "" +"The Python interpreter is developed under an OSI-approved open-source " +"license, making it free to install, use, and distribute, even for commercial " +"purposes." +msgstr "" +"Інтерпретатор Python розроблено відповідно до схваленої OSI ліцензії з " +"відкритим вихідним кодом, що робить його безкоштовним для встановлення, " +"використання та розповсюдження навіть у комерційних цілях." + +#: ../../src/intro/index.txt:71 +msgid "Python is portable" +msgstr "Python портативний" + +#: ../../src/intro/index.txt:72 +msgid "" +"Because Python code is interpreted and not compiled into native machine " +"instructions, code written for one platform will work on any other platform " +"that has the Python interpreter installed. This is true of any interpreted " +"language, not just Python." +msgstr "" +"Оскільки код Python інтерпретується, а не компілюється у власні машинні " +"інструкції, код, написаний для однієї платформи, працюватиме на будь-якій " +"іншій платформі, де встановлено інтерпретатор Python. Це стосується будь-" +"якої інтерпретованої мови, а не лише Python." + +#: ../../src/intro/index.txt:78 +msgid "Python is simple" +msgstr "Python простий" + +#: ../../src/intro/index.txt:79 +msgid "" +"As programming languages go, Python is relatively uncluttered, and the " +"developers have deliberately kept it that way. A rough estimate of the " +"complexity of a language can be gleaned from the number of keywords or " +"reserved words in the language. These are words that are reserved for " +"special meaning by the compiler or interpreter because they designate " +"specific built-in functionality of the language. There are only 35 :cite:" +"`docs-python:keywords` in Python and they are:" +msgstr "" +"Що стосується мов програмування, Python є відносно незавантаженим, і " +"розробники навмисно залишили його таким. Приблизну оцінку складності мови " +"можна отримати з кількості ключових або зарезервованих слів у мові. Це " +"слова, які зарезервовані для спеціального значення компілятором або " +"інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " +"У Python лише 35 :cite:`docs-python:keywords`, і вони:" + +#: ../../src/intro/index.txt:88 +msgid "False" +msgstr "False" + +#: ../../src/intro/index.txt:88 +msgid "await" +msgstr "await" + +#: ../../src/intro/index.txt:88 +msgid "else" +msgstr "else" + +#: ../../src/intro/index.txt:88 +msgid "import" +msgstr "import" + +#: ../../src/intro/index.txt:88 +msgid "pass" +msgstr "pass" + +#: ../../src/intro/index.txt:90 +msgid "None" +msgstr "None" + +#: ../../src/intro/index.txt:90 +msgid "break" +msgstr "break" + +#: ../../src/intro/index.txt:90 +msgid "except" +msgstr "except" + +#: ../../src/intro/index.txt:90 +msgid "in" +msgstr "in" + +#: ../../src/intro/index.txt:90 +msgid "raise" +msgstr "raise" + +#: ../../src/intro/index.txt:92 +msgid "True" +msgstr "True" + +#: ../../src/intro/index.txt:92 +msgid "class" +msgstr "class" + +#: ../../src/intro/index.txt:92 +msgid "finally" +msgstr "finally" + +#: ../../src/intro/index.txt:92 +msgid "is" +msgstr "is" + +#: ../../src/intro/index.txt:92 +msgid "return" +msgstr "return" + +#: ../../src/intro/index.txt:94 +msgid "and" +msgstr "and" + +#: ../../src/intro/index.txt:94 +msgid "continue" +msgstr "continue" + +#: ../../src/intro/index.txt:94 +msgid "for" +msgstr "for" + +#: ../../src/intro/index.txt:94 +msgid "lambda" +msgstr "lambda" + +#: ../../src/intro/index.txt:94 +msgid "try" +msgstr "try" + +#: ../../src/intro/index.txt:96 +msgid "as" +msgstr "as" + +#: ../../src/intro/index.txt:96 +msgid "def" +msgstr "def" + +#: ../../src/intro/index.txt:96 +msgid "from" +msgstr "from" + +#: ../../src/intro/index.txt:96 +msgid "nonlocal" +msgstr "nonlocal" + +#: ../../src/intro/index.txt:96 +msgid "while" +msgstr "while" + +#: ../../src/intro/index.txt:98 +msgid "assert" +msgstr "assert" + +#: ../../src/intro/index.txt:98 +msgid "del" +msgstr "del" + +#: ../../src/intro/index.txt:98 +msgid "global" +msgstr "global" + +#: ../../src/intro/index.txt:98 +msgid "not" +msgstr "not" + +#: ../../src/intro/index.txt:98 +msgid "with" +msgstr "with" + +#: ../../src/intro/index.txt:100 +msgid "async" +msgstr "async" + +#: ../../src/intro/index.txt:100 +msgid "elif" +msgstr "elif" + +#: ../../src/intro/index.txt:100 +msgid "if" +msgstr "if" + +#: ../../src/intro/index.txt:100 +msgid "or" +msgstr "or" + +#: ../../src/intro/index.txt:100 +msgid "yield" +msgstr "yield" + +#: ../../src/intro/index.txt:104 +msgid "Python is general purpose" +msgstr "Python є універсальним" + +#: ../../src/intro/index.txt:105 +msgid "" +"Python is everywhere. Talking more specific common scopes for Python " +"developers are :cite:`python-usage`:" +msgstr "" +"Python всюди. Говорячи про більш конкретні загальні області для розробників " +"Python, це :cite:`python-usage`:" + +#: ../../src/intro/index.txt:108 +msgid "Web Scraping Applications" +msgstr "Програми для сканування веб-сторінок" + +#: ../../src/intro/index.txt:109 +msgid "Data Science Solutions" +msgstr "Рішення для Data Science" + +#: ../../src/intro/index.txt:110 +msgid "Machine Learning Applications" +msgstr "Програми машинного навчання" + +#: ../../src/intro/index.txt:111 +msgid "Web Development" +msgstr "Веб-розробка" + +#: ../../src/intro/index.txt:112 +msgid "Game Development" +msgstr "Розробка ігор" + +#: ../../src/intro/index.txt:113 +msgid "Scientific and Numeric Applications" +msgstr "Наукові та обчислювальні програми" + +#: ../../src/intro/index.txt:114 +msgid "Image Design and Graphic Design Applications" +msgstr "Програми для обробки зображень та графіки" + +#: ../../src/intro/index.txt:115 +msgid "Finance Fintech Platform" +msgstr "Банківські та фінансові сервіси" + +#: ../../src/intro/index.txt:116 +msgid "Language Development" +msgstr "Language Development" + +#: ../../src/intro/index.txt:117 +msgid "Operating Systems" +msgstr "Операційні системи" + +#: ../../src/intro/install.txt:3 ../../src/intro/install.txt:21 +msgid "Install Python" +msgstr "Встановлення Python" + +#: ../../src/intro/install.txt:5 +msgid "" +"The `Python wiki `_ " +"briefly describes the installation process." +msgstr "" +"`Вікі Python `_ " +"коротко описує процес встановлення." + +#: ../../src/intro/install.txt:8 +msgid "" +"To become a **true** professional, you need a special software called :abbr:" +"`IDE (Integrated Development Environment)` or at least a code editor " +"supporting syntax highlight. Refer :doc:`/appx/code_edit` for more " +"information." +msgstr "" +"Щоб стати **справжнім** професіоналом, вам потрібне спеціальне програмне " +"забезпечення під назвою :abbr:`IDE (Integrated Development Environment)` або " +"принаймні редактор коду, який підтримує підсвічування синтаксису. Зверніться " +"до :doc:`/appx/code_edit` для отримання додаткової інформації." + +#: ../../src/intro/install.txt:14 +msgid "Linux" +msgstr "Linux" + +#: ../../src/intro/install.txt:16 +msgid "" +"On most Linux distros Python comes pre-installed and/or all distro have it " +"available in their package repository (I haven't seen the one which does " +"have). The installation process depends on the distro, but here are some " +"examples how you can install it:" +msgstr "" +"У більшості дистрибутивів Linux Python постачається попередньо встановленим " +"і/або в усіх дистрибутивах він доступний у сховищі пакетів (я не бачив того, " +"у якому є). Процес встановлення залежить від дистрибутива, але ось кілька " +"прикладів того, як його можна встановити:" + +#: ../../src/intro/install.txt:37 +msgid "MacOS" +msgstr "MacOS" + +#: ../../src/intro/install.txt:39 +msgid "" +"For newer versions of MacOS Python is no longer included by default and you " +"will have to download and install it." +msgstr "" +"Для нових версій MacOS Python більше не включено за замовчуванням, і вам " +"доведеться завантажити та встановити його." + +#: ../../src/intro/install.txt:42 +msgid "The process is described at: `Using Python on a Mac`_." +msgstr "Процес описано в: `Використання Python на Mac`_." + +#: ../../src/intro/install.txt:44 +msgid "" +"Briefly, you are invited to visit `downloads`_ and download the latest " +"stable version of Python. A \"universal binary\" build of Python runs " +"natively on Mac's new Intel and legacy PPC CPUs." +msgstr "" +"Коротко, вас запрошують відвідати `завантаження`_ та завантажити останню " +"стабільну версію Python. \"Універсальна двійкова\" збірка Python працює " +"нативно на нових процесорах Intel і застарілих процесорах PPC від Mac." + +#: ../../src/intro/install.txt:48 +msgid "After the installation you would get:" +msgstr "Після встановлення ви отримаєте:" + +#: ../../src/intro/install.txt:50 +msgid "" +"`Python 3.x` folder in `Applications` folder. Standard development " +"environment (`IDLE`) and `PythonLauncher` included." +msgstr "" +"Папка `Python 3.x` в папці `Програми`. Включено стандартне середовище " +"розробки (`IDLE`) і `PythonLauncher`." + +#: ../../src/intro/install.txt:52 +msgid "" +"A framework `/Library/Frameworks/Python.framework` included libraries and " +"executables." +msgstr "" +"Фреймворк `/Library/Frameworks/Python.framework` що включає бібліотеки та " +"виконувані файли." + +#: ../../src/intro/install.txt:56 +msgid "Install from Homebrew" +msgstr "Встановити з Homebrew" + +#: ../../src/intro/install.txt:58 +msgid "" +"Python for MacOS is available via Homebrew. You are to search `formulae`_ " +"for the latest available version. In general, it's as easy as:" +msgstr "" +"Python для MacOS доступний через Homebrew. Ви повинні шукати `формули`_ для " +"останньої доступної версії. Загалом, це так само просто:" + +#: ../../src/intro/install.txt:66 +msgid "Windows" +msgstr "Windows" + +#: ../../src/intro/install.txt:68 +msgid "" +"As for MacOS, here is the official documentation: `Using Python on Windows`_." +msgstr "" +"Що стосується MacOS, ось офіційна документація: `Using Python on Windows`_." + +#: ../../src/intro/install.txt:70 +msgid "" +"For Windows' users the stable release is available from `downloads`_. Just " +"download the installer and proceed to common steps to install software." +msgstr "" +"Для користувачів Windows стабільний випуск доступний із `завантажень`_. " +"Просто завантажте програму встановлення та перейдіть до стандартних кроків " +"для встановлення програмного забезпечення." + +#: ../../src/intro/install.txt:73 +msgid "" +"It's recommended to **Add Python3.x to PATH**, this will avoid problems at " +"the beginning of your journey with Python" +msgstr "" +"Рекомендовано **Додати Python3.x до PATH**, це дозволить уникнути проблем на " +"початку вашого шляху з Python" + +#: ../../src/intro/install.txt:80 +msgid "Python installer first page" +msgstr "Перша сторінка інсталятора Python" + +#: ../../src/intro/install.txt:82 +msgid "Going on with **Install Now**:" +msgstr "Продовжуємо з **Встановити зараз**:" + +#: ../../src/intro/install.txt:84 +msgid "Python will be installed to your user directory" +msgstr "Python буде встановлено у ваш каталог користувача" + +#: ../../src/intro/install.txt:85 +msgid "" +"Python Launcher will be installed according to the option at the bottom of " +"the page" +msgstr "Python Launcher буде встановлено відповідно до опції внизу сторінки" + +#: ../../src/intro/install.txt:88 +msgid "" +"Using **Customize installation** will perform an *all-users* installation." +msgstr "" +"Використання **Налаштувати інсталяцію** виконає інсталяцію *для всіх " +"користувачів*." + +#: ../../src/intro/install.txt:91 +msgid "Removing the MAX_PATH Limitation" +msgstr "Видалення обмеження MAX_PATH" + +#: ../../src/intro/install.txt:93 +msgid "" +"Windows historically has limited path lengths to 260 characters. This meant " +"that paths longer than this would not resolve and errors would result. In " +"the latest versions of Windows, this limitation can be expanded to " +"approximately 32,000 characters. This allows the open() function, the os " +"module and most other path functionality to accept and return paths longer " +"than 260 characters." +msgstr "" +"Історично у Windows довжина шляху обмежена 260 символами. Це означало, що " +"шляхи, довші за цей, не вирішуватимуться, і спричинятимуться помилки. В " +"останніх версіях Windows це обмеження можна розширити приблизно до 32 000 " +"символів. Це дозволяє функції open(), модулю os і більшості інших функцій " +"шляху приймати та повертати шляхи, довші за 260 символів." + +#: ../../src/intro/install.txt:99 +msgid "You will need PC administrator assistance to perform this action." +msgstr "Для виконання цієї дії вам знадобиться допомога адміністратора ПК." + +#: ../../src/intro/install.txt:102 +msgid "Install from the Microsoft Store" +msgstr "Встановити з Microsoft Store" + +#: ../../src/intro/install.txt:104 +msgid "You can install from the Microsoft Store in two steps:" +msgstr "Ви можете встановити з Microsoft Store у два кроки:" + +#: ../../src/intro/install.txt:106 +msgid "" +"Open the Microsoft Store app and search for ``Python`` The result should " +"look like:" +msgstr "" +"Відкрийте програму Microsoft Store і знайдіть ``Python``. Результат має " +"виглядати так:" + +#: ../../src/intro/install.txt:112 +msgid "Microsoft Store - search results for \"Python\"" +msgstr "Microsoft Store - результати пошуку для \"Python\"" + +#: ../../src/intro/install.txt:114 +msgid "Select ``Python 3.9`` or the higher available version." +msgstr "Виберіть ``Python 3.9`` або вищу доступну версію." + +#: ../../src/intro/install.txt:116 +msgid "" +"Click **GET** and wait until the installer is downloaded. The installation " +"process should run automatically. Follow the installer's instructions." +msgstr "" +"Натисніть **GET** і дочекайтеся завантаження інсталятора. Процес " +"встановлення має запуститися автоматично. Дотримуйтесь інструкцій " +"інсталятора." + +#: ../../src/intro/install.txt:124 +msgid "Online Interpreters" +msgstr "Онлайн Інтерпретатори" + +#: ../../src/intro/install.txt:126 +msgid "" +"Installing or updating Python on your computer is the first step to becoming " +"a Python programmer :cite:`realpython:install-and-setup`." +msgstr "" +"Встановлення або оновлення Python на вашому комп’ютері – це перший крок до " +"того, щоб стати програмістом Python :cite:`realpython:install-and-setup`." + +#: ../../src/intro/install.txt:129 +msgid "" +"But if you cannot install Python at the moment for some reason, are can go " +"with online interpreters. `repl.it `_ provides the " +"ability to create and store Python scripts (they are called *repl* here) for " +"free." +msgstr "" +"Але якщо ви не можете встановити Python на даний момент з якоїсь причини, " +"можна скористатися онлайн-інтерпретаторами. `repl.it `_ " +"надає можливість безкоштовно створювати та зберігати сценарії Python (тут " +"вони називаються *repl*)." + +#: ../../src/intro/interact.txt:3 +msgid "Interacting with Python Interpreter" +msgstr "Взаємодія з інтерпретатором Python" + +#: ../../src/intro/interact.txt:5 +msgid "It’s time to write some Python code!" +msgstr "Настав час написати код на Python!" + +#: ../../src/intro/interact.txt:7 +msgid ":cite:t:`realpython:interact`" +msgstr ":cite:t:`realpython:interact`" + +#: ../../src/intro/interact.txt:9 +msgid "In short there are three major ways to do something with Python:" +msgstr "Коротше кажучи, є три основні способи зробити щось з Python:" + +#: ../../src/intro/interact.txt:11 +msgid "interactive Python console" +msgstr "інтерактивна консоль Python" + +#: ../../src/intro/interact.txt:12 +msgid "running code from file [#]_" +msgstr "запуск коду з файлу [#]_" + +#: ../../src/intro/interact.txt:13 +msgid "use online editors (like `repl.it `_)" +msgstr "" +"використовувати онлайн-редактори (наприклад, `repl.it `_)" + +#: ../../src/intro/interact.txt:16 +msgid "Using Python interpreter interactively" +msgstr "Використання інтерпретатора Python в інтерактивному режимі" + +#: ../../src/intro/interact.txt:18 +msgid "" +"Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight " +"forward way to start talking to Python. This simply means starting up the " +"interpreter and typing commands to it directly :cite:`realpython:interact`. " +"The interpreter:" +msgstr "" +"Використання середовища :abbr:`REPL (Read-Eval-Print-Loop)` є найпростішим " +"способом почати спілкування з Python. Це просто означає запуск " +"інтерпретатора та введення команд безпосередньо в нього :cite:`realpython:" +"interact`. Перекладач:" + +#: ../../src/intro/interact.txt:23 +msgid "Reads the command you enter" +msgstr "Читає введену команду" + +#: ../../src/intro/interact.txt:24 +msgid "Evaluates and executes it" +msgstr "Оцінює та виконує її" + +#: ../../src/intro/interact.txt:25 +msgid "Prints the output (if any) back to the console" +msgstr "Друкує результат (якщо є) назад на консоль" + +#: ../../src/intro/interact.txt:26 +msgid "Loops back and repeats" +msgstr "Повертається назад та повторює" + +#: ../../src/intro/interact.txt:29 +msgid "Starting the interpreter" +msgstr "Запуск інтерпретатора" + +#: ../../src/intro/interact.txt:31 +msgid "" +"In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the " +"installer placed a shortcut on the desktop to launch the Python." +msgstr "" +"У середовищі :abbr:`GUI (Graphic User Interface)`, імовірно, інсталятор " +"розмістив ярлик на робочому столі для запуску Python." + +#: ../../src/intro/interact.txt:34 +msgid "" +"For example in Windows the interpreter can be found in the **Start** menu " +"labeled **Python 3.x**:" +msgstr "" +"Наприклад, у Windows інтерпретатор можна знайти в меню **Пуск** з позначкою " +"**Python 3.x**:" + +#: ../../src/intro/interact.txt:40 +msgid "Windows start menu Python group" +msgstr "Меню Пуск Windows Група Python" + +#: ../../src/intro/interact.txt:42 +msgid "" +"In case you are getting error saying python is not installed, but you are " +"sure that the interpreter **is installed** - this means you have no Python " +"in your ``PATH``. Message may look like: ``'python' is not recognized as an " +"internal or external command`` / ``python: command not found``" +msgstr "" +"Якщо ви отримуєте повідомлення про те, що python не встановлено, але ви " +"впевнені, що інтерпретатор **встановлено**, це означає, що у вашому ``PATH`` " +"немає Python. Повідомлення може виглядати так: ``'python' не розпізнається " +"як внутрішня або зовнішня команда`` / ``python: команда не знайдена``" + +#: ../../src/intro/interact.txt:48 +msgid "Refer :doc:`/appx/env_path` for problem solution." +msgstr "Зверніться до :doc:`/appx/env_path` для вирішення проблеми." + +#: ../../src/intro/interact.txt:50 +msgid "The alternative is to launch from a terminal window:" +msgstr "Альтернативою є запуск із вікна терміналу:" + +#: ../../src/intro/interact.txt:52 +msgid "**Command Prompt** in Windows" +msgstr "**Командний рядок** у Windows" + +#: ../../src/intro/interact.txt:53 +msgid "**Terminal** both in macOS and Linux" +msgstr "**Термінал** в macOS і Linux" + +#: ../../src/intro/interact.txt:58 +msgid "Start Python via Command Prompt" +msgstr "Запуск Python через командний рядок" + +#: ../../src/intro/interact.txt:63 +msgid "Start Python via Terminal" +msgstr "Запуск Python через термінал" + +#: ../../src/intro/interact.txt:66 +msgid "Running code" +msgstr "Запускаємо код" + +#: ../../src/intro/interact.txt:68 +msgid "" +"Put the Python code in interactive console and press enter to execute it." +msgstr "" +"Помістіть код Python в інтерактивну консоль і натисніть enter, щоб виконати " +"його." + +#: ../../src/intro/interact.txt:70 +msgid "" +"Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after " +"it" +msgstr "" +"Переконайтеся, що підказка ``>>>`` відображається, а курсор знаходиться " +"після неї" + +#: ../../src/intro/interact.txt:72 +msgid "Type the command ``print(\"Hello, World!\")``" +msgstr "Введіть команду ``print(\"Hello, World!\")``" + +#: ../../src/intro/interact.txt:73 +msgid "Press enter" +msgstr "Натисніть enter" + +#: ../../src/intro/interact.txt:79 +msgid "Your session should look like:" +msgstr "Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:86 +msgid "" +"If you've seen string \"Hello, World!\" printed back, congrats - you've run " +"your first program in Python." +msgstr "" +"Якщо ви бачили рядок \"Hello, World!\" надруковано, вітаємо - ви запустили " +"свою першу програму на Python." + +#: ../../src/intro/interact.txt:94 +msgid "Exiting the interpreter" +msgstr "Вихід з інтерпретатора" + +#: ../../src/intro/interact.txt:96 +msgid "To exit the interactive console type \"exit\" and hit enter." +msgstr "Щоб вийти з інтерактивної консолі, введіть \"exit\" і натисніть Enter." + +#: ../../src/intro/interact.txt:103 +msgid "Running code from file" +msgstr "Запуск коду з файлу" + +#: ../../src/intro/interact.txt:105 +msgid "" +"A Python script is a reusable set of code. It is essentially a Python " +"program - a sequence of Python instructions - contained in a file. You can " +"run the program by specifying the name of the script file to the interpreter." +msgstr "" +"Сценарій Python — це багаторазовий набір коду. По суті, це програма на " +"Python – послідовність інструкцій Python, які містяться у файлі. Ви можете " +"запустити програму, вказавши інтерпретатору назву файлу сценарію." + +#: ../../src/intro/interact.txt:109 +msgid "" +"Python scripts are just plain text, so you can edit them with any text " +"editor. If you have a favorite programmer’s editor that operates on text " +"files, it should be fine to use. Otherwise here are some options for the " +"first time:" +msgstr "" +"Сценарії Python — це звичайний текст, тому ви можете редагувати їх у будь-" +"якому текстовому редакторі. Якщо у вас є улюблений програмістський редактор, " +"який працює з текстовими файлами, його цілком можна використовувати. Інакше " +"ось кілька варіантів для першого разу:" + +#: ../../src/intro/interact.txt:113 +msgid "Windows: |npp| `Notepad++ `_" +msgstr "Windows: |npp| `Notepad++ `_" + +#: ../../src/intro/interact.txt:148 +msgid "npp" +msgstr "npp" + +#: ../../src/intro/interact.txt:114 +msgid "Linux: |geany| `Geany `_" +msgstr "Linux: |geany| `Geany `_" + +#: ../../src/intro/interact.txt:150 +msgid "geany" +msgstr "geany" + +#: ../../src/intro/interact.txt:116 +msgid "" +"Using whatever editor create a script file called ``hello.py`` and put the " +"code in it:" +msgstr "" +"Використовуючи будь-який редактор, створіть файл сценарію під назвою ``hello." +"py`` і помістіть у нього код:" + +#: ../../src/intro/interact.txt:123 +msgid "" +"Save file keeping track on the directory you choose to save into. Now, open " +"the terminal or command prompt in this directory." +msgstr "" +"Збережіть файл, відстежуючи його в каталозі, який ви вибрали для збереження. " +"Тепер відкрийте термінал або командний рядок у цьому каталозі." + +#: ../../src/intro/interact.txt:126 +msgid "" +"In window you may open Command Prompt in the directory by typing \"cmd\" to " +"the address bar in explorer." +msgstr "" +"У вікні ви можете відкрити командний рядок у каталозі, ввівши \"cmd\" в " +"адресний рядок провідника." + +#: ../../src/intro/interact.txt:129 +msgid "In the terminal (or command prompt) type:" +msgstr "У терміналі (або командному рядку) введіть:" + +#: ../../src/intro/interact.txt:135 +msgid "" +"Python will print string \"Hello, World!\". Your session should look like:" +msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:144 +msgid "Files containing Python code are called *modules*." +msgstr "Файли, що містять код Python, називаються *модулями*." From 63e16d650c90bcfaeae88e5aac4fee1e92cd0b34 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 05:53:30 +0300 Subject: [PATCH 097/689] Added "under construction" notice Signed-off-by: Serhii Horodilov --- assets/img/construction.svg | 119 ++++++++++++++++++++++++++ src/_locales/uk/LC_MESSAGES/appx.po | 14 +-- src/_locales/uk/LC_MESSAGES/basics.po | 19 ++-- src/_locales/uk/LC_MESSAGES/deploy.po | 10 ++- src/_locales/uk/LC_MESSAGES/django.po | 10 ++- src/_locales/uk/LC_MESSAGES/flask.po | 10 ++- src/_locales/uk/LC_MESSAGES/linux.po | 10 ++- src/appx/code_edit.txt | 8 ++ src/appx/env_path.txt | 8 ++ src/basics/functions.txt | 8 ++ src/basics/modules.txt | 8 ++ src/basics/pep8.txt | 8 ++ src/basics/testing.txt | 8 ++ src/deploy/index.txt | 8 ++ src/django/index.txt | 8 ++ src/flask/index.txt | 8 ++ src/linux/index.txt | 8 ++ 17 files changed, 243 insertions(+), 29 deletions(-) create mode 100644 assets/img/construction.svg diff --git a/assets/img/construction.svg b/assets/img/construction.svg new file mode 100644 index 000000000..b58bb33ee --- /dev/null +++ b/assets/img/construction.svg @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 6552c8f23..827234ce8 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 04:34+0300\n" -"PO-Revision-Date: 2023-04-21 04:41+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -594,11 +594,15 @@ msgstr "Serhii Horodilov sgorodil@gmail.com" msgid "python, editor, ide" msgstr "python, editor, ide" -#: ../../src/appx/code_edit.txt:8 +#: ../../src/appx/code_edit.txt:8 ../../src/appx/env_path.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/appx/code_edit.txt:16 msgid "Code Editors" msgstr "Редактори Коду" -#: ../../src/appx/code_edit.txt:10 +#: ../../src/appx/code_edit.txt:18 msgid "" "Writing Python using IDLE or the Python Shell is great for simple things, " "but those tools quickly turn larger programming projects into frustrating " @@ -1158,7 +1162,7 @@ msgstr "Встановлення змінних середовища" msgid "settings, environment, variables" msgstr "settings, environment, variables" -#: ../../src/appx/env_path.txt:8 +#: ../../src/appx/env_path.txt:16 msgid "Issue - System Environment PATH" msgstr "Проблема - System Environment PATH" diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index 1782d6ae1..bd165e671 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # OLEKSANDR YEROMIN , 2023. -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:10+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -775,7 +773,12 @@ msgstr "Функції в Python" msgid "python, basics, functions" msgstr "python, basics, functions" -#: ../../src/basics/functions.txt:8 ../../src/basics/syntax.txt +#: ../../src/basics/functions.txt:8 ../../src/basics/modules.txt:8 +#: ../../src/basics/pep8.txt:8 ../../src/basics/testing.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/functions.txt:16 ../../src/basics/syntax.txt msgid "Functions" msgstr "Функції" @@ -799,7 +802,7 @@ msgstr "Модулі та імпорти в Pythons" msgid "python, basics, modules, import" msgstr "python, basics, modules, import" -#: ../../src/basics/modules.txt:8 +#: ../../src/basics/modules.txt:16 msgid "Pythons Modules and Imports" msgstr "Модулі та імпорт Pythons" @@ -811,7 +814,7 @@ msgstr "Керівництво по стилю PEP8" msgid "python, style, guide" msgstr "python, style, guide" -#: ../../src/basics/pep8.txt:8 +#: ../../src/basics/pep8.txt:16 msgid "Style Guides: PEP8" msgstr "Керівництво по стилю: PEP8" @@ -1757,7 +1760,7 @@ msgstr "Тестування в Python" msgid "python, testing, unittest, pytest" msgstr "python, testing, unittest, pytest" -#: ../../src/basics/testing.txt:8 +#: ../../src/basics/testing.txt:16 msgid "Testing" msgstr "Тестування" diff --git a/src/_locales/uk/LC_MESSAGES/deploy.po b/src/_locales/uk/LC_MESSAGES/deploy.po index fb09a6345..c58769a41 100644 --- a/src/_locales/uk/LC_MESSAGES/deploy.po +++ b/src/_locales/uk/LC_MESSAGES/deploy.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:10+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "python, deployment, index" msgstr "python, deployment, index" #: ../../src/deploy/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/deploy/index.txt:16 msgid "Application Deployment" msgstr "Розгортання Застосунків" diff --git a/src/_locales/uk/LC_MESSAGES/django.po b/src/_locales/uk/LC_MESSAGES/django.po index aa6f13549..27578b7b2 100644 --- a/src/_locales/uk/LC_MESSAGES/django.po +++ b/src/_locales/uk/LC_MESSAGES/django.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "python, web, django, index" msgstr "python, web, django, index" #: ../../src/django/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/django/index.txt:16 msgid "Django Framework" msgstr "Фреймворк Django" diff --git a/src/_locales/uk/LC_MESSAGES/flask.po b/src/_locales/uk/LC_MESSAGES/flask.po index 230a47bff..43db26d64 100644 --- a/src/_locales/uk/LC_MESSAGES/flask.po +++ b/src/_locales/uk/LC_MESSAGES/flask.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "python, web, flask, index" msgstr "python, web, flask, index" #: ../../src/flask/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/flask/index.txt:16 msgid "Flask Framework" msgstr "Фреймворк Flask" diff --git a/src/_locales/uk/LC_MESSAGES/linux.po b/src/_locales/uk/LC_MESSAGES/linux.po index f2e9099a4..7675956e4 100644 --- a/src/_locales/uk/LC_MESSAGES/linux.po +++ b/src/_locales/uk/LC_MESSAGES/linux.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:12+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:52+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "linux, basics, index" msgstr "linux, basics, index" #: ../../src/linux/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/linux/index.txt:16 msgid "Linux Basics" msgstr "Основи Linux" diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt index bf670b741..7ee5f2619 100644 --- a/src/appx/code_edit.txt +++ b/src/appx/code_edit.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov sgorodil@gmail.com :keywords: python, editor, ide +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############ Code Editors ############ diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 94de3dc45..07e7680c1 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov sgorodil@gmail.com :keywords: settings, environment, variables +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################### Issue - System Environment PATH ############################### diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 7200e1b0d..62837cdc2 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, basics, functions +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Functions ******************************************************************************* diff --git a/src/basics/modules.txt b/src/basics/modules.txt index 8e5ab24b8..bb2091a9e 100644 --- a/src/basics/modules.txt +++ b/src/basics/modules.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, basics, modules, import +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Pythons Modules and Imports ******************************************************************************* diff --git a/src/basics/pep8.txt b/src/basics/pep8.txt index 38170170f..0a847606f 100644 --- a/src/basics/pep8.txt +++ b/src/basics/pep8.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, style, guide +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Style Guides: PEP8 ******************************************************************************* diff --git a/src/basics/testing.txt b/src/basics/testing.txt index e4ea3f602..ec4ca804a 100644 --- a/src/basics/testing.txt +++ b/src/basics/testing.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, testing, unittest, pytest +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Testing ******************************************************************************* diff --git a/src/deploy/index.txt b/src/deploy/index.txt index 740795f60..3c4d0446f 100644 --- a/src/deploy/index.txt +++ b/src/deploy/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, deployment, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Application Deployment ############################################################################### diff --git a/src/django/index.txt b/src/django/index.txt index 3c49e7f10..ae818a672 100644 --- a/src/django/index.txt +++ b/src/django/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, web, django, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Django Framework ############################################################################### diff --git a/src/flask/index.txt b/src/flask/index.txt index 5eeec5ca3..edefc6de1 100644 --- a/src/flask/index.txt +++ b/src/flask/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, web, flask, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Flask Framework ############################################################################### diff --git a/src/linux/index.txt b/src/linux/index.txt index e1f6917b0..2addd6581 100644 --- a/src/linux/index.txt +++ b/src/linux/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: linux, basics, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Linux Basics ############################################################################### From 07a2739f074723df4c6eb41cb57e9616308f41f0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 06:01:09 +0300 Subject: [PATCH 098/689] Fixed #66 Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/intro.po | 289 ++++++++++++++------------- src/intro/index.txt | 33 +-- 2 files changed, 172 insertions(+), 150 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/intro.po b/src/_locales/uk/LC_MESSAGES/intro.po index a94e8d8ae..8551dc512 100644 --- a/src/_locales/uk/LC_MESSAGES/intro.po +++ b/src/_locales/uk/LC_MESSAGES/intro.po @@ -1,27 +1,27 @@ # INTRODUCTION SECTION TRANSLATION. # # Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training Course package. -# -# FIRST AUTHOR , YEAR. -# +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 04:34+0300\n" -"PO-Revision-Date: 2023-04-21 05:21+0300\n" +"POT-Creation-Date: 2023-04-21 06:01+0300\n" +"PO-Revision-Date: 2023-04-21 06:02+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/intro/index.txt:120 +#: ../../src/intro/index.txt:123 msgid "Contents" msgstr "Зміст" @@ -41,7 +41,7 @@ msgstr "" msgid "|guido| Guido van Rossum" msgstr "|guido| Гвідо ван Россум" -#: ../../src/intro/index.txt:172 +#: ../../src/intro/index.txt:175 msgid "guido" msgstr "guido" @@ -63,7 +63,7 @@ msgstr "" "наступника мови під назвою ABC. Гвідо залишається головним автором Python, " "хоча мова містить багато внесків від інших авторів." -#: ../../src/intro/index.txt:129 +#: ../../src/intro/index.txt:132 msgid "python" msgstr "python" @@ -144,35 +144,35 @@ msgstr "" msgid "google facebook instagram spotify quora netflix dropbox reddit" msgstr "google facebook instagram spotify quora netflix dropbox reddit" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Google" msgstr "Google" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Facebook" msgstr "Facebook" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Instagram" msgstr "Instagram" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Spotify" msgstr "Spotify" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Quora" msgstr "Quora" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Netflix" msgstr "Netflix" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Dropbox" msgstr "Dropbox" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Reddit" msgstr "Reddit" @@ -251,151 +251,155 @@ msgstr "" "інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " "У Python лише 35 :cite:`docs-python:keywords`, і вони:" -#: ../../src/intro/index.txt:88 -msgid "False" -msgstr "False" +#: ../../src/intro/index.txt:87 +msgid "Python Keywords" +msgstr "Ключові слова Python" + +#: ../../src/intro/index.txt:91 +msgid "``False``" +msgstr "``False``" -#: ../../src/intro/index.txt:88 -msgid "await" -msgstr "await" +#: ../../src/intro/index.txt:91 +msgid "``await``" +msgstr "``await``" -#: ../../src/intro/index.txt:88 -msgid "else" -msgstr "else" +#: ../../src/intro/index.txt:91 +msgid "``else``" +msgstr "``else``" -#: ../../src/intro/index.txt:88 -msgid "import" -msgstr "import" +#: ../../src/intro/index.txt:91 +msgid "``import``" +msgstr "``import``" -#: ../../src/intro/index.txt:88 -msgid "pass" -msgstr "pass" +#: ../../src/intro/index.txt:91 +msgid "``pass``" +msgstr "``pass``" -#: ../../src/intro/index.txt:90 -msgid "None" -msgstr "None" +#: ../../src/intro/index.txt:93 +msgid "``None``" +msgstr "``None``" -#: ../../src/intro/index.txt:90 -msgid "break" -msgstr "break" +#: ../../src/intro/index.txt:93 +msgid "``break``" +msgstr "``break``" -#: ../../src/intro/index.txt:90 -msgid "except" -msgstr "except" +#: ../../src/intro/index.txt:93 +msgid "``except``" +msgstr "``except``" -#: ../../src/intro/index.txt:90 -msgid "in" -msgstr "in" +#: ../../src/intro/index.txt:93 +msgid "``in``" +msgstr "``in``" -#: ../../src/intro/index.txt:90 -msgid "raise" -msgstr "raise" +#: ../../src/intro/index.txt:93 +msgid "``raise``" +msgstr "``raise``" -#: ../../src/intro/index.txt:92 -msgid "True" -msgstr "True" +#: ../../src/intro/index.txt:95 +msgid "``True``" +msgstr "``True``" -#: ../../src/intro/index.txt:92 -msgid "class" -msgstr "class" +#: ../../src/intro/index.txt:95 +msgid "``class``" +msgstr "``class``" -#: ../../src/intro/index.txt:92 -msgid "finally" -msgstr "finally" +#: ../../src/intro/index.txt:95 +msgid "``finally``" +msgstr "``finally``" -#: ../../src/intro/index.txt:92 -msgid "is" -msgstr "is" +#: ../../src/intro/index.txt:95 +msgid "``is``" +msgstr "``is``" -#: ../../src/intro/index.txt:92 -msgid "return" -msgstr "return" +#: ../../src/intro/index.txt:95 +msgid "``return``" +msgstr "``return``" -#: ../../src/intro/index.txt:94 -msgid "and" -msgstr "and" +#: ../../src/intro/index.txt:97 +msgid "``and``" +msgstr "``and``" -#: ../../src/intro/index.txt:94 -msgid "continue" -msgstr "continue" +#: ../../src/intro/index.txt:97 +msgid "``continue``" +msgstr "``continue``" -#: ../../src/intro/index.txt:94 -msgid "for" -msgstr "for" +#: ../../src/intro/index.txt:97 +msgid "``for``" +msgstr "``for``" -#: ../../src/intro/index.txt:94 -msgid "lambda" -msgstr "lambda" +#: ../../src/intro/index.txt:97 +msgid "``lambda``" +msgstr "``lambda``" -#: ../../src/intro/index.txt:94 -msgid "try" -msgstr "try" +#: ../../src/intro/index.txt:97 +msgid "``try``" +msgstr "``try``" -#: ../../src/intro/index.txt:96 -msgid "as" -msgstr "as" +#: ../../src/intro/index.txt:99 +msgid "``as``" +msgstr "``as``" -#: ../../src/intro/index.txt:96 -msgid "def" -msgstr "def" +#: ../../src/intro/index.txt:99 +msgid "``def``" +msgstr "``def``" -#: ../../src/intro/index.txt:96 -msgid "from" -msgstr "from" +#: ../../src/intro/index.txt:99 +msgid "``from``" +msgstr "``from``" -#: ../../src/intro/index.txt:96 -msgid "nonlocal" -msgstr "nonlocal" +#: ../../src/intro/index.txt:99 +msgid "``nonlocal``" +msgstr "``nonlocal``" -#: ../../src/intro/index.txt:96 -msgid "while" -msgstr "while" +#: ../../src/intro/index.txt:99 +msgid "``while``" +msgstr "``while``" -#: ../../src/intro/index.txt:98 -msgid "assert" -msgstr "assert" +#: ../../src/intro/index.txt:101 +msgid "``assert``" +msgstr "``assert``" -#: ../../src/intro/index.txt:98 -msgid "del" -msgstr "del" +#: ../../src/intro/index.txt:101 +msgid "``del``" +msgstr "``del``" -#: ../../src/intro/index.txt:98 -msgid "global" -msgstr "global" +#: ../../src/intro/index.txt:101 +msgid "``global``" +msgstr "``global``" -#: ../../src/intro/index.txt:98 -msgid "not" -msgstr "not" +#: ../../src/intro/index.txt:101 +msgid "``not``" +msgstr "``not``" -#: ../../src/intro/index.txt:98 -msgid "with" -msgstr "with" +#: ../../src/intro/index.txt:101 +msgid "``with``" +msgstr "``with``" -#: ../../src/intro/index.txt:100 -msgid "async" -msgstr "async" +#: ../../src/intro/index.txt:103 +msgid "``async``" +msgstr "``async``" -#: ../../src/intro/index.txt:100 -msgid "elif" -msgstr "elif" +#: ../../src/intro/index.txt:103 +msgid "``elif``" +msgstr "``elif``" -#: ../../src/intro/index.txt:100 -msgid "if" -msgstr "if" +#: ../../src/intro/index.txt:103 +msgid "``if``" +msgstr "``if``" -#: ../../src/intro/index.txt:100 -msgid "or" -msgstr "or" +#: ../../src/intro/index.txt:103 +msgid "``or``" +msgstr "``or``" -#: ../../src/intro/index.txt:100 -msgid "yield" -msgstr "yield" +#: ../../src/intro/index.txt:103 +msgid "``yield``" +msgstr "``yield``" -#: ../../src/intro/index.txt:104 +#: ../../src/intro/index.txt:107 msgid "Python is general purpose" msgstr "Python є універсальним" -#: ../../src/intro/index.txt:105 +#: ../../src/intro/index.txt:108 msgid "" "Python is everywhere. Talking more specific common scopes for Python " "developers are :cite:`python-usage`:" @@ -403,43 +407,43 @@ msgstr "" "Python всюди. Говорячи про більш конкретні загальні області для розробників " "Python, це :cite:`python-usage`:" -#: ../../src/intro/index.txt:108 +#: ../../src/intro/index.txt:111 msgid "Web Scraping Applications" msgstr "Програми для сканування веб-сторінок" -#: ../../src/intro/index.txt:109 +#: ../../src/intro/index.txt:112 msgid "Data Science Solutions" msgstr "Рішення для Data Science" -#: ../../src/intro/index.txt:110 +#: ../../src/intro/index.txt:113 msgid "Machine Learning Applications" msgstr "Програми машинного навчання" -#: ../../src/intro/index.txt:111 +#: ../../src/intro/index.txt:114 msgid "Web Development" msgstr "Веб-розробка" -#: ../../src/intro/index.txt:112 +#: ../../src/intro/index.txt:115 msgid "Game Development" msgstr "Розробка ігор" -#: ../../src/intro/index.txt:113 +#: ../../src/intro/index.txt:116 msgid "Scientific and Numeric Applications" msgstr "Наукові та обчислювальні програми" -#: ../../src/intro/index.txt:114 +#: ../../src/intro/index.txt:117 msgid "Image Design and Graphic Design Applications" msgstr "Програми для обробки зображень та графіки" -#: ../../src/intro/index.txt:115 +#: ../../src/intro/index.txt:118 msgid "Finance Fintech Platform" msgstr "Банківські та фінансові сервіси" -#: ../../src/intro/index.txt:116 +#: ../../src/intro/index.txt:119 msgid "Language Development" msgstr "Language Development" -#: ../../src/intro/index.txt:117 +#: ../../src/intro/index.txt:120 msgid "Operating Systems" msgstr "Операційні системи" @@ -919,3 +923,18 @@ msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс #: ../../src/intro/interact.txt:144 msgid "Files containing Python code are called *modules*." msgstr "Файли, що містять код Python, називаються *модулями*." + +#~ msgid "in" +#~ msgstr "in" + +#~ msgid "is" +#~ msgstr "is" + +#~ msgid "as" +#~ msgstr "as" + +#~ msgid "if" +#~ msgstr "if" + +#~ msgid "or" +#~ msgstr "or" diff --git a/src/intro/index.txt b/src/intro/index.txt index 322bee8fb..b81778a4e 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -84,21 +84,24 @@ meaning by the compiler or interpreter because they designate specific built-in functionality of the language. There are only 35 :cite:`docs-python:keywords` in Python and they are: -+--------+----------+---------+----------+--------+ -| False | await | else | import | pass | -+--------+----------+---------+----------+--------+ -| None | break | except | in | raise | -+--------+----------+---------+----------+--------+ -| True | class | finally | is | return | -+--------+----------+---------+----------+--------+ -| and | continue | for | lambda | try | -+--------+----------+---------+----------+--------+ -| as | def | from | nonlocal | while | -+--------+----------+---------+----------+--------+ -| assert | del | global | not | with | -+--------+----------+---------+----------+--------+ -| async | elif | if | or | yield | -+--------+----------+---------+----------+--------+ +.. table:: Python Keywords + :align: center + + +------------+--------------+-------------+--------------+------------+ + | ``False`` | ``await`` | ``else`` | ``import`` | ``pass`` | + +------------+--------------+-------------+--------------+------------+ + | ``None`` | ``break`` | ``except`` | ``in`` | ``raise`` | + +------------+--------------+-------------+--------------+------------+ + | ``True`` | ``class`` | ``finally`` | ``is`` | ``return`` | + +------------+--------------+-------------+--------------+------------+ + | ``and`` | ``continue`` | ``for`` | ``lambda`` | ``try`` | + +------------+--------------+-------------+--------------+------------+ + | ``as`` | ``def`` | ``from`` | ``nonlocal`` | ``while`` | + +------------+--------------+-------------+--------------+------------+ + | ``assert`` | ``del`` | ``global`` | ``not`` | ``with`` | + +------------+--------------+-------------+--------------+------------+ + | ``async`` | ``elif`` | ``if`` | ``or`` | ``yield`` | + +------------+--------------+-------------+--------------+------------+ .. rubric:: Python is general purpose From b5194e13a9047166294aa244dfe545fc381134b0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 06:53:11 +0300 Subject: [PATCH 099/689] Fixed "stdtypes" typos and translations Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/basics.po | 40 ++++++++++++------------ src/basics/stdtypes.txt | 44 ++++++++++++++------------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index bd165e671..e4e319374 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"POT-Creation-Date: 2023-04-21 06:44+0300\n" +"PO-Revision-Date: 2023-04-21 06:46+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -903,7 +903,7 @@ msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:40 msgid "``x - y``" -msgstr "``x + y``" +msgstr "``x - y``" #: ../../src/basics/stdtypes.txt:40 msgid "difference of *x* and *y*" @@ -911,7 +911,7 @@ msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:42 msgid "``x * y``" -msgstr "``x + y``" +msgstr "``x * y``" #: ../../src/basics/stdtypes.txt:42 msgid "product of *x* and *y*" @@ -919,7 +919,7 @@ msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:44 msgid "``x / y``" -msgstr "``x + y``" +msgstr "``x / y``" #: ../../src/basics/stdtypes.txt:44 msgid "quotient of *x* and *y*" @@ -927,7 +927,7 @@ msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:46 msgid "``x // y``" -msgstr "``x + y``" +msgstr "``x // y``" #: ../../src/basics/stdtypes.txt:46 msgid "floored quotient of *x* and *y*" @@ -935,15 +935,15 @@ msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:48 msgid "``x % y``" -msgstr "``x + y``" +msgstr "``x % y``" #: ../../src/basics/stdtypes.txt:48 msgid "remainder of ``x / y``" -msgstr "залишок від ділення``x / y``" +msgstr "залишок від ділення ``x / y``" #: ../../src/basics/stdtypes.txt:50 msgid "``-x``" -msgstr "``x + y``" +msgstr "``-x``" #: ../../src/basics/stdtypes.txt:50 msgid "*x* negated" @@ -951,7 +951,7 @@ msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:52 msgid "``+x``" -msgstr "``x + y``" +msgstr "``+x``" #: ../../src/basics/stdtypes.txt:52 msgid "*y* unchanged" @@ -959,7 +959,7 @@ msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:54 msgid "``abs(x)``" -msgstr "``x + y``" +msgstr "``abs(x)``" #: ../../src/basics/stdtypes.txt:54 msgid "absolute value or magnitude of *x*" @@ -967,7 +967,7 @@ msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:56 msgid "``int(x)``" -msgstr "``x + y``" +msgstr "``int(x)``" #: ../../src/basics/stdtypes.txt:56 msgid "*x* converted to integer" @@ -975,7 +975,7 @@ msgstr "*x* перетворено на ціле число" #: ../../src/basics/stdtypes.txt:58 msgid "``float(x)``" -msgstr "``x + y``" +msgstr "``float(x)``" #: ../../src/basics/stdtypes.txt:58 msgid "*x* converted to floating point" @@ -983,7 +983,7 @@ msgstr "*x* перетворено на число з плаваючою ком #: ../../src/basics/stdtypes.txt:60 msgid "``complex(re, im)``" -msgstr "``x + y``" +msgstr "``complex(re, im)``" #: ../../src/basics/stdtypes.txt:60 msgid "" @@ -995,7 +995,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:63 msgid "``divmod(x, y)``" -msgstr "``x + y``" +msgstr "``divmod(x, y)``" #: ../../src/basics/stdtypes.txt:63 msgid "the pair ``(x // y, x % y)``" @@ -1003,7 +1003,7 @@ msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:65 msgid "``pow(x, y)`` ``x ** y``" -msgstr "``x + y``" +msgstr "``pow(x, y)`` ``x ** y``" #: ../../src/basics/stdtypes.txt:65 msgid "*x* to the power *y*" @@ -1022,12 +1022,12 @@ msgstr "" #: ../../src/basics/stdtypes.txt:74 msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " -"optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive and " -"negative infinity." +"optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " +"and negative infinity." msgstr "" "``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " -"префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " -"нескінченність." +"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " +"позитивна та негативна нескінченність." #: ../../src/basics/stdtypes.txt:79 msgid "Code examples" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 1cf40f323..06d1f9e69 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -72,7 +72,7 @@ Supported operations ``1 // 2`` is ``0`` .. note:: ``float(x)`` also accepts the strings ``"nan"`` and ``"inf"`` with - an optional prefix "+" or "-" for :abbr:Nan(Not a Number) and + an optional prefix "+" or "-" for :abbr:`NaN(Not a Number)` and positive and negative infinity. Code examples @@ -80,30 +80,32 @@ Code examples .. code-block:: python :caption: Integer numbers + :linenos: - x = 42 - y = 24 - a = int(42) - b = int(42.24) - - result = x + y # for both int operands only - result = x - y # for both int operands only - result = x * y # for both int operands only - result = x // y # for any numeric operands + >>> x = 42 + >>> y = 24 + >>> a = int(42) + >>> b = int(42.24) + >>> # result is of the integer type + >>> result_add = x + y # for both int operands only + >>> result_sub = x - y # for both int operands only + >>> result_mul = x * y # for both int operands only + >>> result_div = x // y # for any numeric operands .. code-block:: python :caption: Floating point numbers - - x = 42. - y = .24 - z = 42.24 - a = float(42) - b = float(42.24) - - result = x + y # for any float operand - result = x - y # for any float operand - result = x * y # for any float operand - result = x / y # for any numeric operands + :linenos: + + >>> x = 42. + >>> y = .24 + >>> z = 42.24 + >>> a = float(42) + >>> b = float(42.24) + >>> # result is of the float type + >>> result_add = x + y # for any float operand + >>> result_sub = x - y # for any float operand + >>> result_mul = x * y # for any float operand + >>> result_div = x / y # for any numeric operands Value comparisons ----------------- From 7f60ee57e140291ddba2fbeb20d8ac394ffe3f14 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 23:02:00 +0300 Subject: [PATCH 100/689] Updated problem-sets from remote --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index 0dffa6dcf..404c2a91f 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 0dffa6dcf7801dc7150c0a0496b5816f71ebff42 +Subproject commit 404c2a91ff45fa49d424bf5b2930e458dbab6593 From 6dac8590f34dd92ac2574b9b3f34642d14bf2145 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 23:10:15 +0300 Subject: [PATCH 101/689] Updated "appx" translations Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/appx.po | 291 ++++++++++------------------ 1 file changed, 97 insertions(+), 194 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 827234ce8..fad6b9da9 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"POT-Creation-Date: 2023-04-21 23:02+0300\n" +"PO-Revision-Date: 2023-04-21 23:09+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -1858,31 +1858,32 @@ msgstr "Чарівники, Злодії та Рицарі" #: ../../problem-sets/src/wtk/challenge.rst:5 msgid "" -"\"Wizards, Thieves and Knights\" (WTK) game is a \"Paper, Rock and " -"Scissors\" clone but in a fantasy setting. It comes with a simple command " -"line interface where the use must type in his or her choice. The enemy is " -"controlled by the script. The player's goal is to gain as many score points, " -"as it possible." +"\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " +"player's goal is to gain as many score points, as it possible." msgstr "" -"Гра \"Чарівники, Злодії та Рицарі» (WTK) — це клон \"Камень, ножиці, " -"бумага\", але у фентезійному сеттингу. Вона має простий інтерфейс командного " -"рядка, де користувач повинен ввести свій вибір. Ворогом керує скрипт. Мета " -"гравця - набрати якомога більше очок." +"Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." -#: ../../problem-sets/src/wtk/challenge.rst:12 +#: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" msgstr "Організація коду" -#: ../../problem-sets/src/wtk/challenge.rst:14 +#: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" msgstr "" "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" -#: ../../problem-sets/src/wtk/challenge.rst:26 +#: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" msgstr "Загальний опис ігрового процесу" -#: ../../problem-sets/src/wtk/challenge.rst:28 +#: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" "The game process is divided into rounds. Each round consists of **attack** " "and **defence** stages. Rounds are repeated, until player is defeated." @@ -1890,31 +1891,31 @@ msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." -#: ../../problem-sets/src/wtk/challenge.rst:32 +#: ../../problem-sets/src/wtk/challenge.rst:33 msgid "Fight rules" msgstr "Правила боротьби" -#: ../../problem-sets/src/wtk/challenge.rst:34 +#: ../../problem-sets/src/wtk/challenge.rst:35 msgid "It's simple..." msgstr "Це просто..." -#: ../../problem-sets/src/wtk/challenge.rst:36 +#: ../../problem-sets/src/wtk/challenge.rst:37 msgid "**Wizard** beats **Knight**" msgstr "**Чарівник** перемагає **Рицаря**" -#: ../../problem-sets/src/wtk/challenge.rst:37 +#: ../../problem-sets/src/wtk/challenge.rst:38 msgid "**Thief** beats **Wizard**" msgstr "**Злодій** перемагає **Чарівника**" -#: ../../problem-sets/src/wtk/challenge.rst:38 +#: ../../problem-sets/src/wtk/challenge.rst:39 msgid "**Knight** beats **Thief**" msgstr "**Рицар** перемагає **Злодія**" -#: ../../problem-sets/src/wtk/challenge.rst:41 +#: ../../problem-sets/src/wtk/challenge.rst:42 msgid "Attack stage" msgstr "Стадія атаки" -#: ../../problem-sets/src/wtk/challenge.rst:43 +#: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " "**knight**, enemy selects the choice for defence from the same options by " @@ -1923,35 +1924,35 @@ msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" -#: ../../problem-sets/src/wtk/challenge.rst:47 +#: ../../problem-sets/src/wtk/challenge.rst:48 msgid "enemy health is decreased" msgstr "здоров'я ворога зменшено" -#: ../../problem-sets/src/wtk/challenge.rst:48 +#: ../../problem-sets/src/wtk/challenge.rst:49 msgid "player gains score points" msgstr "гравець отримує очки" -#: ../../problem-sets/src/wtk/challenge.rst:50 +#: ../../problem-sets/src/wtk/challenge.rst:51 msgid "In case enemy is defeated:" msgstr "Якщо ворог переможений:" -#: ../../problem-sets/src/wtk/challenge.rst:52 +#: ../../problem-sets/src/wtk/challenge.rst:53 msgid "a new enemy instance is initialized using higher level" msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" -#: ../../problem-sets/src/wtk/challenge.rst:53 +#: ../../problem-sets/src/wtk/challenge.rst:54 msgid "player gains some extra score points" msgstr "гравець отримує додаткові очки" -#: ../../problem-sets/src/wtk/challenge.rst:54 +#: ../../problem-sets/src/wtk/challenge.rst:55 msgid "next defence stage is skipped, and player attacks again" msgstr "наступний етап захисту пропущено, і гравець атакує знову" -#: ../../problem-sets/src/wtk/challenge.rst:57 +#: ../../problem-sets/src/wtk/challenge.rst:58 msgid "Defence stage" msgstr "Стадія захисту" -#: ../../problem-sets/src/wtk/challenge.rst:59 +#: ../../problem-sets/src/wtk/challenge.rst:60 msgid "" "Player selects the choice to defend from **wizard**, **thief** or " "**knight**, enemy selects the choice to attack from the same options by " @@ -1960,31 +1961,31 @@ msgstr "" "Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " "обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" -#: ../../problem-sets/src/wtk/challenge.rst:63 +#: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" msgstr "здоров'я гравця знижено" -#: ../../problem-sets/src/wtk/challenge.rst:65 +#: ../../problem-sets/src/wtk/challenge.rst:66 msgid "If player is defeated:" msgstr "Якщо гравець переможений:" -#: ../../problem-sets/src/wtk/challenge.rst:67 +#: ../../problem-sets/src/wtk/challenge.rst:68 msgid "report the message about gained score points to the terminal" msgstr "повідомляти повідомлення про набрані бали на термінал" -#: ../../problem-sets/src/wtk/challenge.rst:68 +#: ../../problem-sets/src/wtk/challenge.rst:69 msgid "write down player's name and score points to \"scores.txt\" file" msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" -#: ../../problem-sets/src/wtk/challenge.rst:72 +#: ../../problem-sets/src/wtk/challenge.rst:73 msgid "Exceptions" msgstr "Винятки" -#: ../../problem-sets/src/wtk/challenge.rst:75 +#: ../../problem-sets/src/wtk/challenge.rst:76 msgid "Enemy down" msgstr "Ворога переможено" -#: ../../problem-sets/src/wtk/challenge.rst:77 +#: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" "This is an exceptional scenario when enemy is defeated. A custom exception " "``EnemyDown`` should be used to track these cases. Exception should provide " @@ -1998,11 +1999,11 @@ msgstr "" msgid "Raised when an enemy is defeated" msgstr "Виникає, коли ворог переможений" -#: ../../problem-sets/src/wtk/challenge.rst:84 +#: ../../problem-sets/src/wtk/challenge.rst:85 msgid "Game over" msgstr "Гра завершена" -#: ../../problem-sets/src/wtk/challenge.rst:86 +#: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" "This is an exceptional scenario when player is defeated. A custom exception " "``GameOver`` should be used to track these cases. Exception should provide " @@ -2016,11 +2017,11 @@ msgstr "" msgid "Raised when a player is defeated" msgstr "Виникає, коли гравця переможено" -#: ../../problem-sets/src/wtk/challenge.rst:94 +#: ../../problem-sets/src/wtk/challenge.rst:95 msgid "Models" msgstr "Моделі" -#: ../../problem-sets/src/wtk/challenge.rst:97 +#: ../../problem-sets/src/wtk/challenge.rst:98 msgid "Enemy" msgstr "Ворог" @@ -2045,6 +2046,10 @@ msgid "Initialize instance" msgstr "Ініціалізувати екземпляр" #: of wtk.models.Enemy.__init__:3 +msgid "Health value is equal to the level value." +msgstr "Значення здоров'я дорівнює значенню рівня." + +#: of wtk.models.Enemy.__init__:5 msgid "an enemy's level indicator" msgstr "індикатор рівня противника" @@ -2081,12 +2086,12 @@ msgstr "Вибори, зроблені супротивником, випадк msgid "a fight choice" msgstr "варіант для бою" -#: ../../problem-sets/src/wtk/challenge.rst:103 +#: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." msgstr "" "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." -#: ../../problem-sets/src/wtk/challenge.rst:106 +#: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" msgstr "Гравець" @@ -2223,68 +2228,80 @@ msgstr "" "Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " "перевіряється, і якщо воно недійсне, запитання повторюється." -#: ../../problem-sets/src/wtk/challenge.rst:115 +#: ../../problem-sets/src/wtk/challenge.rst:116 msgid "Settings" msgstr "Налаштування" -#: ../../problem-sets/src/wtk/challenge.rst:117 +#: ../../problem-sets/src/wtk/challenge.rst:118 msgid "Settings module contains constants values for the game." msgstr "Модуль налаштувань містить значення констант для гри." -#: ../../problem-sets/src/wtk/challenge.rst:119 +#: ../../problem-sets/src/wtk/challenge.rst:120 msgid "For example," msgstr "Наприклад," -#: ../../problem-sets/src/wtk/challenge.rst:123 -msgid "Initial health meter value for a player instance" -msgstr "Початкове значення індикатора стану здоров'я для екземпляру гравця" +#: ../../docstring of wtk.settings.INITIAL_PLAYER_HEALTH:1 +msgid "Initial player health value" +msgstr "Початкове значення здоров'я гравця" -#: ../../problem-sets/src/wtk/challenge.rst -msgid "type" -msgstr "type" +#: ../../docstring of wtk.settings.INITIAL_ENEMY_LEVEL:1 +msgid "Initial enemy level value" +msgstr "Початкове значення рівня ворога" -#: ../../problem-sets/src/wtk/challenge.rst:125 -#: ../../problem-sets/src/wtk/challenge.rst:131 -#: ../../problem-sets/src/wtk/challenge.rst:137 -#: ../../problem-sets/src/wtk/challenge.rst:143 -msgid "int" -msgstr "int" +#: ../../docstring of wtk.settings.SCORE_SUCCESS_ATTACK:1 +msgid "Score points value to assign when player's attack is successful" +msgstr "Вартість очок, які призначаються, коли атака гравця успішна" -#: ../../problem-sets/src/wtk/challenge.rst:129 -msgid "Indicates the level to initialize the first enemy instance." -msgstr "Вказує рівень для ініціалізації першого екземпляра ворога." +#: ../../docstring of wtk.settings.SCORE_ENEMY_DOWN:1 +msgid "Score points value to assign when enemy is defeated" +msgstr "Вартість очок, які призначаються, коли ворог переможений" -#: ../../problem-sets/src/wtk/challenge.rst:135 -msgid "Set the score value to assign when an attack is successful" +#: ../../problem-sets/src/wtk/challenge.rst:131 +msgid "You may also define messages with this module, for example:" msgstr "" -"Встановлює кількість балів, яку буде присвоєно, якщо атака буде успішною" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" -#: ../../problem-sets/src/wtk/challenge.rst:141 -msgid "Set the score value to assign when an enemy is defeated" -msgstr "" -"Встановлює кількість балів, яку буде присвоєно, якщо ворог зазнає поразки" +#: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 +msgid "Successful attack message" +msgstr "Повідомлення про успішну атаку" + +#: ../../docstring of wtk.settings.MSG_SUCCESS_DEFENCE:1 +msgid "Successful defence message" +msgstr "Повідомлення про успішний захист" + +#: ../../docstring of wtk.settings.MSG_FAILURE_ATTACK:1 +msgid "Failed attack message" +msgstr "Повідомлення про невдалу атаку" -#: ../../problem-sets/src/wtk/challenge.rst:147 +#: ../../docstring of wtk.settings.MSG_FAILURE_DEFENCE:1 +msgid "Failed defence message" +msgstr "Повідомлення про невдалий захист" + +#: ../../docstring of wtk.settings.MSG_DRAW:1 +msgid "Draw fight message" +msgstr "Повідомлення про нічию" + +#: ../../problem-sets/src/wtk/challenge.rst:141 msgid "Engine" msgstr "Ігровий рушій" -#: ../../problem-sets/src/wtk/challenge.rst:149 +#: ../../problem-sets/src/wtk/challenge.rst:143 msgid "Engine module should provide two functions:" msgstr "Модуль двигуна має забезпечувати дві функції:" -#: ../../problem-sets/src/wtk/challenge.rst:151 +#: ../../problem-sets/src/wtk/challenge.rst:145 msgid "``get_player_name``" msgstr "``get_player_name``" -#: ../../problem-sets/src/wtk/challenge.rst:152 +#: ../../problem-sets/src/wtk/challenge.rst:146 msgid "``play``" msgstr "``play``" -#: ../../problem-sets/src/wtk/challenge.rst:155 +#: ../../problem-sets/src/wtk/challenge.rst:149 msgid "Player name getter" msgstr "Отримання імені гравця" -#: ../../problem-sets/src/wtk/challenge.rst:157 +#: ../../problem-sets/src/wtk/challenge.rst:151 msgid "" "Asks the user to type in his or her name and return it back. Leading and " "trailing whitespaces are to be trimmed. Name should contain at least one " @@ -2309,11 +2326,11 @@ msgstr "" msgid "a player defined name" msgstr "ім'я визначене гравцем" -#: ../../problem-sets/src/wtk/challenge.rst:164 +#: ../../problem-sets/src/wtk/challenge.rst:158 msgid "Play" msgstr "Гра" -#: ../../problem-sets/src/wtk/challenge.rst:166 +#: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " "rounds inside of an endless loop stage by stage. If an enemy is defeated - a " @@ -2345,135 +2362,21 @@ msgstr "" "ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " "зупиняє виконання." -#: ../../problem-sets/src/wtk/challenge.rst:179 +#: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" msgstr "Додаткові Вдосконалення" -#: ../../problem-sets/src/wtk/challenge.rst:181 +#: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" "Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " "записів." -#: ../../problem-sets/src/wtk/challenge.rst:182 +#: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" msgstr "Створити меню гри, наприклад: ::" -#: ../../problem-sets/src/wtk/challenge.rst:188 +#: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" "Зберігайте таблицю балів у базі даних замість використання текстового файлу." - -#~ msgid "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" -#~ msgstr "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" - -#~ msgid "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" -#~ msgstr "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" - -#~ msgid "Code notes" -#~ msgstr "Примітки до коду" - -#~ msgid "At least 50% coverage." -#~ msgstr "Хоча б 50% покриття тестами." - -#~ msgid "WARRIORS, ROBBERS AND WIZARDS GAME" -#~ msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" - -#~ msgid "**Warrior** beats **Robber**" -#~ msgstr "Воїн перемагає розбійника" - -#~ msgid "" -#~ "Represents the playing enemy-bot. All choices made by this model are " -#~ "random. The model should implement methods:" -#~ msgstr "" -#~ "Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " -#~ "випадкові. Модель має реалізовувати методи:" - -#~ msgid "``__init__``" -#~ msgstr "``__init__``" - -#~ msgid "" -#~ "Initialize enemy instance. Initializer should receive one argument of " -#~ "integer type - ``level: int``. Health points value should be set equal to " -#~ "level value." -#~ msgstr "" -#~ "Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " -#~ "аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " -#~ "встановлено рівним значенню рівня." - -#~ msgid "``descrease_health``" -#~ msgstr "``descrease_health``" - -#~ msgid "``select_attack``" -#~ msgstr "``select_attack``" - -#~ msgid "``select_defence``" -#~ msgstr "``select_defence``" - -#~ msgid "Return a random defence choice from valid choices." -#~ msgstr "Повернути випадковий вибір захисту з дійсних виборів." - -#~ msgid "" -#~ "This model is controlled by the user. It represents a playing user. All " -#~ "choices are controlled by the user. The model should implement methods:" -#~ msgstr "" -#~ "Цією моделлю керує користувач. Вона представляє гравця. Усі вибори " -#~ "контролює користувач. Модель має реалізовувати методи:" - -#~ msgid "" -#~ "Initialize player instance. Initializer should receive player's name as " -#~ "an argument - ``name: str``. Health points are to be set from settings. " -#~ "Score points should be initialized with 0 (zero)." -#~ msgstr "" -#~ "Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця " -#~ "як аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " -#~ "налаштувань. Очки мають бути ініціалізовані 0 (нулем)." - -#~ msgid "``fight``" -#~ msgstr "``fight``" - -#~ msgid "" -#~ "Static method to perform a fight. Takes two arguments representing attack " -#~ "and defence choices. Performs fight result calculation and return it back." -#~ msgstr "" -#~ "Статичний метод для проведення бою. Бере два аргументи, що представляють " -#~ "атаку та вибір захисту. Виконує обчислення результату бою та повертає " -#~ "його назад." - -#~ msgid "``attack``" -#~ msgstr "``attack``" - -#~ msgid "``defence``" -#~ msgstr "``defence``" - -#~ msgid "" -#~ "Each page should contain a list of links to archive views for the last " -#~ "year." -#~ msgstr "" -#~ "Кожна сторінка має містити список посилань на перегляди архіву за " -#~ "останній рік." - -#~ msgid "" -#~ "Auth views should use ``register.html`` and ``login.html`` with " -#~ "corresponding forms." -#~ msgstr "" -#~ "Подання авторизації повинні використовувати ``register.html`` і ``login." -#~ "html`` з відповідними формами." - -#~ msgid "" -#~ "For now, it’s ok to use admin as “test user”. Authentication system will " -#~ "be implemented in the future challenges. ``user`` object is available (by " -#~ "default) in any template context. To test anonymous access you can use " -#~ "``user.is_authenticated``, which returns ``False`` for non-authenticated " -#~ "users." -#~ msgstr "" -#~ "Наразі можна використовувати адміністратора як «тестового користувача». " -#~ "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -#~ "«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " -#~ "Щоб перевірити анонімний доступ, ви можете використовувати ``user." -#~ "is_authenticated``, який повертає ``False`` для неавтентифікованих " -#~ "користувачів." From 0e97fcd89510349bce226b652908d00244111326 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 15:35:39 +0300 Subject: [PATCH 102/689] Added "boolean logic" document draft Signed-off-by: Serhii Horodilov --- assets/img/george_boole.jpg | Bin 0 -> 139398 bytes src/basics/bool_logic.txt | 115 ++++++++++++++++++++++++++++++++++++ src/basics/index.txt | 1 + src/refs.bib | 24 ++++++++ 4 files changed, 140 insertions(+) create mode 100644 assets/img/george_boole.jpg create mode 100644 src/basics/bool_logic.txt diff --git a/assets/img/george_boole.jpg b/assets/img/george_boole.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be533e303deb6a0dc5e88697dc75c5aaba9b9259 GIT binary patch literal 139398 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ȁaD!t0h7Cwj``qX@tz^)TcN} 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 type(True) + + >>> type(False) + + +The type ``bool`` is **built-in**, meaning it's always available in Python. +``True`` and ``False`` are keywords in Python and can't be used as +variable names. but ``bool`` type isn't and it's possible assign to the name +``bool``, however this is considered bad style. + +Boolean as numbers +------------------ + +Booleans are a subtype of **numeric** type in Python. This means they're +numbers for all intents and purposes. In other words, you can apply arithmetic +operations to Boolean, and you can also compare them to numbers. ``True`` +value is treated to be 1, and ``False`` value is treated to be 0. + +There aren't many uses of the numerical nature of Boolean values. + +Truth value testing +=================== + +Any object can be tested for truth value. By default an object considered +``True``, unless its class defines either. Here are most of built-in objects +considered ``False``: + +- constant values: ``None`` and ``False`` +- zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, + ``Fraction(0, 1)`` +- empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, + ``range(0)``. + +.. hint:: + + If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` + as ``False``. + +Boolean comparison +================== + +.. todo: not, and, or + +Comparison +========== + +There are eight comparison operations in Python. They all have the same +priority (which is higher than that of the Boolean operations). + +.. table:: Comparison operators + :align: center + + +------------+-----------------------------------+ + | Operator | Meaning | + +============+===================================+ + | ``<`` | strictly less than | + +------------+-----------------------------------+ + | ``<=`` | less than or equal | + +------------+-----------------------------------+ + | ``>`` | strictly greater than | + +------------+-----------------------------------+ + | ``>=`` | greater or equal | + +------------+-----------------------------------+ + | ``==`` | equal (aka *equality* comparison) | + +------------+-----------------------------------+ + | ``!=`` | not equal | + +------------+-----------------------------------+ + | ``is`` | object identity | + +------------+-----------------------------------+ + | ``is not`` | negated object identity | + +------------+-----------------------------------+ diff --git a/src/basics/index.txt b/src/basics/index.txt index 5f5ee1137..759b1ca6b 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -13,6 +13,7 @@ variables syntax stdtypes + bool_logic controlflow functions modules diff --git a/src/refs.bib b/src/refs.bib index 2887ad806..4cff75e68 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -108,3 +108,27 @@ @misc{realpython:methods-demystified author = "{Dan Bader}", url = {https://realpython.com/instance-class-and-static-methods-demystified/}, } + +@misc{realpython:boolean, + title = "{Python Booleans: Use Truth Values in Your Code}", + author = "{Moshe Zadka}", + url = {https://realpython.com/python-boolean/}, +} + +@misc{realpython:boolean-not, + title = "{Using the \"not\" Boolean Operator in Python}", + author = "{Leodanis Pozo Ramos}", + url = {https://realpython.com/python-not-operator/}, +} + +@misc{realpython:boolean-and, + title = "{Using the \"and\" Boolean Operator in Python}", + author = "{Leodanis Pozo Ramos}", + url = {https://realpython.com/python-and-operator/}, +} + +@misc{realpython:boolean-or, + title = "{Using the \"or\" Boolean Operator in Python}", + author = "{Leodanis Pozo Ramos}", + url = {https://realpython.com/python-or-operator/}, +} From 3e0b8276225551c2781f00054e387aa3f547af57 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 16:00:29 +0300 Subject: [PATCH 103/689] Added 'logical negation' (not) description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index a4c9114d5..a92d3743d 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -85,6 +85,53 @@ Boolean comparison .. todo: not, and, or +Python provides 3 logical operators: + +.. table:: + :align: center + + +----------+----------------+ + | Operator | Logic operator | + +==========+================+ + | ``not`` | Negation | + +----------+----------------+ + | ``and`` | Conjunction | + +----------+----------------+ + | ``or`` | Disjunction | + +----------+----------------+ + +With these operators, you can build expressions by connecting Boolean +expressions with each other. These operators are **keywords** of the language, +so you cannot use them as identifiers without causing a *SyntaxError*. + +Getting started with Python's ``not`` operator +---------------------------------------------- + +The ``not`` operator is the Boolean or logic operator that implements negation +in Python. It's **unary**, which means that it takes only one **operand**. +The operand can be a Boolean expression or any Python object. The task of +``not`` is to reverse the truth value of its operand. + +.. table:: not operator + :align: center + + +-----------+-------------+ + | operand | not operand | + +===========+=============+ + | ``True`` | ``False`` | + +-----------+-------------+ + | ``False`` | ``True`` | + +-----------+-------------+ + +This functionality makes it worthwhile in several situations: + + +- Checking **unmet conditions** in the context of ``if`` statements and + ``while`` loops +- **Inverting the truth value** of an object or expression +- Checking if a **value is not in a given container** +- Checking for an **object's identity** + Comparison ========== From 0f9177bd6093355988bb6dce84638d71c32a828d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 16:12:42 +0300 Subject: [PATCH 104/689] Added 'logical conjunction' (and) description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 41 +++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index a92d3743d..639fbd451 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -112,16 +112,16 @@ in Python. It's **unary**, which means that it takes only one **operand**. The operand can be a Boolean expression or any Python object. The task of ``not`` is to reverse the truth value of its operand. -.. table:: not operator +.. table:: not operator truth table :align: center - +-----------+-------------+ - | operand | not operand | - +===========+=============+ - | ``True`` | ``False`` | - +-----------+-------------+ - | ``False`` | ``True`` | - +-----------+-------------+ + +-------------+-----------------+ + | ``operand`` | ``not operand`` | + +=============+=================+ + | ``True`` | ``False`` | + +-------------+-----------------+ + | ``False`` | ``True`` | + +-------------+-----------------+ This functionality makes it worthwhile in several situations: @@ -132,6 +132,31 @@ This functionality makes it worthwhile in several situations: - Checking if a **value is not in a given container** - Checking for an **object's identity** +Getting started with ``and`` operator +------------------------------------- + +Python's ``and`` operator is **binary**, which means it takes two **operands**. +The operands in an ``and`` expression are commonly known as *conditions*. +The result of the operator depends on the truth values of its operands. It'll +be ``True`` if **both** are true. + +.. table:: and operator truth table + :align: center + + +---------------+---------------+-----------------------------+ + | ``operand_1`` | ``operand_2`` | ``operand_1 and operand_2`` | + +===============+===============+=============================+ + | ``True`` | ``True`` | ``True`` | + +---------------+---------------+-----------------------------+ + | ``False`` | ``False`` | ``False`` | + +---------------+---------------+-----------------------------+ + | ``True`` | ``False`` | ``False`` | + +---------------+---------------+-----------------------------+ + | ``False`` | ``True`` | ``False`` | + +---------------+---------------+-----------------------------+ + +.. todo: func_1() and func_2(); 0 and 5 + Comparison ========== From d40aec4cc81093d9f251cb0418f30e859edaa80e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 16:47:49 +0300 Subject: [PATCH 105/689] Added 'logical disjunction' (or) description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 639fbd451..38eab9a9f 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -157,6 +157,32 @@ be ``True`` if **both** are true. .. todo: func_1() and func_2(); 0 and 5 +Getting started with ``or`` operator +------------------------------------ + +With Boolean ``or`` operator, you can connect two Boolean expressions into one +compound expression. This makes ``or`` the **binary** operator. At least one +subexpression must be ``True`` for the compound expression to be considered +``True``, and it doesn't matter which. If both subexpressions are ``False``, +then the expression is ``False``. + +.. table:: or operator truth table + :align: center + + +---------------+---------------+----------------------------+ + | ``operand_1`` | ``operand_2`` | ``operand_1 or operand_2`` | + +===============+===============+============================+ + | ``True`` | ``True`` | ``True`` | + +---------------+---------------+----------------------------+ + | ``False`` | ``False`` | ``False`` | + +---------------+---------------+----------------------------+ + | ``True`` | ``False`` | ``True`` | + +---------------+---------------+----------------------------+ + | ``False`` | ``True`` | ``True`` | + +---------------+---------------+----------------------------+ + +.. todo: default mutable value, e.g. x = x or [] + Comparison ========== From 5d7126f35ff16939ab2db55d206ffef83f258640 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 17:33:08 +0300 Subject: [PATCH 106/689] Extended logical 'and' and 'or' description and usage examples Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 38eab9a9f..2b15ab1df 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -155,7 +155,23 @@ be ``True`` if **both** are true. | ``False`` | ``True`` | ``False`` | +---------------+---------------+-----------------------------+ -.. todo: func_1() and func_2(); 0 and 5 +``and`` operator work's not only with operands of Boolean type. +It's behavior: + +- evaluate 1st operand; return it, if it's ``False`` and finish +- evaluate 2nd operand; return it, if it's ``False`` and finish +- return 2nd operand + +.. code-block:: python + + >>> 1 and 5 + 5 + >>> '' and None + '' + >>> 0 and True + 0 + >>> 5 and False + False Getting started with ``or`` operator ------------------------------------ @@ -181,7 +197,23 @@ then the expression is ``False``. | ``False`` | ``True`` | ``True`` | +---------------+---------------+----------------------------+ -.. todo: default mutable value, e.g. x = x or [] +``or`` operator work's not only with operands of Boolean type. +It's behavior: + +- evaluate 1st operand; return it, if it's ``True`` and finish +- evaluate 2nd operand; return it, if it's ``True`` and finish +- return 2nd operand + +.. code-block:: python + + >>> 42 or True + 42 + >>> None or [] + [] + >>> 0 or True + True + >>> [[]] or '' + [[]] Comparison ========== From 4f63c34d1279c3320c4a532f33a12f304a39ccf1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 17:40:06 +0300 Subject: [PATCH 107/689] Added todo notes to "boolean logic" doc Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 2b15ab1df..75a0b200b 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -243,3 +243,7 @@ priority (which is higher than that of the Boolean operations). +------------+-----------------------------------+ | ``is not`` | negated object identity | +------------+-----------------------------------+ + +.. todo: add examples and description(s) + +.. todo: chaining with boolean operators From 0766dcf9b0ceb8e9abe147f5f4ec865fc7a0ce19 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 18:13:34 +0300 Subject: [PATCH 108/689] Added "controlflow" document - draft Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 76 ++++++++++++++++++++++++++++++++++++++ src/refs.bib | 5 +++ 2 files changed, 81 insertions(+) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 5914db841..6982ad453 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -6,3 +6,79 @@ ******************************************************************************* Control Flow ******************************************************************************* + +``if`` statement +================ + +Perhaps the most well-known statement type is ``if`` statement. For example: + +.. code-block:: python + :caption: if statement base example + + >>> x = int(input("Please enter an integer: ")) + >>> if x < 0: + ... x = 0 + ... print("Negative x changed to 0") + ... elif x == 0: + ... print("x is equal to zero") + ... elif x == 1: + ... print("x is equal to one") + ... else: + ... print("x is greater than one") + +But let's dive into ``if`` statement with more simple examples. + +How it works +------------ + +**if** statement is defined with a keyword ``if`` followed by a Boolean +expression or any object and finished with colon. The statement requires +a *body*: other statements to execute, also called an *if block*. +The body is indented at the same distance from the left (in Python we use +4 spaces to indent a single block of code). + +The body's statements will be executed only in case **if** expression is +``True``. + +.. code-block:: python + :linenos: + + from random import randint + + number: int = randint(1, 2) + + if not number % 2: # the as number % 2 == 0 + print(number, "is even") + +The ``print`` statement on line #6 will be executed only for even value of +``number`` variable. + +``else`` block +-------------- + +Since ``if`` can be used by its own, it can extend its behavior with ``else`` +block. The general syntax for ``else`` body is the same: at least one indented +statement. But ``else`` doesn't take any expression after it. This block of +code will be executed only that the ``if`` statement truth check fails. + +.. code-block:: python + :linenos: + + from random import randint + + number: int = randint(1, 2) + + if not number % 2: + print(number, "is even") + else: + print(number, "is odd") + +``elif`` block(s) +----------------- + +.. todo: provide elif examples + +Usage +----- + +.. todo: branching the code diff --git a/src/refs.bib b/src/refs.bib index 4cff75e68..6bdec017f 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -132,3 +132,8 @@ @misc{realpython:boolean-or author = "{Leodanis Pozo Ramos}", url = {https://realpython.com/python-or-operator/}, } + +@misc{docs-python:controlflow, + title = "{Python Documentation: 4. More Control Flow Tools}", + url = {https://docs.python.org/tutorial/controlflow.html}, +} From c082af1e9c45ad3121f2933e9bdff4c66acb5344 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 20:07:54 +0300 Subject: [PATCH 109/689] Extended else statement section Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 6982ad453..34f22a1ed 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -73,6 +73,9 @@ code will be executed only that the ``if`` statement truth check fails. else: print(number, "is odd") +You can attach **only one** else block to **if statement**. And you cannot use +``else`` statement on its own - this will cause *SyntaxError*. + ``elif`` block(s) ----------------- From 0e70d9523b243f53453c9cbcd23b1a2fb99a6f2a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 20:23:25 +0300 Subject: [PATCH 110/689] Added usage example for `if/elif/else` statements Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 58 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 34f22a1ed..68f0c9a73 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -79,9 +79,63 @@ You can attach **only one** else block to **if statement**. And you cannot use ``elif`` block(s) ----------------- -.. todo: provide elif examples +``elif`` (*else if*) statement may be considered as semi-statement between +``if`` and ``else`` statements. In case your program has more than two +dedicated choices you are able to extends control flow by appending +``elif`` blocks after ``if`` statement. The syntax is pretty similar to ``if`` +statement. Each ``elif`` has its own boolean expression or an object to test +for the truth value. + +You can attach as many ``elif`` statements as it needed. But you cannot use +``elif`` without ``if`` statement. + +Python will test conditions in ``if`` and ``elif`` statements from top to +bottom. The first one, which considered to be ``True`` will be executed. +All others will be skipped. + +If there were no truth conditions ``else`` block will be executed (if exists). + +.. code-block:: python + + >>> x = int(input("Enter some integer number: ")) + >>> if not x % 5 and not x % 3: # the same as x % 5 == 0 and x % 3 == 0 + ... print(x, "is divisible by 5 and 3") + ... elif not x % 5: + ... print(x, "is divisible by 5") + ... elif not x % 3: + ... print(x, "is divisible by 3") + ... else: + ... print(x, "is not divisible by 5 or 3") + +.. note:: + + The order conditions appears matter. + The truth test goes from top to bottom and stops at first expression + which is ``True``. Usage ----- -.. todo: branching the code +``if/elif/else`` statements help you to control which portion of your code is +executed based on conditions from outer scope. + +.. code-block:: python + :linenos: + + # Ask user for input + grade = int(input("Enter your grade (0-100): ")) + + # Use if/elif/else statements to assign letter grade + if grade >= 90: + letter_grade = "A" + elif grade >= 80: + letter_grade = "B" + elif grade >= 70: + letter_grade = "C" + elif grade >= 60: + letter_grade = "D" + else: + letter_grade = "F" + + # Print the letter grade + print("Your letter grade is:", letter_grade) From b1798f446300209a9a8232128129e3c66a6e9e0d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 14 Jun 2023 02:14:47 +0300 Subject: [PATCH 111/689] Rebase 'feature/controlflow' onto 'devel' branch --- src/_locales/uk/LC_MESSAGES/basics.po | 587 +++++++++++++++++++++++++- src/basics/bool_logic.txt | 8 +- src/basics/controlflow.txt | 4 +- 3 files changed, 584 insertions(+), 15 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index e4e319374..ee091f780 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -21,19 +21,447 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/basics/controlflow.txt:-1 -msgid "Control flow in Python" -msgstr "Контроль потоку в Python" +#: ../../src/basics/bool_logic.txt:-1 +msgid "this document covers usage of logic and comparison operators in Python" +msgstr "" +"цей документ охоплює використання логіки та операторів порівняння в Python" -#: ../../src/basics/controlflow.txt:-1 ../../src/basics/decorators.txt:-1 -#: ../../src/basics/exceptions.txt:-1 ../../src/basics/functions.txt:-1 -#: ../../src/basics/index.txt:-1 ../../src/basics/modules.txt:-1 -#: ../../src/basics/pep8.txt:-1 ../../src/basics/stdtypes.txt:-1 -#: ../../src/basics/syntax.txt:-1 ../../src/basics/testing.txt:-1 -#: ../../src/basics/variables.txt:-1 +#: ../../src/basics/bool_logic.txt:-1 ../../src/basics/controlflow.txt:-1 +#: ../../src/basics/decorators.txt:-1 ../../src/basics/exceptions.txt:-1 +#: ../../src/basics/functions.txt:-1 ../../src/basics/index.txt:-1 +#: ../../src/basics/modules.txt:-1 ../../src/basics/pep8.txt:-1 +#: ../../src/basics/stdtypes.txt:-1 ../../src/basics/syntax.txt:-1 +#: ../../src/basics/testing.txt:-1 ../../src/basics/variables.txt:-1 msgid "Serhii Horodilov" msgstr "Serhii Horodilov" +#: ../../src/basics/bool_logic.txt:-1 +msgid "python, boolean, logic, comparison, operator" +msgstr "python, boolean, logic, comparison, operator" + +#: ../../src/basics/bool_logic.txt:14 +msgid "Boolean Logic" +msgstr "Булева Логіка" + +#: ../../src/basics/bool_logic.txt:20 +msgid "" +"`George Boole`_ put together what is now known as `Boolean algebra`_, which " +"relies on **true** and **false** values and define a set of boolean " +"operations: **not**, **and**, and **or**." +msgstr "" +"`George Boole`_ об’єднав те, що тепер відомо як `булева алгебра`_, яка " +"спирається на значення **true** і **false** і визначає набір логічних " +"операцій: **not**, **and** і **or**." + +#: ../../src/basics/bool_logic.txt:24 +msgid "" +"These Boolean values and operators are helpful in programming because they " +"help you decide the course of action in your programs." +msgstr "" +"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " +"допомагають визначити курс дій у ваших програмах." + +#: ../../src/basics/bool_logic.txt:27 +msgid "" +"The **Python boolean** type is one of Python's built-in data types. It's " +"used to represent the truth value of an expression. For example, the " +"expression ``1 < 2`` is ``True``, while the expression ``0 == 1`` is " +"``False``. Understanding how Python Boolean values behave is important to " +"programming well in Python." +msgstr "" +"Тип **Python boolean** є одним із вбудованих типів даних Python. Він " +"використовується для представлення істиності значення виразу. Наприклад, " +"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " +"того, як поводяться логічні значення Python, є важливим для якісного " +"програмування на Python." + +#: ../../src/basics/bool_logic.txt:34 +msgid "Understanding Boolean" +msgstr "Розбираємось з Логічним типом даних" + +#: ../../src/basics/bool_logic.txt:36 +msgid "The Boolean type has only two possible values:" +msgstr "Логічний тип має лише два можливих значення:" + +#: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:121 +#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:149 +#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 +#: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:195 +#: ../../src/basics/bool_logic.txt:197 +msgid "``True``" +msgstr "``True``" + +#: ../../src/basics/bool_logic.txt:39 ../../src/basics/bool_logic.txt:121 +#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:151 +#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 +#: ../../src/basics/bool_logic.txt:193 ../../src/basics/bool_logic.txt:195 +#: ../../src/basics/bool_logic.txt:197 +msgid "``False``" +msgstr "``False``" + +#: ../../src/basics/bool_logic.txt:41 +msgid "No other value will have ``bool`` as it type." +msgstr "Жодне інше значення не матиме тип ``bool``." + +#: ../../src/basics/bool_logic.txt:50 +msgid "" +"The type ``bool`` is **built-in**, meaning it's always available in Python. " +"``True`` and ``False`` are keywords in Python and can't be used as variable " +"names. but ``bool`` type isn't and it's possible assign to the name " +"``bool``, however this is considered bad style." +msgstr "" +"Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " +"і ``False`` є ключовими словами в Python і не можуть використовуватися як " +"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " +"значення, однак це вважається поганим стилем." + +#: ../../src/basics/bool_logic.txt:56 +msgid "Boolean as numbers" +msgstr "Boolean як число" + +#: ../../src/basics/bool_logic.txt:58 +msgid "" +"Booleans are a subtype of **numeric** type in Python. This means they're " +"numbers for all intents and purposes. In other words, you can apply " +"arithmetic operations to Boolean, and you can also compare them to numbers. " +"``True`` value is treated to be 1, and ``False`` value is treated to be 0." +msgstr "" +"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " +"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " +"арифметичні операції до логічних значень, а також порівнювати їх із числами. " +"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " +"0." + +#: ../../src/basics/bool_logic.txt:63 +msgid "There aren't many uses of the numerical nature of Boolean values." +msgstr "" +"Числовій природі логічних значень можна знайти не так багато застосунків." + +#: ../../src/basics/bool_logic.txt:66 +msgid "Truth value testing" +msgstr "Перевірка істинності" + +#: ../../src/basics/bool_logic.txt:68 +msgid "" +"Any object can be tested for truth value. By default an object considered " +"``True``, unless its class defines either. Here are most of built-in objects " +"considered ``False``:" +msgstr "" +"Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " +"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " +"вбудованих об'єктів, які вважаються ``False``:" + +#: ../../src/basics/bool_logic.txt:72 +msgid "constant values: ``None`` and ``False``" +msgstr "константи: ``None`` та ``False``" + +#: ../../src/basics/bool_logic.txt:73 +msgid "" +"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" +msgstr "" +"нуль будь-якого числового типу: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" + +#: ../../src/basics/bool_logic.txt:75 +msgid "" +"empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " +"``range(0)``." +msgstr "" +"порожні послідовності та колекції: ``''``, ``[]``, ``()``, ``{}``, " +"``set()``, ``range(0)``." + +#: ../../src/basics/bool_logic.txt:80 +msgid "" +"If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " +"as ``False``." +msgstr "" +"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " +"``bool`` як ``False``." + +#: ../../src/basics/bool_logic.txt:84 +msgid "Boolean comparison" +msgstr "Логічне Порівняння" + +#: ../../src/basics/bool_logic.txt:88 +msgid "Python provides 3 logical operators:" +msgstr "Python надає 3 логічних оператори:" + +#: ../../src/basics/bool_logic.txt:94 ../../src/basics/bool_logic.txt:228 +msgid "Operator" +msgstr "Оператор" + +#: ../../src/basics/bool_logic.txt:94 +msgid "Logic operator" +msgstr "Логічний оператор" + +#: ../../src/basics/bool_logic.txt:96 +msgid "``not``" +msgstr "``not``" + +#: ../../src/basics/bool_logic.txt:96 +msgid "Negation" +msgstr "Заперечення" + +#: ../../src/basics/bool_logic.txt:98 +msgid "``and``" +msgstr "``and``" + +#: ../../src/basics/bool_logic.txt:98 +msgid "Conjunction" +msgstr "Кон'юнкція" + +#: ../../src/basics/bool_logic.txt:100 +msgid "``or``" +msgstr "``or``" + +#: ../../src/basics/bool_logic.txt:100 +msgid "Disjunction" +msgstr "Диз'юнкція" + +#: ../../src/basics/bool_logic.txt:103 +msgid "" +"With these operators, you can build expressions by connecting Boolean " +"expressions with each other. These operators are **keywords** of the " +"language, so you cannot use them as identifiers without causing a " +"*SyntaxError*." +msgstr "" +"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " +"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " +"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." + +#: ../../src/basics/bool_logic.txt:108 +msgid "Getting started with ``not`` operator" +msgstr "Початок роботи з оператором ``not``" + +#: ../../src/basics/bool_logic.txt:110 +msgid "" +"The ``not`` operator is the Boolean or logic operator that implements " +"negation in Python. It's **unary**, which means that it takes only one " +"**operand**. The operand can be a Boolean expression or any Python object. " +"The task of ``not`` is to reverse the truth value of its operand." +msgstr "" +"Оператор ``not`` є логічним або логічним оператором, який реалізує " +"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " +"**операнд**. Операндом може бути логічний вираз або будь-який об’єкт Python. " +"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " +"операнда." + +#: ../../src/basics/bool_logic.txt:115 +msgid "not operator truth table" +msgstr "таблиця істинності оператора not" + +#: ../../src/basics/bool_logic.txt:119 +msgid "``operand``" +msgstr "``operand``" + +#: ../../src/basics/bool_logic.txt:119 +msgid "``not operand``" +msgstr "``not operand``" + +#: ../../src/basics/bool_logic.txt:126 +msgid "This functionality makes it worthwhile in several situations:" +msgstr "Ця функція доцільна в кількох ситуаціях:" + +#: ../../src/basics/bool_logic.txt:129 +msgid "" +"Checking **unmet conditions** in the context of ``if`` statements and " +"``while`` loops" +msgstr "" +"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " +"``while``" + +#: ../../src/basics/bool_logic.txt:131 +msgid "**Inverting the truth value** of an object or expression" +msgstr "**Інвертування значення істинності** об'єкта чи виразу" + +#: ../../src/basics/bool_logic.txt:132 +msgid "Checking if a **value is not in a given container**" +msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" + +#: ../../src/basics/bool_logic.txt:133 +msgid "Checking for an **object's identity**" +msgstr "Перевірка **ідентичності об'єкта**" + +#: ../../src/basics/bool_logic.txt:136 +msgid "Getting started with ``and`` operator" +msgstr "Початок роботи з оператором ``and``" + +#: ../../src/basics/bool_logic.txt:138 +msgid "" +"Python's ``and`` operator is **binary**, which means it takes two " +"**operands**. The operands in an ``and`` expression are commonly known as " +"*conditions*. The result of the operator depends on the truth values of its " +"operands. It'll be ``True`` if **both** are true." +msgstr "" +"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " +"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " +"Результат оператора залежить від істинних значень його операндів. Це буде " +"``True``, якщо **обидва** є істинними." + +#: ../../src/basics/bool_logic.txt:143 +msgid "and operator truth table" +msgstr "таблиця істинності оператора and" + +#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 +msgid "``operand_1``" +msgstr "``operand_1``" + +#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 +msgid "``operand_2``" +msgstr "``operand_2``" + +#: ../../src/basics/bool_logic.txt:147 +msgid "``operand_1 and operand_2``" +msgstr "``operand_1 and operand_2``" + +#: ../../src/basics/bool_logic.txt:158 +msgid "" +"``and`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``and`` працює не тільки з операндами логічного типу. Його " +"поведінка:" + +#: ../../src/basics/bool_logic.txt:161 +msgid "evaluate 1st operand; return it, if it's ``False`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:162 +msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:163 ../../src/basics/bool_logic.txt:205 +msgid "return 2nd operand" +msgstr "повернути 2-й операнд" + +#: ../../src/basics/bool_logic.txt:177 +msgid "Getting started with ``or`` operator" +msgstr "Початок роботи з оператором ``or``" + +#: ../../src/basics/bool_logic.txt:179 +msgid "" +"With Boolean ``or`` operator, you can connect two Boolean expressions into " +"one compound expression. This makes ``or`` the **binary** operator. At least " +"one subexpression must be ``True`` for the compound expression to be " +"considered ``True``, and it doesn't matter which. If both subexpressions are " +"``False``, then the expression is ``False``." +msgstr "" +"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " +"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " +"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " +"``True``, і не має значення який. Якщо обидва підвирази мають значення " +"``False``, тоді вираз є ``False``." + +#: ../../src/basics/bool_logic.txt:185 +msgid "or operator truth table" +msgstr "таблиця істинності оператора or" + +#: ../../src/basics/bool_logic.txt:189 +msgid "``operand_1 or operand_2``" +msgstr "``operand_1 or operand_2``" + +#: ../../src/basics/bool_logic.txt:200 +msgid "" +"``or`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" + +#: ../../src/basics/bool_logic.txt:203 +msgid "evaluate 1st operand; return it, if it's ``True`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:204 +msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:219 +msgid "Comparison" +msgstr "Порівняння" + +#: ../../src/basics/bool_logic.txt:221 +msgid "" +"There are eight comparison operations in Python. They all have the same " +"priority (which is higher than that of the Boolean operations)." +msgstr "" +"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " +"(вищий, ніж у логічних операцій)." + +#: ../../src/basics/bool_logic.txt:224 +msgid "Comparison operators" +msgstr "Оператори порівняння" + +#: ../../src/basics/bool_logic.txt:228 +msgid "Meaning" +msgstr "Значення" + +#: ../../src/basics/bool_logic.txt:230 +msgid "``<``" +msgstr "``<``" + +#: ../../src/basics/bool_logic.txt:230 +msgid "strictly less than" +msgstr "строго менше ніж" + +#: ../../src/basics/bool_logic.txt:232 +msgid "``<=``" +msgstr "``<=``" + +#: ../../src/basics/bool_logic.txt:232 +msgid "less than or equal" +msgstr "менше або дорівнює" + +#: ../../src/basics/bool_logic.txt:234 +msgid "``>``" +msgstr "``>``" + +#: ../../src/basics/bool_logic.txt:234 +msgid "strictly greater than" +msgstr "строго більше ніж" + +#: ../../src/basics/bool_logic.txt:236 +msgid "``>=``" +msgstr "``>=``" + +#: ../../src/basics/bool_logic.txt:236 +msgid "greater or equal" +msgstr "більше або дорівнює" + +#: ../../src/basics/bool_logic.txt:238 +msgid "``==``" +msgstr "``==``" + +#: ../../src/basics/bool_logic.txt:238 +msgid "equal (aka *equality* comparison)" +msgstr "дорівнює (також відоме як порівняння *equality*)" + +#: ../../src/basics/bool_logic.txt:240 +msgid "``!=``" +msgstr "``!=``" + +#: ../../src/basics/bool_logic.txt:240 +msgid "not equal" +msgstr "не дорівнює" + +#: ../../src/basics/bool_logic.txt:242 +msgid "``is``" +msgstr "``is``" + +#: ../../src/basics/bool_logic.txt:242 +msgid "object identity" +msgstr "ідентичність об'єкта" + +#: ../../src/basics/bool_logic.txt:244 +msgid "``is not``" +msgstr "``is not``" + +#: ../../src/basics/bool_logic.txt:244 +msgid "negated object identity" +msgstr "заперечена ідентичність об'єкта" + +#: ../../src/basics/controlflow.txt:-1 +msgid "Control flow in Python" +msgstr "Контроль потоку в Python" + #: ../../src/basics/controlflow.txt:-1 msgid "python, basics, control, if, for, while, condition, loop" msgstr "python, basics, control, if, for, while, condition, loop" @@ -42,6 +470,147 @@ msgstr "python, basics, control, if, for, while, condition, loop" msgid "Control Flow" msgstr "Керування виконанням" +#: ../../src/basics/controlflow.txt:11 +msgid "``if`` statement" +msgstr "Вираз ``if``" + +#: ../../src/basics/controlflow.txt:13 +msgid "" +"Perhaps the most well-known statement type is ``if`` statement. For example:" +msgstr "Мабуть, найвідомішим типом оператора є оператор ``if``. Наприклад:" + +#: ../../src/basics/controlflow.txt:15 +msgid "if statement base example" +msgstr "базовий приклад оператора if" + +#: ../../src/basics/controlflow.txt:29 +msgid "But let's dive into ``if`` statement with more simple examples." +msgstr "" +"Але давайте зануримося в інструкцію ``if`` з більш простими прикладами." + +#: ../../src/basics/controlflow.txt:32 +msgid "How it works" +msgstr "Як це працює" + +#: ../../src/basics/controlflow.txt:34 +msgid "" +"**if** statement is defined with a keyword ``if`` followed by a Boolean " +"expression or any object and finished with colon. The statement requires a " +"*body*: other statements to execute, also called an *if block*. The body is " +"indented at the same distance from the left (in Python we use 4 spaces to " +"indent a single block of code)." +msgstr "" +"Оператор **if** визначається ключовим словом ``if``, за яким слідує логічний " +"вираз або будь-який об'єкт і завершується двокрапкою. Оператор потребує " +"*тіло*: інші оператори для виконання, які також називають блоком *if*. Тіло " +"має відступ на однаковій відстані зліва (у Python ми використовуємо 4 " +"пробіли для відступу одного блоку коду)." + +#: ../../src/basics/controlflow.txt:40 +msgid "" +"The body's statements will be executed only in case **if** expression is " +"``True``." +msgstr "" +"Оператори тіла виконуватимуться лише у випадку, якщо вираз **if** має " +"значення ``True``." + +#: ../../src/basics/controlflow.txt:53 +msgid "" +"The ``print`` statement on line #6 will be executed only for even value of " +"``number`` variable." +msgstr "" +"Оператор ``print`` у рядку #6 буде виконано лише для парного значення " +"змінної ``number``." + +#: ../../src/basics/controlflow.txt:57 +msgid "``else`` block" +msgstr "Блок ``else``" + +#: ../../src/basics/controlflow.txt:59 +msgid "" +"``if`` can be used by its own, it can extend its behavior with ``else`` " +"block. The general syntax for ``else`` body is the same: at least one " +"indented statement. But ``else`` doesn't take any expression after it. This " +"block of code will be executed only that the ``if`` statement truth check " +"fails." +msgstr "" +"``if`` може використовуватися самостійно, він може розширити свою поведінку " +"за допомогою блоку ``else``. Загальний синтаксис для тіла ``else`` той " +"самий: принаймні один оператор із відступом. Але ``else`` не приймає жодного " +"виразу після нього. Цей блок коду буде виконано лише тоді, коли перевірка " +"істинності оператора ``if`` буде невдалою." + +#: ../../src/basics/controlflow.txt:76 +msgid "" +"You can attach **only one** else block to **if statement**. And you cannot " +"use ``else`` statement on its own - this will cause *SyntaxError*." +msgstr "" +"Ви можете приєднати **лише один** блок else до **інструкції if**. І ви не " +"можете використовувати оператор ``else`` сам по собі - це спричинить " +"*SyntaxError*." + +#: ../../src/basics/controlflow.txt:80 +msgid "``elif`` block(s)" +msgstr "Блок(и) ``elif``" + +#: ../../src/basics/controlflow.txt:82 +msgid "" +"``elif`` (*else if*) statement may be considered as semi-statement between " +"``if`` and ``else`` statements. In case your program has more than two " +"dedicated choices you are able to extends control flow by appending ``elif`` " +"blocks after ``if`` statement. The syntax is pretty similar to ``if`` " +"statement. Each ``elif`` has its own boolean expression or an object to test " +"for the truth value." +msgstr "" +"Оператор ``elif`` (*else if*) можна розглядати як напівоператор між ``if`` " +"та ``else``. Якщо у вашій програмі є більше двох виділених варіантів, ви " +"можете розширити потік керування, додавши блоки ``elif`` після оператора " +"``if``. Синтаксис дуже схожий на оператор if. Кожен ``elif`` має свій " +"власний логічний вираз або об'єкт для перевірки значення істинності." + +#: ../../src/basics/controlflow.txt:89 +msgid "" +"You can attach as many ``elif`` statements as it needed. But you cannot use " +"``elif`` without ``if`` statement." +msgstr "" +"Ви можете додати скільки завгодно операторів ``elif``. Але ви не можете " +"використовувати ``elif`` без оператора ``if``." + +#: ../../src/basics/controlflow.txt:92 +msgid "" +"Python will test conditions in ``if`` and ``elif`` statements from top to " +"bottom. The first one, which considered to be ``True`` will be executed. All " +"others will be skipped." +msgstr "" +"Python перевірить умови в операторах ``if`` та ``elif`` зверху вниз. Буде " +"виконано перший, який вважається ``True``. Усі інші будуть проігноровано." + +#: ../../src/basics/controlflow.txt:96 +msgid "" +"If there were no truth conditions ``else`` block will be executed (if " +"exists)." +msgstr "Якщо не було істиних умов, буде виконано блок ``else`` (якщо існує)." + +#: ../../src/basics/controlflow.txt:112 +msgid "" +"The order conditions appears matter. The truth test goes from top to bottom " +"and stops at first expression which is ``True``." +msgstr "" +"Порядок у якому визначено умови має значення. Перевірка істинності йде " +"зверху вниз і зупиняється на першому виразі, який є ``True``." + +#: ../../src/basics/controlflow.txt:117 +msgid "Usage" +msgstr "Використання" + +#: ../../src/basics/controlflow.txt:119 +msgid "" +"``if/elif/else`` statements help you to control which portion of your code " +"is executed based on conditions from outer scope." +msgstr "" +"Оператори ``if/elif/else`` допомагають вам контролювати, яка частина вашого " +"коду виконується на основі умов ззовні." + #: ../../src/basics/decorators.txt:-1 msgid "Python decorators" msgstr "Декоратори в Python" diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 75a0b200b..cf175ffb4 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -104,8 +104,8 @@ With these operators, you can build expressions by connecting Boolean expressions with each other. These operators are **keywords** of the language, so you cannot use them as identifiers without causing a *SyntaxError*. -Getting started with Python's ``not`` operator ----------------------------------------------- +Getting started with ``not`` operator +------------------------------------- The ``not`` operator is the Boolean or logic operator that implements negation in Python. It's **unary**, which means that it takes only one **operand**. @@ -155,7 +155,7 @@ be ``True`` if **both** are true. | ``False`` | ``True`` | ``False`` | +---------------+---------------+-----------------------------+ -``and`` operator work's not only with operands of Boolean type. +``and`` operator works not only with operands of Boolean type. It's behavior: - evaluate 1st operand; return it, if it's ``False`` and finish @@ -197,7 +197,7 @@ then the expression is ``False``. | ``False`` | ``True`` | ``True`` | +---------------+---------------+----------------------------+ -``or`` operator work's not only with operands of Boolean type. +``or`` operator works not only with operands of Boolean type. It's behavior: - evaluate 1st operand; return it, if it's ``True`` and finish diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 68f0c9a73..d1a8a017a 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -56,8 +56,8 @@ The ``print`` statement on line #6 will be executed only for even value of ``else`` block -------------- -Since ``if`` can be used by its own, it can extend its behavior with ``else`` -block. The general syntax for ``else`` body is the same: at least one indented +``if`` can be used by its own, it can extend its behavior with ``else`` block. +The general syntax for ``else`` body is the same: at least one indented statement. But ``else`` doesn't take any expression after it. This block of code will be executed only that the ``if`` statement truth check fails. From 5e7409065f9b5e5afb9b60ca54907f6e2b8d77f6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 22:17:41 +0300 Subject: [PATCH 112/689] Added some more description for comparison operators Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index cf175ffb4..147111e60 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -244,6 +244,8 @@ priority (which is higher than that of the Boolean operations). | ``is not`` | negated object identity | +------------+-----------------------------------+ -.. todo: add examples and description(s) +Each of these comparison operators return a Boolean value, it's always +``True`` or ``False``. -.. todo: chaining with boolean operators +You can chain comparison operators together: ``x < y < z`` is equal to +``x < y and y < z``. From 45bc2ac5b74459bbb31e6cb56e92f22371b5eda0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 22:26:41 +0300 Subject: [PATCH 113/689] Added 'equality vs identity' description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 147111e60..55afd37d7 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -249,3 +249,22 @@ Each of these comparison operators return a Boolean value, it's always You can chain comparison operators together: ``x < y < z`` is equal to ``x < y and y < z``. + +Equality vs Identity +-------------------- + +It's easier to understand the difference between those by asking the question +each answers to. + +The question for ``==`` (*equality*) is: + + Is object on the left **equal** to the object on the right + +The question for ``is`` (*identity*) is: + + Is object on the left **the same** as the object on the right + +For example, if there are two cars of the same model, same color etc. in front +of you - these cars are equal, but they aren't ident to each other. But if you +are shown two pictures of the same car, you understand that the cars on those +pictures are the same object. From 3bbdf4fca65aba9d58e4ee199d13bdaa812e0668 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 14 Jun 2023 02:15:41 +0300 Subject: [PATCH 114/689] Rebase 'feature/controlflow' onto 'devel' branch --- src/_locales/uk/LC_MESSAGES/basics.po | 60 ++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index ee091f780..2e60e5981 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -49,7 +49,7 @@ msgid "" "relies on **true** and **false** values and define a set of boolean " "operations: **not**, **and**, and **or**." msgstr "" -"`George Boole`_ об’єднав те, що тепер відомо як `булева алгебра`_, яка " +"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " "спирається на значення **true** і **false** і визначає набір логічних " "операцій: **not**, **and** і **or**." @@ -243,7 +243,7 @@ msgid "" msgstr "" "Оператор ``not`` є логічним або логічним оператором, який реалізує " "заперечення в Python. Це **унарний**, що означає, що він приймає лише один " -"**операнд**. Операндом може бути логічний вираз або будь-який об’єкт Python. " +"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " "Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " "операнда." @@ -458,6 +458,62 @@ msgstr "``is not``" msgid "negated object identity" msgstr "заперечена ідентичність об'єкта" +#: ../../src/basics/bool_logic.txt:247 +msgid "" +"Each of these comparison operators return a Boolean value, it's always " +"``True`` or ``False``." +msgstr "" +"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " +"``True`` або ``False``." + +#: ../../src/basics/bool_logic.txt:250 +msgid "" +"You can chain comparison operators together: ``x < y < z`` is equal to ``x < " +"y and y < z``." +msgstr "" +"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " +"< z``." + +#: ../../src/basics/bool_logic.txt:254 +msgid "Equality vs Identity" +msgstr "Рівність та Ідентичність" + +#: ../../src/basics/bool_logic.txt:256 +msgid "" +"It's easier to understand the difference between those by asking the " +"question each answers to." +msgstr "" +"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " +"відповідає." + +#: ../../src/basics/bool_logic.txt:259 +msgid "The question for ``==`` (*equality*) is:" +msgstr "Питання для ``==`` (*equality*) таке:" + +#: ../../src/basics/bool_logic.txt:261 +msgid "Is object on the left **equal** to the object on the right" +msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" + +#: ../../src/basics/bool_logic.txt:263 +msgid "The question for ``is`` (*identity*) is:" +msgstr "Питання для ``is`` (*identity*) таке:" + +#: ../../src/basics/bool_logic.txt:265 +msgid "Is object on the left **the same** as the object on the right" +msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" + +#: ../../src/basics/bool_logic.txt:267 +msgid "" +"For example, if there are two cars of the same model, same color etc. in " +"front of you - these cars are equal, but they aren't ident to each other. " +"But if you are shown two pictures of the same car, you understand that the " +"cars on those pictures are the same object." +msgstr "" +"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " +"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " +"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " +"одним і тим же об'єктом." + #: ../../src/basics/controlflow.txt:-1 msgid "Control flow in Python" msgstr "Контроль потоку в Python" From 0465c7836d9d58ecf013475a5278cb727d9ce6c9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 14 Jun 2023 04:26:52 +0300 Subject: [PATCH 115/689] Changed pages deploy config to use 'devel' as source --- .github/workflows/deploy_pages.yml | 2 +- pyproject.toml | 2 +- src/conf.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 22b778ab0..fa7079687 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -5,7 +5,7 @@ on: # Runs on pushes targeting the default branch push: branches: - - gh-pages + - devel # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/pyproject.toml b/pyproject.toml index 9ec47e4ca..4b504c98d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2023.04.dev" +version = "2023.06.dev" description = "" license = "MIT" authors = [ diff --git a/src/conf.py b/src/conf.py index 20e018eb2..f66c5af26 100644 --- a/src/conf.py +++ b/src/conf.py @@ -14,7 +14,7 @@ f"{datetime.now().year}, Python training course authors and contributors" authors = "Vladyslav Ponomaryov \\and " \ "Serhii Horodilov" -version = "2023.04.dev" +version = "2023.06.dev" # general configuration master_doc = root_doc = "index" From 9b88d710963b5455899d300aaaa6edeb67f20156 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Jul 2023 14:40:36 +0300 Subject: [PATCH 116/689] Update submodules Reinitialized blog submodule. Update problem-sets to the latest version. --- blog | 2 +- problem-sets | 2 +- src/_locales/uk/LC_MESSAGES/appx.po | 2044 ++++++++++++++++++--------- 3 files changed, 1414 insertions(+), 634 deletions(-) diff --git a/blog b/blog index 158718694..56476e80d 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 15871869482148ac845c412b62c518380e216c93 +Subproject commit 56476e80dfb1dd21361f8756db3c940718a00e22 diff --git a/problem-sets b/problem-sets index 404c2a91f..efeafc8c8 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 404c2a91ff45fa49d424bf5b2930e458dbab6593 +Subproject commit efeafc8c8e949cbfb1ee156827b04a2d1da6573a diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index fad6b9da9..625afc07b 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 23:02+0300\n" +"POT-Creation-Date: 2023-07-14 16:00+0300\n" "PO-Revision-Date: 2023-04-21 23:09+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" "Language: uk\n" +"Language-Team: ua \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" #: ../../src/appx/blog.txt:-1 msgid "Specification for Django blog training project" @@ -39,384 +38,804 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"As a developer you were asked to create a simple blog site. The goal is to " -"create a place on the Internet where users can share their stories to public." +"The project aims to develop a robust and user-friendly web application " +"using the Django framework. The primary objective is to create a blogging" +" platform that allows users to publish and manage articles on various " +"topics. The application will provide an intuitive interface for authors " +"to compose and format their articles, while also offering a seamless " +"reading experience for visitors." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " -"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " -"громадськістю." -#: ../../blog/docs/spec.rst:16 +#: ../../blog/docs/spec.rst:19 +msgid "**Key Features**:" +msgstr "" + +#: ../../blog/docs/spec.rst +msgid "User Registration and Authentication" +msgstr "" + +#: ../../blog/docs/spec.rst:23 msgid "" -"This document applies requirements for the entire project step-by-step. You " -"will start from creating the appropriate URL dispatcher and connecting a " -"PostgreSQL database to store the data and will finish with implementing REST " -"API for the blog." +"The application will provide user registration and authentication " +"functionality, allowing individuals to create accounts, log in, and " +"manage their profile information. This feature will enable authors to " +"have personalized accounts and maintain ownership of their published " +"articles." +msgstr "" + +#: ../../blog/docs/spec.rst +msgid "Article Management" msgstr "" -"Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " -"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " -"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " -"API для блог." -#: ../../blog/docs/spec.rst:21 +#: ../../blog/docs/spec.rst:31 msgid "" -"There are some boiler plates, that may be useful in your future work, but " -"you aren’t forced to use them. It’s on your choice." +"Authors will have the ability to create, edit, and delete articles within" +" the application. The system will offer a user-friendly editor. " +"Additionally, authors will be able to categorize articles by assigning " +"relevant topics to them." msgstr "" -"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " -"ви не змушені їх використовувати. Це на ваш вибір." -#: ../../blog/docs/spec.rst:24 -msgid "`Starter template`_" -msgstr "`Starter template`_" +#: ../../blog/docs/spec.rst +#, fuzzy +msgid "Topic Subscription" +msgstr "Опис" -#: ../../blog/docs/spec.rst:25 -msgid "`Bootstrap template`_" -msgstr "`Bootstrap template`_" +#: ../../blog/docs/spec.rst:38 +msgid "" +"The application will include a subscription feature that allows users to " +"subscribe to topics of interest. By subscribing to specific topics, users" +" will receive notifications or updates whenever new articles are " +"published in those categories. This feature will enhance user engagement " +"and ensure that readers stay informed about the topics they find most " +"valuable." +msgstr "" -#: ../../blog/docs/spec.rst:28 -msgid "Challenge: Site views" -msgstr "Завдання: Site views" +#: ../../blog/docs/spec.rst:45 +msgid "" +"Overall, the project aims to deliver an efficient blogging platform that " +"caters to both authors and readers. By providing a seamless user " +"experience and incorporating essential functionalities such as user " +"authentication, article management, and topic subscriptions, the " +"application will empower users to create, share, and explore engaging " +"content within a well-structured and organized platform." +msgstr "" -#: ../../blog/docs/spec.rst:30 +#: ../../blog/docs/spec.rst:52 msgid "" -"It’s ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." +"Here is a starter repository template, that may helps: `Starter " +"template`_." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " -"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " -"щоб повернути у відповіді HTTP." -#: ../../blog/docs/spec.rst:34 +#: ../../blog/docs/spec.rst:55 +#, fuzzy +msgid "Challenge: Functional views" +msgstr "Завдання: API views" + +#: ../../blog/docs/spec.rst:57 +#, fuzzy msgid "" -"``/blogs/``: A site’s homepage. This will contain a list of blogs available " -"via the django site." +"It's ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " -"на сайті django." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " +"хочете, щоб повернути у відповіді HTTP." -#: ../../blog/docs/spec.rst:36 +#: ../../blog/docs/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." +"``/about/``: надає звичайний текст для користувача, що описує функції " +"сайту django." -#: ../../blog/docs/spec.rst:38 -msgid "``/``: same as ``/blogs/``" -msgstr "``/``: те ж саме ``/blogs/``" +#: ../../blog/docs/spec.rst:63 +#, fuzzy +msgid "" +"``/``: A site's homepage. This will contain a list of blogs published via" +" the django site." +msgstr "" +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " +"доступних на сайті django." -#: ../../blog/docs/spec.rst:39 +#: ../../blog/docs/spec.rst:65 +#, fuzzy msgid "" -"``//``: A single blog post detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single blogpost from the database." +"``/
    /``: A single article detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single article from the " +"database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " -"містить динамічну частину. Це буде використано для отримання однієї " -"публікації блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. " +"URL-адреса містить динамічну частину. Це буде використано для отримання " +"однієї публікації блогу з бази даних." -#: ../../blog/docs/spec.rst:42 +#: ../../blog/docs/spec.rst:68 +#, fuzzy msgid "" -"``//comment/``: This view will be used to add comments to a " -"blogpost." +"``/
    /comment/``: This view will be used to add comments to a " +"article." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання " -"коментарів до публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання" +" коментарів до публікації блогу." -#: ../../blog/docs/spec.rst:44 -msgid "``/create/``: A post creation form." +#: ../../blog/docs/spec.rst:70 +#, fuzzy +msgid "``/create/``: A article creation form." msgstr "``/create/``: форма створення публікації." -#: ../../blog/docs/spec.rst:45 -msgid "``//update/``: A view to update an existing post data." +#: ../../blog/docs/spec.rst:71 +#, fuzzy +msgid "``/
    /update/``: A view to update an existing article data." +msgstr "``//update/``: перегляд для оновлення наявних даних публікації." + +#: ../../blog/docs/spec.rst:72 +#, fuzzy +msgid "``/
    /delete/``: A view to confirm article deletion." +msgstr "``//delete/``: перегляд для підтвердження видалення публікації." + +#: ../../blog/docs/spec.rst:73 +msgid "``/topics/``: A list of topics available on the site." +msgstr "" + +#: ../../blog/docs/spec.rst:74 +msgid "``/topics//subscribe/``: A view to subscribe for a topic." msgstr "" -"``//update/``: перегляд для оновлення наявних даних публікації." -#: ../../blog/docs/spec.rst:46 -msgid "``//delete/``: A view to confirm post deletion." +#: ../../blog/docs/spec.rst:75 +msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." msgstr "" -"``//delete/``: перегляд для підтвердження видалення публікації." -#: ../../blog/docs/spec.rst:47 -msgid "``/profile//``: A site user’s personal page." +#: ../../blog/docs/spec.rst:76 +#, fuzzy +msgid "``/profile//``: A site user's personal page." msgstr "``/profile//``: Персональна сторінка користувача." -#: ../../blog/docs/spec.rst:48 +#: ../../blog/docs/spec.rst:77 +#, fuzzy msgid "" -"``/change_password/``: This route will be used to change users’ credential " +"``/set-password/``: This route will be used to change users' credential " "data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " -"даних користувачів." +"``/change_password/``: Ця сторінка використовуватиметься для зміни " +"облікових даних користувачів." + +#: ../../blog/docs/spec.rst:79 +#, fuzzy +msgid "``/set-userdata/``: This route will be user to change users' data." +msgstr "" +"``/change_password/``: Ця сторінка використовуватиметься для зміни " +"облікових даних користувачів." -#: ../../blog/docs/spec.rst:50 +#: ../../blog/docs/spec.rst:80 +msgid "``/deactivate/``: Account deactivation (deletion) view." +msgstr "" + +#: ../../blog/docs/spec.rst:81 msgid "``/register/``: This view contains a user registration form." msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../blog/docs/spec.rst:51 +#: ../../blog/docs/spec.rst:82 msgid "``/login/``: This view contains a login form." msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../blog/docs/spec.rst:52 +#: ../../blog/docs/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to " +"homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:62 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" +#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:258 +#, fuzzy +msgid "Optional tasks" +msgstr "Додаткові Вдосконалення" -#: ../../blog/docs/spec.rst:64 +#: ../../blog/docs/spec.rst:89 msgid "" -"It’s time to work with data representations. You’re to add HTML template to " -"the blog site project." +"``/archive///``: This view provides a list of " +"articles published on a specified month of a specified year. This view " +"should apply date validation and raise ``Http404`` for invalid paths. The" +" valid date is a year's 4-digits form followed by 1 or 2 digits " +"representing month. Month range should be limited as [1..12], leading " +"zero may be omitted. Valid URLs are:" msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати шаблон " -"HTML до проекту сайту блогу." -#: ../../blog/docs/spec.rst:67 +#: ../../blog/docs/spec.rst:103 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:106 msgid "" -"Create \"templates\" folder in the project's root. This is the place to keep " -"your base templates. Make sure this path is included to the ``TEMPLATES`` " -"object in settings file." +"Django admin may be used to create some dummy data. To gather access to " +"admin section you need to create a superuser. The easiest way to do that " +"is to use a django command:" msgstr "" -"Створіть папку \"templates\" в корені проекту. Це місце для зберігання ваших " -"базових шаблонів. Переконайтеся, що цей шлях включено до об'єкта " -"``TEMPLATES`` у файлі налаштувань." -#: ../../blog/docs/spec.rst:73 +#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:238 +msgid "General" +msgstr "" + +#: ../../blog/docs/spec.rst:116 +msgid "Each model will be registered for admin site." +msgstr "" + +#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 +msgid "Article topic" +msgstr "" + +#: ../../blog/docs/spec.rst:120 +msgid "This is a simple model, that contains information about topic:" +msgstr "" + +#: ../../blog/docs/spec.rst:122 +msgid "topic title (unique value, 64 characters or fewer)" +msgstr "" + +#: ../../blog/docs/spec.rst:123 +msgid "topic short description (255 characters or fewer)" +msgstr "" + +#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 +#, fuzzy +msgid "Article" +msgstr "Змінні" + +#: ../../blog/docs/spec.rst:127 +msgid "Article requires title (255 characters or fewer)." +msgstr "" + +#: ../../blog/docs/spec.rst:128 +msgid "Article requires content (at least 255 characters)." +msgstr "" + +#: ../../blog/docs/spec.rst:129 msgid "" -"There is no need to implement functional for forms for now. Just render " -"them. There is no need to pass any context to ``render`` function for now." +"Creation date should be autogenerated at article creation, and would " +"never be updated." msgstr "" -"На даний момент немає необхідності впроваджувати функціонал для форм. Просто " -"візуалізуйте їх. Наразі немає потреби передавати будь-який контекст у " -"функцію ``render``." -#: ../../blog/docs/spec.rst:77 -msgid "**All** templates should be inherited from the base template." -msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." +#: ../../blog/docs/spec.rst:131 +msgid "Updated date will be update at each article save." +msgstr "" + +#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 +msgid "Article comment" +msgstr "" + +#: ../../blog/docs/spec.rst:135 +msgid "Comment requires creation date (autogenerated)." +msgstr "" + +#: ../../blog/docs/spec.rst:136 +msgid "Comment requires message text." +msgstr "" -#: ../../blog/docs/spec.rst:78 +#: ../../blog/docs/spec.rst:139 +msgid "Relationships" +msgstr "" + +#: ../../blog/docs/spec.rst:141 msgid "" -"Each page should contain a navbar at the top. Navbar will contain permalinks " -"to the home and about pages." +"Standard Django user model **will be** used for now. To apply model " +"reference pass ``\"auth.User\"`` as related model. Users can be created " +"via admin page. You can also refer the same model as shown below:" msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " -"міститиме постійні посилання на домашню сторінку та сторінку про." -#: ../../blog/docs/spec.rst:80 -msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." +#: ../../blog/docs/spec.rst:154 +msgid "``article`` and ``topics`` have *many-to-many* relationship." msgstr "" -"Панель навігації має містити посилання на сторінки ``/register/`` і ``/login/" -"``." -#: ../../blog/docs/spec.rst:81 -msgid "``/register/`` page should render a user registration form." -msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." +#: ../../blog/docs/spec.rst:155 +msgid "" +"``article`` and ``user`` have *one-to-many* relationship. A article can " +"have **only one** author, but users can create as many articles as they " +"want." +msgstr "" -#: ../../blog/docs/spec.rst:82 -msgid "``/login/`` page should render a user authentication form." -msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." +#: ../../blog/docs/spec.rst:158 +msgid "" +"``article`` and ``comment`` have *one-to-many* relationship. A article " +"may be a container for many comments, but a comment is related to a " +"single article." +msgstr "" -#: ../../blog/docs/spec.rst:83 -msgid "``/create/`` page should render a form to create a new post." +#: ../../blog/docs/spec.rst:161 +msgid "" +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" +" *article - user* relationship." msgstr "" -"Сторінка ``/create/`` має відобразити форму для створення нового допису." -#: ../../blog/docs/spec.rst:84 +#: ../../blog/docs/spec.rst:163 msgid "" -"``/`` and ``/blogs/`` page should provide a list of posts. Each post should " -"contain a link to its detail view (``/``). It's ok to use static " -"content for now." +"``topic`` and ``user`` use *many-to-many* relationship. A single user can" +" prefer none or as many topics as needed and vice versa. This " +"relationship represents topics preferred by a certain blog user. Also " +"this provides an additional option to mark some of preferred topics with " +"a **notify** flag, to receive newsletters about specified topics updates." +" The difference between *prefer* and *notify* is that *preferred* topics " +"affect the articles list for a user, and *notify* is responsible for " +"newsletters for the user." +msgstr "" + +#: ../../blog/docs/spec.rst:174 +msgid "UML diagram" msgstr "" -"Сторінки ``/`` і ``/blogs/`` мають надавати список публікацій. Кожен допис " -"має містити посилання на його детальний перегляд (``/``). Наразі " -"можна використовувати статичний вміст." -#: ../../blog/docs/spec.rst:87 +#: ../../blog/docs/spec.rst:206 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" + +#: ../../blog/docs/spec.rst:208 +#, fuzzy msgid "" -"``/`` page should provide details on a single post. It's ok to " -"use static content for now." +"Update existing views to represent entities that are actually stored " +"inside the project's database." msgstr "" -"Сторінка ``/`` має надавати детальну інформацію про одну " -"публікацію. Наразі можна використовувати статичний вміст." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" +" в базі даних проекту." -#: ../../blog/docs/spec.rst:89 -msgid "Detail view should contain links to ``/update/`` and ``/delete/``." +#: ../../blog/docs/spec.rst:211 +#, fuzzy +msgid "``/``: should represent a list of existing articles." +msgstr "``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." + +#: ../../blog/docs/spec.rst:212 +#, fuzzy +msgid "" +"Each article entity on a list view should be a link to corresponding " +"article." msgstr "" -"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +"Кожна сутність публікації в поданні списку має бути посиланням на " +"відповідну публікацію." -#: ../../blog/docs/spec.rst:90 -msgid "``/profile//`` should render an author's personal page." -msgstr "``/profile//`` має відобразити особисту сторінку автора." +#: ../../blog/docs/spec.rst:214 +#, fuzzy +msgid "``/
    /``: should represent a single existing article." +msgstr "``//``: має представляти одну наявну публікацію в блозі." -#: ../../blog/docs/spec.rst:97 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" +#: ../../blog/docs/spec.rst:215 +#, fuzzy +msgid "Detail view should contain a list of article related comments." +msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." + +#: ../../blog/docs/spec.rst:216 +#, fuzzy +msgid "" +"``/profile//``: should contain information about user and a" +" list of articles authored by this user." +msgstr "" +"``/profile//``: має містити інформацію про користувача та " +"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.rst:99 -msgid "You are to implement data models for the blog site." -msgstr "Ви повинні реалізувати моделі даних для сайту блогу." +#: ../../blog/docs/spec.rst:218 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." +msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " +"сутність не вдалося отримати." -#: ../../blog/docs/spec.rst:101 -msgid "The ``auth.User`` will be used as ``user`` model." -msgstr "``auth.User`` використовуватиметься як модель ``user``." +#: ../../blog/docs/spec.rst:221 +msgid "" +"Create a service to fetch articles, ordered by a specified user " +"preferences." +msgstr "" -#: ../../blog/docs/spec.rst:103 +#: ../../blog/docs/spec.rst:224 msgid "" -"``post.slug`` value should be autogenerated when a record is created or " -"updated and follow the pattern:" +"It's common to store dedicated functions/classes that supports some " +"specific business logic in a separate module called ``services.py`` or " +"``utils.py`` within an application directory." msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або " -"оновлення запису та слідувати шаблону:" -#: ../../blog/docs/spec.rst:110 +#: ../../blog/docs/spec.rst:229 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" + +#: ../../blog/docs/spec.rst:232 +#, fuzzy +msgid "Helpful link: `_Bootstrap template`_" +msgstr "`Bootstrap template`_" + +#: ../../blog/docs/spec.rst:235 +msgid "Links related to user data **may be** placeholders for now." +msgstr "" + +#: ../../blog/docs/spec.rst:239 +#, fuzzy +msgid "**All** templates should be inherited from the ``base.html`` template." +msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." + +#: ../../blog/docs/spec.rst:240 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value " -"should be ``True`` by default." +"Each page has a descriptive title HTML tag, which included ``| Blog`` " +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " +"etc." msgstr "" -"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " -"замовчуванням це значення має бути ``True``." -#: ../../blog/docs/spec.rst:143 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" +#: ../../blog/docs/spec.rst:242 +msgid "Each page should contain a link to homepage (``/`` URL route)." +msgstr "" -#: ../../blog/docs/spec.rst:145 +#: ../../blog/docs/spec.rst:243 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project’s database." +"(*Optional*) Each page should contain an inclusion-block(s) with " +"following links:" msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " -"базі даних проекту." -#: ../../blog/docs/spec.rst:148 +#: ../../blog/docs/spec.rst:246 +#, fuzzy +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../blog/docs/spec.rst:247 +#, fuzzy +msgid "``/login/``: user login form" +msgstr "``/login/``: Сторінка з формою для логіна." + +#: ../../blog/docs/spec.rst:248 +#, fuzzy +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення публікації." + +#: ../../blog/docs/spec.rst:250 +msgid "" +"Each page contains a list of registered topics. Each view of this kind " +"filters only articles of a relevant topic. This should be implemented " +"with a custom template context processor." +msgstr "" + +#: ../../blog/docs/spec.rst:253 +msgid "Replace content block for *about* page with some static content." +msgstr "" + +#: ../../blog/docs/spec.rst:254 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../blog/docs/spec.rst:150 -msgid "``/`` and ``/blogs/``: should represent a list of existing blogposts." +#: ../../blog/docs/spec.rst:260 +msgid "" +"Each page should contain a list of links to archive views for the last " +"year." msgstr "" -"``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." -#: ../../blog/docs/spec.rst:151 -msgid "Each post entity should provide the information about:" -msgstr "Кожен допис блогу повинен надавати інформацію про:" +#: ../../blog/docs/spec.rst:264 +#, fuzzy +msgid "Articles list" +msgstr "Список Програмного Забезпечення" -#: ../../blog/docs/spec.rst:153 -msgid "title (each word should be capitalized)" -msgstr "назва (кожне слово має бути великим)" +#: ../../blog/docs/spec.rst:265 +msgid "Main page contains a list of published articles." +msgstr "" -#: ../../blog/docs/spec.rst:154 -msgid "creation date" +#: ../../blog/docs/spec.rst:266 +msgid "Each article entity is rendered using a custom template tag." +msgstr "" + +#: ../../blog/docs/spec.rst:267 +msgid "``article`` template tag renders information about a article object:" +msgstr "" + +#: ../../blog/docs/spec.rst:269 +msgid "article title" +msgstr "" + +#: ../../blog/docs/spec.rst:270 +msgid "article content (trimmed to ~50 characters)" +msgstr "" + +#: ../../blog/docs/spec.rst:271 +#, fuzzy +msgid "article creation date" msgstr "дата створення" -#: ../../blog/docs/spec.rst:155 -msgid "list of related topics (first 3 topics or fewer)" +#: ../../blog/docs/spec.rst:272 +#, fuzzy +msgid "related topics (3 topics or fewer)" msgstr "список пов'язаних тем (перші 3 теми або менше)" -#: ../../blog/docs/spec.rst:156 -msgid "trimmed content (~50 words or fewer)" -msgstr "обрізаний вміст (~50 слів або менше)" - -#: ../../blog/docs/spec.rst:157 -msgid "number of comments" +#: ../../blog/docs/spec.rst:273 +#, fuzzy +msgid "number of related comments" msgstr "кількість коментарів" -#: ../../blog/docs/spec.rst:159 -msgid "Each post entity on a list view should be a link to corresponding post." +#: ../../blog/docs/spec.rst:280 +msgid "Article details" msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " -"публікацію." -#: ../../blog/docs/spec.rst:161 -msgid "``//``: should represent a single existing blogpost." -msgstr "``//``: має представляти одну наявну публікацію в блозі." +#: ../../blog/docs/spec.rst:282 +msgid "Article update and deletion views **would not** affect data for now." +msgstr "" -#: ../../blog/docs/spec.rst:162 -msgid "Detail view should contain a list of post related comments." +#: ../../blog/docs/spec.rst:284 +msgid "" +"A article detail page contains links to **update** or **delete** current " +"article." msgstr "" -"Подання деталей має містити список коментарів, пов'язаних із публікацією." -#: ../../blog/docs/spec.rst:163 +#: ../../blog/docs/spec.rst:286 +msgid "Page provides information about article:" +msgstr "" + +#: ../../blog/docs/spec.rst:288 +msgid "Article title" +msgstr "" + +#: ../../blog/docs/spec.rst:289 +#, fuzzy +msgid "Creation date" +msgstr "дата створення" + +#: ../../blog/docs/spec.rst:290 ../../blog/docs/spec.rst:297 +#, fuzzy +msgid "Author name" +msgstr "Запускає гру" + +#: ../../blog/docs/spec.rst:291 +msgid "Related topics" +msgstr "" + +#: ../../blog/docs/spec.rst:292 +msgid "Article content" +msgstr "" + +#: ../../blog/docs/spec.rst:294 +#, fuzzy +msgid "Page contains a list of related comments." +msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." + +#: ../../blog/docs/spec.rst:295 +msgid "Each comment contains:" +msgstr "" + +#: ../../blog/docs/spec.rst:298 +#, fuzzy +msgid "Comment creation time" +msgstr "дата створення" + +#: ../../blog/docs/spec.rst:299 +msgid "Comment message" +msgstr "" + +#: ../../blog/docs/spec.rst:302 +msgid "Profile page" +msgstr "" + +#: ../../blog/docs/spec.rst:303 +msgid "Author page contains information about author:" +msgstr "" + +#: ../../blog/docs/spec.rst:305 +#, fuzzy +msgid "First name" +msgstr "ім'я гравця" + +#: ../../blog/docs/spec.rst:306 +#, fuzzy +msgid "Last name" +msgstr "ім'я гравця" + +#: ../../blog/docs/spec.rst:308 +msgid "Add more information, if needed." +msgstr "" + +#: ../../blog/docs/spec.rst:310 +msgid "Author page contains a list of articles created by this author." +msgstr "" + +#: ../../blog/docs/spec.rst:311 msgid "" -"``/profile//``: should contain information about user and a " -"list of posts authored by this user." +"Author page contains buttons/links to change user data and password or " +"deactivate a user's account." +msgstr "" + +#: ../../blog/docs/spec.rst:315 +msgid "Forms" msgstr "" -"``/profile//``: має містити інформацію про користувача та " -"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.rst:165 +#: ../../blog/docs/spec.rst:317 msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." +"There is **no need** to add actual forms now. They will be generated by " +"Django. This section describes the final view of these pages. It's ok " +"just to create a dedicated templates for future use." msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." -#: ../../blog/docs/spec.rst:170 +#: ../../blog/docs/spec.rst:321 +#, fuzzy +msgid "" +"``/register/`` page contains a new user registration form. It should take" +" inputs from the user:" +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../blog/docs/spec.rst:324 ../../blog/docs/spec.rst:332 +#, fuzzy +msgid "username" +msgstr "``username``" + +#: ../../blog/docs/spec.rst:325 +#, fuzzy +msgid "email" +msgstr "``email``" + +#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:333 +#, fuzzy +msgid "password" +msgstr "``password``" + +#: ../../blog/docs/spec.rst:327 ../../blog/docs/spec.rst:346 +#, fuzzy +msgid "confirm password" +msgstr "``confirm password``" + +#: ../../blog/docs/spec.rst:329 +msgid "" +"``/login/`` page contains a user login form. It should take the inputs " +"from the user:" +msgstr "" + +#: ../../blog/docs/spec.rst:335 +msgid "" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a" +" article's data:" +msgstr "" + +#: ../../blog/docs/spec.rst:338 +msgid "title" +msgstr "" + +#: ../../blog/docs/spec.rst:339 +msgid "relevant topics" +msgstr "" + +#: ../../blog/docs/spec.rst:340 +msgid "content" +msgstr "" + +#: ../../blog/docs/spec.rst:342 +msgid "``/
    /delete`` page contains a simple delete confirmation form." +msgstr "" + +#: ../../blog/docs/spec.rst:343 +msgid "Change password form has two fields:" +msgstr "" + +#: ../../blog/docs/spec.rst:345 +#, fuzzy +msgid "new password" +msgstr "``password``" + +#: ../../blog/docs/spec.rst:348 +msgid "" +"Change user's data form collects all information, that can be changed, " +"e.g. ``username``, ``first name``, ``last name`` etc." +msgstr "" + +#: ../../blog/docs/spec.rst:350 +msgid "" +"User preferences page contains a list of available topics. User can mark " +"some topics as preferred. Also for preferred topics an option to " +"*subscribe* for the newsletters becomes available." +msgstr "" + +#: ../../blog/docs/spec.rst:355 +#, fuzzy +msgid "Challenge: Articles' slugs" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:358 +msgid "This is an optional challenge in addition to:" +msgstr "" + +#: ../../blog/docs/spec.rst:360 +#, fuzzy +msgid "`Challenge: Functional views`_" +msgstr "Завдання: API views" + +#: ../../blog/docs/spec.rst:361 +#, fuzzy +msgid "`Challenge: Templates`_" +msgstr "Завдання: Шаблони" + +#: ../../blog/docs/spec.rst:362 +#, fuzzy +msgid "`Challenge: Data models`_" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:363 +#, fuzzy +msgid "`Challenge: ORM`_" +msgstr "Завдання: ORM" + +#: ../../blog/docs/spec.rst:365 +msgid "Update ``Article`` model with ``slug`` field. The slug value is:" +msgstr "" + +#: ../../blog/docs/spec.rst:367 +msgid "required for each article" +msgstr "" + +#: ../../blog/docs/spec.rst:368 +msgid "unique for each article" +msgstr "" + +#: ../../blog/docs/spec.rst:370 +msgid "Create a data migration to provide slugs for existing articles." +msgstr "" + +#: ../../blog/docs/spec.rst:371 +msgid "" +"``slug`` should be auto-generated on article save. The pattern is " +"``article.title-article.created_date``, e.g. \"Sample article\" created " +"at \"03/24/2023\" should receive slug: ``sample-blog-" +"article-2023-03-23``." +msgstr "" + +#: ../../blog/docs/spec.rst:375 +msgid "Update detail view URL path with article slug as dynamic portion." +msgstr "" + +#: ../../blog/docs/spec.rst:378 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:172 +#: ../../blog/docs/spec.rst:380 msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:174 +#: ../../blog/docs/spec.rst:382 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:175 +#: ../../blog/docs/spec.rst:383 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:176 +#: ../../blog/docs/spec.rst:384 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:177 +#: ../../blog/docs/spec.rst:385 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:179 -msgid "``username`` value should be validated against existing values" -msgstr "" -"Значення ``username`` має перевірятися на відповідність існуючим значенням" +#: ../../blog/docs/spec.rst:387 +#, fuzzy +msgid "``username`` value should be validated against existing values." +msgstr "Значення ``username`` має перевірятися на відповідність існуючим значенням" -#: ../../blog/docs/spec.rst:180 -msgid "``password`` and ``confirm password`` values should match" +#: ../../blog/docs/spec.rst:388 +#, fuzzy +msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися" -#: ../../blog/docs/spec.rst:181 -msgid "Create form for existing users login" +#: ../../blog/docs/spec.rst:389 +#, fuzzy +msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів" -#: ../../blog/docs/spec.rst:182 -msgid "Validations errors are to be rendered on the template" +#: ../../blog/docs/spec.rst:390 +#, fuzzy +msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки мають бути відображені в шаблоні" -#: ../../blog/docs/spec.rst:185 +#: ../../blog/docs/spec.rst:393 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:187 +#: ../../blog/docs/spec.rst:395 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be " +"visible in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " +"бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:189 +#: ../../blog/docs/spec.rst:397 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -424,18 +843,19 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:191 +#: ../../blog/docs/spec.rst:399 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"If authenticated user is admin or stuff they should see a link to admin " +"page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:193 +#: ../../blog/docs/spec.rst:401 msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them:" +" desired username and email. Name data (both first and last) is optional." +" After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -445,140 +865,251 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:198 +#: ../../blog/docs/spec.rst:406 msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case " +"login is successful they should be redirected to their profile (if no " +"``?next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У " +"разі успішного входу вони повинні бути перенаправлені до свого профілю " +"(якщо немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:201 +#: ../../blog/docs/spec.rst:409 +#, fuzzy msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"post creation. Then a post is created, it should be authored by the " -"currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page." +" In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to article creation. Then a article is created, it should be " +"authored by the currently authenticated user." msgstr "" "``/create/``: лише автентифіковані користувачі повинні мати змогу " "відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " -"входу, а після успішної автентифікації повернутися до створення публікації. " -"Потім створюється допис, автором якого має бути поточний автентифікований " -"користувач." +"запит на цей перегляд, він повинен бути спершу перенаправлений до " +"перегляду входу, а після успішної автентифікації повернутися до створення" +" публікації. Потім створюється допис, автором якого має бути поточний " +"автентифікований користувач." -#: ../../blog/docs/spec.rst:206 +#: ../../blog/docs/spec.rst:414 +#, fuzzy msgid "" -"``//comment``: Currently authenticated user should be referenced " -"as a comment’s author." +"``/
    /comment/``: Currently authenticated user should be " +"referenced as a comment's author." msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." -#: ../../blog/docs/spec.rst:208 -msgid "Posts may be modified or deleted only by their authors (no exceptions)." +#: ../../blog/docs/spec.rst:416 +msgid "" +"Articles may be modified or deleted only by their authors from the detail" +" article page. However, admins can still performs articles actions from " +"the admin page." msgstr "" -"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." -#: ../../blog/docs/spec.rst:212 -msgid "Challenge: Blogpost creation and update" -msgstr "Завдання: створення та оновлення блогу" +#: ../../blog/docs/spec.rst:419 +msgid "User related paths are restricted for non-authorized users." +msgstr "" -#: ../../blog/docs/spec.rst:214 -msgid "Create a form to work with the blogpost model." -msgstr "Створіть форму для роботи з моделлю допису." +#: ../../blog/docs/spec.rst:421 +#, fuzzy +msgid "``/set-password/``" +msgstr "``password``" -#: ../../blog/docs/spec.rst:215 +#: ../../blog/docs/spec.rst:422 +#, fuzzy +msgid "``/set-userdata/``" +msgstr "``username``" + +#: ../../blog/docs/spec.rst:424 msgid "" -"Create a form to gather a comment from a user. Form should be used within a " -"\"post detail\" view." +"``POST`` request ``/deactivate/`` should mark current authenticated user " +"as *deleted* and log them user." msgstr "" -"Створіть форму для збору коментарів від користувача. Форму слід " -"використовувати в перегляді \"подробиць публікації\"." -#: ../../blog/docs/spec.rst:217 -msgid "Form should be used for *create* and *update* view." -msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." +#: ../../blog/docs/spec.rst:427 +msgid "Optional task(s)" +msgstr "" -#: ../../blog/docs/spec.rst:219 -msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +#: ../../blog/docs/spec.rst:429 +msgid "" +"Adjust the order of article list according to authenticated user " +"preferences. For anonymous users keep default ordering." +msgstr "" + +#: ../../blog/docs/spec.rst:431 +msgid "" +"Implement account reactivation behavior. The exact workflow does not " +"mater. The sample scenario is to collect email for the user and check it " +"for existing in the database. After that create a request for admin to " +"activate an account and send a confirmation email, when all is done." +msgstr "" + +#: ../../blog/docs/spec.rst:437 +#, fuzzy +msgid "Challenge: Article related forms" +msgstr "Завдання: форми авторизації" + +#: ../../blog/docs/spec.rst:439 +msgid "" +"Implement a article form. This form will be used to create new articles " +"and to update existing ones." +msgstr "" + +#: ../../blog/docs/spec.rst:441 +msgid "Each created article should have at least one related topic." +msgstr "" + +#: ../../blog/docs/spec.rst:442 +msgid "Implement a comment form to gather a comment from a user." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як автора " -"публікації." -#: ../../blog/docs/spec.rst:222 +#: ../../blog/docs/spec.rst:443 +msgid "" +"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " +"moment." +msgstr "" + +#: ../../blog/docs/spec.rst:445 +msgid "Implement functionality:" +msgstr "" + +#: ../../blog/docs/spec.rst:447 +msgid "article creation" +msgstr "" + +#: ../../blog/docs/spec.rst:448 +msgid "article update" +msgstr "" + +#: ../../blog/docs/spec.rst:449 +msgid "article comment (create a related comment)" +msgstr "" + +#: ../../blog/docs/spec.rst:450 +msgid "article deletion" +msgstr "" + +#: ../../blog/docs/spec.rst:453 +msgid "" +"It's ok to use *pre-defined* author for now, or select author by random. " +"This will be fixed in the next section." +msgstr "" + +#: ../../blog/docs/spec.rst:457 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:224 +#: ../../blog/docs/spec.rst:459 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:225 +#: ../../blog/docs/spec.rst:460 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:227 -msgid "It’s ok to use Django built-in views for auth." +#: ../../blog/docs/spec.rst:463 +msgid "It's ok to use built-in Django CBV if needed." msgstr "" -"Для автентифікації можна використовувати вбудовані представлення Django." -#: ../../blog/docs/spec.rst:230 +#: ../../blog/docs/spec.rst:466 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:232 -msgid "Create serializers for:" -msgstr "Створіть серіалізатори для:" +#: ../../blog/docs/spec.rst:470 +msgid "" +"Topic serializer is for read-only purposes only. Topics can be created " +"via admin page only." +msgstr "" -#: ../../blog/docs/spec.rst:234 -msgid "Blogpost entity" -msgstr "Об'єкт публікації в блозі" +#: ../../blog/docs/spec.rst:472 +msgid "" +"Serialized data should contain all available data, e.g. ``pk``, " +"``title``, ``description``." +msgstr "" -#: ../../blog/docs/spec.rst:235 -msgid "Blogpost comment" -msgstr "Коментар у блозі" +#: ../../blog/docs/spec.rst:477 +msgid "" +"article comment serializer can perform both reading and writing " +"operations. But it can't be used to *update* or *delete* comment." +msgstr "" + +#: ../../blog/docs/spec.rst:479 +msgid "" +"Random, or pre-defined user may be used as comment's author for now. This" +" will be fixed in the future." +msgstr "" + +#: ../../blog/docs/spec.rst:484 +msgid "" +"article serializer provides full access to articles. All operations are " +"available: list, retrieve, create, update and destroy." +msgstr "" -#: ../../blog/docs/spec.rst:236 +#: ../../blog/docs/spec.rst:488 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:239 +#: ../../blog/docs/spec.rst:489 +msgid "" +"User serializer provides full access to site users data. All operations " +"are available for now: list, retrieve, create, update and destroy. This " +"behavior will be fixed in the future, to prevent unauthorized data " +"modifications." +msgstr "" + +#: ../../blog/docs/spec.rst:495 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:241 +#: ../../blog/docs/spec.rst:497 +#, fuzzy msgid "" -"All blog-site functionality are to be reflected via REST API. It’s ok to use " -"*pre-defined* user as a post’s author for now." +"All blog-site functionality are to be reflected via REST API. It's ok to " +"use *pre-defined* user as a article's author for now." msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора публікації." +"використовувати *попередньо визначеного* користувача як автора " +"публікації." -#: ../../blog/docs/spec.rst:245 +#: ../../blog/docs/spec.rst:501 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:247 -msgid "Implement REST authentication system." +#: ../../blog/docs/spec.rst:503 +#, fuzzy +msgid "Implement authentication system for REST API." msgstr "Запровадити систему автентифікації REST." -#: ../../blog/docs/spec.rst:248 -msgid "Only account owner can change their account data." +#: ../../blog/docs/spec.rst:505 +msgid "For non-authenticated users it is possible to create a new account" msgstr "" -"Лише власник облікового запису може змінити дані свого облікового запису." -#: ../../blog/docs/spec.rst:249 -msgid "Only authenticated users can create posts and comments." +#: ../../blog/docs/spec.rst:506 +msgid "For non-authenticated users it is possible to obtain authentication data." msgstr "" -"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." -#: ../../blog/docs/spec.rst:250 -msgid "Only authors can change their posts." -msgstr "Тільки автори можуть змінювати свої повідомлення." +#: ../../blog/docs/spec.rst:509 +msgid "" +"Access to user data is restricted. Authorized users can manipulate only " +"their own data (e.g. ``retrieve``, ``update``)." +msgstr "" + +#: ../../blog/docs/spec.rst:511 +msgid "" +"Admins can retrieve all users data (``list``), but can't change them via " +"REST API. However, it is still possible via admin page." +msgstr "" + +#: ../../blog/docs/spec.rst:513 +msgid "" +"Authorized users can ``create`` articles or ``update`` and ``delete`` " +"articles created by them." +msgstr "" + +#: ../../blog/docs/spec.rst:515 +msgid "Authorized users can add comments to a specified article." +msgstr "" #: ../../src/appx/code_edit.txt:-1 msgid "Code editors and IDEs for Python" @@ -604,17 +1135,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово " +"підходить для простих речей, але ці інструменти швидко перетворюють " +"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" +" або навіть просто хорошого спеціального редактора коду робить кодування " +"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -630,23 +1161,25 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -659,8 +1192,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -692,23 +1225,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " +"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " +"дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" +" загальної ціни на вказану кількість товару для покупки. Бажану кількість" +" буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -795,11 +1330,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." +"responsibility is to store information about the purchases and their " +"amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -811,9 +1346,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -855,8 +1390,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." +"This method adds a product instance and corresponding quantity value to " +"the cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -868,7 +1403,8 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці " +"продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -884,8 +1420,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -894,16 +1430,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -927,27 +1463,28 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -958,8 +1495,7 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" +msgid "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -968,11 +1504,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -988,27 +1524,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість *protected*, оскільки до неї не слід звертатися поза " +"екземпляром картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -1016,9 +1552,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -1026,8 +1562,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -1037,31 +1573,29 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1070,9 +1604,10 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " +"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " +": {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1084,16 +1619,17 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1101,17 +1637,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1119,19 +1655,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." +"Implement ``remove_product`` method to completely remove some product " +"from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1147,8 +1683,7 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1181,15 +1716,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " +"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " +"пріоритет зліва направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1209,11 +1744,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника," +" відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1253,8 +1788,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1359,16 +1894,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1388,18 +1923,20 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об'єктом." +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " +"(по модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" +" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " +"*format* замінюються нулем або більше елементами *значень*. Якщо для " +"*format* потрібен один аргумент, *values* може бути одним некортежним " +"об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -1435,9 +1972,11 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " +"обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -1453,11 +1992,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " +"(перевизначає прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -1545,8 +2084,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -1589,8 +2128,7 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." +msgid "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -1611,8 +2149,7 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -1632,9 +2169,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -1659,14 +2196,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " -"provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution " +"`__ on Windows and a " +"DLL (cygwin1.dll) which provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux " +"`__ у Windows та DLL " +"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -1674,11 +2211,12 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " +"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " +"Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -1702,13 +2240,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle everything " -"from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle " +"everything from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " +"версій, призначена для швидкого та ефективного керування всіма проектами," +" від малих до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -1721,24 +2259,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" +" рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " +"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " +"розробки за допомогою інтегрованого конвеєра розробників і консолідації " +"компонентів програми. Активно використовувані мільйонами розробників у " +"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " +"простоту, гнучкість і вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -1750,13 +2288,14 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " +"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" +" вона заслужила міцну репутацію надійності, надійності функцій і " +"продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -1768,24 +2307,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" +" запиту. Крім того, введення може бути з файлу або з аргументів " +"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" +" функцій, подібних до оболонки, для полегшення написання сценаріїв і " +"автоматизації різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -1800,19 +2339,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа " +"адміністрування та розробки з відкритим кодом для PostgreSQL, " +"найдосконалішої бази даних з відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" +" веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -1824,17 +2363,19 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" -"contained `__, `high-reliability " -"`__, `full-featured `__, SQL database engine." +"SQLite is a C-language library that implements a `small " +"`__, `fast " +"`__, `self-contained " +"`__, `high-reliability " +"`__, `full-featured " +"`__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " -"`самодостатню `__, `висока надійність " -"`__, `повнофункціональний `__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку " +"`__, `швидку " +"`__, `самодостатню " +"`__, `висока надійність " +"`__, `повнофункціональний " +"`__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -1860,15 +2401,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must " -"type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must" +" type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " -"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " -"більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " +"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " +"якомога більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -1876,8 +2417,7 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -1885,8 +2425,9 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." +"The game process is divided into rounds. Each round consists of " +"**attack** and **defence** stages. Rounds are repeated, until player is " +"defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -1918,8 +2459,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by" +" random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -1958,8 +2499,9 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " -"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" +" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " +"успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -1987,13 +2529,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom " +"exception ``EnemyDown`` should be used to track these cases. Exception " +"should provide the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" +" повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -2005,13 +2547,15 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." +"This is an exceptional scenario when player is defeated. A custom " +"exception ``GameOver`` should be used to track these cases. Exception " +"should provide the details on the player's instance, especially its score" +" points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати " +"бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -2059,11 +2603,11 @@ msgstr "Зменшує очоки здоров'я" #: of wtk.models.Enemy.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" @@ -2088,8 +2632,7 @@ msgstr "варіант для бою" #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -2117,11 +2660,11 @@ msgstr "очки, зароблені гравцем" #: of wtk.models.Player.__init__:3 msgid "" -"This method performs player instance initialization. It set instance name, " -"initial score points value and health." +"This method performs player instance initialization. It set instance " +"name, initial score points value and health." msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров'я." +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " +"назву екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.__init__:6 msgid "a player's name" @@ -2133,18 +2676,19 @@ msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" +"Perform attack on an enemy instance. This method takes an enemy instance " +"as an argument. After that, it takes attack choice from the player model " +"and the defence choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease enemy " +"health, assign score points etc.). Based on fight result should print out" +" a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі " +"гравця та вибір захисту з моделі противника. Після результату битви " +"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " +"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" +" \"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -2160,11 +2704,11 @@ msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``GameOver`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``GameOver``." #: of wtk.models.Player.decrease_health:6 msgid "GameOver" @@ -2176,17 +2720,17 @@ msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance" +" as an argument. After that, it takes defence choice from the player " +"model and the attack choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease player " +"health). Based on fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та " +"вибір атаки від моделі ворога. Після результату бою необхідно виконати " +"операцію обчислення (зменшити здоров'я гравця). За результатами бою " +"повинно вийти повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -2259,7 +2803,8 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, " +"наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -2320,7 +2865,8 @@ msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " +"рядком." #: of wtk.engine.get_player_name:6 msgid "a player defined name" @@ -2333,20 +2879,21 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated " +"- a new one should be initialized with level increased by 1 (one). This " +"case should be reported to the terminal. If a player is defeated - the " +"\"Game Over\" message should be reported to the terminal. " +"``KeyboardInterrupt`` should be handled as well - it's behavior is " +"similar to \"Game Over\" event, but \"game over\" message should be " +"omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " +"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " +"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " +"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " +"також слід обробити - це поведінка подібно до події \"Game Over\", але " +"повідомлення \"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -2354,13 +2901,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs the " -"game process in an endless loop. Once the player is defeated - it stops the " -"execution." +"The function initializes player and enemy instances. After that it runs " +"the game process in an endless loop. Once the player is defeated - it " +"stops the execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " -"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " -"зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" +" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" +" зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -2369,8 +2916,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" +" записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -2379,4 +2926,237 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового файлу." +"Зберігайте таблицю балів у базі даних замість використання текстового " +"файлу." + +#~ msgid "" +#~ "As a developer you were asked to" +#~ " create a simple blog site. The " +#~ "goal is to create a place on " +#~ "the Internet where users can share " +#~ "their stories to public." +#~ msgstr "" +#~ "Вас, як розробника, попросили створити " +#~ "простий сайт блогу. Мета - створити " +#~ "місце в Інтернеті, де користувачі " +#~ "зможуть ділитися своїми історіями з " +#~ "громадськістю." + +#~ msgid "" +#~ "This document applies requirements for " +#~ "the entire project step-by-step. " +#~ "You will start from creating the " +#~ "appropriate URL dispatcher and connecting " +#~ "a PostgreSQL database to store the " +#~ "data and will finish with implementing" +#~ " REST API for the blog." +#~ msgstr "" +#~ "Цей документ крок за кроком застосовує" +#~ " вимоги до всього проекту. Ви \" " +#~ "\"почнете зі створення відповідного диспетчера" +#~ " URL-адрес і підключення до бази " +#~ "даних PostgreSQL для зберігання даних і" +#~ " закінчите впровадженням REST API для " +#~ "блог." + +#~ msgid "" +#~ "There are some boiler plates, that " +#~ "may be useful in your future work," +#~ " but you aren’t forced to use " +#~ "them. It’s on your choice." +#~ msgstr "" +#~ "Існують деякі котли, які можуть бути " +#~ "корисними у вашій майбутній роботі, але" +#~ " ви не змушені їх використовувати. Це" +#~ " на ваш вибір." + +#~ msgid "`Starter template`_" +#~ msgstr "`Starter template`_" + +#~ msgid "Challenge: Site views" +#~ msgstr "Завдання: Site views" + +#~ msgid "``/``: same as ``/blogs/``" +#~ msgstr "``/``: те ж саме ``/blogs/``" + +#~ msgid "" +#~ "It’s time to work with data " +#~ "representations. You’re to add HTML " +#~ "template to the blog site project." +#~ msgstr "" +#~ "Настав час попрацювати з представленнями " +#~ "даних. Ви повинні додати шаблон HTML " +#~ "до проекту сайту блогу." + +#~ msgid "" +#~ "Create \"templates\" folder in the " +#~ "project's root. This is the place " +#~ "to keep your base templates. Make " +#~ "sure this path is included to the" +#~ " ``TEMPLATES`` object in settings file." +#~ msgstr "" +#~ "Створіть папку \"templates\" в корені " +#~ "проекту. Це місце для зберігання ваших" +#~ " базових шаблонів. Переконайтеся, що цей" +#~ " шлях включено до об'єкта ``TEMPLATES`` " +#~ "у файлі налаштувань." + +#~ msgid "" +#~ "There is no need to implement " +#~ "functional for forms for now. Just " +#~ "render them. There is no need to" +#~ " pass any context to ``render`` " +#~ "function for now." +#~ msgstr "" +#~ "На даний момент немає необхідності " +#~ "впроваджувати функціонал для форм. Просто " +#~ "візуалізуйте їх. Наразі немає потреби " +#~ "передавати будь-який контекст у функцію " +#~ "``render``." + +#~ msgid "" +#~ "Each page should contain a navbar " +#~ "at the top. Navbar will contain " +#~ "permalinks to the home and about " +#~ "pages." +#~ msgstr "" +#~ "Кожна сторінка повинна містити навігаційну " +#~ "панель угорі. Навігаційна панель міститиме " +#~ "постійні посилання на домашню сторінку " +#~ "та сторінку про." + +#~ msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." +#~ msgstr "" +#~ "Панель навігації має містити посилання " +#~ "на сторінки ``/register/`` і ``/login/``." + +#~ msgid "``/register/`` page should render a user registration form." +#~ msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." + +#~ msgid "``/login/`` page should render a user authentication form." +#~ msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." + +#~ msgid "``/create/`` page should render a form to create a new post." +#~ msgstr "" +#~ "Сторінка ``/create/`` має відобразити форму" +#~ " для створення нового допису." + +#~ msgid "" +#~ "``/`` and ``/blogs/`` page should " +#~ "provide a list of posts. Each post" +#~ " should contain a link to its " +#~ "detail view (``/``). It's ok " +#~ "to use static content for now." +#~ msgstr "" +#~ "Сторінки ``/`` і ``/blogs/`` мають " +#~ "надавати список публікацій. Кожен допис " +#~ "має містити посилання на його детальний" +#~ " перегляд (``/``). Наразі можна " +#~ "використовувати статичний вміст." + +#~ msgid "" +#~ "``/`` page should provide details" +#~ " on a single post. It's ok to" +#~ " use static content for now." +#~ msgstr "" +#~ "Сторінка ``/`` має надавати " +#~ "детальну інформацію про одну публікацію. " +#~ "Наразі можна використовувати статичний вміст." + +#~ msgid "Detail view should contain links to ``/update/`` and ``/delete/``." +#~ msgstr "" +#~ "Детальний перегляд має містити посилання " +#~ "на ``/update/`` та ``/delete/``." + +#~ msgid "``/profile//`` should render an author's personal page." +#~ msgstr "``/profile//`` має відобразити особисту сторінку автора." + +#~ msgid "You are to implement data models for the blog site." +#~ msgstr "Ви повинні реалізувати моделі даних для сайту блогу." + +#~ msgid "The ``auth.User`` will be used as ``user`` model." +#~ msgstr "``auth.User`` використовуватиметься як модель ``user``." + +#~ msgid "" +#~ "``post.slug`` value should be autogenerated" +#~ " when a record is created or " +#~ "updated and follow the pattern:" +#~ msgstr "" +#~ "Значення ``post.slug`` має автоматично " +#~ "генеруватися під час створення або " +#~ "оновлення запису та слідувати шаблону:" + +#~ msgid "" +#~ "User preferred topics should be marked" +#~ " with a ``notify`` flag. This value" +#~ " should be ``True`` by default." +#~ msgstr "" +#~ "Вибрані користувачем теми мають бути " +#~ "позначені прапорцем ``notify``. За " +#~ "замовчуванням це значення має бути " +#~ "``True``." + +#~ msgid "Each post entity should provide the information about:" +#~ msgstr "Кожен допис блогу повинен надавати інформацію про:" + +#~ msgid "title (each word should be capitalized)" +#~ msgstr "назва (кожне слово має бути великим)" + +#~ msgid "trimmed content (~50 words or fewer)" +#~ msgstr "обрізаний вміст (~50 слів або менше)" + +#~ msgid "Posts may be modified or deleted only by their authors (no exceptions)." +#~ msgstr "" +#~ "Дописи можуть бути змінені або видалені" +#~ " лише їхніми авторами (без винятків)." + +#~ msgid "Challenge: Blogpost creation and update" +#~ msgstr "Завдання: створення та оновлення блогу" + +#~ msgid "Create a form to work with the blogpost model." +#~ msgstr "Створіть форму для роботи з моделлю допису." + +#~ msgid "" +#~ "Create a form to gather a comment" +#~ " from a user. Form should be " +#~ "used within a \"post detail\" view." +#~ msgstr "" +#~ "Створіть форму для збору коментарів від" +#~ " користувача. Форму слід використовувати в" +#~ " перегляді \"подробиць публікації\"." + +#~ msgid "Form should be used for *create* and *update* view." +#~ msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." + +#~ msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +#~ msgstr "" +#~ "Наразі можна використовувати *попередньо " +#~ "визначеного* користувача як автора публікації." + +#~ msgid "It’s ok to use Django built-in views for auth." +#~ msgstr "" +#~ "Для автентифікації можна використовувати " +#~ "вбудовані представлення Django." + +#~ msgid "Create serializers for:" +#~ msgstr "Створіть серіалізатори для:" + +#~ msgid "Blogpost entity" +#~ msgstr "Об'єкт публікації в блозі" + +#~ msgid "Blogpost comment" +#~ msgstr "Коментар у блозі" + +#~ msgid "Only account owner can change their account data." +#~ msgstr "" +#~ "Лише власник облікового запису може " +#~ "змінити дані свого облікового запису." + +#~ msgid "Only authenticated users can create posts and comments." +#~ msgstr "" +#~ "Тільки автентифіковані користувачі можуть " +#~ "створювати дописи та коментарі." + +#~ msgid "Only authors can change their posts." +#~ msgstr "Тільки автори можуть змінювати свої повідомлення." + From 9457961da5b288456e01e62bbd75e5417645c5d3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Jul 2023 17:21:46 +0300 Subject: [PATCH 117/689] Update blog specification translation --- src/_locales/uk/LC_MESSAGES/appx.po | 1765 ++++++++++++--------------- 1 file changed, 805 insertions(+), 960 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 625afc07b..dac74e3e2 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,17 +8,18 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-14 16:00+0300\n" -"PO-Revision-Date: 2023-04-21 23:09+0300\n" +"POT-Creation-Date: 2023-07-14 17:20+0300\n" +"PO-Revision-Date: 2023-07-14 17:21+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: ua \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../src/appx/blog.txt:-1 msgid "Specification for Django blog training project" @@ -38,178 +39,188 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"The project aims to develop a robust and user-friendly web application " -"using the Django framework. The primary objective is to create a blogging" -" platform that allows users to publish and manage articles on various " -"topics. The application will provide an intuitive interface for authors " -"to compose and format their articles, while also offering a seamless " -"reading experience for visitors." +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." msgstr "" +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." #: ../../blog/docs/spec.rst:19 -msgid "**Key Features**:" -msgstr "" +msgid "**Key Features**" +msgstr "**Основні функції**" #: ../../blog/docs/spec.rst msgid "User Registration and Authentication" -msgstr "" +msgstr "Реєстрація та Аутентифікація Користувачів" #: ../../blog/docs/spec.rst:23 msgid "" "The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and " -"manage their profile information. This feature will enable authors to " -"have personalized accounts and maintain ownership of their published " -"articles." +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." msgstr "" +"Застосунок надасть функціональність реєстрації та аутентифікації " +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." #: ../../blog/docs/spec.rst msgid "Article Management" -msgstr "" +msgstr "Керування Статтями" #: ../../blog/docs/spec.rst:31 msgid "" -"Authors will have the ability to create, edit, and delete articles within" -" the application. The system will offer a user-friendly editor. " -"Additionally, authors will be able to categorize articles by assigning " -"relevant topics to them." +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../blog/docs/spec.rst -#, fuzzy msgid "Topic Subscription" -msgstr "Опис" +msgstr "Підписка на Теми" #: ../../blog/docs/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users" -" will receive notifications or updates whenever new articles are " -"published in those categories. This feature will enhance user engagement " -"and ensure that readers stay informed about the topics they find most " -"valuable." +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../blog/docs/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user " -"experience and incorporating essential functionalities such as user " -"authentication, article management, and topic subscriptions, the " -"application will empower users to create, share, and explore engaging " -"content within a well-structured and organized platform." -msgstr "" +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." +msgstr "" +"Застосунок буде містити функцію підписки, яка дозволить користувачам " +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." #: ../../blog/docs/spec.rst:52 msgid "" -"Here is a starter repository template, that may helps: `Starter " -"template`_." +"Here is a starter repository template, that may helps: `Starter template`_." msgstr "" +"Ось шаблон стартового репозиторію, який може допомогти: Starter template_." #: ../../blog/docs/spec.rst:55 -#, fuzzy msgid "Challenge: Functional views" -msgstr "Завдання: API views" +msgstr "Виклик: Функціональні представлення" #: ../../blog/docs/spec.rst:57 -#, fuzzy msgid "" -"It's ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " -"хочете, щоб повернути у відповіді HTTP." +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." #: ../../blog/docs/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції " -"сайту django." +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." #: ../../blog/docs/spec.rst:63 -#, fuzzy msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via" -" the django site." +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " -"доступних на сайті django." +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." #: ../../blog/docs/spec.rst:65 -#, fuzzy msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single article from the " -"database." +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. " -"URL-адреса містить динамічну частину. Це буде використано для отримання " -"однієї публікації блогу з бази даних." +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." #: ../../blog/docs/spec.rst:68 -#, fuzzy msgid "" -"``/
    /comment/``: This view will be used to add comments to a " -"article." +"``/
    /comment/``: This view will be used to add comments to a article." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання" -" коментарів до публікації блогу." +"``/
    /comment/``: Це представлення буде використовуватися для " +"додавання коментарів до статті." #: ../../blog/docs/spec.rst:70 -#, fuzzy msgid "``/create/``: A article creation form." -msgstr "``/create/``: форма створення публікації." +msgstr "``/create/``: Форма створення статті." #: ../../blog/docs/spec.rst:71 -#, fuzzy msgid "``/
    /update/``: A view to update an existing article data." -msgstr "``//update/``: перегляд для оновлення наявних даних публікації." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." #: ../../blog/docs/spec.rst:72 -#, fuzzy msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "``//delete/``: перегляд для підтвердження видалення публікації." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." #: ../../blog/docs/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." -msgstr "" +msgstr "``/topics/``: Перелік доступних тем на сайті." #: ../../blog/docs/spec.rst:74 msgid "``/topics//subscribe/``: A view to subscribe for a topic." -msgstr "" +msgstr "``/topics//subscribe/``: Представлення для підписки на тему." #: ../../blog/docs/spec.rst:75 msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." -msgstr "" +msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." #: ../../blog/docs/spec.rst:76 -#, fuzzy msgid "``/profile//``: A site user's personal page." -msgstr "``/profile//``: Персональна сторінка користувача." +msgstr "``/profile//``: Особиста сторінка користувача сайту." #: ../../blog/docs/spec.rst:77 -#, fuzzy msgid "" -"``/set-password/``: This route will be used to change users' credential " -"data." +"``/set-password/``: This route will be used to change users' credential data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни " -"облікових даних користувачів." +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." #: ../../blog/docs/spec.rst:79 -#, fuzzy msgid "``/set-userdata/``: This route will be user to change users' data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни " -"облікових даних користувачів." +"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " +"користувачів." #: ../../blog/docs/spec.rst:80 msgid "``/deactivate/``: Account deactivation (deletion) view." msgstr "" +"``/deactivate/``: Представлення для деактивації облікового запису " +"(видалення)." #: ../../blog/docs/spec.rst:81 msgid "``/register/``: This view contains a user registration form." @@ -221,26 +232,31 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../blog/docs/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to " -"homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." #: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:258 -#, fuzzy msgid "Optional tasks" -msgstr "Додаткові Вдосконалення" +msgstr "Додаткові завдання" #: ../../blog/docs/spec.rst:89 msgid "" -"``/archive///``: This view provides a list of " -"articles published on a specified month of a specified year. This view " -"should apply date validation and raise ``Http404`` for invalid paths. The" -" valid date is a year's 4-digits form followed by 1 or 2 digits " -"representing month. Month range should be limited as [1..12], leading " -"zero may be omitted. Valid URLs are:" -msgstr "" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" +msgstr "" +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" #: ../../blog/docs/spec.rst:103 msgid "Challenge: Data models" @@ -249,165 +265,182 @@ msgstr "Завдання: моделі даних" #: ../../blog/docs/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that " -"is to use a django command:" +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" msgstr "" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" #: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:238 msgid "General" -msgstr "" +msgstr "Основне" #: ../../blog/docs/spec.rst:116 msgid "Each model will be registered for admin site." -msgstr "" +msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 +#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:470 msgid "Article topic" -msgstr "" +msgstr "Тема статті" #: ../../blog/docs/spec.rst:120 msgid "This is a simple model, that contains information about topic:" -msgstr "" +msgstr "Ось проста модель, що містить інформацію про тему:" #: ../../blog/docs/spec.rst:122 msgid "topic title (unique value, 64 characters or fewer)" -msgstr "" +msgstr "назва теми (унікальне значення, не більше 64 символів)" #: ../../blog/docs/spec.rst:123 msgid "topic short description (255 characters or fewer)" -msgstr "" +msgstr "короткий опис теми (не більше 255 символів)" -#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 -#, fuzzy +#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:484 msgid "Article" -msgstr "Змінні" +msgstr "Стаття" #: ../../blog/docs/spec.rst:127 msgid "Article requires title (255 characters or fewer)." -msgstr "" +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." #: ../../blog/docs/spec.rst:128 msgid "Article requires content (at least 255 characters)." -msgstr "" +msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." #: ../../blog/docs/spec.rst:129 msgid "" -"Creation date should be autogenerated at article creation, and would " -"never be updated." +"Creation date should be autogenerated at article creation, and would never " +"be updated." msgstr "" +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." #: ../../blog/docs/spec.rst:131 msgid "Updated date will be update at each article save." -msgstr "" +msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 +#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:477 msgid "Article comment" -msgstr "" +msgstr "Коментар до статті" #: ../../blog/docs/spec.rst:135 msgid "Comment requires creation date (autogenerated)." -msgstr "" +msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." #: ../../blog/docs/spec.rst:136 msgid "Comment requires message text." -msgstr "" +msgstr "Коментар вимагає наявності тексту повідомлення." #: ../../blog/docs/spec.rst:139 msgid "Relationships" -msgstr "" +msgstr "Відносини" #: ../../blog/docs/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created " -"via admin page. You can also refer the same model as shown below:" +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" msgstr "" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" #: ../../blog/docs/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." -msgstr "" +msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." #: ../../blog/docs/spec.rst:155 msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can " -"have **only one** author, but users can create as many articles as they " -"want." +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." msgstr "" +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." #: ../../blog/docs/spec.rst:158 msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article " -"may be a container for many comments, but a comment is related to a " -"single article." +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." msgstr "" +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." #: ../../blog/docs/spec.rst:161 msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" -" *article - user* relationship." +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." msgstr "" +"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " +"відношення *стаття - користувач*." #: ../../blog/docs/spec.rst:163 msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can" -" prefer none or as many topics as needed and vice versa. This " -"relationship represents topics preferred by a certain blog user. Also " -"this provides an additional option to mark some of preferred topics with " -"a **notify** flag, to receive newsletters about specified topics updates." -" The difference between *prefer* and *notify* is that *preferred* topics " -"affect the articles list for a user, and *notify* is responsible for " -"newsletters for the user." -msgstr "" +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." #: ../../blog/docs/spec.rst:174 msgid "UML diagram" -msgstr "" +msgstr "UML діаграми" #: ../../blog/docs/spec.rst:206 msgid "Challenge: ORM" msgstr "Завдання: ORM" #: ../../blog/docs/spec.rst:208 -#, fuzzy msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project's database." +"Update existing views to represent entities that are actually stored inside " +"the project's database." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" -" в базі даних проекту." +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." #: ../../blog/docs/spec.rst:211 -#, fuzzy msgid "``/``: should represent a list of existing articles." -msgstr "``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." +msgstr "``/``: повинен представляти список існуючих статей." #: ../../blog/docs/spec.rst:212 -#, fuzzy msgid "" -"Each article entity on a list view should be a link to corresponding " -"article." +"Each article entity on a list view should be a link to corresponding article." msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на " -"відповідну публікацію." +"Кожен елемент статті у перегляді списку повинен бути посиланням на " +"відповідну статтю." #: ../../blog/docs/spec.rst:214 -#, fuzzy msgid "``/
    /``: should represent a single existing article." -msgstr "``//``: має представляти одну наявну публікацію в блозі." +msgstr "``/
    /``: повинен представляти окрему існуючу статтю." #: ../../blog/docs/spec.rst:215 -#, fuzzy msgid "Detail view should contain a list of article related comments." -msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "" +"На сторінці статті повинен бути список коментарів, пов'язаних зі статтею." #: ../../blog/docs/spec.rst:216 -#, fuzzy msgid "" -"``/profile//``: should contain information about user and a" -" list of articles authored by this user." +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." msgstr "" -"``/profile//``: має містити інформацію про користувача та " -"список публікацій, автором яких є цей користувач." +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." #: ../../blog/docs/spec.rst:218 msgid "" @@ -415,82 +448,93 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " -"сутність не вдалося отримати." +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." #: ../../blog/docs/spec.rst:221 msgid "" -"Create a service to fetch articles, ordered by a specified user " -"preferences." +"Create a service to fetch articles, ordered by a specified user preferences." msgstr "" +"Створіть сервіс для отримання статей, впорядкованих за вказаними " +"уподобаннями користувача." #: ../../blog/docs/spec.rst:224 msgid "" -"It's common to store dedicated functions/classes that supports some " -"specific business logic in a separate module called ``services.py`` or " -"``utils.py`` within an application directory." +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." msgstr "" +"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." #: ../../blog/docs/spec.rst:229 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.rst:232 -#, fuzzy -msgid "Helpful link: `_Bootstrap template`_" -msgstr "`Bootstrap template`_" +msgid "Helpful link: `Bootstrap template`_" +msgstr "Корисне посилання: `Bootstrap template`_" #: ../../blog/docs/spec.rst:235 msgid "Links related to user data **may be** placeholders for now." msgstr "" +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." #: ../../blog/docs/spec.rst:239 -#, fuzzy msgid "**All** templates should be inherited from the ``base.html`` template." -msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." +msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." #: ../../blog/docs/spec.rst:240 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " -"etc." +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." msgstr "" +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." #: ../../blog/docs/spec.rst:242 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." #: ../../blog/docs/spec.rst:243 msgid "" -"(*Optional*) Each page should contain an inclusion-block(s) with " -"following links:" +"(*Optional*) Each page should contain an inclusion-block(s) with following " +"links:" msgstr "" +"(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " +"посиланнями:" #: ../../blog/docs/spec.rst:246 -#, fuzzy msgid "``/registration/``: new user registration form" -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." +msgstr "``/register/``: форма реєстрації нового користувача" #: ../../blog/docs/spec.rst:247 -#, fuzzy msgid "``/login/``: user login form" -msgstr "``/login/``: Сторінка з формою для логіна." +msgstr "``/login/``: форма логіна користувача" #: ../../blog/docs/spec.rst:248 -#, fuzzy msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення публікації." +msgstr "``/create/``: форма створення статті" #: ../../blog/docs/spec.rst:250 msgid "" "Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented " -"with a custom template context processor." +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." msgstr "" +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." #: ../../blog/docs/spec.rst:253 msgid "Replace content block for *about* page with some static content." msgstr "" +"Замініть блок вмісту (content block) для сторінки *about* на деякий " +"статичний вміст." #: ../../blog/docs/spec.rst:254 msgid "" @@ -500,284 +544,291 @@ msgstr "Шаблони рівня застосунків розташовува #: ../../blog/docs/spec.rst:260 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../blog/docs/spec.rst:264 -#, fuzzy msgid "Articles list" -msgstr "Список Програмного Забезпечення" +msgstr "Список статей" #: ../../blog/docs/spec.rst:265 msgid "Main page contains a list of published articles." -msgstr "" +msgstr "Головна сторінка містить список опублікованих статей." #: ../../blog/docs/spec.rst:266 msgid "Each article entity is rendered using a custom template tag." msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." #: ../../blog/docs/spec.rst:267 msgid "``article`` template tag renders information about a article object:" -msgstr "" +msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" #: ../../blog/docs/spec.rst:269 msgid "article title" -msgstr "" +msgstr "заголовок статті" #: ../../blog/docs/spec.rst:270 msgid "article content (trimmed to ~50 characters)" -msgstr "" +msgstr "зміст статті (обрізаний до ~50 символів)" #: ../../blog/docs/spec.rst:271 -#, fuzzy msgid "article creation date" -msgstr "дата створення" +msgstr "дата створення статті" #: ../../blog/docs/spec.rst:272 -#, fuzzy msgid "related topics (3 topics or fewer)" -msgstr "список пов'язаних тем (перші 3 теми або менше)" +msgstr "related topics (3 topics or fewer)" #: ../../blog/docs/spec.rst:273 -#, fuzzy msgid "number of related comments" -msgstr "кількість коментарів" +msgstr "кількість коментарів до статті" #: ../../blog/docs/spec.rst:280 msgid "Article details" -msgstr "" +msgstr "Деталі статті" #: ../../blog/docs/spec.rst:282 msgid "Article update and deletion views **would not** affect data for now." -msgstr "" +msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." #: ../../blog/docs/spec.rst:284 msgid "" "A article detail page contains links to **update** or **delete** current " "article." msgstr "" +"На сторінці деталей статті мають бути посилання на **оновлення** або " +"**видалення** поточної статті." #: ../../blog/docs/spec.rst:286 msgid "Page provides information about article:" -msgstr "" +msgstr "Сторінка надає інформацію про статтю:" #: ../../blog/docs/spec.rst:288 msgid "Article title" -msgstr "" +msgstr "Заголовок статті" #: ../../blog/docs/spec.rst:289 -#, fuzzy msgid "Creation date" -msgstr "дата створення" +msgstr "Дата створення" #: ../../blog/docs/spec.rst:290 ../../blog/docs/spec.rst:297 -#, fuzzy msgid "Author name" -msgstr "Запускає гру" +msgstr "Ім'я автора" #: ../../blog/docs/spec.rst:291 msgid "Related topics" -msgstr "" +msgstr "Пов'язані теми" #: ../../blog/docs/spec.rst:292 msgid "Article content" -msgstr "" +msgstr "Вміст статті" #: ../../blog/docs/spec.rst:294 -#, fuzzy msgid "Page contains a list of related comments." -msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "Сторінка містить список пов'язаних коментарів." #: ../../blog/docs/spec.rst:295 msgid "Each comment contains:" -msgstr "" +msgstr "Кожен коментар містить:" #: ../../blog/docs/spec.rst:298 -#, fuzzy msgid "Comment creation time" -msgstr "дата створення" +msgstr "Час створення коментаря" #: ../../blog/docs/spec.rst:299 msgid "Comment message" -msgstr "" +msgstr "Текст комментаря" #: ../../blog/docs/spec.rst:302 msgid "Profile page" -msgstr "" +msgstr "Строніка профілю" #: ../../blog/docs/spec.rst:303 msgid "Author page contains information about author:" -msgstr "" +msgstr "Сторінка автора містить інформацію про автора:" #: ../../blog/docs/spec.rst:305 -#, fuzzy msgid "First name" -msgstr "ім'я гравця" +msgstr "Ім'я" #: ../../blog/docs/spec.rst:306 -#, fuzzy msgid "Last name" -msgstr "ім'я гравця" +msgstr "Прізвище" #: ../../blog/docs/spec.rst:308 msgid "Add more information, if needed." -msgstr "" +msgstr "Додайте більше інформації за бажанням." #: ../../blog/docs/spec.rst:310 msgid "Author page contains a list of articles created by this author." -msgstr "" +msgstr "Сторінка автора містить список статей, створених цим автором." #: ../../blog/docs/spec.rst:311 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." msgstr "" +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." #: ../../blog/docs/spec.rst:315 msgid "Forms" -msgstr "" +msgstr "Форми" #: ../../blog/docs/spec.rst:317 msgid "" "There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok " -"just to create a dedicated templates for future use." +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." msgstr "" +"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " +"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " +"використання достатньо створити окремі шаблони." #: ../../blog/docs/spec.rst:321 -#, fuzzy msgid "" -"``/register/`` page contains a new user registration form. It should take" -" inputs from the user:" -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" +msgstr "" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" #: ../../blog/docs/spec.rst:324 ../../blog/docs/spec.rst:332 -#, fuzzy msgid "username" -msgstr "``username``" +msgstr "username" #: ../../blog/docs/spec.rst:325 -#, fuzzy msgid "email" -msgstr "``email``" +msgstr "email" #: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:333 -#, fuzzy msgid "password" -msgstr "``password``" +msgstr "password" #: ../../blog/docs/spec.rst:327 ../../blog/docs/spec.rst:346 -#, fuzzy msgid "confirm password" -msgstr "``confirm password``" +msgstr "confirm password" #: ../../blog/docs/spec.rst:329 msgid "" -"``/login/`` page contains a user login form. It should take the inputs " -"from the user:" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" msgstr "" +"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " +"отримувати введені дані від користувача:" #: ../../blog/docs/spec.rst:335 msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a" -" article's data:" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" msgstr "" +"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " +"даних статті:" #: ../../blog/docs/spec.rst:338 msgid "title" -msgstr "" +msgstr "title" #: ../../blog/docs/spec.rst:339 msgid "relevant topics" -msgstr "" +msgstr "відповідні теми" #: ../../blog/docs/spec.rst:340 msgid "content" -msgstr "" +msgstr "content" #: ../../blog/docs/spec.rst:342 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" +"Сторінка ``/
    /delete`` містить просту форму для підтвердження " +"видалення." #: ../../blog/docs/spec.rst:343 msgid "Change password form has two fields:" -msgstr "" +msgstr "Форма зміни пароля має два поля:" #: ../../blog/docs/spec.rst:345 -#, fuzzy msgid "new password" -msgstr "``password``" +msgstr "new password" #: ../../blog/docs/spec.rst:348 msgid "" -"Change user's data form collects all information, that can be changed, " -"e.g. ``username``, ``first name``, ``last name`` etc." +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." msgstr "" +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." #: ../../blog/docs/spec.rst:350 msgid "" "User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to " -"*subscribe* for the newsletters becomes available." +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." msgstr "" +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." #: ../../blog/docs/spec.rst:355 -#, fuzzy msgid "Challenge: Articles' slugs" -msgstr "Завдання: моделі даних" +msgstr "Виклик: Slug-и статей" #: ../../blog/docs/spec.rst:358 msgid "This is an optional challenge in addition to:" -msgstr "" +msgstr "Це додатковий виклик у додаток до:" #: ../../blog/docs/spec.rst:360 -#, fuzzy msgid "`Challenge: Functional views`_" -msgstr "Завдання: API views" +msgstr "`Challenge: Functional views`_" #: ../../blog/docs/spec.rst:361 -#, fuzzy msgid "`Challenge: Templates`_" -msgstr "Завдання: Шаблони" +msgstr "`Challenge: Templates`_" #: ../../blog/docs/spec.rst:362 -#, fuzzy msgid "`Challenge: Data models`_" -msgstr "Завдання: моделі даних" +msgstr "`Challenge: Data models`_" #: ../../blog/docs/spec.rst:363 -#, fuzzy msgid "`Challenge: ORM`_" -msgstr "Завдання: ORM" +msgstr "`Challenge: ORM`_" #: ../../blog/docs/spec.rst:365 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" #: ../../blog/docs/spec.rst:367 msgid "required for each article" -msgstr "" +msgstr "обов'язкове для кожної статті" #: ../../blog/docs/spec.rst:368 msgid "unique for each article" -msgstr "" +msgstr "унікальне для кожної статті" #: ../../blog/docs/spec.rst:370 msgid "Create a data migration to provide slugs for existing articles." -msgstr "" +msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." #: ../../blog/docs/spec.rst:371 msgid "" -"``slug`` should be auto-generated on article save. The pattern is " -"``article.title-article.created_date``, e.g. \"Sample article\" created " -"at \"03/24/2023\" should receive slug: ``sample-blog-" -"article-2023-03-23``." +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." msgstr "" +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " +"отримає slug: ``sample-blog-article-2023-03-23``." #: ../../blog/docs/spec.rst:375 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" +"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " +"якою буде slug статті." #: ../../blog/docs/spec.rst:378 msgid "Challenge: Auth forms" @@ -785,7 +836,8 @@ msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.rst:380 msgid "Create form for new users registration with required fields:" -msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.rst:382 msgid "``username``" @@ -804,24 +856,22 @@ msgid "``confirm password``" msgstr "``confirm password``" #: ../../blog/docs/spec.rst:387 -#, fuzzy msgid "``username`` value should be validated against existing values." -msgstr "Значення ``username`` має перевірятися на відповідність існуючим значенням" +msgstr "" +"Значення ``username`` повинно перевірятися на відповідність існуючим " +"значенням." #: ../../blog/docs/spec.rst:388 -#, fuzzy msgid "``password`` and ``confirm password`` values should match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися" +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." #: ../../blog/docs/spec.rst:389 -#, fuzzy msgid "Create form for existing users login." -msgstr "Створити форму для входу існуючих користувачів" +msgstr "Створити форму для входу існуючих користувачів." #: ../../blog/docs/spec.rst:390 -#, fuzzy msgid "Validations errors are to be rendered on the template." -msgstr "Помилки перевірки мають бути відображені в шаблоні" +msgstr "Помилки перевірки повинні відображатися на шаблоні." #: ../../blog/docs/spec.rst:393 msgid "Challenge: Authentication" @@ -829,11 +879,11 @@ msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.rst:395 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be " -"visible in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " -"бути видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." #: ../../blog/docs/spec.rst:397 msgid "" @@ -845,17 +895,16 @@ msgstr "" #: ../../blog/docs/spec.rst:399 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.rst:401 msgid "" -"``/register/``: Users should provide all required information about them:" -" desired username and email. Name data (both first and last) is optional." -" After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -867,249 +916,294 @@ msgstr "" #: ../../blog/docs/spec.rst:406 msgid "" -"``/login/``: Users should provide their credentials to login. In case " -"login is successful they should be redirected to their profile (if no " -"``?next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У " -"разі успішного входу вони повинні бути перенаправлені до свого профілю " -"(якщо немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." #: ../../blog/docs/spec.rst:409 -#, fuzzy msgid "" -"``/create/``: Only authenticated users should be able to visit this page." -" In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to article creation. Then a article is created, it should be " -"authored by the currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." msgstr "" -"``/create/``: лише автентифіковані користувачі повинні мати змогу " -"відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до " -"перегляду входу, а після успішної автентифікації повернутися до створення" -" публікації. Потім створюється допис, автором якого має бути поточний " -"автентифікований користувач." +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." #: ../../blog/docs/spec.rst:414 -#, fuzzy msgid "" -"``/
    /comment/``: Currently authenticated user should be " -"referenced as a comment's author." +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." msgstr "" -"``//comment``: як автора коментаря має бути вказано поточного " -"автентифікованого користувача." +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." #: ../../blog/docs/spec.rst:416 msgid "" -"Articles may be modified or deleted only by their authors from the detail" -" article page. However, admins can still performs articles actions from " -"the admin page." +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." msgstr "" +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." #: ../../blog/docs/spec.rst:419 msgid "User related paths are restricted for non-authorized users." msgstr "" +"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " +"користувачів." #: ../../blog/docs/spec.rst:421 -#, fuzzy msgid "``/set-password/``" -msgstr "``password``" +msgstr "``/set-password/``" #: ../../blog/docs/spec.rst:422 -#, fuzzy msgid "``/set-userdata/``" -msgstr "``username``" +msgstr "``/set-userdata/``" #: ../../blog/docs/spec.rst:424 msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user " -"as *deleted* and log them user." +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." msgstr "" +"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." -#: ../../blog/docs/spec.rst:427 +#: ../../blog/docs/spec.rst:428 msgid "Optional task(s)" -msgstr "" +msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:429 +#: ../../blog/docs/spec.rst:430 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." msgstr "" +"Призначте зміну порядку списку статей відповідно до вподобань " +"аутентифікованого користувача. Для анонімних користувачів залиште типове " +"сортування за замовчуванням." -#: ../../blog/docs/spec.rst:431 +#: ../../blog/docs/spec.rst:432 msgid "" -"Implement account reactivation behavior. The exact workflow does not " -"mater. The sample scenario is to collect email for the user and check it " -"for existing in the database. After that create a request for admin to " -"activate an account and send a confirmation email, when all is done." +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." msgstr "" +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../blog/docs/spec.rst:437 -#, fuzzy +#: ../../blog/docs/spec.rst:438 msgid "Challenge: Article related forms" -msgstr "Завдання: форми авторизації" +msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../blog/docs/spec.rst:439 +#: ../../blog/docs/spec.rst:440 msgid "" -"Implement a article form. This form will be used to create new articles " -"and to update existing ones." +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." msgstr "" +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." -#: ../../blog/docs/spec.rst:441 +#: ../../blog/docs/spec.rst:442 msgid "Each created article should have at least one related topic." -msgstr "" +msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../blog/docs/spec.rst:442 +#: ../../blog/docs/spec.rst:443 msgid "Implement a comment form to gather a comment from a user." -msgstr "" +msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../blog/docs/spec.rst:443 +#: ../../blog/docs/spec.rst:444 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." msgstr "" +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." -#: ../../blog/docs/spec.rst:445 +#: ../../blog/docs/spec.rst:446 msgid "Implement functionality:" -msgstr "" +msgstr "Реалізуйте функціональність:" -#: ../../blog/docs/spec.rst:447 +#: ../../blog/docs/spec.rst:448 msgid "article creation" -msgstr "" +msgstr "створення статті" -#: ../../blog/docs/spec.rst:448 +#: ../../blog/docs/spec.rst:449 msgid "article update" -msgstr "" +msgstr "оновлення статті" -#: ../../blog/docs/spec.rst:449 +#: ../../blog/docs/spec.rst:450 msgid "article comment (create a related comment)" -msgstr "" +msgstr "коментування статті (створення коментаря)" -#: ../../blog/docs/spec.rst:450 +#: ../../blog/docs/spec.rst:451 msgid "article deletion" -msgstr "" +msgstr "видалення статті" -#: ../../blog/docs/spec.rst:453 +#: ../../blog/docs/spec.rst:454 msgid "" "It's ok to use *pre-defined* author for now, or select author by random. " "This will be fixed in the next section." msgstr "" +"Наразі можна використовувати *попередньо визначеного* автора або випадковим " +"чином вибирати автора. Це буде виправлено у наступному розділі." -#: ../../blog/docs/spec.rst:457 +#: ../../blog/docs/spec.rst:458 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:459 +#: ../../blog/docs/spec.rst:460 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:460 +#: ../../blog/docs/spec.rst:461 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:463 +#: ../../blog/docs/spec.rst:464 msgid "It's ok to use built-in Django CBV if needed." msgstr "" +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." -#: ../../blog/docs/spec.rst:466 +#: ../../blog/docs/spec.rst:467 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:470 +#: ../../blog/docs/spec.rst:471 msgid "" -"Topic serializer is for read-only purposes only. Topics can be created " -"via admin page only." +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." msgstr "" +"Серіалізатор для теми призначений лише для операцій читання (read-only). " +"Теми можна створювати лише через адміністративну сторінку." -#: ../../blog/docs/spec.rst:472 +#: ../../blog/docs/spec.rst:473 msgid "" -"Serialized data should contain all available data, e.g. ``pk``, " -"``title``, ``description``." +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." msgstr "" +"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " +"``pk``, ``title``, ``description``." -#: ../../blog/docs/spec.rst:477 +#: ../../blog/docs/spec.rst:478 msgid "" -"article comment serializer can perform both reading and writing " -"operations. But it can't be used to *update* or *delete* comment." +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." msgstr "" +"серіалізатор коментаря статті може виконувати як операції читання, так і " +"операції запису. Проте він не може використовуватися для оновлення або " +"видалення коментаря." -#: ../../blog/docs/spec.rst:479 +#: ../../blog/docs/spec.rst:480 msgid "" -"Random, or pre-defined user may be used as comment's author for now. This" -" will be fixed in the future." +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." msgstr "" +"Наразі можна використовувати випадкового або попередньо визначеного " +"користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../blog/docs/spec.rst:484 +#: ../../blog/docs/spec.rst:485 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." msgstr "" +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " +"оновлення та видалення." -#: ../../blog/docs/spec.rst:488 +#: ../../blog/docs/spec.rst:489 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:489 +#: ../../blog/docs/spec.rst:490 msgid "" -"User serializer provides full access to site users data. All operations " -"are available for now: list, retrieve, create, update and destroy. This " -"behavior will be fixed in the future, to prevent unauthorized data " -"modifications." +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." msgstr "" +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." -#: ../../blog/docs/spec.rst:495 +#: ../../blog/docs/spec.rst:496 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:497 -#, fuzzy +#: ../../blog/docs/spec.rst:498 msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to " -"use *pre-defined* user as a article's author for now." +"All blog-site functionality are to be reflected via REST API. It's ok to use " +"*pre-defined* user as a article's author for now." msgstr "" -"Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора " -"публікації." +"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " +"API. Наразі можна використовувати *попередньо визначеного* користувача як " +"автора статті." -#: ../../blog/docs/spec.rst:501 +#: ../../blog/docs/spec.rst:502 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:503 -#, fuzzy +#: ../../blog/docs/spec.rst:504 msgid "Implement authentication system for REST API." -msgstr "Запровадити систему автентифікації REST." +msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../blog/docs/spec.rst:505 +#: ../../blog/docs/spec.rst:506 msgid "For non-authenticated users it is possible to create a new account" msgstr "" +"Для неаутентифікованих користувачів можлива створення нового облікового " +"запису" -#: ../../blog/docs/spec.rst:506 -msgid "For non-authenticated users it is possible to obtain authentication data." +#: ../../blog/docs/spec.rst:507 +msgid "" +"For non-authenticated users it is possible to obtain authentication data." msgstr "" +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../blog/docs/spec.rst:509 +#: ../../blog/docs/spec.rst:510 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." msgstr "" +"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " +"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " +"``update``)." -#: ../../blog/docs/spec.rst:511 +#: ../../blog/docs/spec.rst:512 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." msgstr "" +"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " +"можуть змінювати їх через REST API. Однак це все ще можливо через " +"адміністративну сторінку." -#: ../../blog/docs/spec.rst:513 +#: ../../blog/docs/spec.rst:514 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." msgstr "" +"Авторизовані користувачі можуть ``create`` статті або ``update`` та " +"``delete`` статті, створені ними." -#: ../../blog/docs/spec.rst:515 +#: ../../blog/docs/spec.rst:516 msgid "Authorized users can add comments to a specified article." -msgstr "" +msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." #: ../../src/appx/code_edit.txt:-1 msgid "Code editors and IDEs for Python" @@ -1135,17 +1229,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово " -"підходить для простих речей, але ці інструменти швидко перетворюють " -"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" -" або навіть просто хорошого спеціального редактора коду робить кодування " -"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -1161,25 +1255,23 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -1192,8 +1284,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -1225,25 +1317,23 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " -"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " -"дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" -" загальної ціни на вказану кількість товару для покупки. Бажану кількість" -" буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -1330,11 +1420,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -1346,9 +1436,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -1390,8 +1480,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to " -"the cart." +"This method adds a product instance and corresponding quantity value to the " +"cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -1403,8 +1493,7 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці " -"продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -1420,8 +1509,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -1430,16 +1519,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -1463,28 +1552,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -1495,7 +1583,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -1504,11 +1593,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -1524,27 +1613,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість *protected*, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -1552,9 +1641,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -1562,8 +1651,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -1573,29 +1662,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1604,10 +1695,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " -"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " -": {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1619,17 +1709,16 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1637,17 +1726,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1655,19 +1744,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1683,7 +1772,8 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1716,15 +1806,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " -"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " -"пріоритет зліва направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1744,11 +1834,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника," -" відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1788,8 +1878,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1894,16 +1984,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1923,20 +2013,18 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " -"(по модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" -" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " -"*format* замінюються нулем або більше елементами *значень*. Якщо для " -"*format* потрібен один аргумент, *values* може бути одним некортежним " -"об'єктом." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -1972,11 +2060,9 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " -"обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -1992,11 +2078,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " -"(перевизначає прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -2084,8 +2170,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -2128,7 +2214,8 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -2149,7 +2236,8 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -2169,9 +2257,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -2196,14 +2284,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution " -"`__ on Windows and a " -"DLL (cygwin1.dll) which provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux " -"`__ у Windows та DLL " -"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -2211,12 +2299,11 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " -"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " -"Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -2240,13 +2327,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle " -"everything from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " -"версій, призначена для швидкого та ефективного керування всіма проектами," -" від малих до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -2259,24 +2346,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" -" рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " -"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " -"розробки за допомогою інтегрованого конвеєра розробників і консолідації " -"компонентів програми. Активно використовувані мільйонами розробників у " -"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " -"простоту, гнучкість і вибір." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -2288,14 +2375,13 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " -"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" -" вона заслужила міцну репутацію надійності, надійності функцій і " -"продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -2307,24 +2393,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" -" запиту. Крім того, введення може бути з файлу або з аргументів " -"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" -" функцій, подібних до оболонки, для полегшення написання сценаріїв і " -"автоматизації різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -2339,19 +2425,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа " -"адміністрування та розробки з відкритим кодом для PostgreSQL, " -"найдосконалішої бази даних з відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" -" веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -2363,19 +2449,17 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small " -"`__, `fast " -"`__, `self-contained " -"`__, `high-reliability " -"`__, `full-featured " -"`__, SQL database engine." +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку " -"`__, `швидку " -"`__, `самодостатню " -"`__, `висока надійність " -"`__, `повнофункціональний " -"`__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -2401,15 +2485,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must" -" type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " -"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " -"якомога більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -2417,7 +2501,8 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -2425,9 +2510,8 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of " -"**attack** and **defence** stages. Rounds are repeated, until player is " -"defeated." +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -2459,8 +2543,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by" -" random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -2499,9 +2583,8 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" -" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " -"успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -2529,13 +2612,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom " -"exception ``EnemyDown`` should be used to track these cases. Exception " -"should provide the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" -" повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -2547,15 +2630,13 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom " -"exception ``GameOver`` should be used to track these cases. Exception " -"should provide the details on the player's instance, especially its score" -" points." +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати " -"бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -2603,11 +2684,11 @@ msgstr "Зменшує очоки здоров'я" #: of wtk.models.Enemy.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" @@ -2632,7 +2713,8 @@ msgstr "варіант для бою" #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -2660,11 +2742,11 @@ msgstr "очки, зароблені гравцем" #: of wtk.models.Player.__init__:3 msgid "" -"This method performs player instance initialization. It set instance " -"name, initial score points value and health." +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " -"назву екземпляра, значення початкових балів і здоров'я." +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.__init__:6 msgid "a player's name" @@ -2676,19 +2758,18 @@ msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance " -"as an argument. After that, it takes attack choice from the player model " -"and the defence choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease enemy " -"health, assign score points etc.). Based on fight result should print out" -" a message:" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі " -"гравця та вибір захисту з моделі противника. Після результату битви " -"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " -"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" -" \"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -2704,11 +2785,11 @@ msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." #: of wtk.models.Player.decrease_health:6 msgid "GameOver" @@ -2720,17 +2801,17 @@ msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance" -" as an argument. After that, it takes defence choice from the player " -"model and the attack choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease player " -"health). Based on fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та " -"вибір атаки від моделі ворога. Після результату бою необхідно виконати " -"операцію обчислення (зменшити здоров'я гравця). За результатами бою " -"повинно вийти повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -2803,8 +2884,7 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, " -"наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -2865,8 +2945,7 @@ msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " -"рядком." +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." #: of wtk.engine.get_player_name:6 msgid "a player defined name" @@ -2879,21 +2958,20 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated " -"- a new one should be initialized with level increased by 1 (one). This " -"case should be reported to the terminal. If a player is defeated - the " -"\"Game Over\" message should be reported to the terminal. " -"``KeyboardInterrupt`` should be handled as well - it's behavior is " -"similar to \"Game Over\" event, but \"game over\" message should be " -"omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " -"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " -"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " -"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " -"також слід обробити - це поведінка подібно до події \"Game Over\", але " -"повідомлення \"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -2901,13 +2979,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs " -"the game process in an endless loop. Once the player is defeated - it " -"stops the execution." +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" -" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" -" зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -2916,8 +2994,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" -" записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -2926,237 +3004,4 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового " -"файлу." - -#~ msgid "" -#~ "As a developer you were asked to" -#~ " create a simple blog site. The " -#~ "goal is to create a place on " -#~ "the Internet where users can share " -#~ "their stories to public." -#~ msgstr "" -#~ "Вас, як розробника, попросили створити " -#~ "простий сайт блогу. Мета - створити " -#~ "місце в Інтернеті, де користувачі " -#~ "зможуть ділитися своїми історіями з " -#~ "громадськістю." - -#~ msgid "" -#~ "This document applies requirements for " -#~ "the entire project step-by-step. " -#~ "You will start from creating the " -#~ "appropriate URL dispatcher and connecting " -#~ "a PostgreSQL database to store the " -#~ "data and will finish with implementing" -#~ " REST API for the blog." -#~ msgstr "" -#~ "Цей документ крок за кроком застосовує" -#~ " вимоги до всього проекту. Ви \" " -#~ "\"почнете зі створення відповідного диспетчера" -#~ " URL-адрес і підключення до бази " -#~ "даних PostgreSQL для зберігання даних і" -#~ " закінчите впровадженням REST API для " -#~ "блог." - -#~ msgid "" -#~ "There are some boiler plates, that " -#~ "may be useful in your future work," -#~ " but you aren’t forced to use " -#~ "them. It’s on your choice." -#~ msgstr "" -#~ "Існують деякі котли, які можуть бути " -#~ "корисними у вашій майбутній роботі, але" -#~ " ви не змушені їх використовувати. Це" -#~ " на ваш вибір." - -#~ msgid "`Starter template`_" -#~ msgstr "`Starter template`_" - -#~ msgid "Challenge: Site views" -#~ msgstr "Завдання: Site views" - -#~ msgid "``/``: same as ``/blogs/``" -#~ msgstr "``/``: те ж саме ``/blogs/``" - -#~ msgid "" -#~ "It’s time to work with data " -#~ "representations. You’re to add HTML " -#~ "template to the blog site project." -#~ msgstr "" -#~ "Настав час попрацювати з представленнями " -#~ "даних. Ви повинні додати шаблон HTML " -#~ "до проекту сайту блогу." - -#~ msgid "" -#~ "Create \"templates\" folder in the " -#~ "project's root. This is the place " -#~ "to keep your base templates. Make " -#~ "sure this path is included to the" -#~ " ``TEMPLATES`` object in settings file." -#~ msgstr "" -#~ "Створіть папку \"templates\" в корені " -#~ "проекту. Це місце для зберігання ваших" -#~ " базових шаблонів. Переконайтеся, що цей" -#~ " шлях включено до об'єкта ``TEMPLATES`` " -#~ "у файлі налаштувань." - -#~ msgid "" -#~ "There is no need to implement " -#~ "functional for forms for now. Just " -#~ "render them. There is no need to" -#~ " pass any context to ``render`` " -#~ "function for now." -#~ msgstr "" -#~ "На даний момент немає необхідності " -#~ "впроваджувати функціонал для форм. Просто " -#~ "візуалізуйте їх. Наразі немає потреби " -#~ "передавати будь-який контекст у функцію " -#~ "``render``." - -#~ msgid "" -#~ "Each page should contain a navbar " -#~ "at the top. Navbar will contain " -#~ "permalinks to the home and about " -#~ "pages." -#~ msgstr "" -#~ "Кожна сторінка повинна містити навігаційну " -#~ "панель угорі. Навігаційна панель міститиме " -#~ "постійні посилання на домашню сторінку " -#~ "та сторінку про." - -#~ msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." -#~ msgstr "" -#~ "Панель навігації має містити посилання " -#~ "на сторінки ``/register/`` і ``/login/``." - -#~ msgid "``/register/`` page should render a user registration form." -#~ msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." - -#~ msgid "``/login/`` page should render a user authentication form." -#~ msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." - -#~ msgid "``/create/`` page should render a form to create a new post." -#~ msgstr "" -#~ "Сторінка ``/create/`` має відобразити форму" -#~ " для створення нового допису." - -#~ msgid "" -#~ "``/`` and ``/blogs/`` page should " -#~ "provide a list of posts. Each post" -#~ " should contain a link to its " -#~ "detail view (``/``). It's ok " -#~ "to use static content for now." -#~ msgstr "" -#~ "Сторінки ``/`` і ``/blogs/`` мають " -#~ "надавати список публікацій. Кожен допис " -#~ "має містити посилання на його детальний" -#~ " перегляд (``/``). Наразі можна " -#~ "використовувати статичний вміст." - -#~ msgid "" -#~ "``/`` page should provide details" -#~ " on a single post. It's ok to" -#~ " use static content for now." -#~ msgstr "" -#~ "Сторінка ``/`` має надавати " -#~ "детальну інформацію про одну публікацію. " -#~ "Наразі можна використовувати статичний вміст." - -#~ msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -#~ msgstr "" -#~ "Детальний перегляд має містити посилання " -#~ "на ``/update/`` та ``/delete/``." - -#~ msgid "``/profile//`` should render an author's personal page." -#~ msgstr "``/profile//`` має відобразити особисту сторінку автора." - -#~ msgid "You are to implement data models for the blog site." -#~ msgstr "Ви повинні реалізувати моделі даних для сайту блогу." - -#~ msgid "The ``auth.User`` will be used as ``user`` model." -#~ msgstr "``auth.User`` використовуватиметься як модель ``user``." - -#~ msgid "" -#~ "``post.slug`` value should be autogenerated" -#~ " when a record is created or " -#~ "updated and follow the pattern:" -#~ msgstr "" -#~ "Значення ``post.slug`` має автоматично " -#~ "генеруватися під час створення або " -#~ "оновлення запису та слідувати шаблону:" - -#~ msgid "" -#~ "User preferred topics should be marked" -#~ " with a ``notify`` flag. This value" -#~ " should be ``True`` by default." -#~ msgstr "" -#~ "Вибрані користувачем теми мають бути " -#~ "позначені прапорцем ``notify``. За " -#~ "замовчуванням це значення має бути " -#~ "``True``." - -#~ msgid "Each post entity should provide the information about:" -#~ msgstr "Кожен допис блогу повинен надавати інформацію про:" - -#~ msgid "title (each word should be capitalized)" -#~ msgstr "назва (кожне слово має бути великим)" - -#~ msgid "trimmed content (~50 words or fewer)" -#~ msgstr "обрізаний вміст (~50 слів або менше)" - -#~ msgid "Posts may be modified or deleted only by their authors (no exceptions)." -#~ msgstr "" -#~ "Дописи можуть бути змінені або видалені" -#~ " лише їхніми авторами (без винятків)." - -#~ msgid "Challenge: Blogpost creation and update" -#~ msgstr "Завдання: створення та оновлення блогу" - -#~ msgid "Create a form to work with the blogpost model." -#~ msgstr "Створіть форму для роботи з моделлю допису." - -#~ msgid "" -#~ "Create a form to gather a comment" -#~ " from a user. Form should be " -#~ "used within a \"post detail\" view." -#~ msgstr "" -#~ "Створіть форму для збору коментарів від" -#~ " користувача. Форму слід використовувати в" -#~ " перегляді \"подробиць публікації\"." - -#~ msgid "Form should be used for *create* and *update* view." -#~ msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." - -#~ msgid "It’s ok to use a *pre-defined* user as a post’s author for now." -#~ msgstr "" -#~ "Наразі можна використовувати *попередньо " -#~ "визначеного* користувача як автора публікації." - -#~ msgid "It’s ok to use Django built-in views for auth." -#~ msgstr "" -#~ "Для автентифікації можна використовувати " -#~ "вбудовані представлення Django." - -#~ msgid "Create serializers for:" -#~ msgstr "Створіть серіалізатори для:" - -#~ msgid "Blogpost entity" -#~ msgstr "Об'єкт публікації в блозі" - -#~ msgid "Blogpost comment" -#~ msgstr "Коментар у блозі" - -#~ msgid "Only account owner can change their account data." -#~ msgstr "" -#~ "Лише власник облікового запису може " -#~ "змінити дані свого облікового запису." - -#~ msgid "Only authenticated users can create posts and comments." -#~ msgstr "" -#~ "Тільки автентифіковані користувачі можуть " -#~ "створювати дописи та коментарі." - -#~ msgid "Only authors can change their posts." -#~ msgstr "Тільки автори можуть змінювати свої повідомлення." - +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." From 8712ed232815adad790ff2c4cf2683237e921372 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Jul 2023 18:25:51 +0300 Subject: [PATCH 118/689] Minor fixes to documentation --- blog | 2 +- src/_locales/uk/LC_MESSAGES/appx.po | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/blog b/blog index 56476e80d..d12af7534 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 56476e80dfb1dd21361f8756db3c940718a00e22 +Subproject commit d12af7534a24186380fa21aaa5609646db22623a diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index dac74e3e2..e472822eb 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-14 17:20+0300\n" -"PO-Revision-Date: 2023-07-14 17:21+0300\n" +"POT-Creation-Date: 2023-07-14 18:29+0300\n" +"PO-Revision-Date: 2023-07-14 18:30+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -57,7 +57,7 @@ msgstr "" msgid "**Key Features**" msgstr "**Основні функції**" -#: ../../blog/docs/spec.rst +#: ../../blog/docs/spec.rst:22 msgid "User Registration and Authentication" msgstr "Реєстрація та Аутентифікація Користувачів" @@ -74,7 +74,7 @@ msgstr "" "мати персоналізовані облікові записи та зберігати право власності на їхні " "опубліковані статті." -#: ../../blog/docs/spec.rst +#: ../../blog/docs/spec.rst:30 msgid "Article Management" msgstr "Керування Статтями" @@ -89,9 +89,9 @@ msgstr "" "рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " "категоризувати статті, присвоюючи їм відповідні теми." -#: ../../blog/docs/spec.rst -msgid "Topic Subscription" -msgstr "Підписка на Теми" +#: ../../blog/docs/spec.rst:37 +msgid "Topic Subscription:" +msgstr "Підписка на Теми:" #: ../../blog/docs/spec.rst:38 msgid "" @@ -125,7 +125,7 @@ msgstr "" msgid "" "Here is a starter repository template, that may helps: `Starter template`_." msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: Starter template_." +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." #: ../../blog/docs/spec.rst:55 msgid "Challenge: Functional views" From 3e2a127a06685d036014f472bc83a923117e27a4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 25 Jul 2023 23:59:31 +0300 Subject: [PATCH 119/689] Update README file Signed-off-by: Serhii Horodilov --- README.rst | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/README.rst b/README.rst index 2fc5c6d43..c98d905d3 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,17 @@ web-frameworks for Python. Getting started =============== +Getting the sources +------------------- + +Current repository is dependent on some other repos (is **multi-repo**). +You may clone it, but this would not download the source of other repos. +To get the full content, do: + +.. code-block:: shell + + git submodule update --remote + Installing dependencies ----------------------- @@ -31,3 +42,41 @@ To do the same using poetry: .. _pip: https://pip.pypa.io .. _poetry: https://python-poetry.org + +Building documentation +---------------------- + +This repository comes with *Makefile*. For now this is the easiest way to do +anything within this source code. There are several targets defined: + +- ``clean`` will clean up the documentation builds +- ``html`` will create HTML pages +- ``locales`` will create/update translations + +Just do: + +.. code-block:: shell + + make # e.g. make html + +By default all builds are done for english locale. +Define ``LANGUAGE`` environment variable to build documents for other locales. + +.. code-block:: shell + + LANGUAGE=uk make html + +Using ``make`` without arguments (targets) will clean up documentation and +build HTML pages for *en* and *uk* locales. + +.. code-block:: shell + + make + +This command is equal to: + +.. code-block:: shell + + make clean + LANGUAGE=en make html + LANGUAGE=uk make html From a01ba7a5e531b998e092d0ac18e1e87a012dd366 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 00:26:59 +0300 Subject: [PATCH 120/689] Add pull requests appendix Described pull requests preparation, creation and maintain processes using GitHub. # Conflicts: # src/_locales/uk/LC_MESSAGES/appx.po # src/refs.bib --- src/_locales/uk/LC_MESSAGES/appx.po | 399 +++++++++++++++++++++++++++- src/appx/create_pr.txt | 190 +++++++++++++ src/conf.py | 3 + src/index.txt | 1 + src/refs.bib | 11 + 5 files changed, 602 insertions(+), 2 deletions(-) create mode 100644 src/appx/create_pr.txt diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index e472822eb..bd0af5a29 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -1210,8 +1210,9 @@ msgid "Code editors and IDEs for Python" msgstr "Редактори коду та IDE для Python" #: ../../src/appx/code_edit.txt:-1 ../../src/appx/conv_store.txt:-1 -#: ../../src/appx/env_path.txt:-1 ../../src/appx/precedence.txt:-1 -#: ../../src/appx/printf.txt:-1 ../../src/appx/wtk.txt:-1 +#: ../../src/appx/create_pr.txt:-1 ../../src/appx/env_path.txt:-1 +#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 +#: ../../src/appx/wtk.txt:-1 msgid "Serhii Horodilov sgorodil@gmail.com" msgstr "Serhii Horodilov sgorodil@gmail.com" @@ -1779,6 +1780,400 @@ msgstr "" msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." +#: ../../src/appx/create_pr.txt:-1 +msgid "The instructions to create a pull request via GitHub" +msgstr "Інструкції щодо створення запиту на отримання через GitHub" + +#: ../../src/appx/create_pr.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/appx/create_pr.txt:-1 +msgid "git, github, pull request, branch, merge" +msgstr "git, github, pull request, branch, merge" + +#: ../../src/appx/create_pr.txt:9 +msgid "Creating the Pull Request" +msgstr "Створення Pull Request" + +#: ../../src/appx/create_pr.txt:11 +msgid "" +"Create a pull request to propose and collaborate on changes to a repository. " +"These changes are proposed in a *branch*, which ensures that the default " +"branch only contains finished and approved work :cite:`github:creating-pr`." +msgstr "" +"Створіть запит на отримання, щоб запропонувати та співпрацювати над змінами " +"в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " +"замовчуванням містить лише готову та затверджену роботу :cite:`github:" +"creating-pr`." + +#: ../../src/appx/create_pr.txt:17 +msgid "About pull requests" +msgstr "Про pull requests" + +#: ../../src/appx/create_pr.txt:19 +msgid "" +"Pull requests let you tell others about changes you've pushed to a branch in " +"a repository on GitHub. Once a pull request is opened, you can discuss and " +"review the potential changes with collaborators and add follow-up commits " +"before your changes are merged into the base branch :cite:`github:about-pr`." +msgstr "" +"Запити на витягування дозволяють повідомляти іншим про зміни, які ви внесли " +"до гілки сховища на GitHub. Після відкриття запиту на отримання ви можете " +"обговорити та переглянути потенційні зміни зі співавторами та додати " +"подальші коміти, перш ніж ваші зміни буде об'єднано в базову гілку :cite:" +"`github:about-pr`." + +#: ../../src/appx/create_pr.txt:25 +msgid "" +"The compare and pull request pages use different methods to calculate the " +"diff for changed files:" +msgstr "" +"Сторінки порівняння та запиту на отримання використовують різні методи для " +"обчислення різниці для змінених файлів:" + +#: ../../src/appx/create_pr.txt:28 +msgid "" +"Compare pages show the diff between the tip of the head ref and the current " +"common ancestor (that is, the merge base) of the head and base ref." +msgstr "" +"Сторінки порівняння показують різницю між кінчиком головного посилання та " +"поточним спільним предком (тобто основою злиття) головного та базового " +"посилання." + +#: ../../src/appx/create_pr.txt:30 +msgid "" +"Pull request pages show the diff between the tip of the head ref and the " +"common ancestor of the head and base ref at the time when the pull request " +"was created. Consequently, the merge base used for the comparison might be " +"different." +msgstr "" +"Сторінки запиту на отримання показують різницю між кінчиком головного " +"посилання та спільним предком головного та базового посилання на момент " +"створення запиту на отримання. Отже, база злиття, яка використовується для " +"порівняння, може бути іншою." + +#: ../../src/appx/create_pr.txt:35 +msgid "" +"In *few words*: both source and target branches **should** share some " +"commit(s) in their history and the source branch **should** has commit(s) " +"missing on the target one." +msgstr "" +"У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати спільні " +"деякі коміти у своїй історії, а вихідна гілка **повинна** мати коміти, " +"відсутні в цільовій." + +#: ../../src/appx/create_pr.txt:41 +msgid "Repository content" +msgstr "Вміст репозиторію" + +#: ../../src/appx/create_pr.txt:43 +msgid "Following SHOULD be included to the repository:" +msgstr "У репозиторій СЛІД включити наступне:" + +#: ../../src/appx/create_pr.txt:45 +msgid "code base" +msgstr "кодова база" + +#: ../../src/appx/create_pr.txt:46 +msgid "project dependencies (if any)" +msgstr "залежності проекту (якщо є)" + +#: ../../src/appx/create_pr.txt:48 +msgid "Following MAY be included to the repository:" +msgstr "До репозиторію МОЖЕ бути включено:" + +#: ../../src/appx/create_pr.txt:50 +msgid "additional information (e.g. README file and other documents)" +msgstr "додаткова інформація (наприклад, файл README та інші документи)" + +#: ../../src/appx/create_pr.txt:51 +msgid "dummy data (e.g. fixtures for development and testing etc.)" +msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" + +#: ../../src/appx/create_pr.txt:53 +msgid "Following SHOULD be excluded from the repository:" +msgstr "З репозитарію СЛІД виключити:" + +#: ../../src/appx/create_pr.txt:55 +msgid "virtual environment directory" +msgstr "каталог віртуального середовища" + +#: ../../src/appx/create_pr.txt:56 +msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" +msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" + +#: ../../src/appx/create_pr.txt:57 +msgid "python byte-compiled code (``__pycache__``)" +msgstr "скомпільований код python (``__pycache__``)" + +#: ../../src/appx/create_pr.txt:58 +msgid "IDE configurations (e.g. \".vscode\", \".idea\" etc.)" +msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" + +#: ../../src/appx/create_pr.txt:59 +msgid "Desktop Services Store (\".DS_Store\")" +msgstr "Desktop Services Store (\".DS_Store\")" + +#: ../../src/appx/create_pr.txt:63 +msgid "Repository preparation" +msgstr "Підготовка репозиторію" + +#: ../../src/appx/create_pr.txt:65 +msgid "This should be done once for each repository." +msgstr "Це потрібно зробити один раз для кожного репозиторію." + +#: ../../src/appx/create_pr.txt:68 +msgid "Repository initialization" +msgstr "Ініціалізація репозиторію" + +#: ../../src/appx/create_pr.txt:70 +msgid "" +"Create README file and provide a brief description for your project " +"(optional)." +msgstr "" +"Створіть файл README та надайте короткий опис свого проекту (необов'язково)." + +#: ../../src/appx/create_pr.txt:72 +msgid "Create a virtual environment." +msgstr "Створіть віртуальне середовище." + +#: ../../src/appx/create_pr.txt:73 +msgid "Install project dependencies." +msgstr "Встановіть залежності проекту." + +#: ../../src/appx/create_pr.txt:74 +msgid "Freeze the dependencies." +msgstr "Зафіксуйте залежності." + +#: ../../src/appx/create_pr.txt:80 +msgid "" +"Create a base code modules (e.g. initialize django project and apps, or " +"create an empty python module like \"main.py\" etc.)." +msgstr "" +"Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " +"його застосунки або створіть порожній модуль python, як-от \"main.py\" тощо)." + +#: ../../src/appx/create_pr.txt:82 +msgid "" +"Create \".gitignore\" file and set up directories and files to be excluded" +msgstr "" +"Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які потрібно " +"виключити" + +#: ../../src/appx/create_pr.txt:83 +msgid "Create a fresh repository." +msgstr "Створіть нове репозиторій." + +#: ../../src/appx/create_pr.txt:89 ../../src/appx/create_pr.txt:171 +msgid "Stage and commit changes." +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/create_pr.txt:90 +msgid "Set up remote repository." +msgstr "Налаштуйте віддалений репозиторій." + +#: ../../src/appx/create_pr.txt:96 +msgid "Push your local branch to remote repo." +msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." + +#: ../../src/appx/create_pr.txt:99 +msgid "Append contributors to remote repository" +msgstr "Додати учасників до віддаленого репозиторію" + +#: ../../src/appx/create_pr.txt:101 +msgid "" +"Reviews allow collaborators to comment on the changes proposed in pull " +"requests, approve the changes, or request further changes before the pull " +"request is merged. Repository administrators can require that all pull " +"requests are approved before being merged." +msgstr "" +"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах на " +"отримання, затверджувати зміни або вимагати подальших змін перед об'єднанням " +"запиту на отримання. Адміністратори сховища можуть вимагати схвалення всіх " +"запитів на отримання перед об'єднанням." + +#: ../../src/appx/create_pr.txt:107 +msgid "" +"On `GitHub `_, navigate to the repository settings page " +"and switch to **Collaborators and teams** menu item." +msgstr "" +"На `GitHub `_ перейдіть на сторінку налаштувань " +"репозиторію та перейдіть до пункту меню **Collaborators and teams**." + +#: ../../src/appx/create_pr.txt:109 +msgid "Under **Manage access** section click ``Add people`` button." +msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." + +#: ../../src/appx/create_pr.txt:110 +msgid "In modal window start typing GitHub username." +msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." + +#: ../../src/appx/create_pr.txt:111 +msgid "Select a contributor from the dropdown menu." +msgstr "Виберіть учасника зі спадного меню." + +#: ../../src/appx/create_pr.txt:115 +msgid "Working on feature" +msgstr "Робота над завданням" + +#: ../../src/appx/create_pr.txt:117 +msgid "" +"Create a dedicated branch with some representative name (e.g. \"feature/" +"models\", \"cbv\" etc.)." +msgstr "" +"Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " +"\"feature/models\", \"cbv\" тощо)." + +#: ../../src/appx/create_pr.txt:119 +msgid "Switch to the newly created branch." +msgstr "Перейдіть до новоствореної гілки." + +#: ../../src/appx/create_pr.txt:120 +msgid "Do the work and commit changes on a feature branch." +msgstr "Виконайте роботу та зафіксуйте зміни в гілці." + +#: ../../src/appx/create_pr.txt:124 +msgid "You can create a branch and switch to it by a single command." +msgstr "" +"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " +"команди." + +#: ../../src/appx/create_pr.txt:133 +msgid "" +"While working on a *feature branch* make commits for each completed logical " +"block of code." +msgstr "" +"Під час роботи над *функціональною гілкою* робіть коміти для кожного " +"завершеного логічного блоку коду." + +#: ../../src/appx/create_pr.txt:138 +msgid "Creating the pull request" +msgstr "Створення запиту на злиття" + +#: ../../src/appx/create_pr.txt:140 +msgid "" +"Make sure your working branch is up-to-date with the default one. You can " +"pull changes for the default branch and rebase your feature branch onto it." +msgstr "" +"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " +"на неї." + +#: ../../src/appx/create_pr.txt:143 +msgid "" +"Push feature branch to the remote repository. By default the current active " +"branch is pushed to the remote repo." +msgstr "" +"Завантажте функціональну гілку до віддаленого репозиторію. За замовчуванням " +"буде завантажена активна гілка." + +#: ../../src/appx/create_pr.txt:150 +msgid "Go to your remote repository at GitHub and click **Pull requests** tab." +msgstr "" +"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку **Pull " +"requests**." + +#: ../../src/appx/create_pr.txt:151 +msgid "On **Pull requests** tab click **New** button." +msgstr "На вкладці **Pull requests** натисніть кнопку **New**." + +#: ../../src/appx/create_pr.txt:152 +msgid "" +"Select your default branch as *target* and your feature branch as *source*." +msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." + +#: ../../src/appx/create_pr.txt:153 +msgid "Provide some brief description for your pull request." +msgstr "Надайте короткий опис вашого запиту." + +#: ../../src/appx/create_pr.txt:154 +msgid "Press **Create pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/create_pr.txt:155 +msgid "" +"On the pull request page add a **reviewer** by clicking the appropriate " +"option and selecting a person from a dropdown menu." +msgstr "" +"На сторінці запиту на отримання додайте **reviewer**, натиснувши відповідну " +"опцію та вибравши особу зі спадного меню." + +#: ../../src/appx/create_pr.txt:160 +msgid "Making changes" +msgstr "Внесення змін" + +#: ../../src/appx/create_pr.txt:162 +msgid "From this moment, your pull request *is waiting* for the review." +msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." + +#: ../../src/appx/create_pr.txt:164 +msgid "" +"The reviewer will **approve** or **reject** your pull request. Optionally " +"the reviewer may provide some comments to your code; **rejected** pull " +"requests will always come with some details." +msgstr "" +"Рецензент **схвалить** або **відхилить** ваш запит на отримання. За бажанням " +"рецензент може надати деякі коментарі до вашого коду; **відхилені** запити " +"на витягування завжди надходитимуть з деякими деталями." + +#: ../../src/appx/create_pr.txt:168 +msgid "" +"In case your work is **rejected**, you are to provide fixes. To do this:" +msgstr "" +"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб зробити " +"це:" + +#: ../../src/appx/create_pr.txt:170 +msgid "Do the work in your local feature branch." +msgstr "Виконайте роботу у своїй локальній гілці." + +#: ../../src/appx/create_pr.txt:172 +msgid "Push them to remote branch." +msgstr "Надішліть їх до гілки віддаленого репозиторію." + +#: ../../src/appx/create_pr.txt:173 +msgid "Re-request review from the pull request page." +msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." + +#: ../../src/appx/create_pr.txt:175 +msgid "" +"All commits related to the source branch will be automatically appended to " +"the open pull request. The reviewer will review your updates. Repeat this " +"process until the pull request is **approved**." +msgstr "" +"Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " +"відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " +"Повторюйте цей процес, доки запит на отримання не буде **схвалено**." + +#: ../../src/appx/create_pr.txt:181 +msgid "Merging the pull request" +msgstr "Об'єднання (злиття) запиту" + +#: ../../src/appx/create_pr.txt:183 +msgid "" +"Once your pull request is **approved** - merge it. Select one of the options " +"available with your pull request; they may be:" +msgstr "" +"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один із " +"варіантів, доступних у вашому запиті на отримання; вони можуть бути:" + +#: ../../src/appx/create_pr.txt:186 +msgid "Create a merge commit" +msgstr "Create a merge commit" + +#: ../../src/appx/create_pr.txt:187 +msgid "Rebase and merge" +msgstr "Rebase and merge" + +#: ../../src/appx/create_pr.txt:188 +msgid "Squash and merge" +msgstr "Squash and merge" + +#: ../../src/appx/create_pr.txt:190 +msgid "After that the pull request is merged into your target branch." +msgstr "Після цього коміти робочої та цільової гілка об'єднується." + #: ../../src/appx/env_path.txt:-1 msgid "Setting up environment variables" msgstr "Встановлення змінних середовища" diff --git a/src/appx/create_pr.txt b/src/appx/create_pr.txt new file mode 100644 index 000000000..1b2d11736 --- /dev/null +++ b/src/appx/create_pr.txt @@ -0,0 +1,190 @@ +.. meta:: + :description: The instructions to create a pull request via GitHub + :author: Vladyslav Ponomaryov + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: git, github, pull request, branch, merge + +######################### +Creating the Pull Request +######################### + +Create a pull request to propose and collaborate on changes to a repository. +These changes are proposed in a *branch*, which ensures that the default +branch only contains finished and approved work :cite:`github:creating-pr`. + +******************* +About pull requests +******************* + +Pull requests let you tell others about changes you've pushed to a branch in +a repository on GitHub. Once a pull request is opened, you can discuss and +review the potential changes with collaborators and add follow-up commits +before your changes are merged into the base branch +:cite:`github:about-pr`. + +The compare and pull request pages use different methods to calculate the diff +for changed files: + +- Compare pages show the diff between the tip of the head ref and the current + common ancestor (that is, the merge base) of the head and base ref. +- Pull request pages show the diff between the tip of the head ref and + the common ancestor of the head and base ref at the time when the pull + request was created. + Consequently, the merge base used for the comparison might be different. + +In *few words*: both source and target branches **should** share some commit(s) +in their history and the source branch **should** has commit(s) missing on +the target one. + +****************** +Repository content +****************** + +Following SHOULD be included to the repository: + +- code base +- project dependencies (if any) + +Following MAY be included to the repository: + +- additional information (e.g. README file and other documents) +- dummy data (e.g. fixtures for development and testing etc.) + +Following SHOULD be excluded from the repository: + +- virtual environment directory +- project database (e.g. "*.sqlite3", "*.db" etc.) +- python byte-compiled code (``__pycache__``) +- IDE configurations (e.g. ".vscode", ".idea" etc.) +- Desktop Services Store (".DS_Store") + +********************** +Repository preparation +********************** + +This should be done once for each repository. + +Repository initialization +========================= + +#. Create README file and provide a brief description for your project + (optional). +#. Create a virtual environment. +#. Install project dependencies. +#. Freeze the dependencies. + + .. code-block:: shell + + pip freeze > requirements.txt + +#. Create a base code modules (e.g. initialize django project and apps, + or create an empty python module like "main.py" etc.). +#. Create ".gitignore" file and set up directories and files to be excluded +#. Create a fresh repository. + + .. code-block:: shell + + git init + +#. Stage and commit changes. +#. Set up remote repository. + + .. code-block:: shell + + git remote add origin + +#. Push your local branch to remote repo. + +Append contributors to remote repository +======================================== + +Reviews allow collaborators to comment on the changes proposed in +pull requests, approve the changes, or request further changes before +the pull request is merged. +Repository administrators can require that all pull requests are approved +before being merged. + +#. On `GitHub `_, navigate to the repository settings page + and switch to **Collaborators and teams** menu item. +#. Under **Manage access** section click ``Add people`` button. +#. In modal window start typing GitHub username. +#. Select a contributor from the dropdown menu. + +****************** +Working on feature +****************** + +#. Create a dedicated branch with some representative name + (e.g. "feature/models", "cbv" etc.). +#. Switch to the newly created branch. +#. Do the work and commit changes on a feature branch. + +.. hint:: + + You can create a branch and switch to it by a single command. + + .. code-block:: shell + + git checkout -b [] + + +.. hint:: + + While working on a *feature branch* make commits for each completed logical + block of code. + +************************* +Creating the pull request +************************* + +#. Make sure your working branch is up-to-date with the default one. + You can pull changes for the default branch and rebase your feature branch + onto it. +#. Push feature branch to the remote repository. By default the current active + branch is pushed to the remote repo. + + .. code-block:: shell + + git push -u origin [] + +#. Go to your remote repository at GitHub and click **Pull requests** tab. +#. On **Pull requests** tab click **New** button. +#. Select your default branch as *target* and your feature branch as *source*. +#. Provide some brief description for your pull request. +#. Press **Create pull request** button. +#. On the pull request page add a **reviewer** by clicking the appropriate + option and selecting a person from a dropdown menu. + +************** +Making changes +************** + +From this moment, your pull request *is waiting* for the review. + +The reviewer will **approve** or **reject** your pull request. +Optionally the reviewer may provide some comments to your code; +**rejected** pull requests will always come with some details. + +In case your work is **rejected**, you are to provide fixes. To do this: + +#. Do the work in your local feature branch. +#. Stage and commit changes. +#. Push them to remote branch. +#. Re-request review from the pull request page. + +All commits related to the source branch will be automatically appended to +the open pull request. The reviewer will review your updates. +Repeat this process until the pull request is **approved**. + +************************ +Merging the pull request +************************ + +Once your pull request is **approved** - merge it. +Select one of the options available with your pull request; they may be: + +- Create a merge commit +- Rebase and merge +- Squash and merge + +After that the pull request is merged into your target branch. diff --git a/src/conf.py b/src/conf.py index f66c5af26..08cee4cd7 100644 --- a/src/conf.py +++ b/src/conf.py @@ -60,6 +60,8 @@ ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ("appx/blog", "DjangoBlog.tex", project, authors, "howto", False), + ("appx/create_pr", "CreatingPullRequest.tex", "Creating the Pull Request", + authors, "howto", False), ] latex_appendices = [ "appx/software_list", @@ -67,6 +69,7 @@ "appx/env_path", "appx/precedence", "appx/printf", + "appx/create_pr", "appx/conv_store", "appx/wtk", "appx/blog", diff --git a/src/index.txt b/src/index.txt index 06ef56b85..377f963fe 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,6 +27,7 @@ appx/env_path appx/precedence appx/printf + appx/create_pr appx/conv_store appx/wtk appx/blog diff --git a/src/refs.bib b/src/refs.bib index 6bdec017f..bc8e7e242 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -137,3 +137,14 @@ @misc{docs-python:controlflow title = "{Python Documentation: 4. More Control Flow Tools}", url = {https://docs.python.org/tutorial/controlflow.html}, } + +@misc{github:creating-pr, + title = "{Creating a pull request}", + author = "{GitHub Docs}", + url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request}, +} + +@misc{github:about-pr, + title = "{About pull requests}", + url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, +} From fb1e42dc2ee5828d9d555468729e8ae6c64e2153 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 23:09:55 +0300 Subject: [PATCH 121/689] Add test sphinx builds workflow --- .github/workflows/test-build.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/test-build.yml diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml new file mode 100644 index 000000000..238ae2042 --- /dev/null +++ b/.github/workflows/test-build.yml @@ -0,0 +1,31 @@ +name: Check Sphinx Builds + +on: + # Runs on pushes targeting the default branch and changes in the Sphinx-related files + push: + branches: + - devel + paths: + - "src/**/*" + - "src/conf.py" + - "Makefile" + - "requirements.txt" + +jobs: + check-build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + - name: Setup Python + uses: actions/setup-python@v2 + - name: Install dependencies + run: | + pip install -r requirements.txt + - name: Build documents + run: | + LANGUAGE=en make html + LANGUAGE=uk make html \ No newline at end of file From 73505af628e0832c2a8a6cc13ed5f8277423d449 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 16:08:14 +0300 Subject: [PATCH 122/689] Update test build workflow for GitHub Changed trigger action to "pull_request" (was "push"). --- .github/workflows/{test-build.yml => test_build.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{test-build.yml => test_build.yml} (97%) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test_build.yml similarity index 97% rename from .github/workflows/test-build.yml rename to .github/workflows/test_build.yml index 238ae2042..10b95de56 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test_build.yml @@ -2,7 +2,7 @@ name: Check Sphinx Builds on: # Runs on pushes targeting the default branch and changes in the Sphinx-related files - push: + pull_request: branches: - devel paths: From 418f5840dd00f6e36dd0f0ccac12712f4bab98b8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 1 Aug 2023 00:18:22 +0300 Subject: [PATCH 123/689] Update blog submodule: specification updates edu-python-course/blog#74 --- blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog b/blog index d12af7534..b9a9549a2 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit d12af7534a24186380fa21aaa5609646db22623a +Subproject commit b9a9549a2de7d1d95f9174e30d8a8fe25b1ec266 From 7e43a35bf628688f080d4282b343ce1eb30f3f80 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 6 Aug 2023 11:52:25 +0300 Subject: [PATCH 124/689] Update blog specification --- blog | 2 +- src/_locales/uk/LC_MESSAGES/appx.po | 297 ++++++++++++++-------------- 2 files changed, 146 insertions(+), 153 deletions(-) diff --git a/blog b/blog index b9a9549a2..b20ec0df4 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit b9a9549a2de7d1d95f9174e30d8a8fe25b1ec266 +Subproject commit b20ec0df44f3fd0cff67dbb40cfee3a44b87c196 diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index bd0af5a29..b79ca3e82 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-14 18:29+0300\n" -"PO-Revision-Date: 2023-07-14 18:30+0300\n" +"POT-Creation-Date: 2023-08-06 11:49+0300\n" +"PO-Revision-Date: 2023-08-06 11:52+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -237,7 +237,7 @@ msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:258 +#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:257 msgid "Optional tasks" msgstr "Додаткові завдання" @@ -273,7 +273,7 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:238 +#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:237 msgid "General" msgstr "Основне" @@ -281,7 +281,7 @@ msgstr "Основне" msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:470 +#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 msgid "Article topic" msgstr "Тема статті" @@ -297,7 +297,7 @@ msgstr "назва теми (унікальне значення, не біль msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:484 +#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 msgid "Article" msgstr "Стаття" @@ -321,7 +321,7 @@ msgstr "" msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:477 +#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 msgid "Article comment" msgstr "Коментар до статті" @@ -419,22 +419,15 @@ msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." #: ../../blog/docs/spec.rst:212 -msgid "" -"Each article entity on a list view should be a link to corresponding article." -msgstr "" -"Кожен елемент статті у перегляді списку повинен бути посиланням на " -"відповідну статтю." - -#: ../../blog/docs/spec.rst:214 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../blog/docs/spec.rst:215 -msgid "Detail view should contain a list of article related comments." +#: ../../blog/docs/spec.rst:213 +msgid "Detail view should obtain a list of article related comments." msgstr "" -"На сторінці статті повинен бути список коментарів, пов'язаних зі статтею." +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../blog/docs/spec.rst:216 +#: ../../blog/docs/spec.rst:214 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -442,7 +435,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../blog/docs/spec.rst:218 +#: ../../blog/docs/spec.rst:216 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -451,14 +444,14 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../blog/docs/spec.rst:221 +#: ../../blog/docs/spec.rst:219 msgid "" "Create a service to fetch articles, ordered by a specified user preferences." msgstr "" "Створіть сервіс для отримання статей, впорядкованих за вказаними " "уподобаннями користувача." -#: ../../blog/docs/spec.rst:224 +#: ../../blog/docs/spec.rst:223 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -468,25 +461,25 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../blog/docs/spec.rst:229 +#: ../../blog/docs/spec.rst:228 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.rst:232 +#: ../../blog/docs/spec.rst:231 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../blog/docs/spec.rst:235 +#: ../../blog/docs/spec.rst:234 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../blog/docs/spec.rst:239 +#: ../../blog/docs/spec.rst:238 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../blog/docs/spec.rst:240 +#: ../../blog/docs/spec.rst:239 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -494,13 +487,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../blog/docs/spec.rst:242 +#: ../../blog/docs/spec.rst:241 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../blog/docs/spec.rst:243 +#: ../../blog/docs/spec.rst:242 msgid "" "(*Optional*) Each page should contain an inclusion-block(s) with following " "links:" @@ -508,19 +501,19 @@ msgstr "" "(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " "посиланнями:" -#: ../../blog/docs/spec.rst:246 +#: ../../blog/docs/spec.rst:245 msgid "``/registration/``: new user registration form" msgstr "``/register/``: форма реєстрації нового користувача" -#: ../../blog/docs/spec.rst:247 +#: ../../blog/docs/spec.rst:246 msgid "``/login/``: user login form" msgstr "``/login/``: форма логіна користувача" -#: ../../blog/docs/spec.rst:248 +#: ../../blog/docs/spec.rst:247 msgid "``/create/``: article creation page" msgstr "``/create/``: форма створення статті" -#: ../../blog/docs/spec.rst:250 +#: ../../blog/docs/spec.rst:249 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -530,71 +523,71 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../blog/docs/spec.rst:253 +#: ../../blog/docs/spec.rst:252 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../blog/docs/spec.rst:254 +#: ../../blog/docs/spec.rst:253 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../blog/docs/spec.rst:260 +#: ../../blog/docs/spec.rst:259 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../blog/docs/spec.rst:264 +#: ../../blog/docs/spec.rst:263 msgid "Articles list" msgstr "Список статей" -#: ../../blog/docs/spec.rst:265 +#: ../../blog/docs/spec.rst:264 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../blog/docs/spec.rst:266 +#: ../../blog/docs/spec.rst:265 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../blog/docs/spec.rst:267 +#: ../../blog/docs/spec.rst:266 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../blog/docs/spec.rst:269 +#: ../../blog/docs/spec.rst:268 msgid "article title" msgstr "заголовок статті" -#: ../../blog/docs/spec.rst:270 +#: ../../blog/docs/spec.rst:269 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../blog/docs/spec.rst:271 +#: ../../blog/docs/spec.rst:270 msgid "article creation date" msgstr "дата створення статті" -#: ../../blog/docs/spec.rst:272 +#: ../../blog/docs/spec.rst:271 msgid "related topics (3 topics or fewer)" msgstr "related topics (3 topics or fewer)" -#: ../../blog/docs/spec.rst:273 +#: ../../blog/docs/spec.rst:272 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../blog/docs/spec.rst:280 +#: ../../blog/docs/spec.rst:279 msgid "Article details" msgstr "Деталі статті" -#: ../../blog/docs/spec.rst:282 +#: ../../blog/docs/spec.rst:281 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../blog/docs/spec.rst:284 +#: ../../blog/docs/spec.rst:283 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -602,71 +595,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../blog/docs/spec.rst:286 +#: ../../blog/docs/spec.rst:285 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../blog/docs/spec.rst:288 +#: ../../blog/docs/spec.rst:287 msgid "Article title" msgstr "Заголовок статті" -#: ../../blog/docs/spec.rst:289 +#: ../../blog/docs/spec.rst:288 msgid "Creation date" msgstr "Дата створення" -#: ../../blog/docs/spec.rst:290 ../../blog/docs/spec.rst:297 +#: ../../blog/docs/spec.rst:289 ../../blog/docs/spec.rst:296 msgid "Author name" msgstr "Ім'я автора" -#: ../../blog/docs/spec.rst:291 +#: ../../blog/docs/spec.rst:290 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../blog/docs/spec.rst:292 +#: ../../blog/docs/spec.rst:291 msgid "Article content" msgstr "Вміст статті" -#: ../../blog/docs/spec.rst:294 +#: ../../blog/docs/spec.rst:293 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../blog/docs/spec.rst:295 +#: ../../blog/docs/spec.rst:294 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../blog/docs/spec.rst:298 +#: ../../blog/docs/spec.rst:297 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../blog/docs/spec.rst:299 +#: ../../blog/docs/spec.rst:298 msgid "Comment message" msgstr "Текст комментаря" -#: ../../blog/docs/spec.rst:302 +#: ../../blog/docs/spec.rst:301 msgid "Profile page" msgstr "Строніка профілю" -#: ../../blog/docs/spec.rst:303 +#: ../../blog/docs/spec.rst:302 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../blog/docs/spec.rst:305 +#: ../../blog/docs/spec.rst:304 msgid "First name" msgstr "Ім'я" -#: ../../blog/docs/spec.rst:306 +#: ../../blog/docs/spec.rst:305 msgid "Last name" msgstr "Прізвище" -#: ../../blog/docs/spec.rst:308 +#: ../../blog/docs/spec.rst:307 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../blog/docs/spec.rst:310 +#: ../../blog/docs/spec.rst:309 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../blog/docs/spec.rst:311 +#: ../../blog/docs/spec.rst:310 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -674,11 +667,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../blog/docs/spec.rst:315 +#: ../../blog/docs/spec.rst:314 msgid "Forms" msgstr "Форми" -#: ../../blog/docs/spec.rst:317 +#: ../../blog/docs/spec.rst:316 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -688,7 +681,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../blog/docs/spec.rst:321 +#: ../../blog/docs/spec.rst:320 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -696,23 +689,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:324 ../../blog/docs/spec.rst:332 +#: ../../blog/docs/spec.rst:323 ../../blog/docs/spec.rst:331 msgid "username" msgstr "username" -#: ../../blog/docs/spec.rst:325 +#: ../../blog/docs/spec.rst:324 msgid "email" msgstr "email" -#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:333 +#: ../../blog/docs/spec.rst:325 ../../blog/docs/spec.rst:332 msgid "password" msgstr "password" -#: ../../blog/docs/spec.rst:327 ../../blog/docs/spec.rst:346 +#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:345 msgid "confirm password" msgstr "confirm password" -#: ../../blog/docs/spec.rst:329 +#: ../../blog/docs/spec.rst:328 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -720,7 +713,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:335 +#: ../../blog/docs/spec.rst:334 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -728,33 +721,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../blog/docs/spec.rst:338 +#: ../../blog/docs/spec.rst:337 msgid "title" msgstr "title" -#: ../../blog/docs/spec.rst:339 +#: ../../blog/docs/spec.rst:338 msgid "relevant topics" msgstr "відповідні теми" -#: ../../blog/docs/spec.rst:340 +#: ../../blog/docs/spec.rst:339 msgid "content" msgstr "content" -#: ../../blog/docs/spec.rst:342 +#: ../../blog/docs/spec.rst:341 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../blog/docs/spec.rst:343 +#: ../../blog/docs/spec.rst:342 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../blog/docs/spec.rst:345 +#: ../../blog/docs/spec.rst:344 msgid "new password" msgstr "new password" -#: ../../blog/docs/spec.rst:348 +#: ../../blog/docs/spec.rst:347 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -762,7 +755,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../blog/docs/spec.rst:350 +#: ../../blog/docs/spec.rst:349 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -772,48 +765,48 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../blog/docs/spec.rst:355 +#: ../../blog/docs/spec.rst:354 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../blog/docs/spec.rst:358 +#: ../../blog/docs/spec.rst:357 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../blog/docs/spec.rst:360 +#: ../../blog/docs/spec.rst:359 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../blog/docs/spec.rst:361 +#: ../../blog/docs/spec.rst:360 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../blog/docs/spec.rst:362 +#: ../../blog/docs/spec.rst:361 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../blog/docs/spec.rst:363 +#: ../../blog/docs/spec.rst:362 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../blog/docs/spec.rst:365 +#: ../../blog/docs/spec.rst:364 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../blog/docs/spec.rst:367 +#: ../../blog/docs/spec.rst:366 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../blog/docs/spec.rst:368 +#: ../../blog/docs/spec.rst:367 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../blog/docs/spec.rst:370 +#: ../../blog/docs/spec.rst:369 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../blog/docs/spec.rst:371 +#: ../../blog/docs/spec.rst:370 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " @@ -824,60 +817,60 @@ msgstr "" "наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " "отримає slug: ``sample-blog-article-2023-03-23``." -#: ../../blog/docs/spec.rst:375 +#: ../../blog/docs/spec.rst:374 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../blog/docs/spec.rst:378 +#: ../../blog/docs/spec.rst:377 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:380 +#: ../../blog/docs/spec.rst:379 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:382 +#: ../../blog/docs/spec.rst:381 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:383 +#: ../../blog/docs/spec.rst:382 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:384 +#: ../../blog/docs/spec.rst:383 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:385 +#: ../../blog/docs/spec.rst:384 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:387 +#: ../../blog/docs/spec.rst:386 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../blog/docs/spec.rst:388 +#: ../../blog/docs/spec.rst:387 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../blog/docs/spec.rst:389 +#: ../../blog/docs/spec.rst:388 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../blog/docs/spec.rst:390 +#: ../../blog/docs/spec.rst:389 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../blog/docs/spec.rst:393 +#: ../../blog/docs/spec.rst:392 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:395 +#: ../../blog/docs/spec.rst:394 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -885,7 +878,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../blog/docs/spec.rst:397 +#: ../../blog/docs/spec.rst:396 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -893,14 +886,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:399 +#: ../../blog/docs/spec.rst:398 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:401 +#: ../../blog/docs/spec.rst:400 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -914,7 +907,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:406 +#: ../../blog/docs/spec.rst:405 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -924,7 +917,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:409 +#: ../../blog/docs/spec.rst:408 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -939,7 +932,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../blog/docs/spec.rst:414 +#: ../../blog/docs/spec.rst:413 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -947,7 +940,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../blog/docs/spec.rst:416 +#: ../../blog/docs/spec.rst:415 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -957,21 +950,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:419 +#: ../../blog/docs/spec.rst:418 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../blog/docs/spec.rst:421 +#: ../../blog/docs/spec.rst:420 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../blog/docs/spec.rst:422 +#: ../../blog/docs/spec.rst:421 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../blog/docs/spec.rst:424 +#: ../../blog/docs/spec.rst:423 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -980,11 +973,11 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../blog/docs/spec.rst:428 +#: ../../blog/docs/spec.rst:427 msgid "Optional task(s)" msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:430 +#: ../../blog/docs/spec.rst:429 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -993,7 +986,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../blog/docs/spec.rst:432 +#: ../../blog/docs/spec.rst:431 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -1006,11 +999,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../blog/docs/spec.rst:438 +#: ../../blog/docs/spec.rst:437 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../blog/docs/spec.rst:440 +#: ../../blog/docs/spec.rst:439 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -1018,15 +1011,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../blog/docs/spec.rst:442 +#: ../../blog/docs/spec.rst:441 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../blog/docs/spec.rst:443 +#: ../../blog/docs/spec.rst:442 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../blog/docs/spec.rst:444 +#: ../../blog/docs/spec.rst:443 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1034,27 +1027,27 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../blog/docs/spec.rst:446 +#: ../../blog/docs/spec.rst:445 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../blog/docs/spec.rst:448 +#: ../../blog/docs/spec.rst:447 msgid "article creation" msgstr "створення статті" -#: ../../blog/docs/spec.rst:449 +#: ../../blog/docs/spec.rst:448 msgid "article update" msgstr "оновлення статті" -#: ../../blog/docs/spec.rst:450 +#: ../../blog/docs/spec.rst:449 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../blog/docs/spec.rst:451 +#: ../../blog/docs/spec.rst:450 msgid "article deletion" msgstr "видалення статті" -#: ../../blog/docs/spec.rst:454 +#: ../../blog/docs/spec.rst:453 msgid "" "It's ok to use *pre-defined* author for now, or select author by random. " "This will be fixed in the next section." @@ -1062,29 +1055,29 @@ msgstr "" "Наразі можна використовувати *попередньо визначеного* автора або випадковим " "чином вибирати автора. Це буде виправлено у наступному розділі." -#: ../../blog/docs/spec.rst:458 +#: ../../blog/docs/spec.rst:457 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:460 +#: ../../blog/docs/spec.rst:459 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:461 +#: ../../blog/docs/spec.rst:460 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:464 +#: ../../blog/docs/spec.rst:463 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../blog/docs/spec.rst:467 +#: ../../blog/docs/spec.rst:466 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:471 +#: ../../blog/docs/spec.rst:470 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1092,7 +1085,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../blog/docs/spec.rst:473 +#: ../../blog/docs/spec.rst:472 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1100,7 +1093,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../blog/docs/spec.rst:478 +#: ../../blog/docs/spec.rst:477 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1109,7 +1102,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../blog/docs/spec.rst:480 +#: ../../blog/docs/spec.rst:479 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1117,7 +1110,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../blog/docs/spec.rst:485 +#: ../../blog/docs/spec.rst:484 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1126,11 +1119,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../blog/docs/spec.rst:489 +#: ../../blog/docs/spec.rst:488 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:490 +#: ../../blog/docs/spec.rst:489 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1142,11 +1135,11 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../blog/docs/spec.rst:496 +#: ../../blog/docs/spec.rst:495 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:498 +#: ../../blog/docs/spec.rst:497 msgid "" "All blog-site functionality are to be reflected via REST API. It's ok to use " "*pre-defined* user as a article's author for now." @@ -1155,27 +1148,27 @@ msgstr "" "API. Наразі можна використовувати *попередньо визначеного* користувача як " "автора статті." -#: ../../blog/docs/spec.rst:502 +#: ../../blog/docs/spec.rst:501 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:504 +#: ../../blog/docs/spec.rst:503 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../blog/docs/spec.rst:506 +#: ../../blog/docs/spec.rst:505 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../blog/docs/spec.rst:507 +#: ../../blog/docs/spec.rst:506 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../blog/docs/spec.rst:510 +#: ../../blog/docs/spec.rst:509 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1184,7 +1177,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../blog/docs/spec.rst:512 +#: ../../blog/docs/spec.rst:511 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1193,7 +1186,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:514 +#: ../../blog/docs/spec.rst:513 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1201,7 +1194,7 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../blog/docs/spec.rst:516 +#: ../../blog/docs/spec.rst:515 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." From e26c4301069d479b195eae25213714c11af3190e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 8 Aug 2023 23:00:46 +0300 Subject: [PATCH 125/689] Change blog specification project Replaced blog project submodule with a separated specification repository. There is no need to keep complete Django project here. Tasktracker may be used as a replacement (for examples and demo). --- .gitmodules | 6 +- blog | 1 - src/_locales/uk/LC_MESSAGES/appx.po | 420 ++++++++++++++-------------- src/appx/blog | 1 + src/appx/blog.txt | 6 - src/conf.py | 4 +- src/index.txt | 2 +- 7 files changed, 217 insertions(+), 223 deletions(-) delete mode 160000 blog create mode 160000 src/appx/blog delete mode 100644 src/appx/blog.txt diff --git a/.gitmodules b/.gitmodules index 9442fc6e5..57b47c5de 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "problem-sets"] path = problem-sets url = git@github.com:edu-python-course/problem-sets -[submodule "blog"] - path = blog - url = git@github.com:edu-python-course/blog +[submodule "src/appx/blog"] + path = src/appx/blog + url = git@github.com:edu-python-course/blog-spec diff --git a/blog b/blog deleted file mode 160000 index b20ec0df4..000000000 --- a/blog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b20ec0df44f3fd0cff67dbb40cfee3a44b87c196 diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index b79ca3e82..0d2fe6441 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-06 11:49+0300\n" -"PO-Revision-Date: 2023-08-06 11:52+0300\n" +"POT-Creation-Date: 2023-08-08 22:54+0300\n" +"PO-Revision-Date: 2023-08-08 22:58+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -21,23 +21,11 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.3.2\n" -#: ../../src/appx/blog.txt:-1 -msgid "Specification for Django blog training project" -msgstr "Специфікація навчального проекту блогу Django" - -#: ../../src/appx/blog.txt:-1 ../../src/appx/software_list.rst:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/appx/blog.txt:-1 -msgid "python, django, blog, project, training" -msgstr "python, django, blog, project, training" - -#: ../../blog/docs/spec.rst:10 +#: ../../src/appx/blog/spec.rst:10 msgid "Blog Project Specification" msgstr "Специфікація Проекту Блогу" -#: ../../blog/docs/spec.rst:12 +#: ../../src/appx/blog/spec.rst:12 msgid "" "The project aims to develop a robust and user-friendly web application using " "the Django framework. The primary objective is to create a blogging platform " @@ -53,15 +41,15 @@ msgstr "" "форматування своїх статей, а також забезпечить безперешкодний досвід читання " "для відвідувачів." -#: ../../blog/docs/spec.rst:19 +#: ../../src/appx/blog/spec.rst:19 msgid "**Key Features**" msgstr "**Основні функції**" -#: ../../blog/docs/spec.rst:22 +#: ../../src/appx/blog/spec.rst:22 msgid "User Registration and Authentication" msgstr "Реєстрація та Аутентифікація Користувачів" -#: ../../blog/docs/spec.rst:23 +#: ../../src/appx/blog/spec.rst:23 msgid "" "The application will provide user registration and authentication " "functionality, allowing individuals to create accounts, log in, and manage " @@ -74,11 +62,11 @@ msgstr "" "мати персоналізовані облікові записи та зберігати право власності на їхні " "опубліковані статті." -#: ../../blog/docs/spec.rst:30 +#: ../../src/appx/blog/spec.rst:30 msgid "Article Management" msgstr "Керування Статтями" -#: ../../blog/docs/spec.rst:31 +#: ../../src/appx/blog/spec.rst:31 msgid "" "Authors will have the ability to create, edit, and delete articles within " "the application. The system will offer a user-friendly editor. Additionally, " @@ -89,11 +77,11 @@ msgstr "" "рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " "категоризувати статті, присвоюючи їм відповідні теми." -#: ../../blog/docs/spec.rst:37 +#: ../../src/appx/blog/spec.rst:37 msgid "Topic Subscription:" msgstr "Підписка на Теми:" -#: ../../blog/docs/spec.rst:38 +#: ../../src/appx/blog/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " "subscribe to topics of interest. By subscribing to specific topics, users " @@ -105,7 +93,7 @@ msgstr "" "рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " "категоризувати статті, присвоюючи їм відповідні теми." -#: ../../blog/docs/spec.rst:45 +#: ../../src/appx/blog/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " "caters to both authors and readers. By providing a seamless user experience " @@ -121,17 +109,17 @@ msgstr "" "залученість користувачів та забезпечить, що читачі будуть інформовані про " "найцікавіші для них теми." -#: ../../blog/docs/spec.rst:52 +#: ../../src/appx/blog/spec.rst:52 msgid "" "Here is a starter repository template, that may helps: `Starter template`_." msgstr "" "Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." -#: ../../blog/docs/spec.rst:55 +#: ../../src/appx/blog/spec.rst:55 msgid "Challenge: Functional views" msgstr "Виклик: Функціональні представлення" -#: ../../blog/docs/spec.rst:57 +#: ../../src/appx/blog/spec.rst:57 msgid "" "It's ok not to return **actual** content for now. Just ensure all the routes " "are available and provide correct data. Use anything you like to return " @@ -141,7 +129,7 @@ msgstr "" "всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " "ви хочете повернути в HTTP-відповіді." -#: ../../blog/docs/spec.rst:61 +#: ../../src/appx/blog/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." @@ -149,7 +137,7 @@ msgstr "" "``/about/``: надає звичайний текст для користувача, що описує функції сайту " "django." -#: ../../blog/docs/spec.rst:63 +#: ../../src/appx/blog/spec.rst:63 msgid "" "``/``: A site's homepage. This will contain a list of blogs published via " "the django site." @@ -157,7 +145,7 @@ msgstr "" "``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " "сайт Django." -#: ../../blog/docs/spec.rst:65 +#: ../../src/appx/blog/spec.rst:65 msgid "" "``/
    /``: A single article detail view. The URL contains dynamic part " "in it. This will be used to fetch a single article from the database." @@ -166,82 +154,82 @@ msgstr "" "частину. Вона буде використовуватися для отримання однієї статті з бази " "даних." -#: ../../blog/docs/spec.rst:68 +#: ../../src/appx/blog/spec.rst:68 msgid "" "``/
    /comment/``: This view will be used to add comments to a article." msgstr "" "``/
    /comment/``: Це представлення буде використовуватися для " "додавання коментарів до статті." -#: ../../blog/docs/spec.rst:70 +#: ../../src/appx/blog/spec.rst:70 msgid "``/create/``: A article creation form." msgstr "``/create/``: Форма створення статті." -#: ../../blog/docs/spec.rst:71 +#: ../../src/appx/blog/spec.rst:71 msgid "``/
    /update/``: A view to update an existing article data." msgstr "" "``/
    /update/``: Представлення для оновлення існуючих даних статті." -#: ../../blog/docs/spec.rst:72 +#: ../../src/appx/blog/spec.rst:72 msgid "``/
    /delete/``: A view to confirm article deletion." msgstr "" "``/
    /delete/``: Представлення для підтвердження видалення статті." -#: ../../blog/docs/spec.rst:73 +#: ../../src/appx/blog/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." msgstr "``/topics/``: Перелік доступних тем на сайті." -#: ../../blog/docs/spec.rst:74 +#: ../../src/appx/blog/spec.rst:74 msgid "``/topics//subscribe/``: A view to subscribe for a topic." msgstr "``/topics//subscribe/``: Представлення для підписки на тему." -#: ../../blog/docs/spec.rst:75 +#: ../../src/appx/blog/spec.rst:75 msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." -#: ../../blog/docs/spec.rst:76 +#: ../../src/appx/blog/spec.rst:76 msgid "``/profile//``: A site user's personal page." msgstr "``/profile//``: Особиста сторінка користувача сайту." -#: ../../blog/docs/spec.rst:77 +#: ../../src/appx/blog/spec.rst:77 msgid "" "``/set-password/``: This route will be used to change users' credential data." msgstr "" "``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " "даних користувачів." -#: ../../blog/docs/spec.rst:79 +#: ../../src/appx/blog/spec.rst:79 msgid "``/set-userdata/``: This route will be user to change users' data." msgstr "" "``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " "користувачів." -#: ../../blog/docs/spec.rst:80 +#: ../../src/appx/blog/spec.rst:80 msgid "``/deactivate/``: Account deactivation (deletion) view." msgstr "" "``/deactivate/``: Представлення для деактивації облікового запису " "(видалення)." -#: ../../blog/docs/spec.rst:81 +#: ../../src/appx/blog/spec.rst:81 msgid "``/register/``: This view contains a user registration form." msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../blog/docs/spec.rst:82 +#: ../../src/appx/blog/spec.rst:82 msgid "``/login/``: This view contains a login form." msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../blog/docs/spec.rst:83 +#: ../../src/appx/blog/spec.rst:83 msgid "" "``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:257 +#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:257 msgid "Optional tasks" msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:89 +#: ../../src/appx/blog/spec.rst:89 msgid "" "``/archive///``: This view provides a list of articles " "published on a specified month of a specified year. This view should apply " @@ -258,11 +246,11 @@ msgstr "" "обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " "URL-адрес:" -#: ../../blog/docs/spec.rst:103 +#: ../../src/appx/blog/spec.rst:103 msgid "Challenge: Data models" msgstr "Завдання: моделі даних" -#: ../../blog/docs/spec.rst:106 +#: ../../src/appx/blog/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " "admin section you need to create a superuser. The easiest way to do that is " @@ -273,43 +261,43 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:237 +#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:237 msgid "General" msgstr "Основне" -#: ../../blog/docs/spec.rst:116 +#: ../../src/appx/blog/spec.rst:116 msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 +#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:469 msgid "Article topic" msgstr "Тема статті" -#: ../../blog/docs/spec.rst:120 +#: ../../src/appx/blog/spec.rst:120 msgid "This is a simple model, that contains information about topic:" msgstr "Ось проста модель, що містить інформацію про тему:" -#: ../../blog/docs/spec.rst:122 +#: ../../src/appx/blog/spec.rst:122 msgid "topic title (unique value, 64 characters or fewer)" msgstr "назва теми (унікальне значення, не більше 64 символів)" -#: ../../blog/docs/spec.rst:123 +#: ../../src/appx/blog/spec.rst:123 msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 +#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:483 msgid "Article" msgstr "Стаття" -#: ../../blog/docs/spec.rst:127 +#: ../../src/appx/blog/spec.rst:127 msgid "Article requires title (255 characters or fewer)." msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." -#: ../../blog/docs/spec.rst:128 +#: ../../src/appx/blog/spec.rst:128 msgid "Article requires content (at least 255 characters)." msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." -#: ../../blog/docs/spec.rst:129 +#: ../../src/appx/blog/spec.rst:129 msgid "" "Creation date should be autogenerated at article creation, and would never " "be updated." @@ -317,27 +305,27 @@ msgstr "" "Дата створення буде автоматично генеруватися при створенні статті і не буде " "оновлюватися пізніше." -#: ../../blog/docs/spec.rst:131 +#: ../../src/appx/blog/spec.rst:131 msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 +#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:476 msgid "Article comment" msgstr "Коментар до статті" -#: ../../blog/docs/spec.rst:135 +#: ../../src/appx/blog/spec.rst:135 msgid "Comment requires creation date (autogenerated)." msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." -#: ../../blog/docs/spec.rst:136 +#: ../../src/appx/blog/spec.rst:136 msgid "Comment requires message text." msgstr "Коментар вимагає наявності тексту повідомлення." -#: ../../blog/docs/spec.rst:139 +#: ../../src/appx/blog/spec.rst:139 msgid "Relationships" msgstr "Відносини" -#: ../../blog/docs/spec.rst:141 +#: ../../src/appx/blog/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " "reference pass ``\"auth.User\"`` as related model. Users can be created via " @@ -348,11 +336,11 @@ msgstr "" "модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " "також можете посилатися на ту саму модель, як показано нижче:" -#: ../../blog/docs/spec.rst:154 +#: ../../src/appx/blog/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." -#: ../../blog/docs/spec.rst:155 +#: ../../src/appx/blog/spec.rst:155 msgid "" "``article`` and ``user`` have *one-to-many* relationship. A article can have " "**only one** author, but users can create as many articles as they want." @@ -361,7 +349,7 @@ msgstr "" "бути **лише один** автор, але користувачі можуть створювати стільки статей, " "скільки їм потрібно." -#: ../../blog/docs/spec.rst:158 +#: ../../src/appx/blog/spec.rst:158 msgid "" "``article`` and ``comment`` have *one-to-many* relationship. A article may " "be a container for many comments, but a comment is related to a single " @@ -371,7 +359,7 @@ msgstr "" "бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " "однією статтею." -#: ../../blog/docs/spec.rst:161 +#: ../../src/appx/blog/spec.rst:161 msgid "" "``comment`` and ``user`` have *one-to-many* relationship. It's similar to " "*article - user* relationship." @@ -379,7 +367,7 @@ msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." -#: ../../blog/docs/spec.rst:163 +#: ../../src/appx/blog/spec.rst:163 msgid "" "``topic`` and ``user`` use *many-to-many* relationship. A single user can " "prefer none or as many topics as needed and vice versa. This relationship " @@ -398,15 +386,15 @@ msgstr "" "список статей для користувача, а *notify* відповідає за розсилку новин для " "користувача." -#: ../../blog/docs/spec.rst:174 +#: ../../src/appx/blog/spec.rst:174 msgid "UML diagram" msgstr "UML діаграми" -#: ../../blog/docs/spec.rst:206 +#: ../../src/appx/blog/spec.rst:206 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../blog/docs/spec.rst:208 +#: ../../src/appx/blog/spec.rst:208 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." @@ -414,20 +402,20 @@ msgstr "" "Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " "в базі даних проекту." -#: ../../blog/docs/spec.rst:211 +#: ../../src/appx/blog/spec.rst:211 msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." -#: ../../blog/docs/spec.rst:212 +#: ../../src/appx/blog/spec.rst:212 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../blog/docs/spec.rst:213 +#: ../../src/appx/blog/spec.rst:213 msgid "Detail view should obtain a list of article related comments." msgstr "" "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../blog/docs/spec.rst:214 +#: ../../src/appx/blog/spec.rst:214 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -435,7 +423,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../blog/docs/spec.rst:216 +#: ../../src/appx/blog/spec.rst:216 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -444,14 +432,14 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../blog/docs/spec.rst:219 +#: ../../src/appx/blog/spec.rst:219 msgid "" "Create a service to fetch articles, ordered by a specified user preferences." msgstr "" "Створіть сервіс для отримання статей, впорядкованих за вказаними " "уподобаннями користувача." -#: ../../blog/docs/spec.rst:223 +#: ../../src/appx/blog/spec.rst:223 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -461,25 +449,25 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../blog/docs/spec.rst:228 +#: ../../src/appx/blog/spec.rst:228 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.rst:231 +#: ../../src/appx/blog/spec.rst:231 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../blog/docs/spec.rst:234 +#: ../../src/appx/blog/spec.rst:234 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../blog/docs/spec.rst:238 +#: ../../src/appx/blog/spec.rst:238 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../blog/docs/spec.rst:239 +#: ../../src/appx/blog/spec.rst:239 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -487,13 +475,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../blog/docs/spec.rst:241 +#: ../../src/appx/blog/spec.rst:241 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../blog/docs/spec.rst:242 +#: ../../src/appx/blog/spec.rst:242 msgid "" "(*Optional*) Each page should contain an inclusion-block(s) with following " "links:" @@ -501,19 +489,19 @@ msgstr "" "(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " "посиланнями:" -#: ../../blog/docs/spec.rst:245 +#: ../../src/appx/blog/spec.rst:245 msgid "``/registration/``: new user registration form" msgstr "``/register/``: форма реєстрації нового користувача" -#: ../../blog/docs/spec.rst:246 +#: ../../src/appx/blog/spec.rst:246 msgid "``/login/``: user login form" msgstr "``/login/``: форма логіна користувача" -#: ../../blog/docs/spec.rst:247 +#: ../../src/appx/blog/spec.rst:247 msgid "``/create/``: article creation page" msgstr "``/create/``: форма створення статті" -#: ../../blog/docs/spec.rst:249 +#: ../../src/appx/blog/spec.rst:249 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -523,71 +511,71 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../blog/docs/spec.rst:252 +#: ../../src/appx/blog/spec.rst:252 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../blog/docs/spec.rst:253 +#: ../../src/appx/blog/spec.rst:253 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../blog/docs/spec.rst:259 +#: ../../src/appx/blog/spec.rst:259 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../blog/docs/spec.rst:263 +#: ../../src/appx/blog/spec.rst:263 msgid "Articles list" msgstr "Список статей" -#: ../../blog/docs/spec.rst:264 +#: ../../src/appx/blog/spec.rst:264 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../blog/docs/spec.rst:265 +#: ../../src/appx/blog/spec.rst:265 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../blog/docs/spec.rst:266 +#: ../../src/appx/blog/spec.rst:266 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../blog/docs/spec.rst:268 +#: ../../src/appx/blog/spec.rst:268 msgid "article title" msgstr "заголовок статті" -#: ../../blog/docs/spec.rst:269 +#: ../../src/appx/blog/spec.rst:269 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../blog/docs/spec.rst:270 +#: ../../src/appx/blog/spec.rst:270 msgid "article creation date" msgstr "дата створення статті" -#: ../../blog/docs/spec.rst:271 +#: ../../src/appx/blog/spec.rst:271 msgid "related topics (3 topics or fewer)" -msgstr "related topics (3 topics or fewer)" +msgstr "пов'язані теми (3 або менше)" -#: ../../blog/docs/spec.rst:272 +#: ../../src/appx/blog/spec.rst:272 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../blog/docs/spec.rst:279 +#: ../../src/appx/blog/spec.rst:279 msgid "Article details" msgstr "Деталі статті" -#: ../../blog/docs/spec.rst:281 +#: ../../src/appx/blog/spec.rst:281 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../blog/docs/spec.rst:283 +#: ../../src/appx/blog/spec.rst:283 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -595,71 +583,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../blog/docs/spec.rst:285 +#: ../../src/appx/blog/spec.rst:285 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../blog/docs/spec.rst:287 +#: ../../src/appx/blog/spec.rst:287 msgid "Article title" msgstr "Заголовок статті" -#: ../../blog/docs/spec.rst:288 +#: ../../src/appx/blog/spec.rst:288 msgid "Creation date" msgstr "Дата створення" -#: ../../blog/docs/spec.rst:289 ../../blog/docs/spec.rst:296 +#: ../../src/appx/blog/spec.rst:289 ../../src/appx/blog/spec.rst:296 msgid "Author name" msgstr "Ім'я автора" -#: ../../blog/docs/spec.rst:290 +#: ../../src/appx/blog/spec.rst:290 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../blog/docs/spec.rst:291 +#: ../../src/appx/blog/spec.rst:291 msgid "Article content" msgstr "Вміст статті" -#: ../../blog/docs/spec.rst:293 +#: ../../src/appx/blog/spec.rst:293 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../blog/docs/spec.rst:294 +#: ../../src/appx/blog/spec.rst:294 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../blog/docs/spec.rst:297 +#: ../../src/appx/blog/spec.rst:297 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../blog/docs/spec.rst:298 +#: ../../src/appx/blog/spec.rst:298 msgid "Comment message" msgstr "Текст комментаря" -#: ../../blog/docs/spec.rst:301 +#: ../../src/appx/blog/spec.rst:301 msgid "Profile page" msgstr "Строніка профілю" -#: ../../blog/docs/spec.rst:302 +#: ../../src/appx/blog/spec.rst:302 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../blog/docs/spec.rst:304 +#: ../../src/appx/blog/spec.rst:304 msgid "First name" msgstr "Ім'я" -#: ../../blog/docs/spec.rst:305 +#: ../../src/appx/blog/spec.rst:305 msgid "Last name" msgstr "Прізвище" -#: ../../blog/docs/spec.rst:307 +#: ../../src/appx/blog/spec.rst:307 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../blog/docs/spec.rst:309 +#: ../../src/appx/blog/spec.rst:309 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../blog/docs/spec.rst:310 +#: ../../src/appx/blog/spec.rst:310 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -667,11 +655,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../blog/docs/spec.rst:314 +#: ../../src/appx/blog/spec.rst:314 msgid "Forms" msgstr "Форми" -#: ../../blog/docs/spec.rst:316 +#: ../../src/appx/blog/spec.rst:316 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -681,7 +669,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../blog/docs/spec.rst:320 +#: ../../src/appx/blog/spec.rst:320 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -689,23 +677,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:323 ../../blog/docs/spec.rst:331 +#: ../../src/appx/blog/spec.rst:323 ../../src/appx/blog/spec.rst:331 msgid "username" msgstr "username" -#: ../../blog/docs/spec.rst:324 +#: ../../src/appx/blog/spec.rst:324 msgid "email" msgstr "email" -#: ../../blog/docs/spec.rst:325 ../../blog/docs/spec.rst:332 +#: ../../src/appx/blog/spec.rst:325 ../../src/appx/blog/spec.rst:332 msgid "password" msgstr "password" -#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:345 +#: ../../src/appx/blog/spec.rst:326 ../../src/appx/blog/spec.rst:345 msgid "confirm password" msgstr "confirm password" -#: ../../blog/docs/spec.rst:328 +#: ../../src/appx/blog/spec.rst:328 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -713,7 +701,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:334 +#: ../../src/appx/blog/spec.rst:334 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -721,33 +709,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../blog/docs/spec.rst:337 +#: ../../src/appx/blog/spec.rst:337 msgid "title" msgstr "title" -#: ../../blog/docs/spec.rst:338 +#: ../../src/appx/blog/spec.rst:338 msgid "relevant topics" msgstr "відповідні теми" -#: ../../blog/docs/spec.rst:339 +#: ../../src/appx/blog/spec.rst:339 msgid "content" msgstr "content" -#: ../../blog/docs/spec.rst:341 +#: ../../src/appx/blog/spec.rst:341 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../blog/docs/spec.rst:342 +#: ../../src/appx/blog/spec.rst:342 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../blog/docs/spec.rst:344 +#: ../../src/appx/blog/spec.rst:344 msgid "new password" msgstr "new password" -#: ../../blog/docs/spec.rst:347 +#: ../../src/appx/blog/spec.rst:347 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -755,7 +743,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../blog/docs/spec.rst:349 +#: ../../src/appx/blog/spec.rst:349 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -765,48 +753,48 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../blog/docs/spec.rst:354 +#: ../../src/appx/blog/spec.rst:354 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../blog/docs/spec.rst:357 +#: ../../src/appx/blog/spec.rst:357 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../blog/docs/spec.rst:359 +#: ../../src/appx/blog/spec.rst:359 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../blog/docs/spec.rst:360 +#: ../../src/appx/blog/spec.rst:360 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../blog/docs/spec.rst:361 +#: ../../src/appx/blog/spec.rst:361 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../blog/docs/spec.rst:362 +#: ../../src/appx/blog/spec.rst:362 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../blog/docs/spec.rst:364 +#: ../../src/appx/blog/spec.rst:364 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../blog/docs/spec.rst:366 +#: ../../src/appx/blog/spec.rst:366 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../blog/docs/spec.rst:367 +#: ../../src/appx/blog/spec.rst:367 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../blog/docs/spec.rst:369 +#: ../../src/appx/blog/spec.rst:369 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../blog/docs/spec.rst:370 +#: ../../src/appx/blog/spec.rst:370 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " @@ -817,60 +805,60 @@ msgstr "" "наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " "отримає slug: ``sample-blog-article-2023-03-23``." -#: ../../blog/docs/spec.rst:374 +#: ../../src/appx/blog/spec.rst:374 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../blog/docs/spec.rst:377 +#: ../../src/appx/blog/spec.rst:377 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:379 +#: ../../src/appx/blog/spec.rst:379 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:381 +#: ../../src/appx/blog/spec.rst:381 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:382 +#: ../../src/appx/blog/spec.rst:382 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:383 +#: ../../src/appx/blog/spec.rst:383 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:384 +#: ../../src/appx/blog/spec.rst:384 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:386 +#: ../../src/appx/blog/spec.rst:386 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../blog/docs/spec.rst:387 +#: ../../src/appx/blog/spec.rst:387 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../blog/docs/spec.rst:388 +#: ../../src/appx/blog/spec.rst:388 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../blog/docs/spec.rst:389 +#: ../../src/appx/blog/spec.rst:389 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../blog/docs/spec.rst:392 +#: ../../src/appx/blog/spec.rst:392 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:394 +#: ../../src/appx/blog/spec.rst:394 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -878,7 +866,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../blog/docs/spec.rst:396 +#: ../../src/appx/blog/spec.rst:396 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -886,14 +874,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:398 +#: ../../src/appx/blog/spec.rst:398 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:400 +#: ../../src/appx/blog/spec.rst:400 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -907,7 +895,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:405 +#: ../../src/appx/blog/spec.rst:405 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -917,7 +905,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:408 +#: ../../src/appx/blog/spec.rst:408 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -932,7 +920,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../blog/docs/spec.rst:413 +#: ../../src/appx/blog/spec.rst:413 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -940,7 +928,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../blog/docs/spec.rst:415 +#: ../../src/appx/blog/spec.rst:415 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -950,21 +938,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:418 +#: ../../src/appx/blog/spec.rst:418 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../blog/docs/spec.rst:420 +#: ../../src/appx/blog/spec.rst:420 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../blog/docs/spec.rst:421 +#: ../../src/appx/blog/spec.rst:421 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../blog/docs/spec.rst:423 +#: ../../src/appx/blog/spec.rst:423 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -973,11 +961,11 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../blog/docs/spec.rst:427 +#: ../../src/appx/blog/spec.rst:427 msgid "Optional task(s)" msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:429 +#: ../../src/appx/blog/spec.rst:429 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -986,7 +974,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../blog/docs/spec.rst:431 +#: ../../src/appx/blog/spec.rst:431 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -999,11 +987,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../blog/docs/spec.rst:437 +#: ../../src/appx/blog/spec.rst:437 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../blog/docs/spec.rst:439 +#: ../../src/appx/blog/spec.rst:439 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -1011,15 +999,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../blog/docs/spec.rst:441 +#: ../../src/appx/blog/spec.rst:441 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../blog/docs/spec.rst:442 +#: ../../src/appx/blog/spec.rst:442 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../blog/docs/spec.rst:443 +#: ../../src/appx/blog/spec.rst:443 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1027,27 +1015,27 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../blog/docs/spec.rst:445 +#: ../../src/appx/blog/spec.rst:445 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../blog/docs/spec.rst:447 +#: ../../src/appx/blog/spec.rst:447 msgid "article creation" msgstr "створення статті" -#: ../../blog/docs/spec.rst:448 +#: ../../src/appx/blog/spec.rst:448 msgid "article update" msgstr "оновлення статті" -#: ../../blog/docs/spec.rst:449 +#: ../../src/appx/blog/spec.rst:449 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../blog/docs/spec.rst:450 +#: ../../src/appx/blog/spec.rst:450 msgid "article deletion" msgstr "видалення статті" -#: ../../blog/docs/spec.rst:453 +#: ../../src/appx/blog/spec.rst:453 msgid "" "It's ok to use *pre-defined* author for now, or select author by random. " "This will be fixed in the next section." @@ -1055,29 +1043,29 @@ msgstr "" "Наразі можна використовувати *попередньо визначеного* автора або випадковим " "чином вибирати автора. Це буде виправлено у наступному розділі." -#: ../../blog/docs/spec.rst:457 +#: ../../src/appx/blog/spec.rst:457 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:459 +#: ../../src/appx/blog/spec.rst:459 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:460 +#: ../../src/appx/blog/spec.rst:460 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:463 +#: ../../src/appx/blog/spec.rst:463 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../blog/docs/spec.rst:466 +#: ../../src/appx/blog/spec.rst:466 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:470 +#: ../../src/appx/blog/spec.rst:470 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1085,7 +1073,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../blog/docs/spec.rst:472 +#: ../../src/appx/blog/spec.rst:472 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1093,7 +1081,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../blog/docs/spec.rst:477 +#: ../../src/appx/blog/spec.rst:477 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1102,7 +1090,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../blog/docs/spec.rst:479 +#: ../../src/appx/blog/spec.rst:479 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1110,7 +1098,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../blog/docs/spec.rst:484 +#: ../../src/appx/blog/spec.rst:484 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1119,11 +1107,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../blog/docs/spec.rst:488 +#: ../../src/appx/blog/spec.rst:488 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:489 +#: ../../src/appx/blog/spec.rst:489 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1135,11 +1123,11 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../blog/docs/spec.rst:495 +#: ../../src/appx/blog/spec.rst:495 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:497 +#: ../../src/appx/blog/spec.rst:497 msgid "" "All blog-site functionality are to be reflected via REST API. It's ok to use " "*pre-defined* user as a article's author for now." @@ -1148,27 +1136,27 @@ msgstr "" "API. Наразі можна використовувати *попередньо визначеного* користувача як " "автора статті." -#: ../../blog/docs/spec.rst:501 +#: ../../src/appx/blog/spec.rst:501 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:503 +#: ../../src/appx/blog/spec.rst:503 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../blog/docs/spec.rst:505 +#: ../../src/appx/blog/spec.rst:505 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../blog/docs/spec.rst:506 +#: ../../src/appx/blog/spec.rst:506 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../blog/docs/spec.rst:509 +#: ../../src/appx/blog/spec.rst:509 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1177,7 +1165,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../blog/docs/spec.rst:511 +#: ../../src/appx/blog/spec.rst:511 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1186,7 +1174,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:513 +#: ../../src/appx/blog/spec.rst:513 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1194,7 +1182,7 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../blog/docs/spec.rst:515 +#: ../../src/appx/blog/spec.rst:515 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." @@ -2610,6 +2598,10 @@ msgstr "Жодні аргументи не перетворюються, рез msgid "Useful software list" msgstr "Список корисного програмного забезпечення" +#: ../../src/appx/software_list.rst:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + #: ../../src/appx/software_list.rst:-1 msgid "software" msgstr "software" @@ -3393,3 +3385,9 @@ msgstr "Створити меню гри, наприклад: ::" msgid "Store score table to the database instead of using text file." msgstr "" "Зберігайте таблицю балів у базі даних замість використання текстового файлу." + +#~ msgid "Specification for Django blog training project" +#~ msgstr "Специфікація навчального проекту блогу Django" + +#~ msgid "python, django, blog, project, training" +#~ msgstr "python, django, blog, project, training" diff --git a/src/appx/blog b/src/appx/blog new file mode 160000 index 000000000..f01a7f1dd --- /dev/null +++ b/src/appx/blog @@ -0,0 +1 @@ +Subproject commit f01a7f1dd8aa293f41ca2578fd43a6346bc8ce41 diff --git a/src/appx/blog.txt b/src/appx/blog.txt deleted file mode 100644 index 406074712..000000000 --- a/src/appx/blog.txt +++ /dev/null @@ -1,6 +0,0 @@ -.. meta:: - :description: Specification for Django blog training project - :author: Serhii Horodilov - :keywords: python, django, blog, project, training - -.. include:: /../blog/docs/spec.rst diff --git a/src/conf.py b/src/conf.py index 08cee4cd7..2bc14fcd8 100644 --- a/src/conf.py +++ b/src/conf.py @@ -34,7 +34,9 @@ ".md": "markdown", } needs_sphinx = "4.0" -exclude_patterns = [] +exclude_patterns = [ + "**/README.*", +] suppress_warnings = [] # options for bibliography diff --git a/src/index.txt b/src/index.txt index 377f963fe..3409ef117 100644 --- a/src/index.txt +++ b/src/index.txt @@ -30,7 +30,7 @@ appx/create_pr appx/conv_store appx/wtk - appx/blog + appx/blog/spec .. rubric:: References From 460971b31abeabc74b21fba66b3b8eadbc0a7c2c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 8 Aug 2023 23:10:36 +0300 Subject: [PATCH 126/689] Update blog specification submodule --- src/appx/blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/appx/blog b/src/appx/blog index f01a7f1dd..07148abff 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit f01a7f1dd8aa293f41ca2578fd43a6346bc8ce41 +Subproject commit 07148abffada4810d07654a863a4e8f3a9afef80 From 0a602d32dbb406ca90b5a88c1cdf0c85486a4b82 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 9 Aug 2023 03:03:23 +0300 Subject: [PATCH 127/689] Update blog specification challenges --- .gitignore | 3 + src/_locales/uk/LC_MESSAGES/appx.po | 389 +++++++++++++++------------- src/appx/blog | 2 +- src/conf.py | 4 +- 4 files changed, 211 insertions(+), 187 deletions(-) diff --git a/.gitignore b/.gitignore index 64088ba20..18a74fbf5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ /venv/ /env/ +# python byte-compiled +__pycache__ + # node packages /node_modules/ diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 0d2fe6441..9a5505d56 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-08 22:54+0300\n" -"PO-Revision-Date: 2023-08-08 22:58+0300\n" +"POT-Creation-Date: 2023-08-09 02:13+0300\n" +"PO-Revision-Date: 2023-08-09 02:25+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -225,8 +225,9 @@ msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:257 -msgid "Optional tasks" +#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 +#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 +msgid "Optional task(s)" msgstr "Додаткові завдання" #: ../../src/appx/blog/spec.rst:89 @@ -261,7 +262,7 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:237 +#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 msgid "General" msgstr "Основне" @@ -269,7 +270,7 @@ msgstr "Основне" msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:469 +#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 msgid "Article topic" msgstr "Тема статті" @@ -285,7 +286,7 @@ msgstr "назва теми (унікальне значення, не біль msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:483 +#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 msgid "Article" msgstr "Стаття" @@ -309,7 +310,7 @@ msgstr "" msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:476 +#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 msgid "Article comment" msgstr "Коментар до статті" @@ -390,11 +391,11 @@ msgstr "" msgid "UML diagram" msgstr "UML діаграми" -#: ../../src/appx/blog/spec.rst:206 +#: ../../src/appx/blog/spec.rst:179 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../src/appx/blog/spec.rst:208 +#: ../../src/appx/blog/spec.rst:181 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." @@ -402,20 +403,20 @@ msgstr "" "Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " "в базі даних проекту." -#: ../../src/appx/blog/spec.rst:211 +#: ../../src/appx/blog/spec.rst:184 msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." -#: ../../src/appx/blog/spec.rst:212 +#: ../../src/appx/blog/spec.rst:185 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../src/appx/blog/spec.rst:213 +#: ../../src/appx/blog/spec.rst:186 msgid "Detail view should obtain a list of article related comments." msgstr "" "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../src/appx/blog/spec.rst:214 +#: ../../src/appx/blog/spec.rst:187 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -423,7 +424,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../src/appx/blog/spec.rst:216 +#: ../../src/appx/blog/spec.rst:189 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -432,14 +433,7 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../src/appx/blog/spec.rst:219 -msgid "" -"Create a service to fetch articles, ordered by a specified user preferences." -msgstr "" -"Створіть сервіс для отримання статей, впорядкованих за вказаними " -"уподобаннями користувача." - -#: ../../src/appx/blog/spec.rst:223 +#: ../../src/appx/blog/spec.rst:194 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -449,25 +443,37 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../src/appx/blog/spec.rst:228 +#: ../../src/appx/blog/spec.rst:201 +msgid "" +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." +msgstr "" +"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " +"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." + +#: ../../src/appx/blog/spec.rst:207 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../src/appx/blog/spec.rst:231 +#: ../../src/appx/blog/spec.rst:210 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../src/appx/blog/spec.rst:234 +#: ../../src/appx/blog/spec.rst:213 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../src/appx/blog/spec.rst:238 +#: ../../src/appx/blog/spec.rst:217 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../src/appx/blog/spec.rst:239 +#: ../../src/appx/blog/spec.rst:218 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -475,33 +481,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../src/appx/blog/spec.rst:241 +#: ../../src/appx/blog/spec.rst:220 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../src/appx/blog/spec.rst:242 -msgid "" -"(*Optional*) Each page should contain an inclusion-block(s) with following " -"links:" -msgstr "" -"(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " -"посиланнями:" - -#: ../../src/appx/blog/spec.rst:245 -msgid "``/registration/``: new user registration form" -msgstr "``/register/``: форма реєстрації нового користувача" - -#: ../../src/appx/blog/spec.rst:246 -msgid "``/login/``: user login form" -msgstr "``/login/``: форма логіна користувача" - -#: ../../src/appx/blog/spec.rst:247 -msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення статті" - -#: ../../src/appx/blog/spec.rst:249 +#: ../../src/appx/blog/spec.rst:221 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -511,71 +497,87 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../src/appx/blog/spec.rst:252 +#: ../../src/appx/blog/spec.rst:224 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../src/appx/blog/spec.rst:253 +#: ../../src/appx/blog/spec.rst:225 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../src/appx/blog/spec.rst:259 +#: ../../src/appx/blog/spec.rst:231 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../src/appx/blog/spec.rst:263 +#: ../../src/appx/blog/spec.rst:233 +msgid "Each page should contain an inclusion-block(s) with following links:" +msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" + +#: ../../src/appx/blog/spec.rst:235 +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: форма реєстрації нового користувача" + +#: ../../src/appx/blog/spec.rst:236 +msgid "``/login/``: user login form" +msgstr "``/login/``: форма логіна користувача" + +#: ../../src/appx/blog/spec.rst:237 +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення статті" + +#: ../../src/appx/blog/spec.rst:240 msgid "Articles list" msgstr "Список статей" -#: ../../src/appx/blog/spec.rst:264 +#: ../../src/appx/blog/spec.rst:241 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../src/appx/blog/spec.rst:265 +#: ../../src/appx/blog/spec.rst:242 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../src/appx/blog/spec.rst:266 +#: ../../src/appx/blog/spec.rst:243 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../src/appx/blog/spec.rst:268 +#: ../../src/appx/blog/spec.rst:245 msgid "article title" msgstr "заголовок статті" -#: ../../src/appx/blog/spec.rst:269 +#: ../../src/appx/blog/spec.rst:246 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../src/appx/blog/spec.rst:270 +#: ../../src/appx/blog/spec.rst:247 msgid "article creation date" msgstr "дата створення статті" -#: ../../src/appx/blog/spec.rst:271 +#: ../../src/appx/blog/spec.rst:248 msgid "related topics (3 topics or fewer)" msgstr "пов'язані теми (3 або менше)" -#: ../../src/appx/blog/spec.rst:272 +#: ../../src/appx/blog/spec.rst:249 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../src/appx/blog/spec.rst:279 +#: ../../src/appx/blog/spec.rst:256 msgid "Article details" msgstr "Деталі статті" -#: ../../src/appx/blog/spec.rst:281 +#: ../../src/appx/blog/spec.rst:258 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../src/appx/blog/spec.rst:283 +#: ../../src/appx/blog/spec.rst:260 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -583,71 +585,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../src/appx/blog/spec.rst:285 +#: ../../src/appx/blog/spec.rst:262 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../src/appx/blog/spec.rst:287 +#: ../../src/appx/blog/spec.rst:264 msgid "Article title" msgstr "Заголовок статті" -#: ../../src/appx/blog/spec.rst:288 +#: ../../src/appx/blog/spec.rst:265 msgid "Creation date" msgstr "Дата створення" -#: ../../src/appx/blog/spec.rst:289 ../../src/appx/blog/spec.rst:296 +#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 msgid "Author name" msgstr "Ім'я автора" -#: ../../src/appx/blog/spec.rst:290 +#: ../../src/appx/blog/spec.rst:267 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../src/appx/blog/spec.rst:291 +#: ../../src/appx/blog/spec.rst:268 msgid "Article content" msgstr "Вміст статті" -#: ../../src/appx/blog/spec.rst:293 +#: ../../src/appx/blog/spec.rst:270 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../src/appx/blog/spec.rst:294 +#: ../../src/appx/blog/spec.rst:271 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../src/appx/blog/spec.rst:297 +#: ../../src/appx/blog/spec.rst:274 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../src/appx/blog/spec.rst:298 +#: ../../src/appx/blog/spec.rst:275 msgid "Comment message" msgstr "Текст комментаря" -#: ../../src/appx/blog/spec.rst:301 +#: ../../src/appx/blog/spec.rst:278 msgid "Profile page" msgstr "Строніка профілю" -#: ../../src/appx/blog/spec.rst:302 +#: ../../src/appx/blog/spec.rst:279 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../src/appx/blog/spec.rst:304 +#: ../../src/appx/blog/spec.rst:281 msgid "First name" msgstr "Ім'я" -#: ../../src/appx/blog/spec.rst:305 +#: ../../src/appx/blog/spec.rst:282 msgid "Last name" msgstr "Прізвище" -#: ../../src/appx/blog/spec.rst:307 +#: ../../src/appx/blog/spec.rst:284 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../src/appx/blog/spec.rst:309 +#: ../../src/appx/blog/spec.rst:286 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../src/appx/blog/spec.rst:310 +#: ../../src/appx/blog/spec.rst:287 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -655,11 +657,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../src/appx/blog/spec.rst:314 +#: ../../src/appx/blog/spec.rst:291 msgid "Forms" msgstr "Форми" -#: ../../src/appx/blog/spec.rst:316 +#: ../../src/appx/blog/spec.rst:293 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -669,7 +671,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../src/appx/blog/spec.rst:320 +#: ../../src/appx/blog/spec.rst:297 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -677,23 +679,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../src/appx/blog/spec.rst:323 ../../src/appx/blog/spec.rst:331 +#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 msgid "username" msgstr "username" -#: ../../src/appx/blog/spec.rst:324 +#: ../../src/appx/blog/spec.rst:301 msgid "email" msgstr "email" -#: ../../src/appx/blog/spec.rst:325 ../../src/appx/blog/spec.rst:332 +#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 msgid "password" msgstr "password" -#: ../../src/appx/blog/spec.rst:326 ../../src/appx/blog/spec.rst:345 +#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 msgid "confirm password" msgstr "confirm password" -#: ../../src/appx/blog/spec.rst:328 +#: ../../src/appx/blog/spec.rst:305 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -701,7 +703,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../src/appx/blog/spec.rst:334 +#: ../../src/appx/blog/spec.rst:311 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -709,33 +711,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../src/appx/blog/spec.rst:337 +#: ../../src/appx/blog/spec.rst:314 msgid "title" msgstr "title" -#: ../../src/appx/blog/spec.rst:338 +#: ../../src/appx/blog/spec.rst:315 msgid "relevant topics" msgstr "відповідні теми" -#: ../../src/appx/blog/spec.rst:339 +#: ../../src/appx/blog/spec.rst:316 msgid "content" msgstr "content" -#: ../../src/appx/blog/spec.rst:341 +#: ../../src/appx/blog/spec.rst:318 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../src/appx/blog/spec.rst:342 +#: ../../src/appx/blog/spec.rst:319 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../src/appx/blog/spec.rst:344 +#: ../../src/appx/blog/spec.rst:321 msgid "new password" msgstr "new password" -#: ../../src/appx/blog/spec.rst:347 +#: ../../src/appx/blog/spec.rst:324 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -743,7 +745,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../src/appx/blog/spec.rst:349 +#: ../../src/appx/blog/spec.rst:326 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -753,48 +755,48 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../src/appx/blog/spec.rst:354 +#: ../../src/appx/blog/spec.rst:331 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../src/appx/blog/spec.rst:357 +#: ../../src/appx/blog/spec.rst:334 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../src/appx/blog/spec.rst:359 +#: ../../src/appx/blog/spec.rst:336 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../src/appx/blog/spec.rst:360 +#: ../../src/appx/blog/spec.rst:337 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../src/appx/blog/spec.rst:361 +#: ../../src/appx/blog/spec.rst:338 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../src/appx/blog/spec.rst:362 +#: ../../src/appx/blog/spec.rst:339 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../src/appx/blog/spec.rst:364 +#: ../../src/appx/blog/spec.rst:341 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../src/appx/blog/spec.rst:366 +#: ../../src/appx/blog/spec.rst:343 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../src/appx/blog/spec.rst:367 +#: ../../src/appx/blog/spec.rst:344 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../src/appx/blog/spec.rst:369 +#: ../../src/appx/blog/spec.rst:346 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../src/appx/blog/spec.rst:370 +#: ../../src/appx/blog/spec.rst:347 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " @@ -805,60 +807,60 @@ msgstr "" "наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " "отримає slug: ``sample-blog-article-2023-03-23``." -#: ../../src/appx/blog/spec.rst:374 +#: ../../src/appx/blog/spec.rst:351 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../src/appx/blog/spec.rst:377 +#: ../../src/appx/blog/spec.rst:354 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../src/appx/blog/spec.rst:379 +#: ../../src/appx/blog/spec.rst:356 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../src/appx/blog/spec.rst:381 +#: ../../src/appx/blog/spec.rst:358 msgid "``username``" msgstr "``username``" -#: ../../src/appx/blog/spec.rst:382 +#: ../../src/appx/blog/spec.rst:359 msgid "``email``" msgstr "``email``" -#: ../../src/appx/blog/spec.rst:383 +#: ../../src/appx/blog/spec.rst:360 msgid "``password``" msgstr "``password``" -#: ../../src/appx/blog/spec.rst:384 +#: ../../src/appx/blog/spec.rst:361 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../src/appx/blog/spec.rst:386 +#: ../../src/appx/blog/spec.rst:363 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../src/appx/blog/spec.rst:387 +#: ../../src/appx/blog/spec.rst:364 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../src/appx/blog/spec.rst:388 +#: ../../src/appx/blog/spec.rst:365 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../src/appx/blog/spec.rst:389 +#: ../../src/appx/blog/spec.rst:366 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../src/appx/blog/spec.rst:392 +#: ../../src/appx/blog/spec.rst:369 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../src/appx/blog/spec.rst:394 +#: ../../src/appx/blog/spec.rst:371 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -866,7 +868,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../src/appx/blog/spec.rst:396 +#: ../../src/appx/blog/spec.rst:373 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -874,14 +876,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../src/appx/blog/spec.rst:398 +#: ../../src/appx/blog/spec.rst:375 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../src/appx/blog/spec.rst:400 +#: ../../src/appx/blog/spec.rst:377 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -895,7 +897,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../src/appx/blog/spec.rst:405 +#: ../../src/appx/blog/spec.rst:382 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -905,7 +907,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../src/appx/blog/spec.rst:408 +#: ../../src/appx/blog/spec.rst:385 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -920,7 +922,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../src/appx/blog/spec.rst:413 +#: ../../src/appx/blog/spec.rst:390 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -928,7 +930,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../src/appx/blog/spec.rst:415 +#: ../../src/appx/blog/spec.rst:392 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -938,21 +940,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:418 +#: ../../src/appx/blog/spec.rst:395 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../src/appx/blog/spec.rst:420 +#: ../../src/appx/blog/spec.rst:397 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../src/appx/blog/spec.rst:421 +#: ../../src/appx/blog/spec.rst:398 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../src/appx/blog/spec.rst:423 +#: ../../src/appx/blog/spec.rst:400 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -961,11 +963,7 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../src/appx/blog/spec.rst:427 -msgid "Optional task(s)" -msgstr "Додаткові завдання" - -#: ../../src/appx/blog/spec.rst:429 +#: ../../src/appx/blog/spec.rst:406 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -974,7 +972,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../src/appx/blog/spec.rst:431 +#: ../../src/appx/blog/spec.rst:408 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -987,11 +985,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../src/appx/blog/spec.rst:437 +#: ../../src/appx/blog/spec.rst:414 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../src/appx/blog/spec.rst:439 +#: ../../src/appx/blog/spec.rst:416 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -999,15 +997,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../src/appx/blog/spec.rst:441 +#: ../../src/appx/blog/spec.rst:418 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../src/appx/blog/spec.rst:442 +#: ../../src/appx/blog/spec.rst:419 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../src/appx/blog/spec.rst:443 +#: ../../src/appx/blog/spec.rst:420 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1015,57 +1013,65 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../src/appx/blog/spec.rst:445 +#: ../../src/appx/blog/spec.rst:422 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../src/appx/blog/spec.rst:447 +#: ../../src/appx/blog/spec.rst:424 msgid "article creation" msgstr "створення статті" -#: ../../src/appx/blog/spec.rst:448 +#: ../../src/appx/blog/spec.rst:425 msgid "article update" msgstr "оновлення статті" -#: ../../src/appx/blog/spec.rst:449 +#: ../../src/appx/blog/spec.rst:426 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../src/appx/blog/spec.rst:450 +#: ../../src/appx/blog/spec.rst:427 msgid "article deletion" msgstr "видалення статті" -#: ../../src/appx/blog/spec.rst:453 -msgid "" -"It's ok to use *pre-defined* author for now, or select author by random. " -"This will be fixed in the next section." -msgstr "" -"Наразі можна використовувати *попередньо визначеного* автора або випадковим " -"чином вибирати автора. Це буде виправлено у наступному розділі." +#: ../../src/appx/blog/spec.rst:429 +msgid "Only authenticated users can create articles." +msgstr "Лише аутентифіковані користувачі можуть створювати статі." + +#: ../../src/appx/blog/spec.rst:430 +msgid "Article can be edited only by its author." +msgstr "Стаття може редагуватись лише її автором." + +#: ../../src/appx/blog/spec.rst:431 +msgid "Article can be deleted only by its author." +msgstr "Стаття може видалятись лише її автором." + +#: ../../src/appx/blog/spec.rst:432 +msgid "Only authenticated users can comment articles." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." -#: ../../src/appx/blog/spec.rst:457 +#: ../../src/appx/blog/spec.rst:439 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../src/appx/blog/spec.rst:459 +#: ../../src/appx/blog/spec.rst:441 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../src/appx/blog/spec.rst:460 +#: ../../src/appx/blog/spec.rst:442 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../src/appx/blog/spec.rst:463 +#: ../../src/appx/blog/spec.rst:445 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../src/appx/blog/spec.rst:466 +#: ../../src/appx/blog/spec.rst:448 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../src/appx/blog/spec.rst:470 +#: ../../src/appx/blog/spec.rst:452 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1073,7 +1079,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:472 +#: ../../src/appx/blog/spec.rst:454 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1081,7 +1087,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../src/appx/blog/spec.rst:477 +#: ../../src/appx/blog/spec.rst:459 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1090,7 +1096,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../src/appx/blog/spec.rst:479 +#: ../../src/appx/blog/spec.rst:461 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1098,7 +1104,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../src/appx/blog/spec.rst:484 +#: ../../src/appx/blog/spec.rst:466 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1107,11 +1113,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../src/appx/blog/spec.rst:488 +#: ../../src/appx/blog/spec.rst:470 msgid "User" msgstr "Користувач" -#: ../../src/appx/blog/spec.rst:489 +#: ../../src/appx/blog/spec.rst:471 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1123,40 +1129,45 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../src/appx/blog/spec.rst:495 +#: ../../src/appx/blog/spec.rst:477 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../src/appx/blog/spec.rst:497 -msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to use " -"*pre-defined* user as a article's author for now." +#: ../../src/appx/blog/spec.rst:479 +msgid "All blog-site functionality are to be reflected via REST API." msgstr "" "Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API. Наразі можна використовувати *попередньо визначеного* користувача як " -"автора статті." +"API." + +#: ../../src/appx/blog/spec.rst:482 +msgid "" +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." +msgstr "" +"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " +"запиту. Це буде виправлено у наступному розділі." -#: ../../src/appx/blog/spec.rst:501 +#: ../../src/appx/blog/spec.rst:486 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../src/appx/blog/spec.rst:503 +#: ../../src/appx/blog/spec.rst:488 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../src/appx/blog/spec.rst:505 +#: ../../src/appx/blog/spec.rst:490 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../src/appx/blog/spec.rst:506 +#: ../../src/appx/blog/spec.rst:491 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../src/appx/blog/spec.rst:509 +#: ../../src/appx/blog/spec.rst:494 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1165,7 +1176,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../src/appx/blog/spec.rst:511 +#: ../../src/appx/blog/spec.rst:496 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1174,7 +1185,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:513 +#: ../../src/appx/blog/spec.rst:498 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1182,7 +1193,7 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../src/appx/blog/spec.rst:515 +#: ../../src/appx/blog/spec.rst:500 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." @@ -3391,3 +3402,13 @@ msgstr "" #~ msgid "python, django, blog, project, training" #~ msgstr "python, django, blog, project, training" + +#~ msgid "Optional tasks" +#~ msgstr "Додаткові завдання" + +#~ msgid "" +#~ "Create a service to fetch articles, ordered by a specified user " +#~ "preferences." +#~ msgstr "" +#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " +#~ "уподобаннями користувача." diff --git a/src/appx/blog b/src/appx/blog index 07148abff..af5bc281d 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit 07148abffada4810d07654a863a4e8f3a9afef80 +Subproject commit af5bc281d7d31b26972ad95c2156af464c2897d1 diff --git a/src/conf.py b/src/conf.py index 2bc14fcd8..3d52dd19f 100644 --- a/src/conf.py +++ b/src/conf.py @@ -61,7 +61,7 @@ (master_doc, latex_doc, project, authors, "manual", False), ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), - ("appx/blog", "DjangoBlog.tex", project, authors, "howto", False), + ("appx/blog/spec", "DjangoBlog.tex", project, authors, "howto", False), ("appx/create_pr", "CreatingPullRequest.tex", "Creating the Pull Request", authors, "howto", False), ] @@ -74,5 +74,5 @@ "appx/create_pr", "appx/conv_store", "appx/wtk", - "appx/blog", + "appx/blog/spec", ] From a21243eb26a24c246e1f38499b9c80265b171f09 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 12 Aug 2023 01:05:02 +0300 Subject: [PATCH 128/689] Update project dependencies --- poetry.lock | 488 +++++++++++++++++++++++++++------------------------- 1 file changed, 252 insertions(+), 236 deletions(-) diff --git a/poetry.lock b/poetry.lock index 56e0b0c69..0f92d9a15 100644 --- a/poetry.lock +++ b/poetry.lock @@ -26,111 +26,111 @@ files = [ [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -186,14 +186,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.3.0" +version = "6.8.0" description = "Read metadata from Python packages" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.3.0-py3-none-any.whl", hash = "sha256:8f8bd2af397cf33bd344d35cfe7f489219b7d14fc79a3f854b75b8417e9226b0"}, - {file = "importlib_metadata-6.3.0.tar.gz", hash = "sha256:23c2bcae4762dfb0bbe072d358faec24957901d75b6c4ab11172c0c982532402"}, + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] [package.dependencies] @@ -202,7 +202,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "jinja2" @@ -264,62 +264,62 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] @@ -431,14 +431,14 @@ pybtex = ">=0.16" [[package]] name = "pygments" -version = "2.15.0" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, - {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -446,71 +446,71 @@ plugins = ["importlib-metadata"] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -518,19 +518,19 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "67.6.1" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.6.1-py3-none-any.whl", hash = "sha256:e728ca814a823bf7bf60162daf9db95b93d532948c4c0bea762ce62f60189078"}, - {file = "setuptools-67.6.1.tar.gz", hash = "sha256:257de92a9d50a60b8e22abfcbb771571fde0dbf3ec234463212027a4eeecbe9a"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -559,21 +559,21 @@ files = [ [[package]] name = "sphinx" -version = "6.1.3" +version = "6.2.1" description = "Python documentation generator" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Sphinx-6.1.3.tar.gz", hash = "sha256:0dac3b698538ffef41716cf97ba26c1c7788dba73ce6f150c1ff5b4720786dd2"}, - {file = "sphinx-6.1.3-py3-none-any.whl", hash = "sha256:807d1cb3d6be87eb78a381c3e70ebd8d346b9a25f3753e9947e866b2786865fc"}, + {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, + {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18,<0.20" +docutils = ">=0.18.1,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -591,7 +591,7 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython", "html5lib", "pytest (>=4.6)"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-copybutton" @@ -635,36 +635,39 @@ test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.2.0" +version = "1.2.2" description = "Read the Docs theme for Sphinx" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.0-py2.py3-none-any.whl", hash = "sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2"}, - {file = "sphinx_rtd_theme-1.2.0.tar.gz", hash = "sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8"}, + {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, + {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, ] [package.dependencies] docutils = "<0.19" sphinx = ">=1.6,<7" -sphinxcontrib-jquery = {version = ">=2.0.0,<3.0.0 || >3.0.0", markers = "python_version > \"3\""} +sphinxcontrib-jquery = ">=4,<5" [package.extras] dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "1.0.6" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-1.0.6-py3-none-any.whl", hash = "sha256:c0578efa23cab5a2f3aaa8af5691b952433f4fdfaac255befd3452448e7ea4a4"}, + {file = "sphinxcontrib_applehelp-1.0.6.tar.gz", hash = "sha256:a59274de7a952a99af36b8a5092352d9249279c0e3280b7dceaae8e15873c942"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] @@ -690,32 +693,38 @@ Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "1.0.4" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-1.0.4-py3-none-any.whl", hash = "sha256:d4e20a17f78865d4096733989b5efa0d5e7743900e98e1f6ecd6f489380febc8"}, + {file = "sphinxcontrib_devhelp-1.0.4.tar.gz", hash = "sha256:4fd751c63dc40895ac8740948f26bf1a3c87e4e441cc008672abd1cb2bc8a3d1"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.0.3" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.0.3-py3-none-any.whl", hash = "sha256:abee4e6c5471203ad2fc40dc6a16ed99884a5d6b15a6f79c9269a7e82cf04149"}, + {file = "sphinxcontrib_htmlhelp-2.0.3.tar.gz", hash = "sha256:14358d0f88ccf58447f2b54343cdcc0012f32de2f8d27cf934fdbc0b362f9597"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] @@ -764,68 +773,75 @@ files = [ [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "1.0.5" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-1.0.5-py3-none-any.whl", hash = "sha256:962730a6ad15d21fd6760b14c9e95c00a097413595aa6ee871dd9dfa4b002a16"}, + {file = "sphinxcontrib_qthelp-1.0.5.tar.gz", hash = "sha256:d31d1a1beaf3894866bb318fb712f1edc82687f1c06235a01e5b2c50c36d5c40"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "1.1.7" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-1.1.7-py3-none-any.whl", hash = "sha256:424164fc3a8b4355a29d5ea8b7f18199022d160c8f7b96e68bb6c50217729b87"}, + {file = "sphinxcontrib_serializinghtml-1.1.7.tar.gz", hash = "sha256:ca31afee32e1508cff4034e258060ce2c81a3b1c49e77da60fdb61f0e7a73c22"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "urllib3" -version = "1.26.15" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, - {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.15.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" From 7ef2142b7997d0db48bf36ede0c2b2e9b3fbbbd1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 23:31:31 +0300 Subject: [PATCH 129/689] Update submodules: problem-sets (2023.08.1) --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index efeafc8c8..c4326cdd5 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit efeafc8c8e949cbfb1ee156827b04a2d1da6573a +Subproject commit c4326cdd50a7bcd6452344376918256f727dcaa9 From 2121030349d91a2301875c73330ef074642b663b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 00:09:53 +0300 Subject: [PATCH 130/689] Update submodules: blog-spec --- src/appx/blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/appx/blog b/src/appx/blog index af5bc281d..5d34b3fda 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit af5bc281d7d31b26972ad95c2156af464c2897d1 +Subproject commit 5d34b3fdac1a0fceac294fc69bc50ad89b56846c From 8df5dd1c01dea9074eb6c24062f271ddc0527b1c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 22 Aug 2023 13:47:36 +0300 Subject: [PATCH 131/689] Update README and requirements.txt --- README.rst | 6 +++++- requirements.txt | 38 +++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/README.rst b/README.rst index c98d905d3..653b86f87 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,11 @@ To get the full content, do: .. code-block:: shell - git submodule update --remote + git clone [local_repository] + # cd into cloned repo and switch to devel branch + git switch devel + # clone submodules content + git submodule update --init --recursive Installing dependencies ----------------------- diff --git a/requirements.txt b/requirements.txt index 4f32b5241..b1d5ba8be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,41 +1,41 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" -certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4" -charset-normalizer==3.1.0 ; python_version >= "3.9" and python_version < "4" -click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" +certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.2.0 ; python_version >= "3.9" and python_version < "4.0" +click==8.1.6 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" -idna==3.4 ; python_version >= "3.9" and python_version < "4" +idna==3.4 ; python_version >= "3.9" and python_version < "4.0" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.3.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==6.8.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" -markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" packaging==23.1 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" -pygments==2.15.0 ; python_version >= "3.9" and python_version < "4.0" -pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" -requests==2.28.2 ; python_version >= "3.9" and python_version < "4" -setuptools==67.6.1 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.16.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" +requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==68.0.0 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" -sphinx-rtd-theme==1.2.0 ; python_version >= "3.9" and python_version < "4.0" -sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==1.2.2 ; python_version >= "3.9" and python_version < "4.0" +sphinx==6.2.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.3 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" -urllib3==1.26.15 ; python_version >= "3.9" and python_version < "4" -zipp==3.15.0 ; python_version >= "3.9" and python_version < "3.10" +sphinxcontrib-qthelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.7 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.0.4 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.16.2 ; python_version >= "3.9" and python_version < "3.10" From 4ce2c152d5b6d89cd7bc8398d0df36bc2762cb32 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 22 Aug 2023 14:52:13 +0300 Subject: [PATCH 132/689] Remove "flask" part from the master document --- src/basics/bool_logic.txt | 2 -- src/basics/controlflow.txt | 2 ++ src/basics/functions.txt | 8 ++++++-- src/basics/modules.txt | 8 ++++++-- src/basics/stdtypes.txt | 5 ++++- src/flask/index.txt | 19 ------------------- src/index.txt | 1 - 7 files changed, 18 insertions(+), 27 deletions(-) delete mode 100644 src/flask/index.txt diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 55afd37d7..51c52eeb7 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -83,8 +83,6 @@ considered ``False``: Boolean comparison ================== -.. todo: not, and, or - Python provides 3 logical operators: .. table:: diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index d1a8a017a..f75b9671a 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -7,6 +7,8 @@ Control Flow ******************************************************************************* +.. todo: split into "if" statement and loop documents + ``if`` statement ================ diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 62837cdc2..7c24b38cd 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -3,8 +3,6 @@ :author: Serhii Horodilov :keywords: python, basics, functions -.. todo - .. attention:: Page is under construction .. figure:: /../assets/img/construction.svg @@ -14,3 +12,9 @@ ******************************************************************************* Functions ******************************************************************************* + +.. todo: function definition + +.. todo: function arguments (positional and key-word) + +.. todo: default argument value diff --git a/src/basics/modules.txt b/src/basics/modules.txt index bb2091a9e..f188916a2 100644 --- a/src/basics/modules.txt +++ b/src/basics/modules.txt @@ -3,8 +3,6 @@ :author: Serhii Horodilov :keywords: python, basics, modules, import -.. todo - .. attention:: Page is under construction .. figure:: /../assets/img/construction.svg @@ -14,3 +12,9 @@ ******************************************************************************* Pythons Modules and Imports ******************************************************************************* + +.. todo: module definition + +.. todo: imports + +.. todo: if __name__ == "__main__" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 06d1f9e69..d5bdbbc92 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -3,6 +3,9 @@ :author: Serhii Horodilov :keywords: python, basics +.. todo + split into separate documents: numbers, booleans, sequences etc. + ******************************************************************************* Built-in Types ******************************************************************************* @@ -49,7 +52,7 @@ Supported operations +---------------------+-------------------------------------------------------+ | ``-x`` | *x* negated | +---------------------+-------------------------------------------------------+ -| ``+x`` | *y* unchanged | +| ``+x`` | *x* unchanged | +---------------------+-------------------------------------------------------+ | ``abs(x)`` | absolute value or magnitude of *x* | +---------------------+-------------------------------------------------------+ diff --git a/src/flask/index.txt b/src/flask/index.txt deleted file mode 100644 index edefc6de1..000000000 --- a/src/flask/index.txt +++ /dev/null @@ -1,19 +0,0 @@ -.. meta:: - :description: Flask web-framework - :author: Serhii Horodilov - :keywords: python, web, flask, index - -.. todo - -.. attention:: Page is under construction - - .. figure:: /../assets/img/construction.svg - :figwidth: 250 - :align: center - -############################################################################### - Flask Framework -############################################################################### - -.. toctree:: - :name: flask diff --git a/src/index.txt b/src/index.txt index 3409ef117..b4bd03256 100644 --- a/src/index.txt +++ b/src/index.txt @@ -11,7 +11,6 @@ basics/index rdbms/index oop/index - flask/index django/index linux/index deploy/index From da7a4d5f420ef6ffa40f3ee1f37d09ecddf44e71 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 19:42:23 +0300 Subject: [PATCH 133/689] Add "Version Control System" part to the course materials --- src/index.txt | 1 + src/refs.bib | 9 +++++++++ src/vcs/index.txt | 11 +++++++++++ 3 files changed, 21 insertions(+) create mode 100644 src/vcs/index.txt diff --git a/src/index.txt b/src/index.txt index b4bd03256..4616f4687 100644 --- a/src/index.txt +++ b/src/index.txt @@ -10,6 +10,7 @@ intro/index basics/index rdbms/index + vcs/index oop/index django/index linux/index diff --git a/src/refs.bib b/src/refs.bib index bc8e7e242..0d37a17ea 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -148,3 +148,12 @@ @misc{github:about-pr title = "{About pull requests}", url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, } + +@book{progit, + title = {ProGit (2nd Edition)}, + author = {Scott Chacon and Ben Straub}, + year = {2014}, + publisher = {Apress}, + url = {https://git-scm.com/book/en/v2}, + note = {Online Version}, +} diff --git a/src/vcs/index.txt b/src/vcs/index.txt new file mode 100644 index 000000000..e958ffc13 --- /dev/null +++ b/src/vcs/index.txt @@ -0,0 +1,11 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git + +############################################################################### + Version Control System +############################################################################### + +.. toctree:: + :name: vcs From 840c7a1d2b504e4fcfb938fb1034de18d184b1a5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 22:29:09 +0300 Subject: [PATCH 134/689] Add Git introduction document --- assets/img/git-snapshots.svg | 320 ++++++++++++++++++++++++++++++++++ assets/img/vcs-dvcs.svg | 278 +++++++++++++++++++++++++++++ assets/mermaid/git-states.mmd | 8 + src/vcs/index.txt | 2 + src/vcs/intro.txt | 95 ++++++++++ 5 files changed, 703 insertions(+) create mode 100644 assets/img/git-snapshots.svg create mode 100644 assets/img/vcs-dvcs.svg create mode 100644 assets/mermaid/git-states.mmd create mode 100644 src/vcs/intro.txt diff --git a/assets/img/git-snapshots.svg b/assets/img/git-snapshots.svg new file mode 100644 index 000000000..1aa53b2f0 --- /dev/null +++ b/assets/img/git-snapshots.svg @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version 1 + + + + + + File A + + + + + + File B + + + + + + File C + + + + + + + + + Version 2 + + + + + + + A1 + + + + + + B + + + + + + + C1 + + + + + + + + + Version 3 + + + + + + A1 + + + + + + B + + + + + + + C2 + + + + + + + + + Version 4 + + + + + + + A2 + + + + + + + B1 + + + + + + C2 + + + + + + + + + Version 5 + + + + + + A2 + + + + + + + B2 + + + + + + + C3 + + + + + + + + + + + + + + + Checkins Over Time + + + + + + diff --git a/assets/img/vcs-dvcs.svg b/assets/img/vcs-dvcs.svg new file mode 100644 index 000000000..65bf23fb6 --- /dev/null +++ b/assets/img/vcs-dvcs.svg @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + Local Repository A + + + + + + + + + + File + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + + + + + + + Local Repository B + + + + + + + + + + File + + + + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + + + + + + + Remote Repository + + + + + + + + + + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + diff --git a/assets/mermaid/git-states.mmd b/assets/mermaid/git-states.mmd new file mode 100644 index 000000000..edf400dbb --- /dev/null +++ b/assets/mermaid/git-states.mmd @@ -0,0 +1,8 @@ +sequenceDiagram + participant Working directory + participant Stage area + participant .git directory (Repository) + + .git directory (Repository) ->> Working directory: Checkout + Working directory ->> Stage area: Stage fixes + Stage area ->> .git directory (Repository): Commit diff --git a/src/vcs/index.txt b/src/vcs/index.txt index e958ffc13..9fef64623 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -9,3 +9,5 @@ .. toctree:: :name: vcs + + intro diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt new file mode 100644 index 000000000..d09164707 --- /dev/null +++ b/src/vcs/intro.txt @@ -0,0 +1,95 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git + +******************************************************************************* + About version control (Git) +******************************************************************************* + +Version control is a system that records changes to a file or set of files over +time so that you can recall specific versions later. It allows you to revert +selected files back to a previous state, revert the entire project back to +a previous state, compare changes over time, see who last modified something +that might be causing a problem, who introduced an issue and when, and more. + +In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just +check out the latest snapshot of the files; rather, they fully mirror +the repository, including its full history. Thus, if any server dies, and +these systems were collaborating via that server, any of the client +repositories can be copied back up to the server to restore it. Every clone +is really a full backup of all the data. + +.. figure:: /../assets/img/vcs-dvcs.svg + :align: center + + Distributed version control diagram + +.. rubric:: What is Git? + +The major difference between Git and any other VCS is the way Git thinks about +its data. Conceptually, most other systems store information as a list of +file-based changes. Git doesn't think of or store its data this way. +Instead, Git thinks of its data more like a series of snapshots of a miniature +filesystem. + +This is an important distinction between Git and nearly all other VCSs. +It makes Git reconsider almost every aspect of version control that most +other systems copied from the previous generation. This makes Git more like +a mini filesystem with some incredibly powerful tools built on top of it, +rather than simply a VCS. + +.. figure:: /../assets/img/git-snapshots.svg + :align: center + + Storing data as snapshots of the project over time + +.. rubric:: Local operations + +Most operations in Git need only local files and resources to operate -- +generally no information is needed from another computer on your network. +Because you have the entire history of the project right there on your local +disk, most operations seem almost instantaneous. + +.. rubric:: Integrity + +Everything in Git is checksummed before it is stored and is then referred +to by that checksum. This means it’s impossible to change the contents of +any file or directory without Git knowing about it. + +.. rubric:: Repository files states + +Git has three main states that your files can reside in: +**modified**, **staged**, and **committed**: + +- Modified means that you have changed the file but have not committed it + to your database yet. +- Staged means that you have marked a modified file in its current version + to go into your next commit snapshot. +- Committed means that the data is safely stored in your local database. + +.. mermaid:: /../assets/mermaid/git-states.mmd + :align: center + + + +The basic Git workflow goes something like this: + +#. You modify files in your working tree. +#. You selectively stage just those changes you want to be part of your next + commit, which adds only those changes to the staging area. +#. You do a commit, which takes the files as they are in the staging area and + stores that snapshot permanently to your Git directory. + +Command line +============ + +There are a lot of different ways to use Git. There are the original +command-line tools, and there are many graphical user interfaces of varying +capabilities. For one, the command line is the only place you can run all Git +commands -- most of the GUIs implement only a partial subset of Git +functionality for simplicity. If you know how to run the command-line version, +you can probably also figure out how to run the GUI version, while the opposite +is not necessarily true. Also, while your choice of graphical client is +a matter of personal taste, all users will have the command-line tools +installed and available. From ab158a22fcdee34d775a612446d299d5ea5f333b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 22:54:38 +0300 Subject: [PATCH 135/689] Add first-time git setup document --- src/vcs/index.txt | 1 + src/vcs/setup.txt | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/vcs/setup.txt diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 9fef64623..9848f53b1 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -11,3 +11,4 @@ :name: vcs intro + setup diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt new file mode 100644 index 000000000..c959359ce --- /dev/null +++ b/src/vcs/setup.txt @@ -0,0 +1,50 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, setup + +******************************************************************************* + Git Setup +******************************************************************************* + +Now that you have Git on your system, you’ll want to do a few things to +customize your Git environment. Git comes with a tool called ``git config`` +that lets you get and set configuration variables that control all aspects of +how Git looks and operates. These variables can be stored in three different +places: + +#. *[path]/etc/gitconfig* file: Contains values applied to every user on + the system and all their repositories. If you pass the option ``--system`` + to git config, it reads and writes from this file specifically. + Because this is a system configuration file, you would need administrative + or superuser privilege to make changes to it. +#. *~/.gitconfig* or *~/.config/git/config* file: Values specific personally + to you, the user. You can make Git read and write to this file specifically + by passing the ``--global`` option, and this affects all of + the repositories you work with on your system. +#. *config* file in the Git directory (that is, *.git/config*) of whatever + repository you’re currently using: Specific to that single repository. + You can force Git to read from and write to this file with the ``--local`` + option, but that is in fact the default. Unsurprisingly, you need to be + located somewhere in a Git repository for this option to work properly. + +Each level overrides values in the previous level, so values in *.git/config* +trump those in *[path]/etc/gitconfig*. + +You can view all of your settings and where they are coming from using: + +.. code-block:: shell + + git config --list --show-origin + +Your identity +============= + +The first thing you should do when you install Git is to set your user name +and email address. This is important because every Git commit uses this +information. + +.. code-block:: shell + + git config --global user.name "John Doe" + git config --global user.email johndoe@example.com From 5e0e921777221a1ce8763e0553ccb2edc3af816c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 23:23:15 +0300 Subject: [PATCH 136/689] Add todos to setup document --- src/vcs/setup.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index c959359ce..b2c996449 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -48,3 +48,6 @@ information. git config --global user.name "John Doe" git config --global user.email johndoe@example.com + +.. todo: + Add SSH setup From faaebda3b64855980b6db4d4e18579b27b8da7d1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 23:28:52 +0300 Subject: [PATCH 137/689] Add git-lifecycle mermaid diagram --- assets/mermaid/git-lifecycle.mmd | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 assets/mermaid/git-lifecycle.mmd diff --git a/assets/mermaid/git-lifecycle.mmd b/assets/mermaid/git-lifecycle.mmd new file mode 100644 index 000000000..a43c1f615 --- /dev/null +++ b/assets/mermaid/git-lifecycle.mmd @@ -0,0 +1,11 @@ +sequenceDiagram + participant Untracked + participant Unmodified + participant Modified + participant Staged + + Untracked ->> Staged: Add the file + Unmodified ->> Modified: Edit the file + Modified ->> Staged: Stage the file + Unmodified ->> Untracked: Remove the file + Staged ->> Unmodified: Commit From a3579ebda2d773152ec8f9ee0536fefcad794b0d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:37:20 +0300 Subject: [PATCH 138/689] Add gitflow diagram --- assets/mermaid/gitflow.mmd | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 assets/mermaid/gitflow.mmd diff --git a/assets/mermaid/gitflow.mmd b/assets/mermaid/gitflow.mmd new file mode 100644 index 000000000..163b34b6d --- /dev/null +++ b/assets/mermaid/gitflow.mmd @@ -0,0 +1,56 @@ +gitGraph +%% initialize repository + commit id: "Initial commit" + +%% define development branch + branch develop + commit + +%% define hotfix branch + checkout main + commit id: "Buggy commit" type: REVERSE + branch hotfix + +%% define feature branches + checkout develop + branch feature/A + branch feature/B + checkout develop + commit + branch feature/C + commit + commit + commit + +%% working with hotfix branch + checkout hotfix + commit id: "Fix bugs" + +%% merge hotfix commits into main and develop + checkout main + merge hotfix + checkout develop + merge hotfix + +%% working with feature-b branch + checkout feature/A + commit + commit + checkout develop + merge feature/A +%% work with feature-a branch + checkout feature/B + commit + checkout develop + +%% define release branch + checkout develop + branch release/v1.0 + commit id: "Work on release" tag: "v1.0" + checkout main + merge release/v1.0 + checkout develop + commit + merge release/v1.0 + commit + merge feature/B \ No newline at end of file From 40b3a3af4a5360f9f3b06221364d54bb24115020 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:40:17 +0300 Subject: [PATCH 139/689] Minor changes to gitflow mermaid diagram --- assets/mermaid/gitflow.mmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/mermaid/gitflow.mmd b/assets/mermaid/gitflow.mmd index 163b34b6d..6287bbb6e 100644 --- a/assets/mermaid/gitflow.mmd +++ b/assets/mermaid/gitflow.mmd @@ -24,7 +24,7 @@ gitGraph %% working with hotfix branch checkout hotfix - commit id: "Fix bugs" + commit id: "Fix bugs" type:HIGHLIGHT %% merge hotfix commits into main and develop checkout main @@ -52,5 +52,7 @@ gitGraph checkout develop commit merge release/v1.0 + +%% merging previous feature branch commit merge feature/B \ No newline at end of file From 31fd265effe83c17593fb09d73f927326fb6bad2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:44:42 +0300 Subject: [PATCH 140/689] Update bibtex references --- src/refs.bib | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/refs.bib b/src/refs.bib index 0d37a17ea..3a2f8b3c2 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -149,11 +149,17 @@ @misc{github:about-pr url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, } +@misc{github:ssh, + title = "{Generating a new SSH key and adding it to the ssh-agent}", + author = "{GitHub Docs}", + url = {https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent}, +} + @book{progit, - title = {ProGit (2nd Edition)}, - author = {Scott Chacon and Ben Straub}, - year = {2014}, - publisher = {Apress}, - url = {https://git-scm.com/book/en/v2}, - note = {Online Version}, + title = {ProGit (2nd Edition)}, + author = {Scott Chacon and Ben Straub}, + year = {2014}, + publisher = {Apress}, + url = {https://git-scm.com/book/en/v2}, + note = {Online Version}, } From 49d864bf0c5c03c9577172e033927f9ea794c21c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:53:02 +0300 Subject: [PATCH 141/689] Add Git basics document (draft) --- src/vcs/basics.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++ src/vcs/index.txt | 1 + 2 files changed, 51 insertions(+) create mode 100644 src/vcs/basics.txt diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt new file mode 100644 index 000000000..95f03c634 --- /dev/null +++ b/src/vcs/basics.txt @@ -0,0 +1,50 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, basics + +******************************************************************************* + Git Basics +******************************************************************************* + +Getting a Git repository +======================== + +Initializing repo in an existing directory +------------------------------------------ + +.. code-block:: shell + + git init + +Cloning an existing repo +------------------------ + + +.. code-block:: shell + + git clone https://github.com/edu-python-course/edu-python-course.github.io + +That creates a directory named *edu-python-course.github.io*, initializes a +*.git* directory inside it, pulls down all the data for that repository, +and checks out a working copy of the latest version. + +.. code-block:: shell + + git clone https://github.com/edu-python-course/edu-python-course.github.io python-course + +That command does the same thing as the previous one, but the target directory +is called *python-course*. + +Git has a number of different transfer protocols you can use. The previous +example uses the ``https://`` protocol, but you may also see ``git://`` or +``user@server:path/to/repo.git``, which uses the SSH transfer protocol. + +.. todo: + Describe committing changes process + +.. todo: + Describe branching + +.. todo: + Describe merging and cherry-pick diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 9848f53b1..8eb849574 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -12,3 +12,4 @@ intro setup + basics From 746e387b49fc1e5a2f9ba08a52e6c8cfd9eca56e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 01:23:18 +0300 Subject: [PATCH 142/689] Add github document --- src/vcs/github.txt | 8 ++++++++ src/vcs/index.txt | 1 + 2 files changed, 9 insertions(+) create mode 100644 src/vcs/github.txt diff --git a/src/vcs/github.txt b/src/vcs/github.txt new file mode 100644 index 000000000..9d32362e0 --- /dev/null +++ b/src/vcs/github.txt @@ -0,0 +1,8 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, github + +******************************************************************************* + GitHub +******************************************************************************* diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 8eb849574..1e36643bb 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,3 +13,4 @@ intro setup basics + github From c889b2c4c2c1713d8333e41d50783beaedb901fd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 01:44:00 +0300 Subject: [PATCH 143/689] Add GitHub account creation section, adjust todos --- src/vcs/github.txt | 17 +++++++++++++++++ src/vcs/setup.txt | 3 --- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/vcs/github.txt b/src/vcs/github.txt index 9d32362e0..2b2b23c19 100644 --- a/src/vcs/github.txt +++ b/src/vcs/github.txt @@ -3,6 +3,23 @@ :author: Serhii Horodilov :keywords: version, control, system, vcs, git, github +.. _GitHub: https://github.com + ******************************************************************************* GitHub ******************************************************************************* + +`GitHub`_ is the single largest host for Git repositories, and is the central +point of collaboration for millions of developers and projects. + + +Account setup and configuration +=============================== + +The first thing you need to do is set up a free user account. Visit `GitHub`_ +and press "Sign Up" button. The GitHub will lead you through the account +creation process. Just follow the hints and provide an email address, username +and a strong password. + +.. todo: + Describe SSH key generation and set up diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index b2c996449..c959359ce 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -48,6 +48,3 @@ information. git config --global user.name "John Doe" git config --global user.email johndoe@example.com - -.. todo: - Add SSH setup From 42a1399b06594ffd30ab90632c739f43b9987991 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 12:16:09 +0300 Subject: [PATCH 144/689] Update getting repository section --- src/vcs/basics.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 95f03c634..1973f4105 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -10,16 +10,52 @@ Getting a Git repository ======================== +You typically obtain a Git repository in one of two ways: + +#. You can take a local directory that is currently not under version control, + and turn it into a Git repository. +#. You can clone an existing Git repository from elsewhere. + +In either case, you end up with a Git repository on your local machine, +ready for work. + Initializing repo in an existing directory ------------------------------------------ +If you have a project directory that is currently not under version control and +you want to start controlling it with Git, you first need to go to that +project's directory. If you've never done this, it looks a little different +depending on which system you're running: + +.. code-block:: shell + :caption: Change directory in bash (Linux) + + cd /home/user/project + +.. code-block:: shell + :caption: Change directory in bash (MacOS) + + cd /Users/user/project + +.. code-block:: powershell + :caption: Change directory in PowerShell (Windows) + + cd C:\Users\user\project + +In the project's directory initialize a new Git repository. + .. code-block:: shell git init +This creates a new subdirectory named .git that contains all of your necessary +repository files -- a Git repository skeleton. + Cloning an existing repo ------------------------ +If you want to get a copy of an existing Git repository -- for example, +a project you'd like to contribute to -- the command you need is ``git clone``. .. code-block:: shell From e1d93368f33be7492f95f406133657617669165b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 14:41:53 +0300 Subject: [PATCH 145/689] Add making changes section Described status check and files staging. --- src/vcs/basics.txt | 120 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 1973f4105..535daa85a 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -76,8 +76,126 @@ Git has a number of different transfer protocols you can use. The previous example uses the ``https://`` protocol, but you may also see ``git://`` or ``user@server:path/to/repo.git``, which uses the SSH transfer protocol. +Making changes to the repo +========================== + +At this point, you should have a *bona fide* Git repository on your local +machine, and a checkout or *working copy* of all of its files in front of you. +Typically, you'll want to start making changes and committing snapshots of +those changes into your repository each time the project reaches a state you +want to record. + +Remember that each file in your working directory can be in one of two states: +**tracked** or **untracked**. + +- Tracked files are files that were in the last snapshot, as well as any + newly staged files; they can be unmodified, modified, or staged. In short, + tracked files are files that Git knows about. +- Untracked files are everything else -- any files in your working directory + that were not in your last snapshot and are not in your staging area. + Untracked basically means that Git sees a file you didn't have in + a previous snapshot (commit), and which hasn't been yet staged. + +.. mermaid:: /../assets/mermaid/git-lifecycle.mmd + :align: center + :caption: The lifecycle of the status of repo's files + +Checking out status of the file(s) +---------------------------------- + +The main tool you use to determine which files are in which state is +the ``git status`` command. + +.. code-block:: shell + + $ # check status + $ git status + On branch devel + + No commits yet + + nothing to commit (create/copy files and use "git add" to track) + + $ # add file to the repository + $ echo "# Project Title" > README.md + $ # check status once again + $ git status + On branch devel + + No commits yet + + Untracked files: + (use "git add ..." to include in what will be committed) + README.md + + nothing added to commit but untracked files present (use "git add" to track) + +Newly added *README.md* file is untracked, because it's under "Untracked files" +heading the status output. + +Tracking new files +------------------ + +In order to begin tracking a new file, you use the ``git add`` command. + +.. code-block:: shell + + $ git add README.md + $ git status + On branch devel + + No commits yet + + Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: README.md + +From now *README.md* file is **added** to the stage area and ready to be +committed (is under "Changes to be committed" heading). + +.. hint:: + You can use wildcards, to stage multiple files at once. The most common + use cases is to add **all** modified files, or files inside of a specific + directory. + + .. code-block:: shell + + git add * # stage all changes + git add . # stage all changes in current directory + git add docs # stage all changes in "docs" directory + +Staging modified files +---------------------- + +If a staged (or already committed) file has been changed, it will be moved +under "Modified" heading. These changes wouldn't be committed unless they are +staged. + +.. code-block:: shell + + $ git status + On branch devel + + No commits yet + + Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: README.md + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: README.md + +- Changes may be added to the stage area by repeating ``git add`` command. +- Changes may be discard by ``git restore `` command. This action will + restore file to its **staged** version. + +.. todo: + Ignoring files + .. todo: - Describe committing changes process + Committing changes .. todo: Describe branching From c81f20bbf0405cafc8a02ef64b1ac08078935d2f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 15:04:48 +0300 Subject: [PATCH 146/689] Add git ignore section --- src/vcs/basics.txt | 82 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 535daa85a..0ad233857 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -191,8 +191,86 @@ staged. - Changes may be discard by ``git restore `` command. This action will restore file to its **staged** version. -.. todo: - Ignoring files +Ignoring files +-------------- + +Often, there is a class of files, that should not be a part of a repo. You +want these files to be prevent from being automatically added or even shown +as being untracked. These are generally files produced by loggers or a build +system, or some local settings for the project that shouldn't be shared across +other developers or maintainers. In such cases you can create a *.gitignore* +file. Here is the content of *.gitignore* used in current repository: + +:: + + # virtual environment + /.venv/ + /.env/ + /venv/ + /env/ + + # node packages + /node_modules/ + + # ide configs + /.vscode/ + /.idea/ + + # emacs cache and backup files + \#* + *~ + + # temporary files storage + /temp/ + /tmp/ + + # documentation builds + _builds/ + _build/ + builds/ + build/ + + # translation object files + *.pot + *.mo + +These lines mean: + +- Content within directories named ".venv", ".env", "venv" or "env" + will be ignored completely. +- Content within "node_modules" directory will be ignored completely. +- Any files within directories named ".vscode" or ".idea" will be ignored + completely. +- Any file with name starting with hash (#) will be ignored. +- Any file with name ending with tilda (~) will be ignored. +- Content within directories named "temp" or "tmp" will be ignored + completely. +- Content within directories named "_builds", "_build", "builds" or + "build" will be ignored completely. +- Any file with name ending with ".pot" will be ignored. +- Any file with name ending with ".mo" will be ignored. + +Setting up a *.gitignore* file for your new repository before you get going is +generally a good idea so you don't accidentally commit files that you really +don't want in your Git repository. + +The rules for the patterns you can put in the *.gitignore* file are as follows: + +- Blank lines or lines starting with # are ignored. +- Standard glob patterns work, and will be applied recursively throughout + the entire working tree. +- You can start patterns with a forward slash (/) to avoid recursive + inclusion. +- You can end patterns with a forward slash (/) to specify a directory. +- You can negate a pattern by starting it with an exclamation point (!). + +Glob patterns are like simplified regular expressions that shells use. +An asterisk (\*) matches zero or more characters; [ab] matches any character +inside the brackets (in this case a or b); a question mark (?) matches +a single character; and brackets enclosing characters separated by a hyphen +([0-9]) matches any character between them (in this case 0 through 9). +You can also use two asterisks to match nested directories; +a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. .. todo: Committing changes From ad34ed25b8ed46a8e35abe75a2cf304d54fde958 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 15:31:25 +0300 Subject: [PATCH 147/689] Add committing changes section --- src/vcs/basics.txt | 71 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 0ad233857..cafcea58d 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -191,6 +191,74 @@ staged. - Changes may be discard by ``git restore `` command. This action will restore file to its **staged** version. +Committing changes +------------------ + +Now that the stage area is set up the way required, it's time to commit +changes. Remember that anything that is still unstaged -- any files you +have created or modified that you haven't run git add on since you edited +them -- won't go into this commit. + +The simplest way to commit is to type ``git commit``: + +.. code-block:: shell + + git commit + +Doing so launches your editor of choice. + +.. note:: + This is set by your shell’s EDITOR environment variable -- usually vim or + emacs, although you can configure it with whatever you want using + the ``git config --global core.editor`` + +Alternatively, you can type your commit message inline with the ``commit`` +command by specifying it after a ``-m`` flag, like this: + +.. code-block:: shell + + git commit -m "Add GitHub workflow to test Sphinx builds for PRs to devel" + +Although it can be amazingly useful for crafting commits exactly how you want +them, the staging area is sometimes a bit more complex than you need in your +workflow. If you want to skip the staging area, Git provides a simple shortcut. +Adding the ``-a`` option to the ``git commit`` command makes Git automatically +stage every file that is already tracked before doing the commit, letting you +skip the git add part: + +.. code-block:: shell + + $ git status + On branch devel + + No commits yet + + Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: README.md + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: README.md + + Untracked files: + (use "git add ..." to include in what will be committed) + example.json + + $ git commit -a -m "Commit tracked files" + [devel (root-commit) 7acb7a1] Commit tracked files + 1 file changed, 3 insertions(+) + create mode 100644 README.md + + $ git status + On branch devel + Untracked files: + (use "git add ..." to include in what will be committed) + example.json + + nothing added to commit but untracked files present (use "git add" to track) + Ignoring files -------------- @@ -272,9 +340,6 @@ a single character; and brackets enclosing characters separated by a hyphen You can also use two asterisks to match nested directories; a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. -.. todo: - Committing changes - .. todo: Describe branching From 1cb34c07c7ddc31439129f09c23ca41a968810c8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 16:37:49 +0300 Subject: [PATCH 148/689] Add branching and merging document --- src/vcs/basics.txt | 6 ------ src/vcs/branch.txt | 17 +++++++++++++++++ src/vcs/index.txt | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 src/vcs/branch.txt diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index cafcea58d..a4ba046fb 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -339,9 +339,3 @@ a single character; and brackets enclosing characters separated by a hyphen ([0-9]) matches any character between them (in this case 0 through 9). You can also use two asterisks to match nested directories; a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. - -.. todo: - Describe branching - -.. todo: - Describe merging and cherry-pick diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt new file mode 100644 index 000000000..ad5a4842d --- /dev/null +++ b/src/vcs/branch.txt @@ -0,0 +1,17 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, branch, merge, cherry-pick + +******************************************************************************* + Branches and Merging +******************************************************************************* + +.. todo: + Add merge section + +.. todo: + Add rebase section + +.. todo: + Describe merging and cherry-pick diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 1e36643bb..e39ae9e5d 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,4 +13,5 @@ intro setup basics + branch github From 7b76b13eec942407345447b2fc224350ee46fa6c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:03:03 +0300 Subject: [PATCH 149/689] Add base branch description and diagrams --- assets/img/git-commits.svg | 109 +++++++++++++++++++++++++++++++++ assets/mermaid/git-commits.mmd | 9 +++ src/vcs/branch.txt | 23 +++++++ 3 files changed, 141 insertions(+) create mode 100644 assets/img/git-commits.svg create mode 100644 assets/mermaid/git-commits.mmd diff --git a/assets/img/git-commits.svg b/assets/img/git-commits.svg new file mode 100644 index 000000000..6f9c9917b --- /dev/null +++ b/assets/img/git-commits.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + 383a7630 + + + + + + + 1c060f79 + + + + + + + 1fe791ec + + + + + + + 01cda149 + + + + + + + testing + + + + + + + master + + + + + + + develop + + + + + + + + + + + + + + + diff --git a/assets/mermaid/git-commits.mmd b/assets/mermaid/git-commits.mmd new file mode 100644 index 000000000..a5dddb195 --- /dev/null +++ b/assets/mermaid/git-commits.mmd @@ -0,0 +1,9 @@ +gitGraph: + commit id: "Initial commit" + commit id: "383a7630" type: HIGHLIGHT + branch develop + commit id: "1fe791ec" + branch testing + commit id: "01cda149" + checkout main + commit id: "1c060f79" diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index ad5a4842d..23810dacc 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -7,6 +7,29 @@ Branches and Merging ******************************************************************************* +To really understand the way Git does branching, we need to take a step back +and examine how Git stores its data. Git doesn't store data as a series of +changesets or differences, but instead as a series of snapshots. When you make +a commit, Git stores a commit object that contains a pointer to the snapshot +of the content you staged. This object also contains the author’s name and +email address, the message that you typed, and pointers to the commit or +commits that directly came before this commit (its parent or parents): +zero parents for the initial commit, one parent for a normal commit, +and multiple parents for a commit that results from a merge of two or more +branches. + +.. figure:: /../assets/img/git-commits.svg + :align: center + +.. mermaid:: /../assets/mermaid/git-commits.mmd + :align: center + :caption: Commits tree + +A branch in Git is simply a lightweight movable pointer to one of these +commits. The default branch name in Git is master. As you start making commits, +you're given a master branch that points to the last commit you made. +Every time you commit, the master branch pointer moves forward automatically. + .. todo: Add merge section From 8d5fb053e81a04fdfacaa11491763b2354da3b39 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:12:29 +0300 Subject: [PATCH 150/689] Add git merge diagrams --- assets/mermaid/git-merge-1.mmd | 7 +++++++ assets/mermaid/git-merge-2.mmd | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100644 assets/mermaid/git-merge-1.mmd create mode 100644 assets/mermaid/git-merge-2.mmd diff --git a/assets/mermaid/git-merge-1.mmd b/assets/mermaid/git-merge-1.mmd new file mode 100644 index 000000000..0da962d84 --- /dev/null +++ b/assets/mermaid/git-merge-1.mmd @@ -0,0 +1,7 @@ +gitGraph + commit id: "Initial commit" + branch feature + commit + commit + checkout main + merge feature \ No newline at end of file diff --git a/assets/mermaid/git-merge-2.mmd b/assets/mermaid/git-merge-2.mmd new file mode 100644 index 000000000..1d263df70 --- /dev/null +++ b/assets/mermaid/git-merge-2.mmd @@ -0,0 +1,8 @@ +gitGraph + commit id: "Initial commit" + branch feature + commit + commit + checkout main + commit + merge feature id: "Merge commit" type:NORMAL \ No newline at end of file From 32246b8b0442b0bcd42cc31553b6d4c6acce3783 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:16:39 +0300 Subject: [PATCH 151/689] Add git rebase diagrams --- assets/mermaid/git-rebase-1.mmd | 9 +++++++++ assets/mermaid/git-rebase-2.mmd | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 assets/mermaid/git-rebase-1.mmd create mode 100644 assets/mermaid/git-rebase-2.mmd diff --git a/assets/mermaid/git-rebase-1.mmd b/assets/mermaid/git-rebase-1.mmd new file mode 100644 index 000000000..de7705d30 --- /dev/null +++ b/assets/mermaid/git-rebase-1.mmd @@ -0,0 +1,9 @@ +gitGraph + commit id: "Initial commit" + branch feature + checkout main + commit + commit + checkout feature + commit + commit \ No newline at end of file diff --git a/assets/mermaid/git-rebase-2.mmd b/assets/mermaid/git-rebase-2.mmd new file mode 100644 index 000000000..afcc89f18 --- /dev/null +++ b/assets/mermaid/git-rebase-2.mmd @@ -0,0 +1,8 @@ +gitGraph + commit id: "Initial commit" + commit + commit + branch feature + checkout feature + commit + commit \ No newline at end of file From 86dc296b8b183cdccf84e7716b9fc31ed6ec3883 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:17:24 +0300 Subject: [PATCH 152/689] Working on merge and rebase sections --- src/vcs/branch.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 23810dacc..29089e414 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -33,8 +33,24 @@ Every time you commit, the master branch pointer moves forward automatically. .. todo: Add merge section +.. mermaid:: /../assets/mermaid/git-merge-1.mmd + :align: center + :caption: Fast-forward merge + +.. mermaid:: /../assets/mermaid/git-merge-2.mmd + :align: center + :caption: Merge commit + .. todo: Add rebase section +.. mermaid:: /../assets/mermaid/git-rebase-1.mmd + :align: center + :caption: Before rebase + +.. mermaid:: /../assets/mermaid/git-rebase-2.mmd + :align: center + :caption: After rebase + .. todo: Describe merging and cherry-pick From 93503b1854e2e076127b7321ba6011c1c81a99d3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:27:30 +0300 Subject: [PATCH 153/689] Add git cherry-pick diagram --- assets/mermaid/git-cherry-pick.mmd | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 assets/mermaid/git-cherry-pick.mmd diff --git a/assets/mermaid/git-cherry-pick.mmd b/assets/mermaid/git-cherry-pick.mmd new file mode 100644 index 000000000..29790cd8b --- /dev/null +++ b/assets/mermaid/git-cherry-pick.mmd @@ -0,0 +1,18 @@ +gitGraph + commit id: "Initial commit" + branch develop + checkout main + commit + checkout develop + commit + checkout main + commit + checkout develop + commit id: "Important commit" + checkout main + commit + checkout develop + commit + checkout main + cherry-pick id: "Important commit" + commit From 737af72c313ed463412888ac6255637e0a203c36 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:32:53 +0300 Subject: [PATCH 154/689] Move mermaid diagrams to a dedicated folder (git) --- .../{git-cherry-pick.mmd => git/cherry-pick.mmd} | 0 assets/mermaid/{git-commits.mmd => git/commits.mmd} | 0 assets/mermaid/{ => git}/gitflow.mmd | 0 .../mermaid/{git-lifecycle.mmd => git/lifecycle.mmd} | 0 assets/mermaid/{git-merge-1.mmd => git/merge-1.mmd} | 0 assets/mermaid/{git-merge-2.mmd => git/merge-2.mmd} | 0 assets/mermaid/{git-rebase-1.mmd => git/rebase-1.mmd} | 0 assets/mermaid/{git-rebase-2.mmd => git/rebase-2.mmd} | 0 assets/mermaid/{git-states.mmd => git/states.mmd} | 0 src/vcs/basics.txt | 2 +- src/vcs/branch.txt | 10 +++++----- src/vcs/intro.txt | 2 +- 12 files changed, 7 insertions(+), 7 deletions(-) rename assets/mermaid/{git-cherry-pick.mmd => git/cherry-pick.mmd} (100%) rename assets/mermaid/{git-commits.mmd => git/commits.mmd} (100%) rename assets/mermaid/{ => git}/gitflow.mmd (100%) rename assets/mermaid/{git-lifecycle.mmd => git/lifecycle.mmd} (100%) rename assets/mermaid/{git-merge-1.mmd => git/merge-1.mmd} (100%) rename assets/mermaid/{git-merge-2.mmd => git/merge-2.mmd} (100%) rename assets/mermaid/{git-rebase-1.mmd => git/rebase-1.mmd} (100%) rename assets/mermaid/{git-rebase-2.mmd => git/rebase-2.mmd} (100%) rename assets/mermaid/{git-states.mmd => git/states.mmd} (100%) diff --git a/assets/mermaid/git-cherry-pick.mmd b/assets/mermaid/git/cherry-pick.mmd similarity index 100% rename from assets/mermaid/git-cherry-pick.mmd rename to assets/mermaid/git/cherry-pick.mmd diff --git a/assets/mermaid/git-commits.mmd b/assets/mermaid/git/commits.mmd similarity index 100% rename from assets/mermaid/git-commits.mmd rename to assets/mermaid/git/commits.mmd diff --git a/assets/mermaid/gitflow.mmd b/assets/mermaid/git/gitflow.mmd similarity index 100% rename from assets/mermaid/gitflow.mmd rename to assets/mermaid/git/gitflow.mmd diff --git a/assets/mermaid/git-lifecycle.mmd b/assets/mermaid/git/lifecycle.mmd similarity index 100% rename from assets/mermaid/git-lifecycle.mmd rename to assets/mermaid/git/lifecycle.mmd diff --git a/assets/mermaid/git-merge-1.mmd b/assets/mermaid/git/merge-1.mmd similarity index 100% rename from assets/mermaid/git-merge-1.mmd rename to assets/mermaid/git/merge-1.mmd diff --git a/assets/mermaid/git-merge-2.mmd b/assets/mermaid/git/merge-2.mmd similarity index 100% rename from assets/mermaid/git-merge-2.mmd rename to assets/mermaid/git/merge-2.mmd diff --git a/assets/mermaid/git-rebase-1.mmd b/assets/mermaid/git/rebase-1.mmd similarity index 100% rename from assets/mermaid/git-rebase-1.mmd rename to assets/mermaid/git/rebase-1.mmd diff --git a/assets/mermaid/git-rebase-2.mmd b/assets/mermaid/git/rebase-2.mmd similarity index 100% rename from assets/mermaid/git-rebase-2.mmd rename to assets/mermaid/git/rebase-2.mmd diff --git a/assets/mermaid/git-states.mmd b/assets/mermaid/git/states.mmd similarity index 100% rename from assets/mermaid/git-states.mmd rename to assets/mermaid/git/states.mmd diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index a4ba046fb..bbb997b71 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -96,7 +96,7 @@ Remember that each file in your working directory can be in one of two states: Untracked basically means that Git sees a file you didn't have in a previous snapshot (commit), and which hasn't been yet staged. -.. mermaid:: /../assets/mermaid/git-lifecycle.mmd +.. mermaid:: /../assets/mermaid/git/lifecycle.mmd :align: center :caption: The lifecycle of the status of repo's files diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 29089e414..9929703d5 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -21,7 +21,7 @@ branches. .. figure:: /../assets/img/git-commits.svg :align: center -.. mermaid:: /../assets/mermaid/git-commits.mmd +.. mermaid:: /../assets/mermaid/git/commits.mmd :align: center :caption: Commits tree @@ -33,22 +33,22 @@ Every time you commit, the master branch pointer moves forward automatically. .. todo: Add merge section -.. mermaid:: /../assets/mermaid/git-merge-1.mmd +.. mermaid:: /../assets/mermaid/git/merge-1.mmd :align: center :caption: Fast-forward merge -.. mermaid:: /../assets/mermaid/git-merge-2.mmd +.. mermaid:: /../assets/mermaid/git/merge-2.mmd :align: center :caption: Merge commit .. todo: Add rebase section -.. mermaid:: /../assets/mermaid/git-rebase-1.mmd +.. mermaid:: /../assets/mermaid/git/rebase-1.mmd :align: center :caption: Before rebase -.. mermaid:: /../assets/mermaid/git-rebase-2.mmd +.. mermaid:: /../assets/mermaid/git/rebase-2.mmd :align: center :caption: After rebase diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt index d09164707..3a8573d25 100644 --- a/src/vcs/intro.txt +++ b/src/vcs/intro.txt @@ -68,7 +68,7 @@ Git has three main states that your files can reside in: to go into your next commit snapshot. - Committed means that the data is safely stored in your local database. -.. mermaid:: /../assets/mermaid/git-states.mmd +.. mermaid:: /../assets/mermaid/git/states.mmd :align: center From d1583633ba554f55d934bf896e00c997e0e87f8e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:53:37 +0300 Subject: [PATCH 155/689] Add branching strategies and GitFlow descriptions (section) --- src/vcs/branch.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 9929703d5..20242dc4c 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -54,3 +54,49 @@ Every time you commit, the master branch pointer moves forward automatically. .. todo: Describe merging and cherry-pick + +Branching strategies +==================== + +Branching strategy in version control systems defines how branches are created, +managed, and used in a project's development process. +It helps teams collaborate effectively, isolate changes, and organize +development efforts. A good branching strategy provides clarity on how to work +with branches, minimizes conflicts, and enables a smooth and structured +development workflow. + +GitFlow is a popular branching strategy that provides a well-defined model for +managing branches in a Git repository. It was introduced by Vincent Driessen +and is based on the idea of using two main branches: "master" and "develop." + +- **Master Branch**: The "master" branch represents the stable version of +the codebase. It should always contain production-ready code and be free from +any major issues. The "master" branch is protected, and only release versions +are merged into it. + +- **Develop Branch**: The "develop" branch is where the ongoing development +and integration of features take place. It serves as the integration branch +for various feature branches and should also contain a stable version of +the code. + +- **Feature Branches**: For each new feature or bug fix, a dedicated "feature" +branch is created off the "develop" branch. These branches are short-lived and +exist only for the duration of the feature development. + +- **Release Branches**: When the development on the "develop" branch is ready +for a release, a "release" branch is created. The release branch is used +for testing, bug fixing, and preparing for deployment. + +- **Hotfix Branches**: If a critical issue is discovered in the production +version, a "hotfix" branch is created from the "master" branch. This allows +for a quick fix without affecting ongoing development on the "develop" branch. + +GitFlow provides a structured approach to managing branching in a collaborative +development environment. It ensures that the main branches remain stable, and +new features and bug fixes are integrated smoothly before being released. +This strategy is particularly useful for projects with regular releases and +a team working on multiple features concurrently. + +.. mermaid:: /../assets/mermaid/git/gitflow.mmd + :align: center + :caption: GitFlow diagram From 3cbfe8bac3f8c20e9f5bb16ebcbb59816c6fc539 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:54:09 +0300 Subject: [PATCH 156/689] Minor headings changes to branches document --- src/vcs/branch.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 20242dc4c..acf1e780c 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -7,6 +7,9 @@ Branches and Merging ******************************************************************************* +About branches +============== + To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. Git doesn't store data as a series of changesets or differences, but instead as a series of snapshots. When you make From fce2d563a728b8fb8574b17cf3091b6d71742108 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 15:13:15 +0300 Subject: [PATCH 157/689] Fix GitFlow branches list --- src/vcs/branch.txt | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index acf1e780c..1411a20bf 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -72,27 +72,24 @@ GitFlow is a popular branching strategy that provides a well-defined model for managing branches in a Git repository. It was introduced by Vincent Driessen and is based on the idea of using two main branches: "master" and "develop." -- **Master Branch**: The "master" branch represents the stable version of -the codebase. It should always contain production-ready code and be free from -any major issues. The "master" branch is protected, and only release versions -are merged into it. - -- **Develop Branch**: The "develop" branch is where the ongoing development -and integration of features take place. It serves as the integration branch -for various feature branches and should also contain a stable version of -the code. - -- **Feature Branches**: For each new feature or bug fix, a dedicated "feature" -branch is created off the "develop" branch. These branches are short-lived and -exist only for the duration of the feature development. - -- **Release Branches**: When the development on the "develop" branch is ready -for a release, a "release" branch is created. The release branch is used -for testing, bug fixing, and preparing for deployment. - -- **Hotfix Branches**: If a critical issue is discovered in the production -version, a "hotfix" branch is created from the "master" branch. This allows -for a quick fix without affecting ongoing development on the "develop" branch. +- **Master Branch**: The "master" branch represents the stable version of + the codebase. It should always contain production-ready code and be free + from any major issues. The "master" branch is protected, and only release + versions are merged into it. +- **Develop Branch**: The "develop" branch is where the ongoing development + and integration of features take place. It serves as the integration branch + for various feature branches and should also contain a stable version of + the code. +- **Feature Branches**: For each new feature or bug fix, a dedicated + "feature" branch is created off the "develop" branch. These branches are + short-lived and exist only for the duration of the feature development. +- **Release Branches**: When the development on the "develop" branch is ready + for a release, a "release" branch is created. The release branch is used + for testing, bug fixing, and preparing for deployment. +- **Hotfix Branches**: If a critical issue is discovered in the production + version, a "hotfix" branch is created from the "master" branch. This allows + for a quick fix without affecting ongoing development on the "develop" + branch. GitFlow provides a structured approach to managing branching in a collaborative development environment. It ensures that the main branches remain stable, and From b8b556933bfa5131f4b3e05db3d082bd9f25cbe2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 31 Jul 2023 14:30:54 +0300 Subject: [PATCH 158/689] Update branches document --- src/vcs/branch.txt | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 1411a20bf..61570cdfa 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -21,9 +21,6 @@ zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. -.. figure:: /../assets/img/git-commits.svg - :align: center - .. mermaid:: /../assets/mermaid/git/commits.mmd :align: center :caption: Commits tree @@ -33,6 +30,28 @@ commits. The default branch name in Git is master. As you start making commits, you're given a master branch that points to the last commit you made. Every time you commit, the master branch pointer moves forward automatically. +.. figure:: /../assets/img/git-commits.svg + :align: center + +Create branches +=============== + +There are few ways to create a new branch in a Git repository. The most common +way is to use ``git branch`` command. + +.. code-block:: shell + + git branch [parent_commit] + +Pointer to a parent commit is optional. By default the parent commit is set +to the latest one available (HEAD pointer) at the moment of the branch +creation. You can also switch to the newly created branch just after its +creation using: + +.. code-block:: shell + + git checkout -b [parent_commit] + .. todo: Add merge section From b770f21325eda043dadc31ed69051d06021eee8e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 31 Jul 2023 14:31:08 +0300 Subject: [PATCH 159/689] Add commit document (draft) --- src/vcs/commits.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/vcs/commits.txt diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt new file mode 100644 index 000000000..2d01de180 --- /dev/null +++ b/src/vcs/commits.txt @@ -0,0 +1,17 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, history, commit + +############################################################################### + Working with Commits +############################################################################### + +.. todo: + git log + +.. todo: + git checkout + +.. todo: + git tag From 27fdf9ad6d041466c5c1c8b1aae725d0885c059d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 14:41:49 +0300 Subject: [PATCH 160/689] Fix apostrophe for VCS files --- src/vcs/basics.txt | 2 +- src/vcs/branch.txt | 2 +- src/vcs/index.txt | 1 + src/vcs/intro.txt | 2 +- src/vcs/setup.txt | 4 ++-- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index bbb997b71..4d1b56763 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -208,7 +208,7 @@ The simplest way to commit is to type ``git commit``: Doing so launches your editor of choice. .. note:: - This is set by your shell’s EDITOR environment variable -- usually vim or + This is set by your shell's EDITOR environment variable -- usually vim or emacs, although you can configure it with whatever you want using the ``git config --global core.editor`` diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 61570cdfa..5b2daa8a8 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -14,7 +14,7 @@ To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. Git doesn't store data as a series of changesets or differences, but instead as a series of snapshots. When you make a commit, Git stores a commit object that contains a pointer to the snapshot -of the content you staged. This object also contains the author’s name and +of the content you staged. This object also contains the author's name and email address, the message that you typed, and pointers to the commit or commits that directly came before this commit (its parent or parents): zero parents for the initial commit, one parent for a normal commit, diff --git a/src/vcs/index.txt b/src/vcs/index.txt index e39ae9e5d..817e702fb 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,5 +13,6 @@ intro setup basics + commits branch github diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt index 3a8573d25..42dd5d6ed 100644 --- a/src/vcs/intro.txt +++ b/src/vcs/intro.txt @@ -54,7 +54,7 @@ disk, most operations seem almost instantaneous. .. rubric:: Integrity Everything in Git is checksummed before it is stored and is then referred -to by that checksum. This means it’s impossible to change the contents of +to by that checksum. This means it's impossible to change the contents of any file or directory without Git knowing about it. .. rubric:: Repository files states diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index c959359ce..b158b6ae8 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -7,7 +7,7 @@ Git Setup ******************************************************************************* -Now that you have Git on your system, you’ll want to do a few things to +Now that you have Git on your system, you'll want to do a few things to customize your Git environment. Git comes with a tool called ``git config`` that lets you get and set configuration variables that control all aspects of how Git looks and operates. These variables can be stored in three different @@ -23,7 +23,7 @@ places: by passing the ``--global`` option, and this affects all of the repositories you work with on your system. #. *config* file in the Git directory (that is, *.git/config*) of whatever - repository you’re currently using: Specific to that single repository. + repository you're currently using: Specific to that single repository. You can force Git to read from and write to this file with the ``--local`` option, but that is in fact the default. Unsurprisingly, you need to be located somewhere in a Git repository for this option to work properly. From d1f82212eedaae9f8be944fea4c4a3009552db07 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 14:42:10 +0300 Subject: [PATCH 161/689] Add translations to VSC documents --- src/_locales/uk/LC_MESSAGES/vcs.po | 981 +++++++++++++++++++++++++++++ 1 file changed, 981 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/vcs.po diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po new file mode 100644 index 000000000..8494859cb --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -0,0 +1,981 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-16 14:39+0300\n" +"PO-Revision-Date: 2023-08-16 14:45+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" + +#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 +#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 +#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 +#: ../../src/vcs/setup.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 +#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 +#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 +#: ../../src/vcs/setup.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/basics.txt:-1 +msgid "version, control, system, vcs, git, basics" +msgstr "version, control, system, vcs, git, basics" + +#: ../../src/vcs/basics.txt:8 +msgid "Git Basics" +msgstr "Основи Git" + +#: ../../src/vcs/basics.txt:11 +msgid "Getting a Git repository" +msgstr "Отримання Git-репозиторію" + +#: ../../src/vcs/basics.txt:13 +msgid "You typically obtain a Git repository in one of two ways:" +msgstr "Зазвичай ви отримуєте Git-репозиторій одним з двох способів:" + +#: ../../src/vcs/basics.txt:15 +msgid "" +"You can take a local directory that is currently not under version control, " +"and turn it into a Git repository." +msgstr "" +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " +"версій, і перетворити його на Git-репозиторій." + +#: ../../src/vcs/basics.txt:17 +msgid "You can clone an existing Git repository from elsewhere." +msgstr "Ви можете клонувати існуюче сховище Git'а з іншого місця." + +#: ../../src/vcs/basics.txt:19 +msgid "" +"In either case, you end up with a Git repository on your local machine, " +"ready for work." +msgstr "" +"У будь-якому випадку, ви отримаєте Git-репозиторій на вашій локальній " +"машині, готовий до роботи." + +#: ../../src/vcs/basics.txt:23 +msgid "Initializing repo in an existing directory" +msgstr "Ініціалізація репо в існуючому каталозі" + +#: ../../src/vcs/basics.txt:25 +msgid "" +"If you have a project directory that is currently not under version control " +"and you want to start controlling it with Git, you first need to go to that " +"project's directory. If you've never done this, it looks a little different " +"depending on which system you're running:" +msgstr "" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " +"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " +"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " +"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" + +#: ../../src/vcs/basics.txt:30 +msgid "Change directory in bash (Linux)" +msgstr "Зміна каталогу в bash (Linux)" + +#: ../../src/vcs/basics.txt:35 +msgid "Change directory in bash (MacOS)" +msgstr "Зміна каталогу в bash (MacOS)" + +#: ../../src/vcs/basics.txt:40 +msgid "Change directory in PowerShell (Windows)" +msgstr "Зміна каталогу в PowerShell (Windows)" + +#: ../../src/vcs/basics.txt:45 +msgid "In the project's directory initialize a new Git repository." +msgstr "У каталозі проекту ініціалізуйте новий Git-репозиторій." + +#: ../../src/vcs/basics.txt:51 +msgid "" +"This creates a new subdirectory named .git that contains all of your " +"necessary repository files -- a Git repository skeleton." +msgstr "" +"Це створить новий підкаталог з ім'ям .git, який міститиме всі необхідні " +"файли сховища - скелет сховища Git." + +#: ../../src/vcs/basics.txt:55 +msgid "Cloning an existing repo" +msgstr "Клонування існуючого репо" + +#: ../../src/vcs/basics.txt:57 +msgid "" +"If you want to get a copy of an existing Git repository -- for example, a " +"project you'd like to contribute to -- the command you need is ``git clone``." +msgstr "" +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " +"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." + +#: ../../src/vcs/basics.txt:64 +msgid "" +"That creates a directory named *edu-python-course.github.io*, initializes a " +"*.git* directory inside it, pulls down all the data for that repository, and " +"checks out a working copy of the latest version." +msgstr "" +"Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " +"каталог *.git* всередині нього, витягує всі дані для цього сховища і " +"перевіряє робочу копію останньої версії." + +#: ../../src/vcs/basics.txt:72 +msgid "" +"That command does the same thing as the previous one, but the target " +"directory is called *python-course*." +msgstr "" +"Ця команда робить те саме, що й попередня, але цільовий каталог називається " +"*python-course*." + +#: ../../src/vcs/basics.txt:75 +msgid "" +"Git has a number of different transfer protocols you can use. The previous " +"example uses the ``https://`` protocol, but you may also see ``git://`` or " +"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." +msgstr "" +"Git має декілька різних протоколів передачі даних, які ви можете " +"використовувати. У попередньому прикладі використовується протокол ``https://" +"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." +"git``, який використовує протокол передачі SSH." + +#: ../../src/vcs/basics.txt:80 +msgid "Making changes to the repo" +msgstr "Внесення змін до репозиторію" + +#: ../../src/vcs/basics.txt:82 +msgid "" +"At this point, you should have a *bona fide* Git repository on your local " +"machine, and a checkout or *working copy* of all of its files in front of " +"you. Typically, you'll want to start making changes and committing snapshots " +"of those changes into your repository each time the project reaches a state " +"you want to record." +msgstr "" +"На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " +"комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " +"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " +"зафіксувати." + +#: ../../src/vcs/basics.txt:88 +msgid "" +"Remember that each file in your working directory can be in one of two " +"states: **tracked** or **untracked**." +msgstr "" +"Пам'ятайте, що кожен файл у вашому робочому каталозі може перебувати в " +"одному з двох станів: **відстежується** або **невідстежується**." + +#: ../../src/vcs/basics.txt:91 +msgid "" +"Tracked files are files that were in the last snapshot, as well as any newly " +"staged files; they can be unmodified, modified, or staged. In short, tracked " +"files are files that Git knows about." +msgstr "" +"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" +"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " +"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " +"Git'у." + +#: ../../src/vcs/basics.txt:94 +msgid "" +"Untracked files are everything else -- any files in your working directory " +"that were not in your last snapshot and are not in your staging area. " +"Untracked basically means that Git sees a file you didn't have in a previous " +"snapshot (commit), and which hasn't been yet staged." +msgstr "" +"Невідстежені файли - це все інше - будь-які файли у вашому робочому " +"каталозі, яких не було у вашому останньому знімку і які не перебувають у " +"вашій області сховища. По суті, це означає, що Git бачить файл, якого не " +"було у попередньому знімку (комміті), і який ще не було покладено у сховище." + +#: ../../src/vcs/basics.txt:104 +msgid "Checking out status of the file(s)" +msgstr "Перевірка стану файлу(ів)" + +#: ../../src/vcs/basics.txt:106 +msgid "" +"The main tool you use to determine which files are in which state is the " +"``git status`` command." +msgstr "" +"Основним інструментом для визначення стану файлів є команда ``git status``." + +#: ../../src/vcs/basics.txt:133 +msgid "" +"Newly added *README.md* file is untracked, because it's under \"Untracked " +"files\" heading the status output." +msgstr "" +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " +"розділі \"Файли, що не відстежуються\" у виведенні статусу." + +#: ../../src/vcs/basics.txt:137 +msgid "Tracking new files" +msgstr "Відстеження нових файлів" + +#: ../../src/vcs/basics.txt:139 +msgid "In order to begin tracking a new file, you use the ``git add`` command." +msgstr "" +"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " +"add``." + +#: ../../src/vcs/basics.txt:153 +msgid "" +"From now *README.md* file is **added** to the stage area and ready to be " +"committed (is under \"Changes to be committed\" heading)." +msgstr "" +"Відтепер файл *README.md* **додано** до області сцени і він готовий до " +"фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." + +#: ../../src/vcs/basics.txt:157 +msgid "" +"You can use wildcards, to stage multiple files at once. The most common use " +"cases is to add **all** modified files, or files inside of a specific " +"directory." +msgstr "" +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " +"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " +"змінених файлів або файлів у певному каталозі." + +#: ../../src/vcs/basics.txt:168 +msgid "Staging modified files" +msgstr "Зберігання змінених файлів" + +#: ../../src/vcs/basics.txt:170 +msgid "" +"If a staged (or already committed) file has been changed, it will be moved " +"under \"Modified\" heading. These changes wouldn't be committed unless they " +"are staged." +msgstr "" +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " +"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " +"вони не були поетапними." + +#: ../../src/vcs/basics.txt:190 +msgid "" +"Changes may be added to the stage area by repeating ``git add`` command." +msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." + +#: ../../src/vcs/basics.txt:191 +msgid "" +"Changes may be discard by ``git restore `` command. This action will " +"restore file to its **staged** version." +msgstr "" +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " +"до його **попередньої** версії." + +#: ../../src/vcs/basics.txt:195 +msgid "Committing changes" +msgstr "Фіксація змін" + +#: ../../src/vcs/basics.txt:197 +msgid "" +"Now that the stage area is set up the way required, it's time to commit " +"changes. Remember that anything that is still unstaged -- any files you have " +"created or modified that you haven't run git add on since you edited them -- " +"won't go into this commit." +msgstr "" +"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " +"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " +"створили або змінили, але не запустили git-додаток з моменту редагування, - " +"не потраплять до цього коміту." + +#: ../../src/vcs/basics.txt:202 +msgid "The simplest way to commit is to type ``git commit``:" +msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" + +#: ../../src/vcs/basics.txt:208 +msgid "Doing so launches your editor of choice." +msgstr "Після цього запуститься обраний вами редактор." + +#: ../../src/vcs/basics.txt:211 +msgid "" +"This is set by your shell's EDITOR environment variable -- usually vim or " +"emacs, although you can configure it with whatever you want using the ``git " +"config --global core.editor``" +msgstr "" +"Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" +"global core.editor``" + +#: ../../src/vcs/basics.txt:215 +msgid "" +"Alternatively, you can type your commit message inline with the ``commit`` " +"command by specifying it after a ``-m`` flag, like this:" +msgstr "" +"Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " +"``commit``, вказавши його після прапорця ``-m``, як показано нижче:" + +#: ../../src/vcs/basics.txt:222 +msgid "" +"Although it can be amazingly useful for crafting commits exactly how you " +"want them, the staging area is sometimes a bit more complex than you need in " +"your workflow. If you want to skip the staging area, Git provides a simple " +"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " +"automatically stage every file that is already tracked before doing the " +"commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " +"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " +"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " +"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " +"commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " +"git add:" + +#: ../../src/vcs/basics.txt:263 +msgid "Ignoring files" +msgstr "Ігнорування файлів" + +#: ../../src/vcs/basics.txt:265 +msgid "" +"Often, there is a class of files, that should not be a part of a repo. You " +"want these files to be prevent from being automatically added or even shown " +"as being untracked. These are generally files produced by loggers or a build " +"system, or some local settings for the project that shouldn't be shared " +"across other developers or maintainers. In such cases you can create a *." +"gitignore* file. Here is the content of *.gitignore* used in current " +"repository:" +msgstr "" +"Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " +"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"системою збірки, або деякі локальні налаштування проекту, які не повинні " +"бути доступними для інших розробників або супровідників. У таких випадках ви " +"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"використовується у поточному сховищі:" + +#: ../../src/vcs/basics.txt:305 +msgid "These lines mean:" +msgstr "Ці рядки означають:" + +#: ../../src/vcs/basics.txt:307 +msgid "" +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " +"will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " +"повністю проігноровано." + +#: ../../src/vcs/basics.txt:309 +msgid "Content within \"node_modules\" directory will be ignored completely." +msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:310 +msgid "" +"Any files within directories named \".vscode\" or \".idea\" will be ignored " +"completely." +msgstr "" +"Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " +"повністю проігноровані." + +#: ../../src/vcs/basics.txt:312 +msgid "Any file with name starting with hash (#) will be ignored." +msgstr "" +"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." + +#: ../../src/vcs/basics.txt:313 +msgid "Any file with name ending with tilda (~) will be ignored." +msgstr "" +"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." + +#: ../../src/vcs/basics.txt:314 +msgid "" +"Content within directories named \"temp\" or \"tmp\" will be ignored " +"completely." +msgstr "" +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:316 +msgid "" +"Content within directories named \"_builds\", \"_build\", \"builds\" or " +"\"build\" will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " +"буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:318 +msgid "Any file with name ending with \".pot\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." + +#: ../../src/vcs/basics.txt:319 +msgid "Any file with name ending with \".mo\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." + +#: ../../src/vcs/basics.txt:321 +msgid "" +"Setting up a *.gitignore* file for your new repository before you get going " +"is generally a good idea so you don't accidentally commit files that you " +"really don't want in your Git repository." +msgstr "" +"Створення файлу *.gitignore* для вашого нового сховища перед початком " +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " +"вам насправді не потрібні у вашому Git-репозиторії." + +#: ../../src/vcs/basics.txt:325 +msgid "" +"The rules for the patterns you can put in the *.gitignore* file are as " +"follows:" +msgstr "" +"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" + +#: ../../src/vcs/basics.txt:327 +msgid "Blank lines or lines starting with # are ignored." +msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." + +#: ../../src/vcs/basics.txt:328 +msgid "" +"Standard glob patterns work, and will be applied recursively throughout the " +"entire working tree." +msgstr "" +"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " +"по всьому робочому дереву." + +#: ../../src/vcs/basics.txt:330 +msgid "" +"You can start patterns with a forward slash (/) to avoid recursive inclusion." +msgstr "" +"Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " +"похилої риски (/)." + +#: ../../src/vcs/basics.txt:332 +msgid "You can end patterns with a forward slash (/) to specify a directory." +msgstr "" +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." + +#: ../../src/vcs/basics.txt:333 +msgid "You can negate a pattern by starting it with an exclamation point (!)." +msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." + +#: ../../src/vcs/basics.txt:335 +msgid "" +"Glob patterns are like simplified regular expressions that shells use. An " +"asterisk (\\*) matches zero or more characters; [ab] matches any character " +"inside the brackets (in this case a or b); a question mark (?) matches a " +"single character; and brackets enclosing characters separated by a hyphen " +"([0-9]) matches any character between them (in this case 0 through 9). You " +"can also use two asterisks to match nested directories; a/\\*\\*/z would " +"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " +"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " +"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " +"(?) відповідає одному символу; а дужки, що містять символи, розділені " +"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " +"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " +"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." + +#: ../../src/vcs/branch.txt:-1 +msgid "version, control, system, vcs, git, branch, merge, cherry-pick" +msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" + +#: ../../src/vcs/branch.txt:8 +msgid "Branches and Merging" +msgstr "Гілки та злиття" + +#: ../../src/vcs/branch.txt:11 +msgid "About branches" +msgstr "Про гілки" + +#: ../../src/vcs/branch.txt:13 +msgid "" +"To really understand the way Git does branching, we need to take a step back " +"and examine how Git stores its data. Git doesn't store data as a series of " +"changesets or differences, but instead as a series of snapshots. When you " +"make a commit, Git stores a commit object that contains a pointer to the " +"snapshot of the content you staged. This object also contains the author's " +"name and email address, the message that you typed, and pointers to the " +"commit or commits that directly came before this commit (its parent or " +"parents): zero parents for the initial commit, one parent for a normal " +"commit, and multiple parents for a commit that results from a merge of two " +"or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " +"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " +"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " +"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " +"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " +"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " +"на комміт або комміти, які безпосередньо передували цьому комміту (його " +"батька або батьків): нульовий батько для початкового комміту, один батько " +"для звичайного комміту і кілька батьків для комміту, який є результатом " +"злиття двох або більше гілок." + +#: ../../src/vcs/branch.txt:28 +msgid "" +"A branch in Git is simply a lightweight movable pointer to one of these " +"commits. The default branch name in Git is master. As you start making " +"commits, you're given a master branch that points to the last commit you " +"made. Every time you commit, the master branch pointer moves forward " +"automatically." +msgstr "" +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " +"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " +"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " +"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " +"пересувається вперед." + +#: ../../src/vcs/branch.txt:37 +msgid "Create branches" +msgstr "Створення гілок" + +#: ../../src/vcs/branch.txt:39 +msgid "" +"There are few ways to create a new branch in a Git repository. The most " +"common way is to use ``git branch`` command." +msgstr "" +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " +"них - використання команди ``git branch``." + +#: ../../src/vcs/branch.txt:46 +msgid "" +"Pointer to a parent commit is optional. By default the parent commit is set " +"to the latest one available (HEAD pointer) at the moment of the branch " +"creation. You can also switch to the newly created branch just after its " +"creation using:" +msgstr "" +"Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " +"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " +"на момент створення гілки. Ви також можете переключитися на новостворену " +"гілку одразу після її створення за допомогою:" + +#: ../../src/vcs/branch.txt:81 +msgid "Branching strategies" +msgstr "Стратегії розгалуження" + +#: ../../src/vcs/branch.txt:83 +msgid "" +"Branching strategy in version control systems defines how branches are " +"created, managed, and used in a project's development process. It helps " +"teams collaborate effectively, isolate changes, and organize development " +"efforts. A good branching strategy provides clarity on how to work with " +"branches, minimizes conflicts, and enables a smooth and structured " +"development workflow." +msgstr "" +"Стратегія розгалуження в системах контролю версій визначає, як створюються, " +"управляються та використовуються гілки в процесі розробки проекту. Вона " +"допомагає командам ефективно співпрацювати, ізолювати зміни та " +"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " +"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " +"структурований робочий процес розробки." + +#: ../../src/vcs/branch.txt:90 +msgid "" +"GitFlow is a popular branching strategy that provides a well-defined model " +"for managing branches in a Git repository. It was introduced by Vincent " +"Driessen and is based on the idea of using two main branches: \"master\" and " +"\"develop.\"" +msgstr "" +"GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " +"модель для управління гілками в Git-репозиторії. Вона була представлена " +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " +"основних гілок: \"master\" і \"develop\"." + +#: ../../src/vcs/branch.txt:94 +msgid "" +"**Master Branch**: The \"master\" branch represents the stable version of " +"the codebase. It should always contain production-ready code and be free " +"from any major issues. The \"master\" branch is protected, and only release " +"versions are merged into it." +msgstr "" +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " +"бази. Вона завжди повинна містити готовий до використання код і не містити " +"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " +"релізні версії." + +#: ../../src/vcs/branch.txt:98 +msgid "" +"**Develop Branch**: The \"develop\" branch is where the ongoing development " +"and integration of features take place. It serves as the integration branch " +"for various feature branches and should also contain a stable version of the " +"code." +msgstr "" +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " +"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " +"функціональних гілок, а також повинна містити стабільну версію коду." + +#: ../../src/vcs/branch.txt:102 +msgid "" +"**Feature Branches**: For each new feature or bug fix, a dedicated " +"\"feature\" branch is created off the \"develop\" branch. These branches are " +"short-lived and exist only for the duration of the feature development." +msgstr "" +"**Вітки функцій**: Для кожної нової функції або виправлення помилки " +"створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " +"недовговічні і існують лише на час розробки функції." + +#: ../../src/vcs/branch.txt:105 +msgid "" +"**Release Branches**: When the development on the \"develop\" branch is " +"ready for a release, a \"release\" branch is created. The release branch is " +"used for testing, bug fixing, and preparing for deployment." +msgstr "" +"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " +"створюється гілка \"release\". Релізна гілка використовується для " +"тестування, виправлення помилок і підготовки до розгортання." + +#: ../../src/vcs/branch.txt:108 +msgid "" +"**Hotfix Branches**: If a critical issue is discovered in the production " +"version, a \"hotfix\" branch is created from the \"master\" branch. This " +"allows for a quick fix without affecting ongoing development on the " +"\"develop\" branch." +msgstr "" +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " +"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " +"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." + +#: ../../src/vcs/branch.txt:113 +msgid "" +"GitFlow provides a structured approach to managing branching in a " +"collaborative development environment. It ensures that the main branches " +"remain stable, and new features and bug fixes are integrated smoothly before " +"being released. This strategy is particularly useful for projects with " +"regular releases and a team working on multiple features concurrently." +msgstr "" +"GitFlow забезпечує структурований підхід до управління розгалуженням у " +"середовищі спільної розробки. Він гарантує, що основні гілки залишаються " +"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " +"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " +"і командою, яка працює над декількома функціями одночасно." + +#: ../../src/vcs/commits.txt:-1 +msgid "version, control, system, vcs, git, history, commit" +msgstr "version, control, system, vcs, git, history, commit" + +#: ../../src/vcs/commits.txt:8 +msgid "Working with Commits" +msgstr "Робота з коммітами" + +#: ../../src/vcs/github.txt:-1 +msgid "version, control, system, vcs, git, github" +msgstr "version, control, system, vcs, git, github" + +#: ../../src/vcs/github.txt:10 +msgid "GitHub" +msgstr "GitHub" + +#: ../../src/vcs/github.txt:12 +msgid "" +"`GitHub`_ is the single largest host for Git repositories, and is the " +"central point of collaboration for millions of developers and projects." +msgstr "" +"`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " +"точкою співпраці для мільйонів розробників і проектів." + +#: ../../src/vcs/github.txt:17 +msgid "Account setup and configuration" +msgstr "Налаштування та конфігурація акаунта" + +#: ../../src/vcs/github.txt:19 +msgid "" +"The first thing you need to do is set up a free user account. Visit " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " +"account creation process. Just follow the hints and provide an email " +"address, username and a strong password." +msgstr "" +"Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " +"GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " +"та надійний пароль." + +#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 +msgid "version, control, system, vcs, git" +msgstr "version, control, system, vcs, git" + +#: ../../src/vcs/index.txt:8 +msgid "Version Control System" +msgstr "Система контролю версій" + +#: ../../src/vcs/intro.txt:8 +msgid "About version control (Git)" +msgstr "Про контроль версій (Git)" + +#: ../../src/vcs/intro.txt:10 +msgid "" +"Version control is a system that records changes to a file or set of files " +"over time so that you can recall specific versions later. It allows you to " +"revert selected files back to a previous state, revert the entire project " +"back to a previous state, compare changes over time, see who last modified " +"something that might be causing a problem, who introduced an issue and when, " +"and more." +msgstr "" +"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " +"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " +"повернути вибрані файли до попереднього стану, повернути весь проект до " +"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " +"щось, що може спричинити проблему, хто і коли створив проблему, тощо." + +#: ../../src/vcs/intro.txt:16 +msgid "" +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " +"check out the latest snapshot of the files; rather, they fully mirror the " +"repository, including its full history. Thus, if any server dies, and these " +"systems were collaborating via that server, any of the client repositories " +"can be copied back up to the server to restore it. Every clone is really a " +"full backup of all the data." +msgstr "" +"У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " +"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " +"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " +"ладу, а ці системи працювали через нього, будь-який з клієнтських " +"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " +"клон - це фактично повна резервна копія всіх даних." + +#: ../../src/vcs/intro.txt:26 +msgid "Distributed version control diagram" +msgstr "Розподілена схема управління версіями" + +#: ../../src/vcs/intro.txt:29 +msgid "What is Git?" +msgstr "Що таке Git?" + +#: ../../src/vcs/intro.txt:30 +msgid "" +"The major difference between Git and any other VCS is the way Git thinks " +"about its data. Conceptually, most other systems store information as a list " +"of file-based changes. Git doesn't think of or store its data this way. " +"Instead, Git thinks of its data more like a series of snapshots of a " +"miniature filesystem." +msgstr "" +"Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " +"Git'ом мислить про свої дані. Концептуально, більшість інших систем " +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " +"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " +"серію знімків мініатюрної файлової системи." + +#: ../../src/vcs/intro.txt:36 +msgid "" +"This is an important distinction between Git and nearly all other VCSs. It " +"makes Git reconsider almost every aspect of version control that most other " +"systems copied from the previous generation. This makes Git more like a mini " +"filesystem with some incredibly powerful tools built on top of it, rather " +"than simply a VCS." +msgstr "" +"Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " +"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " +"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " +"міні-файлову систему з деякими неймовірно потужними інструментами, " +"побудованими поверх неї, ніж на звичайну VCS." + +#: ../../src/vcs/intro.txt:45 +msgid "Storing data as snapshots of the project over time" +msgstr "Зберігання даних у вигляді знімків проекту з плином часу" + +#: ../../src/vcs/intro.txt:48 +msgid "Local operations" +msgstr "Локальні операції" + +#: ../../src/vcs/intro.txt:49 +msgid "" +"Most operations in Git need only local files and resources to operate -- " +"generally no information is needed from another computer on your network. " +"Because you have the entire history of the project right there on your local " +"disk, most operations seem almost instantaneous." +msgstr "" +"Для виконання більшості операцій у Git'і потрібні лише локальні файли та " +"ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " +"мережі. Оскільки вся історія проекту зберігається на вашому локальному " +"диску, більшість операцій виконуються майже миттєво." + +#: ../../src/vcs/intro.txt:55 +msgid "Integrity" +msgstr "Цілісність" + +#: ../../src/vcs/intro.txt:56 +msgid "" +"Everything in Git is checksummed before it is stored and is then referred to " +"by that checksum. This means it's impossible to change the contents of any " +"file or directory without Git knowing about it." +msgstr "" +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " +"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " +"каталогу без відома Git'а." + +#: ../../src/vcs/intro.txt:61 +msgid "Repository files states" +msgstr "Стани файлів сховища" + +#: ../../src/vcs/intro.txt:62 +msgid "" +"Git has three main states that your files can reside in: **modified**, " +"**staged**, and **committed**:" +msgstr "" +"Git має три основні стани, в яких можуть перебувати ваші файли: " +"**модифіковані**, **на стадії розробки** та **зафіксовані**:" + +#: ../../src/vcs/intro.txt:65 +msgid "" +"Modified means that you have changed the file but have not committed it to " +"your database yet." +msgstr "" +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " +"даних." + +#: ../../src/vcs/intro.txt:67 +msgid "" +"Staged means that you have marked a modified file in its current version to " +"go into your next commit snapshot." +msgstr "" +"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " +"він потрапив до наступного знімка фіксації." + +#: ../../src/vcs/intro.txt:69 +msgid "Committed means that the data is safely stored in your local database." +msgstr "" +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." + +#: ../../src/vcs/intro.txt:76 +msgid "The basic Git workflow goes something like this:" +msgstr "Базовий робочий процес Git'а виглядає приблизно так:" + +#: ../../src/vcs/intro.txt:78 +msgid "You modify files in your working tree." +msgstr "Ви змінюєте файли у вашому робочому дереві." + +#: ../../src/vcs/intro.txt:79 +msgid "" +"You selectively stage just those changes you want to be part of your next " +"commit, which adds only those changes to the staging area." +msgstr "" +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " +"коміт, що додає тільки ці зміни в область стабілізації." + +#: ../../src/vcs/intro.txt:81 +msgid "" +"You do a commit, which takes the files as they are in the staging area and " +"stores that snapshot permanently to your Git directory." +msgstr "" +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " +"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." + +#: ../../src/vcs/intro.txt:85 +msgid "Command line" +msgstr "Командний рядок" + +#: ../../src/vcs/intro.txt:87 +msgid "" +"There are a lot of different ways to use Git. There are the original command-" +"line tools, and there are many graphical user interfaces of varying " +"capabilities. For one, the command line is the only place you can run all " +"Git commands -- most of the GUIs implement only a partial subset of Git " +"functionality for simplicity. If you know how to run the command-line " +"version, you can probably also figure out how to run the GUI version, while " +"the opposite is not necessarily true. Also, while your choice of graphical " +"client is a matter of personal taste, all users will have the command-line " +"tools installed and available." +msgstr "" +"Існує багато різних способів використання Git'у. Існують оригінальні " +"інструменти командного рядка, а також багато графічних інтерфейсів " +"користувача з різними можливостями. З одного боку, командний рядок є єдиним " +"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " +"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " +"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " +"ймовірно, також зможете з'ясувати, як запустити версію з графічним " +"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " +"графічного клієнта є справою особистого смаку, всі користувачі матимуть " +"встановлені та доступні інструменти командного рядка." + +#: ../../src/vcs/setup.txt:-1 +msgid "version, control, system, vcs, git, setup" +msgstr "version, control, system, vcs, git, setup" + +#: ../../src/vcs/setup.txt:8 +msgid "Git Setup" +msgstr "Налаштування Git'а" + +#: ../../src/vcs/setup.txt:10 +msgid "" +"Now that you have Git on your system, you'll want to do a few things to " +"customize your Git environment. Git comes with a tool called ``git config`` " +"that lets you get and set configuration variables that control all aspects " +"of how Git looks and operates. These variables can be stored in three " +"different places:" +msgstr "" +"Тепер, коли у вашій системі встановлено Git, ви захочете зробити кілька " +"речей, щоб налаштувати середовище Git'а. Git постачається з інструментом під " +"назвою ``git config``, який дозволяє вам отримувати та встановлювати " +"конфігураційні змінні, що контролюють всі аспекти вигляду та роботи Git'у. " +"Ці змінні можна зберігати у трьох різних місцях:" + +#: ../../src/vcs/setup.txt:16 +msgid "" +"*[path]/etc/gitconfig* file: Contains values applied to every user on the " +"system and all their repositories. If you pass the option ``--system`` to " +"git config, it reads and writes from this file specifically. Because this is " +"a system configuration file, you would need administrative or superuser " +"privilege to make changes to it." +msgstr "" +"Файл *[path]/etc/gitconfig*: Містить значення, що застосовуються до кожного " +"користувача у системі та всіх його сховищ. Якщо ви передасте git config " +"параметр ``--system``, він буде читати і писати саме з цього файлу. Оскільки " +"це файл конфігурації системи, вам знадобляться адміністративні привілеї або " +"привілеї суперкористувача, щоб вносити до нього зміни." + +#: ../../src/vcs/setup.txt:21 +msgid "" +"*~/.gitconfig* or *~/.config/git/config* file: Values specific personally to " +"you, the user. You can make Git read and write to this file specifically by " +"passing the ``--global`` option, and this affects all of the repositories " +"you work with on your system." +msgstr "" +"*~/.gitconfig* або *~/.config/git/config* файл: Значення, характерні " +"особисто для вас, користувача. Ви можете змусити Git'а читати і писати до " +"цього файлу спеціально, передавши опцію ``--global``, і це вплине на всі " +"сховища, з якими ви працюєте у вашій системі." + +#: ../../src/vcs/setup.txt:25 +msgid "" +"*config* file in the Git directory (that is, *.git/config*) of whatever " +"repository you're currently using: Specific to that single repository. You " +"can force Git to read from and write to this file with the ``--local`` " +"option, but that is in fact the default. Unsurprisingly, you need to be " +"located somewhere in a Git repository for this option to work properly." +msgstr "" +"файл *config* у каталозі Git (тобто *.git/config*) того сховища, яке ви " +"зараз використовуєте: Специфічний для цього окремого сховища. Ви можете " +"змусити Git'а читати з цього файлу і писати до нього за допомогою опції ``--" +"local``, але за замовчуванням так і є. Не дивно, що для правильної роботи " +"цієї опції вам потрібно знаходитися десь у сховищі Git'а." + +#: ../../src/vcs/setup.txt:31 +msgid "" +"Each level overrides values in the previous level, so values in *.git/" +"config* trump those in *[path]/etc/gitconfig*." +msgstr "" +"Кожен рівень перевизначає значення попереднього рівня, тому значення у *.git/" +"config* мають перевагу над значеннями у *[path]/etc/gitconfig*." + +#: ../../src/vcs/setup.txt:34 +msgid "You can view all of your settings and where they are coming from using:" +msgstr "" +"Ви можете переглянути всі свої налаштування і те, звідки вони надходять, " +"використовуючи:" + +#: ../../src/vcs/setup.txt:41 +msgid "Your identity" +msgstr "Ваша особистість" + +#: ../../src/vcs/setup.txt:43 +msgid "" +"The first thing you should do when you install Git is to set your user name " +"and email address. This is important because every Git commit uses this " +"information." +msgstr "" +"Перше, що вам слід зробити під час встановлення Git'у, це вказати своє ім'я " +"користувача та адресу електронної пошти. Це важливо, оскільки кожна фіксація " +"Git'а використовує цю інформацію." From af347135fa98b1aebf5209185efe53257713aaf8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 15:26:39 +0300 Subject: [PATCH 162/689] Update gitflow diagram --- assets/mermaid/git/gitflow.mmd | 3 --- 1 file changed, 3 deletions(-) diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd index 6287bbb6e..4e4eab73a 100644 --- a/assets/mermaid/git/gitflow.mmd +++ b/assets/mermaid/git/gitflow.mmd @@ -19,8 +19,6 @@ gitGraph commit branch feature/C commit - commit - commit %% working with hotfix branch checkout hotfix @@ -35,7 +33,6 @@ gitGraph %% working with feature-b branch checkout feature/A commit - commit checkout develop merge feature/A %% work with feature-a branch From 30d9609de661b752efa403aba481345afaea40fd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 16:32:02 +0300 Subject: [PATCH 163/689] Add commit history section (git log) --- src/vcs/commits.txt | 235 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 231 insertions(+), 4 deletions(-) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index 2d01de180..3f6bc6d82 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -7,11 +7,238 @@ Working with Commits ############################################################################### -.. todo: - git log +Viewing the commit history +========================== + +After you have created several commits, or if you have cloned a repository with +an existing commit history, you'll probably want to look back to see what has +happened. The most basic and powerful tool to do this is the git log command. + +.. code-block:: shell + + $ git log + co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + commit 895dc24343fbbe25c3c94b25091ac64ac8aea53d + Author: Serhii Horodilov + Date: Wed Aug 16 14:42:10 2023 +0300 + + Add translations to VSC documents + +By default, with no arguments, ``git log`` lists the commits made in that +repository in reverse chronological order; that is, the most recent commits +show up first. As you can see, this command lists each commit with its SHA-1 +checksum, the author's name and email, the date written, and the commit +message. + +One of the more helpful options is ``-p`` or ``--patch``, which shows the +difference (the *patch* output) introduced in each commit. You can also +limit the number of log entries displayed, such as using ``-`` to +show only desired number of latest entries. + +.. code-block:: shell + + $ git log -p -1 + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd + index 6287bbb..4e4eab7 100644 + --- a/assets/mermaid/git/gitflow.mmd + +++ b/assets/mermaid/git/gitflow.mmd + @@ -19,8 +19,6 @@ gitGraph + commit + branch feature/C + commit + - commit + - commit + + %% working with hotfix branch + checkout hotfix + @@ -35,7 +33,6 @@ gitGraph + %% working with feature-b branch + checkout feature/A + commit + - commit + checkout develop + merge feature/A + %% work with feature-a branch + +This option display the same information but with a diff directly following +each entry. This is very helpful for code review or to quickly browse what +happened during a series of commits that a collaborator has added. You can also +use a series of summarizing options with ``git log``. + +If you want to see some abbreviated stats for each commit, you can use the +``--stat`` option: + +.. code-block:: shell + + $ git log -1 --stat + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + assets/mermaid/git/gitflow.mmd | 3 --- + 1 file changed, 3 deletions(-) + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + src/_locales/uk/LC_MESSAGES/vcs.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Another really useful option is ``--pretty``. This option changes the log +output to formats other that the default. A few prebuilt option values are +available for you to use. The ``oneline`` value for this option prints each +commit on a single line, which is useful if you're look a lot of commits. +In addition, the ``short``, ``full``, and ``fuller`` values show the output +in roughly the same format but with less or more information. + +.. code-block:: shell + + $ git log --pretty=oneline + 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram + 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 fixup! Add translations to VSC documents + 895dc24343fbbe25c3c94b25091ac64ac8aea53d Add translations to VSC documents + 30cb1a2db3d62210010b05df634e1ec87e5ef748 Fix apostrophe for VCS files + 79427a88defef82bc92482cfaf7da5fba3260f5e Add commit document (draft) + 0786a699e6901a6c968090422b3cec789402ad21 Update branches document + 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list + +.. code-block:: shell + + $ git log -10 --pretty=format:"%h - %an - %ad" + 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 + 1e131a0 - Serhii Horodilov - Wed Aug 16 14:46:39 2023 +0300 + 895dc24 - Serhii Horodilov - Wed Aug 16 14:42:10 2023 +0300 + 30cb1a2 - Serhii Horodilov - Wed Aug 16 14:41:49 2023 +0300 + 79427a8 - Serhii Horodilov - Mon Jul 31 14:31:08 2023 +0300 + 0786a69 - Serhii Horodilov - Mon Jul 31 14:30:54 2023 +0300 + 7471053 - Serhii Horodilov - Fri Jul 28 15:13:15 2023 +0300 + be60eb3 - Serhii Horodilov - Fri Jul 28 14:54:09 2023 +0300 + 24972b1 - Serhii Horodilov - Fri Jul 28 14:53:37 2023 +0300 + 4a9cfe4 - Serhii Horodilov - Fri Jul 28 14:32:53 2023 +0300 + ++-----------+---------------------------------------------------+ +| Specifier | Description of Output | ++===========+===================================================+ +| %H | Commit hash | ++-----------+---------------------------------------------------+ +| %h | Abbreviated commit hash | ++-----------+---------------------------------------------------+ +| %T | Tree hash | ++-----------+---------------------------------------------------+ +| %t | Abbreviated tree hash | ++-----------+---------------------------------------------------+ +| %P | Parent hashes | ++-----------+---------------------------------------------------+ +| %p | Abbreviated parent hashes | ++-----------+---------------------------------------------------+ +| %an | Author name | ++-----------+---------------------------------------------------+ +| %ae | Author email | ++-----------+---------------------------------------------------+ +| %ad | Author date (format respects the --date=option) | ++-----------+---------------------------------------------------+ +| %ar | Author date, relative | ++-----------+---------------------------------------------------+ +| %cn | Committer name | ++-----------+---------------------------------------------------+ +| %ce | Committer email | ++-----------+---------------------------------------------------+ +| %cd | Committer date | ++-----------+---------------------------------------------------+ +| %cr | Committer date, relative | ++-----------+---------------------------------------------------+ +| %s | Subject | ++-----------+---------------------------------------------------+ + +The ``oneline`` and ``format`` option values are particularly useful with +another ``log`` option called ``--graph``. This option adds a nice little +ASCII graph showing your branch and merge history: + +.. code-block:: shell + + $ git log --pretty=format:"%h %s" --graph + * f9b988f Created base documentation structure + * 3fabf55 Started global course updated + * 06662ae Merge pull request #13 from edu-python-course/master + |\ + | * 3579eea Update to suite edu-python-course/blog#74 + |/ + * 3fb7725 Merge remote-tracking branch 'origin/master' + |\ + | * 181b66d Merge remote-tracking branch 'origin/master' + | |\ + | * | 52e0ef8 add lesson21 hw + * | | 830a246 fix lesson32 hw + | |/ + |/| + * | 59697e9 fix lesson2 typos + * | a6f77db fix lesson2 typos + * | 213b220 fix lesson2 typos + * | 9b69f5f fix lesson2 typos + * | 6a0b9c8 fix lesson2 typos + |/ + * bda497f add lesson2 + +There are many more output-formatting options to ``git log``. Common options to +``git log`` are: + ++-------------------+---------------------------------------------------------+ +| Option | Description | ++===================+=========================================================+ +| -p | Show the patch introduced with each commit. | ++-------------------+---------------------------------------------------------+ +| --stat | Show statistics for files modified in each commit. | ++-------------------+---------------------------------------------------------+ +| --shortstat | Display only the changed/insertions/deletions line | +| | from the --stat command. | ++-------------------+---------------------------------------------------------+ +| --name-only | Show the list of files modified after the commit | +| | information. | ++-------------------+---------------------------------------------------------+ +| --name-status | Show the list of files affected with | +| | added/modified/deleted information as well. | ++-------------------+---------------------------------------------------------+ +| --abbrev-commit | Show only the first few characters of the SHA-1 | +| | checksum instead of all 40. | ++-------------------+---------------------------------------------------------+ +| --relative-date | Display the date in a relative format (for example, | +| | "2 weeks ago") instead of using the full date format. | ++-------------------+---------------------------------------------------------+ +| --graph | Display an ASCII graph of the branch and merge history | +| | beside the log output. | ++-------------------+---------------------------------------------------------+ +| --pretty | Show commits in an alternate format. Option values | +| | include oneline, short, full, fuller, and format (where | +| | you specify your own format). | ++-------------------+---------------------------------------------------------+ +| --oneline | Shorthand for --pretty=oneline --abbrev-commit used | +| | together. | ++-------------------+---------------------------------------------------------+ .. todo: - git checkout +git checkout .. todo: - git tag +git tag From f36209c7527c441a00ad2044f634648912a807d9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 17:16:20 +0300 Subject: [PATCH 164/689] Finish git log section --- src/vcs/commits.txt | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index 3f6bc6d82..e178731cb 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -237,6 +237,52 @@ There are many more output-formatting options to ``git log``. Common options to | | together. | +-------------------+---------------------------------------------------------+ +Limiting log output +------------------- + +In addition to output-formatting options, ``git log`` takes a number of useful +limiting options; that is options that let you show only a subset of commits. +You've seen one such option already -- the ``-`` (e.g. ``-2`` or +``-10``) option, which displays only the given number of latest commits. + +.. code-block:: shell + + $ git log -5 --oneline + db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) + df9d599 Add commit history section (git log) + 8b755eb (origin/feature/vcs) Update gitflow diagram + 1e131a0 fixup! Add translations to VSC documents + 895dc24 Add translations to VSC documents + +However, the time-limiting options such as ``--since`` and ``--until`` are very +useful. For example, the command to get the list of commits made in the last +two weeks: + +.. code-block:: shell + + $ git log --since=2.weeks + +This command works with lots of formats - you can specify a specific date like +``"2022-02-24"``, or relative date such as ``"2 years 1 days 3 minutes ago"``. + +The last really useful option to pass to ``git log`` as a filter is a path. If +you specify a directory or file name, you can limit the log output to commits +that introduced a change to those files. This is always the last option and +is generally preceded by double dashes (``--``) to separate the paths from +the options: + +.. code-block:: shell + + $ git log --oneline -- src/vcs/basics.txt + 30cb1a2 Fix apostrophe for VCS files + 4a9cfe4 Move mermaid diagrams to a dedicated folder (git) + 80a1ab3 Add branching and merging document + 3978779 Add committing changes section + a40712a Add git ignore section + e92b12f Add making changes section + c23f8ff Update getting repository section + 582569d Add Git basics document (draft) + .. todo: git checkout From 62dea948b286a772191a5e632499c53816b39886 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 17:59:06 +0300 Subject: [PATCH 165/689] Add undoing things with git sections --- src/vcs/commits.txt | 119 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 2 deletions(-) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index e178731cb..c22661cfa 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -283,8 +283,123 @@ the options: c23f8ff Update getting repository section 582569d Add Git basics document (draft) +Undoing things +============== + +At any stage, you may want to undo something. + +One of the common undos takes place when you commit too early and possibly +forget to add some files, or you mess up your commit message. If you want +to redo that commit, make the additional changes you forgot, stage them, +and commit again using the ``--amend`` option: + +.. code-block:: shell + + $ git commit --amend + +E.g. + +.. code-block:: shell + + $ git commit -m "Initial commit" + $ git add forgotten_file + $ git commit --amend + +Unstaging a staged file +----------------------- + +The next two sections demonstrate how to work with your staging area and +working directory changes. The nice part is that the command you use to +determine the state of those two areas also reminds you how to undo changes +to them. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + modified: CONTRIBUTING.md + $ git reset HEAD CONTRIBUTING.md + Unstaged changes after reset: + M CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + modified: CONTRIBUTING.md + +Unmodifiyng a modified file +--------------------------- + +What if you realize that you don't want to keep your changes to some file? +You can easily unmodify it -- **revert** it back to what it looked like when +you last committed. ``git status`` also tells you how to do that: + +:: + + (use "git checkout -- ..." to discard changes in working directory) + +It tells you pretty explicitly how to discard the changes you've make. + +.. code-block:: shell + + $ git checkout -- CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + +Undoing things with git restore +------------------------------- + +.. versionadded:: 2.23.0 + ``git restore`` is basically an alternative to ``git reset``, from + Git version 2.23.0 onwards, Git will use ``git restore`` instead of + ``git reset`` for many undo operations. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + Changes to be committed: + (use "git restore --staged ..." to unstage) + modified: CONTRIBUTING.md + renamed: README.md -> README + $ git restore --staged CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: CONTRIBUTING.md + $ git restore CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + +.. important:: + It’s important to understand that git restore is a dangerous + command. Any local changes you made to that file are gone -- Git just + replaced that file with the last staged or committed version. Don't ever + use this command unless you absolutely know that you don’t want those + unsaved local changes. + .. todo: -git checkout + git checkout .. todo: -git tag + git tag From 1153b48f25a01c814a2858b904594f61b444599b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 18:32:27 +0300 Subject: [PATCH 166/689] Fix code-block outputs --- src/vcs/commits.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index c22661cfa..5c14529fb 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -318,6 +318,7 @@ to them. $ git add * $ git status On branch master + Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README @@ -327,9 +328,11 @@ to them. M CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README + Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) @@ -353,6 +356,7 @@ It tells you pretty explicitly how to discard the changes you've make. $ git checkout -- CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README @@ -370,6 +374,7 @@ Undoing things with git restore $ git add * $ git status On branch master + Changes to be committed: (use "git restore --staged ..." to unstage) modified: CONTRIBUTING.md @@ -377,9 +382,11 @@ Undoing things with git restore $ git restore --staged CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git restore --staged ..." to unstage) renamed: README.md -> README + Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) @@ -387,6 +394,7 @@ Undoing things with git restore $ git restore CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git restore --staged ..." to unstage) renamed: README.md -> README From fba1d3df5f261722483a9747d5d44c5cd1ffd903 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 18:45:23 +0300 Subject: [PATCH 167/689] Move commits.txt content to "basics" document --- src/vcs/basics.txt | 399 ++++++++++++++++++++++++++++++++++++++++++ src/vcs/commits.txt | 413 -------------------------------------------- src/vcs/index.txt | 1 - 3 files changed, 399 insertions(+), 414 deletions(-) delete mode 100644 src/vcs/commits.txt diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 4d1b56763..99bf22729 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -339,3 +339,402 @@ a single character; and brackets enclosing characters separated by a hyphen ([0-9]) matches any character between them (in this case 0 through 9). You can also use two asterisks to match nested directories; a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. + +Viewing the commit history +========================== + +After you have created several commits, or if you have cloned a repository with +an existing commit history, you'll probably want to look back to see what has +happened. The most basic and powerful tool to do this is the git log command. + +.. code-block:: shell + + $ git log + co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + commit 895dc24343fbbe25c3c94b25091ac64ac8aea53d + Author: Serhii Horodilov + Date: Wed Aug 16 14:42:10 2023 +0300 + + Add translations to VSC documents + +By default, with no arguments, ``git log`` lists the commits made in that +repository in reverse chronological order; that is, the most recent commits +show up first. As you can see, this command lists each commit with its SHA-1 +checksum, the author's name and email, the date written, and the commit +message. + +One of the more helpful options is ``-p`` or ``--patch``, which shows the +difference (the *patch* output) introduced in each commit. You can also +limit the number of log entries displayed, such as using ``-`` to +show only desired number of latest entries. + +.. code-block:: shell + + $ git log -p -1 + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd + index 6287bbb..4e4eab7 100644 + --- a/assets/mermaid/git/gitflow.mmd + +++ b/assets/mermaid/git/gitflow.mmd + @@ -19,8 +19,6 @@ gitGraph + commit + branch feature/C + commit + - commit + - commit + + %% working with hotfix branch + checkout hotfix + @@ -35,7 +33,6 @@ gitGraph + %% working with feature-b branch + checkout feature/A + commit + - commit + checkout develop + merge feature/A + %% work with feature-a branch + +This option display the same information but with a diff directly following +each entry. This is very helpful for code review or to quickly browse what +happened during a series of commits that a collaborator has added. You can also +use a series of summarizing options with ``git log``. + +If you want to see some abbreviated stats for each commit, you can use the +``--stat`` option: + +.. code-block:: shell + + $ git log -1 --stat + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + assets/mermaid/git/gitflow.mmd | 3 --- + 1 file changed, 3 deletions(-) + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + src/_locales/uk/LC_MESSAGES/vcs.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Another really useful option is ``--pretty``. This option changes the log +output to formats other that the default. A few prebuilt option values are +available for you to use. The ``oneline`` value for this option prints each +commit on a single line, which is useful if you're look a lot of commits. +In addition, the ``short``, ``full``, and ``fuller`` values show the output +in roughly the same format but with less or more information. + +.. code-block:: shell + + $ git log --pretty=oneline + 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram + 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 fixup! Add translations to VSC documents + 895dc24343fbbe25c3c94b25091ac64ac8aea53d Add translations to VSC documents + 30cb1a2db3d62210010b05df634e1ec87e5ef748 Fix apostrophe for VCS files + 79427a88defef82bc92482cfaf7da5fba3260f5e Add commit document (draft) + 0786a699e6901a6c968090422b3cec789402ad21 Update branches document + 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list + +.. code-block:: shell + + $ git log -10 --pretty=format:"%h - %an - %ad" + 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 + 1e131a0 - Serhii Horodilov - Wed Aug 16 14:46:39 2023 +0300 + 895dc24 - Serhii Horodilov - Wed Aug 16 14:42:10 2023 +0300 + 30cb1a2 - Serhii Horodilov - Wed Aug 16 14:41:49 2023 +0300 + 79427a8 - Serhii Horodilov - Mon Jul 31 14:31:08 2023 +0300 + 0786a69 - Serhii Horodilov - Mon Jul 31 14:30:54 2023 +0300 + 7471053 - Serhii Horodilov - Fri Jul 28 15:13:15 2023 +0300 + be60eb3 - Serhii Horodilov - Fri Jul 28 14:54:09 2023 +0300 + 24972b1 - Serhii Horodilov - Fri Jul 28 14:53:37 2023 +0300 + 4a9cfe4 - Serhii Horodilov - Fri Jul 28 14:32:53 2023 +0300 + ++-----------+---------------------------------------------------+ +| Specifier | Description of Output | ++===========+===================================================+ +| %H | Commit hash | ++-----------+---------------------------------------------------+ +| %h | Abbreviated commit hash | ++-----------+---------------------------------------------------+ +| %T | Tree hash | ++-----------+---------------------------------------------------+ +| %t | Abbreviated tree hash | ++-----------+---------------------------------------------------+ +| %P | Parent hashes | ++-----------+---------------------------------------------------+ +| %p | Abbreviated parent hashes | ++-----------+---------------------------------------------------+ +| %an | Author name | ++-----------+---------------------------------------------------+ +| %ae | Author email | ++-----------+---------------------------------------------------+ +| %ad | Author date (format respects the --date=option) | ++-----------+---------------------------------------------------+ +| %ar | Author date, relative | ++-----------+---------------------------------------------------+ +| %cn | Committer name | ++-----------+---------------------------------------------------+ +| %ce | Committer email | ++-----------+---------------------------------------------------+ +| %cd | Committer date | ++-----------+---------------------------------------------------+ +| %cr | Committer date, relative | ++-----------+---------------------------------------------------+ +| %s | Subject | ++-----------+---------------------------------------------------+ + +The ``oneline`` and ``format`` option values are particularly useful with +another ``log`` option called ``--graph``. This option adds a nice little +ASCII graph showing your branch and merge history: + +.. code-block:: shell + + $ git log --pretty=format:"%h %s" --graph + * f9b988f Created base documentation structure + * 3fabf55 Started global course updated + * 06662ae Merge pull request #13 from edu-python-course/master + |\ + | * 3579eea Update to suite edu-python-course/blog#74 + |/ + * 3fb7725 Merge remote-tracking branch 'origin/master' + |\ + | * 181b66d Merge remote-tracking branch 'origin/master' + | |\ + | * | 52e0ef8 add lesson21 hw + * | | 830a246 fix lesson32 hw + | |/ + |/| + * | 59697e9 fix lesson2 typos + * | a6f77db fix lesson2 typos + * | 213b220 fix lesson2 typos + * | 9b69f5f fix lesson2 typos + * | 6a0b9c8 fix lesson2 typos + |/ + * bda497f add lesson2 + +There are many more output-formatting options to ``git log``. Common options to +``git log`` are: + ++-------------------+---------------------------------------------------------+ +| Option | Description | ++===================+=========================================================+ +| -p | Show the patch introduced with each commit. | ++-------------------+---------------------------------------------------------+ +| --stat | Show statistics for files modified in each commit. | ++-------------------+---------------------------------------------------------+ +| --shortstat | Display only the changed/insertions/deletions line | +| | from the --stat command. | ++-------------------+---------------------------------------------------------+ +| --name-only | Show the list of files modified after the commit | +| | information. | ++-------------------+---------------------------------------------------------+ +| --name-status | Show the list of files affected with | +| | added/modified/deleted information as well. | ++-------------------+---------------------------------------------------------+ +| --abbrev-commit | Show only the first few characters of the SHA-1 | +| | checksum instead of all 40. | ++-------------------+---------------------------------------------------------+ +| --relative-date | Display the date in a relative format (for example, | +| | "2 weeks ago") instead of using the full date format. | ++-------------------+---------------------------------------------------------+ +| --graph | Display an ASCII graph of the branch and merge history | +| | beside the log output. | ++-------------------+---------------------------------------------------------+ +| --pretty | Show commits in an alternate format. Option values | +| | include oneline, short, full, fuller, and format (where | +| | you specify your own format). | ++-------------------+---------------------------------------------------------+ +| --oneline | Shorthand for --pretty=oneline --abbrev-commit used | +| | together. | ++-------------------+---------------------------------------------------------+ + +Limiting log output +------------------- + +In addition to output-formatting options, ``git log`` takes a number of useful +limiting options; that is options that let you show only a subset of commits. +You've seen one such option already -- the ``-`` (e.g. ``-2`` or +``-10``) option, which displays only the given number of latest commits. + +.. code-block:: shell + + $ git log -5 --oneline + db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) + df9d599 Add commit history section (git log) + 8b755eb (origin/feature/vcs) Update gitflow diagram + 1e131a0 fixup! Add translations to VSC documents + 895dc24 Add translations to VSC documents + +However, the time-limiting options such as ``--since`` and ``--until`` are very +useful. For example, the command to get the list of commits made in the last +two weeks: + +.. code-block:: shell + + $ git log --since=2.weeks + +This command works with lots of formats - you can specify a specific date like +``"2022-02-24"``, or relative date such as ``"2 years 1 days 3 minutes ago"``. + +The last really useful option to pass to ``git log`` as a filter is a path. If +you specify a directory or file name, you can limit the log output to commits +that introduced a change to those files. This is always the last option and +is generally preceded by double dashes (``--``) to separate the paths from +the options: + +.. code-block:: shell + + $ git log --oneline -- src/vcs/basics.txt + 30cb1a2 Fix apostrophe for VCS files + 4a9cfe4 Move mermaid diagrams to a dedicated folder (git) + 80a1ab3 Add branching and merging document + 3978779 Add committing changes section + a40712a Add git ignore section + e92b12f Add making changes section + c23f8ff Update getting repository section + 582569d Add Git basics document (draft) + +Undoing things +============== + +At any stage, you may want to undo something. + +One of the common undos takes place when you commit too early and possibly +forget to add some files, or you mess up your commit message. If you want +to redo that commit, make the additional changes you forgot, stage them, +and commit again using the ``--amend`` option: + +.. code-block:: shell + + $ git commit --amend + +E.g. + +.. code-block:: shell + + $ git commit -m "Initial commit" + $ git add forgotten_file + $ git commit --amend + +Unstaging a staged file +----------------------- + +The next two sections demonstrate how to work with your staging area and +working directory changes. The nice part is that the command you use to +determine the state of those two areas also reminds you how to undo changes +to them. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + modified: CONTRIBUTING.md + $ git reset HEAD CONTRIBUTING.md + Unstaged changes after reset: + M CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + modified: CONTRIBUTING.md + +Unmodifiyng a modified file +--------------------------- + +What if you realize that you don't want to keep your changes to some file? +You can easily unmodify it -- **revert** it back to what it looked like when +you last committed. ``git status`` also tells you how to do that: + +:: + + (use "git checkout -- ..." to discard changes in working directory) + +It tells you pretty explicitly how to discard the changes you've make. + +.. code-block:: shell + + $ git checkout -- CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + +Undoing things with git restore +------------------------------- + +.. versionadded:: 2.23.0 + ``git restore`` is basically an alternative to ``git reset``, from + Git version 2.23.0 onwards, Git will use ``git restore`` instead of + ``git reset`` for many undo operations. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + + Changes to be committed: + (use "git restore --staged ..." to unstage) + modified: CONTRIBUTING.md + renamed: README.md -> README + $ git restore --staged CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: CONTRIBUTING.md + $ git restore CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + +.. important:: + It’s important to understand that git restore is a dangerous + command. Any local changes you made to that file are gone -- Git just + replaced that file with the last staged or committed version. Don't ever + use this command unless you absolutely know that you don’t want those + unsaved local changes. diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt deleted file mode 100644 index 5c14529fb..000000000 --- a/src/vcs/commits.txt +++ /dev/null @@ -1,413 +0,0 @@ -.. meta:: - :description: Version control system - :author: Serhii Horodilov - :keywords: version, control, system, vcs, git, history, commit - -############################################################################### - Working with Commits -############################################################################### - -Viewing the commit history -========================== - -After you have created several commits, or if you have cloned a repository with -an existing commit history, you'll probably want to look back to see what has -happened. The most basic and powerful tool to do this is the git log command. - -.. code-block:: shell - - $ git log - co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) - Author: Serhii Horodilov - Date: Wed Aug 16 15:26:39 2023 +0300 - - Update gitflow diagram - - commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 - Author: Serhii Horodilov - Date: Wed Aug 16 14:46:39 2023 +0300 - - fixup! Add translations to VSC documents - - commit 895dc24343fbbe25c3c94b25091ac64ac8aea53d - Author: Serhii Horodilov - Date: Wed Aug 16 14:42:10 2023 +0300 - - Add translations to VSC documents - -By default, with no arguments, ``git log`` lists the commits made in that -repository in reverse chronological order; that is, the most recent commits -show up first. As you can see, this command lists each commit with its SHA-1 -checksum, the author's name and email, the date written, and the commit -message. - -One of the more helpful options is ``-p`` or ``--patch``, which shows the -difference (the *patch* output) introduced in each commit. You can also -limit the number of log entries displayed, such as using ``-`` to -show only desired number of latest entries. - -.. code-block:: shell - - $ git log -p -1 - commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) - Author: Serhii Horodilov - Date: Wed Aug 16 15:26:39 2023 +0300 - - Update gitflow diagram - - diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd - index 6287bbb..4e4eab7 100644 - --- a/assets/mermaid/git/gitflow.mmd - +++ b/assets/mermaid/git/gitflow.mmd - @@ -19,8 +19,6 @@ gitGraph - commit - branch feature/C - commit - - commit - - commit - - %% working with hotfix branch - checkout hotfix - @@ -35,7 +33,6 @@ gitGraph - %% working with feature-b branch - checkout feature/A - commit - - commit - checkout develop - merge feature/A - %% work with feature-a branch - -This option display the same information but with a diff directly following -each entry. This is very helpful for code review or to quickly browse what -happened during a series of commits that a collaborator has added. You can also -use a series of summarizing options with ``git log``. - -If you want to see some abbreviated stats for each commit, you can use the -``--stat`` option: - -.. code-block:: shell - - $ git log -1 --stat - commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) - Author: Serhii Horodilov - Date: Wed Aug 16 15:26:39 2023 +0300 - - Update gitflow diagram - - assets/mermaid/git/gitflow.mmd | 3 --- - 1 file changed, 3 deletions(-) - - commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 - Author: Serhii Horodilov - Date: Wed Aug 16 14:46:39 2023 +0300 - - fixup! Add translations to VSC documents - - src/_locales/uk/LC_MESSAGES/vcs.po | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -Another really useful option is ``--pretty``. This option changes the log -output to formats other that the default. A few prebuilt option values are -available for you to use. The ``oneline`` value for this option prints each -commit on a single line, which is useful if you're look a lot of commits. -In addition, the ``short``, ``full``, and ``fuller`` values show the output -in roughly the same format but with less or more information. - -.. code-block:: shell - - $ git log --pretty=oneline - 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram - 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 fixup! Add translations to VSC documents - 895dc24343fbbe25c3c94b25091ac64ac8aea53d Add translations to VSC documents - 30cb1a2db3d62210010b05df634e1ec87e5ef748 Fix apostrophe for VCS files - 79427a88defef82bc92482cfaf7da5fba3260f5e Add commit document (draft) - 0786a699e6901a6c968090422b3cec789402ad21 Update branches document - 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list - -.. code-block:: shell - - $ git log -10 --pretty=format:"%h - %an - %ad" - 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 - 1e131a0 - Serhii Horodilov - Wed Aug 16 14:46:39 2023 +0300 - 895dc24 - Serhii Horodilov - Wed Aug 16 14:42:10 2023 +0300 - 30cb1a2 - Serhii Horodilov - Wed Aug 16 14:41:49 2023 +0300 - 79427a8 - Serhii Horodilov - Mon Jul 31 14:31:08 2023 +0300 - 0786a69 - Serhii Horodilov - Mon Jul 31 14:30:54 2023 +0300 - 7471053 - Serhii Horodilov - Fri Jul 28 15:13:15 2023 +0300 - be60eb3 - Serhii Horodilov - Fri Jul 28 14:54:09 2023 +0300 - 24972b1 - Serhii Horodilov - Fri Jul 28 14:53:37 2023 +0300 - 4a9cfe4 - Serhii Horodilov - Fri Jul 28 14:32:53 2023 +0300 - -+-----------+---------------------------------------------------+ -| Specifier | Description of Output | -+===========+===================================================+ -| %H | Commit hash | -+-----------+---------------------------------------------------+ -| %h | Abbreviated commit hash | -+-----------+---------------------------------------------------+ -| %T | Tree hash | -+-----------+---------------------------------------------------+ -| %t | Abbreviated tree hash | -+-----------+---------------------------------------------------+ -| %P | Parent hashes | -+-----------+---------------------------------------------------+ -| %p | Abbreviated parent hashes | -+-----------+---------------------------------------------------+ -| %an | Author name | -+-----------+---------------------------------------------------+ -| %ae | Author email | -+-----------+---------------------------------------------------+ -| %ad | Author date (format respects the --date=option) | -+-----------+---------------------------------------------------+ -| %ar | Author date, relative | -+-----------+---------------------------------------------------+ -| %cn | Committer name | -+-----------+---------------------------------------------------+ -| %ce | Committer email | -+-----------+---------------------------------------------------+ -| %cd | Committer date | -+-----------+---------------------------------------------------+ -| %cr | Committer date, relative | -+-----------+---------------------------------------------------+ -| %s | Subject | -+-----------+---------------------------------------------------+ - -The ``oneline`` and ``format`` option values are particularly useful with -another ``log`` option called ``--graph``. This option adds a nice little -ASCII graph showing your branch and merge history: - -.. code-block:: shell - - $ git log --pretty=format:"%h %s" --graph - * f9b988f Created base documentation structure - * 3fabf55 Started global course updated - * 06662ae Merge pull request #13 from edu-python-course/master - |\ - | * 3579eea Update to suite edu-python-course/blog#74 - |/ - * 3fb7725 Merge remote-tracking branch 'origin/master' - |\ - | * 181b66d Merge remote-tracking branch 'origin/master' - | |\ - | * | 52e0ef8 add lesson21 hw - * | | 830a246 fix lesson32 hw - | |/ - |/| - * | 59697e9 fix lesson2 typos - * | a6f77db fix lesson2 typos - * | 213b220 fix lesson2 typos - * | 9b69f5f fix lesson2 typos - * | 6a0b9c8 fix lesson2 typos - |/ - * bda497f add lesson2 - -There are many more output-formatting options to ``git log``. Common options to -``git log`` are: - -+-------------------+---------------------------------------------------------+ -| Option | Description | -+===================+=========================================================+ -| -p | Show the patch introduced with each commit. | -+-------------------+---------------------------------------------------------+ -| --stat | Show statistics for files modified in each commit. | -+-------------------+---------------------------------------------------------+ -| --shortstat | Display only the changed/insertions/deletions line | -| | from the --stat command. | -+-------------------+---------------------------------------------------------+ -| --name-only | Show the list of files modified after the commit | -| | information. | -+-------------------+---------------------------------------------------------+ -| --name-status | Show the list of files affected with | -| | added/modified/deleted information as well. | -+-------------------+---------------------------------------------------------+ -| --abbrev-commit | Show only the first few characters of the SHA-1 | -| | checksum instead of all 40. | -+-------------------+---------------------------------------------------------+ -| --relative-date | Display the date in a relative format (for example, | -| | "2 weeks ago") instead of using the full date format. | -+-------------------+---------------------------------------------------------+ -| --graph | Display an ASCII graph of the branch and merge history | -| | beside the log output. | -+-------------------+---------------------------------------------------------+ -| --pretty | Show commits in an alternate format. Option values | -| | include oneline, short, full, fuller, and format (where | -| | you specify your own format). | -+-------------------+---------------------------------------------------------+ -| --oneline | Shorthand for --pretty=oneline --abbrev-commit used | -| | together. | -+-------------------+---------------------------------------------------------+ - -Limiting log output -------------------- - -In addition to output-formatting options, ``git log`` takes a number of useful -limiting options; that is options that let you show only a subset of commits. -You've seen one such option already -- the ``-`` (e.g. ``-2`` or -``-10``) option, which displays only the given number of latest commits. - -.. code-block:: shell - - $ git log -5 --oneline - db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) - df9d599 Add commit history section (git log) - 8b755eb (origin/feature/vcs) Update gitflow diagram - 1e131a0 fixup! Add translations to VSC documents - 895dc24 Add translations to VSC documents - -However, the time-limiting options such as ``--since`` and ``--until`` are very -useful. For example, the command to get the list of commits made in the last -two weeks: - -.. code-block:: shell - - $ git log --since=2.weeks - -This command works with lots of formats - you can specify a specific date like -``"2022-02-24"``, or relative date such as ``"2 years 1 days 3 minutes ago"``. - -The last really useful option to pass to ``git log`` as a filter is a path. If -you specify a directory or file name, you can limit the log output to commits -that introduced a change to those files. This is always the last option and -is generally preceded by double dashes (``--``) to separate the paths from -the options: - -.. code-block:: shell - - $ git log --oneline -- src/vcs/basics.txt - 30cb1a2 Fix apostrophe for VCS files - 4a9cfe4 Move mermaid diagrams to a dedicated folder (git) - 80a1ab3 Add branching and merging document - 3978779 Add committing changes section - a40712a Add git ignore section - e92b12f Add making changes section - c23f8ff Update getting repository section - 582569d Add Git basics document (draft) - -Undoing things -============== - -At any stage, you may want to undo something. - -One of the common undos takes place when you commit too early and possibly -forget to add some files, or you mess up your commit message. If you want -to redo that commit, make the additional changes you forgot, stage them, -and commit again using the ``--amend`` option: - -.. code-block:: shell - - $ git commit --amend - -E.g. - -.. code-block:: shell - - $ git commit -m "Initial commit" - $ git add forgotten_file - $ git commit --amend - -Unstaging a staged file ------------------------ - -The next two sections demonstrate how to work with your staging area and -working directory changes. The nice part is that the command you use to -determine the state of those two areas also reminds you how to undo changes -to them. - -.. code-block:: shell - - $ git add * - $ git status - On branch master - - Changes to be committed: - (use "git reset HEAD ..." to unstage) - renamed: README.md -> README - modified: CONTRIBUTING.md - $ git reset HEAD CONTRIBUTING.md - Unstaged changes after reset: - M CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git reset HEAD ..." to unstage) - renamed: README.md -> README - - Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git checkout -- ..." to discard changes in working directory) - modified: CONTRIBUTING.md - -Unmodifiyng a modified file ---------------------------- - -What if you realize that you don't want to keep your changes to some file? -You can easily unmodify it -- **revert** it back to what it looked like when -you last committed. ``git status`` also tells you how to do that: - -:: - - (use "git checkout -- ..." to discard changes in working directory) - -It tells you pretty explicitly how to discard the changes you've make. - -.. code-block:: shell - - $ git checkout -- CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git reset HEAD ..." to unstage) - renamed: README.md -> README - -Undoing things with git restore -------------------------------- - -.. versionadded:: 2.23.0 - ``git restore`` is basically an alternative to ``git reset``, from - Git version 2.23.0 onwards, Git will use ``git restore`` instead of - ``git reset`` for many undo operations. - -.. code-block:: shell - - $ git add * - $ git status - On branch master - - Changes to be committed: - (use "git restore --staged ..." to unstage) - modified: CONTRIBUTING.md - renamed: README.md -> README - $ git restore --staged CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git restore --staged ..." to unstage) - renamed: README.md -> README - - Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git restore ..." to discard changes in working directory) - modified: CONTRIBUTING.md - $ git restore CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git restore --staged ..." to unstage) - renamed: README.md -> README - -.. important:: - It’s important to understand that git restore is a dangerous - command. Any local changes you made to that file are gone -- Git just - replaced that file with the last staged or committed version. Don't ever - use this command unless you absolutely know that you don’t want those - unsaved local changes. - -.. todo: - git checkout - -.. todo: - git tag diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 817e702fb..e39ae9e5d 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,6 +13,5 @@ intro setup basics - commits branch github From b16d5f8dd74695676ea7d4293d00c283458d0c47 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 19:24:46 +0300 Subject: [PATCH 168/689] Add tagging section --- src/vcs/index.txt | 1 + src/vcs/tagging.txt | 155 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/vcs/tagging.txt diff --git a/src/vcs/index.txt b/src/vcs/index.txt index e39ae9e5d..d197519b1 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,5 +13,6 @@ intro setup basics + tagging branch github diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt new file mode 100644 index 000000000..1b21fc4c8 --- /dev/null +++ b/src/vcs/tagging.txt @@ -0,0 +1,155 @@ + +############################################################################### + Tagging +############################################################################### + +Like most VCSs, Git has the ability to tag specific points in a repository's +history as being important. Typically, people use this functionality to mark +release points (``v1.0``, ``v2.0`` and so on). + +Listing tags +============ + +Listing the existing tags in Git is straightforward. Just type ``git tag`` +(with optional ``-l`` or ``--list``). + +.. code-block:: shell + + $ git tag + v1.0 + v2.0 + +This command lists the tags in alphabetical order, the order in which they are +displayed has no real importance. You can also search for tags that match +a particular pattern. The Git source repo, for instance contains more than +500 tags. If you're interested only in looking at the 1.8.4 series, you can +run this: + +.. code-block:: shell + + $ git tag -l "1.8.5*" + v1.8.5 + v1.8.5-rc0 + v1.8.5-rc1 + v1.8.5-rc2 + v1.8.5-rc3 + +Creating tags +============= + +Git supports two types of tags: *lightweight* and *annotated*. + +A lightweight tag is very much like a branch that doesn't change -- it's just +a pointer to a specific commit. + +Annotated tags, however, are stored as full objects in the Git database. +They're checksummed; contain the tagger name, email, and date; have a tagging +message; and can be signed and verified with GBU Privacy Guard (GPG). It's +generally recommended that you create annotated tags so you can have all this +information; but if you want a temporary tag or for some reason don't want to +keep the other information, lightweight tags are available too. + +.. rubric:: Annotated tags + +Creating an annotated tag in Git is simple. The easiest way is to specify +``-a`` when you run the ``tag`` command: + +.. code-block:: shell + + $ git tag -a VCS -m "Version Control System - tags" + $ git tag + VCS + $ git show VCS + tag VCS + Tagger: Serhii Horodilov + Date: Wed Aug 16 19:04:24 2023 +0300 + + Version Control System - tags + +.. rubric:: Lightweight tags + +Another way to tag commits is with a lightweight tag. this is basically +the commit checksum stored in a file -- no other information is kept. To +create a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` +options, just provide a tag name: + +.. code-block:: shell + + $ git tag tagging + $ git tag + VCS + tagging + $ git show tagging + commit 21ae739f891c6ee6a77d8986402cb1e69a9b6a88 (HEAD -> feature/vcs, tag: tagging, tag: VCS) + Author: Serhii Horodilov + Date: Wed Aug 16 18:45:23 2023 +0300 + + Move commits.txt content to "basics" document + +.. rubric:: Tagging later + +You can also tag commits after you're moved past them. + +.. code-block:: shell + + $ git log --pretty=format:%h -3 + 21ae739 + ea4ac00 + df216cf + $ git tag v1.4 ea4ac00 + $ git show v1.4 + commit ea4ac002604ca897ba05c846d63af1618c123b6f (tag: v1.4) + Author: Serhii Horodilov + Date: Wed Aug 16 18:32:27 2023 +0300 + + Fix code-block outputs + +Deleting tags +============= + +To delete a tag on your local repository, you can use ``git tag -d ``. + +.. code-block:: shell + + $ git tag -d VCS + Deleted tag 'VCS' (was eef3831) + +Checking out tags +================= + +If you want to view the versions of files a tag is pointing to, you can do +a ``git checkout`` of that tag, although this puts your repository in +"detached HEAD" state, which has some ill side effects: + +.. code-block:: shell + + $ git checkout VCS + Note: switching to 'vcs'. + + You are in 'detached HEAD' state. You can look around, make experimental + changes and commit them, and you can discard any commits you make in this + state without impacting any branches by switching back to a branch. + + If you want to create a new branch to retain commits you create, you may + do so (now or later) by using -c with the switch command. Example: + + git switch -c + + Or undo this operation with: + + git switch - + + Turn off this advice by setting config variable advice.detachedHead to false + + HEAD is now at 60565a1 Fix GitFlow branches list + +In “detached HEAD” state, if you make changes and then create a commit, the tag +will stay the same, but your new commit won’t belong to any branch and will be +unreachable, except by the exact commit hash. Thus, if you need to make changes +-- say you’re fixing a bug on an older version, for instance -- you will +generally want to create a branch: + +.. code-block:: shell + + $ git checkout -b vcs-tag-branch VCS + Switched to a new branch 'vcs-tag-branch' From d5ee66867f2e297c18640f485dcc198722d430c8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 19:42:14 +0300 Subject: [PATCH 169/689] Update branches document: switching branches --- src/vcs/branch.txt | 77 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 5b2daa8a8..04556bac4 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -52,27 +52,72 @@ creation using: git checkout -b [parent_commit] -.. todo: - Add merge section +Switching branches +================== -.. mermaid:: /../assets/mermaid/git/merge-1.mmd - :align: center - :caption: Fast-forward merge +To switch to an existing branch, you run the ``git checkout`` command. -.. mermaid:: /../assets/mermaid/git/merge-2.mmd - :align: center - :caption: Merge commit +.. code-block:: shell -.. todo: - Add rebase section + $ git branch + devel + feature/contributing + feature/legacy + feature/lib-ms + feature/libms + feature/pdf-builder + * feature/vcs + master + + $ git checkout devel + Switched to branch 'devel' + Your branch is up to date with 'origin/devel'. + +Basic branching +=============== -.. mermaid:: /../assets/mermaid/git/rebase-1.mmd - :align: center - :caption: Before rebase +First, let's say you're working on your project and have a couple of commits +already on the ``master`` branch. You've decided that you're going to work on +issue #53 in whatever issue-tracking system your company uses. To create a new +branch and switch to it at the same time, you can run the ``git checkout`` +command with the ``-b`` switch: -.. mermaid:: /../assets/mermaid/git/rebase-2.mmd - :align: center - :caption: After rebase +.. code-block:: shell + + $ git checkout -b feature/issue53 + Switched to a new branch "feature/issue53" + +This is shorthand for: + +.. code-block:: shell + + $ git branch feature/issue53 + $ git checkout feature/issue53 + +In deed this creates a new branch pointer, aimed to the latest commit present +on ``master`` branch. + +.. todo: + Add merge section +.. + .. mermaid:: /../assets/mermaid/git/merge-1.mmd + :align: center + :caption: Fast-forward merge +.. + .. mermaid:: /../assets/mermaid/git/merge-2.mmd + :align: center + :caption: Merge commit + +.. todo: + Add rebase section +.. + .. mermaid:: /../assets/mermaid/git/rebase-1.mmd + :align: center + :caption: Before rebase +.. + .. mermaid:: /../assets/mermaid/git/rebase-2.mmd + :align: center + :caption: After rebase .. todo: Describe merging and cherry-pick From badd45e5e8c3c9f349d82d40e4a5b31a594f06d9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 20:32:32 +0300 Subject: [PATCH 170/689] Change mermaid diagrams: default branch renamed to "master" --- assets/mermaid/git/cherry-pick.mmd | 9 +++++---- assets/mermaid/git/commits.mmd | 3 ++- assets/mermaid/git/gitflow.mmd | 7 ++++--- assets/mermaid/git/merge-1.mmd | 3 ++- assets/mermaid/git/merge-2.mmd | 3 ++- assets/mermaid/git/rebase-1.mmd | 3 ++- assets/mermaid/git/rebase-2.mmd | 1 + 7 files changed, 18 insertions(+), 11 deletions(-) diff --git a/assets/mermaid/git/cherry-pick.mmd b/assets/mermaid/git/cherry-pick.mmd index 29790cd8b..683c2fdf9 100644 --- a/assets/mermaid/git/cherry-pick.mmd +++ b/assets/mermaid/git/cherry-pick.mmd @@ -1,18 +1,19 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch develop - checkout main + checkout master commit checkout develop commit - checkout main + checkout master commit checkout develop commit id: "Important commit" - checkout main + checkout master commit checkout develop commit - checkout main + checkout master cherry-pick id: "Important commit" commit diff --git a/assets/mermaid/git/commits.mmd b/assets/mermaid/git/commits.mmd index a5dddb195..66263b0f9 100644 --- a/assets/mermaid/git/commits.mmd +++ b/assets/mermaid/git/commits.mmd @@ -1,3 +1,4 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph: commit id: "Initial commit" commit id: "383a7630" type: HIGHLIGHT @@ -5,5 +6,5 @@ gitGraph: commit id: "1fe791ec" branch testing commit id: "01cda149" - checkout main + checkout master commit id: "1c060f79" diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd index 4e4eab73a..2cfcb61ca 100644 --- a/assets/mermaid/git/gitflow.mmd +++ b/assets/mermaid/git/gitflow.mmd @@ -1,3 +1,4 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph %% initialize repository commit id: "Initial commit" @@ -7,7 +8,7 @@ gitGraph commit %% define hotfix branch - checkout main + checkout master commit id: "Buggy commit" type: REVERSE branch hotfix @@ -25,7 +26,7 @@ gitGraph commit id: "Fix bugs" type:HIGHLIGHT %% merge hotfix commits into main and develop - checkout main + checkout master merge hotfix checkout develop merge hotfix @@ -44,7 +45,7 @@ gitGraph checkout develop branch release/v1.0 commit id: "Work on release" tag: "v1.0" - checkout main + checkout master merge release/v1.0 checkout develop commit diff --git a/assets/mermaid/git/merge-1.mmd b/assets/mermaid/git/merge-1.mmd index 0da962d84..b0f07ec49 100644 --- a/assets/mermaid/git/merge-1.mmd +++ b/assets/mermaid/git/merge-1.mmd @@ -1,7 +1,8 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch feature commit commit - checkout main + checkout master merge feature \ No newline at end of file diff --git a/assets/mermaid/git/merge-2.mmd b/assets/mermaid/git/merge-2.mmd index 1d263df70..c4cf6c110 100644 --- a/assets/mermaid/git/merge-2.mmd +++ b/assets/mermaid/git/merge-2.mmd @@ -1,8 +1,9 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch feature commit commit - checkout main + checkout master commit merge feature id: "Merge commit" type:NORMAL \ No newline at end of file diff --git a/assets/mermaid/git/rebase-1.mmd b/assets/mermaid/git/rebase-1.mmd index de7705d30..f843759d0 100644 --- a/assets/mermaid/git/rebase-1.mmd +++ b/assets/mermaid/git/rebase-1.mmd @@ -1,7 +1,8 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch feature - checkout main + checkout master commit commit checkout feature diff --git a/assets/mermaid/git/rebase-2.mmd b/assets/mermaid/git/rebase-2.mmd index afcc89f18..20378057f 100644 --- a/assets/mermaid/git/rebase-2.mmd +++ b/assets/mermaid/git/rebase-2.mmd @@ -1,3 +1,4 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" commit From c8ead2473832fe723e7a8c9ae2c5830fde7b57e8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 21:26:15 +0300 Subject: [PATCH 171/689] Add basic merging section --- assets/mermaid/git/merge-1.mmd | 4 +- assets/mermaid/git/merge-2.mmd | 10 ++++- src/vcs/branch.txt | 78 ++++++++++++++++++++++++++++------ 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/assets/mermaid/git/merge-1.mmd b/assets/mermaid/git/merge-1.mmd index b0f07ec49..2a3260d0f 100644 --- a/assets/mermaid/git/merge-1.mmd +++ b/assets/mermaid/git/merge-1.mmd @@ -1,8 +1,8 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - branch feature + branch feature/issue53 commit commit checkout master - merge feature \ No newline at end of file + merge feature/issue53 diff --git a/assets/mermaid/git/merge-2.mmd b/assets/mermaid/git/merge-2.mmd index c4cf6c110..c2b7acb5a 100644 --- a/assets/mermaid/git/merge-2.mmd +++ b/assets/mermaid/git/merge-2.mmd @@ -1,9 +1,15 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - branch feature + branch feature/issue53 + branch feature/issue54 + checkout feature/issue53 commit commit checkout master + merge feature/issue53 + checkout feature/issue54 commit - merge feature id: "Merge commit" type:NORMAL \ No newline at end of file + checkout master + commit + merge feature/issue54 type:NORMAL id: "merge commit" \ No newline at end of file diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 04556bac4..a2970fe81 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -73,8 +73,8 @@ To switch to an existing branch, you run the ``git checkout`` command. Switched to branch 'devel' Your branch is up to date with 'origin/devel'. -Basic branching -=============== +Basic branching and merging +=========================== First, let's say you're working on your project and have a couple of commits already on the ``master`` branch. You've decided that you're going to work on @@ -95,18 +95,70 @@ This is shorthand for: $ git checkout feature/issue53 In deed this creates a new branch pointer, aimed to the latest commit present -on ``master`` branch. +on ``master`` branch. But, from now your branch is ``feature/issue53``. So, +doing commits moves the feature branch pointer forward, because you have it +checkout out (that is, your ``HEAD`` is pointing to it). -.. todo: - Add merge section -.. - .. mermaid:: /../assets/mermaid/git/merge-1.mmd - :align: center - :caption: Fast-forward merge -.. - .. mermaid:: /../assets/mermaid/git/merge-2.mmd - :align: center - :caption: Merge commit +Now, lets assume the "issue53" is fixed, and you need to bring commits from +the ``feature/issue53`` branch back to ``master``. + +Merging branches +---------------- + +You need to switch back to ``master`` branch and use ``git merge`` command, to +merge changes (commits) from the source branch into target. + +.. code-block:: shell + + $ git checkout master + $ git merge feature/issue53 + Updating f42c576..3a0874c + Fast-forward + index.html | 2 ++ + 1 file changed, 2 insertions(+) + +You'll notice phrase "fast-forward" in that merge. Because the commit pointed +to by the branch ``feature/issue53`` you merged in was directly ahead of the +last commit on ``master`` branch, Git simply moves the pointer forward. + +Changes from ``feature/issue53`` are now in the snapshot of the commit pointed +to by the ``master`` branch. + +.. mermaid:: /../assets/mermaid/git/merge-1.mmd + :align: center + :caption: Fast-forward merge + +Now, lets assume another developer started working on ``feature/issue54`` at +the same time. And there are few commits on this feature branch. Suppose, +the developer decided that work on **issue54** is finished and they want to +merge their feature branch into ``master``. + +.. code-block:: shell + + $ git branch + master + * feature/issue54 + $ git checkout master + $ git merge feature/issue54 + Merge made by the 'recursive' strategy. + index.html | 1 + + 1 file changed, 1 insertion(+) + +This looks a bit different than the ``feature/issue53`` merge. In this case, +development history has diverged from some older point. Because the commit +on the branch you're on isn't a direct ancestor of the branch you're merging +in, Git has to do some work. In this case, Git does a simple three-way merge, +using two snapshots pointed to by the branch tips and the common ancestor of +the two. + +Instead of just moving the branch pointer forward, Git creates a new snapshot +that results from this three-way merge and automatically creates a new commit +that points to it. This is referred to as a *merge commit*, and is a special in +that it has more than one parent. + +.. mermaid:: /../assets/mermaid/git/merge-2.mmd + :align: center + :caption: Merge commit .. todo: Add rebase section From 1be3bffea585761597c9fe88e0c12d6c11867e53 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 21:43:31 +0300 Subject: [PATCH 172/689] Add merge conflicts section --- src/vcs/branch.txt | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index a2970fe81..94642eeed 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -160,6 +160,76 @@ that it has more than one parent. :align: center :caption: Merge commit +Merge conflicts +=============== + +Occasionally, the merge process doesn't go smoothly. If the same part of +the same file is changed differently in the two branches you're merging, Git +won't be able to merge them cleanly. + +.. code-block:: shell + + $ git merge vcs + Auto-merging branches.txt + CONFLICT (content): Merge conflict in branches.txt + Automatic merge failed; fix conflicts and then commit the result + +Git hasn't automatically created a new merge commit. It has paused the process +while you resolve the conflict. If you want to see which files are unmerged at +any point after a merge conflict, you can run ``git status``: + +.. code-block:: shell + + $ git status + On branch master + + You have unmerged paths. + (fix conflicts and run "git commit") + + Unmerged paths: + (use "git add ..." to mark resolution) + + both modified: branches.txt + + no changes added to commit (use "git add" and/or "git commit -a") + +Anything that has merge conflicts and hasn't been resolved is listed as +unmerged. Git adds standard conflict-resolution markers to the files that +have conflicts, so you can open them manually and resolve those conflicts. +Your file contains a section that looks something like this: + +:: + + <<<<<<< HEAD:branches.txt + Anything that has merge conflicts and has not been resolved is listed as + ======= + Anything that has merge conflicts + and hasn't been resolved is listed as + + >>>>>>> vcs:branches.txt + +This means the version in ``HEAD`` (your ``master`` branch, because that was +what you had checked out when you ran merge command) is the top part of that +block (everything above the "======="), while the version in ``vcs`` branch +looks like everything in the bottom part. In order to resolve the conflict, +you have to either choose one side or the other or merge the contents yourself. + +When conflicts are resolved, you can run ``git status`` command again: + +.. code-block:: shell + + $ git status + On branch master + + All conflicts fixed but you are still merging. + (use "git commit" to conclude merge) + + Changes to be committed: + modified: branches.txt + +If you're happy with that, and you verify that everything that had conflicts +has been staged, you can run ``git commit`` for finalize the merge commit. + .. todo: Add rebase section .. From fc36d0cc082e6b52898f9442bdd2f66076bdb6f3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 21:50:19 +0300 Subject: [PATCH 173/689] Start working on branch management section --- src/vcs/branch.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 94642eeed..775f39d78 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -244,6 +244,37 @@ has been staged, you can run ``git commit`` for finalize the merge commit. .. todo: Describe merging and cherry-pick +Branch management +================= + +The ``git branch`` command does more that create and delete branches. If you +run it with no arguments, you get a simple listing of your current branches: + +:: + + $ git branch + devel + feature/contributing + feature/legacy + feature/lib-ms + feature/libms + feature/pdf-builder + * feature/vcs + master + +To see all the branches that contain work you haven't yet merged in, use +``--no-merged`` option: + +:: + + $ git branch --no-merged + feature/contributing + feature/lib-ms + feature/libms + +Branches listed in the output has work, that isn't merged to current branch. +So, deleting them via ``git branch -d`` will fail. + Branching strategies ==================== From 5ebe8895fc7d1cf8c9dfef112d73fd4ae55850d6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:08:04 +0300 Subject: [PATCH 174/689] Add rebase section --- assets/mermaid/git/rebase-1.mmd | 7 ++--- assets/mermaid/git/rebase-2.mmd | 7 ++--- src/vcs/branch.txt | 49 ++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/assets/mermaid/git/rebase-1.mmd b/assets/mermaid/git/rebase-1.mmd index f843759d0..f5476ddc2 100644 --- a/assets/mermaid/git/rebase-1.mmd +++ b/assets/mermaid/git/rebase-1.mmd @@ -3,8 +3,7 @@ gitGraph commit id: "Initial commit" branch feature checkout master - commit - commit + commit id: "Second commit" checkout feature - commit - commit \ No newline at end of file + commit id: "1st commit on feature" + commit id: "2nd commit on feature" \ No newline at end of file diff --git a/assets/mermaid/git/rebase-2.mmd b/assets/mermaid/git/rebase-2.mmd index 20378057f..5103a9f3d 100644 --- a/assets/mermaid/git/rebase-2.mmd +++ b/assets/mermaid/git/rebase-2.mmd @@ -1,9 +1,8 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - commit - commit + commit id: "Second commit" branch feature checkout feature - commit - commit \ No newline at end of file + commit id: "1st commit on feature" + commit id: "2nd commit on feature" \ No newline at end of file diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 775f39d78..b9ca74f82 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -230,16 +230,45 @@ When conflicts are resolved, you can run ``git status`` command again: If you're happy with that, and you verify that everything that had conflicts has been staged, you can run ``git commit`` for finalize the merge commit. -.. todo: - Add rebase section -.. - .. mermaid:: /../assets/mermaid/git/rebase-1.mmd - :align: center - :caption: Before rebase -.. - .. mermaid:: /../assets/mermaid/git/rebase-2.mmd - :align: center - :caption: After rebase +Rebasing +======== + +In Git, there two main ways to integrate changes from one branch into another: +the ``merge`` and the ``rebase``. + +Earlier, there was an example of diverged work and commits made on two +different branches. + +.. mermaid:: /../assets/mermaid/git/rebase-1.mmd + :align: center + :caption: Before rebase + +The easiest way to integrate the branches, as we've already covered, is +the ``merge`` command. It performs a three-way merge between the two latest +branch snapshots, and the most recent common ancestor of the two, creating +a new snapshot (and commit). + +However, there is another way: you can take the patch of the change that was +introduced in ``master`` and reapply it on top of ``feature``. In Git, this is +called *rebasing*. With ``rebase`` command, you can take all the changes that +were committed on one branch and replay them on a different branch. + +:: + + $ git checkout feature + $ git rebase master + First, rewinding head to replay your work on top of it... + Applying: added staged command + +This operation works by going to the common ancestor of the two branches, +getting the diff introduced by each commit of the branch you're on, saving +those diffs to temporary files, resetting the current branch to the same +commit as the branch you are rebasing onto, and finally applying each change +in turn. + +.. mermaid:: /../assets/mermaid/git/rebase-2.mmd + :align: center + :caption: After rebase .. todo: Describe merging and cherry-pick From bd16b07c14162a37715508e05dfa75ff45dffbc7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:09:52 +0300 Subject: [PATCH 175/689] Update branch document structure --- src/vcs/branch.txt | 69 +++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index b9ca74f82..0c24a7c9f 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -33,8 +33,40 @@ Every time you commit, the master branch pointer moves forward automatically. .. figure:: /../assets/img/git-commits.svg :align: center + +Branch management +================= + +The ``git branch`` command does more that create and delete branches. If you +run it with no arguments, you get a simple listing of your current branches: + +:: + + $ git branch + devel + feature/contributing + feature/legacy + feature/lib-ms + feature/libms + feature/pdf-builder + * feature/vcs + master + +To see all the branches that contain work you haven't yet merged in, use +``--no-merged`` option: + +:: + + $ git branch --no-merged + feature/contributing + feature/lib-ms + feature/libms + +Branches listed in the output has work, that isn't merged to current branch. +So, deleting them via ``git branch -d`` will fail. + Create branches -=============== +--------------- There are few ways to create a new branch in a Git repository. The most common way is to use ``git branch`` command. @@ -53,7 +85,7 @@ creation using: git checkout -b [parent_commit] Switching branches -================== +------------------ To switch to an existing branch, you run the ``git checkout`` command. @@ -161,7 +193,7 @@ that it has more than one parent. :caption: Merge commit Merge conflicts -=============== +--------------- Occasionally, the merge process doesn't go smoothly. If the same part of the same file is changed differently in the two branches you're merging, Git @@ -273,37 +305,6 @@ in turn. .. todo: Describe merging and cherry-pick -Branch management -================= - -The ``git branch`` command does more that create and delete branches. If you -run it with no arguments, you get a simple listing of your current branches: - -:: - - $ git branch - devel - feature/contributing - feature/legacy - feature/lib-ms - feature/libms - feature/pdf-builder - * feature/vcs - master - -To see all the branches that contain work you haven't yet merged in, use -``--no-merged`` option: - -:: - - $ git branch --no-merged - feature/contributing - feature/lib-ms - feature/libms - -Branches listed in the output has work, that isn't merged to current branch. -So, deleting them via ``git branch -d`` will fail. - Branching strategies ==================== From d920b1faa857ef23745acb212277c183fa4fe326 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:13:10 +0300 Subject: [PATCH 176/689] Change code blocks --- src/vcs/basics.txt | 44 ++++++++++++++++++++++---------------------- src/vcs/branch.txt | 20 ++++++++++---------- src/vcs/setup.txt | 4 ++-- src/vcs/tagging.txt | 16 ++++++++-------- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 99bf22729..ee767d7af 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -44,7 +44,7 @@ depending on which system you're running: In the project's directory initialize a new Git repository. -.. code-block:: shell +:: git init @@ -106,7 +106,7 @@ Checking out status of the file(s) The main tool you use to determine which files are in which state is the ``git status`` command. -.. code-block:: shell +:: $ # check status $ git status @@ -138,7 +138,7 @@ Tracking new files In order to begin tracking a new file, you use the ``git add`` command. -.. code-block:: shell +:: $ git add README.md $ git status @@ -158,7 +158,7 @@ committed (is under "Changes to be committed" heading). use cases is to add **all** modified files, or files inside of a specific directory. - .. code-block:: shell + :: git add * # stage all changes git add . # stage all changes in current directory @@ -171,7 +171,7 @@ If a staged (or already committed) file has been changed, it will be moved under "Modified" heading. These changes wouldn't be committed unless they are staged. -.. code-block:: shell +:: $ git status On branch devel @@ -201,7 +201,7 @@ them -- won't go into this commit. The simplest way to commit is to type ``git commit``: -.. code-block:: shell +:: git commit @@ -215,7 +215,7 @@ Doing so launches your editor of choice. Alternatively, you can type your commit message inline with the ``commit`` command by specifying it after a ``-m`` flag, like this: -.. code-block:: shell +:: git commit -m "Add GitHub workflow to test Sphinx builds for PRs to devel" @@ -226,7 +226,7 @@ Adding the ``-a`` option to the ``git commit`` command makes Git automatically stage every file that is already tracked before doing the commit, letting you skip the git add part: -.. code-block:: shell +:: $ git status On branch devel @@ -347,7 +347,7 @@ After you have created several commits, or if you have cloned a repository with an existing commit history, you'll probably want to look back to see what has happened. The most basic and powerful tool to do this is the git log command. -.. code-block:: shell +:: $ git log co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) @@ -379,7 +379,7 @@ difference (the *patch* output) introduced in each commit. You can also limit the number of log entries displayed, such as using ``-`` to show only desired number of latest entries. -.. code-block:: shell +:: $ git log -p -1 commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) @@ -418,7 +418,7 @@ use a series of summarizing options with ``git log``. If you want to see some abbreviated stats for each commit, you can use the ``--stat`` option: -.. code-block:: shell +:: $ git log -1 --stat commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) @@ -446,7 +446,7 @@ commit on a single line, which is useful if you're look a lot of commits. In addition, the ``short``, ``full``, and ``fuller`` values show the output in roughly the same format but with less or more information. -.. code-block:: shell +:: $ git log --pretty=oneline 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram @@ -457,7 +457,7 @@ in roughly the same format but with less or more information. 0786a699e6901a6c968090422b3cec789402ad21 Update branches document 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list -.. code-block:: shell +:: $ git log -10 --pretty=format:"%h - %an - %ad" 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 @@ -509,7 +509,7 @@ The ``oneline`` and ``format`` option values are particularly useful with another ``log`` option called ``--graph``. This option adds a nice little ASCII graph showing your branch and merge history: -.. code-block:: shell +:: $ git log --pretty=format:"%h %s" --graph * f9b988f Created base documentation structure @@ -578,7 +578,7 @@ limiting options; that is options that let you show only a subset of commits. You've seen one such option already -- the ``-`` (e.g. ``-2`` or ``-10``) option, which displays only the given number of latest commits. -.. code-block:: shell +:: $ git log -5 --oneline db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) @@ -591,7 +591,7 @@ However, the time-limiting options such as ``--since`` and ``--until`` are very useful. For example, the command to get the list of commits made in the last two weeks: -.. code-block:: shell +:: $ git log --since=2.weeks @@ -604,7 +604,7 @@ that introduced a change to those files. This is always the last option and is generally preceded by double dashes (``--``) to separate the paths from the options: -.. code-block:: shell +:: $ git log --oneline -- src/vcs/basics.txt 30cb1a2 Fix apostrophe for VCS files @@ -626,13 +626,13 @@ forget to add some files, or you mess up your commit message. If you want to redo that commit, make the additional changes you forgot, stage them, and commit again using the ``--amend`` option: -.. code-block:: shell +:: $ git commit --amend E.g. -.. code-block:: shell +:: $ git commit -m "Initial commit" $ git add forgotten_file @@ -646,7 +646,7 @@ working directory changes. The nice part is that the command you use to determine the state of those two areas also reminds you how to undo changes to them. -.. code-block:: shell +:: $ git add * $ git status @@ -684,7 +684,7 @@ you last committed. ``git status`` also tells you how to do that: It tells you pretty explicitly how to discard the changes you've make. -.. code-block:: shell +:: $ git checkout -- CONTRIBUTING.md $ git status @@ -702,7 +702,7 @@ Undoing things with git restore Git version 2.23.0 onwards, Git will use ``git restore`` instead of ``git reset`` for many undo operations. -.. code-block:: shell +:: $ git add * $ git status diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 0c24a7c9f..3b7f5cf57 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -71,7 +71,7 @@ Create branches There are few ways to create a new branch in a Git repository. The most common way is to use ``git branch`` command. -.. code-block:: shell +:: git branch [parent_commit] @@ -80,7 +80,7 @@ to the latest one available (HEAD pointer) at the moment of the branch creation. You can also switch to the newly created branch just after its creation using: -.. code-block:: shell +:: git checkout -b [parent_commit] @@ -89,7 +89,7 @@ Switching branches To switch to an existing branch, you run the ``git checkout`` command. -.. code-block:: shell +:: $ git branch devel @@ -114,14 +114,14 @@ issue #53 in whatever issue-tracking system your company uses. To create a new branch and switch to it at the same time, you can run the ``git checkout`` command with the ``-b`` switch: -.. code-block:: shell +:: $ git checkout -b feature/issue53 Switched to a new branch "feature/issue53" This is shorthand for: -.. code-block:: shell +:: $ git branch feature/issue53 $ git checkout feature/issue53 @@ -140,7 +140,7 @@ Merging branches You need to switch back to ``master`` branch and use ``git merge`` command, to merge changes (commits) from the source branch into target. -.. code-block:: shell +:: $ git checkout master $ git merge feature/issue53 @@ -165,7 +165,7 @@ the same time. And there are few commits on this feature branch. Suppose, the developer decided that work on **issue54** is finished and they want to merge their feature branch into ``master``. -.. code-block:: shell +:: $ git branch master @@ -199,7 +199,7 @@ Occasionally, the merge process doesn't go smoothly. If the same part of the same file is changed differently in the two branches you're merging, Git won't be able to merge them cleanly. -.. code-block:: shell +:: $ git merge vcs Auto-merging branches.txt @@ -210,7 +210,7 @@ Git hasn't automatically created a new merge commit. It has paused the process while you resolve the conflict. If you want to see which files are unmerged at any point after a merge conflict, you can run ``git status``: -.. code-block:: shell +:: $ git status On branch master @@ -248,7 +248,7 @@ you have to either choose one side or the other or merge the contents yourself. When conflicts are resolved, you can run ``git status`` command again: -.. code-block:: shell +:: $ git status On branch master diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index b158b6ae8..dc0f45d1c 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -33,7 +33,7 @@ trump those in *[path]/etc/gitconfig*. You can view all of your settings and where they are coming from using: -.. code-block:: shell +:: git config --list --show-origin @@ -44,7 +44,7 @@ The first thing you should do when you install Git is to set your user name and email address. This is important because every Git commit uses this information. -.. code-block:: shell +:: git config --global user.name "John Doe" git config --global user.email johndoe@example.com diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt index 1b21fc4c8..f3253d95b 100644 --- a/src/vcs/tagging.txt +++ b/src/vcs/tagging.txt @@ -13,7 +13,7 @@ Listing tags Listing the existing tags in Git is straightforward. Just type ``git tag`` (with optional ``-l`` or ``--list``). -.. code-block:: shell +:: $ git tag v1.0 @@ -25,7 +25,7 @@ a particular pattern. The Git source repo, for instance contains more than 500 tags. If you're interested only in looking at the 1.8.4 series, you can run this: -.. code-block:: shell +:: $ git tag -l "1.8.5*" v1.8.5 @@ -54,7 +54,7 @@ keep the other information, lightweight tags are available too. Creating an annotated tag in Git is simple. The easiest way is to specify ``-a`` when you run the ``tag`` command: -.. code-block:: shell +:: $ git tag -a VCS -m "Version Control System - tags" $ git tag @@ -73,7 +73,7 @@ the commit checksum stored in a file -- no other information is kept. To create a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` options, just provide a tag name: -.. code-block:: shell +:: $ git tag tagging $ git tag @@ -90,7 +90,7 @@ options, just provide a tag name: You can also tag commits after you're moved past them. -.. code-block:: shell +:: $ git log --pretty=format:%h -3 21ae739 @@ -109,7 +109,7 @@ Deleting tags To delete a tag on your local repository, you can use ``git tag -d ``. -.. code-block:: shell +:: $ git tag -d VCS Deleted tag 'VCS' (was eef3831) @@ -121,7 +121,7 @@ If you want to view the versions of files a tag is pointing to, you can do a ``git checkout`` of that tag, although this puts your repository in "detached HEAD" state, which has some ill side effects: -.. code-block:: shell +:: $ git checkout VCS Note: switching to 'vcs'. @@ -149,7 +149,7 @@ unreachable, except by the exact commit hash. Thus, if you need to make changes -- say you’re fixing a bug on an older version, for instance -- you will generally want to create a branch: -.. code-block:: shell +:: $ git checkout -b vcs-tag-branch VCS Switched to a new branch 'vcs-tag-branch' From 1b954ba7a3b8c88828846276848e8c69189bd309 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:36:58 +0300 Subject: [PATCH 177/689] Update VCS part translations --- src/_locales/uk/LC_MESSAGES/vcs.po | 950 ++++++++++++++++++++++++++++- src/vcs/basics.txt | 3 +- src/vcs/tagging.txt | 2 +- 3 files changed, 925 insertions(+), 30 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 8494859cb..45992f85a 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-16 14:39+0300\n" -"PO-Revision-Date: 2023-08-16 14:45+0300\n" +"POT-Creation-Date: 2023-08-16 22:36+0300\n" +"PO-Revision-Date: 2023-08-16 22:36+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -22,16 +22,14 @@ msgstr "" "X-Generator: Poedit 3.3.2\n" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 -#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 -#: ../../src/vcs/setup.txt:-1 +#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 +#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 msgid "Version control system" msgstr "Система контролю версій" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 -#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 -#: ../../src/vcs/setup.txt:-1 +#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 +#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 msgid "Serhii Horodilov" msgstr "Serhii Horodilov" @@ -478,6 +476,484 @@ msgstr "" "від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " "каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +#: ../../src/vcs/basics.txt:344 +msgid "Viewing the commit history" +msgstr "Перегляд історії коммітів" + +#: ../../src/vcs/basics.txt:346 +msgid "" +"After you have created several commits, or if you have cloned a repository " +"with an existing commit history, you'll probably want to look back to see " +"what has happened. The most basic and powerful tool to do this is the ``git " +"log`` command." +msgstr "" +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " +"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " +"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " +"команда ``git log``." + +#: ../../src/vcs/basics.txt:372 +msgid "" +"By default, with no arguments, ``git log`` lists the commits made in that " +"repository in reverse chronological order; that is, the most recent commits " +"show up first. As you can see, this command lists each commit with its SHA-1 " +"checksum, the author's name and email, the date written, and the commit " +"message." +msgstr "" +"За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " +"зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " +"найновіші комміти показуються першими. Як ви можете бачити, ця команда " +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " +"адресою автора, датою створення та повідомленням про внесення." + +#: ../../src/vcs/basics.txt:378 +msgid "" +"One of the more helpful options is ``-p`` or ``--patch``, which shows the " +"difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to " +"show only desired number of latest entries." +msgstr "" +"Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " +"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" +"``, щоб показати лише потрібну кількість останніх записів." + +#: ../../src/vcs/basics.txt:414 +msgid "" +"This option display the same information but with a diff directly following " +"each entry. This is very helpful for code review or to quickly browse what " +"happened during a series of commits that a collaborator has added. You can " +"also use a series of summarizing options with ``git log``." +msgstr "" +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " +"кожного запису. Це дуже корисно для перегляду коду або для швидкого " +"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " +"також можете скористатися низкою параметрів підсумовування за допомогою " +"``git log``." + +#: ../../src/vcs/basics.txt:419 +msgid "" +"If you want to see some abbreviated stats for each commit, you can use the " +"``--stat`` option:" +msgstr "" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " +"скористатися опцією ``--stat``:" + +#: ../../src/vcs/basics.txt:443 +msgid "" +"Another really useful option is ``--pretty``. This option changes the log " +"output to formats other that the default. A few prebuilt option values are " +"available for you to use. The ``oneline`` value for this option prints each " +"commit on a single line, which is useful if you're look a lot of commits. In " +"addition, the ``short``, ``full``, and ``fuller`` values show the output in " +"roughly the same format but with less or more information." +msgstr "" +"Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " +"формат виведення журналу на формат, відмінний від стандартного. Ви можете " +"скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " +"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " +"форматі, але з меншою або більшою кількістю інформації." + +#: ../../src/vcs/basics.txt:476 +msgid "Specifier" +msgstr "Специфікатор" + +#: ../../src/vcs/basics.txt:476 +msgid "Description of Output" +msgstr "Опис Результатів" + +#: ../../src/vcs/basics.txt:478 +msgid "%H" +msgstr "%H" + +#: ../../src/vcs/basics.txt:478 +msgid "Commit hash" +msgstr "Хеш комміту" + +#: ../../src/vcs/basics.txt:480 +msgid "%h" +msgstr "%h" + +#: ../../src/vcs/basics.txt:480 +msgid "Abbreviated commit hash" +msgstr "Скорочений хеш коміту" + +#: ../../src/vcs/basics.txt:482 +msgid "%T" +msgstr "%T" + +#: ../../src/vcs/basics.txt:482 +msgid "Tree hash" +msgstr "Дерево хешу" + +#: ../../src/vcs/basics.txt:484 +msgid "%t" +msgstr "%t" + +#: ../../src/vcs/basics.txt:484 +msgid "Abbreviated tree hash" +msgstr "Скорочений хеш дерева" + +#: ../../src/vcs/basics.txt:486 +msgid "%P" +msgstr "%P" + +#: ../../src/vcs/basics.txt:486 +msgid "Parent hashes" +msgstr "Батьківські хеші" + +#: ../../src/vcs/basics.txt:488 +msgid "%p" +msgstr "%p" + +#: ../../src/vcs/basics.txt:488 +msgid "Abbreviated parent hashes" +msgstr "Скорочені батьківські хеші" + +#: ../../src/vcs/basics.txt:490 +msgid "%an" +msgstr "%an" + +#: ../../src/vcs/basics.txt:490 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/vcs/basics.txt:492 +msgid "%ae" +msgstr "%ae" + +#: ../../src/vcs/basics.txt:492 +msgid "Author email" +msgstr "Електронна пошта автора" + +#: ../../src/vcs/basics.txt:494 +msgid "%ad" +msgstr "%ad" + +#: ../../src/vcs/basics.txt:494 +msgid "Author date (format respects the --date=option)" +msgstr "Дата автора (формат відповідає параметру --date=option)" + +#: ../../src/vcs/basics.txt:496 +msgid "%ar" +msgstr "%ar" + +#: ../../src/vcs/basics.txt:496 +msgid "Author date, relative" +msgstr "Дата автора, відносна" + +#: ../../src/vcs/basics.txt:498 +#, python-format +msgid "%cn" +msgstr "%cn" + +#: ../../src/vcs/basics.txt:498 +msgid "Committer name" +msgstr "Ім'я коммітера" + +#: ../../src/vcs/basics.txt:500 +#, python-format +msgid "%ce" +msgstr "%ce" + +#: ../../src/vcs/basics.txt:500 +msgid "Committer email" +msgstr "Електронна пошта коммітера" + +#: ../../src/vcs/basics.txt:502 +#, python-format +msgid "%cd" +msgstr "%cd" + +#: ../../src/vcs/basics.txt:502 +msgid "Committer date" +msgstr "Дата коммітера" + +#: ../../src/vcs/basics.txt:504 +#, python-format +msgid "%cr" +msgstr "%cr" + +#: ../../src/vcs/basics.txt:504 +msgid "Committer date, relative" +msgstr "Дата коммітера, відносна" + +#: ../../src/vcs/basics.txt:506 +#, python-format +msgid "%s" +msgstr "%s" + +#: ../../src/vcs/basics.txt:506 +msgid "Subject" +msgstr "Тема" + +#: ../../src/vcs/basics.txt:509 +msgid "" +"The ``oneline`` and ``format`` option values are particularly useful with " +"another ``log`` option called ``--graph``. This option adds a nice little " +"ASCII graph showing your branch and merge history:" +msgstr "" +"Значення параметрів ``online`` і ``format`` особливо корисні з іншим " +"параметром ``log``, який називається ``--graph``. Цей параметр додає " +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " +"злиття:" + +#: ../../src/vcs/basics.txt:538 +msgid "" +"There are many more output-formatting options to ``git log``. Common options " +"to ``git log`` are:" +msgstr "" +"Існує набагато більше варіантів форматування виводу для ``git log``. " +"Загальними параметрами ``git log`` є наступні:" + +#: ../../src/vcs/basics.txt:542 +msgid "Option" +msgstr "Опція" + +#: ../../src/vcs/basics.txt:542 +msgid "Description" +msgstr "Опис" + +#: ../../src/vcs/basics.txt:544 +msgid "-p" +msgstr "-p" + +#: ../../src/vcs/basics.txt:544 +msgid "Show the patch introduced with each commit." +msgstr "Показувати виправлення, внесені з кожним коммітом." + +#: ../../src/vcs/basics.txt:546 +msgid "--stat" +msgstr "--stat" + +#: ../../src/vcs/basics.txt:546 +msgid "Show statistics for files modified in each commit." +msgstr "Показувати статистику для файлів, змінених у кожному коміті." + +#: ../../src/vcs/basics.txt:548 +msgid "--shortstat" +msgstr "--shortstat" + +#: ../../src/vcs/basics.txt:548 +msgid "" +"Display only the changed/insertions/deletions line from the --stat command." +msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." + +#: ../../src/vcs/basics.txt:551 +msgid "--name-only" +msgstr "--name-only" + +#: ../../src/vcs/basics.txt:551 +msgid "Show the list of files modified after the commit information." +msgstr "Показати список файлів, змінених після фіксації інформації." + +#: ../../src/vcs/basics.txt:554 +msgid "--name-status" +msgstr "--name-status" + +#: ../../src/vcs/basics.txt:554 +msgid "" +"Show the list of files affected with added/modified/deleted information as " +"well." +msgstr "" +"Також покажіть список файлів, яких торкнулася додана/змінена/видалена " +"інформація." + +#: ../../src/vcs/basics.txt:557 +msgid "--abbrev-commit" +msgstr "--abbrev-commit" + +#: ../../src/vcs/basics.txt:557 +msgid "" +"Show only the first few characters of the SHA-1 checksum instead of all 40." +msgstr "" +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." + +#: ../../src/vcs/basics.txt:560 +msgid "--relative-date" +msgstr "--relative-date" + +#: ../../src/vcs/basics.txt:560 +msgid "" +"Display the date in a relative format (for example, \"2 weeks ago\") instead " +"of using the full date format." +msgstr "" +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " +"повного формату дати." + +#: ../../src/vcs/basics.txt:563 +msgid "--graph" +msgstr "--graph" + +#: ../../src/vcs/basics.txt:563 +msgid "" +"Display an ASCII graph of the branch and merge history beside the log output." +msgstr "" +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." + +#: ../../src/vcs/basics.txt:566 +msgid "--pretty" +msgstr "--pretty" + +#: ../../src/vcs/basics.txt:566 +msgid "" +"Show commits in an alternate format. Option values include oneline, short, " +"full, fuller, and format (where you specify your own format)." +msgstr "" +"Показувати комміти в альтернативному форматі. Значення опції включають: " +"online, short, full, fuller і format (де ви можете вказати свій власний " +"формат)." + +#: ../../src/vcs/basics.txt:570 +msgid "--oneline" +msgstr "--oneline" + +#: ../../src/vcs/basics.txt:570 +msgid "Shorthand for --pretty=oneline --abbrev-commit used together." +msgstr "" +"Скорочення для --pretty=online --abbrev-commit, що використовується разом." + +#: ../../src/vcs/basics.txt:575 +msgid "Limiting log output" +msgstr "Обмеження виводу журналу" + +#: ../../src/vcs/basics.txt:577 +msgid "" +"In addition to output-formatting options, ``git log`` takes a number of " +"useful limiting options; that is options that let you show only a subset of " +"commits. You've seen one such option already -- the ``-`` (e.g. " +"``-2`` or ``-10``) option, which displays only the given number of latest " +"commits." +msgstr "" +"На додаток до параметрів форматування виводу, ``git log`` приймає ряд " +"корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" +"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"кількість останніх коммітів." + +#: ../../src/vcs/basics.txt:591 +msgid "" +"However, the time-limiting options such as ``--since`` and ``--until`` are " +"very useful. For example, the command to get the list of commits made in the " +"last two weeks:" +msgstr "" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" +"until``. Наприклад, команда для отримання списку коммітів, зроблених за " +"останні два тижні:" + +#: ../../src/vcs/basics.txt:599 +msgid "" +"This command works with lots of formats - you can specify a specific date " +"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"minutes ago\"``." +msgstr "" +"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " +"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " +"день 3 хвилини тому\"``." + +#: ../../src/vcs/basics.txt:602 +msgid "" +"The last really useful option to pass to ``git log`` as a filter is a path. " +"If you specify a directory or file name, you can limit the log output to " +"commits that introduced a change to those files. This is always the last " +"option and is generally preceded by double dashes (``--``) to separate the " +"paths from the options:" +msgstr "" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " +"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " +"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " +"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " +"щоб відокремити шлях від параметрів:" + +#: ../../src/vcs/basics.txt:621 +msgid "Undoing things" +msgstr "Виправлення помилок" + +#: ../../src/vcs/basics.txt:623 +msgid "At any stage, you may want to undo something." +msgstr "На будь-якому етапі ви можете захотіти щось виправити." + +#: ../../src/vcs/basics.txt:625 +msgid "" +"One of the common undos takes place when you commit too early and possibly " +"forget to add some files, or you mess up your commit message. If you want to " +"redo that commit, make the additional changes you forgot, stage them, and " +"commit again using the ``--amend`` option:" +msgstr "" +"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " +"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " +"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " +"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " +"використовуючи опцію ``--amend``:" + +#: ../../src/vcs/basics.txt:634 +msgid "E.g." +msgstr "Наприклад." + +#: ../../src/vcs/basics.txt:643 +msgid "Unstaging a staged file" +msgstr "Скасування додавання файла до індексу" + +#: ../../src/vcs/basics.txt:645 +msgid "" +"The next two sections demonstrate how to work with your staging area and " +"working directory changes. The nice part is that the command you use to " +"determine the state of those two areas also reminds you how to undo changes " +"to them." +msgstr "" +"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " +"збірці та робочому каталозі. Приємним моментом є те, що команда, за " +"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " +"те, як скасувати внесені до них зміни." + +#: ../../src/vcs/basics.txt:676 +msgid "Unmodifiyng a modified file" +msgstr "Скасування модифікації зміненого файлу" + +#: ../../src/vcs/basics.txt:678 +msgid "" +"What if you realize that you don't want to keep your changes to some file? " +"You can easily unmodify it -- **revert** it back to what it looked like when " +"you last committed. ``git status`` also tells you how to do that:" +msgstr "" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " +"Ви можете легко скасувати зміни - **повернути** його до того, як він " +"виглядав під час останнього компонування. ``git status`` також покаже вам, " +"як це зробити:" + +#: ../../src/vcs/basics.txt:686 +msgid "It tells you pretty explicitly how to discard the changes you've make." +msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." + +#: ../../src/vcs/basics.txt:699 +msgid "Undoing things with git restore" +msgstr "Скасування змін за допомогою git restore" + +#: ../../src/vcs/basics.txt:701 +msgid "" +"``git restore`` is basically an alternative to ``git reset``, from Git " +"version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " +"reset`` for many undo operations." +msgstr "" +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " +"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " +"операцій скасування." + +#: ../../src/vcs/basics.txt:737 +msgid "" +"It’s important to understand that git restore is a dangerous command. " +"Any local changes you made to that file are gone -- Git just replaced that " +"file with the last staged or committed version. Don't ever use this command " +"unless you absolutely know that you don’t want those unsaved local changes." +msgstr "" +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " +"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " +"замінить цей файл на останню версію, що перебуває у стадії виконання або " +"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " +"вам не потрібні ці незбережені локальні зміни." + #: ../../src/vcs/branch.txt:-1 msgid "version, control, system, vcs, git, branch, merge, cherry-pick" msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" @@ -528,11 +1004,40 @@ msgstr "" "Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " "пересувається вперед." -#: ../../src/vcs/branch.txt:37 +#: ../../src/vcs/branch.txt:38 +msgid "Branch management" +msgstr "Управління гілками" + +#: ../../src/vcs/branch.txt:40 +msgid "" +"The ``git branch`` command does more that create and delete branches. If you " +"run it with no arguments, you get a simple listing of your current branches:" +msgstr "" +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " +"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"поточних гілок:" + +#: ../../src/vcs/branch.txt:55 +msgid "" +"To see all the branches that contain work you haven't yet merged in, use ``--" +"no-merged`` option:" +msgstr "" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " +"використовуйте опцію ``--no-merged``:" + +#: ../../src/vcs/branch.txt:65 +msgid "" +"Branches listed in the output has work, that isn't merged to current branch. " +"So, deleting them via ``git branch -d`` will fail." +msgstr "" +"У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " +"гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." + +#: ../../src/vcs/branch.txt:69 msgid "Create branches" msgstr "Створення гілок" -#: ../../src/vcs/branch.txt:39 +#: ../../src/vcs/branch.txt:71 msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." @@ -540,7 +1045,7 @@ msgstr "" "Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " "них - використання команди ``git branch``." -#: ../../src/vcs/branch.txt:46 +#: ../../src/vcs/branch.txt:78 msgid "" "Pointer to a parent commit is optional. By default the parent commit is set " "to the latest one available (HEAD pointer) at the moment of the branch " @@ -552,11 +1057,256 @@ msgstr "" "на момент створення гілки. Ви також можете переключитися на новостворену " "гілку одразу після її створення за допомогою:" -#: ../../src/vcs/branch.txt:81 +#: ../../src/vcs/branch.txt:88 +msgid "Switching branches" +msgstr "Перемикання гілок" + +#: ../../src/vcs/branch.txt:90 +msgid "To switch to an existing branch, you run the ``git checkout`` command." +msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." + +#: ../../src/vcs/branch.txt:109 +msgid "Basic branching and merging" +msgstr "To switch to an existing branch, you run the ``git checkout`` command" + +#: ../../src/vcs/branch.txt:111 +msgid "" +"First, let's say you're working on your project and have a couple of commits " +"already on the ``master`` branch. You've decided that you're going to work " +"on issue #53 in whatever issue-tracking system your company uses. To create " +"a new branch and switch to it at the same time, you can run the ``git " +"checkout`` command with the ``-b`` switch:" +msgstr "" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " +"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " +"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " +"створити нову гілку і одночасно переключитися на неї, ви можете виконати " +"команду ``git checkout`` з ключем ``-b``:" + +#: ../../src/vcs/branch.txt:122 +msgid "This is shorthand for:" +msgstr "Це скорочено означає:" + +#: ../../src/vcs/branch.txt:129 +msgid "" +"In deed this creates a new branch pointer, aimed to the latest commit " +"present on ``master`` branch. But, from now your branch is ``feature/" +"issue53``. So, doing commits moves the feature branch pointer forward, " +"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +msgstr "" +"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " +"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" +"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " +"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." + +#: ../../src/vcs/branch.txt:134 +msgid "" +"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " +"from the ``feature/issue53`` branch back to ``master``." +msgstr "" +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " +"з гілки ``feature/issue53`` назад до ``master``." + +#: ../../src/vcs/branch.txt:138 +msgid "Merging branches" +msgstr "Злиття гілок" + +#: ../../src/vcs/branch.txt:140 +msgid "" +"You need to switch back to ``master`` branch and use ``git merge`` command, " +"to merge changes (commits) from the source branch into target." +msgstr "" +"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " +"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." + +#: ../../src/vcs/branch.txt:152 +msgid "" +"You'll notice phrase \"fast-forward\" in that merge. Because the commit " +"pointed to by the branch ``feature/issue53`` you merged in was directly " +"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"forward." +msgstr "" +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " +"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " +"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " +"вказівник вперед." + +#: ../../src/vcs/branch.txt:156 +msgid "" +"Changes from ``feature/issue53`` are now in the snapshot of the commit " +"pointed to by the ``master`` branch." +msgstr "" +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"гілка ``master``." + +#: ../../src/vcs/branch.txt:163 +msgid "" +"Now, lets assume another developer started working on ``feature/issue54`` at " +"the same time. And there are few commits on this feature branch. Suppose, " +"the developer decided that work on **issue54** is finished and they want to " +"merge their feature branch into ``master``." +msgstr "" +"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " +"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " +"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " +"з ``master``." + +#: ../../src/vcs/branch.txt:179 +msgid "" +"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"development history has diverged from some older point. Because the commit " +"on the branch you're on isn't a direct ancestor of the branch you're merging " +"in, Git has to do some work. In this case, Git does a simple three-way " +"merge, using two snapshots pointed to by the branch tips and the common " +"ancestor of the two." +msgstr "" +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " +"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " +"просте тристороннє злиття, використовуючи два знімки, на які вказують " +"кінчики гілок, і їхнього спільного предка." + +#: ../../src/vcs/branch.txt:186 +msgid "" +"Instead of just moving the branch pointer forward, Git creates a new " +"snapshot that results from this three-way merge and automatically creates a " +"new commit that points to it. This is referred to as a *merge commit*, and " +"is a special in that it has more than one parent." +msgstr "" +"Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " +"новий знімок, який є результатом цього тристороннього злиття, і автоматично " +"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " +"і він особливий тим, що має більше одного батька." + +#: ../../src/vcs/branch.txt:196 +msgid "Merge conflicts" +msgstr "Конфлікти об'єднання" + +#: ../../src/vcs/branch.txt:198 +msgid "" +"Occasionally, the merge process doesn't go smoothly. If the same part of the " +"same file is changed differently in the two branches you're merging, Git " +"won't be able to merge them cleanly." +msgstr "" +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " +"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " +"Git не зможе об'єднати їх чисто." + +#: ../../src/vcs/branch.txt:209 +msgid "" +"Git hasn't automatically created a new merge commit. It has paused the " +"process while you resolve the conflict. If you want to see which files are " +"unmerged at any point after a merge conflict, you can run ``git status``:" +msgstr "" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " +"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " +"після конфлікту злиття, ви можете запустити ``git status``:" + +#: ../../src/vcs/branch.txt:228 +msgid "" +"Anything that has merge conflicts and hasn't been resolved is listed as " +"unmerged. Git adds standard conflict-resolution markers to the files that " +"have conflicts, so you can open them manually and resolve those conflicts. " +"Your file contains a section that looks something like this:" +msgstr "" +"Все, що має конфлікти злиття, які не було вирішено, позначається як не " +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " +"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " +"Ваш файл містить розділ, який виглядає приблизно так:" + +#: ../../src/vcs/branch.txt:243 +msgid "" +"This means the version in ``HEAD`` (your ``master`` branch, because that was " +"what you had checked out when you ran merge command) is the top part of that " +"block (everything above the \"=======\"), while the version in ``vcs`` " +"branch looks like everything in the bottom part. In order to resolve the " +"conflict, you have to either choose one side or the other or merge the " +"contents yourself." +msgstr "" +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " +"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " +"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " +"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " +"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." + +#: ../../src/vcs/branch.txt:249 +msgid "When conflicts are resolved, you can run ``git status`` command again:" +msgstr "" +"Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " +"status``:" + +#: ../../src/vcs/branch.txt:262 +msgid "" +"If you're happy with that, and you verify that everything that had conflicts " +"has been staged, you can run ``git commit`` for finalize the merge commit." +msgstr "" +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " +"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " +"злиття." + +#: ../../src/vcs/branch.txt:266 +msgid "Rebasing" +msgstr "Перебазування" + +#: ../../src/vcs/branch.txt:268 +msgid "" +"In Git, there two main ways to integrate changes from one branch into " +"another: the ``merge`` and the ``rebase``." +msgstr "" +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " +"\"злиття\" і \"перебазування\"." + +#: ../../src/vcs/branch.txt:271 +msgid "" +"Earlier, there was an example of diverged work and commits made on two " +"different branches." +msgstr "" +"Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " +"зроблених на двох різних гілках." + +#: ../../src/vcs/branch.txt:278 +msgid "" +"The easiest way to integrate the branches, as we've already covered, is the " +"``merge`` command. It performs a three-way merge between the two latest " +"branch snapshots, and the most recent common ancestor of the two, creating a " +"new snapshot (and commit)." +msgstr "" +"Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " +"``merge``. Вона виконує тристороннє злиття між двома останніми знімками " +"гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." + +#: ../../src/vcs/branch.txt:283 +msgid "" +"However, there is another way: you can take the patch of the change that was " +"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " +"is called *rebasing*. With ``rebase`` command, you can take all the changes " +"that were committed on one branch and replay them on a different branch." +msgstr "" +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " +"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " +"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " +"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." + +#: ../../src/vcs/branch.txt:295 +msgid "" +"This operation works by going to the common ancestor of the two branches, " +"getting the diff introduced by each commit of the branch you're on, saving " +"those diffs to temporary files, resetting the current branch to the same " +"commit as the branch you are rebasing onto, and finally applying each change " +"in turn." +msgstr "" +"Ця операція виконується шляхом переходу до спільного предка двох гілок, " +"отримання відмінностей, внесених кожним коммітом гілки, на якій ви " +"перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " +"нарешті, застосування кожної зміни по черзі." + +#: ../../src/vcs/branch.txt:309 msgid "Branching strategies" msgstr "Стратегії розгалуження" -#: ../../src/vcs/branch.txt:83 +#: ../../src/vcs/branch.txt:311 msgid "" "Branching strategy in version control systems defines how branches are " "created, managed, and used in a project's development process. It helps " @@ -572,7 +1322,7 @@ msgstr "" "чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " "структурований робочий процес розробки." -#: ../../src/vcs/branch.txt:90 +#: ../../src/vcs/branch.txt:318 msgid "" "GitFlow is a popular branching strategy that provides a well-defined model " "for managing branches in a Git repository. It was introduced by Vincent " @@ -584,7 +1334,7 @@ msgstr "" "Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " "основних гілок: \"master\" і \"develop\"." -#: ../../src/vcs/branch.txt:94 +#: ../../src/vcs/branch.txt:322 msgid "" "**Master Branch**: The \"master\" branch represents the stable version of " "the codebase. It should always contain production-ready code and be free " @@ -596,7 +1346,7 @@ msgstr "" "жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " "релізні версії." -#: ../../src/vcs/branch.txt:98 +#: ../../src/vcs/branch.txt:326 msgid "" "**Develop Branch**: The \"develop\" branch is where the ongoing development " "and integration of features take place. It serves as the integration branch " @@ -607,7 +1357,7 @@ msgstr "" "розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " "функціональних гілок, а також повинна містити стабільну версію коду." -#: ../../src/vcs/branch.txt:102 +#: ../../src/vcs/branch.txt:330 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " "\"feature\" branch is created off the \"develop\" branch. These branches are " @@ -617,7 +1367,7 @@ msgstr "" "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " "недовговічні і існують лише на час розробки функції." -#: ../../src/vcs/branch.txt:105 +#: ../../src/vcs/branch.txt:333 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " "ready for a release, a \"release\" branch is created. The release branch is " @@ -627,7 +1377,7 @@ msgstr "" "створюється гілка \"release\". Релізна гілка використовується для " "тестування, виправлення помилок і підготовки до розгортання." -#: ../../src/vcs/branch.txt:108 +#: ../../src/vcs/branch.txt:336 msgid "" "**Hotfix Branches**: If a critical issue is discovered in the production " "version, a \"hotfix\" branch is created from the \"master\" branch. This " @@ -638,7 +1388,7 @@ msgstr "" "на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " "виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." -#: ../../src/vcs/branch.txt:113 +#: ../../src/vcs/branch.txt:341 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " @@ -652,14 +1402,6 @@ msgstr "" "випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " "і командою, яка працює над декількома функціями одночасно." -#: ../../src/vcs/commits.txt:-1 -msgid "version, control, system, vcs, git, history, commit" -msgstr "version, control, system, vcs, git, history, commit" - -#: ../../src/vcs/commits.txt:8 -msgid "Working with Commits" -msgstr "Робота з коммітами" - #: ../../src/vcs/github.txt:-1 msgid "version, control, system, vcs, git, github" msgstr "version, control, system, vcs, git, github" @@ -979,3 +1721,155 @@ msgstr "" "Перше, що вам слід зробити під час встановлення Git'у, це вказати своє ім'я " "користувача та адресу електронної пошти. Це важливо, оскільки кожна фіксація " "Git'а використовує цю інформацію." + +#: ../../src/vcs/tagging.txt:4 +msgid "Tagging" +msgstr "Тегування" + +#: ../../src/vcs/tagging.txt:6 +msgid "" +"Like most VCSs, Git has the ability to tag specific points in a repository's " +"history as being important. Typically, people use this functionality to mark " +"release points (``v1.0``, ``v2.0`` and so on)." +msgstr "" +"Як і більшість VCS, Git має можливість позначати певні моменти в історії " +"сховища як важливі. Зазвичай люди використовують цю функцію для позначення " +"точок релізу (``v1.0``, ``v2.0`` і так далі)." + +#: ../../src/vcs/tagging.txt:11 +msgid "Listing tags" +msgstr "Перелік тегів" + +#: ../../src/vcs/tagging.txt:13 +msgid "" +"Listing the existing tags in Git is straightforward. Just type ``git tag`` " +"(with optional ``-l`` or ``--list``)." +msgstr "" +"Перерахувати існуючі теги у Git'і дуже просто. Просто введіть ``git tag`` (з " +"необов'язковим ``-l`` або ``--list``)." + +#: ../../src/vcs/tagging.txt:22 +msgid "" +"This command lists the tags in alphabetical order, the order in which they " +"are displayed has no real importance. You can also search for tags that " +"match a particular pattern. The Git source repo, for instance contains more " +"than 500 tags. If you're interested only in looking at the 1.8.4 series, you " +"can run this:" +msgstr "" +"Ця команда перелічує мітки в алфавітному порядку, порядок їх відображення не " +"має особливого значення. Ви також можете шукати теги, які відповідають " +"певному шаблону. Наприклад, сховище коду Git містить понад 500 тегів. Якщо " +"вас цікавить лише серія 1.8.4, ви можете виконати цю команду:" + +#: ../../src/vcs/tagging.txt:38 +msgid "Creating tags" +msgstr "Створення тегів" + +#: ../../src/vcs/tagging.txt:40 +msgid "Git supports two types of tags: *lightweight* and *annotated*." +msgstr "Git підтримує два типи тегів: *легкі* та *анотовані*." + +#: ../../src/vcs/tagging.txt:42 +msgid "" +"A lightweight tag is very much like a branch that doesn't change -- it's " +"just a pointer to a specific commit." +msgstr "" +"Полегшений тег дуже схожий на гілку, яка не змінюється -- це просто " +"вказівник на конкретний комміт." + +#: ../../src/vcs/tagging.txt:45 +msgid "" +"Annotated tags, however, are stored as full objects in the Git database. " +"They're checksummed; contain the tagger name, email, and date; have a " +"tagging message; and can be signed and verified with GBU Privacy Guard " +"(GPG). It's generally recommended that you create annotated tags so you can " +"have all this information; but if you want a temporary tag or for some " +"reason don't want to keep the other information, lightweight tags are " +"available too." +msgstr "" +"Анотовані мітки, однак, зберігаються як повноцінні об'єкти в базі даних Git. " +"Вони мають контрольну суму, містять ім'я тегувальника, електронну пошту та " +"дату, мають повідомлення про тегування, а також можуть бути підписані та " +"перевірені за допомогою GBU Privacy Guard (GPG). Зазвичай рекомендується " +"створювати анотовані мітки, щоб мати всю цю інформацію; але якщо вам " +"потрібна тимчасова мітка або з якихось причин ви не хочете зберігати іншу " +"інформацію, доступні також полегшені мітки." + +#: ../../src/vcs/tagging.txt:53 +msgid "Annotated tags" +msgstr "Анотовані теги" + +#: ../../src/vcs/tagging.txt:54 +msgid "" +"Creating an annotated tag in Git is simple. The easiest way is to specify ``-" +"a`` when you run the ``tag`` command:" +msgstr "" +"Створити анотовану мітку в Git'і дуже просто. Найпростіший спосіб - вказати " +"``-a`` при виконанні команди ``tag``:" + +#: ../../src/vcs/tagging.txt:70 +msgid "Lightweight tags" +msgstr "Легкі мітки" + +#: ../../src/vcs/tagging.txt:71 +msgid "" +"Another way to tag commits is with a lightweight tag. this is basically the " +"commit checksum stored in a file -- no other information is kept. To create " +"a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` " +"options, just provide a tag name:" +msgstr "" +"Інший спосіб позначення коммітів - використання полегшених тегів. Це, по " +"суті, контрольна сума комміту, яка зберігається у файлі - ніяка інша " +"інформація не зберігається. Щоб створити полегшену мітку, не вказуйте жодної " +"з опцій ``-a``, ``-s`` або ``-m``, просто вкажіть назву мітки:" + +#: ../../src/vcs/tagging.txt:90 +msgid "Tagging later" +msgstr "Відмітити пізніше" + +#: ../../src/vcs/tagging.txt:91 +msgid "You can also tag commits after you're moved past them." +msgstr "Ви також можете позначати коміти після того, як ви пройшли повз них." + +#: ../../src/vcs/tagging.txt:108 +msgid "Deleting tags" +msgstr "Видалення тегів" + +#: ../../src/vcs/tagging.txt:110 +msgid "" +"To delete a tag on your local repository, you can use ``git tag -d " +"``." +msgstr "" +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " +"tag -d ``." + +#: ../../src/vcs/tagging.txt:118 +msgid "Checking out tags" +msgstr "Перевірка тегів" + +#: ../../src/vcs/tagging.txt:120 +msgid "" +"If you want to view the versions of files a tag is pointing to, you can do a " +"``git checkout`` of that tag, although this puts your repository in " +"\"detached HEAD\" state, which has some ill side effects:" +msgstr "" +"Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " +"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" + +#: ../../src/vcs/tagging.txt:146 +msgid "" +"In \"detached HEAD\" state, if you make changes and then create a commit, " +"the tag will stay the same, but your new commit won’t belong to any branch " +"and will be unreachable, except by the exact commit hash. Thus, if you need " +"to make changes -- say you’re fixing a bug on an older version, for instance " +"-- you will generally want to create a branch:" +msgstr "" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " +"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " +"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " +"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " +"як правило, краще створити гілку:" + +#~ msgid "version, control, system, vcs, git, history, commit" +#~ msgstr "version, control, system, vcs, git, history, commit" diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index ee767d7af..1c93d8ec4 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -345,7 +345,8 @@ Viewing the commit history After you have created several commits, or if you have cloned a repository with an existing commit history, you'll probably want to look back to see what has -happened. The most basic and powerful tool to do this is the git log command. +happened. The most basic and powerful tool to do this is the ``git log`` +command. :: diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt index f3253d95b..9eca03a2a 100644 --- a/src/vcs/tagging.txt +++ b/src/vcs/tagging.txt @@ -143,7 +143,7 @@ a ``git checkout`` of that tag, although this puts your repository in HEAD is now at 60565a1 Fix GitFlow branches list -In “detached HEAD” state, if you make changes and then create a commit, the tag +In "detached HEAD" state, if you make changes and then create a commit, the tag will stay the same, but your new commit won’t belong to any branch and will be unreachable, except by the exact commit hash. Thus, if you need to make changes -- say you’re fixing a bug on an older version, for instance -- you will From 088bddffa61a00e8b5fc5b6ff3d31111e1e33ddb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:34:20 +0300 Subject: [PATCH 178/689] Add cherry-pick section --- src/vcs/branch.txt | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 3b7f5cf57..199b60944 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -302,8 +302,32 @@ in turn. :align: center :caption: After rebase -.. todo: - Describe merging and cherry-pick +.. note:: + Other maintainers prefer to rebase (or cherry-pick) contributed work on + top of their ``master`` branch, rather then merging it in, to keep + a mostly linear history. + +Cherry-picking +============== + +The other way to move introduced work from one branch to another is to +*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. +It takes the patch that was introduced in a commit and tries to reapply +it on the branch you're currently on. This is useful if you have a number +of commits on a topic branch and you want to integrate only one of them, +or if you only have one commit on a topic branch and you'd prefer to +cherry-pick it rather than run rebase. + +.. mermaid:: /../assets/mermaid/git/cherry-pick.mmd + :align: center + :caption: Cherry-pick a commit + +:: + + $ git cherry-pick e43a6 + [master 0288270] Important commit + Date: Thu Aug 17 20:30:05 2023 +0300 + 3 files changed, 17 insertions(+), 3 deletions(-) Branching strategies ==================== From fb078c2d1b8d60e0d750077301f79b19e1e756fd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:39:45 +0300 Subject: [PATCH 179/689] Add remote document --- src/vcs/index.txt | 1 + src/vcs/remotes.txt | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 src/vcs/remotes.txt diff --git a/src/vcs/index.txt b/src/vcs/index.txt index d197519b1..4b4ab1217 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -15,4 +15,5 @@ basics tagging branch + remotes github diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt new file mode 100644 index 000000000..4a8bb3076 --- /dev/null +++ b/src/vcs/remotes.txt @@ -0,0 +1,3 @@ +############################################################################### + Remotes +############################################################################### From 19597bad4b5305705ef5c1b187b944915521d162 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:43:25 +0300 Subject: [PATCH 180/689] Change headers in VCS documentation --- src/vcs/remotes.txt | 4 ++-- src/vcs/tagging.txt | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt index 4a8bb3076..980850800 100644 --- a/src/vcs/remotes.txt +++ b/src/vcs/remotes.txt @@ -1,3 +1,3 @@ -############################################################################### +******************************************************************************* Remotes -############################################################################### +******************************************************************************* diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt index 9eca03a2a..b52529859 100644 --- a/src/vcs/tagging.txt +++ b/src/vcs/tagging.txt @@ -1,7 +1,6 @@ - -############################################################################### +******************************************************************************* Tagging -############################################################################### +******************************************************************************* Like most VCSs, Git has the ability to tag specific points in a repository's history as being important. Typically, people use this functionality to mark From 755cdd4b20931a036699810d88b8e9d7ce84a9eb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:59:29 +0300 Subject: [PATCH 181/689] Update GitHub document with 2FA note (GitHub official) --- src/vcs/github.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/vcs/github.txt b/src/vcs/github.txt index 2b2b23c19..f5067bffe 100644 --- a/src/vcs/github.txt +++ b/src/vcs/github.txt @@ -12,7 +12,6 @@ `GitHub`_ is the single largest host for Git repositories, and is the central point of collaboration for millions of developers and projects. - Account setup and configuration =============================== @@ -21,5 +20,16 @@ and press "Sign Up" button. The GitHub will lead you through the account creation process. Just follow the hints and provide an email address, username and a strong password. +About authentication to GitHub +------------------------------ + +.. note:: + Starting in March 2023 and through the end of 2023, GitHub gradually began + to require all users who contribute code on GitHub to enable two-factor + authentication (2FA). + +Connect with SSH +================ + .. todo: - Describe SSH key generation and set up + From dbd9994762a49be4b60106be2fe89f4168efe50a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 22:37:26 +0300 Subject: [PATCH 182/689] Add SSH keys setup section for GitHub document --- src/vcs/github.txt | 104 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/vcs/github.txt b/src/vcs/github.txt index f5067bffe..6ed39d2c3 100644 --- a/src/vcs/github.txt +++ b/src/vcs/github.txt @@ -31,5 +31,109 @@ About authentication to GitHub Connect with SSH ================ +You can access and write data in repositories on GitHub using +:abbr:`SSH (Secure Shell Protocol)`. When you connect to via SSH, you +authenticate using a private key file on your local machine. + +Generating a new SSH key +------------------------ + +You can generate a new SSH key on your local machine. After you do that, +you can add the **public** key to your account on GitHub to enable +authentication for Git operations over SSH. + +#. Open terminal (git-bash will suite for Windows users) +#. Run command: + + :: + + ssh-keygen -t ed25519 -C "your@email.com" + + .. note:: + If you are using a legacy system that doesn't support the **Ed25519** + algorithm, use: + + :: + + ssh-keygen -t rsa -b 4096 -C "your@email.com" + + When you're prompted to "Enter a file in which to save the key", you can + press **Enter** to accept the default file location. + + :: + + $ Enter a file in which to save the key (~/.ssh/id_ALGORITHM):[Press enter] + + Type a secure passphrase, if you want -- this is an extra layer of + security. + + :: + + $ Enter passphrase (empty for no passphrase): [Type a passphrase] + $ Enter same passphrase again: [Type passphrase again] + + This will create a new SSH key, using the provided email as label. + +Navigate to ssh key location -- ".ssh" folder at your homedir by default and +ensure there are two files generated: + +- **id_ALGORITHM** (e.g. "id_rsa", "id_ed252519" etc.) +- **id_ALGORITHM.pub** (e.g. "id_rsa.pub", "id_ed25519.pub" etc.) + +.. important:: + The private key (the one without ".pub") should be kept secure and private. + You should never share this. + + The public key is what you add to servers or services to which you want + to authenticate using your private key. + +Adding your SSH key to the ssh-agent and GitHub +----------------------------------------------- + +Before adding a new SSH key to the ssh-agent to manage your keys, you should +have checked for existing SSH keys and generated SSH keys. + +#. Ensure the ssh-agent is running. You can use the "Auto-launching" or + start it manually: + + :: + + $ eval "$(ssh-agent -s)" + > Agent pid 12345 + +#. Add you SSH private key to the ssh-agent. + + :: + + ssh-add ~/.ssh/id_ALGORITHM + +#. Add the SSH public key to your account on GitHub. + Copy the SSH public key to your clipboard. + + :: + + clip < ~/.ssh/id_ALGORITHM.pub + + Alternatively, if ``clip`` isn't working, just type public key content + to the terminal using ``cat``, + + :: + + cat ~/.ssh/id_ALGORITHM.pub + + or simply navigate to the file and open it with any text editor. + At the end, you need to copy public key content. + +#. On GitHub, in the upper-right corner of any page, click your profile photo, + then click **Settings**. +#. In the "Access" section of the sidebar, click + **SSH and GPG keys** and press **New SSH key** button. +#. In the "Title" field, add a descriptive label for the new key. +#. Select the type of key -- "Authentication key". +#. In the "Key" field, paste your public key. +#. Click **Add SSH key**. +#. If prompted, confirm access to your account on GitHub. + .. todo: + GNU Privacy Guard From 35446b26ecb84ccef91c4e654dff170ecf74e2c5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 19 Aug 2023 11:40:14 +0300 Subject: [PATCH 183/689] Add remotes document --- src/vcs/remotes.txt | 158 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt index 980850800..85b3aa554 100644 --- a/src/vcs/remotes.txt +++ b/src/vcs/remotes.txt @@ -1,3 +1,161 @@ ******************************************************************************* Remotes ******************************************************************************* + +To be able to collaborate on any Git project, you need to know how to manage +your remote repositories. Remote repositories are versions of your project +that are hosted on the Internet or network somewhere. You can have several of +them, each of which generally is either read-only or read/write for you. +Managing remotes includes knowing how to add remote repositories, remove +remote repositories that are no longer valid, manage various branches and +define them as being tracked or not, and more. + +.. + .. note:: + It is entirely possible that you can be working with a "remote" + repository that is, in fact, on the same host you are. + The word "remote" does not necessary imply that repository is somewhere + else on the network or Internet, only that it is elsewhere. + +Showing your remote +=================== + +To see which remote servers you have configured, you can run the ``git remote`` +command. It lists the shortnames of each remote handle you're specified. If +you've cloned your repository, you should at least see ``origin`` - that is +default name Git gives to the server you clone from: + +:: + + $ git remote + origin + upstream + + $ git remote -v + origin git@github.com:edu-python-course/edu-python-course.github.io (fetch) + origin git@github.com:edu-python-course/edu-python-course.github.io (push) + upstream git@github.com:PonomaryovVladyslav/PythonCources.git (fetch) + upstream git@github.com:PonomaryovVladyslav/PythonCources.git (push) + + +This means we can pull contributions from any of these users pretty easily. +We may additionally have permission to push to one or more of these. + +Adding remote repositories +========================== + +To add a new remote Git repository as a shortname you can reference easily, run +``git remote add ``: + +:: + + $ git remote + origin + upstream + $ git remote add personal https://github.com/shorodilov/python-course + $ git remote + origin + upstream + personal + +Now you can use the string "personal" on the command line in lieu of the whole +URL. ``master`` branch of "https://github.com/shorodilov/python-course" is now +accessible as ``personal/master``, while shortname to the same branch in origin +will be -- ``origin/master``. + +Fetching and pulling from remotes +================================= + +To get data from remote project, you can run ``git fetch`` command. +The command goes out to that remote project and pulls down all the information +from that remote project that you don't have yet. After you do this, you should +have references to all the branches from that remote, which you can merge in or +inspect at any time. + +:: + + $ git fetch + +If your current branch is set up to track a remote branch, you can use +``git pull`` command to automatically fetch and then merge that remote branch +into your current branch. By default, the ``git clone`` command automatically +sets up your local ``master`` branch to track the remote ``master`` branch +(or whatever default remote branch). + +.. versionadded:: 2.27 + From Git version 2.27 onward, ``git pull`` will give a warning if the + ``pull.rebase`` variable is not set. Git will keep warning you until + you set the variable. + + If you want the default behavior of Git (fast-forward if possible, else + create a merge commit): ``git config --global pull.rebase "false"``. + + If you want to rebase when pulling: + ``git config --global pull.rebase "true"``. + +Pushing to remotes +================== + +When you have your project at a point that you want to share, you have to push +it upstream. The command for this is simple: ``git push ``. + +:: + + $ git push origin master + +This command works only if you cloned from a server to which you have write +access and if nobody has pushed in the meantime. If you and someone else clone +at the same time and they push upstream and then you push upstream, you push +will rightly be rejected. You'll have to fetch their work first and incorporate +it into yours before you'll be allowed to push. + +Inspecting a remote +=================== + +If you want to see more information about a particular remote, you can use the +``git remote show Date: Sat, 19 Aug 2023 11:46:20 +0300 Subject: [PATCH 184/689] Add pushing a new branch to remote section --- src/vcs/remotes.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt index 85b3aa554..94c7c7ce9 100644 --- a/src/vcs/remotes.txt +++ b/src/vcs/remotes.txt @@ -109,6 +109,15 @@ at the same time and they push upstream and then you push upstream, you push will rightly be rejected. You'll have to fetch their work first and incorporate it into yours before you'll be allowed to push. +Pushing a new branch to remote +------------------------------ + +In case you have created a local branch for some specific needs and you want +to share this branch, you need to set up track for this branch. This can be +done by using: ``git push --set-upstream origin ``. This will +create a new remote branch and set up track to your current local branch. +There is a shortcut for this command: ``git push -u origin ``. + Inspecting a remote =================== From 9f14991c1300f486543c8bc9f899d1ebd5dcdd99 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 19 Aug 2023 11:59:30 +0300 Subject: [PATCH 185/689] Update translations for VCS --- src/_locales/uk/LC_MESSAGES/vcs.po | 504 +++++++++++++++++++++++++++-- 1 file changed, 471 insertions(+), 33 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 45992f85a..903e01250 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-16 22:36+0300\n" -"PO-Revision-Date: 2023-08-16 22:36+0300\n" +"POT-Creation-Date: 2023-08-19 11:46+0300\n" +"PO-Revision-Date: 2023-08-19 11:59+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -1302,11 +1302,44 @@ msgstr "" "поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " "нарешті, застосування кожної зміни по черзі." -#: ../../src/vcs/branch.txt:309 +#: ../../src/vcs/branch.txt:306 +msgid "" +"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " +"of their ``master`` branch, rather then merging it in, to keep a mostly " +"linear history." +msgstr "" +"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " +"об'єднувати їх, щоб зберегти переважно лінійну історію." + +#: ../../src/vcs/branch.txt:311 +msgid "Cherry-picking" +msgstr "Cherry-picking" + +#: ../../src/vcs/branch.txt:313 +msgid "" +"The other way to move introduced work from one branch to another is to " +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " +"takes the patch that was introduced in a commit and tries to reapply it on " +"the branch you're currently on. This is useful if you have a number of " +"commits on a topic branch and you want to integrate only one of them, or if " +"you only have one commit on a topic branch and you'd prefer to cherry-pick " +"it rather than run rebase." +msgstr "" +"Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " +"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " +"відновлення бази для одного коміту. Він бере патч, який було внесено в " +"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " +"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " +"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " +"rebase." + +#: ../../src/vcs/branch.txt:333 msgid "Branching strategies" msgstr "Стратегії розгалуження" -#: ../../src/vcs/branch.txt:311 +#: ../../src/vcs/branch.txt:335 msgid "" "Branching strategy in version control systems defines how branches are " "created, managed, and used in a project's development process. It helps " @@ -1322,7 +1355,7 @@ msgstr "" "чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " "структурований робочий процес розробки." -#: ../../src/vcs/branch.txt:318 +#: ../../src/vcs/branch.txt:342 msgid "" "GitFlow is a popular branching strategy that provides a well-defined model " "for managing branches in a Git repository. It was introduced by Vincent " @@ -1334,7 +1367,7 @@ msgstr "" "Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " "основних гілок: \"master\" і \"develop\"." -#: ../../src/vcs/branch.txt:322 +#: ../../src/vcs/branch.txt:346 msgid "" "**Master Branch**: The \"master\" branch represents the stable version of " "the codebase. It should always contain production-ready code and be free " @@ -1346,7 +1379,7 @@ msgstr "" "жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " "релізні версії." -#: ../../src/vcs/branch.txt:326 +#: ../../src/vcs/branch.txt:350 msgid "" "**Develop Branch**: The \"develop\" branch is where the ongoing development " "and integration of features take place. It serves as the integration branch " @@ -1357,7 +1390,7 @@ msgstr "" "розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " "функціональних гілок, а також повинна містити стабільну версію коду." -#: ../../src/vcs/branch.txt:330 +#: ../../src/vcs/branch.txt:354 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " "\"feature\" branch is created off the \"develop\" branch. These branches are " @@ -1367,7 +1400,7 @@ msgstr "" "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " "недовговічні і існують лише на час розробки функції." -#: ../../src/vcs/branch.txt:333 +#: ../../src/vcs/branch.txt:357 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " "ready for a release, a \"release\" branch is created. The release branch is " @@ -1377,7 +1410,7 @@ msgstr "" "створюється гілка \"release\". Релізна гілка використовується для " "тестування, виправлення помилок і підготовки до розгортання." -#: ../../src/vcs/branch.txt:336 +#: ../../src/vcs/branch.txt:360 msgid "" "**Hotfix Branches**: If a critical issue is discovered in the production " "version, a \"hotfix\" branch is created from the \"master\" branch. This " @@ -1388,7 +1421,7 @@ msgstr "" "на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " "виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." -#: ../../src/vcs/branch.txt:341 +#: ../../src/vcs/branch.txt:365 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " @@ -1418,11 +1451,11 @@ msgstr "" "`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " "точкою співпраці для мільйонів розробників і проектів." -#: ../../src/vcs/github.txt:17 +#: ../../src/vcs/github.txt:16 msgid "Account setup and configuration" msgstr "Налаштування та конфігурація акаунта" -#: ../../src/vcs/github.txt:19 +#: ../../src/vcs/github.txt:18 msgid "" "The first thing you need to do is set up a free user account. Visit " "`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " @@ -1435,6 +1468,204 @@ msgstr "" "дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " "та надійний пароль." +#: ../../src/vcs/github.txt:24 +msgid "About authentication to GitHub" +msgstr "Про автентифікацію на GitHub" + +#: ../../src/vcs/github.txt:27 +msgid "" +"Starting in March 2023 and through the end of 2023, GitHub gradually began " +"to require all users who contribute code on GitHub to enable two-factor " +"authentication (2FA)." +msgstr "" +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " +"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " +"двофакторну автентифікацію (2FA)." + +#: ../../src/vcs/github.txt:32 +msgid "Connect with SSH" +msgstr "Підключення за допомогою SSH" + +#: ../../src/vcs/github.txt:34 +msgid "" +"You can access and write data in repositories on GitHub using :abbr:`SSH " +"(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " +"using a private key file on your local machine." +msgstr "" +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " +"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " +"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " +"комп'ютері." + +#: ../../src/vcs/github.txt:39 +msgid "Generating a new SSH key" +msgstr "Генерація нового SSH-ключа" + +#: ../../src/vcs/github.txt:41 +msgid "" +"You can generate a new SSH key on your local machine. After you do that, you " +"can add the **public** key to your account on GitHub to enable " +"authentication for Git operations over SSH." +msgstr "" +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " +"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " +"увімкнути автентифікацію для операцій з Git'ом через SSH." + +#: ../../src/vcs/github.txt:45 +msgid "Open terminal (git-bash will suite for Windows users)" +msgstr "Відкритий термінал (для користувачів Windows підійде git-bash)" + +#: ../../src/vcs/github.txt:46 +msgid "Run command:" +msgstr "Виконати команду:" + +#: ../../src/vcs/github.txt:53 +msgid "" +"If you are using a legacy system that doesn't support the **Ed25519** " +"algorithm, use:" +msgstr "" +"Якщо ви використовуєте застарілу систему, яка не підтримує алгоритм " +"**Ed25519**, використовуйте його:" + +#: ../../src/vcs/github.txt:60 +msgid "" +"When you're prompted to \"Enter a file in which to save the key\", you can " +"press **Enter** to accept the default file location." +msgstr "" +"Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " +"натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." + +#: ../../src/vcs/github.txt:67 +msgid "" +"Type a secure passphrase, if you want -- this is an extra layer of security." +msgstr "" +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." + +#: ../../src/vcs/github.txt:75 +msgid "This will create a new SSH key, using the provided email as label." +msgstr "" +"Буде створено новий SSH-ключ, з використанням наданої адреси електронної " +"пошти як мітки." + +#: ../../src/vcs/github.txt:77 +msgid "" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " +"and ensure there are two files generated:" +msgstr "" +"Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " +"каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" + +#: ../../src/vcs/github.txt:80 +msgid "**id_ALGORITHM** (e.g. \"id_rsa\", \"id_ed252519\" etc.)" +msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощо)." + +#: ../../src/vcs/github.txt:81 +msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" +msgstr "" +"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." + +#: ../../src/vcs/github.txt:84 +msgid "" +"The private key (the one without \".pub\") should be kept secure and " +"private. You should never share this." +msgstr "" +"Закритий ключ (той, що без \".pub\") слід зберігати в безпеці і не " +"розголошувати. Ви ніколи не повинні ділитися ним." + +#: ../../src/vcs/github.txt:87 +msgid "" +"The public key is what you add to servers or services to which you want to " +"authenticate using your private key." +msgstr "" +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " +"хочете пройти автентифікацію за допомогою вашого закритого ключа." + +#: ../../src/vcs/github.txt:91 +msgid "Adding your SSH key to the ssh-agent and GitHub" +msgstr "Додавання SSH-ключа до ssh-агента та GitHub" + +#: ../../src/vcs/github.txt:93 +msgid "" +"Before adding a new SSH key to the ssh-agent to manage your keys, you should " +"have checked for existing SSH keys and generated SSH keys." +msgstr "" +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " +"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." + +#: ../../src/vcs/github.txt:96 +msgid "" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " +"it manually:" +msgstr "" +"Переконайтеся, що ssh-агент запущено. Ви можете скористатися " +"\"Автозапуском\" або запустити його вручну:" + +#: ../../src/vcs/github.txt:104 +msgid "Add you SSH private key to the ssh-agent." +msgstr "Додайте ваш приватний ключ SSH до ssh-агента." + +#: ../../src/vcs/github.txt:110 +msgid "" +"Add the SSH public key to your account on GitHub. Copy the SSH public key to " +"your clipboard." +msgstr "" +"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " +"відкритий ключ SSH до буфера обміну." + +#: ../../src/vcs/github.txt:117 +msgid "" +"Alternatively, if ``clip`` isn't working, just type public key content to " +"the terminal using ``cat``," +msgstr "" +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " +"терміналі за допомогою ``cat``," + +#: ../../src/vcs/github.txt:124 +msgid "" +"or simply navigate to the file and open it with any text editor. At the end, " +"you need to copy public key content." +msgstr "" +"або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " +"текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." + +#: ../../src/vcs/github.txt:127 +msgid "" +"On GitHub, in the upper-right corner of any page, click your profile photo, " +"then click **Settings**." +msgstr "" +"На GitHub у правому верхньому куті будь-якої сторінки натисніть на " +"фотографію свого профілю, а потім натисніть **Налаштування**." + +#: ../../src/vcs/github.txt:129 +msgid "" +"In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " +"press **New SSH key** button." +msgstr "" +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " +"кнопку **Новий ключ SSH**." + +#: ../../src/vcs/github.txt:131 +msgid "In the \"Title\" field, add a descriptive label for the new key." +msgstr "У полі \"Назва\" додайте описову мітку для нового ключа." + +#: ../../src/vcs/github.txt:132 +msgid "Select the type of key -- \"Authentication key\"." +msgstr "Виберіть тип ключа - \"Ключ автентифікації\"." + +#: ../../src/vcs/github.txt:133 +msgid "In the \"Key\" field, paste your public key." +msgstr "У полі \"Ключ\" вставте ваш відкритий ключ." + +#: ../../src/vcs/github.txt:134 +msgid "Click **Add SSH key**." +msgstr "Натисніть **Додати SSH-ключ**." + +#: ../../src/vcs/github.txt:135 +msgid "If prompted, confirm access to your account on GitHub." +msgstr "" +"Якщо з'явиться відповідний запит, підтвердіть доступ до свого облікового " +"запису на GitHub." + #: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 msgid "version, control, system, vcs, git" msgstr "version, control, system, vcs, git" @@ -1632,6 +1863,213 @@ msgstr "" "графічного клієнта є справою особистого смаку, всі користувачі матимуть " "встановлені та доступні інструменти командного рядка." +#: ../../src/vcs/remotes.txt:3 +msgid "Remotes" +msgstr "Віддалені репозиторії" + +#: ../../src/vcs/remotes.txt:5 +msgid "" +"To be able to collaborate on any Git project, you need to know how to manage " +"your remote repositories. Remote repositories are versions of your project " +"that are hosted on the Internet or network somewhere. You can have several " +"of them, each of which generally is either read-only or read/write for you. " +"Managing remotes includes knowing how to add remote repositories, remove " +"remote repositories that are no longer valid, manage various branches and " +"define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " +"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " +"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " +"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " +"або читання/запису. Керування віддаленими сховищами включає в себе вміння " +"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " +"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " +"чи ні, і багато іншого." + +#: ../../src/vcs/remotes.txt:21 +msgid "Showing your remote" +msgstr "Перелік віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:23 +msgid "" +"To see which remote servers you have configured, you can run the ``git " +"remote`` command. It lists the shortnames of each remote handle you're " +"specified. If you've cloned your repository, you should at least see " +"``origin`` - that is default name Git gives to the server you clone from:" +msgstr "" +"Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " +"команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " +"віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " +"з якого ви клонуєте:" + +#: ../../src/vcs/remotes.txt:41 +msgid "" +"This means we can pull contributions from any of these users pretty easily. " +"We may additionally have permission to push to one or more of these." +msgstr "" +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " +"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " +"або декількох з них." + +#: ../../src/vcs/remotes.txt:45 +msgid "Adding remote repositories" +msgstr "Додавання віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:47 +msgid "" +"To add a new remote Git repository as a shortname you can reference easily, " +"run ``git remote add ``:" +msgstr "" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " +"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" + +#: ../../src/vcs/remotes.txt:61 +msgid "" +"Now you can use the string \"personal\" on the command line in lieu of the " +"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" +"course\" is now accessible as ``personal/master``, while shortname to the " +"same branch in origin will be -- ``origin/master``." +msgstr "" +"Тепер ви можете використовувати рядок \"personal\" в командному рядку " +"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" +"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " +"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." + +#: ../../src/vcs/remotes.txt:67 +msgid "Fetching and pulling from remotes" +msgstr "Отримання та витягування з віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:69 +msgid "" +"To get data from remote project, you can run ``git fetch`` command. The " +"command goes out to that remote project and pulls down all the information " +"from that remote project that you don't have yet. After you do this, you " +"should have references to all the branches from that remote, which you can " +"merge in or inspect at any time." +msgstr "" +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " +"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " +"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " +"переглянути у будь-який час." + +#: ../../src/vcs/remotes.txt:79 +msgid "" +"If your current branch is set up to track a remote branch, you can use ``git " +"pull`` command to automatically fetch and then merge that remote branch into " +"your current branch. By default, the ``git clone`` command automatically " +"sets up your local ``master`` branch to track the remote ``master`` branch " +"(or whatever default remote branch)." +msgstr "" +"Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " +"можете скористатися командою ``git pull`` для автоматичного отримання і " +"подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " +"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " +"іншої віддаленої гілки за замовчуванням)." + +#: ../../src/vcs/remotes.txt:85 +msgid "" +"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." +"rebase`` variable is not set. Git will keep warning you until you set the " +"variable." +msgstr "" +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " +"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " +"доки ви не встановите змінну." + +#: ../../src/vcs/remotes.txt:90 +msgid "" +"If you want the default behavior of Git (fast-forward if possible, else " +"create a merge commit): ``git config --global pull.rebase \"false\"``." +msgstr "" +"Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " +"pull.rebase \"false\"``." + +#: ../../src/vcs/remotes.txt:93 +msgid "" +"If you want to rebase when pulling: ``git config --global pull.rebase " +"\"true\"``." +msgstr "" +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." +"rebase \"true\"``." + +#: ../../src/vcs/remotes.txt:97 +msgid "Pushing to remotes" +msgstr "Відправка до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:99 +msgid "" +"When you have your project at a point that you want to share, you have to " +"push it upstream. The command for this is simple: ``git push " +"``." +msgstr "" +"Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " +"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " +"push <віддалений> <гілка>``." + +#: ../../src/vcs/remotes.txt:106 +msgid "" +"This command works only if you cloned from a server to which you have write " +"access and if nobody has pushed in the meantime. If you and someone else " +"clone at the same time and they push upstream and then you push upstream, " +"you push will rightly be rejected. You'll have to fetch their work first and " +"incorporate it into yours before you'll be allowed to push." +msgstr "" +"Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " +"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " +"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " +"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." + +#: ../../src/vcs/remotes.txt:113 +msgid "Pushing a new branch to remote" +msgstr "Переміщення нової гілки до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:115 +msgid "" +"In case you have created a local branch for some specific needs and you want " +"to share this branch, you need to set up track for this branch. This can be " +"done by using: ``git push --set-upstream origin ``. This will " +"create a new remote branch and set up track to your current local branch. " +"There is a shortcut for this command: ``git push -u origin ``." +msgstr "" +"Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " +"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " +"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " +"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " +"<віддалена_гілка>``." + +#: ../../src/vcs/remotes.txt:122 +msgid "Inspecting a remote" +msgstr "Перевірка віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:124 +msgid "" +"If you want to see more information about a particular remote, you can use " +"the ``git remote show ``." @@ -1843,11 +2281,11 @@ msgstr "" "Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " "tag -d ``." -#: ../../src/vcs/tagging.txt:118 +#: ../../src/vcs/tagging.txt:117 msgid "Checking out tags" msgstr "Перевірка тегів" -#: ../../src/vcs/tagging.txt:120 +#: ../../src/vcs/tagging.txt:119 msgid "" "If you want to view the versions of files a tag is pointing to, you can do a " "``git checkout`` of that tag, although this puts your repository in " @@ -1857,7 +2295,7 @@ msgstr "" "виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " "\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" -#: ../../src/vcs/tagging.txt:146 +#: ../../src/vcs/tagging.txt:145 msgid "" "In \"detached HEAD\" state, if you make changes and then create a commit, " "the tag will stay the same, but your new commit won’t belong to any branch " From 8e779e5b16598098df0840320127210d54b03a31 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 19 Aug 2023 12:19:03 +0300 Subject: [PATCH 186/689] Fix translations --- src/_locales/uk/LC_MESSAGES/vcs.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 903e01250..37257b7c3 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-19 11:46+0300\n" -"PO-Revision-Date: 2023-08-19 11:59+0300\n" +"PO-Revision-Date: 2023-08-19 12:18+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -1067,7 +1067,7 @@ msgstr "Щоб перейти до існуючої гілки, виконайт #: ../../src/vcs/branch.txt:109 msgid "Basic branching and merging" -msgstr "To switch to an existing branch, you run the ``git checkout`` command" +msgstr "Основи розгалуження та злиття" #: ../../src/vcs/branch.txt:111 msgid "" From 7f54cfb09cbd334b3d48ac25a496d3bf1e5e4b4c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Aug 2023 21:24:32 +0300 Subject: [PATCH 187/689] Add a short introduction to VCS part (index) --- src/vcs/index.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 4b4ab1217..0f0675aef 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -7,6 +7,22 @@ Version Control System ############################################################################### +:abbr:`VCS (Version Control Systems)` play an integral role in modern software +development. They allow multiple developers to work on a project simultaneously +without overwriting each other's changes. VCSs track the history of changes +to the source code, making it possible to revert to previous states, compare +versions, and more. + +Among the VCSs available, Git stands out as one of the most popular and +powerful tools. It's used by small projects and large-scale software alike, +owing to its flexibility, distributed nature, and efficient handling of +codebase versions. + +In this part, you'll learn about the fundamentals of version control, how to +set up your environment for Git, dive into the basics of commits, branches, and +merges, understand the significance of tags, and finally, explore how to +collaborate using remote repositories and platforms like GitHub. + .. toctree:: :name: vcs From 0f91db0d1b5e6f1f3338ad1755ca3b3372103fdb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 31 Aug 2023 22:29:22 +0300 Subject: [PATCH 188/689] Add pull request document --- src/refs.bib | 19 +++++++---- src/vcs/pr.txt | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 src/vcs/pr.txt diff --git a/src/refs.bib b/src/refs.bib index 3a2f8b3c2..4e4b61640 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -138,20 +138,27 @@ @misc{docs-python:controlflow url = {https://docs.python.org/tutorial/controlflow.html}, } -@misc{github:creating-pr, - title = "{Creating a pull request}", - author = "{GitHub Docs}", +@misc{github:create-pr, + title = {Creating a pull request}, + author = {GitHub Docs}, url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request}, } @misc{github:about-pr, - title = "{About pull requests}", + title = {About pull requests}, + author = {GitHub Docs}, url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, } +@misc{github:compare-pr, + title = {About comparing branches in pull request}, + author = {GitHub Docs}, + url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests}, +} + @misc{github:ssh, - title = "{Generating a new SSH key and adding it to the ssh-agent}", - author = "{GitHub Docs}", + title = {Generating a new SSH key and adding it to the ssh-agent}, + author = {GitHub Docs}, url = {https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent}, } diff --git a/src/vcs/pr.txt b/src/vcs/pr.txt new file mode 100644 index 000000000..72b9ea32e --- /dev/null +++ b/src/vcs/pr.txt @@ -0,0 +1,86 @@ +.. meta:: + :description: Version Control System - Pull Requests + :author: Serhii Horodilov + :author: Vladyslav Ponomaryov + :keywords: version, control, system, vcs, git, pull request, merge + +******************************************************************************* + Pull Request +******************************************************************************* + +Pull request let you tell others about changes you've pushed to a branch in +a repository on GitHub. Once a pull request is opened, you can discuss and +review the potential changes with collaborators and add follow-up commits +before your changes are merged into the base branch:cite:`github:about-pr`. + +Draft pull requests +------------------- + +Draft pull requests are available in public repositories on GitHub. +When you create a pull request, you can choose to a create a pull request that +is ready for review or a draft pull request. Draft pull requests cannot be +merged. When you're ready to get feedback on your pull request, you can mark +your draft pull request as ready for review. + +Difference between commits on compare and pull request pages +------------------------------------------------------------ + +The compare and pull request pages use different methods to calculate the diff +for changed files: + +- Compare pages show the diff between the tip of the head ref and the current + common ancestor (that is, the merge base) of the head and base ref. +- Pull request pages show the diff between the tip of the head ref and + the common ancestor of the head and base ref at the time when the pull + request was created. + Consequently, the merge base used for the comparison might be different. + +About comparing branches +======================== + +Pull requests display diffs to compare the changes you made in your topic +branch against the base branch that you want to merge your changes into. + +Rather that viewing the commits themselves, you can view the proposed changes +as they'll appear in the files once the pull request is merged. The files +appear in alphabetical order within the Files changed tab. Additions to +the files appear in green and are prefaced by a ``+`` sign while content that +has been removed appears in red and is prefaced by a ``-`` sign +:cite:`github:compare-pr`. + +Creating a pull request +======================= + +Create a pull request to propose and collaborate on changes to a repository. +These changes are proposed in a *branch*, which ensures that the default +branch only contains finished and approved work:cite:`github:create-pr`. + +About branches +-------------- + +Use a branch to isolate development work without affecting other branches in +the repository. Each repository has one default branch, and can have multiple +other branches. You can merge a branch into another branch using a pull +request. + +Branches allow you to develop features, fix bugs, or safely experiment with +new ideas in a contained area of your repository. + +You always create a branch from an existing branch. Typically, you might create +a new branch from the default branch of your repository. + +Creating a pull request +----------------------- + +#. On GitHub, navigate to the main page of the repository. +#. Switch to "Pull requests" tab. +#. Press "New pull request" button. +#. Select base and source branches. +#. Press "Create pull request" button. +#. Provide a meaningful title and description. +#. Draft or create a pull request. + + * To create pull request that is ready for review, click + **Create Pull Request**. + * To create a draft pull request, use the drop-down and select + **Create Draft Pull Request**, then click **Draft Pull Request**. From 19f666a62aadea23044da2abea27778cf4fd4ca0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 31 Aug 2023 22:43:48 +0300 Subject: [PATCH 189/689] Create a draft for "Create a pull request" how-to appx document Co-authored-by: Vladyslav Ponomaryov <57481900+PonomaryovVladyslav@users.noreply.github.com> --- src/appx/create_pr.txt | 200 +++-------------------------------------- 1 file changed, 14 insertions(+), 186 deletions(-) diff --git a/src/appx/create_pr.txt b/src/appx/create_pr.txt index 1b2d11736..24fe0854a 100644 --- a/src/appx/create_pr.txt +++ b/src/appx/create_pr.txt @@ -2,189 +2,17 @@ :description: The instructions to create a pull request via GitHub :author: Vladyslav Ponomaryov :author: Serhii Horodilov sgorodil@gmail.com - :keywords: git, github, pull request, branch, merge - -######################### -Creating the Pull Request -######################### - -Create a pull request to propose and collaborate on changes to a repository. -These changes are proposed in a *branch*, which ensures that the default -branch only contains finished and approved work :cite:`github:creating-pr`. - -******************* -About pull requests -******************* - -Pull requests let you tell others about changes you've pushed to a branch in -a repository on GitHub. Once a pull request is opened, you can discuss and -review the potential changes with collaborators and add follow-up commits -before your changes are merged into the base branch -:cite:`github:about-pr`. - -The compare and pull request pages use different methods to calculate the diff -for changed files: - -- Compare pages show the diff between the tip of the head ref and the current - common ancestor (that is, the merge base) of the head and base ref. -- Pull request pages show the diff between the tip of the head ref and - the common ancestor of the head and base ref at the time when the pull - request was created. - Consequently, the merge base used for the comparison might be different. - -In *few words*: both source and target branches **should** share some commit(s) -in their history and the source branch **should** has commit(s) missing on -the target one. - -****************** -Repository content -****************** - -Following SHOULD be included to the repository: - -- code base -- project dependencies (if any) - -Following MAY be included to the repository: - -- additional information (e.g. README file and other documents) -- dummy data (e.g. fixtures for development and testing etc.) - -Following SHOULD be excluded from the repository: - -- virtual environment directory -- project database (e.g. "*.sqlite3", "*.db" etc.) -- python byte-compiled code (``__pycache__``) -- IDE configurations (e.g. ".vscode", ".idea" etc.) -- Desktop Services Store (".DS_Store") - -********************** -Repository preparation -********************** - -This should be done once for each repository. - -Repository initialization -========================= - -#. Create README file and provide a brief description for your project - (optional). -#. Create a virtual environment. -#. Install project dependencies. -#. Freeze the dependencies. - - .. code-block:: shell - - pip freeze > requirements.txt - -#. Create a base code modules (e.g. initialize django project and apps, - or create an empty python module like "main.py" etc.). -#. Create ".gitignore" file and set up directories and files to be excluded -#. Create a fresh repository. - - .. code-block:: shell - - git init - -#. Stage and commit changes. -#. Set up remote repository. - - .. code-block:: shell - - git remote add origin - -#. Push your local branch to remote repo. - -Append contributors to remote repository -======================================== - -Reviews allow collaborators to comment on the changes proposed in -pull requests, approve the changes, or request further changes before -the pull request is merged. -Repository administrators can require that all pull requests are approved -before being merged. - -#. On `GitHub `_, navigate to the repository settings page - and switch to **Collaborators and teams** menu item. -#. Under **Manage access** section click ``Add people`` button. -#. In modal window start typing GitHub username. -#. Select a contributor from the dropdown menu. - -****************** -Working on feature -****************** - -#. Create a dedicated branch with some representative name - (e.g. "feature/models", "cbv" etc.). -#. Switch to the newly created branch. -#. Do the work and commit changes on a feature branch. - -.. hint:: - - You can create a branch and switch to it by a single command. - - .. code-block:: shell - - git checkout -b [] - - -.. hint:: - - While working on a *feature branch* make commits for each completed logical - block of code. - -************************* -Creating the pull request -************************* - -#. Make sure your working branch is up-to-date with the default one. - You can pull changes for the default branch and rebase your feature branch - onto it. -#. Push feature branch to the remote repository. By default the current active - branch is pushed to the remote repo. - - .. code-block:: shell - - git push -u origin [] - -#. Go to your remote repository at GitHub and click **Pull requests** tab. -#. On **Pull requests** tab click **New** button. -#. Select your default branch as *target* and your feature branch as *source*. -#. Provide some brief description for your pull request. -#. Press **Create pull request** button. -#. On the pull request page add a **reviewer** by clicking the appropriate - option and selecting a person from a dropdown menu. - -************** -Making changes -************** - -From this moment, your pull request *is waiting* for the review. - -The reviewer will **approve** or **reject** your pull request. -Optionally the reviewer may provide some comments to your code; -**rejected** pull requests will always come with some details. - -In case your work is **rejected**, you are to provide fixes. To do this: - -#. Do the work in your local feature branch. -#. Stage and commit changes. -#. Push them to remote branch. -#. Re-request review from the pull request page. - -All commits related to the source branch will be automatically appended to -the open pull request. The reviewer will review your updates. -Repeat this process until the pull request is **approved**. - -************************ -Merging the pull request -************************ - -Once your pull request is **approved** - merge it. -Select one of the options available with your pull request; they may be: - -- Create a merge commit -- Rebase and merge -- Squash and merge - -After that the pull request is merged into your target branch. + :keywords: git, github, pull request, review, merge, howto + +##################### +Create a Pull Request +##################### + +.. todo + # Как сдавать домашки + ## Что должно быть в репозитории?? + ### Что за файл requirements.txt? Зачем он нужен? + ## Чего не должно быть в репозитории?? + ## Как создать проект и репозиторий корректно + ## Как делать домашку + ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? From 6226619b9709416f463b72f273c65bc2babf4f9a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 10:24:29 +0300 Subject: [PATCH 190/689] Update "Assignments" appendix Renamed appendix document to "assignments". Add repository content section. Add repository initialization section (including Django projects). Add requirements description section. Co-authored-by: Vladyslav Ponomaryov <57481900+PonomaryovVladyslav@users.noreply.github.com> --- src/appx/assignments.txt | 131 +++++++++++++++++++++++++++++++++++++++ src/appx/create_pr.txt | 18 ------ src/conf.py | 4 +- src/index.txt | 2 +- 4 files changed, 134 insertions(+), 21 deletions(-) create mode 100644 src/appx/assignments.txt delete mode 100644 src/appx/create_pr.txt diff --git a/src/appx/assignments.txt b/src/appx/assignments.txt new file mode 100644 index 000000000..0b4fa9cda --- /dev/null +++ b/src/appx/assignments.txt @@ -0,0 +1,131 @@ +.. meta:: + :description: How-to handle in assignments via GitHub pull request(s) + :author: Vladyslav Ponomaryov + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: git, github, pull request, review, merge, howto + +############################### +Handing in Homework Assignments +############################### + +.. todo + # Как сдавать домашки + ## Как делать домашку + ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? + +****************************** +Repository content description +****************************** + +What to include +=============== + +- Code base +- Project dependencies (if applicable) +- *(Optional)* Additional project information: + README, CONTRIBUTING, LICENSE etc. + +.. hint:: + Always start new repository from creating ``README`` and ``.gitignore`` + files. + +What to exclude +=============== + +- Virtual environment, typically ``venv`` or ``env`` folder +- Byte compiled Python code (``__pycache__``) +- IDEA configurations, typically ``.vscode`` or ``.idea`` folder +- Database files, like ``db.sqlite3`` +- Other stuff not related to the assignment directly + +.. hint:: + Set up **.gitignore** to exclude all name patterns from appending + to the stage area. Common content of this file may look like: + + :: + + /venv/ + /env/ + __pycache__/ + +************************* +Repository initialization +************************* + +#. Create and activate virtual environment. +#. Create common repository files: + + - README + - .gitignore + - requirements.txt *(if applicable)* + +#. *(Optional)* create a code base draft. This can be an empty module + like **main.py** or an empty :ref:`Django project `. +#. Initialize a new repository using ``git init`` command. +#. Set up **.gitignore** name patterns. +#. Stage your changes. +#. Commit your changes. +#. Set up remote repository. +#. Push changes from local branch to remote. + +.. _django_init: + +Initializing new Django project +=============================== + +Base Django project may be added to the repository with the first commit. +Initialize Django project in current repository root to avoid directories +nesting. + +.. code-block:: shell + + $ django-admin startproject . + +.. important:: + Do not forget to create **requirements.txt**. + +After that, you may proceed with "staging" and "commit" steps. + +**************************** +Sharing project dependencies +**************************** + +The **requirements.txt** file is a plain text file that lists all the Python +packages required for a specific project. This file is used to specify +dependencies in a version-controlled and easily shareable manner. It allows +for a consistent environment across different team members' local setups. + +Where to place "requirements.txt" file +====================================== + +The **requirements.txt** file is generally placed in the root directory of +the project. + +Creating "requirements.txt" file +================================ + +To generate file use ``pip freeze`` command and place its output to a file: + +.. code-block:: shell + + $ pip freeze > requirements.txt + +This will create **requirements.txt** file. Its content may look like: + +:: + + asgiref==3.6.0 + Django==4.1.5 + psycopg2==2.9.5 + sqlparse==0.4.3 + tzdata==2022.7 + +Installing dependencies from "requirements.txt" file +==================================================== + +Another team member may easily install all the requirements for the project +by using ``pip install`` command: + +.. code-block:: shell + + $ pip install -r requirements.txt diff --git a/src/appx/create_pr.txt b/src/appx/create_pr.txt deleted file mode 100644 index 24fe0854a..000000000 --- a/src/appx/create_pr.txt +++ /dev/null @@ -1,18 +0,0 @@ -.. meta:: - :description: The instructions to create a pull request via GitHub - :author: Vladyslav Ponomaryov - :author: Serhii Horodilov sgorodil@gmail.com - :keywords: git, github, pull request, review, merge, howto - -##################### -Create a Pull Request -##################### - -.. todo - # Как сдавать домашки - ## Что должно быть в репозитории?? - ### Что за файл requirements.txt? Зачем он нужен? - ## Чего не должно быть в репозитории?? - ## Как создать проект и репозиторий корректно - ## Как делать домашку - ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? diff --git a/src/conf.py b/src/conf.py index 3d52dd19f..e6b3d8b2c 100644 --- a/src/conf.py +++ b/src/conf.py @@ -62,7 +62,7 @@ ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ("appx/blog/spec", "DjangoBlog.tex", project, authors, "howto", False), - ("appx/create_pr", "CreatingPullRequest.tex", "Creating the Pull Request", + ("appx/assignments", "CreatingPullRequest.tex", "Creating the Pull Request", authors, "howto", False), ] latex_appendices = [ @@ -71,7 +71,7 @@ "appx/env_path", "appx/precedence", "appx/printf", - "appx/create_pr", + "appx/assignments", "appx/conv_store", "appx/wtk", "appx/blog/spec", diff --git a/src/index.txt b/src/index.txt index 4616f4687..05fa4dd23 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,7 +27,7 @@ appx/env_path appx/precedence appx/printf - appx/create_pr + appx/assignments appx/conv_store appx/wtk appx/blog/spec From 82445ccfa336f5388114396e85cd4f8deff68301 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 11:22:09 +0300 Subject: [PATCH 191/689] Update "Assignments" appendix Describe pull requests creation. Describe review process. Co-authored-by: Vladyslav Ponomaryov <57481900+PonomaryovVladyslav@users.noreply.github.com> --- src/appx/assignments.txt | 92 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 5 deletions(-) diff --git a/src/appx/assignments.txt b/src/appx/assignments.txt index 0b4fa9cda..2617d1727 100644 --- a/src/appx/assignments.txt +++ b/src/appx/assignments.txt @@ -8,11 +8,6 @@ Handing in Homework Assignments ############################### -.. todo - # Как сдавать домашки - ## Как делать домашку - ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? - ****************************** Repository content description ****************************** @@ -129,3 +124,90 @@ by using ``pip install`` command: .. code-block:: shell $ pip install -r requirements.txt + +************************************ +Dealing with home tasks (challenges) +************************************ + +#. Create a new topic branch +#. Switch to a topic branch +#. Do the work and commit changes + +.. hint:: + You can create a new branch and immediately switch to it: + + .. code-block:: shell + + git checkout -b + +Creating a pull request +======================= + +#. Make sure your working branch is up-to-date with the default one. + You can pull changes for the default branch and rebase your feature + branch onto it. +#. Push feature branch to the remote repository. By default, the current + active branch is pushed via ``git push`` command. You may need to + set upstream branch if it isn't yet. + + .. code-block:: shell + + git push -u origin + +#. Navigate to your remote repository homepage on GitHub and switch to + **Pull requests** tab. +#. Click **New pull request** button. +#. Select your default branch as *target* and your feature branch as + *source*. +#. Click **Create pull request** button. +#. Provide meaningful title and a brief description for your pull request. +#. Submit pull request creation. +#. *(Optional)* Select reviewer(s) in **Reviewers** section. +#. Wait until your pull request is reviewed. + +Set up reviewers +================ + +You may share a link to pull request to a reviewer directly, but it's better +to set reviewer(s) on the pull request's page. +Before you can select reviewers, you need to add them as project contributors. + +Append collaborators +-------------------- + +Reviews allow collaborators to comment on the changes proposed in pull +requests, approve the changes, or request further changes before the pull +request is merged. Repository administrators can require that pull requests +are approved before being merged. + +#. Navigate to your repository homepage on GitHub and switch to **Settings** + tab. +#. Select **Collaborators and teams** menu item. +#. Under **Manage access** section click **Add people** button. +#. In modal window start typing GitHub username. +#. Select a contributor from the dropdown menu. + +This will send a *contributing request* to a specified user. + +Merging changes +=============== + +In case your pull request is **approved** - merge it to the trunk branch. +Select one of the options available: + +- Create a merge commit +- Rebase and merge +- Squash and merge + +**Create a merge commit** suits in most of the cases. + +Making changes +============== + +In case your pull request is **rejected** or has comments - you may need to +provide some fixes. + +#. Do the work in your local topic branch +#. Push these changes to remote +#. Re-request review (if applicable) +#. Wait until review is done From bcebcb19df7f91449ffe50b5c07fd9f75c3f0d60 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 11:44:00 +0300 Subject: [PATCH 192/689] Add pull request document to VCS toctree --- src/vcs/index.txt | 1 + src/vcs/{pr.txt => pullrequest.txt} | 0 2 files changed, 1 insertion(+) rename src/vcs/{pr.txt => pullrequest.txt} (100%) diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 0f0675aef..d52522ad2 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -33,3 +33,4 @@ collaborate using remote repositories and platforms like GitHub. branch remotes github + pullrequest diff --git a/src/vcs/pr.txt b/src/vcs/pullrequest.txt similarity index 100% rename from src/vcs/pr.txt rename to src/vcs/pullrequest.txt From 0a76b4f99f108f3a7fb5b6b65fffc881026f0f9a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 11:45:15 +0300 Subject: [PATCH 193/689] Update VCS and APPX .po files (no translations) --- src/_locales/uk/LC_MESSAGES/appx.po | 2462 +++++++++++++++------------ src/_locales/uk/LC_MESSAGES/vcs.po | 1881 +++++++++++--------- 2 files changed, 2435 insertions(+), 1908 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 9a5505d56..a257456cd 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,18 +8,443 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-09 02:13+0300\n" +"POT-Creation-Date: 2023-09-01 11:37+0300\n" "PO-Revision-Date: 2023-08-09 02:25+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" "Language: uk\n" +"Language-Team: ua \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" + +#: ../../src/appx/assignments.txt:-1 +msgid "How-to handle in assignments via GitHub pull request(s)" +msgstr "" + +#: ../../src/appx/assignments.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/appx/assignments.txt:-1 ../../src/appx/code_edit.txt:-1 +#: ../../src/appx/conv_store.txt:-1 ../../src/appx/env_path.txt:-1 +#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 +#: ../../src/appx/wtk.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/assignments.txt:-1 +#, fuzzy +msgid "git, github, pull request, review, merge, howto" +msgstr "git, github, pull request, branch, merge" + +#: ../../src/appx/assignments.txt:9 +msgid "Handing in Homework Assignments" +msgstr "" + +#: ../../src/appx/assignments.txt:13 +#, fuzzy +msgid "Repository content description" +msgstr "Вміст репозиторію" + +#: ../../src/appx/assignments.txt:16 +msgid "What to include" +msgstr "" + +#: ../../src/appx/assignments.txt:18 +#, fuzzy +msgid "Code base" +msgstr "кодова база" + +#: ../../src/appx/assignments.txt:19 +#, fuzzy +msgid "Project dependencies (if applicable)" +msgstr "залежності проекту (якщо є)" + +#: ../../src/appx/assignments.txt:20 +msgid "" +"*(Optional)* Additional project information: README, CONTRIBUTING, " +"LICENSE etc." +msgstr "" + +#: ../../src/appx/assignments.txt:24 +msgid "" +"Always start new repository from creating ``README`` and ``.gitignore`` " +"files." +msgstr "" + +#: ../../src/appx/assignments.txt:28 +msgid "What to exclude" +msgstr "" + +#: ../../src/appx/assignments.txt:30 +msgid "Virtual environment, typically ``venv`` or ``env`` folder" +msgstr "" + +#: ../../src/appx/assignments.txt:31 +#, fuzzy +msgid "Byte compiled Python code (``__pycache__``)" +msgstr "скомпільований код python (``__pycache__``)" + +#: ../../src/appx/assignments.txt:32 +#, fuzzy +msgid "IDEA configurations, typically ``.vscode`` or ``.idea`` folder" +msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" + +#: ../../src/appx/assignments.txt:33 +msgid "Database files, like ``db.sqlite3``" +msgstr "" + +#: ../../src/appx/assignments.txt:34 +msgid "Other stuff not related to the assignment directly" +msgstr "" + +#: ../../src/appx/assignments.txt:37 +msgid "" +"Set up **.gitignore** to exclude all name patterns from appending to the " +"stage area. Common content of this file may look like:" +msgstr "" + +#: ../../src/appx/assignments.txt:48 +msgid "Repository initialization" +msgstr "Ініціалізація репозиторію" + +#: ../../src/appx/assignments.txt:50 +#, fuzzy +msgid "Create and activate virtual environment." +msgstr "Створіть віртуальне середовище." + +#: ../../src/appx/assignments.txt:51 +#, fuzzy +msgid "Create common repository files:" +msgstr "Створіть нове репозиторій." + +#: ../../src/appx/assignments.txt:53 +msgid "README" +msgstr "" + +#: ../../src/appx/assignments.txt:54 +msgid ".gitignore" +msgstr "" + +#: ../../src/appx/assignments.txt:55 +msgid "requirements.txt *(if applicable)*" +msgstr "" + +#: ../../src/appx/assignments.txt:57 +msgid "" +"*(Optional)* create a code base draft. This can be an empty module like " +"**main.py** or an empty :ref:`Django project `." +msgstr "" + +#: ../../src/appx/assignments.txt:59 +msgid "Initialize a new repository using ``git init`` command." +msgstr "" + +#: ../../src/appx/assignments.txt:60 +msgid "Set up **.gitignore** name patterns." +msgstr "" + +#: ../../src/appx/assignments.txt:61 +#, fuzzy +msgid "Stage your changes." +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/assignments.txt:62 +#, fuzzy +msgid "Commit your changes." +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/assignments.txt:63 +msgid "Set up remote repository." +msgstr "Налаштуйте віддалений репозиторій." + +#: ../../src/appx/assignments.txt:64 +#, fuzzy +msgid "Push changes from local branch to remote." +msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." + +#: ../../src/appx/assignments.txt:69 +msgid "Initializing new Django project" +msgstr "" + +#: ../../src/appx/assignments.txt:71 +msgid "" +"Base Django project may be added to the repository with the first commit." +" Initialize Django project in current repository root to avoid " +"directories nesting." +msgstr "" + +#: ../../src/appx/assignments.txt:80 +msgid "Do not forget to create **requirements.txt**." +msgstr "" + +#: ../../src/appx/assignments.txt:82 +msgid "After that, you may proceed with \"staging\" and \"commit\" steps." +msgstr "" + +#: ../../src/appx/assignments.txt:86 +#, fuzzy +msgid "Sharing project dependencies" +msgstr "Встановіть залежності проекту." + +#: ../../src/appx/assignments.txt:88 +msgid "" +"The **requirements.txt** file is a plain text file that lists all the " +"Python packages required for a specific project. This file is used to " +"specify dependencies in a version-controlled and easily shareable manner." +" It allows for a consistent environment across different team members' " +"local setups." +msgstr "" + +#: ../../src/appx/assignments.txt:94 +msgid "Where to place \"requirements.txt\" file" +msgstr "" + +#: ../../src/appx/assignments.txt:96 +msgid "" +"The **requirements.txt** file is generally placed in the root directory " +"of the project." +msgstr "" + +#: ../../src/appx/assignments.txt:100 +msgid "Creating \"requirements.txt\" file" +msgstr "" + +#: ../../src/appx/assignments.txt:102 +msgid "" +"To generate file use ``pip freeze`` command and place its output to a " +"file:" +msgstr "" + +#: ../../src/appx/assignments.txt:108 +msgid "This will create **requirements.txt** file. Its content may look like:" +msgstr "" + +#: ../../src/appx/assignments.txt:119 +msgid "Installing dependencies from \"requirements.txt\" file" +msgstr "" + +#: ../../src/appx/assignments.txt:121 +msgid "" +"Another team member may easily install all the requirements for the " +"project by using ``pip install`` command:" +msgstr "" + +#: ../../src/appx/assignments.txt:130 +msgid "Dealing with home tasks (challenges)" +msgstr "" + +#: ../../src/appx/assignments.txt:132 +msgid "Create a new topic branch" +msgstr "" + +#: ../../src/appx/assignments.txt:133 +#, fuzzy +msgid "Switch to a topic branch" +msgstr "Перейдіть до новоствореної гілки." + +#: ../../src/appx/assignments.txt:134 +#, fuzzy +msgid "Do the work and commit changes" +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/assignments.txt:137 +#, fuzzy +msgid "You can create a new branch and immediately switch to it:" +msgstr "" +"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " +"команди." + +#: ../../src/appx/assignments.txt:144 +#, fuzzy +msgid "Creating a pull request" +msgstr "Створення запиту на злиття" + +#: ../../src/appx/assignments.txt:146 +msgid "" +"Make sure your working branch is up-to-date with the default one. You can" +" pull changes for the default branch and rebase your feature branch onto " +"it." +msgstr "" +"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку " +"функції на неї." + +#: ../../src/appx/assignments.txt:149 +#, fuzzy +msgid "" +"Push feature branch to the remote repository. By default, the current " +"active branch is pushed via ``git push`` command. You may need to set " +"upstream branch if it isn't yet." +msgstr "" +"Завантажте функціональну гілку до віддаленого репозиторію. За " +"замовчуванням буде завантажена активна гілка." + +#: ../../src/appx/assignments.txt:157 +#, fuzzy +msgid "" +"Navigate to your remote repository homepage on GitHub and switch to " +"**Pull requests** tab." +msgstr "" +"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " +"**Pull requests**." + +#: ../../src/appx/assignments.txt:159 +#, fuzzy +msgid "Click **New pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/assignments.txt:160 +msgid "" +"Select your default branch as *target* and your feature branch as " +"*source*." +msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." + +#: ../../src/appx/assignments.txt:162 +#, fuzzy +msgid "Click **Create pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/assignments.txt:163 +#, fuzzy +msgid "Provide meaningful title and a brief description for your pull request." +msgstr "Надайте короткий опис вашого запиту." + +#: ../../src/appx/assignments.txt:164 +#, fuzzy +msgid "Submit pull request creation." +msgstr "Про pull requests" + +#: ../../src/appx/assignments.txt:165 +msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." +msgstr "" + +#: ../../src/appx/assignments.txt:166 +#, fuzzy +msgid "Wait until your pull request is reviewed." +msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." + +#: ../../src/appx/assignments.txt:169 +msgid "Set up reviewers" +msgstr "" + +#: ../../src/appx/assignments.txt:171 +msgid "" +"You may share a link to pull request to a reviewer directly, but it's " +"better to set reviewer(s) on the pull request's page. Before you can " +"select reviewers, you need to add them as project contributors." +msgstr "" + +#: ../../src/appx/assignments.txt:176 +msgid "Append collaborators" +msgstr "" + +#: ../../src/appx/assignments.txt:178 +#, fuzzy +msgid "" +"Reviews allow collaborators to comment on the changes proposed in pull " +"requests, approve the changes, or request further changes before the pull" +" request is merged. Repository administrators can require that pull " +"requests are approved before being merged." +msgstr "" +"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах " +"на отримання, затверджувати зміни або вимагати подальших змін перед " +"об'єднанням запиту на отримання. Адміністратори сховища можуть вимагати " +"схвалення всіх запитів на отримання перед об'єднанням." + +#: ../../src/appx/assignments.txt:183 +#, fuzzy +msgid "" +"Navigate to your repository homepage on GitHub and switch to **Settings**" +" tab." +msgstr "" +"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " +"**Pull requests**." + +#: ../../src/appx/assignments.txt:185 +msgid "Select **Collaborators and teams** menu item." +msgstr "" + +#: ../../src/appx/assignments.txt:186 +#, fuzzy +msgid "Under **Manage access** section click **Add people** button." +msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." + +#: ../../src/appx/assignments.txt:187 +msgid "In modal window start typing GitHub username." +msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." + +#: ../../src/appx/assignments.txt:188 +msgid "Select a contributor from the dropdown menu." +msgstr "Виберіть учасника зі спадного меню." + +#: ../../src/appx/assignments.txt:190 +msgid "This will send a *contributing request* to a specified user." +msgstr "" + +#: ../../src/appx/assignments.txt:193 +#, fuzzy +msgid "Merging changes" +msgstr "Внесення змін" + +#: ../../src/appx/assignments.txt:195 +#, fuzzy +msgid "" +"In case your pull request is **approved** - merge it to the trunk branch." +" Select one of the options available:" +msgstr "" +"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один " +"із варіантів, доступних у вашому запиті на отримання; вони можуть бути:" + +#: ../../src/appx/assignments.txt:198 +msgid "Create a merge commit" +msgstr "Create a merge commit" + +#: ../../src/appx/assignments.txt:199 +msgid "Rebase and merge" +msgstr "Rebase and merge" + +#: ../../src/appx/assignments.txt:200 +msgid "Squash and merge" +msgstr "Squash and merge" + +#: ../../src/appx/assignments.txt:202 +msgid "**Create a merge commit** suits in most of the cases." +msgstr "" + +#: ../../src/appx/assignments.txt:205 +msgid "Making changes" +msgstr "Внесення змін" + +#: ../../src/appx/assignments.txt:207 +#, fuzzy +msgid "" +"In case your pull request is **rejected** or has comments - you may need " +"to provide some fixes." +msgstr "" +"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб " +"зробити це:" + +#: ../../src/appx/assignments.txt:210 +#, fuzzy +msgid "Do the work in your local topic branch" +msgstr "Виконайте роботу у своїй локальній гілці." + +#: ../../src/appx/assignments.txt:211 +#, fuzzy +msgid "Push these changes to remote" +msgstr "Надішліть їх до гілки віддаленого репозиторію." + +#: ../../src/appx/assignments.txt:212 +msgid "Re-request review (if applicable)" +msgstr "" + +#: ../../src/appx/assignments.txt:213 +msgid "Wait until review is done" +msgstr "" #: ../../src/appx/blog/spec.rst:10 msgid "Blog Project Specification" @@ -27,19 +452,19 @@ msgstr "Специфікація Проекту Блогу" #: ../../src/appx/blog/spec.rst:12 msgid "" -"The project aims to develop a robust and user-friendly web application using " -"the Django framework. The primary objective is to create a blogging platform " -"that allows users to publish and manage articles on various topics. The " -"application will provide an intuitive interface for authors to compose and " -"format their articles, while also offering a seamless reading experience for " -"visitors." +"The project aims to develop a robust and user-friendly web application " +"using the Django framework. The primary objective is to create a blogging" +" platform that allows users to publish and manage articles on various " +"topics. The application will provide an intuitive interface for authors " +"to compose and format their articles, while also offering a seamless " +"reading experience for visitors." msgstr "" -"Проект має на меті розробку міцного та зручного у використанні веб-додатка " -"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " -"для блогів, яка дозволить користувачам публікувати та керувати статтями на " -"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " -"форматування своїх статей, а також забезпечить безперешкодний досвід читання " -"для відвідувачів." +"Проект має на меті розробку міцного та зручного у використанні " +"веб-додатка за допомогою фреймворку Django. Основна мета полягає у " +"створенні платформи для блогів, яка дозволить користувачам публікувати та" +" керувати статтями на різні теми. Додаток надасть інтуїтивний інтерфейс " +"авторам для створення та форматування своїх статей, а також забезпечить " +"безперешкодний досвід читання для відвідувачів." #: ../../src/appx/blog/spec.rst:19 msgid "**Key Features**" @@ -52,15 +477,16 @@ msgstr "Реєстрація та Аутентифікація Користув #: ../../src/appx/blog/spec.rst:23 msgid "" "The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and manage " -"their profile information. This feature will enable authors to have " -"personalized accounts and maintain ownership of their published articles." +"functionality, allowing individuals to create accounts, log in, and " +"manage their profile information. This feature will enable authors to " +"have personalized accounts and maintain ownership of their published " +"articles." msgstr "" "Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " -"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " -"мати персоналізовані облікові записи та зберігати право власності на їхні " -"опубліковані статті." +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити" +" в систему та керувати інформацією свого профілю. Ця функція дозволить " +"авторам мати персоналізовані облікові записи та зберігати право власності" +" на їхні опубліковані статті." #: ../../src/appx/blog/spec.rst:30 msgid "Article Management" @@ -68,14 +494,14 @@ msgstr "Керування Статтями" #: ../../src/appx/blog/spec.rst:31 msgid "" -"Authors will have the ability to create, edit, and delete articles within " -"the application. The system will offer a user-friendly editor. Additionally, " -"authors will be able to categorize articles by assigning relevant topics to " -"them." +"Authors will have the ability to create, edit, and delete articles within" +" the application. The system will offer a user-friendly editor. " +"Additionally, authors will be able to categorize articles by assigning " +"relevant topics to them." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори " +"зможуть категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:37 msgid "Topic Subscription:" @@ -84,36 +510,39 @@ msgstr "Підписка на Теми:" #: ../../src/appx/blog/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users " -"will receive notifications or updates whenever new articles are published in " -"those categories. This feature will enhance user engagement and ensure that " -"readers stay informed about the topics they find most valuable." +"subscribe to topics of interest. By subscribing to specific topics, users" +" will receive notifications or updates whenever new articles are " +"published in those categories. This feature will enhance user engagement " +"and ensure that readers stay informed about the topics they find most " +"valuable." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори " +"зможуть категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user experience " -"and incorporating essential functionalities such as user authentication, " -"article management, and topic subscriptions, the application will empower " -"users to create, share, and explore engaging content within a well-" -"structured and organized platform." +"caters to both authors and readers. By providing a seamless user " +"experience and incorporating essential functionalities such as user " +"authentication, article management, and topic subscriptions, the " +"application will empower users to create, share, and explore engaging " +"content within a well-structured and organized platform." msgstr "" "Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " -"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " -"категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про " -"найцікавіші для них теми." +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, " +"користувачі отримуватимуть повідомлення або оновлення кожного разу, коли " +"в цих категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про" +" найцікавіші для них теми." #: ../../src/appx/blog/spec.rst:52 msgid "" -"Here is a starter repository template, that may helps: `Starter template`_." +"Here is a starter repository template, that may helps: `Starter " +"template`_." msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." +"Ось шаблон стартового репозиторію, який може допомогти: `Starter " +"template`_." #: ../../src/appx/blog/spec.rst:55 msgid "Challenge: Functional views" @@ -121,42 +550,44 @@ msgstr "Виклик: Функціональні представлення" #: ../../src/appx/blog/spec.rst:57 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " -"ви хочете повернути в HTTP-відповіді." +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, " +"що всі маршрути доступні та надають правильні дані. Використовуйте " +"будь-що, що ви хочете повернути в HTTP-відповіді." #: ../../src/appx/blog/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." +"``/about/``: надає звичайний текст для користувача, що описує функції " +"сайту django." #: ../../src/appx/blog/spec.rst:63 msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via " -"the django site." +"``/``: A site's homepage. This will contain a list of blogs published via" +" the django site." msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " -"сайт Django." +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих " +"через сайт Django." #: ../../src/appx/blog/spec.rst:65 msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic part " -"in it. This will be used to fetch a single article from the database." +"``/
    /``: A single article detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single article from the " +"database." msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " -"частину. Вона буде використовуватися для отримання однієї статті з бази " -"даних." +"``/
    /``: Представлення деталей однієї статті. URL містить " +"динамічну частину. Вона буде використовуватися для отримання однієї " +"статті з бази даних." #: ../../src/appx/blog/spec.rst:68 msgid "" -"``/
    /comment/``: This view will be used to add comments to a article." +"``/
    /comment/``: This view will be used to add comments to a " +"article." msgstr "" "``/
    /comment/``: Це представлення буде використовуватися для " "додавання коментарів до статті." @@ -167,13 +598,11 @@ msgstr "``/create/``: Форма створення статті." #: ../../src/appx/blog/spec.rst:71 msgid "``/
    /update/``: A view to update an existing article data." -msgstr "" -"``/
    /update/``: Представлення для оновлення існуючих даних статті." +msgstr "``/
    /update/``: Представлення для оновлення існуючих даних статті." #: ../../src/appx/blog/spec.rst:72 msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "" -"``/
    /delete/``: Представлення для підтвердження видалення статті." +msgstr "``/
    /delete/``: Представлення для підтвердження видалення статті." #: ../../src/appx/blog/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." @@ -193,10 +622,11 @@ msgstr "``/profile//``: Особиста сторінка кори #: ../../src/appx/blog/spec.rst:77 msgid "" -"``/set-password/``: This route will be used to change users' credential data." +"``/set-password/``: This route will be used to change users' credential " +"data." msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " -"даних користувачів." +"``/set-password/``: Цей маршрут буде використовуватися для зміни " +"облікових даних користувачів." #: ../../src/appx/blog/spec.rst:79 msgid "``/set-userdata/``: This route will be user to change users' data." @@ -220,7 +650,8 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../src/appx/blog/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to " +"homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -232,20 +663,20 @@ msgstr "Додаткові завдання" #: ../../src/appx/blog/spec.rst:89 msgid "" -"``/archive///``: This view provides a list of articles " -"published on a specified month of a specified year. This view should apply " -"date validation and raise ``Http404`` for invalid paths. The valid date is a " -"year's 4-digits form followed by 1 or 2 digits representing month. Month " -"range should be limited as [1..12], leading zero may be omitted. Valid URLs " -"are:" +"``/archive///``: This view provides a list of " +"articles published on a specified month of a specified year. This view " +"should apply date validation and raise ``Http404`` for invalid paths. The" +" valid date is a year's 4-digits form followed by 1 or 2 digits " +"representing month. Month range should be limited as [1..12], leading " +"zero may be omitted. Valid URLs are:" msgstr "" -"``/archive///``: Це представлення надає список статей, " -"опублікованих у певному місяці певного року. Це представлення повинно " -"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"``/archive///``: Це представлення надає список " +"статей, опублікованих у певному місяці певного року. Це представлення " +"повинно застосовувати перевірку дати та викидати помилку ``Http404`` для " "неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " -"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " -"URL-адрес:" +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен " +"бути обмежений [1..12], ведучий нуль може бути пропущений. Приклади " +"правильних URL-адрес:" #: ../../src/appx/blog/spec.rst:103 msgid "Challenge: Data models" @@ -254,13 +685,13 @@ msgstr "Завдання: моделі даних" #: ../../src/appx/blog/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that is " -"to use a django command:" +"admin section you need to create a superuser. The easiest way to do that " +"is to use a django command:" msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " -"отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " -"Django:" +"Для створення деяких фіктивних даних можна використовувати Django Admin. " +"Щоб отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати " +"команду Django:" #: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 msgid "General" @@ -300,11 +731,11 @@ msgstr "Стаття вимагає наявності змісту (прина #: ../../src/appx/blog/spec.rst:129 msgid "" -"Creation date should be autogenerated at article creation, and would never " -"be updated." +"Creation date should be autogenerated at article creation, and would " +"never be updated." msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не буде " -"оновлюватися пізніше." +"Дата створення буде автоматично генеруватися при створенні статті і не " +"буде оновлюватися пізніше." #: ../../src/appx/blog/spec.rst:131 msgid "Updated date will be update at each article save." @@ -329,13 +760,14 @@ msgstr "Відносини" #: ../../src/appx/blog/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created via " -"admin page. You can also refer the same model as shown below:" +"reference pass ``\"auth.User\"`` as related model. Users can be created " +"via admin page. You can also refer the same model as shown below:" msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. Для " -"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " -"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " -"також можете посилатися на ту саму модель, як показано нижче:" +"Стандартна модель користувача Django **буде** використовуватися наразі. " +"Для застосування посилання на модель передайте ``\"auth.User\"`` як " +"пов'язану модель. Користувачі можуть бути створені через адміністративну " +"сторінку. Ви також можете посилатися на ту саму модель, як показано " +"нижче:" #: ../../src/appx/blog/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." @@ -343,49 +775,51 @@ msgstr "``article`` та ``topics`` мають *багато-до-багатьо #: ../../src/appx/blog/spec.rst:155 msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can have " -"**only one** author, but users can create as many articles as they want." +"``article`` and ``user`` have *one-to-many* relationship. A article can " +"have **only one** author, but users can create as many articles as they " +"want." msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " -"бути **лише один** автор, але користувачі можуть створювати стільки статей, " -"скільки їм потрібно." +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті " +"може бути **лише один** автор, але користувачі можуть створювати стільки " +"статей, скільки їм потрібно." #: ../../src/appx/blog/spec.rst:158 msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article may " -"be a container for many comments, but a comment is related to a single " -"article." +"``article`` and ``comment`` have *one-to-many* relationship. A article " +"may be a container for many comments, but a comment is related to a " +"single article." msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " -"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " -"однією статтею." +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття " +"може бути контейнером для багатьох коментарів, але коментар пов'язаний " +"лише з однією статтею." #: ../../src/appx/blog/spec.rst:161 msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " -"*article - user* relationship." +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" +" *article - user* relationship." msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." #: ../../src/appx/blog/spec.rst:163 msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can " -"prefer none or as many topics as needed and vice versa. This relationship " -"represents topics preferred by a certain blog user. Also this provides an " -"additional option to mark some of preferred topics with a **notify** flag, " -"to receive newsletters about specified topics updates. The difference " -"between *prefer* and *notify* is that *preferred* topics affect the articles " -"list for a user, and *notify* is responsible for newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " -"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " -"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " -"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " -"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " -"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " -"список статей для користувача, а *notify* відповідає за розсилку новин для " -"користувача." +"``topic`` and ``user`` use *many-to-many* relationship. A single user can" +" prefer none or as many topics as needed and vice versa. This " +"relationship represents topics preferred by a certain blog user. Also " +"this provides an additional option to mark some of preferred topics with " +"a **notify** flag, to receive newsletters about specified topics updates." +" The difference between *prefer* and *notify* is that *preferred* topics " +"affect the articles list for a user, and *notify* is responsible for " +"newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. " +"Один користувач може вибрати будь-яку кількість тем, і навпаки. Це " +"відношення представляє теми, які вибрані певним користувачем блогу. Крім " +"того, це надає додаткову опцію позначити деякі з вибраних тем прапорцем " +"**notify**, щоб отримувати розсилки про оновлення зазначених тем. " +"Відмінність між *prefer* (вибір) та *notify* (сповіщення) полягає в тому," +" що *prefer* впливає на список статей для користувача, а *notify* " +"відповідає за розсилку новин для користувача." #: ../../src/appx/blog/spec.rst:174 msgid "UML diagram" @@ -397,11 +831,11 @@ msgstr "Завдання: ORM" #: ../../src/appx/blog/spec.rst:181 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project's database." +"Update existing views to represent entities that are actually stored " +"inside the project's database." msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." +"Оновіть існуючі подання, щоб представити сутності, які фактично " +"зберігаються в базі даних проекту." #: ../../src/appx/blog/spec.rst:184 msgid "``/``: should represent a list of existing articles." @@ -413,16 +847,15 @@ msgstr "``/
    /``: повинен представляти окрему і #: ../../src/appx/blog/spec.rst:186 msgid "Detail view should obtain a list of article related comments." -msgstr "" -"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." +msgstr "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." #: ../../src/appx/blog/spec.rst:187 msgid "" -"``/profile//``: should contain information about user and a " -"list of articles authored by this user." +"``/profile//``: should contain information about user and a" +" list of articles authored by this user." msgstr "" -"``/profile//``: повинен містити інформацію про користувача та " -"список статей, написаних цим користувачем." +"``/profile//``: повинен містити інформацію про користувача " +"та список статей, написаних цим користувачем." #: ../../src/appx/blog/spec.rst:189 msgid "" @@ -430,30 +863,30 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " +"сутність не вдалося отримати." #: ../../src/appx/blog/spec.rst:194 msgid "" -"It's common to store dedicated functions/classes that supports some specific " -"business logic in a separate module called ``services.py`` or ``utils.py`` " -"within an application directory." +"It's common to store dedicated functions/classes that supports some " +"specific business logic in a separate module called ``services.py`` or " +"``utils.py`` within an application directory." msgstr "" "Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." -"py`` всередині директорії додатку." +"розумно зберігати в окремому модулі з назвою ``services.py`` або " +"``utils.py`` всередині директорії додатку." #: ../../src/appx/blog/spec.rst:201 msgid "" -"Create a service to fetch articles, ordered by a specified user preferences. " -"This means, topics preferred by a user affects articles orders. Queryset " -"should be ordered in way, to have articles with most corresponding topics at " -"the begging." +"Create a service to fetch articles, ordered by a specified user " +"preferences. This means, topics preferred by a user affects articles " +"orders. Queryset should be ordered in way, to have articles with most " +"corresponding topics at the begging." msgstr "" "Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " "згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " -"початку видачі." +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона" +" до початку видачі." #: ../../src/appx/blog/spec.rst:207 msgid "Challenge: Templates" @@ -466,8 +899,8 @@ msgstr "Корисне посилання: `Bootstrap template`_" #: ../../src/appx/blog/spec.rst:213 msgid "Links related to user data **may be** placeholders for now." msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " -"наразі." +"Посилання, що стосуються даних користувача, **можуть бути** " +"плейсхолдерами наразі." #: ../../src/appx/blog/spec.rst:217 msgid "**All** templates should be inherited from the ``base.html`` template." @@ -476,26 +909,29 @@ msgstr "**Усі** шаблони повинні успадковувати ``ba #: ../../src/appx/blog/spec.rst:218 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " +"etc." msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " -"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| " +"Blog``, наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | " +"Blog\" і т.д." #: ../../src/appx/blog/spec.rst:220 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" -"``)." +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL " +"``/``)." #: ../../src/appx/blog/spec.rst:221 msgid "" "Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented with a " -"custom template context processor." +"filters only articles of a relevant topic. This should be implemented " +"with a custom template context processor." msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " -"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " -"власного обробника контексту шаблону (template context processor)." +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення " +"цього типу фільтрує лише статті відповідної теми. Це слід реалізувати за " +"допомогою власного обробника контексту шаблону (template context " +"processor)." #: ../../src/appx/blog/spec.rst:224 msgid "Replace content block for *about* page with some static content." @@ -511,10 +947,11 @@ msgstr "Шаблони рівня застосунків розташовува #: ../../src/appx/blog/spec.rst:231 msgid "" -"Each page should contain a list of links to archive views for the last year." +"Each page should contain a list of links to archive views for the last " +"year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." +"Кожна сторінка має містити список посилань на перегляди архіву за " +"останній рік." #: ../../src/appx/blog/spec.rst:233 msgid "Each page should contain an inclusion-block(s) with following links:" @@ -542,8 +979,7 @@ msgstr "Головна сторінка містить список опублі #: ../../src/appx/blog/spec.rst:242 msgid "Each article entity is rendered using a custom template tag." -msgstr "" -"Кожен елемент статті відображається за допомогою власного шаблонного тегу." +msgstr "Кожен елемент статті відображається за допомогою власного шаблонного тегу." #: ../../src/appx/blog/spec.rst:243 msgid "``article`` template tag renders information about a article object:" @@ -654,8 +1090,8 @@ msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " -"деактивації облікового запису користувача." +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля " +"або деактивації облікового запису користувача." #: ../../src/appx/blog/spec.rst:291 msgid "Forms" @@ -664,8 +1100,8 @@ msgstr "Форми" #: ../../src/appx/blog/spec.rst:293 msgid "" "There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok just " -"to create a dedicated templates for future use." +"Django. This section describes the final view of these pages. It's ok " +"just to create a dedicated templates for future use." msgstr "" "Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " @@ -673,11 +1109,11 @@ msgstr "" #: ../../src/appx/blog/spec.rst:297 msgid "" -"``/register/`` page contains a new user registration form. It should take " -"inputs from the user:" +"``/register/`` page contains a new user registration form. It should take" +" inputs from the user:" msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " -"повинна отримувати введені дані від користувача:" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона" +" повинна отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 msgid "username" @@ -697,16 +1133,16 @@ msgstr "confirm password" #: ../../src/appx/blog/spec.rst:305 msgid "" -"``/login/`` page contains a user login form. It should take the inputs from " -"the user:" +"``/login/`` page contains a user login form. It should take the inputs " +"from the user:" msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:311 msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a " -"article's data:" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a" +" article's data:" msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" @@ -739,21 +1175,22 @@ msgstr "new password" #: ../../src/appx/blog/spec.rst:324 msgid "" -"Change user's data form collects all information, that can be changed, e.g. " -"``username``, ``first name``, ``last name`` etc." +"Change user's data form collects all information, that can be changed, " +"e.g. ``username``, ``first name``, ``last name`` etc." msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " -"наприклад, ``username``, ``first name``, ``last name`` та інше." +"Форма зміни даних користувача збирає всю інформацію, яка може бути " +"змінена, наприклад, ``username``, ``first name``, ``last name`` та інше." #: ../../src/appx/blog/spec.rst:326 msgid "" "User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to *subscribe* " -"for the newsletters becomes available." +"some topics as preferred. Also for preferred topics an option to " +"*subscribe* for the newsletters becomes available." msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач " -"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " -"тем стає доступною опція *підписки* на розсилку новинних листів." +"Сторінка налаштувань користувача містить список доступних тем. Користувач" +" може відмітити деякі теми як пріоритетні (переваги). Також для " +"пріоритетних тем стає доступною опція *підписки* на розсилку новинних " +"листів." #: ../../src/appx/blog/spec.rst:331 msgid "Challenge: Articles' slugs" @@ -781,8 +1218,7 @@ msgstr "`Challenge: ORM`_" #: ../../src/appx/blog/spec.rst:341 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "" -"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" +msgstr "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" #: ../../src/appx/blog/spec.rst:343 msgid "required for each article" @@ -798,14 +1234,16 @@ msgstr "Створіть міграцію даних для надання slug- #: ../../src/appx/blog/spec.rst:347 msgid "" -"``slug`` should be auto-generated on article save. The pattern is ``article." -"title-article.created_date``, e.g. \"Sample article\" created at " -"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." +"``slug`` should be auto-generated on article save. The pattern is " +"``article.title-article.created_date``, e.g. \"Sample article\" created " +"at \"03/24/2023\" should receive slug: ``sample-blog-" +"article-2023-03-23``." msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " -"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " -"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " -"отримає slug: ``sample-blog-article-2023-03-23``." +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. " +"Шаблон для генерації поля ``slug``: " +"``назва-статті-дата-створення-статті``, наприклад, стаття з назвою " +"\"Прикладна стаття\", створена \"24/03/2023\", отримає slug: ``sample-" +"blog-article-2023-03-23``." #: ../../src/appx/blog/spec.rst:351 msgid "Update detail view URL path with article slug as dynamic portion." @@ -819,8 +1257,7 @@ msgstr "Завдання: форми авторизації" #: ../../src/appx/blog/spec.rst:356 msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../src/appx/blog/spec.rst:358 msgid "``username``" @@ -862,11 +1299,11 @@ msgstr "Завдання: Автентифікація" #: ../../src/appx/blog/spec.rst:371 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be " +"visible in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " +"бути видимими на панелі навігації." #: ../../src/appx/blog/spec.rst:373 msgid "" @@ -878,16 +1315,17 @@ msgstr "" #: ../../src/appx/blog/spec.rst:375 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"If authenticated user is admin or stuff they should see a link to admin " +"page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../src/appx/blog/spec.rst:377 msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them:" +" desired username and email. Name data (both first and last) is optional." +" After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -899,46 +1337,46 @@ msgstr "" #: ../../src/appx/blog/spec.rst:382 msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case " +"login is successful they should be redirected to their profile (if no " +"``?next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У " +"разі успішного входу вони повинні бути перенаправлені до свого профілю " +"(якщо немає рядка запиту ``?next=url``)." #: ../../src/appx/blog/spec.rst:385 msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"article creation. Then a article is created, it should be authored by the " -"currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page." +" In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to article creation. Then a article is created, it should be " +"authored by the currently authenticated user." msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " -"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " -"представлення, його повинно перенаправити спочатку на сторінку входу, а " -"після успішної аутентифікації повернути на сторінку створення статті. При " -"створенні статті вона повинна мати автором поточного аутентифікованого " -"користувача." +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до " +"цієї сторінки. Якщо анонімний користувач намагається отримати доступ до " +"цього представлення, його повинно перенаправити спочатку на сторінку " +"входу, а після успішної аутентифікації повернути на сторінку створення " +"статті. При створенні статті вона повинна мати автором поточного " +"аутентифікованого користувача." #: ../../src/appx/blog/spec.rst:390 msgid "" -"``/
    /comment/``: Currently authenticated user should be referenced " -"as a comment's author." +"``/
    /comment/``: Currently authenticated user should be " +"referenced as a comment's author." msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " -"повинна бути зазначена його ідентифікація як автора." +"``/
    /comment/``: У коментарі поточного аутентифікованого " +"користувача повинна бути зазначена його ідентифікація як автора." #: ../../src/appx/blog/spec.rst:392 msgid "" -"Articles may be modified or deleted only by their authors from the detail " -"article page. However, admins can still performs articles actions from the " -"admin page." +"Articles may be modified or deleted only by their authors from the detail" +" article page. However, admins can still performs articles actions from " +"the admin page." msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " -"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " -"адміністративну сторінку." +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей" +" статті. Однак адміністратори все ще можуть виконувати дії зі статтями " +"через адміністративну сторінку." #: ../../src/appx/blog/spec.rst:395 msgid "User related paths are restricted for non-authorized users." @@ -956,12 +1394,12 @@ msgstr "``/set-userdata/``" #: ../../src/appx/blog/spec.rst:400 msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user as " -"*deleted* and log them user." +"``POST`` request ``/deactivate/`` should mark current authenticated user " +"as *deleted* and log them user." msgstr "" "Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для цього " -"користувача." +"аутентифікованого користувача як *видаленого* і виходити з системи для " +"цього користувача." #: ../../src/appx/blog/spec.rst:406 msgid "" @@ -974,16 +1412,17 @@ msgstr "" #: ../../src/appx/blog/spec.rst:408 msgid "" -"Implement account reactivation behavior. The exact workflow does not mater. " -"The sample scenario is to collect email for the user and check it for " -"existing in the database. After that create a request for admin to activate " -"an account and send a confirmation email, when all is done." +"Implement account reactivation behavior. The exact workflow does not " +"mater. The sample scenario is to collect email for the user and check it " +"for existing in the database. After that create a request for admin to " +"activate an account and send a confirmation email, when all is done." msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " -"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " -"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " -"цього створіть запит для адміністратора на активацію облікового запису та " -"надішліть підтверджувальний лист електронною поштою, коли все буде готово." +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок " +"дій не має значення. Один зі зразків сценаріїв може полягати у зборі " +"електронної пошти користувача та перевірки наявності цієї адреси в базі " +"даних. Після цього створіть запит для адміністратора на активацію " +"облікового запису та надішліть підтверджувальний лист електронною поштою," +" коли все буде готово." #: ../../src/appx/blog/spec.rst:414 msgid "Challenge: Article related forms" @@ -991,11 +1430,11 @@ msgstr "Виклик: Форми пов'язані зі статтями" #: ../../src/appx/blog/spec.rst:416 msgid "" -"Implement a article form. This form will be used to create new articles and " -"to update existing ones." +"Implement a article form. This form will be used to create new articles " +"and to update existing ones." msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " -"статей та оновлення існуючих." +"Реалізуйте форму статті. Ця форма буде використовуватися для створення " +"нових статей та оновлення існуючих." #: ../../src/appx/blog/spec.rst:418 msgid "Each created article should have at least one related topic." @@ -1010,8 +1449,8 @@ msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" -"``." +"З даного моменту дозволені лише запити типу ``POST`` до " +"``/
    /comment/``." #: ../../src/appx/blog/spec.rst:422 msgid "Implement functionality:" @@ -1064,8 +1503,8 @@ msgstr "Існуюча функціональність не повинна бу #: ../../src/appx/blog/spec.rst:445 msgid "It's ok to use built-in Django CBV if needed." msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " -"(CBV)." +"Якщо потрібно, можна використовувати вбудовані класи відображення у " +"Django (CBV)." #: ../../src/appx/blog/spec.rst:448 msgid "Challenge: Serializers" @@ -1073,24 +1512,24 @@ msgstr "Завдання: Серіалізатори" #: ../../src/appx/blog/spec.rst:452 msgid "" -"Topic serializer is for read-only purposes only. Topics can be created via " -"admin page only." +"Topic serializer is for read-only purposes only. Topics can be created " +"via admin page only." msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." #: ../../src/appx/blog/spec.rst:454 msgid "" -"Serialized data should contain all available data, e.g. ``pk``, ``title``, " -"``description``." +"Serialized data should contain all available data, e.g. ``pk``, " +"``title``, ``description``." msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." #: ../../src/appx/blog/spec.rst:459 msgid "" -"article comment serializer can perform both reading and writing operations. " -"But it can't be used to *update* or *delete* comment." +"article comment serializer can perform both reading and writing " +"operations. But it can't be used to *update* or *delete* comment." msgstr "" "серіалізатор коментаря статті може виконувати як операції читання, так і " "операції запису. Проте він не може використовуватися для оновлення або " @@ -1098,8 +1537,8 @@ msgstr "" #: ../../src/appx/blog/spec.rst:461 msgid "" -"Random, or pre-defined user may be used as comment's author for now. This " -"will be fixed in the future." +"Random, or pre-defined user may be used as comment's author for now. This" +" will be fixed in the future." msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." @@ -1109,8 +1548,8 @@ msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " -"отримання списку, отримання окремої статті, створення нової статті, " +"серіалізатор статей надає повний доступ до статей. Доступні всі операції:" +" отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." #: ../../src/appx/blog/spec.rst:470 @@ -1119,15 +1558,16 @@ msgstr "Користувач" #: ../../src/appx/blog/spec.rst:471 msgid "" -"User serializer provides full access to site users data. All operations are " -"available for now: list, retrieve, create, update and destroy. This behavior " -"will be fixed in the future, to prevent unauthorized data modifications." +"User serializer provides full access to site users data. All operations " +"are available for now: list, retrieve, create, update and destroy. This " +"behavior will be fixed in the future, to prevent unauthorized data " +"modifications." msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " -"Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та видалення. " -"Однак, ця поведінка буде виправлена у майбутньому для запобігання " -"несанкціонованим змінам даних." +"Серіалізатор користувача надає повний доступ до даних користувачів сайту." +" Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та " +"видалення. Однак, ця поведінка буде виправлена у майбутньому для " +"запобігання несанкціонованим змінам даних." #: ../../src/appx/blog/spec.rst:477 msgid "Challenge: API views" @@ -1136,13 +1576,13 @@ msgstr "Завдання: API views" #: ../../src/appx/blog/spec.rst:479 msgid "All blog-site functionality are to be reflected via REST API." msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API." +"Вся функціональність блог-сайту повинна бути відображена за допомогою " +"REST API." #: ../../src/appx/blog/spec.rst:482 msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This will " -"be fixed in the next challenge." +"It's ok to pass *pre-defined* user as argument in request's body. This " +"will be fixed in the next challenge." msgstr "" "Наразі дозволяється передавати *наперед визначеного* користувача у тілі " "запиту. Це буде виправлено у наступному розділі." @@ -1162,10 +1602,10 @@ msgstr "" "запису" #: ../../src/appx/blog/spec.rst:491 -msgid "" -"For non-authenticated users it is possible to obtain authentication data." +msgid "For non-authenticated users it is possible to obtain authentication data." msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." +"Для неаутентифікованих користувачів можлива отримання даних " +"аутентифікації." #: ../../src/appx/blog/spec.rst:494 msgid "" @@ -1201,13 +1641,6 @@ msgstr "Авторизовані користувачі можуть додав msgid "Code editors and IDEs for Python" msgstr "Редактори коду та IDE для Python" -#: ../../src/appx/code_edit.txt:-1 ../../src/appx/conv_store.txt:-1 -#: ../../src/appx/create_pr.txt:-1 ../../src/appx/env_path.txt:-1 -#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 -#: ../../src/appx/wtk.txt:-1 -msgid "Serhii Horodilov sgorodil@gmail.com" -msgstr "Serhii Horodilov sgorodil@gmail.com" - #: ../../src/appx/code_edit.txt:-1 msgid "python, editor, ide" msgstr "python, editor, ide" @@ -1222,17 +1655,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово " +"підходить для простих речей, але ці інструменти швидко перетворюють " +"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" +" або навіть просто хорошого спеціального редактора коду робить кодування " +"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -1248,23 +1681,25 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -1277,8 +1712,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -1310,23 +1745,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " +"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " +"дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" +" загальної ціни на вказану кількість товару для покупки. Бажану кількість" +" буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -1339,46 +1776,38 @@ msgstr "Пояснення коду" msgid "Product model implementation" msgstr "Реалізація моделі товару" -#: conv_store.models.Product:3 of -msgid "Instances of this class represent a product available for purchase." -msgstr "Цей клас представляє товари, які можна придбати в магазині." - #: conv_store.models.Product conv_store.models.ShoppingCart of wtk.models.Enemy #: wtk.models.Player msgid "Variables" msgstr "Змінні" -#: conv_store.models.Product:5 of +#: conv_store.models.Product:3 of msgid "the name of a product" msgstr "назва товару" -#: conv_store.models.Product:7 of +#: conv_store.models.Product:5 of msgid "the price for a single product unit" msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" -#: conv_store.models.Product:9 of +#: conv_store.models.Product:7 of msgid "the size of a single product unit" msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" +#: conv_store.models.Product:10 of +msgid "Instances of this class represent a product available for purchase." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + #: conv_store.models.Product.get_total:1 of msgid "Return the total price for a specified amount of a product" msgstr "Повертає загальну ціну за вказану кількість товару" -#: conv_store.models.Product.get_total:3 of -msgid "" -"If the quantity argument is omitted, unit attribute value should be used " -"instead." -msgstr "" -"Якщо аргумент кількості пропущено, замість нього слід використовувати " -"значення атрибута одиниці." - #: conv_store.models.Product.get_total #: conv_store.models.ShoppingCart.add_product of wtk.models.Enemy.__init__ #: wtk.models.Player.__init__ msgid "Parameters" msgstr "Параметри" -#: conv_store.models.Product.get_total:6 of +#: conv_store.models.Product.get_total:3 of msgid "a quantity to purchase, defaults to None" msgstr "кількість для покупки, за замовчуванням None" @@ -1389,7 +1818,7 @@ msgstr "кількість для покупки, за замовчування msgid "Returns" msgstr "Повертає" -#: conv_store.models.Product.get_total:9 of +#: conv_store.models.Product.get_total:6 of msgid "total price for a specified amount of a product" msgstr "вартість вказаної кількості товару" @@ -1398,6 +1827,14 @@ msgstr "вартість вказаної кількості товару" msgid "Return type" msgstr "Тип повернення" +#: conv_store.models.Product.get_total:9 of +msgid "" +"If the quantity argument is omitted, unit attribute value should be used " +"instead." +msgstr "" +"Якщо аргумент кількості пропущено, замість нього слід використовувати " +"значення атрибута одиниці." + #: ../../problem-sets/src/conv_store/challenge.rst:51 #: ../../problem-sets/src/conv_store/challenge.rst:82 #: ../../problem-sets/src/conv_store/challenge.rst:126 @@ -1413,11 +1850,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." +"responsibility is to store information about the purchases and their " +"amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -1429,9 +1866,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -1450,43 +1887,44 @@ msgid "Shopping cart model implementation" msgstr "Реалізація моделі кошика" #: conv_store.models.ShoppingCart:3 of -msgid "" -"In general shopping cart is a container for products. Instances of this " -"class handle product and corresponding quantity for each item inside a " -"shopping cart instance." -msgstr "" -"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " -"класу обробляють продукт і відповідну кількість для кожного товару в " -"екземплярі кошика для покупок." - -#: conv_store.models.ShoppingCart:7 of msgid "product appended to the shopping cart instance" msgstr "товар, доданий до екземпляра кошика" -#: conv_store.models.ShoppingCart:9 of +#: conv_store.models.ShoppingCart:5 of msgid "corresponding quantities for each product in cart" msgstr "відповідна кількість для товару у кошику" +#: conv_store.models.ShoppingCart:8 of +msgid "" +"In general shopping cart is a container for products. Instances of this " +"class handle product and corresponding quantity for each item inside a " +"shopping cart instance." +msgstr "" +"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " +"класу обробляють продукт і відповідну кількість для кожного товару в " +"екземплярі кошика для покупок." + #: conv_store.models.ShoppingCart.add_product:1 of msgid "Add product to the shopping cart" msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of -msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." -msgstr "" -"Цей метод додає екземпляр продукту та відповідне значення кількості до " -"кошика." - -#: conv_store.models.ShoppingCart.add_product:6 of msgid "a product instance to add to cart" msgstr "екземпляр товару, щоб додати до кошика" -#: conv_store.models.ShoppingCart.add_product:8 of +#: conv_store.models.ShoppingCart.add_product:5 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці " +"продукту." + +#: conv_store.models.ShoppingCart.add_product:9 of +msgid "" +"This method adds a product instance and corresponding quantity value to " +"the cart." +msgstr "" +"Цей метод додає екземпляр продукту та відповідне значення кількості до " +"кошика." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -1502,8 +1940,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -1512,16 +1950,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -1545,27 +1983,28 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -1576,8 +2015,7 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" +msgid "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -1586,11 +2024,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -1606,27 +2044,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість *protected*, оскільки до неї не слід звертатися поза " +"екземпляром картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -1634,9 +2072,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -1644,8 +2082,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -1655,31 +2093,29 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1688,9 +2124,10 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " +"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " +": {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1702,16 +2139,17 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1719,17 +2157,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1737,19 +2175,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." +"Implement ``remove_product`` method to completely remove some product " +"from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1765,407 +2203,12 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." -#: ../../src/appx/create_pr.txt:-1 -msgid "The instructions to create a pull request via GitHub" -msgstr "Інструкції щодо створення запиту на отримання через GitHub" - -#: ../../src/appx/create_pr.txt:-1 -msgid "Vladyslav Ponomaryov" -msgstr "Vladyslav Ponomaryov" - -#: ../../src/appx/create_pr.txt:-1 -msgid "git, github, pull request, branch, merge" -msgstr "git, github, pull request, branch, merge" - -#: ../../src/appx/create_pr.txt:9 -msgid "Creating the Pull Request" -msgstr "Створення Pull Request" - -#: ../../src/appx/create_pr.txt:11 -msgid "" -"Create a pull request to propose and collaborate on changes to a repository. " -"These changes are proposed in a *branch*, which ensures that the default " -"branch only contains finished and approved work :cite:`github:creating-pr`." -msgstr "" -"Створіть запит на отримання, щоб запропонувати та співпрацювати над змінами " -"в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " -"замовчуванням містить лише готову та затверджену роботу :cite:`github:" -"creating-pr`." - -#: ../../src/appx/create_pr.txt:17 -msgid "About pull requests" -msgstr "Про pull requests" - -#: ../../src/appx/create_pr.txt:19 -msgid "" -"Pull requests let you tell others about changes you've pushed to a branch in " -"a repository on GitHub. Once a pull request is opened, you can discuss and " -"review the potential changes with collaborators and add follow-up commits " -"before your changes are merged into the base branch :cite:`github:about-pr`." -msgstr "" -"Запити на витягування дозволяють повідомляти іншим про зміни, які ви внесли " -"до гілки сховища на GitHub. Після відкриття запиту на отримання ви можете " -"обговорити та переглянути потенційні зміни зі співавторами та додати " -"подальші коміти, перш ніж ваші зміни буде об'єднано в базову гілку :cite:" -"`github:about-pr`." - -#: ../../src/appx/create_pr.txt:25 -msgid "" -"The compare and pull request pages use different methods to calculate the " -"diff for changed files:" -msgstr "" -"Сторінки порівняння та запиту на отримання використовують різні методи для " -"обчислення різниці для змінених файлів:" - -#: ../../src/appx/create_pr.txt:28 -msgid "" -"Compare pages show the diff between the tip of the head ref and the current " -"common ancestor (that is, the merge base) of the head and base ref." -msgstr "" -"Сторінки порівняння показують різницю між кінчиком головного посилання та " -"поточним спільним предком (тобто основою злиття) головного та базового " -"посилання." - -#: ../../src/appx/create_pr.txt:30 -msgid "" -"Pull request pages show the diff between the tip of the head ref and the " -"common ancestor of the head and base ref at the time when the pull request " -"was created. Consequently, the merge base used for the comparison might be " -"different." -msgstr "" -"Сторінки запиту на отримання показують різницю між кінчиком головного " -"посилання та спільним предком головного та базового посилання на момент " -"створення запиту на отримання. Отже, база злиття, яка використовується для " -"порівняння, може бути іншою." - -#: ../../src/appx/create_pr.txt:35 -msgid "" -"In *few words*: both source and target branches **should** share some " -"commit(s) in their history and the source branch **should** has commit(s) " -"missing on the target one." -msgstr "" -"У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати спільні " -"деякі коміти у своїй історії, а вихідна гілка **повинна** мати коміти, " -"відсутні в цільовій." - -#: ../../src/appx/create_pr.txt:41 -msgid "Repository content" -msgstr "Вміст репозиторію" - -#: ../../src/appx/create_pr.txt:43 -msgid "Following SHOULD be included to the repository:" -msgstr "У репозиторій СЛІД включити наступне:" - -#: ../../src/appx/create_pr.txt:45 -msgid "code base" -msgstr "кодова база" - -#: ../../src/appx/create_pr.txt:46 -msgid "project dependencies (if any)" -msgstr "залежності проекту (якщо є)" - -#: ../../src/appx/create_pr.txt:48 -msgid "Following MAY be included to the repository:" -msgstr "До репозиторію МОЖЕ бути включено:" - -#: ../../src/appx/create_pr.txt:50 -msgid "additional information (e.g. README file and other documents)" -msgstr "додаткова інформація (наприклад, файл README та інші документи)" - -#: ../../src/appx/create_pr.txt:51 -msgid "dummy data (e.g. fixtures for development and testing etc.)" -msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" - -#: ../../src/appx/create_pr.txt:53 -msgid "Following SHOULD be excluded from the repository:" -msgstr "З репозитарію СЛІД виключити:" - -#: ../../src/appx/create_pr.txt:55 -msgid "virtual environment directory" -msgstr "каталог віртуального середовища" - -#: ../../src/appx/create_pr.txt:56 -msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" -msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" - -#: ../../src/appx/create_pr.txt:57 -msgid "python byte-compiled code (``__pycache__``)" -msgstr "скомпільований код python (``__pycache__``)" - -#: ../../src/appx/create_pr.txt:58 -msgid "IDE configurations (e.g. \".vscode\", \".idea\" etc.)" -msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" - -#: ../../src/appx/create_pr.txt:59 -msgid "Desktop Services Store (\".DS_Store\")" -msgstr "Desktop Services Store (\".DS_Store\")" - -#: ../../src/appx/create_pr.txt:63 -msgid "Repository preparation" -msgstr "Підготовка репозиторію" - -#: ../../src/appx/create_pr.txt:65 -msgid "This should be done once for each repository." -msgstr "Це потрібно зробити один раз для кожного репозиторію." - -#: ../../src/appx/create_pr.txt:68 -msgid "Repository initialization" -msgstr "Ініціалізація репозиторію" - -#: ../../src/appx/create_pr.txt:70 -msgid "" -"Create README file and provide a brief description for your project " -"(optional)." -msgstr "" -"Створіть файл README та надайте короткий опис свого проекту (необов'язково)." - -#: ../../src/appx/create_pr.txt:72 -msgid "Create a virtual environment." -msgstr "Створіть віртуальне середовище." - -#: ../../src/appx/create_pr.txt:73 -msgid "Install project dependencies." -msgstr "Встановіть залежності проекту." - -#: ../../src/appx/create_pr.txt:74 -msgid "Freeze the dependencies." -msgstr "Зафіксуйте залежності." - -#: ../../src/appx/create_pr.txt:80 -msgid "" -"Create a base code modules (e.g. initialize django project and apps, or " -"create an empty python module like \"main.py\" etc.)." -msgstr "" -"Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " -"його застосунки або створіть порожній модуль python, як-от \"main.py\" тощо)." - -#: ../../src/appx/create_pr.txt:82 -msgid "" -"Create \".gitignore\" file and set up directories and files to be excluded" -msgstr "" -"Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які потрібно " -"виключити" - -#: ../../src/appx/create_pr.txt:83 -msgid "Create a fresh repository." -msgstr "Створіть нове репозиторій." - -#: ../../src/appx/create_pr.txt:89 ../../src/appx/create_pr.txt:171 -msgid "Stage and commit changes." -msgstr "Зробіть фіксацію змін (stage + commit)." - -#: ../../src/appx/create_pr.txt:90 -msgid "Set up remote repository." -msgstr "Налаштуйте віддалений репозиторій." - -#: ../../src/appx/create_pr.txt:96 -msgid "Push your local branch to remote repo." -msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." - -#: ../../src/appx/create_pr.txt:99 -msgid "Append contributors to remote repository" -msgstr "Додати учасників до віддаленого репозиторію" - -#: ../../src/appx/create_pr.txt:101 -msgid "" -"Reviews allow collaborators to comment on the changes proposed in pull " -"requests, approve the changes, or request further changes before the pull " -"request is merged. Repository administrators can require that all pull " -"requests are approved before being merged." -msgstr "" -"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах на " -"отримання, затверджувати зміни або вимагати подальших змін перед об'єднанням " -"запиту на отримання. Адміністратори сховища можуть вимагати схвалення всіх " -"запитів на отримання перед об'єднанням." - -#: ../../src/appx/create_pr.txt:107 -msgid "" -"On `GitHub `_, navigate to the repository settings page " -"and switch to **Collaborators and teams** menu item." -msgstr "" -"На `GitHub `_ перейдіть на сторінку налаштувань " -"репозиторію та перейдіть до пункту меню **Collaborators and teams**." - -#: ../../src/appx/create_pr.txt:109 -msgid "Under **Manage access** section click ``Add people`` button." -msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." - -#: ../../src/appx/create_pr.txt:110 -msgid "In modal window start typing GitHub username." -msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." - -#: ../../src/appx/create_pr.txt:111 -msgid "Select a contributor from the dropdown menu." -msgstr "Виберіть учасника зі спадного меню." - -#: ../../src/appx/create_pr.txt:115 -msgid "Working on feature" -msgstr "Робота над завданням" - -#: ../../src/appx/create_pr.txt:117 -msgid "" -"Create a dedicated branch with some representative name (e.g. \"feature/" -"models\", \"cbv\" etc.)." -msgstr "" -"Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " -"\"feature/models\", \"cbv\" тощо)." - -#: ../../src/appx/create_pr.txt:119 -msgid "Switch to the newly created branch." -msgstr "Перейдіть до новоствореної гілки." - -#: ../../src/appx/create_pr.txt:120 -msgid "Do the work and commit changes on a feature branch." -msgstr "Виконайте роботу та зафіксуйте зміни в гілці." - -#: ../../src/appx/create_pr.txt:124 -msgid "You can create a branch and switch to it by a single command." -msgstr "" -"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " -"команди." - -#: ../../src/appx/create_pr.txt:133 -msgid "" -"While working on a *feature branch* make commits for each completed logical " -"block of code." -msgstr "" -"Під час роботи над *функціональною гілкою* робіть коміти для кожного " -"завершеного логічного блоку коду." - -#: ../../src/appx/create_pr.txt:138 -msgid "Creating the pull request" -msgstr "Створення запиту на злиття" - -#: ../../src/appx/create_pr.txt:140 -msgid "" -"Make sure your working branch is up-to-date with the default one. You can " -"pull changes for the default branch and rebase your feature branch onto it." -msgstr "" -"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " -"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " -"на неї." - -#: ../../src/appx/create_pr.txt:143 -msgid "" -"Push feature branch to the remote repository. By default the current active " -"branch is pushed to the remote repo." -msgstr "" -"Завантажте функціональну гілку до віддаленого репозиторію. За замовчуванням " -"буде завантажена активна гілка." - -#: ../../src/appx/create_pr.txt:150 -msgid "Go to your remote repository at GitHub and click **Pull requests** tab." -msgstr "" -"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку **Pull " -"requests**." - -#: ../../src/appx/create_pr.txt:151 -msgid "On **Pull requests** tab click **New** button." -msgstr "На вкладці **Pull requests** натисніть кнопку **New**." - -#: ../../src/appx/create_pr.txt:152 -msgid "" -"Select your default branch as *target* and your feature branch as *source*." -msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." - -#: ../../src/appx/create_pr.txt:153 -msgid "Provide some brief description for your pull request." -msgstr "Надайте короткий опис вашого запиту." - -#: ../../src/appx/create_pr.txt:154 -msgid "Press **Create pull request** button." -msgstr "Натисніть кнопку **Create pull request**." - -#: ../../src/appx/create_pr.txt:155 -msgid "" -"On the pull request page add a **reviewer** by clicking the appropriate " -"option and selecting a person from a dropdown menu." -msgstr "" -"На сторінці запиту на отримання додайте **reviewer**, натиснувши відповідну " -"опцію та вибравши особу зі спадного меню." - -#: ../../src/appx/create_pr.txt:160 -msgid "Making changes" -msgstr "Внесення змін" - -#: ../../src/appx/create_pr.txt:162 -msgid "From this moment, your pull request *is waiting* for the review." -msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." - -#: ../../src/appx/create_pr.txt:164 -msgid "" -"The reviewer will **approve** or **reject** your pull request. Optionally " -"the reviewer may provide some comments to your code; **rejected** pull " -"requests will always come with some details." -msgstr "" -"Рецензент **схвалить** або **відхилить** ваш запит на отримання. За бажанням " -"рецензент може надати деякі коментарі до вашого коду; **відхилені** запити " -"на витягування завжди надходитимуть з деякими деталями." - -#: ../../src/appx/create_pr.txt:168 -msgid "" -"In case your work is **rejected**, you are to provide fixes. To do this:" -msgstr "" -"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб зробити " -"це:" - -#: ../../src/appx/create_pr.txt:170 -msgid "Do the work in your local feature branch." -msgstr "Виконайте роботу у своїй локальній гілці." - -#: ../../src/appx/create_pr.txt:172 -msgid "Push them to remote branch." -msgstr "Надішліть їх до гілки віддаленого репозиторію." - -#: ../../src/appx/create_pr.txt:173 -msgid "Re-request review from the pull request page." -msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." - -#: ../../src/appx/create_pr.txt:175 -msgid "" -"All commits related to the source branch will be automatically appended to " -"the open pull request. The reviewer will review your updates. Repeat this " -"process until the pull request is **approved**." -msgstr "" -"Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " -"відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " -"Повторюйте цей процес, доки запит на отримання не буде **схвалено**." - -#: ../../src/appx/create_pr.txt:181 -msgid "Merging the pull request" -msgstr "Об'єднання (злиття) запиту" - -#: ../../src/appx/create_pr.txt:183 -msgid "" -"Once your pull request is **approved** - merge it. Select one of the options " -"available with your pull request; they may be:" -msgstr "" -"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один із " -"варіантів, доступних у вашому запиті на отримання; вони можуть бути:" - -#: ../../src/appx/create_pr.txt:186 -msgid "Create a merge commit" -msgstr "Create a merge commit" - -#: ../../src/appx/create_pr.txt:187 -msgid "Rebase and merge" -msgstr "Rebase and merge" - -#: ../../src/appx/create_pr.txt:188 -msgid "Squash and merge" -msgstr "Squash and merge" - -#: ../../src/appx/create_pr.txt:190 -msgid "After that the pull request is merged into your target branch." -msgstr "Після цього коміти робочої та цільової гілка об'єднується." - #: ../../src/appx/env_path.txt:-1 msgid "Setting up environment variables" msgstr "Встановлення змінних середовища" @@ -2193,15 +2236,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " +"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " +"пріоритет зліва направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -2221,11 +2264,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника," +" відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -2265,8 +2308,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -2371,16 +2414,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -2400,18 +2443,20 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об'єктом." +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " +"(по модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" +" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " +"*format* замінюються нулем або більше елементами *значень*. Якщо для " +"*format* потрібен один аргумент, *values* може бути одним некортежним " +"об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -2447,9 +2492,11 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " +"обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -2465,11 +2512,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " +"(перевизначає прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -2557,8 +2604,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -2601,8 +2648,7 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." +msgid "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -2627,8 +2673,7 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -2648,9 +2693,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -2675,14 +2720,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " -"provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution " +"`__ on Windows and a " +"DLL (cygwin1.dll) which provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux " +"`__ у Windows та DLL " +"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -2690,11 +2735,12 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " +"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " +"Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -2718,13 +2764,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle everything " -"from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle " +"everything from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " +"версій, призначена для швидкого та ефективного керування всіма проектами," +" від малих до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -2737,24 +2783,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" +" рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " +"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " +"розробки за допомогою інтегрованого конвеєра розробників і консолідації " +"компонентів програми. Активно використовувані мільйонами розробників у " +"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " +"простоту, гнучкість і вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -2766,13 +2812,14 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " +"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" +" вона заслужила міцну репутацію надійності, надійності функцій і " +"продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -2784,24 +2831,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" +" запиту. Крім того, введення може бути з файлу або з аргументів " +"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" +" функцій, подібних до оболонки, для полегшення написання сценаріїв і " +"автоматизації різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -2816,19 +2863,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа " +"адміністрування та розробки з відкритим кодом для PostgreSQL, " +"найдосконалішої бази даних з відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" +" веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -2840,17 +2887,19 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" -"contained `__, `high-reliability " -"`__, `full-featured `__, SQL database engine." +"SQLite is a C-language library that implements a `small " +"`__, `fast " +"`__, `self-contained " +"`__, `high-reliability " +"`__, `full-featured " +"`__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " -"`самодостатню `__, `висока надійність " -"`__, `повнофункціональний `__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку " +"`__, `швидку " +"`__, `самодостатню " +"`__, `висока надійність " +"`__, `повнофункціональний " +"`__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -2876,15 +2925,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must " -"type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must" +" type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " -"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " -"більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " +"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " +"якомога більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -2892,8 +2941,7 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -2901,8 +2949,9 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." +"The game process is divided into rounds. Each round consists of " +"**attack** and **defence** stages. Rounds are repeated, until player is " +"defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -2934,8 +2983,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by" +" random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -2974,8 +3023,9 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " -"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" +" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " +"успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -3003,13 +3053,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom " +"exception ``EnemyDown`` should be used to track these cases. Exception " +"should provide the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" +" повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -3021,13 +3071,15 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." +"This is an exceptional scenario when player is defeated. A custom " +"exception ``GameOver`` should be used to track these cases. Exception " +"should provide the details on the player's instance, especially its score" +" points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати " +"бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -3046,66 +3098,65 @@ msgid "Enemy model" msgstr "Модель супротивника" #: of wtk.models.Enemy:3 -msgid "Represents the playing enemy-bot." -msgstr "Представляє граючого ворога-бота." - -#: of wtk.models.Enemy:5 msgid "enemy's level value" msgstr "значення рівня противника" -#: of wtk.models.Enemy:7 +#: of wtk.models.Enemy:5 msgid "enemy's instance health points" msgstr "очки здоров'я ворога" +#: of wtk.models.Enemy:8 +msgid "Represents the playing enemy-bot." +msgstr "Представляє граючого ворога-бота." + #: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 msgid "Initialize instance" msgstr "Ініціалізувати екземпляр" #: of wtk.models.Enemy.__init__:3 -msgid "Health value is equal to the level value." -msgstr "Значення здоров'я дорівнює значенню рівня." - -#: of wtk.models.Enemy.__init__:5 msgid "an enemy's level indicator" msgstr "індикатор рівня противника" +#: of wtk.models.Enemy.__init__:6 +msgid "Health value is equal to the level value." +msgstr "Значення здоров'я дорівнює значенню рівня." + #: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 msgid "Decrease health points" msgstr "Зменшує очоки здоров'я" -#: of wtk.models.Enemy.decrease_health:3 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``EnemyDown`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``EnemyDown``." - #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" msgstr "raise" -#: of wtk.models.Enemy.decrease_health:6 +#: of wtk.models.Enemy.decrease_health:3 msgid "EnemyDown" msgstr "EnemyDown" +#: of wtk.models.Enemy.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``EnemyDown`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``EnemyDown``." + #: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 msgid "Return a random fight choice" msgstr "Повертає випадковий варіант для бою" #: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 -msgid "Choices made by an enemy are random." -msgstr "Вибори, зроблені супротивником, випадкові." - -#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 -#: wtk.models.Player.select_attack:7 wtk.models.Player.select_defence:7 +#: wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 msgid "a fight choice" msgstr "варіант для бою" +#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 +msgid "Choices made by an enemy are random." +msgstr "Вибори, зроблені супротивником, випадкові." + #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -3116,51 +3167,52 @@ msgid "Player model" msgstr "Модель гравця" #: of wtk.models.Player:3 -msgid "This model is controlled by the player." -msgstr "Ця модель керується гравцем." - -#: of wtk.models.Player:5 msgid "player's name" msgstr "ім'я гравця" -#: of wtk.models.Player:7 +#: of wtk.models.Player:5 msgid "player's instance health points" msgstr "очки здоров'я гравця" -#: of wtk.models.Player:9 +#: of wtk.models.Player:7 msgid "player's instance gained score points" msgstr "очки, зароблені гравцем" -#: of wtk.models.Player.__init__:3 -msgid "" -"This method performs player instance initialization. It set instance name, " -"initial score points value and health." -msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров'я." +#: of wtk.models.Player:10 +msgid "This model is controlled by the player." +msgstr "Ця модель керується гравцем." -#: of wtk.models.Player.__init__:6 +#: of wtk.models.Player.__init__:3 msgid "a player's name" msgstr "ім'я гравця" +#: of wtk.models.Player.__init__:6 +msgid "" +"This method performs player instance initialization. It set instance " +"name, initial score points value and health." +msgstr "" +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " +"назву екземпляра, значення початкових балів і здоров'я." + #: of wtk.models.Player.attack:1 msgid "Attack an enemy" msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" +"Perform attack on an enemy instance. This method takes an enemy instance " +"as an argument. After that, it takes attack choice from the player model " +"and the defence choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease enemy " +"health, assign score points etc.). Based on fight result should print out" +" a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі " +"гравця та вибір захисту з моделі противника. Після результату битви " +"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " +"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" +" \"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -3175,34 +3227,34 @@ msgid "\"IT'S A DRAW!\"" msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``GameOver`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``GameOver``." - -#: of wtk.models.Player.decrease_health:6 msgid "GameOver" msgstr "GameOver" +#: of wtk.models.Player.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``GameOver`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``GameOver``." + #: of wtk.models.Player.defence:1 msgid "Defend from an enemy's attack" msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance" +" as an argument. After that, it takes defence choice from the player " +"model and the attack choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease player " +"health). Based on fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та " +"вибір атаки від моделі ворога. Після результату бою необхідно виконати " +"операцію обчислення (зменшити здоров'я гравця). За результатами бою " +"повинно вийти повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -3236,7 +3288,7 @@ msgstr "**рицар** перемагає **злодія**" msgid "Return fight choice from the user's prompt" msgstr "Повертає варіант для поєдинку з вводу користувача" -#: of wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 +#: of wtk.models.Player.select_attack:5 wtk.models.Player.select_defence:5 msgid "" "The player is asked to make their decision for the upcoming fight. The " "chosen value is validated and if it is invalid the question is repeated." @@ -3275,7 +3327,8 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, " +"наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -3332,15 +3385,16 @@ msgid "Return a player's name from the user prompt" msgstr "Повертає ім'я гравця з вводу користувача" #: of wtk.engine.get_player_name:3 +msgid "a player defined name" +msgstr "ім'я визначене гравцем" + +#: of wtk.engine.get_player_name:5 msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." - -#: of wtk.engine.get_player_name:6 -msgid "a player defined name" -msgstr "ім'я визначене гравцем" +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " +"рядком." #: ../../problem-sets/src/wtk/challenge.rst:158 msgid "Play" @@ -3349,20 +3403,21 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated " +"- a new one should be initialized with level increased by 1 (one). This " +"case should be reported to the terminal. If a player is defeated - the " +"\"Game Over\" message should be reported to the terminal. " +"``KeyboardInterrupt`` should be handled as well - it's behavior is " +"similar to \"Game Over\" event, but \"game over\" message should be " +"omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " +"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " +"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " +"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " +"також слід обробити - це поведінка подібно до події \"Game Over\", але " +"повідомлення \"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -3370,13 +3425,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs the " -"game process in an endless loop. Once the player is defeated - it stops the " -"execution." +"The function initializes player and enemy instances. After that it runs " +"the game process in an endless loop. Once the player is defeated - it " +"stops the execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " -"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " -"зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" +" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" +" зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -3385,8 +3440,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" +" записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -3395,7 +3450,8 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового файлу." +"Зберігайте таблицю балів у базі даних замість використання текстового " +"файлу." #~ msgid "Specification for Django blog training project" #~ msgstr "Специфікація навчального проекту блогу Django" @@ -3407,8 +3463,254 @@ msgstr "" #~ msgstr "Додаткові завдання" #~ msgid "" -#~ "Create a service to fetch articles, ordered by a specified user " -#~ "preferences." +#~ "Create a service to fetch articles, " +#~ "ordered by a specified user preferences." +#~ msgstr "" +#~ "Створіть сервіс для отримання статей, " +#~ "впорядкованих за вказаними уподобаннями " +#~ "користувача." + +#~ msgid "The instructions to create a pull request via GitHub" +#~ msgstr "Інструкції щодо створення запиту на отримання через GitHub" + +#~ msgid "Creating the Pull Request" +#~ msgstr "Створення Pull Request" + +#~ msgid "" +#~ "Create a pull request to propose " +#~ "and collaborate on changes to a " +#~ "repository. These changes are proposed " +#~ "in a *branch*, which ensures that " +#~ "the default branch only contains " +#~ "finished and approved work :cite:`github" +#~ ":creating-pr`." +#~ msgstr "" +#~ "Створіть запит на отримання, щоб " +#~ "запропонувати та співпрацювати над змінами " +#~ "в сховищі. Ці зміни пропонуються у " +#~ "*гілці*, що гарантує, що гілка за " +#~ "замовчуванням містить лише готову та " +#~ "затверджену роботу :cite:`github:creating-pr`." + +#~ msgid "" +#~ "Pull requests let you tell others " +#~ "about changes you've pushed to a " +#~ "branch in a repository on GitHub. " +#~ "Once a pull request is opened, you" +#~ " can discuss and review the potential" +#~ " changes with collaborators and add " +#~ "follow-up commits before your changes " +#~ "are merged into the base branch " +#~ ":cite:`github:about-pr`." +#~ msgstr "" +#~ "Запити на витягування дозволяють повідомляти" +#~ " іншим про зміни, які ви внесли " +#~ "до гілки сховища на GitHub. Після " +#~ "відкриття запиту на отримання ви можете" +#~ " обговорити та переглянути потенційні зміни" +#~ " зі співавторами та додати подальші " +#~ "коміти, перш ніж ваші зміни буде " +#~ "об'єднано в базову гілку :cite:`github" +#~ ":about-pr`." + +#~ msgid "" +#~ "The compare and pull request pages " +#~ "use different methods to calculate the" +#~ " diff for changed files:" +#~ msgstr "" +#~ "Сторінки порівняння та запиту на " +#~ "отримання використовують різні методи для " +#~ "обчислення різниці для змінених файлів:" + +#~ msgid "" +#~ "Compare pages show the diff between " +#~ "the tip of the head ref and " +#~ "the current common ancestor (that is," +#~ " the merge base) of the head " +#~ "and base ref." +#~ msgstr "" +#~ "Сторінки порівняння показують різницю між " +#~ "кінчиком головного посилання та поточним " +#~ "спільним предком (тобто основою злиття) " +#~ "головного та базового посилання." + +#~ msgid "" +#~ "Pull request pages show the diff " +#~ "between the tip of the head ref" +#~ " and the common ancestor of the " +#~ "head and base ref at the time " +#~ "when the pull request was created. " +#~ "Consequently, the merge base used for" +#~ " the comparison might be different." +#~ msgstr "" +#~ "Сторінки запиту на отримання показують " +#~ "різницю між кінчиком головного посилання " +#~ "та спільним предком головного та " +#~ "базового посилання на момент створення " +#~ "запиту на отримання. Отже, база злиття," +#~ " яка використовується для порівняння, може" +#~ " бути іншою." + +#~ msgid "" +#~ "In *few words*: both source and " +#~ "target branches **should** share some " +#~ "commit(s) in their history and the " +#~ "source branch **should** has commit(s) " +#~ "missing on the target one." +#~ msgstr "" +#~ "У *кількох словах*: як вихідна, так " +#~ "і цільова гілки **повинні** мати спільні" +#~ " деякі коміти у своїй історії, а " +#~ "вихідна гілка **повинна** мати коміти, " +#~ "відсутні в цільовій." + +#~ msgid "Following SHOULD be included to the repository:" +#~ msgstr "У репозиторій СЛІД включити наступне:" + +#~ msgid "Following MAY be included to the repository:" +#~ msgstr "До репозиторію МОЖЕ бути включено:" + +#~ msgid "additional information (e.g. README file and other documents)" +#~ msgstr "додаткова інформація (наприклад, файл README та інші документи)" + +#~ msgid "dummy data (e.g. fixtures for development and testing etc.)" +#~ msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" + +#~ msgid "Following SHOULD be excluded from the repository:" +#~ msgstr "З репозитарію СЛІД виключити:" + +#~ msgid "virtual environment directory" +#~ msgstr "каталог віртуального середовища" + +#~ msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" +#~ msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" + +#~ msgid "Desktop Services Store (\".DS_Store\")" +#~ msgstr "Desktop Services Store (\".DS_Store\")" + +#~ msgid "Repository preparation" +#~ msgstr "Підготовка репозиторію" + +#~ msgid "This should be done once for each repository." +#~ msgstr "Це потрібно зробити один раз для кожного репозиторію." + +#~ msgid "" +#~ "Create README file and provide a " +#~ "brief description for your project " +#~ "(optional)." #~ msgstr "" -#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " -#~ "уподобаннями користувача." +#~ "Створіть файл README та надайте короткий" +#~ " опис свого проекту (необов'язково)." + +#~ msgid "Freeze the dependencies." +#~ msgstr "Зафіксуйте залежності." + +#~ msgid "" +#~ "Create a base code modules (e.g. " +#~ "initialize django project and apps, or" +#~ " create an empty python module like" +#~ " \"main.py\" etc.)." +#~ msgstr "" +#~ "Створіть модулі базового коду (наприклад, " +#~ "ініціалізуйте проект django та його " +#~ "застосунки або створіть порожній модуль " +#~ "python, як-от \"main.py\" тощо)." + +#~ msgid "" +#~ "Create \".gitignore\" file and set up" +#~ " directories and files to be excluded" +#~ msgstr "" +#~ "Створіть файл \".gitignore\" та налаштуйте " +#~ "каталоги та файли, які потрібно " +#~ "виключити" + +#~ msgid "Append contributors to remote repository" +#~ msgstr "Додати учасників до віддаленого репозиторію" + +#~ msgid "" +#~ "On `GitHub `_, navigate to" +#~ " the repository settings page and " +#~ "switch to **Collaborators and teams** " +#~ "menu item." +#~ msgstr "" +#~ "На `GitHub `_ перейдіть на" +#~ " сторінку налаштувань репозиторію та " +#~ "перейдіть до пункту меню **Collaborators " +#~ "and teams**." + +#~ msgid "Working on feature" +#~ msgstr "Робота над завданням" + +#~ msgid "" +#~ "Create a dedicated branch with some " +#~ "representative name (e.g. \"feature/models\", " +#~ "\"cbv\" etc.)." +#~ msgstr "" +#~ "Створіть спеціальну гілку з певною " +#~ "репрезентативною назвою (наприклад, " +#~ "\"feature/models\", \"cbv\" тощо)." + +#~ msgid "Do the work and commit changes on a feature branch." +#~ msgstr "Виконайте роботу та зафіксуйте зміни в гілці." + +#~ msgid "" +#~ "While working on a *feature branch* " +#~ "make commits for each completed logical" +#~ " block of code." +#~ msgstr "" +#~ "Під час роботи над *функціональною " +#~ "гілкою* робіть коміти для кожного " +#~ "завершеного логічного блоку коду." + +#~ msgid "On **Pull requests** tab click **New** button." +#~ msgstr "На вкладці **Pull requests** натисніть кнопку **New**." + +#~ msgid "" +#~ "On the pull request page add a " +#~ "**reviewer** by clicking the appropriate " +#~ "option and selecting a person from " +#~ "a dropdown menu." +#~ msgstr "" +#~ "На сторінці запиту на отримання додайте" +#~ " **reviewer**, натиснувши відповідну опцію " +#~ "та вибравши особу зі спадного меню." + +#~ msgid "" +#~ "The reviewer will **approve** or " +#~ "**reject** your pull request. Optionally " +#~ "the reviewer may provide some comments" +#~ " to your code; **rejected** pull " +#~ "requests will always come with some " +#~ "details." +#~ msgstr "" +#~ "Рецензент **схвалить** або **відхилить** ваш" +#~ " запит на отримання. За бажанням " +#~ "рецензент може надати деякі коментарі до" +#~ " вашого коду; **відхилені** запити на " +#~ "витягування завжди надходитимуть з деякими " +#~ "деталями." + +#~ msgid "Re-request review from the pull request page." +#~ msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." + +#~ msgid "" +#~ "All commits related to the source " +#~ "branch will be automatically appended to" +#~ " the open pull request. The reviewer" +#~ " will review your updates. Repeat " +#~ "this process until the pull request " +#~ "is **approved**." +#~ msgstr "" +#~ "Усі коміти, пов'язані з вихідною гілкою," +#~ " будуть автоматично додані до відкритого" +#~ " запиту на отримання. Рецензент перевірить" +#~ " ваші оновлення. Повторюйте цей процес, " +#~ "доки запит на отримання не буде " +#~ "**схвалено**." + +#~ msgid "Merging the pull request" +#~ msgstr "Об'єднання (злиття) запиту" + +#~ msgid "After that the pull request is merged into your target branch." +#~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." + diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 37257b7c3..9b0b2278e 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-19 11:46+0300\n" +"POT-Creation-Date: 2023-09-01 11:38+0300\n" "PO-Revision-Date: 2023-08-19 12:18+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: uk \n" "Language: uk\n" +"Language-Team: uk \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 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" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 #: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 @@ -29,7 +28,8 @@ msgstr "Система контролю версій" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 #: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 -#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 +#: ../../src/vcs/intro.txt:-1 ../../src/vcs/pullrequest.txt:-1 +#: ../../src/vcs/setup.txt:-1 msgid "Serhii Horodilov" msgstr "Serhii Horodilov" @@ -51,11 +51,11 @@ msgstr "Зазвичай ви отримуєте Git-репозиторій од #: ../../src/vcs/basics.txt:15 msgid "" -"You can take a local directory that is currently not under version control, " -"and turn it into a Git repository." +"You can take a local directory that is currently not under version " +"control, and turn it into a Git repository." msgstr "" -"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " -"версій, і перетворити його на Git-репозиторій." +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем" +" версій, і перетворити його на Git-репозиторій." #: ../../src/vcs/basics.txt:17 msgid "You can clone an existing Git repository from elsewhere." @@ -75,15 +75,16 @@ msgstr "Ініціалізація репо в існуючому каталоз #: ../../src/vcs/basics.txt:25 msgid "" -"If you have a project directory that is currently not under version control " -"and you want to start controlling it with Git, you first need to go to that " -"project's directory. If you've never done this, it looks a little different " -"depending on which system you're running:" +"If you have a project directory that is currently not under version " +"control and you want to start controlling it with Git, you first need to " +"go to that project's directory. If you've never done this, it looks a " +"little different depending on which system you're running:" msgstr "" -"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " -"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " -"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " -"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем " +"версій, і ви хочете почати контролювати його за допомогою Git'а, спершу " +"вам потрібно перейти до каталогу цього проекту. Якщо ви ніколи цього не " +"робили, це виглядає трохи інакше, залежно від того, якою системою ви " +"користуєтеся:" #: ../../src/vcs/basics.txt:30 msgid "Change directory in bash (Linux)" @@ -115,17 +116,19 @@ msgstr "Клонування існуючого репо" #: ../../src/vcs/basics.txt:57 msgid "" -"If you want to get a copy of an existing Git repository -- for example, a " -"project you'd like to contribute to -- the command you need is ``git clone``." +"If you want to get a copy of an existing Git repository -- for example, a" +" project you'd like to contribute to -- the command you need is ``git " +"clone``." msgstr "" -"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " -"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, " +"проекту, до якого ви хочете долучитися, - вам потрібна команда ``git " +"clone``." #: ../../src/vcs/basics.txt:64 msgid "" -"That creates a directory named *edu-python-course.github.io*, initializes a " -"*.git* directory inside it, pulls down all the data for that repository, and " -"checks out a working copy of the latest version." +"That creates a directory named *edu-python-course.github.io*, initializes" +" a *.git* directory inside it, pulls down all the data for that " +"repository, and checks out a working copy of the latest version." msgstr "" "Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " "каталог *.git* всередині нього, витягує всі дані для цього сховища і " @@ -136,19 +139,21 @@ msgid "" "That command does the same thing as the previous one, but the target " "directory is called *python-course*." msgstr "" -"Ця команда робить те саме, що й попередня, але цільовий каталог називається " -"*python-course*." +"Ця команда робить те саме, що й попередня, але цільовий каталог " +"називається *python-course*." #: ../../src/vcs/basics.txt:75 msgid "" -"Git has a number of different transfer protocols you can use. The previous " -"example uses the ``https://`` protocol, but you may also see ``git://`` or " -"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." +"Git has a number of different transfer protocols you can use. The " +"previous example uses the ``https://`` protocol, but you may also see " +"``git://`` or ``user@server:path/to/repo.git``, which uses the SSH " +"transfer protocol." msgstr "" "Git має декілька різних протоколів передачі даних, які ви можете " -"використовувати. У попередньому прикладі використовується протокол ``https://" -"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." -"git``, який використовує протокол передачі SSH." +"використовувати. У попередньому прикладі використовується протокол " +"``https://``, але ви також можете побачити ``git://`` або " +"``user@server:path/to/repo.git``, який використовує протокол передачі " +"SSH." #: ../../src/vcs/basics.txt:80 msgid "Making changes to the repo" @@ -156,17 +161,17 @@ msgstr "Внесення змін до репозиторію" #: ../../src/vcs/basics.txt:82 msgid "" -"At this point, you should have a *bona fide* Git repository on your local " -"machine, and a checkout or *working copy* of all of its files in front of " -"you. Typically, you'll want to start making changes and committing snapshots " -"of those changes into your repository each time the project reaches a state " -"you want to record." +"At this point, you should have a *bona fide* Git repository on your local" +" machine, and a checkout or *working copy* of all of its files in front " +"of you. Typically, you'll want to start making changes and committing " +"snapshots of those changes into your repository each time the project " +"reaches a state you want to record." msgstr "" "На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " "комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " -"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " -"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " -"зафіксувати." +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих " +"змін у вашому сховищі кожного разу, коли проект досягне стану, який ви " +"хочете зафіксувати." #: ../../src/vcs/basics.txt:88 msgid "" @@ -178,26 +183,27 @@ msgstr "" #: ../../src/vcs/basics.txt:91 msgid "" -"Tracked files are files that were in the last snapshot, as well as any newly " -"staged files; they can be unmodified, modified, or staged. In short, tracked " -"files are files that Git knows about." +"Tracked files are files that were in the last snapshot, as well as any " +"newly staged files; they can be unmodified, modified, or staged. In " +"short, tracked files are files that Git knows about." msgstr "" -"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" -"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " -"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " -"Git'у." +"Відстежувані файли - це файли, які були в останньому знімку, а також " +"будь-які нещодавно покладені файли; вони можуть бути незміненими, " +"зміненими або покладеними. Коротше кажучи, відстежувані файли - це файли," +" про які відомо Git'у." #: ../../src/vcs/basics.txt:94 msgid "" -"Untracked files are everything else -- any files in your working directory " -"that were not in your last snapshot and are not in your staging area. " -"Untracked basically means that Git sees a file you didn't have in a previous " -"snapshot (commit), and which hasn't been yet staged." +"Untracked files are everything else -- any files in your working " +"directory that were not in your last snapshot and are not in your staging" +" area. Untracked basically means that Git sees a file you didn't have in " +"a previous snapshot (commit), and which hasn't been yet staged." msgstr "" "Невідстежені файли - це все інше - будь-які файли у вашому робочому " "каталозі, яких не було у вашому останньому знімку і які не перебувають у " "вашій області сховища. По суті, це означає, що Git бачить файл, якого не " -"було у попередньому знімку (комміті), і який ще не було покладено у сховище." +"було у попередньому знімку (комміті), і який ще не було покладено у " +"сховище." #: ../../src/vcs/basics.txt:104 msgid "Checking out status of the file(s)" @@ -208,15 +214,16 @@ msgid "" "The main tool you use to determine which files are in which state is the " "``git status`` command." msgstr "" -"Основним інструментом для визначення стану файлів є команда ``git status``." +"Основним інструментом для визначення стану файлів є команда ``git " +"status``." #: ../../src/vcs/basics.txt:133 msgid "" -"Newly added *README.md* file is untracked, because it's under \"Untracked " -"files\" heading the status output." +"Newly added *README.md* file is untracked, because it's under \"Untracked" +" files\" heading the status output." msgstr "" -"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " -"розділі \"Файли, що не відстежуються\" у виведенні статусу." +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться" +" у розділі \"Файли, що не відстежуються\" у виведенні статусу." #: ../../src/vcs/basics.txt:137 msgid "Tracking new files" @@ -225,8 +232,8 @@ msgstr "Відстеження нових файлів" #: ../../src/vcs/basics.txt:139 msgid "In order to begin tracking a new file, you use the ``git add`` command." msgstr "" -"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " -"add``." +"Для того, щоб почати відстеження нового файлу, скористайтеся командою " +"``git add``." #: ../../src/vcs/basics.txt:153 msgid "" @@ -238,13 +245,13 @@ msgstr "" #: ../../src/vcs/basics.txt:157 msgid "" -"You can use wildcards, to stage multiple files at once. The most common use " -"cases is to add **all** modified files, or files inside of a specific " -"directory." +"You can use wildcards, to stage multiple files at once. The most common " +"use cases is to add **all** modified files, or files inside of a specific" +" directory." msgstr "" -"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " -"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " -"змінених файлів або файлів у певному каталозі." +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до " +"кількох файлів одночасно. Найпоширенішим випадком використання є " +"додавання **усіх** змінених файлів або файлів у певному каталозі." #: ../../src/vcs/basics.txt:168 msgid "Staging modified files" @@ -252,26 +259,25 @@ msgstr "Зберігання змінених файлів" #: ../../src/vcs/basics.txt:170 msgid "" -"If a staged (or already committed) file has been changed, it will be moved " -"under \"Modified\" heading. These changes wouldn't be committed unless they " -"are staged." +"If a staged (or already committed) file has been changed, it will be " +"moved under \"Modified\" heading. These changes wouldn't be committed " +"unless they are staged." msgstr "" -"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " -"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " -"вони не були поетапними." +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, " +"його буде переміщено у рубрику \"Змінено\". Ці зміни не будуть " +"зафіксовані, якщо вони не були поетапними." #: ../../src/vcs/basics.txt:190 -msgid "" -"Changes may be added to the stage area by repeating ``git add`` command." +msgid "Changes may be added to the stage area by repeating ``git add`` command." msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." #: ../../src/vcs/basics.txt:191 msgid "" -"Changes may be discard by ``git restore `` command. This action will " -"restore file to its **staged** version." +"Changes may be discard by ``git restore `` command. This action " +"will restore file to its **staged** version." msgstr "" -"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " -"до його **попередньої** версії." +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить " +"файл до його **попередньої** версії." #: ../../src/vcs/basics.txt:195 msgid "Committing changes" @@ -280,14 +286,14 @@ msgstr "Фіксація змін" #: ../../src/vcs/basics.txt:197 msgid "" "Now that the stage area is set up the way required, it's time to commit " -"changes. Remember that anything that is still unstaged -- any files you have " -"created or modified that you haven't run git add on since you edited them -- " -"won't go into this commit." +"changes. Remember that anything that is still unstaged -- any files you " +"have created or modified that you haven't run git add on since you edited" +" them -- won't go into this commit." msgstr "" -"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " -"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " -"створили або змінили, але не запустили git-додаток з моменту редагування, - " -"не потраплять до цього коміту." +"Тепер, коли область змін налаштована належним чином, настав час " +"зафіксувати зміни. Пам'ятайте, що все, що ще не є стадією - будь-які " +"файли, які ви створили або змінили, але не запустили git-додаток з " +"моменту редагування, - не потраплять до цього коміту." #: ../../src/vcs/basics.txt:202 msgid "The simplest way to commit is to type ``git commit``:" @@ -299,18 +305,18 @@ msgstr "Після цього запуститься обраний вами р #: ../../src/vcs/basics.txt:211 msgid "" -"This is set by your shell's EDITOR environment variable -- usually vim or " -"emacs, although you can configure it with whatever you want using the ``git " -"config --global core.editor``" +"This is set by your shell's EDITOR environment variable -- usually vim or" +" emacs, although you can configure it with whatever you want using the " +"``git config --global core.editor``" msgstr "" "Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " -"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" -"global core.editor``" +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git " +"config --global core.editor``" #: ../../src/vcs/basics.txt:215 msgid "" -"Alternatively, you can type your commit message inline with the ``commit`` " -"command by specifying it after a ``-m`` flag, like this:" +"Alternatively, you can type your commit message inline with the " +"``commit`` command by specifying it after a ``-m`` flag, like this:" msgstr "" "Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " "``commit``, вказавши його після прапорця ``-m``, як показано нижче:" @@ -318,19 +324,19 @@ msgstr "" #: ../../src/vcs/basics.txt:222 msgid "" "Although it can be amazingly useful for crafting commits exactly how you " -"want them, the staging area is sometimes a bit more complex than you need in " -"your workflow. If you want to skip the staging area, Git provides a simple " -"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " -"automatically stage every file that is already tracked before doing the " -"commit, letting you skip the git add part:" -msgstr "" -"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " -"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " -"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " -"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " -"commit`` змушує Git автоматично стадіювати кожен файл, який вже " -"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " -"git add:" +"want them, the staging area is sometimes a bit more complex than you need" +" in your workflow. If you want to skip the staging area, Git provides a " +"simple shortcut. Adding the ``-a`` option to the ``git commit`` command " +"makes Git automatically stage every file that is already tracked before " +"doing the commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так," +" як вам потрібно, область підготовки іноді буває трохи складнішою, ніж " +"вам потрібно у вашому робочому процесі. Якщо ви хочете пропустити область" +" підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди " +"``git commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити " +"частину git add:" #: ../../src/vcs/basics.txt:263 msgid "Ignoring files" @@ -338,20 +344,20 @@ msgstr "Ігнорування файлів" #: ../../src/vcs/basics.txt:265 msgid "" -"Often, there is a class of files, that should not be a part of a repo. You " -"want these files to be prevent from being automatically added or even shown " -"as being untracked. These are generally files produced by loggers or a build " -"system, or some local settings for the project that shouldn't be shared " -"across other developers or maintainers. In such cases you can create a *." -"gitignore* file. Here is the content of *.gitignore* used in current " -"repository:" +"Often, there is a class of files, that should not be a part of a repo. " +"You want these files to be prevent from being automatically added or even" +" shown as being untracked. These are generally files produced by loggers " +"or a build system, or some local settings for the project that shouldn't " +"be shared across other developers or maintainers. In such cases you can " +"create a *.gitignore* file. Here is the content of *.gitignore* used in " +"current repository:" msgstr "" "Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " -"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " -"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як" +" такі, що не відстежуються. Зазвичай це файли, створені логгерами або " "системою збірки, або деякі локальні налаштування проекту, які не повинні " -"бути доступними для інших розробників або супровідників. У таких випадках ви " -"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"бути доступними для інших розробників або супровідників. У таких випадках" +" ви можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " "використовується у поточному сховищі:" #: ../../src/vcs/basics.txt:305 @@ -360,8 +366,8 @@ msgstr "Ці рядки означають:" #: ../../src/vcs/basics.txt:307 msgid "" -"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " -"will be ignored completely." +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\"" +" will be ignored completely." msgstr "" "Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " "повністю проігноровано." @@ -372,63 +378,59 @@ msgstr "Вміст каталогу \"node_modules\" буде повністю #: ../../src/vcs/basics.txt:310 msgid "" -"Any files within directories named \".vscode\" or \".idea\" will be ignored " -"completely." +"Any files within directories named \".vscode\" or \".idea\" will be " +"ignored completely." msgstr "" "Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " "повністю проігноровані." #: ../../src/vcs/basics.txt:312 msgid "Any file with name starting with hash (#) will be ignored." -msgstr "" -"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." +msgstr "Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." #: ../../src/vcs/basics.txt:313 msgid "Any file with name ending with tilda (~) will be ignored." -msgstr "" -"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." +msgstr "Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." #: ../../src/vcs/basics.txt:314 msgid "" "Content within directories named \"temp\" or \"tmp\" will be ignored " "completely." msgstr "" -"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю " +"проігноровано." #: ../../src/vcs/basics.txt:316 msgid "" "Content within directories named \"_builds\", \"_build\", \"builds\" or " "\"build\" will be ignored completely." msgstr "" -"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " -"буде повністю проігноровано." +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або " +"\"build\" буде повністю проігноровано." #: ../../src/vcs/basics.txt:318 msgid "Any file with name ending with \".pot\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." +msgstr "Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." #: ../../src/vcs/basics.txt:319 msgid "Any file with name ending with \".mo\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." +msgstr "Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." #: ../../src/vcs/basics.txt:321 msgid "" -"Setting up a *.gitignore* file for your new repository before you get going " -"is generally a good idea so you don't accidentally commit files that you " -"really don't want in your Git repository." +"Setting up a *.gitignore* file for your new repository before you get " +"going is generally a good idea so you don't accidentally commit files " +"that you really don't want in your Git repository." msgstr "" "Створення файлу *.gitignore* для вашого нового сховища перед початком " -"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " -"вам насправді не потрібні у вашому Git-репозиторії." +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, " +"які вам насправді не потрібні у вашому Git-репозиторії." #: ../../src/vcs/basics.txt:325 msgid "" "The rules for the patterns you can put in the *.gitignore* file are as " "follows:" -msgstr "" -"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" +msgstr "Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" #: ../../src/vcs/basics.txt:327 msgid "Blank lines or lines starting with # are ignored." @@ -436,15 +438,16 @@ msgstr "Порожні рядки або рядки, що починаються #: ../../src/vcs/basics.txt:328 msgid "" -"Standard glob patterns work, and will be applied recursively throughout the " -"entire working tree." +"Standard glob patterns work, and will be applied recursively throughout " +"the entire working tree." msgstr "" -"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " -"по всьому робочому дереву." +"Працюють стандартні шаблони глобусів, які будуть застосовуватися " +"рекурсивно по всьому робочому дереву." #: ../../src/vcs/basics.txt:330 msgid "" -"You can start patterns with a forward slash (/) to avoid recursive inclusion." +"You can start patterns with a forward slash (/) to avoid recursive " +"inclusion." msgstr "" "Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " "похилої риски (/)." @@ -452,7 +455,8 @@ msgstr "" #: ../../src/vcs/basics.txt:332 msgid "You can end patterns with a forward slash (/) to specify a directory." msgstr "" -"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати " +"каталог." #: ../../src/vcs/basics.txt:333 msgid "You can negate a pattern by starting it with an exclamation point (!)." @@ -460,21 +464,22 @@ msgstr "Ви можете заперечити шаблон, почавши йо #: ../../src/vcs/basics.txt:335 msgid "" -"Glob patterns are like simplified regular expressions that shells use. An " -"asterisk (\\*) matches zero or more characters; [ab] matches any character " -"inside the brackets (in this case a or b); a question mark (?) matches a " -"single character; and brackets enclosing characters separated by a hyphen " -"([0-9]) matches any character between them (in this case 0 through 9). You " -"can also use two asterisks to match nested directories; a/\\*\\*/z would " -"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." -msgstr "" -"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " -"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " -"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " -"(?) відповідає одному символу; а дужки, що містять символи, розділені " -"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " -"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " -"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +"Glob patterns are like simplified regular expressions that shells use. An" +" asterisk (\\*) matches zero or more characters; [ab] matches any " +"character inside the brackets (in this case a or b); a question mark (?) " +"matches a single character; and brackets enclosing characters separated " +"by a hyphen ([0-9]) matches any character between them (in this case 0 " +"through 9). You can also use two asterisks to match nested directories; " +"a/\\*\\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Шаблони глобусів подібні до спрощених регулярних виразів, які " +"використовують оболонки. Зірочка (\\*) відповідає нулю або більше " +"символів; [ab] відповідає будь-якому символу всередині дужок (у цьому " +"випадку a або b); знак питання (?) відповідає одному символу; а дужки, що" +" містять символи, розділені дефісом ([0-9]), відповідають будь-якому " +"символу між ними (у цьому випадку від 0 до 9). Ви також можете " +"використовувати дві зірочки для вкладених каталогів; a/\\*\\*/z буде " +"відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." #: ../../src/vcs/basics.txt:344 msgid "Viewing the commit history" @@ -482,79 +487,81 @@ msgstr "Перегляд історії коммітів" #: ../../src/vcs/basics.txt:346 msgid "" -"After you have created several commits, or if you have cloned a repository " -"with an existing commit history, you'll probably want to look back to see " -"what has happened. The most basic and powerful tool to do this is the ``git " -"log`` command." +"After you have created several commits, or if you have cloned a " +"repository with an existing commit history, you'll probably want to look " +"back to see what has happened. The most basic and powerful tool to do " +"this is the ``git log`` command." msgstr "" -"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " -"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " -"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " -"команда ``git log``." +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище" +" з існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, " +"щоб побачити, що сталося. Найпростішим і найпотужнішим інструментом для " +"цього є команда ``git log``." #: ../../src/vcs/basics.txt:372 msgid "" -"By default, with no arguments, ``git log`` lists the commits made in that " -"repository in reverse chronological order; that is, the most recent commits " -"show up first. As you can see, this command lists each commit with its SHA-1 " -"checksum, the author's name and email, the date written, and the commit " -"message." +"By default, with no arguments, ``git log`` lists the commits made in that" +" repository in reverse chronological order; that is, the most recent " +"commits show up first. As you can see, this command lists each commit " +"with its SHA-1 checksum, the author's name and email, the date written, " +"and the commit message." msgstr "" "За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " "зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " "найновіші комміти показуються першими. Як ви можете бачити, ця команда " -"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " -"адресою автора, датою створення та повідомленням про внесення." +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та " +"електронною адресою автора, датою створення та повідомленням про " +"внесення." #: ../../src/vcs/basics.txt:378 msgid "" -"One of the more helpful options is ``-p`` or ``--patch``, which shows the " -"difference (the *patch* output) introduced in each commit. You can also " -"limit the number of log entries displayed, such as using ``-`` to " -"show only desired number of latest entries." +"One of the more helpful options is ``-p`` or ``--patch``, which shows the" +" difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to" +" show only desired number of latest entries." msgstr "" "Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " -"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " -"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" -"``, щоб показати лише потрібну кількість останніх записів." +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також " +"можете обмежити кількість відображуваних записів, наприклад, за допомогою" +" ``-``, щоб показати лише потрібну кількість останніх записів." #: ../../src/vcs/basics.txt:414 msgid "" -"This option display the same information but with a diff directly following " -"each entry. This is very helpful for code review or to quickly browse what " -"happened during a series of commits that a collaborator has added. You can " -"also use a series of summarizing options with ``git log``." +"This option display the same information but with a diff directly " +"following each entry. This is very helpful for code review or to quickly " +"browse what happened during a series of commits that a collaborator has " +"added. You can also use a series of summarizing options with ``git log``." msgstr "" -"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " -"кожного запису. Це дуже корисно для перегляду коду або для швидкого " -"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " -"також можете скористатися низкою параметрів підсумовування за допомогою " -"``git log``." +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо " +"після кожного запису. Це дуже корисно для перегляду коду або для швидкого" +" перегляду того, що сталося під час серії коммітів, доданих співавторами." +" Ви також можете скористатися низкою параметрів підсумовування за " +"допомогою ``git log``." #: ../../src/vcs/basics.txt:419 msgid "" -"If you want to see some abbreviated stats for each commit, you can use the " -"``--stat`` option:" +"If you want to see some abbreviated stats for each commit, you can use " +"the ``--stat`` option:" msgstr "" -"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " -"скористатися опцією ``--stat``:" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви " +"можете скористатися опцією ``--stat``:" #: ../../src/vcs/basics.txt:443 msgid "" -"Another really useful option is ``--pretty``. This option changes the log " -"output to formats other that the default. A few prebuilt option values are " -"available for you to use. The ``oneline`` value for this option prints each " -"commit on a single line, which is useful if you're look a lot of commits. In " -"addition, the ``short``, ``full``, and ``fuller`` values show the output in " -"roughly the same format but with less or more information." +"Another really useful option is ``--pretty``. This option changes the log" +" output to formats other that the default. A few prebuilt option values " +"are available for you to use. The ``oneline`` value for this option " +"prints each commit on a single line, which is useful if you're look a lot" +" of commits. In addition, the ``short``, ``full``, and ``fuller`` values " +"show the output in roughly the same format but with less or more " +"information." msgstr "" "Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " -"формат виведення журналу на формат, відмінний від стандартного. Ви можете " -"скористатися кількома готовими значеннями цього параметра. Значення " -"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " -"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " -"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " -"форматі, але з меншою або більшою кількістю інформації." +"формат виведення журналу на формат, відмінний від стандартного. Ви можете" +" скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, " +"що є корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно " +"однаковому форматі, але з меншою або більшою кількістю інформації." #: ../../src/vcs/basics.txt:476 msgid "Specifier" @@ -691,19 +698,19 @@ msgstr "Тема" #: ../../src/vcs/basics.txt:509 msgid "" -"The ``oneline`` and ``format`` option values are particularly useful with " -"another ``log`` option called ``--graph``. This option adds a nice little " -"ASCII graph showing your branch and merge history:" +"The ``oneline`` and ``format`` option values are particularly useful with" +" another ``log`` option called ``--graph``. This option adds a nice " +"little ASCII graph showing your branch and merge history:" msgstr "" "Значення параметрів ``online`` і ``format`` особливо корисні з іншим " "параметром ``log``, який називається ``--graph``. Цей параметр додає " -"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " -"злиття:" +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок" +" і злиття:" #: ../../src/vcs/basics.txt:538 msgid "" -"There are many more output-formatting options to ``git log``. Common options " -"to ``git log`` are:" +"There are many more output-formatting options to ``git log``. Common " +"options to ``git log`` are:" msgstr "" "Існує набагато більше варіантів форматування виводу для ``git log``. " "Загальними параметрами ``git log`` є наступні:" @@ -738,7 +745,8 @@ msgstr "--shortstat" #: ../../src/vcs/basics.txt:548 msgid "" -"Display only the changed/insertions/deletions line from the --stat command." +"Display only the changed/insertions/deletions line from the --stat " +"command." msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." #: ../../src/vcs/basics.txt:551 @@ -755,8 +763,8 @@ msgstr "--name-status" #: ../../src/vcs/basics.txt:554 msgid "" -"Show the list of files affected with added/modified/deleted information as " -"well." +"Show the list of files affected with added/modified/deleted information " +"as well." msgstr "" "Також покажіть список файлів, яких торкнулася додана/змінена/видалена " "інформація." @@ -767,9 +775,11 @@ msgstr "--abbrev-commit" #: ../../src/vcs/basics.txt:557 msgid "" -"Show only the first few characters of the SHA-1 checksum instead of all 40." +"Show only the first few characters of the SHA-1 checksum instead of all " +"40." msgstr "" -"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх" +" 40." #: ../../src/vcs/basics.txt:560 msgid "--relative-date" @@ -777,11 +787,11 @@ msgstr "--relative-date" #: ../../src/vcs/basics.txt:560 msgid "" -"Display the date in a relative format (for example, \"2 weeks ago\") instead " -"of using the full date format." +"Display the date in a relative format (for example, \"2 weeks ago\") " +"instead of using the full date format." msgstr "" -"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " -"повного формату дати." +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") " +"замість повного формату дати." #: ../../src/vcs/basics.txt:563 msgid "--graph" @@ -789,9 +799,11 @@ msgstr "--graph" #: ../../src/vcs/basics.txt:563 msgid "" -"Display an ASCII graph of the branch and merge history beside the log output." +"Display an ASCII graph of the branch and merge history beside the log " +"output." msgstr "" -"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням " +"журналу." #: ../../src/vcs/basics.txt:566 msgid "--pretty" @@ -799,8 +811,8 @@ msgstr "--pretty" #: ../../src/vcs/basics.txt:566 msgid "" -"Show commits in an alternate format. Option values include oneline, short, " -"full, fuller, and format (where you specify your own format)." +"Show commits in an alternate format. Option values include oneline, " +"short, full, fuller, and format (where you specify your own format)." msgstr "" "Показувати комміти в альтернативному форматі. Значення опції включають: " "online, short, full, fuller і format (де ви можете вказати свій власний " @@ -812,8 +824,7 @@ msgstr "--oneline" #: ../../src/vcs/basics.txt:570 msgid "Shorthand for --pretty=oneline --abbrev-commit used together." -msgstr "" -"Скорочення для --pretty=online --abbrev-commit, що використовується разом." +msgstr "Скорочення для --pretty=online --abbrev-commit, що використовується разом." #: ../../src/vcs/basics.txt:575 msgid "Limiting log output" @@ -822,50 +833,50 @@ msgstr "Обмеження виводу журналу" #: ../../src/vcs/basics.txt:577 msgid "" "In addition to output-formatting options, ``git log`` takes a number of " -"useful limiting options; that is options that let you show only a subset of " -"commits. You've seen one such option already -- the ``-`` (e.g. " -"``-2`` or ``-10``) option, which displays only the given number of latest " -"commits." +"useful limiting options; that is options that let you show only a subset " +"of commits. You've seen one such option already -- the ``-`` " +"(e.g. ``-2`` or ``-10``) option, which displays only the given number of " +"latest commits." msgstr "" "На додаток до параметрів форматування виводу, ``git log`` приймає ряд " "корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " -"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" -"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - " +"``-<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " "кількість останніх коммітів." #: ../../src/vcs/basics.txt:591 msgid "" -"However, the time-limiting options such as ``--since`` and ``--until`` are " -"very useful. For example, the command to get the list of commits made in the " -"last two weeks:" +"However, the time-limiting options such as ``--since`` and ``--until`` " +"are very useful. For example, the command to get the list of commits made" +" in the last two weeks:" msgstr "" -"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" -"until``. Наприклад, команда для отримання списку коммітів, зроблених за " -"останні два тижні:" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і " +"``--until``. Наприклад, команда для отримання списку коммітів, зроблених " +"за останні два тижні:" #: ../../src/vcs/basics.txt:599 msgid "" -"This command works with lots of formats - you can specify a specific date " -"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"This command works with lots of formats - you can specify a specific date" +" like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " "minutes ago\"``." msgstr "" -"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " -"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " -"день 3 хвилини тому\"``." +"Ця команда працює з багатьма форматами - ви можете вказати конкретну " +"дату, наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 " +"роки 1 день 3 хвилини тому\"``." #: ../../src/vcs/basics.txt:602 msgid "" -"The last really useful option to pass to ``git log`` as a filter is a path. " -"If you specify a directory or file name, you can limit the log output to " -"commits that introduced a change to those files. This is always the last " -"option and is generally preceded by double dashes (``--``) to separate the " -"paths from the options:" +"The last really useful option to pass to ``git log`` as a filter is a " +"path. If you specify a directory or file name, you can limit the log " +"output to commits that introduced a change to those files. This is always" +" the last option and is generally preceded by double dashes (``--``) to " +"separate the paths from the options:" msgstr "" -"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " -"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " -"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " -"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " -"щоб відокремити шлях від параметрів:" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як " +"фільтр, є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете " +"обмежити виведення журналу лише тими комітами, які внесли зміни до цих " +"файлів. Це завжди останній параметр, і йому зазвичай передують подвійні " +"тире (``--``), щоб відокремити шлях від параметрів:" #: ../../src/vcs/basics.txt:621 msgid "Undoing things" @@ -877,16 +888,16 @@ msgstr "На будь-якому етапі ви можете захотіти #: ../../src/vcs/basics.txt:625 msgid "" -"One of the common undos takes place when you commit too early and possibly " -"forget to add some files, or you mess up your commit message. If you want to " -"redo that commit, make the additional changes you forgot, stage them, and " -"commit again using the ``--amend`` option:" +"One of the common undos takes place when you commit too early and " +"possibly forget to add some files, or you mess up your commit message. If" +" you want to redo that commit, make the additional changes you forgot, " +"stage them, and commit again using the ``--amend`` option:" msgstr "" -"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " -"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " -"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " -"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " -"використовуючи опцію ``--amend``:" +"Одне з найпоширеніших випадків скасування відбувається, коли ви " +"коммітуєте занадто рано і, можливо, забуваєте додати деякі файли, або ви " +"псуєте своє повідомлення про коммітування. Якщо ви хочете повторити " +"фіксацію, внесіть додаткові зміни, про які ви забули, збережіть їх і " +"зафіксуйте ще раз, використовуючи опцію ``--amend``:" #: ../../src/vcs/basics.txt:634 msgid "E.g." @@ -900,13 +911,13 @@ msgstr "Скасування додавання файла до індексу" msgid "" "The next two sections demonstrate how to work with your staging area and " "working directory changes. The nice part is that the command you use to " -"determine the state of those two areas also reminds you how to undo changes " -"to them." +"determine the state of those two areas also reminds you how to undo " +"changes to them." msgstr "" -"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " -"збірці та робочому каталозі. Приємним моментом є те, що команда, за " -"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " -"те, як скасувати внесені до них зміни." +"У наступних двох розділах продемонстровано, як працювати зі змінами у " +"вашій збірці та робочому каталозі. Приємним моментом є те, що команда, за" +" допомогою якої ви визначаєте стан цих двох областей, також нагадує вам " +"про те, як скасувати внесені до них зміни." #: ../../src/vcs/basics.txt:676 msgid "Unmodifiyng a modified file" @@ -914,14 +925,15 @@ msgstr "Скасування модифікації зміненого файл #: ../../src/vcs/basics.txt:678 msgid "" -"What if you realize that you don't want to keep your changes to some file? " -"You can easily unmodify it -- **revert** it back to what it looked like when " -"you last committed. ``git status`` also tells you how to do that:" +"What if you realize that you don't want to keep your changes to some " +"file? You can easily unmodify it -- **revert** it back to what it looked " +"like when you last committed. ``git status`` also tells you how to do " +"that:" msgstr "" -"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " -"Ви можете легко скасувати зміни - **повернути** його до того, як він " -"виглядав під час останнього компонування. ``git status`` також покаже вам, " -"як це зробити:" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь " +"файлі? Ви можете легко скасувати зміни - **повернути** його до того, як " +"він виглядав під час останнього компонування. ``git status`` також покаже" +" вам, як це зробити:" #: ../../src/vcs/basics.txt:686 msgid "It tells you pretty explicitly how to discard the changes you've make." @@ -937,22 +949,23 @@ msgid "" "version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " "reset`` for many undo operations." msgstr "" -"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " -"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " -"операцій скасування." +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0," +" Git використовуватиме ``git restore`` замість ``git reset`` для багатьох" +" операцій скасування." #: ../../src/vcs/basics.txt:737 msgid "" -"It’s important to understand that git restore is a dangerous command. " -"Any local changes you made to that file are gone -- Git just replaced that " -"file with the last staged or committed version. Don't ever use this command " -"unless you absolutely know that you don’t want those unsaved local changes." +"It’s important to understand that git restore is a dangerous " +"command. Any local changes you made to that file are gone -- Git just " +"replaced that file with the last staged or committed version. Don't ever " +"use this command unless you absolutely know that you don’t want those " +"unsaved local changes." msgstr "" -"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " -"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " -"замінить цей файл на останню версію, що перебуває у стадії виконання або " -"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " -"вам не потрібні ці незбережені локальні зміни." +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. " +"Усі локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git " +"просто замінить цей файл на останню версію, що перебуває у стадії " +"виконання або фіксації. Ніколи не використовуйте цю команду, якщо ви " +"точно не знаєте, що вам не потрібні ці незбережені локальні зміни." #: ../../src/vcs/branch.txt:-1 msgid "version, control, system, vcs, git, branch, merge, cherry-pick" @@ -962,33 +975,33 @@ msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" msgid "Branches and Merging" msgstr "Гілки та злиття" -#: ../../src/vcs/branch.txt:11 +#: ../../src/vcs/branch.txt:11 ../../src/vcs/pullrequest.txt:59 msgid "About branches" msgstr "Про гілки" #: ../../src/vcs/branch.txt:13 msgid "" -"To really understand the way Git does branching, we need to take a step back " -"and examine how Git stores its data. Git doesn't store data as a series of " -"changesets or differences, but instead as a series of snapshots. When you " -"make a commit, Git stores a commit object that contains a pointer to the " -"snapshot of the content you staged. This object also contains the author's " -"name and email address, the message that you typed, and pointers to the " -"commit or commits that directly came before this commit (its parent or " -"parents): zero parents for the initial commit, one parent for a normal " -"commit, and multiple parents for a commit that results from a merge of two " -"or more branches." -msgstr "" -"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " -"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " -"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " -"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " -"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " -"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " -"на комміт або комміти, які безпосередньо передували цьому комміту (його " -"батька або батьків): нульовий батько для початкового комміту, один батько " -"для звичайного комміту і кілька батьків для комміту, який є результатом " -"злиття двох або більше гілок." +"To really understand the way Git does branching, we need to take a step " +"back and examine how Git stores its data. Git doesn't store data as a " +"series of changesets or differences, but instead as a series of " +"snapshots. When you make a commit, Git stores a commit object that " +"contains a pointer to the snapshot of the content you staged. This object" +" also contains the author's name and email address, the message that you " +"typed, and pointers to the commit or commits that directly came before " +"this commit (its parent or parents): zero parents for the initial commit," +" one parent for a normal commit, and multiple parents for a commit that " +"results from a merge of two or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам " +"потрібно зробити крок назад і розглянути, як Git зберігає свої дані. Git " +"зберігає дані не у вигляді серії наборів змін або відмінностей, а у " +"вигляді серії знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, " +"який містить вказівник на створений вами знімок вмісту. Цей об'єкт також " +"містить ім'я та адресу електронної пошти автора, повідомлення, яке ви " +"набрали, і вказівники на комміт або комміти, які безпосередньо передували" +" цьому комміту (його батька або батьків): нульовий батько для початкового" +" комміту, один батько для звичайного комміту і кілька батьків для " +"комміту, який є результатом злиття двох або більше гілок." #: ../../src/vcs/branch.txt:28 msgid "" @@ -998,11 +1011,11 @@ msgid "" "made. Every time you commit, the master branch pointer moves forward " "automatically." msgstr "" -"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " -"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " -"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " -"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " -"пересувається вперед." +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих " +"коммітів. Стандартна назва гілки у Git'і - master. Коли ви починаєте " +"робити комміти, ви отримуєте головну гілку, яка вказує на останній " +"зроблений вами комміт. Кожного разу, коли ви робите комміт, вказівник " +"головної гілки автоматично пересувається вперед." #: ../../src/vcs/branch.txt:38 msgid "Branch management" @@ -1010,25 +1023,26 @@ msgstr "Управління гілками" #: ../../src/vcs/branch.txt:40 msgid "" -"The ``git branch`` command does more that create and delete branches. If you " -"run it with no arguments, you get a simple listing of your current branches:" +"The ``git branch`` command does more that create and delete branches. If " +"you run it with no arguments, you get a simple listing of your current " +"branches:" msgstr "" -"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " -"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки." +" Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " "поточних гілок:" #: ../../src/vcs/branch.txt:55 msgid "" -"To see all the branches that contain work you haven't yet merged in, use ``--" -"no-merged`` option:" +"To see all the branches that contain work you haven't yet merged in, use " +"``--no-merged`` option:" msgstr "" -"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " -"використовуйте опцію ``--no-merged``:" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися," +" використовуйте опцію ``--no-merged``:" #: ../../src/vcs/branch.txt:65 msgid "" -"Branches listed in the output has work, that isn't merged to current branch. " -"So, deleting them via ``git branch -d`` will fail." +"Branches listed in the output has work, that isn't merged to current " +"branch. So, deleting them via ``git branch -d`` will fail." msgstr "" "У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " "гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." @@ -1042,20 +1056,20 @@ msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." msgstr "" -"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " -"них - використання команди ``git branch``." +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший" +" з них - використання команди ``git branch``." #: ../../src/vcs/branch.txt:78 msgid "" -"Pointer to a parent commit is optional. By default the parent commit is set " -"to the latest one available (HEAD pointer) at the moment of the branch " -"creation. You can also switch to the newly created branch just after its " -"creation using:" +"Pointer to a parent commit is optional. By default the parent commit is " +"set to the latest one available (HEAD pointer) at the moment of the " +"branch creation. You can also switch to the newly created branch just " +"after its creation using:" msgstr "" "Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " -"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " -"на момент створення гілки. Ви також можете переключитися на новостворену " -"гілку одразу після її створення за допомогою:" +"батьківський коміт встановлюється на найновіший доступний (вказівник " +"HEAD) на момент створення гілки. Ви також можете переключитися на " +"новостворену гілку одразу після її створення за допомогою:" #: ../../src/vcs/branch.txt:88 msgid "Switching branches" @@ -1071,17 +1085,17 @@ msgstr "Основи розгалуження та злиття" #: ../../src/vcs/branch.txt:111 msgid "" -"First, let's say you're working on your project and have a couple of commits " -"already on the ``master`` branch. You've decided that you're going to work " -"on issue #53 in whatever issue-tracking system your company uses. To create " -"a new branch and switch to it at the same time, you can run the ``git " -"checkout`` command with the ``-b`` switch:" +"First, let's say you're working on your project and have a couple of " +"commits already on the ``master`` branch. You've decided that you're " +"going to work on issue #53 in whatever issue-tracking system your company" +" uses. To create a new branch and switch to it at the same time, you can " +"run the ``git checkout`` command with the ``-b`` switch:" msgstr "" -"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " -"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " -"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " -"створити нову гілку і одночасно переключитися на неї, ви можете виконати " -"команду ``git checkout`` з ключем ``-b``:" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте " +"кілька комітів на гілці ``master``. Ви вирішили, що будете працювати над " +"issue #53 в будь-якій системі відстеження проблем, яку використовує ваша " +"компанія. Щоб створити нову гілку і одночасно переключитися на неї, ви " +"можете виконати команду ``git checkout`` з ключем ``-b``:" #: ../../src/vcs/branch.txt:122 msgid "This is shorthand for:" @@ -1090,22 +1104,24 @@ msgstr "Це скорочено означає:" #: ../../src/vcs/branch.txt:129 msgid "" "In deed this creates a new branch pointer, aimed to the latest commit " -"present on ``master`` branch. But, from now your branch is ``feature/" -"issue53``. So, doing commits moves the feature branch pointer forward, " -"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +"present on ``master`` branch. But, from now your branch is " +"``feature/issue53``. So, doing commits moves the feature branch pointer " +"forward, because you have it checkout out (that is, your ``HEAD`` is " +"pointing to it)." msgstr "" -"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " -"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" -"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " -"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." +"Насправді це створить новий покажчик гілки, спрямований на останню " +"фіксацію, наявну у гілці ``master``. Але відтепер ваша гілка називається " +"``feature/issue53``. Отже, виконання коммітів пересуває вказівник гілки " +"feature вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на " +"неї)." #: ../../src/vcs/branch.txt:134 msgid "" "Now, lets assume the \"issue53\" is fixed, and you need to bring commits " "from the ``feature/issue53`` branch back to ``master``." msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " -"з гілки ``feature/issue53`` назад до ``master``." +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести " +"коміти з гілки ``feature/issue53`` назад до ``master``." #: ../../src/vcs/branch.txt:138 msgid "Merging branches" @@ -1113,71 +1129,71 @@ msgstr "Злиття гілок" #: ../../src/vcs/branch.txt:140 msgid "" -"You need to switch back to ``master`` branch and use ``git merge`` command, " -"to merge changes (commits) from the source branch into target." +"You need to switch back to ``master`` branch and use ``git merge`` " +"command, to merge changes (commits) from the source branch into target." msgstr "" -"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " -"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." +"Вам потрібно повернутися до гілки ``master`` і скористатися командою " +"``git merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." #: ../../src/vcs/branch.txt:152 msgid "" "You'll notice phrase \"fast-forward\" in that merge. Because the commit " "pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the pointer " -"forward." +"ahead of the last commit on ``master`` branch, Git simply moves the " +"pointer forward." msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " -"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " -"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " -"вказівник вперед." +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки " +"коміт, на який вказує гілка ``feature/issue53``, до якої ви приєдналися, " +"був безпосередньо перед останнім комітом у гілці ``master``, Git просто " +"пересуне вказівник вперед." #: ../../src/vcs/branch.txt:156 msgid "" "Changes from ``feature/issue53`` are now in the snapshot of the commit " "pointed to by the ``master`` branch." msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " -"гілка ``master``." +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який " +"вказує гілка ``master``." #: ../../src/vcs/branch.txt:163 msgid "" -"Now, lets assume another developer started working on ``feature/issue54`` at " -"the same time. And there are few commits on this feature branch. Suppose, " -"the developer decided that work on **issue54** is finished and they want to " -"merge their feature branch into ``master``." +"Now, lets assume another developer started working on ``feature/issue54``" +" at the same time. And there are few commits on this feature branch. " +"Suppose, the developer decided that work on **issue54** is finished and " +"they want to merge their feature branch into ``master``." msgstr "" -"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " -"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " -"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " -"з ``master``." +"Тепер припустимо, що інший розробник почав працювати над " +"``feature/issue54`` в той самий час. І у цій гілці мало комітів. " +"Припустимо, що розробник вирішив, що робота над **issue54** завершена і " +"він хоче об'єднати свою гілку з ``master``." #: ../../src/vcs/branch.txt:179 msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this case, " -"development history has diverged from some older point. Because the commit " -"on the branch you're on isn't a direct ancestor of the branch you're merging " -"in, Git has to do some work. In this case, Git does a simple three-way " -"merge, using two snapshots pointed to by the branch tips and the common " -"ancestor of the two." +"This looks a bit different than the ``feature/issue53`` merge. In this " +"case, development history has diverged from some older point. Because the" +" commit on the branch you're on isn't a direct ancestor of the branch " +"you're merging in, Git has to do some work. In this case, Git does a " +"simple three-way merge, using two snapshots pointed to by the branch tips" +" and the common ancestor of the two." msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " -"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " -"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " -"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " -"просте тристороннє злиття, використовуючи два знімки, на які вказують " -"кінчики гілок, і їхнього спільного предка." +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку" +" історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви " +"виконуєте злиття, Git'у доведеться виконати деяку роботу. У цьому випадку" +" Git виконує просте тристороннє злиття, використовуючи два знімки, на які" +" вказують кінчики гілок, і їхнього спільного предка." #: ../../src/vcs/branch.txt:186 msgid "" "Instead of just moving the branch pointer forward, Git creates a new " -"snapshot that results from this three-way merge and automatically creates a " -"new commit that points to it. This is referred to as a *merge commit*, and " -"is a special in that it has more than one parent." +"snapshot that results from this three-way merge and automatically creates" +" a new commit that points to it. This is referred to as a *merge commit*," +" and is a special in that it has more than one parent." msgstr "" "Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " -"новий знімок, який є результатом цього тристороннього злиття, і автоматично " -"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " -"і він особливий тим, що має більше одного батька." +"новий знімок, який є результатом цього тристороннього злиття, і " +"автоматично створює новий коміт, який вказує на нього. Це називається " +"*коммітом злиття*, і він особливий тим, що має більше одного батька." #: ../../src/vcs/branch.txt:196 msgid "Merge conflicts" @@ -1185,50 +1201,52 @@ msgstr "Конфлікти об'єднання" #: ../../src/vcs/branch.txt:198 msgid "" -"Occasionally, the merge process doesn't go smoothly. If the same part of the " -"same file is changed differently in the two branches you're merging, Git " -"won't be able to merge them cleanly." +"Occasionally, the merge process doesn't go smoothly. If the same part of " +"the same file is changed differently in the two branches you're merging, " +"Git won't be able to merge them cleanly." msgstr "" -"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " -"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " -"Git не зможе об'єднати їх чисто." +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, " +"які ви об'єднуєте, однакова частина одного і того ж файлу змінена " +"по-різному, Git не зможе об'єднати їх чисто." #: ../../src/vcs/branch.txt:209 msgid "" "Git hasn't automatically created a new merge commit. It has paused the " -"process while you resolve the conflict. If you want to see which files are " -"unmerged at any point after a merge conflict, you can run ``git status``:" +"process while you resolve the conflict. If you want to see which files " +"are unmerged at any point after a merge conflict, you can run ``git " +"status``:" msgstr "" -"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " -"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " -"після конфлікту злиття, ви можете запустити ``git status``:" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, " +"поки ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було " +"від'єднано після конфлікту злиття, ви можете запустити ``git status``:" #: ../../src/vcs/branch.txt:228 msgid "" "Anything that has merge conflicts and hasn't been resolved is listed as " -"unmerged. Git adds standard conflict-resolution markers to the files that " -"have conflicts, so you can open them manually and resolve those conflicts. " -"Your file contains a section that looks something like this:" +"unmerged. Git adds standard conflict-resolution markers to the files that" +" have conflicts, so you can open them manually and resolve those " +"conflicts. Your file contains a section that looks something like this:" msgstr "" "Все, що має конфлікти злиття, які не було вирішено, позначається як не " -"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " -"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " -"Ваш файл містить розділ, який виглядає приблизно так:" +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, " +"які мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці " +"конфлікти. Ваш файл містить розділ, який виглядає приблизно так:" #: ../../src/vcs/branch.txt:243 msgid "" -"This means the version in ``HEAD`` (your ``master`` branch, because that was " -"what you had checked out when you ran merge command) is the top part of that " -"block (everything above the \"=======\"), while the version in ``vcs`` " -"branch looks like everything in the bottom part. In order to resolve the " -"conflict, you have to either choose one side or the other or merge the " -"contents yourself." +"This means the version in ``HEAD`` (your ``master`` branch, because that " +"was what you had checked out when you ran merge command) is the top part " +"of that block (everything above the \"=======\"), while the version in " +"``vcs`` branch looks like everything in the bottom part. In order to " +"resolve the conflict, you have to either choose one side or the other or " +"merge the contents yourself." msgstr "" -"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " -"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " -"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " -"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " -"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що " +"саме її ви перевірили, коли виконували команду merge) - це верхня частина" +" блоку (все, що вище \"=======\"), тоді як версія у гілці ``vcs`` " +"виглядає як все, що знаходиться у нижній частині. Для того, щоб вирішити " +"конфлікт, вам доведеться або стати на чийсь бік, або об'єднати вміст " +"самостійно." #: ../../src/vcs/branch.txt:249 msgid "When conflicts are resolved, you can run ``git status`` command again:" @@ -1238,12 +1256,13 @@ msgstr "" #: ../../src/vcs/branch.txt:262 msgid "" -"If you're happy with that, and you verify that everything that had conflicts " -"has been staged, you can run ``git commit`` for finalize the merge commit." +"If you're happy with that, and you verify that everything that had " +"conflicts has been staged, you can run ``git commit`` for finalize the " +"merge commit." msgstr "" -"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " -"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " -"злиття." +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало " +"конфлікти, було усунуто, ви можете запустити ``git commit`` для " +"остаточного завершення злиття." #: ../../src/vcs/branch.txt:266 msgid "Rebasing" @@ -1254,8 +1273,8 @@ msgid "" "In Git, there two main ways to integrate changes from one branch into " "another: the ``merge`` and the ``rebase``." msgstr "" -"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " -"\"злиття\" і \"перебазування\"." +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу:" +" \"злиття\" і \"перебазування\"." #: ../../src/vcs/branch.txt:271 msgid "" @@ -1267,10 +1286,10 @@ msgstr "" #: ../../src/vcs/branch.txt:278 msgid "" -"The easiest way to integrate the branches, as we've already covered, is the " -"``merge`` command. It performs a three-way merge between the two latest " -"branch snapshots, and the most recent common ancestor of the two, creating a " -"new snapshot (and commit)." +"The easiest way to integrate the branches, as we've already covered, is " +"the ``merge`` command. It performs a three-way merge between the two " +"latest branch snapshots, and the most recent common ancestor of the two, " +"creating a new snapshot (and commit)." msgstr "" "Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " "``merge``. Вона виконує тристороннє злиття між двома останніми знімками " @@ -1278,39 +1297,41 @@ msgstr "" #: ../../src/vcs/branch.txt:283 msgid "" -"However, there is another way: you can take the patch of the change that was " -"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " -"is called *rebasing*. With ``rebase`` command, you can take all the changes " -"that were committed on one branch and replay them on a different branch." +"However, there is another way: you can take the patch of the change that " +"was introduced in ``master`` and reapply it on top of ``feature``. In " +"Git, this is called *rebasing*. With ``rebase`` command, you can take all" +" the changes that were committed on one branch and replay them on a " +"different branch." msgstr "" -"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " -"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " -"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " -"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено" +" до ``master``, і повторно застосувати його поверх ``feature``. У Git'і " +"це називається *rebasing*. За допомогою команди ``rebase`` ви можете " +"взяти всі зміни, які були зафіксовані на одній гілці, і відтворити їх на " +"іншій гілці." #: ../../src/vcs/branch.txt:295 msgid "" -"This operation works by going to the common ancestor of the two branches, " -"getting the diff introduced by each commit of the branch you're on, saving " -"those diffs to temporary files, resetting the current branch to the same " -"commit as the branch you are rebasing onto, and finally applying each change " -"in turn." +"This operation works by going to the common ancestor of the two branches," +" getting the diff introduced by each commit of the branch you're on, " +"saving those diffs to temporary files, resetting the current branch to " +"the same commit as the branch you are rebasing onto, and finally applying" +" each change in turn." msgstr "" "Ця операція виконується шляхом переходу до спільного предка двох гілок, " "отримання відмінностей, внесених кожним коммітом гілки, на якій ви " "перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " -"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " -"нарешті, застосування кожної зміни по черзі." +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і," +" нарешті, застосування кожної зміни по черзі." #: ../../src/vcs/branch.txt:306 msgid "" -"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " -"of their ``master`` branch, rather then merging it in, to keep a mostly " -"linear history." +"Other maintainers prefer to rebase (or cherry-pick) contributed work on " +"top of their ``master`` branch, rather then merging it in, to keep a " +"mostly linear history." msgstr "" "Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " -"об'єднувати їх, щоб зберегти переважно лінійну історію." +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, " +"щоб об'єднувати їх, щоб зберегти переважно лінійну історію." #: ../../src/vcs/branch.txt:311 msgid "Cherry-picking" @@ -1319,21 +1340,21 @@ msgstr "Cherry-picking" #: ../../src/vcs/branch.txt:313 msgid "" "The other way to move introduced work from one branch to another is to " -"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " -"takes the patch that was introduced in a commit and tries to reapply it on " -"the branch you're currently on. This is useful if you have a number of " -"commits on a topic branch and you want to integrate only one of them, or if " -"you only have one commit on a topic branch and you'd prefer to cherry-pick " -"it rather than run rebase." +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. " +"It takes the patch that was introduced in a commit and tries to reapply " +"it on the branch you're currently on. This is useful if you have a number" +" of commits on a topic branch and you want to integrate only one of them," +" or if you only have one commit on a topic branch and you'd prefer to " +"cherry-pick it rather than run rebase." msgstr "" "Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " "\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " "відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " -"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " -"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " -"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " -"rebase." +"комміті, і намагається повторно застосувати його на гілці, на якій ви " +"зараз перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці " +"теми і хочете інтегрувати лише один з них, або якщо ви маєте лише один " +"комміт у гілці теми і вважаєте за краще вибрати його замість того, щоб " +"запускати rebase." #: ../../src/vcs/branch.txt:333 msgid "Branching strategies" @@ -1348,53 +1369,55 @@ msgid "" "branches, minimizes conflicts, and enables a smooth and structured " "development workflow." msgstr "" -"Стратегія розгалуження в системах контролю версій визначає, як створюються, " -"управляються та використовуються гілки в процесі розробки проекту. Вона " -"допомагає командам ефективно співпрацювати, ізолювати зміни та " -"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " -"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " -"структурований робочий процес розробки." +"Стратегія розгалуження в системах контролю версій визначає, як " +"створюються, управляються та використовуються гілки в процесі розробки " +"проекту. Вона допомагає командам ефективно співпрацювати, ізолювати зміни" +" та організовувати зусилля з розробки. Хороша стратегія розгалуження " +"забезпечує чіткість у роботі з гілками, мінімізує конфлікти та уможливлює" +" плавний і структурований робочий процес розробки." #: ../../src/vcs/branch.txt:342 msgid "" -"GitFlow is a popular branching strategy that provides a well-defined model " -"for managing branches in a Git repository. It was introduced by Vincent " -"Driessen and is based on the idea of using two main branches: \"master\" and " -"\"develop.\"" +"GitFlow is a popular branching strategy that provides a well-defined " +"model for managing branches in a Git repository. It was introduced by " +"Vincent Driessen and is based on the idea of using two main branches: " +"\"master\" and \"develop.\"" msgstr "" "GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " "модель для управління гілками в Git-репозиторії. Вона була представлена " -"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " -"основних гілок: \"master\" і \"develop\"." +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання " +"двох основних гілок: \"master\" і \"develop\"." #: ../../src/vcs/branch.txt:346 msgid "" -"**Master Branch**: The \"master\" branch represents the stable version of " -"the codebase. It should always contain production-ready code and be free " -"from any major issues. The \"master\" branch is protected, and only release " -"versions are merged into it." +"**Master Branch**: The \"master\" branch represents the stable version of" +" the codebase. It should always contain production-ready code and be free" +" from any major issues. The \"master\" branch is protected, and only " +"release versions are merged into it." msgstr "" -"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " -"бази. Вона завжди повинна містити готовий до використання код і не містити " -"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " -"релізні версії." +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової" +" бази. Вона завжди повинна містити готовий до використання код і не " +"містити жодних серйозних проблем. Майстер-гілка захищена, і в неї " +"зливаються тільки релізні версії." #: ../../src/vcs/branch.txt:350 msgid "" -"**Develop Branch**: The \"develop\" branch is where the ongoing development " -"and integration of features take place. It serves as the integration branch " -"for various feature branches and should also contain a stable version of the " -"code." +"**Develop Branch**: The \"develop\" branch is where the ongoing " +"development and integration of features take place. It serves as the " +"integration branch for various feature branches and should also contain a" +" stable version of the code." msgstr "" -"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " -"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " -"функціональних гілок, а також повинна містити стабільну версію коду." +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається " +"постійна розробка та інтеграція функцій. Вона слугує інтеграційною гілкою" +" для різних функціональних гілок, а також повинна містити стабільну " +"версію коду." #: ../../src/vcs/branch.txt:354 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " -"\"feature\" branch is created off the \"develop\" branch. These branches are " -"short-lived and exist only for the duration of the feature development." +"\"feature\" branch is created off the \"develop\" branch. These branches " +"are short-lived and exist only for the duration of the feature " +"development." msgstr "" "**Вітки функцій**: Для кожної нової функції або виправлення помилки " "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " @@ -1403,8 +1426,8 @@ msgstr "" #: ../../src/vcs/branch.txt:357 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " -"ready for a release, a \"release\" branch is created. The release branch is " -"used for testing, bug fixing, and preparing for deployment." +"ready for a release, a \"release\" branch is created. The release branch " +"is used for testing, bug fixing, and preparing for deployment." msgstr "" "**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " "створюється гілка \"release\". Релізна гілка використовується для " @@ -1417,23 +1440,25 @@ msgid "" "allows for a quick fix without affecting ongoing development on the " "\"develop\" branch." msgstr "" -"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " -"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " -"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну " +"проблему, на основі основної гілки створюється гілка \"hotfix\". Це " +"дозволяє швидко виправити проблему, не впливаючи на поточну розробку на " +"гілці \"develop\"." #: ../../src/vcs/branch.txt:365 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " -"remain stable, and new features and bug fixes are integrated smoothly before " -"being released. This strategy is particularly useful for projects with " -"regular releases and a team working on multiple features concurrently." +"remain stable, and new features and bug fixes are integrated smoothly " +"before being released. This strategy is particularly useful for projects " +"with regular releases and a team working on multiple features " +"concurrently." msgstr "" "GitFlow забезпечує структурований підхід до управління розгалуженням у " "середовищі спільної розробки. Він гарантує, що основні гілки залишаються " -"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " -"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " -"і командою, яка працює над декількома функціями одночасно." +"стабільними, а нові функції та виправлення помилок плавно інтегруються " +"перед випуском. Ця стратегія особливо корисна для проектів з регулярними " +"випусками і командою, яка працює над декількома функціями одночасно." #: ../../src/vcs/github.txt:-1 msgid "version, control, system, vcs, git, github" @@ -1458,15 +1483,15 @@ msgstr "Налаштування та конфігурація акаунта" #: ../../src/vcs/github.txt:18 msgid "" "The first thing you need to do is set up a free user account. Visit " -"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " -"account creation process. Just follow the hints and provide an email " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through " +"the account creation process. Just follow the hints and provide an email " "address, username and a strong password." msgstr "" "Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " -"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " -"GitHub проведе вас через процес створення облікового запису. Просто " -"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " -"та надійний пароль." +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\"." +" GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я " +"користувача та надійний пароль." #: ../../src/vcs/github.txt:24 msgid "About authentication to GitHub" @@ -1474,13 +1499,13 @@ msgstr "Про автентифікацію на GitHub" #: ../../src/vcs/github.txt:27 msgid "" -"Starting in March 2023 and through the end of 2023, GitHub gradually began " -"to require all users who contribute code on GitHub to enable two-factor " -"authentication (2FA)." +"Starting in March 2023 and through the end of 2023, GitHub gradually " +"began to require all users who contribute code on GitHub to enable two-" +"factor authentication (2FA)." msgstr "" -"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " -"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " -"двофакторну автентифікацію (2FA)." +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово " +"почав вимагати від усіх користувачів, які публікують код на GitHub, " +"увімкнути двофакторну автентифікацію (2FA)." #: ../../src/vcs/github.txt:32 msgid "Connect with SSH" @@ -1492,10 +1517,10 @@ msgid "" "(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " "using a private key file on your local machine." msgstr "" -"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " -"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " -"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " -"комп'ютері." +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх " +"за допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH " +"ви автентифікуєтесь за допомогою файлу приватного ключа на вашому " +"локальному комп'ютері." #: ../../src/vcs/github.txt:39 msgid "Generating a new SSH key" @@ -1503,13 +1528,13 @@ msgstr "Генерація нового SSH-ключа" #: ../../src/vcs/github.txt:41 msgid "" -"You can generate a new SSH key on your local machine. After you do that, you " -"can add the **public** key to your account on GitHub to enable " +"You can generate a new SSH key on your local machine. After you do that, " +"you can add the **public** key to your account on GitHub to enable " "authentication for Git operations over SSH." msgstr "" -"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " -"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " -"увімкнути автентифікацію для операцій з Git'ом через SSH." +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після " +"цього ви можете додати **public** ключ до свого облікового запису на " +"GitHub, щоб увімкнути автентифікацію для операцій з Git'ом через SSH." #: ../../src/vcs/github.txt:45 msgid "Open terminal (git-bash will suite for Windows users)" @@ -1529,17 +1554,19 @@ msgstr "" #: ../../src/vcs/github.txt:60 msgid "" -"When you're prompted to \"Enter a file in which to save the key\", you can " -"press **Enter** to accept the default file location." +"When you're prompted to \"Enter a file in which to save the key\", you " +"can press **Enter** to accept the default file location." msgstr "" "Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " "натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." #: ../../src/vcs/github.txt:67 msgid "" -"Type a secure passphrase, if you want -- this is an extra layer of security." +"Type a secure passphrase, if you want -- this is an extra layer of " +"security." msgstr "" -"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень " +"безпеки." #: ../../src/vcs/github.txt:75 msgid "This will create a new SSH key, using the provided email as label." @@ -1549,8 +1576,8 @@ msgstr "" #: ../../src/vcs/github.txt:77 msgid "" -"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " -"and ensure there are two files generated:" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by " +"default and ensure there are two files generated:" msgstr "" "Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " "каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" @@ -1561,8 +1588,7 @@ msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощ #: ../../src/vcs/github.txt:81 msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" -msgstr "" -"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." +msgstr "**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." #: ../../src/vcs/github.txt:84 msgid "" @@ -1574,11 +1600,11 @@ msgstr "" #: ../../src/vcs/github.txt:87 msgid "" -"The public key is what you add to servers or services to which you want to " -"authenticate using your private key." +"The public key is what you add to servers or services to which you want " +"to authenticate using your private key." msgstr "" -"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " -"хочете пройти автентифікацію за допомогою вашого закритого ключа." +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких " +"ви хочете пройти автентифікацію за допомогою вашого закритого ключа." #: ../../src/vcs/github.txt:91 msgid "Adding your SSH key to the ssh-agent and GitHub" @@ -1586,16 +1612,16 @@ msgstr "Додавання SSH-ключа до ssh-агента та GitHub" #: ../../src/vcs/github.txt:93 msgid "" -"Before adding a new SSH key to the ssh-agent to manage your keys, you should " -"have checked for existing SSH keys and generated SSH keys." +"Before adding a new SSH key to the ssh-agent to manage your keys, you " +"should have checked for existing SSH keys and generated SSH keys." msgstr "" -"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " -"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам" +" слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." #: ../../src/vcs/github.txt:96 msgid "" -"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " -"it manually:" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or " +"start it manually:" msgstr "" "Переконайтеся, що ssh-агент запущено. Ви можете скористатися " "\"Автозапуском\" або запустити його вручну:" @@ -1606,32 +1632,32 @@ msgstr "Додайте ваш приватний ключ SSH до ssh-аген #: ../../src/vcs/github.txt:110 msgid "" -"Add the SSH public key to your account on GitHub. Copy the SSH public key to " -"your clipboard." +"Add the SSH public key to your account on GitHub. Copy the SSH public key" +" to your clipboard." msgstr "" -"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " -"відкритий ключ SSH до буфера обміну." +"Додайте публічний ключ SSH до свого облікового запису на GitHub. " +"Скопіюйте відкритий ключ SSH до буфера обміну." #: ../../src/vcs/github.txt:117 msgid "" -"Alternatively, if ``clip`` isn't working, just type public key content to " -"the terminal using ``cat``," +"Alternatively, if ``clip`` isn't working, just type public key content to" +" the terminal using ``cat``," msgstr "" -"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " -"терміналі за допомогою ``cat``," +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа" +" у терміналі за допомогою ``cat``," #: ../../src/vcs/github.txt:124 msgid "" -"or simply navigate to the file and open it with any text editor. At the end, " -"you need to copy public key content." +"or simply navigate to the file and open it with any text editor. At the " +"end, you need to copy public key content." msgstr "" "або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " "текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." #: ../../src/vcs/github.txt:127 msgid "" -"On GitHub, in the upper-right corner of any page, click your profile photo, " -"then click **Settings**." +"On GitHub, in the upper-right corner of any page, click your profile " +"photo, then click **Settings**." msgstr "" "На GitHub у правому верхньому куті будь-якої сторінки натисніть на " "фотографію свого профілю, а потім натисніть **Налаштування**." @@ -1641,8 +1667,8 @@ msgid "" "In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " "press **New SSH key** button." msgstr "" -"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " -"кнопку **Новий ключ SSH**." +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і " +"натисніть кнопку **Новий ключ SSH**." #: ../../src/vcs/github.txt:131 msgid "In the \"Title\" field, add a descriptive label for the new key." @@ -1674,40 +1700,67 @@ msgstr "version, control, system, vcs, git" msgid "Version Control System" msgstr "Система контролю версій" +#: ../../src/vcs/index.txt:10 +msgid "" +":abbr:`VCS (Version Control Systems)` play an integral role in modern " +"software development. They allow multiple developers to work on a project" +" simultaneously without overwriting each other's changes. VCSs track the " +"history of changes to the source code, making it possible to revert to " +"previous states, compare versions, and more." +msgstr "" + +#: ../../src/vcs/index.txt:16 +msgid "" +"Among the VCSs available, Git stands out as one of the most popular and " +"powerful tools. It's used by small projects and large-scale software " +"alike, owing to its flexibility, distributed nature, and efficient " +"handling of codebase versions." +msgstr "" + +#: ../../src/vcs/index.txt:21 +msgid "" +"In this part, you'll learn about the fundamentals of version control, how" +" to set up your environment for Git, dive into the basics of commits, " +"branches, and merges, understand the significance of tags, and finally, " +"explore how to collaborate using remote repositories and platforms like " +"GitHub." +msgstr "" + #: ../../src/vcs/intro.txt:8 msgid "About version control (Git)" msgstr "Про контроль версій (Git)" #: ../../src/vcs/intro.txt:10 msgid "" -"Version control is a system that records changes to a file or set of files " -"over time so that you can recall specific versions later. It allows you to " -"revert selected files back to a previous state, revert the entire project " -"back to a previous state, compare changes over time, see who last modified " -"something that might be causing a problem, who introduced an issue and when, " -"and more." +"Version control is a system that records changes to a file or set of " +"files over time so that you can recall specific versions later. It allows" +" you to revert selected files back to a previous state, revert the entire" +" project back to a previous state, compare changes over time, see who " +"last modified something that might be causing a problem, who introduced " +"an issue and when, and more." msgstr "" -"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " -"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " -"повернути вибрані файли до попереднього стану, повернути весь проект до " -"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " -"щось, що може спричинити проблему, хто і коли створив проблему, тощо." +"Контроль версій - це система, яка реєструє зміни у файлі або наборі " +"файлів з плином часу, щоб ви могли пізніше згадати конкретні версії. Він " +"дозволяє повернути вибрані файли до попереднього стану, повернути весь " +"проект до попереднього стану, порівняти зміни в часі, побачити, хто " +"востаннє змінював щось, що може спричинити проблему, хто і коли створив " +"проблему, тощо." #: ../../src/vcs/intro.txt:16 msgid "" -"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " -"check out the latest snapshot of the files; rather, they fully mirror the " -"repository, including its full history. Thus, if any server dies, and these " -"systems were collaborating via that server, any of the client repositories " -"can be copied back up to the server to restore it. Every clone is really a " -"full backup of all the data." +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't " +"just check out the latest snapshot of the files; rather, they fully " +"mirror the repository, including its full history. Thus, if any server " +"dies, and these systems were collaborating via that server, any of the " +"client repositories can be copied back up to the server to restore it. " +"Every clone is really a full backup of all the data." msgstr "" "У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " -"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " -"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " -"ладу, а ці системи працювали через нього, будь-який з клієнтських " -"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " -"клон - це фактично повна резервна копія всіх даних." +"перевіряють останній знімок файлів, а повністю дзеркально копіюють " +"сховище, включно з його повною історією. Таким чином, якщо якийсь сервер " +"вийде з ладу, а ці системи працювали через нього, будь-який з клієнтських" +" репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. " +"Кожен клон - це фактично повна резервна копія всіх даних." #: ../../src/vcs/intro.txt:26 msgid "Distributed version control diagram" @@ -1720,30 +1773,30 @@ msgstr "Що таке Git?" #: ../../src/vcs/intro.txt:30 msgid "" "The major difference between Git and any other VCS is the way Git thinks " -"about its data. Conceptually, most other systems store information as a list " -"of file-based changes. Git doesn't think of or store its data this way. " -"Instead, Git thinks of its data more like a series of snapshots of a " -"miniature filesystem." +"about its data. Conceptually, most other systems store information as a " +"list of file-based changes. Git doesn't think of or store its data this " +"way. Instead, Git thinks of its data more like a series of snapshots of a" +" miniature filesystem." msgstr "" "Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " "Git'ом мислить про свої дані. Концептуально, більшість інших систем " -"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " -"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " -"серію знімків мініатюрної файлової системи." +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про " +"свої дані і не зберігає їх таким чином. Натомість, Git думає про свої " +"дані як про серію знімків мініатюрної файлової системи." #: ../../src/vcs/intro.txt:36 msgid "" -"This is an important distinction between Git and nearly all other VCSs. It " -"makes Git reconsider almost every aspect of version control that most other " -"systems copied from the previous generation. This makes Git more like a mini " -"filesystem with some incredibly powerful tools built on top of it, rather " -"than simply a VCS." +"This is an important distinction between Git and nearly all other VCSs. " +"It makes Git reconsider almost every aspect of version control that most " +"other systems copied from the previous generation. This makes Git more " +"like a mini filesystem with some incredibly powerful tools built on top " +"of it, rather than simply a VCS." msgstr "" "Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " -"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " -"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " -"міні-файлову систему з деякими неймовірно потужними інструментами, " -"побудованими поверх неї, ніж на звичайну VCS." +"Git'а переосмислити майже кожен аспект контролю версій, який більшість " +"інших систем скопіювали з попереднього покоління. Це робить Git більше " +"схожим на міні-файлову систему з деякими неймовірно потужними " +"інструментами, побудованими поверх неї, ніж на звичайну VCS." #: ../../src/vcs/intro.txt:45 msgid "Storing data as snapshots of the project over time" @@ -1756,9 +1809,9 @@ msgstr "Локальні операції" #: ../../src/vcs/intro.txt:49 msgid "" "Most operations in Git need only local files and resources to operate -- " -"generally no information is needed from another computer on your network. " -"Because you have the entire history of the project right there on your local " -"disk, most operations seem almost instantaneous." +"generally no information is needed from another computer on your network." +" Because you have the entire history of the project right there on your " +"local disk, most operations seem almost instantaneous." msgstr "" "Для виконання більшості операцій у Git'і потрібні лише локальні файли та " "ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " @@ -1771,13 +1824,13 @@ msgstr "Цілісність" #: ../../src/vcs/intro.txt:56 msgid "" -"Everything in Git is checksummed before it is stored and is then referred to " -"by that checksum. This means it's impossible to change the contents of any " -"file or directory without Git knowing about it." +"Everything in Git is checksummed before it is stored and is then referred" +" to by that checksum. This means it's impossible to change the contents " +"of any file or directory without Git knowing about it." msgstr "" -"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " -"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " -"каталогу без відома Git'а." +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на " +"цю контрольну суму. Це означає, що неможливо змінити вміст будь-якого " +"файлу або каталогу без відома Git'а." #: ../../src/vcs/intro.txt:61 msgid "Repository files states" @@ -1793,24 +1846,25 @@ msgstr "" #: ../../src/vcs/intro.txt:65 msgid "" -"Modified means that you have changed the file but have not committed it to " -"your database yet." +"Modified means that you have changed the file but have not committed it " +"to your database yet." msgstr "" -"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " -"даних." +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій " +"базі даних." #: ../../src/vcs/intro.txt:67 msgid "" -"Staged means that you have marked a modified file in its current version to " -"go into your next commit snapshot." +"Staged means that you have marked a modified file in its current version " +"to go into your next commit snapshot." msgstr "" -"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " -"він потрапив до наступного знімка фіксації." +"Поетапний означає, що ви позначили змінений файл у його поточній версії, " +"щоб він потрапив до наступного знімка фіксації." #: ../../src/vcs/intro.txt:69 msgid "Committed means that the data is safely stored in your local database." msgstr "" -"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі " +"даних." #: ../../src/vcs/intro.txt:76 msgid "The basic Git workflow goes something like this:" @@ -1822,19 +1876,20 @@ msgstr "Ви змінюєте файли у вашому робочому дер #: ../../src/vcs/intro.txt:79 msgid "" -"You selectively stage just those changes you want to be part of your next " -"commit, which adds only those changes to the staging area." +"You selectively stage just those changes you want to be part of your next" +" commit, which adds only those changes to the staging area." msgstr "" -"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " -"коміт, що додає тільки ці зміни в область стабілізації." +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в " +"наступний коміт, що додає тільки ці зміни в область стабілізації." #: ../../src/vcs/intro.txt:81 msgid "" -"You do a commit, which takes the files as they are in the staging area and " -"stores that snapshot permanently to your Git directory." +"You do a commit, which takes the files as they are in the staging area " +"and stores that snapshot permanently to your Git directory." msgstr "" -"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " -"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони " +"знаходяться в області підготовки, і зберігає цей знімок назавжди у вашому" +" каталозі Git'а." #: ../../src/vcs/intro.txt:85 msgid "Command line" @@ -1842,26 +1897,186 @@ msgstr "Командний рядок" #: ../../src/vcs/intro.txt:87 msgid "" -"There are a lot of different ways to use Git. There are the original command-" -"line tools, and there are many graphical user interfaces of varying " -"capabilities. For one, the command line is the only place you can run all " -"Git commands -- most of the GUIs implement only a partial subset of Git " -"functionality for simplicity. If you know how to run the command-line " -"version, you can probably also figure out how to run the GUI version, while " -"the opposite is not necessarily true. Also, while your choice of graphical " -"client is a matter of personal taste, all users will have the command-line " -"tools installed and available." +"There are a lot of different ways to use Git. There are the original " +"command-line tools, and there are many graphical user interfaces of " +"varying capabilities. For one, the command line is the only place you can" +" run all Git commands -- most of the GUIs implement only a partial subset" +" of Git functionality for simplicity. If you know how to run the command-" +"line version, you can probably also figure out how to run the GUI " +"version, while the opposite is not necessarily true. Also, while your " +"choice of graphical client is a matter of personal taste, all users will " +"have the command-line tools installed and available." msgstr "" "Існує багато різних способів використання Git'у. Існують оригінальні " "інструменти командного рядка, а також багато графічних інтерфейсів " -"користувача з різними можливостями. З одного боку, командний рядок є єдиним " -"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " -"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " -"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " -"ймовірно, також зможете з'ясувати, як запустити версію з графічним " -"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " -"графічного клієнта є справою особистого смаку, всі користувачі матимуть " -"встановлені та доступні інструменти командного рядка." +"користувача з різними можливостями. З одного боку, командний рядок є " +"єдиним місцем, де ви можете виконувати всі команди Git'а - більшість " +"графічних інтерфейсів реалізують лише часткову підмножину " +"функціональності Git'а для спрощення. Якщо ви знаєте, як запустити версію" +" з командного рядка, ви, ймовірно, також зможете з'ясувати, як запустити " +"версію з графічним інтерфейсом, хоча зворотне не обов'язково вірно. Крім " +"того, хоча ваш вибір графічного клієнта є справою особистого смаку, всі " +"користувачі матимуть встановлені та доступні інструменти командного " +"рядка." + +#: ../../src/vcs/pullrequest.txt:-1 +#, fuzzy +msgid "Version Control System - Pull Requests" +msgstr "Система контролю версій" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:-1 +#, fuzzy +msgid "version, control, system, vcs, git, pull request, merge" +msgstr "version, control, system, vcs, git, setup" + +#: ../../src/vcs/pullrequest.txt:9 +msgid "Pull Request" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:11 +msgid "" +"Pull request let you tell others about changes you've pushed to a branch " +"in a repository on GitHub. Once a pull request is opened, you can discuss" +" and review the potential changes with collaborators and add follow-up " +"commits before your changes are merged into the base branch:cite:`github" +":about-pr`." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:17 +msgid "Draft pull requests" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:19 +msgid "" +"Draft pull requests are available in public repositories on GitHub. When " +"you create a pull request, you can choose to a create a pull request that" +" is ready for review or a draft pull request. Draft pull requests cannot " +"be merged. When you're ready to get feedback on your pull request, you " +"can mark your draft pull request as ready for review." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:26 +msgid "Difference between commits on compare and pull request pages" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:28 +msgid "" +"The compare and pull request pages use different methods to calculate the" +" diff for changed files:" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:31 +msgid "" +"Compare pages show the diff between the tip of the head ref and the " +"current common ancestor (that is, the merge base) of the head and base " +"ref." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:33 +msgid "" +"Pull request pages show the diff between the tip of the head ref and the " +"common ancestor of the head and base ref at the time when the pull " +"request was created. Consequently, the merge base used for the comparison" +" might be different." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:39 +#, fuzzy +msgid "About comparing branches" +msgstr "Про гілки" + +#: ../../src/vcs/pullrequest.txt:41 +msgid "" +"Pull requests display diffs to compare the changes you made in your topic" +" branch against the base branch that you want to merge your changes into." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:44 +msgid "" +"Rather that viewing the commits themselves, you can view the proposed " +"changes as they'll appear in the files once the pull request is merged. " +"The files appear in alphabetical order within the Files changed tab. " +"Additions to the files appear in green and are prefaced by a ``+`` sign " +"while content that has been removed appears in red and is prefaced by a " +"``-`` sign :cite:`github:compare-pr`." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 +#, fuzzy +msgid "Creating a pull request" +msgstr "Отримання та витягування з віддаленого репозиторію" + +#: ../../src/vcs/pullrequest.txt:54 +msgid "" +"Create a pull request to propose and collaborate on changes to a " +"repository. These changes are proposed in a *branch*, which ensures that " +"the default branch only contains finished and approved work:cite:`github" +":create-pr`." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:61 +msgid "" +"Use a branch to isolate development work without affecting other branches" +" in the repository. Each repository has one default branch, and can have " +"multiple other branches. You can merge a branch into another branch using" +" a pull request." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:66 +msgid "" +"Branches allow you to develop features, fix bugs, or safely experiment " +"with new ideas in a contained area of your repository." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:69 +msgid "" +"You always create a branch from an existing branch. Typically, you might " +"create a new branch from the default branch of your repository." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:75 +msgid "On GitHub, navigate to the main page of the repository." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:76 +msgid "Switch to \"Pull requests\" tab." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:77 +msgid "Press \"New pull request\" button." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:78 +msgid "Select base and source branches." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:79 +msgid "Press \"Create pull request\" button." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:80 +msgid "Provide a meaningful title and description." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:81 +msgid "Draft or create a pull request." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:83 +msgid "" +"To create pull request that is ready for review, click **Create Pull " +"Request**." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:85 +msgid "" +"To create a draft pull request, use the drop-down and select **Create " +"Draft Pull Request**, then click **Draft Pull Request**." +msgstr "" #: ../../src/vcs/remotes.txt:3 msgid "Remotes" @@ -1869,22 +2084,22 @@ msgstr "Віддалені репозиторії" #: ../../src/vcs/remotes.txt:5 msgid "" -"To be able to collaborate on any Git project, you need to know how to manage " -"your remote repositories. Remote repositories are versions of your project " -"that are hosted on the Internet or network somewhere. You can have several " -"of them, each of which generally is either read-only or read/write for you. " -"Managing remotes includes knowing how to add remote repositories, remove " -"remote repositories that are no longer valid, manage various branches and " -"define them as being tracked or not, and more." -msgstr "" -"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " -"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " -"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " -"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " -"або читання/запису. Керування віддаленими сховищами включає в себе вміння " -"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " -"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " -"чи ні, і багато іншого." +"To be able to collaborate on any Git project, you need to know how to " +"manage your remote repositories. Remote repositories are versions of your" +" project that are hosted on the Internet or network somewhere. You can " +"have several of them, each of which generally is either read-only or " +"read/write for you. Managing remotes includes knowing how to add remote " +"repositories, remove remote repositories that are no longer valid, manage" +" various branches and define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам " +"потрібно знати, як керувати вашими віддаленими сховищами. Віддалені " +"сховища - це версії вашого проекту, розміщені десь в інтернеті або " +"мережі. Ви можете мати декілька таких сховищ, кожне з яких, як правило, " +"доступне лише для читання або читання/запису. Керування віддаленими " +"сховищами включає в себе вміння додавати віддалені сховища, видаляти " +"віддалені сховища, які більше не є дійсними, керувати різними гілками і " +"визначати їх як такі, що відстежуються чи ні, і багато іншого." #: ../../src/vcs/remotes.txt:21 msgid "Showing your remote" @@ -1900,17 +2115,18 @@ msgstr "" "Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " "команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " "віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " -"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " -"з якого ви клонуєте:" +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає " +"серверу, з якого ви клонуєте:" #: ../../src/vcs/remotes.txt:41 msgid "" -"This means we can pull contributions from any of these users pretty easily. " -"We may additionally have permission to push to one or more of these." +"This means we can pull contributions from any of these users pretty " +"easily. We may additionally have permission to push to one or more of " +"these." msgstr "" -"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " -"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " -"або декількох з них." +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з " +"цих користувачів. Крім того, ми можемо мати дозвіл на проштовхування до " +"одного або декількох з них." #: ../../src/vcs/remotes.txt:45 msgid "Adding remote repositories" @@ -1918,23 +2134,25 @@ msgstr "Додавання віддалених репозиторіїв" #: ../../src/vcs/remotes.txt:47 msgid "" -"To add a new remote Git repository as a shortname you can reference easily, " -"run ``git remote add ``:" +"To add a new remote Git repository as a shortname you can reference " +"easily, run ``git remote add ``:" msgstr "" -"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " -"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, " +"на яке можна легко посилатися, виконайте ``git remote add <назва> " +"<адреса>``:" #: ../../src/vcs/remotes.txt:61 msgid "" -"Now you can use the string \"personal\" on the command line in lieu of the " -"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" -"course\" is now accessible as ``personal/master``, while shortname to the " -"same branch in origin will be -- ``origin/master``." +"Now you can use the string \"personal\" on the command line in lieu of " +"the whole URL. ``master`` branch of \"https://github.com/shorodilov" +"/python-course\" is now accessible as ``personal/master``, while " +"shortname to the same branch in origin will be -- ``origin/master``." msgstr "" "Тепер ви можете використовувати рядок \"personal\" в командному рядку " -"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" -"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " -"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." +"замість повної URL-адреси. Гілка ``master`` в " +"\"https://github.com/shorodilov/python-course\" тепер доступна як " +"``personal/master``, тоді як скорочена назва тієї ж гілки в origin буде " +"-- ``origin/master``." #: ../../src/vcs/remotes.txt:67 msgid "Fetching and pulling from remotes" @@ -1943,41 +2161,41 @@ msgstr "Отримання та витягування з віддаленого #: ../../src/vcs/remotes.txt:69 msgid "" "To get data from remote project, you can run ``git fetch`` command. The " -"command goes out to that remote project and pulls down all the information " -"from that remote project that you don't have yet. After you do this, you " -"should have references to all the branches from that remote, which you can " -"merge in or inspect at any time." +"command goes out to that remote project and pulls down all the " +"information from that remote project that you don't have yet. After you " +"do this, you should have references to all the branches from that remote," +" which you can merge in or inspect at any time." msgstr "" -"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " -"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " -"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " -"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " -"переглянути у будь-який час." +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git" +" fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете " +"посилання на всі гілки з цього віддаленого проекту, які ви можете " +"об'єднати або переглянути у будь-який час." #: ../../src/vcs/remotes.txt:79 msgid "" -"If your current branch is set up to track a remote branch, you can use ``git " -"pull`` command to automatically fetch and then merge that remote branch into " -"your current branch. By default, the ``git clone`` command automatically " -"sets up your local ``master`` branch to track the remote ``master`` branch " -"(or whatever default remote branch)." +"If your current branch is set up to track a remote branch, you can use " +"``git pull`` command to automatically fetch and then merge that remote " +"branch into your current branch. By default, the ``git clone`` command " +"automatically sets up your local ``master`` branch to track the remote " +"``master`` branch (or whatever default remote branch)." msgstr "" "Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " "можете скористатися командою ``git pull`` для автоматичного отримання і " "подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " -"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " -"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " -"іншої віддаленої гілки за замовчуванням)." +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну" +" гілку ``master`` на відстеження віддаленої гілки ``master`` (або " +"будь-якої іншої віддаленої гілки за замовчуванням)." #: ../../src/vcs/remotes.txt:85 msgid "" -"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." -"rebase`` variable is not set. Git will keep warning you until you set the " -"variable." +"From Git version 2.27 onward, ``git pull`` will give a warning if the " +"``pull.rebase`` variable is not set. Git will keep warning you until you " +"set the variable." msgstr "" -"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " -"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " -"доки ви не встановите змінну." +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо " +"змінну ``pull.rebase`` не встановлено. Git продовжуватиме видавати " +"попередження, доки ви не встановите змінну." #: ../../src/vcs/remotes.txt:90 msgid "" @@ -1985,16 +2203,16 @@ msgid "" "create a merge commit): ``git config --global pull.rebase \"false\"``." msgstr "" "Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " -"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " -"pull.rebase \"false\"``." +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config " +"--global pull.rebase \"false\"``." #: ../../src/vcs/remotes.txt:93 msgid "" "If you want to rebase when pulling: ``git config --global pull.rebase " "\"true\"``." msgstr "" -"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." -"rebase \"true\"``." +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global " +"pull.rebase \"true\"``." #: ../../src/vcs/remotes.txt:97 msgid "Pushing to remotes" @@ -2002,27 +2220,29 @@ msgstr "Відправка до віддаленого репозиторію" #: ../../src/vcs/remotes.txt:99 msgid "" -"When you have your project at a point that you want to share, you have to " -"push it upstream. The command for this is simple: ``git push " +"When you have your project at a point that you want to share, you have to" +" push it upstream. The command for this is simple: ``git push " "``." msgstr "" "Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " -"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " -"push <віддалений> <гілка>``." +"потрібно перемістити його вгору за течією. Команда для цього проста: " +"``git push <віддалений> <гілка>``." #: ../../src/vcs/remotes.txt:106 msgid "" -"This command works only if you cloned from a server to which you have write " -"access and if nobody has pushed in the meantime. If you and someone else " -"clone at the same time and they push upstream and then you push upstream, " -"you push will rightly be rejected. You'll have to fetch their work first and " -"incorporate it into yours before you'll be allowed to push." +"This command works only if you cloned from a server to which you have " +"write access and if nobody has pushed in the meantime. If you and someone" +" else clone at the same time and they push upstream and then you push " +"upstream, you push will rightly be rejected. You'll have to fetch their " +"work first and incorporate it into yours before you'll be allowed to " +"push." msgstr "" "Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " -"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " -"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " -"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " -"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви " +"клонуєте одночасно з кимось іншим, і він зробить поштовх вище за течією, " +"а потім ви, ваш поштовх буде справедливо відхилено. Вам доведеться " +"спочатку отримати їхню роботу і включити її до своєї, перш ніж вам " +"дозволять проштовхувати." #: ../../src/vcs/remotes.txt:113 msgid "Pushing a new branch to remote" @@ -2030,18 +2250,19 @@ msgstr "Переміщення нової гілки до віддаленого #: ../../src/vcs/remotes.txt:115 msgid "" -"In case you have created a local branch for some specific needs and you want " -"to share this branch, you need to set up track for this branch. This can be " -"done by using: ``git push --set-upstream origin ``. This will " -"create a new remote branch and set up track to your current local branch. " -"There is a shortcut for this command: ``git push -u origin ``." +"In case you have created a local branch for some specific needs and you " +"want to share this branch, you need to set up track for this branch. This" +" can be done by using: ``git push --set-upstream origin " +"``. This will create a new remote branch and set up track " +"to your current local branch. There is a shortcut for this command: ``git" +" push -u origin ``." msgstr "" "Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " -"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " -"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " -"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " -"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " -"<віддалена_гілка>``." +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це " +"можна зробити за допомогою ``git push --set-upstream origin " +"<віддалена_гілка>``. Це створить нову віддалену гілку і налаштує трек до " +"вашої поточної локальної гілки. Для цієї команди існує комбінація клавіш:" +" ``git push -u origin <віддалена_гілка>``." #: ../../src/vcs/remotes.txt:122 msgid "Inspecting a remote" @@ -2049,8 +2270,8 @@ msgstr "Перевірка віддаленого репозиторію" #: ../../src/vcs/remotes.txt:124 msgid "" -"If you want to see more information about a particular remote, you can use " -"the ``git remote show ``." msgstr "" -"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " -"tag -d ``." +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися " +"``git tag -d ``." #: ../../src/vcs/tagging.txt:117 msgid "Checking out tags" @@ -2287,27 +2511,28 @@ msgstr "Перевірка тегів" #: ../../src/vcs/tagging.txt:119 msgid "" -"If you want to view the versions of files a tag is pointing to, you can do a " -"``git checkout`` of that tag, although this puts your repository in " +"If you want to view the versions of files a tag is pointing to, you can " +"do a ``git checkout`` of that tag, although this puts your repository in " "\"detached HEAD\" state, which has some ill side effects:" msgstr "" "Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " -"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " -"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у " +"стан \"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" #: ../../src/vcs/tagging.txt:145 msgid "" -"In \"detached HEAD\" state, if you make changes and then create a commit, " -"the tag will stay the same, but your new commit won’t belong to any branch " -"and will be unreachable, except by the exact commit hash. Thus, if you need " -"to make changes -- say you’re fixing a bug on an older version, for instance " -"-- you will generally want to create a branch:" +"In \"detached HEAD\" state, if you make changes and then create a commit," +" the tag will stay the same, but your new commit won’t belong to any " +"branch and will be unreachable, except by the exact commit hash. Thus, if" +" you need to make changes -- say you’re fixing a bug on an older version," +" for instance -- you will generally want to create a branch:" msgstr "" -"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " -"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " -"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " -"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " -"як правило, краще створити гілку:" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт," +" тег залишиться незмінним, але ваш новий коміт не належатиме до жодної " +"гілки і буде недоступним, окрім як за точним хешем коміту. Таким чином, " +"якщо вам потрібно внести зміни - скажімо, ви виправляєте ваду у старій " +"версії - вам, як правило, краще створити гілку:" #~ msgid "version, control, system, vcs, git, history, commit" #~ msgstr "version, control, system, vcs, git, history, commit" + From 27993d4c190f59fd91fd9481d413da2211991a48 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Sep 2023 16:28:44 +0300 Subject: [PATCH 194/689] Resolve #117 --- src/_locales/uk/LC_MESSAGES/appx.po | 1727 ++++++++++++------------ src/_locales/uk/LC_MESSAGES/vcs.po | 1873 ++++++++++++++------------- src/appx/assignments.txt | 4 +- 3 files changed, 1757 insertions(+), 1847 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index a257456cd..ff3df8153 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,21 +8,22 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-01 11:37+0300\n" -"PO-Revision-Date: 2023-08-09 02:25+0300\n" +"POT-Creation-Date: 2023-09-04 14:27+0100\n" +"PO-Revision-Date: 2023-09-04 16:28+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: ua \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../src/appx/assignments.txt:-1 msgid "How-to handle in assignments via GitHub pull request(s)" -msgstr "" +msgstr "Як працювати з призначеннями через GitHub pull request(и)" #: ../../src/appx/assignments.txt:-1 msgid "Vladyslav Ponomaryov" @@ -36,340 +37,335 @@ msgid "Serhii Horodilov sgorodil@gmail.com" msgstr "Serhii Horodilov sgorodil@gmail.com" #: ../../src/appx/assignments.txt:-1 -#, fuzzy msgid "git, github, pull request, review, merge, howto" -msgstr "git, github, pull request, branch, merge" +msgstr "git, github, pull request, review, merge, howto" #: ../../src/appx/assignments.txt:9 msgid "Handing in Homework Assignments" -msgstr "" +msgstr "Здача домашніх завдань" #: ../../src/appx/assignments.txt:13 -#, fuzzy msgid "Repository content description" -msgstr "Вміст репозиторію" +msgstr "Опис вмісту репозиторію" #: ../../src/appx/assignments.txt:16 msgid "What to include" -msgstr "" +msgstr "Що потрібно включити" #: ../../src/appx/assignments.txt:18 -#, fuzzy msgid "Code base" -msgstr "кодова база" +msgstr "Кодова база" #: ../../src/appx/assignments.txt:19 -#, fuzzy msgid "Project dependencies (if applicable)" -msgstr "залежності проекту (якщо є)" +msgstr "Залежності проекту (якщо застосовно)" #: ../../src/appx/assignments.txt:20 msgid "" -"*(Optional)* Additional project information: README, CONTRIBUTING, " -"LICENSE etc." +"*(Optional)* Additional project information: README, CONTRIBUTING, LICENSE " +"etc." msgstr "" +"*(Додаткова)* інформація про проєкт: README, CONTRIBUTING, LICENSE тощо." #: ../../src/appx/assignments.txt:24 msgid "" "Always start new repository from creating ``README`` and ``.gitignore`` " "files." msgstr "" +"Завжди починайте новий репозиторій зі створення файлів ``README`` та ``." +"gitignore``." #: ../../src/appx/assignments.txt:28 msgid "What to exclude" -msgstr "" +msgstr "Що потрібно виключити" #: ../../src/appx/assignments.txt:30 msgid "Virtual environment, typically ``venv`` or ``env`` folder" -msgstr "" +msgstr "Віртуальне середовище, зазвичай папка ``venv`` або ``env``" #: ../../src/appx/assignments.txt:31 -#, fuzzy msgid "Byte compiled Python code (``__pycache__``)" -msgstr "скомпільований код python (``__pycache__``)" +msgstr "Байтовий скомпільований код Python (``__pycache__``)" #: ../../src/appx/assignments.txt:32 -#, fuzzy -msgid "IDEA configurations, typically ``.vscode`` or ``.idea`` folder" -msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" +msgid "IDE configurations, typically ``.vscode`` or ``.idea`` folder" +msgstr "Конфігурації IDE, зазвичай папка ``.vscode`` або ``.idea``" #: ../../src/appx/assignments.txt:33 msgid "Database files, like ``db.sqlite3``" -msgstr "" +msgstr "Файли баз даних, такі як ``db.sqlite3``" #: ../../src/appx/assignments.txt:34 msgid "Other stuff not related to the assignment directly" -msgstr "" +msgstr "Інші речі, не пов'язані з завданням безпосередньо" #: ../../src/appx/assignments.txt:37 msgid "" "Set up **.gitignore** to exclude all name patterns from appending to the " "stage area. Common content of this file may look like:" msgstr "" +"Налаштуйте **.gitignore**, щоб виключити всі шаблони назв з додавання до " +"області сцени. Типовий вміст цього файлу може виглядати так:" #: ../../src/appx/assignments.txt:48 msgid "Repository initialization" msgstr "Ініціалізація репозиторію" #: ../../src/appx/assignments.txt:50 -#, fuzzy msgid "Create and activate virtual environment." -msgstr "Створіть віртуальне середовище." +msgstr "Створіть та активуйте віртуальне середовище." #: ../../src/appx/assignments.txt:51 -#, fuzzy msgid "Create common repository files:" -msgstr "Створіть нове репозиторій." +msgstr "Створіть загальні файли репозиторію:" #: ../../src/appx/assignments.txt:53 msgid "README" -msgstr "" +msgstr "README" #: ../../src/appx/assignments.txt:54 msgid ".gitignore" -msgstr "" +msgstr ".gitignore" #: ../../src/appx/assignments.txt:55 msgid "requirements.txt *(if applicable)*" -msgstr "" +msgstr "requirements.txt *(якщо застосовно)*" #: ../../src/appx/assignments.txt:57 msgid "" -"*(Optional)* create a code base draft. This can be an empty module like " +"*(Optional)* Create a code base draft. This can be an empty module like " "**main.py** or an empty :ref:`Django project `." msgstr "" +"*(Додатково)* Створіть чорновий варіант кодової бази. Це може бути порожній " +"модуль типу **main.py** або порожній :ref:`проект Django `." #: ../../src/appx/assignments.txt:59 msgid "Initialize a new repository using ``git init`` command." -msgstr "" +msgstr "Ініціалізуйте новий репозиторій за допомогою команди ``git init``." #: ../../src/appx/assignments.txt:60 msgid "Set up **.gitignore** name patterns." -msgstr "" +msgstr "Налаштуйте шаблони імен **.gitignore**." #: ../../src/appx/assignments.txt:61 -#, fuzzy msgid "Stage your changes." -msgstr "Зробіть фіксацію змін (stage + commit)." +msgstr "Додайте зміни до stage-простору." #: ../../src/appx/assignments.txt:62 -#, fuzzy msgid "Commit your changes." -msgstr "Зробіть фіксацію змін (stage + commit)." +msgstr "Зафіксуйте зміни." #: ../../src/appx/assignments.txt:63 msgid "Set up remote repository." msgstr "Налаштуйте віддалений репозиторій." #: ../../src/appx/assignments.txt:64 -#, fuzzy msgid "Push changes from local branch to remote." -msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." +msgstr "Перенесіть зміни з локальної гілки на віддалену." #: ../../src/appx/assignments.txt:69 msgid "Initializing new Django project" -msgstr "" +msgstr "Ініціалізація нового проекту Django" #: ../../src/appx/assignments.txt:71 msgid "" -"Base Django project may be added to the repository with the first commit." -" Initialize Django project in current repository root to avoid " -"directories nesting." +"Base Django project may be added to the repository with the first commit. " +"Initialize Django project in current repository root to avoid directories " +"nesting." msgstr "" +"Базовий проект Django може бути доданий до сховища з першим коммітом. " +"Ініціалізуйте проект Django у корені поточного сховища, щоб уникнути " +"вкладеності каталогів." #: ../../src/appx/assignments.txt:80 msgid "Do not forget to create **requirements.txt**." -msgstr "" +msgstr "Не забудьте створити **requirements.txt**." #: ../../src/appx/assignments.txt:82 msgid "After that, you may proceed with \"staging\" and \"commit\" steps." -msgstr "" +msgstr "Після цього ви можете перейти до етапів \"stage\" та \"commit\"." #: ../../src/appx/assignments.txt:86 -#, fuzzy msgid "Sharing project dependencies" -msgstr "Встановіть залежності проекту." +msgstr "Спільний доступ до залежностей проекту" #: ../../src/appx/assignments.txt:88 msgid "" -"The **requirements.txt** file is a plain text file that lists all the " -"Python packages required for a specific project. This file is used to " -"specify dependencies in a version-controlled and easily shareable manner." -" It allows for a consistent environment across different team members' " -"local setups." +"The **requirements.txt** file is a plain text file that lists all the Python " +"packages required for a specific project. This file is used to specify " +"dependencies in a version-controlled and easily shareable manner. It allows " +"for a consistent environment across different team members' local setups." msgstr "" +"Файл **requirements.txt** -- це звичайний текстовий файл, який містить " +"список усіх пакунків Python, необхідних для конкретного проекту. Цей файл " +"використовується для вказівки залежностей у спосіб, що дозволяє контролювати " +"версії та легко ділитися ними. Це дозволяє забезпечити узгодженість " +"середовища в локальних налаштуваннях різних членів команди." #: ../../src/appx/assignments.txt:94 msgid "Where to place \"requirements.txt\" file" -msgstr "" +msgstr "Де розмістити файл \"requirements.txt\"" #: ../../src/appx/assignments.txt:96 msgid "" -"The **requirements.txt** file is generally placed in the root directory " -"of the project." +"The **requirements.txt** file is generally placed in the root directory of " +"the project." msgstr "" +"Файл **requirements.txt** зазвичай розміщується у кореневому каталозі " +"проекту." #: ../../src/appx/assignments.txt:100 msgid "Creating \"requirements.txt\" file" -msgstr "" +msgstr "Створення файлу \"requirements.txt\"" #: ../../src/appx/assignments.txt:102 msgid "" -"To generate file use ``pip freeze`` command and place its output to a " -"file:" +"To generate file use ``pip freeze`` command and place its output to a file:" msgstr "" +"Щоб згенерувати файл, скористайтеся командою ``pip freeze`` і помістіть його " +"вивід у файл:" #: ../../src/appx/assignments.txt:108 msgid "This will create **requirements.txt** file. Its content may look like:" msgstr "" +"В результаті буде створено файл **requirements.txt**. Його вміст може мати " +"вигляд:" #: ../../src/appx/assignments.txt:119 msgid "Installing dependencies from \"requirements.txt\" file" -msgstr "" +msgstr "Встановлення залежностей з файлу \"requirements.txt\"" #: ../../src/appx/assignments.txt:121 msgid "" -"Another team member may easily install all the requirements for the " -"project by using ``pip install`` command:" +"Another team member may easily install all the requirements for the project " +"by using ``pip install`` command:" msgstr "" +"Інший член команди може легко встановити всі вимоги до проекту за допомогою " +"команди ``pip install``:" #: ../../src/appx/assignments.txt:130 msgid "Dealing with home tasks (challenges)" -msgstr "" +msgstr "Вирішення домашніх завдань (викликів)" #: ../../src/appx/assignments.txt:132 msgid "Create a new topic branch" -msgstr "" +msgstr "Створити нову гілку завдання" #: ../../src/appx/assignments.txt:133 -#, fuzzy msgid "Switch to a topic branch" -msgstr "Перейдіть до новоствореної гілки." +msgstr "Перейдіть до гілки завдання" #: ../../src/appx/assignments.txt:134 -#, fuzzy msgid "Do the work and commit changes" -msgstr "Зробіть фіксацію змін (stage + commit)." +msgstr "Виконайте роботу та зафіксуйте зміни" #: ../../src/appx/assignments.txt:137 -#, fuzzy msgid "You can create a new branch and immediately switch to it:" -msgstr "" -"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " -"команди." +msgstr "Ви можете створити нову гілку і одразу перейти до неї:" #: ../../src/appx/assignments.txt:144 -#, fuzzy msgid "Creating a pull request" msgstr "Створення запиту на злиття" #: ../../src/appx/assignments.txt:146 msgid "" -"Make sure your working branch is up-to-date with the default one. You can" -" pull changes for the default branch and rebase your feature branch onto " -"it." +"Make sure your working branch is up-to-date with the default one. You can " +"pull changes for the default branch and rebase your feature branch onto it." msgstr "" "Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " -"отримати зміни для гілки за замовчуванням і перебазувати свою гілку " -"функції на неї." +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " +"на неї." #: ../../src/appx/assignments.txt:149 -#, fuzzy msgid "" -"Push feature branch to the remote repository. By default, the current " -"active branch is pushed via ``git push`` command. You may need to set " -"upstream branch if it isn't yet." +"Push feature branch to the remote repository. By default, the current active " +"branch is pushed via ``git push`` command. You may need to set upstream " +"branch if it isn't yet." msgstr "" -"Завантажте функціональну гілку до віддаленого репозиторію. За " -"замовчуванням буде завантажена активна гілка." +"Перенести гілку функції до віддаленого сховища. За замовчуванням, поточна " +"активна гілка виштовхується командою ``git push``. Можливо, вам доведеться " +"створити нову гілку, якщо вона ще не створена." #: ../../src/appx/assignments.txt:157 -#, fuzzy msgid "" -"Navigate to your remote repository homepage on GitHub and switch to " -"**Pull requests** tab." +"Navigate to your remote repository homepage on GitHub and switch to **Pull " +"requests** tab." msgstr "" -"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " -"**Pull requests**." +"Перейдіть на головну сторінку вашого віддаленого сховища на GitHub і " +"перейдіть на вкладку **Pull requests**." #: ../../src/appx/assignments.txt:159 -#, fuzzy msgid "Click **New pull request** button." -msgstr "Натисніть кнопку **Create pull request**." +msgstr "Натисніть кнопку **New pull request**." #: ../../src/appx/assignments.txt:160 msgid "" -"Select your default branch as *target* and your feature branch as " -"*source*." +"Select your default branch as *target* and your feature branch as *source*." msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." #: ../../src/appx/assignments.txt:162 -#, fuzzy msgid "Click **Create pull request** button." msgstr "Натисніть кнопку **Create pull request**." #: ../../src/appx/assignments.txt:163 -#, fuzzy msgid "Provide meaningful title and a brief description for your pull request." -msgstr "Надайте короткий опис вашого запиту." +msgstr "Надайте змістовну назву та короткий опис вашого запиту." #: ../../src/appx/assignments.txt:164 -#, fuzzy msgid "Submit pull request creation." -msgstr "Про pull requests" +msgstr "Підтвердіть створення запиту." #: ../../src/appx/assignments.txt:165 msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." -msgstr "" +msgstr "*(Необов'язково)* Виберіть рецензента(ів) у розділі **Reviewers**." #: ../../src/appx/assignments.txt:166 -#, fuzzy msgid "Wait until your pull request is reviewed." -msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." +msgstr "Зачекайте, поки ваш запит буде розглянуто." #: ../../src/appx/assignments.txt:169 msgid "Set up reviewers" -msgstr "" +msgstr "Налаштування рецензентів" #: ../../src/appx/assignments.txt:171 msgid "" -"You may share a link to pull request to a reviewer directly, but it's " -"better to set reviewer(s) on the pull request's page. Before you can " -"select reviewers, you need to add them as project contributors." +"You may share a link to pull request to a reviewer directly, but it's better " +"to set reviewer(s) on the pull request's page. Before you can select " +"reviewers, you need to add them as project contributors." msgstr "" +"Ви можете надіслати посилання на запит безпосередньо рецензенту, але краще " +"вказати рецензента(ів) на сторінці запиту. Перш ніж ви зможете вибрати " +"рецензентів, вам потрібно додати їх як учасників проекту." #: ../../src/appx/assignments.txt:176 msgid "Append collaborators" -msgstr "" +msgstr "Додавання співавторів" #: ../../src/appx/assignments.txt:178 -#, fuzzy msgid "" "Reviews allow collaborators to comment on the changes proposed in pull " -"requests, approve the changes, or request further changes before the pull" -" request is merged. Repository administrators can require that pull " -"requests are approved before being merged." +"requests, approve the changes, or request further changes before the pull " +"request is merged. Repository administrators can require that pull requests " +"are approved before being merged." msgstr "" -"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах " -"на отримання, затверджувати зміни або вимагати подальших змін перед " -"об'єднанням запиту на отримання. Адміністратори сховища можуть вимагати " -"схвалення всіх запитів на отримання перед об'єднанням." +"Рецензії дозволяють учасникам коментувати зміни, запропоновані у запитах, " +"затверджувати їх або вимагати подальших змін до того, як запит буде " +"об'єднано. Адміністратори сховища можуть вимагати, щоб запити на вилучення " +"були затверджені перед об'єднанням." #: ../../src/appx/assignments.txt:183 -#, fuzzy msgid "" -"Navigate to your repository homepage on GitHub and switch to **Settings**" -" tab." +"Navigate to your repository homepage on GitHub and switch to **Settings** " +"tab." msgstr "" -"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " -"**Pull requests**." +"Перейдіть на головну сторінку вашого сховища на GitHub і перейдіть на " +"вкладку **Налаштування**." #: ../../src/appx/assignments.txt:185 msgid "Select **Collaborators and teams** menu item." -msgstr "" +msgstr "Виберіть пункт меню **Collaborators and teams**." #: ../../src/appx/assignments.txt:186 -#, fuzzy msgid "Under **Manage access** section click **Add people** button." msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." @@ -383,21 +379,19 @@ msgstr "Виберіть учасника зі спадного меню." #: ../../src/appx/assignments.txt:190 msgid "This will send a *contributing request* to a specified user." -msgstr "" +msgstr "Це надішле *запит* вказаному користувачеві." #: ../../src/appx/assignments.txt:193 -#, fuzzy msgid "Merging changes" -msgstr "Внесення змін" +msgstr "Об'єднання змін" #: ../../src/appx/assignments.txt:195 -#, fuzzy msgid "" -"In case your pull request is **approved** - merge it to the trunk branch." -" Select one of the options available:" +"In case your pull request is **approved** - merge it to the trunk branch. " +"Select one of the options available:" msgstr "" -"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один " -"із варіантів, доступних у вашому запиті на отримання; вони можуть бути:" +"Якщо ваш pull request буде **схвалено** - об'єднайте його в основну гілку. " +"Виберіть один з доступних варіантів:" #: ../../src/appx/assignments.txt:198 msgid "Create a merge commit" @@ -413,38 +407,35 @@ msgstr "Squash and merge" #: ../../src/appx/assignments.txt:202 msgid "**Create a merge commit** suits in most of the cases." -msgstr "" +msgstr "**Create a merge commit** підходить у більшості випадків." #: ../../src/appx/assignments.txt:205 msgid "Making changes" msgstr "Внесення змін" #: ../../src/appx/assignments.txt:207 -#, fuzzy msgid "" -"In case your pull request is **rejected** or has comments - you may need " -"to provide some fixes." +"In case your pull request is **rejected** or has comments - you may need to " +"provide some fixes." msgstr "" -"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб " -"зробити це:" +"Якщо ваш pull request буде **відхилено** або він матиме зауваження - вам " +"може знадобитися надати деякі виправлення." #: ../../src/appx/assignments.txt:210 -#, fuzzy msgid "Do the work in your local topic branch" -msgstr "Виконайте роботу у своїй локальній гілці." +msgstr "Виконайте роботу у вашій місцевій тематичній гілці" #: ../../src/appx/assignments.txt:211 -#, fuzzy msgid "Push these changes to remote" -msgstr "Надішліть їх до гілки віддаленого репозиторію." +msgstr "Надішліть їх до гілки віддаленого репозиторію" #: ../../src/appx/assignments.txt:212 msgid "Re-request review (if applicable)" -msgstr "" +msgstr "Зробіть повторний запит на перегляд (за необхідності)" #: ../../src/appx/assignments.txt:213 msgid "Wait until review is done" -msgstr "" +msgstr "Дочекайтеся завершення перевірки" #: ../../src/appx/blog/spec.rst:10 msgid "Blog Project Specification" @@ -452,19 +443,19 @@ msgstr "Специфікація Проекту Блогу" #: ../../src/appx/blog/spec.rst:12 msgid "" -"The project aims to develop a robust and user-friendly web application " -"using the Django framework. The primary objective is to create a blogging" -" platform that allows users to publish and manage articles on various " -"topics. The application will provide an intuitive interface for authors " -"to compose and format their articles, while also offering a seamless " -"reading experience for visitors." +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." msgstr "" -"Проект має на меті розробку міцного та зручного у використанні " -"веб-додатка за допомогою фреймворку Django. Основна мета полягає у " -"створенні платформи для блогів, яка дозволить користувачам публікувати та" -" керувати статтями на різні теми. Додаток надасть інтуїтивний інтерфейс " -"авторам для створення та форматування своїх статей, а також забезпечить " -"безперешкодний досвід читання для відвідувачів." +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." #: ../../src/appx/blog/spec.rst:19 msgid "**Key Features**" @@ -477,16 +468,15 @@ msgstr "Реєстрація та Аутентифікація Користув #: ../../src/appx/blog/spec.rst:23 msgid "" "The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and " -"manage their profile information. This feature will enable authors to " -"have personalized accounts and maintain ownership of their published " -"articles." +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." msgstr "" "Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити" -" в систему та керувати інформацією свого профілю. Ця функція дозволить " -"авторам мати персоналізовані облікові записи та зберігати право власності" -" на їхні опубліковані статті." +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." #: ../../src/appx/blog/spec.rst:30 msgid "Article Management" @@ -494,14 +484,14 @@ msgstr "Керування Статтями" #: ../../src/appx/blog/spec.rst:31 msgid "" -"Authors will have the ability to create, edit, and delete articles within" -" the application. The system will offer a user-friendly editor. " -"Additionally, authors will be able to categorize articles by assigning " -"relevant topics to them." +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори " -"зможуть категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:37 msgid "Topic Subscription:" @@ -510,39 +500,36 @@ msgstr "Підписка на Теми:" #: ../../src/appx/blog/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users" -" will receive notifications or updates whenever new articles are " -"published in those categories. This feature will enhance user engagement " -"and ensure that readers stay informed about the topics they find most " -"valuable." +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори " -"зможуть категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user " -"experience and incorporating essential functionalities such as user " -"authentication, article management, and topic subscriptions, the " -"application will empower users to create, share, and explore engaging " -"content within a well-structured and organized platform." +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." msgstr "" "Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, " -"користувачі отримуватимуть повідомлення або оновлення кожного разу, коли " -"в цих категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про" -" найцікавіші для них теми." +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." #: ../../src/appx/blog/spec.rst:52 msgid "" -"Here is a starter repository template, that may helps: `Starter " -"template`_." +"Here is a starter repository template, that may helps: `Starter template`_." msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter " -"template`_." +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." #: ../../src/appx/blog/spec.rst:55 msgid "Challenge: Functional views" @@ -550,44 +537,42 @@ msgstr "Виклик: Функціональні представлення" #: ../../src/appx/blog/spec.rst:57 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, " -"що всі маршрути доступні та надають правильні дані. Використовуйте " -"будь-що, що ви хочете повернути в HTTP-відповіді." +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." #: ../../src/appx/blog/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції " -"сайту django." +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." #: ../../src/appx/blog/spec.rst:63 msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via" -" the django site." +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих " -"через сайт Django." +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." #: ../../src/appx/blog/spec.rst:65 msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single article from the " -"database." +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить " -"динамічну частину. Вона буде використовуватися для отримання однієї " -"статті з бази даних." +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." #: ../../src/appx/blog/spec.rst:68 msgid "" -"``/
    /comment/``: This view will be used to add comments to a " -"article." +"``/
    /comment/``: This view will be used to add comments to a article." msgstr "" "``/
    /comment/``: Це представлення буде використовуватися для " "додавання коментарів до статті." @@ -598,11 +583,13 @@ msgstr "``/create/``: Форма створення статті." #: ../../src/appx/blog/spec.rst:71 msgid "``/
    /update/``: A view to update an existing article data." -msgstr "``/
    /update/``: Представлення для оновлення існуючих даних статті." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." #: ../../src/appx/blog/spec.rst:72 msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "``/
    /delete/``: Представлення для підтвердження видалення статті." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." #: ../../src/appx/blog/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." @@ -622,11 +609,10 @@ msgstr "``/profile//``: Особиста сторінка кори #: ../../src/appx/blog/spec.rst:77 msgid "" -"``/set-password/``: This route will be used to change users' credential " -"data." +"``/set-password/``: This route will be used to change users' credential data." msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни " -"облікових даних користувачів." +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." #: ../../src/appx/blog/spec.rst:79 msgid "``/set-userdata/``: This route will be user to change users' data." @@ -650,8 +636,7 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../src/appx/blog/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to " -"homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -663,20 +648,20 @@ msgstr "Додаткові завдання" #: ../../src/appx/blog/spec.rst:89 msgid "" -"``/archive///``: This view provides a list of " -"articles published on a specified month of a specified year. This view " -"should apply date validation and raise ``Http404`` for invalid paths. The" -" valid date is a year's 4-digits form followed by 1 or 2 digits " -"representing month. Month range should be limited as [1..12], leading " -"zero may be omitted. Valid URLs are:" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" msgstr "" -"``/archive///``: Це представлення надає список " -"статей, опублікованих у певному місяці певного року. Це представлення " -"повинно застосовувати перевірку дати та викидати помилку ``Http404`` для " +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " "неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен " -"бути обмежений [1..12], ведучий нуль може бути пропущений. Приклади " -"правильних URL-адрес:" +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" #: ../../src/appx/blog/spec.rst:103 msgid "Challenge: Data models" @@ -685,13 +670,13 @@ msgstr "Завдання: моделі даних" #: ../../src/appx/blog/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that " -"is to use a django command:" +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. " -"Щоб отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати " -"команду Django:" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" #: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 msgid "General" @@ -731,11 +716,11 @@ msgstr "Стаття вимагає наявності змісту (прина #: ../../src/appx/blog/spec.rst:129 msgid "" -"Creation date should be autogenerated at article creation, and would " -"never be updated." +"Creation date should be autogenerated at article creation, and would never " +"be updated." msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не " -"буде оновлюватися пізніше." +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." #: ../../src/appx/blog/spec.rst:131 msgid "Updated date will be update at each article save." @@ -760,14 +745,13 @@ msgstr "Відносини" #: ../../src/appx/blog/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created " -"via admin page. You can also refer the same model as shown below:" +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. " -"Для застосування посилання на модель передайте ``\"auth.User\"`` як " -"пов'язану модель. Користувачі можуть бути створені через адміністративну " -"сторінку. Ви також можете посилатися на ту саму модель, як показано " -"нижче:" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" #: ../../src/appx/blog/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." @@ -775,51 +759,49 @@ msgstr "``article`` та ``topics`` мають *багато-до-багатьо #: ../../src/appx/blog/spec.rst:155 msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can " -"have **only one** author, but users can create as many articles as they " -"want." +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті " -"може бути **лише один** автор, але користувачі можуть створювати стільки " -"статей, скільки їм потрібно." +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." #: ../../src/appx/blog/spec.rst:158 msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article " -"may be a container for many comments, but a comment is related to a " -"single article." +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття " -"може бути контейнером для багатьох коментарів, але коментар пов'язаний " -"лише з однією статтею." +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." #: ../../src/appx/blog/spec.rst:161 msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" -" *article - user* relationship." +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." #: ../../src/appx/blog/spec.rst:163 msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can" -" prefer none or as many topics as needed and vice versa. This " -"relationship represents topics preferred by a certain blog user. Also " -"this provides an additional option to mark some of preferred topics with " -"a **notify** flag, to receive newsletters about specified topics updates." -" The difference between *prefer* and *notify* is that *preferred* topics " -"affect the articles list for a user, and *notify* is responsible for " -"newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. " -"Один користувач може вибрати будь-яку кількість тем, і навпаки. Це " -"відношення представляє теми, які вибрані певним користувачем блогу. Крім " -"того, це надає додаткову опцію позначити деякі з вибраних тем прапорцем " -"**notify**, щоб отримувати розсилки про оновлення зазначених тем. " -"Відмінність між *prefer* (вибір) та *notify* (сповіщення) полягає в тому," -" що *prefer* впливає на список статей для користувача, а *notify* " -"відповідає за розсилку новин для користувача." +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." #: ../../src/appx/blog/spec.rst:174 msgid "UML diagram" @@ -831,11 +813,11 @@ msgstr "Завдання: ORM" #: ../../src/appx/blog/spec.rst:181 msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project's database." +"Update existing views to represent entities that are actually stored inside " +"the project's database." msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично " -"зберігаються в базі даних проекту." +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." #: ../../src/appx/blog/spec.rst:184 msgid "``/``: should represent a list of existing articles." @@ -847,15 +829,16 @@ msgstr "``/
    /``: повинен представляти окрему і #: ../../src/appx/blog/spec.rst:186 msgid "Detail view should obtain a list of article related comments." -msgstr "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." +msgstr "" +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." #: ../../src/appx/blog/spec.rst:187 msgid "" -"``/profile//``: should contain information about user and a" -" list of articles authored by this user." +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." msgstr "" -"``/profile//``: повинен містити інформацію про користувача " -"та список статей, написаних цим користувачем." +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." #: ../../src/appx/blog/spec.rst:189 msgid "" @@ -863,30 +846,30 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " -"сутність не вдалося отримати." +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." #: ../../src/appx/blog/spec.rst:194 msgid "" -"It's common to store dedicated functions/classes that supports some " -"specific business logic in a separate module called ``services.py`` or " -"``utils.py`` within an application directory." +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." msgstr "" "Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або " -"``utils.py`` всередині директорії додатку." +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." #: ../../src/appx/blog/spec.rst:201 msgid "" -"Create a service to fetch articles, ordered by a specified user " -"preferences. This means, topics preferred by a user affects articles " -"orders. Queryset should be ordered in way, to have articles with most " -"corresponding topics at the begging." +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." msgstr "" "Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " "згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона" -" до початку видачі." +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." #: ../../src/appx/blog/spec.rst:207 msgid "Challenge: Templates" @@ -899,8 +882,8 @@ msgstr "Корисне посилання: `Bootstrap template`_" #: ../../src/appx/blog/spec.rst:213 msgid "Links related to user data **may be** placeholders for now." msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** " -"плейсхолдерами наразі." +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." #: ../../src/appx/blog/spec.rst:217 msgid "**All** templates should be inherited from the ``base.html`` template." @@ -909,29 +892,26 @@ msgstr "**Усі** шаблони повинні успадковувати ``ba #: ../../src/appx/blog/spec.rst:218 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " -"etc." +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| " -"Blog``, наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | " -"Blog\" і т.д." +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." #: ../../src/appx/blog/spec.rst:220 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL " -"``/``)." +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." #: ../../src/appx/blog/spec.rst:221 msgid "" "Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented " -"with a custom template context processor." +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення " -"цього типу фільтрує лише статті відповідної теми. Це слід реалізувати за " -"допомогою власного обробника контексту шаблону (template context " -"processor)." +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." #: ../../src/appx/blog/spec.rst:224 msgid "Replace content block for *about* page with some static content." @@ -947,11 +927,10 @@ msgstr "Шаблони рівня застосунків розташовува #: ../../src/appx/blog/spec.rst:231 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за " -"останній рік." +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../src/appx/blog/spec.rst:233 msgid "Each page should contain an inclusion-block(s) with following links:" @@ -979,7 +958,8 @@ msgstr "Головна сторінка містить список опублі #: ../../src/appx/blog/spec.rst:242 msgid "Each article entity is rendered using a custom template tag." -msgstr "Кожен елемент статті відображається за допомогою власного шаблонного тегу." +msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." #: ../../src/appx/blog/spec.rst:243 msgid "``article`` template tag renders information about a article object:" @@ -1090,8 +1070,8 @@ msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля " -"або деактивації облікового запису користувача." +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." #: ../../src/appx/blog/spec.rst:291 msgid "Forms" @@ -1100,8 +1080,8 @@ msgstr "Форми" #: ../../src/appx/blog/spec.rst:293 msgid "" "There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok " -"just to create a dedicated templates for future use." +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." msgstr "" "Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " @@ -1109,11 +1089,11 @@ msgstr "" #: ../../src/appx/blog/spec.rst:297 msgid "" -"``/register/`` page contains a new user registration form. It should take" -" inputs from the user:" +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона" -" повинна отримувати введені дані від користувача:" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 msgid "username" @@ -1133,16 +1113,16 @@ msgstr "confirm password" #: ../../src/appx/blog/spec.rst:305 msgid "" -"``/login/`` page contains a user login form. It should take the inputs " -"from the user:" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:311 msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a" -" article's data:" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" @@ -1175,22 +1155,21 @@ msgstr "new password" #: ../../src/appx/blog/spec.rst:324 msgid "" -"Change user's data form collects all information, that can be changed, " -"e.g. ``username``, ``first name``, ``last name`` etc." +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути " -"змінена, наприклад, ``username``, ``first name``, ``last name`` та інше." +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." #: ../../src/appx/blog/spec.rst:326 msgid "" "User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to " -"*subscribe* for the newsletters becomes available." +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач" -" може відмітити деякі теми як пріоритетні (переваги). Також для " -"пріоритетних тем стає доступною опція *підписки* на розсилку новинних " -"листів." +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." #: ../../src/appx/blog/spec.rst:331 msgid "Challenge: Articles' slugs" @@ -1218,7 +1197,8 @@ msgstr "`Challenge: ORM`_" #: ../../src/appx/blog/spec.rst:341 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" +msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" #: ../../src/appx/blog/spec.rst:343 msgid "required for each article" @@ -1234,16 +1214,14 @@ msgstr "Створіть міграцію даних для надання slug- #: ../../src/appx/blog/spec.rst:347 msgid "" -"``slug`` should be auto-generated on article save. The pattern is " -"``article.title-article.created_date``, e.g. \"Sample article\" created " -"at \"03/24/2023\" should receive slug: ``sample-blog-" -"article-2023-03-23``." +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. " -"Шаблон для генерації поля ``slug``: " -"``назва-статті-дата-створення-статті``, наприклад, стаття з назвою " -"\"Прикладна стаття\", створена \"24/03/2023\", отримає slug: ``sample-" -"blog-article-2023-03-23``." +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " +"отримає slug: ``sample-blog-article-2023-03-23``." #: ../../src/appx/blog/spec.rst:351 msgid "Update detail view URL path with article slug as dynamic portion." @@ -1257,7 +1235,8 @@ msgstr "Завдання: форми авторизації" #: ../../src/appx/blog/spec.rst:356 msgid "Create form for new users registration with required fields:" -msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../src/appx/blog/spec.rst:358 msgid "``username``" @@ -1299,11 +1278,11 @@ msgstr "Завдання: Автентифікація" #: ../../src/appx/blog/spec.rst:371 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be " -"visible in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " -"бути видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." #: ../../src/appx/blog/spec.rst:373 msgid "" @@ -1315,17 +1294,16 @@ msgstr "" #: ../../src/appx/blog/spec.rst:375 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../src/appx/blog/spec.rst:377 msgid "" -"``/register/``: Users should provide all required information about them:" -" desired username and email. Name data (both first and last) is optional." -" After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -1337,46 +1315,46 @@ msgstr "" #: ../../src/appx/blog/spec.rst:382 msgid "" -"``/login/``: Users should provide their credentials to login. In case " -"login is successful they should be redirected to their profile (if no " -"``?next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У " -"разі успішного входу вони повинні бути перенаправлені до свого профілю " -"(якщо немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." #: ../../src/appx/blog/spec.rst:385 msgid "" -"``/create/``: Only authenticated users should be able to visit this page." -" In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to article creation. Then a article is created, it should be " -"authored by the currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до " -"цієї сторінки. Якщо анонімний користувач намагається отримати доступ до " -"цього представлення, його повинно перенаправити спочатку на сторінку " -"входу, а після успішної аутентифікації повернути на сторінку створення " -"статті. При створенні статті вона повинна мати автором поточного " -"аутентифікованого користувача." +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." #: ../../src/appx/blog/spec.rst:390 msgid "" -"``/
    /comment/``: Currently authenticated user should be " -"referenced as a comment's author." +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого " -"користувача повинна бути зазначена його ідентифікація як автора." +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." #: ../../src/appx/blog/spec.rst:392 msgid "" -"Articles may be modified or deleted only by their authors from the detail" -" article page. However, admins can still performs articles actions from " -"the admin page." +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей" -" статті. Однак адміністратори все ще можуть виконувати дії зі статтями " -"через адміністративну сторінку." +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." #: ../../src/appx/blog/spec.rst:395 msgid "User related paths are restricted for non-authorized users." @@ -1394,12 +1372,12 @@ msgstr "``/set-userdata/``" #: ../../src/appx/blog/spec.rst:400 msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user " -"as *deleted* and log them user." +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." msgstr "" "Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для " -"цього користувача." +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." #: ../../src/appx/blog/spec.rst:406 msgid "" @@ -1412,17 +1390,16 @@ msgstr "" #: ../../src/appx/blog/spec.rst:408 msgid "" -"Implement account reactivation behavior. The exact workflow does not " -"mater. The sample scenario is to collect email for the user and check it " -"for existing in the database. After that create a request for admin to " -"activate an account and send a confirmation email, when all is done." +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок " -"дій не має значення. Один зі зразків сценаріїв може полягати у зборі " -"електронної пошти користувача та перевірки наявності цієї адреси в базі " -"даних. Після цього створіть запит для адміністратора на активацію " -"облікового запису та надішліть підтверджувальний лист електронною поштою," -" коли все буде готово." +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." #: ../../src/appx/blog/spec.rst:414 msgid "Challenge: Article related forms" @@ -1430,11 +1407,11 @@ msgstr "Виклик: Форми пов'язані зі статтями" #: ../../src/appx/blog/spec.rst:416 msgid "" -"Implement a article form. This form will be used to create new articles " -"and to update existing ones." +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення " -"нових статей та оновлення існуючих." +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." #: ../../src/appx/blog/spec.rst:418 msgid "Each created article should have at least one related topic." @@ -1449,8 +1426,8 @@ msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до " -"``/
    /comment/``." +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." #: ../../src/appx/blog/spec.rst:422 msgid "Implement functionality:" @@ -1503,8 +1480,8 @@ msgstr "Існуюча функціональність не повинна бу #: ../../src/appx/blog/spec.rst:445 msgid "It's ok to use built-in Django CBV if needed." msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у " -"Django (CBV)." +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." #: ../../src/appx/blog/spec.rst:448 msgid "Challenge: Serializers" @@ -1512,24 +1489,24 @@ msgstr "Завдання: Серіалізатори" #: ../../src/appx/blog/spec.rst:452 msgid "" -"Topic serializer is for read-only purposes only. Topics can be created " -"via admin page only." +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." #: ../../src/appx/blog/spec.rst:454 msgid "" -"Serialized data should contain all available data, e.g. ``pk``, " -"``title``, ``description``." +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." #: ../../src/appx/blog/spec.rst:459 msgid "" -"article comment serializer can perform both reading and writing " -"operations. But it can't be used to *update* or *delete* comment." +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." msgstr "" "серіалізатор коментаря статті може виконувати як операції читання, так і " "операції запису. Проте він не може використовуватися для оновлення або " @@ -1537,8 +1514,8 @@ msgstr "" #: ../../src/appx/blog/spec.rst:461 msgid "" -"Random, or pre-defined user may be used as comment's author for now. This" -" will be fixed in the future." +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." @@ -1548,8 +1525,8 @@ msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції:" -" отримання списку, отримання окремої статті, створення нової статті, " +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." #: ../../src/appx/blog/spec.rst:470 @@ -1558,16 +1535,15 @@ msgstr "Користувач" #: ../../src/appx/blog/spec.rst:471 msgid "" -"User serializer provides full access to site users data. All operations " -"are available for now: list, retrieve, create, update and destroy. This " -"behavior will be fixed in the future, to prevent unauthorized data " -"modifications." +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту." -" Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та " -"видалення. Однак, ця поведінка буде виправлена у майбутньому для " -"запобігання несанкціонованим змінам даних." +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." #: ../../src/appx/blog/spec.rst:477 msgid "Challenge: API views" @@ -1576,13 +1552,13 @@ msgstr "Завдання: API views" #: ../../src/appx/blog/spec.rst:479 msgid "All blog-site functionality are to be reflected via REST API." msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою " -"REST API." +"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " +"API." #: ../../src/appx/blog/spec.rst:482 msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This " -"will be fixed in the next challenge." +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." msgstr "" "Наразі дозволяється передавати *наперед визначеного* користувача у тілі " "запиту. Це буде виправлено у наступному розділі." @@ -1602,10 +1578,10 @@ msgstr "" "запису" #: ../../src/appx/blog/spec.rst:491 -msgid "For non-authenticated users it is possible to obtain authentication data." +msgid "" +"For non-authenticated users it is possible to obtain authentication data." msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних " -"аутентифікації." +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." #: ../../src/appx/blog/spec.rst:494 msgid "" @@ -1655,17 +1631,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово " -"підходить для простих речей, але ці інструменти швидко перетворюють " -"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" -" або навіть просто хорошого спеціального редактора коду робить кодування " -"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -1681,25 +1657,23 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -1712,8 +1686,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -1745,25 +1719,23 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " -"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " -"дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" -" загальної ціни на вказану кількість товару для покупки. Бажану кількість" -" буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -1850,11 +1822,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -1866,9 +1838,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -1915,13 +1887,12 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:5 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці " -"продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." #: conv_store.models.ShoppingCart.add_product:9 of msgid "" -"This method adds a product instance and corresponding quantity value to " -"the cart." +"This method adds a product instance and corresponding quantity value to the " +"cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -1940,8 +1911,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -1950,16 +1921,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -1983,28 +1954,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -2015,7 +1985,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -2024,11 +1995,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -2044,27 +2015,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість *protected*, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -2072,9 +2043,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -2082,8 +2053,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -2093,29 +2064,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -2124,10 +2097,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " -"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " -": {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -2139,17 +2111,16 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -2157,17 +2128,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -2175,19 +2146,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -2203,7 +2174,8 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -2236,15 +2208,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " -"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " -"пріоритет зліва направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -2264,11 +2236,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника," -" відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -2308,8 +2280,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -2414,16 +2386,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -2443,20 +2415,18 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " -"(по модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" -" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " -"*format* замінюються нулем або більше елементами *значень*. Якщо для " -"*format* потрібен один аргумент, *values* може бути одним некортежним " -"об'єктом." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -2492,11 +2462,9 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " -"обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -2512,11 +2480,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " -"(перевизначає прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -2604,8 +2572,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -2648,7 +2616,8 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -2673,7 +2642,8 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -2693,9 +2663,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -2720,14 +2690,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution " -"`__ on Windows and a " -"DLL (cygwin1.dll) which provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux " -"`__ у Windows та DLL " -"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -2735,12 +2705,11 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " -"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " -"Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -2764,13 +2733,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle " -"everything from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " -"версій, призначена для швидкого та ефективного керування всіма проектами," -" від малих до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -2783,24 +2752,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" -" рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " -"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " -"розробки за допомогою інтегрованого конвеєра розробників і консолідації " -"компонентів програми. Активно використовувані мільйонами розробників у " -"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " -"простоту, гнучкість і вибір." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -2812,14 +2781,13 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " -"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" -" вона заслужила міцну репутацію надійності, надійності функцій і " -"продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -2831,24 +2799,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" -" запиту. Крім того, введення може бути з файлу або з аргументів " -"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" -" функцій, подібних до оболонки, для полегшення написання сценаріїв і " -"автоматизації різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -2863,19 +2831,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа " -"адміністрування та розробки з відкритим кодом для PostgreSQL, " -"найдосконалішої бази даних з відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" -" веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -2887,19 +2855,17 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small " -"`__, `fast " -"`__, `self-contained " -"`__, `high-reliability " -"`__, `full-featured " -"`__, SQL database engine." +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку " -"`__, `швидку " -"`__, `самодостатню " -"`__, `висока надійність " -"`__, `повнофункціональний " -"`__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -2925,15 +2891,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must" -" type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " -"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " -"якомога більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -2941,7 +2907,8 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -2949,9 +2916,8 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of " -"**attack** and **defence** stages. Rounds are repeated, until player is " -"defeated." +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -2983,8 +2949,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by" -" random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -3023,9 +2989,8 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" -" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " -"успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -3053,13 +3018,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom " -"exception ``EnemyDown`` should be used to track these cases. Exception " -"should provide the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" -" повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -3071,15 +3036,13 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom " -"exception ``GameOver`` should be used to track these cases. Exception " -"should provide the details on the player's instance, especially its score" -" points." +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати " -"бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -3135,11 +3098,11 @@ msgstr "EnemyDown" #: of wtk.models.Enemy.decrease_health:5 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 msgid "Return a random fight choice" @@ -3156,7 +3119,8 @@ msgstr "Вибори, зроблені супротивником, випадк #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -3188,11 +3152,11 @@ msgstr "ім'я гравця" #: of wtk.models.Player.__init__:6 msgid "" -"This method performs player instance initialization. It set instance " -"name, initial score points value and health." +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " -"назву екземпляра, значення початкових балів і здоров'я." +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.attack:1 msgid "Attack an enemy" @@ -3200,19 +3164,18 @@ msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance " -"as an argument. After that, it takes attack choice from the player model " -"and the defence choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease enemy " -"health, assign score points etc.). Based on fight result should print out" -" a message:" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі " -"гравця та вибір захисту з моделі противника. Після результату битви " -"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " -"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" -" \"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -3232,11 +3195,11 @@ msgstr "GameOver" #: of wtk.models.Player.decrease_health:5 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." #: of wtk.models.Player.defence:1 msgid "Defend from an enemy's attack" @@ -3244,17 +3207,17 @@ msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance" -" as an argument. After that, it takes defence choice from the player " -"model and the attack choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease player " -"health). Based on fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та " -"вибір атаки від моделі ворога. Після результату бою необхідно виконати " -"операцію обчислення (зменшити здоров'я гравця). За результатами бою " -"повинно вийти повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -3327,8 +3290,7 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, " -"наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -3393,8 +3355,7 @@ msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " -"рядком." +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." #: ../../problem-sets/src/wtk/challenge.rst:158 msgid "Play" @@ -3403,21 +3364,20 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated " -"- a new one should be initialized with level increased by 1 (one). This " -"case should be reported to the terminal. If a player is defeated - the " -"\"Game Over\" message should be reported to the terminal. " -"``KeyboardInterrupt`` should be handled as well - it's behavior is " -"similar to \"Game Over\" event, but \"game over\" message should be " -"omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " -"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " -"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " -"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " -"також слід обробити - це поведінка подібно до події \"Game Over\", але " -"повідомлення \"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -3425,13 +3385,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs " -"the game process in an endless loop. Once the player is defeated - it " -"stops the execution." +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" -" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" -" зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -3440,8 +3400,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" -" записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -3450,8 +3410,7 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового " -"файлу." +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." #~ msgid "Specification for Django blog training project" #~ msgstr "Специфікація навчального проекту блогу Django" @@ -3463,12 +3422,11 @@ msgstr "" #~ msgstr "Додаткові завдання" #~ msgid "" -#~ "Create a service to fetch articles, " -#~ "ordered by a specified user preferences." +#~ "Create a service to fetch articles, ordered by a specified user " +#~ "preferences." #~ msgstr "" -#~ "Створіть сервіс для отримання статей, " -#~ "впорядкованих за вказаними уподобаннями " -#~ "користувача." +#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " +#~ "уподобаннями користувача." #~ msgid "The instructions to create a pull request via GitHub" #~ msgstr "Інструкції щодо створення запиту на отримання через GitHub" @@ -3477,92 +3435,64 @@ msgstr "" #~ msgstr "Створення Pull Request" #~ msgid "" -#~ "Create a pull request to propose " -#~ "and collaborate on changes to a " -#~ "repository. These changes are proposed " -#~ "in a *branch*, which ensures that " -#~ "the default branch only contains " -#~ "finished and approved work :cite:`github" -#~ ":creating-pr`." +#~ "Create a pull request to propose and collaborate on changes to a " +#~ "repository. These changes are proposed in a *branch*, which ensures that " +#~ "the default branch only contains finished and approved work :cite:`github:" +#~ "creating-pr`." #~ msgstr "" -#~ "Створіть запит на отримання, щоб " -#~ "запропонувати та співпрацювати над змінами " -#~ "в сховищі. Ці зміни пропонуються у " -#~ "*гілці*, що гарантує, що гілка за " -#~ "замовчуванням містить лише готову та " -#~ "затверджену роботу :cite:`github:creating-pr`." +#~ "Створіть запит на отримання, щоб запропонувати та співпрацювати над " +#~ "змінами в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка " +#~ "за замовчуванням містить лише готову та затверджену роботу :cite:`github:" +#~ "creating-pr`." #~ msgid "" -#~ "Pull requests let you tell others " -#~ "about changes you've pushed to a " -#~ "branch in a repository on GitHub. " -#~ "Once a pull request is opened, you" -#~ " can discuss and review the potential" -#~ " changes with collaborators and add " -#~ "follow-up commits before your changes " -#~ "are merged into the base branch " -#~ ":cite:`github:about-pr`." +#~ "Pull requests let you tell others about changes you've pushed to a branch " +#~ "in a repository on GitHub. Once a pull request is opened, you can discuss " +#~ "and review the potential changes with collaborators and add follow-up " +#~ "commits before your changes are merged into the base branch :cite:`github:" +#~ "about-pr`." #~ msgstr "" -#~ "Запити на витягування дозволяють повідомляти" -#~ " іншим про зміни, які ви внесли " -#~ "до гілки сховища на GitHub. Після " -#~ "відкриття запиту на отримання ви можете" -#~ " обговорити та переглянути потенційні зміни" -#~ " зі співавторами та додати подальші " -#~ "коміти, перш ніж ваші зміни буде " -#~ "об'єднано в базову гілку :cite:`github" -#~ ":about-pr`." +#~ "Запити на витягування дозволяють повідомляти іншим про зміни, які ви " +#~ "внесли до гілки сховища на GitHub. Після відкриття запиту на отримання ви " +#~ "можете обговорити та переглянути потенційні зміни зі співавторами та " +#~ "додати подальші коміти, перш ніж ваші зміни буде об'єднано в базову " +#~ "гілку :cite:`github:about-pr`." #~ msgid "" -#~ "The compare and pull request pages " -#~ "use different methods to calculate the" -#~ " diff for changed files:" +#~ "The compare and pull request pages use different methods to calculate the " +#~ "diff for changed files:" #~ msgstr "" -#~ "Сторінки порівняння та запиту на " -#~ "отримання використовують різні методи для " -#~ "обчислення різниці для змінених файлів:" +#~ "Сторінки порівняння та запиту на отримання використовують різні методи " +#~ "для обчислення різниці для змінених файлів:" #~ msgid "" -#~ "Compare pages show the diff between " -#~ "the tip of the head ref and " -#~ "the current common ancestor (that is," -#~ " the merge base) of the head " -#~ "and base ref." +#~ "Compare pages show the diff between the tip of the head ref and the " +#~ "current common ancestor (that is, the merge base) of the head and base " +#~ "ref." #~ msgstr "" -#~ "Сторінки порівняння показують різницю між " -#~ "кінчиком головного посилання та поточним " -#~ "спільним предком (тобто основою злиття) " -#~ "головного та базового посилання." +#~ "Сторінки порівняння показують різницю між кінчиком головного посилання та " +#~ "поточним спільним предком (тобто основою злиття) головного та базового " +#~ "посилання." #~ msgid "" -#~ "Pull request pages show the diff " -#~ "between the tip of the head ref" -#~ " and the common ancestor of the " -#~ "head and base ref at the time " -#~ "when the pull request was created. " -#~ "Consequently, the merge base used for" -#~ " the comparison might be different." +#~ "Pull request pages show the diff between the tip of the head ref and the " +#~ "common ancestor of the head and base ref at the time when the pull " +#~ "request was created. Consequently, the merge base used for the comparison " +#~ "might be different." #~ msgstr "" -#~ "Сторінки запиту на отримання показують " -#~ "різницю між кінчиком головного посилання " -#~ "та спільним предком головного та " -#~ "базового посилання на момент створення " -#~ "запиту на отримання. Отже, база злиття," -#~ " яка використовується для порівняння, може" -#~ " бути іншою." +#~ "Сторінки запиту на отримання показують різницю між кінчиком головного " +#~ "посилання та спільним предком головного та базового посилання на момент " +#~ "створення запиту на отримання. Отже, база злиття, яка використовується " +#~ "для порівняння, може бути іншою." #~ msgid "" -#~ "In *few words*: both source and " -#~ "target branches **should** share some " -#~ "commit(s) in their history and the " -#~ "source branch **should** has commit(s) " +#~ "In *few words*: both source and target branches **should** share some " +#~ "commit(s) in their history and the source branch **should** has commit(s) " #~ "missing on the target one." #~ msgstr "" -#~ "У *кількох словах*: як вихідна, так " -#~ "і цільова гілки **повинні** мати спільні" -#~ " деякі коміти у своїй історії, а " -#~ "вихідна гілка **повинна** мати коміти, " -#~ "відсутні в цільовій." +#~ "У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати " +#~ "спільні деякі коміти у своїй історії, а вихідна гілка **повинна** мати " +#~ "коміти, відсутні в цільовій." #~ msgid "Following SHOULD be included to the repository:" #~ msgstr "У репозиторій СЛІД включити наступне:" @@ -3595,122 +3525,93 @@ msgstr "" #~ msgstr "Це потрібно зробити один раз для кожного репозиторію." #~ msgid "" -#~ "Create README file and provide a " -#~ "brief description for your project " +#~ "Create README file and provide a brief description for your project " #~ "(optional)." #~ msgstr "" -#~ "Створіть файл README та надайте короткий" -#~ " опис свого проекту (необов'язково)." +#~ "Створіть файл README та надайте короткий опис свого проекту " +#~ "(необов'язково)." #~ msgid "Freeze the dependencies." #~ msgstr "Зафіксуйте залежності." #~ msgid "" -#~ "Create a base code modules (e.g. " -#~ "initialize django project and apps, or" -#~ " create an empty python module like" -#~ " \"main.py\" etc.)." +#~ "Create a base code modules (e.g. initialize django project and apps, or " +#~ "create an empty python module like \"main.py\" etc.)." #~ msgstr "" -#~ "Створіть модулі базового коду (наприклад, " -#~ "ініціалізуйте проект django та його " -#~ "застосунки або створіть порожній модуль " -#~ "python, як-от \"main.py\" тощо)." +#~ "Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " +#~ "його застосунки або створіть порожній модуль python, як-от \"main.py\" " +#~ "тощо)." #~ msgid "" -#~ "Create \".gitignore\" file and set up" -#~ " directories and files to be excluded" +#~ "Create \".gitignore\" file and set up directories and files to be excluded" #~ msgstr "" -#~ "Створіть файл \".gitignore\" та налаштуйте " -#~ "каталоги та файли, які потрібно " -#~ "виключити" +#~ "Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які " +#~ "потрібно виключити" #~ msgid "Append contributors to remote repository" #~ msgstr "Додати учасників до віддаленого репозиторію" #~ msgid "" -#~ "On `GitHub `_, navigate to" -#~ " the repository settings page and " -#~ "switch to **Collaborators and teams** " -#~ "menu item." +#~ "On `GitHub `_, navigate to the repository settings " +#~ "page and switch to **Collaborators and teams** menu item." #~ msgstr "" -#~ "На `GitHub `_ перейдіть на" -#~ " сторінку налаштувань репозиторію та " -#~ "перейдіть до пункту меню **Collaborators " -#~ "and teams**." +#~ "На `GitHub `_ перейдіть на сторінку налаштувань " +#~ "репозиторію та перейдіть до пункту меню **Collaborators and teams**." #~ msgid "Working on feature" #~ msgstr "Робота над завданням" #~ msgid "" -#~ "Create a dedicated branch with some " -#~ "representative name (e.g. \"feature/models\", " -#~ "\"cbv\" etc.)." +#~ "Create a dedicated branch with some representative name (e.g. \"feature/" +#~ "models\", \"cbv\" etc.)." #~ msgstr "" -#~ "Створіть спеціальну гілку з певною " -#~ "репрезентативною назвою (наприклад, " +#~ "Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " #~ "\"feature/models\", \"cbv\" тощо)." #~ msgid "Do the work and commit changes on a feature branch." #~ msgstr "Виконайте роботу та зафіксуйте зміни в гілці." #~ msgid "" -#~ "While working on a *feature branch* " -#~ "make commits for each completed logical" -#~ " block of code." +#~ "While working on a *feature branch* make commits for each completed " +#~ "logical block of code." #~ msgstr "" -#~ "Під час роботи над *функціональною " -#~ "гілкою* робіть коміти для кожного " +#~ "Під час роботи над *функціональною гілкою* робіть коміти для кожного " #~ "завершеного логічного блоку коду." #~ msgid "On **Pull requests** tab click **New** button." #~ msgstr "На вкладці **Pull requests** натисніть кнопку **New**." #~ msgid "" -#~ "On the pull request page add a " -#~ "**reviewer** by clicking the appropriate " -#~ "option and selecting a person from " -#~ "a dropdown menu." +#~ "On the pull request page add a **reviewer** by clicking the appropriate " +#~ "option and selecting a person from a dropdown menu." #~ msgstr "" -#~ "На сторінці запиту на отримання додайте" -#~ " **reviewer**, натиснувши відповідну опцію " -#~ "та вибравши особу зі спадного меню." +#~ "На сторінці запиту на отримання додайте **reviewer**, натиснувши " +#~ "відповідну опцію та вибравши особу зі спадного меню." #~ msgid "" -#~ "The reviewer will **approve** or " -#~ "**reject** your pull request. Optionally " -#~ "the reviewer may provide some comments" -#~ " to your code; **rejected** pull " -#~ "requests will always come with some " -#~ "details." +#~ "The reviewer will **approve** or **reject** your pull request. Optionally " +#~ "the reviewer may provide some comments to your code; **rejected** pull " +#~ "requests will always come with some details." #~ msgstr "" -#~ "Рецензент **схвалить** або **відхилить** ваш" -#~ " запит на отримання. За бажанням " -#~ "рецензент може надати деякі коментарі до" -#~ " вашого коду; **відхилені** запити на " -#~ "витягування завжди надходитимуть з деякими " +#~ "Рецензент **схвалить** або **відхилить** ваш запит на отримання. За " +#~ "бажанням рецензент може надати деякі коментарі до вашого коду; " +#~ "**відхилені** запити на витягування завжди надходитимуть з деякими " #~ "деталями." #~ msgid "Re-request review from the pull request page." #~ msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." #~ msgid "" -#~ "All commits related to the source " -#~ "branch will be automatically appended to" -#~ " the open pull request. The reviewer" -#~ " will review your updates. Repeat " -#~ "this process until the pull request " -#~ "is **approved**." +#~ "All commits related to the source branch will be automatically appended " +#~ "to the open pull request. The reviewer will review your updates. Repeat " +#~ "this process until the pull request is **approved**." #~ msgstr "" -#~ "Усі коміти, пов'язані з вихідною гілкою," -#~ " будуть автоматично додані до відкритого" -#~ " запиту на отримання. Рецензент перевірить" -#~ " ваші оновлення. Повторюйте цей процес, " -#~ "доки запит на отримання не буде " -#~ "**схвалено**." +#~ "Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " +#~ "відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " +#~ "Повторюйте цей процес, доки запит на отримання не буде **схвалено**." #~ msgid "Merging the pull request" #~ msgstr "Об'єднання (злиття) запиту" #~ msgid "After that the pull request is merged into your target branch." #~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." - diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 9b0b2278e..b3d55a860 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -9,16 +9,17 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-01 11:38+0300\n" -"PO-Revision-Date: 2023-08-19 12:18+0300\n" +"PO-Revision-Date: 2023-09-04 16:12+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: uk \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 #: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 @@ -51,11 +52,11 @@ msgstr "Зазвичай ви отримуєте Git-репозиторій од #: ../../src/vcs/basics.txt:15 msgid "" -"You can take a local directory that is currently not under version " -"control, and turn it into a Git repository." +"You can take a local directory that is currently not under version control, " +"and turn it into a Git repository." msgstr "" -"Ви можете взяти локальний каталог, який наразі не перебуває під контролем" -" версій, і перетворити його на Git-репозиторій." +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " +"версій, і перетворити його на Git-репозиторій." #: ../../src/vcs/basics.txt:17 msgid "You can clone an existing Git repository from elsewhere." @@ -75,16 +76,15 @@ msgstr "Ініціалізація репо в існуючому каталоз #: ../../src/vcs/basics.txt:25 msgid "" -"If you have a project directory that is currently not under version " -"control and you want to start controlling it with Git, you first need to " -"go to that project's directory. If you've never done this, it looks a " -"little different depending on which system you're running:" +"If you have a project directory that is currently not under version control " +"and you want to start controlling it with Git, you first need to go to that " +"project's directory. If you've never done this, it looks a little different " +"depending on which system you're running:" msgstr "" -"Якщо у вас є каталог проекту, який наразі не перебуває під контролем " -"версій, і ви хочете почати контролювати його за допомогою Git'а, спершу " -"вам потрібно перейти до каталогу цього проекту. Якщо ви ніколи цього не " -"робили, це виглядає трохи інакше, залежно від того, якою системою ви " -"користуєтеся:" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " +"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " +"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " +"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" #: ../../src/vcs/basics.txt:30 msgid "Change directory in bash (Linux)" @@ -116,19 +116,17 @@ msgstr "Клонування існуючого репо" #: ../../src/vcs/basics.txt:57 msgid "" -"If you want to get a copy of an existing Git repository -- for example, a" -" project you'd like to contribute to -- the command you need is ``git " -"clone``." +"If you want to get a copy of an existing Git repository -- for example, a " +"project you'd like to contribute to -- the command you need is ``git clone``." msgstr "" -"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, " -"проекту, до якого ви хочете долучитися, - вам потрібна команда ``git " -"clone``." +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " +"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." #: ../../src/vcs/basics.txt:64 msgid "" -"That creates a directory named *edu-python-course.github.io*, initializes" -" a *.git* directory inside it, pulls down all the data for that " -"repository, and checks out a working copy of the latest version." +"That creates a directory named *edu-python-course.github.io*, initializes a " +"*.git* directory inside it, pulls down all the data for that repository, and " +"checks out a working copy of the latest version." msgstr "" "Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " "каталог *.git* всередині нього, витягує всі дані для цього сховища і " @@ -139,21 +137,19 @@ msgid "" "That command does the same thing as the previous one, but the target " "directory is called *python-course*." msgstr "" -"Ця команда робить те саме, що й попередня, але цільовий каталог " -"називається *python-course*." +"Ця команда робить те саме, що й попередня, але цільовий каталог називається " +"*python-course*." #: ../../src/vcs/basics.txt:75 msgid "" -"Git has a number of different transfer protocols you can use. The " -"previous example uses the ``https://`` protocol, but you may also see " -"``git://`` or ``user@server:path/to/repo.git``, which uses the SSH " -"transfer protocol." +"Git has a number of different transfer protocols you can use. The previous " +"example uses the ``https://`` protocol, but you may also see ``git://`` or " +"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." msgstr "" "Git має декілька різних протоколів передачі даних, які ви можете " -"використовувати. У попередньому прикладі використовується протокол " -"``https://``, але ви також можете побачити ``git://`` або " -"``user@server:path/to/repo.git``, який використовує протокол передачі " -"SSH." +"використовувати. У попередньому прикладі використовується протокол ``https://" +"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." +"git``, який використовує протокол передачі SSH." #: ../../src/vcs/basics.txt:80 msgid "Making changes to the repo" @@ -161,17 +157,17 @@ msgstr "Внесення змін до репозиторію" #: ../../src/vcs/basics.txt:82 msgid "" -"At this point, you should have a *bona fide* Git repository on your local" -" machine, and a checkout or *working copy* of all of its files in front " -"of you. Typically, you'll want to start making changes and committing " -"snapshots of those changes into your repository each time the project " -"reaches a state you want to record." +"At this point, you should have a *bona fide* Git repository on your local " +"machine, and a checkout or *working copy* of all of its files in front of " +"you. Typically, you'll want to start making changes and committing snapshots " +"of those changes into your repository each time the project reaches a state " +"you want to record." msgstr "" "На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " "комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " -"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих " -"змін у вашому сховищі кожного разу, коли проект досягне стану, який ви " -"хочете зафіксувати." +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " +"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " +"зафіксувати." #: ../../src/vcs/basics.txt:88 msgid "" @@ -183,27 +179,26 @@ msgstr "" #: ../../src/vcs/basics.txt:91 msgid "" -"Tracked files are files that were in the last snapshot, as well as any " -"newly staged files; they can be unmodified, modified, or staged. In " -"short, tracked files are files that Git knows about." +"Tracked files are files that were in the last snapshot, as well as any newly " +"staged files; they can be unmodified, modified, or staged. In short, tracked " +"files are files that Git knows about." msgstr "" -"Відстежувані файли - це файли, які були в останньому знімку, а також " -"будь-які нещодавно покладені файли; вони можуть бути незміненими, " -"зміненими або покладеними. Коротше кажучи, відстежувані файли - це файли," -" про які відомо Git'у." +"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" +"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " +"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " +"Git'у." #: ../../src/vcs/basics.txt:94 msgid "" -"Untracked files are everything else -- any files in your working " -"directory that were not in your last snapshot and are not in your staging" -" area. Untracked basically means that Git sees a file you didn't have in " -"a previous snapshot (commit), and which hasn't been yet staged." +"Untracked files are everything else -- any files in your working directory " +"that were not in your last snapshot and are not in your staging area. " +"Untracked basically means that Git sees a file you didn't have in a previous " +"snapshot (commit), and which hasn't been yet staged." msgstr "" "Невідстежені файли - це все інше - будь-які файли у вашому робочому " "каталозі, яких не було у вашому останньому знімку і які не перебувають у " "вашій області сховища. По суті, це означає, що Git бачить файл, якого не " -"було у попередньому знімку (комміті), і який ще не було покладено у " -"сховище." +"було у попередньому знімку (комміті), і який ще не було покладено у сховище." #: ../../src/vcs/basics.txt:104 msgid "Checking out status of the file(s)" @@ -214,16 +209,15 @@ msgid "" "The main tool you use to determine which files are in which state is the " "``git status`` command." msgstr "" -"Основним інструментом для визначення стану файлів є команда ``git " -"status``." +"Основним інструментом для визначення стану файлів є команда ``git status``." #: ../../src/vcs/basics.txt:133 msgid "" -"Newly added *README.md* file is untracked, because it's under \"Untracked" -" files\" heading the status output." +"Newly added *README.md* file is untracked, because it's under \"Untracked " +"files\" heading the status output." msgstr "" -"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться" -" у розділі \"Файли, що не відстежуються\" у виведенні статусу." +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " +"розділі \"Файли, що не відстежуються\" у виведенні статусу." #: ../../src/vcs/basics.txt:137 msgid "Tracking new files" @@ -232,8 +226,8 @@ msgstr "Відстеження нових файлів" #: ../../src/vcs/basics.txt:139 msgid "In order to begin tracking a new file, you use the ``git add`` command." msgstr "" -"Для того, щоб почати відстеження нового файлу, скористайтеся командою " -"``git add``." +"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " +"add``." #: ../../src/vcs/basics.txt:153 msgid "" @@ -245,13 +239,13 @@ msgstr "" #: ../../src/vcs/basics.txt:157 msgid "" -"You can use wildcards, to stage multiple files at once. The most common " -"use cases is to add **all** modified files, or files inside of a specific" -" directory." +"You can use wildcards, to stage multiple files at once. The most common use " +"cases is to add **all** modified files, or files inside of a specific " +"directory." msgstr "" -"Ви можете використовувати підстановочні знаки, щоб вносити зміни до " -"кількох файлів одночасно. Найпоширенішим випадком використання є " -"додавання **усіх** змінених файлів або файлів у певному каталозі." +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " +"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " +"змінених файлів або файлів у певному каталозі." #: ../../src/vcs/basics.txt:168 msgid "Staging modified files" @@ -259,25 +253,26 @@ msgstr "Зберігання змінених файлів" #: ../../src/vcs/basics.txt:170 msgid "" -"If a staged (or already committed) file has been changed, it will be " -"moved under \"Modified\" heading. These changes wouldn't be committed " -"unless they are staged." +"If a staged (or already committed) file has been changed, it will be moved " +"under \"Modified\" heading. These changes wouldn't be committed unless they " +"are staged." msgstr "" -"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, " -"його буде переміщено у рубрику \"Змінено\". Ці зміни не будуть " -"зафіксовані, якщо вони не були поетапними." +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " +"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " +"вони не були поетапними." #: ../../src/vcs/basics.txt:190 -msgid "Changes may be added to the stage area by repeating ``git add`` command." +msgid "" +"Changes may be added to the stage area by repeating ``git add`` command." msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." #: ../../src/vcs/basics.txt:191 msgid "" -"Changes may be discard by ``git restore `` command. This action " -"will restore file to its **staged** version." +"Changes may be discard by ``git restore `` command. This action will " +"restore file to its **staged** version." msgstr "" -"Зміни можна відкинути командою ``git restore ``. Ця дія відновить " -"файл до його **попередньої** версії." +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " +"до його **попередньої** версії." #: ../../src/vcs/basics.txt:195 msgid "Committing changes" @@ -286,14 +281,14 @@ msgstr "Фіксація змін" #: ../../src/vcs/basics.txt:197 msgid "" "Now that the stage area is set up the way required, it's time to commit " -"changes. Remember that anything that is still unstaged -- any files you " -"have created or modified that you haven't run git add on since you edited" -" them -- won't go into this commit." +"changes. Remember that anything that is still unstaged -- any files you have " +"created or modified that you haven't run git add on since you edited them -- " +"won't go into this commit." msgstr "" -"Тепер, коли область змін налаштована належним чином, настав час " -"зафіксувати зміни. Пам'ятайте, що все, що ще не є стадією - будь-які " -"файли, які ви створили або змінили, але не запустили git-додаток з " -"моменту редагування, - не потраплять до цього коміту." +"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " +"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " +"створили або змінили, але не запустили git-додаток з моменту редагування, - " +"не потраплять до цього коміту." #: ../../src/vcs/basics.txt:202 msgid "The simplest way to commit is to type ``git commit``:" @@ -305,18 +300,18 @@ msgstr "Після цього запуститься обраний вами р #: ../../src/vcs/basics.txt:211 msgid "" -"This is set by your shell's EDITOR environment variable -- usually vim or" -" emacs, although you can configure it with whatever you want using the " -"``git config --global core.editor``" +"This is set by your shell's EDITOR environment variable -- usually vim or " +"emacs, although you can configure it with whatever you want using the ``git " +"config --global core.editor``" msgstr "" "Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " -"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git " -"config --global core.editor``" +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" +"global core.editor``" #: ../../src/vcs/basics.txt:215 msgid "" -"Alternatively, you can type your commit message inline with the " -"``commit`` command by specifying it after a ``-m`` flag, like this:" +"Alternatively, you can type your commit message inline with the ``commit`` " +"command by specifying it after a ``-m`` flag, like this:" msgstr "" "Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " "``commit``, вказавши його після прапорця ``-m``, як показано нижче:" @@ -324,19 +319,19 @@ msgstr "" #: ../../src/vcs/basics.txt:222 msgid "" "Although it can be amazingly useful for crafting commits exactly how you " -"want them, the staging area is sometimes a bit more complex than you need" -" in your workflow. If you want to skip the staging area, Git provides a " -"simple shortcut. Adding the ``-a`` option to the ``git commit`` command " -"makes Git automatically stage every file that is already tracked before " -"doing the commit, letting you skip the git add part:" -msgstr "" -"Хоча вона може бути надзвичайно корисною для створення коммітів саме так," -" як вам потрібно, область підготовки іноді буває трохи складнішою, ніж " -"вам потрібно у вашому робочому процесі. Якщо ви хочете пропустити область" -" підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди " -"``git commit`` змушує Git автоматично стадіювати кожен файл, який вже " -"відстежується, перед виконанням комміту, дозволяючи вам пропустити " -"частину git add:" +"want them, the staging area is sometimes a bit more complex than you need in " +"your workflow. If you want to skip the staging area, Git provides a simple " +"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " +"automatically stage every file that is already tracked before doing the " +"commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " +"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " +"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " +"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " +"commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " +"git add:" #: ../../src/vcs/basics.txt:263 msgid "Ignoring files" @@ -344,20 +339,20 @@ msgstr "Ігнорування файлів" #: ../../src/vcs/basics.txt:265 msgid "" -"Often, there is a class of files, that should not be a part of a repo. " -"You want these files to be prevent from being automatically added or even" -" shown as being untracked. These are generally files produced by loggers " -"or a build system, or some local settings for the project that shouldn't " -"be shared across other developers or maintainers. In such cases you can " -"create a *.gitignore* file. Here is the content of *.gitignore* used in " -"current repository:" +"Often, there is a class of files, that should not be a part of a repo. You " +"want these files to be prevent from being automatically added or even shown " +"as being untracked. These are generally files produced by loggers or a build " +"system, or some local settings for the project that shouldn't be shared " +"across other developers or maintainers. In such cases you can create a *." +"gitignore* file. Here is the content of *.gitignore* used in current " +"repository:" msgstr "" "Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " -"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як" -" такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " +"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " "системою збірки, або деякі локальні налаштування проекту, які не повинні " -"бути доступними для інших розробників або супровідників. У таких випадках" -" ви можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"бути доступними для інших розробників або супровідників. У таких випадках ви " +"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " "використовується у поточному сховищі:" #: ../../src/vcs/basics.txt:305 @@ -366,8 +361,8 @@ msgstr "Ці рядки означають:" #: ../../src/vcs/basics.txt:307 msgid "" -"Content within directories named \".venv\", \".env\", \"venv\" or \"env\"" -" will be ignored completely." +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " +"will be ignored completely." msgstr "" "Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " "повністю проігноровано." @@ -378,59 +373,63 @@ msgstr "Вміст каталогу \"node_modules\" буде повністю #: ../../src/vcs/basics.txt:310 msgid "" -"Any files within directories named \".vscode\" or \".idea\" will be " -"ignored completely." +"Any files within directories named \".vscode\" or \".idea\" will be ignored " +"completely." msgstr "" "Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " "повністю проігноровані." #: ../../src/vcs/basics.txt:312 msgid "Any file with name starting with hash (#) will be ignored." -msgstr "Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." +msgstr "" +"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." #: ../../src/vcs/basics.txt:313 msgid "Any file with name ending with tilda (~) will be ignored." -msgstr "Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." +msgstr "" +"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." #: ../../src/vcs/basics.txt:314 msgid "" "Content within directories named \"temp\" or \"tmp\" will be ignored " "completely." msgstr "" -"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю " -"проігноровано." +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." #: ../../src/vcs/basics.txt:316 msgid "" "Content within directories named \"_builds\", \"_build\", \"builds\" or " "\"build\" will be ignored completely." msgstr "" -"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або " -"\"build\" буде повністю проігноровано." +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " +"буде повністю проігноровано." #: ../../src/vcs/basics.txt:318 msgid "Any file with name ending with \".pot\" will be ignored." -msgstr "Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." #: ../../src/vcs/basics.txt:319 msgid "Any file with name ending with \".mo\" will be ignored." -msgstr "Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." #: ../../src/vcs/basics.txt:321 msgid "" -"Setting up a *.gitignore* file for your new repository before you get " -"going is generally a good idea so you don't accidentally commit files " -"that you really don't want in your Git repository." +"Setting up a *.gitignore* file for your new repository before you get going " +"is generally a good idea so you don't accidentally commit files that you " +"really don't want in your Git repository." msgstr "" "Створення файлу *.gitignore* для вашого нового сховища перед початком " -"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, " -"які вам насправді не потрібні у вашому Git-репозиторії." +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " +"вам насправді не потрібні у вашому Git-репозиторії." #: ../../src/vcs/basics.txt:325 msgid "" "The rules for the patterns you can put in the *.gitignore* file are as " "follows:" -msgstr "Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" +msgstr "" +"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" #: ../../src/vcs/basics.txt:327 msgid "Blank lines or lines starting with # are ignored." @@ -438,16 +437,15 @@ msgstr "Порожні рядки або рядки, що починаються #: ../../src/vcs/basics.txt:328 msgid "" -"Standard glob patterns work, and will be applied recursively throughout " -"the entire working tree." +"Standard glob patterns work, and will be applied recursively throughout the " +"entire working tree." msgstr "" -"Працюють стандартні шаблони глобусів, які будуть застосовуватися " -"рекурсивно по всьому робочому дереву." +"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " +"по всьому робочому дереву." #: ../../src/vcs/basics.txt:330 msgid "" -"You can start patterns with a forward slash (/) to avoid recursive " -"inclusion." +"You can start patterns with a forward slash (/) to avoid recursive inclusion." msgstr "" "Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " "похилої риски (/)." @@ -455,8 +453,7 @@ msgstr "" #: ../../src/vcs/basics.txt:332 msgid "You can end patterns with a forward slash (/) to specify a directory." msgstr "" -"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати " -"каталог." +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." #: ../../src/vcs/basics.txt:333 msgid "You can negate a pattern by starting it with an exclamation point (!)." @@ -464,22 +461,21 @@ msgstr "Ви можете заперечити шаблон, почавши йо #: ../../src/vcs/basics.txt:335 msgid "" -"Glob patterns are like simplified regular expressions that shells use. An" -" asterisk (\\*) matches zero or more characters; [ab] matches any " -"character inside the brackets (in this case a or b); a question mark (?) " -"matches a single character; and brackets enclosing characters separated " -"by a hyphen ([0-9]) matches any character between them (in this case 0 " -"through 9). You can also use two asterisks to match nested directories; " -"a/\\*\\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on." -msgstr "" -"Шаблони глобусів подібні до спрощених регулярних виразів, які " -"використовують оболонки. Зірочка (\\*) відповідає нулю або більше " -"символів; [ab] відповідає будь-якому символу всередині дужок (у цьому " -"випадку a або b); знак питання (?) відповідає одному символу; а дужки, що" -" містять символи, розділені дефісом ([0-9]), відповідають будь-якому " -"символу між ними (у цьому випадку від 0 до 9). Ви також можете " -"використовувати дві зірочки для вкладених каталогів; a/\\*\\*/z буде " -"відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +"Glob patterns are like simplified regular expressions that shells use. An " +"asterisk (\\*) matches zero or more characters; [ab] matches any character " +"inside the brackets (in this case a or b); a question mark (?) matches a " +"single character; and brackets enclosing characters separated by a hyphen " +"([0-9]) matches any character between them (in this case 0 through 9). You " +"can also use two asterisks to match nested directories; a/\\*\\*/z would " +"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " +"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " +"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " +"(?) відповідає одному символу; а дужки, що містять символи, розділені " +"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " +"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " +"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." #: ../../src/vcs/basics.txt:344 msgid "Viewing the commit history" @@ -487,81 +483,79 @@ msgstr "Перегляд історії коммітів" #: ../../src/vcs/basics.txt:346 msgid "" -"After you have created several commits, or if you have cloned a " -"repository with an existing commit history, you'll probably want to look " -"back to see what has happened. The most basic and powerful tool to do " -"this is the ``git log`` command." +"After you have created several commits, or if you have cloned a repository " +"with an existing commit history, you'll probably want to look back to see " +"what has happened. The most basic and powerful tool to do this is the ``git " +"log`` command." msgstr "" -"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище" -" з існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, " -"щоб побачити, що сталося. Найпростішим і найпотужнішим інструментом для " -"цього є команда ``git log``." +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " +"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " +"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " +"команда ``git log``." #: ../../src/vcs/basics.txt:372 msgid "" -"By default, with no arguments, ``git log`` lists the commits made in that" -" repository in reverse chronological order; that is, the most recent " -"commits show up first. As you can see, this command lists each commit " -"with its SHA-1 checksum, the author's name and email, the date written, " -"and the commit message." +"By default, with no arguments, ``git log`` lists the commits made in that " +"repository in reverse chronological order; that is, the most recent commits " +"show up first. As you can see, this command lists each commit with its SHA-1 " +"checksum, the author's name and email, the date written, and the commit " +"message." msgstr "" "За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " "зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " "найновіші комміти показуються першими. Як ви можете бачити, ця команда " -"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та " -"електронною адресою автора, датою створення та повідомленням про " -"внесення." +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " +"адресою автора, датою створення та повідомленням про внесення." #: ../../src/vcs/basics.txt:378 msgid "" -"One of the more helpful options is ``-p`` or ``--patch``, which shows the" -" difference (the *patch* output) introduced in each commit. You can also " -"limit the number of log entries displayed, such as using ``-`` to" -" show only desired number of latest entries." +"One of the more helpful options is ``-p`` or ``--patch``, which shows the " +"difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to " +"show only desired number of latest entries." msgstr "" "Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " -"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також " -"можете обмежити кількість відображуваних записів, наприклад, за допомогою" -" ``-``, щоб показати лише потрібну кількість останніх записів." +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " +"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" +"``, щоб показати лише потрібну кількість останніх записів." #: ../../src/vcs/basics.txt:414 msgid "" -"This option display the same information but with a diff directly " -"following each entry. This is very helpful for code review or to quickly " -"browse what happened during a series of commits that a collaborator has " -"added. You can also use a series of summarizing options with ``git log``." +"This option display the same information but with a diff directly following " +"each entry. This is very helpful for code review or to quickly browse what " +"happened during a series of commits that a collaborator has added. You can " +"also use a series of summarizing options with ``git log``." msgstr "" -"Цей параметр показує ту саму інформацію, але з різницею безпосередньо " -"після кожного запису. Це дуже корисно для перегляду коду або для швидкого" -" перегляду того, що сталося під час серії коммітів, доданих співавторами." -" Ви також можете скористатися низкою параметрів підсумовування за " -"допомогою ``git log``." +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " +"кожного запису. Це дуже корисно для перегляду коду або для швидкого " +"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " +"також можете скористатися низкою параметрів підсумовування за допомогою " +"``git log``." #: ../../src/vcs/basics.txt:419 msgid "" -"If you want to see some abbreviated stats for each commit, you can use " -"the ``--stat`` option:" +"If you want to see some abbreviated stats for each commit, you can use the " +"``--stat`` option:" msgstr "" -"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви " -"можете скористатися опцією ``--stat``:" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " +"скористатися опцією ``--stat``:" #: ../../src/vcs/basics.txt:443 msgid "" -"Another really useful option is ``--pretty``. This option changes the log" -" output to formats other that the default. A few prebuilt option values " -"are available for you to use. The ``oneline`` value for this option " -"prints each commit on a single line, which is useful if you're look a lot" -" of commits. In addition, the ``short``, ``full``, and ``fuller`` values " -"show the output in roughly the same format but with less or more " -"information." +"Another really useful option is ``--pretty``. This option changes the log " +"output to formats other that the default. A few prebuilt option values are " +"available for you to use. The ``oneline`` value for this option prints each " +"commit on a single line, which is useful if you're look a lot of commits. In " +"addition, the ``short``, ``full``, and ``fuller`` values show the output in " +"roughly the same format but with less or more information." msgstr "" "Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " -"формат виведення журналу на формат, відмінний від стандартного. Ви можете" -" скористатися кількома готовими значеннями цього параметра. Значення " -"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, " -"що є корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " -"``short``, ``full`` і ``fuller`` показують виведення у приблизно " -"однаковому форматі, але з меншою або більшою кількістю інформації." +"формат виведення журналу на формат, відмінний від стандартного. Ви можете " +"скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " +"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " +"форматі, але з меншою або більшою кількістю інформації." #: ../../src/vcs/basics.txt:476 msgid "Specifier" @@ -698,19 +692,19 @@ msgstr "Тема" #: ../../src/vcs/basics.txt:509 msgid "" -"The ``oneline`` and ``format`` option values are particularly useful with" -" another ``log`` option called ``--graph``. This option adds a nice " -"little ASCII graph showing your branch and merge history:" +"The ``oneline`` and ``format`` option values are particularly useful with " +"another ``log`` option called ``--graph``. This option adds a nice little " +"ASCII graph showing your branch and merge history:" msgstr "" "Значення параметрів ``online`` і ``format`` особливо корисні з іншим " "параметром ``log``, який називається ``--graph``. Цей параметр додає " -"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок" -" і злиття:" +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " +"злиття:" #: ../../src/vcs/basics.txt:538 msgid "" -"There are many more output-formatting options to ``git log``. Common " -"options to ``git log`` are:" +"There are many more output-formatting options to ``git log``. Common options " +"to ``git log`` are:" msgstr "" "Існує набагато більше варіантів форматування виводу для ``git log``. " "Загальними параметрами ``git log`` є наступні:" @@ -745,8 +739,7 @@ msgstr "--shortstat" #: ../../src/vcs/basics.txt:548 msgid "" -"Display only the changed/insertions/deletions line from the --stat " -"command." +"Display only the changed/insertions/deletions line from the --stat command." msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." #: ../../src/vcs/basics.txt:551 @@ -763,8 +756,8 @@ msgstr "--name-status" #: ../../src/vcs/basics.txt:554 msgid "" -"Show the list of files affected with added/modified/deleted information " -"as well." +"Show the list of files affected with added/modified/deleted information as " +"well." msgstr "" "Також покажіть список файлів, яких торкнулася додана/змінена/видалена " "інформація." @@ -775,11 +768,9 @@ msgstr "--abbrev-commit" #: ../../src/vcs/basics.txt:557 msgid "" -"Show only the first few characters of the SHA-1 checksum instead of all " -"40." +"Show only the first few characters of the SHA-1 checksum instead of all 40." msgstr "" -"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх" -" 40." +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." #: ../../src/vcs/basics.txt:560 msgid "--relative-date" @@ -787,11 +778,11 @@ msgstr "--relative-date" #: ../../src/vcs/basics.txt:560 msgid "" -"Display the date in a relative format (for example, \"2 weeks ago\") " -"instead of using the full date format." +"Display the date in a relative format (for example, \"2 weeks ago\") instead " +"of using the full date format." msgstr "" -"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") " -"замість повного формату дати." +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " +"повного формату дати." #: ../../src/vcs/basics.txt:563 msgid "--graph" @@ -799,11 +790,9 @@ msgstr "--graph" #: ../../src/vcs/basics.txt:563 msgid "" -"Display an ASCII graph of the branch and merge history beside the log " -"output." +"Display an ASCII graph of the branch and merge history beside the log output." msgstr "" -"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням " -"журналу." +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." #: ../../src/vcs/basics.txt:566 msgid "--pretty" @@ -811,8 +800,8 @@ msgstr "--pretty" #: ../../src/vcs/basics.txt:566 msgid "" -"Show commits in an alternate format. Option values include oneline, " -"short, full, fuller, and format (where you specify your own format)." +"Show commits in an alternate format. Option values include oneline, short, " +"full, fuller, and format (where you specify your own format)." msgstr "" "Показувати комміти в альтернативному форматі. Значення опції включають: " "online, short, full, fuller і format (де ви можете вказати свій власний " @@ -824,7 +813,8 @@ msgstr "--oneline" #: ../../src/vcs/basics.txt:570 msgid "Shorthand for --pretty=oneline --abbrev-commit used together." -msgstr "Скорочення для --pretty=online --abbrev-commit, що використовується разом." +msgstr "" +"Скорочення для --pretty=online --abbrev-commit, що використовується разом." #: ../../src/vcs/basics.txt:575 msgid "Limiting log output" @@ -833,50 +823,50 @@ msgstr "Обмеження виводу журналу" #: ../../src/vcs/basics.txt:577 msgid "" "In addition to output-formatting options, ``git log`` takes a number of " -"useful limiting options; that is options that let you show only a subset " -"of commits. You've seen one such option already -- the ``-`` " -"(e.g. ``-2`` or ``-10``) option, which displays only the given number of " -"latest commits." +"useful limiting options; that is options that let you show only a subset of " +"commits. You've seen one such option already -- the ``-`` (e.g. " +"``-2`` or ``-10``) option, which displays only the given number of latest " +"commits." msgstr "" "На додаток до параметрів форматування виводу, ``git log`` приймає ряд " "корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " -"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - " -"``-<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" +"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " "кількість останніх коммітів." #: ../../src/vcs/basics.txt:591 msgid "" -"However, the time-limiting options such as ``--since`` and ``--until`` " -"are very useful. For example, the command to get the list of commits made" -" in the last two weeks:" +"However, the time-limiting options such as ``--since`` and ``--until`` are " +"very useful. For example, the command to get the list of commits made in the " +"last two weeks:" msgstr "" -"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і " -"``--until``. Наприклад, команда для отримання списку коммітів, зроблених " -"за останні два тижні:" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" +"until``. Наприклад, команда для отримання списку коммітів, зроблених за " +"останні два тижні:" #: ../../src/vcs/basics.txt:599 msgid "" -"This command works with lots of formats - you can specify a specific date" -" like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"This command works with lots of formats - you can specify a specific date " +"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " "minutes ago\"``." msgstr "" -"Ця команда працює з багатьма форматами - ви можете вказати конкретну " -"дату, наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 " -"роки 1 день 3 хвилини тому\"``." +"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " +"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " +"день 3 хвилини тому\"``." #: ../../src/vcs/basics.txt:602 msgid "" -"The last really useful option to pass to ``git log`` as a filter is a " -"path. If you specify a directory or file name, you can limit the log " -"output to commits that introduced a change to those files. This is always" -" the last option and is generally preceded by double dashes (``--``) to " -"separate the paths from the options:" +"The last really useful option to pass to ``git log`` as a filter is a path. " +"If you specify a directory or file name, you can limit the log output to " +"commits that introduced a change to those files. This is always the last " +"option and is generally preceded by double dashes (``--``) to separate the " +"paths from the options:" msgstr "" -"Останньою дійсно корисною опцією, яку можна передати ``git log`` як " -"фільтр, є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете " -"обмежити виведення журналу лише тими комітами, які внесли зміни до цих " -"файлів. Це завжди останній параметр, і йому зазвичай передують подвійні " -"тире (``--``), щоб відокремити шлях від параметрів:" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " +"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " +"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " +"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " +"щоб відокремити шлях від параметрів:" #: ../../src/vcs/basics.txt:621 msgid "Undoing things" @@ -888,16 +878,16 @@ msgstr "На будь-якому етапі ви можете захотіти #: ../../src/vcs/basics.txt:625 msgid "" -"One of the common undos takes place when you commit too early and " -"possibly forget to add some files, or you mess up your commit message. If" -" you want to redo that commit, make the additional changes you forgot, " -"stage them, and commit again using the ``--amend`` option:" +"One of the common undos takes place when you commit too early and possibly " +"forget to add some files, or you mess up your commit message. If you want to " +"redo that commit, make the additional changes you forgot, stage them, and " +"commit again using the ``--amend`` option:" msgstr "" -"Одне з найпоширеніших випадків скасування відбувається, коли ви " -"коммітуєте занадто рано і, можливо, забуваєте додати деякі файли, або ви " -"псуєте своє повідомлення про коммітування. Якщо ви хочете повторити " -"фіксацію, внесіть додаткові зміни, про які ви забули, збережіть їх і " -"зафіксуйте ще раз, використовуючи опцію ``--amend``:" +"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " +"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " +"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " +"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " +"використовуючи опцію ``--amend``:" #: ../../src/vcs/basics.txt:634 msgid "E.g." @@ -911,13 +901,13 @@ msgstr "Скасування додавання файла до індексу" msgid "" "The next two sections demonstrate how to work with your staging area and " "working directory changes. The nice part is that the command you use to " -"determine the state of those two areas also reminds you how to undo " -"changes to them." +"determine the state of those two areas also reminds you how to undo changes " +"to them." msgstr "" -"У наступних двох розділах продемонстровано, як працювати зі змінами у " -"вашій збірці та робочому каталозі. Приємним моментом є те, що команда, за" -" допомогою якої ви визначаєте стан цих двох областей, також нагадує вам " -"про те, як скасувати внесені до них зміни." +"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " +"збірці та робочому каталозі. Приємним моментом є те, що команда, за " +"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " +"те, як скасувати внесені до них зміни." #: ../../src/vcs/basics.txt:676 msgid "Unmodifiyng a modified file" @@ -925,15 +915,14 @@ msgstr "Скасування модифікації зміненого файл #: ../../src/vcs/basics.txt:678 msgid "" -"What if you realize that you don't want to keep your changes to some " -"file? You can easily unmodify it -- **revert** it back to what it looked " -"like when you last committed. ``git status`` also tells you how to do " -"that:" +"What if you realize that you don't want to keep your changes to some file? " +"You can easily unmodify it -- **revert** it back to what it looked like when " +"you last committed. ``git status`` also tells you how to do that:" msgstr "" -"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь " -"файлі? Ви можете легко скасувати зміни - **повернути** його до того, як " -"він виглядав під час останнього компонування. ``git status`` також покаже" -" вам, як це зробити:" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " +"Ви можете легко скасувати зміни - **повернути** його до того, як він " +"виглядав під час останнього компонування. ``git status`` також покаже вам, " +"як це зробити:" #: ../../src/vcs/basics.txt:686 msgid "It tells you pretty explicitly how to discard the changes you've make." @@ -949,23 +938,22 @@ msgid "" "version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " "reset`` for many undo operations." msgstr "" -"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0," -" Git використовуватиме ``git restore`` замість ``git reset`` для багатьох" -" операцій скасування." +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " +"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " +"операцій скасування." #: ../../src/vcs/basics.txt:737 msgid "" -"It’s important to understand that git restore is a dangerous " -"command. Any local changes you made to that file are gone -- Git just " -"replaced that file with the last staged or committed version. Don't ever " -"use this command unless you absolutely know that you don’t want those " -"unsaved local changes." +"It’s important to understand that git restore is a dangerous command. " +"Any local changes you made to that file are gone -- Git just replaced that " +"file with the last staged or committed version. Don't ever use this command " +"unless you absolutely know that you don’t want those unsaved local changes." msgstr "" -"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. " -"Усі локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git " -"просто замінить цей файл на останню версію, що перебуває у стадії " -"виконання або фіксації. Ніколи не використовуйте цю команду, якщо ви " -"точно не знаєте, що вам не потрібні ці незбережені локальні зміни." +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " +"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " +"замінить цей файл на останню версію, що перебуває у стадії виконання або " +"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " +"вам не потрібні ці незбережені локальні зміни." #: ../../src/vcs/branch.txt:-1 msgid "version, control, system, vcs, git, branch, merge, cherry-pick" @@ -981,27 +969,27 @@ msgstr "Про гілки" #: ../../src/vcs/branch.txt:13 msgid "" -"To really understand the way Git does branching, we need to take a step " -"back and examine how Git stores its data. Git doesn't store data as a " -"series of changesets or differences, but instead as a series of " -"snapshots. When you make a commit, Git stores a commit object that " -"contains a pointer to the snapshot of the content you staged. This object" -" also contains the author's name and email address, the message that you " -"typed, and pointers to the commit or commits that directly came before " -"this commit (its parent or parents): zero parents for the initial commit," -" one parent for a normal commit, and multiple parents for a commit that " -"results from a merge of two or more branches." -msgstr "" -"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам " -"потрібно зробити крок назад і розглянути, як Git зберігає свої дані. Git " -"зберігає дані не у вигляді серії наборів змін або відмінностей, а у " -"вигляді серії знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, " -"який містить вказівник на створений вами знімок вмісту. Цей об'єкт також " -"містить ім'я та адресу електронної пошти автора, повідомлення, яке ви " -"набрали, і вказівники на комміт або комміти, які безпосередньо передували" -" цьому комміту (його батька або батьків): нульовий батько для початкового" -" комміту, один батько для звичайного комміту і кілька батьків для " -"комміту, який є результатом злиття двох або більше гілок." +"To really understand the way Git does branching, we need to take a step back " +"and examine how Git stores its data. Git doesn't store data as a series of " +"changesets or differences, but instead as a series of snapshots. When you " +"make a commit, Git stores a commit object that contains a pointer to the " +"snapshot of the content you staged. This object also contains the author's " +"name and email address, the message that you typed, and pointers to the " +"commit or commits that directly came before this commit (its parent or " +"parents): zero parents for the initial commit, one parent for a normal " +"commit, and multiple parents for a commit that results from a merge of two " +"or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " +"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " +"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " +"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " +"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " +"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " +"на комміт або комміти, які безпосередньо передували цьому комміту (його " +"батька або батьків): нульовий батько для початкового комміту, один батько " +"для звичайного комміту і кілька батьків для комміту, який є результатом " +"злиття двох або більше гілок." #: ../../src/vcs/branch.txt:28 msgid "" @@ -1011,11 +999,11 @@ msgid "" "made. Every time you commit, the master branch pointer moves forward " "automatically." msgstr "" -"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих " -"коммітів. Стандартна назва гілки у Git'і - master. Коли ви починаєте " -"робити комміти, ви отримуєте головну гілку, яка вказує на останній " -"зроблений вами комміт. Кожного разу, коли ви робите комміт, вказівник " -"головної гілки автоматично пересувається вперед." +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " +"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " +"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " +"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " +"пересувається вперед." #: ../../src/vcs/branch.txt:38 msgid "Branch management" @@ -1023,26 +1011,25 @@ msgstr "Управління гілками" #: ../../src/vcs/branch.txt:40 msgid "" -"The ``git branch`` command does more that create and delete branches. If " -"you run it with no arguments, you get a simple listing of your current " -"branches:" +"The ``git branch`` command does more that create and delete branches. If you " +"run it with no arguments, you get a simple listing of your current branches:" msgstr "" -"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки." -" Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " +"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " "поточних гілок:" #: ../../src/vcs/branch.txt:55 msgid "" -"To see all the branches that contain work you haven't yet merged in, use " -"``--no-merged`` option:" +"To see all the branches that contain work you haven't yet merged in, use ``--" +"no-merged`` option:" msgstr "" -"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися," -" використовуйте опцію ``--no-merged``:" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " +"використовуйте опцію ``--no-merged``:" #: ../../src/vcs/branch.txt:65 msgid "" -"Branches listed in the output has work, that isn't merged to current " -"branch. So, deleting them via ``git branch -d`` will fail." +"Branches listed in the output has work, that isn't merged to current branch. " +"So, deleting them via ``git branch -d`` will fail." msgstr "" "У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " "гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." @@ -1056,20 +1043,20 @@ msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." msgstr "" -"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший" -" з них - використання команди ``git branch``." +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " +"них - використання команди ``git branch``." #: ../../src/vcs/branch.txt:78 msgid "" -"Pointer to a parent commit is optional. By default the parent commit is " -"set to the latest one available (HEAD pointer) at the moment of the " -"branch creation. You can also switch to the newly created branch just " -"after its creation using:" +"Pointer to a parent commit is optional. By default the parent commit is set " +"to the latest one available (HEAD pointer) at the moment of the branch " +"creation. You can also switch to the newly created branch just after its " +"creation using:" msgstr "" "Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " -"батьківський коміт встановлюється на найновіший доступний (вказівник " -"HEAD) на момент створення гілки. Ви також можете переключитися на " -"новостворену гілку одразу після її створення за допомогою:" +"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " +"на момент створення гілки. Ви також можете переключитися на новостворену " +"гілку одразу після її створення за допомогою:" #: ../../src/vcs/branch.txt:88 msgid "Switching branches" @@ -1085,17 +1072,17 @@ msgstr "Основи розгалуження та злиття" #: ../../src/vcs/branch.txt:111 msgid "" -"First, let's say you're working on your project and have a couple of " -"commits already on the ``master`` branch. You've decided that you're " -"going to work on issue #53 in whatever issue-tracking system your company" -" uses. To create a new branch and switch to it at the same time, you can " -"run the ``git checkout`` command with the ``-b`` switch:" +"First, let's say you're working on your project and have a couple of commits " +"already on the ``master`` branch. You've decided that you're going to work " +"on issue #53 in whatever issue-tracking system your company uses. To create " +"a new branch and switch to it at the same time, you can run the ``git " +"checkout`` command with the ``-b`` switch:" msgstr "" -"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте " -"кілька комітів на гілці ``master``. Ви вирішили, що будете працювати над " -"issue #53 в будь-якій системі відстеження проблем, яку використовує ваша " -"компанія. Щоб створити нову гілку і одночасно переключитися на неї, ви " -"можете виконати команду ``git checkout`` з ключем ``-b``:" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " +"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " +"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " +"створити нову гілку і одночасно переключитися на неї, ви можете виконати " +"команду ``git checkout`` з ключем ``-b``:" #: ../../src/vcs/branch.txt:122 msgid "This is shorthand for:" @@ -1104,24 +1091,22 @@ msgstr "Це скорочено означає:" #: ../../src/vcs/branch.txt:129 msgid "" "In deed this creates a new branch pointer, aimed to the latest commit " -"present on ``master`` branch. But, from now your branch is " -"``feature/issue53``. So, doing commits moves the feature branch pointer " -"forward, because you have it checkout out (that is, your ``HEAD`` is " -"pointing to it)." +"present on ``master`` branch. But, from now your branch is ``feature/" +"issue53``. So, doing commits moves the feature branch pointer forward, " +"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." msgstr "" -"Насправді це створить новий покажчик гілки, спрямований на останню " -"фіксацію, наявну у гілці ``master``. Але відтепер ваша гілка називається " -"``feature/issue53``. Отже, виконання коммітів пересуває вказівник гілки " -"feature вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на " -"неї)." +"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " +"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" +"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " +"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." #: ../../src/vcs/branch.txt:134 msgid "" "Now, lets assume the \"issue53\" is fixed, and you need to bring commits " "from the ``feature/issue53`` branch back to ``master``." msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести " -"коміти з гілки ``feature/issue53`` назад до ``master``." +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " +"з гілки ``feature/issue53`` назад до ``master``." #: ../../src/vcs/branch.txt:138 msgid "Merging branches" @@ -1129,71 +1114,71 @@ msgstr "Злиття гілок" #: ../../src/vcs/branch.txt:140 msgid "" -"You need to switch back to ``master`` branch and use ``git merge`` " -"command, to merge changes (commits) from the source branch into target." +"You need to switch back to ``master`` branch and use ``git merge`` command, " +"to merge changes (commits) from the source branch into target." msgstr "" -"Вам потрібно повернутися до гілки ``master`` і скористатися командою " -"``git merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." +"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " +"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." #: ../../src/vcs/branch.txt:152 msgid "" "You'll notice phrase \"fast-forward\" in that merge. Because the commit " "pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the " -"pointer forward." +"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"forward." msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки " -"коміт, на який вказує гілка ``feature/issue53``, до якої ви приєдналися, " -"був безпосередньо перед останнім комітом у гілці ``master``, Git просто " -"пересуне вказівник вперед." +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " +"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " +"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " +"вказівник вперед." #: ../../src/vcs/branch.txt:156 msgid "" "Changes from ``feature/issue53`` are now in the snapshot of the commit " "pointed to by the ``master`` branch." msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який " -"вказує гілка ``master``." +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"гілка ``master``." #: ../../src/vcs/branch.txt:163 msgid "" -"Now, lets assume another developer started working on ``feature/issue54``" -" at the same time. And there are few commits on this feature branch. " -"Suppose, the developer decided that work on **issue54** is finished and " -"they want to merge their feature branch into ``master``." +"Now, lets assume another developer started working on ``feature/issue54`` at " +"the same time. And there are few commits on this feature branch. Suppose, " +"the developer decided that work on **issue54** is finished and they want to " +"merge their feature branch into ``master``." msgstr "" -"Тепер припустимо, що інший розробник почав працювати над " -"``feature/issue54`` в той самий час. І у цій гілці мало комітів. " -"Припустимо, що розробник вирішив, що робота над **issue54** завершена і " -"він хоче об'єднати свою гілку з ``master``." +"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " +"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " +"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " +"з ``master``." #: ../../src/vcs/branch.txt:179 msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this " -"case, development history has diverged from some older point. Because the" -" commit on the branch you're on isn't a direct ancestor of the branch " -"you're merging in, Git has to do some work. In this case, Git does a " -"simple three-way merge, using two snapshots pointed to by the branch tips" -" and the common ancestor of the two." +"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"development history has diverged from some older point. Because the commit " +"on the branch you're on isn't a direct ancestor of the branch you're merging " +"in, Git has to do some work. In this case, Git does a simple three-way " +"merge, using two snapshots pointed to by the branch tips and the common " +"ancestor of the two." msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку" -" історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " -"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви " -"виконуєте злиття, Git'у доведеться виконати деяку роботу. У цьому випадку" -" Git виконує просте тристороннє злиття, використовуючи два знімки, на які" -" вказують кінчики гілок, і їхнього спільного предка." +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " +"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " +"просте тристороннє злиття, використовуючи два знімки, на які вказують " +"кінчики гілок, і їхнього спільного предка." #: ../../src/vcs/branch.txt:186 msgid "" "Instead of just moving the branch pointer forward, Git creates a new " -"snapshot that results from this three-way merge and automatically creates" -" a new commit that points to it. This is referred to as a *merge commit*," -" and is a special in that it has more than one parent." +"snapshot that results from this three-way merge and automatically creates a " +"new commit that points to it. This is referred to as a *merge commit*, and " +"is a special in that it has more than one parent." msgstr "" "Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " -"новий знімок, який є результатом цього тристороннього злиття, і " -"автоматично створює новий коміт, який вказує на нього. Це називається " -"*коммітом злиття*, і він особливий тим, що має більше одного батька." +"новий знімок, який є результатом цього тристороннього злиття, і автоматично " +"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " +"і він особливий тим, що має більше одного батька." #: ../../src/vcs/branch.txt:196 msgid "Merge conflicts" @@ -1201,52 +1186,50 @@ msgstr "Конфлікти об'єднання" #: ../../src/vcs/branch.txt:198 msgid "" -"Occasionally, the merge process doesn't go smoothly. If the same part of " -"the same file is changed differently in the two branches you're merging, " -"Git won't be able to merge them cleanly." +"Occasionally, the merge process doesn't go smoothly. If the same part of the " +"same file is changed differently in the two branches you're merging, Git " +"won't be able to merge them cleanly." msgstr "" -"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, " -"які ви об'єднуєте, однакова частина одного і того ж файлу змінена " -"по-різному, Git не зможе об'єднати їх чисто." +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " +"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " +"Git не зможе об'єднати їх чисто." #: ../../src/vcs/branch.txt:209 msgid "" "Git hasn't automatically created a new merge commit. It has paused the " -"process while you resolve the conflict. If you want to see which files " -"are unmerged at any point after a merge conflict, you can run ``git " -"status``:" +"process while you resolve the conflict. If you want to see which files are " +"unmerged at any point after a merge conflict, you can run ``git status``:" msgstr "" -"Git не створив автоматично новий коміт злиття. Він призупинив процес, " -"поки ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було " -"від'єднано після конфлікту злиття, ви можете запустити ``git status``:" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " +"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " +"після конфлікту злиття, ви можете запустити ``git status``:" #: ../../src/vcs/branch.txt:228 msgid "" "Anything that has merge conflicts and hasn't been resolved is listed as " -"unmerged. Git adds standard conflict-resolution markers to the files that" -" have conflicts, so you can open them manually and resolve those " -"conflicts. Your file contains a section that looks something like this:" +"unmerged. Git adds standard conflict-resolution markers to the files that " +"have conflicts, so you can open them manually and resolve those conflicts. " +"Your file contains a section that looks something like this:" msgstr "" "Все, що має конфлікти злиття, які не було вирішено, позначається як не " -"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, " -"які мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці " -"конфлікти. Ваш файл містить розділ, який виглядає приблизно так:" +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " +"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " +"Ваш файл містить розділ, який виглядає приблизно так:" #: ../../src/vcs/branch.txt:243 msgid "" -"This means the version in ``HEAD`` (your ``master`` branch, because that " -"was what you had checked out when you ran merge command) is the top part " -"of that block (everything above the \"=======\"), while the version in " -"``vcs`` branch looks like everything in the bottom part. In order to " -"resolve the conflict, you have to either choose one side or the other or " -"merge the contents yourself." +"This means the version in ``HEAD`` (your ``master`` branch, because that was " +"what you had checked out when you ran merge command) is the top part of that " +"block (everything above the \"=======\"), while the version in ``vcs`` " +"branch looks like everything in the bottom part. In order to resolve the " +"conflict, you have to either choose one side or the other or merge the " +"contents yourself." msgstr "" -"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що " -"саме її ви перевірили, коли виконували команду merge) - це верхня частина" -" блоку (все, що вище \"=======\"), тоді як версія у гілці ``vcs`` " -"виглядає як все, що знаходиться у нижній частині. Для того, щоб вирішити " -"конфлікт, вам доведеться або стати на чийсь бік, або об'єднати вміст " -"самостійно." +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " +"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " +"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " +"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " +"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." #: ../../src/vcs/branch.txt:249 msgid "When conflicts are resolved, you can run ``git status`` command again:" @@ -1256,13 +1239,12 @@ msgstr "" #: ../../src/vcs/branch.txt:262 msgid "" -"If you're happy with that, and you verify that everything that had " -"conflicts has been staged, you can run ``git commit`` for finalize the " -"merge commit." +"If you're happy with that, and you verify that everything that had conflicts " +"has been staged, you can run ``git commit`` for finalize the merge commit." msgstr "" -"Якщо вас все влаштовує, і ви переконалися, що все, що викликало " -"конфлікти, було усунуто, ви можете запустити ``git commit`` для " -"остаточного завершення злиття." +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " +"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " +"злиття." #: ../../src/vcs/branch.txt:266 msgid "Rebasing" @@ -1273,8 +1255,8 @@ msgid "" "In Git, there two main ways to integrate changes from one branch into " "another: the ``merge`` and the ``rebase``." msgstr "" -"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу:" -" \"злиття\" і \"перебазування\"." +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " +"\"злиття\" і \"перебазування\"." #: ../../src/vcs/branch.txt:271 msgid "" @@ -1286,10 +1268,10 @@ msgstr "" #: ../../src/vcs/branch.txt:278 msgid "" -"The easiest way to integrate the branches, as we've already covered, is " -"the ``merge`` command. It performs a three-way merge between the two " -"latest branch snapshots, and the most recent common ancestor of the two, " -"creating a new snapshot (and commit)." +"The easiest way to integrate the branches, as we've already covered, is the " +"``merge`` command. It performs a three-way merge between the two latest " +"branch snapshots, and the most recent common ancestor of the two, creating a " +"new snapshot (and commit)." msgstr "" "Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " "``merge``. Вона виконує тристороннє злиття між двома останніми знімками " @@ -1297,41 +1279,39 @@ msgstr "" #: ../../src/vcs/branch.txt:283 msgid "" -"However, there is another way: you can take the patch of the change that " -"was introduced in ``master`` and reapply it on top of ``feature``. In " -"Git, this is called *rebasing*. With ``rebase`` command, you can take all" -" the changes that were committed on one branch and replay them on a " -"different branch." +"However, there is another way: you can take the patch of the change that was " +"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " +"is called *rebasing*. With ``rebase`` command, you can take all the changes " +"that were committed on one branch and replay them on a different branch." msgstr "" -"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено" -" до ``master``, і повторно застосувати його поверх ``feature``. У Git'і " -"це називається *rebasing*. За допомогою команди ``rebase`` ви можете " -"взяти всі зміни, які були зафіксовані на одній гілці, і відтворити їх на " -"іншій гілці." +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " +"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " +"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " +"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." #: ../../src/vcs/branch.txt:295 msgid "" -"This operation works by going to the common ancestor of the two branches," -" getting the diff introduced by each commit of the branch you're on, " -"saving those diffs to temporary files, resetting the current branch to " -"the same commit as the branch you are rebasing onto, and finally applying" -" each change in turn." +"This operation works by going to the common ancestor of the two branches, " +"getting the diff introduced by each commit of the branch you're on, saving " +"those diffs to temporary files, resetting the current branch to the same " +"commit as the branch you are rebasing onto, and finally applying each change " +"in turn." msgstr "" "Ця операція виконується шляхом переходу до спільного предка двох гілок, " "отримання відмінностей, внесених кожним коммітом гілки, на якій ви " "перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " -"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і," -" нарешті, застосування кожної зміни по черзі." +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " +"нарешті, застосування кожної зміни по черзі." #: ../../src/vcs/branch.txt:306 msgid "" -"Other maintainers prefer to rebase (or cherry-pick) contributed work on " -"top of their ``master`` branch, rather then merging it in, to keep a " -"mostly linear history." +"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " +"of their ``master`` branch, rather then merging it in, to keep a mostly " +"linear history." msgstr "" "Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, " -"щоб об'єднувати їх, щоб зберегти переважно лінійну історію." +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " +"об'єднувати їх, щоб зберегти переважно лінійну історію." #: ../../src/vcs/branch.txt:311 msgid "Cherry-picking" @@ -1340,21 +1320,21 @@ msgstr "Cherry-picking" #: ../../src/vcs/branch.txt:313 msgid "" "The other way to move introduced work from one branch to another is to " -"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. " -"It takes the patch that was introduced in a commit and tries to reapply " -"it on the branch you're currently on. This is useful if you have a number" -" of commits on a topic branch and you want to integrate only one of them," -" or if you only have one commit on a topic branch and you'd prefer to " -"cherry-pick it rather than run rebase." +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " +"takes the patch that was introduced in a commit and tries to reapply it on " +"the branch you're currently on. This is useful if you have a number of " +"commits on a topic branch and you want to integrate only one of them, or if " +"you only have one commit on a topic branch and you'd prefer to cherry-pick " +"it rather than run rebase." msgstr "" "Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " "\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " "відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви " -"зараз перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці " -"теми і хочете інтегрувати лише один з них, або якщо ви маєте лише один " -"комміт у гілці теми і вважаєте за краще вибрати його замість того, щоб " -"запускати rebase." +"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " +"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " +"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " +"rebase." #: ../../src/vcs/branch.txt:333 msgid "Branching strategies" @@ -1369,55 +1349,53 @@ msgid "" "branches, minimizes conflicts, and enables a smooth and structured " "development workflow." msgstr "" -"Стратегія розгалуження в системах контролю версій визначає, як " -"створюються, управляються та використовуються гілки в процесі розробки " -"проекту. Вона допомагає командам ефективно співпрацювати, ізолювати зміни" -" та організовувати зусилля з розробки. Хороша стратегія розгалуження " -"забезпечує чіткість у роботі з гілками, мінімізує конфлікти та уможливлює" -" плавний і структурований робочий процес розробки." +"Стратегія розгалуження в системах контролю версій визначає, як створюються, " +"управляються та використовуються гілки в процесі розробки проекту. Вона " +"допомагає командам ефективно співпрацювати, ізолювати зміни та " +"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " +"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " +"структурований робочий процес розробки." #: ../../src/vcs/branch.txt:342 msgid "" -"GitFlow is a popular branching strategy that provides a well-defined " -"model for managing branches in a Git repository. It was introduced by " -"Vincent Driessen and is based on the idea of using two main branches: " -"\"master\" and \"develop.\"" +"GitFlow is a popular branching strategy that provides a well-defined model " +"for managing branches in a Git repository. It was introduced by Vincent " +"Driessen and is based on the idea of using two main branches: \"master\" and " +"\"develop.\"" msgstr "" "GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " "модель для управління гілками в Git-репозиторії. Вона була представлена " -"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання " -"двох основних гілок: \"master\" і \"develop\"." +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " +"основних гілок: \"master\" і \"develop\"." #: ../../src/vcs/branch.txt:346 msgid "" -"**Master Branch**: The \"master\" branch represents the stable version of" -" the codebase. It should always contain production-ready code and be free" -" from any major issues. The \"master\" branch is protected, and only " -"release versions are merged into it." +"**Master Branch**: The \"master\" branch represents the stable version of " +"the codebase. It should always contain production-ready code and be free " +"from any major issues. The \"master\" branch is protected, and only release " +"versions are merged into it." msgstr "" -"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової" -" бази. Вона завжди повинна містити готовий до використання код і не " -"містити жодних серйозних проблем. Майстер-гілка захищена, і в неї " -"зливаються тільки релізні версії." +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " +"бази. Вона завжди повинна містити готовий до використання код і не містити " +"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " +"релізні версії." #: ../../src/vcs/branch.txt:350 msgid "" -"**Develop Branch**: The \"develop\" branch is where the ongoing " -"development and integration of features take place. It serves as the " -"integration branch for various feature branches and should also contain a" -" stable version of the code." +"**Develop Branch**: The \"develop\" branch is where the ongoing development " +"and integration of features take place. It serves as the integration branch " +"for various feature branches and should also contain a stable version of the " +"code." msgstr "" -"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається " -"постійна розробка та інтеграція функцій. Вона слугує інтеграційною гілкою" -" для різних функціональних гілок, а також повинна містити стабільну " -"версію коду." +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " +"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " +"функціональних гілок, а також повинна містити стабільну версію коду." #: ../../src/vcs/branch.txt:354 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " -"\"feature\" branch is created off the \"develop\" branch. These branches " -"are short-lived and exist only for the duration of the feature " -"development." +"\"feature\" branch is created off the \"develop\" branch. These branches are " +"short-lived and exist only for the duration of the feature development." msgstr "" "**Вітки функцій**: Для кожної нової функції або виправлення помилки " "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " @@ -1426,8 +1404,8 @@ msgstr "" #: ../../src/vcs/branch.txt:357 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " -"ready for a release, a \"release\" branch is created. The release branch " -"is used for testing, bug fixing, and preparing for deployment." +"ready for a release, a \"release\" branch is created. The release branch is " +"used for testing, bug fixing, and preparing for deployment." msgstr "" "**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " "створюється гілка \"release\". Релізна гілка використовується для " @@ -1440,25 +1418,23 @@ msgid "" "allows for a quick fix without affecting ongoing development on the " "\"develop\" branch." msgstr "" -"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну " -"проблему, на основі основної гілки створюється гілка \"hotfix\". Це " -"дозволяє швидко виправити проблему, не впливаючи на поточну розробку на " -"гілці \"develop\"." +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " +"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " +"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." #: ../../src/vcs/branch.txt:365 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " -"remain stable, and new features and bug fixes are integrated smoothly " -"before being released. This strategy is particularly useful for projects " -"with regular releases and a team working on multiple features " -"concurrently." +"remain stable, and new features and bug fixes are integrated smoothly before " +"being released. This strategy is particularly useful for projects with " +"regular releases and a team working on multiple features concurrently." msgstr "" "GitFlow забезпечує структурований підхід до управління розгалуженням у " "середовищі спільної розробки. Він гарантує, що основні гілки залишаються " -"стабільними, а нові функції та виправлення помилок плавно інтегруються " -"перед випуском. Ця стратегія особливо корисна для проектів з регулярними " -"випусками і командою, яка працює над декількома функціями одночасно." +"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " +"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " +"і командою, яка працює над декількома функціями одночасно." #: ../../src/vcs/github.txt:-1 msgid "version, control, system, vcs, git, github" @@ -1483,15 +1459,15 @@ msgstr "Налаштування та конфігурація акаунта" #: ../../src/vcs/github.txt:18 msgid "" "The first thing you need to do is set up a free user account. Visit " -"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through " -"the account creation process. Just follow the hints and provide an email " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " +"account creation process. Just follow the hints and provide an email " "address, username and a strong password." msgstr "" "Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " -"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\"." -" GitHub проведе вас через процес створення облікового запису. Просто " -"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я " -"користувача та надійний пароль." +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " +"GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " +"та надійний пароль." #: ../../src/vcs/github.txt:24 msgid "About authentication to GitHub" @@ -1499,13 +1475,13 @@ msgstr "Про автентифікацію на GitHub" #: ../../src/vcs/github.txt:27 msgid "" -"Starting in March 2023 and through the end of 2023, GitHub gradually " -"began to require all users who contribute code on GitHub to enable two-" -"factor authentication (2FA)." +"Starting in March 2023 and through the end of 2023, GitHub gradually began " +"to require all users who contribute code on GitHub to enable two-factor " +"authentication (2FA)." msgstr "" -"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово " -"почав вимагати від усіх користувачів, які публікують код на GitHub, " -"увімкнути двофакторну автентифікацію (2FA)." +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " +"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " +"двофакторну автентифікацію (2FA)." #: ../../src/vcs/github.txt:32 msgid "Connect with SSH" @@ -1517,10 +1493,10 @@ msgid "" "(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " "using a private key file on your local machine." msgstr "" -"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх " -"за допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH " -"ви автентифікуєтесь за допомогою файлу приватного ключа на вашому " -"локальному комп'ютері." +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " +"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " +"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " +"комп'ютері." #: ../../src/vcs/github.txt:39 msgid "Generating a new SSH key" @@ -1528,13 +1504,13 @@ msgstr "Генерація нового SSH-ключа" #: ../../src/vcs/github.txt:41 msgid "" -"You can generate a new SSH key on your local machine. After you do that, " -"you can add the **public** key to your account on GitHub to enable " +"You can generate a new SSH key on your local machine. After you do that, you " +"can add the **public** key to your account on GitHub to enable " "authentication for Git operations over SSH." msgstr "" -"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після " -"цього ви можете додати **public** ключ до свого облікового запису на " -"GitHub, щоб увімкнути автентифікацію для операцій з Git'ом через SSH." +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " +"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " +"увімкнути автентифікацію для операцій з Git'ом через SSH." #: ../../src/vcs/github.txt:45 msgid "Open terminal (git-bash will suite for Windows users)" @@ -1554,19 +1530,17 @@ msgstr "" #: ../../src/vcs/github.txt:60 msgid "" -"When you're prompted to \"Enter a file in which to save the key\", you " -"can press **Enter** to accept the default file location." +"When you're prompted to \"Enter a file in which to save the key\", you can " +"press **Enter** to accept the default file location." msgstr "" "Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " "натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." #: ../../src/vcs/github.txt:67 msgid "" -"Type a secure passphrase, if you want -- this is an extra layer of " -"security." +"Type a secure passphrase, if you want -- this is an extra layer of security." msgstr "" -"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень " -"безпеки." +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." #: ../../src/vcs/github.txt:75 msgid "This will create a new SSH key, using the provided email as label." @@ -1576,8 +1550,8 @@ msgstr "" #: ../../src/vcs/github.txt:77 msgid "" -"Navigate to ssh key location -- \".ssh\" folder at your homedir by " -"default and ensure there are two files generated:" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " +"and ensure there are two files generated:" msgstr "" "Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " "каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" @@ -1588,7 +1562,8 @@ msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощ #: ../../src/vcs/github.txt:81 msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" -msgstr "**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." +msgstr "" +"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." #: ../../src/vcs/github.txt:84 msgid "" @@ -1600,11 +1575,11 @@ msgstr "" #: ../../src/vcs/github.txt:87 msgid "" -"The public key is what you add to servers or services to which you want " -"to authenticate using your private key." +"The public key is what you add to servers or services to which you want to " +"authenticate using your private key." msgstr "" -"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких " -"ви хочете пройти автентифікацію за допомогою вашого закритого ключа." +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " +"хочете пройти автентифікацію за допомогою вашого закритого ключа." #: ../../src/vcs/github.txt:91 msgid "Adding your SSH key to the ssh-agent and GitHub" @@ -1612,16 +1587,16 @@ msgstr "Додавання SSH-ключа до ssh-агента та GitHub" #: ../../src/vcs/github.txt:93 msgid "" -"Before adding a new SSH key to the ssh-agent to manage your keys, you " -"should have checked for existing SSH keys and generated SSH keys." +"Before adding a new SSH key to the ssh-agent to manage your keys, you should " +"have checked for existing SSH keys and generated SSH keys." msgstr "" -"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам" -" слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " +"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." #: ../../src/vcs/github.txt:96 msgid "" -"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or " -"start it manually:" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " +"it manually:" msgstr "" "Переконайтеся, що ssh-агент запущено. Ви можете скористатися " "\"Автозапуском\" або запустити його вручну:" @@ -1632,32 +1607,32 @@ msgstr "Додайте ваш приватний ключ SSH до ssh-аген #: ../../src/vcs/github.txt:110 msgid "" -"Add the SSH public key to your account on GitHub. Copy the SSH public key" -" to your clipboard." +"Add the SSH public key to your account on GitHub. Copy the SSH public key to " +"your clipboard." msgstr "" -"Додайте публічний ключ SSH до свого облікового запису на GitHub. " -"Скопіюйте відкритий ключ SSH до буфера обміну." +"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " +"відкритий ключ SSH до буфера обміну." #: ../../src/vcs/github.txt:117 msgid "" -"Alternatively, if ``clip`` isn't working, just type public key content to" -" the terminal using ``cat``," +"Alternatively, if ``clip`` isn't working, just type public key content to " +"the terminal using ``cat``," msgstr "" -"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа" -" у терміналі за допомогою ``cat``," +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " +"терміналі за допомогою ``cat``," #: ../../src/vcs/github.txt:124 msgid "" -"or simply navigate to the file and open it with any text editor. At the " -"end, you need to copy public key content." +"or simply navigate to the file and open it with any text editor. At the end, " +"you need to copy public key content." msgstr "" "або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " "текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." #: ../../src/vcs/github.txt:127 msgid "" -"On GitHub, in the upper-right corner of any page, click your profile " -"photo, then click **Settings**." +"On GitHub, in the upper-right corner of any page, click your profile photo, " +"then click **Settings**." msgstr "" "На GitHub у правому верхньому куті будь-якої сторінки натисніть на " "фотографію свого профілю, а потім натисніть **Налаштування**." @@ -1667,8 +1642,8 @@ msgid "" "In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " "press **New SSH key** button." msgstr "" -"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і " -"натисніть кнопку **Новий ключ SSH**." +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " +"кнопку **Новий ключ SSH**." #: ../../src/vcs/github.txt:131 msgid "In the \"Title\" field, add a descriptive label for the new key." @@ -1703,28 +1678,40 @@ msgstr "Система контролю версій" #: ../../src/vcs/index.txt:10 msgid "" ":abbr:`VCS (Version Control Systems)` play an integral role in modern " -"software development. They allow multiple developers to work on a project" -" simultaneously without overwriting each other's changes. VCSs track the " +"software development. They allow multiple developers to work on a project " +"simultaneously without overwriting each other's changes. VCSs track the " "history of changes to the source code, making it possible to revert to " "previous states, compare versions, and more." msgstr "" +":abbr:`VCS (Version Control Systems)` відіграють невід'ємну роль у сучасній " +"розробці програмного забезпечення. Вони дозволяють декільком розробникам " +"працювати над проектом одночасно, не перезаписуючи зміни один одного. VCS " +"відстежують історію змін у вихідному коді, дозволяючи повертатися до " +"попередніх станів, порівнювати версії тощо." #: ../../src/vcs/index.txt:16 msgid "" "Among the VCSs available, Git stands out as one of the most popular and " -"powerful tools. It's used by small projects and large-scale software " -"alike, owing to its flexibility, distributed nature, and efficient " -"handling of codebase versions." +"powerful tools. It's used by small projects and large-scale software alike, " +"owing to its flexibility, distributed nature, and efficient handling of " +"codebase versions." msgstr "" +"Серед наявних VCS Git є одним з найпопулярніших і найпотужніших " +"інструментів. Його використовують як у невеликих проектах, так і у великому " +"програмному забезпеченні, завдяки його гнучкості, розподіленості та " +"ефективній роботі з версіями кодової бази." #: ../../src/vcs/index.txt:21 msgid "" -"In this part, you'll learn about the fundamentals of version control, how" -" to set up your environment for Git, dive into the basics of commits, " -"branches, and merges, understand the significance of tags, and finally, " -"explore how to collaborate using remote repositories and platforms like " -"GitHub." +"In this part, you'll learn about the fundamentals of version control, how to " +"set up your environment for Git, dive into the basics of commits, branches, " +"and merges, understand the significance of tags, and finally, explore how to " +"collaborate using remote repositories and platforms like GitHub." msgstr "" +"У цій частині ви дізнаєтеся про основи управління версіями, як налаштувати " +"середовище для Git'а, зануритеся в основи коммітів, гілок і злиття, " +"зрозумієте значення тегів і, нарешті, вивчите, як співпрацювати за допомогою " +"віддалених репозиторіїв і платформ на кшталт GitHub." #: ../../src/vcs/intro.txt:8 msgid "About version control (Git)" @@ -1732,35 +1719,34 @@ msgstr "Про контроль версій (Git)" #: ../../src/vcs/intro.txt:10 msgid "" -"Version control is a system that records changes to a file or set of " -"files over time so that you can recall specific versions later. It allows" -" you to revert selected files back to a previous state, revert the entire" -" project back to a previous state, compare changes over time, see who " -"last modified something that might be causing a problem, who introduced " -"an issue and when, and more." +"Version control is a system that records changes to a file or set of files " +"over time so that you can recall specific versions later. It allows you to " +"revert selected files back to a previous state, revert the entire project " +"back to a previous state, compare changes over time, see who last modified " +"something that might be causing a problem, who introduced an issue and when, " +"and more." msgstr "" -"Контроль версій - це система, яка реєструє зміни у файлі або наборі " -"файлів з плином часу, щоб ви могли пізніше згадати конкретні версії. Він " -"дозволяє повернути вибрані файли до попереднього стану, повернути весь " -"проект до попереднього стану, порівняти зміни в часі, побачити, хто " -"востаннє змінював щось, що може спричинити проблему, хто і коли створив " -"проблему, тощо." +"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " +"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " +"повернути вибрані файли до попереднього стану, повернути весь проект до " +"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " +"щось, що може спричинити проблему, хто і коли створив проблему, тощо." #: ../../src/vcs/intro.txt:16 msgid "" -"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't " -"just check out the latest snapshot of the files; rather, they fully " -"mirror the repository, including its full history. Thus, if any server " -"dies, and these systems were collaborating via that server, any of the " -"client repositories can be copied back up to the server to restore it. " -"Every clone is really a full backup of all the data." +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " +"check out the latest snapshot of the files; rather, they fully mirror the " +"repository, including its full history. Thus, if any server dies, and these " +"systems were collaborating via that server, any of the client repositories " +"can be copied back up to the server to restore it. Every clone is really a " +"full backup of all the data." msgstr "" "У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " -"перевіряють останній знімок файлів, а повністю дзеркально копіюють " -"сховище, включно з його повною історією. Таким чином, якщо якийсь сервер " -"вийде з ладу, а ці системи працювали через нього, будь-який з клієнтських" -" репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. " -"Кожен клон - це фактично повна резервна копія всіх даних." +"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " +"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " +"ладу, а ці системи працювали через нього, будь-який з клієнтських " +"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " +"клон - це фактично повна резервна копія всіх даних." #: ../../src/vcs/intro.txt:26 msgid "Distributed version control diagram" @@ -1773,30 +1759,30 @@ msgstr "Що таке Git?" #: ../../src/vcs/intro.txt:30 msgid "" "The major difference between Git and any other VCS is the way Git thinks " -"about its data. Conceptually, most other systems store information as a " -"list of file-based changes. Git doesn't think of or store its data this " -"way. Instead, Git thinks of its data more like a series of snapshots of a" -" miniature filesystem." +"about its data. Conceptually, most other systems store information as a list " +"of file-based changes. Git doesn't think of or store its data this way. " +"Instead, Git thinks of its data more like a series of snapshots of a " +"miniature filesystem." msgstr "" "Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " "Git'ом мислить про свої дані. Концептуально, більшість інших систем " -"зберігають інформацію у вигляді списку змін у файлах. Git не думає про " -"свої дані і не зберігає їх таким чином. Натомість, Git думає про свої " -"дані як про серію знімків мініатюрної файлової системи." +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " +"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " +"серію знімків мініатюрної файлової системи." #: ../../src/vcs/intro.txt:36 msgid "" -"This is an important distinction between Git and nearly all other VCSs. " -"It makes Git reconsider almost every aspect of version control that most " -"other systems copied from the previous generation. This makes Git more " -"like a mini filesystem with some incredibly powerful tools built on top " -"of it, rather than simply a VCS." +"This is an important distinction between Git and nearly all other VCSs. It " +"makes Git reconsider almost every aspect of version control that most other " +"systems copied from the previous generation. This makes Git more like a mini " +"filesystem with some incredibly powerful tools built on top of it, rather " +"than simply a VCS." msgstr "" "Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " -"Git'а переосмислити майже кожен аспект контролю версій, який більшість " -"інших систем скопіювали з попереднього покоління. Це робить Git більше " -"схожим на міні-файлову систему з деякими неймовірно потужними " -"інструментами, побудованими поверх неї, ніж на звичайну VCS." +"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " +"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " +"міні-файлову систему з деякими неймовірно потужними інструментами, " +"побудованими поверх неї, ніж на звичайну VCS." #: ../../src/vcs/intro.txt:45 msgid "Storing data as snapshots of the project over time" @@ -1809,9 +1795,9 @@ msgstr "Локальні операції" #: ../../src/vcs/intro.txt:49 msgid "" "Most operations in Git need only local files and resources to operate -- " -"generally no information is needed from another computer on your network." -" Because you have the entire history of the project right there on your " -"local disk, most operations seem almost instantaneous." +"generally no information is needed from another computer on your network. " +"Because you have the entire history of the project right there on your local " +"disk, most operations seem almost instantaneous." msgstr "" "Для виконання більшості операцій у Git'і потрібні лише локальні файли та " "ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " @@ -1824,13 +1810,13 @@ msgstr "Цілісність" #: ../../src/vcs/intro.txt:56 msgid "" -"Everything in Git is checksummed before it is stored and is then referred" -" to by that checksum. This means it's impossible to change the contents " -"of any file or directory without Git knowing about it." +"Everything in Git is checksummed before it is stored and is then referred to " +"by that checksum. This means it's impossible to change the contents of any " +"file or directory without Git knowing about it." msgstr "" -"Усе в Git'і має контрольну суму перед збереженням і потім посилається на " -"цю контрольну суму. Це означає, що неможливо змінити вміст будь-якого " -"файлу або каталогу без відома Git'а." +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " +"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " +"каталогу без відома Git'а." #: ../../src/vcs/intro.txt:61 msgid "Repository files states" @@ -1846,25 +1832,24 @@ msgstr "" #: ../../src/vcs/intro.txt:65 msgid "" -"Modified means that you have changed the file but have not committed it " -"to your database yet." +"Modified means that you have changed the file but have not committed it to " +"your database yet." msgstr "" -"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій " -"базі даних." +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " +"даних." #: ../../src/vcs/intro.txt:67 msgid "" -"Staged means that you have marked a modified file in its current version " -"to go into your next commit snapshot." +"Staged means that you have marked a modified file in its current version to " +"go into your next commit snapshot." msgstr "" -"Поетапний означає, що ви позначили змінений файл у його поточній версії, " -"щоб він потрапив до наступного знімка фіксації." +"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " +"він потрапив до наступного знімка фіксації." #: ../../src/vcs/intro.txt:69 msgid "Committed means that the data is safely stored in your local database." msgstr "" -"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі " -"даних." +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." #: ../../src/vcs/intro.txt:76 msgid "The basic Git workflow goes something like this:" @@ -1876,20 +1861,19 @@ msgstr "Ви змінюєте файли у вашому робочому дер #: ../../src/vcs/intro.txt:79 msgid "" -"You selectively stage just those changes you want to be part of your next" -" commit, which adds only those changes to the staging area." +"You selectively stage just those changes you want to be part of your next " +"commit, which adds only those changes to the staging area." msgstr "" -"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в " -"наступний коміт, що додає тільки ці зміни в область стабілізації." +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " +"коміт, що додає тільки ці зміни в область стабілізації." #: ../../src/vcs/intro.txt:81 msgid "" -"You do a commit, which takes the files as they are in the staging area " -"and stores that snapshot permanently to your Git directory." +"You do a commit, which takes the files as they are in the staging area and " +"stores that snapshot permanently to your Git directory." msgstr "" -"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони " -"знаходяться в області підготовки, і зберігає цей знімок назавжди у вашому" -" каталозі Git'а." +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " +"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." #: ../../src/vcs/intro.txt:85 msgid "Command line" @@ -1897,186 +1881,221 @@ msgstr "Командний рядок" #: ../../src/vcs/intro.txt:87 msgid "" -"There are a lot of different ways to use Git. There are the original " -"command-line tools, and there are many graphical user interfaces of " -"varying capabilities. For one, the command line is the only place you can" -" run all Git commands -- most of the GUIs implement only a partial subset" -" of Git functionality for simplicity. If you know how to run the command-" -"line version, you can probably also figure out how to run the GUI " -"version, while the opposite is not necessarily true. Also, while your " -"choice of graphical client is a matter of personal taste, all users will " -"have the command-line tools installed and available." +"There are a lot of different ways to use Git. There are the original command-" +"line tools, and there are many graphical user interfaces of varying " +"capabilities. For one, the command line is the only place you can run all " +"Git commands -- most of the GUIs implement only a partial subset of Git " +"functionality for simplicity. If you know how to run the command-line " +"version, you can probably also figure out how to run the GUI version, while " +"the opposite is not necessarily true. Also, while your choice of graphical " +"client is a matter of personal taste, all users will have the command-line " +"tools installed and available." msgstr "" "Існує багато різних способів використання Git'у. Існують оригінальні " "інструменти командного рядка, а також багато графічних інтерфейсів " -"користувача з різними можливостями. З одного боку, командний рядок є " -"єдиним місцем, де ви можете виконувати всі команди Git'а - більшість " -"графічних інтерфейсів реалізують лише часткову підмножину " -"функціональності Git'а для спрощення. Якщо ви знаєте, як запустити версію" -" з командного рядка, ви, ймовірно, також зможете з'ясувати, як запустити " -"версію з графічним інтерфейсом, хоча зворотне не обов'язково вірно. Крім " -"того, хоча ваш вибір графічного клієнта є справою особистого смаку, всі " -"користувачі матимуть встановлені та доступні інструменти командного " -"рядка." +"користувача з різними можливостями. З одного боку, командний рядок є єдиним " +"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " +"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " +"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " +"ймовірно, також зможете з'ясувати, як запустити версію з графічним " +"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " +"графічного клієнта є справою особистого смаку, всі користувачі матимуть " +"встановлені та доступні інструменти командного рядка." #: ../../src/vcs/pullrequest.txt:-1 -#, fuzzy msgid "Version Control System - Pull Requests" -msgstr "Система контролю версій" +msgstr "Система контролю версій - Запити на Злиття (Pull Requests)" #: ../../src/vcs/pullrequest.txt:-1 msgid "Vladyslav Ponomaryov" -msgstr "" +msgstr "Vladyslav Ponomaryov" #: ../../src/vcs/pullrequest.txt:-1 -#, fuzzy msgid "version, control, system, vcs, git, pull request, merge" -msgstr "version, control, system, vcs, git, setup" +msgstr "version, control, system, vcs, git, pull request, merge" #: ../../src/vcs/pullrequest.txt:9 msgid "Pull Request" -msgstr "" +msgstr "Запит на Злиття (Pull Request)" #: ../../src/vcs/pullrequest.txt:11 msgid "" -"Pull request let you tell others about changes you've pushed to a branch " -"in a repository on GitHub. Once a pull request is opened, you can discuss" -" and review the potential changes with collaborators and add follow-up " -"commits before your changes are merged into the base branch:cite:`github" -":about-pr`." +"Pull request let you tell others about changes you've pushed to a branch in " +"a repository on GitHub. Once a pull request is opened, you can discuss and " +"review the potential changes with collaborators and add follow-up commits " +"before your changes are merged into the base branch:cite:`github:about-pr`." msgstr "" +"Pull-запит дозволяє вам повідомити інших про зміни, які ви перенесли до " +"гілки в репозиторії на GitHub. Після того, як запит відкрито, ви можете " +"обговорити і переглянути потенційні зміни з колегами і додати подальші " +"коміти, перш ніж ваші зміни будуть злиті в базову гілку branch:cite:`github:" +"about-pr`." #: ../../src/vcs/pullrequest.txt:17 msgid "Draft pull requests" -msgstr "" +msgstr "Чернетки pull requests" #: ../../src/vcs/pullrequest.txt:19 msgid "" -"Draft pull requests are available in public repositories on GitHub. When " -"you create a pull request, you can choose to a create a pull request that" -" is ready for review or a draft pull request. Draft pull requests cannot " -"be merged. When you're ready to get feedback on your pull request, you " -"can mark your draft pull request as ready for review." +"Draft pull requests are available in public repositories on GitHub. When you " +"create a pull request, you can choose to a create a pull request that is " +"ready for review or a draft pull request. Draft pull requests cannot be " +"merged. When you're ready to get feedback on your pull request, you can mark " +"your draft pull request as ready for review." msgstr "" +"Чернетки pull-запитів доступні в публічних репозиторіях на GitHub. Коли ви " +"створюєте пул-запит, ви можете вибрати між створенням готового до розгляду " +"пул-запиту та чернетки пул-запиту. Чернетки пул-запитів не можна " +"об'єднувати. Коли ви будете готові отримати відгук на свій запит, ви можете " +"позначити свій чернетковий запит як готовий до розгляду." #: ../../src/vcs/pullrequest.txt:26 msgid "Difference between commits on compare and pull request pages" -msgstr "" +msgstr "Різниця між коммітами на сторінках порівняння та pull-запитів" #: ../../src/vcs/pullrequest.txt:28 msgid "" -"The compare and pull request pages use different methods to calculate the" -" diff for changed files:" +"The compare and pull request pages use different methods to calculate the " +"diff for changed files:" msgstr "" +"Сторінки запитів порівняння і витягування використовують різні методи для " +"обчислення різниці для змінених файлів:" #: ../../src/vcs/pullrequest.txt:31 msgid "" -"Compare pages show the diff between the tip of the head ref and the " -"current common ancestor (that is, the merge base) of the head and base " -"ref." +"Compare pages show the diff between the tip of the head ref and the current " +"common ancestor (that is, the merge base) of the head and base ref." msgstr "" +"На сторінках порівняння показано різницю між кінчиком головного референта і " +"поточним спільним предком (тобто, основою злиття) головного і основного " +"референта." #: ../../src/vcs/pullrequest.txt:33 msgid "" "Pull request pages show the diff between the tip of the head ref and the " -"common ancestor of the head and base ref at the time when the pull " -"request was created. Consequently, the merge base used for the comparison" -" might be different." +"common ancestor of the head and base ref at the time when the pull request " +"was created. Consequently, the merge base used for the comparison might be " +"different." msgstr "" +"Сторінки запитів на злиття показують різницю між вершиною головного рефа і " +"спільним предком головного і базового рефів на момент створення запиту на " +"злиття. Отже, база злиття, яка використовується для порівняння, може " +"відрізнятися." #: ../../src/vcs/pullrequest.txt:39 -#, fuzzy msgid "About comparing branches" -msgstr "Про гілки" +msgstr "Про порівняння гілок" #: ../../src/vcs/pullrequest.txt:41 msgid "" -"Pull requests display diffs to compare the changes you made in your topic" -" branch against the base branch that you want to merge your changes into." +"Pull requests display diffs to compare the changes you made in your topic " +"branch against the base branch that you want to merge your changes into." msgstr "" +"Витягніть запити на відображення відмінностей, щоб порівняти зміни, зроблені " +"у вашій гілці теми, з базовою гілкою, до якої ви хочете об'єднати ваші зміни." #: ../../src/vcs/pullrequest.txt:44 msgid "" "Rather that viewing the commits themselves, you can view the proposed " -"changes as they'll appear in the files once the pull request is merged. " -"The files appear in alphabetical order within the Files changed tab. " -"Additions to the files appear in green and are prefaced by a ``+`` sign " -"while content that has been removed appears in red and is prefaced by a " -"``-`` sign :cite:`github:compare-pr`." -msgstr "" +"changes as they'll appear in the files once the pull request is merged. The " +"files appear in alphabetical order within the Files changed tab. Additions " +"to the files appear in green and are prefaced by a ``+`` sign while content " +"that has been removed appears in red and is prefaced by a ``-`` sign :cite:" +"`github:compare-pr`." +msgstr "" +"Замість того, щоб переглядати самі комміти, ви можете переглянути " +"запропоновані зміни, які з'являться у файлах після об'єднання запиту на " +"витягування. Файли відображаються в алфавітному порядку на вкладці Змінені " +"файли. Доповнення до файлів відображаються зеленим кольором зі знаком ``+``, " +"тоді як вміст, який було вилучено, відображається червоним кольором зі " +"знаком ``-`` :cite:`github:compare-pr`." #: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 -#, fuzzy msgid "Creating a pull request" -msgstr "Отримання та витягування з віддаленого репозиторію" +msgstr "Створення pull-запиту" #: ../../src/vcs/pullrequest.txt:54 msgid "" -"Create a pull request to propose and collaborate on changes to a " -"repository. These changes are proposed in a *branch*, which ensures that " -"the default branch only contains finished and approved work:cite:`github" -":create-pr`." +"Create a pull request to propose and collaborate on changes to a repository. " +"These changes are proposed in a *branch*, which ensures that the default " +"branch only contains finished and approved work:cite:`github:create-pr`." msgstr "" +"Створіть pull request, щоб пропонувати зміни до сховища та співпрацювати над " +"ними. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " +"замовчуванням містить лише завершені та затверджені роботи:cite:`github:" +"create-pr`." #: ../../src/vcs/pullrequest.txt:61 msgid "" -"Use a branch to isolate development work without affecting other branches" -" in the repository. Each repository has one default branch, and can have " -"multiple other branches. You can merge a branch into another branch using" -" a pull request." +"Use a branch to isolate development work without affecting other branches in " +"the repository. Each repository has one default branch, and can have " +"multiple other branches. You can merge a branch into another branch using a " +"pull request." msgstr "" +"Використовуйте гілку, щоб ізолювати роботу над розробкою, не впливаючи на " +"інші гілки у сховищі. Кожне сховище має одну гілку за замовчуванням і може " +"мати декілька інших гілок. Ви можете об'єднати гілку з іншою гілкою за " +"допомогою pull-запиту." #: ../../src/vcs/pullrequest.txt:66 msgid "" -"Branches allow you to develop features, fix bugs, or safely experiment " -"with new ideas in a contained area of your repository." +"Branches allow you to develop features, fix bugs, or safely experiment with " +"new ideas in a contained area of your repository." msgstr "" +"Гілки дозволяють розробляти функції, виправляти помилки або безпечно " +"експериментувати з новими ідеями в обмеженій області вашого сховища." #: ../../src/vcs/pullrequest.txt:69 msgid "" "You always create a branch from an existing branch. Typically, you might " "create a new branch from the default branch of your repository." msgstr "" +"Ви завжди створюєте гілку з існуючої гілки. Зазвичай, ви можете створити " +"нову гілку з гілки за замовчуванням вашого сховища." #: ../../src/vcs/pullrequest.txt:75 msgid "On GitHub, navigate to the main page of the repository." -msgstr "" +msgstr "На GitHub перейдіть на головну сторінку репозиторію." #: ../../src/vcs/pullrequest.txt:76 msgid "Switch to \"Pull requests\" tab." -msgstr "" +msgstr "Перейдіть на вкладку \"Pull requests\"." #: ../../src/vcs/pullrequest.txt:77 msgid "Press \"New pull request\" button." -msgstr "" +msgstr "Натисніть кнопку \"New pull request\"." #: ../../src/vcs/pullrequest.txt:78 msgid "Select base and source branches." -msgstr "" +msgstr "Виберіть базову і вихідну гілки." #: ../../src/vcs/pullrequest.txt:79 msgid "Press \"Create pull request\" button." -msgstr "" +msgstr "Натисніть кнопку \"Create pull request\"." #: ../../src/vcs/pullrequest.txt:80 msgid "Provide a meaningful title and description." -msgstr "" +msgstr "Надайте змістовну назву та опис." #: ../../src/vcs/pullrequest.txt:81 msgid "Draft or create a pull request." -msgstr "" +msgstr "Створіть pull request або його чорнетку" #: ../../src/vcs/pullrequest.txt:83 msgid "" "To create pull request that is ready for review, click **Create Pull " "Request**." msgstr "" +"Щоб створити запит, готовий до перегляду, натисніть **Create Pull Request**." #: ../../src/vcs/pullrequest.txt:85 msgid "" -"To create a draft pull request, use the drop-down and select **Create " -"Draft Pull Request**, then click **Draft Pull Request**." +"To create a draft pull request, use the drop-down and select **Create Draft " +"Pull Request**, then click **Draft Pull Request**." msgstr "" +"Щоб створити чернетку запиту на вилучення, скористайтеся випадаючим списком " +"і виберіть **Create Draft Pull Request**, а потім натисніть **Draft Pull " +"Request**." #: ../../src/vcs/remotes.txt:3 msgid "Remotes" @@ -2084,22 +2103,22 @@ msgstr "Віддалені репозиторії" #: ../../src/vcs/remotes.txt:5 msgid "" -"To be able to collaborate on any Git project, you need to know how to " -"manage your remote repositories. Remote repositories are versions of your" -" project that are hosted on the Internet or network somewhere. You can " -"have several of them, each of which generally is either read-only or " -"read/write for you. Managing remotes includes knowing how to add remote " -"repositories, remove remote repositories that are no longer valid, manage" -" various branches and define them as being tracked or not, and more." -msgstr "" -"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам " -"потрібно знати, як керувати вашими віддаленими сховищами. Віддалені " -"сховища - це версії вашого проекту, розміщені десь в інтернеті або " -"мережі. Ви можете мати декілька таких сховищ, кожне з яких, як правило, " -"доступне лише для читання або читання/запису. Керування віддаленими " -"сховищами включає в себе вміння додавати віддалені сховища, видаляти " -"віддалені сховища, які більше не є дійсними, керувати різними гілками і " -"визначати їх як такі, що відстежуються чи ні, і багато іншого." +"To be able to collaborate on any Git project, you need to know how to manage " +"your remote repositories. Remote repositories are versions of your project " +"that are hosted on the Internet or network somewhere. You can have several " +"of them, each of which generally is either read-only or read/write for you. " +"Managing remotes includes knowing how to add remote repositories, remove " +"remote repositories that are no longer valid, manage various branches and " +"define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " +"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " +"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " +"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " +"або читання/запису. Керування віддаленими сховищами включає в себе вміння " +"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " +"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " +"чи ні, і багато іншого." #: ../../src/vcs/remotes.txt:21 msgid "Showing your remote" @@ -2115,18 +2134,17 @@ msgstr "" "Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " "команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " "віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " -"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає " -"серверу, з якого ви клонуєте:" +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " +"з якого ви клонуєте:" #: ../../src/vcs/remotes.txt:41 msgid "" -"This means we can pull contributions from any of these users pretty " -"easily. We may additionally have permission to push to one or more of " -"these." +"This means we can pull contributions from any of these users pretty easily. " +"We may additionally have permission to push to one or more of these." msgstr "" -"Це означає, що ми можемо досить легко отримувати внески від будь-якого з " -"цих користувачів. Крім того, ми можемо мати дозвіл на проштовхування до " -"одного або декількох з них." +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " +"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " +"або декількох з них." #: ../../src/vcs/remotes.txt:45 msgid "Adding remote repositories" @@ -2134,25 +2152,23 @@ msgstr "Додавання віддалених репозиторіїв" #: ../../src/vcs/remotes.txt:47 msgid "" -"To add a new remote Git repository as a shortname you can reference " -"easily, run ``git remote add ``:" +"To add a new remote Git repository as a shortname you can reference easily, " +"run ``git remote add ``:" msgstr "" -"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, " -"на яке можна легко посилатися, виконайте ``git remote add <назва> " -"<адреса>``:" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " +"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" #: ../../src/vcs/remotes.txt:61 msgid "" -"Now you can use the string \"personal\" on the command line in lieu of " -"the whole URL. ``master`` branch of \"https://github.com/shorodilov" -"/python-course\" is now accessible as ``personal/master``, while " -"shortname to the same branch in origin will be -- ``origin/master``." +"Now you can use the string \"personal\" on the command line in lieu of the " +"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" +"course\" is now accessible as ``personal/master``, while shortname to the " +"same branch in origin will be -- ``origin/master``." msgstr "" "Тепер ви можете використовувати рядок \"personal\" в командному рядку " -"замість повної URL-адреси. Гілка ``master`` в " -"\"https://github.com/shorodilov/python-course\" тепер доступна як " -"``personal/master``, тоді як скорочена назва тієї ж гілки в origin буде " -"-- ``origin/master``." +"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" +"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " +"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." #: ../../src/vcs/remotes.txt:67 msgid "Fetching and pulling from remotes" @@ -2161,41 +2177,41 @@ msgstr "Отримання та витягування з віддаленого #: ../../src/vcs/remotes.txt:69 msgid "" "To get data from remote project, you can run ``git fetch`` command. The " -"command goes out to that remote project and pulls down all the " -"information from that remote project that you don't have yet. After you " -"do this, you should have references to all the branches from that remote," -" which you can merge in or inspect at any time." +"command goes out to that remote project and pulls down all the information " +"from that remote project that you don't have yet. After you do this, you " +"should have references to all the branches from that remote, which you can " +"merge in or inspect at any time." msgstr "" -"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git" -" fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " -"інформацію з нього, якої ви ще не маєте. Після цього ви матимете " -"посилання на всі гілки з цього віддаленого проекту, які ви можете " -"об'єднати або переглянути у будь-який час." +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " +"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " +"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " +"переглянути у будь-який час." #: ../../src/vcs/remotes.txt:79 msgid "" -"If your current branch is set up to track a remote branch, you can use " -"``git pull`` command to automatically fetch and then merge that remote " -"branch into your current branch. By default, the ``git clone`` command " -"automatically sets up your local ``master`` branch to track the remote " -"``master`` branch (or whatever default remote branch)." +"If your current branch is set up to track a remote branch, you can use ``git " +"pull`` command to automatically fetch and then merge that remote branch into " +"your current branch. By default, the ``git clone`` command automatically " +"sets up your local ``master`` branch to track the remote ``master`` branch " +"(or whatever default remote branch)." msgstr "" "Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " "можете скористатися командою ``git pull`` для автоматичного отримання і " "подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " -"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну" -" гілку ``master`` на відстеження віддаленої гілки ``master`` (або " -"будь-якої іншої віддаленої гілки за замовчуванням)." +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " +"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " +"іншої віддаленої гілки за замовчуванням)." #: ../../src/vcs/remotes.txt:85 msgid "" -"From Git version 2.27 onward, ``git pull`` will give a warning if the " -"``pull.rebase`` variable is not set. Git will keep warning you until you " -"set the variable." +"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." +"rebase`` variable is not set. Git will keep warning you until you set the " +"variable." msgstr "" -"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо " -"змінну ``pull.rebase`` не встановлено. Git продовжуватиме видавати " -"попередження, доки ви не встановите змінну." +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " +"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " +"доки ви не встановите змінну." #: ../../src/vcs/remotes.txt:90 msgid "" @@ -2203,16 +2219,16 @@ msgid "" "create a merge commit): ``git config --global pull.rebase \"false\"``." msgstr "" "Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " -"вперед, якщо можливо, інакше створіть комміт злиття): ``git config " -"--global pull.rebase \"false\"``." +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " +"pull.rebase \"false\"``." #: ../../src/vcs/remotes.txt:93 msgid "" "If you want to rebase when pulling: ``git config --global pull.rebase " "\"true\"``." msgstr "" -"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global " -"pull.rebase \"true\"``." +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." +"rebase \"true\"``." #: ../../src/vcs/remotes.txt:97 msgid "Pushing to remotes" @@ -2220,29 +2236,27 @@ msgstr "Відправка до віддаленого репозиторію" #: ../../src/vcs/remotes.txt:99 msgid "" -"When you have your project at a point that you want to share, you have to" -" push it upstream. The command for this is simple: ``git push " +"When you have your project at a point that you want to share, you have to " +"push it upstream. The command for this is simple: ``git push " "``." msgstr "" "Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " -"потрібно перемістити його вгору за течією. Команда для цього проста: " -"``git push <віддалений> <гілка>``." +"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " +"push <віддалений> <гілка>``." #: ../../src/vcs/remotes.txt:106 msgid "" -"This command works only if you cloned from a server to which you have " -"write access and if nobody has pushed in the meantime. If you and someone" -" else clone at the same time and they push upstream and then you push " -"upstream, you push will rightly be rejected. You'll have to fetch their " -"work first and incorporate it into yours before you'll be allowed to " -"push." +"This command works only if you cloned from a server to which you have write " +"access and if nobody has pushed in the meantime. If you and someone else " +"clone at the same time and they push upstream and then you push upstream, " +"you push will rightly be rejected. You'll have to fetch their work first and " +"incorporate it into yours before you'll be allowed to push." msgstr "" "Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " -"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви " -"клонуєте одночасно з кимось іншим, і він зробить поштовх вище за течією, " -"а потім ви, ваш поштовх буде справедливо відхилено. Вам доведеться " -"спочатку отримати їхню роботу і включити її до своєї, перш ніж вам " -"дозволять проштовхувати." +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " +"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " +"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " +"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." #: ../../src/vcs/remotes.txt:113 msgid "Pushing a new branch to remote" @@ -2250,19 +2264,18 @@ msgstr "Переміщення нової гілки до віддаленого #: ../../src/vcs/remotes.txt:115 msgid "" -"In case you have created a local branch for some specific needs and you " -"want to share this branch, you need to set up track for this branch. This" -" can be done by using: ``git push --set-upstream origin " -"``. This will create a new remote branch and set up track " -"to your current local branch. There is a shortcut for this command: ``git" -" push -u origin ``." +"In case you have created a local branch for some specific needs and you want " +"to share this branch, you need to set up track for this branch. This can be " +"done by using: ``git push --set-upstream origin ``. This will " +"create a new remote branch and set up track to your current local branch. " +"There is a shortcut for this command: ``git push -u origin ``." msgstr "" "Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " -"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це " -"можна зробити за допомогою ``git push --set-upstream origin " -"<віддалена_гілка>``. Це створить нову віддалену гілку і налаштує трек до " -"вашої поточної локальної гілки. Для цієї команди існує комбінація клавіш:" -" ``git push -u origin <віддалена_гілка>``." +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " +"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " +"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " +"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " +"<віддалена_гілка>``." #: ../../src/vcs/remotes.txt:122 msgid "Inspecting a remote" @@ -2270,8 +2283,8 @@ msgstr "Перевірка віддаленого репозиторію" #: ../../src/vcs/remotes.txt:124 msgid "" -"If you want to see more information about a particular remote, you can " -"use the ``git remote show ``." msgstr "" -"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися " -"``git tag -d ``." +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " +"tag -d ``." #: ../../src/vcs/tagging.txt:117 msgid "Checking out tags" @@ -2511,28 +2521,27 @@ msgstr "Перевірка тегів" #: ../../src/vcs/tagging.txt:119 msgid "" -"If you want to view the versions of files a tag is pointing to, you can " -"do a ``git checkout`` of that tag, although this puts your repository in " +"If you want to view the versions of files a tag is pointing to, you can do a " +"``git checkout`` of that tag, although this puts your repository in " "\"detached HEAD\" state, which has some ill side effects:" msgstr "" "Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " -"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у " -"стан \"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " +"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" #: ../../src/vcs/tagging.txt:145 msgid "" -"In \"detached HEAD\" state, if you make changes and then create a commit," -" the tag will stay the same, but your new commit won’t belong to any " -"branch and will be unreachable, except by the exact commit hash. Thus, if" -" you need to make changes -- say you’re fixing a bug on an older version," -" for instance -- you will generally want to create a branch:" +"In \"detached HEAD\" state, if you make changes and then create a commit, " +"the tag will stay the same, but your new commit won’t belong to any branch " +"and will be unreachable, except by the exact commit hash. Thus, if you need " +"to make changes -- say you’re fixing a bug on an older version, for instance " +"-- you will generally want to create a branch:" msgstr "" -"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт," -" тег залишиться незмінним, але ваш новий коміт не належатиме до жодної " -"гілки і буде недоступним, окрім як за точним хешем коміту. Таким чином, " -"якщо вам потрібно внести зміни - скажімо, ви виправляєте ваду у старій " -"версії - вам, як правило, краще створити гілку:" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " +"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " +"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " +"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " +"як правило, краще створити гілку:" #~ msgid "version, control, system, vcs, git, history, commit" #~ msgstr "version, control, system, vcs, git, history, commit" - diff --git a/src/appx/assignments.txt b/src/appx/assignments.txt index 2617d1727..715232126 100644 --- a/src/appx/assignments.txt +++ b/src/appx/assignments.txt @@ -29,7 +29,7 @@ What to exclude - Virtual environment, typically ``venv`` or ``env`` folder - Byte compiled Python code (``__pycache__``) -- IDEA configurations, typically ``.vscode`` or ``.idea`` folder +- IDE configurations, typically ``.vscode`` or ``.idea`` folder - Database files, like ``db.sqlite3`` - Other stuff not related to the assignment directly @@ -54,7 +54,7 @@ Repository initialization - .gitignore - requirements.txt *(if applicable)* -#. *(Optional)* create a code base draft. This can be an empty module +#. *(Optional)* Create a code base draft. This can be an empty module like **main.py** or an empty :ref:`Django project `. #. Initialize a new repository using ``git init`` command. #. Set up **.gitignore** name patterns. From 73008790bb22daa2dc75db24d1b19ef182cf0466 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Sep 2023 11:23:00 +0300 Subject: [PATCH 195/689] Minor updates to VCS translations --- src/_locales/uk/LC_MESSAGES/vcs.po | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index b3d55a860..6357ee984 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-01 11:38+0300\n" -"PO-Revision-Date: 2023-09-04 16:12+0300\n" +"PO-Revision-Date: 2023-09-05 11:15+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -440,7 +440,7 @@ msgid "" "Standard glob patterns work, and will be applied recursively throughout the " "entire working tree." msgstr "" -"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " +"Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " "по всьому робочому дереву." #: ../../src/vcs/basics.txt:330 @@ -469,13 +469,14 @@ msgid "" "can also use two asterisks to match nested directories; a/\\*\\*/z would " "match *a/z*, *a/b/z*, *a/b/c/z*, and so on." msgstr "" -"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " -"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " -"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " -"(?) відповідає одному символу; а дужки, що містять символи, розділені " -"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " -"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " -"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +"Глобальні шаблони подібні до спрощених регулярних виразів, які " +"використовують оболонки. Зірочка (\\*) відповідає нулю або більше символів; " +"[ab] відповідає будь-якому символу всередині дужок (у цьому випадку a або " +"b); знак питання (?) відповідає одному символу; а дужки, що містять символи, " +"розділені дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому " +"випадку від 0 до 9). Ви також можете використовувати дві зірочки для " +"вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " +"так далі." #: ../../src/vcs/basics.txt:344 msgid "Viewing the commit history" @@ -2079,7 +2080,7 @@ msgstr "Надайте змістовну назву та опис." #: ../../src/vcs/pullrequest.txt:81 msgid "Draft or create a pull request." -msgstr "Створіть pull request або його чорнетку" +msgstr "Створіть pull request або його чорнетку." #: ../../src/vcs/pullrequest.txt:83 msgid "" From 4410ede46ac57456975489b87b68c379fdce72ee Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Sep 2023 11:34:11 +0300 Subject: [PATCH 196/689] Update project version and dependencies --- poetry.lock | 66 +++++++++++++++++++++++++------------------------- pyproject.toml | 4 +-- src/conf.py | 2 +- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0f92d9a15..831985408 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,14 +123,14 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -415,18 +415,18 @@ test = ["pytest"] [[package]] name = "pybtex-docutils" -version = "1.0.2" +version = "1.0.3" description = "A docutils backend for pybtex." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016"}, - {file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239"}, + {file = "pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b"}, + {file = "pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9"}, ] [package.dependencies] -docutils = ">=0.8" +docutils = ">=0.14" pybtex = ">=0.16" [[package]] @@ -518,19 +518,19 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.0.0" +version = "68.1.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, + {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -635,19 +635,19 @@ test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.2.2" +version = "1.3.0" description = "Read the Docs theme for Sphinx" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, - {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, + {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, + {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, ] [package.dependencies] docutils = "<0.19" -sphinx = ">=1.6,<7" +sphinx = ">=1.6,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -655,14 +655,14 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.6" +version = "1.0.7" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_applehelp-1.0.6-py3-none-any.whl", hash = "sha256:c0578efa23cab5a2f3aaa8af5691b952433f4fdfaac255befd3452448e7ea4a4"}, - {file = "sphinxcontrib_applehelp-1.0.6.tar.gz", hash = "sha256:a59274de7a952a99af36b8a5092352d9249279c0e3280b7dceaae8e15873c942"}, + {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, + {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, ] [package.dependencies] @@ -693,14 +693,14 @@ Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.4" +version = "1.0.5" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_devhelp-1.0.4-py3-none-any.whl", hash = "sha256:d4e20a17f78865d4096733989b5efa0d5e7743900e98e1f6ecd6f489380febc8"}, - {file = "sphinxcontrib_devhelp-1.0.4.tar.gz", hash = "sha256:4fd751c63dc40895ac8740948f26bf1a3c87e4e441cc008672abd1cb2bc8a3d1"}, + {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, + {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, ] [package.dependencies] @@ -712,14 +712,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.3" +version = "2.0.4" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_htmlhelp-2.0.3-py3-none-any.whl", hash = "sha256:abee4e6c5471203ad2fc40dc6a16ed99884a5d6b15a6f79c9269a7e82cf04149"}, - {file = "sphinxcontrib_htmlhelp-2.0.3.tar.gz", hash = "sha256:14358d0f88ccf58447f2b54343cdcc0012f32de2f8d27cf934fdbc0b362f9597"}, + {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, + {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, ] [package.dependencies] @@ -773,14 +773,14 @@ files = [ [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.5" +version = "1.0.6" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_qthelp-1.0.5-py3-none-any.whl", hash = "sha256:962730a6ad15d21fd6760b14c9e95c00a097413595aa6ee871dd9dfa4b002a16"}, - {file = "sphinxcontrib_qthelp-1.0.5.tar.gz", hash = "sha256:d31d1a1beaf3894866bb318fb712f1edc82687f1c06235a01e5b2c50c36d5c40"}, + {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, + {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, ] [package.dependencies] @@ -792,14 +792,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.7" +version = "1.1.9" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_serializinghtml-1.1.7-py3-none-any.whl", hash = "sha256:424164fc3a8b4355a29d5ea8b7f18199022d160c8f7b96e68bb6c50217729b87"}, - {file = "sphinxcontrib_serializinghtml-1.1.7.tar.gz", hash = "sha256:ca31afee32e1508cff4034e258060ce2c81a3b1c49e77da60fdb61f0e7a73c22"}, + {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, + {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index 4b504c98d..f61e6365c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "python-course" -version = "2023.06.dev" -description = "" +version = "2023.09.dev" +description = "Python training course materials" license = "MIT" authors = [ "Vladyslav Ponomaryov", diff --git a/src/conf.py b/src/conf.py index e6b3d8b2c..b8346255f 100644 --- a/src/conf.py +++ b/src/conf.py @@ -14,7 +14,7 @@ f"{datetime.now().year}, Python training course authors and contributors" authors = "Vladyslav Ponomaryov \\and " \ "Serhii Horodilov" -version = "2023.06.dev" +version = "2023.09.dev" # general configuration master_doc = root_doc = "index" From f2c4d3fc469c0bba0e5fb2d7b39bbb8eff69419f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 14 Sep 2023 15:51:08 +0300 Subject: [PATCH 197/689] Rebased 'feature/libms' onto 'devel' Conflicts: - src/_locales/uk/LC_MESSAGES/appx.po --- src/_locales/uk/LC_MESSAGES/oop.po | 2 +- src/appx/blog | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/oop.po b/src/_locales/uk/LC_MESSAGES/oop.po index 63d9c41fc..261c9d6b7 100644 --- a/src/_locales/uk/LC_MESSAGES/oop.po +++ b/src/_locales/uk/LC_MESSAGES/oop.po @@ -1,4 +1,4 @@ -# OBJECT-ORIENTED PROGRAMMING BLOCK TRANSLATION. +# OBJECT-ORIENTED PROGRAMMING TOPICS # # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training diff --git a/src/appx/blog b/src/appx/blog index 5d34b3fda..dfb023629 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit 5d34b3fdac1a0fceac294fc69bc50ad89b56846c +Subproject commit dfb023629d04fe427e9e00642f852b403b9b70f3 From a7d9dbac74445b0ecce6074990d6669e9ba1bea6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 14 Sep 2023 15:59:46 +0300 Subject: [PATCH 198/689] Add LibMS submodule Conflicts: - src/_locales/uk/LC_MESSAGES/appx.po --- .gitmodules | 3 + src/_locales/uk/LC_MESSAGES/appx.po | 1012 ++++++++++++++++++++++++++- src/appx/libms | 1 + 3 files changed, 1014 insertions(+), 2 deletions(-) create mode 160000 src/appx/libms diff --git a/.gitmodules b/.gitmodules index 57b47c5de..00959c024 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "src/appx/blog"] path = src/appx/blog url = git@github.com:edu-python-course/blog-spec +[submodule "src/appx/libms"] + path = src/appx/libms + url = git@github.com:edu-python-course/libms-spec.git diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index ff3df8153..d50027e42 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -738,7 +738,7 @@ msgstr "Коментар вимагає наявності дати створе msgid "Comment requires message text." msgstr "Коментар вимагає наявності тексту повідомлення." -#: ../../src/appx/blog/spec.rst:139 +#: ../../src/appx/blog/spec.rst:139 ../../src/appx/libms/spec.rst:220 msgid "Relationships" msgstr "Відносини" @@ -1096,6 +1096,7 @@ msgstr "" "повинна отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 +#: ../../src/appx/libms/spec.rst:296 msgid "username" msgstr "username" @@ -1104,10 +1105,12 @@ msgid "email" msgstr "email" #: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 +#: ../../src/appx/libms/spec.rst:299 msgid "password" msgstr "password" #: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 +#: ../../src/appx/libms/spec.rst:300 msgid "confirm password" msgstr "confirm password" @@ -1127,7 +1130,7 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../src/appx/blog/spec.rst:314 +#: ../../src/appx/blog/spec.rst:314 ../../src/appx/libms/spec.rst:347 msgid "title" msgstr "title" @@ -2193,6 +2196,1011 @@ msgstr "settings, environment, variables" msgid "Issue - System Environment PATH" msgstr "Проблема - System Environment PATH" +#: ../../src/appx/libms/spec.rst:3 +msgid "Library Management System - Specification" +msgstr "" + +#: ../../src/appx/libms/spec.rst:5 +msgid "" +"The Library Management System is a Django-based web application that offers " +"a digital platform for managing and interacting with a library's collection. " +"It streamlines the processes of book lending, returns, and inventory " +"management, while ensuring easy access for users and librarians alike. " +"Through this system, users can search for available books, place borrowing " +"requests, and manage their borrowed items. Librarians, on the other hand, " +"oversee the addition, update, and removal of book records, and can approve " +"or decline borrowing requests. The system also supports diverse user roles, " +"from regular members to staff and administrators, each with distinct " +"capabilities." +msgstr "" + +#: ../../src/appx/libms/spec.rst:15 +msgid "" +"A well-structured user interface ensures that all functionalities are easily " +"accessible, making the library management process seamless and efficient. " +"This project aims to merge traditional library functions with modern " +"technological innovations, promoting efficiency and an enhanced user " +"experience." +msgstr "" + +#: ../../src/appx/libms/spec.rst:22 +msgid "User roles" +msgstr "" + +#: ../../src/appx/libms/spec.rst:25 +msgid "" +"It is essential for developers to consider security aspects when " +"implementing these roles to ensure that users cannot perform actions outside " +"their designated role's scope." +msgstr "" + +#: ../../src/appx/libms/spec.rst:30 +#, fuzzy +msgid "Admins" +msgstr "pgAdmin" + +#: ../../src/appx/libms/spec.rst:32 +msgid "" +"Superusers have full control over the entire system. They can access and " +"manage all functionalities provided by the Django admin site." +msgstr "" + +#: ../../src/appx/libms/spec.rst:35 +msgid "Admins can create, modify, or delete any record within the application." +msgstr "" + +#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 +#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 +msgid "Capabilities" +msgstr "" + +#: ../../src/appx/libms/spec.rst:39 +msgid "Access Django admin site" +msgstr "" + +#: ../../src/appx/libms/spec.rst:42 +msgid "Librarians" +msgstr "" + +#: ../../src/appx/libms/spec.rst:44 +msgid "" +"Staff personnel are in charge of day-to-day operations within the library. " +"They can add new books to the library's collection, manage existing books' " +"details, and accept or decline borrow requests from regular users." +msgstr "" + +#: ../../src/appx/libms/spec.rst:50 +msgid "Management of the library catalogue" +msgstr "" + +#: ../../src/appx/libms/spec.rst:52 +msgid "Add, modify or delete authors" +msgstr "" + +#: ../../src/appx/libms/spec.rst:53 +msgid "Add, modify or delete genres" +msgstr "" + +#: ../../src/appx/libms/spec.rst:54 +msgid "Add, modify or delete books' details" +msgstr "" + +#: ../../src/appx/libms/spec.rst:56 +msgid "Review borrow requests from regular users" +msgstr "" + +#: ../../src/appx/libms/spec.rst:57 +msgid "Accept or decline borrow requests" +msgstr "" + +#: ../../src/appx/libms/spec.rst:58 +msgid "Register returned books and update their status" +msgstr "" + +#: ../../src/appx/libms/spec.rst:61 +msgid "Regular" +msgstr "" + +#: ../../src/appx/libms/spec.rst:63 +msgid "" +"Regular registered users are the members of the library. They can search " +"books, request to borrow them, and are responsible for returning borrowed " +"books on time." +msgstr "" + +#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 +msgid "Browse the books' catalogue" +msgstr "" + +#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 +msgid "View details of a book" +msgstr "" + +#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 +msgid "Search books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:72 +msgid "Request to borrow available books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:73 +msgid "Check due date for returned books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:74 +msgid "Return borrowed books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:77 +msgid "Anonymous" +msgstr "" + +#: ../../src/appx/libms/spec.rst:79 +msgid "Anonymous users are visitors who haven't logged into the system." +msgstr "" + +#: ../../src/appx/libms/spec.rst:86 +msgid "Access to the registration or login pages" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:95 ../../src/appx/libms/spec.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../src/appx/libms/spec.rst:93 +#, fuzzy +msgid "Author model" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:95 +msgid "" +"The ``Author`` model captures the details of the person, or group " +"responsible for creating the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 +#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 +#, fuzzy +msgid "Attributes" +msgstr "Змінні" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Name" +msgstr "username" + +#: ../../src/appx/libms/spec.rst:102 +msgid "The full name of the author. This should be limited to 255 characters." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Bio" +msgstr "" + +#: ../../src/appx/libms/spec.rst:105 +msgid "A brief biography or description of the author." +msgstr "" + +#: ../../src/appx/libms/spec.rst:108 +#, fuzzy +msgid "Genre model" +msgstr "Модель супротивника" + +#: ../../src/appx/libms/spec.rst:110 +msgid "" +"The ``Genre`` model represents the category or type of content a book " +"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " +"etc. Since a book can belong to more than one category at a time, it is " +"implemented as a dedicated model." +msgstr "" + +#: ../../src/appx/libms/spec.rst:118 +#, fuzzy +msgid "The name of the genre." +msgstr "назва товару" + +#: ../../src/appx/libms/spec.rst:121 +#, fuzzy +msgid "Book model" +msgstr "Моделі" + +#: ../../src/appx/libms/spec.rst:123 +msgid "" +"The ``Book`` model represents a physical book in the library's collection. " +"Each book record captures essential bibliographic information, as well as " +"details related to its current status in the library (e.g. available, " +"borrowed etc.)." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Title" +msgstr "title" + +#: ../../src/appx/libms/spec.rst:131 +#, fuzzy +msgid "The name or title of the book (255 characters or fewer)." +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." + +#: ../../src/appx/libms/spec.rst +msgid "Summary" +msgstr "" + +#: ../../src/appx/libms/spec.rst:134 +msgid "A brief description or synopsis of the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "ISBN" +msgstr "" + +#: ../../src/appx/libms/spec.rst:137 +msgid "International Standard Book Number, a unique identifier for books." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Available" +msgstr "Змінні" + +#: ../../src/appx/libms/spec.rst:140 +msgid "" +"Current available status of the book. Either ``True`` or ``False``. Books " +"are available by default." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Published date" +msgstr "" + +#: ../../src/appx/libms/spec.rst:144 +msgid "The date when the book was published." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Publisher" +msgstr "Користувач" + +#: ../../src/appx/libms/spec.rst:147 +msgid "" +"The entity or company responsible for the production and distribution of the " +"book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Genre(s)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:151 +msgid "" +"The category or type of content the book falls under (e.g., Fiction, Non-" +"Fiction, Science)." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Author(s)" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:156 +msgid "" +"The name of the person or group responsible for creating the content of the " +"book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Borrower" +msgstr "" + +#: ../../src/appx/libms/spec.rst:160 +msgid "The user who has currently borrowed the book, if applicable." +msgstr "" + +#: ../../src/appx/libms/spec.rst:163 +msgid "Borrow request model" +msgstr "" + +#: ../../src/appx/libms/spec.rst:165 +msgid "" +"The ``BorrowRequest`` model captures the intent of a user to borrow a " +"specific book. It tracks the status of the request, whether it's pending, " +"approved, declined, or completed." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Book" +msgstr "" + +#: ../../src/appx/libms/spec.rst:173 +msgid "A reference to a book to be borrowed." +msgstr "" + +#: ../../src/appx/libms/spec.rst:176 +msgid "A reference to a user who wants to borrow a book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Status" +msgstr "" + +#: ../../src/appx/libms/spec.rst:179 +msgid "The current status of the request." +msgstr "" + +#: ../../src/appx/libms/spec.rst:181 +#, fuzzy +msgid "pending" +msgstr "Значення" + +#: ../../src/appx/libms/spec.rst:182 +msgid "approved" +msgstr "" + +#: ../../src/appx/libms/spec.rst:183 +msgid "collected" +msgstr "" + +#: ../../src/appx/libms/spec.rst:184 +msgid "complete" +msgstr "" + +#: ../../src/appx/libms/spec.rst:185 +msgid "declined" +msgstr "" + +#: ../../src/appx/libms/spec.rst:187 +msgid "" +"The status constants should be encapsulated within the ``BorrowRequest`` " +"model." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Overdue" +msgstr "" + +#: ../../src/appx/libms/spec.rst:202 +msgid "A flag indicating if a borrow request was overdue." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Request date" +msgstr "Дата створення" + +#: ../../src/appx/libms/spec.rst:205 +msgid "The date the borrow request was made. This is required." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Approval date" +msgstr "" + +#: ../../src/appx/libms/spec.rst:208 +msgid "The date the request was approved, if applicable. Optional." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Due date" +msgstr "" + +#: ../../src/appx/libms/spec.rst:211 +msgid "" +"The date by which the book should be returned. Optional, should only be set " +"if the request if approved." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Complete date" +msgstr "Дата створення" + +#: ../../src/appx/libms/spec.rst:215 +msgid "" +"The date the book was returned and the borrowing request was completed. " +"Optional, should only be set if the request has reached the \"Complete\" " +"status." +msgstr "" + +#: ../../src/appx/libms/spec.rst:228 +msgid "Book to author" +msgstr "" + +#: ../../src/appx/libms/spec.rst:230 +msgid "" +"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " +"can have **one or more** ``authors``. This establishes a **many-to-many** " +"relationship between the two entities." +msgstr "" + +#: ../../src/appx/libms/spec.rst:235 +msgid "Book to genre" +msgstr "" + +#: ../../src/appx/libms/spec.rst:237 +msgid "" +"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " +"However a ``Book`` might not belong to any genre. This relationship between " +"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " +"possibility of zero genres for a book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:243 +msgid "Book to borrow request" +msgstr "" + +#: ../../src/appx/libms/spec.rst:245 +msgid "" +"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " +"relationship." +msgstr "" + +#: ../../src/appx/libms/spec.rst:250 +msgid "User to borrow request" +msgstr "" + +#: ../../src/appx/libms/spec.rst:252 +msgid "" +"Each ``User`` can make multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers to only one book, forming a **many-to-one** " +"relationship." +msgstr "" + +#: ../../src/appx/libms/spec.rst:256 +msgid "User to book (as a borrower)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:258 +msgid "" +"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " +"``Book`` can be borrowed by one user only. This forms a **one-to-one** " +"relationship." +msgstr "" + +#: ../../src/appx/libms/spec.rst:264 +#, fuzzy +msgid "Views and templates" +msgstr "Завдання: Шаблони" + +#: ../../src/appx/libms/spec.rst:267 +msgid "Admin site" +msgstr "" + +#: ../../src/appx/libms/spec.rst:269 +msgid "" +"Admin site provides the full control over the entire system. Only admins are " +"permitted to use admin site. Librarians should use their dedicated views to " +"perform operations, except special cases." +msgstr "" + +#: ../../src/appx/libms/spec.rst:275 +#, fuzzy +msgid "Authentication" +msgstr "Завдання: Автентифікація" + +#: ../../src/appx/libms/spec.rst:278 +msgid "Login" +msgstr "" + +#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 +#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 +#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:494 +#: ../../src/appx/libms/spec.rst:511 +msgid "Template" +msgstr "" + +#: ../../src/appx/libms/spec.rst:282 +msgid "" +"A form with fields for entering a username and a password, and a submit " +"button." +msgstr "" + +#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 +#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 +#: ../../src/appx/libms/spec.rst:389 ../../src/appx/libms/spec.rst:475 +#: ../../src/appx/libms/spec.rst:498 +msgid "View logic" +msgstr "" + +#: ../../src/appx/libms/spec.rst:286 +msgid "" +"Validate entered credentials and authenticate the user. In case of incorrect " +"credentials, display an error message." +msgstr "" + +#: ../../src/appx/libms/spec.rst:290 +#, fuzzy +msgid "Registration" +msgstr "Опис" + +#: ../../src/appx/libms/spec.rst:294 +#, fuzzy +msgid "A form for new user registration. **Required** fields are:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" + +#: ../../src/appx/libms/spec.rst:297 +#, fuzzy +msgid "first name" +msgstr "Ім'я" + +#: ../../src/appx/libms/spec.rst:298 +#, fuzzy +msgid "last name" +msgstr "Прізвище" + +#: ../../src/appx/libms/spec.rst:304 +msgid "Upon submission, the view should validate the provided data:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:306 +msgid "Check if username is already taken." +msgstr "" + +#: ../../src/appx/libms/spec.rst:307 +#, fuzzy +msgid "Ensure that password and confirm password fields match." +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." + +#: ../../src/appx/libms/spec.rst:308 +msgid "" +"Save the user's data if all validations pass. Otherwise, display appropriate " +"error messages." +msgstr "" + +#: ../../src/appx/libms/spec.rst:311 +msgid "" +"When saving passwords in the database, always store them in a hashed format, " +"never in plain text." +msgstr "" + +#: ../../src/appx/libms/spec.rst:315 +msgid "" +"Django's built-in ``User`` model and authentication system handle password " +"hashing by default, which is a big plus." +msgstr "" + +#: ../../src/appx/libms/spec.rst:319 +msgid "Borrowing History" +msgstr "" + +#: ../../src/appx/libms/spec.rst:321 +msgid "This view is available only for authenticated users." +msgstr "" + +#: ../../src/appx/libms/spec.rst:325 +msgid "" +"Users can see the list of **all** their borrows requests, regardless of " +"approve/decline status." +msgstr "" + +#: ../../src/appx/libms/spec.rst:330 +#, fuzzy +msgid "Authenticated users can see only their own borrow requests." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." + +#: ../../src/appx/libms/spec.rst:331 +msgid "" +"Librarians and admins can access borrows requests list for any user, " +"registered in the library system." +msgstr "" + +#: ../../src/appx/libms/spec.rst:335 +msgid "Library collection" +msgstr "" + +#: ../../src/appx/libms/spec.rst:337 +msgid "" +"These views are generally available for all (including anonymous) users. The " +"functionality for authenticated users include books borrowing." +msgstr "" + +#: ../../src/appx/libms/spec.rst:341 +msgid "Books list" +msgstr "" + +#: ../../src/appx/libms/spec.rst:345 +msgid "A list (or table) of books. Each book entry should provide information:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:348 +#, fuzzy +msgid "author(s)" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:349 +msgid "summary (truncated if too long, 30 words or fewer)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:350 +msgid "availability status (either **Available** or **Unavailable**)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:354 +#, fuzzy +msgid "Querying the data" +msgstr "купівля кошика" + +#: ../../src/appx/libms/spec.rst:356 +msgid "Fetch **all** books from the database" +msgstr "" + +#: ../../src/appx/libms/spec.rst:358 +msgid "Checking availability status (visual mark)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:360 +msgid "" +"For each book, determine its availability status. Check ``Book.available`` " +"flag." +msgstr "" + +#: ../../src/appx/libms/spec.rst:364 +msgid "" +"A user can still create a borrowing request, regardless of the book " +"availability status. This is only the visual mark." +msgstr "" + +#: ../../src/appx/libms/spec.rst:368 +msgid "Detail view" +msgstr "" + +#: ../../src/appx/libms/spec.rst:372 +msgid "" +"The detailed view of a specific book, presenting comprehensive information:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:374 +msgid "**Title**: Display the book's title prominently." +msgstr "" + +#: ../../src/appx/libms/spec.rst:375 +msgid "**Genre(s)**: List all associated genres (if any)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:376 +msgid "**Author(s)**: List all associated authors." +msgstr "" + +#: ../../src/appx/libms/spec.rst:377 +msgid "**ISBN**: The International Standard Book Number." +msgstr "" + +#: ../../src/appx/libms/spec.rst:378 +msgid "**Published Date**: When the book was published." +msgstr "" + +#: ../../src/appx/libms/spec.rst:379 +msgid "" +"**Publisher**: The name of the entity or company responsible for publishing" +msgstr "" + +#: ../../src/appx/libms/spec.rst:380 +msgid "**Summary**: A full summary or description of the book. the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:382 +msgid "" +"**Action Buttons** (For authenticated users only): - **Borrow Request " +"Button**: If the user has no associated borrow request" +msgstr "" + +#: ../../src/appx/libms/spec.rst:384 +msgid "they can create a new one." +msgstr "" + +#: ../../src/appx/libms/spec.rst:385 +msgid "" +"**Gather Book Button**: If the user's borrow request for this book has been " +"approved, allow the user to confirm they've picked up the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:390 +msgid "**Fetching Book Details**:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:392 +msgid "" +"Use the book's identifier (usually a primary key) to fetch its details from " +"the database." +msgstr "" + +#: ../../src/appx/libms/spec.rst:395 +#, fuzzy +msgid "**Checking User Authentication**:" +msgstr "Завдання: Автентифікація" + +#: ../../src/appx/libms/spec.rst:397 +msgid "" +"Determine if a user is authenticated. If they are, display the appropriate " +"action buttons based on the book's availability status and any existing " +"borrow requests by the user." +msgstr "" + +#: ../../src/appx/libms/spec.rst:401 +msgid "**Handling Borrow Requests**:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:403 +msgid "If an authenticated user clicks on the \"Borrow Request\" button:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:405 +msgid "" +"Create a new borrow request in the ``BorrowRequest`` model with status " +"\"pending\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:407 +msgid "Update the book's status to \"Awaiting approval\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:408 +msgid "" +"Redirect the user to a confirmation page or display a message indicating the " +"request has been made." +msgstr "" + +#: ../../src/appx/libms/spec.rst:411 +msgid "**Handling Book Gathering**:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:413 +msgid "" +"If an authenticated user has an approved borrow request and clicks the " +"\"Gather Book\" button:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:416 +msgid "Update the book's status to \"Borrowed\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:417 +msgid "Update the borrow request's status to \"complete\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:418 +msgid "" +"Redirect the user to a confirmation page or display a message indicating " +"they've picked up the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:422 +msgid "" +"Always ensure the user's actions are authenticated and authorized. This " +"prevents unauthorized borrow requests or gathering of books. Also, consider " +"adding error handling to manage cases where the book's details cannot be " +"fetched or any other unexpected issues." +msgstr "" + +#: ../../src/appx/libms/spec.rst:428 +#, fuzzy +msgid "Books management" +msgstr "Керування Статтями" + +#: ../../src/appx/libms/spec.rst:430 +msgid "These views are available only for staff (librarians and admins)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:433 +msgid "Authors and genres management" +msgstr "" + +#: ../../src/appx/libms/spec.rst:435 +msgid "" +"Only librarians and admins can add, modify or delete authors and genres. No " +"additional views for CRUD operations required (except admin site). " +"Librarians are allowed to access authors and genres via admin site. Only " +"admins can remove authors or genres." +msgstr "" + +#: ../../src/appx/libms/spec.rst:441 +#, fuzzy +msgid "Book creation and update" +msgstr "Дата створення" + +#: ../../src/appx/libms/spec.rst:443 +msgid "" +"The template should comprise a form with fields corresponding to the book's " +"attributes. Here are the essential elements for the form:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:447 ../../src/appx/libms/spec.rst:462 +msgid "A text input field." +msgstr "" + +#: ../../src/appx/libms/spec.rst:450 +#, fuzzy +msgid "A textarea for a brief description or synopsis." +msgstr "Надайте короткий опис вашого запиту." + +#: ../../src/appx/libms/spec.rst:453 +msgid "A text input field for the book's International Standard Book Number." +msgstr "" + +#: ../../src/appx/libms/spec.rst:456 +msgid "A checkbox indicating if a book is available. Defaults to ``True``." +msgstr "" + +#: ../../src/appx/libms/spec.rst:459 +msgid "A date input field." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Genres" +msgstr "Основне" + +#: ../../src/appx/libms/spec.rst:465 +msgid "" +"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " +"fetch available genres from the database and allow users to select zero or " +"more genres." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Authors" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:470 +msgid "" +"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " +"fetch available authors from the database and allow users to select one or " +"more authors." +msgstr "" + +#: ../../src/appx/libms/spec.rst:476 +msgid "" +"If it's an *update* action, pre-populate the form fields with the existing " +"details of the book fetched from the database." +msgstr "" + +#: ../../src/appx/libms/spec.rst:478 +msgid "For *creation*, provide an empty form for the librarian to fill in." +msgstr "" + +#: ../../src/appx/libms/spec.rst:479 +msgid "Ensure the published date is logical (e.g. not a future date)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:480 +msgid "Validate required inputs, according to general ``Book`` model rules." +msgstr "" + +#: ../../src/appx/libms/spec.rst:481 +msgid "" +"If validations pass: save changes to the database; otherwise, provide " +"helpful error messages." +msgstr "" + +#: ../../src/appx/libms/spec.rst:485 +msgid "" +"You MAY provide a mechanism (like modal or a quick entry form) to add a new " +"genre or author without leaving the book form page." +msgstr "" + +#: ../../src/appx/libms/spec.rst:489 +#, fuzzy +msgid "Book deletion" +msgstr "видалення статті" + +#: ../../src/appx/libms/spec.rst:491 +msgid "" +"Only librarians and administrators are permitted to perform this action." +msgstr "" + +#: ../../src/appx/libms/spec.rst:495 +msgid "A confirm delete form with **Submit** and **Cancel** buttons." +msgstr "" + +#: ../../src/appx/libms/spec.rst:499 +msgid "Authorize user before deleting performing deletion." +msgstr "" + +#: ../../src/appx/libms/spec.rst:500 +msgid "" +"If a form is submitted, a book should be removed from the library collection." +msgstr "" + +#: ../../src/appx/libms/spec.rst:502 +msgid "" +"If deletion is canceled view should redirect back to book detail view page." +msgstr "" + +#: ../../src/appx/libms/spec.rst:505 +#, fuzzy +msgid "Borrow requests" +msgstr "Про pull requests" + +#: ../../src/appx/libms/spec.rst:507 +msgid "" +"This view facilitates the management of borrowing requests for librarians " +"and admins, aiding in their prompt handling." +msgstr "" + +#: ../../src/appx/libms/spec.rst:512 +msgid "" +"Present a table showcasing the list of borrow requests. Each row embodies a " +"borrow request and encompasses:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:515 +msgid "**Book Title**: Title of the requested book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:516 +msgid "**User**: Identifier of the user who initiated the request." +msgstr "" + +#: ../../src/appx/libms/spec.rst:517 +msgid "**Request Date**: Date of the request's inception." +msgstr "" + +#: ../../src/appx/libms/spec.rst:518 +msgid "" +"**Due Date**: - Input field for librarians to set upon approval for new " +"requests. - For approved ones, display the librarian-set date." +msgstr "" + +#: ../../src/appx/libms/spec.rst:521 +msgid "" +"**Status**: Present state of the request (New, Approved, Completed, " +"Declined)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:523 +msgid "" +"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " +"and freezes the due date." +msgstr "" + +#: ../../src/appx/libms/spec.rst:525 +msgid "" +"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " +"and can prompt for a decline reason." +msgstr "" + +#: ../../src/appx/libms/spec.rst:527 +msgid "" +"**Complete Button**: Displayed for approved requests. Marks the request as " +"completed." +msgstr "" + +#: ../../src/appx/libms/spec.rst:531 +msgid "View Logic" +msgstr "" + +#: ../../src/appx/libms/spec.rst:532 +msgid "" +"**Approve Borrow Request**: - Validate book availability. - Modify book " +"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " +"Define the return due date as per librarian. - Inform the user about the " +"approval and due date." +msgstr "" + +#: ../../src/appx/libms/spec.rst:539 +msgid "" +"**Decline Borrow Request**: - Change borrow request status to " +"\"Declined\". - Optionally, procure decline reason from librarian. - " +"Notify user regarding the declination." +msgstr "" + +#: ../../src/appx/libms/spec.rst:544 +msgid "" +"**Complete Borrow Request**: - Ensure book's return. - Update book " +"status to \"Available\". - Toggle borrow request status to \"Completed\". " +"- If needed, record any notes or damages during return." +msgstr "" + +#: ../../src/appx/libms/spec.rst:551 +msgid "" +"Implementing reminders for near-due borrow requests can function as an alert " +"system for both the librarian and the user." +msgstr "" + #: ../../src/appx/precedence.txt:-1 msgid "Operator precedence in Python" msgstr "Пріоритет операторів в Python" diff --git a/src/appx/libms b/src/appx/libms new file mode 160000 index 000000000..e578b8339 --- /dev/null +++ b/src/appx/libms @@ -0,0 +1 @@ +Subproject commit e578b83395481f5a5904064f2bdb879b1bcc185b From 924cd775dc72f4e6801564532303b7eb43d70ad7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 15 Aug 2023 15:46:13 +0300 Subject: [PATCH 199/689] Add link to "libms" in "appx" toc-section --- src/index.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.txt b/src/index.txt index 05fa4dd23..b1de255e3 100644 --- a/src/index.txt +++ b/src/index.txt @@ -31,6 +31,7 @@ appx/conv_store appx/wtk appx/blog/spec + appx/libms/spec .. rubric:: References From 6c4306cb09d1f59f751bb049ad080fd292b45adc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 14 Sep 2023 16:07:43 +0300 Subject: [PATCH 200/689] Add translation for LibMS specification Conflicts: - src/_locales/uk/LC_MESSAGES/appx.po --- src/_locales/uk/LC_MESSAGES/appx.po | 605 +++++++++++++++++----------- src/appx/libms | 2 +- 2 files changed, 376 insertions(+), 231 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index d50027e42..5af39ec36 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -2198,7 +2198,7 @@ msgstr "Проблема - System Environment PATH" #: ../../src/appx/libms/spec.rst:3 msgid "Library Management System - Specification" -msgstr "" +msgstr "Система Керування Бібліотекою - Специфікація" #: ../../src/appx/libms/spec.rst:5 msgid "" @@ -2213,6 +2213,16 @@ msgid "" "from regular members to staff and administrators, each with distinct " "capabilities." msgstr "" +"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " +"пропонує цифрову платформу для управління та взаємодії з колекцією " +"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " +"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " +"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " +"книги, робити запити на позику та керувати позиченими предметами. " +"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " +"записів книг та можуть схвалювати або відхиляти запити на позику. Система " +"також підтримує різноманітні ролі користувачів, від звичайних членів до " +"персоналу та адміністраторів, кожен з яких має відмінні можливості." #: ../../src/appx/libms/spec.rst:15 msgid "" @@ -2222,10 +2232,15 @@ msgid "" "technological innovations, promoting efficiency and an enhanced user " "experience." msgstr "" +"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " +"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " +"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " +"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " +"покращенню користувацького досвіду." #: ../../src/appx/libms/spec.rst:22 msgid "User roles" -msgstr "" +msgstr "Ролі користувачів" #: ../../src/appx/libms/spec.rst:25 msgid "" @@ -2233,34 +2248,41 @@ msgid "" "implementing these roles to ensure that users cannot perform actions outside " "their designated role's scope." msgstr "" +"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " +"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " +"рамки призначеної їм ролі." #: ../../src/appx/libms/spec.rst:30 -#, fuzzy msgid "Admins" -msgstr "pgAdmin" +msgstr "Адміністратори" #: ../../src/appx/libms/spec.rst:32 msgid "" "Superusers have full control over the entire system. They can access and " "manage all functionalities provided by the Django admin site." msgstr "" +"Адміністратори мають повний контроль над усією системою. Вони можуть " +"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " +"керувати ними." #: ../../src/appx/libms/spec.rst:35 msgid "Admins can create, modify, or delete any record within the application." msgstr "" +"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " +"додатку." #: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 #: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 msgid "Capabilities" -msgstr "" +msgstr "Можливості" #: ../../src/appx/libms/spec.rst:39 msgid "Access Django admin site" -msgstr "" +msgstr "Доступ до адміністративного сайту Django" #: ../../src/appx/libms/spec.rst:42 msgid "Librarians" -msgstr "" +msgstr "Бібліотекарі" #: ../../src/appx/libms/spec.rst:44 msgid "" @@ -2268,38 +2290,42 @@ msgid "" "They can add new books to the library's collection, manage existing books' " "details, and accept or decline borrow requests from regular users." msgstr "" +"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " +"можуть додавати нові книги до бібліотечної колекції, керувати даними про " +"наявні книги, а також приймати або відхиляти запити від постійних " +"користувачів." #: ../../src/appx/libms/spec.rst:50 msgid "Management of the library catalogue" -msgstr "" +msgstr "Управління бібліотечним каталогом" #: ../../src/appx/libms/spec.rst:52 msgid "Add, modify or delete authors" -msgstr "" +msgstr "Додавати, змінювати або видаляти авторів" #: ../../src/appx/libms/spec.rst:53 msgid "Add, modify or delete genres" -msgstr "" +msgstr "Додавати, змінювати або видаляти жанри" #: ../../src/appx/libms/spec.rst:54 msgid "Add, modify or delete books' details" -msgstr "" +msgstr "Додавати, змінювати або видаляти дані про книги" #: ../../src/appx/libms/spec.rst:56 msgid "Review borrow requests from regular users" -msgstr "" +msgstr "Переглядати запити на позичення від користувачів" #: ../../src/appx/libms/spec.rst:57 msgid "Accept or decline borrow requests" -msgstr "" +msgstr "Приймати або відхиляти запити на позичення" #: ../../src/appx/libms/spec.rst:58 msgid "Register returned books and update their status" -msgstr "" +msgstr "Реєструвати повернені книги та оновлювати їх статус" #: ../../src/appx/libms/spec.rst:61 msgid "Regular" -msgstr "" +msgstr "Звичайний" #: ../../src/appx/libms/spec.rst:63 msgid "" @@ -2307,85 +2333,86 @@ msgid "" "books, request to borrow them, and are responsible for returning borrowed " "books on time." msgstr "" +"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " +"книги, запитувати їх, а також несуть відповідальність за своєчасне " +"повернення позичених книг." #: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 msgid "Browse the books' catalogue" -msgstr "" +msgstr "Переглядати каталог книг" #: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 msgid "View details of a book" -msgstr "" +msgstr "Переглядати деталі книги" #: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 msgid "Search books" -msgstr "" +msgstr "Шукати книги" #: ../../src/appx/libms/spec.rst:72 msgid "Request to borrow available books" -msgstr "" +msgstr "Робити запит на позичення доступних книжок" #: ../../src/appx/libms/spec.rst:73 msgid "Check due date for returned books" -msgstr "" +msgstr "Перевіряти термін повернення запозичених книжок" #: ../../src/appx/libms/spec.rst:74 msgid "Return borrowed books" -msgstr "" +msgstr "Повертати запозичені книги" #: ../../src/appx/libms/spec.rst:77 msgid "Anonymous" -msgstr "" +msgstr "Анонімні" #: ../../src/appx/libms/spec.rst:79 msgid "Anonymous users are visitors who haven't logged into the system." -msgstr "" +msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." #: ../../src/appx/libms/spec.rst:86 msgid "Access to the registration or login pages" -msgstr "" +msgstr "Доступ до сторінок реєстрації або входу" #: ../../problem-sets/src/wtk/challenge.rst:95 ../../src/appx/libms/spec.rst:90 msgid "Models" msgstr "Моделі" #: ../../src/appx/libms/spec.rst:93 -#, fuzzy msgid "Author model" -msgstr "Ім'я автора" +msgstr "Модель авторів" #: ../../src/appx/libms/spec.rst:95 msgid "" "The ``Author`` model captures the details of the person, or group " "responsible for creating the book." msgstr "" +"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " +"за створення книги." #: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 #: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 -#, fuzzy msgid "Attributes" -msgstr "Змінні" +msgstr "Атрибути" #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Name" -msgstr "username" +msgstr "Name" #: ../../src/appx/libms/spec.rst:102 msgid "The full name of the author. This should be limited to 255 characters." -msgstr "" +msgstr "Повне ім'я автора. Не більше 255 символів." #: ../../src/appx/libms/spec.rst msgid "Bio" -msgstr "" +msgstr "Bio" #: ../../src/appx/libms/spec.rst:105 msgid "A brief biography or description of the author." -msgstr "" +msgstr "Коротка біографія або опис автора." #: ../../src/appx/libms/spec.rst:108 -#, fuzzy msgid "Genre model" -msgstr "Модель супротивника" +msgstr "Модель жанра" #: ../../src/appx/libms/spec.rst:110 msgid "" @@ -2394,16 +2421,18 @@ msgid "" "etc. Since a book can belong to more than one category at a time, it is " "implemented as a dedicated model." msgstr "" +"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " +"книга, наприклад, \"Художня література\", \"Нехудожня література\", " +"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " +"категорій одночасно, вона реалізована як окрема модель." #: ../../src/appx/libms/spec.rst:118 -#, fuzzy msgid "The name of the genre." -msgstr "назва товару" +msgstr "Назва жанру." #: ../../src/appx/libms/spec.rst:121 -#, fuzzy msgid "Book model" -msgstr "Моделі" +msgstr "Модель книги" #: ../../src/appx/libms/spec.rst:123 msgid "" @@ -2412,95 +2441,101 @@ msgid "" "details related to its current status in the library (e.g. available, " "borrowed etc.)." msgstr "" +"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " +"запис про книгу містить основну бібліографічну інформацію, а також деталі, " +"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " +"тощо)." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Title" -msgstr "title" +msgstr "Title" #: ../../src/appx/libms/spec.rst:131 -#, fuzzy msgid "The name or title of the book (255 characters or fewer)." -msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." +msgstr "Назва книги (255 символів або менше)." #: ../../src/appx/libms/spec.rst msgid "Summary" -msgstr "" +msgstr "Summary" #: ../../src/appx/libms/spec.rst:134 msgid "A brief description or synopsis of the book." -msgstr "" +msgstr "Короткий опис або синопсис книги." #: ../../src/appx/libms/spec.rst msgid "ISBN" -msgstr "" +msgstr "ISBN" #: ../../src/appx/libms/spec.rst:137 msgid "International Standard Book Number, a unique identifier for books." msgstr "" +"International Standard Book Number, унікальний ідентифікатор для книг.." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Available" -msgstr "Змінні" +msgstr "Available" #: ../../src/appx/libms/spec.rst:140 msgid "" "Current available status of the book. Either ``True`` or ``False``. Books " "are available by default." msgstr "" +"Поточний статус доступності книги. Або ``True``, або ``False``. За " +"замовчуванням книги доступні." #: ../../src/appx/libms/spec.rst msgid "Published date" -msgstr "" +msgstr "Published date" #: ../../src/appx/libms/spec.rst:144 msgid "The date when the book was published." -msgstr "" +msgstr "Дата, коли книга була опублікована." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Publisher" -msgstr "Користувач" +msgstr "Publisher" #: ../../src/appx/libms/spec.rst:147 msgid "" "The entity or company responsible for the production and distribution of the " "book." msgstr "" +"Організація або компанія, відповідальна за виробництво та розповсюдження " +"книги." #: ../../src/appx/libms/spec.rst msgid "Genre(s)" -msgstr "" +msgstr "Genre(s)" #: ../../src/appx/libms/spec.rst:151 msgid "" "The category or type of content the book falls under (e.g., Fiction, Non-" "Fiction, Science)." msgstr "" +"Категорія або тип контенту, до якого належить книга (наприклад, художня " +"література, нон-фікшн, наукова література)." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Author(s)" -msgstr "Ім'я автора" +msgstr "Author(s)" #: ../../src/appx/libms/spec.rst:156 msgid "" "The name of the person or group responsible for creating the content of the " "book." -msgstr "" +msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." #: ../../src/appx/libms/spec.rst msgid "Borrower" -msgstr "" +msgstr "Borrower" #: ../../src/appx/libms/spec.rst:160 msgid "The user who has currently borrowed the book, if applicable." -msgstr "" +msgstr "Користувач, який наразі позичив книгу, якщо це можливо." #: ../../src/appx/libms/spec.rst:163 msgid "Borrow request model" -msgstr "" +msgstr "Модель запиту на позику" #: ../../src/appx/libms/spec.rst:165 msgid "" @@ -2508,93 +2543,95 @@ msgid "" "specific book. It tracks the status of the request, whether it's pending, " "approved, declined, or completed." msgstr "" +"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " +"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." #: ../../src/appx/libms/spec.rst msgid "Book" -msgstr "" +msgstr "Book" #: ../../src/appx/libms/spec.rst:173 msgid "A reference to a book to be borrowed." -msgstr "" +msgstr "Посилання на книгу, яку потрібно взяти." #: ../../src/appx/libms/spec.rst:176 msgid "A reference to a user who wants to borrow a book." -msgstr "" +msgstr "Посилання на користувача, який хоче взяти книгу." #: ../../src/appx/libms/spec.rst msgid "Status" -msgstr "" +msgstr "Status" #: ../../src/appx/libms/spec.rst:179 msgid "The current status of the request." -msgstr "" +msgstr "Поточний статус заявки." #: ../../src/appx/libms/spec.rst:181 -#, fuzzy msgid "pending" -msgstr "Значення" +msgstr "pending" #: ../../src/appx/libms/spec.rst:182 msgid "approved" -msgstr "" +msgstr "approved" #: ../../src/appx/libms/spec.rst:183 msgid "collected" -msgstr "" +msgstr "collected" #: ../../src/appx/libms/spec.rst:184 msgid "complete" -msgstr "" +msgstr "complete" #: ../../src/appx/libms/spec.rst:185 msgid "declined" -msgstr "" +msgstr "declined" #: ../../src/appx/libms/spec.rst:187 msgid "" "The status constants should be encapsulated within the ``BorrowRequest`` " "model." msgstr "" +"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." #: ../../src/appx/libms/spec.rst msgid "Overdue" -msgstr "" +msgstr "Overdue" #: ../../src/appx/libms/spec.rst:202 msgid "A flag indicating if a borrow request was overdue." -msgstr "" +msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Request date" -msgstr "Дата створення" +msgstr "Request date" #: ../../src/appx/libms/spec.rst:205 msgid "The date the borrow request was made. This is required." -msgstr "" +msgstr "Дата подання запиту на позику. Це обов'язкова інформація." #: ../../src/appx/libms/spec.rst msgid "Approval date" -msgstr "" +msgstr "Approval date" #: ../../src/appx/libms/spec.rst:208 msgid "The date the request was approved, if applicable. Optional." -msgstr "" +msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." #: ../../src/appx/libms/spec.rst msgid "Due date" -msgstr "" +msgstr "Due date" #: ../../src/appx/libms/spec.rst:211 msgid "" "The date by which the book should be returned. Optional, should only be set " "if the request if approved." msgstr "" +"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " +"у разі схвалення запиту." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Complete date" -msgstr "Дата створення" +msgstr "Complete date" #: ../../src/appx/libms/spec.rst:215 msgid "" @@ -2602,10 +2639,12 @@ msgid "" "Optional, should only be set if the request has reached the \"Complete\" " "status." msgstr "" +"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " +"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." #: ../../src/appx/libms/spec.rst:228 msgid "Book to author" -msgstr "" +msgstr "Книга до автору" #: ../../src/appx/libms/spec.rst:230 msgid "" @@ -2613,10 +2652,13 @@ msgid "" "can have **one or more** ``authors``. This establishes a **many-to-many** " "relationship between the two entities." msgstr "" +"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " +"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " +"**багато-до-багатьох** між цими двома сутностями." #: ../../src/appx/libms/spec.rst:235 msgid "Book to genre" -msgstr "" +msgstr "Книга до жанру" #: ../../src/appx/libms/spec.rst:237 msgid "" @@ -2625,10 +2667,14 @@ msgid "" "``Genre`` and ``Book`` is still considered **many-to-many**, but with the " "possibility of zero genres for a book." msgstr "" +"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " +"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " +"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " +"можливістю нульових жанрів для книги." #: ../../src/appx/libms/spec.rst:243 msgid "Book to borrow request" -msgstr "" +msgstr "Книга до запиту на позику" #: ../../src/appx/libms/spec.rst:245 msgid "" @@ -2636,10 +2682,13 @@ msgid "" "``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " "relationship." msgstr "" +"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " +"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " +"зв'язок **багато-до-одного**." #: ../../src/appx/libms/spec.rst:250 msgid "User to borrow request" -msgstr "" +msgstr "Користувач до запиту на позику" #: ../../src/appx/libms/spec.rst:252 msgid "" @@ -2647,10 +2696,13 @@ msgid "" "``BorrowRequest`` refers to only one book, forming a **many-to-one** " "relationship." msgstr "" +"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " +"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " +"``багато до однієї``." #: ../../src/appx/libms/spec.rst:256 msgid "User to book (as a borrower)" -msgstr "" +msgstr "Користувач до книги (як запозичувач)" #: ../../src/appx/libms/spec.rst:258 msgid "" @@ -2658,15 +2710,17 @@ msgid "" "``Book`` can be borrowed by one user only. This forms a **one-to-one** " "relationship." msgstr "" +"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " +"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " +"відносини \"один до одного\"." #: ../../src/appx/libms/spec.rst:264 -#, fuzzy msgid "Views and templates" -msgstr "Завдання: Шаблони" +msgstr "Подання та шаблони" #: ../../src/appx/libms/spec.rst:267 msgid "Admin site" -msgstr "" +msgstr "Адмін-сайт" #: ../../src/appx/libms/spec.rst:269 msgid "" @@ -2674,532 +2728,620 @@ msgid "" "permitted to use admin site. Librarians should use their dedicated views to " "perform operations, except special cases." msgstr "" +"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " +"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " +"повинні використовувати свої виділені подання для виконання операцій, за " +"винятком особливих випадків." #: ../../src/appx/libms/spec.rst:275 -#, fuzzy msgid "Authentication" -msgstr "Завдання: Автентифікація" +msgstr "Автентифікація" #: ../../src/appx/libms/spec.rst:278 msgid "Login" -msgstr "" +msgstr "Логін" #: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 #: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 -#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:494 -#: ../../src/appx/libms/spec.rst:511 +#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 +#: ../../src/appx/libms/spec.rst:512 msgid "Template" -msgstr "" +msgstr "Template" #: ../../src/appx/libms/spec.rst:282 msgid "" "A form with fields for entering a username and a password, and a submit " "button." msgstr "" +"Форма з полями для введення імені користувача та пароля, а також кнопкою " +"\"Надіслати\"." #: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 #: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 -#: ../../src/appx/libms/spec.rst:389 ../../src/appx/libms/spec.rst:475 -#: ../../src/appx/libms/spec.rst:498 +#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 +#: ../../src/appx/libms/spec.rst:499 msgid "View logic" -msgstr "" +msgstr "View logic" #: ../../src/appx/libms/spec.rst:286 msgid "" "Validate entered credentials and authenticate the user. In case of incorrect " "credentials, display an error message." msgstr "" +"Перевірити введені облікові дані та автентифікувати користувача. У разі " +"неправильних облікових даних вивести повідомлення про помилку." #: ../../src/appx/libms/spec.rst:290 -#, fuzzy msgid "Registration" -msgstr "Опис" +msgstr "Реєстрація" #: ../../src/appx/libms/spec.rst:294 -#, fuzzy msgid "A form for new user registration. **Required** fields are:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" #: ../../src/appx/libms/spec.rst:297 -#, fuzzy msgid "first name" -msgstr "Ім'я" +msgstr "first name" #: ../../src/appx/libms/spec.rst:298 -#, fuzzy msgid "last name" -msgstr "Прізвище" +msgstr "last name" #: ../../src/appx/libms/spec.rst:304 msgid "Upon submission, the view should validate the provided data:" -msgstr "" +msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" #: ../../src/appx/libms/spec.rst:306 msgid "Check if username is already taken." -msgstr "" +msgstr "Перевірте, чи не зайнято вже ім'я користувача." #: ../../src/appx/libms/spec.rst:307 -#, fuzzy msgid "Ensure that password and confirm password fields match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися." +msgstr "" +"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." #: ../../src/appx/libms/spec.rst:308 msgid "" "Save the user's data if all validations pass. Otherwise, display appropriate " "error messages." msgstr "" +"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " +"відобразити відповідні повідомлення про помилки." #: ../../src/appx/libms/spec.rst:311 msgid "" "When saving passwords in the database, always store them in a hashed format, " "never in plain text." msgstr "" +"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " +"не у вигляді простого тексту." #: ../../src/appx/libms/spec.rst:315 msgid "" "Django's built-in ``User`` model and authentication system handle password " "hashing by default, which is a big plus." msgstr "" +"Вбудована в Django модель ``User`` та система автентифікації за " +"замовчуванням обробляє хешування паролів, що є великим плюсом." #: ../../src/appx/libms/spec.rst:319 msgid "Borrowing History" -msgstr "" +msgstr "Історія запозичень" #: ../../src/appx/libms/spec.rst:321 msgid "This view is available only for authenticated users." -msgstr "" +msgstr "Це подання доступне лише для авторизованих користувачів." #: ../../src/appx/libms/spec.rst:325 msgid "" "Users can see the list of **all** their borrows requests, regardless of " "approve/decline status." msgstr "" +"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " +"від статусу схвалення/відхилення." #: ../../src/appx/libms/spec.rst:330 -#, fuzzy msgid "Authenticated users can see only their own borrow requests." -msgstr "Лише аутентифіковані користувачі можуть коментувати статті." +msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." #: ../../src/appx/libms/spec.rst:331 msgid "" "Librarians and admins can access borrows requests list for any user, " "registered in the library system." msgstr "" +"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " +"будь-якого користувача, зареєстрованого в бібліотечній системі." #: ../../src/appx/libms/spec.rst:335 msgid "Library collection" -msgstr "" +msgstr "Бібліотечний фонд" #: ../../src/appx/libms/spec.rst:337 msgid "" "These views are generally available for all (including anonymous) users. The " "functionality for authenticated users include books borrowing." msgstr "" +"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " +"користувачів. Функціонал для аутентифікованих користувачів включає в себе " +"можливість позичати книги." #: ../../src/appx/libms/spec.rst:341 msgid "Books list" -msgstr "" +msgstr "Список літератури" #: ../../src/appx/libms/spec.rst:345 msgid "A list (or table) of books. Each book entry should provide information:" msgstr "" +"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " +"книгу:" #: ../../src/appx/libms/spec.rst:348 -#, fuzzy msgid "author(s)" -msgstr "Ім'я автора" +msgstr "автор(и)" #: ../../src/appx/libms/spec.rst:349 msgid "summary (truncated if too long, 30 words or fewer)" -msgstr "" +msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" #: ../../src/appx/libms/spec.rst:350 msgid "availability status (either **Available** or **Unavailable**)" -msgstr "" +msgstr "статус доступності (**Доступний** або **Не доступний**)" #: ../../src/appx/libms/spec.rst:354 -#, fuzzy msgid "Querying the data" -msgstr "купівля кошика" +msgstr "Запит даних" #: ../../src/appx/libms/spec.rst:356 msgid "Fetch **all** books from the database" -msgstr "" +msgstr "Отримати **усі** книги з бази даних" #: ../../src/appx/libms/spec.rst:358 msgid "Checking availability status (visual mark)" -msgstr "" +msgstr "Перевірка статусу доступності (візуальна позначка)" #: ../../src/appx/libms/spec.rst:360 msgid "" "For each book, determine its availability status. Check ``Book.available`` " "flag." msgstr "" +"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." +"available``." #: ../../src/appx/libms/spec.rst:364 msgid "" "A user can still create a borrowing request, regardless of the book " "availability status. This is only the visual mark." msgstr "" +"Користувач все одно може створити запит на позику, незалежно від статусу " +"доступності книги. Це лише візуальна позначка." #: ../../src/appx/libms/spec.rst:368 msgid "Detail view" -msgstr "" +msgstr "Детальний перегляд" #: ../../src/appx/libms/spec.rst:372 msgid "" "The detailed view of a specific book, presenting comprehensive information:" -msgstr "" +msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" #: ../../src/appx/libms/spec.rst:374 msgid "**Title**: Display the book's title prominently." -msgstr "" +msgstr "**Назва**: Покажіть назву книги на видному місці." #: ../../src/appx/libms/spec.rst:375 msgid "**Genre(s)**: List all associated genres (if any)." -msgstr "" +msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." #: ../../src/appx/libms/spec.rst:376 msgid "**Author(s)**: List all associated authors." -msgstr "" +msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." #: ../../src/appx/libms/spec.rst:377 msgid "**ISBN**: The International Standard Book Number." -msgstr "" +msgstr "**ISBN**: Міжнародний стандартний номер книги." #: ../../src/appx/libms/spec.rst:378 msgid "**Published Date**: When the book was published." -msgstr "" +msgstr "**Дата публікації**: Коли вийшла друком книга." #: ../../src/appx/libms/spec.rst:379 msgid "" "**Publisher**: The name of the entity or company responsible for publishing" msgstr "" +"**Видавець**: Назва організації або компанії, відповідальної за публікацію" #: ../../src/appx/libms/spec.rst:380 msgid "**Summary**: A full summary or description of the book. the book." -msgstr "" +msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." #: ../../src/appx/libms/spec.rst:382 -msgid "" -"**Action Buttons** (For authenticated users only): - **Borrow Request " -"Button**: If the user has no associated borrow request" -msgstr "" +msgid "**Action Buttons** (For authenticated users only):" +msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" #: ../../src/appx/libms/spec.rst:384 -msgid "they can create a new one." +msgid "" +"**Borrow Request Button**: If the user has no associated borrow request they " +"can create a new one." msgstr "" +"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " +"позику, він може створити новий." -#: ../../src/appx/libms/spec.rst:385 +#: ../../src/appx/libms/spec.rst:386 msgid "" "**Gather Book Button**: If the user's borrow request for this book has been " "approved, allow the user to confirm they've picked up the book." msgstr "" +"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " +"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." -#: ../../src/appx/libms/spec.rst:390 +#: ../../src/appx/libms/spec.rst:391 msgid "**Fetching Book Details**:" -msgstr "" +msgstr "**Доступ до деталей книги**:" -#: ../../src/appx/libms/spec.rst:392 +#: ../../src/appx/libms/spec.rst:393 msgid "" "Use the book's identifier (usually a primary key) to fetch its details from " "the database." msgstr "" +"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " +"інформацію про неї з бази даних." -#: ../../src/appx/libms/spec.rst:395 -#, fuzzy +#: ../../src/appx/libms/spec.rst:396 msgid "**Checking User Authentication**:" -msgstr "Завдання: Автентифікація" +msgstr "**Перевірка автентичності користувача**:" -#: ../../src/appx/libms/spec.rst:397 +#: ../../src/appx/libms/spec.rst:398 msgid "" "Determine if a user is authenticated. If they are, display the appropriate " "action buttons based on the book's availability status and any existing " "borrow requests by the user." msgstr "" +"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " +"кнопки дій на основі статусу доступності книги та наявних запитів " +"користувача на позику." -#: ../../src/appx/libms/spec.rst:401 +#: ../../src/appx/libms/spec.rst:402 msgid "**Handling Borrow Requests**:" -msgstr "" +msgstr "**Обробка запитів на позику**:" -#: ../../src/appx/libms/spec.rst:403 +#: ../../src/appx/libms/spec.rst:404 msgid "If an authenticated user clicks on the \"Borrow Request\" button:" -msgstr "" +msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" -#: ../../src/appx/libms/spec.rst:405 +#: ../../src/appx/libms/spec.rst:406 msgid "" "Create a new borrow request in the ``BorrowRequest`` model with status " "\"pending\"." msgstr "" +"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " +"розгляді\"." -#: ../../src/appx/libms/spec.rst:407 +#: ../../src/appx/libms/spec.rst:408 msgid "Update the book's status to \"Awaiting approval\"." -msgstr "" +msgstr "Оновіть статус книги на \"Очікує затвердження\"." -#: ../../src/appx/libms/spec.rst:408 +#: ../../src/appx/libms/spec.rst:409 msgid "" "Redirect the user to a confirmation page or display a message indicating the " "request has been made." msgstr "" +"Перенаправлення користувача на сторінку підтвердження або відображення " +"повідомлення про те, що запит було зроблено." -#: ../../src/appx/libms/spec.rst:411 +#: ../../src/appx/libms/spec.rst:412 msgid "**Handling Book Gathering**:" -msgstr "" +msgstr "**Опрацювання Позики Книги**:" -#: ../../src/appx/libms/spec.rst:413 +#: ../../src/appx/libms/spec.rst:414 msgid "" "If an authenticated user has an approved borrow request and clicks the " "\"Gather Book\" button:" msgstr "" +"Якщо авторизований користувач має схвалений запит на позику і натискає " +"кнопку \"Зібрати книгу\":" -#: ../../src/appx/libms/spec.rst:416 +#: ../../src/appx/libms/spec.rst:417 msgid "Update the book's status to \"Borrowed\"." -msgstr "" +msgstr "Оновіть статус книги на \"Позичена\"." -#: ../../src/appx/libms/spec.rst:417 +#: ../../src/appx/libms/spec.rst:418 msgid "Update the borrow request's status to \"complete\"." -msgstr "" +msgstr "Оновіть статус запиту на позику до \"завершено\"." -#: ../../src/appx/libms/spec.rst:418 +#: ../../src/appx/libms/spec.rst:419 msgid "" "Redirect the user to a confirmation page or display a message indicating " "they've picked up the book." msgstr "" +"Перенаправляйте користувача на сторінку підтвердження або показуйте " +"повідомлення про те, що він забрав книгу." -#: ../../src/appx/libms/spec.rst:422 +#: ../../src/appx/libms/spec.rst:423 msgid "" "Always ensure the user's actions are authenticated and authorized. This " "prevents unauthorized borrow requests or gathering of books. Also, consider " "adding error handling to manage cases where the book's details cannot be " "fetched or any other unexpected issues." msgstr "" +"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " +"Це запобігає несанкціонованим запитам на позику або збору книг. Також " +"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " +"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." -#: ../../src/appx/libms/spec.rst:428 -#, fuzzy +#: ../../src/appx/libms/spec.rst:429 msgid "Books management" -msgstr "Керування Статтями" +msgstr "Управління книгами" -#: ../../src/appx/libms/spec.rst:430 +#: ../../src/appx/libms/spec.rst:431 msgid "These views are available only for staff (librarians and admins)." msgstr "" +"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." -#: ../../src/appx/libms/spec.rst:433 +#: ../../src/appx/libms/spec.rst:434 msgid "Authors and genres management" -msgstr "" +msgstr "Управління авторами та жанрами" -#: ../../src/appx/libms/spec.rst:435 +#: ../../src/appx/libms/spec.rst:436 msgid "" "Only librarians and admins can add, modify or delete authors and genres. No " "additional views for CRUD operations required (except admin site). " "Librarians are allowed to access authors and genres via admin site. Only " "admins can remove authors or genres." msgstr "" +"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " +"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " +"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " +"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " +"жанри." -#: ../../src/appx/libms/spec.rst:441 -#, fuzzy +#: ../../src/appx/libms/spec.rst:442 msgid "Book creation and update" -msgstr "Дата створення" +msgstr "Створення та оновлення книг" -#: ../../src/appx/libms/spec.rst:443 +#: ../../src/appx/libms/spec.rst:444 msgid "" "The template should comprise a form with fields corresponding to the book's " "attributes. Here are the essential elements for the form:" msgstr "" +"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " +"основні елементи форми:" -#: ../../src/appx/libms/spec.rst:447 ../../src/appx/libms/spec.rst:462 +#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 msgid "A text input field." -msgstr "" +msgstr "Поле для введення тексту." -#: ../../src/appx/libms/spec.rst:450 -#, fuzzy +#: ../../src/appx/libms/spec.rst:451 msgid "A textarea for a brief description or synopsis." -msgstr "Надайте короткий опис вашого запиту." +msgstr "Текстова область для короткого опису або синопсису." -#: ../../src/appx/libms/spec.rst:453 +#: ../../src/appx/libms/spec.rst:454 msgid "A text input field for the book's International Standard Book Number." -msgstr "" +msgstr "Поле для введення міжнародного стандартного номера книги." -#: ../../src/appx/libms/spec.rst:456 +#: ../../src/appx/libms/spec.rst:457 msgid "A checkbox indicating if a book is available. Defaults to ``True``." msgstr "" +"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." -#: ../../src/appx/libms/spec.rst:459 +#: ../../src/appx/libms/spec.rst:460 msgid "A date input field." -msgstr "" +msgstr "Поле для введення дати." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Genres" -msgstr "Основне" +msgstr "Жанри" -#: ../../src/appx/libms/spec.rst:465 +#: ../../src/appx/libms/spec.rst:466 msgid "" "A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " "fetch available genres from the database and allow users to select zero or " "more genres." msgstr "" +"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " +"користувачам вибирати нуль або більше жанрів." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Authors" -msgstr "Ім'я автора" +msgstr "Автори" -#: ../../src/appx/libms/spec.rst:470 +#: ../../src/appx/libms/spec.rst:471 msgid "" "A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " "fetch available authors from the database and allow users to select one or " "more authors." msgstr "" +"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " +"користувачам вибирати одного або декількох авторів." -#: ../../src/appx/libms/spec.rst:476 +#: ../../src/appx/libms/spec.rst:477 msgid "" "If it's an *update* action, pre-populate the form fields with the existing " "details of the book fetched from the database." msgstr "" +"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " +"книги, отриманими з бази даних." -#: ../../src/appx/libms/spec.rst:478 +#: ../../src/appx/libms/spec.rst:479 msgid "For *creation*, provide an empty form for the librarian to fill in." -msgstr "" +msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." -#: ../../src/appx/libms/spec.rst:479 +#: ../../src/appx/libms/spec.rst:480 msgid "Ensure the published date is logical (e.g. not a future date)." msgstr "" +"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " +"майбутнього)." -#: ../../src/appx/libms/spec.rst:480 +#: ../../src/appx/libms/spec.rst:481 msgid "Validate required inputs, according to general ``Book`` model rules." msgstr "" +"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " +"``Book``." -#: ../../src/appx/libms/spec.rst:481 +#: ../../src/appx/libms/spec.rst:482 msgid "" "If validations pass: save changes to the database; otherwise, provide " "helpful error messages." msgstr "" +"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " +"випадку надайте корисні повідомлення про помилки." -#: ../../src/appx/libms/spec.rst:485 +#: ../../src/appx/libms/spec.rst:486 msgid "" "You MAY provide a mechanism (like modal or a quick entry form) to add a new " "genre or author without leaving the book form page." msgstr "" +"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " +"введення) для додавання нового жанру або автора, не виходячи зі сторінки " +"форми книги." -#: ../../src/appx/libms/spec.rst:489 -#, fuzzy +#: ../../src/appx/libms/spec.rst:490 msgid "Book deletion" -msgstr "видалення статті" +msgstr "Видалення книги" -#: ../../src/appx/libms/spec.rst:491 +#: ../../src/appx/libms/spec.rst:492 msgid "" "Only librarians and administrators are permitted to perform this action." -msgstr "" +msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." -#: ../../src/appx/libms/spec.rst:495 +#: ../../src/appx/libms/spec.rst:496 msgid "A confirm delete form with **Submit** and **Cancel** buttons." -msgstr "" +msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." -#: ../../src/appx/libms/spec.rst:499 +#: ../../src/appx/libms/spec.rst:500 msgid "Authorize user before deleting performing deletion." -msgstr "" +msgstr "Авторизуйте користувача перед виконанням видалення." -#: ../../src/appx/libms/spec.rst:500 +#: ../../src/appx/libms/spec.rst:501 msgid "" "If a form is submitted, a book should be removed from the library collection." -msgstr "" +msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." -#: ../../src/appx/libms/spec.rst:502 +#: ../../src/appx/libms/spec.rst:503 msgid "" "If deletion is canceled view should redirect back to book detail view page." msgstr "" +"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " +"сторінку детального перегляду книги." -#: ../../src/appx/libms/spec.rst:505 -#, fuzzy +#: ../../src/appx/libms/spec.rst:506 msgid "Borrow requests" -msgstr "Про pull requests" +msgstr "Запити на позики" -#: ../../src/appx/libms/spec.rst:507 +#: ../../src/appx/libms/spec.rst:508 msgid "" "This view facilitates the management of borrowing requests for librarians " "and admins, aiding in their prompt handling." msgstr "" +"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " +"позики, допомагаючи оперативно їх обробляти." -#: ../../src/appx/libms/spec.rst:512 +#: ../../src/appx/libms/spec.rst:513 msgid "" "Present a table showcasing the list of borrow requests. Each row embodies a " "borrow request and encompasses:" msgstr "" +"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " +"відображає один запит на позику і включає в себе всі запити:" -#: ../../src/appx/libms/spec.rst:515 +#: ../../src/appx/libms/spec.rst:516 msgid "**Book Title**: Title of the requested book." -msgstr "" +msgstr "**Назва книги**: Назва запитуваної книги." -#: ../../src/appx/libms/spec.rst:516 +#: ../../src/appx/libms/spec.rst:517 msgid "**User**: Identifier of the user who initiated the request." -msgstr "" +msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." -#: ../../src/appx/libms/spec.rst:517 +#: ../../src/appx/libms/spec.rst:518 msgid "**Request Date**: Date of the request's inception." -msgstr "" +msgstr "**Дата запиту**: Дата створення запиту." -#: ../../src/appx/libms/spec.rst:518 +#: ../../src/appx/libms/spec.rst:519 msgid "" "**Due Date**: - Input field for librarians to set upon approval for new " "requests. - For approved ones, display the librarian-set date." msgstr "" +"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " +"нових запитів. - Для затверджених запитів відображатиметься дата, " +"встановлена бібліотекарем." -#: ../../src/appx/libms/spec.rst:521 +#: ../../src/appx/libms/spec.rst:522 msgid "" "**Status**: Present state of the request (New, Approved, Completed, " "Declined)." msgstr "" +"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " +"Відхилений)." -#: ../../src/appx/libms/spec.rst:523 +#: ../../src/appx/libms/spec.rst:524 msgid "" "**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " "and freezes the due date." msgstr "" +"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " +"статус на \"Затверджено\" і заморожує дату виконання." -#: ../../src/appx/libms/spec.rst:525 +#: ../../src/appx/libms/spec.rst:526 msgid "" "**Decline Button**: Appears for new requests. Sets status to \"Declined\" " "and can prompt for a decline reason." msgstr "" +"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " +"\"Відхилено\" і може запитувати причину відхилення." -#: ../../src/appx/libms/spec.rst:527 +#: ../../src/appx/libms/spec.rst:528 msgid "" "**Complete Button**: Displayed for approved requests. Marks the request as " "completed." msgstr "" +"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " +"запит як завершений." -#: ../../src/appx/libms/spec.rst:531 +#: ../../src/appx/libms/spec.rst:532 msgid "View Logic" -msgstr "" +msgstr "View Logic" -#: ../../src/appx/libms/spec.rst:532 +#: ../../src/appx/libms/spec.rst:533 msgid "" "**Approve Borrow Request**: - Validate book availability. - Modify book " "status to \"Borrowed\". - Switch borrow request to \"Approved\". - " "Define the return due date as per librarian. - Inform the user about the " "approval and due date." msgstr "" +"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " +"статус книги на \"Позичена\". - Переключіть запит на позику на " +"\"Затверджено\". - Визначте дату повернення відповідно до побажань " +"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." -#: ../../src/appx/libms/spec.rst:539 +#: ../../src/appx/libms/spec.rst:540 msgid "" "**Decline Borrow Request**: - Change borrow request status to " "\"Declined\". - Optionally, procure decline reason from librarian. - " "Notify user regarding the declination." msgstr "" +"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " +"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " +"користувача про відхилення." -#: ../../src/appx/libms/spec.rst:544 +#: ../../src/appx/libms/spec.rst:545 msgid "" "**Complete Borrow Request**: - Ensure book's return. - Update book " "status to \"Available\". - Toggle borrow request status to \"Completed\". " "- If needed, record any notes or damages during return." msgstr "" +"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " +"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " +"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " +"під час повернення." -#: ../../src/appx/libms/spec.rst:551 +#: ../../src/appx/libms/spec.rst:552 msgid "" "Implementing reminders for near-due borrow requests can function as an alert " "system for both the librarian and the user." msgstr "" +"Впровадження нагадувань про прострочені запити може функціонувати як система " +"оповіщення як для бібліотекаря, так і для користувача." #: ../../src/appx/precedence.txt:-1 msgid "Operator precedence in Python" @@ -4623,3 +4765,6 @@ msgstr "" #~ msgid "After that the pull request is merged into your target branch." #~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." + +#~ msgid "they can create a new one." +#~ msgstr "вони можуть створити новий." diff --git a/src/appx/libms b/src/appx/libms index e578b8339..30ed5703a 160000 --- a/src/appx/libms +++ b/src/appx/libms @@ -1 +1 @@ -Subproject commit e578b83395481f5a5904064f2bdb879b1bcc185b +Subproject commit 30ed5703a87f968891b1016c4be28d65098767f8 From aaba14b4e1e2880adf6f7d587bc9df7c7d676fbe Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 13:40:48 +0300 Subject: [PATCH 201/689] Update submodules --- problem-sets | 2 +- src/appx/libms | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/problem-sets b/problem-sets index c4326cdd5..b2f2737e8 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit c4326cdd50a7bcd6452344376918256f727dcaa9 +Subproject commit b2f2737e8fbcce616ec3b22d325c20ca317dfff1 diff --git a/src/appx/libms b/src/appx/libms index 30ed5703a..a7b79a2c2 160000 --- a/src/appx/libms +++ b/src/appx/libms @@ -1 +1 @@ -Subproject commit 30ed5703a87f968891b1016c4be28d65098767f8 +Subproject commit a7b79a2c262c0506f6577e1230c01264d1777060 From bec66e1e00c988555b80f3f75835ee251dd73ae3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 13:42:17 +0300 Subject: [PATCH 202/689] Update project dependencies --- poetry.lock | 206 ++++++++++++++++++++++++++--------------------- requirements.txt | 28 +++---- src/appx/blog | 2 +- 3 files changed, 127 insertions(+), 109 deletions(-) diff --git a/poetry.lock b/poetry.lock index 831985408..33f88c984 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,16 +14,19 @@ files = [ [[package]] name = "babel" -version = "2.12.1" +version = "2.13.0" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, + {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, ] +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "certifi" version = "2023.7.22" @@ -38,87 +41,102 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] @@ -383,14 +401,14 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -518,20 +536,20 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.1.2" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, - {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -811,14 +829,14 @@ test = ["pytest"] [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.6" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, + {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, ] [package.extras] @@ -829,18 +847,18 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] diff --git a/requirements.txt b/requirements.txt index b1d5ba8be..b37881a85 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" +babel==2.13.0 ; python_version >= "3.9" and python_version < "4.0" certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" -charset-normalizer==3.2.0 ; python_version >= "3.9" and python_version < "4.0" -click==8.1.6 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "4.0" +click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.4 ; python_version >= "3.9" and python_version < "4.0" @@ -15,27 +15,27 @@ markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" -packaging==23.1 ; python_version >= "3.9" and python_version < "4.0" -pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +packaging==23.2 ; python_version >= "3.9" and python_version < "4.0" +pybtex-docutils==1.0.3 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" pygments==2.16.1 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" -setuptools==68.0.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==68.2.2 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" -sphinx-rtd-theme==1.2.2 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==1.3.0 ; python_version >= "3.9" and python_version < "4.0" sphinx==6.2.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.7 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.4 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-qthelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-serializinghtml==1.1.7 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.0.4 ; python_version >= "3.9" and python_version < "4.0" -zipp==3.16.2 ; python_version >= "3.9" and python_version < "3.10" +sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.0.6 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/src/appx/blog b/src/appx/blog index dfb023629..5c5d0bc65 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit dfb023629d04fe427e9e00642f852b403b9b70f3 +Subproject commit 5c5d0bc65ed259be549bff3d5e86ca9c07ca198e From 5f39cdf4e65385b63a6b9e51e948c9fe8ba4ecf9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 19:48:53 +0300 Subject: [PATCH 203/689] Disable gettext compact option --- src/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/conf.py b/src/conf.py index b8346255f..7c7886f51 100644 --- a/src/conf.py +++ b/src/conf.py @@ -47,6 +47,7 @@ # mermaid-js/mermaid-cli is added to project's dependencies # options for internationalization +gettext_compact = False language = "en" locale_dirs = ["_locales"] From f0844c18cdadf8fb259db0c85532b6933057750e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 20:19:59 +0300 Subject: [PATCH 204/689] Update PO translations --- src/_locales/uk/LC_MESSAGES/appx.po | 4770 ----------------- .../uk/LC_MESSAGES/appx/assignments.po | 433 ++ src/_locales/uk/LC_MESSAGES/appx/blog/spec.po | 1196 +++++ src/_locales/uk/LC_MESSAGES/appx/code_edit.po | 54 + .../uk/LC_MESSAGES/appx/conv_store.po | 558 ++ src/_locales/uk/LC_MESSAGES/appx/env_path.po | 40 + .../uk/LC_MESSAGES/appx/libms/spec.po | 1187 ++++ .../uk/LC_MESSAGES/appx/precedence.po | 231 + src/_locales/uk/LC_MESSAGES/appx/printf.po | 244 + .../uk/LC_MESSAGES/appx/software_list.po | 275 + src/_locales/uk/LC_MESSAGES/appx/wtk.po | 575 ++ src/_locales/uk/LC_MESSAGES/basics.po | 2816 ---------- .../uk/LC_MESSAGES/basics/bool_logic.po | 508 ++ .../uk/LC_MESSAGES/basics/controlflow.po | 177 + .../uk/LC_MESSAGES/basics/decorators.po | 391 ++ .../uk/LC_MESSAGES/basics/exceptions.po | 380 ++ .../uk/LC_MESSAGES/basics/functions.po | 40 + src/_locales/uk/LC_MESSAGES/basics/index.po | 36 + src/_locales/uk/LC_MESSAGES/basics/modules.po | 40 + src/_locales/uk/LC_MESSAGES/basics/pep8.po | 40 + .../uk/LC_MESSAGES/basics/stdtypes.po | 728 +++ src/_locales/uk/LC_MESSAGES/basics/syntax.po | 263 + src/_locales/uk/LC_MESSAGES/basics/testing.po | 40 + .../uk/LC_MESSAGES/basics/variables.po | 135 + .../{deploy.po => deploy/index.po} | 6 +- .../{django.po => django/index.po} | 6 +- src/_locales/uk/LC_MESSAGES/flask.po | 40 - src/_locales/uk/LC_MESSAGES/index.po | 34 - src/_locales/uk/LC_MESSAGES/intro.po | 940 ---- src/_locales/uk/LC_MESSAGES/intro/index.po | 446 ++ src/_locales/uk/LC_MESSAGES/intro/install.po | 250 + src/_locales/uk/LC_MESSAGES/intro/interact.po | 267 + .../LC_MESSAGES/{linux.po => linux/index.po} | 6 +- src/_locales/uk/LC_MESSAGES/oop/index.po | 46 + .../uk/LC_MESSAGES/oop/inheritance.po | 36 + .../uk/LC_MESSAGES/{oop.po => oop/intro.po} | 110 +- src/_locales/uk/LC_MESSAGES/oop/patterns.po | 36 + src/_locales/uk/LC_MESSAGES/oop/solid.po | 42 + src/_locales/uk/LC_MESSAGES/rdbms.po | 1162 ---- .../uk/LC_MESSAGES/rdbms/aggregation.po | 479 ++ src/_locales/uk/LC_MESSAGES/rdbms/index.po | 80 + .../uk/LC_MESSAGES/rdbms/normalization.po | 295 + .../uk/LC_MESSAGES/rdbms/relations.po | 447 ++ src/_locales/uk/LC_MESSAGES/vcs.po | 2548 --------- src/_locales/uk/LC_MESSAGES/vcs/basics.po | 950 ++++ src/_locales/uk/LC_MESSAGES/vcs/branch.po | 509 ++ src/_locales/uk/LC_MESSAGES/vcs/github.po | 259 + src/_locales/uk/LC_MESSAGES/vcs/index.po | 74 + src/_locales/uk/LC_MESSAGES/vcs/intro.po | 221 + .../uk/LC_MESSAGES/vcs/pullrequest.po | 223 + src/_locales/uk/LC_MESSAGES/vcs/remotes.po | 227 + src/_locales/uk/LC_MESSAGES/vcs/setup.po | 118 + src/_locales/uk/LC_MESSAGES/vcs/tagging.po | 169 + 53 files changed, 12759 insertions(+), 12424 deletions(-) delete mode 100644 src/_locales/uk/LC_MESSAGES/appx.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/assignments.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/blog/spec.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/code_edit.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/conv_store.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/env_path.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/libms/spec.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/precedence.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/printf.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/software_list.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/wtk.po delete mode 100644 src/_locales/uk/LC_MESSAGES/basics.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/bool_logic.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/controlflow.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/decorators.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/exceptions.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/functions.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/modules.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/pep8.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/stdtypes.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/syntax.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/testing.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/variables.po rename src/_locales/uk/LC_MESSAGES/{deploy.po => deploy/index.po} (91%) rename src/_locales/uk/LC_MESSAGES/{django.po => django/index.po} (91%) delete mode 100644 src/_locales/uk/LC_MESSAGES/flask.po delete mode 100644 src/_locales/uk/LC_MESSAGES/index.po delete mode 100644 src/_locales/uk/LC_MESSAGES/intro.po create mode 100644 src/_locales/uk/LC_MESSAGES/intro/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/intro/install.po create mode 100644 src/_locales/uk/LC_MESSAGES/intro/interact.po rename src/_locales/uk/LC_MESSAGES/{linux.po => linux/index.po} (91%) create mode 100644 src/_locales/uk/LC_MESSAGES/oop/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/oop/inheritance.po rename src/_locales/uk/LC_MESSAGES/{oop.po => oop/intro.po} (85%) create mode 100644 src/_locales/uk/LC_MESSAGES/oop/patterns.po create mode 100644 src/_locales/uk/LC_MESSAGES/oop/solid.po delete mode 100644 src/_locales/uk/LC_MESSAGES/rdbms.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/normalization.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/relations.po delete mode 100644 src/_locales/uk/LC_MESSAGES/vcs.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/basics.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/branch.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/github.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/intro.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/remotes.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/setup.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/tagging.po diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po deleted file mode 100644 index 5af39ec36..000000000 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ /dev/null @@ -1,4770 +0,0 @@ -# APPENDIXES TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# SERHII HORODILOV -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-04 14:27+0100\n" -"PO-Revision-Date: 2023-09-04 16:28+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" - -#: ../../src/appx/assignments.txt:-1 -msgid "How-to handle in assignments via GitHub pull request(s)" -msgstr "Як працювати з призначеннями через GitHub pull request(и)" - -#: ../../src/appx/assignments.txt:-1 -msgid "Vladyslav Ponomaryov" -msgstr "Vladyslav Ponomaryov" - -#: ../../src/appx/assignments.txt:-1 ../../src/appx/code_edit.txt:-1 -#: ../../src/appx/conv_store.txt:-1 ../../src/appx/env_path.txt:-1 -#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 -#: ../../src/appx/wtk.txt:-1 -msgid "Serhii Horodilov sgorodil@gmail.com" -msgstr "Serhii Horodilov sgorodil@gmail.com" - -#: ../../src/appx/assignments.txt:-1 -msgid "git, github, pull request, review, merge, howto" -msgstr "git, github, pull request, review, merge, howto" - -#: ../../src/appx/assignments.txt:9 -msgid "Handing in Homework Assignments" -msgstr "Здача домашніх завдань" - -#: ../../src/appx/assignments.txt:13 -msgid "Repository content description" -msgstr "Опис вмісту репозиторію" - -#: ../../src/appx/assignments.txt:16 -msgid "What to include" -msgstr "Що потрібно включити" - -#: ../../src/appx/assignments.txt:18 -msgid "Code base" -msgstr "Кодова база" - -#: ../../src/appx/assignments.txt:19 -msgid "Project dependencies (if applicable)" -msgstr "Залежності проекту (якщо застосовно)" - -#: ../../src/appx/assignments.txt:20 -msgid "" -"*(Optional)* Additional project information: README, CONTRIBUTING, LICENSE " -"etc." -msgstr "" -"*(Додаткова)* інформація про проєкт: README, CONTRIBUTING, LICENSE тощо." - -#: ../../src/appx/assignments.txt:24 -msgid "" -"Always start new repository from creating ``README`` and ``.gitignore`` " -"files." -msgstr "" -"Завжди починайте новий репозиторій зі створення файлів ``README`` та ``." -"gitignore``." - -#: ../../src/appx/assignments.txt:28 -msgid "What to exclude" -msgstr "Що потрібно виключити" - -#: ../../src/appx/assignments.txt:30 -msgid "Virtual environment, typically ``venv`` or ``env`` folder" -msgstr "Віртуальне середовище, зазвичай папка ``venv`` або ``env``" - -#: ../../src/appx/assignments.txt:31 -msgid "Byte compiled Python code (``__pycache__``)" -msgstr "Байтовий скомпільований код Python (``__pycache__``)" - -#: ../../src/appx/assignments.txt:32 -msgid "IDE configurations, typically ``.vscode`` or ``.idea`` folder" -msgstr "Конфігурації IDE, зазвичай папка ``.vscode`` або ``.idea``" - -#: ../../src/appx/assignments.txt:33 -msgid "Database files, like ``db.sqlite3``" -msgstr "Файли баз даних, такі як ``db.sqlite3``" - -#: ../../src/appx/assignments.txt:34 -msgid "Other stuff not related to the assignment directly" -msgstr "Інші речі, не пов'язані з завданням безпосередньо" - -#: ../../src/appx/assignments.txt:37 -msgid "" -"Set up **.gitignore** to exclude all name patterns from appending to the " -"stage area. Common content of this file may look like:" -msgstr "" -"Налаштуйте **.gitignore**, щоб виключити всі шаблони назв з додавання до " -"області сцени. Типовий вміст цього файлу може виглядати так:" - -#: ../../src/appx/assignments.txt:48 -msgid "Repository initialization" -msgstr "Ініціалізація репозиторію" - -#: ../../src/appx/assignments.txt:50 -msgid "Create and activate virtual environment." -msgstr "Створіть та активуйте віртуальне середовище." - -#: ../../src/appx/assignments.txt:51 -msgid "Create common repository files:" -msgstr "Створіть загальні файли репозиторію:" - -#: ../../src/appx/assignments.txt:53 -msgid "README" -msgstr "README" - -#: ../../src/appx/assignments.txt:54 -msgid ".gitignore" -msgstr ".gitignore" - -#: ../../src/appx/assignments.txt:55 -msgid "requirements.txt *(if applicable)*" -msgstr "requirements.txt *(якщо застосовно)*" - -#: ../../src/appx/assignments.txt:57 -msgid "" -"*(Optional)* Create a code base draft. This can be an empty module like " -"**main.py** or an empty :ref:`Django project `." -msgstr "" -"*(Додатково)* Створіть чорновий варіант кодової бази. Це може бути порожній " -"модуль типу **main.py** або порожній :ref:`проект Django `." - -#: ../../src/appx/assignments.txt:59 -msgid "Initialize a new repository using ``git init`` command." -msgstr "Ініціалізуйте новий репозиторій за допомогою команди ``git init``." - -#: ../../src/appx/assignments.txt:60 -msgid "Set up **.gitignore** name patterns." -msgstr "Налаштуйте шаблони імен **.gitignore**." - -#: ../../src/appx/assignments.txt:61 -msgid "Stage your changes." -msgstr "Додайте зміни до stage-простору." - -#: ../../src/appx/assignments.txt:62 -msgid "Commit your changes." -msgstr "Зафіксуйте зміни." - -#: ../../src/appx/assignments.txt:63 -msgid "Set up remote repository." -msgstr "Налаштуйте віддалений репозиторій." - -#: ../../src/appx/assignments.txt:64 -msgid "Push changes from local branch to remote." -msgstr "Перенесіть зміни з локальної гілки на віддалену." - -#: ../../src/appx/assignments.txt:69 -msgid "Initializing new Django project" -msgstr "Ініціалізація нового проекту Django" - -#: ../../src/appx/assignments.txt:71 -msgid "" -"Base Django project may be added to the repository with the first commit. " -"Initialize Django project in current repository root to avoid directories " -"nesting." -msgstr "" -"Базовий проект Django може бути доданий до сховища з першим коммітом. " -"Ініціалізуйте проект Django у корені поточного сховища, щоб уникнути " -"вкладеності каталогів." - -#: ../../src/appx/assignments.txt:80 -msgid "Do not forget to create **requirements.txt**." -msgstr "Не забудьте створити **requirements.txt**." - -#: ../../src/appx/assignments.txt:82 -msgid "After that, you may proceed with \"staging\" and \"commit\" steps." -msgstr "Після цього ви можете перейти до етапів \"stage\" та \"commit\"." - -#: ../../src/appx/assignments.txt:86 -msgid "Sharing project dependencies" -msgstr "Спільний доступ до залежностей проекту" - -#: ../../src/appx/assignments.txt:88 -msgid "" -"The **requirements.txt** file is a plain text file that lists all the Python " -"packages required for a specific project. This file is used to specify " -"dependencies in a version-controlled and easily shareable manner. It allows " -"for a consistent environment across different team members' local setups." -msgstr "" -"Файл **requirements.txt** -- це звичайний текстовий файл, який містить " -"список усіх пакунків Python, необхідних для конкретного проекту. Цей файл " -"використовується для вказівки залежностей у спосіб, що дозволяє контролювати " -"версії та легко ділитися ними. Це дозволяє забезпечити узгодженість " -"середовища в локальних налаштуваннях різних членів команди." - -#: ../../src/appx/assignments.txt:94 -msgid "Where to place \"requirements.txt\" file" -msgstr "Де розмістити файл \"requirements.txt\"" - -#: ../../src/appx/assignments.txt:96 -msgid "" -"The **requirements.txt** file is generally placed in the root directory of " -"the project." -msgstr "" -"Файл **requirements.txt** зазвичай розміщується у кореневому каталозі " -"проекту." - -#: ../../src/appx/assignments.txt:100 -msgid "Creating \"requirements.txt\" file" -msgstr "Створення файлу \"requirements.txt\"" - -#: ../../src/appx/assignments.txt:102 -msgid "" -"To generate file use ``pip freeze`` command and place its output to a file:" -msgstr "" -"Щоб згенерувати файл, скористайтеся командою ``pip freeze`` і помістіть його " -"вивід у файл:" - -#: ../../src/appx/assignments.txt:108 -msgid "This will create **requirements.txt** file. Its content may look like:" -msgstr "" -"В результаті буде створено файл **requirements.txt**. Його вміст може мати " -"вигляд:" - -#: ../../src/appx/assignments.txt:119 -msgid "Installing dependencies from \"requirements.txt\" file" -msgstr "Встановлення залежностей з файлу \"requirements.txt\"" - -#: ../../src/appx/assignments.txt:121 -msgid "" -"Another team member may easily install all the requirements for the project " -"by using ``pip install`` command:" -msgstr "" -"Інший член команди може легко встановити всі вимоги до проекту за допомогою " -"команди ``pip install``:" - -#: ../../src/appx/assignments.txt:130 -msgid "Dealing with home tasks (challenges)" -msgstr "Вирішення домашніх завдань (викликів)" - -#: ../../src/appx/assignments.txt:132 -msgid "Create a new topic branch" -msgstr "Створити нову гілку завдання" - -#: ../../src/appx/assignments.txt:133 -msgid "Switch to a topic branch" -msgstr "Перейдіть до гілки завдання" - -#: ../../src/appx/assignments.txt:134 -msgid "Do the work and commit changes" -msgstr "Виконайте роботу та зафіксуйте зміни" - -#: ../../src/appx/assignments.txt:137 -msgid "You can create a new branch and immediately switch to it:" -msgstr "Ви можете створити нову гілку і одразу перейти до неї:" - -#: ../../src/appx/assignments.txt:144 -msgid "Creating a pull request" -msgstr "Створення запиту на злиття" - -#: ../../src/appx/assignments.txt:146 -msgid "" -"Make sure your working branch is up-to-date with the default one. You can " -"pull changes for the default branch and rebase your feature branch onto it." -msgstr "" -"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " -"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " -"на неї." - -#: ../../src/appx/assignments.txt:149 -msgid "" -"Push feature branch to the remote repository. By default, the current active " -"branch is pushed via ``git push`` command. You may need to set upstream " -"branch if it isn't yet." -msgstr "" -"Перенести гілку функції до віддаленого сховища. За замовчуванням, поточна " -"активна гілка виштовхується командою ``git push``. Можливо, вам доведеться " -"створити нову гілку, якщо вона ще не створена." - -#: ../../src/appx/assignments.txt:157 -msgid "" -"Navigate to your remote repository homepage on GitHub and switch to **Pull " -"requests** tab." -msgstr "" -"Перейдіть на головну сторінку вашого віддаленого сховища на GitHub і " -"перейдіть на вкладку **Pull requests**." - -#: ../../src/appx/assignments.txt:159 -msgid "Click **New pull request** button." -msgstr "Натисніть кнопку **New pull request**." - -#: ../../src/appx/assignments.txt:160 -msgid "" -"Select your default branch as *target* and your feature branch as *source*." -msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." - -#: ../../src/appx/assignments.txt:162 -msgid "Click **Create pull request** button." -msgstr "Натисніть кнопку **Create pull request**." - -#: ../../src/appx/assignments.txt:163 -msgid "Provide meaningful title and a brief description for your pull request." -msgstr "Надайте змістовну назву та короткий опис вашого запиту." - -#: ../../src/appx/assignments.txt:164 -msgid "Submit pull request creation." -msgstr "Підтвердіть створення запиту." - -#: ../../src/appx/assignments.txt:165 -msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." -msgstr "*(Необов'язково)* Виберіть рецензента(ів) у розділі **Reviewers**." - -#: ../../src/appx/assignments.txt:166 -msgid "Wait until your pull request is reviewed." -msgstr "Зачекайте, поки ваш запит буде розглянуто." - -#: ../../src/appx/assignments.txt:169 -msgid "Set up reviewers" -msgstr "Налаштування рецензентів" - -#: ../../src/appx/assignments.txt:171 -msgid "" -"You may share a link to pull request to a reviewer directly, but it's better " -"to set reviewer(s) on the pull request's page. Before you can select " -"reviewers, you need to add them as project contributors." -msgstr "" -"Ви можете надіслати посилання на запит безпосередньо рецензенту, але краще " -"вказати рецензента(ів) на сторінці запиту. Перш ніж ви зможете вибрати " -"рецензентів, вам потрібно додати їх як учасників проекту." - -#: ../../src/appx/assignments.txt:176 -msgid "Append collaborators" -msgstr "Додавання співавторів" - -#: ../../src/appx/assignments.txt:178 -msgid "" -"Reviews allow collaborators to comment on the changes proposed in pull " -"requests, approve the changes, or request further changes before the pull " -"request is merged. Repository administrators can require that pull requests " -"are approved before being merged." -msgstr "" -"Рецензії дозволяють учасникам коментувати зміни, запропоновані у запитах, " -"затверджувати їх або вимагати подальших змін до того, як запит буде " -"об'єднано. Адміністратори сховища можуть вимагати, щоб запити на вилучення " -"були затверджені перед об'єднанням." - -#: ../../src/appx/assignments.txt:183 -msgid "" -"Navigate to your repository homepage on GitHub and switch to **Settings** " -"tab." -msgstr "" -"Перейдіть на головну сторінку вашого сховища на GitHub і перейдіть на " -"вкладку **Налаштування**." - -#: ../../src/appx/assignments.txt:185 -msgid "Select **Collaborators and teams** menu item." -msgstr "Виберіть пункт меню **Collaborators and teams**." - -#: ../../src/appx/assignments.txt:186 -msgid "Under **Manage access** section click **Add people** button." -msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." - -#: ../../src/appx/assignments.txt:187 -msgid "In modal window start typing GitHub username." -msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." - -#: ../../src/appx/assignments.txt:188 -msgid "Select a contributor from the dropdown menu." -msgstr "Виберіть учасника зі спадного меню." - -#: ../../src/appx/assignments.txt:190 -msgid "This will send a *contributing request* to a specified user." -msgstr "Це надішле *запит* вказаному користувачеві." - -#: ../../src/appx/assignments.txt:193 -msgid "Merging changes" -msgstr "Об'єднання змін" - -#: ../../src/appx/assignments.txt:195 -msgid "" -"In case your pull request is **approved** - merge it to the trunk branch. " -"Select one of the options available:" -msgstr "" -"Якщо ваш pull request буде **схвалено** - об'єднайте його в основну гілку. " -"Виберіть один з доступних варіантів:" - -#: ../../src/appx/assignments.txt:198 -msgid "Create a merge commit" -msgstr "Create a merge commit" - -#: ../../src/appx/assignments.txt:199 -msgid "Rebase and merge" -msgstr "Rebase and merge" - -#: ../../src/appx/assignments.txt:200 -msgid "Squash and merge" -msgstr "Squash and merge" - -#: ../../src/appx/assignments.txt:202 -msgid "**Create a merge commit** suits in most of the cases." -msgstr "**Create a merge commit** підходить у більшості випадків." - -#: ../../src/appx/assignments.txt:205 -msgid "Making changes" -msgstr "Внесення змін" - -#: ../../src/appx/assignments.txt:207 -msgid "" -"In case your pull request is **rejected** or has comments - you may need to " -"provide some fixes." -msgstr "" -"Якщо ваш pull request буде **відхилено** або він матиме зауваження - вам " -"може знадобитися надати деякі виправлення." - -#: ../../src/appx/assignments.txt:210 -msgid "Do the work in your local topic branch" -msgstr "Виконайте роботу у вашій місцевій тематичній гілці" - -#: ../../src/appx/assignments.txt:211 -msgid "Push these changes to remote" -msgstr "Надішліть їх до гілки віддаленого репозиторію" - -#: ../../src/appx/assignments.txt:212 -msgid "Re-request review (if applicable)" -msgstr "Зробіть повторний запит на перегляд (за необхідності)" - -#: ../../src/appx/assignments.txt:213 -msgid "Wait until review is done" -msgstr "Дочекайтеся завершення перевірки" - -#: ../../src/appx/blog/spec.rst:10 -msgid "Blog Project Specification" -msgstr "Специфікація Проекту Блогу" - -#: ../../src/appx/blog/spec.rst:12 -msgid "" -"The project aims to develop a robust and user-friendly web application using " -"the Django framework. The primary objective is to create a blogging platform " -"that allows users to publish and manage articles on various topics. The " -"application will provide an intuitive interface for authors to compose and " -"format their articles, while also offering a seamless reading experience for " -"visitors." -msgstr "" -"Проект має на меті розробку міцного та зручного у використанні веб-додатка " -"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " -"для блогів, яка дозволить користувачам публікувати та керувати статтями на " -"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " -"форматування своїх статей, а також забезпечить безперешкодний досвід читання " -"для відвідувачів." - -#: ../../src/appx/blog/spec.rst:19 -msgid "**Key Features**" -msgstr "**Основні функції**" - -#: ../../src/appx/blog/spec.rst:22 -msgid "User Registration and Authentication" -msgstr "Реєстрація та Аутентифікація Користувачів" - -#: ../../src/appx/blog/spec.rst:23 -msgid "" -"The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and manage " -"their profile information. This feature will enable authors to have " -"personalized accounts and maintain ownership of their published articles." -msgstr "" -"Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " -"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " -"мати персоналізовані облікові записи та зберігати право власності на їхні " -"опубліковані статті." - -#: ../../src/appx/blog/spec.rst:30 -msgid "Article Management" -msgstr "Керування Статтями" - -#: ../../src/appx/blog/spec.rst:31 -msgid "" -"Authors will have the ability to create, edit, and delete articles within " -"the application. The system will offer a user-friendly editor. Additionally, " -"authors will be able to categorize articles by assigning relevant topics to " -"them." -msgstr "" -"Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." - -#: ../../src/appx/blog/spec.rst:37 -msgid "Topic Subscription:" -msgstr "Підписка на Теми:" - -#: ../../src/appx/blog/spec.rst:38 -msgid "" -"The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users " -"will receive notifications or updates whenever new articles are published in " -"those categories. This feature will enhance user engagement and ensure that " -"readers stay informed about the topics they find most valuable." -msgstr "" -"Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." - -#: ../../src/appx/blog/spec.rst:45 -msgid "" -"Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user experience " -"and incorporating essential functionalities such as user authentication, " -"article management, and topic subscriptions, the application will empower " -"users to create, share, and explore engaging content within a well-" -"structured and organized platform." -msgstr "" -"Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " -"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " -"категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про " -"найцікавіші для них теми." - -#: ../../src/appx/blog/spec.rst:52 -msgid "" -"Here is a starter repository template, that may helps: `Starter template`_." -msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." - -#: ../../src/appx/blog/spec.rst:55 -msgid "Challenge: Functional views" -msgstr "Виклик: Функціональні представлення" - -#: ../../src/appx/blog/spec.rst:57 -msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." -msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " -"ви хочете повернути в HTTP-відповіді." - -#: ../../src/appx/blog/spec.rst:61 -msgid "" -"``/about/``: Provides a regular text for a user, describing the " -"functionalities of the django site." -msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." - -#: ../../src/appx/blog/spec.rst:63 -msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via " -"the django site." -msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " -"сайт Django." - -#: ../../src/appx/blog/spec.rst:65 -msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic part " -"in it. This will be used to fetch a single article from the database." -msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " -"частину. Вона буде використовуватися для отримання однієї статті з бази " -"даних." - -#: ../../src/appx/blog/spec.rst:68 -msgid "" -"``/
    /comment/``: This view will be used to add comments to a article." -msgstr "" -"``/
    /comment/``: Це представлення буде використовуватися для " -"додавання коментарів до статті." - -#: ../../src/appx/blog/spec.rst:70 -msgid "``/create/``: A article creation form." -msgstr "``/create/``: Форма створення статті." - -#: ../../src/appx/blog/spec.rst:71 -msgid "``/
    /update/``: A view to update an existing article data." -msgstr "" -"``/
    /update/``: Представлення для оновлення існуючих даних статті." - -#: ../../src/appx/blog/spec.rst:72 -msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "" -"``/
    /delete/``: Представлення для підтвердження видалення статті." - -#: ../../src/appx/blog/spec.rst:73 -msgid "``/topics/``: A list of topics available on the site." -msgstr "``/topics/``: Перелік доступних тем на сайті." - -#: ../../src/appx/blog/spec.rst:74 -msgid "``/topics//subscribe/``: A view to subscribe for a topic." -msgstr "``/topics//subscribe/``: Представлення для підписки на тему." - -#: ../../src/appx/blog/spec.rst:75 -msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." -msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." - -#: ../../src/appx/blog/spec.rst:76 -msgid "``/profile//``: A site user's personal page." -msgstr "``/profile//``: Особиста сторінка користувача сайту." - -#: ../../src/appx/blog/spec.rst:77 -msgid "" -"``/set-password/``: This route will be used to change users' credential data." -msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " -"даних користувачів." - -#: ../../src/appx/blog/spec.rst:79 -msgid "``/set-userdata/``: This route will be user to change users' data." -msgstr "" -"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " -"користувачів." - -#: ../../src/appx/blog/spec.rst:80 -msgid "``/deactivate/``: Account deactivation (deletion) view." -msgstr "" -"``/deactivate/``: Представлення для деактивації облікового запису " -"(видалення)." - -#: ../../src/appx/blog/spec.rst:81 -msgid "``/register/``: This view contains a user registration form." -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." - -#: ../../src/appx/blog/spec.rst:82 -msgid "``/login/``: This view contains a login form." -msgstr "``/login/``: Сторінка з формою для логіна." - -#: ../../src/appx/blog/spec.rst:83 -msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." -msgstr "" -"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " -"сторінку.." - -#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 -#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 -msgid "Optional task(s)" -msgstr "Додаткові завдання" - -#: ../../src/appx/blog/spec.rst:89 -msgid "" -"``/archive///``: This view provides a list of articles " -"published on a specified month of a specified year. This view should apply " -"date validation and raise ``Http404`` for invalid paths. The valid date is a " -"year's 4-digits form followed by 1 or 2 digits representing month. Month " -"range should be limited as [1..12], leading zero may be omitted. Valid URLs " -"are:" -msgstr "" -"``/archive///``: Це представлення надає список статей, " -"опублікованих у певному місяці певного року. Це представлення повинно " -"застосовувати перевірку дати та викидати помилку ``Http404`` для " -"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " -"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " -"URL-адрес:" - -#: ../../src/appx/blog/spec.rst:103 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" - -#: ../../src/appx/blog/spec.rst:106 -msgid "" -"Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that is " -"to use a django command:" -msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " -"отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " -"Django:" - -#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 -msgid "General" -msgstr "Основне" - -#: ../../src/appx/blog/spec.rst:116 -msgid "Each model will be registered for admin site." -msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." - -#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 -msgid "Article topic" -msgstr "Тема статті" - -#: ../../src/appx/blog/spec.rst:120 -msgid "This is a simple model, that contains information about topic:" -msgstr "Ось проста модель, що містить інформацію про тему:" - -#: ../../src/appx/blog/spec.rst:122 -msgid "topic title (unique value, 64 characters or fewer)" -msgstr "назва теми (унікальне значення, не більше 64 символів)" - -#: ../../src/appx/blog/spec.rst:123 -msgid "topic short description (255 characters or fewer)" -msgstr "короткий опис теми (не більше 255 символів)" - -#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 -msgid "Article" -msgstr "Стаття" - -#: ../../src/appx/blog/spec.rst:127 -msgid "Article requires title (255 characters or fewer)." -msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." - -#: ../../src/appx/blog/spec.rst:128 -msgid "Article requires content (at least 255 characters)." -msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." - -#: ../../src/appx/blog/spec.rst:129 -msgid "" -"Creation date should be autogenerated at article creation, and would never " -"be updated." -msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не буде " -"оновлюватися пізніше." - -#: ../../src/appx/blog/spec.rst:131 -msgid "Updated date will be update at each article save." -msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." - -#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 -msgid "Article comment" -msgstr "Коментар до статті" - -#: ../../src/appx/blog/spec.rst:135 -msgid "Comment requires creation date (autogenerated)." -msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." - -#: ../../src/appx/blog/spec.rst:136 -msgid "Comment requires message text." -msgstr "Коментар вимагає наявності тексту повідомлення." - -#: ../../src/appx/blog/spec.rst:139 ../../src/appx/libms/spec.rst:220 -msgid "Relationships" -msgstr "Відносини" - -#: ../../src/appx/blog/spec.rst:141 -msgid "" -"Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created via " -"admin page. You can also refer the same model as shown below:" -msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. Для " -"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " -"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " -"також можете посилатися на ту саму модель, як показано нижче:" - -#: ../../src/appx/blog/spec.rst:154 -msgid "``article`` and ``topics`` have *many-to-many* relationship." -msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." - -#: ../../src/appx/blog/spec.rst:155 -msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can have " -"**only one** author, but users can create as many articles as they want." -msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " -"бути **лише один** автор, але користувачі можуть створювати стільки статей, " -"скільки їм потрібно." - -#: ../../src/appx/blog/spec.rst:158 -msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article may " -"be a container for many comments, but a comment is related to a single " -"article." -msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " -"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " -"однією статтею." - -#: ../../src/appx/blog/spec.rst:161 -msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " -"*article - user* relationship." -msgstr "" -"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " -"відношення *стаття - користувач*." - -#: ../../src/appx/blog/spec.rst:163 -msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can " -"prefer none or as many topics as needed and vice versa. This relationship " -"represents topics preferred by a certain blog user. Also this provides an " -"additional option to mark some of preferred topics with a **notify** flag, " -"to receive newsletters about specified topics updates. The difference " -"between *prefer* and *notify* is that *preferred* topics affect the articles " -"list for a user, and *notify* is responsible for newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " -"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " -"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " -"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " -"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " -"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " -"список статей для користувача, а *notify* відповідає за розсилку новин для " -"користувача." - -#: ../../src/appx/blog/spec.rst:174 -msgid "UML diagram" -msgstr "UML діаграми" - -#: ../../src/appx/blog/spec.rst:179 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" - -#: ../../src/appx/blog/spec.rst:181 -msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project's database." -msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." - -#: ../../src/appx/blog/spec.rst:184 -msgid "``/``: should represent a list of existing articles." -msgstr "``/``: повинен представляти список існуючих статей." - -#: ../../src/appx/blog/spec.rst:185 -msgid "``/
    /``: should represent a single existing article." -msgstr "``/
    /``: повинен представляти окрему існуючу статтю." - -#: ../../src/appx/blog/spec.rst:186 -msgid "Detail view should obtain a list of article related comments." -msgstr "" -"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." - -#: ../../src/appx/blog/spec.rst:187 -msgid "" -"``/profile//``: should contain information about user and a " -"list of articles authored by this user." -msgstr "" -"``/profile//``: повинен містити інформацію про користувача та " -"список статей, написаних цим користувачем." - -#: ../../src/appx/blog/spec.rst:189 -msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." -msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." - -#: ../../src/appx/blog/spec.rst:194 -msgid "" -"It's common to store dedicated functions/classes that supports some specific " -"business logic in a separate module called ``services.py`` or ``utils.py`` " -"within an application directory." -msgstr "" -"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." -"py`` всередині директорії додатку." - -#: ../../src/appx/blog/spec.rst:201 -msgid "" -"Create a service to fetch articles, ordered by a specified user preferences. " -"This means, topics preferred by a user affects articles orders. Queryset " -"should be ordered in way, to have articles with most corresponding topics at " -"the begging." -msgstr "" -"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " -"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " -"початку видачі." - -#: ../../src/appx/blog/spec.rst:207 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" - -#: ../../src/appx/blog/spec.rst:210 -msgid "Helpful link: `Bootstrap template`_" -msgstr "Корисне посилання: `Bootstrap template`_" - -#: ../../src/appx/blog/spec.rst:213 -msgid "Links related to user data **may be** placeholders for now." -msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " -"наразі." - -#: ../../src/appx/blog/spec.rst:217 -msgid "**All** templates should be inherited from the ``base.html`` template." -msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." - -#: ../../src/appx/blog/spec.rst:218 -msgid "" -"Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." -msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " -"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." - -#: ../../src/appx/blog/spec.rst:220 -msgid "Each page should contain a link to homepage (``/`` URL route)." -msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" -"``)." - -#: ../../src/appx/blog/spec.rst:221 -msgid "" -"Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented with a " -"custom template context processor." -msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " -"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " -"власного обробника контексту шаблону (template context processor)." - -#: ../../src/appx/blog/spec.rst:224 -msgid "Replace content block for *about* page with some static content." -msgstr "" -"Замініть блок вмісту (content block) для сторінки *about* на деякий " -"статичний вміст." - -#: ../../src/appx/blog/spec.rst:225 -msgid "" -"Application-level templates should be located within appropriate " -"applications." -msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." - -#: ../../src/appx/blog/spec.rst:231 -msgid "" -"Each page should contain a list of links to archive views for the last year." -msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." - -#: ../../src/appx/blog/spec.rst:233 -msgid "Each page should contain an inclusion-block(s) with following links:" -msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" - -#: ../../src/appx/blog/spec.rst:235 -msgid "``/registration/``: new user registration form" -msgstr "``/register/``: форма реєстрації нового користувача" - -#: ../../src/appx/blog/spec.rst:236 -msgid "``/login/``: user login form" -msgstr "``/login/``: форма логіна користувача" - -#: ../../src/appx/blog/spec.rst:237 -msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення статті" - -#: ../../src/appx/blog/spec.rst:240 -msgid "Articles list" -msgstr "Список статей" - -#: ../../src/appx/blog/spec.rst:241 -msgid "Main page contains a list of published articles." -msgstr "Головна сторінка містить список опублікованих статей." - -#: ../../src/appx/blog/spec.rst:242 -msgid "Each article entity is rendered using a custom template tag." -msgstr "" -"Кожен елемент статті відображається за допомогою власного шаблонного тегу." - -#: ../../src/appx/blog/spec.rst:243 -msgid "``article`` template tag renders information about a article object:" -msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" - -#: ../../src/appx/blog/spec.rst:245 -msgid "article title" -msgstr "заголовок статті" - -#: ../../src/appx/blog/spec.rst:246 -msgid "article content (trimmed to ~50 characters)" -msgstr "зміст статті (обрізаний до ~50 символів)" - -#: ../../src/appx/blog/spec.rst:247 -msgid "article creation date" -msgstr "дата створення статті" - -#: ../../src/appx/blog/spec.rst:248 -msgid "related topics (3 topics or fewer)" -msgstr "пов'язані теми (3 або менше)" - -#: ../../src/appx/blog/spec.rst:249 -msgid "number of related comments" -msgstr "кількість коментарів до статті" - -#: ../../src/appx/blog/spec.rst:256 -msgid "Article details" -msgstr "Деталі статті" - -#: ../../src/appx/blog/spec.rst:258 -msgid "Article update and deletion views **would not** affect data for now." -msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." - -#: ../../src/appx/blog/spec.rst:260 -msgid "" -"A article detail page contains links to **update** or **delete** current " -"article." -msgstr "" -"На сторінці деталей статті мають бути посилання на **оновлення** або " -"**видалення** поточної статті." - -#: ../../src/appx/blog/spec.rst:262 -msgid "Page provides information about article:" -msgstr "Сторінка надає інформацію про статтю:" - -#: ../../src/appx/blog/spec.rst:264 -msgid "Article title" -msgstr "Заголовок статті" - -#: ../../src/appx/blog/spec.rst:265 -msgid "Creation date" -msgstr "Дата створення" - -#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 -msgid "Author name" -msgstr "Ім'я автора" - -#: ../../src/appx/blog/spec.rst:267 -msgid "Related topics" -msgstr "Пов'язані теми" - -#: ../../src/appx/blog/spec.rst:268 -msgid "Article content" -msgstr "Вміст статті" - -#: ../../src/appx/blog/spec.rst:270 -msgid "Page contains a list of related comments." -msgstr "Сторінка містить список пов'язаних коментарів." - -#: ../../src/appx/blog/spec.rst:271 -msgid "Each comment contains:" -msgstr "Кожен коментар містить:" - -#: ../../src/appx/blog/spec.rst:274 -msgid "Comment creation time" -msgstr "Час створення коментаря" - -#: ../../src/appx/blog/spec.rst:275 -msgid "Comment message" -msgstr "Текст комментаря" - -#: ../../src/appx/blog/spec.rst:278 -msgid "Profile page" -msgstr "Строніка профілю" - -#: ../../src/appx/blog/spec.rst:279 -msgid "Author page contains information about author:" -msgstr "Сторінка автора містить інформацію про автора:" - -#: ../../src/appx/blog/spec.rst:281 -msgid "First name" -msgstr "Ім'я" - -#: ../../src/appx/blog/spec.rst:282 -msgid "Last name" -msgstr "Прізвище" - -#: ../../src/appx/blog/spec.rst:284 -msgid "Add more information, if needed." -msgstr "Додайте більше інформації за бажанням." - -#: ../../src/appx/blog/spec.rst:286 -msgid "Author page contains a list of articles created by this author." -msgstr "Сторінка автора містить список статей, створених цим автором." - -#: ../../src/appx/blog/spec.rst:287 -msgid "" -"Author page contains buttons/links to change user data and password or " -"deactivate a user's account." -msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " -"деактивації облікового запису користувача." - -#: ../../src/appx/blog/spec.rst:291 -msgid "Forms" -msgstr "Форми" - -#: ../../src/appx/blog/spec.rst:293 -msgid "" -"There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok just " -"to create a dedicated templates for future use." -msgstr "" -"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " -"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " -"використання достатньо створити окремі шаблони." - -#: ../../src/appx/blog/spec.rst:297 -msgid "" -"``/register/`` page contains a new user registration form. It should take " -"inputs from the user:" -msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " -"повинна отримувати введені дані від користувача:" - -#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 -#: ../../src/appx/libms/spec.rst:296 -msgid "username" -msgstr "username" - -#: ../../src/appx/blog/spec.rst:301 -msgid "email" -msgstr "email" - -#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 -#: ../../src/appx/libms/spec.rst:299 -msgid "password" -msgstr "password" - -#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 -#: ../../src/appx/libms/spec.rst:300 -msgid "confirm password" -msgstr "confirm password" - -#: ../../src/appx/blog/spec.rst:305 -msgid "" -"``/login/`` page contains a user login form. It should take the inputs from " -"the user:" -msgstr "" -"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " -"отримувати введені дані від користувача:" - -#: ../../src/appx/blog/spec.rst:311 -msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a " -"article's data:" -msgstr "" -"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " -"даних статті:" - -#: ../../src/appx/blog/spec.rst:314 ../../src/appx/libms/spec.rst:347 -msgid "title" -msgstr "title" - -#: ../../src/appx/blog/spec.rst:315 -msgid "relevant topics" -msgstr "відповідні теми" - -#: ../../src/appx/blog/spec.rst:316 -msgid "content" -msgstr "content" - -#: ../../src/appx/blog/spec.rst:318 -msgid "``/
    /delete`` page contains a simple delete confirmation form." -msgstr "" -"Сторінка ``/
    /delete`` містить просту форму для підтвердження " -"видалення." - -#: ../../src/appx/blog/spec.rst:319 -msgid "Change password form has two fields:" -msgstr "Форма зміни пароля має два поля:" - -#: ../../src/appx/blog/spec.rst:321 -msgid "new password" -msgstr "new password" - -#: ../../src/appx/blog/spec.rst:324 -msgid "" -"Change user's data form collects all information, that can be changed, e.g. " -"``username``, ``first name``, ``last name`` etc." -msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " -"наприклад, ``username``, ``first name``, ``last name`` та інше." - -#: ../../src/appx/blog/spec.rst:326 -msgid "" -"User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to *subscribe* " -"for the newsletters becomes available." -msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач " -"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " -"тем стає доступною опція *підписки* на розсилку новинних листів." - -#: ../../src/appx/blog/spec.rst:331 -msgid "Challenge: Articles' slugs" -msgstr "Виклик: Slug-и статей" - -#: ../../src/appx/blog/spec.rst:334 -msgid "This is an optional challenge in addition to:" -msgstr "Це додатковий виклик у додаток до:" - -#: ../../src/appx/blog/spec.rst:336 -msgid "`Challenge: Functional views`_" -msgstr "`Challenge: Functional views`_" - -#: ../../src/appx/blog/spec.rst:337 -msgid "`Challenge: Templates`_" -msgstr "`Challenge: Templates`_" - -#: ../../src/appx/blog/spec.rst:338 -msgid "`Challenge: Data models`_" -msgstr "`Challenge: Data models`_" - -#: ../../src/appx/blog/spec.rst:339 -msgid "`Challenge: ORM`_" -msgstr "`Challenge: ORM`_" - -#: ../../src/appx/blog/spec.rst:341 -msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "" -"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" - -#: ../../src/appx/blog/spec.rst:343 -msgid "required for each article" -msgstr "обов'язкове для кожної статті" - -#: ../../src/appx/blog/spec.rst:344 -msgid "unique for each article" -msgstr "унікальне для кожної статті" - -#: ../../src/appx/blog/spec.rst:346 -msgid "Create a data migration to provide slugs for existing articles." -msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." - -#: ../../src/appx/blog/spec.rst:347 -msgid "" -"``slug`` should be auto-generated on article save. The pattern is ``article." -"title-article.created_date``, e.g. \"Sample article\" created at " -"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." -msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " -"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " -"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " -"отримає slug: ``sample-blog-article-2023-03-23``." - -#: ../../src/appx/blog/spec.rst:351 -msgid "Update detail view URL path with article slug as dynamic portion." -msgstr "" -"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " -"якою буде slug статті." - -#: ../../src/appx/blog/spec.rst:354 -msgid "Challenge: Auth forms" -msgstr "Завдання: форми авторизації" - -#: ../../src/appx/blog/spec.rst:356 -msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" - -#: ../../src/appx/blog/spec.rst:358 -msgid "``username``" -msgstr "``username``" - -#: ../../src/appx/blog/spec.rst:359 -msgid "``email``" -msgstr "``email``" - -#: ../../src/appx/blog/spec.rst:360 -msgid "``password``" -msgstr "``password``" - -#: ../../src/appx/blog/spec.rst:361 -msgid "``confirm password``" -msgstr "``confirm password``" - -#: ../../src/appx/blog/spec.rst:363 -msgid "``username`` value should be validated against existing values." -msgstr "" -"Значення ``username`` повинно перевірятися на відповідність існуючим " -"значенням." - -#: ../../src/appx/blog/spec.rst:364 -msgid "``password`` and ``confirm password`` values should match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися." - -#: ../../src/appx/blog/spec.rst:365 -msgid "Create form for existing users login." -msgstr "Створити форму для входу існуючих користувачів." - -#: ../../src/appx/blog/spec.rst:366 -msgid "Validations errors are to be rendered on the template." -msgstr "Помилки перевірки повинні відображатися на шаблоні." - -#: ../../src/appx/blog/spec.rst:369 -msgid "Challenge: Authentication" -msgstr "Завдання: Автентифікація" - -#: ../../src/appx/blog/spec.rst:371 -msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." -msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." - -#: ../../src/appx/blog/spec.rst:373 -msgid "" -"For authenticated users ``/logout/`` and ``/create/`` links should be " -"visible in navbar." -msgstr "" -"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " -"мають бути видимими на панелі навігації." - -#: ../../src/appx/blog/spec.rst:375 -msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." -msgstr "" -"Якщо автентифікований користувач є адміністратором або іншим, він має " -"побачити посилання на сторінку адміністратора." - -#: ../../src/appx/blog/spec.rst:377 -msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " -"authentication process. Invalid form should provide information about " -"error(s)." -msgstr "" -"``/register/``: користувачі повинні надати всю необхідну інформацію про " -"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " -"прізвище) необов'язкові. Після створення користувача вони повинні бути " -"перенаправлені на сторінку входу для виконання процесу автентифікації. " -"Недійсна форма повинна надавати інформацію про помилку(и)." - -#: ../../src/appx/blog/spec.rst:382 -msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." -msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." - -#: ../../src/appx/blog/spec.rst:385 -msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"article creation. Then a article is created, it should be authored by the " -"currently authenticated user." -msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " -"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " -"представлення, його повинно перенаправити спочатку на сторінку входу, а " -"після успішної аутентифікації повернути на сторінку створення статті. При " -"створенні статті вона повинна мати автором поточного аутентифікованого " -"користувача." - -#: ../../src/appx/blog/spec.rst:390 -msgid "" -"``/
    /comment/``: Currently authenticated user should be referenced " -"as a comment's author." -msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " -"повинна бути зазначена його ідентифікація як автора." - -#: ../../src/appx/blog/spec.rst:392 -msgid "" -"Articles may be modified or deleted only by their authors from the detail " -"article page. However, admins can still performs articles actions from the " -"admin page." -msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " -"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " -"адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:395 -msgid "User related paths are restricted for non-authorized users." -msgstr "" -"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " -"користувачів." - -#: ../../src/appx/blog/spec.rst:397 -msgid "``/set-password/``" -msgstr "``/set-password/``" - -#: ../../src/appx/blog/spec.rst:398 -msgid "``/set-userdata/``" -msgstr "``/set-userdata/``" - -#: ../../src/appx/blog/spec.rst:400 -msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user as " -"*deleted* and log them user." -msgstr "" -"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для цього " -"користувача." - -#: ../../src/appx/blog/spec.rst:406 -msgid "" -"Adjust the order of article list according to authenticated user " -"preferences. For anonymous users keep default ordering." -msgstr "" -"Призначте зміну порядку списку статей відповідно до вподобань " -"аутентифікованого користувача. Для анонімних користувачів залиште типове " -"сортування за замовчуванням." - -#: ../../src/appx/blog/spec.rst:408 -msgid "" -"Implement account reactivation behavior. The exact workflow does not mater. " -"The sample scenario is to collect email for the user and check it for " -"existing in the database. After that create a request for admin to activate " -"an account and send a confirmation email, when all is done." -msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " -"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " -"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " -"цього створіть запит для адміністратора на активацію облікового запису та " -"надішліть підтверджувальний лист електронною поштою, коли все буде готово." - -#: ../../src/appx/blog/spec.rst:414 -msgid "Challenge: Article related forms" -msgstr "Виклик: Форми пов'язані зі статтями" - -#: ../../src/appx/blog/spec.rst:416 -msgid "" -"Implement a article form. This form will be used to create new articles and " -"to update existing ones." -msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " -"статей та оновлення існуючих." - -#: ../../src/appx/blog/spec.rst:418 -msgid "Each created article should have at least one related topic." -msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." - -#: ../../src/appx/blog/spec.rst:419 -msgid "Implement a comment form to gather a comment from a user." -msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." - -#: ../../src/appx/blog/spec.rst:420 -msgid "" -"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " -"moment." -msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" -"``." - -#: ../../src/appx/blog/spec.rst:422 -msgid "Implement functionality:" -msgstr "Реалізуйте функціональність:" - -#: ../../src/appx/blog/spec.rst:424 -msgid "article creation" -msgstr "створення статті" - -#: ../../src/appx/blog/spec.rst:425 -msgid "article update" -msgstr "оновлення статті" - -#: ../../src/appx/blog/spec.rst:426 -msgid "article comment (create a related comment)" -msgstr "коментування статті (створення коментаря)" - -#: ../../src/appx/blog/spec.rst:427 -msgid "article deletion" -msgstr "видалення статті" - -#: ../../src/appx/blog/spec.rst:429 -msgid "Only authenticated users can create articles." -msgstr "Лише аутентифіковані користувачі можуть створювати статі." - -#: ../../src/appx/blog/spec.rst:430 -msgid "Article can be edited only by its author." -msgstr "Стаття може редагуватись лише її автором." - -#: ../../src/appx/blog/spec.rst:431 -msgid "Article can be deleted only by its author." -msgstr "Стаття може видалятись лише її автором." - -#: ../../src/appx/blog/spec.rst:432 -msgid "Only authenticated users can comment articles." -msgstr "Лише аутентифіковані користувачі можуть коментувати статті." - -#: ../../src/appx/blog/spec.rst:439 -msgid "Challenge: Class-Based Views" -msgstr "Завдання: Class-Based Views" - -#: ../../src/appx/blog/spec.rst:441 -msgid "Replace **all** existing views via ``CBV``." -msgstr "Замінити **всі** існуючі перегляди через ``CBV``." - -#: ../../src/appx/blog/spec.rst:442 -msgid "Existing functionality should not be corrupted." -msgstr "Існуюча функціональність не повинна бути пошкоджена." - -#: ../../src/appx/blog/spec.rst:445 -msgid "It's ok to use built-in Django CBV if needed." -msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " -"(CBV)." - -#: ../../src/appx/blog/spec.rst:448 -msgid "Challenge: Serializers" -msgstr "Завдання: Серіалізатори" - -#: ../../src/appx/blog/spec.rst:452 -msgid "" -"Topic serializer is for read-only purposes only. Topics can be created via " -"admin page only." -msgstr "" -"Серіалізатор для теми призначений лише для операцій читання (read-only). " -"Теми можна створювати лише через адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:454 -msgid "" -"Serialized data should contain all available data, e.g. ``pk``, ``title``, " -"``description``." -msgstr "" -"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " -"``pk``, ``title``, ``description``." - -#: ../../src/appx/blog/spec.rst:459 -msgid "" -"article comment serializer can perform both reading and writing operations. " -"But it can't be used to *update* or *delete* comment." -msgstr "" -"серіалізатор коментаря статті може виконувати як операції читання, так і " -"операції запису. Проте він не може використовуватися для оновлення або " -"видалення коментаря." - -#: ../../src/appx/blog/spec.rst:461 -msgid "" -"Random, or pre-defined user may be used as comment's author for now. This " -"will be fixed in the future." -msgstr "" -"Наразі можна використовувати випадкового або попередньо визначеного " -"користувача як автора коментаря. Це буде виправлено у майбутньому." - -#: ../../src/appx/blog/spec.rst:466 -msgid "" -"article serializer provides full access to articles. All operations are " -"available: list, retrieve, create, update and destroy." -msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " -"отримання списку, отримання окремої статті, створення нової статті, " -"оновлення та видалення." - -#: ../../src/appx/blog/spec.rst:470 -msgid "User" -msgstr "Користувач" - -#: ../../src/appx/blog/spec.rst:471 -msgid "" -"User serializer provides full access to site users data. All operations are " -"available for now: list, retrieve, create, update and destroy. This behavior " -"will be fixed in the future, to prevent unauthorized data modifications." -msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " -"Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та видалення. " -"Однак, ця поведінка буде виправлена у майбутньому для запобігання " -"несанкціонованим змінам даних." - -#: ../../src/appx/blog/spec.rst:477 -msgid "Challenge: API views" -msgstr "Завдання: API views" - -#: ../../src/appx/blog/spec.rst:479 -msgid "All blog-site functionality are to be reflected via REST API." -msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API." - -#: ../../src/appx/blog/spec.rst:482 -msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This will " -"be fixed in the next challenge." -msgstr "" -"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " -"запиту. Це буде виправлено у наступному розділі." - -#: ../../src/appx/blog/spec.rst:486 -msgid "Challenge: Authentication and Permissions" -msgstr "Завдання: Автентифікація та Дозволи" - -#: ../../src/appx/blog/spec.rst:488 -msgid "Implement authentication system for REST API." -msgstr "Реалізуйте систему аутентифікації для REST API." - -#: ../../src/appx/blog/spec.rst:490 -msgid "For non-authenticated users it is possible to create a new account" -msgstr "" -"Для неаутентифікованих користувачів можлива створення нового облікового " -"запису" - -#: ../../src/appx/blog/spec.rst:491 -msgid "" -"For non-authenticated users it is possible to obtain authentication data." -msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." - -#: ../../src/appx/blog/spec.rst:494 -msgid "" -"Access to user data is restricted. Authorized users can manipulate only " -"their own data (e.g. ``retrieve``, ``update``)." -msgstr "" -"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " -"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " -"``update``)." - -#: ../../src/appx/blog/spec.rst:496 -msgid "" -"Admins can retrieve all users data (``list``), but can't change them via " -"REST API. However, it is still possible via admin page." -msgstr "" -"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " -"можуть змінювати їх через REST API. Однак це все ще можливо через " -"адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:498 -msgid "" -"Authorized users can ``create`` articles or ``update`` and ``delete`` " -"articles created by them." -msgstr "" -"Авторизовані користувачі можуть ``create`` статті або ``update`` та " -"``delete`` статті, створені ними." - -#: ../../src/appx/blog/spec.rst:500 -msgid "Authorized users can add comments to a specified article." -msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." - -#: ../../src/appx/code_edit.txt:-1 -msgid "Code editors and IDEs for Python" -msgstr "Редактори коду та IDE для Python" - -#: ../../src/appx/code_edit.txt:-1 -msgid "python, editor, ide" -msgstr "python, editor, ide" - -#: ../../src/appx/code_edit.txt:8 ../../src/appx/env_path.txt:8 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/appx/code_edit.txt:16 -msgid "Code Editors" -msgstr "Редактори Коду" - -#: ../../src/appx/code_edit.txt:18 -msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" -msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" - -#: ../../src/appx/conv_store.txt:-1 -msgid "Convenience store challenge" -msgstr "Завдання: продуктовий магазин" - -#: ../../src/appx/conv_store.txt:-1 -msgid "python, basics, oop, object-oriented programming" -msgstr "python, basics, oop, object-oriented programming" - -#: ../../problem-sets/src/conv_store/challenge.rst:3 -msgid "Convenience Store Challenge" -msgstr "Convenience Store Challenge" - -#: ../../problem-sets/src/conv_store/challenge.rst:5 -msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." -msgstr "" -"Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." - -#: ../../problem-sets/src/conv_store/challenge.rst:14 -msgid "Your notes are here," -msgstr "Ваші нотатки ось," - -#: ../../problem-sets/src/conv_store/challenge.rst:18 -msgid "Products and Carts" -msgstr "Товари та кошик" - -#: ../../problem-sets/src/conv_store/challenge.rst:20 -msgid "" -"It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." -msgstr "" -"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " -"першому етапі головною метою є впровадження моделей даних - класів для " -"роботи з даними в майбутньому." - -#: ../../problem-sets/src/conv_store/challenge.rst:25 -msgid "Product" -msgstr "Товар" - -#: ../../problem-sets/src/conv_store/challenge.rst:27 -msgid "This class represents goods available to purchase in the store." -msgstr "Цей клас представляє товари, які можна придбати в магазині." - -#: ../../problem-sets/src/conv_store/challenge.rst:29 -msgid "Each product instance should have next attributes:" -msgstr "Кожен екземпляр продукту повинен мати такі атрибути:" - -#: ../../problem-sets/src/conv_store/challenge.rst:31 -msgid "``name`` - a product title (e.g. \"apple\", \"juice\")" -msgstr "``name`` - назва товару (прик. \"apple\", \"juice\")" - -#: ../../problem-sets/src/conv_store/challenge.rst:32 -msgid "``price`` - a price for a single product unit (e.g. 3655, 500, 12999)" -msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" - -#: ../../problem-sets/src/conv_store/challenge.rst:33 -msgid "``unit`` - a size of a single product's unit (e.g. 1, 0.500, 12)" -msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" - -#: ../../problem-sets/src/conv_store/challenge.rst:35 -msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." -msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." - -#: ../../problem-sets/src/conv_store/challenge.rst:39 -msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." -msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " -"``float``). Якщо аргумент кількості пропущено, просто використовуйте " -"значення атрибута ``unit``." - -#: ../../problem-sets/src/conv_store/challenge.rst:46 -#: ../../problem-sets/src/conv_store/challenge.rst:77 -msgid "Code explanation" -msgstr "Пояснення коду" - -#: conv_store.models.Product:1 of -msgid "Product model implementation" -msgstr "Реалізація моделі товару" - -#: conv_store.models.Product conv_store.models.ShoppingCart of wtk.models.Enemy -#: wtk.models.Player -msgid "Variables" -msgstr "Змінні" - -#: conv_store.models.Product:3 of -msgid "the name of a product" -msgstr "назва товару" - -#: conv_store.models.Product:5 of -msgid "the price for a single product unit" -msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" - -#: conv_store.models.Product:7 of -msgid "the size of a single product unit" -msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" - -#: conv_store.models.Product:10 of -msgid "Instances of this class represent a product available for purchase." -msgstr "Цей клас представляє товари, які можна придбати в магазині." - -#: conv_store.models.Product.get_total:1 of -msgid "Return the total price for a specified amount of a product" -msgstr "Повертає загальну ціну за вказану кількість товару" - -#: conv_store.models.Product.get_total -#: conv_store.models.ShoppingCart.add_product of wtk.models.Enemy.__init__ -#: wtk.models.Player.__init__ -msgid "Parameters" -msgstr "Параметри" - -#: conv_store.models.Product.get_total:3 of -msgid "a quantity to purchase, defaults to None" -msgstr "кількість для покупки, за замовчуванням None" - -#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total -#: of wtk.engine.get_player_name wtk.models.Enemy.select_attack -#: wtk.models.Enemy.select_defence wtk.models.Player.select_attack -#: wtk.models.Player.select_defence -msgid "Returns" -msgstr "Повертає" - -#: conv_store.models.Product.get_total:6 of -msgid "total price for a specified amount of a product" -msgstr "вартість вказаної кількості товару" - -#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total -#: of -msgid "Return type" -msgstr "Тип повернення" - -#: conv_store.models.Product.get_total:9 of -msgid "" -"If the quantity argument is omitted, unit attribute value should be used " -"instead." -msgstr "" -"Якщо аргумент кількості пропущено, замість нього слід використовувати " -"значення атрибута одиниці." - -#: ../../problem-sets/src/conv_store/challenge.rst:51 -#: ../../problem-sets/src/conv_store/challenge.rst:82 -#: ../../problem-sets/src/conv_store/challenge.rst:126 -#: ../../problem-sets/src/conv_store/challenge.rst:189 -#: ../../problem-sets/src/conv_store/challenge.rst:224 -msgid "Test cases" -msgstr "Тестові приклади" - -#: ../../problem-sets/src/conv_store/challenge.rst:63 -msgid "Shopping Cart" -msgstr "Кошик для покупок" - -#: ../../problem-sets/src/conv_store/challenge.rst:65 -msgid "" -"This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." -msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." - -#: ../../problem-sets/src/conv_store/challenge.rst:68 -msgid "" -"Each cart instance should store data about ``Product`` objects in it and " -"corresponding quantity value for each individual product." -msgstr "" -"Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " -"ньому та відповідне значення кількості для кожного окремого продукту." - -#: ../../problem-sets/src/conv_store/challenge.rst:70 -msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." -msgstr "" -"``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " -"вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " -"пропущено, просто використовує натомість значення ``Product.unit``." - -#: ../../problem-sets/src/conv_store/challenge.rst:73 -msgid "" -"``ShoppingCart`` should implement ``get_total`` method to calculate the " -"total price for the entire cart contents." -msgstr "" -"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " -"загальної ціни всього вмісту кошика." - -#: conv_store.models.ShoppingCart:1 of -msgid "Shopping cart model implementation" -msgstr "Реалізація моделі кошика" - -#: conv_store.models.ShoppingCart:3 of -msgid "product appended to the shopping cart instance" -msgstr "товар, доданий до екземпляра кошика" - -#: conv_store.models.ShoppingCart:5 of -msgid "corresponding quantities for each product in cart" -msgstr "відповідна кількість для товару у кошику" - -#: conv_store.models.ShoppingCart:8 of -msgid "" -"In general shopping cart is a container for products. Instances of this " -"class handle product and corresponding quantity for each item inside a " -"shopping cart instance." -msgstr "" -"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " -"класу обробляють продукт і відповідну кількість для кожного товару в " -"екземплярі кошика для покупок." - -#: conv_store.models.ShoppingCart.add_product:1 of -msgid "Add product to the shopping cart" -msgstr "Додає товар до кошика" - -#: conv_store.models.ShoppingCart.add_product:3 of -msgid "a product instance to add to cart" -msgstr "екземпляр товару, щоб додати до кошика" - -#: conv_store.models.ShoppingCart.add_product:5 of -msgid "a quantity of a product to add. Defaults to the product unit value." -msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." - -#: conv_store.models.ShoppingCart.add_product:9 of -msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." -msgstr "" -"Цей метод додає екземпляр продукту та відповідне значення кількості до " -"кошика." - -#: conv_store.models.ShoppingCart.get_total:1 of -msgid "Return the total price for all the product in the cart" -msgstr "Повертає загальну вартість усіх товарів у кошику" - -#: conv_store.models.ShoppingCart.get_total:3 of -msgid "total cart price" -msgstr "загальна вартість кошика" - -#: ../../problem-sets/src/conv_store/challenge.rst:97 -msgid "Initialization, Representation and Type Casting" -msgstr "Ініціалізація, представлення та приведення типів" - -#: ../../problem-sets/src/conv_store/challenge.rst:99 -msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." -msgstr "" -"Важко встановлювати властивості одну за одною, також " -"неінформативноотримувати представлення рядків об'єктів за замовчуванням. " -"Настав час це виправити." - -#: ../../problem-sets/src/conv_store/challenge.rst:102 -msgid "``Product`` should be initialized with all required data, no defaults." -msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." - -#: ../../problem-sets/src/conv_store/challenge.rst:103 -msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." -msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." - -#: ../../problem-sets/src/conv_store/challenge.rst:105 -msgid "Provide a human readable representations. For example:" -msgstr "Надайте представлення, зрозумілі людині. Наприклад:" - -#: ../../problem-sets/src/conv_store/challenge.rst:107 -msgid "``Product('juice', 35.66, 1)``" -msgstr "``Product('juice', 35.66, 1)``" - -#: ../../problem-sets/src/conv_store/challenge.rst:108 -msgid "````" -msgstr "````" - -#: ../../problem-sets/src/conv_store/challenge.rst:110 -msgid "" -"While casting product instance to ``str`` type it should be equal to its " -"``name`` attribute value." -msgstr "" -"Під час приведення екземпляра продукту до типу ``str`` він повинен " -"дорівнювати значенню атрибута ``name``." - -#: ../../problem-sets/src/conv_store/challenge.rst:112 -msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." -msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." - -#: ../../problem-sets/src/conv_store/challenge.rst:114 -msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." -msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." - -#: ../../problem-sets/src/conv_store/challenge.rst:116 -msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." -msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." - -#: ../../problem-sets/src/conv_store/challenge.rst:119 -msgid "Implement equality operator support for your objects:" -msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" - -#: ../../problem-sets/src/conv_store/challenge.rst:121 -msgid "consider products equal if all their properties are the same" -msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" - -#: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" -msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" - -#: ../../problem-sets/src/conv_store/challenge.rst:148 -msgid "Payment Processors" -msgstr "Опрацювання платежів" - -#: ../../problem-sets/src/conv_store/challenge.rst:150 -msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" -msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" - -#: ../../problem-sets/src/conv_store/challenge.rst:153 -msgid "cart validation - it should not be empty or already purchased" -msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" - -#: ../../problem-sets/src/conv_store/challenge.rst:154 -msgid "payment validation - various payment types requires various validations" -msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" - -#: ../../problem-sets/src/conv_store/challenge.rst:155 -msgid "purchasing the cart" -msgstr "купівля кошика" - -#: ../../problem-sets/src/conv_store/challenge.rst:157 -msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." -msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." - -#: ../../problem-sets/src/conv_store/challenge.rst:160 -msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." -msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." - -#: ../../problem-sets/src/conv_store/challenge.rst:163 -msgid "" -"Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." -msgstr "" -"Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " -"аргументів і повертає значення логічного типу. Це абстрактний клас для " -"майбутнього використання." - -#: ../../problem-sets/src/conv_store/challenge.rst:166 -msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." -msgstr "" -"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " -"об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " -"майбутнього використання." - -#: ../../problem-sets/src/conv_store/challenge.rst:169 -msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." -msgstr "" -"Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " -"цього класу вважаються завжди дійсними." - -#: ../../problem-sets/src/conv_store/challenge.rst:171 -msgid "Inherit ``CodeValidator`` from the base validator." -msgstr "Успадкувати ``CodeValidator`` від основного валідатора." - -#: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." - -#: ../../problem-sets/src/conv_store/challenge.rst:174 -msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." -msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." - -#: ../../problem-sets/src/conv_store/challenge.rst:178 -msgid "" -"Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " -"``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." -msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." - -#: ../../problem-sets/src/conv_store/challenge.rst:183 -msgid "" -"Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " -"``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing card payment...\" and \"Security code: {code}\" should be " -"printed out." -msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." - -#: ../../problem-sets/src/conv_store/challenge.rst:203 -msgid "More Enhancements for Shopping Carts" -msgstr "Більше покращень для кошиків для покупок" - -#: ../../problem-sets/src/conv_store/challenge.rst:205 -msgid "Make your ``ShoppingCart`` an actual container" -msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" - -#: ../../problem-sets/src/conv_store/challenge.rst:207 -msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." -msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." - -#: ../../problem-sets/src/conv_store/challenge.rst:209 -msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." -msgstr "" -"Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " -"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " -"float]]``)." - -#: ../../problem-sets/src/conv_store/challenge.rst:213 -msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." -msgstr "" -"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " -"примірник продукту та відповідну кількість для кожної ітерації." - -#: ../../problem-sets/src/conv_store/challenge.rst:215 -msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." -msgstr "" -"Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " -"кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " -"натомість відповідне значення кількості." - -#: ../../problem-sets/src/conv_store/challenge.rst:218 -msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." -msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." - -#: ../../problem-sets/src/conv_store/challenge.rst:220 -msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." -msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." - -#: ../../problem-sets/src/conv_store/challenge.rst:249 -msgid "Testing Software" -msgstr "Тестування програмного забезпечення" - -#: ../../problem-sets/src/conv_store/challenge.rst:251 -msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." -msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." - -#: ../../problem-sets/src/conv_store/challenge.rst:253 -msgid "Tests should be located inside of \"tests\" directory." -msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." - -#: ../../problem-sets/src/conv_store/challenge.rst:254 -msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." - -#: ../../problem-sets/src/conv_store/challenge.rst:255 -msgid "Project dependencies are to be updated." -msgstr "Залежності проекту потрібно оновити." - -#: ../../src/appx/env_path.txt:-1 -msgid "Setting up environment variables" -msgstr "Встановлення змінних середовища" - -#: ../../src/appx/env_path.txt:-1 -msgid "settings, environment, variables" -msgstr "settings, environment, variables" - -#: ../../src/appx/env_path.txt:16 -msgid "Issue - System Environment PATH" -msgstr "Проблема - System Environment PATH" - -#: ../../src/appx/libms/spec.rst:3 -msgid "Library Management System - Specification" -msgstr "Система Керування Бібліотекою - Специфікація" - -#: ../../src/appx/libms/spec.rst:5 -msgid "" -"The Library Management System is a Django-based web application that offers " -"a digital platform for managing and interacting with a library's collection. " -"It streamlines the processes of book lending, returns, and inventory " -"management, while ensuring easy access for users and librarians alike. " -"Through this system, users can search for available books, place borrowing " -"requests, and manage their borrowed items. Librarians, on the other hand, " -"oversee the addition, update, and removal of book records, and can approve " -"or decline borrowing requests. The system also supports diverse user roles, " -"from regular members to staff and administrators, each with distinct " -"capabilities." -msgstr "" -"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " -"пропонує цифрову платформу для управління та взаємодії з колекцією " -"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " -"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " -"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " -"книги, робити запити на позику та керувати позиченими предметами. " -"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " -"записів книг та можуть схвалювати або відхиляти запити на позику. Система " -"також підтримує різноманітні ролі користувачів, від звичайних членів до " -"персоналу та адміністраторів, кожен з яких має відмінні можливості." - -#: ../../src/appx/libms/spec.rst:15 -msgid "" -"A well-structured user interface ensures that all functionalities are easily " -"accessible, making the library management process seamless and efficient. " -"This project aims to merge traditional library functions with modern " -"technological innovations, promoting efficiency and an enhanced user " -"experience." -msgstr "" -"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " -"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " -"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " -"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " -"покращенню користувацького досвіду." - -#: ../../src/appx/libms/spec.rst:22 -msgid "User roles" -msgstr "Ролі користувачів" - -#: ../../src/appx/libms/spec.rst:25 -msgid "" -"It is essential for developers to consider security aspects when " -"implementing these roles to ensure that users cannot perform actions outside " -"their designated role's scope." -msgstr "" -"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " -"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " -"рамки призначеної їм ролі." - -#: ../../src/appx/libms/spec.rst:30 -msgid "Admins" -msgstr "Адміністратори" - -#: ../../src/appx/libms/spec.rst:32 -msgid "" -"Superusers have full control over the entire system. They can access and " -"manage all functionalities provided by the Django admin site." -msgstr "" -"Адміністратори мають повний контроль над усією системою. Вони можуть " -"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " -"керувати ними." - -#: ../../src/appx/libms/spec.rst:35 -msgid "Admins can create, modify, or delete any record within the application." -msgstr "" -"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " -"додатку." - -#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 -#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 -msgid "Capabilities" -msgstr "Можливості" - -#: ../../src/appx/libms/spec.rst:39 -msgid "Access Django admin site" -msgstr "Доступ до адміністративного сайту Django" - -#: ../../src/appx/libms/spec.rst:42 -msgid "Librarians" -msgstr "Бібліотекарі" - -#: ../../src/appx/libms/spec.rst:44 -msgid "" -"Staff personnel are in charge of day-to-day operations within the library. " -"They can add new books to the library's collection, manage existing books' " -"details, and accept or decline borrow requests from regular users." -msgstr "" -"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " -"можуть додавати нові книги до бібліотечної колекції, керувати даними про " -"наявні книги, а також приймати або відхиляти запити від постійних " -"користувачів." - -#: ../../src/appx/libms/spec.rst:50 -msgid "Management of the library catalogue" -msgstr "Управління бібліотечним каталогом" - -#: ../../src/appx/libms/spec.rst:52 -msgid "Add, modify or delete authors" -msgstr "Додавати, змінювати або видаляти авторів" - -#: ../../src/appx/libms/spec.rst:53 -msgid "Add, modify or delete genres" -msgstr "Додавати, змінювати або видаляти жанри" - -#: ../../src/appx/libms/spec.rst:54 -msgid "Add, modify or delete books' details" -msgstr "Додавати, змінювати або видаляти дані про книги" - -#: ../../src/appx/libms/spec.rst:56 -msgid "Review borrow requests from regular users" -msgstr "Переглядати запити на позичення від користувачів" - -#: ../../src/appx/libms/spec.rst:57 -msgid "Accept or decline borrow requests" -msgstr "Приймати або відхиляти запити на позичення" - -#: ../../src/appx/libms/spec.rst:58 -msgid "Register returned books and update their status" -msgstr "Реєструвати повернені книги та оновлювати їх статус" - -#: ../../src/appx/libms/spec.rst:61 -msgid "Regular" -msgstr "Звичайний" - -#: ../../src/appx/libms/spec.rst:63 -msgid "" -"Regular registered users are the members of the library. They can search " -"books, request to borrow them, and are responsible for returning borrowed " -"books on time." -msgstr "" -"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " -"книги, запитувати їх, а також несуть відповідальність за своєчасне " -"повернення позичених книг." - -#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 -msgid "Browse the books' catalogue" -msgstr "Переглядати каталог книг" - -#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 -msgid "View details of a book" -msgstr "Переглядати деталі книги" - -#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 -msgid "Search books" -msgstr "Шукати книги" - -#: ../../src/appx/libms/spec.rst:72 -msgid "Request to borrow available books" -msgstr "Робити запит на позичення доступних книжок" - -#: ../../src/appx/libms/spec.rst:73 -msgid "Check due date for returned books" -msgstr "Перевіряти термін повернення запозичених книжок" - -#: ../../src/appx/libms/spec.rst:74 -msgid "Return borrowed books" -msgstr "Повертати запозичені книги" - -#: ../../src/appx/libms/spec.rst:77 -msgid "Anonymous" -msgstr "Анонімні" - -#: ../../src/appx/libms/spec.rst:79 -msgid "Anonymous users are visitors who haven't logged into the system." -msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." - -#: ../../src/appx/libms/spec.rst:86 -msgid "Access to the registration or login pages" -msgstr "Доступ до сторінок реєстрації або входу" - -#: ../../problem-sets/src/wtk/challenge.rst:95 ../../src/appx/libms/spec.rst:90 -msgid "Models" -msgstr "Моделі" - -#: ../../src/appx/libms/spec.rst:93 -msgid "Author model" -msgstr "Модель авторів" - -#: ../../src/appx/libms/spec.rst:95 -msgid "" -"The ``Author`` model captures the details of the person, or group " -"responsible for creating the book." -msgstr "" -"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " -"за створення книги." - -#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 -#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 -msgid "Attributes" -msgstr "Атрибути" - -#: ../../src/appx/libms/spec.rst -msgid "Name" -msgstr "Name" - -#: ../../src/appx/libms/spec.rst:102 -msgid "The full name of the author. This should be limited to 255 characters." -msgstr "Повне ім'я автора. Не більше 255 символів." - -#: ../../src/appx/libms/spec.rst -msgid "Bio" -msgstr "Bio" - -#: ../../src/appx/libms/spec.rst:105 -msgid "A brief biography or description of the author." -msgstr "Коротка біографія або опис автора." - -#: ../../src/appx/libms/spec.rst:108 -msgid "Genre model" -msgstr "Модель жанра" - -#: ../../src/appx/libms/spec.rst:110 -msgid "" -"The ``Genre`` model represents the category or type of content a book " -"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " -"etc. Since a book can belong to more than one category at a time, it is " -"implemented as a dedicated model." -msgstr "" -"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " -"книга, наприклад, \"Художня література\", \"Нехудожня література\", " -"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " -"категорій одночасно, вона реалізована як окрема модель." - -#: ../../src/appx/libms/spec.rst:118 -msgid "The name of the genre." -msgstr "Назва жанру." - -#: ../../src/appx/libms/spec.rst:121 -msgid "Book model" -msgstr "Модель книги" - -#: ../../src/appx/libms/spec.rst:123 -msgid "" -"The ``Book`` model represents a physical book in the library's collection. " -"Each book record captures essential bibliographic information, as well as " -"details related to its current status in the library (e.g. available, " -"borrowed etc.)." -msgstr "" -"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " -"запис про книгу містить основну бібліографічну інформацію, а також деталі, " -"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " -"тощо)." - -#: ../../src/appx/libms/spec.rst -msgid "Title" -msgstr "Title" - -#: ../../src/appx/libms/spec.rst:131 -msgid "The name or title of the book (255 characters or fewer)." -msgstr "Назва книги (255 символів або менше)." - -#: ../../src/appx/libms/spec.rst -msgid "Summary" -msgstr "Summary" - -#: ../../src/appx/libms/spec.rst:134 -msgid "A brief description or synopsis of the book." -msgstr "Короткий опис або синопсис книги." - -#: ../../src/appx/libms/spec.rst -msgid "ISBN" -msgstr "ISBN" - -#: ../../src/appx/libms/spec.rst:137 -msgid "International Standard Book Number, a unique identifier for books." -msgstr "" -"International Standard Book Number, унікальний ідентифікатор для книг.." - -#: ../../src/appx/libms/spec.rst -msgid "Available" -msgstr "Available" - -#: ../../src/appx/libms/spec.rst:140 -msgid "" -"Current available status of the book. Either ``True`` or ``False``. Books " -"are available by default." -msgstr "" -"Поточний статус доступності книги. Або ``True``, або ``False``. За " -"замовчуванням книги доступні." - -#: ../../src/appx/libms/spec.rst -msgid "Published date" -msgstr "Published date" - -#: ../../src/appx/libms/spec.rst:144 -msgid "The date when the book was published." -msgstr "Дата, коли книга була опублікована." - -#: ../../src/appx/libms/spec.rst -msgid "Publisher" -msgstr "Publisher" - -#: ../../src/appx/libms/spec.rst:147 -msgid "" -"The entity or company responsible for the production and distribution of the " -"book." -msgstr "" -"Організація або компанія, відповідальна за виробництво та розповсюдження " -"книги." - -#: ../../src/appx/libms/spec.rst -msgid "Genre(s)" -msgstr "Genre(s)" - -#: ../../src/appx/libms/spec.rst:151 -msgid "" -"The category or type of content the book falls under (e.g., Fiction, Non-" -"Fiction, Science)." -msgstr "" -"Категорія або тип контенту, до якого належить книга (наприклад, художня " -"література, нон-фікшн, наукова література)." - -#: ../../src/appx/libms/spec.rst -msgid "Author(s)" -msgstr "Author(s)" - -#: ../../src/appx/libms/spec.rst:156 -msgid "" -"The name of the person or group responsible for creating the content of the " -"book." -msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." - -#: ../../src/appx/libms/spec.rst -msgid "Borrower" -msgstr "Borrower" - -#: ../../src/appx/libms/spec.rst:160 -msgid "The user who has currently borrowed the book, if applicable." -msgstr "Користувач, який наразі позичив книгу, якщо це можливо." - -#: ../../src/appx/libms/spec.rst:163 -msgid "Borrow request model" -msgstr "Модель запиту на позику" - -#: ../../src/appx/libms/spec.rst:165 -msgid "" -"The ``BorrowRequest`` model captures the intent of a user to borrow a " -"specific book. It tracks the status of the request, whether it's pending, " -"approved, declined, or completed." -msgstr "" -"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " -"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." - -#: ../../src/appx/libms/spec.rst -msgid "Book" -msgstr "Book" - -#: ../../src/appx/libms/spec.rst:173 -msgid "A reference to a book to be borrowed." -msgstr "Посилання на книгу, яку потрібно взяти." - -#: ../../src/appx/libms/spec.rst:176 -msgid "A reference to a user who wants to borrow a book." -msgstr "Посилання на користувача, який хоче взяти книгу." - -#: ../../src/appx/libms/spec.rst -msgid "Status" -msgstr "Status" - -#: ../../src/appx/libms/spec.rst:179 -msgid "The current status of the request." -msgstr "Поточний статус заявки." - -#: ../../src/appx/libms/spec.rst:181 -msgid "pending" -msgstr "pending" - -#: ../../src/appx/libms/spec.rst:182 -msgid "approved" -msgstr "approved" - -#: ../../src/appx/libms/spec.rst:183 -msgid "collected" -msgstr "collected" - -#: ../../src/appx/libms/spec.rst:184 -msgid "complete" -msgstr "complete" - -#: ../../src/appx/libms/spec.rst:185 -msgid "declined" -msgstr "declined" - -#: ../../src/appx/libms/spec.rst:187 -msgid "" -"The status constants should be encapsulated within the ``BorrowRequest`` " -"model." -msgstr "" -"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." - -#: ../../src/appx/libms/spec.rst -msgid "Overdue" -msgstr "Overdue" - -#: ../../src/appx/libms/spec.rst:202 -msgid "A flag indicating if a borrow request was overdue." -msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." - -#: ../../src/appx/libms/spec.rst -msgid "Request date" -msgstr "Request date" - -#: ../../src/appx/libms/spec.rst:205 -msgid "The date the borrow request was made. This is required." -msgstr "Дата подання запиту на позику. Це обов'язкова інформація." - -#: ../../src/appx/libms/spec.rst -msgid "Approval date" -msgstr "Approval date" - -#: ../../src/appx/libms/spec.rst:208 -msgid "The date the request was approved, if applicable. Optional." -msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." - -#: ../../src/appx/libms/spec.rst -msgid "Due date" -msgstr "Due date" - -#: ../../src/appx/libms/spec.rst:211 -msgid "" -"The date by which the book should be returned. Optional, should only be set " -"if the request if approved." -msgstr "" -"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " -"у разі схвалення запиту." - -#: ../../src/appx/libms/spec.rst -msgid "Complete date" -msgstr "Complete date" - -#: ../../src/appx/libms/spec.rst:215 -msgid "" -"The date the book was returned and the borrowing request was completed. " -"Optional, should only be set if the request has reached the \"Complete\" " -"status." -msgstr "" -"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " -"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." - -#: ../../src/appx/libms/spec.rst:228 -msgid "Book to author" -msgstr "Книга до автору" - -#: ../../src/appx/libms/spec.rst:230 -msgid "" -"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " -"can have **one or more** ``authors``. This establishes a **many-to-many** " -"relationship between the two entities." -msgstr "" -"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " -"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " -"**багато-до-багатьох** між цими двома сутностями." - -#: ../../src/appx/libms/spec.rst:235 -msgid "Book to genre" -msgstr "Книга до жанру" - -#: ../../src/appx/libms/spec.rst:237 -msgid "" -"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " -"However a ``Book`` might not belong to any genre. This relationship between " -"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " -"possibility of zero genres for a book." -msgstr "" -"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " -"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " -"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " -"можливістю нульових жанрів для книги." - -#: ../../src/appx/libms/spec.rst:243 -msgid "Book to borrow request" -msgstr "Книга до запиту на позику" - -#: ../../src/appx/libms/spec.rst:245 -msgid "" -"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " -"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " -"relationship." -msgstr "" -"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " -"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " -"зв'язок **багато-до-одного**." - -#: ../../src/appx/libms/spec.rst:250 -msgid "User to borrow request" -msgstr "Користувач до запиту на позику" - -#: ../../src/appx/libms/spec.rst:252 -msgid "" -"Each ``User`` can make multiple ``BorrowRequests``, but each " -"``BorrowRequest`` refers to only one book, forming a **many-to-one** " -"relationship." -msgstr "" -"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " -"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " -"``багато до однієї``." - -#: ../../src/appx/libms/spec.rst:256 -msgid "User to book (as a borrower)" -msgstr "Користувач до книги (як запозичувач)" - -#: ../../src/appx/libms/spec.rst:258 -msgid "" -"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " -"``Book`` can be borrowed by one user only. This forms a **one-to-one** " -"relationship." -msgstr "" -"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " -"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " -"відносини \"один до одного\"." - -#: ../../src/appx/libms/spec.rst:264 -msgid "Views and templates" -msgstr "Подання та шаблони" - -#: ../../src/appx/libms/spec.rst:267 -msgid "Admin site" -msgstr "Адмін-сайт" - -#: ../../src/appx/libms/spec.rst:269 -msgid "" -"Admin site provides the full control over the entire system. Only admins are " -"permitted to use admin site. Librarians should use their dedicated views to " -"perform operations, except special cases." -msgstr "" -"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " -"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " -"повинні використовувати свої виділені подання для виконання операцій, за " -"винятком особливих випадків." - -#: ../../src/appx/libms/spec.rst:275 -msgid "Authentication" -msgstr "Автентифікація" - -#: ../../src/appx/libms/spec.rst:278 -msgid "Login" -msgstr "Логін" - -#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 -#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 -#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 -#: ../../src/appx/libms/spec.rst:512 -msgid "Template" -msgstr "Template" - -#: ../../src/appx/libms/spec.rst:282 -msgid "" -"A form with fields for entering a username and a password, and a submit " -"button." -msgstr "" -"Форма з полями для введення імені користувача та пароля, а також кнопкою " -"\"Надіслати\"." - -#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 -#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 -#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 -#: ../../src/appx/libms/spec.rst:499 -msgid "View logic" -msgstr "View logic" - -#: ../../src/appx/libms/spec.rst:286 -msgid "" -"Validate entered credentials and authenticate the user. In case of incorrect " -"credentials, display an error message." -msgstr "" -"Перевірити введені облікові дані та автентифікувати користувача. У разі " -"неправильних облікових даних вивести повідомлення про помилку." - -#: ../../src/appx/libms/spec.rst:290 -msgid "Registration" -msgstr "Реєстрація" - -#: ../../src/appx/libms/spec.rst:294 -msgid "A form for new user registration. **Required** fields are:" -msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" - -#: ../../src/appx/libms/spec.rst:297 -msgid "first name" -msgstr "first name" - -#: ../../src/appx/libms/spec.rst:298 -msgid "last name" -msgstr "last name" - -#: ../../src/appx/libms/spec.rst:304 -msgid "Upon submission, the view should validate the provided data:" -msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" - -#: ../../src/appx/libms/spec.rst:306 -msgid "Check if username is already taken." -msgstr "Перевірте, чи не зайнято вже ім'я користувача." - -#: ../../src/appx/libms/spec.rst:307 -msgid "Ensure that password and confirm password fields match." -msgstr "" -"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." - -#: ../../src/appx/libms/spec.rst:308 -msgid "" -"Save the user's data if all validations pass. Otherwise, display appropriate " -"error messages." -msgstr "" -"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " -"відобразити відповідні повідомлення про помилки." - -#: ../../src/appx/libms/spec.rst:311 -msgid "" -"When saving passwords in the database, always store them in a hashed format, " -"never in plain text." -msgstr "" -"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " -"не у вигляді простого тексту." - -#: ../../src/appx/libms/spec.rst:315 -msgid "" -"Django's built-in ``User`` model and authentication system handle password " -"hashing by default, which is a big plus." -msgstr "" -"Вбудована в Django модель ``User`` та система автентифікації за " -"замовчуванням обробляє хешування паролів, що є великим плюсом." - -#: ../../src/appx/libms/spec.rst:319 -msgid "Borrowing History" -msgstr "Історія запозичень" - -#: ../../src/appx/libms/spec.rst:321 -msgid "This view is available only for authenticated users." -msgstr "Це подання доступне лише для авторизованих користувачів." - -#: ../../src/appx/libms/spec.rst:325 -msgid "" -"Users can see the list of **all** their borrows requests, regardless of " -"approve/decline status." -msgstr "" -"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " -"від статусу схвалення/відхилення." - -#: ../../src/appx/libms/spec.rst:330 -msgid "Authenticated users can see only their own borrow requests." -msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." - -#: ../../src/appx/libms/spec.rst:331 -msgid "" -"Librarians and admins can access borrows requests list for any user, " -"registered in the library system." -msgstr "" -"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " -"будь-якого користувача, зареєстрованого в бібліотечній системі." - -#: ../../src/appx/libms/spec.rst:335 -msgid "Library collection" -msgstr "Бібліотечний фонд" - -#: ../../src/appx/libms/spec.rst:337 -msgid "" -"These views are generally available for all (including anonymous) users. The " -"functionality for authenticated users include books borrowing." -msgstr "" -"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " -"користувачів. Функціонал для аутентифікованих користувачів включає в себе " -"можливість позичати книги." - -#: ../../src/appx/libms/spec.rst:341 -msgid "Books list" -msgstr "Список літератури" - -#: ../../src/appx/libms/spec.rst:345 -msgid "A list (or table) of books. Each book entry should provide information:" -msgstr "" -"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " -"книгу:" - -#: ../../src/appx/libms/spec.rst:348 -msgid "author(s)" -msgstr "автор(и)" - -#: ../../src/appx/libms/spec.rst:349 -msgid "summary (truncated if too long, 30 words or fewer)" -msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" - -#: ../../src/appx/libms/spec.rst:350 -msgid "availability status (either **Available** or **Unavailable**)" -msgstr "статус доступності (**Доступний** або **Не доступний**)" - -#: ../../src/appx/libms/spec.rst:354 -msgid "Querying the data" -msgstr "Запит даних" - -#: ../../src/appx/libms/spec.rst:356 -msgid "Fetch **all** books from the database" -msgstr "Отримати **усі** книги з бази даних" - -#: ../../src/appx/libms/spec.rst:358 -msgid "Checking availability status (visual mark)" -msgstr "Перевірка статусу доступності (візуальна позначка)" - -#: ../../src/appx/libms/spec.rst:360 -msgid "" -"For each book, determine its availability status. Check ``Book.available`` " -"flag." -msgstr "" -"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." -"available``." - -#: ../../src/appx/libms/spec.rst:364 -msgid "" -"A user can still create a borrowing request, regardless of the book " -"availability status. This is only the visual mark." -msgstr "" -"Користувач все одно може створити запит на позику, незалежно від статусу " -"доступності книги. Це лише візуальна позначка." - -#: ../../src/appx/libms/spec.rst:368 -msgid "Detail view" -msgstr "Детальний перегляд" - -#: ../../src/appx/libms/spec.rst:372 -msgid "" -"The detailed view of a specific book, presenting comprehensive information:" -msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" - -#: ../../src/appx/libms/spec.rst:374 -msgid "**Title**: Display the book's title prominently." -msgstr "**Назва**: Покажіть назву книги на видному місці." - -#: ../../src/appx/libms/spec.rst:375 -msgid "**Genre(s)**: List all associated genres (if any)." -msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." - -#: ../../src/appx/libms/spec.rst:376 -msgid "**Author(s)**: List all associated authors." -msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." - -#: ../../src/appx/libms/spec.rst:377 -msgid "**ISBN**: The International Standard Book Number." -msgstr "**ISBN**: Міжнародний стандартний номер книги." - -#: ../../src/appx/libms/spec.rst:378 -msgid "**Published Date**: When the book was published." -msgstr "**Дата публікації**: Коли вийшла друком книга." - -#: ../../src/appx/libms/spec.rst:379 -msgid "" -"**Publisher**: The name of the entity or company responsible for publishing" -msgstr "" -"**Видавець**: Назва організації або компанії, відповідальної за публікацію" - -#: ../../src/appx/libms/spec.rst:380 -msgid "**Summary**: A full summary or description of the book. the book." -msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." - -#: ../../src/appx/libms/spec.rst:382 -msgid "**Action Buttons** (For authenticated users only):" -msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" - -#: ../../src/appx/libms/spec.rst:384 -msgid "" -"**Borrow Request Button**: If the user has no associated borrow request they " -"can create a new one." -msgstr "" -"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " -"позику, він може створити новий." - -#: ../../src/appx/libms/spec.rst:386 -msgid "" -"**Gather Book Button**: If the user's borrow request for this book has been " -"approved, allow the user to confirm they've picked up the book." -msgstr "" -"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " -"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." - -#: ../../src/appx/libms/spec.rst:391 -msgid "**Fetching Book Details**:" -msgstr "**Доступ до деталей книги**:" - -#: ../../src/appx/libms/spec.rst:393 -msgid "" -"Use the book's identifier (usually a primary key) to fetch its details from " -"the database." -msgstr "" -"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " -"інформацію про неї з бази даних." - -#: ../../src/appx/libms/spec.rst:396 -msgid "**Checking User Authentication**:" -msgstr "**Перевірка автентичності користувача**:" - -#: ../../src/appx/libms/spec.rst:398 -msgid "" -"Determine if a user is authenticated. If they are, display the appropriate " -"action buttons based on the book's availability status and any existing " -"borrow requests by the user." -msgstr "" -"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " -"кнопки дій на основі статусу доступності книги та наявних запитів " -"користувача на позику." - -#: ../../src/appx/libms/spec.rst:402 -msgid "**Handling Borrow Requests**:" -msgstr "**Обробка запитів на позику**:" - -#: ../../src/appx/libms/spec.rst:404 -msgid "If an authenticated user clicks on the \"Borrow Request\" button:" -msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" - -#: ../../src/appx/libms/spec.rst:406 -msgid "" -"Create a new borrow request in the ``BorrowRequest`` model with status " -"\"pending\"." -msgstr "" -"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " -"розгляді\"." - -#: ../../src/appx/libms/spec.rst:408 -msgid "Update the book's status to \"Awaiting approval\"." -msgstr "Оновіть статус книги на \"Очікує затвердження\"." - -#: ../../src/appx/libms/spec.rst:409 -msgid "" -"Redirect the user to a confirmation page or display a message indicating the " -"request has been made." -msgstr "" -"Перенаправлення користувача на сторінку підтвердження або відображення " -"повідомлення про те, що запит було зроблено." - -#: ../../src/appx/libms/spec.rst:412 -msgid "**Handling Book Gathering**:" -msgstr "**Опрацювання Позики Книги**:" - -#: ../../src/appx/libms/spec.rst:414 -msgid "" -"If an authenticated user has an approved borrow request and clicks the " -"\"Gather Book\" button:" -msgstr "" -"Якщо авторизований користувач має схвалений запит на позику і натискає " -"кнопку \"Зібрати книгу\":" - -#: ../../src/appx/libms/spec.rst:417 -msgid "Update the book's status to \"Borrowed\"." -msgstr "Оновіть статус книги на \"Позичена\"." - -#: ../../src/appx/libms/spec.rst:418 -msgid "Update the borrow request's status to \"complete\"." -msgstr "Оновіть статус запиту на позику до \"завершено\"." - -#: ../../src/appx/libms/spec.rst:419 -msgid "" -"Redirect the user to a confirmation page or display a message indicating " -"they've picked up the book." -msgstr "" -"Перенаправляйте користувача на сторінку підтвердження або показуйте " -"повідомлення про те, що він забрав книгу." - -#: ../../src/appx/libms/spec.rst:423 -msgid "" -"Always ensure the user's actions are authenticated and authorized. This " -"prevents unauthorized borrow requests or gathering of books. Also, consider " -"adding error handling to manage cases where the book's details cannot be " -"fetched or any other unexpected issues." -msgstr "" -"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " -"Це запобігає несанкціонованим запитам на позику або збору книг. Також " -"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " -"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." - -#: ../../src/appx/libms/spec.rst:429 -msgid "Books management" -msgstr "Управління книгами" - -#: ../../src/appx/libms/spec.rst:431 -msgid "These views are available only for staff (librarians and admins)." -msgstr "" -"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." - -#: ../../src/appx/libms/spec.rst:434 -msgid "Authors and genres management" -msgstr "Управління авторами та жанрами" - -#: ../../src/appx/libms/spec.rst:436 -msgid "" -"Only librarians and admins can add, modify or delete authors and genres. No " -"additional views for CRUD operations required (except admin site). " -"Librarians are allowed to access authors and genres via admin site. Only " -"admins can remove authors or genres." -msgstr "" -"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " -"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " -"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " -"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " -"жанри." - -#: ../../src/appx/libms/spec.rst:442 -msgid "Book creation and update" -msgstr "Створення та оновлення книг" - -#: ../../src/appx/libms/spec.rst:444 -msgid "" -"The template should comprise a form with fields corresponding to the book's " -"attributes. Here are the essential elements for the form:" -msgstr "" -"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " -"основні елементи форми:" - -#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 -msgid "A text input field." -msgstr "Поле для введення тексту." - -#: ../../src/appx/libms/spec.rst:451 -msgid "A textarea for a brief description or synopsis." -msgstr "Текстова область для короткого опису або синопсису." - -#: ../../src/appx/libms/spec.rst:454 -msgid "A text input field for the book's International Standard Book Number." -msgstr "Поле для введення міжнародного стандартного номера книги." - -#: ../../src/appx/libms/spec.rst:457 -msgid "A checkbox indicating if a book is available. Defaults to ``True``." -msgstr "" -"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." - -#: ../../src/appx/libms/spec.rst:460 -msgid "A date input field." -msgstr "Поле для введення дати." - -#: ../../src/appx/libms/spec.rst -msgid "Genres" -msgstr "Жанри" - -#: ../../src/appx/libms/spec.rst:466 -msgid "" -"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " -"fetch available genres from the database and allow users to select zero or " -"more genres." -msgstr "" -"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " -"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " -"користувачам вибирати нуль або більше жанрів." - -#: ../../src/appx/libms/spec.rst -msgid "Authors" -msgstr "Автори" - -#: ../../src/appx/libms/spec.rst:471 -msgid "" -"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " -"fetch available authors from the database and allow users to select one or " -"more authors." -msgstr "" -"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " -"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " -"користувачам вибирати одного або декількох авторів." - -#: ../../src/appx/libms/spec.rst:477 -msgid "" -"If it's an *update* action, pre-populate the form fields with the existing " -"details of the book fetched from the database." -msgstr "" -"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " -"книги, отриманими з бази даних." - -#: ../../src/appx/libms/spec.rst:479 -msgid "For *creation*, provide an empty form for the librarian to fill in." -msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." - -#: ../../src/appx/libms/spec.rst:480 -msgid "Ensure the published date is logical (e.g. not a future date)." -msgstr "" -"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " -"майбутнього)." - -#: ../../src/appx/libms/spec.rst:481 -msgid "Validate required inputs, according to general ``Book`` model rules." -msgstr "" -"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " -"``Book``." - -#: ../../src/appx/libms/spec.rst:482 -msgid "" -"If validations pass: save changes to the database; otherwise, provide " -"helpful error messages." -msgstr "" -"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " -"випадку надайте корисні повідомлення про помилки." - -#: ../../src/appx/libms/spec.rst:486 -msgid "" -"You MAY provide a mechanism (like modal or a quick entry form) to add a new " -"genre or author without leaving the book form page." -msgstr "" -"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " -"введення) для додавання нового жанру або автора, не виходячи зі сторінки " -"форми книги." - -#: ../../src/appx/libms/spec.rst:490 -msgid "Book deletion" -msgstr "Видалення книги" - -#: ../../src/appx/libms/spec.rst:492 -msgid "" -"Only librarians and administrators are permitted to perform this action." -msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." - -#: ../../src/appx/libms/spec.rst:496 -msgid "A confirm delete form with **Submit** and **Cancel** buttons." -msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." - -#: ../../src/appx/libms/spec.rst:500 -msgid "Authorize user before deleting performing deletion." -msgstr "Авторизуйте користувача перед виконанням видалення." - -#: ../../src/appx/libms/spec.rst:501 -msgid "" -"If a form is submitted, a book should be removed from the library collection." -msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." - -#: ../../src/appx/libms/spec.rst:503 -msgid "" -"If deletion is canceled view should redirect back to book detail view page." -msgstr "" -"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " -"сторінку детального перегляду книги." - -#: ../../src/appx/libms/spec.rst:506 -msgid "Borrow requests" -msgstr "Запити на позики" - -#: ../../src/appx/libms/spec.rst:508 -msgid "" -"This view facilitates the management of borrowing requests for librarians " -"and admins, aiding in their prompt handling." -msgstr "" -"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " -"позики, допомагаючи оперативно їх обробляти." - -#: ../../src/appx/libms/spec.rst:513 -msgid "" -"Present a table showcasing the list of borrow requests. Each row embodies a " -"borrow request and encompasses:" -msgstr "" -"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " -"відображає один запит на позику і включає в себе всі запити:" - -#: ../../src/appx/libms/spec.rst:516 -msgid "**Book Title**: Title of the requested book." -msgstr "**Назва книги**: Назва запитуваної книги." - -#: ../../src/appx/libms/spec.rst:517 -msgid "**User**: Identifier of the user who initiated the request." -msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." - -#: ../../src/appx/libms/spec.rst:518 -msgid "**Request Date**: Date of the request's inception." -msgstr "**Дата запиту**: Дата створення запиту." - -#: ../../src/appx/libms/spec.rst:519 -msgid "" -"**Due Date**: - Input field for librarians to set upon approval for new " -"requests. - For approved ones, display the librarian-set date." -msgstr "" -"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " -"нових запитів. - Для затверджених запитів відображатиметься дата, " -"встановлена бібліотекарем." - -#: ../../src/appx/libms/spec.rst:522 -msgid "" -"**Status**: Present state of the request (New, Approved, Completed, " -"Declined)." -msgstr "" -"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " -"Відхилений)." - -#: ../../src/appx/libms/spec.rst:524 -msgid "" -"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " -"and freezes the due date." -msgstr "" -"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " -"статус на \"Затверджено\" і заморожує дату виконання." - -#: ../../src/appx/libms/spec.rst:526 -msgid "" -"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " -"and can prompt for a decline reason." -msgstr "" -"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " -"\"Відхилено\" і може запитувати причину відхилення." - -#: ../../src/appx/libms/spec.rst:528 -msgid "" -"**Complete Button**: Displayed for approved requests. Marks the request as " -"completed." -msgstr "" -"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " -"запит як завершений." - -#: ../../src/appx/libms/spec.rst:532 -msgid "View Logic" -msgstr "View Logic" - -#: ../../src/appx/libms/spec.rst:533 -msgid "" -"**Approve Borrow Request**: - Validate book availability. - Modify book " -"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " -"Define the return due date as per librarian. - Inform the user about the " -"approval and due date." -msgstr "" -"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " -"статус книги на \"Позичена\". - Переключіть запит на позику на " -"\"Затверджено\". - Визначте дату повернення відповідно до побажань " -"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." - -#: ../../src/appx/libms/spec.rst:540 -msgid "" -"**Decline Borrow Request**: - Change borrow request status to " -"\"Declined\". - Optionally, procure decline reason from librarian. - " -"Notify user regarding the declination." -msgstr "" -"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " -"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " -"користувача про відхилення." - -#: ../../src/appx/libms/spec.rst:545 -msgid "" -"**Complete Borrow Request**: - Ensure book's return. - Update book " -"status to \"Available\". - Toggle borrow request status to \"Completed\". " -"- If needed, record any notes or damages during return." -msgstr "" -"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " -"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " -"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " -"під час повернення." - -#: ../../src/appx/libms/spec.rst:552 -msgid "" -"Implementing reminders for near-due borrow requests can function as an alert " -"system for both the librarian and the user." -msgstr "" -"Впровадження нагадувань про прострочені запити може функціонувати як система " -"оповіщення як для бібліотекаря, так і для користувача." - -#: ../../src/appx/precedence.txt:-1 -msgid "Operator precedence in Python" -msgstr "Пріоритет операторів в Python" - -#: ../../src/appx/precedence.txt:-1 -msgid "python, basics, operator, precedence" -msgstr "python, basics, operator, precedence" - -#: ../../src/appx/precedence.txt:8 -msgid "Operator Precedence" -msgstr "Пріоритет Операторів" - -#: ../../src/appx/precedence.txt:10 -msgid "" -"The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." -msgstr "" -"У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " -"найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." - -#: ../../src/appx/precedence.txt:16 -msgid "Operator" -msgstr "Оператор" - -#: ../../src/appx/precedence.txt:16 -msgid "Description" -msgstr "Опис" - -#: ../../src/appx/precedence.txt:18 -msgid "" -"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " -"``{expressions...}``" -msgstr "" -"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " -"``{expressions...}``" - -#: ../../src/appx/precedence.txt:18 -msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" -msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" - -#: ../../src/appx/precedence.txt:23 -msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" -msgstr "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" - -#: ../../src/appx/precedence.txt:23 -msgid "Subscription, slicing, call, attribute reference" -msgstr "Підписка, нарізка, виклик, посилання на атрибути" - -#: ../../src/appx/precedence.txt:28 -msgid "``await x``" -msgstr "``await x``" - -#: ../../src/appx/precedence.txt:28 -msgid "Await expression" -msgstr "Вираз Await" - -#: ../../src/appx/precedence.txt:30 -msgid "``**``" -msgstr "``**``" - -#: ../../src/appx/precedence.txt:30 -msgid "Exponentiation [#]_" -msgstr "Піднесення до степеня [#]_" - -#: ../../src/appx/precedence.txt:32 -msgid "``+x``, ``-x``, ``~x``" -msgstr "``+x``, ``-x``, ``~x``" - -#: ../../src/appx/precedence.txt:32 -msgid "Positive, negative, bitwise NOT" -msgstr "Позитивне, негативне, побітове НІ" - -#: ../../src/appx/precedence.txt:34 -msgid "``*``, ``@``, ``/``, ``//``, ``%``" -msgstr "``*``, ``@``, ``/``, ``//``, ``%``" - -#: ../../src/appx/precedence.txt:34 -msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" -msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" - -#: ../../src/appx/precedence.txt:37 -msgid "``+``, ``-``" -msgstr "``+``, ``-``" - -#: ../../src/appx/precedence.txt:37 -msgid "Addition and subtraction" -msgstr "Додавання і віднімання" - -#: ../../src/appx/precedence.txt:39 -msgid "``<<``, ``>>``" -msgstr "``<<``, ``>>``" - -#: ../../src/appx/precedence.txt:39 -msgid "Shifts" -msgstr "Зсуви" - -#: ../../src/appx/precedence.txt:41 -msgid "``&``" -msgstr "``&``" - -#: ../../src/appx/precedence.txt:41 -msgid "Bitwise AND" -msgstr "Побітове І" - -#: ../../src/appx/precedence.txt:43 -msgid "``^``" -msgstr "``^``" - -#: ../../src/appx/precedence.txt:43 -msgid "Bitwise XOR" -msgstr "Побітове XOR" - -#: ../../src/appx/precedence.txt:45 -msgid "``|``" -msgstr "``|``" - -#: ../../src/appx/precedence.txt:45 -msgid "Bitwise OR" -msgstr "Порозрядне АБО" - -#: ../../src/appx/precedence.txt:47 -msgid "" -"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " -"``==``, ``!=``" -msgstr "" -"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " -"``==``, ``!=``" - -#: ../../src/appx/precedence.txt:47 -msgid "Comparisons, including membership tests and identity tests" -msgstr "Порівняння, включаючи тести на приналежність і тести на ідентифікацію" - -#: ../../src/appx/precedence.txt:52 -msgid "``not x``" -msgstr "``not x``" - -#: ../../src/appx/precedence.txt:52 -msgid "Boolean NOT" -msgstr "Логічне НІ" - -#: ../../src/appx/precedence.txt:54 -msgid "``and``" -msgstr "``and``" - -#: ../../src/appx/precedence.txt:54 -msgid "Boolean AND" -msgstr "Логічне І" - -#: ../../src/appx/precedence.txt:56 -msgid "``or``" -msgstr "``or``" - -#: ../../src/appx/precedence.txt:56 -msgid "Boolean OR" -msgstr "Логічне АБО" - -#: ../../src/appx/precedence.txt:58 -msgid "``if - else``" -msgstr "``if - else``" - -#: ../../src/appx/precedence.txt:58 -msgid "Conditional expression (ternary ``if``)" -msgstr "Умовний вираз (трійковий ``if``)" - -#: ../../src/appx/precedence.txt:60 -msgid "``lambda``" -msgstr "``lambda``" - -#: ../../src/appx/precedence.txt:60 -msgid "Lambda expression" -msgstr "Lambda вирази" - -#: ../../src/appx/precedence.txt:62 -msgid "``=``, ``:=``" -msgstr "``=``, ``:=``" - -#: ../../src/appx/precedence.txt:62 -msgid "Assignment expression" -msgstr "Оперетор присвоєння" - -#: ../../src/appx/precedence.txt:65 -msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." -msgstr "" -"оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " -"унарний оператор праворуч (``2 ** -1`` це ``0,5``)." - -#: ../../src/appx/precedence.txt:67 -msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." -msgstr "" -"оператор ``%`` також використовується для форматування рядків; " -"застосовується той самий пріоритет." - -#: ../../src/appx/printf.txt:-1 -msgid "Formatted strings usage in Python" -msgstr "Використання форматованих рядків в Python" - -#: ../../src/appx/printf.txt:-1 -msgid "python, string, formatting" -msgstr "python, string, formatting" - -#: ../../src/appx/printf.txt:10 -msgid "``printf-style`` String Formatting" -msgstr "``printf-style`` Форматування рядків" - -#: ../../src/appx/printf.txt:12 -msgid "" -"String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об'єктом." - -#: ../../src/appx/printf.txt:19 -msgid "The conversion flag characters are:" -msgstr "Символи перетворення:" - -#: ../../src/appx/printf.txt:22 -msgid "Flag" -msgstr "Символ" - -#: ../../src/appx/printf.txt:22 ../../src/appx/printf.txt:40 -msgid "Meaning" -msgstr "Значення" - -#: ../../src/appx/printf.txt:24 -msgid "``#``" -msgstr "``#``" - -#: ../../src/appx/printf.txt:24 -msgid "The value conversion will use the \"alternative form\"" -msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" - -#: ../../src/appx/printf.txt:26 -msgid "``0``" -msgstr "``0``" - -#: ../../src/appx/printf.txt:26 -msgid "The conversion will be zero padded for numeric values" -msgstr "Перетворення буде доповнено нулем для числових значень" - -#: ../../src/appx/printf.txt:28 -msgid "``'-'``" -msgstr "``'-'``" - -#: ../../src/appx/printf.txt:28 -msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" -msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" - -#: ../../src/appx/printf.txt:31 -msgid "``' '``" -msgstr "``' '``" - -#: ../../src/appx/printf.txt:31 -msgid "(a space) A blank should be left before a positive number" -msgstr "(пробіл) Перед додатним числом слід залишити пробіл" - -#: ../../src/appx/printf.txt:33 -msgid "``'+'``" -msgstr "``'+'``" - -#: ../../src/appx/printf.txt:33 -msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" -msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" - -#: ../../src/appx/printf.txt:37 -msgid "The conversion types are:" -msgstr "Типи перетворення:" - -#: ../../src/appx/printf.txt:40 -msgid "Conversion" -msgstr "Перетворення" - -#: ../../src/appx/printf.txt:42 -msgid "``'d'``" -msgstr "``'d'``" - -#: ../../src/appx/printf.txt:42 ../../src/appx/printf.txt:44 -msgid "Signed integer decimal" -msgstr "Ціле десяткове число зі знаком" - -#: ../../src/appx/printf.txt:44 -msgid "``'i'``" -msgstr "``'i'``" - -#: ../../src/appx/printf.txt:46 -msgid "``'o'``" -msgstr "``'o'``" - -#: ../../src/appx/printf.txt:46 -msgid "Signed octal value" -msgstr "Вісімкове значення зі знаком" - -#: ../../src/appx/printf.txt:48 -msgid "``'u'``" -msgstr "``'u'``" - -#: ../../src/appx/printf.txt:48 -msgid "Obsolete type - it is identical to ``'d'``" -msgstr "Застарілий тип - ідентичний ``'d``" - -#: ../../src/appx/printf.txt:50 -msgid "``'x'``" -msgstr "``'x'``" - -#: ../../src/appx/printf.txt:50 -msgid "Signed hexadecimal (lowercase)" -msgstr "Шістнадцяткове число зі знаком (маленький регістр)" - -#: ../../src/appx/printf.txt:52 -msgid "``'X'``" -msgstr "``'X'``" - -#: ../../src/appx/printf.txt:52 -msgid "Signed hexadecimal (uppercase)" -msgstr "Шістнадцяткове число зі знаком (верхній регістр)" - -#: ../../src/appx/printf.txt:54 -msgid "``'e'``" -msgstr "``'e'``" - -#: ../../src/appx/printf.txt:54 -msgid "Floating point exponential format (lowercase)" -msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" - -#: ../../src/appx/printf.txt:56 -msgid "``'E'``" -msgstr "``'E'``" - -#: ../../src/appx/printf.txt:56 -msgid "Floating point exponential format (uppercase)" -msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" - -#: ../../src/appx/printf.txt:58 -msgid "``'f'`` ``'F'``" -msgstr "``'f'`` ``'F'``" - -#: ../../src/appx/printf.txt:58 -msgid "Floating point decimal format" -msgstr "Десятковий формат із плаваючою комою" - -#: ../../src/appx/printf.txt:61 -msgid "``'g'``" -msgstr "``'g'``" - -#: ../../src/appx/printf.txt:64 -msgid "``'G'``" -msgstr "``'G'``" - -#: ../../src/appx/printf.txt:61 -msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." -msgstr "" -"Формат з плаваючою комою. Використовує нижній регістр експоненціального " -"формату, якщо показник степеня менший за -4 або не менший за точність, " -"десятковий формат інакше." - -#: ../../src/appx/printf.txt:66 -msgid "``'c'``" -msgstr "``'c'``" - -#: ../../src/appx/printf.txt:66 -msgid "Single character (accepts integer or single character string)" -msgstr "Один символ (приймає ціле число або рядок з одним символом)" - -#: ../../src/appx/printf.txt:68 -msgid "``'r'``" -msgstr "``'r'``" - -#: ../../src/appx/printf.txt:68 -msgid "Converts any Python object using ``repr()``" -msgstr "Перетворює будь-який об'єкт Python за допомогою ``repr()``" - -#: ../../src/appx/printf.txt:70 -msgid "``'s'``" -msgstr "``'s'``" - -#: ../../src/appx/printf.txt:70 -msgid "Converts any Python object using ``str()``" -msgstr "Перетворює будь-який об'єкт Python за допомогою ``str()``" - -#: ../../src/appx/printf.txt:72 -msgid "``'a'``" -msgstr "``'a'``" - -#: ../../src/appx/printf.txt:72 -msgid "Converts any Python object using ``ascii()``" -msgstr "Перетворює будь-який об'єкт Python за допомогою ``ascii()``" - -#: ../../src/appx/printf.txt:74 -msgid "``'%'``" -msgstr "``'%'``" - -#: ../../src/appx/printf.txt:74 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." -msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." - -#: ../../src/appx/software_list.rst:-1 -msgid "Useful software list" -msgstr "Список корисного програмного забезпечення" - -#: ../../src/appx/software_list.rst:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/appx/software_list.rst:-1 -msgid "software" -msgstr "software" - -#: ../../src/appx/software_list.rst:7 -msgid "Software List" -msgstr "Список Програмного Забезпечення" - -#: ../../src/appx/software_list.rst:10 -msgid "7zip" -msgstr "7zip" - -#: ../../src/appx/software_list.rst:12 -msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." - -#: ../../src/appx/software_list.rst:14 -msgid "" -"High compression ratio in `7z format `__ with " -"**LZMA** and **LZMA2** compression" -msgstr "" -"Високий ступінь стиснення у `7z format `__ зі " -"стисненням **LZMA** і **LZMA2**" - -#: ../../src/appx/software_list.rst:16 -msgid "Supported formats:" -msgstr "Підтримувані формати:" - -#: ../../src/appx/software_list.rst:18 -msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" -msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" - -#: ../../src/appx/software_list.rst:19 -msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." -msgstr "" -"Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." - -#: ../../src/appx/software_list.rst:23 -msgid "Self-extracting capability for 7z format" -msgstr "Можливість саморозпакування для формату 7z" - -#: ../../src/appx/software_list.rst:24 -msgid "Integration with Windows Shell" -msgstr "Інтеграція з Windows Shell" - -#: ../../src/appx/software_list.rst:26 -msgid "https://7-zip.org/" -msgstr "https://7-zip.org/" - -#: ../../src/appx/software_list.rst:29 -msgid "cygwin" -msgstr "cygwin" - -#: ../../src/appx/software_list.rst:31 -msgid "" -"It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " -"provides substantial POSIX API functionality." -msgstr "" -"Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." - -#: ../../src/appx/software_list.rst:37 -msgid "**Cygwin is not**:" -msgstr "**Сygwin це не**:" - -#: ../../src/appx/software_list.rst:39 -msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." -msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." - -#: ../../src/appx/software_list.rst:41 -msgid "" -"a way to magically make native Windows apps aware of UNIX® functionality " -"like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " -"source* if you want to take advantage of Cygwin functionality." -msgstr "" -"спосіб чарівним чином зробити рідні програми Windows відомими " -"функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " -"потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " -"перевагами функціональності Cygwin." - -#: ../../src/appx/software_list.rst:46 -msgid "https://www.cygwin.com/" -msgstr "https://www.cygwin.com/" - -#: ../../src/appx/software_list.rst:49 -msgid "git [#cygwin]_" -msgstr "git [#cygwin]_" - -#: ../../src/appx/software_list.rst:51 -msgid "" -"Git is a `free and open source `__ distributed version control system designed to handle everything " -"from small to very large projects with speed and efficiency." -msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." - -#: ../../src/appx/software_list.rst:56 -msgid "https://git-scm.com/" -msgstr "https://git-scm.com/" - -#: ../../src/appx/software_list.rst:59 -msgid "Docker" -msgstr "Docker" - -#: ../../src/appx/software_list.rst:61 -msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." -msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." - -#: ../../src/appx/software_list.rst:63 -msgid "" -"Docker helps developers bring their ideas to life by conquering the " -"complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." - -#: ../../src/appx/software_list.rst:70 -msgid "https://www.docker.com/" -msgstr "https://www.docker.com/" - -#: ../../src/appx/software_list.rst:73 -msgid "PostgreSQL [#cygwin]_" -msgstr "PostgreSQL [#cygwin]_" - -#: ../../src/appx/software_list.rst:75 -msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." -msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." - -#: ../../src/appx/software_list.rst:79 -msgid "https://www.postgresql.org/" -msgstr "https://www.postgresql.org/" - -#: ../../src/appx/software_list.rst:84 -msgid "psql [#cygwin]_" -msgstr "psql [#cygwin]_" - -#: ../../src/appx/software_list.rst:86 -msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." -msgstr "" -"Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." - -#: ../../src/appx/software_list.rst:93 -msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for ``postgresql-client`` package." -msgstr "" -"У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " -"знайдіть пакет ``postgresql-client``." - -#: ../../src/appx/software_list.rst:96 -msgid "https://www.postgresql.org/docs/current/app-psql.html" -msgstr "https://www.postgresql.org/docs/current/app-psql.html" - -#: ../../src/appx/software_list.rst:99 -msgid "pgAdmin" -msgstr "pgAdmin" - -#: ../../src/appx/software_list.rst:101 -msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." -msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." - -#: ../../src/appx/software_list.rst:105 -msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." -msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." - -#: ../../src/appx/software_list.rst:107 -msgid "https://pgadmin.org/" -msgstr "https://pgadmin.org/" - -#: ../../src/appx/software_list.rst:110 -msgid "SQLite [#cygwin]_" -msgstr "SQLite [#cygwin]_" - -#: ../../src/appx/software_list.rst:112 -msgid "" -"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" -"contained `__, `high-reliability " -"`__, `full-featured `__, SQL database engine." -msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " -"`самодостатню `__, `висока надійність " -"`__, `повнофункціональний `__, двигун бази даних SQL." - -#: ../../src/appx/software_list.rst:120 -msgid "https://sqlite.org/" -msgstr "https://sqlite.org/" - -#: ../../src/appx/software_list.rst:123 -msgid "available for installation as a cygwin package" -msgstr "доступно для встановлення як пакет cygwin" - -#: ../../src/appx/wtk.txt:-1 -msgid "Knights, thieves and wizards game project" -msgstr "Проект гри рицарі, злодії та чарівники" - -#: ../../src/appx/wtk.txt:-1 -msgid "python, game, oop, object-oriented programming" -msgstr "python, game, oop, object-oriented programming" - -#: ../../problem-sets/src/wtk/challenge.rst:3 -msgid "Wizards, Thieves and Knights" -msgstr "Чарівники, Злодії та Рицарі" - -#: ../../problem-sets/src/wtk/challenge.rst:5 -msgid "" -"\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " -"Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must " -"type in his or her choice. The enemy is controlled by the script. The " -"player's goal is to gain as many score points, as it possible." -msgstr "" -"Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " -"Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " -"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " -"більше очок." - -#: ../../problem-sets/src/wtk/challenge.rst:13 -msgid "Code organization" -msgstr "Організація коду" - -#: ../../problem-sets/src/wtk/challenge.rst:15 -msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" - -#: ../../problem-sets/src/wtk/challenge.rst:27 -msgid "General playground description" -msgstr "Загальний опис ігрового процесу" - -#: ../../problem-sets/src/wtk/challenge.rst:29 -msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." -msgstr "" -"Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " -"захисту. Раунди повторюються, поки гравець не буде переможений." - -#: ../../problem-sets/src/wtk/challenge.rst:33 -msgid "Fight rules" -msgstr "Правила боротьби" - -#: ../../problem-sets/src/wtk/challenge.rst:35 -msgid "It's simple..." -msgstr "Це просто..." - -#: ../../problem-sets/src/wtk/challenge.rst:37 -msgid "**Wizard** beats **Knight**" -msgstr "**Чарівник** перемагає **Рицаря**" - -#: ../../problem-sets/src/wtk/challenge.rst:38 -msgid "**Thief** beats **Wizard**" -msgstr "**Злодій** перемагає **Чарівника**" - -#: ../../problem-sets/src/wtk/challenge.rst:39 -msgid "**Knight** beats **Thief**" -msgstr "**Рицар** перемагає **Злодія**" - -#: ../../problem-sets/src/wtk/challenge.rst:42 -msgid "Attack stage" -msgstr "Стадія атаки" - -#: ../../problem-sets/src/wtk/challenge.rst:44 -msgid "" -"Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" -msgstr "" -"Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " -"обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" - -#: ../../problem-sets/src/wtk/challenge.rst:48 -msgid "enemy health is decreased" -msgstr "здоров'я ворога зменшено" - -#: ../../problem-sets/src/wtk/challenge.rst:49 -msgid "player gains score points" -msgstr "гравець отримує очки" - -#: ../../problem-sets/src/wtk/challenge.rst:51 -msgid "In case enemy is defeated:" -msgstr "Якщо ворог переможений:" - -#: ../../problem-sets/src/wtk/challenge.rst:53 -msgid "a new enemy instance is initialized using higher level" -msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" - -#: ../../problem-sets/src/wtk/challenge.rst:54 -msgid "player gains some extra score points" -msgstr "гравець отримує додаткові очки" - -#: ../../problem-sets/src/wtk/challenge.rst:55 -msgid "next defence stage is skipped, and player attacks again" -msgstr "наступний етап захисту пропущено, і гравець атакує знову" - -#: ../../problem-sets/src/wtk/challenge.rst:58 -msgid "Defence stage" -msgstr "Стадія захисту" - -#: ../../problem-sets/src/wtk/challenge.rst:60 -msgid "" -"Player selects the choice to defend from **wizard**, **thief** or " -"**knight**, enemy selects the choice to attack from the same options by " -"random. If the attack is successful:" -msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " -"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" - -#: ../../problem-sets/src/wtk/challenge.rst:64 -msgid "player health is decreased" -msgstr "здоров'я гравця знижено" - -#: ../../problem-sets/src/wtk/challenge.rst:66 -msgid "If player is defeated:" -msgstr "Якщо гравець переможений:" - -#: ../../problem-sets/src/wtk/challenge.rst:68 -msgid "report the message about gained score points to the terminal" -msgstr "повідомляти повідомлення про набрані бали на термінал" - -#: ../../problem-sets/src/wtk/challenge.rst:69 -msgid "write down player's name and score points to \"scores.txt\" file" -msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" - -#: ../../problem-sets/src/wtk/challenge.rst:73 -msgid "Exceptions" -msgstr "Винятки" - -#: ../../problem-sets/src/wtk/challenge.rst:76 -msgid "Enemy down" -msgstr "Ворога переможено" - -#: ../../problem-sets/src/wtk/challenge.rst:78 -msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." -msgstr "" -"Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." - -#: of wtk.exceptions.EnemyDown:1 -msgid "Raised when an enemy is defeated" -msgstr "Виникає, коли ворог переможений" - -#: ../../problem-sets/src/wtk/challenge.rst:85 -msgid "Game over" -msgstr "Гра завершена" - -#: ../../problem-sets/src/wtk/challenge.rst:87 -msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." -msgstr "" -"Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." - -#: of wtk.exceptions.GameOver:1 -msgid "Raised when a player is defeated" -msgstr "Виникає, коли гравця переможено" - -#: ../../problem-sets/src/wtk/challenge.rst:95 -msgid "Models" -msgstr "Моделі" - -#: ../../problem-sets/src/wtk/challenge.rst:98 -msgid "Enemy" -msgstr "Ворог" - -#: of wtk.models.Enemy:1 -msgid "Enemy model" -msgstr "Модель супротивника" - -#: of wtk.models.Enemy:3 -msgid "enemy's level value" -msgstr "значення рівня противника" - -#: of wtk.models.Enemy:5 -msgid "enemy's instance health points" -msgstr "очки здоров'я ворога" - -#: of wtk.models.Enemy:8 -msgid "Represents the playing enemy-bot." -msgstr "Представляє граючого ворога-бота." - -#: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 -msgid "Initialize instance" -msgstr "Ініціалізувати екземпляр" - -#: of wtk.models.Enemy.__init__:3 -msgid "an enemy's level indicator" -msgstr "індикатор рівня противника" - -#: of wtk.models.Enemy.__init__:6 -msgid "Health value is equal to the level value." -msgstr "Значення здоров'я дорівнює значенню рівня." - -#: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 -msgid "Decrease health points" -msgstr "Зменшує очоки здоров'я" - -#: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health -msgid "raise" -msgstr "raise" - -#: of wtk.models.Enemy.decrease_health:3 -msgid "EnemyDown" -msgstr "EnemyDown" - -#: of wtk.models.Enemy.decrease_health:5 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``EnemyDown`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``EnemyDown``." - -#: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 -msgid "Return a random fight choice" -msgstr "Повертає випадковий варіант для бою" - -#: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 -#: wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 -msgid "a fight choice" -msgstr "варіант для бою" - -#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 -msgid "Choices made by an enemy are random." -msgstr "Вибори, зроблені супротивником, випадкові." - -#: ../../problem-sets/src/wtk/challenge.rst:104 -msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." - -#: ../../problem-sets/src/wtk/challenge.rst:107 -msgid "Player" -msgstr "Гравець" - -#: of wtk.models.Player:1 -msgid "Player model" -msgstr "Модель гравця" - -#: of wtk.models.Player:3 -msgid "player's name" -msgstr "ім'я гравця" - -#: of wtk.models.Player:5 -msgid "player's instance health points" -msgstr "очки здоров'я гравця" - -#: of wtk.models.Player:7 -msgid "player's instance gained score points" -msgstr "очки, зароблені гравцем" - -#: of wtk.models.Player:10 -msgid "This model is controlled by the player." -msgstr "Ця модель керується гравцем." - -#: of wtk.models.Player.__init__:3 -msgid "a player's name" -msgstr "ім'я гравця" - -#: of wtk.models.Player.__init__:6 -msgid "" -"This method performs player instance initialization. It set instance name, " -"initial score points value and health." -msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров'я." - -#: of wtk.models.Player.attack:1 -msgid "Attack an enemy" -msgstr "Атакує ворога" - -#: of wtk.models.Player.attack:3 -msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" -msgstr "" -"Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" - -#: of wtk.models.Player.attack:10 -msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" -msgstr "\"YOUR ATTACK IS SUCCESSFUL!\"" - -#: of wtk.models.Player.attack:11 -msgid "\"YOUR ATTACK IS FAILED!\"" -msgstr "\"YOUR ATTACK IS FAILED!\"" - -#: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 -msgid "\"IT'S A DRAW!\"" -msgstr "\"IT'S A DRAW!\"" - -#: of wtk.models.Player.decrease_health:3 -msgid "GameOver" -msgstr "GameOver" - -#: of wtk.models.Player.decrease_health:5 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``GameOver`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``GameOver``." - -#: of wtk.models.Player.defence:1 -msgid "Defend from an enemy's attack" -msgstr "Захист від атаки супротивника" - -#: of wtk.models.Player.defence:3 -msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" -msgstr "" -"Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" - -#: of wtk.models.Player.defence:10 -msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" -msgstr "\"YOUR DEFENCE IS SUCCESSFUL!\"" - -#: of wtk.models.Player.defence:11 -msgid "\"YOUR DEFENCE IS FAILED!\"" -msgstr "\"YOUR DEFENCE IS FAILED!\"" - -#: of wtk.models.Player.fight:1 -msgid "Fight result calculation interface" -msgstr "Інтерфейс для вирахування результатів двобою" - -#: of wtk.models.Player.fight:3 -msgid "The method calculates the fight result based on the game rules:" -msgstr "Метод розраховує результат бою за правилами гри:" - -#: of wtk.models.Player.fight:5 -msgid "**wizard** beats **knight**" -msgstr "**чарівник** перемагає **рицаря**" - -#: of wtk.models.Player.fight:6 -msgid "**thief** beats **wizard**" -msgstr "**злодій** перемагає **чарівника**" - -#: of wtk.models.Player.fight:7 -msgid "**knight** beats **thief**" -msgstr "**рицар** перемагає **злодія**" - -#: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 -msgid "Return fight choice from the user's prompt" -msgstr "Повертає варіант для поєдинку з вводу користувача" - -#: of wtk.models.Player.select_attack:5 wtk.models.Player.select_defence:5 -msgid "" -"The player is asked to make their decision for the upcoming fight. The " -"chosen value is validated and if it is invalid the question is repeated." -msgstr "" -"Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " -"перевіряється, і якщо воно недійсне, запитання повторюється." - -#: ../../problem-sets/src/wtk/challenge.rst:116 -msgid "Settings" -msgstr "Налаштування" - -#: ../../problem-sets/src/wtk/challenge.rst:118 -msgid "Settings module contains constants values for the game." -msgstr "Модуль налаштувань містить значення констант для гри." - -#: ../../problem-sets/src/wtk/challenge.rst:120 -msgid "For example," -msgstr "Наприклад," - -#: ../../docstring of wtk.settings.INITIAL_PLAYER_HEALTH:1 -msgid "Initial player health value" -msgstr "Початкове значення здоров'я гравця" - -#: ../../docstring of wtk.settings.INITIAL_ENEMY_LEVEL:1 -msgid "Initial enemy level value" -msgstr "Початкове значення рівня ворога" - -#: ../../docstring of wtk.settings.SCORE_SUCCESS_ATTACK:1 -msgid "Score points value to assign when player's attack is successful" -msgstr "Вартість очок, які призначаються, коли атака гравця успішна" - -#: ../../docstring of wtk.settings.SCORE_ENEMY_DOWN:1 -msgid "Score points value to assign when enemy is defeated" -msgstr "Вартість очок, які призначаються, коли ворог переможений" - -#: ../../problem-sets/src/wtk/challenge.rst:131 -msgid "You may also define messages with this module, for example:" -msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" - -#: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 -msgid "Successful attack message" -msgstr "Повідомлення про успішну атаку" - -#: ../../docstring of wtk.settings.MSG_SUCCESS_DEFENCE:1 -msgid "Successful defence message" -msgstr "Повідомлення про успішний захист" - -#: ../../docstring of wtk.settings.MSG_FAILURE_ATTACK:1 -msgid "Failed attack message" -msgstr "Повідомлення про невдалу атаку" - -#: ../../docstring of wtk.settings.MSG_FAILURE_DEFENCE:1 -msgid "Failed defence message" -msgstr "Повідомлення про невдалий захист" - -#: ../../docstring of wtk.settings.MSG_DRAW:1 -msgid "Draw fight message" -msgstr "Повідомлення про нічию" - -#: ../../problem-sets/src/wtk/challenge.rst:141 -msgid "Engine" -msgstr "Ігровий рушій" - -#: ../../problem-sets/src/wtk/challenge.rst:143 -msgid "Engine module should provide two functions:" -msgstr "Модуль двигуна має забезпечувати дві функції:" - -#: ../../problem-sets/src/wtk/challenge.rst:145 -msgid "``get_player_name``" -msgstr "``get_player_name``" - -#: ../../problem-sets/src/wtk/challenge.rst:146 -msgid "``play``" -msgstr "``play``" - -#: ../../problem-sets/src/wtk/challenge.rst:149 -msgid "Player name getter" -msgstr "Отримання імені гравця" - -#: ../../problem-sets/src/wtk/challenge.rst:151 -msgid "" -"Asks the user to type in his or her name and return it back. Leading and " -"trailing whitespaces are to be trimmed. Name should contain at least one " -"character." -msgstr "" -"Просить користувача ввести своє ім'я та повернути його назад. Пробіли на " -"початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " -"символ." - -#: of wtk.engine.get_player_name:1 -msgid "Return a player's name from the user prompt" -msgstr "Повертає ім'я гравця з вводу користувача" - -#: of wtk.engine.get_player_name:3 -msgid "a player defined name" -msgstr "ім'я визначене гравцем" - -#: of wtk.engine.get_player_name:5 -msgid "" -"A validation process is performed as well. The player name cannot be an " -"empty string." -msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." - -#: ../../problem-sets/src/wtk/challenge.rst:158 -msgid "Play" -msgstr "Гра" - -#: ../../problem-sets/src/wtk/challenge.rst:160 -msgid "" -"This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." -msgstr "" -"Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." - -#: of wtk.engine.play:1 -msgid "Run the game" -msgstr "Запускає гру" - -#: of wtk.engine.play:3 -msgid "" -"The function initializes player and enemy instances. After that it runs the " -"game process in an endless loop. Once the player is defeated - it stops the " -"execution." -msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " -"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " -"зупиняє виконання." - -#: ../../problem-sets/src/wtk/challenge.rst:173 -msgid "Optional Enhancements" -msgstr "Додаткові Вдосконалення" - -#: ../../problem-sets/src/wtk/challenge.rst:175 -msgid "Add scores processor to show top-10 scores from a record table." -msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." - -#: ../../problem-sets/src/wtk/challenge.rst:176 -msgid "Create game menu, for example: ::" -msgstr "Створити меню гри, наприклад: ::" - -#: ../../problem-sets/src/wtk/challenge.rst:182 -msgid "Store score table to the database instead of using text file." -msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового файлу." - -#~ msgid "Specification for Django blog training project" -#~ msgstr "Специфікація навчального проекту блогу Django" - -#~ msgid "python, django, blog, project, training" -#~ msgstr "python, django, blog, project, training" - -#~ msgid "Optional tasks" -#~ msgstr "Додаткові завдання" - -#~ msgid "" -#~ "Create a service to fetch articles, ordered by a specified user " -#~ "preferences." -#~ msgstr "" -#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " -#~ "уподобаннями користувача." - -#~ msgid "The instructions to create a pull request via GitHub" -#~ msgstr "Інструкції щодо створення запиту на отримання через GitHub" - -#~ msgid "Creating the Pull Request" -#~ msgstr "Створення Pull Request" - -#~ msgid "" -#~ "Create a pull request to propose and collaborate on changes to a " -#~ "repository. These changes are proposed in a *branch*, which ensures that " -#~ "the default branch only contains finished and approved work :cite:`github:" -#~ "creating-pr`." -#~ msgstr "" -#~ "Створіть запит на отримання, щоб запропонувати та співпрацювати над " -#~ "змінами в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка " -#~ "за замовчуванням містить лише готову та затверджену роботу :cite:`github:" -#~ "creating-pr`." - -#~ msgid "" -#~ "Pull requests let you tell others about changes you've pushed to a branch " -#~ "in a repository on GitHub. Once a pull request is opened, you can discuss " -#~ "and review the potential changes with collaborators and add follow-up " -#~ "commits before your changes are merged into the base branch :cite:`github:" -#~ "about-pr`." -#~ msgstr "" -#~ "Запити на витягування дозволяють повідомляти іншим про зміни, які ви " -#~ "внесли до гілки сховища на GitHub. Після відкриття запиту на отримання ви " -#~ "можете обговорити та переглянути потенційні зміни зі співавторами та " -#~ "додати подальші коміти, перш ніж ваші зміни буде об'єднано в базову " -#~ "гілку :cite:`github:about-pr`." - -#~ msgid "" -#~ "The compare and pull request pages use different methods to calculate the " -#~ "diff for changed files:" -#~ msgstr "" -#~ "Сторінки порівняння та запиту на отримання використовують різні методи " -#~ "для обчислення різниці для змінених файлів:" - -#~ msgid "" -#~ "Compare pages show the diff between the tip of the head ref and the " -#~ "current common ancestor (that is, the merge base) of the head and base " -#~ "ref." -#~ msgstr "" -#~ "Сторінки порівняння показують різницю між кінчиком головного посилання та " -#~ "поточним спільним предком (тобто основою злиття) головного та базового " -#~ "посилання." - -#~ msgid "" -#~ "Pull request pages show the diff between the tip of the head ref and the " -#~ "common ancestor of the head and base ref at the time when the pull " -#~ "request was created. Consequently, the merge base used for the comparison " -#~ "might be different." -#~ msgstr "" -#~ "Сторінки запиту на отримання показують різницю між кінчиком головного " -#~ "посилання та спільним предком головного та базового посилання на момент " -#~ "створення запиту на отримання. Отже, база злиття, яка використовується " -#~ "для порівняння, може бути іншою." - -#~ msgid "" -#~ "In *few words*: both source and target branches **should** share some " -#~ "commit(s) in their history and the source branch **should** has commit(s) " -#~ "missing on the target one." -#~ msgstr "" -#~ "У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати " -#~ "спільні деякі коміти у своїй історії, а вихідна гілка **повинна** мати " -#~ "коміти, відсутні в цільовій." - -#~ msgid "Following SHOULD be included to the repository:" -#~ msgstr "У репозиторій СЛІД включити наступне:" - -#~ msgid "Following MAY be included to the repository:" -#~ msgstr "До репозиторію МОЖЕ бути включено:" - -#~ msgid "additional information (e.g. README file and other documents)" -#~ msgstr "додаткова інформація (наприклад, файл README та інші документи)" - -#~ msgid "dummy data (e.g. fixtures for development and testing etc.)" -#~ msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" - -#~ msgid "Following SHOULD be excluded from the repository:" -#~ msgstr "З репозитарію СЛІД виключити:" - -#~ msgid "virtual environment directory" -#~ msgstr "каталог віртуального середовища" - -#~ msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" -#~ msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" - -#~ msgid "Desktop Services Store (\".DS_Store\")" -#~ msgstr "Desktop Services Store (\".DS_Store\")" - -#~ msgid "Repository preparation" -#~ msgstr "Підготовка репозиторію" - -#~ msgid "This should be done once for each repository." -#~ msgstr "Це потрібно зробити один раз для кожного репозиторію." - -#~ msgid "" -#~ "Create README file and provide a brief description for your project " -#~ "(optional)." -#~ msgstr "" -#~ "Створіть файл README та надайте короткий опис свого проекту " -#~ "(необов'язково)." - -#~ msgid "Freeze the dependencies." -#~ msgstr "Зафіксуйте залежності." - -#~ msgid "" -#~ "Create a base code modules (e.g. initialize django project and apps, or " -#~ "create an empty python module like \"main.py\" etc.)." -#~ msgstr "" -#~ "Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " -#~ "його застосунки або створіть порожній модуль python, як-от \"main.py\" " -#~ "тощо)." - -#~ msgid "" -#~ "Create \".gitignore\" file and set up directories and files to be excluded" -#~ msgstr "" -#~ "Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які " -#~ "потрібно виключити" - -#~ msgid "Append contributors to remote repository" -#~ msgstr "Додати учасників до віддаленого репозиторію" - -#~ msgid "" -#~ "On `GitHub `_, navigate to the repository settings " -#~ "page and switch to **Collaborators and teams** menu item." -#~ msgstr "" -#~ "На `GitHub `_ перейдіть на сторінку налаштувань " -#~ "репозиторію та перейдіть до пункту меню **Collaborators and teams**." - -#~ msgid "Working on feature" -#~ msgstr "Робота над завданням" - -#~ msgid "" -#~ "Create a dedicated branch with some representative name (e.g. \"feature/" -#~ "models\", \"cbv\" etc.)." -#~ msgstr "" -#~ "Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " -#~ "\"feature/models\", \"cbv\" тощо)." - -#~ msgid "Do the work and commit changes on a feature branch." -#~ msgstr "Виконайте роботу та зафіксуйте зміни в гілці." - -#~ msgid "" -#~ "While working on a *feature branch* make commits for each completed " -#~ "logical block of code." -#~ msgstr "" -#~ "Під час роботи над *функціональною гілкою* робіть коміти для кожного " -#~ "завершеного логічного блоку коду." - -#~ msgid "On **Pull requests** tab click **New** button." -#~ msgstr "На вкладці **Pull requests** натисніть кнопку **New**." - -#~ msgid "" -#~ "On the pull request page add a **reviewer** by clicking the appropriate " -#~ "option and selecting a person from a dropdown menu." -#~ msgstr "" -#~ "На сторінці запиту на отримання додайте **reviewer**, натиснувши " -#~ "відповідну опцію та вибравши особу зі спадного меню." - -#~ msgid "" -#~ "The reviewer will **approve** or **reject** your pull request. Optionally " -#~ "the reviewer may provide some comments to your code; **rejected** pull " -#~ "requests will always come with some details." -#~ msgstr "" -#~ "Рецензент **схвалить** або **відхилить** ваш запит на отримання. За " -#~ "бажанням рецензент може надати деякі коментарі до вашого коду; " -#~ "**відхилені** запити на витягування завжди надходитимуть з деякими " -#~ "деталями." - -#~ msgid "Re-request review from the pull request page." -#~ msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." - -#~ msgid "" -#~ "All commits related to the source branch will be automatically appended " -#~ "to the open pull request. The reviewer will review your updates. Repeat " -#~ "this process until the pull request is **approved**." -#~ msgstr "" -#~ "Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " -#~ "відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " -#~ "Повторюйте цей процес, доки запит на отримання не буде **схвалено**." - -#~ msgid "Merging the pull request" -#~ msgstr "Об'єднання (злиття) запиту" - -#~ msgid "After that the pull request is merged into your target branch." -#~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." - -#~ msgid "they can create a new one." -#~ msgstr "вони можуть створити новий." diff --git a/src/_locales/uk/LC_MESSAGES/appx/assignments.po b/src/_locales/uk/LC_MESSAGES/appx/assignments.po new file mode 100644 index 000000000..a9c6abeb4 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/assignments.po @@ -0,0 +1,433 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:03+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/assignments.txt:-1 +msgid "How-to handle in assignments via GitHub pull request(s)" +msgstr "Як працювати з призначеннями через GitHub pull request(и)" + +#: ../../src/appx/assignments.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/appx/assignments.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/assignments.txt:-1 +msgid "git, github, pull request, review, merge, howto" +msgstr "git, github, pull request, review, merge, howto" + +#: ../../src/appx/assignments.txt:9 +msgid "Handing in Homework Assignments" +msgstr "Здача домашніх завдань" + +#: ../../src/appx/assignments.txt:13 +msgid "Repository content description" +msgstr "Опис вмісту репозиторію" + +#: ../../src/appx/assignments.txt:16 +msgid "What to include" +msgstr "Що потрібно включити" + +#: ../../src/appx/assignments.txt:18 +msgid "Code base" +msgstr "Кодова база" + +#: ../../src/appx/assignments.txt:19 +msgid "Project dependencies (if applicable)" +msgstr "Залежності проекту (якщо застосовно)" + +#: ../../src/appx/assignments.txt:20 +msgid "" +"*(Optional)* Additional project information: README, CONTRIBUTING, LICENSE " +"etc." +msgstr "" +"*(Додаткова)* інформація про проєкт: README, CONTRIBUTING, LICENSE тощо." + +#: ../../src/appx/assignments.txt:24 +msgid "" +"Always start new repository from creating ``README`` and ``.gitignore`` " +"files." +msgstr "" +"Завжди починайте новий репозиторій зі створення файлів ``README`` та ``." +"gitignore``." + +#: ../../src/appx/assignments.txt:28 +msgid "What to exclude" +msgstr "Що потрібно виключити" + +#: ../../src/appx/assignments.txt:30 +msgid "Virtual environment, typically ``venv`` or ``env`` folder" +msgstr "Віртуальне середовище, зазвичай папка ``venv`` або ``env``" + +#: ../../src/appx/assignments.txt:31 +msgid "Byte compiled Python code (``__pycache__``)" +msgstr "Байтовий скомпільований код Python (``__pycache__``)" + +#: ../../src/appx/assignments.txt:32 +msgid "IDE configurations, typically ``.vscode`` or ``.idea`` folder" +msgstr "Конфігурації IDE, зазвичай папка ``.vscode`` або ``.idea``" + +#: ../../src/appx/assignments.txt:33 +msgid "Database files, like ``db.sqlite3``" +msgstr "Файли баз даних, такі як ``db.sqlite3``" + +#: ../../src/appx/assignments.txt:34 +msgid "Other stuff not related to the assignment directly" +msgstr "Інші речі, не пов'язані з завданням безпосередньо" + +#: ../../src/appx/assignments.txt:37 +msgid "" +"Set up **.gitignore** to exclude all name patterns from appending to the " +"stage area. Common content of this file may look like:" +msgstr "" +"Налаштуйте **.gitignore**, щоб виключити всі шаблони назв з додавання до " +"області сцени. Типовий вміст цього файлу може виглядати так:" + +#: ../../src/appx/assignments.txt:48 +msgid "Repository initialization" +msgstr "Ініціалізація репозиторію" + +#: ../../src/appx/assignments.txt:50 +msgid "Create and activate virtual environment." +msgstr "Створіть та активуйте віртуальне середовище." + +#: ../../src/appx/assignments.txt:51 +msgid "Create common repository files:" +msgstr "Створіть загальні файли репозиторію:" + +#: ../../src/appx/assignments.txt:53 +msgid "README" +msgstr "README" + +#: ../../src/appx/assignments.txt:54 +msgid ".gitignore" +msgstr ".gitignore" + +#: ../../src/appx/assignments.txt:55 +msgid "requirements.txt *(if applicable)*" +msgstr "requirements.txt *(якщо застосовно)*" + +#: ../../src/appx/assignments.txt:57 +msgid "" +"*(Optional)* Create a code base draft. This can be an empty module like " +"**main.py** or an empty :ref:`Django project `." +msgstr "" +"*(Додатково)* Створіть чорновий варіант кодової бази. Це може бути порожній " +"модуль типу **main.py** або порожній :ref:`проект Django `." + +#: ../../src/appx/assignments.txt:59 +msgid "Initialize a new repository using ``git init`` command." +msgstr "Ініціалізуйте новий репозиторій за допомогою команди ``git init``." + +#: ../../src/appx/assignments.txt:60 +msgid "Set up **.gitignore** name patterns." +msgstr "Налаштуйте шаблони імен **.gitignore**." + +#: ../../src/appx/assignments.txt:61 +msgid "Stage your changes." +msgstr "Додайте зміни до stage-простору." + +#: ../../src/appx/assignments.txt:62 +msgid "Commit your changes." +msgstr "Зафіксуйте зміни." + +#: ../../src/appx/assignments.txt:63 +msgid "Set up remote repository." +msgstr "Налаштуйте віддалений репозиторій." + +#: ../../src/appx/assignments.txt:64 +msgid "Push changes from local branch to remote." +msgstr "Перенесіть зміни з локальної гілки на віддалену." + +#: ../../src/appx/assignments.txt:69 +msgid "Initializing new Django project" +msgstr "Ініціалізація нового проекту Django" + +#: ../../src/appx/assignments.txt:71 +msgid "" +"Base Django project may be added to the repository with the first commit. " +"Initialize Django project in current repository root to avoid directories " +"nesting." +msgstr "" +"Базовий проект Django може бути доданий до сховища з першим коммітом. " +"Ініціалізуйте проект Django у корені поточного сховища, щоб уникнути " +"вкладеності каталогів." + +#: ../../src/appx/assignments.txt:80 +msgid "Do not forget to create **requirements.txt**." +msgstr "Не забудьте створити **requirements.txt**." + +#: ../../src/appx/assignments.txt:82 +msgid "After that, you may proceed with \"staging\" and \"commit\" steps." +msgstr "Після цього ви можете перейти до етапів \"stage\" та \"commit\"." + +#: ../../src/appx/assignments.txt:86 +msgid "Sharing project dependencies" +msgstr "Спільний доступ до залежностей проекту" + +#: ../../src/appx/assignments.txt:88 +msgid "" +"The **requirements.txt** file is a plain text file that lists all the Python " +"packages required for a specific project. This file is used to specify " +"dependencies in a version-controlled and easily shareable manner. It allows " +"for a consistent environment across different team members' local setups." +msgstr "" +"Файл **requirements.txt** -- це звичайний текстовий файл, який містить " +"список усіх пакунків Python, необхідних для конкретного проекту. Цей файл " +"використовується для вказівки залежностей у спосіб, що дозволяє контролювати " +"версії та легко ділитися ними. Це дозволяє забезпечити узгодженість " +"середовища в локальних налаштуваннях різних членів команди." + +#: ../../src/appx/assignments.txt:94 +msgid "Where to place \"requirements.txt\" file" +msgstr "Де розмістити файл \"requirements.txt\"" + +#: ../../src/appx/assignments.txt:96 +msgid "" +"The **requirements.txt** file is generally placed in the root directory of " +"the project." +msgstr "" +"Файл **requirements.txt** зазвичай розміщується у кореневому каталозі " +"проекту." + +#: ../../src/appx/assignments.txt:100 +msgid "Creating \"requirements.txt\" file" +msgstr "Створення файлу \"requirements.txt\"" + +#: ../../src/appx/assignments.txt:102 +msgid "" +"To generate file use ``pip freeze`` command and place its output to a file:" +msgstr "" +"Щоб згенерувати файл, скористайтеся командою ``pip freeze`` і помістіть його " +"вивід у файл:" + +#: ../../src/appx/assignments.txt:108 +msgid "This will create **requirements.txt** file. Its content may look like:" +msgstr "" +"В результаті буде створено файл **requirements.txt**. Його вміст може мати " +"вигляд:" + +#: ../../src/appx/assignments.txt:119 +msgid "Installing dependencies from \"requirements.txt\" file" +msgstr "Встановлення залежностей з файлу \"requirements.txt\"" + +#: ../../src/appx/assignments.txt:121 +msgid "" +"Another team member may easily install all the requirements for the project " +"by using ``pip install`` command:" +msgstr "" +"Інший член команди може легко встановити всі вимоги до проекту за допомогою " +"команди ``pip install``:" + +#: ../../src/appx/assignments.txt:130 +msgid "Dealing with home tasks (challenges)" +msgstr "Вирішення домашніх завдань (викликів)" + +#: ../../src/appx/assignments.txt:132 +msgid "Create a new topic branch" +msgstr "Створити нову гілку завдання" + +#: ../../src/appx/assignments.txt:133 +msgid "Switch to a topic branch" +msgstr "Перейдіть до гілки завдання" + +#: ../../src/appx/assignments.txt:134 +msgid "Do the work and commit changes" +msgstr "Виконайте роботу та зафіксуйте зміни" + +#: ../../src/appx/assignments.txt:137 +msgid "You can create a new branch and immediately switch to it:" +msgstr "Ви можете створити нову гілку і одразу перейти до неї:" + +#: ../../src/appx/assignments.txt:144 +msgid "Creating a pull request" +msgstr "Створення запиту на злиття" + +#: ../../src/appx/assignments.txt:146 +msgid "" +"Make sure your working branch is up-to-date with the default one. You can " +"pull changes for the default branch and rebase your feature branch onto it." +msgstr "" +"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " +"на неї." + +#: ../../src/appx/assignments.txt:149 +msgid "" +"Push feature branch to the remote repository. By default, the current active " +"branch is pushed via ``git push`` command. You may need to set upstream " +"branch if it isn't yet." +msgstr "" +"Перенести гілку функції до віддаленого сховища. За замовчуванням, поточна " +"активна гілка виштовхується командою ``git push``. Можливо, вам доведеться " +"створити нову гілку, якщо вона ще не створена." + +#: ../../src/appx/assignments.txt:157 +msgid "" +"Navigate to your remote repository homepage on GitHub and switch to **Pull " +"requests** tab." +msgstr "" +"Перейдіть на головну сторінку вашого віддаленого сховища на GitHub і " +"перейдіть на вкладку **Pull requests**." + +#: ../../src/appx/assignments.txt:159 +msgid "Click **New pull request** button." +msgstr "Натисніть кнопку **New pull request**." + +#: ../../src/appx/assignments.txt:160 +msgid "" +"Select your default branch as *target* and your feature branch as *source*." +msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." + +#: ../../src/appx/assignments.txt:162 +msgid "Click **Create pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/assignments.txt:163 +msgid "Provide meaningful title and a brief description for your pull request." +msgstr "Надайте змістовну назву та короткий опис вашого запиту." + +#: ../../src/appx/assignments.txt:164 +msgid "Submit pull request creation." +msgstr "Підтвердіть створення запиту." + +#: ../../src/appx/assignments.txt:165 +msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." +msgstr "*(Необов'язково)* Виберіть рецензента(ів) у розділі **Reviewers**." + +#: ../../src/appx/assignments.txt:166 +msgid "Wait until your pull request is reviewed." +msgstr "Зачекайте, поки ваш запит буде розглянуто." + +#: ../../src/appx/assignments.txt:169 +msgid "Set up reviewers" +msgstr "Налаштування рецензентів" + +#: ../../src/appx/assignments.txt:171 +msgid "" +"You may share a link to pull request to a reviewer directly, but it's better " +"to set reviewer(s) on the pull request's page. Before you can select " +"reviewers, you need to add them as project contributors." +msgstr "" +"Ви можете надіслати посилання на запит безпосередньо рецензенту, але краще " +"вказати рецензента(ів) на сторінці запиту. Перш ніж ви зможете вибрати " +"рецензентів, вам потрібно додати їх як учасників проекту." + +#: ../../src/appx/assignments.txt:176 +msgid "Append collaborators" +msgstr "Додавання співавторів" + +#: ../../src/appx/assignments.txt:178 +msgid "" +"Reviews allow collaborators to comment on the changes proposed in pull " +"requests, approve the changes, or request further changes before the pull " +"request is merged. Repository administrators can require that pull requests " +"are approved before being merged." +msgstr "" +"Рецензії дозволяють учасникам коментувати зміни, запропоновані у запитах, " +"затверджувати їх або вимагати подальших змін до того, як запит буде " +"об'єднано. Адміністратори сховища можуть вимагати, щоб запити на вилучення " +"були затверджені перед об'єднанням." + +#: ../../src/appx/assignments.txt:183 +msgid "" +"Navigate to your repository homepage on GitHub and switch to **Settings** " +"tab." +msgstr "" +"Перейдіть на головну сторінку вашого сховища на GitHub і перейдіть на " +"вкладку **Налаштування**." + +#: ../../src/appx/assignments.txt:185 +msgid "Select **Collaborators and teams** menu item." +msgstr "Виберіть пункт меню **Collaborators and teams**." + +#: ../../src/appx/assignments.txt:186 +msgid "Under **Manage access** section click **Add people** button." +msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." + +#: ../../src/appx/assignments.txt:187 +msgid "In modal window start typing GitHub username." +msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." + +#: ../../src/appx/assignments.txt:188 +msgid "Select a contributor from the dropdown menu." +msgstr "Виберіть учасника зі спадного меню." + +#: ../../src/appx/assignments.txt:190 +msgid "This will send a *contributing request* to a specified user." +msgstr "Це надішле *запит* вказаному користувачеві." + +#: ../../src/appx/assignments.txt:193 +msgid "Merging changes" +msgstr "Об'єднання змін" + +#: ../../src/appx/assignments.txt:195 +msgid "" +"In case your pull request is **approved** - merge it to the trunk branch. " +"Select one of the options available:" +msgstr "" +"Якщо ваш pull request буде **схвалено** - об'єднайте його в основну гілку. " +"Виберіть один з доступних варіантів:" + +#: ../../src/appx/assignments.txt:198 +msgid "Create a merge commit" +msgstr "Create a merge commit" + +#: ../../src/appx/assignments.txt:199 +msgid "Rebase and merge" +msgstr "Rebase and merge" + +#: ../../src/appx/assignments.txt:200 +msgid "Squash and merge" +msgstr "Squash and merge" + +#: ../../src/appx/assignments.txt:202 +msgid "**Create a merge commit** suits in most of the cases." +msgstr "**Create a merge commit** підходить у більшості випадків." + +#: ../../src/appx/assignments.txt:205 +msgid "Making changes" +msgstr "Внесення змін" + +#: ../../src/appx/assignments.txt:207 +msgid "" +"In case your pull request is **rejected** or has comments - you may need to " +"provide some fixes." +msgstr "" +"Якщо ваш pull request буде **відхилено** або він матиме зауваження - вам " +"може знадобитися надати деякі виправлення." + +#: ../../src/appx/assignments.txt:210 +msgid "Do the work in your local topic branch" +msgstr "Виконайте роботу у вашій місцевій тематичній гілці" + +#: ../../src/appx/assignments.txt:211 +msgid "Push these changes to remote" +msgstr "Надішліть їх до гілки віддаленого репозиторію" + +#: ../../src/appx/assignments.txt:212 +msgid "Re-request review (if applicable)" +msgstr "Зробіть повторний запит на перегляд (за необхідності)" + +#: ../../src/appx/assignments.txt:213 +msgid "Wait until review is done" +msgstr "Дочекайтеся завершення перевірки" diff --git a/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po new file mode 100644 index 000000000..fb01b5440 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po @@ -0,0 +1,1196 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:05+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/blog/spec.rst:10 +msgid "Blog Site" +msgstr "" + +#: ../../src/appx/blog/spec.rst:12 +msgid "" +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." +msgstr "" +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." + +#: ../../src/appx/blog/spec.rst:19 +msgid "**Key Features**" +msgstr "**Основні функції**" + +#: ../../src/appx/blog/spec.rst:22 +msgid "User Registration and Authentication" +msgstr "Реєстрація та Аутентифікація Користувачів" + +#: ../../src/appx/blog/spec.rst:23 +msgid "" +"The application will provide user registration and authentication " +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." +msgstr "" +"Застосунок надасть функціональність реєстрації та аутентифікації " +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." + +#: ../../src/appx/blog/spec.rst:30 +msgid "Article Management" +msgstr "Керування Статтями" + +#: ../../src/appx/blog/spec.rst:31 +msgid "" +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." +msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." + +#: ../../src/appx/blog/spec.rst:37 +msgid "Topic Subscription:" +msgstr "Підписка на Теми:" + +#: ../../src/appx/blog/spec.rst:38 +msgid "" +"The application will include a subscription feature that allows users to " +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." +msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." + +#: ../../src/appx/blog/spec.rst:45 +msgid "" +"Overall, the project aims to deliver an efficient blogging platform that " +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." +msgstr "" +"Застосунок буде містити функцію підписки, яка дозволить користувачам " +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." + +#: ../../src/appx/blog/spec.rst:52 +msgid "" +"Here is a starter repository template, that may helps: `Starter template`_." +msgstr "" +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." + +#: ../../src/appx/blog/spec.rst:55 +msgid "Challenge: Functional views" +msgstr "Виклик: Функціональні представлення" + +#: ../../src/appx/blog/spec.rst:57 +msgid "" +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." +msgstr "" +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." + +#: ../../src/appx/blog/spec.rst:61 +msgid "" +"``/about/``: Provides a regular text for a user, describing the " +"functionalities of the django site." +msgstr "" +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." + +#: ../../src/appx/blog/spec.rst:63 +msgid "" +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." +msgstr "" +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." + +#: ../../src/appx/blog/spec.rst:65 +msgid "" +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." +msgstr "" +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." + +#: ../../src/appx/blog/spec.rst:68 +msgid "" +"``/
    /comment/``: This view will be used to add comments to a article." +msgstr "" +"``/
    /comment/``: Це представлення буде використовуватися для " +"додавання коментарів до статті." + +#: ../../src/appx/blog/spec.rst:70 +msgid "``/create/``: A article creation form." +msgstr "``/create/``: Форма створення статті." + +#: ../../src/appx/blog/spec.rst:71 +msgid "``/
    /update/``: A view to update an existing article data." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." + +#: ../../src/appx/blog/spec.rst:72 +msgid "``/
    /delete/``: A view to confirm article deletion." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." + +#: ../../src/appx/blog/spec.rst:73 +msgid "``/topics/``: A list of topics available on the site." +msgstr "``/topics/``: Перелік доступних тем на сайті." + +#: ../../src/appx/blog/spec.rst:74 +msgid "``/topics//subscribe/``: A view to subscribe for a topic." +msgstr "``/topics//subscribe/``: Представлення для підписки на тему." + +#: ../../src/appx/blog/spec.rst:75 +msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." +msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." + +#: ../../src/appx/blog/spec.rst:76 +msgid "``/profile//``: A site user's personal page." +msgstr "``/profile//``: Особиста сторінка користувача сайту." + +#: ../../src/appx/blog/spec.rst:77 +msgid "" +"``/set-password/``: This route will be used to change users' credential data." +msgstr "" +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." + +#: ../../src/appx/blog/spec.rst:79 +msgid "``/set-userdata/``: This route will be user to change users' data." +msgstr "" +"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " +"користувачів." + +#: ../../src/appx/blog/spec.rst:80 +msgid "``/deactivate/``: Account deactivation (deletion) view." +msgstr "" +"``/deactivate/``: Представлення для деактивації облікового запису " +"(видалення)." + +#: ../../src/appx/blog/spec.rst:81 +msgid "``/register/``: This view contains a user registration form." +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../src/appx/blog/spec.rst:82 +msgid "``/login/``: This view contains a login form." +msgstr "``/login/``: Сторінка з формою для логіна." + +#: ../../src/appx/blog/spec.rst:83 +msgid "" +"``/logout/``: Logout page. This view should redirect user back to homepage." +msgstr "" +"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " +"сторінку.." + +#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 +#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 +msgid "Optional task(s)" +msgstr "Додаткові завдання" + +#: ../../src/appx/blog/spec.rst:89 +msgid "" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" +msgstr "" +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" + +#: ../../src/appx/blog/spec.rst:103 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../src/appx/blog/spec.rst:106 +msgid "" +"Django admin may be used to create some dummy data. To gather access to " +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" +msgstr "" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" + +#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 +msgid "General" +msgstr "Основне" + +#: ../../src/appx/blog/spec.rst:116 +msgid "Each model will be registered for admin site." +msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." + +#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 +msgid "Article topic" +msgstr "Тема статті" + +#: ../../src/appx/blog/spec.rst:120 +msgid "This is a simple model, that contains information about topic:" +msgstr "Ось проста модель, що містить інформацію про тему:" + +#: ../../src/appx/blog/spec.rst:122 +msgid "topic title (unique value, 64 characters or fewer)" +msgstr "назва теми (унікальне значення, не більше 64 символів)" + +#: ../../src/appx/blog/spec.rst:123 +msgid "topic short description (255 characters or fewer)" +msgstr "короткий опис теми (не більше 255 символів)" + +#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 +msgid "Article" +msgstr "Стаття" + +#: ../../src/appx/blog/spec.rst:127 +msgid "Article requires title (255 characters or fewer)." +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." + +#: ../../src/appx/blog/spec.rst:128 +msgid "Article requires content (at least 255 characters)." +msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." + +#: ../../src/appx/blog/spec.rst:129 +msgid "" +"Creation date should be autogenerated at article creation, and would never " +"be updated." +msgstr "" +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." + +#: ../../src/appx/blog/spec.rst:131 +msgid "Updated date will be update at each article save." +msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." + +#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 +msgid "Article comment" +msgstr "Коментар до статті" + +#: ../../src/appx/blog/spec.rst:135 +msgid "Comment requires creation date (autogenerated)." +msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." + +#: ../../src/appx/blog/spec.rst:136 +msgid "Comment requires message text." +msgstr "Коментар вимагає наявності тексту повідомлення." + +#: ../../src/appx/blog/spec.rst:139 +msgid "Relationships" +msgstr "Відносини" + +#: ../../src/appx/blog/spec.rst:141 +msgid "" +"Standard Django user model **will be** used for now. To apply model " +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" +msgstr "" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" + +#: ../../src/appx/blog/spec.rst:154 +msgid "``article`` and ``topics`` have *many-to-many* relationship." +msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." + +#: ../../src/appx/blog/spec.rst:155 +msgid "" +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." +msgstr "" +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." + +#: ../../src/appx/blog/spec.rst:158 +msgid "" +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." +msgstr "" +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." + +#: ../../src/appx/blog/spec.rst:161 +msgid "" +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." +msgstr "" +"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " +"відношення *стаття - користувач*." + +#: ../../src/appx/blog/spec.rst:163 +msgid "" +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." + +#: ../../src/appx/blog/spec.rst:174 +msgid "UML diagram" +msgstr "UML діаграми" + +#: ../../src/appx/blog/spec.rst:179 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" + +#: ../../src/appx/blog/spec.rst:181 +msgid "" +"Update existing views to represent entities that are actually stored inside " +"the project's database." +msgstr "" +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." + +#: ../../src/appx/blog/spec.rst:184 +msgid "``/``: should represent a list of existing articles." +msgstr "``/``: повинен представляти список існуючих статей." + +#: ../../src/appx/blog/spec.rst:185 +msgid "``/
    /``: should represent a single existing article." +msgstr "``/
    /``: повинен представляти окрему існуючу статтю." + +#: ../../src/appx/blog/spec.rst:186 +msgid "Detail view should obtain a list of article related comments." +msgstr "" +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." + +#: ../../src/appx/blog/spec.rst:187 +msgid "" +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." +msgstr "" +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." + +#: ../../src/appx/blog/spec.rst:189 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." +msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." + +#: ../../src/appx/blog/spec.rst:194 +msgid "" +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." +msgstr "" +"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." + +#: ../../src/appx/blog/spec.rst:201 +msgid "" +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." +msgstr "" +"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " +"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." + +#: ../../src/appx/blog/spec.rst:207 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" + +#: ../../src/appx/blog/spec.rst:210 +msgid "Helpful link: `Bootstrap template`_" +msgstr "Корисне посилання: `Bootstrap template`_" + +#: ../../src/appx/blog/spec.rst:213 +msgid "Links related to user data **may be** placeholders for now." +msgstr "" +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." + +#: ../../src/appx/blog/spec.rst:217 +msgid "**All** templates should be inherited from the ``base.html`` template." +msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." + +#: ../../src/appx/blog/spec.rst:218 +msgid "" +"Each page has a descriptive title HTML tag, which included ``| Blog`` " +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." +msgstr "" +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." + +#: ../../src/appx/blog/spec.rst:220 +msgid "Each page should contain a link to homepage (``/`` URL route)." +msgstr "" +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." + +#: ../../src/appx/blog/spec.rst:221 +msgid "" +"Each page contains a list of registered topics. Each view of this kind " +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." +msgstr "" +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." + +#: ../../src/appx/blog/spec.rst:224 +msgid "Replace content block for *about* page with some static content." +msgstr "" +"Замініть блок вмісту (content block) для сторінки *about* на деякий " +"статичний вміст." + +#: ../../src/appx/blog/spec.rst:225 +msgid "" +"Application-level templates should be located within appropriate " +"applications." +msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." + +#: ../../src/appx/blog/spec.rst:231 +msgid "" +"Each page should contain a list of links to archive views for the last year." +msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." + +#: ../../src/appx/blog/spec.rst:233 +msgid "Each page should contain an inclusion-block(s) with following links:" +msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" + +#: ../../src/appx/blog/spec.rst:235 +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: форма реєстрації нового користувача" + +#: ../../src/appx/blog/spec.rst:236 +msgid "``/login/``: user login form" +msgstr "``/login/``: форма логіна користувача" + +#: ../../src/appx/blog/spec.rst:237 +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення статті" + +#: ../../src/appx/blog/spec.rst:240 +msgid "Articles list" +msgstr "Список статей" + +#: ../../src/appx/blog/spec.rst:241 +msgid "Main page contains a list of published articles." +msgstr "Головна сторінка містить список опублікованих статей." + +#: ../../src/appx/blog/spec.rst:242 +msgid "Each article entity is rendered using a custom template tag." +msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." + +#: ../../src/appx/blog/spec.rst:243 +msgid "``article`` template tag renders information about a article object:" +msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" + +#: ../../src/appx/blog/spec.rst:245 +msgid "article title" +msgstr "заголовок статті" + +#: ../../src/appx/blog/spec.rst:246 +msgid "article content (trimmed to ~50 characters)" +msgstr "зміст статті (обрізаний до ~50 символів)" + +#: ../../src/appx/blog/spec.rst:247 +msgid "article creation date" +msgstr "дата створення статті" + +#: ../../src/appx/blog/spec.rst:248 +msgid "related topics (3 topics or fewer)" +msgstr "пов'язані теми (3 або менше)" + +#: ../../src/appx/blog/spec.rst:249 +msgid "number of related comments" +msgstr "кількість коментарів до статті" + +#: ../../src/appx/blog/spec.rst:256 +msgid "Article details" +msgstr "Деталі статті" + +#: ../../src/appx/blog/spec.rst:258 +msgid "Article update and deletion views **would not** affect data for now." +msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." + +#: ../../src/appx/blog/spec.rst:260 +msgid "" +"A article detail page contains links to **update** or **delete** current " +"article." +msgstr "" +"На сторінці деталей статті мають бути посилання на **оновлення** або " +"**видалення** поточної статті." + +#: ../../src/appx/blog/spec.rst:262 +msgid "Page provides information about article:" +msgstr "Сторінка надає інформацію про статтю:" + +#: ../../src/appx/blog/spec.rst:264 +msgid "Article title" +msgstr "Заголовок статті" + +#: ../../src/appx/blog/spec.rst:265 +msgid "Creation date" +msgstr "Дата створення" + +#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/appx/blog/spec.rst:267 +msgid "Related topics" +msgstr "Пов'язані теми" + +#: ../../src/appx/blog/spec.rst:268 +msgid "Article content" +msgstr "Вміст статті" + +#: ../../src/appx/blog/spec.rst:270 +msgid "Page contains a list of related comments." +msgstr "Сторінка містить список пов'язаних коментарів." + +#: ../../src/appx/blog/spec.rst:271 +msgid "Each comment contains:" +msgstr "Кожен коментар містить:" + +#: ../../src/appx/blog/spec.rst:274 +msgid "Comment creation time" +msgstr "Час створення коментаря" + +#: ../../src/appx/blog/spec.rst:275 +msgid "Comment message" +msgstr "Текст комментаря" + +#: ../../src/appx/blog/spec.rst:278 +msgid "Profile page" +msgstr "Строніка профілю" + +#: ../../src/appx/blog/spec.rst:279 +msgid "Author page contains information about author:" +msgstr "Сторінка автора містить інформацію про автора:" + +#: ../../src/appx/blog/spec.rst:281 +msgid "First name" +msgstr "Ім'я" + +#: ../../src/appx/blog/spec.rst:282 +msgid "Last name" +msgstr "Прізвище" + +#: ../../src/appx/blog/spec.rst:284 +msgid "Add more information, if needed." +msgstr "Додайте більше інформації за бажанням." + +#: ../../src/appx/blog/spec.rst:286 +msgid "Author page contains a list of articles created by this author." +msgstr "Сторінка автора містить список статей, створених цим автором." + +#: ../../src/appx/blog/spec.rst:287 +msgid "" +"Author page contains buttons/links to change user data and password or " +"deactivate a user's account." +msgstr "" +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." + +#: ../../src/appx/blog/spec.rst:291 +msgid "Forms" +msgstr "Форми" + +#: ../../src/appx/blog/spec.rst:293 +msgid "" +"There is **no need** to add actual forms now. They will be generated by " +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." +msgstr "" +"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " +"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " +"використання достатньо створити окремі шаблони." + +#: ../../src/appx/blog/spec.rst:297 +msgid "" +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" +msgstr "" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" + +#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 +msgid "username" +msgstr "username" + +#: ../../src/appx/blog/spec.rst:301 +msgid "email" +msgstr "email" + +#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 +msgid "password" +msgstr "password" + +#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 +msgid "confirm password" +msgstr "confirm password" + +#: ../../src/appx/blog/spec.rst:305 +msgid "" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" +msgstr "" +"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " +"отримувати введені дані від користувача:" + +#: ../../src/appx/blog/spec.rst:311 +msgid "" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" +msgstr "" +"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " +"даних статті:" + +#: ../../src/appx/blog/spec.rst:314 +msgid "title" +msgstr "title" + +#: ../../src/appx/blog/spec.rst:315 +msgid "relevant topics" +msgstr "відповідні теми" + +#: ../../src/appx/blog/spec.rst:316 +msgid "content" +msgstr "content" + +#: ../../src/appx/blog/spec.rst:318 +msgid "``/
    /delete`` page contains a simple delete confirmation form." +msgstr "" +"Сторінка ``/
    /delete`` містить просту форму для підтвердження " +"видалення." + +#: ../../src/appx/blog/spec.rst:319 +msgid "Change password form has two fields:" +msgstr "Форма зміни пароля має два поля:" + +#: ../../src/appx/blog/spec.rst:321 +msgid "new password" +msgstr "new password" + +#: ../../src/appx/blog/spec.rst:324 +msgid "" +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." +msgstr "" +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." + +#: ../../src/appx/blog/spec.rst:326 +msgid "" +"User preferences page contains a list of available topics. User can mark " +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." +msgstr "" +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." + +#: ../../src/appx/blog/spec.rst:331 +msgid "Challenge: Articles' slugs" +msgstr "Виклик: Slug-и статей" + +#: ../../src/appx/blog/spec.rst:334 +msgid "This is an optional challenge in addition to:" +msgstr "Це додатковий виклик у додаток до:" + +#: ../../src/appx/blog/spec.rst:336 +msgid "`Challenge: Functional views`_" +msgstr "`Challenge: Functional views`_" + +#: ../../src/appx/blog/spec.rst:337 +msgid "`Challenge: Templates`_" +msgstr "`Challenge: Templates`_" + +#: ../../src/appx/blog/spec.rst:338 +msgid "`Challenge: Data models`_" +msgstr "`Challenge: Data models`_" + +#: ../../src/appx/blog/spec.rst:339 +msgid "`Challenge: ORM`_" +msgstr "`Challenge: ORM`_" + +#: ../../src/appx/blog/spec.rst:341 +msgid "Update ``Article`` model with ``slug`` field. The slug value is:" +msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" + +#: ../../src/appx/blog/spec.rst:343 +msgid "required for each article" +msgstr "обов'язкове для кожної статті" + +#: ../../src/appx/blog/spec.rst:344 +msgid "unique for each article" +msgstr "унікальне для кожної статті" + +#: ../../src/appx/blog/spec.rst:346 +msgid "Create a data migration to provide slugs for existing articles." +msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." + +#: ../../src/appx/blog/spec.rst:347 +msgid "" +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." +msgstr "" +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " +"отримає slug: ``sample-blog-article-2023-03-23``." + +#: ../../src/appx/blog/spec.rst:351 +msgid "Update detail view URL path with article slug as dynamic portion." +msgstr "" +"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " +"якою буде slug статті." + +#: ../../src/appx/blog/spec.rst:354 +msgid "Challenge: Auth forms" +msgstr "Завдання: форми авторизації" + +#: ../../src/appx/blog/spec.rst:356 +msgid "Create form for new users registration with required fields:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" + +#: ../../src/appx/blog/spec.rst:358 +msgid "``username``" +msgstr "``username``" + +#: ../../src/appx/blog/spec.rst:359 +msgid "``email``" +msgstr "``email``" + +#: ../../src/appx/blog/spec.rst:360 +msgid "``password``" +msgstr "``password``" + +#: ../../src/appx/blog/spec.rst:361 +msgid "``confirm password``" +msgstr "``confirm password``" + +#: ../../src/appx/blog/spec.rst:363 +msgid "``username`` value should be validated against existing values." +msgstr "" +"Значення ``username`` повинно перевірятися на відповідність існуючим " +"значенням." + +#: ../../src/appx/blog/spec.rst:364 +msgid "``password`` and ``confirm password`` values should match." +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." + +#: ../../src/appx/blog/spec.rst:365 +msgid "Create form for existing users login." +msgstr "Створити форму для входу існуючих користувачів." + +#: ../../src/appx/blog/spec.rst:366 +msgid "Validations errors are to be rendered on the template." +msgstr "Помилки перевірки повинні відображатися на шаблоні." + +#: ../../src/appx/blog/spec.rst:369 +msgid "Challenge: Authentication" +msgstr "Завдання: Автентифікація" + +#: ../../src/appx/blog/spec.rst:371 +msgid "" +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." +msgstr "" +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." + +#: ../../src/appx/blog/spec.rst:373 +msgid "" +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." +msgstr "" +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." + +#: ../../src/appx/blog/spec.rst:375 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin page." +msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." + +#: ../../src/appx/blog/spec.rst:377 +msgid "" +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " +"authentication process. Invalid form should provide information about " +"error(s)." +msgstr "" +"``/register/``: користувачі повинні надати всю необхідну інформацію про " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " +"прізвище) необов'язкові. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процесу автентифікації. " +"Недійсна форма повинна надавати інформацію про помилку(и)." + +#: ../../src/appx/blog/spec.rst:382 +msgid "" +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." +msgstr "" +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." + +#: ../../src/appx/blog/spec.rst:385 +msgid "" +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." +msgstr "" +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." + +#: ../../src/appx/blog/spec.rst:390 +msgid "" +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." +msgstr "" +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." + +#: ../../src/appx/blog/spec.rst:392 +msgid "" +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." +msgstr "" +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." + +#: ../../src/appx/blog/spec.rst:395 +msgid "User related paths are restricted for non-authorized users." +msgstr "" +"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " +"користувачів." + +#: ../../src/appx/blog/spec.rst:397 +msgid "``/set-password/``" +msgstr "``/set-password/``" + +#: ../../src/appx/blog/spec.rst:398 +msgid "``/set-userdata/``" +msgstr "``/set-userdata/``" + +#: ../../src/appx/blog/spec.rst:400 +msgid "" +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." +msgstr "" +"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." + +#: ../../src/appx/blog/spec.rst:406 +msgid "" +"Adjust the order of article list according to authenticated user " +"preferences. For anonymous users keep default ordering." +msgstr "" +"Призначте зміну порядку списку статей відповідно до вподобань " +"аутентифікованого користувача. Для анонімних користувачів залиште типове " +"сортування за замовчуванням." + +#: ../../src/appx/blog/spec.rst:408 +msgid "" +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." +msgstr "" +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." + +#: ../../src/appx/blog/spec.rst:414 +msgid "Challenge: Article related forms" +msgstr "Виклик: Форми пов'язані зі статтями" + +#: ../../src/appx/blog/spec.rst:416 +msgid "" +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." +msgstr "" +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." + +#: ../../src/appx/blog/spec.rst:418 +msgid "Each created article should have at least one related topic." +msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." + +#: ../../src/appx/blog/spec.rst:419 +msgid "Implement a comment form to gather a comment from a user." +msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." + +#: ../../src/appx/blog/spec.rst:420 +msgid "" +"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " +"moment." +msgstr "" +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." + +#: ../../src/appx/blog/spec.rst:422 +msgid "Implement functionality:" +msgstr "Реалізуйте функціональність:" + +#: ../../src/appx/blog/spec.rst:424 +msgid "article creation" +msgstr "створення статті" + +#: ../../src/appx/blog/spec.rst:425 +msgid "article update" +msgstr "оновлення статті" + +#: ../../src/appx/blog/spec.rst:426 +msgid "article comment (create a related comment)" +msgstr "коментування статті (створення коментаря)" + +#: ../../src/appx/blog/spec.rst:427 +msgid "article deletion" +msgstr "видалення статті" + +#: ../../src/appx/blog/spec.rst:429 +msgid "Only authenticated users can create articles." +msgstr "Лише аутентифіковані користувачі можуть створювати статі." + +#: ../../src/appx/blog/spec.rst:430 +msgid "Article can be edited only by its author." +msgstr "Стаття може редагуватись лише її автором." + +#: ../../src/appx/blog/spec.rst:431 +msgid "Article can be deleted only by its author." +msgstr "Стаття може видалятись лише її автором." + +#: ../../src/appx/blog/spec.rst:432 +msgid "Only authenticated users can comment articles." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." + +#: ../../src/appx/blog/spec.rst:439 +msgid "Challenge: Class-Based Views" +msgstr "Завдання: Class-Based Views" + +#: ../../src/appx/blog/spec.rst:441 +msgid "Replace **all** existing views via ``CBV``." +msgstr "Замінити **всі** існуючі перегляди через ``CBV``." + +#: ../../src/appx/blog/spec.rst:442 +msgid "Existing functionality should not be corrupted." +msgstr "Існуюча функціональність не повинна бути пошкоджена." + +#: ../../src/appx/blog/spec.rst:445 +msgid "It's ok to use built-in Django CBV if needed." +msgstr "" +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." + +#: ../../src/appx/blog/spec.rst:448 +msgid "Challenge: Serializers" +msgstr "Завдання: Серіалізатори" + +#: ../../src/appx/blog/spec.rst:452 +msgid "" +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." +msgstr "" +"Серіалізатор для теми призначений лише для операцій читання (read-only). " +"Теми можна створювати лише через адміністративну сторінку." + +#: ../../src/appx/blog/spec.rst:454 +msgid "" +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." +msgstr "" +"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " +"``pk``, ``title``, ``description``." + +#: ../../src/appx/blog/spec.rst:459 +msgid "" +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." +msgstr "" +"серіалізатор коментаря статті може виконувати як операції читання, так і " +"операції запису. Проте він не може використовуватися для оновлення або " +"видалення коментаря." + +#: ../../src/appx/blog/spec.rst:461 +msgid "" +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." +msgstr "" +"Наразі можна використовувати випадкового або попередньо визначеного " +"користувача як автора коментаря. Це буде виправлено у майбутньому." + +#: ../../src/appx/blog/spec.rst:466 +msgid "" +"article serializer provides full access to articles. All operations are " +"available: list, retrieve, create, update and destroy." +msgstr "" +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " +"оновлення та видалення." + +#: ../../src/appx/blog/spec.rst:470 +msgid "User" +msgstr "Користувач" + +#: ../../src/appx/blog/spec.rst:471 +msgid "" +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." +msgstr "" +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." + +#: ../../src/appx/blog/spec.rst:477 +msgid "Challenge: API views" +msgstr "Завдання: API views" + +#: ../../src/appx/blog/spec.rst:479 +msgid "All blog-site functionality are to be reflected via REST API." +msgstr "" +"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " +"API." + +#: ../../src/appx/blog/spec.rst:482 +msgid "" +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." +msgstr "" +"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " +"запиту. Це буде виправлено у наступному розділі." + +#: ../../src/appx/blog/spec.rst:486 +msgid "Challenge: Authentication and Permissions" +msgstr "Завдання: Автентифікація та Дозволи" + +#: ../../src/appx/blog/spec.rst:488 +msgid "Implement authentication system for REST API." +msgstr "Реалізуйте систему аутентифікації для REST API." + +#: ../../src/appx/blog/spec.rst:490 +msgid "For non-authenticated users it is possible to create a new account" +msgstr "" +"Для неаутентифікованих користувачів можлива створення нового облікового " +"запису" + +#: ../../src/appx/blog/spec.rst:491 +msgid "" +"For non-authenticated users it is possible to obtain authentication data." +msgstr "" +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." + +#: ../../src/appx/blog/spec.rst:494 +msgid "" +"Access to user data is restricted. Authorized users can manipulate only " +"their own data (e.g. ``retrieve``, ``update``)." +msgstr "" +"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " +"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " +"``update``)." + +#: ../../src/appx/blog/spec.rst:496 +msgid "" +"Admins can retrieve all users data (``list``), but can't change them via " +"REST API. However, it is still possible via admin page." +msgstr "" +"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " +"можуть змінювати їх через REST API. Однак це все ще можливо через " +"адміністративну сторінку." + +#: ../../src/appx/blog/spec.rst:498 +msgid "" +"Authorized users can ``create`` articles or ``update`` and ``delete`` " +"articles created by them." +msgstr "" +"Авторизовані користувачі можуть ``create`` статті або ``update`` та " +"``delete`` статті, створені ними." + +#: ../../src/appx/blog/spec.rst:500 +msgid "Authorized users can add comments to a specified article." +msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." diff --git a/src/_locales/uk/LC_MESSAGES/appx/code_edit.po b/src/_locales/uk/LC_MESSAGES/appx/code_edit.po new file mode 100644 index 000000000..a7d577e57 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/code_edit.po @@ -0,0 +1,54 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:03+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/code_edit.txt:-1 +msgid "Code editors and IDEs for Python" +msgstr "Редактори коду та IDE для Python" + +#: ../../src/appx/code_edit.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/code_edit.txt:-1 +msgid "python, editor, ide" +msgstr "python, editor, ide" + +#: ../../src/appx/code_edit.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/appx/code_edit.txt:16 +msgid "Code Editors" +msgstr "Редактори Коду" + +#: ../../src/appx/code_edit.txt:18 +msgid "" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" +msgstr "" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" diff --git a/src/_locales/uk/LC_MESSAGES/appx/conv_store.po b/src/_locales/uk/LC_MESSAGES/appx/conv_store.po new file mode 100644 index 000000000..d402ef2d2 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/conv_store.po @@ -0,0 +1,558 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/conv_store.txt:-1 +msgid "Convenience store challenge" +msgstr "Завдання: продуктовий магазин" + +#: ../../src/appx/conv_store.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/conv_store.txt:-1 +msgid "python, basics, oop, object-oriented programming" +msgstr "python, basics, oop, object-oriented programming" + +#: ../../problem-sets/src/conv_store/challenge.rst:3 +msgid "Convenience Store Challenge" +msgstr "Convenience Store Challenge" + +#: ../../problem-sets/src/conv_store/challenge.rst:5 +msgid "" +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." +msgstr "" +"Місцевий магазин має проблеми з системою реєстрації платежів. Власник " +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." + +#: ../../problem-sets/src/conv_store/challenge.rst:14 +msgid "Your notes are here," +msgstr "Ваші нотатки ось," + +#: ../../problem-sets/src/conv_store/challenge.rst:18 +msgid "Products and Carts" +msgstr "Товари та кошик" + +#: ../../problem-sets/src/conv_store/challenge.rst:20 +msgid "" +"It's a good idea to start with basics - the objects you're going to work " +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." +msgstr "" +"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " +"першому етапі головною метою є впровадження моделей даних - класів для " +"роботи з даними в майбутньому." + +#: ../../problem-sets/src/conv_store/challenge.rst:25 +msgid "Product" +msgstr "Товар" + +#: ../../problem-sets/src/conv_store/challenge.rst:27 +msgid "This class represents goods available to purchase in the store." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: ../../problem-sets/src/conv_store/challenge.rst:29 +msgid "Each product instance should have next attributes:" +msgstr "Кожен екземпляр продукту повинен мати такі атрибути:" + +#: ../../problem-sets/src/conv_store/challenge.rst:31 +msgid "``name`` - a product title (e.g. \"apple\", \"juice\")" +msgstr "``name`` - назва товару (прик. \"apple\", \"juice\")" + +#: ../../problem-sets/src/conv_store/challenge.rst:32 +msgid "``price`` - a price for a single product unit (e.g. 3655, 500, 12999)" +msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" + +#: ../../problem-sets/src/conv_store/challenge.rst:33 +msgid "``unit`` - a size of a single product's unit (e.g. 1, 0.500, 12)" +msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: ../../problem-sets/src/conv_store/challenge.rst:35 +msgid "" +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +msgstr "" +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." + +#: ../../problem-sets/src/conv_store/challenge.rst:39 +msgid "" +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." +msgstr "" +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " +"``float``). Якщо аргумент кількості пропущено, просто використовуйте " +"значення атрибута ``unit``." + +#: ../../problem-sets/src/conv_store/challenge.rst:46 +#: ../../problem-sets/src/conv_store/challenge.rst:77 +msgid "Code explanation" +msgstr "Пояснення коду" + +#: conv_store.models.Product:1 of +msgid "Product model implementation" +msgstr "Реалізація моделі товару" + +#: conv_store.models.Product conv_store.models.ShoppingCart of +msgid "Variables" +msgstr "Змінні" + +#: conv_store.models.Product:3 of +msgid "the name of a product" +msgstr "назва товару" + +#: conv_store.models.Product:5 of +msgid "the price for a single product unit" +msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" + +#: conv_store.models.Product:7 of +msgid "the size of a single product unit" +msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: conv_store.models.Product:10 of +msgid "Instances of this class represent a product available for purchase." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: conv_store.models.Product.get_total:1 of +msgid "Return the total price for a specified amount of a product" +msgstr "Повертає загальну ціну за вказану кількість товару" + +#: conv_store.models.Product.get_total +#: conv_store.models.ShoppingCart.add_product of +msgid "Parameters" +msgstr "Параметри" + +#: conv_store.models.Product.get_total:3 of +msgid "a quantity to purchase, defaults to None" +msgstr "кількість для покупки, за замовчуванням None" + +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of +msgid "Returns" +msgstr "Повертає" + +#: conv_store.models.Product.get_total:6 of +msgid "total price for a specified amount of a product" +msgstr "вартість вказаної кількості товару" + +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of +msgid "Return type" +msgstr "Тип повернення" + +#: conv_store.models.Product.get_total:9 of +msgid "" +"If the quantity argument is omitted, unit attribute value should be used " +"instead." +msgstr "" +"Якщо аргумент кількості пропущено, замість нього слід використовувати " +"значення атрибута одиниці." + +#: ../../problem-sets/src/conv_store/challenge.rst:51 +#: ../../problem-sets/src/conv_store/challenge.rst:82 +#: ../../problem-sets/src/conv_store/challenge.rst:126 +#: ../../problem-sets/src/conv_store/challenge.rst:189 +#: ../../problem-sets/src/conv_store/challenge.rst:224 +msgid "Test cases" +msgstr "Тестові приклади" + +#: ../../problem-sets/src/conv_store/challenge.rst:63 +msgid "Shopping Cart" +msgstr "Кошик для покупок" + +#: ../../problem-sets/src/conv_store/challenge.rst:65 +msgid "" +"This class represents the container for the products. It's main " +"responsibility is to store information about the purchases and their amount " +"(quantities)." +msgstr "" +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." + +#: ../../problem-sets/src/conv_store/challenge.rst:68 +msgid "" +"Each cart instance should store data about ``Product`` objects in it and " +"corresponding quantity value for each individual product." +msgstr "" +"Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " +"ньому та відповідне значення кількості для кожного окремого продукту." + +#: ../../problem-sets/src/conv_store/challenge.rst:70 +msgid "" +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." +msgstr "" +"``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " +"вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " +"пропущено, просто використовує натомість значення ``Product.unit``." + +#: ../../problem-sets/src/conv_store/challenge.rst:73 +msgid "" +"``ShoppingCart`` should implement ``get_total`` method to calculate the " +"total price for the entire cart contents." +msgstr "" +"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " +"загальної ціни всього вмісту кошика." + +#: conv_store.models.ShoppingCart:1 of +msgid "Shopping cart model implementation" +msgstr "Реалізація моделі кошика" + +#: conv_store.models.ShoppingCart:3 of +msgid "product appended to the shopping cart instance" +msgstr "товар, доданий до екземпляра кошика" + +#: conv_store.models.ShoppingCart:5 of +msgid "corresponding quantities for each product in cart" +msgstr "відповідна кількість для товару у кошику" + +#: conv_store.models.ShoppingCart:8 of +msgid "" +"In general shopping cart is a container for products. Instances of this " +"class handle product and corresponding quantity for each item inside a " +"shopping cart instance." +msgstr "" +"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " +"класу обробляють продукт і відповідну кількість для кожного товару в " +"екземплярі кошика для покупок." + +#: conv_store.models.ShoppingCart.add_product:1 of +msgid "Add product to the shopping cart" +msgstr "Додає товар до кошика" + +#: conv_store.models.ShoppingCart.add_product:3 of +msgid "a product instance to add to cart" +msgstr "екземпляр товару, щоб додати до кошика" + +#: conv_store.models.ShoppingCart.add_product:5 of +msgid "a quantity of a product to add. Defaults to the product unit value." +msgstr "" +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." + +#: conv_store.models.ShoppingCart.add_product:9 of +msgid "" +"This method adds a product instance and corresponding quantity value to the " +"cart." +msgstr "" +"Цей метод додає екземпляр продукту та відповідне значення кількості до " +"кошика." + +#: conv_store.models.ShoppingCart.get_total:1 of +msgid "Return the total price for all the product in the cart" +msgstr "Повертає загальну вартість усіх товарів у кошику" + +#: conv_store.models.ShoppingCart.get_total:3 of +msgid "total cart price" +msgstr "загальна вартість кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:97 +msgid "Initialization, Representation and Type Casting" +msgstr "Ініціалізація, представлення та приведення типів" + +#: ../../problem-sets/src/conv_store/challenge.rst:99 +msgid "" +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." +msgstr "" +"Важко встановлювати властивості одну за одною, також " +"неінформативноотримувати представлення рядків об'єктів за замовчуванням. " +"Настав час це виправити." + +#: ../../problem-sets/src/conv_store/challenge.rst:102 +msgid "``Product`` should be initialized with all required data, no defaults." +msgstr "" +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." + +#: ../../problem-sets/src/conv_store/challenge.rst:103 +msgid "" +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." +msgstr "" +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." + +#: ../../problem-sets/src/conv_store/challenge.rst:105 +msgid "Provide a human readable representations. For example:" +msgstr "Надайте представлення, зрозумілі людині. Наприклад:" + +#: ../../problem-sets/src/conv_store/challenge.rst:107 +msgid "``Product('juice', 35.66, 1)``" +msgstr "``Product('juice', 35.66, 1)``" + +#: ../../problem-sets/src/conv_store/challenge.rst:108 +msgid "````" +msgstr "````" + +#: ../../problem-sets/src/conv_store/challenge.rst:110 +msgid "" +"While casting product instance to ``str`` type it should be equal to its " +"``name`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``str`` він повинен " +"дорівнювати значенню атрибута ``name``." + +#: ../../problem-sets/src/conv_store/challenge.rst:112 +msgid "" +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." + +#: ../../problem-sets/src/conv_store/challenge.rst:114 +msgid "" +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." +msgstr "" +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." + +#: ../../problem-sets/src/conv_store/challenge.rst:116 +msgid "" +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." +msgstr "" +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:119 +msgid "Implement equality operator support for your objects:" +msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" + +#: ../../problem-sets/src/conv_store/challenge.rst:121 +msgid "consider products equal if all their properties are the same" +msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:122 +msgid "" +"consider carts equal if products and corresponding quantities are the same" +msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:148 +msgid "Payment Processors" +msgstr "Опрацювання платежів" + +#: ../../problem-sets/src/conv_store/challenge.rst:150 +msgid "" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" +msgstr "" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" + +#: ../../problem-sets/src/conv_store/challenge.rst:153 +msgid "cart validation - it should not be empty or already purchased" +msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" + +#: ../../problem-sets/src/conv_store/challenge.rst:154 +msgid "payment validation - various payment types requires various validations" +msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" + +#: ../../problem-sets/src/conv_store/challenge.rst:155 +msgid "purchasing the cart" +msgstr "купівля кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:157 +msgid "" +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." +msgstr "" +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." + +#: ../../problem-sets/src/conv_store/challenge.rst:160 +msgid "" +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." +msgstr "" +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." + +#: ../../problem-sets/src/conv_store/challenge.rst:163 +msgid "" +"Implement ``PaymentValidator`` class with ``is_valid`` that takes no " +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." +msgstr "" +"Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " +"аргументів і повертає значення логічного типу. Це абстрактний клас для " +"майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:166 +msgid "" +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." +msgstr "" +"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " +"об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " +"майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:169 +msgid "" +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." +msgstr "" +"Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " +"цього класу вважаються завжди дійсними." + +#: ../../problem-sets/src/conv_store/challenge.rst:171 +msgid "Inherit ``CodeValidator`` from the base validator." +msgstr "Успадкувати ``CodeValidator`` від основного валідатора." + +#: ../../problem-sets/src/conv_store/challenge.rst:173 +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." + +#: ../../problem-sets/src/conv_store/challenge.rst:174 +msgid "" +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." +msgstr "" +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." + +#: ../../problem-sets/src/conv_store/challenge.rst:178 +msgid "" +"Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." +msgstr "" +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." + +#: ../../problem-sets/src/conv_store/challenge.rst:183 +msgid "" +"Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing card payment...\" and \"Security code: {code}\" should be " +"printed out." +msgstr "" +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." + +#: ../../problem-sets/src/conv_store/challenge.rst:203 +msgid "More Enhancements for Shopping Carts" +msgstr "Більше покращень для кошиків для покупок" + +#: ../../problem-sets/src/conv_store/challenge.rst:205 +msgid "Make your ``ShoppingCart`` an actual container" +msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" + +#: ../../problem-sets/src/conv_store/challenge.rst:207 +msgid "" +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." +msgstr "" +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." + +#: ../../problem-sets/src/conv_store/challenge.rst:209 +msgid "" +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +msgstr "" +"Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " +"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " +"float]]``)." + +#: ../../problem-sets/src/conv_store/challenge.rst:213 +msgid "" +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." +msgstr "" +"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " +"примірник продукту та відповідну кількість для кожної ітерації." + +#: ../../problem-sets/src/conv_store/challenge.rst:215 +msgid "" +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." +msgstr "" +"Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " +"кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " +"натомість відповідне значення кількості." + +#: ../../problem-sets/src/conv_store/challenge.rst:218 +msgid "" +"Implement ``remove_product`` method to completely remove some product from " +"the cart." +msgstr "" +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:220 +msgid "" +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." +msgstr "" +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:249 +msgid "Testing Software" +msgstr "Тестування програмного забезпечення" + +#: ../../problem-sets/src/conv_store/challenge.rst:251 +msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." +msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." + +#: ../../problem-sets/src/conv_store/challenge.rst:253 +msgid "Tests should be located inside of \"tests\" directory." +msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." + +#: ../../problem-sets/src/conv_store/challenge.rst:254 +msgid "``pytest`` and ``coverage`` libraries will be used for testing." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." + +#: ../../problem-sets/src/conv_store/challenge.rst:255 +msgid "Project dependencies are to be updated." +msgstr "Залежності проекту потрібно оновити." diff --git a/src/_locales/uk/LC_MESSAGES/appx/env_path.po b/src/_locales/uk/LC_MESSAGES/appx/env_path.po new file mode 100644 index 000000000..1a071966c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/env_path.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/env_path.txt:-1 +msgid "Setting up environment variables" +msgstr "Встановлення змінних середовища" + +#: ../../src/appx/env_path.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/env_path.txt:-1 +msgid "settings, environment, variables" +msgstr "settings, environment, variables" + +#: ../../src/appx/env_path.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/appx/env_path.txt:16 +msgid "Issue - System Environment PATH" +msgstr "Проблема - System Environment PATH" diff --git a/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po b/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po new file mode 100644 index 000000000..e131f1d55 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po @@ -0,0 +1,1187 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:06+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/libms/spec.rst:3 +msgid "Library Management System" +msgstr "Система Керування Бібліотекою" + +#: ../../src/appx/libms/spec.rst:5 +msgid "" +"The Library Management System is a Django-based web application that offers " +"a digital platform for managing and interacting with a library's collection. " +"It streamlines the processes of book lending, returns, and inventory " +"management, while ensuring easy access for users and librarians alike. " +"Through this system, users can search for available books, place borrowing " +"requests, and manage their borrowed items. Librarians, on the other hand, " +"oversee the addition, update, and removal of book records, and can approve " +"or decline borrowing requests. The system also supports diverse user roles, " +"from regular members to staff and administrators, each with distinct " +"capabilities." +msgstr "" +"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " +"пропонує цифрову платформу для управління та взаємодії з колекцією " +"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " +"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " +"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " +"книги, робити запити на позику та керувати позиченими предметами. " +"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " +"записів книг та можуть схвалювати або відхиляти запити на позику. Система " +"також підтримує різноманітні ролі користувачів, від звичайних членів до " +"персоналу та адміністраторів, кожен з яких має відмінні можливості." + +#: ../../src/appx/libms/spec.rst:15 +msgid "" +"A well-structured user interface ensures that all functionalities are easily " +"accessible, making the library management process seamless and efficient. " +"This project aims to merge traditional library functions with modern " +"technological innovations, promoting efficiency and an enhanced user " +"experience." +msgstr "" +"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " +"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " +"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " +"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " +"покращенню користувацького досвіду." + +#: ../../src/appx/libms/spec.rst:22 +msgid "User roles" +msgstr "Ролі користувачів" + +#: ../../src/appx/libms/spec.rst:25 +msgid "" +"It is essential for developers to consider security aspects when " +"implementing these roles to ensure that users cannot perform actions outside " +"their designated role's scope." +msgstr "" +"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " +"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " +"рамки призначеної їм ролі." + +#: ../../src/appx/libms/spec.rst:30 +msgid "Admins" +msgstr "Адміністратори" + +#: ../../src/appx/libms/spec.rst:32 +msgid "" +"Superusers have full control over the entire system. They can access and " +"manage all functionalities provided by the Django admin site." +msgstr "" +"Адміністратори мають повний контроль над усією системою. Вони можуть " +"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " +"керувати ними." + +#: ../../src/appx/libms/spec.rst:35 +msgid "Admins can create, modify, or delete any record within the application." +msgstr "" +"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " +"додатку." + +#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 +#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 +msgid "Capabilities" +msgstr "Можливості" + +#: ../../src/appx/libms/spec.rst:39 +msgid "Access Django admin site" +msgstr "Доступ до адміністративного сайту Django" + +#: ../../src/appx/libms/spec.rst:42 +msgid "Librarians" +msgstr "Бібліотекарі" + +#: ../../src/appx/libms/spec.rst:44 +msgid "" +"Staff personnel are in charge of day-to-day operations within the library. " +"They can add new books to the library's collection, manage existing books' " +"details, and accept or decline borrow requests from regular users." +msgstr "" +"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " +"можуть додавати нові книги до бібліотечної колекції, керувати даними про " +"наявні книги, а також приймати або відхиляти запити від постійних " +"користувачів." + +#: ../../src/appx/libms/spec.rst:50 +msgid "Management of the library catalogue" +msgstr "Управління бібліотечним каталогом" + +#: ../../src/appx/libms/spec.rst:52 +msgid "Add, modify or delete authors" +msgstr "Додавати, змінювати або видаляти авторів" + +#: ../../src/appx/libms/spec.rst:53 +msgid "Add, modify or delete genres" +msgstr "Додавати, змінювати або видаляти жанри" + +#: ../../src/appx/libms/spec.rst:54 +msgid "Add, modify or delete books' details" +msgstr "Додавати, змінювати або видаляти дані про книги" + +#: ../../src/appx/libms/spec.rst:56 +msgid "Review borrow requests from regular users" +msgstr "Переглядати запити на позичення від користувачів" + +#: ../../src/appx/libms/spec.rst:57 +msgid "Accept or decline borrow requests" +msgstr "Приймати або відхиляти запити на позичення" + +#: ../../src/appx/libms/spec.rst:58 +msgid "Register returned books and update their status" +msgstr "Реєструвати повернені книги та оновлювати їх статус" + +#: ../../src/appx/libms/spec.rst:61 +msgid "Regular" +msgstr "Звичайний" + +#: ../../src/appx/libms/spec.rst:63 +msgid "" +"Regular registered users are the members of the library. They can search " +"books, request to borrow them, and are responsible for returning borrowed " +"books on time." +msgstr "" +"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " +"книги, запитувати їх, а також несуть відповідальність за своєчасне " +"повернення позичених книг." + +#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 +msgid "Browse the books' catalogue" +msgstr "Переглядати каталог книг" + +#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 +msgid "View details of a book" +msgstr "Переглядати деталі книги" + +#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 +msgid "Search books" +msgstr "Шукати книги" + +#: ../../src/appx/libms/spec.rst:72 +msgid "Request to borrow available books" +msgstr "Робити запит на позичення доступних книжок" + +#: ../../src/appx/libms/spec.rst:73 +msgid "Check due date for returned books" +msgstr "Перевіряти термін повернення запозичених книжок" + +#: ../../src/appx/libms/spec.rst:74 +msgid "Return borrowed books" +msgstr "Повертати запозичені книги" + +#: ../../src/appx/libms/spec.rst:77 +msgid "Anonymous" +msgstr "Анонімні" + +#: ../../src/appx/libms/spec.rst:79 +msgid "Anonymous users are visitors who haven't logged into the system." +msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." + +#: ../../src/appx/libms/spec.rst:86 +msgid "Access to the registration or login pages" +msgstr "Доступ до сторінок реєстрації або входу" + +#: ../../src/appx/libms/spec.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../src/appx/libms/spec.rst:93 +msgid "Author model" +msgstr "Модель авторів" + +#: ../../src/appx/libms/spec.rst:95 +msgid "" +"The ``Author`` model captures the details of the person, or group " +"responsible for creating the book." +msgstr "" +"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " +"за створення книги." + +#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 +#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 +msgid "Attributes" +msgstr "Атрибути" + +#: ../../src/appx/libms/spec.rst +msgid "Name" +msgstr "Name" + +#: ../../src/appx/libms/spec.rst:102 +msgid "The full name of the author. This should be limited to 255 characters." +msgstr "Повне ім'я автора. Не більше 255 символів." + +#: ../../src/appx/libms/spec.rst +msgid "Bio" +msgstr "Bio" + +#: ../../src/appx/libms/spec.rst:105 +msgid "A brief biography or description of the author." +msgstr "Коротка біографія або опис автора." + +#: ../../src/appx/libms/spec.rst:108 +msgid "Genre model" +msgstr "Модель жанра" + +#: ../../src/appx/libms/spec.rst:110 +msgid "" +"The ``Genre`` model represents the category or type of content a book " +"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " +"etc. Since a book can belong to more than one category at a time, it is " +"implemented as a dedicated model." +msgstr "" +"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " +"книга, наприклад, \"Художня література\", \"Нехудожня література\", " +"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " +"категорій одночасно, вона реалізована як окрема модель." + +#: ../../src/appx/libms/spec.rst:118 +msgid "The name of the genre." +msgstr "Назва жанру." + +#: ../../src/appx/libms/spec.rst:121 +msgid "Book model" +msgstr "Модель книги" + +#: ../../src/appx/libms/spec.rst:123 +msgid "" +"The ``Book`` model represents a physical book in the library's collection. " +"Each book record captures essential bibliographic information, as well as " +"details related to its current status in the library (e.g. available, " +"borrowed etc.)." +msgstr "" +"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " +"запис про книгу містить основну бібліографічну інформацію, а також деталі, " +"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " +"тощо)." + +#: ../../src/appx/libms/spec.rst +msgid "Title" +msgstr "Title" + +#: ../../src/appx/libms/spec.rst:131 +msgid "The name or title of the book (255 characters or fewer)." +msgstr "Назва книги (255 символів або менше)." + +#: ../../src/appx/libms/spec.rst +msgid "Summary" +msgstr "Summary" + +#: ../../src/appx/libms/spec.rst:134 +msgid "A brief description or synopsis of the book." +msgstr "Короткий опис або синопсис книги." + +#: ../../src/appx/libms/spec.rst +msgid "ISBN" +msgstr "ISBN" + +#: ../../src/appx/libms/spec.rst:137 +msgid "International Standard Book Number, a unique identifier for books." +msgstr "" +"International Standard Book Number, унікальний ідентифікатор для книг.." + +#: ../../src/appx/libms/spec.rst +msgid "Available" +msgstr "Available" + +#: ../../src/appx/libms/spec.rst:140 +msgid "" +"Current available status of the book. Either ``True`` or ``False``. Books " +"are available by default." +msgstr "" +"Поточний статус доступності книги. Або ``True``, або ``False``. За " +"замовчуванням книги доступні." + +#: ../../src/appx/libms/spec.rst +msgid "Published date" +msgstr "Published date" + +#: ../../src/appx/libms/spec.rst:144 +msgid "The date when the book was published." +msgstr "Дата, коли книга була опублікована." + +#: ../../src/appx/libms/spec.rst +msgid "Publisher" +msgstr "Publisher" + +#: ../../src/appx/libms/spec.rst:147 +msgid "" +"The entity or company responsible for the production and distribution of the " +"book." +msgstr "" +"Організація або компанія, відповідальна за виробництво та розповсюдження " +"книги." + +#: ../../src/appx/libms/spec.rst +msgid "Genre(s)" +msgstr "Genre(s)" + +#: ../../src/appx/libms/spec.rst:151 +msgid "" +"The category or type of content the book falls under (e.g., Fiction, Non-" +"Fiction, Science)." +msgstr "" +"Категорія або тип контенту, до якого належить книга (наприклад, художня " +"література, нон-фікшн, наукова література)." + +#: ../../src/appx/libms/spec.rst +msgid "Author(s)" +msgstr "Author(s)" + +#: ../../src/appx/libms/spec.rst:156 +msgid "" +"The name of the person or group responsible for creating the content of the " +"book." +msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." + +#: ../../src/appx/libms/spec.rst +msgid "Borrower" +msgstr "Borrower" + +#: ../../src/appx/libms/spec.rst:160 +msgid "The user who has currently borrowed the book, if applicable." +msgstr "Користувач, який наразі позичив книгу, якщо це можливо." + +#: ../../src/appx/libms/spec.rst:163 +msgid "Borrow request model" +msgstr "Модель запиту на позику" + +#: ../../src/appx/libms/spec.rst:165 +msgid "" +"The ``BorrowRequest`` model captures the intent of a user to borrow a " +"specific book. It tracks the status of the request, whether it's pending, " +"approved, declined, or completed." +msgstr "" +"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " +"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." + +#: ../../src/appx/libms/spec.rst +msgid "Book" +msgstr "Book" + +#: ../../src/appx/libms/spec.rst:173 +msgid "A reference to a book to be borrowed." +msgstr "Посилання на книгу, яку потрібно взяти." + +#: ../../src/appx/libms/spec.rst:176 +msgid "A reference to a user who wants to borrow a book." +msgstr "Посилання на користувача, який хоче взяти книгу." + +#: ../../src/appx/libms/spec.rst +msgid "Status" +msgstr "Status" + +#: ../../src/appx/libms/spec.rst:179 +msgid "The current status of the request." +msgstr "Поточний статус заявки." + +#: ../../src/appx/libms/spec.rst:181 +msgid "pending" +msgstr "pending" + +#: ../../src/appx/libms/spec.rst:182 +msgid "approved" +msgstr "approved" + +#: ../../src/appx/libms/spec.rst:183 +msgid "collected" +msgstr "collected" + +#: ../../src/appx/libms/spec.rst:184 +msgid "complete" +msgstr "complete" + +#: ../../src/appx/libms/spec.rst:185 +msgid "declined" +msgstr "declined" + +#: ../../src/appx/libms/spec.rst:187 +msgid "" +"The status constants should be encapsulated within the ``BorrowRequest`` " +"model." +msgstr "" +"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." + +#: ../../src/appx/libms/spec.rst +msgid "Overdue" +msgstr "Overdue" + +#: ../../src/appx/libms/spec.rst:202 +msgid "A flag indicating if a borrow request was overdue." +msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." + +#: ../../src/appx/libms/spec.rst +msgid "Request date" +msgstr "Request date" + +#: ../../src/appx/libms/spec.rst:205 +msgid "The date the borrow request was made. This is required." +msgstr "Дата подання запиту на позику. Це обов'язкова інформація." + +#: ../../src/appx/libms/spec.rst +msgid "Approval date" +msgstr "Approval date" + +#: ../../src/appx/libms/spec.rst:208 +msgid "The date the request was approved, if applicable. Optional." +msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." + +#: ../../src/appx/libms/spec.rst +msgid "Due date" +msgstr "Due date" + +#: ../../src/appx/libms/spec.rst:211 +msgid "" +"The date by which the book should be returned. Optional, should only be set " +"if the request if approved." +msgstr "" +"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " +"у разі схвалення запиту." + +#: ../../src/appx/libms/spec.rst +msgid "Complete date" +msgstr "Complete date" + +#: ../../src/appx/libms/spec.rst:215 +msgid "" +"The date the book was returned and the borrowing request was completed. " +"Optional, should only be set if the request has reached the \"Complete\" " +"status." +msgstr "" +"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " +"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." + +#: ../../src/appx/libms/spec.rst:220 +msgid "Relationships" +msgstr "Відносини" + +#: ../../src/appx/libms/spec.rst:228 +msgid "Book to author" +msgstr "Книга до автору" + +#: ../../src/appx/libms/spec.rst:230 +msgid "" +"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " +"can have **one or more** ``authors``. This establishes a **many-to-many** " +"relationship between the two entities." +msgstr "" +"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " +"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " +"**багато-до-багатьох** між цими двома сутностями." + +#: ../../src/appx/libms/spec.rst:235 +msgid "Book to genre" +msgstr "Книга до жанру" + +#: ../../src/appx/libms/spec.rst:237 +msgid "" +"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " +"However a ``Book`` might not belong to any genre. This relationship between " +"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " +"possibility of zero genres for a book." +msgstr "" +"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " +"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " +"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " +"можливістю нульових жанрів для книги." + +#: ../../src/appx/libms/spec.rst:243 +msgid "Book to borrow request" +msgstr "Книга до запиту на позику" + +#: ../../src/appx/libms/spec.rst:245 +msgid "" +"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " +"relationship." +msgstr "" +"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " +"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " +"зв'язок **багато-до-одного**." + +#: ../../src/appx/libms/spec.rst:250 +msgid "User to borrow request" +msgstr "Користувач до запиту на позику" + +#: ../../src/appx/libms/spec.rst:252 +msgid "" +"Each ``User`` can make multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers to only one book, forming a **many-to-one** " +"relationship." +msgstr "" +"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " +"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " +"``багато до однієї``." + +#: ../../src/appx/libms/spec.rst:256 +msgid "User to book (as a borrower)" +msgstr "Користувач до книги (як запозичувач)" + +#: ../../src/appx/libms/spec.rst:258 +msgid "" +"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " +"``Book`` can be borrowed by one user only. This forms a **one-to-one** " +"relationship." +msgstr "" +"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " +"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " +"відносини \"один до одного\"." + +#: ../../src/appx/libms/spec.rst:264 +msgid "Views and templates" +msgstr "Подання та шаблони" + +#: ../../src/appx/libms/spec.rst:267 +msgid "Admin site" +msgstr "Адмін-сайт" + +#: ../../src/appx/libms/spec.rst:269 +msgid "" +"Admin site provides the full control over the entire system. Only admins are " +"permitted to use admin site. Librarians should use their dedicated views to " +"perform operations, except special cases." +msgstr "" +"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " +"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " +"повинні використовувати свої виділені подання для виконання операцій, за " +"винятком особливих випадків." + +#: ../../src/appx/libms/spec.rst:275 +msgid "Authentication" +msgstr "Автентифікація" + +#: ../../src/appx/libms/spec.rst:278 +msgid "Login" +msgstr "Логін" + +#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 +#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 +#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 +#: ../../src/appx/libms/spec.rst:512 +msgid "Template" +msgstr "Template" + +#: ../../src/appx/libms/spec.rst:282 +msgid "" +"A form with fields for entering a username and a password, and a submit " +"button." +msgstr "" +"Форма з полями для введення імені користувача та пароля, а також кнопкою " +"\"Надіслати\"." + +#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 +#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 +#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 +#: ../../src/appx/libms/spec.rst:499 +msgid "View logic" +msgstr "View logic" + +#: ../../src/appx/libms/spec.rst:286 +msgid "" +"Validate entered credentials and authenticate the user. In case of incorrect " +"credentials, display an error message." +msgstr "" +"Перевірити введені облікові дані та автентифікувати користувача. У разі " +"неправильних облікових даних вивести повідомлення про помилку." + +#: ../../src/appx/libms/spec.rst:290 +msgid "Registration" +msgstr "Реєстрація" + +#: ../../src/appx/libms/spec.rst:294 +msgid "A form for new user registration. **Required** fields are:" +msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" + +#: ../../src/appx/libms/spec.rst:296 +msgid "username" +msgstr "username" + +#: ../../src/appx/libms/spec.rst:297 +msgid "first name" +msgstr "first name" + +#: ../../src/appx/libms/spec.rst:298 +msgid "last name" +msgstr "last name" + +#: ../../src/appx/libms/spec.rst:299 +msgid "password" +msgstr "password" + +#: ../../src/appx/libms/spec.rst:300 +msgid "confirm password" +msgstr "confirm password" + +#: ../../src/appx/libms/spec.rst:304 +msgid "Upon submission, the view should validate the provided data:" +msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" + +#: ../../src/appx/libms/spec.rst:306 +msgid "Check if username is already taken." +msgstr "Перевірте, чи не зайнято вже ім'я користувача." + +#: ../../src/appx/libms/spec.rst:307 +msgid "Ensure that password and confirm password fields match." +msgstr "" +"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." + +#: ../../src/appx/libms/spec.rst:308 +msgid "" +"Save the user's data if all validations pass. Otherwise, display appropriate " +"error messages." +msgstr "" +"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " +"відобразити відповідні повідомлення про помилки." + +#: ../../src/appx/libms/spec.rst:311 +msgid "" +"When saving passwords in the database, always store them in a hashed format, " +"never in plain text." +msgstr "" +"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " +"не у вигляді простого тексту." + +#: ../../src/appx/libms/spec.rst:315 +msgid "" +"Django's built-in ``User`` model and authentication system handle password " +"hashing by default, which is a big plus." +msgstr "" +"Вбудована в Django модель ``User`` та система автентифікації за " +"замовчуванням обробляє хешування паролів, що є великим плюсом." + +#: ../../src/appx/libms/spec.rst:319 +msgid "Borrowing History" +msgstr "Історія запозичень" + +#: ../../src/appx/libms/spec.rst:321 +msgid "This view is available only for authenticated users." +msgstr "Це подання доступне лише для авторизованих користувачів." + +#: ../../src/appx/libms/spec.rst:325 +msgid "" +"Users can see the list of **all** their borrows requests, regardless of " +"approve/decline status." +msgstr "" +"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " +"від статусу схвалення/відхилення." + +#: ../../src/appx/libms/spec.rst:330 +msgid "Authenticated users can see only their own borrow requests." +msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." + +#: ../../src/appx/libms/spec.rst:331 +msgid "" +"Librarians and admins can access borrows requests list for any user, " +"registered in the library system." +msgstr "" +"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " +"будь-якого користувача, зареєстрованого в бібліотечній системі." + +#: ../../src/appx/libms/spec.rst:335 +msgid "Library collection" +msgstr "Бібліотечний фонд" + +#: ../../src/appx/libms/spec.rst:337 +msgid "" +"These views are generally available for all (including anonymous) users. The " +"functionality for authenticated users include books borrowing." +msgstr "" +"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " +"користувачів. Функціонал для аутентифікованих користувачів включає в себе " +"можливість позичати книги." + +#: ../../src/appx/libms/spec.rst:341 +msgid "Books list" +msgstr "Список літератури" + +#: ../../src/appx/libms/spec.rst:345 +msgid "A list (or table) of books. Each book entry should provide information:" +msgstr "" +"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " +"книгу:" + +#: ../../src/appx/libms/spec.rst:347 +msgid "title" +msgstr "title" + +#: ../../src/appx/libms/spec.rst:348 +msgid "author(s)" +msgstr "автор(и)" + +#: ../../src/appx/libms/spec.rst:349 +msgid "summary (truncated if too long, 30 words or fewer)" +msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" + +#: ../../src/appx/libms/spec.rst:350 +msgid "availability status (either **Available** or **Unavailable**)" +msgstr "статус доступності (**Доступний** або **Не доступний**)" + +#: ../../src/appx/libms/spec.rst:354 +msgid "Querying the data" +msgstr "Запит даних" + +#: ../../src/appx/libms/spec.rst:356 +msgid "Fetch **all** books from the database" +msgstr "Отримати **усі** книги з бази даних" + +#: ../../src/appx/libms/spec.rst:358 +msgid "Checking availability status (visual mark)" +msgstr "Перевірка статусу доступності (візуальна позначка)" + +#: ../../src/appx/libms/spec.rst:360 +msgid "" +"For each book, determine its availability status. Check ``Book.available`` " +"flag." +msgstr "" +"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." +"available``." + +#: ../../src/appx/libms/spec.rst:364 +msgid "" +"A user can still create a borrowing request, regardless of the book " +"availability status. This is only the visual mark." +msgstr "" +"Користувач все одно може створити запит на позику, незалежно від статусу " +"доступності книги. Це лише візуальна позначка." + +#: ../../src/appx/libms/spec.rst:368 +msgid "Detail view" +msgstr "Детальний перегляд" + +#: ../../src/appx/libms/spec.rst:372 +msgid "" +"The detailed view of a specific book, presenting comprehensive information:" +msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" + +#: ../../src/appx/libms/spec.rst:374 +msgid "**Title**: Display the book's title prominently." +msgstr "**Назва**: Покажіть назву книги на видному місці." + +#: ../../src/appx/libms/spec.rst:375 +msgid "**Genre(s)**: List all associated genres (if any)." +msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." + +#: ../../src/appx/libms/spec.rst:376 +msgid "**Author(s)**: List all associated authors." +msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." + +#: ../../src/appx/libms/spec.rst:377 +msgid "**ISBN**: The International Standard Book Number." +msgstr "**ISBN**: Міжнародний стандартний номер книги." + +#: ../../src/appx/libms/spec.rst:378 +msgid "**Published Date**: When the book was published." +msgstr "**Дата публікації**: Коли вийшла друком книга." + +#: ../../src/appx/libms/spec.rst:379 +msgid "" +"**Publisher**: The name of the entity or company responsible for publishing" +msgstr "" +"**Видавець**: Назва організації або компанії, відповідальної за публікацію" + +#: ../../src/appx/libms/spec.rst:380 +msgid "**Summary**: A full summary or description of the book. the book." +msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." + +#: ../../src/appx/libms/spec.rst:382 +msgid "**Action Buttons** (For authenticated users only):" +msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" + +#: ../../src/appx/libms/spec.rst:384 +msgid "" +"**Borrow Request Button**: If the user has no associated borrow request they " +"can create a new one." +msgstr "" +"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " +"позику, він може створити новий." + +#: ../../src/appx/libms/spec.rst:386 +msgid "" +"**Gather Book Button**: If the user's borrow request for this book has been " +"approved, allow the user to confirm they've picked up the book." +msgstr "" +"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " +"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." + +#: ../../src/appx/libms/spec.rst:391 +msgid "**Fetching Book Details**:" +msgstr "**Доступ до деталей книги**:" + +#: ../../src/appx/libms/spec.rst:393 +msgid "" +"Use the book's identifier (usually a primary key) to fetch its details from " +"the database." +msgstr "" +"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " +"інформацію про неї з бази даних." + +#: ../../src/appx/libms/spec.rst:396 +msgid "**Checking User Authentication**:" +msgstr "**Перевірка автентичності користувача**:" + +#: ../../src/appx/libms/spec.rst:398 +msgid "" +"Determine if a user is authenticated. If they are, display the appropriate " +"action buttons based on the book's availability status and any existing " +"borrow requests by the user." +msgstr "" +"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " +"кнопки дій на основі статусу доступності книги та наявних запитів " +"користувача на позику." + +#: ../../src/appx/libms/spec.rst:402 +msgid "**Handling Borrow Requests**:" +msgstr "**Обробка запитів на позику**:" + +#: ../../src/appx/libms/spec.rst:404 +msgid "If an authenticated user clicks on the \"Borrow Request\" button:" +msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" + +#: ../../src/appx/libms/spec.rst:406 +msgid "" +"Create a new borrow request in the ``BorrowRequest`` model with status " +"\"pending\"." +msgstr "" +"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " +"розгляді\"." + +#: ../../src/appx/libms/spec.rst:408 +msgid "Update the book's status to \"Awaiting approval\"." +msgstr "Оновіть статус книги на \"Очікує затвердження\"." + +#: ../../src/appx/libms/spec.rst:409 +msgid "" +"Redirect the user to a confirmation page or display a message indicating the " +"request has been made." +msgstr "" +"Перенаправлення користувача на сторінку підтвердження або відображення " +"повідомлення про те, що запит було зроблено." + +#: ../../src/appx/libms/spec.rst:412 +msgid "**Handling Book Gathering**:" +msgstr "**Опрацювання Позики Книги**:" + +#: ../../src/appx/libms/spec.rst:414 +msgid "" +"If an authenticated user has an approved borrow request and clicks the " +"\"Gather Book\" button:" +msgstr "" +"Якщо авторизований користувач має схвалений запит на позику і натискає " +"кнопку \"Зібрати книгу\":" + +#: ../../src/appx/libms/spec.rst:417 +msgid "Update the book's status to \"Borrowed\"." +msgstr "Оновіть статус книги на \"Позичена\"." + +#: ../../src/appx/libms/spec.rst:418 +msgid "Update the borrow request's status to \"complete\"." +msgstr "Оновіть статус запиту на позику до \"завершено\"." + +#: ../../src/appx/libms/spec.rst:419 +msgid "" +"Redirect the user to a confirmation page or display a message indicating " +"they've picked up the book." +msgstr "" +"Перенаправляйте користувача на сторінку підтвердження або показуйте " +"повідомлення про те, що він забрав книгу." + +#: ../../src/appx/libms/spec.rst:423 +msgid "" +"Always ensure the user's actions are authenticated and authorized. This " +"prevents unauthorized borrow requests or gathering of books. Also, consider " +"adding error handling to manage cases where the book's details cannot be " +"fetched or any other unexpected issues." +msgstr "" +"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " +"Це запобігає несанкціонованим запитам на позику або збору книг. Також " +"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " +"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." + +#: ../../src/appx/libms/spec.rst:429 +msgid "Books management" +msgstr "Управління книгами" + +#: ../../src/appx/libms/spec.rst:431 +msgid "These views are available only for staff (librarians and admins)." +msgstr "" +"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." + +#: ../../src/appx/libms/spec.rst:434 +msgid "Authors and genres management" +msgstr "Управління авторами та жанрами" + +#: ../../src/appx/libms/spec.rst:436 +msgid "" +"Only librarians and admins can add, modify or delete authors and genres. No " +"additional views for CRUD operations required (except admin site). " +"Librarians are allowed to access authors and genres via admin site. Only " +"admins can remove authors or genres." +msgstr "" +"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " +"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " +"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " +"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " +"жанри." + +#: ../../src/appx/libms/spec.rst:442 +msgid "Book creation and update" +msgstr "Створення та оновлення книг" + +#: ../../src/appx/libms/spec.rst:444 +msgid "" +"The template should comprise a form with fields corresponding to the book's " +"attributes. Here are the essential elements for the form:" +msgstr "" +"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " +"основні елементи форми:" + +#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 +msgid "A text input field." +msgstr "Поле для введення тексту." + +#: ../../src/appx/libms/spec.rst:451 +msgid "A textarea for a brief description or synopsis." +msgstr "Текстова область для короткого опису або синопсису." + +#: ../../src/appx/libms/spec.rst:454 +msgid "A text input field for the book's International Standard Book Number." +msgstr "Поле для введення міжнародного стандартного номера книги." + +#: ../../src/appx/libms/spec.rst:457 +msgid "A checkbox indicating if a book is available. Defaults to ``True``." +msgstr "" +"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." + +#: ../../src/appx/libms/spec.rst:460 +msgid "A date input field." +msgstr "Поле для введення дати." + +#: ../../src/appx/libms/spec.rst +msgid "Genres" +msgstr "Жанри" + +#: ../../src/appx/libms/spec.rst:466 +msgid "" +"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " +"fetch available genres from the database and allow users to select zero or " +"more genres." +msgstr "" +"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " +"користувачам вибирати нуль або більше жанрів." + +#: ../../src/appx/libms/spec.rst +msgid "Authors" +msgstr "Автори" + +#: ../../src/appx/libms/spec.rst:471 +msgid "" +"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " +"fetch available authors from the database and allow users to select one or " +"more authors." +msgstr "" +"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " +"користувачам вибирати одного або декількох авторів." + +#: ../../src/appx/libms/spec.rst:477 +msgid "" +"If it's an *update* action, pre-populate the form fields with the existing " +"details of the book fetched from the database." +msgstr "" +"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " +"книги, отриманими з бази даних." + +#: ../../src/appx/libms/spec.rst:479 +msgid "For *creation*, provide an empty form for the librarian to fill in." +msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." + +#: ../../src/appx/libms/spec.rst:480 +msgid "Ensure the published date is logical (e.g. not a future date)." +msgstr "" +"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " +"майбутнього)." + +#: ../../src/appx/libms/spec.rst:481 +msgid "Validate required inputs, according to general ``Book`` model rules." +msgstr "" +"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " +"``Book``." + +#: ../../src/appx/libms/spec.rst:482 +msgid "" +"If validations pass: save changes to the database; otherwise, provide " +"helpful error messages." +msgstr "" +"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " +"випадку надайте корисні повідомлення про помилки." + +#: ../../src/appx/libms/spec.rst:486 +msgid "" +"You MAY provide a mechanism (like modal or a quick entry form) to add a new " +"genre or author without leaving the book form page." +msgstr "" +"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " +"введення) для додавання нового жанру або автора, не виходячи зі сторінки " +"форми книги." + +#: ../../src/appx/libms/spec.rst:490 +msgid "Book deletion" +msgstr "Видалення книги" + +#: ../../src/appx/libms/spec.rst:492 +msgid "" +"Only librarians and administrators are permitted to perform this action." +msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." + +#: ../../src/appx/libms/spec.rst:496 +msgid "A confirm delete form with **Submit** and **Cancel** buttons." +msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." + +#: ../../src/appx/libms/spec.rst:500 +msgid "Authorize user before deleting performing deletion." +msgstr "Авторизуйте користувача перед виконанням видалення." + +#: ../../src/appx/libms/spec.rst:501 +msgid "" +"If a form is submitted, a book should be removed from the library collection." +msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." + +#: ../../src/appx/libms/spec.rst:503 +msgid "" +"If deletion is canceled view should redirect back to book detail view page." +msgstr "" +"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " +"сторінку детального перегляду книги." + +#: ../../src/appx/libms/spec.rst:506 +msgid "Borrow requests" +msgstr "Запити на позики" + +#: ../../src/appx/libms/spec.rst:508 +msgid "" +"This view facilitates the management of borrowing requests for librarians " +"and admins, aiding in their prompt handling." +msgstr "" +"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " +"позики, допомагаючи оперативно їх обробляти." + +#: ../../src/appx/libms/spec.rst:513 +msgid "" +"Present a table showcasing the list of borrow requests. Each row embodies a " +"borrow request and encompasses:" +msgstr "" +"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " +"відображає один запит на позику і включає в себе всі запити:" + +#: ../../src/appx/libms/spec.rst:516 +msgid "**Book Title**: Title of the requested book." +msgstr "**Назва книги**: Назва запитуваної книги." + +#: ../../src/appx/libms/spec.rst:517 +msgid "**User**: Identifier of the user who initiated the request." +msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." + +#: ../../src/appx/libms/spec.rst:518 +msgid "**Request Date**: Date of the request's inception." +msgstr "**Дата запиту**: Дата створення запиту." + +#: ../../src/appx/libms/spec.rst:519 +msgid "" +"**Due Date**: - Input field for librarians to set upon approval for new " +"requests. - For approved ones, display the librarian-set date." +msgstr "" +"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " +"нових запитів. - Для затверджених запитів відображатиметься дата, " +"встановлена бібліотекарем." + +#: ../../src/appx/libms/spec.rst:522 +msgid "" +"**Status**: Present state of the request (New, Approved, Completed, " +"Declined)." +msgstr "" +"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " +"Відхилений)." + +#: ../../src/appx/libms/spec.rst:524 +msgid "" +"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " +"and freezes the due date." +msgstr "" +"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " +"статус на \"Затверджено\" і заморожує дату виконання." + +#: ../../src/appx/libms/spec.rst:526 +msgid "" +"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " +"and can prompt for a decline reason." +msgstr "" +"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " +"\"Відхилено\" і може запитувати причину відхилення." + +#: ../../src/appx/libms/spec.rst:528 +msgid "" +"**Complete Button**: Displayed for approved requests. Marks the request as " +"completed." +msgstr "" +"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " +"запит як завершений." + +#: ../../src/appx/libms/spec.rst:532 +msgid "View Logic" +msgstr "View Logic" + +#: ../../src/appx/libms/spec.rst:533 +msgid "" +"**Approve Borrow Request**: - Validate book availability. - Modify book " +"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " +"Define the return due date as per librarian. - Inform the user about the " +"approval and due date." +msgstr "" +"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " +"статус книги на \"Позичена\". - Переключіть запит на позику на " +"\"Затверджено\". - Визначте дату повернення відповідно до побажань " +"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." + +#: ../../src/appx/libms/spec.rst:540 +msgid "" +"**Decline Borrow Request**: - Change borrow request status to " +"\"Declined\". - Optionally, procure decline reason from librarian. - " +"Notify user regarding the declination." +msgstr "" +"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " +"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " +"користувача про відхилення." + +#: ../../src/appx/libms/spec.rst:545 +msgid "" +"**Complete Borrow Request**: - Ensure book's return. - Update book " +"status to \"Available\". - Toggle borrow request status to \"Completed\". " +"- If needed, record any notes or damages during return." +msgstr "" +"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " +"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " +"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " +"під час повернення." + +#: ../../src/appx/libms/spec.rst:552 +msgid "" +"Implementing reminders for near-due borrow requests can function as an alert " +"system for both the librarian and the user." +msgstr "" +"Впровадження нагадувань про прострочені запити може функціонувати як система " +"оповіщення як для бібліотекаря, так і для користувача." diff --git a/src/_locales/uk/LC_MESSAGES/appx/precedence.po b/src/_locales/uk/LC_MESSAGES/appx/precedence.po new file mode 100644 index 000000000..e94075d6c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/precedence.po @@ -0,0 +1,231 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/precedence.txt:-1 +msgid "Operator precedence in Python" +msgstr "Пріоритет операторів в Python" + +#: ../../src/appx/precedence.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/precedence.txt:-1 +msgid "python, basics, operator, precedence" +msgstr "python, basics, operator, precedence" + +#: ../../src/appx/precedence.txt:8 +msgid "Operator Precedence" +msgstr "Пріоритет Операторів" + +#: ../../src/appx/precedence.txt:10 +msgid "" +"The following table summarizes the operator precedence in Python, from " +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." +msgstr "" +"У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " +"найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." + +#: ../../src/appx/precedence.txt:16 +msgid "Operator" +msgstr "Оператор" + +#: ../../src/appx/precedence.txt:16 +msgid "Description" +msgstr "Опис" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" +msgstr "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" +msgstr "" +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" + +#: ../../src/appx/precedence.txt:23 +msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" +msgstr "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" + +#: ../../src/appx/precedence.txt:23 +msgid "Subscription, slicing, call, attribute reference" +msgstr "Підписка, нарізка, виклик, посилання на атрибути" + +#: ../../src/appx/precedence.txt:28 +msgid "``await x``" +msgstr "``await x``" + +#: ../../src/appx/precedence.txt:28 +msgid "Await expression" +msgstr "Вираз Await" + +#: ../../src/appx/precedence.txt:30 +msgid "``**``" +msgstr "``**``" + +#: ../../src/appx/precedence.txt:30 +msgid "Exponentiation [#]_" +msgstr "Піднесення до степеня [#]_" + +#: ../../src/appx/precedence.txt:32 +msgid "``+x``, ``-x``, ``~x``" +msgstr "``+x``, ``-x``, ``~x``" + +#: ../../src/appx/precedence.txt:32 +msgid "Positive, negative, bitwise NOT" +msgstr "Позитивне, негативне, побітове НІ" + +#: ../../src/appx/precedence.txt:34 +msgid "``*``, ``@``, ``/``, ``//``, ``%``" +msgstr "``*``, ``@``, ``/``, ``//``, ``%``" + +#: ../../src/appx/precedence.txt:34 +msgid "" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" +msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" + +#: ../../src/appx/precedence.txt:37 +msgid "``+``, ``-``" +msgstr "``+``, ``-``" + +#: ../../src/appx/precedence.txt:37 +msgid "Addition and subtraction" +msgstr "Додавання і віднімання" + +#: ../../src/appx/precedence.txt:39 +msgid "``<<``, ``>>``" +msgstr "``<<``, ``>>``" + +#: ../../src/appx/precedence.txt:39 +msgid "Shifts" +msgstr "Зсуви" + +#: ../../src/appx/precedence.txt:41 +msgid "``&``" +msgstr "``&``" + +#: ../../src/appx/precedence.txt:41 +msgid "Bitwise AND" +msgstr "Побітове І" + +#: ../../src/appx/precedence.txt:43 +msgid "``^``" +msgstr "``^``" + +#: ../../src/appx/precedence.txt:43 +msgid "Bitwise XOR" +msgstr "Побітове XOR" + +#: ../../src/appx/precedence.txt:45 +msgid "``|``" +msgstr "``|``" + +#: ../../src/appx/precedence.txt:45 +msgid "Bitwise OR" +msgstr "Порозрядне АБО" + +#: ../../src/appx/precedence.txt:47 +msgid "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" +msgstr "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" + +#: ../../src/appx/precedence.txt:47 +msgid "Comparisons, including membership tests and identity tests" +msgstr "Порівняння, включаючи тести на приналежність і тести на ідентифікацію" + +#: ../../src/appx/precedence.txt:52 +msgid "``not x``" +msgstr "``not x``" + +#: ../../src/appx/precedence.txt:52 +msgid "Boolean NOT" +msgstr "Логічне НІ" + +#: ../../src/appx/precedence.txt:54 +msgid "``and``" +msgstr "``and``" + +#: ../../src/appx/precedence.txt:54 +msgid "Boolean AND" +msgstr "Логічне І" + +#: ../../src/appx/precedence.txt:56 +msgid "``or``" +msgstr "``or``" + +#: ../../src/appx/precedence.txt:56 +msgid "Boolean OR" +msgstr "Логічне АБО" + +#: ../../src/appx/precedence.txt:58 +msgid "``if - else``" +msgstr "``if - else``" + +#: ../../src/appx/precedence.txt:58 +msgid "Conditional expression (ternary ``if``)" +msgstr "Умовний вираз (трійковий ``if``)" + +#: ../../src/appx/precedence.txt:60 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/appx/precedence.txt:60 +msgid "Lambda expression" +msgstr "Lambda вирази" + +#: ../../src/appx/precedence.txt:62 +msgid "``=``, ``:=``" +msgstr "``=``, ``:=``" + +#: ../../src/appx/precedence.txt:62 +msgid "Assignment expression" +msgstr "Оперетор присвоєння" + +#: ../../src/appx/precedence.txt:65 +msgid "" +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." +msgstr "" +"оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " +"унарний оператор праворуч (``2 ** -1`` це ``0,5``)." + +#: ../../src/appx/precedence.txt:67 +msgid "" +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." +msgstr "" +"оператор ``%`` також використовується для форматування рядків; " +"застосовується той самий пріоритет." diff --git a/src/_locales/uk/LC_MESSAGES/appx/printf.po b/src/_locales/uk/LC_MESSAGES/appx/printf.po new file mode 100644 index 000000000..5476a9142 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/printf.po @@ -0,0 +1,244 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/printf.txt:-1 +msgid "Formatted strings usage in Python" +msgstr "Використання форматованих рядків в Python" + +#: ../../src/appx/printf.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/printf.txt:-1 +msgid "python, string, formatting" +msgstr "python, string, formatting" + +#: ../../src/appx/printf.txt:10 +msgid "``printf-style`` String Formatting" +msgstr "``printf-style`` Форматування рядків" + +#: ../../src/appx/printf.txt:12 +msgid "" +"String objects have one unique built-in operation: the ``%`` operator " +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." + +#: ../../src/appx/printf.txt:19 +msgid "The conversion flag characters are:" +msgstr "Символи перетворення:" + +#: ../../src/appx/printf.txt:22 +msgid "Flag" +msgstr "Символ" + +#: ../../src/appx/printf.txt:22 ../../src/appx/printf.txt:40 +msgid "Meaning" +msgstr "Значення" + +#: ../../src/appx/printf.txt:24 +msgid "``#``" +msgstr "``#``" + +#: ../../src/appx/printf.txt:24 +msgid "The value conversion will use the \"alternative form\"" +msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" + +#: ../../src/appx/printf.txt:26 +msgid "``0``" +msgstr "``0``" + +#: ../../src/appx/printf.txt:26 +msgid "The conversion will be zero padded for numeric values" +msgstr "Перетворення буде доповнено нулем для числових значень" + +#: ../../src/appx/printf.txt:28 +msgid "``'-'``" +msgstr "``'-'``" + +#: ../../src/appx/printf.txt:28 +msgid "" +"The converted value is left adjusted (override the ``'0'`` if both are given)" +msgstr "" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" + +#: ../../src/appx/printf.txt:31 +msgid "``' '``" +msgstr "``' '``" + +#: ../../src/appx/printf.txt:31 +msgid "(a space) A blank should be left before a positive number" +msgstr "(пробіл) Перед додатним числом слід залишити пробіл" + +#: ../../src/appx/printf.txt:33 +msgid "``'+'``" +msgstr "``'+'``" + +#: ../../src/appx/printf.txt:33 +msgid "" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" +msgstr "" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" + +#: ../../src/appx/printf.txt:37 +msgid "The conversion types are:" +msgstr "Типи перетворення:" + +#: ../../src/appx/printf.txt:40 +msgid "Conversion" +msgstr "Перетворення" + +#: ../../src/appx/printf.txt:42 +msgid "``'d'``" +msgstr "``'d'``" + +#: ../../src/appx/printf.txt:42 ../../src/appx/printf.txt:44 +msgid "Signed integer decimal" +msgstr "Ціле десяткове число зі знаком" + +#: ../../src/appx/printf.txt:44 +msgid "``'i'``" +msgstr "``'i'``" + +#: ../../src/appx/printf.txt:46 +msgid "``'o'``" +msgstr "``'o'``" + +#: ../../src/appx/printf.txt:46 +msgid "Signed octal value" +msgstr "Вісімкове значення зі знаком" + +#: ../../src/appx/printf.txt:48 +msgid "``'u'``" +msgstr "``'u'``" + +#: ../../src/appx/printf.txt:48 +msgid "Obsolete type - it is identical to ``'d'``" +msgstr "Застарілий тип - ідентичний ``'d``" + +#: ../../src/appx/printf.txt:50 +msgid "``'x'``" +msgstr "``'x'``" + +#: ../../src/appx/printf.txt:50 +msgid "Signed hexadecimal (lowercase)" +msgstr "Шістнадцяткове число зі знаком (маленький регістр)" + +#: ../../src/appx/printf.txt:52 +msgid "``'X'``" +msgstr "``'X'``" + +#: ../../src/appx/printf.txt:52 +msgid "Signed hexadecimal (uppercase)" +msgstr "Шістнадцяткове число зі знаком (верхній регістр)" + +#: ../../src/appx/printf.txt:54 +msgid "``'e'``" +msgstr "``'e'``" + +#: ../../src/appx/printf.txt:54 +msgid "Floating point exponential format (lowercase)" +msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" + +#: ../../src/appx/printf.txt:56 +msgid "``'E'``" +msgstr "``'E'``" + +#: ../../src/appx/printf.txt:56 +msgid "Floating point exponential format (uppercase)" +msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" + +#: ../../src/appx/printf.txt:58 +msgid "``'f'`` ``'F'``" +msgstr "``'f'`` ``'F'``" + +#: ../../src/appx/printf.txt:58 +msgid "Floating point decimal format" +msgstr "Десятковий формат із плаваючою комою" + +#: ../../src/appx/printf.txt:61 +msgid "``'g'``" +msgstr "``'g'``" + +#: ../../src/appx/printf.txt:64 +msgid "``'G'``" +msgstr "``'G'``" + +#: ../../src/appx/printf.txt:61 +msgid "" +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." +msgstr "" +"Формат з плаваючою комою. Використовує нижній регістр експоненціального " +"формату, якщо показник степеня менший за -4 або не менший за точність, " +"десятковий формат інакше." + +#: ../../src/appx/printf.txt:66 +msgid "``'c'``" +msgstr "``'c'``" + +#: ../../src/appx/printf.txt:66 +msgid "Single character (accepts integer or single character string)" +msgstr "Один символ (приймає ціле число або рядок з одним символом)" + +#: ../../src/appx/printf.txt:68 +msgid "``'r'``" +msgstr "``'r'``" + +#: ../../src/appx/printf.txt:68 +msgid "Converts any Python object using ``repr()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``repr()``" + +#: ../../src/appx/printf.txt:70 +msgid "``'s'``" +msgstr "``'s'``" + +#: ../../src/appx/printf.txt:70 +msgid "Converts any Python object using ``str()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``str()``" + +#: ../../src/appx/printf.txt:72 +msgid "``'a'``" +msgstr "``'a'``" + +#: ../../src/appx/printf.txt:72 +msgid "Converts any Python object using ``ascii()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``ascii()``" + +#: ../../src/appx/printf.txt:74 +msgid "``'%'``" +msgstr "``'%'``" + +#: ../../src/appx/printf.txt:74 +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." +msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." diff --git a/src/_locales/uk/LC_MESSAGES/appx/software_list.po b/src/_locales/uk/LC_MESSAGES/appx/software_list.po new file mode 100644 index 000000000..e4a941241 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/software_list.po @@ -0,0 +1,275 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/software_list.rst:-1 +msgid "Useful software list" +msgstr "Список корисного програмного забезпечення" + +#: ../../src/appx/software_list.rst:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/appx/software_list.rst:-1 +msgid "software" +msgstr "software" + +#: ../../src/appx/software_list.rst:7 +msgid "Software List" +msgstr "Список Програмного Забезпечення" + +#: ../../src/appx/software_list.rst:10 +msgid "7zip" +msgstr "7zip" + +#: ../../src/appx/software_list.rst:12 +msgid "**7-Zip** is **free software** with **open source**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." + +#: ../../src/appx/software_list.rst:14 +msgid "" +"High compression ratio in `7z format `__ with " +"**LZMA** and **LZMA2** compression" +msgstr "" +"Високий ступінь стиснення у `7z format `__ зі " +"стисненням **LZMA** і **LZMA2**" + +#: ../../src/appx/software_list.rst:16 +msgid "Supported formats:" +msgstr "Підтримувані формати:" + +#: ../../src/appx/software_list.rst:18 +msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" +msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" + +#: ../../src/appx/software_list.rst:19 +msgid "" +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +msgstr "" +"Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." + +#: ../../src/appx/software_list.rst:23 +msgid "Self-extracting capability for 7z format" +msgstr "Можливість саморозпакування для формату 7z" + +#: ../../src/appx/software_list.rst:24 +msgid "Integration with Windows Shell" +msgstr "Інтеграція з Windows Shell" + +#: ../../src/appx/software_list.rst:26 +msgid "https://7-zip.org/" +msgstr "https://7-zip.org/" + +#: ../../src/appx/software_list.rst:29 +msgid "cygwin" +msgstr "cygwin" + +#: ../../src/appx/software_list.rst:31 +msgid "" +"It is a large collection of GNU and Open Source tools which provide " +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." +msgstr "" +"Це велика колекція інструментів GNU та Open Source, які забезпечують " +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." + +#: ../../src/appx/software_list.rst:37 +msgid "**Cygwin is not**:" +msgstr "**Сygwin це не**:" + +#: ../../src/appx/software_list.rst:39 +msgid "" +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." +msgstr "" +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." + +#: ../../src/appx/software_list.rst:41 +msgid "" +"a way to magically make native Windows apps aware of UNIX® functionality " +"like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." +msgstr "" +"спосіб чарівним чином зробити рідні програми Windows відомими " +"функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " +"потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " +"перевагами функціональності Cygwin." + +#: ../../src/appx/software_list.rst:46 +msgid "https://www.cygwin.com/" +msgstr "https://www.cygwin.com/" + +#: ../../src/appx/software_list.rst:49 +msgid "git [#cygwin]_" +msgstr "git [#cygwin]_" + +#: ../../src/appx/software_list.rst:51 +msgid "" +"Git is a `free and open source `__ distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." +msgstr "" +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." + +#: ../../src/appx/software_list.rst:56 +msgid "https://git-scm.com/" +msgstr "https://git-scm.com/" + +#: ../../src/appx/software_list.rst:59 +msgid "Docker" +msgstr "Docker" + +#: ../../src/appx/software_list.rst:61 +msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." +msgstr "" +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." + +#: ../../src/appx/software_list.rst:63 +msgid "" +"Docker helps developers bring their ideas to life by conquering the " +"complexity of app development. We simplify and accelerate development " +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." + +#: ../../src/appx/software_list.rst:70 +msgid "https://www.docker.com/" +msgstr "https://www.docker.com/" + +#: ../../src/appx/software_list.rst:73 +msgid "PostgreSQL [#cygwin]_" +msgstr "PostgreSQL [#cygwin]_" + +#: ../../src/appx/software_list.rst:75 +msgid "" +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." +msgstr "" +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." + +#: ../../src/appx/software_list.rst:79 +msgid "https://www.postgresql.org/" +msgstr "https://www.postgresql.org/" + +#: ../../src/appx/software_list.rst:84 +msgid "psql [#cygwin]_" +msgstr "psql [#cygwin]_" + +#: ../../src/appx/software_list.rst:86 +msgid "" +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." +msgstr "" +"Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." + +#: ../../src/appx/software_list.rst:93 +msgid "" +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for ``postgresql-client`` package." +msgstr "" +"У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " +"знайдіть пакет ``postgresql-client``." + +#: ../../src/appx/software_list.rst:96 +msgid "https://www.postgresql.org/docs/current/app-psql.html" +msgstr "https://www.postgresql.org/docs/current/app-psql.html" + +#: ../../src/appx/software_list.rst:99 +msgid "pgAdmin" +msgstr "pgAdmin" + +#: ../../src/appx/software_list.rst:101 +msgid "" +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." +msgstr "" +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." + +#: ../../src/appx/software_list.rst:105 +msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." +msgstr "" +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." + +#: ../../src/appx/software_list.rst:107 +msgid "https://pgadmin.org/" +msgstr "https://pgadmin.org/" + +#: ../../src/appx/software_list.rst:110 +msgid "SQLite [#cygwin]_" +msgstr "SQLite [#cygwin]_" + +#: ../../src/appx/software_list.rst:112 +msgid "" +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." +msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." + +#: ../../src/appx/software_list.rst:120 +msgid "https://sqlite.org/" +msgstr "https://sqlite.org/" + +#: ../../src/appx/software_list.rst:123 +msgid "available for installation as a cygwin package" +msgstr "доступно для встановлення як пакет cygwin" diff --git a/src/_locales/uk/LC_MESSAGES/appx/wtk.po b/src/_locales/uk/LC_MESSAGES/appx/wtk.po new file mode 100644 index 000000000..036e269b7 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/wtk.po @@ -0,0 +1,575 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:01+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/wtk.txt:-1 +msgid "Knights, thieves and wizards game project" +msgstr "Проект гри рицарі, злодії та чарівники" + +#: ../../src/appx/wtk.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/wtk.txt:-1 +msgid "python, game, oop, object-oriented programming" +msgstr "python, game, oop, object-oriented programming" + +#: ../../problem-sets/src/wtk/challenge.rst:3 +msgid "Wizards, Thieves and Knights" +msgstr "Чарівники, Злодії та Рицарі" + +#: ../../problem-sets/src/wtk/challenge.rst:5 +msgid "" +"\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " +"player's goal is to gain as many score points, as it possible." +msgstr "" +"Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." + +#: ../../problem-sets/src/wtk/challenge.rst:13 +msgid "Code organization" +msgstr "Організація коду" + +#: ../../problem-sets/src/wtk/challenge.rst:15 +msgid "Use separate modules to maintain your code base. For example:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" + +#: ../../problem-sets/src/wtk/challenge.rst:27 +msgid "General playground description" +msgstr "Загальний опис ігрового процесу" + +#: ../../problem-sets/src/wtk/challenge.rst:29 +msgid "" +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." +msgstr "" +"Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " +"захисту. Раунди повторюються, поки гравець не буде переможений." + +#: ../../problem-sets/src/wtk/challenge.rst:33 +msgid "Fight rules" +msgstr "Правила боротьби" + +#: ../../problem-sets/src/wtk/challenge.rst:35 +msgid "It's simple..." +msgstr "Це просто..." + +#: ../../problem-sets/src/wtk/challenge.rst:37 +msgid "**Wizard** beats **Knight**" +msgstr "**Чарівник** перемагає **Рицаря**" + +#: ../../problem-sets/src/wtk/challenge.rst:38 +msgid "**Thief** beats **Wizard**" +msgstr "**Злодій** перемагає **Чарівника**" + +#: ../../problem-sets/src/wtk/challenge.rst:39 +msgid "**Knight** beats **Thief**" +msgstr "**Рицар** перемагає **Злодія**" + +#: ../../problem-sets/src/wtk/challenge.rst:42 +msgid "Attack stage" +msgstr "Стадія атаки" + +#: ../../problem-sets/src/wtk/challenge.rst:44 +msgid "" +"Player selects the choice to attack from **wizard**, **thief** or " +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " +"обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" + +#: ../../problem-sets/src/wtk/challenge.rst:48 +msgid "enemy health is decreased" +msgstr "здоров'я ворога зменшено" + +#: ../../problem-sets/src/wtk/challenge.rst:49 +msgid "player gains score points" +msgstr "гравець отримує очки" + +#: ../../problem-sets/src/wtk/challenge.rst:51 +msgid "In case enemy is defeated:" +msgstr "Якщо ворог переможений:" + +#: ../../problem-sets/src/wtk/challenge.rst:53 +msgid "a new enemy instance is initialized using higher level" +msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" + +#: ../../problem-sets/src/wtk/challenge.rst:54 +msgid "player gains some extra score points" +msgstr "гравець отримує додаткові очки" + +#: ../../problem-sets/src/wtk/challenge.rst:55 +msgid "next defence stage is skipped, and player attacks again" +msgstr "наступний етап захисту пропущено, і гравець атакує знову" + +#: ../../problem-sets/src/wtk/challenge.rst:58 +msgid "Defence stage" +msgstr "Стадія захисту" + +#: ../../problem-sets/src/wtk/challenge.rst:60 +msgid "" +"Player selects the choice to defend from **wizard**, **thief** or " +"**knight**, enemy selects the choice to attack from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" + +#: ../../problem-sets/src/wtk/challenge.rst:64 +msgid "player health is decreased" +msgstr "здоров'я гравця знижено" + +#: ../../problem-sets/src/wtk/challenge.rst:66 +msgid "If player is defeated:" +msgstr "Якщо гравець переможений:" + +#: ../../problem-sets/src/wtk/challenge.rst:68 +msgid "report the message about gained score points to the terminal" +msgstr "повідомляти повідомлення про набрані бали на термінал" + +#: ../../problem-sets/src/wtk/challenge.rst:69 +msgid "write down player's name and score points to \"scores.txt\" file" +msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" + +#: ../../problem-sets/src/wtk/challenge.rst:73 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../problem-sets/src/wtk/challenge.rst:76 +msgid "Enemy down" +msgstr "Ворога переможено" + +#: ../../problem-sets/src/wtk/challenge.rst:78 +msgid "" +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." +msgstr "" +"Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." + +#: of wtk.exceptions.EnemyDown:1 +msgid "Raised when an enemy is defeated" +msgstr "Виникає, коли ворог переможений" + +#: ../../problem-sets/src/wtk/challenge.rst:85 +msgid "Game over" +msgstr "Гра завершена" + +#: ../../problem-sets/src/wtk/challenge.rst:87 +msgid "" +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." +msgstr "" +"Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." + +#: of wtk.exceptions.GameOver:1 +msgid "Raised when a player is defeated" +msgstr "Виникає, коли гравця переможено" + +#: ../../problem-sets/src/wtk/challenge.rst:95 +msgid "Models" +msgstr "Моделі" + +#: ../../problem-sets/src/wtk/challenge.rst:98 +msgid "Enemy" +msgstr "Ворог" + +#: of wtk.models.Enemy:1 +msgid "Enemy model" +msgstr "Модель супротивника" + +#: of wtk.models.Enemy wtk.models.Player +msgid "Variables" +msgstr "Змінні" + +#: of wtk.models.Enemy:3 +msgid "enemy's level value" +msgstr "значення рівня противника" + +#: of wtk.models.Enemy:5 +msgid "enemy's instance health points" +msgstr "очки здоров'я ворога" + +#: of wtk.models.Enemy:8 +msgid "Represents the playing enemy-bot." +msgstr "Представляє граючого ворога-бота." + +#: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 +msgid "Initialize instance" +msgstr "Ініціалізувати екземпляр" + +#: of wtk.models.Enemy.__init__ wtk.models.Player.__init__ +msgid "Parameters" +msgstr "Параметри" + +#: of wtk.models.Enemy.__init__:3 +msgid "an enemy's level indicator" +msgstr "індикатор рівня противника" + +#: of wtk.models.Enemy.__init__:6 +msgid "Health value is equal to the level value." +msgstr "Значення здоров'я дорівнює значенню рівня." + +#: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 +msgid "Decrease health points" +msgstr "Зменшує очоки здоров'я" + +#: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health +msgid "raise" +msgstr "raise" + +#: of wtk.models.Enemy.decrease_health:3 +msgid "EnemyDown" +msgstr "EnemyDown" + +#: of wtk.models.Enemy.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." + +#: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 +msgid "Return a random fight choice" +msgstr "Повертає випадковий варіант для бою" + +#: of wtk.engine.get_player_name wtk.models.Enemy.select_attack +#: wtk.models.Enemy.select_defence wtk.models.Player.select_attack +#: wtk.models.Player.select_defence +msgid "Returns" +msgstr "Повертає" + +#: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 +#: wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 +msgid "a fight choice" +msgstr "варіант для бою" + +#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 +msgid "Choices made by an enemy are random." +msgstr "Вибори, зроблені супротивником, випадкові." + +#: ../../problem-sets/src/wtk/challenge.rst:104 +msgid "You are free to implement other methods you like, if needed." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." + +#: ../../problem-sets/src/wtk/challenge.rst:107 +msgid "Player" +msgstr "Гравець" + +#: of wtk.models.Player:1 +msgid "Player model" +msgstr "Модель гравця" + +#: of wtk.models.Player:3 +msgid "player's name" +msgstr "ім'я гравця" + +#: of wtk.models.Player:5 +msgid "player's instance health points" +msgstr "очки здоров'я гравця" + +#: of wtk.models.Player:7 +msgid "player's instance gained score points" +msgstr "очки, зароблені гравцем" + +#: of wtk.models.Player:10 +msgid "This model is controlled by the player." +msgstr "Ця модель керується гравцем." + +#: of wtk.models.Player.__init__:3 +msgid "a player's name" +msgstr "ім'я гравця" + +#: of wtk.models.Player.__init__:6 +msgid "" +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." +msgstr "" +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров'я." + +#: of wtk.models.Player.attack:1 +msgid "Attack an enemy" +msgstr "Атакує ворога" + +#: of wtk.models.Player.attack:3 +msgid "" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" +msgstr "" +"Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" + +#: of wtk.models.Player.attack:10 +msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" +msgstr "\"YOUR ATTACK IS SUCCESSFUL!\"" + +#: of wtk.models.Player.attack:11 +msgid "\"YOUR ATTACK IS FAILED!\"" +msgstr "\"YOUR ATTACK IS FAILED!\"" + +#: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 +msgid "\"IT'S A DRAW!\"" +msgstr "\"IT'S A DRAW!\"" + +#: of wtk.models.Player.decrease_health:3 +msgid "GameOver" +msgstr "GameOver" + +#: of wtk.models.Player.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." + +#: of wtk.models.Player.defence:1 +msgid "Defend from an enemy's attack" +msgstr "Захист від атаки супротивника" + +#: of wtk.models.Player.defence:3 +msgid "" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" +msgstr "" +"Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" + +#: of wtk.models.Player.defence:10 +msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" +msgstr "\"YOUR DEFENCE IS SUCCESSFUL!\"" + +#: of wtk.models.Player.defence:11 +msgid "\"YOUR DEFENCE IS FAILED!\"" +msgstr "\"YOUR DEFENCE IS FAILED!\"" + +#: of wtk.models.Player.fight:1 +msgid "Fight result calculation interface" +msgstr "Інтерфейс для вирахування результатів двобою" + +#: of wtk.models.Player.fight:3 +msgid "The method calculates the fight result based on the game rules:" +msgstr "Метод розраховує результат бою за правилами гри:" + +#: of wtk.models.Player.fight:5 +msgid "**wizard** beats **knight**" +msgstr "**чарівник** перемагає **рицаря**" + +#: of wtk.models.Player.fight:6 +msgid "**thief** beats **wizard**" +msgstr "**злодій** перемагає **чарівника**" + +#: of wtk.models.Player.fight:7 +msgid "**knight** beats **thief**" +msgstr "**рицар** перемагає **злодія**" + +#: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 +msgid "Return fight choice from the user's prompt" +msgstr "Повертає варіант для поєдинку з вводу користувача" + +#: of wtk.models.Player.select_attack:5 wtk.models.Player.select_defence:5 +msgid "" +"The player is asked to make their decision for the upcoming fight. The " +"chosen value is validated and if it is invalid the question is repeated." +msgstr "" +"Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " +"перевіряється, і якщо воно недійсне, запитання повторюється." + +#: ../../problem-sets/src/wtk/challenge.rst:116 +msgid "Settings" +msgstr "Налаштування" + +#: ../../problem-sets/src/wtk/challenge.rst:118 +msgid "Settings module contains constants values for the game." +msgstr "Модуль налаштувань містить значення констант для гри." + +#: ../../problem-sets/src/wtk/challenge.rst:120 +msgid "For example," +msgstr "Наприклад," + +#: ../../docstring of wtk.settings.INITIAL_PLAYER_HEALTH:1 +msgid "Initial player health value" +msgstr "Початкове значення здоров'я гравця" + +#: ../../docstring of wtk.settings.INITIAL_ENEMY_LEVEL:1 +msgid "Initial enemy level value" +msgstr "Початкове значення рівня ворога" + +#: ../../docstring of wtk.settings.SCORE_SUCCESS_ATTACK:1 +msgid "Score points value to assign when player's attack is successful" +msgstr "Вартість очок, які призначаються, коли атака гравця успішна" + +#: ../../docstring of wtk.settings.SCORE_ENEMY_DOWN:1 +msgid "Score points value to assign when enemy is defeated" +msgstr "Вартість очок, які призначаються, коли ворог переможений" + +#: ../../problem-sets/src/wtk/challenge.rst:131 +msgid "You may also define messages with this module, for example:" +msgstr "" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" + +#: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 +msgid "Successful attack message" +msgstr "Повідомлення про успішну атаку" + +#: ../../docstring of wtk.settings.MSG_SUCCESS_DEFENCE:1 +msgid "Successful defence message" +msgstr "Повідомлення про успішний захист" + +#: ../../docstring of wtk.settings.MSG_FAILURE_ATTACK:1 +msgid "Failed attack message" +msgstr "Повідомлення про невдалу атаку" + +#: ../../docstring of wtk.settings.MSG_FAILURE_DEFENCE:1 +msgid "Failed defence message" +msgstr "Повідомлення про невдалий захист" + +#: ../../docstring of wtk.settings.MSG_DRAW:1 +msgid "Draw fight message" +msgstr "Повідомлення про нічию" + +#: ../../problem-sets/src/wtk/challenge.rst:141 +msgid "Engine" +msgstr "Ігровий рушій" + +#: ../../problem-sets/src/wtk/challenge.rst:143 +msgid "Engine module should provide two functions:" +msgstr "Модуль двигуна має забезпечувати дві функції:" + +#: ../../problem-sets/src/wtk/challenge.rst:145 +msgid "``get_player_name``" +msgstr "``get_player_name``" + +#: ../../problem-sets/src/wtk/challenge.rst:146 +msgid "``play``" +msgstr "``play``" + +#: ../../problem-sets/src/wtk/challenge.rst:149 +msgid "Player name getter" +msgstr "Отримання імені гравця" + +#: ../../problem-sets/src/wtk/challenge.rst:151 +msgid "" +"Asks the user to type in his or her name and return it back. Leading and " +"trailing whitespaces are to be trimmed. Name should contain at least one " +"character." +msgstr "" +"Просить користувача ввести своє ім'я та повернути його назад. Пробіли на " +"початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " +"символ." + +#: of wtk.engine.get_player_name:1 +msgid "Return a player's name from the user prompt" +msgstr "Повертає ім'я гравця з вводу користувача" + +#: of wtk.engine.get_player_name:3 +msgid "a player defined name" +msgstr "ім'я визначене гравцем" + +#: of wtk.engine.get_player_name:5 +msgid "" +"A validation process is performed as well. The player name cannot be an " +"empty string." +msgstr "" +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." + +#: ../../problem-sets/src/wtk/challenge.rst:158 +msgid "Play" +msgstr "Гра" + +#: ../../problem-sets/src/wtk/challenge.rst:160 +msgid "" +"This function initializes player and enemy instance. It processes game " +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." +msgstr "" +"Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." + +#: of wtk.engine.play:1 +msgid "Run the game" +msgstr "Запускає гру" + +#: of wtk.engine.play:3 +msgid "" +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." +msgstr "" +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." + +#: ../../problem-sets/src/wtk/challenge.rst:173 +msgid "Optional Enhancements" +msgstr "Додаткові Вдосконалення" + +#: ../../problem-sets/src/wtk/challenge.rst:175 +msgid "Add scores processor to show top-10 scores from a record table." +msgstr "" +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." + +#: ../../problem-sets/src/wtk/challenge.rst:176 +msgid "Create game menu, for example: ::" +msgstr "Створити меню гри, наприклад: ::" + +#: ../../problem-sets/src/wtk/challenge.rst:182 +msgid "Store score table to the database instead of using text file." +msgstr "" +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po deleted file mode 100644 index 2e60e5981..000000000 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ /dev/null @@ -1,2816 +0,0 @@ -# PYTHON BASICS BLOCK TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# OLEKSANDR YEROMIN , 2023. -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 06:44+0300\n" -"PO-Revision-Date: 2023-04-21 06:46+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/basics/bool_logic.txt:-1 -msgid "this document covers usage of logic and comparison operators in Python" -msgstr "" -"цей документ охоплює використання логіки та операторів порівняння в Python" - -#: ../../src/basics/bool_logic.txt:-1 ../../src/basics/controlflow.txt:-1 -#: ../../src/basics/decorators.txt:-1 ../../src/basics/exceptions.txt:-1 -#: ../../src/basics/functions.txt:-1 ../../src/basics/index.txt:-1 -#: ../../src/basics/modules.txt:-1 ../../src/basics/pep8.txt:-1 -#: ../../src/basics/stdtypes.txt:-1 ../../src/basics/syntax.txt:-1 -#: ../../src/basics/testing.txt:-1 ../../src/basics/variables.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/basics/bool_logic.txt:-1 -msgid "python, boolean, logic, comparison, operator" -msgstr "python, boolean, logic, comparison, operator" - -#: ../../src/basics/bool_logic.txt:14 -msgid "Boolean Logic" -msgstr "Булева Логіка" - -#: ../../src/basics/bool_logic.txt:20 -msgid "" -"`George Boole`_ put together what is now known as `Boolean algebra`_, which " -"relies on **true** and **false** values and define a set of boolean " -"operations: **not**, **and**, and **or**." -msgstr "" -"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " -"спирається на значення **true** і **false** і визначає набір логічних " -"операцій: **not**, **and** і **or**." - -#: ../../src/basics/bool_logic.txt:24 -msgid "" -"These Boolean values and operators are helpful in programming because they " -"help you decide the course of action in your programs." -msgstr "" -"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " -"допомагають визначити курс дій у ваших програмах." - -#: ../../src/basics/bool_logic.txt:27 -msgid "" -"The **Python boolean** type is one of Python's built-in data types. It's " -"used to represent the truth value of an expression. For example, the " -"expression ``1 < 2`` is ``True``, while the expression ``0 == 1`` is " -"``False``. Understanding how Python Boolean values behave is important to " -"programming well in Python." -msgstr "" -"Тип **Python boolean** є одним із вбудованих типів даних Python. Він " -"використовується для представлення істиності значення виразу. Наприклад, " -"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " -"того, як поводяться логічні значення Python, є важливим для якісного " -"програмування на Python." - -#: ../../src/basics/bool_logic.txt:34 -msgid "Understanding Boolean" -msgstr "Розбираємось з Логічним типом даних" - -#: ../../src/basics/bool_logic.txt:36 -msgid "The Boolean type has only two possible values:" -msgstr "Логічний тип має лише два можливих значення:" - -#: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:121 -#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:149 -#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 -#: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:195 -#: ../../src/basics/bool_logic.txt:197 -msgid "``True``" -msgstr "``True``" - -#: ../../src/basics/bool_logic.txt:39 ../../src/basics/bool_logic.txt:121 -#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:151 -#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 -#: ../../src/basics/bool_logic.txt:193 ../../src/basics/bool_logic.txt:195 -#: ../../src/basics/bool_logic.txt:197 -msgid "``False``" -msgstr "``False``" - -#: ../../src/basics/bool_logic.txt:41 -msgid "No other value will have ``bool`` as it type." -msgstr "Жодне інше значення не матиме тип ``bool``." - -#: ../../src/basics/bool_logic.txt:50 -msgid "" -"The type ``bool`` is **built-in**, meaning it's always available in Python. " -"``True`` and ``False`` are keywords in Python and can't be used as variable " -"names. but ``bool`` type isn't and it's possible assign to the name " -"``bool``, however this is considered bad style." -msgstr "" -"Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " -"і ``False`` є ключовими словами в Python і не можуть використовуватися як " -"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " -"значення, однак це вважається поганим стилем." - -#: ../../src/basics/bool_logic.txt:56 -msgid "Boolean as numbers" -msgstr "Boolean як число" - -#: ../../src/basics/bool_logic.txt:58 -msgid "" -"Booleans are a subtype of **numeric** type in Python. This means they're " -"numbers for all intents and purposes. In other words, you can apply " -"arithmetic operations to Boolean, and you can also compare them to numbers. " -"``True`` value is treated to be 1, and ``False`` value is treated to be 0." -msgstr "" -"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " -"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " -"арифметичні операції до логічних значень, а також порівнювати їх із числами. " -"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " -"0." - -#: ../../src/basics/bool_logic.txt:63 -msgid "There aren't many uses of the numerical nature of Boolean values." -msgstr "" -"Числовій природі логічних значень можна знайти не так багато застосунків." - -#: ../../src/basics/bool_logic.txt:66 -msgid "Truth value testing" -msgstr "Перевірка істинності" - -#: ../../src/basics/bool_logic.txt:68 -msgid "" -"Any object can be tested for truth value. By default an object considered " -"``True``, unless its class defines either. Here are most of built-in objects " -"considered ``False``:" -msgstr "" -"Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " -"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " -"вбудованих об'єктів, які вважаються ``False``:" - -#: ../../src/basics/bool_logic.txt:72 -msgid "constant values: ``None`` and ``False``" -msgstr "константи: ``None`` та ``False``" - -#: ../../src/basics/bool_logic.txt:73 -msgid "" -"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " -"``Fraction(0, 1)``" -msgstr "" -"нуль будь-якого числового типу: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " -"``Fraction(0, 1)``" - -#: ../../src/basics/bool_logic.txt:75 -msgid "" -"empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " -"``range(0)``." -msgstr "" -"порожні послідовності та колекції: ``''``, ``[]``, ``()``, ``{}``, " -"``set()``, ``range(0)``." - -#: ../../src/basics/bool_logic.txt:80 -msgid "" -"If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " -"as ``False``." -msgstr "" -"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " -"``bool`` як ``False``." - -#: ../../src/basics/bool_logic.txt:84 -msgid "Boolean comparison" -msgstr "Логічне Порівняння" - -#: ../../src/basics/bool_logic.txt:88 -msgid "Python provides 3 logical operators:" -msgstr "Python надає 3 логічних оператори:" - -#: ../../src/basics/bool_logic.txt:94 ../../src/basics/bool_logic.txt:228 -msgid "Operator" -msgstr "Оператор" - -#: ../../src/basics/bool_logic.txt:94 -msgid "Logic operator" -msgstr "Логічний оператор" - -#: ../../src/basics/bool_logic.txt:96 -msgid "``not``" -msgstr "``not``" - -#: ../../src/basics/bool_logic.txt:96 -msgid "Negation" -msgstr "Заперечення" - -#: ../../src/basics/bool_logic.txt:98 -msgid "``and``" -msgstr "``and``" - -#: ../../src/basics/bool_logic.txt:98 -msgid "Conjunction" -msgstr "Кон'юнкція" - -#: ../../src/basics/bool_logic.txt:100 -msgid "``or``" -msgstr "``or``" - -#: ../../src/basics/bool_logic.txt:100 -msgid "Disjunction" -msgstr "Диз'юнкція" - -#: ../../src/basics/bool_logic.txt:103 -msgid "" -"With these operators, you can build expressions by connecting Boolean " -"expressions with each other. These operators are **keywords** of the " -"language, so you cannot use them as identifiers without causing a " -"*SyntaxError*." -msgstr "" -"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " -"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " -"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." - -#: ../../src/basics/bool_logic.txt:108 -msgid "Getting started with ``not`` operator" -msgstr "Початок роботи з оператором ``not``" - -#: ../../src/basics/bool_logic.txt:110 -msgid "" -"The ``not`` operator is the Boolean or logic operator that implements " -"negation in Python. It's **unary**, which means that it takes only one " -"**operand**. The operand can be a Boolean expression or any Python object. " -"The task of ``not`` is to reverse the truth value of its operand." -msgstr "" -"Оператор ``not`` є логічним або логічним оператором, який реалізує " -"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " -"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " -"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " -"операнда." - -#: ../../src/basics/bool_logic.txt:115 -msgid "not operator truth table" -msgstr "таблиця істинності оператора not" - -#: ../../src/basics/bool_logic.txt:119 -msgid "``operand``" -msgstr "``operand``" - -#: ../../src/basics/bool_logic.txt:119 -msgid "``not operand``" -msgstr "``not operand``" - -#: ../../src/basics/bool_logic.txt:126 -msgid "This functionality makes it worthwhile in several situations:" -msgstr "Ця функція доцільна в кількох ситуаціях:" - -#: ../../src/basics/bool_logic.txt:129 -msgid "" -"Checking **unmet conditions** in the context of ``if`` statements and " -"``while`` loops" -msgstr "" -"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " -"``while``" - -#: ../../src/basics/bool_logic.txt:131 -msgid "**Inverting the truth value** of an object or expression" -msgstr "**Інвертування значення істинності** об'єкта чи виразу" - -#: ../../src/basics/bool_logic.txt:132 -msgid "Checking if a **value is not in a given container**" -msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" - -#: ../../src/basics/bool_logic.txt:133 -msgid "Checking for an **object's identity**" -msgstr "Перевірка **ідентичності об'єкта**" - -#: ../../src/basics/bool_logic.txt:136 -msgid "Getting started with ``and`` operator" -msgstr "Початок роботи з оператором ``and``" - -#: ../../src/basics/bool_logic.txt:138 -msgid "" -"Python's ``and`` operator is **binary**, which means it takes two " -"**operands**. The operands in an ``and`` expression are commonly known as " -"*conditions*. The result of the operator depends on the truth values of its " -"operands. It'll be ``True`` if **both** are true." -msgstr "" -"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " -"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " -"Результат оператора залежить від істинних значень його операндів. Це буде " -"``True``, якщо **обидва** є істинними." - -#: ../../src/basics/bool_logic.txt:143 -msgid "and operator truth table" -msgstr "таблиця істинності оператора and" - -#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 -msgid "``operand_1``" -msgstr "``operand_1``" - -#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 -msgid "``operand_2``" -msgstr "``operand_2``" - -#: ../../src/basics/bool_logic.txt:147 -msgid "``operand_1 and operand_2``" -msgstr "``operand_1 and operand_2``" - -#: ../../src/basics/bool_logic.txt:158 -msgid "" -"``and`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``and`` працює не тільки з операндами логічного типу. Його " -"поведінка:" - -#: ../../src/basics/bool_logic.txt:161 -msgid "evaluate 1st operand; return it, if it's ``False`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" - -#: ../../src/basics/bool_logic.txt:162 -msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" - -#: ../../src/basics/bool_logic.txt:163 ../../src/basics/bool_logic.txt:205 -msgid "return 2nd operand" -msgstr "повернути 2-й операнд" - -#: ../../src/basics/bool_logic.txt:177 -msgid "Getting started with ``or`` operator" -msgstr "Початок роботи з оператором ``or``" - -#: ../../src/basics/bool_logic.txt:179 -msgid "" -"With Boolean ``or`` operator, you can connect two Boolean expressions into " -"one compound expression. This makes ``or`` the **binary** operator. At least " -"one subexpression must be ``True`` for the compound expression to be " -"considered ``True``, and it doesn't matter which. If both subexpressions are " -"``False``, then the expression is ``False``." -msgstr "" -"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " -"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " -"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " -"``True``, і не має значення який. Якщо обидва підвирази мають значення " -"``False``, тоді вираз є ``False``." - -#: ../../src/basics/bool_logic.txt:185 -msgid "or operator truth table" -msgstr "таблиця істинності оператора or" - -#: ../../src/basics/bool_logic.txt:189 -msgid "``operand_1 or operand_2``" -msgstr "``operand_1 or operand_2``" - -#: ../../src/basics/bool_logic.txt:200 -msgid "" -"``or`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" - -#: ../../src/basics/bool_logic.txt:203 -msgid "evaluate 1st operand; return it, if it's ``True`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" - -#: ../../src/basics/bool_logic.txt:204 -msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" - -#: ../../src/basics/bool_logic.txt:219 -msgid "Comparison" -msgstr "Порівняння" - -#: ../../src/basics/bool_logic.txt:221 -msgid "" -"There are eight comparison operations in Python. They all have the same " -"priority (which is higher than that of the Boolean operations)." -msgstr "" -"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " -"(вищий, ніж у логічних операцій)." - -#: ../../src/basics/bool_logic.txt:224 -msgid "Comparison operators" -msgstr "Оператори порівняння" - -#: ../../src/basics/bool_logic.txt:228 -msgid "Meaning" -msgstr "Значення" - -#: ../../src/basics/bool_logic.txt:230 -msgid "``<``" -msgstr "``<``" - -#: ../../src/basics/bool_logic.txt:230 -msgid "strictly less than" -msgstr "строго менше ніж" - -#: ../../src/basics/bool_logic.txt:232 -msgid "``<=``" -msgstr "``<=``" - -#: ../../src/basics/bool_logic.txt:232 -msgid "less than or equal" -msgstr "менше або дорівнює" - -#: ../../src/basics/bool_logic.txt:234 -msgid "``>``" -msgstr "``>``" - -#: ../../src/basics/bool_logic.txt:234 -msgid "strictly greater than" -msgstr "строго більше ніж" - -#: ../../src/basics/bool_logic.txt:236 -msgid "``>=``" -msgstr "``>=``" - -#: ../../src/basics/bool_logic.txt:236 -msgid "greater or equal" -msgstr "більше або дорівнює" - -#: ../../src/basics/bool_logic.txt:238 -msgid "``==``" -msgstr "``==``" - -#: ../../src/basics/bool_logic.txt:238 -msgid "equal (aka *equality* comparison)" -msgstr "дорівнює (також відоме як порівняння *equality*)" - -#: ../../src/basics/bool_logic.txt:240 -msgid "``!=``" -msgstr "``!=``" - -#: ../../src/basics/bool_logic.txt:240 -msgid "not equal" -msgstr "не дорівнює" - -#: ../../src/basics/bool_logic.txt:242 -msgid "``is``" -msgstr "``is``" - -#: ../../src/basics/bool_logic.txt:242 -msgid "object identity" -msgstr "ідентичність об'єкта" - -#: ../../src/basics/bool_logic.txt:244 -msgid "``is not``" -msgstr "``is not``" - -#: ../../src/basics/bool_logic.txt:244 -msgid "negated object identity" -msgstr "заперечена ідентичність об'єкта" - -#: ../../src/basics/bool_logic.txt:247 -msgid "" -"Each of these comparison operators return a Boolean value, it's always " -"``True`` or ``False``." -msgstr "" -"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " -"``True`` або ``False``." - -#: ../../src/basics/bool_logic.txt:250 -msgid "" -"You can chain comparison operators together: ``x < y < z`` is equal to ``x < " -"y and y < z``." -msgstr "" -"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " -"< z``." - -#: ../../src/basics/bool_logic.txt:254 -msgid "Equality vs Identity" -msgstr "Рівність та Ідентичність" - -#: ../../src/basics/bool_logic.txt:256 -msgid "" -"It's easier to understand the difference between those by asking the " -"question each answers to." -msgstr "" -"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " -"відповідає." - -#: ../../src/basics/bool_logic.txt:259 -msgid "The question for ``==`` (*equality*) is:" -msgstr "Питання для ``==`` (*equality*) таке:" - -#: ../../src/basics/bool_logic.txt:261 -msgid "Is object on the left **equal** to the object on the right" -msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" - -#: ../../src/basics/bool_logic.txt:263 -msgid "The question for ``is`` (*identity*) is:" -msgstr "Питання для ``is`` (*identity*) таке:" - -#: ../../src/basics/bool_logic.txt:265 -msgid "Is object on the left **the same** as the object on the right" -msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" - -#: ../../src/basics/bool_logic.txt:267 -msgid "" -"For example, if there are two cars of the same model, same color etc. in " -"front of you - these cars are equal, but they aren't ident to each other. " -"But if you are shown two pictures of the same car, you understand that the " -"cars on those pictures are the same object." -msgstr "" -"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " -"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " -"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " -"одним і тим же об'єктом." - -#: ../../src/basics/controlflow.txt:-1 -msgid "Control flow in Python" -msgstr "Контроль потоку в Python" - -#: ../../src/basics/controlflow.txt:-1 -msgid "python, basics, control, if, for, while, condition, loop" -msgstr "python, basics, control, if, for, while, condition, loop" - -#: ../../src/basics/controlflow.txt:8 -msgid "Control Flow" -msgstr "Керування виконанням" - -#: ../../src/basics/controlflow.txt:11 -msgid "``if`` statement" -msgstr "Вираз ``if``" - -#: ../../src/basics/controlflow.txt:13 -msgid "" -"Perhaps the most well-known statement type is ``if`` statement. For example:" -msgstr "Мабуть, найвідомішим типом оператора є оператор ``if``. Наприклад:" - -#: ../../src/basics/controlflow.txt:15 -msgid "if statement base example" -msgstr "базовий приклад оператора if" - -#: ../../src/basics/controlflow.txt:29 -msgid "But let's dive into ``if`` statement with more simple examples." -msgstr "" -"Але давайте зануримося в інструкцію ``if`` з більш простими прикладами." - -#: ../../src/basics/controlflow.txt:32 -msgid "How it works" -msgstr "Як це працює" - -#: ../../src/basics/controlflow.txt:34 -msgid "" -"**if** statement is defined with a keyword ``if`` followed by a Boolean " -"expression or any object and finished with colon. The statement requires a " -"*body*: other statements to execute, also called an *if block*. The body is " -"indented at the same distance from the left (in Python we use 4 spaces to " -"indent a single block of code)." -msgstr "" -"Оператор **if** визначається ключовим словом ``if``, за яким слідує логічний " -"вираз або будь-який об'єкт і завершується двокрапкою. Оператор потребує " -"*тіло*: інші оператори для виконання, які також називають блоком *if*. Тіло " -"має відступ на однаковій відстані зліва (у Python ми використовуємо 4 " -"пробіли для відступу одного блоку коду)." - -#: ../../src/basics/controlflow.txt:40 -msgid "" -"The body's statements will be executed only in case **if** expression is " -"``True``." -msgstr "" -"Оператори тіла виконуватимуться лише у випадку, якщо вираз **if** має " -"значення ``True``." - -#: ../../src/basics/controlflow.txt:53 -msgid "" -"The ``print`` statement on line #6 will be executed only for even value of " -"``number`` variable." -msgstr "" -"Оператор ``print`` у рядку #6 буде виконано лише для парного значення " -"змінної ``number``." - -#: ../../src/basics/controlflow.txt:57 -msgid "``else`` block" -msgstr "Блок ``else``" - -#: ../../src/basics/controlflow.txt:59 -msgid "" -"``if`` can be used by its own, it can extend its behavior with ``else`` " -"block. The general syntax for ``else`` body is the same: at least one " -"indented statement. But ``else`` doesn't take any expression after it. This " -"block of code will be executed only that the ``if`` statement truth check " -"fails." -msgstr "" -"``if`` може використовуватися самостійно, він може розширити свою поведінку " -"за допомогою блоку ``else``. Загальний синтаксис для тіла ``else`` той " -"самий: принаймні один оператор із відступом. Але ``else`` не приймає жодного " -"виразу після нього. Цей блок коду буде виконано лише тоді, коли перевірка " -"істинності оператора ``if`` буде невдалою." - -#: ../../src/basics/controlflow.txt:76 -msgid "" -"You can attach **only one** else block to **if statement**. And you cannot " -"use ``else`` statement on its own - this will cause *SyntaxError*." -msgstr "" -"Ви можете приєднати **лише один** блок else до **інструкції if**. І ви не " -"можете використовувати оператор ``else`` сам по собі - це спричинить " -"*SyntaxError*." - -#: ../../src/basics/controlflow.txt:80 -msgid "``elif`` block(s)" -msgstr "Блок(и) ``elif``" - -#: ../../src/basics/controlflow.txt:82 -msgid "" -"``elif`` (*else if*) statement may be considered as semi-statement between " -"``if`` and ``else`` statements. In case your program has more than two " -"dedicated choices you are able to extends control flow by appending ``elif`` " -"blocks after ``if`` statement. The syntax is pretty similar to ``if`` " -"statement. Each ``elif`` has its own boolean expression or an object to test " -"for the truth value." -msgstr "" -"Оператор ``elif`` (*else if*) можна розглядати як напівоператор між ``if`` " -"та ``else``. Якщо у вашій програмі є більше двох виділених варіантів, ви " -"можете розширити потік керування, додавши блоки ``elif`` після оператора " -"``if``. Синтаксис дуже схожий на оператор if. Кожен ``elif`` має свій " -"власний логічний вираз або об'єкт для перевірки значення істинності." - -#: ../../src/basics/controlflow.txt:89 -msgid "" -"You can attach as many ``elif`` statements as it needed. But you cannot use " -"``elif`` without ``if`` statement." -msgstr "" -"Ви можете додати скільки завгодно операторів ``elif``. Але ви не можете " -"використовувати ``elif`` без оператора ``if``." - -#: ../../src/basics/controlflow.txt:92 -msgid "" -"Python will test conditions in ``if`` and ``elif`` statements from top to " -"bottom. The first one, which considered to be ``True`` will be executed. All " -"others will be skipped." -msgstr "" -"Python перевірить умови в операторах ``if`` та ``elif`` зверху вниз. Буде " -"виконано перший, який вважається ``True``. Усі інші будуть проігноровано." - -#: ../../src/basics/controlflow.txt:96 -msgid "" -"If there were no truth conditions ``else`` block will be executed (if " -"exists)." -msgstr "Якщо не було істиних умов, буде виконано блок ``else`` (якщо існує)." - -#: ../../src/basics/controlflow.txt:112 -msgid "" -"The order conditions appears matter. The truth test goes from top to bottom " -"and stops at first expression which is ``True``." -msgstr "" -"Порядок у якому визначено умови має значення. Перевірка істинності йде " -"зверху вниз і зупиняється на першому виразі, який є ``True``." - -#: ../../src/basics/controlflow.txt:117 -msgid "Usage" -msgstr "Використання" - -#: ../../src/basics/controlflow.txt:119 -msgid "" -"``if/elif/else`` statements help you to control which portion of your code " -"is executed based on conditions from outer scope." -msgstr "" -"Оператори ``if/elif/else`` допомагають вам контролювати, яка частина вашого " -"коду виконується на основі умов ззовні." - -#: ../../src/basics/decorators.txt:-1 -msgid "Python decorators" -msgstr "Декоратори в Python" - -#: ../../src/basics/decorators.txt:-1 -msgid "python, basics, decorators" -msgstr "python, basics, decorators" - -#: ../../src/basics/decorators.txt:11 -msgid "Decorators" -msgstr "Декоратори" - -#: ../../src/basics/decorators.txt:13 -msgid "" -"Decorators provide a simple syntax for calling higher-order functions :cite:" -"`realpython:decorators`." -msgstr "" -"Декоратори забезпечують простий синтаксис для виклику функцій вищого " -"порядку :cite:`realpython:decorators`." - -#: ../../src/basics/decorators.txt:18 -msgid "There is some kind of misunderstanding in definitions." -msgstr "Є деяке непорозуміння у визначеннях." - -#: ../../src/basics/decorators.txt:20 -msgid "" -"**Decorator** is a function returning another function, usually applied as a " -"function transformation using the ``@wrapper`` syntax :cite:`docs-python:" -"term-decorator`." -msgstr "" -"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " -"застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" -"cite:`docs-python:term-decorator`." - -#: ../../src/basics/decorators.txt:24 -msgid "" -"However, that's no quit enough to describe it. The more complete definition " -"is:" -msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" - -#: ../../src/basics/decorators.txt:27 -msgid "" -"**Decorator** is a structural design pattern that lets you attach new " -"behaviors to objects by placing these objects inside special wrapper objects " -"that contain the behaviors :cite:`refactoring.guru:decorator`." -msgstr "" -"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " -"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " -"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." - -#: ../../src/basics/decorators.txt:31 -msgid "" -"Before you understand decorators, you must first understand how functions " -"work." -msgstr "" -"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " -"функції." - -#: ../../src/basics/decorators.txt:35 -msgid "First-class objects" -msgstr "Об'єкти першого класу" - -#: ../../src/basics/decorators.txt:37 -msgid "" -"In Python functions are `first-class objects`_. Everything in Python is an " -"object. Functions are objects too." -msgstr "" -"У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " -"Функції також є об'єктами." - -#: ../../src/basics/decorators.txt:41 -msgid "Inner functions" -msgstr "Внутрішні функції" - -#: ../../src/basics/decorators.txt:43 -msgid "" -"Functions can be nested. This means it is possible to define functions " -"inside other functions." -msgstr "" -"Функції можуть бути вкладеними. Це означає, що можна визначати функції " -"всередині інших функцій." - -#: ../../src/basics/decorators.txt:46 -msgid "Nested functions example" -msgstr "Приклад вкладених функцій" - -#: ../../src/basics/decorators.txt:60 -msgid "" -"The order in which inner functions are defined no matters. The function " -"definition does not execute the function body; this gets executed only when " -"the function is called. Furthermore, the inner functions are not defined " -"until the parent function is called. They are locally scoped to their " -"parent. Trying to call ``heapify`` function outside of ``heap_sort`` will " -"cause ``NameError`` exception." -msgstr "" -"Порядок визначення внутрішніх функцій не має значення. Визначення функції не " -"виконує тіло функції; це виконується лише під час виклику функції. Крім " -"того, внутрішні функції не визначені, доки не буде викликана батьківська " -"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " -"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " -"``NameError``." - -#: ../../src/basics/decorators.txt:68 -msgid "Functions are objects" -msgstr "Функції є об'єктами" - -#: ../../src/basics/decorators.txt:70 -msgid "" -"This means functions can be passed around and used as arguments, just like " -"any other object (e.g. *int*, *str* etc.)." -msgstr "" -"Це означає, що функції можна передавати й використовувати як аргументи, як і " -"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." - -#: ../../src/basics/decorators.txt:95 -msgid "Returning functions" -msgstr "Повернення функцій" - -#: ../../src/basics/decorators.txt:97 -msgid "" -"Since function can be passed as an argument, it may be returned from another " -"function." -msgstr "" -"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " -"функції." - -#: ../../src/basics/decorators.txt:120 -msgid "``parent`` returns functions themselves, there are no parentheses." -msgstr "``parent`` повертає самі функції, тут нема дужок." - -#: ../../src/basics/decorators.txt:122 -msgid "" -"After running the code snippet above, ``first`` refers the ``first_child`` " -"function from the inner ``parent`` scope. From now it can be used to call " -"the target function it refers." -msgstr "" -"Після виконання наведеного вище фрагмента коду ``first`` посилається на " -"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " -"можна використовувати для виклику цільової функції, на яку він посилається." - -#: ../../src/basics/decorators.txt:134 -msgid "Simple decorators" -msgstr "Прості декоратори" - -#: ../../src/basics/decorators.txt:136 -msgid "" -"Now you're ready to move on and see the magical beast that is the Python " -"decorators. Let's start with a simple example:" -msgstr "" -"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " -"Python. Почнемо з простого прикладу:" - -#: ../../src/basics/decorators.txt:154 -msgid "Running function:" -msgstr "Запуск функцій:" - -#: ../../src/basics/decorators.txt:165 -msgid "" -"The common way to use decorators is to replace the original function with a " -"decorated one:" -msgstr "" -"Поширеним способом використання декораторів є заміна оригінальної функції на " -"декоровану:" - -#: ../../src/basics/decorators.txt:176 -msgid "" -"``say_hello`` function is the reference to the ``decorator.." -"wrapper``, which itself is bound to the original ``say_hello`` function. " -"There is a syntactic sugar to do this, called *pie-syntax*. The following " -"example does exact the same things as the first decorator example:" -msgstr "" -"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " -"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " -"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " -"ті самі речі, що й перший приклад декоратора:" - -#: ../../src/basics/decorators.txt:198 -msgid "" -"There is no way to *undecorate* object in Python. Once something is bound to " -"the decorator's wrapper - it is decorated forever." -msgstr "" -"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " -"обгортки декоратора - воно прикрашене назавжди." - -#: ../../src/basics/decorators.txt:201 -msgid "" -"A decorated function still remains a **function**. So, it can be decorated " -"once more time again, and again, and again..." -msgstr "" -"Декорована функція все ще залишається **функцією**. Отже, його можна " -"прикрашати ще раз, і ще, і ще..." - -#: ../../src/basics/decorators.txt:253 -msgid "" -"\"Wrapper\" is the alternative nickname for the Decorator pattern that " -"clearly expresses the main idea of the pattern. A wrapper is an object that " -"can be linked with some target object. The wrapper contains the same set of " -"methods as the target and delegates to it all requests it receives. However, " -"the wrapper may alter the result by doing something either before or after " -"it passes the request to the target." -msgstr "" -"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " -"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " -"деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " -"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " -"результат, зробивши щось до або після того, як вона передає запит цільовому " -"об'єкту." - -#: ../../src/basics/decorators.txt:261 -msgid "Passing arguments to the wrapper" -msgstr "Передача аргументів до wrapper" - -#: ../../src/basics/decorators.txt:263 -msgid "" -"Until now the examples use *simple* decorators. But what if the decorated " -"function gets some arguments? This will cause ``TypeError`` exception that " -"tell that \"arguments are missed\". This can be fixed with just passing " -"arguments to the ``wrapper`` inner function." -msgstr "" -"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " -"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " -"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " -"аргументи внутрішній функції ``wrapper``." - -#: ../../src/basics/decorators.txt:289 -msgid "" -"If case you're trying to make a generic decorator, you may pass ``*args`` " -"and ``**kwargs`` instead of exact arguments:" -msgstr "" -"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " -"``*args`` і ``**kwargs`` замість точних аргументів:" - -#: ../../src/basics/decorators.txt:308 -msgid "Passing arguments to decorator" -msgstr "Передача аргументів декоратору" - -#: ../../src/basics/decorators.txt:310 -msgid "" -"At last it's time to know how to pass arguments to the decorator. Here is a " -"simple implementation of ``defer`` decorator which deferred the function " -"execution for some time:" -msgstr "" -"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " -"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " -"час:" - -#: ../../src/basics/decorators.txt:353 -msgid "Class decorators" -msgstr "Декоратори класів" - -#: ../../src/basics/decorators.txt:355 -msgid "" -"There are some pre-defined decorators exists for usage together with " -"classes. They are:" -msgstr "" -"Існують деякі попередньо визначені декоратори для використання разом із " -"класами. Це:" - -#: ../../src/basics/decorators.txt:358 -msgid "``classmethod``" -msgstr "``classmethod``" - -#: ../../src/basics/decorators.txt:359 -msgid "``staticmethod``" -msgstr "``staticmethod``" - -#: ../../src/basics/decorators.txt:360 -msgid "``property``" -msgstr "``property``" - -#: ../../src/basics/decorators.txt:362 -msgid "" -"If you develop an intuitive understanding for their differences you'll be " -"able to write object-oriented Python that communicates its intent more " -"clearly and will be easier to maintain in the long run :cite:`realpython:" -"methods-demystified`." -msgstr "" -"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " -"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " -"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" -"methods-demystified`." - -#: ../../src/basics/decorators.txt:368 -msgid "Class methods" -msgstr "Методи класу" - -#: ../../src/basics/decorators.txt:370 -msgid "" -"Instead of accepting a ``self`` parameter, class methods take a ``cls`` " -"parameter that points to the class — and not the object instance — when the " -"method is called." -msgstr "" -"Замість того, щоб приймати параметр self, під час виклику методу методи " -"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " -"класу." - -#: ../../src/basics/decorators.txt:374 -msgid "" -"Because the class method only has access to this ``cls`` argument, it can't " -"modify object instance state. That would require access to ``self``. " -"However, class methods can still modify class state that applies across all " -"instances of the class." -msgstr "" -"Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " -"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " -"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " -"екземплярів класу." - -#: ../../src/basics/decorators.txt:379 -msgid "" -"The common usage for ``classmethod`` is provide alternative initializers." -msgstr "" -"Загальним використанням ``методи класу`` є надання альтернативних " -"ініціалізаторів." - -#: ../../src/basics/decorators.txt:382 -msgid "Static methods" -msgstr "Статичні методи" - -#: ../../src/basics/decorators.txt:384 -msgid "" -"This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " -"course it's free to accept an arbitrary number of other parameters)." -msgstr "" -"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " -"він може приймати будь-яку кількість інших параметрів)." - -#: ../../src/basics/decorators.txt:387 -msgid "" -"Therefore a static method can neither modify object state nor class state. " -"Static methods are restricted in what data they can access - and they're " -"primarily a way to namespace your methods." -msgstr "" -"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " -"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " -"і вони, перш за все, є способом простору імен ваших методів." - -#: ../../src/basics/decorators.txt:391 -msgid "" -"It's tricky to explain ``staticmethod`` usage. Almost always you can create " -"a dedicated function instead of static method. But sometimes you need to " -"bind some logic independent from class itself or its instances to a class - " -"it common to encapsulate it with ``staticmethod``." -msgstr "" -"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " -"створити спеціальну функцію замість статичного методу. Але іноді вам " -"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " -"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." - -#: ../../src/basics/decorators.txt:397 -msgid "Properties" -msgstr "Властивості" - -#: ../../src/basics/decorators.txt:399 -msgid "" -"It's a way to bind a method name to access it as an attribute. Properties " -"are **read-only** by default. This means a value cannot be assigned to " -"``property member``." -msgstr "" -"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " -"замовчуванням властивості доступні **лише для читання**. Це означає, що " -"значення не можна призначити ``члену властивості``." - -#: ../../src/basics/decorators.txt:404 -msgid "Some examples" -msgstr "Деякі приклади" - -#: ../../src/basics/exceptions.txt:-1 -msgid "Handling exceptions in Python" -msgstr "Опрацювання винятків в Python" - -#: ../../src/basics/exceptions.txt:-1 -msgid "python, exceptions, handling, try, except, finally" -msgstr "python, exceptions, handling, try, except, finally" - -#: ../../src/basics/exceptions.txt:11 -msgid "Errors and Exceptions" -msgstr "Помилки та винятки" - -#: ../../src/basics/exceptions.txt:13 -msgid "" -"There are (at least) two distinguishable kinds of errors: *syntax errors* " -"and *exceptions* :cite:`docs-python:errors`." -msgstr "" -"Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" -"cite:`docs-python:errors`." - -#: ../../src/basics/exceptions.txt:17 -msgid "Syntax errors" -msgstr "Синтаксичні помилки" - -#: ../../src/basics/exceptions.txt:19 -msgid "Syntax errors are also known as parsing errors." -msgstr "Синтаксичні помилки також відомі як помилки Python парсера." - -#: ../../src/basics/exceptions.txt:29 -msgid "" -"The parser repeats the offending line and displays a little \"arrow\" " -"pointing at the earliest point in the line where the error was detected. The " -"error is caused by (or at least detected at) the token preceding the arrow." -msgstr "" -"Синтаксичний аналізатор повторює неправильний рядок і відображає маленьку " -"\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " -"Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." - -#: ../../src/basics/exceptions.txt:34 -msgid "Exceptions" -msgstr "Винятки" - -#: ../../src/basics/exceptions.txt:36 -msgid "" -"Even if a statement or expression is syntactically correct, it may cause an " -"error when an attempt is made to execute it. Errors detected during " -"execution are called exceptions and are not unconditionally fatal: you will " -"soon learn how to handle them in Python programs." -msgstr "" -"Навіть якщо оператор або вираз синтаксично правильний, це може спричинити " -"помилку під час спроби його виконання. Помилки, виявлені під час виконання, " -"називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " -"обробляти в програмах на Python." - -#: ../../src/basics/exceptions.txt:41 -msgid "" -"Exceptions come in different types, and the type is printed as part of the " -"message." -msgstr "" -"Винятки бувають різних типів, і тип друкується як частина повідомлення." - -#: ../../src/basics/exceptions.txt:44 -msgid "For example, the ``div`` function implemented as" -msgstr "Наприклад, функція ``div``, реалізована як" - -#: ../../src/basics/exceptions.txt:53 -msgid "" -"may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " -"parameter." -msgstr "" -"може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " -"``y``." - -#: ../../src/basics/exceptions.txt:56 -msgid "" -"Standard exception names are built-in identifiers (not reserved keywords)." -msgstr "" -"Стандартні назви винятків є вбудованими ідентифікаторами (а не " -"зарезервованими ключовими словами)." - -#: ../../src/basics/exceptions.txt:58 -msgid "The list of `built-in exceptions`_" -msgstr "Список `вбудованих винятків`_" - -#: ../../src/basics/exceptions.txt:61 -msgid "Tracebacks" -msgstr "Відстеження" - -#: ../../src/basics/exceptions.txt:63 -msgid "\"File\" is replaced with a *dummy string* within the examples." -msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." - -#: ../../src/basics/exceptions.txt:65 -msgid "Let's assume the following modules structure:" -msgstr "Припустимо наступну структуру модулів:" - -#: ../../src/basics/exceptions.txt:73 -msgid "" -"The **main** module imports a ``div`` function implemented above from the " -"**func** module. The code in main is implemented as follows:" -msgstr "" -"Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " -"**func**. Основний код реалізовано наступним чином:" - -#: ../../src/basics/exceptions.txt:85 -msgid "" -"While running the code with correct inputs it will work fine. But there are " -"at two exceptions for this script." -msgstr "" -"Під час виконання коду з правильними введеннями він працюватиме нормально. " -"Але для цього сценарію є два винятки." - -#: ../../src/basics/exceptions.txt:88 -msgid "" -"The first one is related on type conversion. While running the main script " -"there is case of invalid input." -msgstr "" -"Перший пов'язаний з перетворенням типів. Під час виконання основного " -"сценарію є випадок неправильного введення." - -#: ../../src/basics/exceptions.txt:100 -msgid "" -"Note the **traceback** indicates the module and the exact line of code that " -"causes the exception." -msgstr "" -"Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " -"викликає виняток." - -#: ../../src/basics/exceptions.txt:103 -msgid "" -"The second one exception occurs when a 0 is passed as the second parameter " -"to ``div`` function. The traceback would look like:" -msgstr "" -"Другий виняток виникає, коли 0 передається як другий параметр функції " -"``div``. Трасування виглядатиме так:" - -#: ../../src/basics/exceptions.txt:117 -msgid "" -"The traceback indicates all calls (top to bottom) that cause an exception." -msgstr "" -"Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " -"виняток." - -#: ../../src/basics/exceptions.txt:120 ../../src/basics/syntax.txt -msgid "Exception handling" -msgstr "Обробка винятків" - -#: ../../src/basics/exceptions.txt:122 -msgid "" -"It is possible to write programs that handle selected exceptions. The " -"``try`` statement is used to do that." -msgstr "" -"Можна писати програми, які оброблятимуть вибрані винятки. Для цього " -"використовується інструкція ``try``." - -#: ../../src/basics/exceptions.txt:125 -msgid "The try statement works as follows." -msgstr "Інструкція try працює наступним чином." - -#: ../../src/basics/exceptions.txt:127 -msgid "" -"First, the try clause (the statement(s) between the try and except keywords) " -"is executed." -msgstr "" -"Спочатку виконується речення try (вираз(и) між ключовими словами try і " -"except)." - -#: ../../src/basics/exceptions.txt:129 -msgid "" -"If no exception occurs, the except clause is skipped and execution of the " -"try statement is finished." -msgstr "" -"Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " -"оператора try завершується." - -#: ../../src/basics/exceptions.txt:131 -msgid "" -"If an exception occurs during execution of the try clause, the rest of the " -"clause is skipped. Then, if its type matches the exception named after the " -"except keyword, the except clause is executed, and then execution continues " -"after the try/except block." -msgstr "" -"Якщо під час виконання try виникає виняток, решта пропозиції пропускається. " -"Потім, якщо його тип збігається з винятком, названим за ключовим словом " -"osim, виконується пропозиція, а потім виконання продовжується після блоку " -"try/except." - -#: ../../src/basics/exceptions.txt:135 -msgid "" -"If an exception occurs which does not match the exception named in the " -"except clause, it is passed on to outer try statements; if no handler is " -"found, it is an unhandled exception and execution stops with a message as " -"shown above." -msgstr "" -"Якщо виникає виняток, який не збігається з винятком, названим у реченні " -"винятку, він передається зовнішнім операторам try; якщо обробник не " -"знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " -"повідомленням, як показано вище." - -#: ../../src/basics/exceptions.txt:152 -msgid "" -"A try statement may have more than one except clause, to specify handlers " -"for different exceptions." -msgstr "" -"Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " -"різних винятків." - -#: ../../src/basics/exceptions.txt:182 -msgid "Handling ALL exception" -msgstr "Опрацювання усіх винятків" - -#: ../../src/basics/exceptions.txt:184 -msgid "It's a bad practice to handle **all** exceptions." -msgstr "Обробляти **всі** винятки – це погана практика." - -#: ../../src/basics/exceptions.txt:186 -msgid "" -"When indicating an ``except`` block without specifying an exception to catch " -"it will work for any exception, that occurs in ``try`` block. The same is " -"relevant for handling ``BaseException`` and ``Exception``. But you can never " -"say what exact goes wrong." -msgstr "" -"Якщо вказати блок ``except`` без визначення винятку для перехоплення, він " -"працюватиме для будь-якого винятку, який виникає в блоці ``try``. Те саме " -"стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " -"можливо сказати, який саме виняток стався." - -#: ../../src/basics/exceptions.txt:191 -msgid "" -"However, this scenario may work for logging an exception and raising it " -"again to be handled on upper levels." -msgstr "" -"Проте, такий сценарій може працювати для логування винятків, після чого вони " -"підійматься заново, щоб бути опрацьованими на вищих рівнях програми." - -#: ../../src/basics/exceptions.txt:213 -msgid "" -"All exceptions are inherited from ``Exception`` class, which is subclass of " -"``BaseException``. So, you can never know what exactly goes wrong with your " -"code." -msgstr "" -"Усі винятки успадковуються від класу ``Exception``, який є підкласом " -"``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " -"вашим кодом." - -#: ../../src/basics/exceptions.txt:218 -msgid "``finally`` statement" -msgstr "Вираз ``finally``" - -#: ../../src/basics/exceptions.txt:220 -msgid "" -"The ``try`` statement cannot be used itself. This will cause " -"``SyntaxError``. Either ``except`` or ``finally`` block is required to be " -"included." -msgstr "" -"Оператор ``try`` не може бути використаний сам по собі. Це спричинить " -"``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." - -#: ../../src/basics/exceptions.txt:223 -msgid "" -"While the ``except`` block tries to catch the exceptions if any, the " -"``finally`` block will be always executed regardless of the exception occurs." -msgstr "" -"У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " -"блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." - -#: ../../src/basics/exceptions.txt:249 -msgid "``else`` statement" -msgstr "Вираз ``else``" - -#: ../../src/basics/exceptions.txt:251 -msgid "" -"The ``try`` statement can also use ``else`` (which is optional). The " -"statements within this block will be execute only in case there were no " -"exceptions raised while running the ``try``." -msgstr "" -"Оператор ``try`` також може використовувати ``else`` (який є " -"необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " -"якщо під час виконання ``try`` не було викликано винятків." - -#: ../../src/basics/exceptions.txt:273 -msgid "Raising exceptions" -msgstr "Винятки: raising" - -#: ../../src/basics/exceptions.txt:275 -msgid "" -"The ``raise`` statement allows the programmer to force a specified exception " -"to occur. The sole argument to raise indicates the exception to be raised. " -"This must be either an exception instance or an exception class (a class " -"that derives from ``BaseException``, such as ``Exception`` or one of its " -"subclasses). If an exception class is passed, it will be implicitly " -"instantiated by calling its constructor with no arguments." -msgstr "" -"Інструкція ``raise`` дозволяє програмісту примусово викликати певний " -"виняток. Єдиний аргумент, який потрібно викликати, вказує на виняток, який " -"потрібно викликати. Це має бути екземпляр винятку або клас винятку (клас, " -"який походить від ``BaseException``, наприклад ``Exception`` або один із " -"його підкласів). Якщо передано клас винятків, він буде неявно створений " -"шляхом виклику його конструктора без аргументів." - -#: ../../src/basics/exceptions.txt:287 -msgid "" -"``raise`` statement itself will re-raise all the exceptions within the " -"context. Also exceptions can be raised again from the ``except`` block. It's " -"a common pattern to catch the exception for loggers and when re-raise it." -msgstr "" -"Сам оператор ``raise`` повторно викличе всі винятки в контексті опрацювання. " -"Крім того, винятки можуть бути викликані знову з блоку ``except``. Це " -"загальний шаблон для перехоплення винятку для реєстрації повідомлення про " -"виняткову ситуацію і повторного його підняття." - -#: ../../src/basics/exceptions.txt:300 -msgid "Creating custom exceptions" -msgstr "Створення винятків" - -#: ../../src/basics/exceptions.txt:302 -msgid "" -"Programs may name their own exceptions by creating a new exception class. " -"Exceptions should typically be derived from the Exception class, either " -"directly or indirectly." -msgstr "" -"Програми можуть називати власні винятки, створюючи новий клас винятків. " -"Винятки зазвичай мають бути похідними від класу Exception, прямо чи " -"опосередковано." - -#: ../../src/basics/exceptions.txt:306 -msgid "" -"Exception classes can be defined which do anything any other class can do, " -"but are usually kept simple, often only offering a number of attributes that " -"allow information about the error to be extracted by handlers for the " -"exception." -msgstr "" -"Можна визначити класи винятків, які роблять усе, що може зробити будь-який " -"інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " -"які дозволяють обробникам витягувати інформацію про помилку для винятку." - -#: ../../src/basics/exceptions.txt:311 -msgid "" -"Most exceptions are defined with names that end in \"Error\", similar to the " -"naming of the standard exceptions." -msgstr "" -"Більшість винятків визначено з іменами, які закінчуються на \"Error\", " -"подібно до назв стандартних винятків." - -#: ../../src/basics/exceptions.txt:314 -msgid "" -"Many standard modules define their own exceptions to report errors that may " -"occur in functions they define." -msgstr "" -"Багато стандартних модулів визначають власні винятки, щоб повідомляти про " -"помилки, які можуть виникнути у функціях, які вони визначають." - -#: ../../src/basics/exceptions.txt:317 -msgid "User-defined exception" -msgstr "Виняток, визначений користувачем" - -#: ../../src/basics/functions.txt:-1 -msgid "Python functions" -msgstr "Функції в Python" - -#: ../../src/basics/functions.txt:-1 -msgid "python, basics, functions" -msgstr "python, basics, functions" - -#: ../../src/basics/functions.txt:8 ../../src/basics/modules.txt:8 -#: ../../src/basics/pep8.txt:8 ../../src/basics/testing.txt:8 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/basics/functions.txt:16 ../../src/basics/syntax.txt -msgid "Functions" -msgstr "Функції" - -#: ../../src/basics/index.txt:-1 -msgid "Python course - Basics" -msgstr "Курс Python - Основи" - -#: ../../src/basics/index.txt:-1 -msgid "python, basics, index" -msgstr "python, basics, index" - -#: ../../src/basics/index.txt:8 -msgid "Python Basics" -msgstr "Основи Python" - -#: ../../src/basics/modules.txt:-1 -msgid "Modules and imports in Python" -msgstr "Модулі та імпорти в Pythons" - -#: ../../src/basics/modules.txt:-1 -msgid "python, basics, modules, import" -msgstr "python, basics, modules, import" - -#: ../../src/basics/modules.txt:16 -msgid "Pythons Modules and Imports" -msgstr "Модулі та імпорт Pythons" - -#: ../../src/basics/pep8.txt:-1 -msgid "PEP-8 style guide" -msgstr "Керівництво по стилю PEP8" - -#: ../../src/basics/pep8.txt:-1 -msgid "python, style, guide" -msgstr "python, style, guide" - -#: ../../src/basics/pep8.txt:16 -msgid "Style Guides: PEP8" -msgstr "Керівництво по стилю: PEP8" - -#: ../../src/basics/stdtypes.txt:-1 -msgid "Python built-in types" -msgstr "Вбудовані типи даних в Python" - -#: ../../src/basics/stdtypes.txt:-1 -msgid "python, basics" -msgstr "python, basics" - -#: ../../src/basics/stdtypes.txt:8 -msgid "Built-in Types" -msgstr "Вбудовані типи" - -#: ../../src/basics/stdtypes.txt:10 -msgid "" -"The principal built-in types are numerics, sequences, mappings, classes, " -"instances and exceptions :cite:`docs-python:stdtypes`. This section covers " -"only the most base of them. Others will be discussed in the future within " -"their own topics." -msgstr "" -"Основними вбудованими типами є числа, послідовності, відображення, класи, " -"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " -"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " -"власних тем." - -#: ../../src/basics/stdtypes.txt:16 -msgid "Numeric types" -msgstr "Числові типи" - -#: ../../src/basics/stdtypes.txt:18 -msgid "" -"There are 3 distinct numeric types: *integers*, *floating point numbers*, " -"and *complex numbers*. In addition, Booleans are a subtype of integers. " -"Integers have unlimited precision. Floating point numbers are usually " -"implemented using ``double`` in C. Complex numbers have a real and imaginary " -"part, which are each a floating point number." -msgstr "" -"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " -"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " -"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " -"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " -"кожна з яких є числом з плаваючою комою." - -#: ../../src/basics/stdtypes.txt:24 -msgid "" -"Numbers are created by numeric literals or as the result of built-in " -"functions and operators. Unadorned integer literals (including hex, octal " -"and binary numbers) yield integers. Numeric literals containing a decimal " -"point or an exponent sign yield floating point numbers. Appending ``j`` or " -"``J`` to a numeric literal yields an imaginary number (a complex number with " -"a zero real part) which you can add to an integer or float to get a complex " -"number with real and imaginary parts." -msgstr "" -"Числа створюються за допомогою числових літералів або як результат " -"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " -"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " -"літерали, що містять десяткову кому або знак експоненти, дають числа з " -"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " -"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " -"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " -"з дійсною та уявною частинами." - -#: ../../src/basics/stdtypes.txt:33 -msgid "Supported operations" -msgstr "Операції підтримки" - -#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 -#: ../../src/basics/stdtypes.txt:204 -msgid "Operation" -msgstr "Операції" - -#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 -#: ../../src/basics/stdtypes.txt:204 -msgid "Result" -msgstr "Результат" - -#: ../../src/basics/stdtypes.txt:38 -msgid "``x + y``" -msgstr "``x + y``" - -#: ../../src/basics/stdtypes.txt:38 -msgid "sum of *x* and *y*" -msgstr "сума *x* і *y*" - -#: ../../src/basics/stdtypes.txt:40 -msgid "``x - y``" -msgstr "``x - y``" - -#: ../../src/basics/stdtypes.txt:40 -msgid "difference of *x* and *y*" -msgstr "різниця між *x* і *y*" - -#: ../../src/basics/stdtypes.txt:42 -msgid "``x * y``" -msgstr "``x * y``" - -#: ../../src/basics/stdtypes.txt:42 -msgid "product of *x* and *y*" -msgstr "добуток *x* і *y*" - -#: ../../src/basics/stdtypes.txt:44 -msgid "``x / y``" -msgstr "``x / y``" - -#: ../../src/basics/stdtypes.txt:44 -msgid "quotient of *x* and *y*" -msgstr "частка *x* і *y*" - -#: ../../src/basics/stdtypes.txt:46 -msgid "``x // y``" -msgstr "``x // y``" - -#: ../../src/basics/stdtypes.txt:46 -msgid "floored quotient of *x* and *y*" -msgstr "цілочисельне ділення *x* і *y*" - -#: ../../src/basics/stdtypes.txt:48 -msgid "``x % y``" -msgstr "``x % y``" - -#: ../../src/basics/stdtypes.txt:48 -msgid "remainder of ``x / y``" -msgstr "залишок від ділення ``x / y``" - -#: ../../src/basics/stdtypes.txt:50 -msgid "``-x``" -msgstr "``-x``" - -#: ../../src/basics/stdtypes.txt:50 -msgid "*x* negated" -msgstr "*x* від'ємне" - -#: ../../src/basics/stdtypes.txt:52 -msgid "``+x``" -msgstr "``+x``" - -#: ../../src/basics/stdtypes.txt:52 -msgid "*y* unchanged" -msgstr "*y* без змін" - -#: ../../src/basics/stdtypes.txt:54 -msgid "``abs(x)``" -msgstr "``abs(x)``" - -#: ../../src/basics/stdtypes.txt:54 -msgid "absolute value or magnitude of *x*" -msgstr "абсолютне значення або величина *x*" - -#: ../../src/basics/stdtypes.txt:56 -msgid "``int(x)``" -msgstr "``int(x)``" - -#: ../../src/basics/stdtypes.txt:56 -msgid "*x* converted to integer" -msgstr "*x* перетворено на ціле число" - -#: ../../src/basics/stdtypes.txt:58 -msgid "``float(x)``" -msgstr "``float(x)``" - -#: ../../src/basics/stdtypes.txt:58 -msgid "*x* converted to floating point" -msgstr "*x* перетворено на число з плаваючою комою" - -#: ../../src/basics/stdtypes.txt:60 -msgid "``complex(re, im)``" -msgstr "``complex(re, im)``" - -#: ../../src/basics/stdtypes.txt:60 -msgid "" -"a complex number with real part *re*, imaginary part *im*. *im* defaults to " -"zero." -msgstr "" -"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " -"замовчуванням на нуль." - -#: ../../src/basics/stdtypes.txt:63 -msgid "``divmod(x, y)``" -msgstr "``divmod(x, y)``" - -#: ../../src/basics/stdtypes.txt:63 -msgid "the pair ``(x // y, x % y)``" -msgstr "об'єднує ``(x // y, x % y)``" - -#: ../../src/basics/stdtypes.txt:65 -msgid "``pow(x, y)`` ``x ** y``" -msgstr "``pow(x, y)`` ``x ** y``" - -#: ../../src/basics/stdtypes.txt:65 -msgid "*x* to the power *y*" -msgstr "*x* у степені *y*" - -#: ../../src/basics/stdtypes.txt:69 -msgid "" -"``x // y`` also referred to as integer division. The resultant value is a " -"whole integer, through the result's type is not necessarily int. The result " -"is always rounded towards minus infinity: ``1 // 2`` is ``0``" -msgstr "" -"``x // y`` також називають цілим діленням. Результуюче значення є цілим " -"числом, через тип результату не обов'язково int. Результат завжди " -"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" - -#: ../../src/basics/stdtypes.txt:74 -msgid "" -"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " -"optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " -"and negative infinity." -msgstr "" -"``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " -"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " -"позитивна та негативна нескінченність." - -#: ../../src/basics/stdtypes.txt:79 -msgid "Code examples" -msgstr "Приклади коду" - -#: ../../src/basics/stdtypes.txt:81 -msgid "Integer numbers" -msgstr "Цілі числа" - -#: ../../src/basics/stdtypes.txt:94 -msgid "Floating point numbers" -msgstr "Числа з плаваючою комою" - -#: ../../src/basics/stdtypes.txt:109 ../../src/basics/stdtypes.txt:182 -#: ../../src/basics/stdtypes.txt:290 ../../src/basics/stdtypes.txt:299 -#: ../../src/basics/stdtypes.txt:328 -msgid "Value comparisons" -msgstr "Порівняння цінностей" - -#: ../../src/basics/stdtypes.txt:111 -msgid "" -"Numbers of built-in numeric types can be compared within and across their " -"types (with the restriction that complex numbers do not support order " -"comparison). Within the limits of the types involved, they compare " -"mathematically correct without loss of precision." -msgstr "" -"Числа вбудованих числових типів можна порівнювати всередині та між типами (з " -"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " -"залучених типів вони порівняються математично правильно без втрати точності." - -#: ../../src/basics/stdtypes.txt:116 -msgid "" -"The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." -"Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" -"number value is false." -msgstr "" -"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " -"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " -"є хибним." - -#: ../../src/basics/stdtypes.txt:120 -msgid "Sequence types" -msgstr "Типи послідовностей" - -#: ../../src/basics/stdtypes.txt:122 -msgid "" -"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " -"Additional sequence types tailored for processing of binary data and text " -"strings are described in dedicated sections." -msgstr "" -"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " -"Додаткові типи послідовностей, призначені для обробки двійкових даних і " -"текстових рядків, описані у інших розділах." - -#: ../../src/basics/stdtypes.txt:127 -msgid "Lists" -msgstr "Списки" - -#: ../../src/basics/stdtypes.txt:129 -msgid "" -"Lists are mutable sequences, typically used to store collections of items. " -"They may be constructed in several ways:" -msgstr "" -"Списки - це змінні послідовності, які зазвичай використовуються для " -"зберігання колекцій елементів. Вони можуть бути побудовані кількома " -"способами:" - -#: ../../src/basics/stdtypes.txt:132 -msgid "using a pair of square brackets to denote the empty list: ``[]``" -msgstr "" -"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" - -#: ../../src/basics/stdtypes.txt:133 -msgid "" -"using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" -msgstr "" -"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " -"b, c]``" - -#: ../../src/basics/stdtypes.txt:134 -msgid "using a list comprehension: ``[x for x in iterable]``" -msgstr "використовуючи генератори списків: ``[x for x in iterable]``" - -#: ../../src/basics/stdtypes.txt:135 -msgid "using the type constructor: ``list()`` or ``list(iterable)``" -msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" - -#: ../../src/basics/stdtypes.txt:138 -msgid "Tuples" -msgstr "Кортежі" - -#: ../../src/basics/stdtypes.txt:140 -msgid "" -"Tuples are immutable sequences, typically used to store collections of data " -"or for cases where an immutable sequence of data is needed (such as allowing " -"storage in a ``set`` or ``dict`` instances). They may be constructed in a " -"number of ways:" -msgstr "" -"Кортежі - це незмінні послідовності, які зазвичай використовуються для " -"зберігання колекцій даних або для випадків, коли потрібна незмінна " -"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " -"``dict``). Вони можуть бути конструйовані декількома способами:" - -#: ../../src/basics/stdtypes.txt:145 -msgid "using a pair of parentheses to denote the empty tuple: ``()``" -msgstr "" -"використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" - -#: ../../src/basics/stdtypes.txt:146 -msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" -msgstr "" -"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " -"c)``" - -#: ../../src/basics/stdtypes.txt:147 -msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" -msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" - -#: ../../src/basics/stdtypes.txt:148 -msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" -msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" - -#: ../../src/basics/stdtypes.txt:151 -msgid "Common operations" -msgstr "Загальні операції" - -#: ../../src/basics/stdtypes.txt:156 -msgid "``x in s`` ``x not in s``" -msgstr "``x in s`` ``x not in s``" - -#: ../../src/basics/stdtypes.txt:156 -msgid "" -"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " -"*x*" -msgstr "" -"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " -"*x*" - -#: ../../src/basics/stdtypes.txt:159 -msgid "``s + t``" -msgstr "``s + t``" - -#: ../../src/basics/stdtypes.txt:159 -msgid "the concatenation of *s* and *t*" -msgstr "конкатенація s і t" - -#: ../../src/basics/stdtypes.txt:161 -msgid "``s * n``" -msgstr "``s * n``" - -#: ../../src/basics/stdtypes.txt:161 -msgid "equivalent to adding *s* to itself *n* times" -msgstr "еквівалентно додаванню *s* до себе *n* разів" - -#: ../../src/basics/stdtypes.txt:163 -msgid "``s[i]``" -msgstr "``s[i]``" - -#: ../../src/basics/stdtypes.txt:163 -msgid "*i*-th item of *s*, origin 0" -msgstr "*i*-й елемент *s*, джерело 0" - -#: ../../src/basics/stdtypes.txt:165 -msgid "``s[i:j]`` ``s[i:j:k]``" -msgstr "``s[i:j]`` ``s[i:j:k]``" - -#: ../../src/basics/stdtypes.txt:165 -msgid "" -"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " -"be omitted." -msgstr "" -"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " -"3) можна опустити." - -#: ../../src/basics/stdtypes.txt:168 -msgid "``len(s)``" -msgstr "``len(s)``" - -#: ../../src/basics/stdtypes.txt:168 -msgid "length of *s*" -msgstr "довжина *s*" - -#: ../../src/basics/stdtypes.txt:170 -msgid "``min(s)``" -msgstr "``min(s)``" - -#: ../../src/basics/stdtypes.txt:170 -msgid "smallest item of *s*" -msgstr "найменший елемент *s*" - -#: ../../src/basics/stdtypes.txt:172 -msgid "``max(s)``" -msgstr "``max(s)``" - -#: ../../src/basics/stdtypes.txt:172 -msgid "largest item of *s*" -msgstr "найбільший елемент *s*" - -#: ../../src/basics/stdtypes.txt:174 -msgid "``s.count(x)``" -msgstr "``s.count(x)``" - -#: ../../src/basics/stdtypes.txt:174 -msgid "total number of occurrences of *x* in *s*" -msgstr "загальна кількість входжень *x* у *s*" - -#: ../../src/basics/stdtypes.txt:176 -msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" - -#: ../../src/basics/stdtypes.txt:176 -msgid "" -"index of the first occurrence of *x* in *s* at or after index *i* and before " -"index *j*" -msgstr "" -"індекс першого входження *x* у *s* на або після індексу *i* та перед " -"індексом *j*" - -#: ../../src/basics/stdtypes.txt:184 -msgid "" -"Sequences can be compared only within each of their types, with the " -"restriction that ranges do not support order comparison. Equality comparison " -"across these types results in inequality, and ordering comparison across " -"these types raises ``TypeError``." -msgstr "" -"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " -"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " -"типами призводить до нерівності, а впорядковане порівняння цих типів " -"викликає ``TypeError``." - -#: ../../src/basics/stdtypes.txt:189 -msgid "" -"Sequences compare lexicographically using comparison of corresponding " -"elements. The built-in containers typically assume identical objects are " -"equal to themselves. Lexicographical comparison between built-in collections " -"works as follows:" -msgstr "" -"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " -"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " -"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " -"таким чином:" - -#: ../../src/basics/stdtypes.txt:194 -msgid "" -"For two collections to compare equal, they must be of the same type, have " -"the same length, and each pair of corresponding elements must compare equal." -msgstr "" -"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " -"мати однакову довжину, і кожна пара відповідних елементів повинна " -"порівнюватися." - -#: ../../src/basics/stdtypes.txt:196 -msgid "" -"Collections that supports order comparison are ordered the same as their " -"first unequal elements. If corresponding element does not exist, the shorter " -"collection is ordered first." -msgstr "" -"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " -"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " -"впорядковується коротша колекція." - -#: ../../src/basics/stdtypes.txt:201 -msgid "Mutable sequence types" -msgstr "Змінні типи послідовностей" - -#: ../../src/basics/stdtypes.txt:206 -msgid "``s[i] = x``" -msgstr "``s[i] = x``" - -#: ../../src/basics/stdtypes.txt:206 -msgid "item *i* of *s* is replaced by *x*" -msgstr "елемент *i* з *s* замінюється на *x*" - -#: ../../src/basics/stdtypes.txt:208 -msgid "``s[i:j] = t``" -msgstr "``s[i:j] = t``" - -#: ../../src/basics/stdtypes.txt:208 -msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" -msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" - -#: ../../src/basics/stdtypes.txt:211 -msgid "``del s[i:j]``" -msgstr "``del s[i:j]``" - -#: ../../src/basics/stdtypes.txt:211 -msgid "same as ``s[i:j] = []``" -msgstr "те саме, що ``s[i:j] = []``" - -#: ../../src/basics/stdtypes.txt:213 -msgid "``s[i:j:k] = t``" -msgstr "``s[i:j:k] = t``" - -#: ../../src/basics/stdtypes.txt:213 -msgid "the elements of *s* are replaced by those of *t* [#]_" -msgstr "елементи *s* замінюються елементами *t* [#]_" - -#: ../../src/basics/stdtypes.txt:215 -msgid "``del s[i:j:k]``" -msgstr "``del s[i:j:k]``" - -#: ../../src/basics/stdtypes.txt:215 -msgid "removes the elements of ``s[i:j:k]`` from the list" -msgstr "видаляє елементи ``s[i:j:k]`` зі списку" - -#: ../../src/basics/stdtypes.txt:217 -msgid "``s.append(x)``" -msgstr "``s.append(x)``" - -#: ../../src/basics/stdtypes.txt:217 -msgid "" -"appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " -"[x]``" -msgstr "" -"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" - -#: ../../src/basics/stdtypes.txt:220 -msgid "``s.clear()``" -msgstr "``s.clear()``" - -#: ../../src/basics/stdtypes.txt:220 -msgid "removes all items from *s* (``del s[:]``) [#py33]_" -msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" - -#: ../../src/basics/stdtypes.txt:222 -msgid "``s.copy()``" -msgstr "``s.copy()``" - -#: ../../src/basics/stdtypes.txt:222 -msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" -msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" - -#: ../../src/basics/stdtypes.txt:224 -msgid "``s.extend(t)`` ``s += t``" -msgstr "``s.extend(t)`` ``s += t``" - -#: ../../src/basics/stdtypes.txt:224 -msgid "extends *s* with the contents of *t*" -msgstr "розширює *s* вмістом *t*" - -#: ../../src/basics/stdtypes.txt:227 -msgid "``s.insert(i, x)``" -msgstr "``s.insert(i, x)``" - -#: ../../src/basics/stdtypes.txt:227 -msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" -msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" - -#: ../../src/basics/stdtypes.txt:230 -msgid "``s.pop()``, ``s.pop(i)``" -msgstr "``s.pop()``, ``s.pop(i)``" - -#: ../../src/basics/stdtypes.txt:230 -msgid "" -"retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " -"use the last one available index)" -msgstr "" -"отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " -"пропущено - використовуйте останній доступний індекс)" - -#: ../../src/basics/stdtypes.txt:233 -msgid "``s.remove(x)``" -msgstr "``s.remove(x)``" - -#: ../../src/basics/stdtypes.txt:233 -msgid "remove the first item that is equal to *x* from *s*" -msgstr "видалити перший елемент, який дорівнює *x*, із *s*" - -#: ../../src/basics/stdtypes.txt:235 -msgid "``s.reverse()``" -msgstr "``s.reverse()``" - -#: ../../src/basics/stdtypes.txt:235 -msgid "reverses the items of *s* in place" -msgstr "перевертає елементи *s* на місце" - -#: ../../src/basics/stdtypes.txt:238 -msgid "*t* must have the same length as the slice it is replacing" -msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" - -#: ../../src/basics/stdtypes.txt:239 -msgid "new in Python version 3.3" -msgstr "нове у версії Python 3.3" - -#: ../../src/basics/stdtypes.txt:242 -msgid "Text sequence type" -msgstr "Тип текстової послідовності" - -#: ../../src/basics/stdtypes.txt:245 -msgid "String methods" -msgstr "Рядкові методи" - -#: ../../src/basics/stdtypes.txt:247 -msgid "" -"Strings implement all of the common sequence operations, along with the " -"additional methods." -msgstr "" -"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " -"методами." - -#: ../../src/basics/stdtypes.txt:292 -msgid "" -"Strings compare lexicographically using the numerical Unicode code points of " -"their characters." -msgstr "" -"Рядки порівнюються лексикографічно з використанням числових кодових точок " -"Unicode своїх символів." - -#: ../../src/basics/stdtypes.txt:296 -msgid "Set types" -msgstr "Типи сетів" - -#: ../../src/basics/stdtypes.txt:301 -msgid "" -"Sets (instances of ``set`` or ``frozenset``) can be compared within and " -"across their types. They define order comparison operators to mean subset " -"and superset tests. Those relations do not define total ordering (e.g. two " -"sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " -"nor supersets of one another)." -msgstr "" -"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " -"між типами. Вони визначають оператори порівняння порядку, щоб проходити " -"тести підмножини та надмножини. Ці відношення не визначають загального " -"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " -"підмножини одного іншого, ані надмножини один одного)." - -#: ../../src/basics/stdtypes.txt:308 -msgid "Mapping type" -msgstr "Тип відображення" - -#: ../../src/basics/stdtypes.txt:310 -msgid "" -"A mapping object maps hashable values to arbitrary objects. Mappings are " -"mutable objects. There is currently ony one standard mapping type, the " -"*dictionary*. In few words mappings are collections of keys and their values." -msgstr "" -"Об'єкт зіставлення зіставляє хешовані значення з довільними об'єктами. " -"Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " -"відображення, *dictionary*. Якщо кількома словами, то відображення - це " -"набори ключів та їхніх значень." - -#: ../../src/basics/stdtypes.txt:314 -msgid "" -"A dictionary's keys are almost arbitrary values. Values that are not " -"hashable may not be used as keys. Values that compare equal (such as ``1``, " -"``1.0`` and ``True``) can be used interchangeably to index the same " -"dictionary entry." -msgstr "" -"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " -"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " -"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " -"тієї самої словникової статті." - -#: ../../src/basics/stdtypes.txt:318 -msgid "Dictionaries can be created by several means:" -msgstr "Словники можна створювати кількома способами:" - -#: ../../src/basics/stdtypes.txt:320 -msgid "Use braces to denote the empty dictionary: ``{}``" -msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" - -#: ../../src/basics/stdtypes.txt:321 -msgid "" -"Use a comma-separated list of ``key: value`` pairs with braces: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" -msgstr "" -"Використовуйте розділений комами список пар ``key: value`` з дужками: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" - -#: ../../src/basics/stdtypes.txt:323 -msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" -msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" - -#: ../../src/basics/stdtypes.txt:324 -msgid "" -"Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " -"``dict(key=100)``" -msgstr "" -"Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " -"``dict(key=100)``" - -#: ../../src/basics/stdtypes.txt:330 -msgid "" -"Instances of ``dict`` compare equal if and only if they have equal key-value " -"pairs." -msgstr "" -"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " -"однакові пари ключ-значення." - -#: ../../src/basics/stdtypes.txt:333 -msgid "Order comparisons raise ``TypeError``." -msgstr "Порівняння порядку викликає ``TypeError``." - -#: ../../src/basics/syntax.txt:-1 -msgid "Python syntax" -msgstr "Синтаксис Python" - -#: ../../src/basics/syntax.txt:-1 -msgid "python, basics, syntax" -msgstr "python, basics, syntax" - -#: ../../src/basics/syntax.txt:8 -msgid "Python Syntax" -msgstr "Синтаксис Python" - -#: ../../src/basics/syntax.txt:10 -msgid "" -"As a natural language like English or Ukrainian has its own rules to write " -"down something, programming languages do. This makes them programming " -"**languages**." -msgstr "" -"Оскільки природна мова, як-от англійська чи українська, має власні правила " -"запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " -"мовами програмування." - -#: ../../src/basics/syntax.txt:14 -msgid "" -"A programming language syntax is the set of rules and principles that govern " -"how code is written and structured in a given programming language. Syntax " -"encompasses the rules for writing statements, expressions, variables, data " -"types, control structures, and other constructs that make up the language." -msgstr "" -"Синтаксис мови програмування - це набір правил і принципів, які регулюють " -"написання та структурування коду даною мовою програмування. Синтаксис " -"охоплює правила написання операторів, виразів, змінних, типів даних, " -"керуючих структур та інших конструкцій, які складають мову." - -#: ../../src/basics/syntax.txt:19 -msgid "" -"The syntax of a programming language defines how code is organized and " -"interpreted by a compiler or interpreter. It defines the rules for writing " -"valid statements and expressions that can be understood and executed by the " -"language's runtime system." -msgstr "" -"Синтаксис мови програмування визначає, як код організовується та " -"інтерпретується компілятором або інтерпретатором. Він визначає правила " -"написання дійсних операторів і виразів, які можуть бути зрозумілі та " -"виконані системою виконання мови." - -#: ../../src/basics/syntax.txt:24 -msgid "" -"A programming language's syntax is designed to be both readable and " -"expressive, allowing programmers to write code that is easy to understand " -"and modify. Syntax often influences the style and structure of code, as well " -"as its maintainability and performance." -msgstr "" -"Синтаксис мови програмування розроблено таким чином, щоб він був читабельним " -"і виразним, дозволяючи програмістам писати код, який легко зрозуміти та " -"змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " -"його зручність обслуговування та продуктивність." - -#: ../../src/basics/syntax.txt:29 -msgid "" -"Different programming languages have different syntax, with some languages " -"being more concise and expressive than others. While syntax is an important " -"aspect of a programming language, it is only one of several factors that " -"determine its ease of use, flexibility, and suitability for different " -"programming tasks." -msgstr "" -"Різні мови програмування мають різний синтаксис, при цьому деякі мови є " -"більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " -"аспектом мови програмування, він є лише одним із кількох факторів, які " -"визначають її легкість у використанні, гнучкість і придатність для різних " -"завдань програмування." - -#: ../../src/basics/syntax.txt:35 -msgid "" -"In the case of Python, the language's syntax defines how code is written and " -"structured in a way that is consistent, readable, and easy to understand. A " -"general overview is provided below, no need to dive deep in this now. All of " -"the following is to be discussed during the course. So, some of the key " -"aspects of Python's syntax include:" -msgstr "" -"У випадку Python синтаксис мови визначає, як код буде написаний і " -"структурований таким чином, щоб він був послідовним, читабельним і легким " -"для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " -"занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " -"курсу. Отже, деякі з ключових аспектів синтаксису Python включають:" - -#: ../../src/basics/syntax.txt -msgid "Indentation" -msgstr "Відступ" - -#: ../../src/basics/syntax.txt:42 -msgid "" -"Python uses whitespace, specifically indentation, to delimit blocks of code, " -"such as loops, conditionals, and functions. This means that the indentation " -"level of a line determines which block of code it belongs to." -msgstr "" -"Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " -"таких як цикли, умови та функції. Це означає, що рівень відступу рядка " -"визначає, до якого блоку коду він належить." - -#: ../../src/basics/syntax.txt -msgid "Statement structure" -msgstr "Структура коду" - -#: ../../src/basics/syntax.txt:48 -msgid "" -"Python statements are typically written on one line, with the end of the " -"line indicating the end of the statement. However, if a statement is too " -"long to fit on one line, it can be continued across multiple lines using " -"backslashes." -msgstr "" -"Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " -"вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " -"поміститися в один рядок, його можна продовжити в кількох рядках, " -"використовуючи зворотні похилі риски." - -#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:8 -msgid "Variables" -msgstr "Змінні" - -#: ../../src/basics/syntax.txt:54 -msgid "" -"In Python, variables are created automatically when a value is assigned to " -"them, and their type is inferred from the value. Variables can be assigned " -"values of different types, including integers, floats, strings, and more " -"complex data structures like lists and dictionaries." -msgstr "" -"У Python змінні створюються автоматично, якщо їм присвоюється значення, і " -"їхній тип визначається на основі значення. Змінним можна присвоювати " -"значення різних типів, включаючи цілі числа, числа з плаваючою комою, рядки " -"та складніші структури даних, такі як списки та словники." - -#: ../../src/basics/syntax.txt -msgid "Operators" -msgstr "Оператори" - -#: ../../src/basics/syntax.txt:60 -msgid "" -"Python supports a wide range of operators for performing arithmetic, " -"comparison, and logical operations. These include arithmetic operators like " -"``+``, ``-``, ``*``, and ``/``, as well as comparison operators like ``<``, " -"``>``, ``==``, and ``!=``." -msgstr "" -"Python підтримує широкий спектр операторів для виконання арифметичних, " -"порівнянь і логічних операцій. До них належать арифметичні оператори, такі " -"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як " -"``<`` , ``>``, ``==`` і ``!=``." - -#: ../../src/basics/syntax.txt -msgid "Control flow" -msgstr "Контроль потоку" - -#: ../../src/basics/syntax.txt:66 -msgid "" -"Python provides control flow statements like if, else, elif, for, and while " -"to control the flow of execution in a program. These statements are used to " -"make decisions, repeat code, or perform actions based on conditions." -msgstr "" -"Python надає оператори потоку керування, як-от if, else, elif, for та while, " -"для керування потоком виконання в програмі. Ці оператори використовуються " -"для прийняття рішень, повторення коду або виконання дій на основі заданих " -"умов." - -#: ../../src/basics/syntax.txt:72 -msgid "" -"In Python, functions are defined using the def keyword and can take " -"arguments and return values. The body of a function is defined using a block " -"of indented code." -msgstr "" -"У Python функції визначаються за допомогою ключового слова def і можуть " -"отримувати аргументи та повертати значення. Тіло функції визначається за " -"допомогою блоку коду з відступами." - -#: ../../src/basics/syntax.txt -msgid "Modules" -msgstr "Модулі" - -#: ../../src/basics/syntax.txt:77 -msgid "" -"Python has a large library of modules that provide pre-written code for a " -"variety of tasks. Modules can be imported into a program using the import " -"statement." -msgstr "" -"Python має велику бібліотеку модулів, які містять попередньо написаний код " -"для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " -"оператора імпорту." - -#: ../../src/basics/syntax.txt:82 -msgid "" -"Python provides a way to handle errors and exceptions in a program using the " -"try, except, else, and finally keywords. These statements allow a program to " -"gracefully recover from errors and continue executing." -msgstr "" -"Python надає спосіб обробки помилок і винятків у програмі за допомогою " -"ключових слів try, except, else і finally. Ці оператори дозволяють програмі " -"плавно відновлюватися після помилок і продовжувати виконання." - -#: ../../src/basics/syntax.txt:86 -msgid "In few words:" -msgstr "У кількох словах:" - -#: ../../src/basics/syntax.txt:88 -msgid "Input/Output example script" -msgstr "Приклад сценарію Input/Output" - -#: ../../src/basics/syntax.txt:107 -msgid "" -"The code snippet above demonstrates some basics abilities of Python to " -"gather data from the user, process it and print out back. Note the words " -"starting with a # (hash) symbol. This is a comment. Any sequence of " -"characters after the hash and till the line end are considered to be a " -"comment. These are for those people, who see the code and they are ignored " -"by the interpreter." -msgstr "" -"Наведений вище фрагмент коду демонструє деякі основні можливості Python " -"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть увагу " -"на слова, що починаються символом #(решітка). Це коментар. Будь-яка " -"послідовність символів після хеша і до кінця рядка вважається коментарем. Це " -"необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " -"інтерпретатор їх ігнорує." - -#: ../../src/basics/syntax.txt:113 -msgid "" -"On the other hand each individual line is the instruction for the " -"interpreter to perform some action, like gather inputs, do math, store data " -"in memory etc." -msgstr "" -"З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " -"певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " -"збереження даних у пам'яті тощо." - -#: ../../src/basics/testing.txt:-1 -msgid "Testing software in Python" -msgstr "Тестування в Python" - -#: ../../src/basics/testing.txt:-1 -msgid "python, testing, unittest, pytest" -msgstr "python, testing, unittest, pytest" - -#: ../../src/basics/testing.txt:16 -msgid "Testing" -msgstr "Тестування" - -#: ../../src/basics/variables.txt:-1 -msgid "Variables in programming" -msgstr "Змінні в програмуванні" - -#: ../../src/basics/variables.txt:-1 -msgid "programming, basics, variables" -msgstr "programming, basics, variables" - -#: ../../src/basics/variables.txt:10 -msgid "" -"In computer science a **variable** is a named storage location in memory " -"that can hold a value (*data*). The value stored in a variable can be " -"changed or accessed by the program during its execution." -msgstr "" -"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " -"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " -"змінено або доступне програмою під час її виконання." - -#: ../../src/basics/variables.txt:14 -msgid "" -"In Python, variables are created dynamically once a value is assigned to " -"them. This makes Python a dynamically typed language, which means that the " -"data type of a variable is inferred from the value assigned to it. So, you " -"do not need to declare a variable before using it, as in statically typed " -"languages." -msgstr "" -"У Python змінні створюються динамічно після присвоєння їм значення. Це " -"робить Python динамічно типізованою мовою, а це означає, що тип даних " -"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " -"оголошувати змінну перед її використанням, як у статично типізованих мовах." - -#: ../../src/basics/variables.txt:19 -msgid "" -"The ability to create variables dynamically and infer their data type makes " -"Python code more concise and easier to read. However, it also requires " -"careful attention to variable naming and assignment to avoid unexpected " -"behavior." -msgstr "" -"Можливість динамічно створювати змінні та виводити їхні типи даних робить " -"код Python більш лаконічним і легшим для читання. Однак це також вимагає " -"пильної уваги до іменування та призначення змінних, щоб уникнути " -"неочікуваної поведінки." - -#: ../../src/basics/variables.txt:23 -msgid "" -"In Python ``=`` (assignment operator) is used to set a value to some " -"variable, the portion on the left of the operator is a *variable name* and " -"the portion on the right is a *value* to assign to a variable." -msgstr "" -"У Python ``=`` (оператор присвоєння) використовується для встановлення " -"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " -"частина праворуч - це значення, яке призначається для неї." - -#: ../../src/basics/variables.txt:27 -msgid "Variable assignment in Python" -msgstr "Присвоєння змінної в Python" - -#: ../../src/basics/variables.txt:34 -msgid "Variable assignment in Java" -msgstr "Присвоєння змінної в Java" - -#: ../../src/basics/variables.txt:42 -msgid "Naming" -msgstr "Присвоєння назви" - -#: ../../src/basics/variables.txt:44 -msgid "" -"In Python there are several rules that describe how to name your variables. " -"Some of these are requirements and cannot be ignored, others are rather " -"recommended than required and can be omitted. For now note, that a variable " -"name **cannot**:" -msgstr "" -"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " -"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " -"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" - -#: ../../src/basics/variables.txt:49 -msgid "a language keyword (like ``pass``, ``def`` or ``class``)" -msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" - -#: ../../src/basics/variables.txt:50 -msgid "start with a number (e.g. ``123``, ``1_something``)" -msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" - -#: ../../src/basics/variables.txt:51 -msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" -msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" - -#: ../../src/basics/variables.txt:52 -msgid "contain white spaces" -msgstr "містити пробіли" - -#: ../../src/basics/variables.txt:54 -msgid "Also here are some general recommendation on naming anything:" -msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" - -#: ../../src/basics/variables.txt:56 -msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" -msgstr "" -"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " -"42``)" - -#: ../../src/basics/variables.txt:57 -msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" -msgstr "" -"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" - -#~ msgid "Data Types" -#~ msgstr "Типи Даних" - -#~ msgid "" -#~ "Data may represent different things and require various operations " -#~ "available. In programming data types is an important concept. For example " -#~ "**1984** may be a number (``1984``), a text (``\"1984\"``) or event a " -#~ "date. The data type describes the operations, that are allowed for the " -#~ "data, like additions for numbers or concatenation for text (e.g. ``1 + 2 -" -#~ "> 3``, ``\"1\" + \"3\" -> \"13\"``)." -#~ msgstr "" -#~ "Дані можуть представляти різні речі та вимагати різноманітних " -#~ "доступнихоперацій. У програмуванні типи даних є важливою концепцією. " -#~ "Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984\"`` ) " -#~ "або подією чи датою. Тип даних описує можливі операції, дозволені для " -#~ "даних, як-от додавання чисел або конкатенація для тексту (наприклад, ``1 " -#~ "+ 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." - -#~ msgid "" -#~ "Python uses dynamic typing. This means as a developer you should not " -#~ "declare a variable with its data type - the interpreter will do this for " -#~ "you. Other popular language using dynamic typing are JavaScript and PHP. " -#~ "Setting variables in Python is as easy as:" -#~ msgstr "" -#~ "Python використовує динамічну типізацію. Це означає, що ви, як розробник, " -#~ "не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " -#~ "за вас. Іншими популярними мовами, які використовують динамічну " -#~ "типізацію, є JavaScript і PHP. Налаштування змінних у Python доволі " -#~ "просто, як: " - -#~ msgid "Built-In Data Types" -#~ msgstr "Вбудовані типи даних" - -#~ msgid "Python has the following data types built-in:" -#~ msgstr "Python має такі вбудовані типи даних:" - -#~ msgid "Integers (``int``)" -#~ msgstr "Цілі числа (``int``)" - -#~ msgid "Floating-point numbers (``float``)" -#~ msgstr "Числа з плаваючою крапкою (``float``)" - -#~ msgid "Complex numbers (``complex``)" -#~ msgstr "Комплексні числа (``complex``)" - -#~ msgid "Booleans (``bool``)" -#~ msgstr "Логічні значення (``bool``)" - -#~ msgid "Strings (``str``)" -#~ msgstr "Рядки (``str``)" - -#~ msgid "Bytes (``bytes``)" -#~ msgstr "Байти (``bytes``)" - -#~ msgid "Byte arrays (``bytearray``)" -#~ msgstr "Масиви байтів (``bytearray``)" - -#~ msgid "Lists (``list``)" -#~ msgstr "Списки (``list``)" - -#~ msgid "Tuples (``tuple``)" -#~ msgstr "Кортежі (``tuple``)" - -#~ msgid "Sets (``set``)" -#~ msgstr "Cети (``set``)" - -#~ msgid "Frozen sets (``frozenset``)" -#~ msgstr "Заморожені сети (``frozenset``)" - -#~ msgid "Dictionaries (``dict``)" -#~ msgstr "Словники (``dict``)" - -#~ msgid "None (``NoneType``)" -#~ msgstr "Жодного (``NoneType``)" - -#~ msgid "" -#~ "Any one can use them without additional imports or packages installations." -#~ msgstr "" -#~ "Будь-хто може використовувати їх без додаткового імпорту чи встановлення " -#~ "пакетів. " - -#~ msgid "Text" -#~ msgstr "Текстові дані" - -#~ msgid "" -#~ "Text data are stored as strings (``str`` data type) in Python. Any " -#~ "sequence of letters, digits, punctuation marks and whitespace characters " -#~ "enclosed with quotes is considered to be a string literal. Both single " -#~ "quotes (``'``) and double quotes (``\"``) can be used interchangeably to " -#~ "create a string in Python." -#~ msgstr "" -#~ "Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-" -#~ "яка послідовність літер, цифр, знаків пунктуації та пробілів, взята в " -#~ "лапки, вважається рядковим літералом. Обидві одинарні лапки (``'``) або " -#~ "подвійні лапки (``\"``) можна взаємозамінно використовувати для створення " -#~ "рядків." - -#~ msgid "Escaping" -#~ msgstr "Екранування" - -#~ msgid "" -#~ "In programming this is a process of using a special character to indicate " -#~ "that the following character(s) should be treated differently from their " -#~ "literal meaning. The common usage is to include a special character(s) " -#~ "within strings. A **backslash** character is used to *escape* the " -#~ "following one." -#~ msgstr "" -#~ "У програмуванні це процес використання спеціального символу, щоб вказати, " -#~ "що наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне " -#~ "значення. Загальне використання полягає в тому, щоб включити " -#~ "спеціальний(і) символ(и) в рядки. Символ **backslash** використовується " -#~ "для екранування наступного. " - -#~ msgid "Example of Escaping in Python" -#~ msgstr "Приклади Екранування в Python" - -#~ msgid "Single quotes or double quotes" -#~ msgstr "Одинарні або подвійні лапки" - -#~ msgid "" -#~ "Don't care. Use any quote mark you like. A *string* is a sequence of " -#~ "characters after the opening quote and till the closing one. You may use " -#~ "double quotes in case a single quote is a part of the text (e.g. ``\"It's " -#~ "a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship was " -#~ "a \"Billy of Tea\"'``). It's a good practice not to mess single and " -#~ "double quotes within one project. Just keep using a chosen one character " -#~ "for all strings." -#~ msgstr "" -#~ "Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " -#~ "після початкової лапки та до кінцевої. Ви можете використовувати подвійні " -#~ "лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " -#~ "Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of " -#~ "Tea\"'``). Рекомендується не плутати одинарні та подвійні лапки в одному " -#~ "проекті. Просто продовжуйте використовувати один вибраний символ для всіх " -#~ "рядків. " - -#~ msgid "Multiline strings" -#~ msgstr "Багатострічкові рядки" - -#~ msgid "" -#~ "You can assign a multiline string by using triple quotes: Both single " -#~ "quote and double quote characters are available." -#~ msgstr "" -#~ "Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: " -#~ "в середині них доступні як одинарні, так і подвійні лапки. " - -#~ msgid "" -#~ "The same syntax is used to create docstring, which are a special case of " -#~ "string usage. We will look on these in the future." -#~ msgstr "" -#~ "Такий самий синтаксис використовується для створення рядка документації, " -#~ "який є окремим випадком використання рядка. Ми розглянемо це в " -#~ "майбутньому. " - -#~ msgid "This subsection describes only the most common operations." -#~ msgstr "У цьому розділі описано лише найпоширеніші операції. " - -#~ msgid "Concatenation" -#~ msgstr "Конкатинація" - -#~ msgid "" -#~ "The ``+`` operator is used to concatenate (join) two or more strings." -#~ msgstr "" -#~ "Оператор ``+`` використовується для конкатенації (об'єднання) двох або " -#~ "більше рядків. " - -#~ msgid "" -#~ "On the other hand the ``join`` method concatenates a collection of " -#~ "strings, which may be more efficient than using ``+``." -#~ msgstr "" -#~ "З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " -#~ "ефективнішим, ніж використання ``+``. " - -#~ msgid "Repetition" -#~ msgstr "Повторення" - -#~ msgid "" -#~ "The ``*`` operator is used to repeat a string a specified number of " -#~ "times. Only multipliers of the ``int`` type are allowed." -#~ msgstr "" -#~ "Оператор ``*`` використовується для повторення рядка вказану кількість " -#~ "разів. Дозволені операції лише з множниками типу ``int``. " - -#~ msgid "Length" -#~ msgstr "Довжина" - -#~ msgid "The ``len`` function is used to find the length of a string." -#~ msgstr "Функція ``len`` використовується для визначення довжини рядка." - -#~ msgid "Case conversion" -#~ msgstr "Перетворення регістру" - -#~ msgid "" -#~ "The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " -#~ "actions on case." -#~ msgstr "" -#~ "Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " -#~ "зміною регістра. " - -#~ msgid "``lower`` creates a new string with all lower-case characters." -#~ msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." - -#~ msgid "``upper`` creates a new string with all upper-case characters." -#~ msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." - -#~ msgid "" -#~ "``capitalize`` creates a new string with the upper-case 1st character." -#~ msgstr "" -#~ "``capitalize`` створює новий рядок із першим символом у верхньому " -#~ "регістрі. " - -#~ msgid "``title`` will make all characters after whitespace upper case." -#~ msgstr "``title`` зробить усі символи після пробілів верхнім регістром." - -#~ msgid "Stripping" -#~ msgstr "Зачистка" - -#~ msgid "" -#~ "The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " -#~ "leading and/or trailing whitespace characters." -#~ msgstr "" -#~ "Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " -#~ "початкових і/або кінцевих пробільних символів. " - -#~ msgid "Strings are subscriptable" -#~ msgstr "Рядки можна підписувати" - -#~ msgid "``str`` is not the only one subscriptable data type in Python." -#~ msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." - -#~ msgid "" -#~ "This means you can access individual characters or slices within a string " -#~ "using indexes. A string is a *sequence* of characters and each character " -#~ "within a string has its own position - an *index*. Indexing starts at 0, " -#~ "so the first character in a string is at index 0, the second one is at " -#~ "index 1, and so on. Negative indexing is also possible, with -1 " -#~ "representing the last character in a string, -2 representing the second-" -#~ "to-last character, and so on. Use square brackets (``[]``) to access the " -#~ "index." -#~ msgstr "" -#~ "Це означає, що ви можете отримати доступ до окремих символів або " -#~ "фрагментів у рядку за допомогою індексів. Рядок — це послідовність " -#~ "символів, і кожен символ у рядку має власну позицію — індекс. Індексація " -#~ "починається з 0, отже, перший символ у рядку має індекс 0, другий - " -#~ "індекс 1 і так далі. Також можливе від'ємне індексування, коли -1 " -#~ "представляє останній символ у рядку, а -2 представляє передостанній " -#~ "символ і так далі. Використовуйте квадратні дужки (``[]``), щоб отримати " -#~ "доступ до індексу. " - -#~ msgid "" -#~ "You can also *slice* strings, this means to get a subsequence of " -#~ "characters. The slice syntax consists of 3 digits:" -#~ msgstr "" -#~ "Ви також можете *розрізати* рядки, тобто отримати підпослідовність " -#~ "символів. Синтаксис фрагмента складається з 3 цифр: " - -#~ msgid "" -#~ "the first one represent the index to start (inclusive), defaults to 0" -#~ msgstr "" -#~ "Перший представляє початковий індекс (включно), за замовчанням дорівнює " -#~ "0. " - -#~ msgid "" -#~ "the second one represent the index to stop (non-inclusive), defaults to " -#~ "the length of the sequence" -#~ msgstr "" -#~ "Другий представляє індекс для зупинки (не включно), за замовчуванням " -#~ "довжина послідовності. " - -#~ msgid "the third one represents a step, defaults to 1" -#~ msgstr "Третій представляє крок, за замовчуванням 1." - -#~ msgid "" -#~ "These numbers are separated within colon (``:``) and enclosed within " -#~ "square brackets. Any slice digit may be omitted." -#~ msgstr "" -#~ "Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " -#~ "цифра зрізу може бути упущена. " - -#~ msgid "Sequence slicing" -#~ msgstr "Нарізка послідовності" - -#~ msgid "Strings are iterable" -#~ msgstr "Рядки можна повторювати" - -#~ msgid "" -#~ "Since strings are arrays, we can loop through the characters in a string " -#~ "with a ``for`` loop:" -#~ msgstr "" -#~ "Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " -#~ "допомогою циклу ``for``: " - -#~ msgid "Strings are immutable" -#~ msgstr "Рядки незмінні" - -#~ msgid "" -#~ "This means, you cannot change an individual character within a string." -#~ msgstr "Це означає, що ви не можете змінити окремий символ у рядку." - -#~ msgid "Integers" -#~ msgstr "Цілі числа" - -#~ msgid "" -#~ "``int``, or integer, is a whole number, positive or negative, without " -#~ "decimals." -#~ msgstr "" -#~ "``int``, тобто ціле число, може бути додатнім або від'ємним, без " -#~ "десяткових знаків. " - -#~ msgid "Floats" -#~ msgstr "Числа з плаваючою комою" - -#~ msgid "" -#~ "``float``, or floating point number, is a number, positive or negative, " -#~ "containing one or more decimals." -#~ msgstr "" -#~ "``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, " -#~ "що містить один або більше десяткових знаків. " diff --git a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po new file mode 100644 index 000000000..87a1dff07 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po @@ -0,0 +1,508 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/bool_logic.txt:-1 +msgid "this document covers usage of logic and comparison operators in Python" +msgstr "" +"цей документ охоплює використання логіки та операторів порівняння в Python" + +#: ../../src/basics/bool_logic.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/bool_logic.txt:-1 +msgid "python, boolean, logic, comparison, operator" +msgstr "python, boolean, logic, comparison, operator" + +#: ../../src/basics/bool_logic.txt:14 +msgid "Boolean Logic" +msgstr "Булева Логіка" + +#: ../../src/basics/bool_logic.txt:20 +msgid "" +"`George Boole`_ put together what is now known as `Boolean algebra`_, which " +"relies on **true** and **false** values and define a set of boolean " +"operations: **not**, **and**, and **or**." +msgstr "" +"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " +"спирається на значення **true** і **false** і визначає набір логічних " +"операцій: **not**, **and** і **or**." + +#: ../../src/basics/bool_logic.txt:24 +msgid "" +"These Boolean values and operators are helpful in programming because they " +"help you decide the course of action in your programs." +msgstr "" +"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " +"допомагають визначити курс дій у ваших програмах." + +#: ../../src/basics/bool_logic.txt:27 +msgid "" +"The **Python boolean** type is one of Python's built-in data types. It's " +"used to represent the truth value of an expression. For example, the " +"expression ``1 < 2`` is ``True``, while the expression ``0 == 1`` is " +"``False``. Understanding how Python Boolean values behave is important to " +"programming well in Python." +msgstr "" +"Тип **Python boolean** є одним із вбудованих типів даних Python. Він " +"використовується для представлення істиності значення виразу. Наприклад, " +"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " +"того, як поводяться логічні значення Python, є важливим для якісного " +"програмування на Python." + +#: ../../src/basics/bool_logic.txt:34 +msgid "Understanding Boolean" +msgstr "Розбираємось з Логічним типом даних" + +#: ../../src/basics/bool_logic.txt:36 +msgid "The Boolean type has only two possible values:" +msgstr "Логічний тип має лише два можливих значення:" + +#: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:119 +#: ../../src/basics/bool_logic.txt:121 ../../src/basics/bool_logic.txt:147 +#: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 +#: ../../src/basics/bool_logic.txt:189 ../../src/basics/bool_logic.txt:193 +#: ../../src/basics/bool_logic.txt:195 +msgid "``True``" +msgstr "``True``" + +#: ../../src/basics/bool_logic.txt:39 ../../src/basics/bool_logic.txt:119 +#: ../../src/basics/bool_logic.txt:121 ../../src/basics/bool_logic.txt:149 +#: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 +#: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:193 +#: ../../src/basics/bool_logic.txt:195 +msgid "``False``" +msgstr "``False``" + +#: ../../src/basics/bool_logic.txt:41 +msgid "No other value will have ``bool`` as it type." +msgstr "Жодне інше значення не матиме тип ``bool``." + +#: ../../src/basics/bool_logic.txt:50 +msgid "" +"The type ``bool`` is **built-in**, meaning it's always available in Python. " +"``True`` and ``False`` are keywords in Python and can't be used as variable " +"names. but ``bool`` type isn't and it's possible assign to the name " +"``bool``, however this is considered bad style." +msgstr "" +"Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " +"і ``False`` є ключовими словами в Python і не можуть використовуватися як " +"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " +"значення, однак це вважається поганим стилем." + +#: ../../src/basics/bool_logic.txt:56 +msgid "Boolean as numbers" +msgstr "Boolean як число" + +#: ../../src/basics/bool_logic.txt:58 +msgid "" +"Booleans are a subtype of **numeric** type in Python. This means they're " +"numbers for all intents and purposes. In other words, you can apply " +"arithmetic operations to Boolean, and you can also compare them to numbers. " +"``True`` value is treated to be 1, and ``False`` value is treated to be 0." +msgstr "" +"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " +"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " +"арифметичні операції до логічних значень, а також порівнювати їх із числами. " +"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " +"0." + +#: ../../src/basics/bool_logic.txt:63 +msgid "There aren't many uses of the numerical nature of Boolean values." +msgstr "" +"Числовій природі логічних значень можна знайти не так багато застосунків." + +#: ../../src/basics/bool_logic.txt:66 +msgid "Truth value testing" +msgstr "Перевірка істинності" + +#: ../../src/basics/bool_logic.txt:68 +msgid "" +"Any object can be tested for truth value. By default an object considered " +"``True``, unless its class defines either. Here are most of built-in objects " +"considered ``False``:" +msgstr "" +"Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " +"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " +"вбудованих об'єктів, які вважаються ``False``:" + +#: ../../src/basics/bool_logic.txt:72 +msgid "constant values: ``None`` and ``False``" +msgstr "константи: ``None`` та ``False``" + +#: ../../src/basics/bool_logic.txt:73 +msgid "" +"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" +msgstr "" +"нуль будь-якого числового типу: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" + +#: ../../src/basics/bool_logic.txt:75 +msgid "" +"empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " +"``range(0)``." +msgstr "" +"порожні послідовності та колекції: ``''``, ``[]``, ``()``, ``{}``, " +"``set()``, ``range(0)``." + +#: ../../src/basics/bool_logic.txt:80 +msgid "" +"If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " +"as ``False``." +msgstr "" +"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " +"``bool`` як ``False``." + +#: ../../src/basics/bool_logic.txt:84 +msgid "Boolean comparison" +msgstr "Логічне Порівняння" + +#: ../../src/basics/bool_logic.txt:86 +msgid "Python provides 3 logical operators:" +msgstr "Python надає 3 логічних оператори:" + +#: ../../src/basics/bool_logic.txt:92 ../../src/basics/bool_logic.txt:226 +msgid "Operator" +msgstr "Оператор" + +#: ../../src/basics/bool_logic.txt:92 +msgid "Logic operator" +msgstr "Логічний оператор" + +#: ../../src/basics/bool_logic.txt:94 +msgid "``not``" +msgstr "``not``" + +#: ../../src/basics/bool_logic.txt:94 +msgid "Negation" +msgstr "Заперечення" + +#: ../../src/basics/bool_logic.txt:96 +msgid "``and``" +msgstr "``and``" + +#: ../../src/basics/bool_logic.txt:96 +msgid "Conjunction" +msgstr "Кон'юнкція" + +#: ../../src/basics/bool_logic.txt:98 +msgid "``or``" +msgstr "``or``" + +#: ../../src/basics/bool_logic.txt:98 +msgid "Disjunction" +msgstr "Диз'юнкція" + +#: ../../src/basics/bool_logic.txt:101 +msgid "" +"With these operators, you can build expressions by connecting Boolean " +"expressions with each other. These operators are **keywords** of the " +"language, so you cannot use them as identifiers without causing a " +"*SyntaxError*." +msgstr "" +"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " +"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " +"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." + +#: ../../src/basics/bool_logic.txt:106 +msgid "Getting started with ``not`` operator" +msgstr "Початок роботи з оператором ``not``" + +#: ../../src/basics/bool_logic.txt:108 +msgid "" +"The ``not`` operator is the Boolean or logic operator that implements " +"negation in Python. It's **unary**, which means that it takes only one " +"**operand**. The operand can be a Boolean expression or any Python object. " +"The task of ``not`` is to reverse the truth value of its operand." +msgstr "" +"Оператор ``not`` є логічним або логічним оператором, який реалізує " +"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " +"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " +"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " +"операнда." + +#: ../../src/basics/bool_logic.txt:113 +msgid "not operator truth table" +msgstr "таблиця істинності оператора not" + +#: ../../src/basics/bool_logic.txt:117 +msgid "``operand``" +msgstr "``operand``" + +#: ../../src/basics/bool_logic.txt:117 +msgid "``not operand``" +msgstr "``not operand``" + +#: ../../src/basics/bool_logic.txt:124 +msgid "This functionality makes it worthwhile in several situations:" +msgstr "Ця функція доцільна в кількох ситуаціях:" + +#: ../../src/basics/bool_logic.txt:127 +msgid "" +"Checking **unmet conditions** in the context of ``if`` statements and " +"``while`` loops" +msgstr "" +"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " +"``while``" + +#: ../../src/basics/bool_logic.txt:129 +msgid "**Inverting the truth value** of an object or expression" +msgstr "**Інвертування значення істинності** об'єкта чи виразу" + +#: ../../src/basics/bool_logic.txt:130 +msgid "Checking if a **value is not in a given container**" +msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" + +#: ../../src/basics/bool_logic.txt:131 +msgid "Checking for an **object's identity**" +msgstr "Перевірка **ідентичності об'єкта**" + +#: ../../src/basics/bool_logic.txt:134 +msgid "Getting started with ``and`` operator" +msgstr "Початок роботи з оператором ``and``" + +#: ../../src/basics/bool_logic.txt:136 +msgid "" +"Python's ``and`` operator is **binary**, which means it takes two " +"**operands**. The operands in an ``and`` expression are commonly known as " +"*conditions*. The result of the operator depends on the truth values of its " +"operands. It'll be ``True`` if **both** are true." +msgstr "" +"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " +"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " +"Результат оператора залежить від істинних значень його операндів. Це буде " +"``True``, якщо **обидва** є істинними." + +#: ../../src/basics/bool_logic.txt:141 +msgid "and operator truth table" +msgstr "таблиця істинності оператора and" + +#: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +msgid "``operand_1``" +msgstr "``operand_1``" + +#: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +msgid "``operand_2``" +msgstr "``operand_2``" + +#: ../../src/basics/bool_logic.txt:145 +msgid "``operand_1 and operand_2``" +msgstr "``operand_1 and operand_2``" + +#: ../../src/basics/bool_logic.txt:156 +msgid "" +"``and`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``and`` працює не тільки з операндами логічного типу. Його " +"поведінка:" + +#: ../../src/basics/bool_logic.txt:159 +msgid "evaluate 1st operand; return it, if it's ``False`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:160 +msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:161 ../../src/basics/bool_logic.txt:203 +msgid "return 2nd operand" +msgstr "повернути 2-й операнд" + +#: ../../src/basics/bool_logic.txt:175 +msgid "Getting started with ``or`` operator" +msgstr "Початок роботи з оператором ``or``" + +#: ../../src/basics/bool_logic.txt:177 +msgid "" +"With Boolean ``or`` operator, you can connect two Boolean expressions into " +"one compound expression. This makes ``or`` the **binary** operator. At least " +"one subexpression must be ``True`` for the compound expression to be " +"considered ``True``, and it doesn't matter which. If both subexpressions are " +"``False``, then the expression is ``False``." +msgstr "" +"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " +"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " +"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " +"``True``, і не має значення який. Якщо обидва підвирази мають значення " +"``False``, тоді вираз є ``False``." + +#: ../../src/basics/bool_logic.txt:183 +msgid "or operator truth table" +msgstr "таблиця істинності оператора or" + +#: ../../src/basics/bool_logic.txt:187 +msgid "``operand_1 or operand_2``" +msgstr "``operand_1 or operand_2``" + +#: ../../src/basics/bool_logic.txt:198 +msgid "" +"``or`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" + +#: ../../src/basics/bool_logic.txt:201 +msgid "evaluate 1st operand; return it, if it's ``True`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:202 +msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:217 +msgid "Comparison" +msgstr "Порівняння" + +#: ../../src/basics/bool_logic.txt:219 +msgid "" +"There are eight comparison operations in Python. They all have the same " +"priority (which is higher than that of the Boolean operations)." +msgstr "" +"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " +"(вищий, ніж у логічних операцій)." + +#: ../../src/basics/bool_logic.txt:222 +msgid "Comparison operators" +msgstr "Оператори порівняння" + +#: ../../src/basics/bool_logic.txt:226 +msgid "Meaning" +msgstr "Значення" + +#: ../../src/basics/bool_logic.txt:228 +msgid "``<``" +msgstr "``<``" + +#: ../../src/basics/bool_logic.txt:228 +msgid "strictly less than" +msgstr "строго менше ніж" + +#: ../../src/basics/bool_logic.txt:230 +msgid "``<=``" +msgstr "``<=``" + +#: ../../src/basics/bool_logic.txt:230 +msgid "less than or equal" +msgstr "менше або дорівнює" + +#: ../../src/basics/bool_logic.txt:232 +msgid "``>``" +msgstr "``>``" + +#: ../../src/basics/bool_logic.txt:232 +msgid "strictly greater than" +msgstr "строго більше ніж" + +#: ../../src/basics/bool_logic.txt:234 +msgid "``>=``" +msgstr "``>=``" + +#: ../../src/basics/bool_logic.txt:234 +msgid "greater or equal" +msgstr "більше або дорівнює" + +#: ../../src/basics/bool_logic.txt:236 +msgid "``==``" +msgstr "``==``" + +#: ../../src/basics/bool_logic.txt:236 +msgid "equal (aka *equality* comparison)" +msgstr "дорівнює (також відоме як порівняння *equality*)" + +#: ../../src/basics/bool_logic.txt:238 +msgid "``!=``" +msgstr "``!=``" + +#: ../../src/basics/bool_logic.txt:238 +msgid "not equal" +msgstr "не дорівнює" + +#: ../../src/basics/bool_logic.txt:240 +msgid "``is``" +msgstr "``is``" + +#: ../../src/basics/bool_logic.txt:240 +msgid "object identity" +msgstr "ідентичність об'єкта" + +#: ../../src/basics/bool_logic.txt:242 +msgid "``is not``" +msgstr "``is not``" + +#: ../../src/basics/bool_logic.txt:242 +msgid "negated object identity" +msgstr "заперечена ідентичність об'єкта" + +#: ../../src/basics/bool_logic.txt:245 +msgid "" +"Each of these comparison operators return a Boolean value, it's always " +"``True`` or ``False``." +msgstr "" +"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " +"``True`` або ``False``." + +#: ../../src/basics/bool_logic.txt:248 +msgid "" +"You can chain comparison operators together: ``x < y < z`` is equal to ``x < " +"y and y < z``." +msgstr "" +"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " +"< z``." + +#: ../../src/basics/bool_logic.txt:252 +msgid "Equality vs Identity" +msgstr "Рівність та Ідентичність" + +#: ../../src/basics/bool_logic.txt:254 +msgid "" +"It's easier to understand the difference between those by asking the " +"question each answers to." +msgstr "" +"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " +"відповідає." + +#: ../../src/basics/bool_logic.txt:257 +msgid "The question for ``==`` (*equality*) is:" +msgstr "Питання для ``==`` (*equality*) таке:" + +#: ../../src/basics/bool_logic.txt:259 +msgid "Is object on the left **equal** to the object on the right" +msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" + +#: ../../src/basics/bool_logic.txt:261 +msgid "The question for ``is`` (*identity*) is:" +msgstr "Питання для ``is`` (*identity*) таке:" + +#: ../../src/basics/bool_logic.txt:263 +msgid "Is object on the left **the same** as the object on the right" +msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" + +#: ../../src/basics/bool_logic.txt:265 +msgid "" +"For example, if there are two cars of the same model, same color etc. in " +"front of you - these cars are equal, but they aren't ident to each other. " +"But if you are shown two pictures of the same car, you understand that the " +"cars on those pictures are the same object." +msgstr "" +"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " +"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " +"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " +"одним і тим же об'єктом." diff --git a/src/_locales/uk/LC_MESSAGES/basics/controlflow.po b/src/_locales/uk/LC_MESSAGES/basics/controlflow.po new file mode 100644 index 000000000..14e3f63dd --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/controlflow.po @@ -0,0 +1,177 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/controlflow.txt:-1 +msgid "Control flow in Python" +msgstr "Контроль потоку в Python" + +#: ../../src/basics/controlflow.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/controlflow.txt:-1 +msgid "python, basics, control, if, for, while, condition, loop" +msgstr "python, basics, control, if, for, while, condition, loop" + +#: ../../src/basics/controlflow.txt:8 +msgid "Control Flow" +msgstr "Керування виконанням" + +#: ../../src/basics/controlflow.txt:13 +msgid "``if`` statement" +msgstr "Вираз ``if``" + +#: ../../src/basics/controlflow.txt:15 +msgid "" +"Perhaps the most well-known statement type is ``if`` statement. For example:" +msgstr "Мабуть, найвідомішим типом оператора є оператор ``if``. Наприклад:" + +#: ../../src/basics/controlflow.txt:17 +msgid "if statement base example" +msgstr "базовий приклад оператора if" + +#: ../../src/basics/controlflow.txt:31 +msgid "But let's dive into ``if`` statement with more simple examples." +msgstr "" +"Але давайте зануримося в інструкцію ``if`` з більш простими прикладами." + +#: ../../src/basics/controlflow.txt:34 +msgid "How it works" +msgstr "Як це працює" + +#: ../../src/basics/controlflow.txt:36 +msgid "" +"**if** statement is defined with a keyword ``if`` followed by a Boolean " +"expression or any object and finished with colon. The statement requires a " +"*body*: other statements to execute, also called an *if block*. The body is " +"indented at the same distance from the left (in Python we use 4 spaces to " +"indent a single block of code)." +msgstr "" +"Оператор **if** визначається ключовим словом ``if``, за яким слідує логічний " +"вираз або будь-який об'єкт і завершується двокрапкою. Оператор потребує " +"*тіло*: інші оператори для виконання, які також називають блоком *if*. Тіло " +"має відступ на однаковій відстані зліва (у Python ми використовуємо 4 " +"пробіли для відступу одного блоку коду)." + +#: ../../src/basics/controlflow.txt:42 +msgid "" +"The body's statements will be executed only in case **if** expression is " +"``True``." +msgstr "" +"Оператори тіла виконуватимуться лише у випадку, якщо вираз **if** має " +"значення ``True``." + +#: ../../src/basics/controlflow.txt:55 +msgid "" +"The ``print`` statement on line #6 will be executed only for even value of " +"``number`` variable." +msgstr "" +"Оператор ``print`` у рядку #6 буде виконано лише для парного значення " +"змінної ``number``." + +#: ../../src/basics/controlflow.txt:59 +msgid "``else`` block" +msgstr "Блок ``else``" + +#: ../../src/basics/controlflow.txt:61 +msgid "" +"``if`` can be used by its own, it can extend its behavior with ``else`` " +"block. The general syntax for ``else`` body is the same: at least one " +"indented statement. But ``else`` doesn't take any expression after it. This " +"block of code will be executed only that the ``if`` statement truth check " +"fails." +msgstr "" +"``if`` може використовуватися самостійно, він може розширити свою поведінку " +"за допомогою блоку ``else``. Загальний синтаксис для тіла ``else`` той " +"самий: принаймні один оператор із відступом. Але ``else`` не приймає жодного " +"виразу після нього. Цей блок коду буде виконано лише тоді, коли перевірка " +"істинності оператора ``if`` буде невдалою." + +#: ../../src/basics/controlflow.txt:78 +msgid "" +"You can attach **only one** else block to **if statement**. And you cannot " +"use ``else`` statement on its own - this will cause *SyntaxError*." +msgstr "" +"Ви можете приєднати **лише один** блок else до **інструкції if**. І ви не " +"можете використовувати оператор ``else`` сам по собі - це спричинить " +"*SyntaxError*." + +#: ../../src/basics/controlflow.txt:82 +msgid "``elif`` block(s)" +msgstr "Блок(и) ``elif``" + +#: ../../src/basics/controlflow.txt:84 +msgid "" +"``elif`` (*else if*) statement may be considered as semi-statement between " +"``if`` and ``else`` statements. In case your program has more than two " +"dedicated choices you are able to extends control flow by appending ``elif`` " +"blocks after ``if`` statement. The syntax is pretty similar to ``if`` " +"statement. Each ``elif`` has its own boolean expression or an object to test " +"for the truth value." +msgstr "" +"Оператор ``elif`` (*else if*) можна розглядати як напівоператор між ``if`` " +"та ``else``. Якщо у вашій програмі є більше двох виділених варіантів, ви " +"можете розширити потік керування, додавши блоки ``elif`` після оператора " +"``if``. Синтаксис дуже схожий на оператор if. Кожен ``elif`` має свій " +"власний логічний вираз або об'єкт для перевірки значення істинності." + +#: ../../src/basics/controlflow.txt:91 +msgid "" +"You can attach as many ``elif`` statements as it needed. But you cannot use " +"``elif`` without ``if`` statement." +msgstr "" +"Ви можете додати скільки завгодно операторів ``elif``. Але ви не можете " +"використовувати ``elif`` без оператора ``if``." + +#: ../../src/basics/controlflow.txt:94 +msgid "" +"Python will test conditions in ``if`` and ``elif`` statements from top to " +"bottom. The first one, which considered to be ``True`` will be executed. All " +"others will be skipped." +msgstr "" +"Python перевірить умови в операторах ``if`` та ``elif`` зверху вниз. Буде " +"виконано перший, який вважається ``True``. Усі інші будуть проігноровано." + +#: ../../src/basics/controlflow.txt:98 +msgid "" +"If there were no truth conditions ``else`` block will be executed (if " +"exists)." +msgstr "Якщо не було істиних умов, буде виконано блок ``else`` (якщо існує)." + +#: ../../src/basics/controlflow.txt:114 +msgid "" +"The order conditions appears matter. The truth test goes from top to bottom " +"and stops at first expression which is ``True``." +msgstr "" +"Порядок у якому визначено умови має значення. Перевірка істинності йде " +"зверху вниз і зупиняється на першому виразі, який є ``True``." + +#: ../../src/basics/controlflow.txt:119 +msgid "Usage" +msgstr "Використання" + +#: ../../src/basics/controlflow.txt:121 +msgid "" +"``if/elif/else`` statements help you to control which portion of your code " +"is executed based on conditions from outer scope." +msgstr "" +"Оператори ``if/elif/else`` допомагають вам контролювати, яка частина вашого " +"коду виконується на основі умов ззовні." diff --git a/src/_locales/uk/LC_MESSAGES/basics/decorators.po b/src/_locales/uk/LC_MESSAGES/basics/decorators.po new file mode 100644 index 000000000..4fa2fd4d8 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/decorators.po @@ -0,0 +1,391 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/decorators.txt:-1 +msgid "Python decorators" +msgstr "Декоратори в Python" + +#: ../../src/basics/decorators.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/decorators.txt:-1 +msgid "python, basics, decorators" +msgstr "python, basics, decorators" + +#: ../../src/basics/decorators.txt:11 +msgid "Decorators" +msgstr "Декоратори" + +#: ../../src/basics/decorators.txt:13 +msgid "" +"Decorators provide a simple syntax for calling higher-order functions :cite:" +"`realpython:decorators`." +msgstr "" +"Декоратори забезпечують простий синтаксис для виклику функцій вищого " +"порядку :cite:`realpython:decorators`." + +#: ../../src/basics/decorators.txt:18 +msgid "There is some kind of misunderstanding in definitions." +msgstr "Є деяке непорозуміння у визначеннях." + +#: ../../src/basics/decorators.txt:20 +msgid "" +"**Decorator** is a function returning another function, usually applied as a " +"function transformation using the ``@wrapper`` syntax :cite:`docs-python:" +"term-decorator`." +msgstr "" +"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " +"застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" +"cite:`docs-python:term-decorator`." + +#: ../../src/basics/decorators.txt:24 +msgid "" +"However, that's no quit enough to describe it. The more complete definition " +"is:" +msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" + +#: ../../src/basics/decorators.txt:27 +msgid "" +"**Decorator** is a structural design pattern that lets you attach new " +"behaviors to objects by placing these objects inside special wrapper objects " +"that contain the behaviors :cite:`refactoring.guru:decorator`." +msgstr "" +"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " +"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " +"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." + +#: ../../src/basics/decorators.txt:31 +msgid "" +"Before you understand decorators, you must first understand how functions " +"work." +msgstr "" +"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " +"функції." + +#: ../../src/basics/decorators.txt:35 +msgid "First-class objects" +msgstr "Об'єкти першого класу" + +#: ../../src/basics/decorators.txt:37 +msgid "" +"In Python functions are `first-class objects`_. Everything in Python is an " +"object. Functions are objects too." +msgstr "" +"У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " +"Функції також є об'єктами." + +#: ../../src/basics/decorators.txt:41 +msgid "Inner functions" +msgstr "Внутрішні функції" + +#: ../../src/basics/decorators.txt:43 +msgid "" +"Functions can be nested. This means it is possible to define functions " +"inside other functions." +msgstr "" +"Функції можуть бути вкладеними. Це означає, що можна визначати функції " +"всередині інших функцій." + +#: ../../src/basics/decorators.txt:46 +msgid "Nested functions example" +msgstr "Приклад вкладених функцій" + +#: ../../src/basics/decorators.txt:60 +msgid "" +"The order in which inner functions are defined no matters. The function " +"definition does not execute the function body; this gets executed only when " +"the function is called. Furthermore, the inner functions are not defined " +"until the parent function is called. They are locally scoped to their " +"parent. Trying to call ``heapify`` function outside of ``heap_sort`` will " +"cause ``NameError`` exception." +msgstr "" +"Порядок визначення внутрішніх функцій не має значення. Визначення функції не " +"виконує тіло функції; це виконується лише під час виклику функції. Крім " +"того, внутрішні функції не визначені, доки не буде викликана батьківська " +"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " +"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " +"``NameError``." + +#: ../../src/basics/decorators.txt:68 +msgid "Functions are objects" +msgstr "Функції є об'єктами" + +#: ../../src/basics/decorators.txt:70 +msgid "" +"This means functions can be passed around and used as arguments, just like " +"any other object (e.g. *int*, *str* etc.)." +msgstr "" +"Це означає, що функції можна передавати й використовувати як аргументи, як і " +"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." + +#: ../../src/basics/decorators.txt:95 +msgid "Returning functions" +msgstr "Повернення функцій" + +#: ../../src/basics/decorators.txt:97 +msgid "" +"Since function can be passed as an argument, it may be returned from another " +"function." +msgstr "" +"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " +"функції." + +#: ../../src/basics/decorators.txt:120 +msgid "``parent`` returns functions themselves, there are no parentheses." +msgstr "``parent`` повертає самі функції, тут нема дужок." + +#: ../../src/basics/decorators.txt:122 +msgid "" +"After running the code snippet above, ``first`` refers the ``first_child`` " +"function from the inner ``parent`` scope. From now it can be used to call " +"the target function it refers." +msgstr "" +"Після виконання наведеного вище фрагмента коду ``first`` посилається на " +"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " +"можна використовувати для виклику цільової функції, на яку він посилається." + +#: ../../src/basics/decorators.txt:134 +msgid "Simple decorators" +msgstr "Прості декоратори" + +#: ../../src/basics/decorators.txt:136 +msgid "" +"Now you're ready to move on and see the magical beast that is the Python " +"decorators. Let's start with a simple example:" +msgstr "" +"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " +"Python. Почнемо з простого прикладу:" + +#: ../../src/basics/decorators.txt:154 +msgid "Running function:" +msgstr "Запуск функцій:" + +#: ../../src/basics/decorators.txt:165 +msgid "" +"The common way to use decorators is to replace the original function with a " +"decorated one:" +msgstr "" +"Поширеним способом використання декораторів є заміна оригінальної функції на " +"декоровану:" + +#: ../../src/basics/decorators.txt:176 +msgid "" +"``say_hello`` function is the reference to the ``decorator.." +"wrapper``, which itself is bound to the original ``say_hello`` function. " +"There is a syntactic sugar to do this, called *pie-syntax*. The following " +"example does exact the same things as the first decorator example:" +msgstr "" +"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " +"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " +"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " +"ті самі речі, що й перший приклад декоратора:" + +#: ../../src/basics/decorators.txt:198 +msgid "" +"There is no way to *undecorate* object in Python. Once something is bound to " +"the decorator's wrapper - it is decorated forever." +msgstr "" +"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " +"обгортки декоратора - воно прикрашене назавжди." + +#: ../../src/basics/decorators.txt:201 +msgid "" +"A decorated function still remains a **function**. So, it can be decorated " +"once more time again, and again, and again..." +msgstr "" +"Декорована функція все ще залишається **функцією**. Отже, його можна " +"прикрашати ще раз, і ще, і ще..." + +#: ../../src/basics/decorators.txt:253 +msgid "" +"\"Wrapper\" is the alternative nickname for the Decorator pattern that " +"clearly expresses the main idea of the pattern. A wrapper is an object that " +"can be linked with some target object. The wrapper contains the same set of " +"methods as the target and delegates to it all requests it receives. However, " +"the wrapper may alter the result by doing something either before or after " +"it passes the request to the target." +msgstr "" +"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " +"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " +"деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " +"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " +"результат, зробивши щось до або після того, як вона передає запит цільовому " +"об'єкту." + +#: ../../src/basics/decorators.txt:261 +msgid "Passing arguments to the wrapper" +msgstr "Передача аргументів до wrapper" + +#: ../../src/basics/decorators.txt:263 +msgid "" +"Until now the examples use *simple* decorators. But what if the decorated " +"function gets some arguments? This will cause ``TypeError`` exception that " +"tell that \"arguments are missed\". This can be fixed with just passing " +"arguments to the ``wrapper`` inner function." +msgstr "" +"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " +"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " +"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " +"аргументи внутрішній функції ``wrapper``." + +#: ../../src/basics/decorators.txt:289 +msgid "" +"If case you're trying to make a generic decorator, you may pass ``*args`` " +"and ``**kwargs`` instead of exact arguments:" +msgstr "" +"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " +"``*args`` і ``**kwargs`` замість точних аргументів:" + +#: ../../src/basics/decorators.txt:308 +msgid "Passing arguments to decorator" +msgstr "Передача аргументів декоратору" + +#: ../../src/basics/decorators.txt:310 +msgid "" +"At last it's time to know how to pass arguments to the decorator. Here is a " +"simple implementation of ``defer`` decorator which deferred the function " +"execution for some time:" +msgstr "" +"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " +"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " +"час:" + +#: ../../src/basics/decorators.txt:353 +msgid "Class decorators" +msgstr "Декоратори класів" + +#: ../../src/basics/decorators.txt:355 +msgid "" +"There are some pre-defined decorators exists for usage together with " +"classes. They are:" +msgstr "" +"Існують деякі попередньо визначені декоратори для використання разом із " +"класами. Це:" + +#: ../../src/basics/decorators.txt:358 +msgid "``classmethod``" +msgstr "``classmethod``" + +#: ../../src/basics/decorators.txt:359 +msgid "``staticmethod``" +msgstr "``staticmethod``" + +#: ../../src/basics/decorators.txt:360 +msgid "``property``" +msgstr "``property``" + +#: ../../src/basics/decorators.txt:362 +msgid "" +"If you develop an intuitive understanding for their differences you'll be " +"able to write object-oriented Python that communicates its intent more " +"clearly and will be easier to maintain in the long run :cite:`realpython:" +"methods-demystified`." +msgstr "" +"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " +"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " +"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" +"methods-demystified`." + +#: ../../src/basics/decorators.txt:368 +msgid "Class methods" +msgstr "Методи класу" + +#: ../../src/basics/decorators.txt:370 +msgid "" +"Instead of accepting a ``self`` parameter, class methods take a ``cls`` " +"parameter that points to the class — and not the object instance — when the " +"method is called." +msgstr "" +"Замість того, щоб приймати параметр self, під час виклику методу методи " +"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " +"класу." + +#: ../../src/basics/decorators.txt:374 +msgid "" +"Because the class method only has access to this ``cls`` argument, it can't " +"modify object instance state. That would require access to ``self``. " +"However, class methods can still modify class state that applies across all " +"instances of the class." +msgstr "" +"Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " +"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " +"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " +"екземплярів класу." + +#: ../../src/basics/decorators.txt:379 +msgid "" +"The common usage for ``classmethod`` is provide alternative initializers." +msgstr "" +"Загальним використанням ``методи класу`` є надання альтернативних " +"ініціалізаторів." + +#: ../../src/basics/decorators.txt:382 +msgid "Static methods" +msgstr "Статичні методи" + +#: ../../src/basics/decorators.txt:384 +msgid "" +"This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " +"course it's free to accept an arbitrary number of other parameters)." +msgstr "" +"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " +"він може приймати будь-яку кількість інших параметрів)." + +#: ../../src/basics/decorators.txt:387 +msgid "" +"Therefore a static method can neither modify object state nor class state. " +"Static methods are restricted in what data they can access - and they're " +"primarily a way to namespace your methods." +msgstr "" +"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " +"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " +"і вони, перш за все, є способом простору імен ваших методів." + +#: ../../src/basics/decorators.txt:391 +msgid "" +"It's tricky to explain ``staticmethod`` usage. Almost always you can create " +"a dedicated function instead of static method. But sometimes you need to " +"bind some logic independent from class itself or its instances to a class - " +"it common to encapsulate it with ``staticmethod``." +msgstr "" +"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " +"створити спеціальну функцію замість статичного методу. Але іноді вам " +"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " +"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." + +#: ../../src/basics/decorators.txt:397 +msgid "Properties" +msgstr "Властивості" + +#: ../../src/basics/decorators.txt:399 +msgid "" +"It's a way to bind a method name to access it as an attribute. Properties " +"are **read-only** by default. This means a value cannot be assigned to " +"``property member``." +msgstr "" +"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " +"замовчуванням властивості доступні **лише для читання**. Це означає, що " +"значення не можна призначити ``члену властивості``." + +#: ../../src/basics/decorators.txt:404 +msgid "Some examples" +msgstr "Деякі приклади" diff --git a/src/_locales/uk/LC_MESSAGES/basics/exceptions.po b/src/_locales/uk/LC_MESSAGES/basics/exceptions.po new file mode 100644 index 000000000..7a9c165bc --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/exceptions.po @@ -0,0 +1,380 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/exceptions.txt:-1 +msgid "Handling exceptions in Python" +msgstr "Опрацювання винятків в Python" + +#: ../../src/basics/exceptions.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/exceptions.txt:-1 +msgid "python, exceptions, handling, try, except, finally" +msgstr "python, exceptions, handling, try, except, finally" + +#: ../../src/basics/exceptions.txt:11 +msgid "Errors and Exceptions" +msgstr "Помилки та винятки" + +#: ../../src/basics/exceptions.txt:13 +msgid "" +"There are (at least) two distinguishable kinds of errors: *syntax errors* " +"and *exceptions* :cite:`docs-python:errors`." +msgstr "" +"Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" +"cite:`docs-python:errors`." + +#: ../../src/basics/exceptions.txt:17 +msgid "Syntax errors" +msgstr "Синтаксичні помилки" + +#: ../../src/basics/exceptions.txt:19 +msgid "Syntax errors are also known as parsing errors." +msgstr "Синтаксичні помилки також відомі як помилки Python парсера." + +#: ../../src/basics/exceptions.txt:29 +msgid "" +"The parser repeats the offending line and displays a little \"arrow\" " +"pointing at the earliest point in the line where the error was detected. The " +"error is caused by (or at least detected at) the token preceding the arrow." +msgstr "" +"Синтаксичний аналізатор повторює неправильний рядок і відображає маленьку " +"\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " +"Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." + +#: ../../src/basics/exceptions.txt:34 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../src/basics/exceptions.txt:36 +msgid "" +"Even if a statement or expression is syntactically correct, it may cause an " +"error when an attempt is made to execute it. Errors detected during " +"execution are called exceptions and are not unconditionally fatal: you will " +"soon learn how to handle them in Python programs." +msgstr "" +"Навіть якщо оператор або вираз синтаксично правильний, це може спричинити " +"помилку під час спроби його виконання. Помилки, виявлені під час виконання, " +"називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " +"обробляти в програмах на Python." + +#: ../../src/basics/exceptions.txt:41 +msgid "" +"Exceptions come in different types, and the type is printed as part of the " +"message." +msgstr "" +"Винятки бувають різних типів, і тип друкується як частина повідомлення." + +#: ../../src/basics/exceptions.txt:44 +msgid "For example, the ``div`` function implemented as" +msgstr "Наприклад, функція ``div``, реалізована як" + +#: ../../src/basics/exceptions.txt:53 +msgid "" +"may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " +"parameter." +msgstr "" +"може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " +"``y``." + +#: ../../src/basics/exceptions.txt:56 +msgid "" +"Standard exception names are built-in identifiers (not reserved keywords)." +msgstr "" +"Стандартні назви винятків є вбудованими ідентифікаторами (а не " +"зарезервованими ключовими словами)." + +#: ../../src/basics/exceptions.txt:58 +msgid "The list of `built-in exceptions`_" +msgstr "Список `вбудованих винятків`_" + +#: ../../src/basics/exceptions.txt:61 +msgid "Tracebacks" +msgstr "Відстеження" + +#: ../../src/basics/exceptions.txt:63 +msgid "\"File\" is replaced with a *dummy string* within the examples." +msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." + +#: ../../src/basics/exceptions.txt:65 +msgid "Let's assume the following modules structure:" +msgstr "Припустимо наступну структуру модулів:" + +#: ../../src/basics/exceptions.txt:73 +msgid "" +"The **main** module imports a ``div`` function implemented above from the " +"**func** module. The code in main is implemented as follows:" +msgstr "" +"Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " +"**func**. Основний код реалізовано наступним чином:" + +#: ../../src/basics/exceptions.txt:85 +msgid "" +"While running the code with correct inputs it will work fine. But there are " +"at two exceptions for this script." +msgstr "" +"Під час виконання коду з правильними введеннями він працюватиме нормально. " +"Але для цього сценарію є два винятки." + +#: ../../src/basics/exceptions.txt:88 +msgid "" +"The first one is related on type conversion. While running the main script " +"there is case of invalid input." +msgstr "" +"Перший пов'язаний з перетворенням типів. Під час виконання основного " +"сценарію є випадок неправильного введення." + +#: ../../src/basics/exceptions.txt:100 +msgid "" +"Note the **traceback** indicates the module and the exact line of code that " +"causes the exception." +msgstr "" +"Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " +"викликає виняток." + +#: ../../src/basics/exceptions.txt:103 +msgid "" +"The second one exception occurs when a 0 is passed as the second parameter " +"to ``div`` function. The traceback would look like:" +msgstr "" +"Другий виняток виникає, коли 0 передається як другий параметр функції " +"``div``. Трасування виглядатиме так:" + +#: ../../src/basics/exceptions.txt:117 +msgid "" +"The traceback indicates all calls (top to bottom) that cause an exception." +msgstr "" +"Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " +"виняток." + +#: ../../src/basics/exceptions.txt:120 +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/exceptions.txt:122 +msgid "" +"It is possible to write programs that handle selected exceptions. The " +"``try`` statement is used to do that." +msgstr "" +"Можна писати програми, які оброблятимуть вибрані винятки. Для цього " +"використовується інструкція ``try``." + +#: ../../src/basics/exceptions.txt:125 +msgid "The try statement works as follows." +msgstr "Інструкція try працює наступним чином." + +#: ../../src/basics/exceptions.txt:127 +msgid "" +"First, the try clause (the statement(s) between the try and except keywords) " +"is executed." +msgstr "" +"Спочатку виконується речення try (вираз(и) між ключовими словами try і " +"except)." + +#: ../../src/basics/exceptions.txt:129 +msgid "" +"If no exception occurs, the except clause is skipped and execution of the " +"try statement is finished." +msgstr "" +"Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " +"оператора try завершується." + +#: ../../src/basics/exceptions.txt:131 +msgid "" +"If an exception occurs during execution of the try clause, the rest of the " +"clause is skipped. Then, if its type matches the exception named after the " +"except keyword, the except clause is executed, and then execution continues " +"after the try/except block." +msgstr "" +"Якщо під час виконання try виникає виняток, решта пропозиції пропускається. " +"Потім, якщо його тип збігається з винятком, названим за ключовим словом " +"osim, виконується пропозиція, а потім виконання продовжується після блоку " +"try/except." + +#: ../../src/basics/exceptions.txt:135 +msgid "" +"If an exception occurs which does not match the exception named in the " +"except clause, it is passed on to outer try statements; if no handler is " +"found, it is an unhandled exception and execution stops with a message as " +"shown above." +msgstr "" +"Якщо виникає виняток, який не збігається з винятком, названим у реченні " +"винятку, він передається зовнішнім операторам try; якщо обробник не " +"знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " +"повідомленням, як показано вище." + +#: ../../src/basics/exceptions.txt:152 +msgid "" +"A try statement may have more than one except clause, to specify handlers " +"for different exceptions." +msgstr "" +"Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " +"різних винятків." + +#: ../../src/basics/exceptions.txt:182 +msgid "Handling ALL exception" +msgstr "Опрацювання усіх винятків" + +#: ../../src/basics/exceptions.txt:184 +msgid "It's a bad practice to handle **all** exceptions." +msgstr "Обробляти **всі** винятки – це погана практика." + +#: ../../src/basics/exceptions.txt:186 +msgid "" +"When indicating an ``except`` block without specifying an exception to catch " +"it will work for any exception, that occurs in ``try`` block. The same is " +"relevant for handling ``BaseException`` and ``Exception``. But you can never " +"say what exact goes wrong." +msgstr "" +"Якщо вказати блок ``except`` без визначення винятку для перехоплення, він " +"працюватиме для будь-якого винятку, який виникає в блоці ``try``. Те саме " +"стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " +"можливо сказати, який саме виняток стався." + +#: ../../src/basics/exceptions.txt:191 +msgid "" +"However, this scenario may work for logging an exception and raising it " +"again to be handled on upper levels." +msgstr "" +"Проте, такий сценарій може працювати для логування винятків, після чого вони " +"підійматься заново, щоб бути опрацьованими на вищих рівнях програми." + +#: ../../src/basics/exceptions.txt:213 +msgid "" +"All exceptions are inherited from ``Exception`` class, which is subclass of " +"``BaseException``. So, you can never know what exactly goes wrong with your " +"code." +msgstr "" +"Усі винятки успадковуються від класу ``Exception``, який є підкласом " +"``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " +"вашим кодом." + +#: ../../src/basics/exceptions.txt:218 +msgid "``finally`` statement" +msgstr "Вираз ``finally``" + +#: ../../src/basics/exceptions.txt:220 +msgid "" +"The ``try`` statement cannot be used itself. This will cause " +"``SyntaxError``. Either ``except`` or ``finally`` block is required to be " +"included." +msgstr "" +"Оператор ``try`` не може бути використаний сам по собі. Це спричинить " +"``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." + +#: ../../src/basics/exceptions.txt:223 +msgid "" +"While the ``except`` block tries to catch the exceptions if any, the " +"``finally`` block will be always executed regardless of the exception occurs." +msgstr "" +"У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " +"блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." + +#: ../../src/basics/exceptions.txt:249 +msgid "``else`` statement" +msgstr "Вираз ``else``" + +#: ../../src/basics/exceptions.txt:251 +msgid "" +"The ``try`` statement can also use ``else`` (which is optional). The " +"statements within this block will be execute only in case there were no " +"exceptions raised while running the ``try``." +msgstr "" +"Оператор ``try`` також може використовувати ``else`` (який є " +"необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " +"якщо під час виконання ``try`` не було викликано винятків." + +#: ../../src/basics/exceptions.txt:273 +msgid "Raising exceptions" +msgstr "Винятки: raising" + +#: ../../src/basics/exceptions.txt:275 +msgid "" +"The ``raise`` statement allows the programmer to force a specified exception " +"to occur. The sole argument to raise indicates the exception to be raised. " +"This must be either an exception instance or an exception class (a class " +"that derives from ``BaseException``, such as ``Exception`` or one of its " +"subclasses). If an exception class is passed, it will be implicitly " +"instantiated by calling its constructor with no arguments." +msgstr "" +"Інструкція ``raise`` дозволяє програмісту примусово викликати певний " +"виняток. Єдиний аргумент, який потрібно викликати, вказує на виняток, який " +"потрібно викликати. Це має бути екземпляр винятку або клас винятку (клас, " +"який походить від ``BaseException``, наприклад ``Exception`` або один із " +"його підкласів). Якщо передано клас винятків, він буде неявно створений " +"шляхом виклику його конструктора без аргументів." + +#: ../../src/basics/exceptions.txt:287 +msgid "" +"``raise`` statement itself will re-raise all the exceptions within the " +"context. Also exceptions can be raised again from the ``except`` block. It's " +"a common pattern to catch the exception for loggers and when re-raise it." +msgstr "" +"Сам оператор ``raise`` повторно викличе всі винятки в контексті опрацювання. " +"Крім того, винятки можуть бути викликані знову з блоку ``except``. Це " +"загальний шаблон для перехоплення винятку для реєстрації повідомлення про " +"виняткову ситуацію і повторного його підняття." + +#: ../../src/basics/exceptions.txt:300 +msgid "Creating custom exceptions" +msgstr "Створення винятків" + +#: ../../src/basics/exceptions.txt:302 +msgid "" +"Programs may name their own exceptions by creating a new exception class. " +"Exceptions should typically be derived from the Exception class, either " +"directly or indirectly." +msgstr "" +"Програми можуть називати власні винятки, створюючи новий клас винятків. " +"Винятки зазвичай мають бути похідними від класу Exception, прямо чи " +"опосередковано." + +#: ../../src/basics/exceptions.txt:306 +msgid "" +"Exception classes can be defined which do anything any other class can do, " +"but are usually kept simple, often only offering a number of attributes that " +"allow information about the error to be extracted by handlers for the " +"exception." +msgstr "" +"Можна визначити класи винятків, які роблять усе, що може зробити будь-який " +"інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " +"які дозволяють обробникам витягувати інформацію про помилку для винятку." + +#: ../../src/basics/exceptions.txt:311 +msgid "" +"Most exceptions are defined with names that end in \"Error\", similar to the " +"naming of the standard exceptions." +msgstr "" +"Більшість винятків визначено з іменами, які закінчуються на \"Error\", " +"подібно до назв стандартних винятків." + +#: ../../src/basics/exceptions.txt:314 +msgid "" +"Many standard modules define their own exceptions to report errors that may " +"occur in functions they define." +msgstr "" +"Багато стандартних модулів визначають власні винятки, щоб повідомляти про " +"помилки, які можуть виникнути у функціях, які вони визначають." + +#: ../../src/basics/exceptions.txt:317 +msgid "User-defined exception" +msgstr "Виняток, визначений користувачем" diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po new file mode 100644 index 000000000..61e7878af --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/functions.txt:-1 +msgid "Python functions" +msgstr "Функції в Python" + +#: ../../src/basics/functions.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/functions.txt:-1 +msgid "python, basics, functions" +msgstr "python, basics, functions" + +#: ../../src/basics/functions.txt:6 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/functions.txt:14 +msgid "Functions" +msgstr "Функції" diff --git a/src/_locales/uk/LC_MESSAGES/basics/index.po b/src/_locales/uk/LC_MESSAGES/basics/index.po new file mode 100644 index 000000000..6775d1adb --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/index.po @@ -0,0 +1,36 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/index.txt:-1 +msgid "Python course - Basics" +msgstr "Курс Python - Основи" + +#: ../../src/basics/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/index.txt:-1 +msgid "python, basics, index" +msgstr "python, basics, index" + +#: ../../src/basics/index.txt:8 +msgid "Python Basics" +msgstr "Основи Python" diff --git a/src/_locales/uk/LC_MESSAGES/basics/modules.po b/src/_locales/uk/LC_MESSAGES/basics/modules.po new file mode 100644 index 000000000..01c1fb384 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/modules.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/modules.txt:-1 +msgid "Modules and imports in Python" +msgstr "Модулі та імпорти в Pythons" + +#: ../../src/basics/modules.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/modules.txt:-1 +msgid "python, basics, modules, import" +msgstr "python, basics, modules, import" + +#: ../../src/basics/modules.txt:6 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/modules.txt:14 +msgid "Pythons Modules and Imports" +msgstr "Модулі та імпорт Pythons" diff --git a/src/_locales/uk/LC_MESSAGES/basics/pep8.po b/src/_locales/uk/LC_MESSAGES/basics/pep8.po new file mode 100644 index 000000000..737ef49d8 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/pep8.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/pep8.txt:-1 +msgid "PEP-8 style guide" +msgstr "Керівництво по стилю PEP8" + +#: ../../src/basics/pep8.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/pep8.txt:-1 +msgid "python, style, guide" +msgstr "python, style, guide" + +#: ../../src/basics/pep8.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/pep8.txt:16 +msgid "Style Guides: PEP8" +msgstr "Керівництво по стилю: PEP8" diff --git a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po new file mode 100644 index 000000000..01cdf3130 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po @@ -0,0 +1,728 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "Python built-in types" +msgstr "Вбудовані типи даних в Python" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "python, basics" +msgstr "python, basics" + +#: ../../src/basics/stdtypes.txt:11 +msgid "Built-in Types" +msgstr "Вбудовані типи" + +#: ../../src/basics/stdtypes.txt:13 +msgid "" +"The principal built-in types are numerics, sequences, mappings, classes, " +"instances and exceptions :cite:`docs-python:stdtypes`. This section covers " +"only the most base of them. Others will be discussed in the future within " +"their own topics." +msgstr "" +"Основними вбудованими типами є числа, послідовності, відображення, класи, " +"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " +"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " +"власних тем." + +#: ../../src/basics/stdtypes.txt:19 +msgid "Numeric types" +msgstr "Числові типи" + +#: ../../src/basics/stdtypes.txt:21 +msgid "" +"There are 3 distinct numeric types: *integers*, *floating point numbers*, " +"and *complex numbers*. In addition, Booleans are a subtype of integers. " +"Integers have unlimited precision. Floating point numbers are usually " +"implemented using ``double`` in C. Complex numbers have a real and imaginary " +"part, which are each a floating point number." +msgstr "" +"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " +"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " +"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " +"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " +"кожна з яких є числом з плаваючою комою." + +#: ../../src/basics/stdtypes.txt:27 +msgid "" +"Numbers are created by numeric literals or as the result of built-in " +"functions and operators. Unadorned integer literals (including hex, octal " +"and binary numbers) yield integers. Numeric literals containing a decimal " +"point or an exponent sign yield floating point numbers. Appending ``j`` or " +"``J`` to a numeric literal yields an imaginary number (a complex number with " +"a zero real part) which you can add to an integer or float to get a complex " +"number with real and imaginary parts." +msgstr "" +"Числа створюються за допомогою числових літералів або як результат " +"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " +"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " +"літерали, що містять десяткову кому або знак експоненти, дають числа з " +"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " +"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " +"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " +"з дійсною та уявною частинами." + +#: ../../src/basics/stdtypes.txt:36 +msgid "Supported operations" +msgstr "Операції підтримки" + +#: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 +#: ../../src/basics/stdtypes.txt:209 +msgid "Operation" +msgstr "Операції" + +#: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 +#: ../../src/basics/stdtypes.txt:209 +msgid "Result" +msgstr "Результат" + +#: ../../src/basics/stdtypes.txt:41 +msgid "``x + y``" +msgstr "``x + y``" + +#: ../../src/basics/stdtypes.txt:41 +msgid "sum of *x* and *y*" +msgstr "сума *x* і *y*" + +#: ../../src/basics/stdtypes.txt:43 +msgid "``x - y``" +msgstr "``x - y``" + +#: ../../src/basics/stdtypes.txt:43 +msgid "difference of *x* and *y*" +msgstr "різниця між *x* і *y*" + +#: ../../src/basics/stdtypes.txt:45 +msgid "``x * y``" +msgstr "``x * y``" + +#: ../../src/basics/stdtypes.txt:45 +msgid "product of *x* and *y*" +msgstr "добуток *x* і *y*" + +#: ../../src/basics/stdtypes.txt:47 +msgid "``x / y``" +msgstr "``x / y``" + +#: ../../src/basics/stdtypes.txt:47 +msgid "quotient of *x* and *y*" +msgstr "частка *x* і *y*" + +#: ../../src/basics/stdtypes.txt:49 +msgid "``x // y``" +msgstr "``x // y``" + +#: ../../src/basics/stdtypes.txt:49 +msgid "floored quotient of *x* and *y*" +msgstr "цілочисельне ділення *x* і *y*" + +#: ../../src/basics/stdtypes.txt:51 +msgid "``x % y``" +msgstr "``x % y``" + +#: ../../src/basics/stdtypes.txt:51 +msgid "remainder of ``x / y``" +msgstr "залишок від ділення ``x / y``" + +#: ../../src/basics/stdtypes.txt:53 +msgid "``-x``" +msgstr "``-x``" + +#: ../../src/basics/stdtypes.txt:53 +msgid "*x* negated" +msgstr "*x* від'ємне" + +#: ../../src/basics/stdtypes.txt:55 +msgid "``+x``" +msgstr "``+x``" + +#: ../../src/basics/stdtypes.txt:55 +#, fuzzy +msgid "*x* unchanged" +msgstr "*y* без змін" + +#: ../../src/basics/stdtypes.txt:57 +msgid "``abs(x)``" +msgstr "``abs(x)``" + +#: ../../src/basics/stdtypes.txt:57 +msgid "absolute value or magnitude of *x*" +msgstr "абсолютне значення або величина *x*" + +#: ../../src/basics/stdtypes.txt:59 +msgid "``int(x)``" +msgstr "``int(x)``" + +#: ../../src/basics/stdtypes.txt:59 +msgid "*x* converted to integer" +msgstr "*x* перетворено на ціле число" + +#: ../../src/basics/stdtypes.txt:61 +msgid "``float(x)``" +msgstr "``float(x)``" + +#: ../../src/basics/stdtypes.txt:61 +msgid "*x* converted to floating point" +msgstr "*x* перетворено на число з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:63 +msgid "``complex(re, im)``" +msgstr "``complex(re, im)``" + +#: ../../src/basics/stdtypes.txt:63 +msgid "" +"a complex number with real part *re*, imaginary part *im*. *im* defaults to " +"zero." +msgstr "" +"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " +"замовчуванням на нуль." + +#: ../../src/basics/stdtypes.txt:66 +msgid "``divmod(x, y)``" +msgstr "``divmod(x, y)``" + +#: ../../src/basics/stdtypes.txt:66 +msgid "the pair ``(x // y, x % y)``" +msgstr "об'єднує ``(x // y, x % y)``" + +#: ../../src/basics/stdtypes.txt:68 +msgid "``pow(x, y)`` ``x ** y``" +msgstr "``pow(x, y)`` ``x ** y``" + +#: ../../src/basics/stdtypes.txt:68 +msgid "*x* to the power *y*" +msgstr "*x* у степені *y*" + +#: ../../src/basics/stdtypes.txt:72 +msgid "" +"``x // y`` also referred to as integer division. The resultant value is a " +"whole integer, through the result's type is not necessarily int. The result " +"is always rounded towards minus infinity: ``1 // 2`` is ``0``" +msgstr "" +"``x // y`` також називають цілим діленням. Результуюче значення є цілим " +"числом, через тип результату не обов'язково int. Результат завжди " +"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" + +#: ../../src/basics/stdtypes.txt:77 +msgid "" +"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " +"optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " +"and negative infinity." +msgstr "" +"``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " +"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " +"позитивна та негативна нескінченність." + +#: ../../src/basics/stdtypes.txt:82 +msgid "Code examples" +msgstr "Приклади коду" + +#: ../../src/basics/stdtypes.txt:84 +msgid "Integer numbers" +msgstr "Цілі числа" + +#: ../../src/basics/stdtypes.txt:98 +msgid "Floating point numbers" +msgstr "Числа з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:114 ../../src/basics/stdtypes.txt:187 +#: ../../src/basics/stdtypes.txt:295 ../../src/basics/stdtypes.txt:304 +#: ../../src/basics/stdtypes.txt:333 +msgid "Value comparisons" +msgstr "Порівняння цінностей" + +#: ../../src/basics/stdtypes.txt:116 +msgid "" +"Numbers of built-in numeric types can be compared within and across their " +"types (with the restriction that complex numbers do not support order " +"comparison). Within the limits of the types involved, they compare " +"mathematically correct without loss of precision." +msgstr "" +"Числа вбудованих числових типів можна порівнювати всередині та між типами (з " +"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " +"залучених типів вони порівняються математично правильно без втрати точності." + +#: ../../src/basics/stdtypes.txt:121 +msgid "" +"The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." +"Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" +"number value is false." +msgstr "" +"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " +"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " +"є хибним." + +#: ../../src/basics/stdtypes.txt:125 +msgid "Sequence types" +msgstr "Типи послідовностей" + +#: ../../src/basics/stdtypes.txt:127 +msgid "" +"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " +"Additional sequence types tailored for processing of binary data and text " +"strings are described in dedicated sections." +msgstr "" +"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " +"Додаткові типи послідовностей, призначені для обробки двійкових даних і " +"текстових рядків, описані у інших розділах." + +#: ../../src/basics/stdtypes.txt:132 +msgid "Lists" +msgstr "Списки" + +#: ../../src/basics/stdtypes.txt:134 +msgid "" +"Lists are mutable sequences, typically used to store collections of items. " +"They may be constructed in several ways:" +msgstr "" +"Списки - це змінні послідовності, які зазвичай використовуються для " +"зберігання колекцій елементів. Вони можуть бути побудовані кількома " +"способами:" + +#: ../../src/basics/stdtypes.txt:137 +msgid "using a pair of square brackets to denote the empty list: ``[]``" +msgstr "" +"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" + +#: ../../src/basics/stdtypes.txt:138 +msgid "" +"using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" +msgstr "" +"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " +"b, c]``" + +#: ../../src/basics/stdtypes.txt:139 +msgid "using a list comprehension: ``[x for x in iterable]``" +msgstr "використовуючи генератори списків: ``[x for x in iterable]``" + +#: ../../src/basics/stdtypes.txt:140 +msgid "using the type constructor: ``list()`` or ``list(iterable)``" +msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" + +#: ../../src/basics/stdtypes.txt:143 +msgid "Tuples" +msgstr "Кортежі" + +#: ../../src/basics/stdtypes.txt:145 +msgid "" +"Tuples are immutable sequences, typically used to store collections of data " +"or for cases where an immutable sequence of data is needed (such as allowing " +"storage in a ``set`` or ``dict`` instances). They may be constructed in a " +"number of ways:" +msgstr "" +"Кортежі - це незмінні послідовності, які зазвичай використовуються для " +"зберігання колекцій даних або для випадків, коли потрібна незмінна " +"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " +"``dict``). Вони можуть бути конструйовані декількома способами:" + +#: ../../src/basics/stdtypes.txt:150 +msgid "using a pair of parentheses to denote the empty tuple: ``()``" +msgstr "" +"використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" + +#: ../../src/basics/stdtypes.txt:151 +msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" +msgstr "" +"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " +"c)``" + +#: ../../src/basics/stdtypes.txt:152 +msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" +msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" + +#: ../../src/basics/stdtypes.txt:153 +msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" +msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" + +#: ../../src/basics/stdtypes.txt:156 +msgid "Common operations" +msgstr "Загальні операції" + +#: ../../src/basics/stdtypes.txt:161 +msgid "``x in s`` ``x not in s``" +msgstr "``x in s`` ``x not in s``" + +#: ../../src/basics/stdtypes.txt:161 +msgid "" +"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " +"*x*" +msgstr "" +"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " +"*x*" + +#: ../../src/basics/stdtypes.txt:164 +msgid "``s + t``" +msgstr "``s + t``" + +#: ../../src/basics/stdtypes.txt:164 +msgid "the concatenation of *s* and *t*" +msgstr "конкатенація s і t" + +#: ../../src/basics/stdtypes.txt:166 +msgid "``s * n``" +msgstr "``s * n``" + +#: ../../src/basics/stdtypes.txt:166 +msgid "equivalent to adding *s* to itself *n* times" +msgstr "еквівалентно додаванню *s* до себе *n* разів" + +#: ../../src/basics/stdtypes.txt:168 +msgid "``s[i]``" +msgstr "``s[i]``" + +#: ../../src/basics/stdtypes.txt:168 +msgid "*i*-th item of *s*, origin 0" +msgstr "*i*-й елемент *s*, джерело 0" + +#: ../../src/basics/stdtypes.txt:170 +msgid "``s[i:j]`` ``s[i:j:k]``" +msgstr "``s[i:j]`` ``s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:170 +msgid "" +"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " +"be omitted." +msgstr "" +"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " +"3) можна опустити." + +#: ../../src/basics/stdtypes.txt:173 +msgid "``len(s)``" +msgstr "``len(s)``" + +#: ../../src/basics/stdtypes.txt:173 +msgid "length of *s*" +msgstr "довжина *s*" + +#: ../../src/basics/stdtypes.txt:175 +msgid "``min(s)``" +msgstr "``min(s)``" + +#: ../../src/basics/stdtypes.txt:175 +msgid "smallest item of *s*" +msgstr "найменший елемент *s*" + +#: ../../src/basics/stdtypes.txt:177 +msgid "``max(s)``" +msgstr "``max(s)``" + +#: ../../src/basics/stdtypes.txt:177 +msgid "largest item of *s*" +msgstr "найбільший елемент *s*" + +#: ../../src/basics/stdtypes.txt:179 +msgid "``s.count(x)``" +msgstr "``s.count(x)``" + +#: ../../src/basics/stdtypes.txt:179 +msgid "total number of occurrences of *x* in *s*" +msgstr "загальна кількість входжень *x* у *s*" + +#: ../../src/basics/stdtypes.txt:181 +msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" +msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" + +#: ../../src/basics/stdtypes.txt:181 +msgid "" +"index of the first occurrence of *x* in *s* at or after index *i* and before " +"index *j*" +msgstr "" +"індекс першого входження *x* у *s* на або після індексу *i* та перед " +"індексом *j*" + +#: ../../src/basics/stdtypes.txt:189 +msgid "" +"Sequences can be compared only within each of their types, with the " +"restriction that ranges do not support order comparison. Equality comparison " +"across these types results in inequality, and ordering comparison across " +"these types raises ``TypeError``." +msgstr "" +"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " +"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " +"типами призводить до нерівності, а впорядковане порівняння цих типів " +"викликає ``TypeError``." + +#: ../../src/basics/stdtypes.txt:194 +msgid "" +"Sequences compare lexicographically using comparison of corresponding " +"elements. The built-in containers typically assume identical objects are " +"equal to themselves. Lexicographical comparison between built-in collections " +"works as follows:" +msgstr "" +"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " +"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " +"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " +"таким чином:" + +#: ../../src/basics/stdtypes.txt:199 +msgid "" +"For two collections to compare equal, they must be of the same type, have " +"the same length, and each pair of corresponding elements must compare equal." +msgstr "" +"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " +"мати однакову довжину, і кожна пара відповідних елементів повинна " +"порівнюватися." + +#: ../../src/basics/stdtypes.txt:201 +msgid "" +"Collections that supports order comparison are ordered the same as their " +"first unequal elements. If corresponding element does not exist, the shorter " +"collection is ordered first." +msgstr "" +"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " +"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"впорядковується коротша колекція." + +#: ../../src/basics/stdtypes.txt:206 +msgid "Mutable sequence types" +msgstr "Змінні типи послідовностей" + +#: ../../src/basics/stdtypes.txt:211 +msgid "``s[i] = x``" +msgstr "``s[i] = x``" + +#: ../../src/basics/stdtypes.txt:211 +msgid "item *i* of *s* is replaced by *x*" +msgstr "елемент *i* з *s* замінюється на *x*" + +#: ../../src/basics/stdtypes.txt:213 +msgid "``s[i:j] = t``" +msgstr "``s[i:j] = t``" + +#: ../../src/basics/stdtypes.txt:213 +msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" +msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" + +#: ../../src/basics/stdtypes.txt:216 +msgid "``del s[i:j]``" +msgstr "``del s[i:j]``" + +#: ../../src/basics/stdtypes.txt:216 +msgid "same as ``s[i:j] = []``" +msgstr "те саме, що ``s[i:j] = []``" + +#: ../../src/basics/stdtypes.txt:218 +msgid "``s[i:j:k] = t``" +msgstr "``s[i:j:k] = t``" + +#: ../../src/basics/stdtypes.txt:218 +msgid "the elements of *s* are replaced by those of *t* [#]_" +msgstr "елементи *s* замінюються елементами *t* [#]_" + +#: ../../src/basics/stdtypes.txt:220 +msgid "``del s[i:j:k]``" +msgstr "``del s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:220 +msgid "removes the elements of ``s[i:j:k]`` from the list" +msgstr "видаляє елементи ``s[i:j:k]`` зі списку" + +#: ../../src/basics/stdtypes.txt:222 +msgid "``s.append(x)``" +msgstr "``s.append(x)``" + +#: ../../src/basics/stdtypes.txt:222 +msgid "" +"appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " +"[x]``" +msgstr "" +"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" + +#: ../../src/basics/stdtypes.txt:225 +msgid "``s.clear()``" +msgstr "``s.clear()``" + +#: ../../src/basics/stdtypes.txt:225 +msgid "removes all items from *s* (``del s[:]``) [#py33]_" +msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" + +#: ../../src/basics/stdtypes.txt:227 +msgid "``s.copy()``" +msgstr "``s.copy()``" + +#: ../../src/basics/stdtypes.txt:227 +msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" +msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" + +#: ../../src/basics/stdtypes.txt:229 +msgid "``s.extend(t)`` ``s += t``" +msgstr "``s.extend(t)`` ``s += t``" + +#: ../../src/basics/stdtypes.txt:229 +msgid "extends *s* with the contents of *t*" +msgstr "розширює *s* вмістом *t*" + +#: ../../src/basics/stdtypes.txt:232 +msgid "``s.insert(i, x)``" +msgstr "``s.insert(i, x)``" + +#: ../../src/basics/stdtypes.txt:232 +msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" +msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" + +#: ../../src/basics/stdtypes.txt:235 +msgid "``s.pop()``, ``s.pop(i)``" +msgstr "``s.pop()``, ``s.pop(i)``" + +#: ../../src/basics/stdtypes.txt:235 +msgid "" +"retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " +"use the last one available index)" +msgstr "" +"отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " +"пропущено - використовуйте останній доступний індекс)" + +#: ../../src/basics/stdtypes.txt:238 +msgid "``s.remove(x)``" +msgstr "``s.remove(x)``" + +#: ../../src/basics/stdtypes.txt:238 +msgid "remove the first item that is equal to *x* from *s*" +msgstr "видалити перший елемент, який дорівнює *x*, із *s*" + +#: ../../src/basics/stdtypes.txt:240 +msgid "``s.reverse()``" +msgstr "``s.reverse()``" + +#: ../../src/basics/stdtypes.txt:240 +msgid "reverses the items of *s* in place" +msgstr "перевертає елементи *s* на місце" + +#: ../../src/basics/stdtypes.txt:243 +msgid "*t* must have the same length as the slice it is replacing" +msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" + +#: ../../src/basics/stdtypes.txt:244 +msgid "new in Python version 3.3" +msgstr "нове у версії Python 3.3" + +#: ../../src/basics/stdtypes.txt:247 +msgid "Text sequence type" +msgstr "Тип текстової послідовності" + +#: ../../src/basics/stdtypes.txt:250 +msgid "String methods" +msgstr "Рядкові методи" + +#: ../../src/basics/stdtypes.txt:252 +msgid "" +"Strings implement all of the common sequence operations, along with the " +"additional methods." +msgstr "" +"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " +"методами." + +#: ../../src/basics/stdtypes.txt:297 +msgid "" +"Strings compare lexicographically using the numerical Unicode code points of " +"their characters." +msgstr "" +"Рядки порівнюються лексикографічно з використанням числових кодових точок " +"Unicode своїх символів." + +#: ../../src/basics/stdtypes.txt:301 +msgid "Set types" +msgstr "Типи сетів" + +#: ../../src/basics/stdtypes.txt:306 +msgid "" +"Sets (instances of ``set`` or ``frozenset``) can be compared within and " +"across their types. They define order comparison operators to mean subset " +"and superset tests. Those relations do not define total ordering (e.g. two " +"sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " +"nor supersets of one another)." +msgstr "" +"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " +"між типами. Вони визначають оператори порівняння порядку, щоб проходити " +"тести підмножини та надмножини. Ці відношення не визначають загального " +"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " +"підмножини одного іншого, ані надмножини один одного)." + +#: ../../src/basics/stdtypes.txt:313 +msgid "Mapping type" +msgstr "Тип відображення" + +#: ../../src/basics/stdtypes.txt:315 +msgid "" +"A mapping object maps hashable values to arbitrary objects. Mappings are " +"mutable objects. There is currently ony one standard mapping type, the " +"*dictionary*. In few words mappings are collections of keys and their values." +msgstr "" +"Об'єкт зіставлення зіставляє хешовані значення з довільними об'єктами. " +"Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " +"відображення, *dictionary*. Якщо кількома словами, то відображення - це " +"набори ключів та їхніх значень." + +#: ../../src/basics/stdtypes.txt:319 +msgid "" +"A dictionary's keys are almost arbitrary values. Values that are not " +"hashable may not be used as keys. Values that compare equal (such as ``1``, " +"``1.0`` and ``True``) can be used interchangeably to index the same " +"dictionary entry." +msgstr "" +"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " +"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " +"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " +"тієї самої словникової статті." + +#: ../../src/basics/stdtypes.txt:323 +msgid "Dictionaries can be created by several means:" +msgstr "Словники можна створювати кількома способами:" + +#: ../../src/basics/stdtypes.txt:325 +msgid "Use braces to denote the empty dictionary: ``{}``" +msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" + +#: ../../src/basics/stdtypes.txt:326 +msgid "" +"Use a comma-separated list of ``key: value`` pairs with braces: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" +msgstr "" +"Використовуйте розділений комами список пар ``key: value`` з дужками: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" + +#: ../../src/basics/stdtypes.txt:328 +msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" +msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" + +#: ../../src/basics/stdtypes.txt:329 +msgid "" +"Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)``" +msgstr "" +"Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)``" + +#: ../../src/basics/stdtypes.txt:335 +msgid "" +"Instances of ``dict`` compare equal if and only if they have equal key-value " +"pairs." +msgstr "" +"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " +"однакові пари ключ-значення." + +#: ../../src/basics/stdtypes.txt:338 +msgid "Order comparisons raise ``TypeError``." +msgstr "Порівняння порядку викликає ``TypeError``." diff --git a/src/_locales/uk/LC_MESSAGES/basics/syntax.po b/src/_locales/uk/LC_MESSAGES/basics/syntax.po new file mode 100644 index 000000000..1342ff13f --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/syntax.po @@ -0,0 +1,263 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/syntax.txt:-1 +msgid "Python syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/syntax.txt:-1 +msgid "python, basics, syntax" +msgstr "python, basics, syntax" + +#: ../../src/basics/syntax.txt:8 +msgid "Python Syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:10 +msgid "" +"As a natural language like English or Ukrainian has its own rules to write " +"down something, programming languages do. This makes them programming " +"**languages**." +msgstr "" +"Оскільки природна мова, як-от англійська чи українська, має власні правила " +"запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " +"мовами програмування." + +#: ../../src/basics/syntax.txt:14 +msgid "" +"A programming language syntax is the set of rules and principles that govern " +"how code is written and structured in a given programming language. Syntax " +"encompasses the rules for writing statements, expressions, variables, data " +"types, control structures, and other constructs that make up the language." +msgstr "" +"Синтаксис мови програмування - це набір правил і принципів, які регулюють " +"написання та структурування коду даною мовою програмування. Синтаксис " +"охоплює правила написання операторів, виразів, змінних, типів даних, " +"керуючих структур та інших конструкцій, які складають мову." + +#: ../../src/basics/syntax.txt:19 +msgid "" +"The syntax of a programming language defines how code is organized and " +"interpreted by a compiler or interpreter. It defines the rules for writing " +"valid statements and expressions that can be understood and executed by the " +"language's runtime system." +msgstr "" +"Синтаксис мови програмування визначає, як код організовується та " +"інтерпретується компілятором або інтерпретатором. Він визначає правила " +"написання дійсних операторів і виразів, які можуть бути зрозумілі та " +"виконані системою виконання мови." + +#: ../../src/basics/syntax.txt:24 +msgid "" +"A programming language's syntax is designed to be both readable and " +"expressive, allowing programmers to write code that is easy to understand " +"and modify. Syntax often influences the style and structure of code, as well " +"as its maintainability and performance." +msgstr "" +"Синтаксис мови програмування розроблено таким чином, щоб він був читабельним " +"і виразним, дозволяючи програмістам писати код, який легко зрозуміти та " +"змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " +"його зручність обслуговування та продуктивність." + +#: ../../src/basics/syntax.txt:29 +msgid "" +"Different programming languages have different syntax, with some languages " +"being more concise and expressive than others. While syntax is an important " +"aspect of a programming language, it is only one of several factors that " +"determine its ease of use, flexibility, and suitability for different " +"programming tasks." +msgstr "" +"Різні мови програмування мають різний синтаксис, при цьому деякі мови є " +"більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " +"аспектом мови програмування, він є лише одним із кількох факторів, які " +"визначають її легкість у використанні, гнучкість і придатність для різних " +"завдань програмування." + +#: ../../src/basics/syntax.txt:35 +msgid "" +"In the case of Python, the language's syntax defines how code is written and " +"structured in a way that is consistent, readable, and easy to understand. A " +"general overview is provided below, no need to dive deep in this now. All of " +"the following is to be discussed during the course. So, some of the key " +"aspects of Python's syntax include:" +msgstr "" +"У випадку Python синтаксис мови визначає, як код буде написаний і " +"структурований таким чином, щоб він був послідовним, читабельним і легким " +"для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " +"занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " +"курсу. Отже, деякі з ключових аспектів синтаксису Python включають:" + +#: ../../src/basics/syntax.txt +msgid "Indentation" +msgstr "Відступ" + +#: ../../src/basics/syntax.txt:42 +msgid "" +"Python uses whitespace, specifically indentation, to delimit blocks of code, " +"such as loops, conditionals, and functions. This means that the indentation " +"level of a line determines which block of code it belongs to." +msgstr "" +"Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " +"таких як цикли, умови та функції. Це означає, що рівень відступу рядка " +"визначає, до якого блоку коду він належить." + +#: ../../src/basics/syntax.txt +msgid "Statement structure" +msgstr "Структура коду" + +#: ../../src/basics/syntax.txt:48 +msgid "" +"Python statements are typically written on one line, with the end of the " +"line indicating the end of the statement. However, if a statement is too " +"long to fit on one line, it can be continued across multiple lines using " +"backslashes." +msgstr "" +"Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " +"вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " +"поміститися в один рядок, його можна продовжити в кількох рядках, " +"використовуючи зворотні похилі риски." + +#: ../../src/basics/syntax.txt +msgid "Variables" +msgstr "Змінні" + +#: ../../src/basics/syntax.txt:54 +msgid "" +"In Python, variables are created automatically when a value is assigned to " +"them, and their type is inferred from the value. Variables can be assigned " +"values of different types, including integers, floats, strings, and more " +"complex data structures like lists and dictionaries." +msgstr "" +"У Python змінні створюються автоматично, якщо їм присвоюється значення, і " +"їхній тип визначається на основі значення. Змінним можна присвоювати " +"значення різних типів, включаючи цілі числа, числа з плаваючою комою, рядки " +"та складніші структури даних, такі як списки та словники." + +#: ../../src/basics/syntax.txt +msgid "Operators" +msgstr "Оператори" + +#: ../../src/basics/syntax.txt:60 +msgid "" +"Python supports a wide range of operators for performing arithmetic, " +"comparison, and logical operations. These include arithmetic operators like " +"``+``, ``-``, ``*``, and ``/``, as well as comparison operators like ``<``, " +"``>``, ``==``, and ``!=``." +msgstr "" +"Python підтримує широкий спектр операторів для виконання арифметичних, " +"порівнянь і логічних операцій. До них належать арифметичні оператори, такі " +"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як " +"``<`` , ``>``, ``==`` і ``!=``." + +#: ../../src/basics/syntax.txt +msgid "Control flow" +msgstr "Контроль потоку" + +#: ../../src/basics/syntax.txt:66 +msgid "" +"Python provides control flow statements like if, else, elif, for, and while " +"to control the flow of execution in a program. These statements are used to " +"make decisions, repeat code, or perform actions based on conditions." +msgstr "" +"Python надає оператори потоку керування, як-от if, else, elif, for та while, " +"для керування потоком виконання в програмі. Ці оператори використовуються " +"для прийняття рішень, повторення коду або виконання дій на основі заданих " +"умов." + +#: ../../src/basics/syntax.txt +msgid "Functions" +msgstr "Функції" + +#: ../../src/basics/syntax.txt:72 +msgid "" +"In Python, functions are defined using the def keyword and can take " +"arguments and return values. The body of a function is defined using a block " +"of indented code." +msgstr "" +"У Python функції визначаються за допомогою ключового слова def і можуть " +"отримувати аргументи та повертати значення. Тіло функції визначається за " +"допомогою блоку коду з відступами." + +#: ../../src/basics/syntax.txt +msgid "Modules" +msgstr "Модулі" + +#: ../../src/basics/syntax.txt:77 +msgid "" +"Python has a large library of modules that provide pre-written code for a " +"variety of tasks. Modules can be imported into a program using the import " +"statement." +msgstr "" +"Python має велику бібліотеку модулів, які містять попередньо написаний код " +"для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " +"оператора імпорту." + +#: ../../src/basics/syntax.txt +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/syntax.txt:82 +msgid "" +"Python provides a way to handle errors and exceptions in a program using the " +"try, except, else, and finally keywords. These statements allow a program to " +"gracefully recover from errors and continue executing." +msgstr "" +"Python надає спосіб обробки помилок і винятків у програмі за допомогою " +"ключових слів try, except, else і finally. Ці оператори дозволяють програмі " +"плавно відновлюватися після помилок і продовжувати виконання." + +#: ../../src/basics/syntax.txt:86 +msgid "In few words:" +msgstr "У кількох словах:" + +#: ../../src/basics/syntax.txt:88 +msgid "Input/Output example script" +msgstr "Приклад сценарію Input/Output" + +#: ../../src/basics/syntax.txt:107 +msgid "" +"The code snippet above demonstrates some basics abilities of Python to " +"gather data from the user, process it and print out back. Note the words " +"starting with a # (hash) symbol. This is a comment. Any sequence of " +"characters after the hash and till the line end are considered to be a " +"comment. These are for those people, who see the code and they are ignored " +"by the interpreter." +msgstr "" +"Наведений вище фрагмент коду демонструє деякі основні можливості Python " +"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть увагу " +"на слова, що починаються символом #(решітка). Це коментар. Будь-яка " +"послідовність символів після хеша і до кінця рядка вважається коментарем. Це " +"необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " +"інтерпретатор їх ігнорує." + +#: ../../src/basics/syntax.txt:113 +msgid "" +"On the other hand each individual line is the instruction for the " +"interpreter to perform some action, like gather inputs, do math, store data " +"in memory etc." +msgstr "" +"З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " +"певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " +"збереження даних у пам'яті тощо." diff --git a/src/_locales/uk/LC_MESSAGES/basics/testing.po b/src/_locales/uk/LC_MESSAGES/basics/testing.po new file mode 100644 index 000000000..a90022728 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/testing.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:07+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/testing.txt:-1 +msgid "Testing software in Python" +msgstr "Тестування в Python" + +#: ../../src/basics/testing.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/testing.txt:-1 +msgid "python, testing, unittest, pytest" +msgstr "python, testing, unittest, pytest" + +#: ../../src/basics/testing.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/testing.txt:16 +msgid "Testing" +msgstr "Тестування" diff --git a/src/_locales/uk/LC_MESSAGES/basics/variables.po b/src/_locales/uk/LC_MESSAGES/basics/variables.po new file mode 100644 index 000000000..36c224c23 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/variables.po @@ -0,0 +1,135 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:07+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/variables.txt:-1 +msgid "Variables in programming" +msgstr "Змінні в програмуванні" + +#: ../../src/basics/variables.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/variables.txt:-1 +msgid "programming, basics, variables" +msgstr "programming, basics, variables" + +#: ../../src/basics/variables.txt:8 +msgid "Variables" +msgstr "Змінні" + +#: ../../src/basics/variables.txt:10 +msgid "" +"In computer science a **variable** is a named storage location in memory " +"that can hold a value (*data*). The value stored in a variable can be " +"changed or accessed by the program during its execution." +msgstr "" +"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " +"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " +"змінено або доступне програмою під час її виконання." + +#: ../../src/basics/variables.txt:14 +msgid "" +"In Python, variables are created dynamically once a value is assigned to " +"them. This makes Python a dynamically typed language, which means that the " +"data type of a variable is inferred from the value assigned to it. So, you " +"do not need to declare a variable before using it, as in statically typed " +"languages." +msgstr "" +"У Python змінні створюються динамічно після присвоєння їм значення. Це " +"робить Python динамічно типізованою мовою, а це означає, що тип даних " +"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " +"оголошувати змінну перед її використанням, як у статично типізованих мовах." + +#: ../../src/basics/variables.txt:19 +msgid "" +"The ability to create variables dynamically and infer their data type makes " +"Python code more concise and easier to read. However, it also requires " +"careful attention to variable naming and assignment to avoid unexpected " +"behavior." +msgstr "" +"Можливість динамічно створювати змінні та виводити їхні типи даних робить " +"код Python більш лаконічним і легшим для читання. Однак це також вимагає " +"пильної уваги до іменування та призначення змінних, щоб уникнути " +"неочікуваної поведінки." + +#: ../../src/basics/variables.txt:23 +msgid "" +"In Python ``=`` (assignment operator) is used to set a value to some " +"variable, the portion on the left of the operator is a *variable name* and " +"the portion on the right is a *value* to assign to a variable." +msgstr "" +"У Python ``=`` (оператор присвоєння) використовується для встановлення " +"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " +"частина праворуч - це значення, яке призначається для неї." + +#: ../../src/basics/variables.txt:27 +msgid "Variable assignment in Python" +msgstr "Присвоєння змінної в Python" + +#: ../../src/basics/variables.txt:34 +msgid "Variable assignment in Java" +msgstr "Присвоєння змінної в Java" + +#: ../../src/basics/variables.txt:42 +msgid "Naming" +msgstr "Присвоєння назви" + +#: ../../src/basics/variables.txt:44 +msgid "" +"In Python there are several rules that describe how to name your variables. " +"Some of these are requirements and cannot be ignored, others are rather " +"recommended than required and can be omitted. For now note, that a variable " +"name **cannot**:" +msgstr "" +"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " +"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " +"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" + +#: ../../src/basics/variables.txt:49 +msgid "a language keyword (like ``pass``, ``def`` or ``class``)" +msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" + +#: ../../src/basics/variables.txt:50 +msgid "start with a number (e.g. ``123``, ``1_something``)" +msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" + +#: ../../src/basics/variables.txt:51 +msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" +msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" + +#: ../../src/basics/variables.txt:52 +msgid "contain white spaces" +msgstr "містити пробіли" + +#: ../../src/basics/variables.txt:54 +msgid "Also here are some general recommendation on naming anything:" +msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" + +#: ../../src/basics/variables.txt:56 +msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" +msgstr "" +"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " +"42``)" + +#: ../../src/basics/variables.txt:57 +msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" +msgstr "" +"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" diff --git a/src/_locales/uk/LC_MESSAGES/deploy.po b/src/_locales/uk/LC_MESSAGES/deploy/index.po similarity index 91% rename from src/_locales/uk/LC_MESSAGES/deploy.po rename to src/_locales/uk/LC_MESSAGES/deploy/index.po index c58769a41..a54aa873e 100644 --- a/src/_locales/uk/LC_MESSAGES/deploy.po +++ b/src/_locales/uk/LC_MESSAGES/deploy/index.po @@ -1,5 +1,3 @@ -# DEPLOYMENT BLOCK TRANSLATION. -# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. @@ -9,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"PO-Revision-Date: 2023-10-05 20:11+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -17,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" #: ../../src/deploy/index.txt:-1 msgid "Deploy Python application" diff --git a/src/_locales/uk/LC_MESSAGES/django.po b/src/_locales/uk/LC_MESSAGES/django/index.po similarity index 91% rename from src/_locales/uk/LC_MESSAGES/django.po rename to src/_locales/uk/LC_MESSAGES/django/index.po index 27578b7b2..3d1c09e26 100644 --- a/src/_locales/uk/LC_MESSAGES/django.po +++ b/src/_locales/uk/LC_MESSAGES/django/index.po @@ -1,5 +1,3 @@ -# DJANGO BLOCK TRANSLATION. -# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. @@ -9,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"PO-Revision-Date: 2023-10-05 20:11+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -17,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" #: ../../src/django/index.txt:-1 msgid "Django web-framework" diff --git a/src/_locales/uk/LC_MESSAGES/flask.po b/src/_locales/uk/LC_MESSAGES/flask.po deleted file mode 100644 index 43db26d64..000000000 --- a/src/_locales/uk/LC_MESSAGES/flask.po +++ /dev/null @@ -1,40 +0,0 @@ -# FLASK BLOCK TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# SERHII HORODILOV -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.04.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/flask/index.txt:-1 -msgid "Flask web-framework" -msgstr "Веб-фреймворк Flask" - -#: ../../src/flask/index.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/flask/index.txt:-1 -msgid "python, web, flask, index" -msgstr "python, web, flask, index" - -#: ../../src/flask/index.txt:8 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/flask/index.txt:16 -msgid "Flask Framework" -msgstr "Фреймворк Flask" diff --git a/src/_locales/uk/LC_MESSAGES/index.po b/src/_locales/uk/LC_MESSAGES/index.po deleted file mode 100644 index 5303a5129..000000000 --- a/src/_locales/uk/LC_MESSAGES/index.po +++ /dev/null @@ -1,34 +0,0 @@ -# PYTHON TRAINING COURSE TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# -# SERHII HORODILOV -# -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.04.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:09+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/index.txt:21 -msgid "Additional materials" -msgstr "Додаткові матеріали" - -#: ../../src/index.txt:5 -msgid "PYTHON TRAINING COURSE" -msgstr "НАВЧАЛЬНИЙ КУРС PYTHON" - -#: ../../src/index.txt:35 -msgid "References" -msgstr "Посилання" diff --git a/src/_locales/uk/LC_MESSAGES/intro.po b/src/_locales/uk/LC_MESSAGES/intro.po deleted file mode 100644 index 8551dc512..000000000 --- a/src/_locales/uk/LC_MESSAGES/intro.po +++ /dev/null @@ -1,940 +0,0 @@ -# INTRODUCTION SECTION TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# FIRST AUTHOR , 2023. -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.04.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 06:01+0300\n" -"PO-Revision-Date: 2023-04-21 06:02+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/intro/index.txt:123 -msgid "Contents" -msgstr "Зміст" - -#: ../../src/intro/index.txt:2 -msgid "" -"There are a whole bunch of common programming tasks that are easy in Python. " -"For someone who is not yet a programmer, who wants to become a programmer, " -"for those people Python is particularly easy to get. In Python, every symbol " -"you type is essential." -msgstr "" -"Існує ціла купа звичайних програмних завдань, які легко виконати на Python. " -"Для тих, хто ще не програміст, хто хоче стати програмістом, для цих людей " -"Python особливо легко отримати. У Python кожен символ, який ви вводите, є " -"важливим." - -#: ../../src/intro/index.txt:7 -msgid "|guido| Guido van Rossum" -msgstr "|guido| Гвідо ван Россум" - -#: ../../src/intro/index.txt:175 -msgid "guido" -msgstr "guido" - -#: ../../src/intro/index.txt:11 -msgid "Introduction to Python" -msgstr "Введення в Python" - -#: ../../src/intro/index.txt:13 -msgid "" -"|python| **Python** is a high-level, interpreted scripting language. It was " -"created in the early 1990s by Guido van Rossum at Stichting Mathematisch " -"Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of " -"a language called ABC. Guido remains Python’s principal author, although it " -"includes many contributions from others." -msgstr "" -"|python| **Python** — це інтерпретована скриптова мова високого рівня. Її " -"було створено на початку 1990-х років Гвідо ван Россумом у Stichting " -"Mathematisch Centrum (CWI, див. https://www.cwi.nl/) у Нідерландах як " -"наступника мови під назвою ABC. Гвідо залишається головним автором Python, " -"хоча мова містить багато внесків від інших авторів." - -#: ../../src/intro/index.txt:132 -msgid "python" -msgstr "python" - -#: ../../src/intro/index.txt:19 -msgid "" -"Python 2.0 was released in 2000, and the 2.x versions were the prevalent " -"releases until December 2008. At that time, the development team made the " -"decision to release version 3.0, which contained a few relatively small but " -"significant changes that were not backward compatible with the 2.x versions. " -"Python 2 and 3 are very similar, and some features of Python 3 have been " -"backported to Python 2. But in general, they remain not quite compatible." -msgstr "" -"Python 2.0 був випущений у 2000 році, а версії 2.x були поширеними випусками " -"до грудня 2008 року. У той час команда розробників прийняла рішення " -"випустити версію 3.0, яка містила кілька відносно невеликих, але значних " -"змін, які не були зворотно сумісними. з версіями 2.x. Python 2 і 3 дуже " -"схожі, і деякі функції Python 3 були перенесені в Python 2. Але загалом вони " -"залишаються не зовсім сумісними." - -#: ../../src/intro/index.txt:26 -msgid "" -"Both Python 2 and 3 have continued to be maintained and developed, with " -"periodic release updates for both. However, an official End Of Life date of " -"January 1, 2020 has been established for Python 2, after which time it will " -"no longer be maintained." -msgstr "" -"І Python 2, і 3 продовжували підтримуватися та розроблятися з періодичними " -"оновленнями для обох. Однак для Python 2 було встановлено офіційну дату " -"завершення життя 1 січня 2020 року, після якої він більше не " -"підтримуватиметься." - -#: ../../src/intro/index.txt:31 -msgid "" -"Python is still maintained by a core development team at the Institute, and " -"Guido is still in charge, having been given the title of BDFL (Benevolent " -"Dictator For Life) by the Python community. The name Python, by the way, " -"derives not from the snake, but from the British comedy troupe Monty " -"Python’s Flying Circus, of which Guido was, and presumably still is, a fan. " -"It is common to find references to Monty Python sketches and movies " -"scattered throughout the Python documentation." -msgstr "" -"Python все ще підтримується основною командою розробників в Інституті, і " -"Гвідо все ще керує, отримавши звання BDFL (Доброзичливий диктатор на все " -"життя) від спільноти Python. Назва Python, до речі, походить не від імені " -"змії, а від британської комедійної трупи Monty Python’s Flying Circus, " -"шанувальником якої був і, мабуть, залишається Гвідо. Посилання на ескізи та " -"фільми Monty Python часто можна знайти в документації Python." - -#: ../../src/intro/index.txt:39 -msgid "Here are some significant facts about Python." -msgstr "Ось кілька важливих фактів про Python." - -#: ../../src/intro/index.txt:42 -msgid "Python is popular" -msgstr "Python популярний" - -#: ../../src/intro/index.txt:43 -msgid "" -"Python has been growing in popularity over the last few years. The 2018 " -"Stack Overflow Developer Survey ranked Python as the 7th most popular and " -"the number one most wanted technology of the year. By the end of Q-4 in 2022 " -"Python is the **top** language on all GitHut metrics :cite:`github:stats`." -msgstr "" -"Python набирає популярності протягом останніх кількох років. Опитування " -"розробників Stack Overflow 2018 року поставило Python на сьоме місце за " -"популярністю та на перше місце серед найпопулярніших технологій року. До " -"кінця четвертого кварталу 2022 року Python є **найпопулярнішою** мовою за " -"всіма показниками GitHut :cite:`github:stats`." - -#: ../../src/intro/index.txt:49 -msgid "" -"Here are some logos of unknown companies across the globe who uses Python:" -msgstr "" -"Ось кілька логотипів невідомих компаній по всьому світі, які використовують " -"Python:" - -#: ../../src/intro/index.txt:54 -msgid "google facebook instagram spotify quora netflix dropbox reddit" -msgstr "google facebook instagram spotify quora netflix dropbox reddit" - -#: ../../src/intro/index.txt -msgid "Google" -msgstr "Google" - -#: ../../src/intro/index.txt -msgid "Facebook" -msgstr "Facebook" - -#: ../../src/intro/index.txt -msgid "Instagram" -msgstr "Instagram" - -#: ../../src/intro/index.txt -msgid "Spotify" -msgstr "Spotify" - -#: ../../src/intro/index.txt -msgid "Quora" -msgstr "Quora" - -#: ../../src/intro/index.txt -msgid "Netflix" -msgstr "Netflix" - -#: ../../src/intro/index.txt -msgid "Dropbox" -msgstr "Dropbox" - -#: ../../src/intro/index.txt -msgid "Reddit" -msgstr "Reddit" - -#: ../../src/intro/index.txt:56 -msgid "Python is interpreted" -msgstr "Python інтерпретується" - -#: ../../src/intro/index.txt:57 -msgid "" -"Many languages are compiled, meaning the source code you create needs to be " -"translated into machine code, the language of your computer’s processor, " -"before it can be run. Programs written in an interpreted language are passed " -"straight to an interpreter that runs them directly." -msgstr "" -"Багато мов компілюється, тобто вихідний код, який ви створюєте, має бути " -"переведений у машинний код, мовою процесора вашого комп’ютера, перш ніж його " -"можна буде запустити. Програми, написані на інтерпретованій мові, " -"передаються прямо до інтерпретатора, який їх безпосередньо запускає." - -#: ../../src/intro/index.txt:62 -msgid "" -"This makes for a quicker development cycle because you just type in your " -"code and run it, without the intermediate compilation step." -msgstr "" -"Це забезпечує швидший цикл розробки, оскільки ви просто вводите код і " -"запускаєте його без проміжного етапу компіляції." - -#: ../../src/intro/index.txt:66 -msgid "Python is free" -msgstr "Python безкоштовний" - -#: ../../src/intro/index.txt:67 -msgid "" -"The Python interpreter is developed under an OSI-approved open-source " -"license, making it free to install, use, and distribute, even for commercial " -"purposes." -msgstr "" -"Інтерпретатор Python розроблено відповідно до схваленої OSI ліцензії з " -"відкритим вихідним кодом, що робить його безкоштовним для встановлення, " -"використання та розповсюдження навіть у комерційних цілях." - -#: ../../src/intro/index.txt:71 -msgid "Python is portable" -msgstr "Python портативний" - -#: ../../src/intro/index.txt:72 -msgid "" -"Because Python code is interpreted and not compiled into native machine " -"instructions, code written for one platform will work on any other platform " -"that has the Python interpreter installed. This is true of any interpreted " -"language, not just Python." -msgstr "" -"Оскільки код Python інтерпретується, а не компілюється у власні машинні " -"інструкції, код, написаний для однієї платформи, працюватиме на будь-якій " -"іншій платформі, де встановлено інтерпретатор Python. Це стосується будь-" -"якої інтерпретованої мови, а не лише Python." - -#: ../../src/intro/index.txt:78 -msgid "Python is simple" -msgstr "Python простий" - -#: ../../src/intro/index.txt:79 -msgid "" -"As programming languages go, Python is relatively uncluttered, and the " -"developers have deliberately kept it that way. A rough estimate of the " -"complexity of a language can be gleaned from the number of keywords or " -"reserved words in the language. These are words that are reserved for " -"special meaning by the compiler or interpreter because they designate " -"specific built-in functionality of the language. There are only 35 :cite:" -"`docs-python:keywords` in Python and they are:" -msgstr "" -"Що стосується мов програмування, Python є відносно незавантаженим, і " -"розробники навмисно залишили його таким. Приблизну оцінку складності мови " -"можна отримати з кількості ключових або зарезервованих слів у мові. Це " -"слова, які зарезервовані для спеціального значення компілятором або " -"інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " -"У Python лише 35 :cite:`docs-python:keywords`, і вони:" - -#: ../../src/intro/index.txt:87 -msgid "Python Keywords" -msgstr "Ключові слова Python" - -#: ../../src/intro/index.txt:91 -msgid "``False``" -msgstr "``False``" - -#: ../../src/intro/index.txt:91 -msgid "``await``" -msgstr "``await``" - -#: ../../src/intro/index.txt:91 -msgid "``else``" -msgstr "``else``" - -#: ../../src/intro/index.txt:91 -msgid "``import``" -msgstr "``import``" - -#: ../../src/intro/index.txt:91 -msgid "``pass``" -msgstr "``pass``" - -#: ../../src/intro/index.txt:93 -msgid "``None``" -msgstr "``None``" - -#: ../../src/intro/index.txt:93 -msgid "``break``" -msgstr "``break``" - -#: ../../src/intro/index.txt:93 -msgid "``except``" -msgstr "``except``" - -#: ../../src/intro/index.txt:93 -msgid "``in``" -msgstr "``in``" - -#: ../../src/intro/index.txt:93 -msgid "``raise``" -msgstr "``raise``" - -#: ../../src/intro/index.txt:95 -msgid "``True``" -msgstr "``True``" - -#: ../../src/intro/index.txt:95 -msgid "``class``" -msgstr "``class``" - -#: ../../src/intro/index.txt:95 -msgid "``finally``" -msgstr "``finally``" - -#: ../../src/intro/index.txt:95 -msgid "``is``" -msgstr "``is``" - -#: ../../src/intro/index.txt:95 -msgid "``return``" -msgstr "``return``" - -#: ../../src/intro/index.txt:97 -msgid "``and``" -msgstr "``and``" - -#: ../../src/intro/index.txt:97 -msgid "``continue``" -msgstr "``continue``" - -#: ../../src/intro/index.txt:97 -msgid "``for``" -msgstr "``for``" - -#: ../../src/intro/index.txt:97 -msgid "``lambda``" -msgstr "``lambda``" - -#: ../../src/intro/index.txt:97 -msgid "``try``" -msgstr "``try``" - -#: ../../src/intro/index.txt:99 -msgid "``as``" -msgstr "``as``" - -#: ../../src/intro/index.txt:99 -msgid "``def``" -msgstr "``def``" - -#: ../../src/intro/index.txt:99 -msgid "``from``" -msgstr "``from``" - -#: ../../src/intro/index.txt:99 -msgid "``nonlocal``" -msgstr "``nonlocal``" - -#: ../../src/intro/index.txt:99 -msgid "``while``" -msgstr "``while``" - -#: ../../src/intro/index.txt:101 -msgid "``assert``" -msgstr "``assert``" - -#: ../../src/intro/index.txt:101 -msgid "``del``" -msgstr "``del``" - -#: ../../src/intro/index.txt:101 -msgid "``global``" -msgstr "``global``" - -#: ../../src/intro/index.txt:101 -msgid "``not``" -msgstr "``not``" - -#: ../../src/intro/index.txt:101 -msgid "``with``" -msgstr "``with``" - -#: ../../src/intro/index.txt:103 -msgid "``async``" -msgstr "``async``" - -#: ../../src/intro/index.txt:103 -msgid "``elif``" -msgstr "``elif``" - -#: ../../src/intro/index.txt:103 -msgid "``if``" -msgstr "``if``" - -#: ../../src/intro/index.txt:103 -msgid "``or``" -msgstr "``or``" - -#: ../../src/intro/index.txt:103 -msgid "``yield``" -msgstr "``yield``" - -#: ../../src/intro/index.txt:107 -msgid "Python is general purpose" -msgstr "Python є універсальним" - -#: ../../src/intro/index.txt:108 -msgid "" -"Python is everywhere. Talking more specific common scopes for Python " -"developers are :cite:`python-usage`:" -msgstr "" -"Python всюди. Говорячи про більш конкретні загальні області для розробників " -"Python, це :cite:`python-usage`:" - -#: ../../src/intro/index.txt:111 -msgid "Web Scraping Applications" -msgstr "Програми для сканування веб-сторінок" - -#: ../../src/intro/index.txt:112 -msgid "Data Science Solutions" -msgstr "Рішення для Data Science" - -#: ../../src/intro/index.txt:113 -msgid "Machine Learning Applications" -msgstr "Програми машинного навчання" - -#: ../../src/intro/index.txt:114 -msgid "Web Development" -msgstr "Веб-розробка" - -#: ../../src/intro/index.txt:115 -msgid "Game Development" -msgstr "Розробка ігор" - -#: ../../src/intro/index.txt:116 -msgid "Scientific and Numeric Applications" -msgstr "Наукові та обчислювальні програми" - -#: ../../src/intro/index.txt:117 -msgid "Image Design and Graphic Design Applications" -msgstr "Програми для обробки зображень та графіки" - -#: ../../src/intro/index.txt:118 -msgid "Finance Fintech Platform" -msgstr "Банківські та фінансові сервіси" - -#: ../../src/intro/index.txt:119 -msgid "Language Development" -msgstr "Language Development" - -#: ../../src/intro/index.txt:120 -msgid "Operating Systems" -msgstr "Операційні системи" - -#: ../../src/intro/install.txt:3 ../../src/intro/install.txt:21 -msgid "Install Python" -msgstr "Встановлення Python" - -#: ../../src/intro/install.txt:5 -msgid "" -"The `Python wiki `_ " -"briefly describes the installation process." -msgstr "" -"`Вікі Python `_ " -"коротко описує процес встановлення." - -#: ../../src/intro/install.txt:8 -msgid "" -"To become a **true** professional, you need a special software called :abbr:" -"`IDE (Integrated Development Environment)` or at least a code editor " -"supporting syntax highlight. Refer :doc:`/appx/code_edit` for more " -"information." -msgstr "" -"Щоб стати **справжнім** професіоналом, вам потрібне спеціальне програмне " -"забезпечення під назвою :abbr:`IDE (Integrated Development Environment)` або " -"принаймні редактор коду, який підтримує підсвічування синтаксису. Зверніться " -"до :doc:`/appx/code_edit` для отримання додаткової інформації." - -#: ../../src/intro/install.txt:14 -msgid "Linux" -msgstr "Linux" - -#: ../../src/intro/install.txt:16 -msgid "" -"On most Linux distros Python comes pre-installed and/or all distro have it " -"available in their package repository (I haven't seen the one which does " -"have). The installation process depends on the distro, but here are some " -"examples how you can install it:" -msgstr "" -"У більшості дистрибутивів Linux Python постачається попередньо встановленим " -"і/або в усіх дистрибутивах він доступний у сховищі пакетів (я не бачив того, " -"у якому є). Процес встановлення залежить від дистрибутива, але ось кілька " -"прикладів того, як його можна встановити:" - -#: ../../src/intro/install.txt:37 -msgid "MacOS" -msgstr "MacOS" - -#: ../../src/intro/install.txt:39 -msgid "" -"For newer versions of MacOS Python is no longer included by default and you " -"will have to download and install it." -msgstr "" -"Для нових версій MacOS Python більше не включено за замовчуванням, і вам " -"доведеться завантажити та встановити його." - -#: ../../src/intro/install.txt:42 -msgid "The process is described at: `Using Python on a Mac`_." -msgstr "Процес описано в: `Використання Python на Mac`_." - -#: ../../src/intro/install.txt:44 -msgid "" -"Briefly, you are invited to visit `downloads`_ and download the latest " -"stable version of Python. A \"universal binary\" build of Python runs " -"natively on Mac's new Intel and legacy PPC CPUs." -msgstr "" -"Коротко, вас запрошують відвідати `завантаження`_ та завантажити останню " -"стабільну версію Python. \"Універсальна двійкова\" збірка Python працює " -"нативно на нових процесорах Intel і застарілих процесорах PPC від Mac." - -#: ../../src/intro/install.txt:48 -msgid "After the installation you would get:" -msgstr "Після встановлення ви отримаєте:" - -#: ../../src/intro/install.txt:50 -msgid "" -"`Python 3.x` folder in `Applications` folder. Standard development " -"environment (`IDLE`) and `PythonLauncher` included." -msgstr "" -"Папка `Python 3.x` в папці `Програми`. Включено стандартне середовище " -"розробки (`IDLE`) і `PythonLauncher`." - -#: ../../src/intro/install.txt:52 -msgid "" -"A framework `/Library/Frameworks/Python.framework` included libraries and " -"executables." -msgstr "" -"Фреймворк `/Library/Frameworks/Python.framework` що включає бібліотеки та " -"виконувані файли." - -#: ../../src/intro/install.txt:56 -msgid "Install from Homebrew" -msgstr "Встановити з Homebrew" - -#: ../../src/intro/install.txt:58 -msgid "" -"Python for MacOS is available via Homebrew. You are to search `formulae`_ " -"for the latest available version. In general, it's as easy as:" -msgstr "" -"Python для MacOS доступний через Homebrew. Ви повинні шукати `формули`_ для " -"останньої доступної версії. Загалом, це так само просто:" - -#: ../../src/intro/install.txt:66 -msgid "Windows" -msgstr "Windows" - -#: ../../src/intro/install.txt:68 -msgid "" -"As for MacOS, here is the official documentation: `Using Python on Windows`_." -msgstr "" -"Що стосується MacOS, ось офіційна документація: `Using Python on Windows`_." - -#: ../../src/intro/install.txt:70 -msgid "" -"For Windows' users the stable release is available from `downloads`_. Just " -"download the installer and proceed to common steps to install software." -msgstr "" -"Для користувачів Windows стабільний випуск доступний із `завантажень`_. " -"Просто завантажте програму встановлення та перейдіть до стандартних кроків " -"для встановлення програмного забезпечення." - -#: ../../src/intro/install.txt:73 -msgid "" -"It's recommended to **Add Python3.x to PATH**, this will avoid problems at " -"the beginning of your journey with Python" -msgstr "" -"Рекомендовано **Додати Python3.x до PATH**, це дозволить уникнути проблем на " -"початку вашого шляху з Python" - -#: ../../src/intro/install.txt:80 -msgid "Python installer first page" -msgstr "Перша сторінка інсталятора Python" - -#: ../../src/intro/install.txt:82 -msgid "Going on with **Install Now**:" -msgstr "Продовжуємо з **Встановити зараз**:" - -#: ../../src/intro/install.txt:84 -msgid "Python will be installed to your user directory" -msgstr "Python буде встановлено у ваш каталог користувача" - -#: ../../src/intro/install.txt:85 -msgid "" -"Python Launcher will be installed according to the option at the bottom of " -"the page" -msgstr "Python Launcher буде встановлено відповідно до опції внизу сторінки" - -#: ../../src/intro/install.txt:88 -msgid "" -"Using **Customize installation** will perform an *all-users* installation." -msgstr "" -"Використання **Налаштувати інсталяцію** виконає інсталяцію *для всіх " -"користувачів*." - -#: ../../src/intro/install.txt:91 -msgid "Removing the MAX_PATH Limitation" -msgstr "Видалення обмеження MAX_PATH" - -#: ../../src/intro/install.txt:93 -msgid "" -"Windows historically has limited path lengths to 260 characters. This meant " -"that paths longer than this would not resolve and errors would result. In " -"the latest versions of Windows, this limitation can be expanded to " -"approximately 32,000 characters. This allows the open() function, the os " -"module and most other path functionality to accept and return paths longer " -"than 260 characters." -msgstr "" -"Історично у Windows довжина шляху обмежена 260 символами. Це означало, що " -"шляхи, довші за цей, не вирішуватимуться, і спричинятимуться помилки. В " -"останніх версіях Windows це обмеження можна розширити приблизно до 32 000 " -"символів. Це дозволяє функції open(), модулю os і більшості інших функцій " -"шляху приймати та повертати шляхи, довші за 260 символів." - -#: ../../src/intro/install.txt:99 -msgid "You will need PC administrator assistance to perform this action." -msgstr "Для виконання цієї дії вам знадобиться допомога адміністратора ПК." - -#: ../../src/intro/install.txt:102 -msgid "Install from the Microsoft Store" -msgstr "Встановити з Microsoft Store" - -#: ../../src/intro/install.txt:104 -msgid "You can install from the Microsoft Store in two steps:" -msgstr "Ви можете встановити з Microsoft Store у два кроки:" - -#: ../../src/intro/install.txt:106 -msgid "" -"Open the Microsoft Store app and search for ``Python`` The result should " -"look like:" -msgstr "" -"Відкрийте програму Microsoft Store і знайдіть ``Python``. Результат має " -"виглядати так:" - -#: ../../src/intro/install.txt:112 -msgid "Microsoft Store - search results for \"Python\"" -msgstr "Microsoft Store - результати пошуку для \"Python\"" - -#: ../../src/intro/install.txt:114 -msgid "Select ``Python 3.9`` or the higher available version." -msgstr "Виберіть ``Python 3.9`` або вищу доступну версію." - -#: ../../src/intro/install.txt:116 -msgid "" -"Click **GET** and wait until the installer is downloaded. The installation " -"process should run automatically. Follow the installer's instructions." -msgstr "" -"Натисніть **GET** і дочекайтеся завантаження інсталятора. Процес " -"встановлення має запуститися автоматично. Дотримуйтесь інструкцій " -"інсталятора." - -#: ../../src/intro/install.txt:124 -msgid "Online Interpreters" -msgstr "Онлайн Інтерпретатори" - -#: ../../src/intro/install.txt:126 -msgid "" -"Installing or updating Python on your computer is the first step to becoming " -"a Python programmer :cite:`realpython:install-and-setup`." -msgstr "" -"Встановлення або оновлення Python на вашому комп’ютері – це перший крок до " -"того, щоб стати програмістом Python :cite:`realpython:install-and-setup`." - -#: ../../src/intro/install.txt:129 -msgid "" -"But if you cannot install Python at the moment for some reason, are can go " -"with online interpreters. `repl.it `_ provides the " -"ability to create and store Python scripts (they are called *repl* here) for " -"free." -msgstr "" -"Але якщо ви не можете встановити Python на даний момент з якоїсь причини, " -"можна скористатися онлайн-інтерпретаторами. `repl.it `_ " -"надає можливість безкоштовно створювати та зберігати сценарії Python (тут " -"вони називаються *repl*)." - -#: ../../src/intro/interact.txt:3 -msgid "Interacting with Python Interpreter" -msgstr "Взаємодія з інтерпретатором Python" - -#: ../../src/intro/interact.txt:5 -msgid "It’s time to write some Python code!" -msgstr "Настав час написати код на Python!" - -#: ../../src/intro/interact.txt:7 -msgid ":cite:t:`realpython:interact`" -msgstr ":cite:t:`realpython:interact`" - -#: ../../src/intro/interact.txt:9 -msgid "In short there are three major ways to do something with Python:" -msgstr "Коротше кажучи, є три основні способи зробити щось з Python:" - -#: ../../src/intro/interact.txt:11 -msgid "interactive Python console" -msgstr "інтерактивна консоль Python" - -#: ../../src/intro/interact.txt:12 -msgid "running code from file [#]_" -msgstr "запуск коду з файлу [#]_" - -#: ../../src/intro/interact.txt:13 -msgid "use online editors (like `repl.it `_)" -msgstr "" -"використовувати онлайн-редактори (наприклад, `repl.it `_)" - -#: ../../src/intro/interact.txt:16 -msgid "Using Python interpreter interactively" -msgstr "Використання інтерпретатора Python в інтерактивному режимі" - -#: ../../src/intro/interact.txt:18 -msgid "" -"Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight " -"forward way to start talking to Python. This simply means starting up the " -"interpreter and typing commands to it directly :cite:`realpython:interact`. " -"The interpreter:" -msgstr "" -"Використання середовища :abbr:`REPL (Read-Eval-Print-Loop)` є найпростішим " -"способом почати спілкування з Python. Це просто означає запуск " -"інтерпретатора та введення команд безпосередньо в нього :cite:`realpython:" -"interact`. Перекладач:" - -#: ../../src/intro/interact.txt:23 -msgid "Reads the command you enter" -msgstr "Читає введену команду" - -#: ../../src/intro/interact.txt:24 -msgid "Evaluates and executes it" -msgstr "Оцінює та виконує її" - -#: ../../src/intro/interact.txt:25 -msgid "Prints the output (if any) back to the console" -msgstr "Друкує результат (якщо є) назад на консоль" - -#: ../../src/intro/interact.txt:26 -msgid "Loops back and repeats" -msgstr "Повертається назад та повторює" - -#: ../../src/intro/interact.txt:29 -msgid "Starting the interpreter" -msgstr "Запуск інтерпретатора" - -#: ../../src/intro/interact.txt:31 -msgid "" -"In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the " -"installer placed a shortcut on the desktop to launch the Python." -msgstr "" -"У середовищі :abbr:`GUI (Graphic User Interface)`, імовірно, інсталятор " -"розмістив ярлик на робочому столі для запуску Python." - -#: ../../src/intro/interact.txt:34 -msgid "" -"For example in Windows the interpreter can be found in the **Start** menu " -"labeled **Python 3.x**:" -msgstr "" -"Наприклад, у Windows інтерпретатор можна знайти в меню **Пуск** з позначкою " -"**Python 3.x**:" - -#: ../../src/intro/interact.txt:40 -msgid "Windows start menu Python group" -msgstr "Меню Пуск Windows Група Python" - -#: ../../src/intro/interact.txt:42 -msgid "" -"In case you are getting error saying python is not installed, but you are " -"sure that the interpreter **is installed** - this means you have no Python " -"in your ``PATH``. Message may look like: ``'python' is not recognized as an " -"internal or external command`` / ``python: command not found``" -msgstr "" -"Якщо ви отримуєте повідомлення про те, що python не встановлено, але ви " -"впевнені, що інтерпретатор **встановлено**, це означає, що у вашому ``PATH`` " -"немає Python. Повідомлення може виглядати так: ``'python' не розпізнається " -"як внутрішня або зовнішня команда`` / ``python: команда не знайдена``" - -#: ../../src/intro/interact.txt:48 -msgid "Refer :doc:`/appx/env_path` for problem solution." -msgstr "Зверніться до :doc:`/appx/env_path` для вирішення проблеми." - -#: ../../src/intro/interact.txt:50 -msgid "The alternative is to launch from a terminal window:" -msgstr "Альтернативою є запуск із вікна терміналу:" - -#: ../../src/intro/interact.txt:52 -msgid "**Command Prompt** in Windows" -msgstr "**Командний рядок** у Windows" - -#: ../../src/intro/interact.txt:53 -msgid "**Terminal** both in macOS and Linux" -msgstr "**Термінал** в macOS і Linux" - -#: ../../src/intro/interact.txt:58 -msgid "Start Python via Command Prompt" -msgstr "Запуск Python через командний рядок" - -#: ../../src/intro/interact.txt:63 -msgid "Start Python via Terminal" -msgstr "Запуск Python через термінал" - -#: ../../src/intro/interact.txt:66 -msgid "Running code" -msgstr "Запускаємо код" - -#: ../../src/intro/interact.txt:68 -msgid "" -"Put the Python code in interactive console and press enter to execute it." -msgstr "" -"Помістіть код Python в інтерактивну консоль і натисніть enter, щоб виконати " -"його." - -#: ../../src/intro/interact.txt:70 -msgid "" -"Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after " -"it" -msgstr "" -"Переконайтеся, що підказка ``>>>`` відображається, а курсор знаходиться " -"після неї" - -#: ../../src/intro/interact.txt:72 -msgid "Type the command ``print(\"Hello, World!\")``" -msgstr "Введіть команду ``print(\"Hello, World!\")``" - -#: ../../src/intro/interact.txt:73 -msgid "Press enter" -msgstr "Натисніть enter" - -#: ../../src/intro/interact.txt:79 -msgid "Your session should look like:" -msgstr "Ваш сеанс має виглядати так:" - -#: ../../src/intro/interact.txt:86 -msgid "" -"If you've seen string \"Hello, World!\" printed back, congrats - you've run " -"your first program in Python." -msgstr "" -"Якщо ви бачили рядок \"Hello, World!\" надруковано, вітаємо - ви запустили " -"свою першу програму на Python." - -#: ../../src/intro/interact.txt:94 -msgid "Exiting the interpreter" -msgstr "Вихід з інтерпретатора" - -#: ../../src/intro/interact.txt:96 -msgid "To exit the interactive console type \"exit\" and hit enter." -msgstr "Щоб вийти з інтерактивної консолі, введіть \"exit\" і натисніть Enter." - -#: ../../src/intro/interact.txt:103 -msgid "Running code from file" -msgstr "Запуск коду з файлу" - -#: ../../src/intro/interact.txt:105 -msgid "" -"A Python script is a reusable set of code. It is essentially a Python " -"program - a sequence of Python instructions - contained in a file. You can " -"run the program by specifying the name of the script file to the interpreter." -msgstr "" -"Сценарій Python — це багаторазовий набір коду. По суті, це програма на " -"Python – послідовність інструкцій Python, які містяться у файлі. Ви можете " -"запустити програму, вказавши інтерпретатору назву файлу сценарію." - -#: ../../src/intro/interact.txt:109 -msgid "" -"Python scripts are just plain text, so you can edit them with any text " -"editor. If you have a favorite programmer’s editor that operates on text " -"files, it should be fine to use. Otherwise here are some options for the " -"first time:" -msgstr "" -"Сценарії Python — це звичайний текст, тому ви можете редагувати їх у будь-" -"якому текстовому редакторі. Якщо у вас є улюблений програмістський редактор, " -"який працює з текстовими файлами, його цілком можна використовувати. Інакше " -"ось кілька варіантів для першого разу:" - -#: ../../src/intro/interact.txt:113 -msgid "Windows: |npp| `Notepad++ `_" -msgstr "Windows: |npp| `Notepad++ `_" - -#: ../../src/intro/interact.txt:148 -msgid "npp" -msgstr "npp" - -#: ../../src/intro/interact.txt:114 -msgid "Linux: |geany| `Geany `_" -msgstr "Linux: |geany| `Geany `_" - -#: ../../src/intro/interact.txt:150 -msgid "geany" -msgstr "geany" - -#: ../../src/intro/interact.txt:116 -msgid "" -"Using whatever editor create a script file called ``hello.py`` and put the " -"code in it:" -msgstr "" -"Використовуючи будь-який редактор, створіть файл сценарію під назвою ``hello." -"py`` і помістіть у нього код:" - -#: ../../src/intro/interact.txt:123 -msgid "" -"Save file keeping track on the directory you choose to save into. Now, open " -"the terminal or command prompt in this directory." -msgstr "" -"Збережіть файл, відстежуючи його в каталозі, який ви вибрали для збереження. " -"Тепер відкрийте термінал або командний рядок у цьому каталозі." - -#: ../../src/intro/interact.txt:126 -msgid "" -"In window you may open Command Prompt in the directory by typing \"cmd\" to " -"the address bar in explorer." -msgstr "" -"У вікні ви можете відкрити командний рядок у каталозі, ввівши \"cmd\" в " -"адресний рядок провідника." - -#: ../../src/intro/interact.txt:129 -msgid "In the terminal (or command prompt) type:" -msgstr "У терміналі (або командному рядку) введіть:" - -#: ../../src/intro/interact.txt:135 -msgid "" -"Python will print string \"Hello, World!\". Your session should look like:" -msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс має виглядати так:" - -#: ../../src/intro/interact.txt:144 -msgid "Files containing Python code are called *modules*." -msgstr "Файли, що містять код Python, називаються *модулями*." - -#~ msgid "in" -#~ msgstr "in" - -#~ msgid "is" -#~ msgstr "is" - -#~ msgid "as" -#~ msgstr "as" - -#~ msgid "if" -#~ msgstr "if" - -#~ msgid "or" -#~ msgstr "or" diff --git a/src/_locales/uk/LC_MESSAGES/intro/index.po b/src/_locales/uk/LC_MESSAGES/intro/index.po new file mode 100644 index 000000000..a45f16a8a --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro/index.po @@ -0,0 +1,446 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:13+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/intro/index.txt:123 +msgid "Contents" +msgstr "Зміст" + +#: ../../src/intro/index.txt:2 +msgid "" +"There are a whole bunch of common programming tasks that are easy in Python. " +"For someone who is not yet a programmer, who wants to become a programmer, " +"for those people Python is particularly easy to get. In Python, every symbol " +"you type is essential." +msgstr "" +"Існує ціла купа звичайних програмних завдань, які легко виконати на Python. " +"Для тих, хто ще не програміст, хто хоче стати програмістом, для цих людей " +"Python особливо легко отримати. У Python кожен символ, який ви вводите, є " +"важливим." + +#: ../../src/intro/index.txt:7 +msgid "|guido| Guido van Rossum" +msgstr "|guido| Гвідо ван Россум" + +#: ../../src/intro/index.txt:175 +msgid "guido" +msgstr "guido" + +#: ../../src/intro/index.txt:11 +msgid "Introduction to Python" +msgstr "Введення в Python" + +#: ../../src/intro/index.txt:13 +msgid "" +"|python| **Python** is a high-level, interpreted scripting language. It was " +"created in the early 1990s by Guido van Rossum at Stichting Mathematisch " +"Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of " +"a language called ABC. Guido remains Python’s principal author, although it " +"includes many contributions from others." +msgstr "" +"|python| **Python** — це інтерпретована скриптова мова високого рівня. Її " +"було створено на початку 1990-х років Гвідо ван Россумом у Stichting " +"Mathematisch Centrum (CWI, див. https://www.cwi.nl/) у Нідерландах як " +"наступника мови під назвою ABC. Гвідо залишається головним автором Python, " +"хоча мова містить багато внесків від інших авторів." + +#: ../../src/intro/index.txt:132 +msgid "python" +msgstr "python" + +#: ../../src/intro/index.txt:19 +msgid "" +"Python 2.0 was released in 2000, and the 2.x versions were the prevalent " +"releases until December 2008. At that time, the development team made the " +"decision to release version 3.0, which contained a few relatively small but " +"significant changes that were not backward compatible with the 2.x versions. " +"Python 2 and 3 are very similar, and some features of Python 3 have been " +"backported to Python 2. But in general, they remain not quite compatible." +msgstr "" +"Python 2.0 був випущений у 2000 році, а версії 2.x були поширеними випусками " +"до грудня 2008 року. У той час команда розробників прийняла рішення " +"випустити версію 3.0, яка містила кілька відносно невеликих, але значних " +"змін, які не були зворотно сумісними. з версіями 2.x. Python 2 і 3 дуже " +"схожі, і деякі функції Python 3 були перенесені в Python 2. Але загалом вони " +"залишаються не зовсім сумісними." + +#: ../../src/intro/index.txt:26 +msgid "" +"Both Python 2 and 3 have continued to be maintained and developed, with " +"periodic release updates for both. However, an official End Of Life date of " +"January 1, 2020 has been established for Python 2, after which time it will " +"no longer be maintained." +msgstr "" +"І Python 2, і 3 продовжували підтримуватися та розроблятися з періодичними " +"оновленнями для обох. Однак для Python 2 було встановлено офіційну дату " +"завершення життя 1 січня 2020 року, після якої він більше не " +"підтримуватиметься." + +#: ../../src/intro/index.txt:31 +msgid "" +"Python is still maintained by a core development team at the Institute, and " +"Guido is still in charge, having been given the title of BDFL (Benevolent " +"Dictator For Life) by the Python community. The name Python, by the way, " +"derives not from the snake, but from the British comedy troupe Monty " +"Python’s Flying Circus, of which Guido was, and presumably still is, a fan. " +"It is common to find references to Monty Python sketches and movies " +"scattered throughout the Python documentation." +msgstr "" +"Python все ще підтримується основною командою розробників в Інституті, і " +"Гвідо все ще керує, отримавши звання BDFL (Доброзичливий диктатор на все " +"життя) від спільноти Python. Назва Python, до речі, походить не від імені " +"змії, а від британської комедійної трупи Monty Python’s Flying Circus, " +"шанувальником якої був і, мабуть, залишається Гвідо. Посилання на ескізи та " +"фільми Monty Python часто можна знайти в документації Python." + +#: ../../src/intro/index.txt:39 +msgid "Here are some significant facts about Python." +msgstr "Ось кілька важливих фактів про Python." + +#: ../../src/intro/index.txt:42 +msgid "Python is popular" +msgstr "Python популярний" + +#: ../../src/intro/index.txt:43 +msgid "" +"Python has been growing in popularity over the last few years. The 2018 " +"Stack Overflow Developer Survey ranked Python as the 7th most popular and " +"the number one most wanted technology of the year. By the end of Q-4 in 2022 " +"Python is the **top** language on all GitHut metrics :cite:`github:stats`." +msgstr "" +"Python набирає популярності протягом останніх кількох років. Опитування " +"розробників Stack Overflow 2018 року поставило Python на сьоме місце за " +"популярністю та на перше місце серед найпопулярніших технологій року. До " +"кінця четвертого кварталу 2022 року Python є **найпопулярнішою** мовою за " +"всіма показниками GitHut :cite:`github:stats`." + +#: ../../src/intro/index.txt:49 +msgid "" +"Here are some logos of unknown companies across the globe who uses Python:" +msgstr "" +"Ось кілька логотипів невідомих компаній по всьому світі, які використовують " +"Python:" + +#: ../../src/intro/index.txt:54 +msgid "google facebook instagram spotify quora netflix dropbox reddit" +msgstr "google facebook instagram spotify quora netflix dropbox reddit" + +#: ../../src/intro/index.txt +msgid "Google" +msgstr "Google" + +#: ../../src/intro/index.txt +msgid "Facebook" +msgstr "Facebook" + +#: ../../src/intro/index.txt +msgid "Instagram" +msgstr "Instagram" + +#: ../../src/intro/index.txt +msgid "Spotify" +msgstr "Spotify" + +#: ../../src/intro/index.txt +msgid "Quora" +msgstr "Quora" + +#: ../../src/intro/index.txt +msgid "Netflix" +msgstr "Netflix" + +#: ../../src/intro/index.txt +msgid "Dropbox" +msgstr "Dropbox" + +#: ../../src/intro/index.txt +msgid "Reddit" +msgstr "Reddit" + +#: ../../src/intro/index.txt:56 +msgid "Python is interpreted" +msgstr "Python інтерпретується" + +#: ../../src/intro/index.txt:57 +msgid "" +"Many languages are compiled, meaning the source code you create needs to be " +"translated into machine code, the language of your computer’s processor, " +"before it can be run. Programs written in an interpreted language are passed " +"straight to an interpreter that runs them directly." +msgstr "" +"Багато мов компілюється, тобто вихідний код, який ви створюєте, має бути " +"переведений у машинний код, мовою процесора вашого комп’ютера, перш ніж його " +"можна буде запустити. Програми, написані на інтерпретованій мові, " +"передаються прямо до інтерпретатора, який їх безпосередньо запускає." + +#: ../../src/intro/index.txt:62 +msgid "" +"This makes for a quicker development cycle because you just type in your " +"code and run it, without the intermediate compilation step." +msgstr "" +"Це забезпечує швидший цикл розробки, оскільки ви просто вводите код і " +"запускаєте його без проміжного етапу компіляції." + +#: ../../src/intro/index.txt:66 +msgid "Python is free" +msgstr "Python безкоштовний" + +#: ../../src/intro/index.txt:67 +msgid "" +"The Python interpreter is developed under an OSI-approved open-source " +"license, making it free to install, use, and distribute, even for commercial " +"purposes." +msgstr "" +"Інтерпретатор Python розроблено відповідно до схваленої OSI ліцензії з " +"відкритим вихідним кодом, що робить його безкоштовним для встановлення, " +"використання та розповсюдження навіть у комерційних цілях." + +#: ../../src/intro/index.txt:71 +msgid "Python is portable" +msgstr "Python портативний" + +#: ../../src/intro/index.txt:72 +msgid "" +"Because Python code is interpreted and not compiled into native machine " +"instructions, code written for one platform will work on any other platform " +"that has the Python interpreter installed. This is true of any interpreted " +"language, not just Python." +msgstr "" +"Оскільки код Python інтерпретується, а не компілюється у власні машинні " +"інструкції, код, написаний для однієї платформи, працюватиме на будь-якій " +"іншій платформі, де встановлено інтерпретатор Python. Це стосується будь-" +"якої інтерпретованої мови, а не лише Python." + +#: ../../src/intro/index.txt:78 +msgid "Python is simple" +msgstr "Python простий" + +#: ../../src/intro/index.txt:79 +msgid "" +"As programming languages go, Python is relatively uncluttered, and the " +"developers have deliberately kept it that way. A rough estimate of the " +"complexity of a language can be gleaned from the number of keywords or " +"reserved words in the language. These are words that are reserved for " +"special meaning by the compiler or interpreter because they designate " +"specific built-in functionality of the language. There are only 35 :cite:" +"`docs-python:keywords` in Python and they are:" +msgstr "" +"Що стосується мов програмування, Python є відносно незавантаженим, і " +"розробники навмисно залишили його таким. Приблизну оцінку складності мови " +"можна отримати з кількості ключових або зарезервованих слів у мові. Це " +"слова, які зарезервовані для спеціального значення компілятором або " +"інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " +"У Python лише 35 :cite:`docs-python:keywords`, і вони:" + +#: ../../src/intro/index.txt:87 +msgid "Python Keywords" +msgstr "Ключові слова Python" + +#: ../../src/intro/index.txt:91 +msgid "``False``" +msgstr "``False``" + +#: ../../src/intro/index.txt:91 +msgid "``await``" +msgstr "``await``" + +#: ../../src/intro/index.txt:91 +msgid "``else``" +msgstr "``else``" + +#: ../../src/intro/index.txt:91 +msgid "``import``" +msgstr "``import``" + +#: ../../src/intro/index.txt:91 +msgid "``pass``" +msgstr "``pass``" + +#: ../../src/intro/index.txt:93 +msgid "``None``" +msgstr "``None``" + +#: ../../src/intro/index.txt:93 +msgid "``break``" +msgstr "``break``" + +#: ../../src/intro/index.txt:93 +msgid "``except``" +msgstr "``except``" + +#: ../../src/intro/index.txt:93 +msgid "``in``" +msgstr "``in``" + +#: ../../src/intro/index.txt:93 +msgid "``raise``" +msgstr "``raise``" + +#: ../../src/intro/index.txt:95 +msgid "``True``" +msgstr "``True``" + +#: ../../src/intro/index.txt:95 +msgid "``class``" +msgstr "``class``" + +#: ../../src/intro/index.txt:95 +msgid "``finally``" +msgstr "``finally``" + +#: ../../src/intro/index.txt:95 +msgid "``is``" +msgstr "``is``" + +#: ../../src/intro/index.txt:95 +msgid "``return``" +msgstr "``return``" + +#: ../../src/intro/index.txt:97 +msgid "``and``" +msgstr "``and``" + +#: ../../src/intro/index.txt:97 +msgid "``continue``" +msgstr "``continue``" + +#: ../../src/intro/index.txt:97 +msgid "``for``" +msgstr "``for``" + +#: ../../src/intro/index.txt:97 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/intro/index.txt:97 +msgid "``try``" +msgstr "``try``" + +#: ../../src/intro/index.txt:99 +msgid "``as``" +msgstr "``as``" + +#: ../../src/intro/index.txt:99 +msgid "``def``" +msgstr "``def``" + +#: ../../src/intro/index.txt:99 +msgid "``from``" +msgstr "``from``" + +#: ../../src/intro/index.txt:99 +msgid "``nonlocal``" +msgstr "``nonlocal``" + +#: ../../src/intro/index.txt:99 +msgid "``while``" +msgstr "``while``" + +#: ../../src/intro/index.txt:101 +msgid "``assert``" +msgstr "``assert``" + +#: ../../src/intro/index.txt:101 +msgid "``del``" +msgstr "``del``" + +#: ../../src/intro/index.txt:101 +msgid "``global``" +msgstr "``global``" + +#: ../../src/intro/index.txt:101 +msgid "``not``" +msgstr "``not``" + +#: ../../src/intro/index.txt:101 +msgid "``with``" +msgstr "``with``" + +#: ../../src/intro/index.txt:103 +msgid "``async``" +msgstr "``async``" + +#: ../../src/intro/index.txt:103 +msgid "``elif``" +msgstr "``elif``" + +#: ../../src/intro/index.txt:103 +msgid "``if``" +msgstr "``if``" + +#: ../../src/intro/index.txt:103 +msgid "``or``" +msgstr "``or``" + +#: ../../src/intro/index.txt:103 +msgid "``yield``" +msgstr "``yield``" + +#: ../../src/intro/index.txt:107 +msgid "Python is general purpose" +msgstr "Python є універсальним" + +#: ../../src/intro/index.txt:108 +msgid "" +"Python is everywhere. Talking more specific common scopes for Python " +"developers are :cite:`python-usage`:" +msgstr "" +"Python всюди. Говорячи про більш конкретні загальні області для розробників " +"Python, це :cite:`python-usage`:" + +#: ../../src/intro/index.txt:111 +msgid "Web Scraping Applications" +msgstr "Програми для сканування веб-сторінок" + +#: ../../src/intro/index.txt:112 +msgid "Data Science Solutions" +msgstr "Рішення для Data Science" + +#: ../../src/intro/index.txt:113 +msgid "Machine Learning Applications" +msgstr "Програми машинного навчання" + +#: ../../src/intro/index.txt:114 +msgid "Web Development" +msgstr "Веб-розробка" + +#: ../../src/intro/index.txt:115 +msgid "Game Development" +msgstr "Розробка ігор" + +#: ../../src/intro/index.txt:116 +msgid "Scientific and Numeric Applications" +msgstr "Наукові та обчислювальні програми" + +#: ../../src/intro/index.txt:117 +msgid "Image Design and Graphic Design Applications" +msgstr "Програми для обробки зображень та графіки" + +#: ../../src/intro/index.txt:118 +msgid "Finance Fintech Platform" +msgstr "Банківські та фінансові сервіси" + +#: ../../src/intro/index.txt:119 +msgid "Language Development" +msgstr "Language Development" + +#: ../../src/intro/index.txt:120 +msgid "Operating Systems" +msgstr "Операційні системи" diff --git a/src/_locales/uk/LC_MESSAGES/intro/install.po b/src/_locales/uk/LC_MESSAGES/intro/install.po new file mode 100644 index 000000000..4dd9b4c3c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro/install.po @@ -0,0 +1,250 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:12+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/intro/install.txt:3 ../../src/intro/install.txt:21 +msgid "Install Python" +msgstr "Встановлення Python" + +#: ../../src/intro/install.txt:5 +msgid "" +"The `Python wiki `_ " +"briefly describes the installation process." +msgstr "" +"`Вікі Python `_ " +"коротко описує процес встановлення." + +#: ../../src/intro/install.txt:8 +msgid "" +"To become a **true** professional, you need a special software called :abbr:" +"`IDE (Integrated Development Environment)` or at least a code editor " +"supporting syntax highlight. Refer :doc:`/appx/code_edit` for more " +"information." +msgstr "" +"Щоб стати **справжнім** професіоналом, вам потрібне спеціальне програмне " +"забезпечення під назвою :abbr:`IDE (Integrated Development Environment)` або " +"принаймні редактор коду, який підтримує підсвічування синтаксису. Зверніться " +"до :doc:`/appx/code_edit` для отримання додаткової інформації." + +#: ../../src/intro/install.txt:14 +msgid "Linux" +msgstr "Linux" + +#: ../../src/intro/install.txt:16 +msgid "" +"On most Linux distros Python comes pre-installed and/or all distro have it " +"available in their package repository (I haven't seen the one which does " +"have). The installation process depends on the distro, but here are some " +"examples how you can install it:" +msgstr "" +"У більшості дистрибутивів Linux Python постачається попередньо встановленим " +"і/або в усіх дистрибутивах він доступний у сховищі пакетів (я не бачив того, " +"у якому є). Процес встановлення залежить від дистрибутива, але ось кілька " +"прикладів того, як його можна встановити:" + +#: ../../src/intro/install.txt:37 +msgid "MacOS" +msgstr "MacOS" + +#: ../../src/intro/install.txt:39 +msgid "" +"For newer versions of MacOS Python is no longer included by default and you " +"will have to download and install it." +msgstr "" +"Для нових версій MacOS Python більше не включено за замовчуванням, і вам " +"доведеться завантажити та встановити його." + +#: ../../src/intro/install.txt:42 +msgid "The process is described at: `Using Python on a Mac`_." +msgstr "Процес описано в: `Використання Python на Mac`_." + +#: ../../src/intro/install.txt:44 +msgid "" +"Briefly, you are invited to visit `downloads`_ and download the latest " +"stable version of Python. A \"universal binary\" build of Python runs " +"natively on Mac's new Intel and legacy PPC CPUs." +msgstr "" +"Коротко, вас запрошують відвідати `завантаження`_ та завантажити останню " +"стабільну версію Python. \"Універсальна двійкова\" збірка Python працює " +"нативно на нових процесорах Intel і застарілих процесорах PPC від Mac." + +#: ../../src/intro/install.txt:48 +msgid "After the installation you would get:" +msgstr "Після встановлення ви отримаєте:" + +#: ../../src/intro/install.txt:50 +msgid "" +"`Python 3.x` folder in `Applications` folder. Standard development " +"environment (`IDLE`) and `PythonLauncher` included." +msgstr "" +"Папка `Python 3.x` в папці `Програми`. Включено стандартне середовище " +"розробки (`IDLE`) і `PythonLauncher`." + +#: ../../src/intro/install.txt:52 +msgid "" +"A framework `/Library/Frameworks/Python.framework` included libraries and " +"executables." +msgstr "" +"Фреймворк `/Library/Frameworks/Python.framework` що включає бібліотеки та " +"виконувані файли." + +#: ../../src/intro/install.txt:56 +msgid "Install from Homebrew" +msgstr "Встановити з Homebrew" + +#: ../../src/intro/install.txt:58 +msgid "" +"Python for MacOS is available via Homebrew. You are to search `formulae`_ " +"for the latest available version. In general, it's as easy as:" +msgstr "" +"Python для MacOS доступний через Homebrew. Ви повинні шукати `формули`_ для " +"останньої доступної версії. Загалом, це так само просто:" + +#: ../../src/intro/install.txt:66 +msgid "Windows" +msgstr "Windows" + +#: ../../src/intro/install.txt:68 +msgid "" +"As for MacOS, here is the official documentation: `Using Python on Windows`_." +msgstr "" +"Що стосується MacOS, ось офіційна документація: `Using Python on Windows`_." + +#: ../../src/intro/install.txt:70 +msgid "" +"For Windows' users the stable release is available from `downloads`_. Just " +"download the installer and proceed to common steps to install software." +msgstr "" +"Для користувачів Windows стабільний випуск доступний із `завантажень`_. " +"Просто завантажте програму встановлення та перейдіть до стандартних кроків " +"для встановлення програмного забезпечення." + +#: ../../src/intro/install.txt:73 +msgid "" +"It's recommended to **Add Python3.x to PATH**, this will avoid problems at " +"the beginning of your journey with Python" +msgstr "" +"Рекомендовано **Додати Python3.x до PATH**, це дозволить уникнути проблем на " +"початку вашого шляху з Python" + +#: ../../src/intro/install.txt:80 +msgid "Python installer first page" +msgstr "Перша сторінка інсталятора Python" + +#: ../../src/intro/install.txt:82 +msgid "Going on with **Install Now**:" +msgstr "Продовжуємо з **Встановити зараз**:" + +#: ../../src/intro/install.txt:84 +msgid "Python will be installed to your user directory" +msgstr "Python буде встановлено у ваш каталог користувача" + +#: ../../src/intro/install.txt:85 +msgid "" +"Python Launcher will be installed according to the option at the bottom of " +"the page" +msgstr "Python Launcher буде встановлено відповідно до опції внизу сторінки" + +#: ../../src/intro/install.txt:88 +msgid "" +"Using **Customize installation** will perform an *all-users* installation." +msgstr "" +"Використання **Налаштувати інсталяцію** виконає інсталяцію *для всіх " +"користувачів*." + +#: ../../src/intro/install.txt:91 +msgid "Removing the MAX_PATH Limitation" +msgstr "Видалення обмеження MAX_PATH" + +#: ../../src/intro/install.txt:93 +msgid "" +"Windows historically has limited path lengths to 260 characters. This meant " +"that paths longer than this would not resolve and errors would result. In " +"the latest versions of Windows, this limitation can be expanded to " +"approximately 32,000 characters. This allows the open() function, the os " +"module and most other path functionality to accept and return paths longer " +"than 260 characters." +msgstr "" +"Історично у Windows довжина шляху обмежена 260 символами. Це означало, що " +"шляхи, довші за цей, не вирішуватимуться, і спричинятимуться помилки. В " +"останніх версіях Windows це обмеження можна розширити приблизно до 32 000 " +"символів. Це дозволяє функції open(), модулю os і більшості інших функцій " +"шляху приймати та повертати шляхи, довші за 260 символів." + +#: ../../src/intro/install.txt:99 +msgid "You will need PC administrator assistance to perform this action." +msgstr "Для виконання цієї дії вам знадобиться допомога адміністратора ПК." + +#: ../../src/intro/install.txt:102 +msgid "Install from the Microsoft Store" +msgstr "Встановити з Microsoft Store" + +#: ../../src/intro/install.txt:104 +msgid "You can install from the Microsoft Store in two steps:" +msgstr "Ви можете встановити з Microsoft Store у два кроки:" + +#: ../../src/intro/install.txt:106 +msgid "" +"Open the Microsoft Store app and search for ``Python`` The result should " +"look like:" +msgstr "" +"Відкрийте програму Microsoft Store і знайдіть ``Python``. Результат має " +"виглядати так:" + +#: ../../src/intro/install.txt:112 +msgid "Microsoft Store - search results for \"Python\"" +msgstr "Microsoft Store - результати пошуку для \"Python\"" + +#: ../../src/intro/install.txt:114 +msgid "Select ``Python 3.9`` or the higher available version." +msgstr "Виберіть ``Python 3.9`` або вищу доступну версію." + +#: ../../src/intro/install.txt:116 +msgid "" +"Click **GET** and wait until the installer is downloaded. The installation " +"process should run automatically. Follow the installer's instructions." +msgstr "" +"Натисніть **GET** і дочекайтеся завантаження інсталятора. Процес " +"встановлення має запуститися автоматично. Дотримуйтесь інструкцій " +"інсталятора." + +#: ../../src/intro/install.txt:124 +msgid "Online Interpreters" +msgstr "Онлайн Інтерпретатори" + +#: ../../src/intro/install.txt:126 +msgid "" +"Installing or updating Python on your computer is the first step to becoming " +"a Python programmer :cite:`realpython:install-and-setup`." +msgstr "" +"Встановлення або оновлення Python на вашому комп’ютері – це перший крок до " +"того, щоб стати програмістом Python :cite:`realpython:install-and-setup`." + +#: ../../src/intro/install.txt:129 +msgid "" +"But if you cannot install Python at the moment for some reason, are can go " +"with online interpreters. `repl.it `_ provides the " +"ability to create and store Python scripts (they are called *repl* here) for " +"free." +msgstr "" +"Але якщо ви не можете встановити Python на даний момент з якоїсь причини, " +"можна скористатися онлайн-інтерпретаторами. `repl.it `_ " +"надає можливість безкоштовно створювати та зберігати сценарії Python (тут " +"вони називаються *repl*)." diff --git a/src/_locales/uk/LC_MESSAGES/intro/interact.po b/src/_locales/uk/LC_MESSAGES/intro/interact.po new file mode 100644 index 000000000..51ba6623e --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro/interact.po @@ -0,0 +1,267 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:12+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/intro/interact.txt:3 +msgid "Interacting with Python Interpreter" +msgstr "Взаємодія з інтерпретатором Python" + +#: ../../src/intro/interact.txt:5 +msgid "It’s time to write some Python code!" +msgstr "Настав час написати код на Python!" + +#: ../../src/intro/interact.txt:7 +msgid ":cite:t:`realpython:interact`" +msgstr ":cite:t:`realpython:interact`" + +#: ../../src/intro/interact.txt:9 +msgid "In short there are three major ways to do something with Python:" +msgstr "Коротше кажучи, є три основні способи зробити щось з Python:" + +#: ../../src/intro/interact.txt:11 +msgid "interactive Python console" +msgstr "інтерактивна консоль Python" + +#: ../../src/intro/interact.txt:12 +msgid "running code from file [#]_" +msgstr "запуск коду з файлу [#]_" + +#: ../../src/intro/interact.txt:13 +msgid "use online editors (like `repl.it `_)" +msgstr "" +"використовувати онлайн-редактори (наприклад, `repl.it `_)" + +#: ../../src/intro/interact.txt:16 +msgid "Using Python interpreter interactively" +msgstr "Використання інтерпретатора Python в інтерактивному режимі" + +#: ../../src/intro/interact.txt:18 +msgid "" +"Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight " +"forward way to start talking to Python. This simply means starting up the " +"interpreter and typing commands to it directly :cite:`realpython:interact`. " +"The interpreter:" +msgstr "" +"Використання середовища :abbr:`REPL (Read-Eval-Print-Loop)` є найпростішим " +"способом почати спілкування з Python. Це просто означає запуск " +"інтерпретатора та введення команд безпосередньо в нього :cite:`realpython:" +"interact`. Перекладач:" + +#: ../../src/intro/interact.txt:23 +msgid "Reads the command you enter" +msgstr "Читає введену команду" + +#: ../../src/intro/interact.txt:24 +msgid "Evaluates and executes it" +msgstr "Оцінює та виконує її" + +#: ../../src/intro/interact.txt:25 +msgid "Prints the output (if any) back to the console" +msgstr "Друкує результат (якщо є) назад на консоль" + +#: ../../src/intro/interact.txt:26 +msgid "Loops back and repeats" +msgstr "Повертається назад та повторює" + +#: ../../src/intro/interact.txt:29 +msgid "Starting the interpreter" +msgstr "Запуск інтерпретатора" + +#: ../../src/intro/interact.txt:31 +msgid "" +"In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the " +"installer placed a shortcut on the desktop to launch the Python." +msgstr "" +"У середовищі :abbr:`GUI (Graphic User Interface)`, імовірно, інсталятор " +"розмістив ярлик на робочому столі для запуску Python." + +#: ../../src/intro/interact.txt:34 +msgid "" +"For example in Windows the interpreter can be found in the **Start** menu " +"labeled **Python 3.x**:" +msgstr "" +"Наприклад, у Windows інтерпретатор можна знайти в меню **Пуск** з позначкою " +"**Python 3.x**:" + +#: ../../src/intro/interact.txt:40 +msgid "Windows start menu Python group" +msgstr "Меню Пуск Windows Група Python" + +#: ../../src/intro/interact.txt:42 +msgid "" +"In case you are getting error saying python is not installed, but you are " +"sure that the interpreter **is installed** - this means you have no Python " +"in your ``PATH``. Message may look like: ``'python' is not recognized as an " +"internal or external command`` / ``python: command not found``" +msgstr "" +"Якщо ви отримуєте повідомлення про те, що python не встановлено, але ви " +"впевнені, що інтерпретатор **встановлено**, це означає, що у вашому ``PATH`` " +"немає Python. Повідомлення може виглядати так: ``'python' не розпізнається " +"як внутрішня або зовнішня команда`` / ``python: команда не знайдена``" + +#: ../../src/intro/interact.txt:48 +msgid "Refer :doc:`/appx/env_path` for problem solution." +msgstr "Зверніться до :doc:`/appx/env_path` для вирішення проблеми." + +#: ../../src/intro/interact.txt:50 +msgid "The alternative is to launch from a terminal window:" +msgstr "Альтернативою є запуск із вікна терміналу:" + +#: ../../src/intro/interact.txt:52 +msgid "**Command Prompt** in Windows" +msgstr "**Командний рядок** у Windows" + +#: ../../src/intro/interact.txt:53 +msgid "**Terminal** both in macOS and Linux" +msgstr "**Термінал** в macOS і Linux" + +#: ../../src/intro/interact.txt:58 +msgid "Start Python via Command Prompt" +msgstr "Запуск Python через командний рядок" + +#: ../../src/intro/interact.txt:63 +msgid "Start Python via Terminal" +msgstr "Запуск Python через термінал" + +#: ../../src/intro/interact.txt:66 +msgid "Running code" +msgstr "Запускаємо код" + +#: ../../src/intro/interact.txt:68 +msgid "" +"Put the Python code in interactive console and press enter to execute it." +msgstr "" +"Помістіть код Python в інтерактивну консоль і натисніть enter, щоб виконати " +"його." + +#: ../../src/intro/interact.txt:70 +msgid "" +"Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after " +"it" +msgstr "" +"Переконайтеся, що підказка ``>>>`` відображається, а курсор знаходиться " +"після неї" + +#: ../../src/intro/interact.txt:72 +msgid "Type the command ``print(\"Hello, World!\")``" +msgstr "Введіть команду ``print(\"Hello, World!\")``" + +#: ../../src/intro/interact.txt:73 +msgid "Press enter" +msgstr "Натисніть enter" + +#: ../../src/intro/interact.txt:79 +msgid "Your session should look like:" +msgstr "Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:86 +msgid "" +"If you've seen string \"Hello, World!\" printed back, congrats - you've run " +"your first program in Python." +msgstr "" +"Якщо ви бачили рядок \"Hello, World!\" надруковано, вітаємо - ви запустили " +"свою першу програму на Python." + +#: ../../src/intro/interact.txt:94 +msgid "Exiting the interpreter" +msgstr "Вихід з інтерпретатора" + +#: ../../src/intro/interact.txt:96 +msgid "To exit the interactive console type \"exit\" and hit enter." +msgstr "Щоб вийти з інтерактивної консолі, введіть \"exit\" і натисніть Enter." + +#: ../../src/intro/interact.txt:103 +msgid "Running code from file" +msgstr "Запуск коду з файлу" + +#: ../../src/intro/interact.txt:105 +msgid "" +"A Python script is a reusable set of code. It is essentially a Python " +"program - a sequence of Python instructions - contained in a file. You can " +"run the program by specifying the name of the script file to the interpreter." +msgstr "" +"Сценарій Python — це багаторазовий набір коду. По суті, це програма на " +"Python – послідовність інструкцій Python, які містяться у файлі. Ви можете " +"запустити програму, вказавши інтерпретатору назву файлу сценарію." + +#: ../../src/intro/interact.txt:109 +msgid "" +"Python scripts are just plain text, so you can edit them with any text " +"editor. If you have a favorite programmer’s editor that operates on text " +"files, it should be fine to use. Otherwise here are some options for the " +"first time:" +msgstr "" +"Сценарії Python — це звичайний текст, тому ви можете редагувати їх у будь-" +"якому текстовому редакторі. Якщо у вас є улюблений програмістський редактор, " +"який працює з текстовими файлами, його цілком можна використовувати. Інакше " +"ось кілька варіантів для першого разу:" + +#: ../../src/intro/interact.txt:113 +msgid "Windows: |npp| `Notepad++ `_" +msgstr "Windows: |npp| `Notepad++ `_" + +#: ../../src/intro/interact.txt:148 +msgid "npp" +msgstr "npp" + +#: ../../src/intro/interact.txt:114 +msgid "Linux: |geany| `Geany `_" +msgstr "Linux: |geany| `Geany `_" + +#: ../../src/intro/interact.txt:150 +msgid "geany" +msgstr "geany" + +#: ../../src/intro/interact.txt:116 +msgid "" +"Using whatever editor create a script file called ``hello.py`` and put the " +"code in it:" +msgstr "" +"Використовуючи будь-який редактор, створіть файл сценарію під назвою ``hello." +"py`` і помістіть у нього код:" + +#: ../../src/intro/interact.txt:123 +msgid "" +"Save file keeping track on the directory you choose to save into. Now, open " +"the terminal or command prompt in this directory." +msgstr "" +"Збережіть файл, відстежуючи його в каталозі, який ви вибрали для збереження. " +"Тепер відкрийте термінал або командний рядок у цьому каталозі." + +#: ../../src/intro/interact.txt:126 +msgid "" +"In window you may open Command Prompt in the directory by typing \"cmd\" to " +"the address bar in explorer." +msgstr "" +"У вікні ви можете відкрити командний рядок у каталозі, ввівши \"cmd\" в " +"адресний рядок провідника." + +#: ../../src/intro/interact.txt:129 +msgid "In the terminal (or command prompt) type:" +msgstr "У терміналі (або командному рядку) введіть:" + +#: ../../src/intro/interact.txt:135 +msgid "" +"Python will print string \"Hello, World!\". Your session should look like:" +msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:144 +msgid "Files containing Python code are called *modules*." +msgstr "Файли, що містять код Python, називаються *модулями*." diff --git a/src/_locales/uk/LC_MESSAGES/linux.po b/src/_locales/uk/LC_MESSAGES/linux/index.po similarity index 91% rename from src/_locales/uk/LC_MESSAGES/linux.po rename to src/_locales/uk/LC_MESSAGES/linux/index.po index 7675956e4..5e917e0a9 100644 --- a/src/_locales/uk/LC_MESSAGES/linux.po +++ b/src/_locales/uk/LC_MESSAGES/linux/index.po @@ -1,5 +1,3 @@ -# LINUX BLOCK TRANSLATION. -# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. @@ -9,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:52+0300\n" +"PO-Revision-Date: 2023-10-05 20:12+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -17,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" #: ../../src/linux/index.txt:-1 msgid "Linux basics for Python developers" diff --git a/src/_locales/uk/LC_MESSAGES/oop/index.po b/src/_locales/uk/LC_MESSAGES/oop/index.po new file mode 100644 index 000000000..fc84bf980 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/index.po @@ -0,0 +1,46 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/index.txt:-1 +msgid "Object-oriented programming in Python" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/index.txt:-1 +msgid "python, oop, object-oriented programming, index" +msgstr "python, oop, object-oriented programming, index" + +#: ../../src/oop/index.txt:8 +msgid "Object-Oriented Programming" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:10 +msgid "" +"Object-oriented programming (OOP) is one of the biggest and most important " +"subjects in all of programming. It is a method of structuring a program by " +"bundling related properties and behavior into individual objects." +msgstr "" +"Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " +"найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " +"шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." diff --git a/src/_locales/uk/LC_MESSAGES/oop/inheritance.po b/src/_locales/uk/LC_MESSAGES/oop/inheritance.po new file mode 100644 index 000000000..d196a6b63 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/inheritance.po @@ -0,0 +1,36 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/inheritance.txt:-1 +msgid "Inheritance in Python" +msgstr "Наслідування в Python" + +#: ../../src/oop/inheritance.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/inheritance.txt:-1 +msgid "python, inheritance, oop, object-oriented programming" +msgstr "python, inheritance, oop, object-oriented programming" + +#: ../../src/oop/inheritance.txt:8 +msgid "Inheritance" +msgstr "Наслідування" diff --git a/src/_locales/uk/LC_MESSAGES/oop.po b/src/_locales/uk/LC_MESSAGES/oop/intro.po similarity index 85% rename from src/_locales/uk/LC_MESSAGES/oop.po rename to src/_locales/uk/LC_MESSAGES/oop/intro.po index 261c9d6b7..3c9da1ba5 100644 --- a/src/_locales/uk/LC_MESSAGES/oop.po +++ b/src/_locales/uk/LC_MESSAGES/oop/intro.po @@ -1,17 +1,13 @@ -# OBJECT-ORIENTED PROGRAMMING TOPICS -# # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:08+0300\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:14+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,53 +16,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/oop/index.txt:-1 -msgid "Object-oriented programming in Python" -msgstr "Об'єктно-орієнтоване програмування" - -#: ../../src/oop/index.txt:-1 ../../src/oop/inheritance.txt:-1 -#: ../../src/oop/intro.txt:-1 ../../src/oop/patterns.txt:-1 -#: ../../src/oop/solid.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/oop/index.txt:-1 -msgid "python, oop, object-oriented programming, index" -msgstr "python, oop, object-oriented programming, index" - -#: ../../src/oop/index.txt:8 -msgid "Object-Oriented Programming" -msgstr "Об'єктно-орієнтоване програмування" - -#: ../../src/oop/index.txt:10 -msgid "" -"Object-oriented programming (OOP) is one of the biggest and most important " -"subjects in all of programming. It is a method of structuring a program by " -"bundling related properties and behavior into individual objects." -msgstr "" -"Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " -"найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " -"шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." - -#: ../../src/oop/inheritance.txt:-1 -msgid "Inheritance in Python" -msgstr "Наслідування в Python" - -#: ../../src/oop/inheritance.txt:-1 -msgid "python, inheritance, oop, object-oriented programming" -msgstr "python, inheritance, oop, object-oriented programming" - -#: ../../src/oop/inheritance.txt:8 -msgid "Inheritance" -msgstr "Наслідування" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" #: ../../src/oop/intro.txt:-1 msgid "Introduction to OOP" msgstr "Введення в ООП" +#: ../../src/oop/intro.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + #: ../../src/oop/intro.txt:-1 msgid "python, intro, introduction, oop, object-oriented programming" msgstr "python, intro, introduction, oop, object-oriented programming" @@ -514,57 +474,3 @@ msgstr "" "Наприклад, у вас можуть бути різні класи, успадковані від базового класу, " "який забезпечує загальний інтерфейс, але кожен похідний клас може " "реалізовувати метод по-своєму." - -#: ../../src/oop/patterns.txt:-1 -msgid "Design patterns" -msgstr "Патерни проектування" - -#: ../../src/oop/patterns.txt:-1 -msgid "python, programming, design, patterns" -msgstr "python, programming, design, patterns" - -#: ../../src/oop/patterns.txt:8 -msgid "Design Patterns" -msgstr "Патерни Проектування" - -#: ../../src/oop/solid.txt:-1 -msgid "SOLID principles" -msgstr "Принципи SOLID" - -#: ../../src/oop/solid.txt:-1 -msgid "" -"python, solid, single, responsibility, open, closed, liskov, substitution, " -"interface, segregation, dependency, inversion, oop, object-oriented " -"programming" -msgstr "" -"python, solid, single, responsibility, open, closed, liskov, substitution, " -"interface, segregation, dependency, inversion, oop, object-oriented " -"programming" - -#: ../../src/oop/solid.txt:10 -msgid "SOLID Principles" -msgstr "Принципи SOLID" - -#~ msgid "" -#~ "Many programming languages has *access modifiers* implemented. The Python " -#~ "has also, but actually no. It's implemented as a convention-level. All " -#~ "class's members starting with underscore are considered to be " -#~ "**protected** members and should not be accessible outside the class " -#~ "instance; on the other hand members starting with two underscores are " -#~ "considered to be **private** members and shouldn't be accessible outside " -#~ "the class instance as well." -#~ msgstr "" -#~ "Багато мов програмування мають реалізовані модифікатори доступу. Python " -#~ "також має, але насправді ні. Він реалізований на рівні конвенції. Усі " -#~ "члени класу, які починаються з підкреслення, вважаються захищеними " -#~ "членами та не повинні бути доступними за межами екземпляр класу; з іншого " -#~ "боку, члени, які починаються з двох символів підкреслення, вважаються " -#~ "приватними членами та не повинні бути доступними за межами екземпляра " -#~ "класу." - -#~ msgid "" -#~ "With the implementation above there are **public** attributes, but you " -#~ "can still access data outside the class, but you definitely shouldn't." -#~ msgstr "" -#~ "З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " -#~ "можете отримати доступ до даних за межами класу, але точно не повинні." diff --git a/src/_locales/uk/LC_MESSAGES/oop/patterns.po b/src/_locales/uk/LC_MESSAGES/oop/patterns.po new file mode 100644 index 000000000..2e406dc76 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/patterns.po @@ -0,0 +1,36 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:14+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/patterns.txt:-1 +msgid "Design patterns" +msgstr "Патерни проектування" + +#: ../../src/oop/patterns.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/patterns.txt:-1 +msgid "python, programming, design, patterns" +msgstr "python, programming, design, patterns" + +#: ../../src/oop/patterns.txt:8 +msgid "Design Patterns" +msgstr "Патерни Проектування" diff --git a/src/_locales/uk/LC_MESSAGES/oop/solid.po b/src/_locales/uk/LC_MESSAGES/oop/solid.po new file mode 100644 index 000000000..0ca410450 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/solid.po @@ -0,0 +1,42 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:13+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/solid.txt:-1 +msgid "SOLID principles" +msgstr "Принципи SOLID" + +#: ../../src/oop/solid.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/solid.txt:-1 +msgid "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" +msgstr "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" + +#: ../../src/oop/solid.txt:10 +msgid "SOLID Principles" +msgstr "Принципи SOLID" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms.po b/src/_locales/uk/LC_MESSAGES/rdbms.po deleted file mode 100644 index 058d94f57..000000000 --- a/src/_locales/uk/LC_MESSAGES/rdbms.po +++ /dev/null @@ -1,1162 +0,0 @@ -# RELATIONAL DATABASES TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# -# SERHII HORODILOV -# -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." -"github.io/issues\n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:09+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/rdbms/aggregation.txt:-1 -msgid "Data aggregation" -msgstr "Агрегація даних" - -#: ../../src/rdbms/aggregation.txt:-1 ../../src/rdbms/index.txt:-1 -#: ../../src/rdbms/normalization.txt:-1 ../../src/rdbms/relations.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/rdbms/aggregation.txt:-1 -msgid "sql, db, database, data, aggregation, functions" -msgstr "sql, db, database, data, aggregation, functions" - -#: ../../src/rdbms/aggregation.txt:8 -msgid "Data Aggregation" -msgstr "Агрегація даних" - -#: ../../src/rdbms/aggregation.txt:10 -msgid "Here is some dummy data, that will be used as example in this section." -msgstr "" -"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." - -#: ../../src/rdbms/aggregation.txt:12 ../../src/rdbms/normalization.txt:1 -msgid "product" -msgstr "product" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 -msgid "id" -msgstr "id" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:179 -#: ../../src/rdbms/relations.txt:254 ../../src/rdbms/relations.txt:283 -#: ../../src/rdbms/relations.txt:318 ../../src/rdbms/relations.txt:350 -msgid "name" -msgstr "name" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -msgid "price" -msgstr "price" - -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 -#: ../../src/rdbms/products_table.csv:1 -msgid "category" -msgstr "category" - -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 -#: ../../src/rdbms/products_table.csv:1 -msgid "sold" -msgstr "sold" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 -#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 -msgid "1" -msgstr "1" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Samsung Galaxy" -msgstr "Samsung Galaxy" - -#: ../../src/rdbms/products_table.csv:1 -msgid "100000" -msgstr "100000" - -#: ../../src/rdbms/aggregation.txt:181 ../../src/rdbms/products_table.csv:1 -msgid "Phones" -msgstr "Phones" - -#: ../../src/rdbms/products_table.csv:1 -msgid "500" -msgstr "500" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 -#: ../../src/rdbms/relations.txt:183 -msgid "2" -msgstr "2" - -#: ../../src/rdbms/products_table.csv:1 -msgid "iPhone 13 Pro" -msgstr "iPhone 13 Pro" - -#: ../../src/rdbms/products_table.csv:1 -msgid "120000" -msgstr "120000" - -#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 -#: ../../src/rdbms/products_table.csv:1 -msgid "300" -msgstr "300" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 -msgid "3" -msgstr "3" - -#: ../../src/rdbms/products_table.csv:1 -msgid "MacBook Pro" -msgstr "MacBook Pro" - -#: ../../src/rdbms/products_table.csv:1 -msgid "350000" -msgstr "350000" - -#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 -#: ../../src/rdbms/products_table.csv:1 -msgid "Laptops" -msgstr "Laptops" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -msgid "100" -msgstr "100" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:164 -msgid "4" -msgstr "4" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Lenovo ThinkPad" -msgstr "Lenovo ThinkPad" - -#: ../../src/rdbms/products_table.csv:1 -msgid "150000" -msgstr "150000" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -msgid "200" -msgstr "200" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:166 -msgid "5" -msgstr "5" - -#: ../../src/rdbms/products_table.csv:1 -msgid "HP Printer" -msgstr "HP Printer" - -#: ../../src/rdbms/products_table.csv:1 -msgid "20000" -msgstr "20000" - -#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/products_table.csv:1 -msgid "Printers" -msgstr "Printers" - -#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/aggregation.txt:181 -#: ../../src/rdbms/products_table.csv:1 -msgid "800" -msgstr "800" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:168 -msgid "6" -msgstr "6" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Dell Monitor" -msgstr "Dell Monitor" - -#: ../../src/rdbms/products_table.csv:1 -msgid "50000" -msgstr "50000" - -#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 -#: ../../src/rdbms/products_table.csv:1 -msgid "Monitors" -msgstr "Monitors" - -#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 -#: ../../src/rdbms/products_table.csv:1 -msgid "400" -msgstr "400" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:170 -msgid "7" -msgstr "7" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Sony Headphones" -msgstr "Sony Headphones" - -#: ../../src/rdbms/products_table.csv:1 -msgid "30000" -msgstr "30000" - -#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 -#: ../../src/rdbms/products_table.csv:1 -msgid "Audio" -msgstr "Audio" - -#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 -#: ../../src/rdbms/products_table.csv:1 -msgid "0" -msgstr "0" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:172 -msgid "8" -msgstr "8" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Bose Soundbar" -msgstr "Bose Soundbar" - -#: ../../src/rdbms/products_table.csv:1 -msgid "70000" -msgstr "70000" - -#: ../../src/rdbms/products_table.csv:1 -msgid "9" -msgstr "9" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Xbox Series X" -msgstr "Xbox Series X" - -#: ../../src/rdbms/products_table.csv:1 -msgid "60000" -msgstr "60000" - -#: ../../src/rdbms/aggregation.txt:178 ../../src/rdbms/products_table.csv:1 -msgid "Gaming" -msgstr "Gaming" - -#: ../../src/rdbms/products_table.csv:1 -msgid "250" -msgstr "250" - -#: ../../src/rdbms/products_table.csv:1 -msgid "10" -msgstr "10" - -#: ../../src/rdbms/products_table.csv:1 -msgid "PlayStation 5" -msgstr "PlayStation 5" - -#: ../../src/rdbms/products_table.csv:1 -msgid "55000" -msgstr "55000" - -#: ../../src/rdbms/products_table.csv:1 -msgid "350" -msgstr "350" - -#: ../../src/rdbms/aggregation.txt:19 -msgid "The same dataset is available as:" -msgstr "The same dataset is available as:" - -#: ../../src/rdbms/aggregation.txt:21 -msgid ":download:`csv file <./products_table.csv>`" -msgstr ":download:`csv file <./products_table.csv>`" - -#: ../../src/rdbms/aggregation.txt:22 -msgid "" -":download:`postgres dump file `" -msgstr "" -":download:`postgres dump file `" - -#: ../../src/rdbms/aggregation.txt:25 -msgid "Aggregate functions" -msgstr "Агрегуючі функції" - -#: ../../src/rdbms/aggregation.txt:27 -msgid "" -"*Aggregate functions* compute a single result from a set of input values. " -"Various RDBMS implement various built-in aggregate functions. In this " -"section we will review 5 basic functions that are available in all RDBMS." -msgstr "" -"*Агрегатні функції* обчислюють один результат із набору вхідних значень. " -"Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " -"розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." - -#: ../../src/rdbms/aggregation.txt:34 -msgid "Count" -msgstr "Підрахунок" - -#: ../../src/rdbms/aggregation.txt:36 -msgid "" -"The ``count(field)`` function returns a count of the number of times that " -"``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " -"arguments) returns the total number of rows in the group." -msgstr "" -"Функція ``count(field)`` повертає кількість разів, коли ``field`` не є " -"``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " -"кількість рядків у групі." - -#: ../../src/rdbms/aggregation.txt:52 -msgid "Maximum value" -msgstr "Максимальне значення" - -#: ../../src/rdbms/aggregation.txt:54 -msgid "" -"The ``max()`` aggregate function returns the maximum value of all values in " -"the group. The maximum value is the value that would be returned last in an " -"ORDER BY on the same column. Aggregate function returns ``NULL`` if and only " -"if there are no non-NULL values in the group." -msgstr "" -"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень у " -"групі. Максимальне значення - це значення, яке буде повернуто останнім у " -"ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " -"і лише якщо в групі немає значень, відмінних від NULL." - -#: ../../src/rdbms/aggregation.txt:71 -msgid "Minimum value" -msgstr "Мінімальне значення" - -#: ../../src/rdbms/aggregation.txt:73 -msgid "" -"The ``min()`` aggregate function returns the minimum non-NULL value of all " -"values in the group. The minimum value is the first non-NULL value that " -"would appear in an ORDER BY of the column. Aggregate function returns " -"``NULL`` if and only if there are no non-NULL values in the group." -msgstr "" -"Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " -"значень у групі. Мінімальне значення - це перше значення не NULL, яке " -"з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " -"якщо в групі немає значень, відмінних від NULL." - -#: ../../src/rdbms/aggregation.txt:90 -msgid "Average value" -msgstr "Середнє значення" - -#: ../../src/rdbms/aggregation.txt:92 -msgid "" -"The ``avg()`` function returns the average value of all non-NULL inputs " -"within a group. String and BLOB values that do not look like numbers are " -"interpreted as 0. The result is always a floating point value whenever there " -"is at least one non-NULL input even if all inputs are integers. The result " -"is ``NULL`` if and only if there are no non-NULL inputs." -msgstr "" -"Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " -"групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " -"як 0. Результат завжди значення з плаваючою комою щоразу, коли є принаймні " -"один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " -"є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." - -#: ../../src/rdbms/aggregation.txt:110 -msgid "Sum of values" -msgstr "Сума значень" - -#: ../../src/rdbms/aggregation.txt:112 -msgid "" -"The ``sum()`` aggregate functions return the sum of all non-NULL values in " -"the group. If there are no non-NULL input rows then function returns " -"``NULL``." -msgstr "" -"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " -"NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." - -#: ../../src/rdbms/aggregation.txt:117 -msgid "" -"NULL is not normally a helpful result for the sum of no rows but the SQL " -"standard requires it." -msgstr "" -"NULL зазвичай не є корисним результатом для суми відсутності рядків, але " -"стандарт SQL вимагає цього." - -#: ../../src/rdbms/aggregation.txt:120 -msgid "" -"SQLite implements ``total`` aggregate function, that is similar to ``sum``, " -"but returns ``0.0`` (always floating point) if there are no non-NULL input " -"rows." -msgstr "" -"SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " -"повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " -"відмінних від NULL." - -#: ../../src/rdbms/aggregation.txt:135 -msgid "Grouping data" -msgstr "Групування даних" - -#: ../../src/rdbms/aggregation.txt:137 -msgid "" -"Getting some aggregated values is not very helpful itself. Most cases " -"require to group outputs in some specific manner." -msgstr "" -"Отримання деяких агрегованих значень не є дуже корисним саме по собі. " -"Більшість випадків вимагають згрупувати виходи певним чином." - -#: ../../src/rdbms/aggregation.txt:140 -msgid "" -"For example, if the task is to count number of registered categories it is " -"simple to solve as:" -msgstr "" -"Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " -"категорій, його просто вирішити так:" - -#: ../../src/rdbms/aggregation.txt:153 -msgid "" -"But in case, the task is to count **sold** items for each category, this " -"becomes impossible to solve without grouping items. ``GROUP BY`` clause " -"provides the ability to group rows based on some field(s) values." -msgstr "" -"Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " -"кожної категорії, це стає неможливим вирішити без групування товарів. Пункт " -"``GROUP BY`` надає можливість групувати рядки на основі певного значення " -"поля(ів)." - -#: ../../src/rdbms/aggregation.txt:157 -msgid "General syntax is:" -msgstr "Загальний синтаксис:" - -#: ../../src/rdbms/aggregation.txt:178 -msgid "600" -msgstr "600" - -#: ../../src/rdbms/aggregation.txt:184 -msgid "" -"If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " -"clause, then each of the expressions specified as part of the GROUP BY " -"clause is evaluated for each row of the dataset according to the processing " -"rules stated below for ORDER BY expressions. Each row is then assigned to a " -"\"group\" based on the results; rows for which the results of evaluating the " -"GROUP BY expressions are the same get assigned to the same group. For the " -"purposes of grouping rows, ``NULL`` values are considered equal. The usual " -"rules for selecting a collation sequence with which to compare text values " -"apply when evaluating expressions in a GROUP BY clause. The expressions in " -"the GROUP BY clause do not have to be expressions that appear in the result. " -"The expressions in a GROUP BY clause may not be aggregate expressions." -msgstr "" -"Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " -"тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " -"для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " -"для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " -"результатів; рядки, для яких результати оцінювання виразів GROUP BY однакові " -"призначаються до однієї групи. Для цілей групування рядків значення ``NULL`` " -"вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " -"якою порівнюються текстові значення, застосовуються під час оцінювання " -"виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " -"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " -"можуть бути сукупними виразами." - -#: ../../src/rdbms/aggregation.txt:197 -msgid "HAVING clause" -msgstr "Вираз HAVING" - -#: ../../src/rdbms/aggregation.txt:199 -msgid "" -"But what, if the task is to filter categories, that have less than 500 sold " -"items in it? ``WHERE`` clause will be useless, cause it's evaluated before " -"grouping output. In other words, only rows that suite WHERE filter will be " -"selected." -msgstr "" -"Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " -"500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " -"перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " -"вибрано фільтр." - -#: ../../src/rdbms/aggregation.txt:222 -msgid "" -"If a ``HAVING`` clause is specified, it is evaluated once for each group of " -"rows as a boolean expression. If the result of evaluating the HAVING clause " -"is false, the group is discarded. If the HAVING clause is an aggregate " -"expression, it is evaluated across all rows in the group." -msgstr "" -"Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " -"групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " -"хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " -"обчислюється в усіх рядках у групі." - -#: ../../src/rdbms/aggregation.txt:227 -msgid "" -"If a HAVING clause is a non-aggregate expression, it is evaluated with " -"respect to an arbitrarily selected row from the group. The HAVING expression " -"may refer to values, even aggregate functions, that are not in the result." -msgstr "" -"Якщо речення HAVING є неагрегатним виразом, воно оцінюється щодо довільно " -"вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " -"агрегатні функції, яких немає в результат." - -#: ../../src/rdbms/index.txt:-1 -msgid "Relational databases" -msgstr "Реляційні бази даних" - -#: ../../src/rdbms/index.txt:-1 -msgid "sql, db, database, intro, introduction, index" -msgstr "sql, db, database, intro, introduction, index" - -#: ../../src/rdbms/index.txt:8 -msgid "Relational Database" -msgstr "Реляційні бази даних" - -#: ../../src/rdbms/index.txt:10 -msgid "" -":abbr:`RDBMS (Relational Database Management System)` is a type of software " -"that helps users to create, update, manage, and access relational databases. " -"Relational databases organize data into tables, which consist of rows and " -"columns. Each column represents a specific attribute of the data, while each " -"row represents a specific instance of that data." -msgstr "" -":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " -"забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " -"отримувати доступ до реляційних баз даних. Реляційні бази даних " -"організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " -"стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " -"конкретний екземпляр цих даних." - -#: ../../src/rdbms/index.txt:16 -msgid "" -"RDBMS allow users to interact with the database using :abbr:`SQL (Structured " -"Query Language)`, which is a standard language for managing and manipulating " -"relational databases. SQL allows users to perform a variety of operations on " -"the database, including adding, updating, and deleting data, as well as " -"retrieving data based on specific criteria." -msgstr "" -"СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " -"(Structured Query Language)`, яка є стандартною мовою для керування і " -"маніпулювання реляційними базами даних. SQL дозволяє користувачам виконувати " -"різноманітність операцій з базою даних, включаючи додавання, оновлення та " -"видалення даних, а також отримання даних на основі певних критеріїв." - -#: ../../src/rdbms/index.txt:22 -msgid "" -"RDBMS also provide a range of features to ensure data integrity, such as " -"enforcing data constraints, supporting transactions, and providing backup " -"and recovery capabilities. Additionally, RDBMS systems often provide tools " -"for managing the database, such as user interfaces for creating and " -"modifying tables and views, and monitoring tools for optimizing database " -"performance." -msgstr "" -"СУБД також надає низку функцій для забезпечення цілісності даних, таких як " -"дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " -"резервного копіюванняі відновлення. Крім того, системи РСУБД часто надають " -"інструменти для керування базою даних, такі як інтерфейси користувача для " -"створення та модифікації таблиць і представлень, а також інструменти " -"моніторингу для оптимізації продуктивності бази даних." - -#: ../../src/rdbms/normalization.txt:-1 -msgid "Database normalization" -msgstr "Нормалізація баз даних" - -#: ../../src/rdbms/normalization.txt:-1 -msgid "sql, db, database, normalization" -msgstr "sql, db, database, normalization" - -#: ../../src/rdbms/normalization.txt:8 -msgid "Database Normalization" -msgstr "Нормалізація баз даних" - -#: ../../src/rdbms/normalization.txt:10 -msgid "" -"Normalization is a process of organizing data in a database so that it is " -"free from redundancy and dependency. It helps to eliminate data " -"inconsistencies and anomalies, thereby improving data integrity. " -"Normalization is a set of rules or guidelines to design a database schema in " -"such a way that it avoids data duplication, data redundancy, and data " -"inconsistency." -msgstr "" -"Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " -"вона була вільна від надлишковості та залежності. Це допомагає усунути " -"невідповідності та аномалії даних, тим самим покращуючи цілісність даних. " -"Нормалізація - це набір правил або вказівки щодо розробки схеми бази даних " -"таким чином, щоб уникнути дублювання даних, надмірності даних і " -"неузгодженості даних." - -#: ../../src/rdbms/normalization.txt:16 -msgid "" -"There are several normal forms, each building on the previous one, which " -"guide us in the normalization process. The most commonly used normal forms " -"are:" -msgstr "" -"Існує кілька нормальних форм, кожна з яких будується на попередній, які " -"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" - -#: ../../src/rdbms/normalization.txt:19 -msgid "" -"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " -"values. There should be no repeating groups or arrays of data in a table." -msgstr "" -"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " -"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " -"масивів даних." - -#: ../../src/rdbms/normalization.txt:22 -msgid "" -"**Second Normal Form (2NF)**: Each non-key column should be functionally " -"dependent on the entire primary key. In other words, every column in a table " -"should be related to the primary key and not dependent on any other non-key " -"columns." -msgstr "" -"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " -"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " -"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " -"інших неключових стовпців." - -#: ../../src/rdbms/normalization.txt:26 -msgid "" -"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " -"the primary key and not on any other non-key columns. This eliminates " -"transitive dependencies." -msgstr "" -"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " -"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " -"транзитивні залежності." - -#: ../../src/rdbms/normalization.txt:30 -msgid "" -"Normalization reduces data redundancy and dependency, making the database " -"more efficient, flexible, and scalable. It also helps in maintaining data " -"consistency and accuracy, and ensures that updates and deletions are " -"properly handled." -msgstr "" -"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " -"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " -"узгодженість і точність даних, а також гарантує належну обробку оновлень і " -"видалень." - -#: ../../src/rdbms/normalization.txt:36 -msgid "First normal form (1NF)" -msgstr "Перша нормальна форма (1NF)" - -#: ../../src/rdbms/normalization.txt:38 -msgid "" -"It's easier to understand normalization via examples. Let's start with some " -"dummy orders data." -msgstr "" -"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " -"про замовлення." - -#: ../../src/rdbms/normalization.txt:41 -msgid "Initial data" -msgstr "Початкові дані" - -#: ../../src/rdbms/normalization.txt:1 -msgid "order" -msgstr "order" - -#: ../../src/rdbms/normalization.txt:1 -msgid "customer" -msgstr "customer" - -#: ../../src/rdbms/normalization.txt:1 -msgid "quantity" -msgstr "quantity" - -#: ../../src/rdbms/normalization.txt:1 -msgid "total" -msgstr "total" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:185 -#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:368 -msgid "John Doe" -msgstr "John Doe" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(Apple, Orange)" -msgstr "(Apple, Orange)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(2, 3)" -msgstr "(2, 3)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(100, 50)" -msgstr "(100, 50)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(200, 150)" -msgstr "(200, 150)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Jane Smith" -msgstr "Jane Smith" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Banana" -msgstr "Banana" - -#: ../../src/rdbms/normalization.txt:1 -msgid "25" -msgstr "25" - -#: ../../src/rdbms/normalization.txt:48 -msgid "" -"This table violates 1NF, since its columns contain multiple values. To bring " -"this to 1NF all data within the table are to be atomic." -msgstr "" -"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " -"привести це до 1NF, усі дані в таблиці мають бути атомарними." - -#: ../../src/rdbms/normalization.txt:51 -msgid "1NF applied" -msgstr "Застосовано 1NF" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Apple" -msgstr "Apple" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Orange" -msgstr "Orange" - -#: ../../src/rdbms/normalization.txt:1 -msgid "50" -msgstr "50" - -#: ../../src/rdbms/normalization.txt:1 -msgid "150" -msgstr "150" - -#: ../../src/rdbms/normalization.txt:59 -msgid "From now each peace of data is represented as atomic value." -msgstr "Відтепер кожна частина даних представлена як атомарне значення." - -#: ../../src/rdbms/normalization.txt:62 -msgid "Second normal form (2NF)" -msgstr "Друга нормальна форма (2NF)" - -#: ../../src/rdbms/normalization.txt:64 -msgid "" -"The table above is in 1NF, but ``item price`` is dependent on the *item* " -"entity itself and have low cohesion to *orders*. To bring it into 2NF a " -"dedicated table to store information about items themselves is to be " -"created. After that ``order`` and ``product`` table are connected (related) " -"to each other via a foreign key." -msgstr "" -"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " -"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " -"потрібно створити окрему таблицю для зберігання інформації про самі товари. " -"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " -"одною за допомогою зовнішнього ключа." - -#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 -msgid "``order`` table" -msgstr "таблиця ``order``" - -#: ../../src/rdbms/normalization.txt:1 -msgid "product_id" -msgstr "product_id" - -#: ../../src/rdbms/normalization.txt:78 -msgid "``product`` table" -msgstr "таблиця ``product``" - -#: ../../src/rdbms/normalization.txt:103 -msgid "" -"``total`` field is also removed, since now it can be calculated as product " -"of ``product.price`` and ``order.quantity``." -msgstr "" -"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " -"добуток ``product.price`` і ``order.quantity``." - -#: ../../src/rdbms/normalization.txt:107 -msgid "Third normal form (3NF)" -msgstr "3-тя нормальна форма (3NF)" - -#: ../../src/rdbms/normalization.txt:109 -msgid "" -"At last it's time to remove a transitive functional dependency. Customer's " -"name is not actually dependent on a product, but on a person, who places an " -"order." -msgstr "" -"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " -"клієнта насправді залежить не від продукту, а від особи, яка робить " -"замовлення." - -#: ../../src/rdbms/normalization.txt:1 -msgid "customer_id" -msgstr "customer_id" - -#: ../../src/rdbms/normalization.txt:120 -msgid "``customer`` table" -msgstr "таблиця ``customer``" - -#: ../../src/rdbms/relations.txt:-1 -msgid "This document describes the database relationships" -msgstr "Цей документ описує відносини в базах даних" - -#: ../../src/rdbms/relations.txt:-1 -msgid "sql, db, database, relationship" -msgstr "sql, db, database, relationship" - -#: ../../src/rdbms/relations.txt:8 -msgid "Data Relationships" -msgstr "Зв'язки даних" - -#: ../../src/rdbms/relations.txt:10 -msgid "It's time to talk about **data relations**." -msgstr "Настав час поговорити про **відносини даних**." - -#: ../../src/rdbms/relations.txt:12 -msgid "" -"For example your database contains two tables: ``weather`` and ``city``. The " -"diagram below demonstrates the overall data structure:" -msgstr "" -"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " -"Діаграма нижче демонструє загальну структуру даних:" - -#: ../../src/rdbms/relations.txt:30 -msgid "" -"Consider the following problem: you want to make sure no one can insert a " -"record into ``weather`` without a matching entry in ``city`` table. This is " -"called maintaining the *referential integrity* of your data. In simplistic " -"database systems this would be implemented (if at all) by first looking at " -"the cities table to check if a matching record exists, and then inserting or " -"rejecting the new weather records. This approach has a number of problems " -"and is very inconvenient." -msgstr "" -"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " -"запис до ``weather`` без відповідного запису в ``city`` таблиці. " -"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " -"системах баз даних це було б реалізовано (якщо взагалі) спочатку " -"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " -"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " -"і дуже незручно." - -#: ../../src/rdbms/relations.txt:52 -msgid "" -"This declaration creates a relationship between two (or even more) tables." -msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." - -#: ../../src/rdbms/relations.txt:55 -msgid "Foreign key (FK)" -msgstr "Зовнішній ключ (FK)" - -#: ../../src/rdbms/relations.txt:57 -msgid "" -"So far, you have knowledge about **primary** keys. The **foreign** key is a " -"column, that *references* some another table. In common, it's a reference to " -"another table's PK; but there is no limitation of this kind, any column can " -"be referenced by another one. FKs handle data integrity only, it's not " -"required for FK to be non-NULL value." -msgstr "" -"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " -"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " -"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " -"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " -"відмінним від NULL." - -#: ../../src/rdbms/relations.txt:63 -msgid "" -"The relation's properties are described by CONSTRAINTS and the database's " -"structure." -msgstr "" -"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." - -#: ../../src/rdbms/relations.txt:66 -msgid "" -"For example, modifying declaration with ``NOT NULL`` constraint grants that " -"each record within a table has a matching one entity in another table." -msgstr "" -"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " -"запис у таблиці має відповідну сутність в іншій таблиці." - -#: ../../src/rdbms/relations.txt:76 -msgid "This brings us to various relationship models." -msgstr "Це підводить нас до різних моделей відносин." - -#: ../../src/rdbms/relations.txt:79 -msgid "One-to-many relationship (1-to-N)" -msgstr "Зв'язок один-до-багатьох (1-до-N)" - -#: ../../src/rdbms/relations.txt:81 -msgid "This is the most common relationship." -msgstr "Це найпоширеніший зв'язок." - -#: ../../src/rdbms/relations.txt:83 -msgid "" -"For the example above there are no limitations on temperature measurements " -"in a specified city. So, a single city may has 0 or N related records in " -"``weather`` table. But each weather record is related to the only one city." -msgstr "" -"Для наведеного вище прикладу немає обмежень на вимірювання температури у " -"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " -"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." - -#: ../../src/rdbms/relations.txt:87 -msgid "" -"Another example is employees and office buildings they work in. Some big " -"company may have multiple offices and employee across the globe. Multiple " -"employees can be present in a single office building at a time. But each " -"employee can be physically located only in a single office at a time." -msgstr "" -"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " -"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " -"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " -"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " -"одночасно." - -#: ../../src/rdbms/relations.txt:110 -msgid "One-to-one relationship (1-to-1)" -msgstr "One-to-one relationship (1-to-1)" - -#: ../../src/rdbms/relations.txt:112 -msgid "" -"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " -"and only one matching record. Back to the example with employees. Multiple " -"workstations (personal computers) are located in each office building. The " -"only one person can occupy the only one work station at a time." -msgstr "" -"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " -"наявність лише одного відповідного запису. Повернемося до прикладу зі " -"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " -"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " -"одну робочу станцію одночасно." - -#: ../../src/rdbms/relations.txt:123 -msgid "Many-to-many relationship (N-to-N)" -msgstr "Зв'язок багато-до-багатьох (N-до-N)" - -#: ../../src/rdbms/relations.txt:125 -msgid "" -"These relationships require additional table. A good example may be a " -"*project role*. There are many of them in a production team. And some " -"employees may be assigned to the same role (e.g. developers, testers etc.). " -"But also a single person can be a developer and tester at a time." -msgstr "" -"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " -"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " -"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " -"також одна людина може бути розробником і тестувальником одночасно." - -#: ../../src/rdbms/relations.txt:138 -msgid "Joining data" -msgstr "Об'єднання даних" - -#: ../../src/rdbms/relations.txt:140 -msgid "" -"``JOIN`` is used to *join* data fetched from multiple related tables. To " -"build a valid query you are to set the tables to join and parameter to use " -"for this operation." -msgstr "" -"``JOIN`` використовується для об'єднання даних, отриманих з кількох " -"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " -"таблиці для об'єднання та параметр, який використовується для цієї операції." - -#: ../../src/rdbms/relations.txt:144 -msgid "Common syntax is:" -msgstr "Загальний синтаксис:" - -#: ../../src/rdbms/relations.txt:150 -msgid "" -"There are various join types available. Here are is some dummy data to " -"demonstrate their purpose." -msgstr "" -"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " -"їх призначення." - -#: ../../src/rdbms/relations.txt:153 -msgid "poem" -msgstr "poem" - -#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 -#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 -#: ../../src/rdbms/relations.txt:350 -msgid "title" -msgstr "title" - -#: ../../src/rdbms/relations.txt:156 -msgid "author_id" -msgstr "author_id" - -#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 -#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 -#: ../../src/rdbms/relations.txt:352 -msgid "On the Field of Battle" -msgstr "On the Field of Battle" - -#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 -#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 -#: ../../src/rdbms/relations.txt:354 -msgid "Moses" -msgstr "Moses" - -#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 -#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 -#: ../../src/rdbms/relations.txt:356 -msgid "The Forest Song" -msgstr "The Forest Song" - -#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 -#: ../../src/rdbms/relations.txt:358 -msgid "In the Catacombs" -msgstr "In the Catacombs" - -#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 -#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 -#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 -#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 -#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 -#: ../../src/rdbms/relations.txt:368 -msgid "null" -msgstr "null" - -#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 -#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 -#: ../../src/rdbms/relations.txt:360 -msgid "The Singing Stones" -msgstr "The Singing Stones" - -#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 -#: ../../src/rdbms/relations.txt:362 -msgid "Ancient Fairy Tales" -msgstr "Ancient Fairy Tales" - -#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 -#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 -#: ../../src/rdbms/relations.txt:364 -msgid "My Thoughts" -msgstr "My Thoughts" - -#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 -#: ../../src/rdbms/relations.txt:366 -msgid "To Shevchenko" -msgstr "To Shevchenko" - -#: ../../src/rdbms/relations.txt:176 -msgid "author" -msgstr "author" - -#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 -#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 -#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 -#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 -#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 -#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 -#: ../../src/rdbms/relations.txt:360 -msgid "Larysa Kosach" -msgstr "Larysa Kosach" - -#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 -#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 -#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 -#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 -#: ../../src/rdbms/relations.txt:364 -msgid "Ivan Franko" -msgstr "Ivan Franko" - -#: ../../src/rdbms/relations.txt:217 -msgid "Join types" -msgstr "Join types" - -#: ../../src/rdbms/relations.txt -msgid "Cross join" -msgstr "Cross join" - -#: ../../src/rdbms/relations.txt:225 -msgid "" -"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " -"product), the joined table will contain a row consisting of all columns in " -"T1 followed by all columns in T2. If the tables have N and M rows " -"respectively, the joined table will have N * M rows." -msgstr "" -"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " -"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " -"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " -"відповідно, об’єднана таблиця матиме N * M рядків." - -#: ../../src/rdbms/relations.txt -msgid "Qualified joins" -msgstr "Qualified joins" - -#: ../../src/rdbms/relations.txt:236 -msgid "" -"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " -"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." -msgstr "" -"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " -"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." - -#: ../../src/rdbms/relations.txt:241 -msgid "INNER JOIN" -msgstr "INNER JOIN" - -#: ../../src/rdbms/relations.txt:243 -msgid "" -"For each row R1 of T1, the joined table has a row for each row in T2 that " -"satisfies the join condition with R1." -msgstr "" -"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " -"який задовольняє умову об'єднання з R1." - -#: ../../src/rdbms/relations.txt:246 -msgid "Inner join" -msgstr "Inner join" - -#: ../../src/rdbms/relations.txt:268 -msgid "LEFT OUTER JOIN" -msgstr "LEFT OUTER JOIN" - -#: ../../src/rdbms/relations.txt:270 -msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not " -"satisfy the join condition with any row in T2, a joined row is added with " -"null values in columns of T2. Thus, the joined table always has at least one " -"row for each row in T1." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " -"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " -"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." - -#: ../../src/rdbms/relations.txt:275 -msgid "Left join" -msgstr "Left join" - -#: ../../src/rdbms/relations.txt:303 -msgid "RIGHT OUTER JOIN" -msgstr "RIGHT OUTER JOIN" - -#: ../../src/rdbms/relations.txt:305 -msgid "" -"First, an inner join is performed. Then, for each row in T2 that does not " -"satisfy the join condition with any row in T1, a joined row is added with " -"null values in columns of T1. This is the converse of a left join: the " -"result table will always have a row for each row in T2." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " -"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " -"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " -"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " -"в T2." - -#: ../../src/rdbms/relations.txt:310 -msgid "Right join" -msgstr "Right join" - -#: ../../src/rdbms/relations.txt:334 -msgid "FULL OUTER JOIN" -msgstr "FULL OUTER JOIN" - -#: ../../src/rdbms/relations.txt:336 -msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not " -"satisfy the join condition with any row in T2, a joined row is added with " -"null values in columns of T2. Also, for each row of T2 that does not satisfy " -"the join condition with any row in T1, a joined row with null values in the " -"columns of T1 is added." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " -"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " -"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " -"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." - -#: ../../src/rdbms/relations.txt:342 -msgid "Full join" -msgstr "Full join" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po b/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po new file mode 100644 index 000000000..6fb3daa05 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po @@ -0,0 +1,479 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "Data aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "sql, db, database, data, aggregation, functions" +msgstr "sql, db, database, data, aggregation, functions" + +#: ../../src/rdbms/aggregation.txt:8 +msgid "Data Aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:10 +msgid "Here is some dummy data, that will be used as example in this section." +msgstr "" +"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." + +#: ../../src/rdbms/aggregation.txt:12 +msgid "product" +msgstr "product" + +#: ../../src/rdbms/products_table.csv:1 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/products_table.csv:1 +msgid "name" +msgstr "name" + +#: ../../src/rdbms/products_table.csv:1 +msgid "price" +msgstr "price" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 +#: ../../src/rdbms/products_table.csv:1 +msgid "category" +msgstr "category" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 +#: ../../src/rdbms/products_table.csv:1 +msgid "sold" +msgstr "sold" + +#: ../../src/rdbms/products_table.csv:1 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Samsung Galaxy" +msgstr "Samsung Galaxy" + +#: ../../src/rdbms/products_table.csv:1 +msgid "100000" +msgstr "100000" + +#: ../../src/rdbms/aggregation.txt:181 ../../src/rdbms/products_table.csv:1 +msgid "Phones" +msgstr "Phones" + +#: ../../src/rdbms/products_table.csv:1 +msgid "500" +msgstr "500" + +#: ../../src/rdbms/products_table.csv:1 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/products_table.csv:1 +msgid "iPhone 13 Pro" +msgstr "iPhone 13 Pro" + +#: ../../src/rdbms/products_table.csv:1 +msgid "120000" +msgstr "120000" + +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 +#: ../../src/rdbms/products_table.csv:1 +msgid "300" +msgstr "300" + +#: ../../src/rdbms/products_table.csv:1 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/products_table.csv:1 +msgid "MacBook Pro" +msgstr "MacBook Pro" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350000" +msgstr "350000" + +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 +#: ../../src/rdbms/products_table.csv:1 +msgid "Laptops" +msgstr "Laptops" + +#: ../../src/rdbms/products_table.csv:1 +msgid "100" +msgstr "100" + +#: ../../src/rdbms/products_table.csv:1 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Lenovo ThinkPad" +msgstr "Lenovo ThinkPad" + +#: ../../src/rdbms/products_table.csv:1 +msgid "150000" +msgstr "150000" + +#: ../../src/rdbms/products_table.csv:1 +msgid "200" +msgstr "200" + +#: ../../src/rdbms/products_table.csv:1 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/products_table.csv:1 +msgid "HP Printer" +msgstr "HP Printer" + +#: ../../src/rdbms/products_table.csv:1 +msgid "20000" +msgstr "20000" + +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/products_table.csv:1 +msgid "Printers" +msgstr "Printers" + +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/aggregation.txt:181 +#: ../../src/rdbms/products_table.csv:1 +msgid "800" +msgstr "800" + +#: ../../src/rdbms/products_table.csv:1 +msgid "6" +msgstr "6" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Dell Monitor" +msgstr "Dell Monitor" + +#: ../../src/rdbms/products_table.csv:1 +msgid "50000" +msgstr "50000" + +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 +#: ../../src/rdbms/products_table.csv:1 +msgid "Monitors" +msgstr "Monitors" + +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 +#: ../../src/rdbms/products_table.csv:1 +msgid "400" +msgstr "400" + +#: ../../src/rdbms/products_table.csv:1 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Sony Headphones" +msgstr "Sony Headphones" + +#: ../../src/rdbms/products_table.csv:1 +msgid "30000" +msgstr "30000" + +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 +#: ../../src/rdbms/products_table.csv:1 +msgid "Audio" +msgstr "Audio" + +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 +#: ../../src/rdbms/products_table.csv:1 +msgid "0" +msgstr "0" + +#: ../../src/rdbms/products_table.csv:1 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Bose Soundbar" +msgstr "Bose Soundbar" + +#: ../../src/rdbms/products_table.csv:1 +msgid "70000" +msgstr "70000" + +#: ../../src/rdbms/products_table.csv:1 +msgid "9" +msgstr "9" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Xbox Series X" +msgstr "Xbox Series X" + +#: ../../src/rdbms/products_table.csv:1 +msgid "60000" +msgstr "60000" + +#: ../../src/rdbms/aggregation.txt:178 ../../src/rdbms/products_table.csv:1 +msgid "Gaming" +msgstr "Gaming" + +#: ../../src/rdbms/products_table.csv:1 +msgid "250" +msgstr "250" + +#: ../../src/rdbms/products_table.csv:1 +msgid "10" +msgstr "10" + +#: ../../src/rdbms/products_table.csv:1 +msgid "PlayStation 5" +msgstr "PlayStation 5" + +#: ../../src/rdbms/products_table.csv:1 +msgid "55000" +msgstr "55000" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350" +msgstr "350" + +#: ../../src/rdbms/aggregation.txt:19 +msgid "The same dataset is available as:" +msgstr "The same dataset is available as:" + +#: ../../src/rdbms/aggregation.txt:21 +msgid ":download:`csv file <./products_table.csv>`" +msgstr ":download:`csv file <./products_table.csv>`" + +#: ../../src/rdbms/aggregation.txt:22 +msgid "" +":download:`postgres dump file `" +msgstr "" +":download:`postgres dump file `" + +#: ../../src/rdbms/aggregation.txt:25 +msgid "Aggregate functions" +msgstr "Агрегуючі функції" + +#: ../../src/rdbms/aggregation.txt:27 +msgid "" +"*Aggregate functions* compute a single result from a set of input values. " +"Various RDBMS implement various built-in aggregate functions. In this " +"section we will review 5 basic functions that are available in all RDBMS." +msgstr "" +"*Агрегатні функції* обчислюють один результат із набору вхідних значень. " +"Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " +"розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." + +#: ../../src/rdbms/aggregation.txt:34 +msgid "Count" +msgstr "Підрахунок" + +#: ../../src/rdbms/aggregation.txt:36 +msgid "" +"The ``count(field)`` function returns a count of the number of times that " +"``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " +"arguments) returns the total number of rows in the group." +msgstr "" +"Функція ``count(field)`` повертає кількість разів, коли ``field`` не є " +"``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " +"кількість рядків у групі." + +#: ../../src/rdbms/aggregation.txt:52 +msgid "Maximum value" +msgstr "Максимальне значення" + +#: ../../src/rdbms/aggregation.txt:54 +msgid "" +"The ``max()`` aggregate function returns the maximum value of all values in " +"the group. The maximum value is the value that would be returned last in an " +"ORDER BY on the same column. Aggregate function returns ``NULL`` if and only " +"if there are no non-NULL values in the group." +msgstr "" +"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень у " +"групі. Максимальне значення - це значення, яке буде повернуто останнім у " +"ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " +"і лише якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:71 +msgid "Minimum value" +msgstr "Мінімальне значення" + +#: ../../src/rdbms/aggregation.txt:73 +msgid "" +"The ``min()`` aggregate function returns the minimum non-NULL value of all " +"values in the group. The minimum value is the first non-NULL value that " +"would appear in an ORDER BY of the column. Aggregate function returns " +"``NULL`` if and only if there are no non-NULL values in the group." +msgstr "" +"Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " +"значень у групі. Мінімальне значення - це перше значення не NULL, яке " +"з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " +"якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:90 +msgid "Average value" +msgstr "Середнє значення" + +#: ../../src/rdbms/aggregation.txt:92 +msgid "" +"The ``avg()`` function returns the average value of all non-NULL inputs " +"within a group. String and BLOB values that do not look like numbers are " +"interpreted as 0. The result is always a floating point value whenever there " +"is at least one non-NULL input even if all inputs are integers. The result " +"is ``NULL`` if and only if there are no non-NULL inputs." +msgstr "" +"Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " +"групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " +"як 0. Результат завжди значення з плаваючою комою щоразу, коли є принаймні " +"один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " +"є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." + +#: ../../src/rdbms/aggregation.txt:110 +msgid "Sum of values" +msgstr "Сума значень" + +#: ../../src/rdbms/aggregation.txt:112 +msgid "" +"The ``sum()`` aggregate functions return the sum of all non-NULL values in " +"the group. If there are no non-NULL input rows then function returns " +"``NULL``." +msgstr "" +"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " +"NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." + +#: ../../src/rdbms/aggregation.txt:117 +msgid "" +"NULL is not normally a helpful result for the sum of no rows but the SQL " +"standard requires it." +msgstr "" +"NULL зазвичай не є корисним результатом для суми відсутності рядків, але " +"стандарт SQL вимагає цього." + +#: ../../src/rdbms/aggregation.txt:120 +msgid "" +"SQLite implements ``total`` aggregate function, that is similar to ``sum``, " +"but returns ``0.0`` (always floating point) if there are no non-NULL input " +"rows." +msgstr "" +"SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " +"повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " +"відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:135 +msgid "Grouping data" +msgstr "Групування даних" + +#: ../../src/rdbms/aggregation.txt:137 +msgid "" +"Getting some aggregated values is not very helpful itself. Most cases " +"require to group outputs in some specific manner." +msgstr "" +"Отримання деяких агрегованих значень не є дуже корисним саме по собі. " +"Більшість випадків вимагають згрупувати виходи певним чином." + +#: ../../src/rdbms/aggregation.txt:140 +msgid "" +"For example, if the task is to count number of registered categories it is " +"simple to solve as:" +msgstr "" +"Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " +"категорій, його просто вирішити так:" + +#: ../../src/rdbms/aggregation.txt:153 +msgid "" +"But in case, the task is to count **sold** items for each category, this " +"becomes impossible to solve without grouping items. ``GROUP BY`` clause " +"provides the ability to group rows based on some field(s) values." +msgstr "" +"Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " +"кожної категорії, це стає неможливим вирішити без групування товарів. Пункт " +"``GROUP BY`` надає можливість групувати рядки на основі певного значення " +"поля(ів)." + +#: ../../src/rdbms/aggregation.txt:157 +msgid "General syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/aggregation.txt:178 +msgid "600" +msgstr "600" + +#: ../../src/rdbms/aggregation.txt:184 +msgid "" +"If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " +"clause, then each of the expressions specified as part of the GROUP BY " +"clause is evaluated for each row of the dataset according to the processing " +"rules stated below for ORDER BY expressions. Each row is then assigned to a " +"\"group\" based on the results; rows for which the results of evaluating the " +"GROUP BY expressions are the same get assigned to the same group. For the " +"purposes of grouping rows, ``NULL`` values are considered equal. The usual " +"rules for selecting a collation sequence with which to compare text values " +"apply when evaluating expressions in a GROUP BY clause. The expressions in " +"the GROUP BY clause do not have to be expressions that appear in the result. " +"The expressions in a GROUP BY clause may not be aggregate expressions." +msgstr "" +"Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " +"тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " +"для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " +"для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " +"результатів; рядки, для яких результати оцінювання виразів GROUP BY однакові " +"призначаються до однієї групи. Для цілей групування рядків значення ``NULL`` " +"вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " +"якою порівнюються текстові значення, застосовуються під час оцінювання " +"виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " +"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " +"можуть бути сукупними виразами." + +#: ../../src/rdbms/aggregation.txt:197 +msgid "HAVING clause" +msgstr "Вираз HAVING" + +#: ../../src/rdbms/aggregation.txt:199 +msgid "" +"But what, if the task is to filter categories, that have less than 500 sold " +"items in it? ``WHERE`` clause will be useless, cause it's evaluated before " +"grouping output. In other words, only rows that suite WHERE filter will be " +"selected." +msgstr "" +"Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " +"500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " +"перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " +"вибрано фільтр." + +#: ../../src/rdbms/aggregation.txt:222 +msgid "" +"If a ``HAVING`` clause is specified, it is evaluated once for each group of " +"rows as a boolean expression. If the result of evaluating the HAVING clause " +"is false, the group is discarded. If the HAVING clause is an aggregate " +"expression, it is evaluated across all rows in the group." +msgstr "" +"Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " +"групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " +"хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " +"обчислюється в усіх рядках у групі." + +#: ../../src/rdbms/aggregation.txt:227 +msgid "" +"If a HAVING clause is a non-aggregate expression, it is evaluated with " +"respect to an arbitrarily selected row from the group. The HAVING expression " +"may refer to values, even aggregate functions, that are not in the result." +msgstr "" +"Якщо речення HAVING є неагрегатним виразом, воно оцінюється щодо довільно " +"вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " +"агрегатні функції, яких немає в результат." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/index.po b/src/_locales/uk/LC_MESSAGES/rdbms/index.po new file mode 100644 index 000000000..2a57d7a5b --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/index.po @@ -0,0 +1,80 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/index.txt:-1 +msgid "Relational databases" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/index.txt:-1 +msgid "sql, db, database, intro, introduction, index" +msgstr "sql, db, database, intro, introduction, index" + +#: ../../src/rdbms/index.txt:8 +msgid "Relational Database" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:10 +msgid "" +":abbr:`RDBMS (Relational Database Management System)` is a type of software " +"that helps users to create, update, manage, and access relational databases. " +"Relational databases organize data into tables, which consist of rows and " +"columns. Each column represents a specific attribute of the data, while each " +"row represents a specific instance of that data." +msgstr "" +":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " +"забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " +"отримувати доступ до реляційних баз даних. Реляційні бази даних " +"організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " +"стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " +"конкретний екземпляр цих даних." + +#: ../../src/rdbms/index.txt:16 +msgid "" +"RDBMS allow users to interact with the database using :abbr:`SQL (Structured " +"Query Language)`, which is a standard language for managing and manipulating " +"relational databases. SQL allows users to perform a variety of operations on " +"the database, including adding, updating, and deleting data, as well as " +"retrieving data based on specific criteria." +msgstr "" +"СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " +"(Structured Query Language)`, яка є стандартною мовою для керування і " +"маніпулювання реляційними базами даних. SQL дозволяє користувачам виконувати " +"різноманітність операцій з базою даних, включаючи додавання, оновлення та " +"видалення даних, а також отримання даних на основі певних критеріїв." + +#: ../../src/rdbms/index.txt:22 +msgid "" +"RDBMS also provide a range of features to ensure data integrity, such as " +"enforcing data constraints, supporting transactions, and providing backup " +"and recovery capabilities. Additionally, RDBMS systems often provide tools " +"for managing the database, such as user interfaces for creating and " +"modifying tables and views, and monitoring tools for optimizing database " +"performance." +msgstr "" +"СУБД також надає низку функцій для забезпечення цілісності даних, таких як " +"дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " +"резервного копіюванняі відновлення. Крім того, системи РСУБД часто надають " +"інструменти для керування базою даних, такі як інтерфейси користувача для " +"створення та модифікації таблиць і представлень, а також інструменти " +"моніторингу для оптимізації продуктивності бази даних." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po new file mode 100644 index 000000000..0011959a6 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po @@ -0,0 +1,295 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "Database normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "sql, db, database, normalization" +msgstr "sql, db, database, normalization" + +#: ../../src/rdbms/normalization.txt:8 +msgid "Database Normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:10 +msgid "" +"Normalization is a process of organizing data in a database so that it is " +"free from redundancy and dependency. It helps to eliminate data " +"inconsistencies and anomalies, thereby improving data integrity. " +"Normalization is a set of rules or guidelines to design a database schema in " +"such a way that it avoids data duplication, data redundancy, and data " +"inconsistency." +msgstr "" +"Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " +"вона була вільна від надлишковості та залежності. Це допомагає усунути " +"невідповідності та аномалії даних, тим самим покращуючи цілісність даних. " +"Нормалізація - це набір правил або вказівки щодо розробки схеми бази даних " +"таким чином, щоб уникнути дублювання даних, надмірності даних і " +"неузгодженості даних." + +#: ../../src/rdbms/normalization.txt:16 +msgid "" +"There are several normal forms, each building on the previous one, which " +"guide us in the normalization process. The most commonly used normal forms " +"are:" +msgstr "" +"Існує кілька нормальних форм, кожна з яких будується на попередній, які " +"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" + +#: ../../src/rdbms/normalization.txt:19 +msgid "" +"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " +"values. There should be no repeating groups or arrays of data in a table." +msgstr "" +"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " +"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " +"масивів даних." + +#: ../../src/rdbms/normalization.txt:22 +msgid "" +"**Second Normal Form (2NF)**: Each non-key column should be functionally " +"dependent on the entire primary key. In other words, every column in a table " +"should be related to the primary key and not dependent on any other non-key " +"columns." +msgstr "" +"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " +"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " +"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " +"інших неключових стовпців." + +#: ../../src/rdbms/normalization.txt:26 +msgid "" +"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " +"the primary key and not on any other non-key columns. This eliminates " +"transitive dependencies." +msgstr "" +"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " +"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " +"транзитивні залежності." + +#: ../../src/rdbms/normalization.txt:30 +msgid "" +"Normalization reduces data redundancy and dependency, making the database " +"more efficient, flexible, and scalable. It also helps in maintaining data " +"consistency and accuracy, and ensures that updates and deletions are " +"properly handled." +msgstr "" +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " +"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень і " +"видалень." + +#: ../../src/rdbms/normalization.txt:36 +msgid "First normal form (1NF)" +msgstr "Перша нормальна форма (1NF)" + +#: ../../src/rdbms/normalization.txt:38 +msgid "" +"It's easier to understand normalization via examples. Let's start with some " +"dummy orders data." +msgstr "" +"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " +"про замовлення." + +#: ../../src/rdbms/normalization.txt:41 +msgid "Initial data" +msgstr "Початкові дані" + +#: ../../src/rdbms/normalization.txt:1 +msgid "order" +msgstr "order" + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer" +msgstr "customer" + +#: ../../src/rdbms/normalization.txt:1 +msgid "product" +msgstr "product" + +#: ../../src/rdbms/normalization.txt:1 +msgid "quantity" +msgstr "quantity" + +#: ../../src/rdbms/normalization.txt:1 +msgid "price" +msgstr "price" + +#: ../../src/rdbms/normalization.txt:1 +msgid "total" +msgstr "total" + +#: ../../src/rdbms/normalization.txt:1 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/normalization.txt:1 +msgid "John Doe" +msgstr "John Doe" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(Apple, Orange)" +msgstr "(Apple, Orange)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(2, 3)" +msgstr "(2, 3)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(100, 50)" +msgstr "(100, 50)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(200, 150)" +msgstr "(200, 150)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Jane Smith" +msgstr "Jane Smith" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Banana" +msgstr "Banana" + +#: ../../src/rdbms/normalization.txt:1 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/normalization.txt:1 +msgid "25" +msgstr "25" + +#: ../../src/rdbms/normalization.txt:1 +msgid "100" +msgstr "100" + +#: ../../src/rdbms/normalization.txt:48 +msgid "" +"This table violates 1NF, since its columns contain multiple values. To bring " +"this to 1NF all data within the table are to be atomic." +msgstr "" +"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " +"привести це до 1NF, усі дані в таблиці мають бути атомарними." + +#: ../../src/rdbms/normalization.txt:51 +msgid "1NF applied" +msgstr "Застосовано 1NF" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Apple" +msgstr "Apple" + +#: ../../src/rdbms/normalization.txt:1 +msgid "200" +msgstr "200" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Orange" +msgstr "Orange" + +#: ../../src/rdbms/normalization.txt:1 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/normalization.txt:1 +msgid "50" +msgstr "50" + +#: ../../src/rdbms/normalization.txt:1 +msgid "150" +msgstr "150" + +#: ../../src/rdbms/normalization.txt:59 +msgid "From now each peace of data is represented as atomic value." +msgstr "Відтепер кожна частина даних представлена як атомарне значення." + +#: ../../src/rdbms/normalization.txt:62 +msgid "Second normal form (2NF)" +msgstr "Друга нормальна форма (2NF)" + +#: ../../src/rdbms/normalization.txt:64 +msgid "" +"The table above is in 1NF, but ``item price`` is dependent on the *item* " +"entity itself and have low cohesion to *orders*. To bring it into 2NF a " +"dedicated table to store information about items themselves is to be " +"created. After that ``order`` and ``product`` table are connected (related) " +"to each other via a foreign key." +msgstr "" +"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " +"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " +"потрібно створити окрему таблицю для зберігання інформації про самі товари. " +"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " +"одною за допомогою зовнішнього ключа." + +#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 +msgid "``order`` table" +msgstr "таблиця ``order``" + +#: ../../src/rdbms/normalization.txt:1 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/normalization.txt:1 +msgid "product_id" +msgstr "product_id" + +#: ../../src/rdbms/normalization.txt:78 +msgid "``product`` table" +msgstr "таблиця ``product``" + +#: ../../src/rdbms/normalization.txt:103 +msgid "" +"``total`` field is also removed, since now it can be calculated as product " +"of ``product.price`` and ``order.quantity``." +msgstr "" +"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " +"добуток ``product.price`` і ``order.quantity``." + +#: ../../src/rdbms/normalization.txt:107 +msgid "Third normal form (3NF)" +msgstr "3-тя нормальна форма (3NF)" + +#: ../../src/rdbms/normalization.txt:109 +msgid "" +"At last it's time to remove a transitive functional dependency. Customer's " +"name is not actually dependent on a product, but on a person, who places an " +"order." +msgstr "" +"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " +"клієнта насправді залежить не від продукту, а від особи, яка робить " +"замовлення." + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer_id" +msgstr "customer_id" + +#: ../../src/rdbms/normalization.txt:120 +msgid "``customer`` table" +msgstr "таблиця ``customer``" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po new file mode 100644 index 000000000..253b57112 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po @@ -0,0 +1,447 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/relations.txt:-1 +msgid "This document describes the database relationships" +msgstr "Цей документ описує відносини в базах даних" + +#: ../../src/rdbms/relations.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/relations.txt:-1 +msgid "sql, db, database, relationship" +msgstr "sql, db, database, relationship" + +#: ../../src/rdbms/relations.txt:8 +msgid "Data Relationships" +msgstr "Зв'язки даних" + +#: ../../src/rdbms/relations.txt:10 +msgid "It's time to talk about **data relations**." +msgstr "Настав час поговорити про **відносини даних**." + +#: ../../src/rdbms/relations.txt:12 +msgid "" +"For example your database contains two tables: ``weather`` and ``city``. The " +"diagram below demonstrates the overall data structure:" +msgstr "" +"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " +"Діаграма нижче демонструє загальну структуру даних:" + +#: ../../src/rdbms/relations.txt:30 +msgid "" +"Consider the following problem: you want to make sure no one can insert a " +"record into ``weather`` without a matching entry in ``city`` table. This is " +"called maintaining the *referential integrity* of your data. In simplistic " +"database systems this would be implemented (if at all) by first looking at " +"the cities table to check if a matching record exists, and then inserting or " +"rejecting the new weather records. This approach has a number of problems " +"and is very inconvenient." +msgstr "" +"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " +"запис до ``weather`` без відповідного запису в ``city`` таблиці. " +"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " +"системах баз даних це було б реалізовано (якщо взагалі) спочатку " +"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " +"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " +"і дуже незручно." + +#: ../../src/rdbms/relations.txt:52 +msgid "" +"This declaration creates a relationship between two (or even more) tables." +msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." + +#: ../../src/rdbms/relations.txt:55 +msgid "Foreign key (FK)" +msgstr "Зовнішній ключ (FK)" + +#: ../../src/rdbms/relations.txt:57 +msgid "" +"So far, you have knowledge about **primary** keys. The **foreign** key is a " +"column, that *references* some another table. In common, it's a reference to " +"another table's PK; but there is no limitation of this kind, any column can " +"be referenced by another one. FKs handle data integrity only, it's not " +"required for FK to be non-NULL value." +msgstr "" +"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " +"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " +"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " +"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " +"відмінним від NULL." + +#: ../../src/rdbms/relations.txt:63 +msgid "" +"The relation's properties are described by CONSTRAINTS and the database's " +"structure." +msgstr "" +"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." + +#: ../../src/rdbms/relations.txt:66 +msgid "" +"For example, modifying declaration with ``NOT NULL`` constraint grants that " +"each record within a table has a matching one entity in another table." +msgstr "" +"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " +"запис у таблиці має відповідну сутність в іншій таблиці." + +#: ../../src/rdbms/relations.txt:76 +msgid "This brings us to various relationship models." +msgstr "Це підводить нас до різних моделей відносин." + +#: ../../src/rdbms/relations.txt:79 +msgid "One-to-many relationship (1-to-N)" +msgstr "Зв'язок один-до-багатьох (1-до-N)" + +#: ../../src/rdbms/relations.txt:81 +msgid "This is the most common relationship." +msgstr "Це найпоширеніший зв'язок." + +#: ../../src/rdbms/relations.txt:83 +msgid "" +"For the example above there are no limitations on temperature measurements " +"in a specified city. So, a single city may has 0 or N related records in " +"``weather`` table. But each weather record is related to the only one city." +msgstr "" +"Для наведеного вище прикладу немає обмежень на вимірювання температури у " +"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " +"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." + +#: ../../src/rdbms/relations.txt:87 +msgid "" +"Another example is employees and office buildings they work in. Some big " +"company may have multiple offices and employee across the globe. Multiple " +"employees can be present in a single office building at a time. But each " +"employee can be physically located only in a single office at a time." +msgstr "" +"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " +"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " +"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " +"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " +"одночасно." + +#: ../../src/rdbms/relations.txt:110 +msgid "One-to-one relationship (1-to-1)" +msgstr "One-to-one relationship (1-to-1)" + +#: ../../src/rdbms/relations.txt:112 +msgid "" +"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " +"and only one matching record. Back to the example with employees. Multiple " +"workstations (personal computers) are located in each office building. The " +"only one person can occupy the only one work station at a time." +msgstr "" +"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " +"наявність лише одного відповідного запису. Повернемося до прикладу зі " +"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " +"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " +"одну робочу станцію одночасно." + +#: ../../src/rdbms/relations.txt:123 +msgid "Many-to-many relationship (N-to-N)" +msgstr "Зв'язок багато-до-багатьох (N-до-N)" + +#: ../../src/rdbms/relations.txt:125 +msgid "" +"These relationships require additional table. A good example may be a " +"*project role*. There are many of them in a production team. And some " +"employees may be assigned to the same role (e.g. developers, testers etc.). " +"But also a single person can be a developer and tester at a time." +msgstr "" +"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " +"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " +"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " +"також одна людина може бути розробником і тестувальником одночасно." + +#: ../../src/rdbms/relations.txt:138 +msgid "Joining data" +msgstr "Об'єднання даних" + +#: ../../src/rdbms/relations.txt:140 +msgid "" +"``JOIN`` is used to *join* data fetched from multiple related tables. To " +"build a valid query you are to set the tables to join and parameter to use " +"for this operation." +msgstr "" +"``JOIN`` використовується для об'єднання даних, отриманих з кількох " +"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " +"таблиці для об'єднання та параметр, який використовується для цієї операції." + +#: ../../src/rdbms/relations.txt:144 +msgid "Common syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/relations.txt:150 +msgid "" +"There are various join types available. Here are is some dummy data to " +"demonstrate their purpose." +msgstr "" +"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " +"їх призначення." + +#: ../../src/rdbms/relations.txt:153 +msgid "poem" +msgstr "poem" + +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 +#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 +#: ../../src/rdbms/relations.txt:350 +msgid "title" +msgstr "title" + +#: ../../src/rdbms/relations.txt:156 +msgid "author_id" +msgstr "author_id" + +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:352 +msgid "On the Field of Battle" +msgstr "On the Field of Battle" + +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 +#: ../../src/rdbms/relations.txt:183 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:354 +msgid "Moses" +msgstr "Moses" + +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 +#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 +#: ../../src/rdbms/relations.txt:356 +msgid "The Forest Song" +msgstr "The Forest Song" + +#: ../../src/rdbms/relations.txt:164 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:358 +msgid "In the Catacombs" +msgstr "In the Catacombs" + +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 +#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 +#: ../../src/rdbms/relations.txt:368 +msgid "null" +msgstr "null" + +#: ../../src/rdbms/relations.txt:166 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:360 +msgid "The Singing Stones" +msgstr "The Singing Stones" + +#: ../../src/rdbms/relations.txt:168 +msgid "6" +msgstr "6" + +#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 +#: ../../src/rdbms/relations.txt:362 +msgid "Ancient Fairy Tales" +msgstr "Ancient Fairy Tales" + +#: ../../src/rdbms/relations.txt:170 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 +#: ../../src/rdbms/relations.txt:364 +msgid "My Thoughts" +msgstr "My Thoughts" + +#: ../../src/rdbms/relations.txt:172 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:366 +msgid "To Shevchenko" +msgstr "To Shevchenko" + +#: ../../src/rdbms/relations.txt:176 +msgid "author" +msgstr "author" + +#: ../../src/rdbms/relations.txt:179 ../../src/rdbms/relations.txt:254 +#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 +#: ../../src/rdbms/relations.txt:350 +msgid "name" +msgstr "name" + +#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 +#: ../../src/rdbms/relations.txt:360 +msgid "Larysa Kosach" +msgstr "Larysa Kosach" + +#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 +#: ../../src/rdbms/relations.txt:364 +msgid "Ivan Franko" +msgstr "Ivan Franko" + +#: ../../src/rdbms/relations.txt:185 ../../src/rdbms/relations.txt:330 +#: ../../src/rdbms/relations.txt:368 +msgid "John Doe" +msgstr "John Doe" + +#: ../../src/rdbms/relations.txt:217 +msgid "Join types" +msgstr "Join types" + +#: ../../src/rdbms/relations.txt +msgid "Cross join" +msgstr "Cross join" + +#: ../../src/rdbms/relations.txt:225 +msgid "" +"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " +"product), the joined table will contain a row consisting of all columns in " +"T1 followed by all columns in T2. If the tables have N and M rows " +"respectively, the joined table will have N * M rows." +msgstr "" +"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " +"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " +"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " +"відповідно, об’єднана таблиця матиме N * M рядків." + +#: ../../src/rdbms/relations.txt +msgid "Qualified joins" +msgstr "Qualified joins" + +#: ../../src/rdbms/relations.txt:236 +msgid "" +"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " +"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +msgstr "" +"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " +"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." + +#: ../../src/rdbms/relations.txt:241 +msgid "INNER JOIN" +msgstr "INNER JOIN" + +#: ../../src/rdbms/relations.txt:243 +msgid "" +"For each row R1 of T1, the joined table has a row for each row in T2 that " +"satisfies the join condition with R1." +msgstr "" +"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " +"який задовольняє умову об'єднання з R1." + +#: ../../src/rdbms/relations.txt:246 +msgid "Inner join" +msgstr "Inner join" + +#: ../../src/rdbms/relations.txt:268 +msgid "LEFT OUTER JOIN" +msgstr "LEFT OUTER JOIN" + +#: ../../src/rdbms/relations.txt:270 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Thus, the joined table always has at least one " +"row for each row in T1." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " +"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." + +#: ../../src/rdbms/relations.txt:275 +msgid "Left join" +msgstr "Left join" + +#: ../../src/rdbms/relations.txt:303 +msgid "RIGHT OUTER JOIN" +msgstr "RIGHT OUTER JOIN" + +#: ../../src/rdbms/relations.txt:305 +msgid "" +"First, an inner join is performed. Then, for each row in T2 that does not " +"satisfy the join condition with any row in T1, a joined row is added with " +"null values in columns of T1. This is the converse of a left join: the " +"result table will always have a row for each row in T2." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " +"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " +"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " +"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " +"в T2." + +#: ../../src/rdbms/relations.txt:310 +msgid "Right join" +msgstr "Right join" + +#: ../../src/rdbms/relations.txt:334 +msgid "FULL OUTER JOIN" +msgstr "FULL OUTER JOIN" + +#: ../../src/rdbms/relations.txt:336 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Also, for each row of T2 that does not satisfy " +"the join condition with any row in T1, a joined row with null values in the " +"columns of T1 is added." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " +"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " +"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." + +#: ../../src/rdbms/relations.txt:342 +msgid "Full join" +msgstr "Full join" diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po deleted file mode 100644 index 6357ee984..000000000 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ /dev/null @@ -1,2548 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# FIRST AUTHOR , 2023. -# -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.06.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-01 11:38+0300\n" -"PO-Revision-Date: 2023-09-05 11:15+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: uk \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" - -#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 -#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 -msgid "Version control system" -msgstr "Система контролю версій" - -#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 -#: ../../src/vcs/intro.txt:-1 ../../src/vcs/pullrequest.txt:-1 -#: ../../src/vcs/setup.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/vcs/basics.txt:-1 -msgid "version, control, system, vcs, git, basics" -msgstr "version, control, system, vcs, git, basics" - -#: ../../src/vcs/basics.txt:8 -msgid "Git Basics" -msgstr "Основи Git" - -#: ../../src/vcs/basics.txt:11 -msgid "Getting a Git repository" -msgstr "Отримання Git-репозиторію" - -#: ../../src/vcs/basics.txt:13 -msgid "You typically obtain a Git repository in one of two ways:" -msgstr "Зазвичай ви отримуєте Git-репозиторій одним з двох способів:" - -#: ../../src/vcs/basics.txt:15 -msgid "" -"You can take a local directory that is currently not under version control, " -"and turn it into a Git repository." -msgstr "" -"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " -"версій, і перетворити його на Git-репозиторій." - -#: ../../src/vcs/basics.txt:17 -msgid "You can clone an existing Git repository from elsewhere." -msgstr "Ви можете клонувати існуюче сховище Git'а з іншого місця." - -#: ../../src/vcs/basics.txt:19 -msgid "" -"In either case, you end up with a Git repository on your local machine, " -"ready for work." -msgstr "" -"У будь-якому випадку, ви отримаєте Git-репозиторій на вашій локальній " -"машині, готовий до роботи." - -#: ../../src/vcs/basics.txt:23 -msgid "Initializing repo in an existing directory" -msgstr "Ініціалізація репо в існуючому каталозі" - -#: ../../src/vcs/basics.txt:25 -msgid "" -"If you have a project directory that is currently not under version control " -"and you want to start controlling it with Git, you first need to go to that " -"project's directory. If you've never done this, it looks a little different " -"depending on which system you're running:" -msgstr "" -"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " -"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " -"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " -"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" - -#: ../../src/vcs/basics.txt:30 -msgid "Change directory in bash (Linux)" -msgstr "Зміна каталогу в bash (Linux)" - -#: ../../src/vcs/basics.txt:35 -msgid "Change directory in bash (MacOS)" -msgstr "Зміна каталогу в bash (MacOS)" - -#: ../../src/vcs/basics.txt:40 -msgid "Change directory in PowerShell (Windows)" -msgstr "Зміна каталогу в PowerShell (Windows)" - -#: ../../src/vcs/basics.txt:45 -msgid "In the project's directory initialize a new Git repository." -msgstr "У каталозі проекту ініціалізуйте новий Git-репозиторій." - -#: ../../src/vcs/basics.txt:51 -msgid "" -"This creates a new subdirectory named .git that contains all of your " -"necessary repository files -- a Git repository skeleton." -msgstr "" -"Це створить новий підкаталог з ім'ям .git, який міститиме всі необхідні " -"файли сховища - скелет сховища Git." - -#: ../../src/vcs/basics.txt:55 -msgid "Cloning an existing repo" -msgstr "Клонування існуючого репо" - -#: ../../src/vcs/basics.txt:57 -msgid "" -"If you want to get a copy of an existing Git repository -- for example, a " -"project you'd like to contribute to -- the command you need is ``git clone``." -msgstr "" -"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " -"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." - -#: ../../src/vcs/basics.txt:64 -msgid "" -"That creates a directory named *edu-python-course.github.io*, initializes a " -"*.git* directory inside it, pulls down all the data for that repository, and " -"checks out a working copy of the latest version." -msgstr "" -"Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " -"каталог *.git* всередині нього, витягує всі дані для цього сховища і " -"перевіряє робочу копію останньої версії." - -#: ../../src/vcs/basics.txt:72 -msgid "" -"That command does the same thing as the previous one, but the target " -"directory is called *python-course*." -msgstr "" -"Ця команда робить те саме, що й попередня, але цільовий каталог називається " -"*python-course*." - -#: ../../src/vcs/basics.txt:75 -msgid "" -"Git has a number of different transfer protocols you can use. The previous " -"example uses the ``https://`` protocol, but you may also see ``git://`` or " -"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." -msgstr "" -"Git має декілька різних протоколів передачі даних, які ви можете " -"використовувати. У попередньому прикладі використовується протокол ``https://" -"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." -"git``, який використовує протокол передачі SSH." - -#: ../../src/vcs/basics.txt:80 -msgid "Making changes to the repo" -msgstr "Внесення змін до репозиторію" - -#: ../../src/vcs/basics.txt:82 -msgid "" -"At this point, you should have a *bona fide* Git repository on your local " -"machine, and a checkout or *working copy* of all of its files in front of " -"you. Typically, you'll want to start making changes and committing snapshots " -"of those changes into your repository each time the project reaches a state " -"you want to record." -msgstr "" -"На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " -"комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " -"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " -"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " -"зафіксувати." - -#: ../../src/vcs/basics.txt:88 -msgid "" -"Remember that each file in your working directory can be in one of two " -"states: **tracked** or **untracked**." -msgstr "" -"Пам'ятайте, що кожен файл у вашому робочому каталозі може перебувати в " -"одному з двох станів: **відстежується** або **невідстежується**." - -#: ../../src/vcs/basics.txt:91 -msgid "" -"Tracked files are files that were in the last snapshot, as well as any newly " -"staged files; they can be unmodified, modified, or staged. In short, tracked " -"files are files that Git knows about." -msgstr "" -"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" -"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " -"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " -"Git'у." - -#: ../../src/vcs/basics.txt:94 -msgid "" -"Untracked files are everything else -- any files in your working directory " -"that were not in your last snapshot and are not in your staging area. " -"Untracked basically means that Git sees a file you didn't have in a previous " -"snapshot (commit), and which hasn't been yet staged." -msgstr "" -"Невідстежені файли - це все інше - будь-які файли у вашому робочому " -"каталозі, яких не було у вашому останньому знімку і які не перебувають у " -"вашій області сховища. По суті, це означає, що Git бачить файл, якого не " -"було у попередньому знімку (комміті), і який ще не було покладено у сховище." - -#: ../../src/vcs/basics.txt:104 -msgid "Checking out status of the file(s)" -msgstr "Перевірка стану файлу(ів)" - -#: ../../src/vcs/basics.txt:106 -msgid "" -"The main tool you use to determine which files are in which state is the " -"``git status`` command." -msgstr "" -"Основним інструментом для визначення стану файлів є команда ``git status``." - -#: ../../src/vcs/basics.txt:133 -msgid "" -"Newly added *README.md* file is untracked, because it's under \"Untracked " -"files\" heading the status output." -msgstr "" -"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " -"розділі \"Файли, що не відстежуються\" у виведенні статусу." - -#: ../../src/vcs/basics.txt:137 -msgid "Tracking new files" -msgstr "Відстеження нових файлів" - -#: ../../src/vcs/basics.txt:139 -msgid "In order to begin tracking a new file, you use the ``git add`` command." -msgstr "" -"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " -"add``." - -#: ../../src/vcs/basics.txt:153 -msgid "" -"From now *README.md* file is **added** to the stage area and ready to be " -"committed (is under \"Changes to be committed\" heading)." -msgstr "" -"Відтепер файл *README.md* **додано** до області сцени і він готовий до " -"фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." - -#: ../../src/vcs/basics.txt:157 -msgid "" -"You can use wildcards, to stage multiple files at once. The most common use " -"cases is to add **all** modified files, or files inside of a specific " -"directory." -msgstr "" -"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " -"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " -"змінених файлів або файлів у певному каталозі." - -#: ../../src/vcs/basics.txt:168 -msgid "Staging modified files" -msgstr "Зберігання змінених файлів" - -#: ../../src/vcs/basics.txt:170 -msgid "" -"If a staged (or already committed) file has been changed, it will be moved " -"under \"Modified\" heading. These changes wouldn't be committed unless they " -"are staged." -msgstr "" -"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " -"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " -"вони не були поетапними." - -#: ../../src/vcs/basics.txt:190 -msgid "" -"Changes may be added to the stage area by repeating ``git add`` command." -msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." - -#: ../../src/vcs/basics.txt:191 -msgid "" -"Changes may be discard by ``git restore `` command. This action will " -"restore file to its **staged** version." -msgstr "" -"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " -"до його **попередньої** версії." - -#: ../../src/vcs/basics.txt:195 -msgid "Committing changes" -msgstr "Фіксація змін" - -#: ../../src/vcs/basics.txt:197 -msgid "" -"Now that the stage area is set up the way required, it's time to commit " -"changes. Remember that anything that is still unstaged -- any files you have " -"created or modified that you haven't run git add on since you edited them -- " -"won't go into this commit." -msgstr "" -"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " -"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " -"створили або змінили, але не запустили git-додаток з моменту редагування, - " -"не потраплять до цього коміту." - -#: ../../src/vcs/basics.txt:202 -msgid "The simplest way to commit is to type ``git commit``:" -msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" - -#: ../../src/vcs/basics.txt:208 -msgid "Doing so launches your editor of choice." -msgstr "Після цього запуститься обраний вами редактор." - -#: ../../src/vcs/basics.txt:211 -msgid "" -"This is set by your shell's EDITOR environment variable -- usually vim or " -"emacs, although you can configure it with whatever you want using the ``git " -"config --global core.editor``" -msgstr "" -"Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " -"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" -"global core.editor``" - -#: ../../src/vcs/basics.txt:215 -msgid "" -"Alternatively, you can type your commit message inline with the ``commit`` " -"command by specifying it after a ``-m`` flag, like this:" -msgstr "" -"Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " -"``commit``, вказавши його після прапорця ``-m``, як показано нижче:" - -#: ../../src/vcs/basics.txt:222 -msgid "" -"Although it can be amazingly useful for crafting commits exactly how you " -"want them, the staging area is sometimes a bit more complex than you need in " -"your workflow. If you want to skip the staging area, Git provides a simple " -"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " -"automatically stage every file that is already tracked before doing the " -"commit, letting you skip the git add part:" -msgstr "" -"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " -"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " -"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " -"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " -"commit`` змушує Git автоматично стадіювати кожен файл, який вже " -"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " -"git add:" - -#: ../../src/vcs/basics.txt:263 -msgid "Ignoring files" -msgstr "Ігнорування файлів" - -#: ../../src/vcs/basics.txt:265 -msgid "" -"Often, there is a class of files, that should not be a part of a repo. You " -"want these files to be prevent from being automatically added or even shown " -"as being untracked. These are generally files produced by loggers or a build " -"system, or some local settings for the project that shouldn't be shared " -"across other developers or maintainers. In such cases you can create a *." -"gitignore* file. Here is the content of *.gitignore* used in current " -"repository:" -msgstr "" -"Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " -"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " -"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " -"системою збірки, або деякі локальні налаштування проекту, які не повинні " -"бути доступними для інших розробників або супровідників. У таких випадках ви " -"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " -"використовується у поточному сховищі:" - -#: ../../src/vcs/basics.txt:305 -msgid "These lines mean:" -msgstr "Ці рядки означають:" - -#: ../../src/vcs/basics.txt:307 -msgid "" -"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " -"will be ignored completely." -msgstr "" -"Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " -"повністю проігноровано." - -#: ../../src/vcs/basics.txt:309 -msgid "Content within \"node_modules\" directory will be ignored completely." -msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." - -#: ../../src/vcs/basics.txt:310 -msgid "" -"Any files within directories named \".vscode\" or \".idea\" will be ignored " -"completely." -msgstr "" -"Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " -"повністю проігноровані." - -#: ../../src/vcs/basics.txt:312 -msgid "Any file with name starting with hash (#) will be ignored." -msgstr "" -"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." - -#: ../../src/vcs/basics.txt:313 -msgid "Any file with name ending with tilda (~) will be ignored." -msgstr "" -"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." - -#: ../../src/vcs/basics.txt:314 -msgid "" -"Content within directories named \"temp\" or \"tmp\" will be ignored " -"completely." -msgstr "" -"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." - -#: ../../src/vcs/basics.txt:316 -msgid "" -"Content within directories named \"_builds\", \"_build\", \"builds\" or " -"\"build\" will be ignored completely." -msgstr "" -"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " -"буде повністю проігноровано." - -#: ../../src/vcs/basics.txt:318 -msgid "Any file with name ending with \".pot\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." - -#: ../../src/vcs/basics.txt:319 -msgid "Any file with name ending with \".mo\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." - -#: ../../src/vcs/basics.txt:321 -msgid "" -"Setting up a *.gitignore* file for your new repository before you get going " -"is generally a good idea so you don't accidentally commit files that you " -"really don't want in your Git repository." -msgstr "" -"Створення файлу *.gitignore* для вашого нового сховища перед початком " -"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " -"вам насправді не потрібні у вашому Git-репозиторії." - -#: ../../src/vcs/basics.txt:325 -msgid "" -"The rules for the patterns you can put in the *.gitignore* file are as " -"follows:" -msgstr "" -"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" - -#: ../../src/vcs/basics.txt:327 -msgid "Blank lines or lines starting with # are ignored." -msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." - -#: ../../src/vcs/basics.txt:328 -msgid "" -"Standard glob patterns work, and will be applied recursively throughout the " -"entire working tree." -msgstr "" -"Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " -"по всьому робочому дереву." - -#: ../../src/vcs/basics.txt:330 -msgid "" -"You can start patterns with a forward slash (/) to avoid recursive inclusion." -msgstr "" -"Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " -"похилої риски (/)." - -#: ../../src/vcs/basics.txt:332 -msgid "You can end patterns with a forward slash (/) to specify a directory." -msgstr "" -"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." - -#: ../../src/vcs/basics.txt:333 -msgid "You can negate a pattern by starting it with an exclamation point (!)." -msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." - -#: ../../src/vcs/basics.txt:335 -msgid "" -"Glob patterns are like simplified regular expressions that shells use. An " -"asterisk (\\*) matches zero or more characters; [ab] matches any character " -"inside the brackets (in this case a or b); a question mark (?) matches a " -"single character; and brackets enclosing characters separated by a hyphen " -"([0-9]) matches any character between them (in this case 0 through 9). You " -"can also use two asterisks to match nested directories; a/\\*\\*/z would " -"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." -msgstr "" -"Глобальні шаблони подібні до спрощених регулярних виразів, які " -"використовують оболонки. Зірочка (\\*) відповідає нулю або більше символів; " -"[ab] відповідає будь-якому символу всередині дужок (у цьому випадку a або " -"b); знак питання (?) відповідає одному символу; а дужки, що містять символи, " -"розділені дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому " -"випадку від 0 до 9). Ви також можете використовувати дві зірочки для " -"вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " -"так далі." - -#: ../../src/vcs/basics.txt:344 -msgid "Viewing the commit history" -msgstr "Перегляд історії коммітів" - -#: ../../src/vcs/basics.txt:346 -msgid "" -"After you have created several commits, or if you have cloned a repository " -"with an existing commit history, you'll probably want to look back to see " -"what has happened. The most basic and powerful tool to do this is the ``git " -"log`` command." -msgstr "" -"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " -"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " -"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " -"команда ``git log``." - -#: ../../src/vcs/basics.txt:372 -msgid "" -"By default, with no arguments, ``git log`` lists the commits made in that " -"repository in reverse chronological order; that is, the most recent commits " -"show up first. As you can see, this command lists each commit with its SHA-1 " -"checksum, the author's name and email, the date written, and the commit " -"message." -msgstr "" -"За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " -"зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " -"найновіші комміти показуються першими. Як ви можете бачити, ця команда " -"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " -"адресою автора, датою створення та повідомленням про внесення." - -#: ../../src/vcs/basics.txt:378 -msgid "" -"One of the more helpful options is ``-p`` or ``--patch``, which shows the " -"difference (the *patch* output) introduced in each commit. You can also " -"limit the number of log entries displayed, such as using ``-`` to " -"show only desired number of latest entries." -msgstr "" -"Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " -"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " -"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" -"``, щоб показати лише потрібну кількість останніх записів." - -#: ../../src/vcs/basics.txt:414 -msgid "" -"This option display the same information but with a diff directly following " -"each entry. This is very helpful for code review or to quickly browse what " -"happened during a series of commits that a collaborator has added. You can " -"also use a series of summarizing options with ``git log``." -msgstr "" -"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " -"кожного запису. Це дуже корисно для перегляду коду або для швидкого " -"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " -"також можете скористатися низкою параметрів підсумовування за допомогою " -"``git log``." - -#: ../../src/vcs/basics.txt:419 -msgid "" -"If you want to see some abbreviated stats for each commit, you can use the " -"``--stat`` option:" -msgstr "" -"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " -"скористатися опцією ``--stat``:" - -#: ../../src/vcs/basics.txt:443 -msgid "" -"Another really useful option is ``--pretty``. This option changes the log " -"output to formats other that the default. A few prebuilt option values are " -"available for you to use. The ``oneline`` value for this option prints each " -"commit on a single line, which is useful if you're look a lot of commits. In " -"addition, the ``short``, ``full``, and ``fuller`` values show the output in " -"roughly the same format but with less or more information." -msgstr "" -"Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " -"формат виведення журналу на формат, відмінний від стандартного. Ви можете " -"скористатися кількома готовими значеннями цього параметра. Значення " -"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " -"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " -"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " -"форматі, але з меншою або більшою кількістю інформації." - -#: ../../src/vcs/basics.txt:476 -msgid "Specifier" -msgstr "Специфікатор" - -#: ../../src/vcs/basics.txt:476 -msgid "Description of Output" -msgstr "Опис Результатів" - -#: ../../src/vcs/basics.txt:478 -msgid "%H" -msgstr "%H" - -#: ../../src/vcs/basics.txt:478 -msgid "Commit hash" -msgstr "Хеш комміту" - -#: ../../src/vcs/basics.txt:480 -msgid "%h" -msgstr "%h" - -#: ../../src/vcs/basics.txt:480 -msgid "Abbreviated commit hash" -msgstr "Скорочений хеш коміту" - -#: ../../src/vcs/basics.txt:482 -msgid "%T" -msgstr "%T" - -#: ../../src/vcs/basics.txt:482 -msgid "Tree hash" -msgstr "Дерево хешу" - -#: ../../src/vcs/basics.txt:484 -msgid "%t" -msgstr "%t" - -#: ../../src/vcs/basics.txt:484 -msgid "Abbreviated tree hash" -msgstr "Скорочений хеш дерева" - -#: ../../src/vcs/basics.txt:486 -msgid "%P" -msgstr "%P" - -#: ../../src/vcs/basics.txt:486 -msgid "Parent hashes" -msgstr "Батьківські хеші" - -#: ../../src/vcs/basics.txt:488 -msgid "%p" -msgstr "%p" - -#: ../../src/vcs/basics.txt:488 -msgid "Abbreviated parent hashes" -msgstr "Скорочені батьківські хеші" - -#: ../../src/vcs/basics.txt:490 -msgid "%an" -msgstr "%an" - -#: ../../src/vcs/basics.txt:490 -msgid "Author name" -msgstr "Ім'я автора" - -#: ../../src/vcs/basics.txt:492 -msgid "%ae" -msgstr "%ae" - -#: ../../src/vcs/basics.txt:492 -msgid "Author email" -msgstr "Електронна пошта автора" - -#: ../../src/vcs/basics.txt:494 -msgid "%ad" -msgstr "%ad" - -#: ../../src/vcs/basics.txt:494 -msgid "Author date (format respects the --date=option)" -msgstr "Дата автора (формат відповідає параметру --date=option)" - -#: ../../src/vcs/basics.txt:496 -msgid "%ar" -msgstr "%ar" - -#: ../../src/vcs/basics.txt:496 -msgid "Author date, relative" -msgstr "Дата автора, відносна" - -#: ../../src/vcs/basics.txt:498 -#, python-format -msgid "%cn" -msgstr "%cn" - -#: ../../src/vcs/basics.txt:498 -msgid "Committer name" -msgstr "Ім'я коммітера" - -#: ../../src/vcs/basics.txt:500 -#, python-format -msgid "%ce" -msgstr "%ce" - -#: ../../src/vcs/basics.txt:500 -msgid "Committer email" -msgstr "Електронна пошта коммітера" - -#: ../../src/vcs/basics.txt:502 -#, python-format -msgid "%cd" -msgstr "%cd" - -#: ../../src/vcs/basics.txt:502 -msgid "Committer date" -msgstr "Дата коммітера" - -#: ../../src/vcs/basics.txt:504 -#, python-format -msgid "%cr" -msgstr "%cr" - -#: ../../src/vcs/basics.txt:504 -msgid "Committer date, relative" -msgstr "Дата коммітера, відносна" - -#: ../../src/vcs/basics.txt:506 -#, python-format -msgid "%s" -msgstr "%s" - -#: ../../src/vcs/basics.txt:506 -msgid "Subject" -msgstr "Тема" - -#: ../../src/vcs/basics.txt:509 -msgid "" -"The ``oneline`` and ``format`` option values are particularly useful with " -"another ``log`` option called ``--graph``. This option adds a nice little " -"ASCII graph showing your branch and merge history:" -msgstr "" -"Значення параметрів ``online`` і ``format`` особливо корисні з іншим " -"параметром ``log``, який називається ``--graph``. Цей параметр додає " -"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " -"злиття:" - -#: ../../src/vcs/basics.txt:538 -msgid "" -"There are many more output-formatting options to ``git log``. Common options " -"to ``git log`` are:" -msgstr "" -"Існує набагато більше варіантів форматування виводу для ``git log``. " -"Загальними параметрами ``git log`` є наступні:" - -#: ../../src/vcs/basics.txt:542 -msgid "Option" -msgstr "Опція" - -#: ../../src/vcs/basics.txt:542 -msgid "Description" -msgstr "Опис" - -#: ../../src/vcs/basics.txt:544 -msgid "-p" -msgstr "-p" - -#: ../../src/vcs/basics.txt:544 -msgid "Show the patch introduced with each commit." -msgstr "Показувати виправлення, внесені з кожним коммітом." - -#: ../../src/vcs/basics.txt:546 -msgid "--stat" -msgstr "--stat" - -#: ../../src/vcs/basics.txt:546 -msgid "Show statistics for files modified in each commit." -msgstr "Показувати статистику для файлів, змінених у кожному коміті." - -#: ../../src/vcs/basics.txt:548 -msgid "--shortstat" -msgstr "--shortstat" - -#: ../../src/vcs/basics.txt:548 -msgid "" -"Display only the changed/insertions/deletions line from the --stat command." -msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." - -#: ../../src/vcs/basics.txt:551 -msgid "--name-only" -msgstr "--name-only" - -#: ../../src/vcs/basics.txt:551 -msgid "Show the list of files modified after the commit information." -msgstr "Показати список файлів, змінених після фіксації інформації." - -#: ../../src/vcs/basics.txt:554 -msgid "--name-status" -msgstr "--name-status" - -#: ../../src/vcs/basics.txt:554 -msgid "" -"Show the list of files affected with added/modified/deleted information as " -"well." -msgstr "" -"Також покажіть список файлів, яких торкнулася додана/змінена/видалена " -"інформація." - -#: ../../src/vcs/basics.txt:557 -msgid "--abbrev-commit" -msgstr "--abbrev-commit" - -#: ../../src/vcs/basics.txt:557 -msgid "" -"Show only the first few characters of the SHA-1 checksum instead of all 40." -msgstr "" -"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." - -#: ../../src/vcs/basics.txt:560 -msgid "--relative-date" -msgstr "--relative-date" - -#: ../../src/vcs/basics.txt:560 -msgid "" -"Display the date in a relative format (for example, \"2 weeks ago\") instead " -"of using the full date format." -msgstr "" -"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " -"повного формату дати." - -#: ../../src/vcs/basics.txt:563 -msgid "--graph" -msgstr "--graph" - -#: ../../src/vcs/basics.txt:563 -msgid "" -"Display an ASCII graph of the branch and merge history beside the log output." -msgstr "" -"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." - -#: ../../src/vcs/basics.txt:566 -msgid "--pretty" -msgstr "--pretty" - -#: ../../src/vcs/basics.txt:566 -msgid "" -"Show commits in an alternate format. Option values include oneline, short, " -"full, fuller, and format (where you specify your own format)." -msgstr "" -"Показувати комміти в альтернативному форматі. Значення опції включають: " -"online, short, full, fuller і format (де ви можете вказати свій власний " -"формат)." - -#: ../../src/vcs/basics.txt:570 -msgid "--oneline" -msgstr "--oneline" - -#: ../../src/vcs/basics.txt:570 -msgid "Shorthand for --pretty=oneline --abbrev-commit used together." -msgstr "" -"Скорочення для --pretty=online --abbrev-commit, що використовується разом." - -#: ../../src/vcs/basics.txt:575 -msgid "Limiting log output" -msgstr "Обмеження виводу журналу" - -#: ../../src/vcs/basics.txt:577 -msgid "" -"In addition to output-formatting options, ``git log`` takes a number of " -"useful limiting options; that is options that let you show only a subset of " -"commits. You've seen one such option already -- the ``-`` (e.g. " -"``-2`` or ``-10``) option, which displays only the given number of latest " -"commits." -msgstr "" -"На додаток до параметрів форматування виводу, ``git log`` приймає ряд " -"корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " -"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" -"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " -"кількість останніх коммітів." - -#: ../../src/vcs/basics.txt:591 -msgid "" -"However, the time-limiting options such as ``--since`` and ``--until`` are " -"very useful. For example, the command to get the list of commits made in the " -"last two weeks:" -msgstr "" -"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" -"until``. Наприклад, команда для отримання списку коммітів, зроблених за " -"останні два тижні:" - -#: ../../src/vcs/basics.txt:599 -msgid "" -"This command works with lots of formats - you can specify a specific date " -"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " -"minutes ago\"``." -msgstr "" -"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " -"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " -"день 3 хвилини тому\"``." - -#: ../../src/vcs/basics.txt:602 -msgid "" -"The last really useful option to pass to ``git log`` as a filter is a path. " -"If you specify a directory or file name, you can limit the log output to " -"commits that introduced a change to those files. This is always the last " -"option and is generally preceded by double dashes (``--``) to separate the " -"paths from the options:" -msgstr "" -"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " -"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " -"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " -"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " -"щоб відокремити шлях від параметрів:" - -#: ../../src/vcs/basics.txt:621 -msgid "Undoing things" -msgstr "Виправлення помилок" - -#: ../../src/vcs/basics.txt:623 -msgid "At any stage, you may want to undo something." -msgstr "На будь-якому етапі ви можете захотіти щось виправити." - -#: ../../src/vcs/basics.txt:625 -msgid "" -"One of the common undos takes place when you commit too early and possibly " -"forget to add some files, or you mess up your commit message. If you want to " -"redo that commit, make the additional changes you forgot, stage them, and " -"commit again using the ``--amend`` option:" -msgstr "" -"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " -"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " -"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " -"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " -"використовуючи опцію ``--amend``:" - -#: ../../src/vcs/basics.txt:634 -msgid "E.g." -msgstr "Наприклад." - -#: ../../src/vcs/basics.txt:643 -msgid "Unstaging a staged file" -msgstr "Скасування додавання файла до індексу" - -#: ../../src/vcs/basics.txt:645 -msgid "" -"The next two sections demonstrate how to work with your staging area and " -"working directory changes. The nice part is that the command you use to " -"determine the state of those two areas also reminds you how to undo changes " -"to them." -msgstr "" -"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " -"збірці та робочому каталозі. Приємним моментом є те, що команда, за " -"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " -"те, як скасувати внесені до них зміни." - -#: ../../src/vcs/basics.txt:676 -msgid "Unmodifiyng a modified file" -msgstr "Скасування модифікації зміненого файлу" - -#: ../../src/vcs/basics.txt:678 -msgid "" -"What if you realize that you don't want to keep your changes to some file? " -"You can easily unmodify it -- **revert** it back to what it looked like when " -"you last committed. ``git status`` also tells you how to do that:" -msgstr "" -"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " -"Ви можете легко скасувати зміни - **повернути** його до того, як він " -"виглядав під час останнього компонування. ``git status`` також покаже вам, " -"як це зробити:" - -#: ../../src/vcs/basics.txt:686 -msgid "It tells you pretty explicitly how to discard the changes you've make." -msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." - -#: ../../src/vcs/basics.txt:699 -msgid "Undoing things with git restore" -msgstr "Скасування змін за допомогою git restore" - -#: ../../src/vcs/basics.txt:701 -msgid "" -"``git restore`` is basically an alternative to ``git reset``, from Git " -"version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " -"reset`` for many undo operations." -msgstr "" -"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " -"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " -"операцій скасування." - -#: ../../src/vcs/basics.txt:737 -msgid "" -"It’s important to understand that git restore is a dangerous command. " -"Any local changes you made to that file are gone -- Git just replaced that " -"file with the last staged or committed version. Don't ever use this command " -"unless you absolutely know that you don’t want those unsaved local changes." -msgstr "" -"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " -"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " -"замінить цей файл на останню версію, що перебуває у стадії виконання або " -"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " -"вам не потрібні ці незбережені локальні зміни." - -#: ../../src/vcs/branch.txt:-1 -msgid "version, control, system, vcs, git, branch, merge, cherry-pick" -msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" - -#: ../../src/vcs/branch.txt:8 -msgid "Branches and Merging" -msgstr "Гілки та злиття" - -#: ../../src/vcs/branch.txt:11 ../../src/vcs/pullrequest.txt:59 -msgid "About branches" -msgstr "Про гілки" - -#: ../../src/vcs/branch.txt:13 -msgid "" -"To really understand the way Git does branching, we need to take a step back " -"and examine how Git stores its data. Git doesn't store data as a series of " -"changesets or differences, but instead as a series of snapshots. When you " -"make a commit, Git stores a commit object that contains a pointer to the " -"snapshot of the content you staged. This object also contains the author's " -"name and email address, the message that you typed, and pointers to the " -"commit or commits that directly came before this commit (its parent or " -"parents): zero parents for the initial commit, one parent for a normal " -"commit, and multiple parents for a commit that results from a merge of two " -"or more branches." -msgstr "" -"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " -"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " -"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " -"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " -"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " -"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " -"на комміт або комміти, які безпосередньо передували цьому комміту (його " -"батька або батьків): нульовий батько для початкового комміту, один батько " -"для звичайного комміту і кілька батьків для комміту, який є результатом " -"злиття двох або більше гілок." - -#: ../../src/vcs/branch.txt:28 -msgid "" -"A branch in Git is simply a lightweight movable pointer to one of these " -"commits. The default branch name in Git is master. As you start making " -"commits, you're given a master branch that points to the last commit you " -"made. Every time you commit, the master branch pointer moves forward " -"automatically." -msgstr "" -"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " -"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " -"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " -"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " -"пересувається вперед." - -#: ../../src/vcs/branch.txt:38 -msgid "Branch management" -msgstr "Управління гілками" - -#: ../../src/vcs/branch.txt:40 -msgid "" -"The ``git branch`` command does more that create and delete branches. If you " -"run it with no arguments, you get a simple listing of your current branches:" -msgstr "" -"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " -"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " -"поточних гілок:" - -#: ../../src/vcs/branch.txt:55 -msgid "" -"To see all the branches that contain work you haven't yet merged in, use ``--" -"no-merged`` option:" -msgstr "" -"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " -"використовуйте опцію ``--no-merged``:" - -#: ../../src/vcs/branch.txt:65 -msgid "" -"Branches listed in the output has work, that isn't merged to current branch. " -"So, deleting them via ``git branch -d`` will fail." -msgstr "" -"У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " -"гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." - -#: ../../src/vcs/branch.txt:69 -msgid "Create branches" -msgstr "Створення гілок" - -#: ../../src/vcs/branch.txt:71 -msgid "" -"There are few ways to create a new branch in a Git repository. The most " -"common way is to use ``git branch`` command." -msgstr "" -"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " -"них - використання команди ``git branch``." - -#: ../../src/vcs/branch.txt:78 -msgid "" -"Pointer to a parent commit is optional. By default the parent commit is set " -"to the latest one available (HEAD pointer) at the moment of the branch " -"creation. You can also switch to the newly created branch just after its " -"creation using:" -msgstr "" -"Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " -"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " -"на момент створення гілки. Ви також можете переключитися на новостворену " -"гілку одразу після її створення за допомогою:" - -#: ../../src/vcs/branch.txt:88 -msgid "Switching branches" -msgstr "Перемикання гілок" - -#: ../../src/vcs/branch.txt:90 -msgid "To switch to an existing branch, you run the ``git checkout`` command." -msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." - -#: ../../src/vcs/branch.txt:109 -msgid "Basic branching and merging" -msgstr "Основи розгалуження та злиття" - -#: ../../src/vcs/branch.txt:111 -msgid "" -"First, let's say you're working on your project and have a couple of commits " -"already on the ``master`` branch. You've decided that you're going to work " -"on issue #53 in whatever issue-tracking system your company uses. To create " -"a new branch and switch to it at the same time, you can run the ``git " -"checkout`` command with the ``-b`` switch:" -msgstr "" -"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " -"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " -"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " -"створити нову гілку і одночасно переключитися на неї, ви можете виконати " -"команду ``git checkout`` з ключем ``-b``:" - -#: ../../src/vcs/branch.txt:122 -msgid "This is shorthand for:" -msgstr "Це скорочено означає:" - -#: ../../src/vcs/branch.txt:129 -msgid "" -"In deed this creates a new branch pointer, aimed to the latest commit " -"present on ``master`` branch. But, from now your branch is ``feature/" -"issue53``. So, doing commits moves the feature branch pointer forward, " -"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." -msgstr "" -"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " -"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" -"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " -"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." - -#: ../../src/vcs/branch.txt:134 -msgid "" -"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " -"from the ``feature/issue53`` branch back to ``master``." -msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " -"з гілки ``feature/issue53`` назад до ``master``." - -#: ../../src/vcs/branch.txt:138 -msgid "Merging branches" -msgstr "Злиття гілок" - -#: ../../src/vcs/branch.txt:140 -msgid "" -"You need to switch back to ``master`` branch and use ``git merge`` command, " -"to merge changes (commits) from the source branch into target." -msgstr "" -"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " -"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." - -#: ../../src/vcs/branch.txt:152 -msgid "" -"You'll notice phrase \"fast-forward\" in that merge. Because the commit " -"pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the pointer " -"forward." -msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " -"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " -"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " -"вказівник вперед." - -#: ../../src/vcs/branch.txt:156 -msgid "" -"Changes from ``feature/issue53`` are now in the snapshot of the commit " -"pointed to by the ``master`` branch." -msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " -"гілка ``master``." - -#: ../../src/vcs/branch.txt:163 -msgid "" -"Now, lets assume another developer started working on ``feature/issue54`` at " -"the same time. And there are few commits on this feature branch. Suppose, " -"the developer decided that work on **issue54** is finished and they want to " -"merge their feature branch into ``master``." -msgstr "" -"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " -"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " -"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " -"з ``master``." - -#: ../../src/vcs/branch.txt:179 -msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this case, " -"development history has diverged from some older point. Because the commit " -"on the branch you're on isn't a direct ancestor of the branch you're merging " -"in, Git has to do some work. In this case, Git does a simple three-way " -"merge, using two snapshots pointed to by the branch tips and the common " -"ancestor of the two." -msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " -"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " -"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " -"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " -"просте тристороннє злиття, використовуючи два знімки, на які вказують " -"кінчики гілок, і їхнього спільного предка." - -#: ../../src/vcs/branch.txt:186 -msgid "" -"Instead of just moving the branch pointer forward, Git creates a new " -"snapshot that results from this three-way merge and automatically creates a " -"new commit that points to it. This is referred to as a *merge commit*, and " -"is a special in that it has more than one parent." -msgstr "" -"Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " -"новий знімок, який є результатом цього тристороннього злиття, і автоматично " -"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " -"і він особливий тим, що має більше одного батька." - -#: ../../src/vcs/branch.txt:196 -msgid "Merge conflicts" -msgstr "Конфлікти об'єднання" - -#: ../../src/vcs/branch.txt:198 -msgid "" -"Occasionally, the merge process doesn't go smoothly. If the same part of the " -"same file is changed differently in the two branches you're merging, Git " -"won't be able to merge them cleanly." -msgstr "" -"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " -"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " -"Git не зможе об'єднати їх чисто." - -#: ../../src/vcs/branch.txt:209 -msgid "" -"Git hasn't automatically created a new merge commit. It has paused the " -"process while you resolve the conflict. If you want to see which files are " -"unmerged at any point after a merge conflict, you can run ``git status``:" -msgstr "" -"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " -"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " -"після конфлікту злиття, ви можете запустити ``git status``:" - -#: ../../src/vcs/branch.txt:228 -msgid "" -"Anything that has merge conflicts and hasn't been resolved is listed as " -"unmerged. Git adds standard conflict-resolution markers to the files that " -"have conflicts, so you can open them manually and resolve those conflicts. " -"Your file contains a section that looks something like this:" -msgstr "" -"Все, що має конфлікти злиття, які не було вирішено, позначається як не " -"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " -"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " -"Ваш файл містить розділ, який виглядає приблизно так:" - -#: ../../src/vcs/branch.txt:243 -msgid "" -"This means the version in ``HEAD`` (your ``master`` branch, because that was " -"what you had checked out when you ran merge command) is the top part of that " -"block (everything above the \"=======\"), while the version in ``vcs`` " -"branch looks like everything in the bottom part. In order to resolve the " -"conflict, you have to either choose one side or the other or merge the " -"contents yourself." -msgstr "" -"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " -"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " -"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " -"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " -"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." - -#: ../../src/vcs/branch.txt:249 -msgid "When conflicts are resolved, you can run ``git status`` command again:" -msgstr "" -"Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " -"status``:" - -#: ../../src/vcs/branch.txt:262 -msgid "" -"If you're happy with that, and you verify that everything that had conflicts " -"has been staged, you can run ``git commit`` for finalize the merge commit." -msgstr "" -"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " -"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " -"злиття." - -#: ../../src/vcs/branch.txt:266 -msgid "Rebasing" -msgstr "Перебазування" - -#: ../../src/vcs/branch.txt:268 -msgid "" -"In Git, there two main ways to integrate changes from one branch into " -"another: the ``merge`` and the ``rebase``." -msgstr "" -"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " -"\"злиття\" і \"перебазування\"." - -#: ../../src/vcs/branch.txt:271 -msgid "" -"Earlier, there was an example of diverged work and commits made on two " -"different branches." -msgstr "" -"Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " -"зроблених на двох різних гілках." - -#: ../../src/vcs/branch.txt:278 -msgid "" -"The easiest way to integrate the branches, as we've already covered, is the " -"``merge`` command. It performs a three-way merge between the two latest " -"branch snapshots, and the most recent common ancestor of the two, creating a " -"new snapshot (and commit)." -msgstr "" -"Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " -"``merge``. Вона виконує тристороннє злиття між двома останніми знімками " -"гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." - -#: ../../src/vcs/branch.txt:283 -msgid "" -"However, there is another way: you can take the patch of the change that was " -"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " -"is called *rebasing*. With ``rebase`` command, you can take all the changes " -"that were committed on one branch and replay them on a different branch." -msgstr "" -"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " -"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " -"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " -"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." - -#: ../../src/vcs/branch.txt:295 -msgid "" -"This operation works by going to the common ancestor of the two branches, " -"getting the diff introduced by each commit of the branch you're on, saving " -"those diffs to temporary files, resetting the current branch to the same " -"commit as the branch you are rebasing onto, and finally applying each change " -"in turn." -msgstr "" -"Ця операція виконується шляхом переходу до спільного предка двох гілок, " -"отримання відмінностей, внесених кожним коммітом гілки, на якій ви " -"перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " -"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " -"нарешті, застосування кожної зміни по черзі." - -#: ../../src/vcs/branch.txt:306 -msgid "" -"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " -"of their ``master`` branch, rather then merging it in, to keep a mostly " -"linear history." -msgstr "" -"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " -"об'єднувати їх, щоб зберегти переважно лінійну історію." - -#: ../../src/vcs/branch.txt:311 -msgid "Cherry-picking" -msgstr "Cherry-picking" - -#: ../../src/vcs/branch.txt:313 -msgid "" -"The other way to move introduced work from one branch to another is to " -"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " -"takes the patch that was introduced in a commit and tries to reapply it on " -"the branch you're currently on. This is useful if you have a number of " -"commits on a topic branch and you want to integrate only one of them, or if " -"you only have one commit on a topic branch and you'd prefer to cherry-pick " -"it rather than run rebase." -msgstr "" -"Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " -"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " -"відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " -"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " -"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " -"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " -"rebase." - -#: ../../src/vcs/branch.txt:333 -msgid "Branching strategies" -msgstr "Стратегії розгалуження" - -#: ../../src/vcs/branch.txt:335 -msgid "" -"Branching strategy in version control systems defines how branches are " -"created, managed, and used in a project's development process. It helps " -"teams collaborate effectively, isolate changes, and organize development " -"efforts. A good branching strategy provides clarity on how to work with " -"branches, minimizes conflicts, and enables a smooth and structured " -"development workflow." -msgstr "" -"Стратегія розгалуження в системах контролю версій визначає, як створюються, " -"управляються та використовуються гілки в процесі розробки проекту. Вона " -"допомагає командам ефективно співпрацювати, ізолювати зміни та " -"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " -"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " -"структурований робочий процес розробки." - -#: ../../src/vcs/branch.txt:342 -msgid "" -"GitFlow is a popular branching strategy that provides a well-defined model " -"for managing branches in a Git repository. It was introduced by Vincent " -"Driessen and is based on the idea of using two main branches: \"master\" and " -"\"develop.\"" -msgstr "" -"GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " -"модель для управління гілками в Git-репозиторії. Вона була представлена " -"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " -"основних гілок: \"master\" і \"develop\"." - -#: ../../src/vcs/branch.txt:346 -msgid "" -"**Master Branch**: The \"master\" branch represents the stable version of " -"the codebase. It should always contain production-ready code and be free " -"from any major issues. The \"master\" branch is protected, and only release " -"versions are merged into it." -msgstr "" -"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " -"бази. Вона завжди повинна містити готовий до використання код і не містити " -"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " -"релізні версії." - -#: ../../src/vcs/branch.txt:350 -msgid "" -"**Develop Branch**: The \"develop\" branch is where the ongoing development " -"and integration of features take place. It serves as the integration branch " -"for various feature branches and should also contain a stable version of the " -"code." -msgstr "" -"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " -"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " -"функціональних гілок, а також повинна містити стабільну версію коду." - -#: ../../src/vcs/branch.txt:354 -msgid "" -"**Feature Branches**: For each new feature or bug fix, a dedicated " -"\"feature\" branch is created off the \"develop\" branch. These branches are " -"short-lived and exist only for the duration of the feature development." -msgstr "" -"**Вітки функцій**: Для кожної нової функції або виправлення помилки " -"створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " -"недовговічні і існують лише на час розробки функції." - -#: ../../src/vcs/branch.txt:357 -msgid "" -"**Release Branches**: When the development on the \"develop\" branch is " -"ready for a release, a \"release\" branch is created. The release branch is " -"used for testing, bug fixing, and preparing for deployment." -msgstr "" -"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " -"створюється гілка \"release\". Релізна гілка використовується для " -"тестування, виправлення помилок і підготовки до розгортання." - -#: ../../src/vcs/branch.txt:360 -msgid "" -"**Hotfix Branches**: If a critical issue is discovered in the production " -"version, a \"hotfix\" branch is created from the \"master\" branch. This " -"allows for a quick fix without affecting ongoing development on the " -"\"develop\" branch." -msgstr "" -"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " -"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " -"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." - -#: ../../src/vcs/branch.txt:365 -msgid "" -"GitFlow provides a structured approach to managing branching in a " -"collaborative development environment. It ensures that the main branches " -"remain stable, and new features and bug fixes are integrated smoothly before " -"being released. This strategy is particularly useful for projects with " -"regular releases and a team working on multiple features concurrently." -msgstr "" -"GitFlow забезпечує структурований підхід до управління розгалуженням у " -"середовищі спільної розробки. Він гарантує, що основні гілки залишаються " -"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " -"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " -"і командою, яка працює над декількома функціями одночасно." - -#: ../../src/vcs/github.txt:-1 -msgid "version, control, system, vcs, git, github" -msgstr "version, control, system, vcs, git, github" - -#: ../../src/vcs/github.txt:10 -msgid "GitHub" -msgstr "GitHub" - -#: ../../src/vcs/github.txt:12 -msgid "" -"`GitHub`_ is the single largest host for Git repositories, and is the " -"central point of collaboration for millions of developers and projects." -msgstr "" -"`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " -"точкою співпраці для мільйонів розробників і проектів." - -#: ../../src/vcs/github.txt:16 -msgid "Account setup and configuration" -msgstr "Налаштування та конфігурація акаунта" - -#: ../../src/vcs/github.txt:18 -msgid "" -"The first thing you need to do is set up a free user account. Visit " -"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " -"account creation process. Just follow the hints and provide an email " -"address, username and a strong password." -msgstr "" -"Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " -"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " -"GitHub проведе вас через процес створення облікового запису. Просто " -"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " -"та надійний пароль." - -#: ../../src/vcs/github.txt:24 -msgid "About authentication to GitHub" -msgstr "Про автентифікацію на GitHub" - -#: ../../src/vcs/github.txt:27 -msgid "" -"Starting in March 2023 and through the end of 2023, GitHub gradually began " -"to require all users who contribute code on GitHub to enable two-factor " -"authentication (2FA)." -msgstr "" -"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " -"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " -"двофакторну автентифікацію (2FA)." - -#: ../../src/vcs/github.txt:32 -msgid "Connect with SSH" -msgstr "Підключення за допомогою SSH" - -#: ../../src/vcs/github.txt:34 -msgid "" -"You can access and write data in repositories on GitHub using :abbr:`SSH " -"(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " -"using a private key file on your local machine." -msgstr "" -"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " -"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " -"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " -"комп'ютері." - -#: ../../src/vcs/github.txt:39 -msgid "Generating a new SSH key" -msgstr "Генерація нового SSH-ключа" - -#: ../../src/vcs/github.txt:41 -msgid "" -"You can generate a new SSH key on your local machine. After you do that, you " -"can add the **public** key to your account on GitHub to enable " -"authentication for Git operations over SSH." -msgstr "" -"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " -"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " -"увімкнути автентифікацію для операцій з Git'ом через SSH." - -#: ../../src/vcs/github.txt:45 -msgid "Open terminal (git-bash will suite for Windows users)" -msgstr "Відкритий термінал (для користувачів Windows підійде git-bash)" - -#: ../../src/vcs/github.txt:46 -msgid "Run command:" -msgstr "Виконати команду:" - -#: ../../src/vcs/github.txt:53 -msgid "" -"If you are using a legacy system that doesn't support the **Ed25519** " -"algorithm, use:" -msgstr "" -"Якщо ви використовуєте застарілу систему, яка не підтримує алгоритм " -"**Ed25519**, використовуйте його:" - -#: ../../src/vcs/github.txt:60 -msgid "" -"When you're prompted to \"Enter a file in which to save the key\", you can " -"press **Enter** to accept the default file location." -msgstr "" -"Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " -"натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." - -#: ../../src/vcs/github.txt:67 -msgid "" -"Type a secure passphrase, if you want -- this is an extra layer of security." -msgstr "" -"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." - -#: ../../src/vcs/github.txt:75 -msgid "This will create a new SSH key, using the provided email as label." -msgstr "" -"Буде створено новий SSH-ключ, з використанням наданої адреси електронної " -"пошти як мітки." - -#: ../../src/vcs/github.txt:77 -msgid "" -"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " -"and ensure there are two files generated:" -msgstr "" -"Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " -"каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" - -#: ../../src/vcs/github.txt:80 -msgid "**id_ALGORITHM** (e.g. \"id_rsa\", \"id_ed252519\" etc.)" -msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощо)." - -#: ../../src/vcs/github.txt:81 -msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" -msgstr "" -"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." - -#: ../../src/vcs/github.txt:84 -msgid "" -"The private key (the one without \".pub\") should be kept secure and " -"private. You should never share this." -msgstr "" -"Закритий ключ (той, що без \".pub\") слід зберігати в безпеці і не " -"розголошувати. Ви ніколи не повинні ділитися ним." - -#: ../../src/vcs/github.txt:87 -msgid "" -"The public key is what you add to servers or services to which you want to " -"authenticate using your private key." -msgstr "" -"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " -"хочете пройти автентифікацію за допомогою вашого закритого ключа." - -#: ../../src/vcs/github.txt:91 -msgid "Adding your SSH key to the ssh-agent and GitHub" -msgstr "Додавання SSH-ключа до ssh-агента та GitHub" - -#: ../../src/vcs/github.txt:93 -msgid "" -"Before adding a new SSH key to the ssh-agent to manage your keys, you should " -"have checked for existing SSH keys and generated SSH keys." -msgstr "" -"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " -"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." - -#: ../../src/vcs/github.txt:96 -msgid "" -"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " -"it manually:" -msgstr "" -"Переконайтеся, що ssh-агент запущено. Ви можете скористатися " -"\"Автозапуском\" або запустити його вручну:" - -#: ../../src/vcs/github.txt:104 -msgid "Add you SSH private key to the ssh-agent." -msgstr "Додайте ваш приватний ключ SSH до ssh-агента." - -#: ../../src/vcs/github.txt:110 -msgid "" -"Add the SSH public key to your account on GitHub. Copy the SSH public key to " -"your clipboard." -msgstr "" -"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " -"відкритий ключ SSH до буфера обміну." - -#: ../../src/vcs/github.txt:117 -msgid "" -"Alternatively, if ``clip`` isn't working, just type public key content to " -"the terminal using ``cat``," -msgstr "" -"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " -"терміналі за допомогою ``cat``," - -#: ../../src/vcs/github.txt:124 -msgid "" -"or simply navigate to the file and open it with any text editor. At the end, " -"you need to copy public key content." -msgstr "" -"або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " -"текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." - -#: ../../src/vcs/github.txt:127 -msgid "" -"On GitHub, in the upper-right corner of any page, click your profile photo, " -"then click **Settings**." -msgstr "" -"На GitHub у правому верхньому куті будь-якої сторінки натисніть на " -"фотографію свого профілю, а потім натисніть **Налаштування**." - -#: ../../src/vcs/github.txt:129 -msgid "" -"In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " -"press **New SSH key** button." -msgstr "" -"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " -"кнопку **Новий ключ SSH**." - -#: ../../src/vcs/github.txt:131 -msgid "In the \"Title\" field, add a descriptive label for the new key." -msgstr "У полі \"Назва\" додайте описову мітку для нового ключа." - -#: ../../src/vcs/github.txt:132 -msgid "Select the type of key -- \"Authentication key\"." -msgstr "Виберіть тип ключа - \"Ключ автентифікації\"." - -#: ../../src/vcs/github.txt:133 -msgid "In the \"Key\" field, paste your public key." -msgstr "У полі \"Ключ\" вставте ваш відкритий ключ." - -#: ../../src/vcs/github.txt:134 -msgid "Click **Add SSH key**." -msgstr "Натисніть **Додати SSH-ключ**." - -#: ../../src/vcs/github.txt:135 -msgid "If prompted, confirm access to your account on GitHub." -msgstr "" -"Якщо з'явиться відповідний запит, підтвердіть доступ до свого облікового " -"запису на GitHub." - -#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 -msgid "version, control, system, vcs, git" -msgstr "version, control, system, vcs, git" - -#: ../../src/vcs/index.txt:8 -msgid "Version Control System" -msgstr "Система контролю версій" - -#: ../../src/vcs/index.txt:10 -msgid "" -":abbr:`VCS (Version Control Systems)` play an integral role in modern " -"software development. They allow multiple developers to work on a project " -"simultaneously without overwriting each other's changes. VCSs track the " -"history of changes to the source code, making it possible to revert to " -"previous states, compare versions, and more." -msgstr "" -":abbr:`VCS (Version Control Systems)` відіграють невід'ємну роль у сучасній " -"розробці програмного забезпечення. Вони дозволяють декільком розробникам " -"працювати над проектом одночасно, не перезаписуючи зміни один одного. VCS " -"відстежують історію змін у вихідному коді, дозволяючи повертатися до " -"попередніх станів, порівнювати версії тощо." - -#: ../../src/vcs/index.txt:16 -msgid "" -"Among the VCSs available, Git stands out as one of the most popular and " -"powerful tools. It's used by small projects and large-scale software alike, " -"owing to its flexibility, distributed nature, and efficient handling of " -"codebase versions." -msgstr "" -"Серед наявних VCS Git є одним з найпопулярніших і найпотужніших " -"інструментів. Його використовують як у невеликих проектах, так і у великому " -"програмному забезпеченні, завдяки його гнучкості, розподіленості та " -"ефективній роботі з версіями кодової бази." - -#: ../../src/vcs/index.txt:21 -msgid "" -"In this part, you'll learn about the fundamentals of version control, how to " -"set up your environment for Git, dive into the basics of commits, branches, " -"and merges, understand the significance of tags, and finally, explore how to " -"collaborate using remote repositories and platforms like GitHub." -msgstr "" -"У цій частині ви дізнаєтеся про основи управління версіями, як налаштувати " -"середовище для Git'а, зануритеся в основи коммітів, гілок і злиття, " -"зрозумієте значення тегів і, нарешті, вивчите, як співпрацювати за допомогою " -"віддалених репозиторіїв і платформ на кшталт GitHub." - -#: ../../src/vcs/intro.txt:8 -msgid "About version control (Git)" -msgstr "Про контроль версій (Git)" - -#: ../../src/vcs/intro.txt:10 -msgid "" -"Version control is a system that records changes to a file or set of files " -"over time so that you can recall specific versions later. It allows you to " -"revert selected files back to a previous state, revert the entire project " -"back to a previous state, compare changes over time, see who last modified " -"something that might be causing a problem, who introduced an issue and when, " -"and more." -msgstr "" -"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " -"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " -"повернути вибрані файли до попереднього стану, повернути весь проект до " -"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " -"щось, що може спричинити проблему, хто і коли створив проблему, тощо." - -#: ../../src/vcs/intro.txt:16 -msgid "" -"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " -"check out the latest snapshot of the files; rather, they fully mirror the " -"repository, including its full history. Thus, if any server dies, and these " -"systems were collaborating via that server, any of the client repositories " -"can be copied back up to the server to restore it. Every clone is really a " -"full backup of all the data." -msgstr "" -"У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " -"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " -"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " -"ладу, а ці системи працювали через нього, будь-який з клієнтських " -"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " -"клон - це фактично повна резервна копія всіх даних." - -#: ../../src/vcs/intro.txt:26 -msgid "Distributed version control diagram" -msgstr "Розподілена схема управління версіями" - -#: ../../src/vcs/intro.txt:29 -msgid "What is Git?" -msgstr "Що таке Git?" - -#: ../../src/vcs/intro.txt:30 -msgid "" -"The major difference between Git and any other VCS is the way Git thinks " -"about its data. Conceptually, most other systems store information as a list " -"of file-based changes. Git doesn't think of or store its data this way. " -"Instead, Git thinks of its data more like a series of snapshots of a " -"miniature filesystem." -msgstr "" -"Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " -"Git'ом мислить про свої дані. Концептуально, більшість інших систем " -"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " -"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " -"серію знімків мініатюрної файлової системи." - -#: ../../src/vcs/intro.txt:36 -msgid "" -"This is an important distinction between Git and nearly all other VCSs. It " -"makes Git reconsider almost every aspect of version control that most other " -"systems copied from the previous generation. This makes Git more like a mini " -"filesystem with some incredibly powerful tools built on top of it, rather " -"than simply a VCS." -msgstr "" -"Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " -"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " -"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " -"міні-файлову систему з деякими неймовірно потужними інструментами, " -"побудованими поверх неї, ніж на звичайну VCS." - -#: ../../src/vcs/intro.txt:45 -msgid "Storing data as snapshots of the project over time" -msgstr "Зберігання даних у вигляді знімків проекту з плином часу" - -#: ../../src/vcs/intro.txt:48 -msgid "Local operations" -msgstr "Локальні операції" - -#: ../../src/vcs/intro.txt:49 -msgid "" -"Most operations in Git need only local files and resources to operate -- " -"generally no information is needed from another computer on your network. " -"Because you have the entire history of the project right there on your local " -"disk, most operations seem almost instantaneous." -msgstr "" -"Для виконання більшості операцій у Git'і потрібні лише локальні файли та " -"ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " -"мережі. Оскільки вся історія проекту зберігається на вашому локальному " -"диску, більшість операцій виконуються майже миттєво." - -#: ../../src/vcs/intro.txt:55 -msgid "Integrity" -msgstr "Цілісність" - -#: ../../src/vcs/intro.txt:56 -msgid "" -"Everything in Git is checksummed before it is stored and is then referred to " -"by that checksum. This means it's impossible to change the contents of any " -"file or directory without Git knowing about it." -msgstr "" -"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " -"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " -"каталогу без відома Git'а." - -#: ../../src/vcs/intro.txt:61 -msgid "Repository files states" -msgstr "Стани файлів сховища" - -#: ../../src/vcs/intro.txt:62 -msgid "" -"Git has three main states that your files can reside in: **modified**, " -"**staged**, and **committed**:" -msgstr "" -"Git має три основні стани, в яких можуть перебувати ваші файли: " -"**модифіковані**, **на стадії розробки** та **зафіксовані**:" - -#: ../../src/vcs/intro.txt:65 -msgid "" -"Modified means that you have changed the file but have not committed it to " -"your database yet." -msgstr "" -"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " -"даних." - -#: ../../src/vcs/intro.txt:67 -msgid "" -"Staged means that you have marked a modified file in its current version to " -"go into your next commit snapshot." -msgstr "" -"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " -"він потрапив до наступного знімка фіксації." - -#: ../../src/vcs/intro.txt:69 -msgid "Committed means that the data is safely stored in your local database." -msgstr "" -"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." - -#: ../../src/vcs/intro.txt:76 -msgid "The basic Git workflow goes something like this:" -msgstr "Базовий робочий процес Git'а виглядає приблизно так:" - -#: ../../src/vcs/intro.txt:78 -msgid "You modify files in your working tree." -msgstr "Ви змінюєте файли у вашому робочому дереві." - -#: ../../src/vcs/intro.txt:79 -msgid "" -"You selectively stage just those changes you want to be part of your next " -"commit, which adds only those changes to the staging area." -msgstr "" -"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " -"коміт, що додає тільки ці зміни в область стабілізації." - -#: ../../src/vcs/intro.txt:81 -msgid "" -"You do a commit, which takes the files as they are in the staging area and " -"stores that snapshot permanently to your Git directory." -msgstr "" -"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " -"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." - -#: ../../src/vcs/intro.txt:85 -msgid "Command line" -msgstr "Командний рядок" - -#: ../../src/vcs/intro.txt:87 -msgid "" -"There are a lot of different ways to use Git. There are the original command-" -"line tools, and there are many graphical user interfaces of varying " -"capabilities. For one, the command line is the only place you can run all " -"Git commands -- most of the GUIs implement only a partial subset of Git " -"functionality for simplicity. If you know how to run the command-line " -"version, you can probably also figure out how to run the GUI version, while " -"the opposite is not necessarily true. Also, while your choice of graphical " -"client is a matter of personal taste, all users will have the command-line " -"tools installed and available." -msgstr "" -"Існує багато різних способів використання Git'у. Існують оригінальні " -"інструменти командного рядка, а також багато графічних інтерфейсів " -"користувача з різними можливостями. З одного боку, командний рядок є єдиним " -"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " -"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " -"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " -"ймовірно, також зможете з'ясувати, як запустити версію з графічним " -"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " -"графічного клієнта є справою особистого смаку, всі користувачі матимуть " -"встановлені та доступні інструменти командного рядка." - -#: ../../src/vcs/pullrequest.txt:-1 -msgid "Version Control System - Pull Requests" -msgstr "Система контролю версій - Запити на Злиття (Pull Requests)" - -#: ../../src/vcs/pullrequest.txt:-1 -msgid "Vladyslav Ponomaryov" -msgstr "Vladyslav Ponomaryov" - -#: ../../src/vcs/pullrequest.txt:-1 -msgid "version, control, system, vcs, git, pull request, merge" -msgstr "version, control, system, vcs, git, pull request, merge" - -#: ../../src/vcs/pullrequest.txt:9 -msgid "Pull Request" -msgstr "Запит на Злиття (Pull Request)" - -#: ../../src/vcs/pullrequest.txt:11 -msgid "" -"Pull request let you tell others about changes you've pushed to a branch in " -"a repository on GitHub. Once a pull request is opened, you can discuss and " -"review the potential changes with collaborators and add follow-up commits " -"before your changes are merged into the base branch:cite:`github:about-pr`." -msgstr "" -"Pull-запит дозволяє вам повідомити інших про зміни, які ви перенесли до " -"гілки в репозиторії на GitHub. Після того, як запит відкрито, ви можете " -"обговорити і переглянути потенційні зміни з колегами і додати подальші " -"коміти, перш ніж ваші зміни будуть злиті в базову гілку branch:cite:`github:" -"about-pr`." - -#: ../../src/vcs/pullrequest.txt:17 -msgid "Draft pull requests" -msgstr "Чернетки pull requests" - -#: ../../src/vcs/pullrequest.txt:19 -msgid "" -"Draft pull requests are available in public repositories on GitHub. When you " -"create a pull request, you can choose to a create a pull request that is " -"ready for review or a draft pull request. Draft pull requests cannot be " -"merged. When you're ready to get feedback on your pull request, you can mark " -"your draft pull request as ready for review." -msgstr "" -"Чернетки pull-запитів доступні в публічних репозиторіях на GitHub. Коли ви " -"створюєте пул-запит, ви можете вибрати між створенням готового до розгляду " -"пул-запиту та чернетки пул-запиту. Чернетки пул-запитів не можна " -"об'єднувати. Коли ви будете готові отримати відгук на свій запит, ви можете " -"позначити свій чернетковий запит як готовий до розгляду." - -#: ../../src/vcs/pullrequest.txt:26 -msgid "Difference between commits on compare and pull request pages" -msgstr "Різниця між коммітами на сторінках порівняння та pull-запитів" - -#: ../../src/vcs/pullrequest.txt:28 -msgid "" -"The compare and pull request pages use different methods to calculate the " -"diff for changed files:" -msgstr "" -"Сторінки запитів порівняння і витягування використовують різні методи для " -"обчислення різниці для змінених файлів:" - -#: ../../src/vcs/pullrequest.txt:31 -msgid "" -"Compare pages show the diff between the tip of the head ref and the current " -"common ancestor (that is, the merge base) of the head and base ref." -msgstr "" -"На сторінках порівняння показано різницю між кінчиком головного референта і " -"поточним спільним предком (тобто, основою злиття) головного і основного " -"референта." - -#: ../../src/vcs/pullrequest.txt:33 -msgid "" -"Pull request pages show the diff between the tip of the head ref and the " -"common ancestor of the head and base ref at the time when the pull request " -"was created. Consequently, the merge base used for the comparison might be " -"different." -msgstr "" -"Сторінки запитів на злиття показують різницю між вершиною головного рефа і " -"спільним предком головного і базового рефів на момент створення запиту на " -"злиття. Отже, база злиття, яка використовується для порівняння, може " -"відрізнятися." - -#: ../../src/vcs/pullrequest.txt:39 -msgid "About comparing branches" -msgstr "Про порівняння гілок" - -#: ../../src/vcs/pullrequest.txt:41 -msgid "" -"Pull requests display diffs to compare the changes you made in your topic " -"branch against the base branch that you want to merge your changes into." -msgstr "" -"Витягніть запити на відображення відмінностей, щоб порівняти зміни, зроблені " -"у вашій гілці теми, з базовою гілкою, до якої ви хочете об'єднати ваші зміни." - -#: ../../src/vcs/pullrequest.txt:44 -msgid "" -"Rather that viewing the commits themselves, you can view the proposed " -"changes as they'll appear in the files once the pull request is merged. The " -"files appear in alphabetical order within the Files changed tab. Additions " -"to the files appear in green and are prefaced by a ``+`` sign while content " -"that has been removed appears in red and is prefaced by a ``-`` sign :cite:" -"`github:compare-pr`." -msgstr "" -"Замість того, щоб переглядати самі комміти, ви можете переглянути " -"запропоновані зміни, які з'являться у файлах після об'єднання запиту на " -"витягування. Файли відображаються в алфавітному порядку на вкладці Змінені " -"файли. Доповнення до файлів відображаються зеленим кольором зі знаком ``+``, " -"тоді як вміст, який було вилучено, відображається червоним кольором зі " -"знаком ``-`` :cite:`github:compare-pr`." - -#: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 -msgid "Creating a pull request" -msgstr "Створення pull-запиту" - -#: ../../src/vcs/pullrequest.txt:54 -msgid "" -"Create a pull request to propose and collaborate on changes to a repository. " -"These changes are proposed in a *branch*, which ensures that the default " -"branch only contains finished and approved work:cite:`github:create-pr`." -msgstr "" -"Створіть pull request, щоб пропонувати зміни до сховища та співпрацювати над " -"ними. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " -"замовчуванням містить лише завершені та затверджені роботи:cite:`github:" -"create-pr`." - -#: ../../src/vcs/pullrequest.txt:61 -msgid "" -"Use a branch to isolate development work without affecting other branches in " -"the repository. Each repository has one default branch, and can have " -"multiple other branches. You can merge a branch into another branch using a " -"pull request." -msgstr "" -"Використовуйте гілку, щоб ізолювати роботу над розробкою, не впливаючи на " -"інші гілки у сховищі. Кожне сховище має одну гілку за замовчуванням і може " -"мати декілька інших гілок. Ви можете об'єднати гілку з іншою гілкою за " -"допомогою pull-запиту." - -#: ../../src/vcs/pullrequest.txt:66 -msgid "" -"Branches allow you to develop features, fix bugs, or safely experiment with " -"new ideas in a contained area of your repository." -msgstr "" -"Гілки дозволяють розробляти функції, виправляти помилки або безпечно " -"експериментувати з новими ідеями в обмеженій області вашого сховища." - -#: ../../src/vcs/pullrequest.txt:69 -msgid "" -"You always create a branch from an existing branch. Typically, you might " -"create a new branch from the default branch of your repository." -msgstr "" -"Ви завжди створюєте гілку з існуючої гілки. Зазвичай, ви можете створити " -"нову гілку з гілки за замовчуванням вашого сховища." - -#: ../../src/vcs/pullrequest.txt:75 -msgid "On GitHub, navigate to the main page of the repository." -msgstr "На GitHub перейдіть на головну сторінку репозиторію." - -#: ../../src/vcs/pullrequest.txt:76 -msgid "Switch to \"Pull requests\" tab." -msgstr "Перейдіть на вкладку \"Pull requests\"." - -#: ../../src/vcs/pullrequest.txt:77 -msgid "Press \"New pull request\" button." -msgstr "Натисніть кнопку \"New pull request\"." - -#: ../../src/vcs/pullrequest.txt:78 -msgid "Select base and source branches." -msgstr "Виберіть базову і вихідну гілки." - -#: ../../src/vcs/pullrequest.txt:79 -msgid "Press \"Create pull request\" button." -msgstr "Натисніть кнопку \"Create pull request\"." - -#: ../../src/vcs/pullrequest.txt:80 -msgid "Provide a meaningful title and description." -msgstr "Надайте змістовну назву та опис." - -#: ../../src/vcs/pullrequest.txt:81 -msgid "Draft or create a pull request." -msgstr "Створіть pull request або його чорнетку." - -#: ../../src/vcs/pullrequest.txt:83 -msgid "" -"To create pull request that is ready for review, click **Create Pull " -"Request**." -msgstr "" -"Щоб створити запит, готовий до перегляду, натисніть **Create Pull Request**." - -#: ../../src/vcs/pullrequest.txt:85 -msgid "" -"To create a draft pull request, use the drop-down and select **Create Draft " -"Pull Request**, then click **Draft Pull Request**." -msgstr "" -"Щоб створити чернетку запиту на вилучення, скористайтеся випадаючим списком " -"і виберіть **Create Draft Pull Request**, а потім натисніть **Draft Pull " -"Request**." - -#: ../../src/vcs/remotes.txt:3 -msgid "Remotes" -msgstr "Віддалені репозиторії" - -#: ../../src/vcs/remotes.txt:5 -msgid "" -"To be able to collaborate on any Git project, you need to know how to manage " -"your remote repositories. Remote repositories are versions of your project " -"that are hosted on the Internet or network somewhere. You can have several " -"of them, each of which generally is either read-only or read/write for you. " -"Managing remotes includes knowing how to add remote repositories, remove " -"remote repositories that are no longer valid, manage various branches and " -"define them as being tracked or not, and more." -msgstr "" -"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " -"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " -"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " -"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " -"або читання/запису. Керування віддаленими сховищами включає в себе вміння " -"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " -"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " -"чи ні, і багато іншого." - -#: ../../src/vcs/remotes.txt:21 -msgid "Showing your remote" -msgstr "Перелік віддалених репозиторіїв" - -#: ../../src/vcs/remotes.txt:23 -msgid "" -"To see which remote servers you have configured, you can run the ``git " -"remote`` command. It lists the shortnames of each remote handle you're " -"specified. If you've cloned your repository, you should at least see " -"``origin`` - that is default name Git gives to the server you clone from:" -msgstr "" -"Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " -"команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " -"віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " -"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " -"з якого ви клонуєте:" - -#: ../../src/vcs/remotes.txt:41 -msgid "" -"This means we can pull contributions from any of these users pretty easily. " -"We may additionally have permission to push to one or more of these." -msgstr "" -"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " -"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " -"або декількох з них." - -#: ../../src/vcs/remotes.txt:45 -msgid "Adding remote repositories" -msgstr "Додавання віддалених репозиторіїв" - -#: ../../src/vcs/remotes.txt:47 -msgid "" -"To add a new remote Git repository as a shortname you can reference easily, " -"run ``git remote add ``:" -msgstr "" -"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " -"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" - -#: ../../src/vcs/remotes.txt:61 -msgid "" -"Now you can use the string \"personal\" on the command line in lieu of the " -"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" -"course\" is now accessible as ``personal/master``, while shortname to the " -"same branch in origin will be -- ``origin/master``." -msgstr "" -"Тепер ви можете використовувати рядок \"personal\" в командному рядку " -"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" -"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " -"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." - -#: ../../src/vcs/remotes.txt:67 -msgid "Fetching and pulling from remotes" -msgstr "Отримання та витягування з віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:69 -msgid "" -"To get data from remote project, you can run ``git fetch`` command. The " -"command goes out to that remote project and pulls down all the information " -"from that remote project that you don't have yet. After you do this, you " -"should have references to all the branches from that remote, which you can " -"merge in or inspect at any time." -msgstr "" -"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " -"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " -"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " -"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " -"переглянути у будь-який час." - -#: ../../src/vcs/remotes.txt:79 -msgid "" -"If your current branch is set up to track a remote branch, you can use ``git " -"pull`` command to automatically fetch and then merge that remote branch into " -"your current branch. By default, the ``git clone`` command automatically " -"sets up your local ``master`` branch to track the remote ``master`` branch " -"(or whatever default remote branch)." -msgstr "" -"Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " -"можете скористатися командою ``git pull`` для автоматичного отримання і " -"подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " -"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " -"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " -"іншої віддаленої гілки за замовчуванням)." - -#: ../../src/vcs/remotes.txt:85 -msgid "" -"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." -"rebase`` variable is not set. Git will keep warning you until you set the " -"variable." -msgstr "" -"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " -"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " -"доки ви не встановите змінну." - -#: ../../src/vcs/remotes.txt:90 -msgid "" -"If you want the default behavior of Git (fast-forward if possible, else " -"create a merge commit): ``git config --global pull.rebase \"false\"``." -msgstr "" -"Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " -"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " -"pull.rebase \"false\"``." - -#: ../../src/vcs/remotes.txt:93 -msgid "" -"If you want to rebase when pulling: ``git config --global pull.rebase " -"\"true\"``." -msgstr "" -"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." -"rebase \"true\"``." - -#: ../../src/vcs/remotes.txt:97 -msgid "Pushing to remotes" -msgstr "Відправка до віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:99 -msgid "" -"When you have your project at a point that you want to share, you have to " -"push it upstream. The command for this is simple: ``git push " -"``." -msgstr "" -"Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " -"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " -"push <віддалений> <гілка>``." - -#: ../../src/vcs/remotes.txt:106 -msgid "" -"This command works only if you cloned from a server to which you have write " -"access and if nobody has pushed in the meantime. If you and someone else " -"clone at the same time and they push upstream and then you push upstream, " -"you push will rightly be rejected. You'll have to fetch their work first and " -"incorporate it into yours before you'll be allowed to push." -msgstr "" -"Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " -"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " -"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " -"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " -"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." - -#: ../../src/vcs/remotes.txt:113 -msgid "Pushing a new branch to remote" -msgstr "Переміщення нової гілки до віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:115 -msgid "" -"In case you have created a local branch for some specific needs and you want " -"to share this branch, you need to set up track for this branch. This can be " -"done by using: ``git push --set-upstream origin ``. This will " -"create a new remote branch and set up track to your current local branch. " -"There is a shortcut for this command: ``git push -u origin ``." -msgstr "" -"Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " -"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " -"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " -"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " -"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " -"<віддалена_гілка>``." - -#: ../../src/vcs/remotes.txt:122 -msgid "Inspecting a remote" -msgstr "Перевірка віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:124 -msgid "" -"If you want to see more information about a particular remote, you can use " -"the ``git remote show ``." -msgstr "" -"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " -"tag -d ``." - -#: ../../src/vcs/tagging.txt:117 -msgid "Checking out tags" -msgstr "Перевірка тегів" - -#: ../../src/vcs/tagging.txt:119 -msgid "" -"If you want to view the versions of files a tag is pointing to, you can do a " -"``git checkout`` of that tag, although this puts your repository in " -"\"detached HEAD\" state, which has some ill side effects:" -msgstr "" -"Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " -"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " -"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" - -#: ../../src/vcs/tagging.txt:145 -msgid "" -"In \"detached HEAD\" state, if you make changes and then create a commit, " -"the tag will stay the same, but your new commit won’t belong to any branch " -"and will be unreachable, except by the exact commit hash. Thus, if you need " -"to make changes -- say you’re fixing a bug on an older version, for instance " -"-- you will generally want to create a branch:" -msgstr "" -"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " -"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " -"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " -"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " -"як правило, краще створити гілку:" - -#~ msgid "version, control, system, vcs, git, history, commit" -#~ msgstr "version, control, system, vcs, git, history, commit" diff --git a/src/_locales/uk/LC_MESSAGES/vcs/basics.po b/src/_locales/uk/LC_MESSAGES/vcs/basics.po new file mode 100644 index 000000000..c8348a49b --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/basics.po @@ -0,0 +1,950 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/basics.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/basics.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/basics.txt:-1 +msgid "version, control, system, vcs, git, basics" +msgstr "version, control, system, vcs, git, basics" + +#: ../../src/vcs/basics.txt:8 +msgid "Git Basics" +msgstr "Основи Git" + +#: ../../src/vcs/basics.txt:11 +msgid "Getting a Git repository" +msgstr "Отримання Git-репозиторію" + +#: ../../src/vcs/basics.txt:13 +msgid "You typically obtain a Git repository in one of two ways:" +msgstr "Зазвичай ви отримуєте Git-репозиторій одним з двох способів:" + +#: ../../src/vcs/basics.txt:15 +msgid "" +"You can take a local directory that is currently not under version control, " +"and turn it into a Git repository." +msgstr "" +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " +"версій, і перетворити його на Git-репозиторій." + +#: ../../src/vcs/basics.txt:17 +msgid "You can clone an existing Git repository from elsewhere." +msgstr "Ви можете клонувати існуюче сховище Git'а з іншого місця." + +#: ../../src/vcs/basics.txt:19 +msgid "" +"In either case, you end up with a Git repository on your local machine, " +"ready for work." +msgstr "" +"У будь-якому випадку, ви отримаєте Git-репозиторій на вашій локальній " +"машині, готовий до роботи." + +#: ../../src/vcs/basics.txt:23 +msgid "Initializing repo in an existing directory" +msgstr "Ініціалізація репо в існуючому каталозі" + +#: ../../src/vcs/basics.txt:25 +msgid "" +"If you have a project directory that is currently not under version control " +"and you want to start controlling it with Git, you first need to go to that " +"project's directory. If you've never done this, it looks a little different " +"depending on which system you're running:" +msgstr "" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " +"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " +"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " +"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" + +#: ../../src/vcs/basics.txt:30 +msgid "Change directory in bash (Linux)" +msgstr "Зміна каталогу в bash (Linux)" + +#: ../../src/vcs/basics.txt:35 +msgid "Change directory in bash (MacOS)" +msgstr "Зміна каталогу в bash (MacOS)" + +#: ../../src/vcs/basics.txt:40 +msgid "Change directory in PowerShell (Windows)" +msgstr "Зміна каталогу в PowerShell (Windows)" + +#: ../../src/vcs/basics.txt:45 +msgid "In the project's directory initialize a new Git repository." +msgstr "У каталозі проекту ініціалізуйте новий Git-репозиторій." + +#: ../../src/vcs/basics.txt:51 +msgid "" +"This creates a new subdirectory named .git that contains all of your " +"necessary repository files -- a Git repository skeleton." +msgstr "" +"Це створить новий підкаталог з ім'ям .git, який міститиме всі необхідні " +"файли сховища - скелет сховища Git." + +#: ../../src/vcs/basics.txt:55 +msgid "Cloning an existing repo" +msgstr "Клонування існуючого репо" + +#: ../../src/vcs/basics.txt:57 +msgid "" +"If you want to get a copy of an existing Git repository -- for example, a " +"project you'd like to contribute to -- the command you need is ``git clone``." +msgstr "" +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " +"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." + +#: ../../src/vcs/basics.txt:64 +msgid "" +"That creates a directory named *edu-python-course.github.io*, initializes a " +"*.git* directory inside it, pulls down all the data for that repository, and " +"checks out a working copy of the latest version." +msgstr "" +"Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " +"каталог *.git* всередині нього, витягує всі дані для цього сховища і " +"перевіряє робочу копію останньої версії." + +#: ../../src/vcs/basics.txt:72 +msgid "" +"That command does the same thing as the previous one, but the target " +"directory is called *python-course*." +msgstr "" +"Ця команда робить те саме, що й попередня, але цільовий каталог називається " +"*python-course*." + +#: ../../src/vcs/basics.txt:75 +msgid "" +"Git has a number of different transfer protocols you can use. The previous " +"example uses the ``https://`` protocol, but you may also see ``git://`` or " +"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." +msgstr "" +"Git має декілька різних протоколів передачі даних, які ви можете " +"використовувати. У попередньому прикладі використовується протокол ``https://" +"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." +"git``, який використовує протокол передачі SSH." + +#: ../../src/vcs/basics.txt:80 +msgid "Making changes to the repo" +msgstr "Внесення змін до репозиторію" + +#: ../../src/vcs/basics.txt:82 +msgid "" +"At this point, you should have a *bona fide* Git repository on your local " +"machine, and a checkout or *working copy* of all of its files in front of " +"you. Typically, you'll want to start making changes and committing snapshots " +"of those changes into your repository each time the project reaches a state " +"you want to record." +msgstr "" +"На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " +"комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " +"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " +"зафіксувати." + +#: ../../src/vcs/basics.txt:88 +msgid "" +"Remember that each file in your working directory can be in one of two " +"states: **tracked** or **untracked**." +msgstr "" +"Пам'ятайте, що кожен файл у вашому робочому каталозі може перебувати в " +"одному з двох станів: **відстежується** або **невідстежується**." + +#: ../../src/vcs/basics.txt:91 +msgid "" +"Tracked files are files that were in the last snapshot, as well as any newly " +"staged files; they can be unmodified, modified, or staged. In short, tracked " +"files are files that Git knows about." +msgstr "" +"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" +"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " +"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " +"Git'у." + +#: ../../src/vcs/basics.txt:94 +msgid "" +"Untracked files are everything else -- any files in your working directory " +"that were not in your last snapshot and are not in your staging area. " +"Untracked basically means that Git sees a file you didn't have in a previous " +"snapshot (commit), and which hasn't been yet staged." +msgstr "" +"Невідстежені файли - це все інше - будь-які файли у вашому робочому " +"каталозі, яких не було у вашому останньому знімку і які не перебувають у " +"вашій області сховища. По суті, це означає, що Git бачить файл, якого не " +"було у попередньому знімку (комміті), і який ще не було покладено у сховище." + +#: ../../src/vcs/basics.txt:104 +msgid "Checking out status of the file(s)" +msgstr "Перевірка стану файлу(ів)" + +#: ../../src/vcs/basics.txt:106 +msgid "" +"The main tool you use to determine which files are in which state is the " +"``git status`` command." +msgstr "" +"Основним інструментом для визначення стану файлів є команда ``git status``." + +#: ../../src/vcs/basics.txt:133 +msgid "" +"Newly added *README.md* file is untracked, because it's under \"Untracked " +"files\" heading the status output." +msgstr "" +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " +"розділі \"Файли, що не відстежуються\" у виведенні статусу." + +#: ../../src/vcs/basics.txt:137 +msgid "Tracking new files" +msgstr "Відстеження нових файлів" + +#: ../../src/vcs/basics.txt:139 +msgid "In order to begin tracking a new file, you use the ``git add`` command." +msgstr "" +"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " +"add``." + +#: ../../src/vcs/basics.txt:153 +msgid "" +"From now *README.md* file is **added** to the stage area and ready to be " +"committed (is under \"Changes to be committed\" heading)." +msgstr "" +"Відтепер файл *README.md* **додано** до області сцени і він готовий до " +"фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." + +#: ../../src/vcs/basics.txt:157 +msgid "" +"You can use wildcards, to stage multiple files at once. The most common use " +"cases is to add **all** modified files, or files inside of a specific " +"directory." +msgstr "" +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " +"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " +"змінених файлів або файлів у певному каталозі." + +#: ../../src/vcs/basics.txt:168 +msgid "Staging modified files" +msgstr "Зберігання змінених файлів" + +#: ../../src/vcs/basics.txt:170 +msgid "" +"If a staged (or already committed) file has been changed, it will be moved " +"under \"Modified\" heading. These changes wouldn't be committed unless they " +"are staged." +msgstr "" +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " +"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " +"вони не були поетапними." + +#: ../../src/vcs/basics.txt:190 +msgid "" +"Changes may be added to the stage area by repeating ``git add`` command." +msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." + +#: ../../src/vcs/basics.txt:191 +msgid "" +"Changes may be discard by ``git restore `` command. This action will " +"restore file to its **staged** version." +msgstr "" +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " +"до його **попередньої** версії." + +#: ../../src/vcs/basics.txt:195 +msgid "Committing changes" +msgstr "Фіксація змін" + +#: ../../src/vcs/basics.txt:197 +msgid "" +"Now that the stage area is set up the way required, it's time to commit " +"changes. Remember that anything that is still unstaged -- any files you have " +"created or modified that you haven't run git add on since you edited them -- " +"won't go into this commit." +msgstr "" +"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " +"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " +"створили або змінили, але не запустили git-додаток з моменту редагування, - " +"не потраплять до цього коміту." + +#: ../../src/vcs/basics.txt:202 +msgid "The simplest way to commit is to type ``git commit``:" +msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" + +#: ../../src/vcs/basics.txt:208 +msgid "Doing so launches your editor of choice." +msgstr "Після цього запуститься обраний вами редактор." + +#: ../../src/vcs/basics.txt:211 +msgid "" +"This is set by your shell's EDITOR environment variable -- usually vim or " +"emacs, although you can configure it with whatever you want using the ``git " +"config --global core.editor``" +msgstr "" +"Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" +"global core.editor``" + +#: ../../src/vcs/basics.txt:215 +msgid "" +"Alternatively, you can type your commit message inline with the ``commit`` " +"command by specifying it after a ``-m`` flag, like this:" +msgstr "" +"Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " +"``commit``, вказавши його після прапорця ``-m``, як показано нижче:" + +#: ../../src/vcs/basics.txt:222 +msgid "" +"Although it can be amazingly useful for crafting commits exactly how you " +"want them, the staging area is sometimes a bit more complex than you need in " +"your workflow. If you want to skip the staging area, Git provides a simple " +"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " +"automatically stage every file that is already tracked before doing the " +"commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " +"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " +"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " +"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " +"commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " +"git add:" + +#: ../../src/vcs/basics.txt:263 +msgid "Ignoring files" +msgstr "Ігнорування файлів" + +#: ../../src/vcs/basics.txt:265 +msgid "" +"Often, there is a class of files, that should not be a part of a repo. You " +"want these files to be prevent from being automatically added or even shown " +"as being untracked. These are generally files produced by loggers or a build " +"system, or some local settings for the project that shouldn't be shared " +"across other developers or maintainers. In such cases you can create a *." +"gitignore* file. Here is the content of *.gitignore* used in current " +"repository:" +msgstr "" +"Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " +"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"системою збірки, або деякі локальні налаштування проекту, які не повинні " +"бути доступними для інших розробників або супровідників. У таких випадках ви " +"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"використовується у поточному сховищі:" + +#: ../../src/vcs/basics.txt:305 +msgid "These lines mean:" +msgstr "Ці рядки означають:" + +#: ../../src/vcs/basics.txt:307 +msgid "" +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " +"will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " +"повністю проігноровано." + +#: ../../src/vcs/basics.txt:309 +msgid "Content within \"node_modules\" directory will be ignored completely." +msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:310 +msgid "" +"Any files within directories named \".vscode\" or \".idea\" will be ignored " +"completely." +msgstr "" +"Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " +"повністю проігноровані." + +#: ../../src/vcs/basics.txt:312 +msgid "Any file with name starting with hash (#) will be ignored." +msgstr "" +"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." + +#: ../../src/vcs/basics.txt:313 +msgid "Any file with name ending with tilda (~) will be ignored." +msgstr "" +"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." + +#: ../../src/vcs/basics.txt:314 +msgid "" +"Content within directories named \"temp\" or \"tmp\" will be ignored " +"completely." +msgstr "" +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:316 +msgid "" +"Content within directories named \"_builds\", \"_build\", \"builds\" or " +"\"build\" will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " +"буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:318 +msgid "Any file with name ending with \".pot\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." + +#: ../../src/vcs/basics.txt:319 +msgid "Any file with name ending with \".mo\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." + +#: ../../src/vcs/basics.txt:321 +msgid "" +"Setting up a *.gitignore* file for your new repository before you get going " +"is generally a good idea so you don't accidentally commit files that you " +"really don't want in your Git repository." +msgstr "" +"Створення файлу *.gitignore* для вашого нового сховища перед початком " +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " +"вам насправді не потрібні у вашому Git-репозиторії." + +#: ../../src/vcs/basics.txt:325 +msgid "" +"The rules for the patterns you can put in the *.gitignore* file are as " +"follows:" +msgstr "" +"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" + +#: ../../src/vcs/basics.txt:327 +msgid "Blank lines or lines starting with # are ignored." +msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." + +#: ../../src/vcs/basics.txt:328 +msgid "" +"Standard glob patterns work, and will be applied recursively throughout the " +"entire working tree." +msgstr "" +"Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " +"по всьому робочому дереву." + +#: ../../src/vcs/basics.txt:330 +msgid "" +"You can start patterns with a forward slash (/) to avoid recursive inclusion." +msgstr "" +"Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " +"похилої риски (/)." + +#: ../../src/vcs/basics.txt:332 +msgid "You can end patterns with a forward slash (/) to specify a directory." +msgstr "" +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." + +#: ../../src/vcs/basics.txt:333 +msgid "You can negate a pattern by starting it with an exclamation point (!)." +msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." + +#: ../../src/vcs/basics.txt:335 +msgid "" +"Glob patterns are like simplified regular expressions that shells use. An " +"asterisk (\\*) matches zero or more characters; [ab] matches any character " +"inside the brackets (in this case a or b); a question mark (?) matches a " +"single character; and brackets enclosing characters separated by a hyphen " +"([0-9]) matches any character between them (in this case 0 through 9). You " +"can also use two asterisks to match nested directories; a/\\*\\*/z would " +"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Глобальні шаблони подібні до спрощених регулярних виразів, які " +"використовують оболонки. Зірочка (\\*) відповідає нулю або більше символів; " +"[ab] відповідає будь-якому символу всередині дужок (у цьому випадку a або " +"b); знак питання (?) відповідає одному символу; а дужки, що містять символи, " +"розділені дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому " +"випадку від 0 до 9). Ви також можете використовувати дві зірочки для " +"вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " +"так далі." + +#: ../../src/vcs/basics.txt:344 +msgid "Viewing the commit history" +msgstr "Перегляд історії коммітів" + +#: ../../src/vcs/basics.txt:346 +msgid "" +"After you have created several commits, or if you have cloned a repository " +"with an existing commit history, you'll probably want to look back to see " +"what has happened. The most basic and powerful tool to do this is the ``git " +"log`` command." +msgstr "" +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " +"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " +"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " +"команда ``git log``." + +#: ../../src/vcs/basics.txt:372 +msgid "" +"By default, with no arguments, ``git log`` lists the commits made in that " +"repository in reverse chronological order; that is, the most recent commits " +"show up first. As you can see, this command lists each commit with its SHA-1 " +"checksum, the author's name and email, the date written, and the commit " +"message." +msgstr "" +"За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " +"зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " +"найновіші комміти показуються першими. Як ви можете бачити, ця команда " +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " +"адресою автора, датою створення та повідомленням про внесення." + +#: ../../src/vcs/basics.txt:378 +msgid "" +"One of the more helpful options is ``-p`` or ``--patch``, which shows the " +"difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to " +"show only desired number of latest entries." +msgstr "" +"Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " +"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" +"``, щоб показати лише потрібну кількість останніх записів." + +#: ../../src/vcs/basics.txt:414 +msgid "" +"This option display the same information but with a diff directly following " +"each entry. This is very helpful for code review or to quickly browse what " +"happened during a series of commits that a collaborator has added. You can " +"also use a series of summarizing options with ``git log``." +msgstr "" +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " +"кожного запису. Це дуже корисно для перегляду коду або для швидкого " +"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " +"також можете скористатися низкою параметрів підсумовування за допомогою " +"``git log``." + +#: ../../src/vcs/basics.txt:419 +msgid "" +"If you want to see some abbreviated stats for each commit, you can use the " +"``--stat`` option:" +msgstr "" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " +"скористатися опцією ``--stat``:" + +#: ../../src/vcs/basics.txt:443 +msgid "" +"Another really useful option is ``--pretty``. This option changes the log " +"output to formats other that the default. A few prebuilt option values are " +"available for you to use. The ``oneline`` value for this option prints each " +"commit on a single line, which is useful if you're look a lot of commits. In " +"addition, the ``short``, ``full``, and ``fuller`` values show the output in " +"roughly the same format but with less or more information." +msgstr "" +"Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " +"формат виведення журналу на формат, відмінний від стандартного. Ви можете " +"скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " +"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " +"форматі, але з меншою або більшою кількістю інформації." + +#: ../../src/vcs/basics.txt:476 +msgid "Specifier" +msgstr "Специфікатор" + +#: ../../src/vcs/basics.txt:476 +msgid "Description of Output" +msgstr "Опис Результатів" + +#: ../../src/vcs/basics.txt:478 +msgid "%H" +msgstr "%H" + +#: ../../src/vcs/basics.txt:478 +msgid "Commit hash" +msgstr "Хеш комміту" + +#: ../../src/vcs/basics.txt:480 +msgid "%h" +msgstr "%h" + +#: ../../src/vcs/basics.txt:480 +msgid "Abbreviated commit hash" +msgstr "Скорочений хеш коміту" + +#: ../../src/vcs/basics.txt:482 +msgid "%T" +msgstr "%T" + +#: ../../src/vcs/basics.txt:482 +msgid "Tree hash" +msgstr "Дерево хешу" + +#: ../../src/vcs/basics.txt:484 +msgid "%t" +msgstr "%t" + +#: ../../src/vcs/basics.txt:484 +msgid "Abbreviated tree hash" +msgstr "Скорочений хеш дерева" + +#: ../../src/vcs/basics.txt:486 +msgid "%P" +msgstr "%P" + +#: ../../src/vcs/basics.txt:486 +msgid "Parent hashes" +msgstr "Батьківські хеші" + +#: ../../src/vcs/basics.txt:488 +msgid "%p" +msgstr "%p" + +#: ../../src/vcs/basics.txt:488 +msgid "Abbreviated parent hashes" +msgstr "Скорочені батьківські хеші" + +#: ../../src/vcs/basics.txt:490 +msgid "%an" +msgstr "%an" + +#: ../../src/vcs/basics.txt:490 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/vcs/basics.txt:492 +msgid "%ae" +msgstr "%ae" + +#: ../../src/vcs/basics.txt:492 +msgid "Author email" +msgstr "Електронна пошта автора" + +#: ../../src/vcs/basics.txt:494 +msgid "%ad" +msgstr "%ad" + +#: ../../src/vcs/basics.txt:494 +msgid "Author date (format respects the --date=option)" +msgstr "Дата автора (формат відповідає параметру --date=option)" + +#: ../../src/vcs/basics.txt:496 +msgid "%ar" +msgstr "%ar" + +#: ../../src/vcs/basics.txt:496 +msgid "Author date, relative" +msgstr "Дата автора, відносна" + +#: ../../src/vcs/basics.txt:498 +#, python-format +msgid "%cn" +msgstr "%cn" + +#: ../../src/vcs/basics.txt:498 +msgid "Committer name" +msgstr "Ім'я коммітера" + +#: ../../src/vcs/basics.txt:500 +#, python-format +msgid "%ce" +msgstr "%ce" + +#: ../../src/vcs/basics.txt:500 +msgid "Committer email" +msgstr "Електронна пошта коммітера" + +#: ../../src/vcs/basics.txt:502 +#, python-format +msgid "%cd" +msgstr "%cd" + +#: ../../src/vcs/basics.txt:502 +msgid "Committer date" +msgstr "Дата коммітера" + +#: ../../src/vcs/basics.txt:504 +#, python-format +msgid "%cr" +msgstr "%cr" + +#: ../../src/vcs/basics.txt:504 +msgid "Committer date, relative" +msgstr "Дата коммітера, відносна" + +#: ../../src/vcs/basics.txt:506 +#, python-format +msgid "%s" +msgstr "%s" + +#: ../../src/vcs/basics.txt:506 +msgid "Subject" +msgstr "Тема" + +#: ../../src/vcs/basics.txt:509 +msgid "" +"The ``oneline`` and ``format`` option values are particularly useful with " +"another ``log`` option called ``--graph``. This option adds a nice little " +"ASCII graph showing your branch and merge history:" +msgstr "" +"Значення параметрів ``online`` і ``format`` особливо корисні з іншим " +"параметром ``log``, який називається ``--graph``. Цей параметр додає " +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " +"злиття:" + +#: ../../src/vcs/basics.txt:538 +msgid "" +"There are many more output-formatting options to ``git log``. Common options " +"to ``git log`` are:" +msgstr "" +"Існує набагато більше варіантів форматування виводу для ``git log``. " +"Загальними параметрами ``git log`` є наступні:" + +#: ../../src/vcs/basics.txt:542 +msgid "Option" +msgstr "Опція" + +#: ../../src/vcs/basics.txt:542 +msgid "Description" +msgstr "Опис" + +#: ../../src/vcs/basics.txt:544 +msgid "-p" +msgstr "-p" + +#: ../../src/vcs/basics.txt:544 +msgid "Show the patch introduced with each commit." +msgstr "Показувати виправлення, внесені з кожним коммітом." + +#: ../../src/vcs/basics.txt:546 +msgid "--stat" +msgstr "--stat" + +#: ../../src/vcs/basics.txt:546 +msgid "Show statistics for files modified in each commit." +msgstr "Показувати статистику для файлів, змінених у кожному коміті." + +#: ../../src/vcs/basics.txt:548 +msgid "--shortstat" +msgstr "--shortstat" + +#: ../../src/vcs/basics.txt:548 +msgid "" +"Display only the changed/insertions/deletions line from the --stat command." +msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." + +#: ../../src/vcs/basics.txt:551 +msgid "--name-only" +msgstr "--name-only" + +#: ../../src/vcs/basics.txt:551 +msgid "Show the list of files modified after the commit information." +msgstr "Показати список файлів, змінених після фіксації інформації." + +#: ../../src/vcs/basics.txt:554 +msgid "--name-status" +msgstr "--name-status" + +#: ../../src/vcs/basics.txt:554 +msgid "" +"Show the list of files affected with added/modified/deleted information as " +"well." +msgstr "" +"Також покажіть список файлів, яких торкнулася додана/змінена/видалена " +"інформація." + +#: ../../src/vcs/basics.txt:557 +msgid "--abbrev-commit" +msgstr "--abbrev-commit" + +#: ../../src/vcs/basics.txt:557 +msgid "" +"Show only the first few characters of the SHA-1 checksum instead of all 40." +msgstr "" +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." + +#: ../../src/vcs/basics.txt:560 +msgid "--relative-date" +msgstr "--relative-date" + +#: ../../src/vcs/basics.txt:560 +msgid "" +"Display the date in a relative format (for example, \"2 weeks ago\") instead " +"of using the full date format." +msgstr "" +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " +"повного формату дати." + +#: ../../src/vcs/basics.txt:563 +msgid "--graph" +msgstr "--graph" + +#: ../../src/vcs/basics.txt:563 +msgid "" +"Display an ASCII graph of the branch and merge history beside the log output." +msgstr "" +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." + +#: ../../src/vcs/basics.txt:566 +msgid "--pretty" +msgstr "--pretty" + +#: ../../src/vcs/basics.txt:566 +msgid "" +"Show commits in an alternate format. Option values include oneline, short, " +"full, fuller, and format (where you specify your own format)." +msgstr "" +"Показувати комміти в альтернативному форматі. Значення опції включають: " +"online, short, full, fuller і format (де ви можете вказати свій власний " +"формат)." + +#: ../../src/vcs/basics.txt:570 +msgid "--oneline" +msgstr "--oneline" + +#: ../../src/vcs/basics.txt:570 +msgid "Shorthand for --pretty=oneline --abbrev-commit used together." +msgstr "" +"Скорочення для --pretty=online --abbrev-commit, що використовується разом." + +#: ../../src/vcs/basics.txt:575 +msgid "Limiting log output" +msgstr "Обмеження виводу журналу" + +#: ../../src/vcs/basics.txt:577 +msgid "" +"In addition to output-formatting options, ``git log`` takes a number of " +"useful limiting options; that is options that let you show only a subset of " +"commits. You've seen one such option already -- the ``-`` (e.g. " +"``-2`` or ``-10``) option, which displays only the given number of latest " +"commits." +msgstr "" +"На додаток до параметрів форматування виводу, ``git log`` приймає ряд " +"корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" +"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"кількість останніх коммітів." + +#: ../../src/vcs/basics.txt:591 +msgid "" +"However, the time-limiting options such as ``--since`` and ``--until`` are " +"very useful. For example, the command to get the list of commits made in the " +"last two weeks:" +msgstr "" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" +"until``. Наприклад, команда для отримання списку коммітів, зроблених за " +"останні два тижні:" + +#: ../../src/vcs/basics.txt:599 +msgid "" +"This command works with lots of formats - you can specify a specific date " +"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"minutes ago\"``." +msgstr "" +"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " +"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " +"день 3 хвилини тому\"``." + +#: ../../src/vcs/basics.txt:602 +msgid "" +"The last really useful option to pass to ``git log`` as a filter is a path. " +"If you specify a directory or file name, you can limit the log output to " +"commits that introduced a change to those files. This is always the last " +"option and is generally preceded by double dashes (``--``) to separate the " +"paths from the options:" +msgstr "" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " +"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " +"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " +"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " +"щоб відокремити шлях від параметрів:" + +#: ../../src/vcs/basics.txt:621 +msgid "Undoing things" +msgstr "Виправлення помилок" + +#: ../../src/vcs/basics.txt:623 +msgid "At any stage, you may want to undo something." +msgstr "На будь-якому етапі ви можете захотіти щось виправити." + +#: ../../src/vcs/basics.txt:625 +msgid "" +"One of the common undos takes place when you commit too early and possibly " +"forget to add some files, or you mess up your commit message. If you want to " +"redo that commit, make the additional changes you forgot, stage them, and " +"commit again using the ``--amend`` option:" +msgstr "" +"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " +"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " +"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " +"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " +"використовуючи опцію ``--amend``:" + +#: ../../src/vcs/basics.txt:634 +msgid "E.g." +msgstr "Наприклад." + +#: ../../src/vcs/basics.txt:643 +msgid "Unstaging a staged file" +msgstr "Скасування додавання файла до індексу" + +#: ../../src/vcs/basics.txt:645 +msgid "" +"The next two sections demonstrate how to work with your staging area and " +"working directory changes. The nice part is that the command you use to " +"determine the state of those two areas also reminds you how to undo changes " +"to them." +msgstr "" +"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " +"збірці та робочому каталозі. Приємним моментом є те, що команда, за " +"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " +"те, як скасувати внесені до них зміни." + +#: ../../src/vcs/basics.txt:676 +msgid "Unmodifiyng a modified file" +msgstr "Скасування модифікації зміненого файлу" + +#: ../../src/vcs/basics.txt:678 +msgid "" +"What if you realize that you don't want to keep your changes to some file? " +"You can easily unmodify it -- **revert** it back to what it looked like when " +"you last committed. ``git status`` also tells you how to do that:" +msgstr "" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " +"Ви можете легко скасувати зміни - **повернути** його до того, як він " +"виглядав під час останнього компонування. ``git status`` також покаже вам, " +"як це зробити:" + +#: ../../src/vcs/basics.txt:686 +msgid "It tells you pretty explicitly how to discard the changes you've make." +msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." + +#: ../../src/vcs/basics.txt:699 +msgid "Undoing things with git restore" +msgstr "Скасування змін за допомогою git restore" + +#: ../../src/vcs/basics.txt:701 +msgid "" +"``git restore`` is basically an alternative to ``git reset``, from Git " +"version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " +"reset`` for many undo operations." +msgstr "" +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " +"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " +"операцій скасування." + +#: ../../src/vcs/basics.txt:737 +msgid "" +"It’s important to understand that git restore is a dangerous command. " +"Any local changes you made to that file are gone -- Git just replaced that " +"file with the last staged or committed version. Don't ever use this command " +"unless you absolutely know that you don’t want those unsaved local changes." +msgstr "" +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " +"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " +"замінить цей файл на останню версію, що перебуває у стадії виконання або " +"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " +"вам не потрібні ці незбережені локальні зміни." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/branch.po b/src/_locales/uk/LC_MESSAGES/vcs/branch.po new file mode 100644 index 000000000..684fcb0b6 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/branch.po @@ -0,0 +1,509 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/branch.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/branch.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/branch.txt:-1 +msgid "version, control, system, vcs, git, branch, merge, cherry-pick" +msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" + +#: ../../src/vcs/branch.txt:8 +msgid "Branches and Merging" +msgstr "Гілки та злиття" + +#: ../../src/vcs/branch.txt:11 +msgid "About branches" +msgstr "Про гілки" + +#: ../../src/vcs/branch.txt:13 +msgid "" +"To really understand the way Git does branching, we need to take a step back " +"and examine how Git stores its data. Git doesn't store data as a series of " +"changesets or differences, but instead as a series of snapshots. When you " +"make a commit, Git stores a commit object that contains a pointer to the " +"snapshot of the content you staged. This object also contains the author's " +"name and email address, the message that you typed, and pointers to the " +"commit or commits that directly came before this commit (its parent or " +"parents): zero parents for the initial commit, one parent for a normal " +"commit, and multiple parents for a commit that results from a merge of two " +"or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " +"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " +"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " +"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " +"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " +"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " +"на комміт або комміти, які безпосередньо передували цьому комміту (його " +"батька або батьків): нульовий батько для початкового комміту, один батько " +"для звичайного комміту і кілька батьків для комміту, який є результатом " +"злиття двох або більше гілок." + +#: ../../src/vcs/branch.txt:28 +msgid "" +"A branch in Git is simply a lightweight movable pointer to one of these " +"commits. The default branch name in Git is master. As you start making " +"commits, you're given a master branch that points to the last commit you " +"made. Every time you commit, the master branch pointer moves forward " +"automatically." +msgstr "" +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " +"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " +"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " +"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " +"пересувається вперед." + +#: ../../src/vcs/branch.txt:38 +msgid "Branch management" +msgstr "Управління гілками" + +#: ../../src/vcs/branch.txt:40 +msgid "" +"The ``git branch`` command does more that create and delete branches. If you " +"run it with no arguments, you get a simple listing of your current branches:" +msgstr "" +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " +"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"поточних гілок:" + +#: ../../src/vcs/branch.txt:55 +msgid "" +"To see all the branches that contain work you haven't yet merged in, use ``--" +"no-merged`` option:" +msgstr "" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " +"використовуйте опцію ``--no-merged``:" + +#: ../../src/vcs/branch.txt:65 +msgid "" +"Branches listed in the output has work, that isn't merged to current branch. " +"So, deleting them via ``git branch -d`` will fail." +msgstr "" +"У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " +"гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." + +#: ../../src/vcs/branch.txt:69 +msgid "Create branches" +msgstr "Створення гілок" + +#: ../../src/vcs/branch.txt:71 +msgid "" +"There are few ways to create a new branch in a Git repository. The most " +"common way is to use ``git branch`` command." +msgstr "" +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " +"них - використання команди ``git branch``." + +#: ../../src/vcs/branch.txt:78 +msgid "" +"Pointer to a parent commit is optional. By default the parent commit is set " +"to the latest one available (HEAD pointer) at the moment of the branch " +"creation. You can also switch to the newly created branch just after its " +"creation using:" +msgstr "" +"Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " +"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " +"на момент створення гілки. Ви також можете переключитися на новостворену " +"гілку одразу після її створення за допомогою:" + +#: ../../src/vcs/branch.txt:88 +msgid "Switching branches" +msgstr "Перемикання гілок" + +#: ../../src/vcs/branch.txt:90 +msgid "To switch to an existing branch, you run the ``git checkout`` command." +msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." + +#: ../../src/vcs/branch.txt:109 +msgid "Basic branching and merging" +msgstr "Основи розгалуження та злиття" + +#: ../../src/vcs/branch.txt:111 +msgid "" +"First, let's say you're working on your project and have a couple of commits " +"already on the ``master`` branch. You've decided that you're going to work " +"on issue #53 in whatever issue-tracking system your company uses. To create " +"a new branch and switch to it at the same time, you can run the ``git " +"checkout`` command with the ``-b`` switch:" +msgstr "" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " +"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " +"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " +"створити нову гілку і одночасно переключитися на неї, ви можете виконати " +"команду ``git checkout`` з ключем ``-b``:" + +#: ../../src/vcs/branch.txt:122 +msgid "This is shorthand for:" +msgstr "Це скорочено означає:" + +#: ../../src/vcs/branch.txt:129 +msgid "" +"In deed this creates a new branch pointer, aimed to the latest commit " +"present on ``master`` branch. But, from now your branch is ``feature/" +"issue53``. So, doing commits moves the feature branch pointer forward, " +"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +msgstr "" +"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " +"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" +"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " +"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." + +#: ../../src/vcs/branch.txt:134 +msgid "" +"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " +"from the ``feature/issue53`` branch back to ``master``." +msgstr "" +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " +"з гілки ``feature/issue53`` назад до ``master``." + +#: ../../src/vcs/branch.txt:138 +msgid "Merging branches" +msgstr "Злиття гілок" + +#: ../../src/vcs/branch.txt:140 +msgid "" +"You need to switch back to ``master`` branch and use ``git merge`` command, " +"to merge changes (commits) from the source branch into target." +msgstr "" +"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " +"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." + +#: ../../src/vcs/branch.txt:152 +msgid "" +"You'll notice phrase \"fast-forward\" in that merge. Because the commit " +"pointed to by the branch ``feature/issue53`` you merged in was directly " +"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"forward." +msgstr "" +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " +"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " +"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " +"вказівник вперед." + +#: ../../src/vcs/branch.txt:156 +msgid "" +"Changes from ``feature/issue53`` are now in the snapshot of the commit " +"pointed to by the ``master`` branch." +msgstr "" +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"гілка ``master``." + +#: ../../src/vcs/branch.txt:163 +msgid "" +"Now, lets assume another developer started working on ``feature/issue54`` at " +"the same time. And there are few commits on this feature branch. Suppose, " +"the developer decided that work on **issue54** is finished and they want to " +"merge their feature branch into ``master``." +msgstr "" +"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " +"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " +"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " +"з ``master``." + +#: ../../src/vcs/branch.txt:179 +msgid "" +"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"development history has diverged from some older point. Because the commit " +"on the branch you're on isn't a direct ancestor of the branch you're merging " +"in, Git has to do some work. In this case, Git does a simple three-way " +"merge, using two snapshots pointed to by the branch tips and the common " +"ancestor of the two." +msgstr "" +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " +"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " +"просте тристороннє злиття, використовуючи два знімки, на які вказують " +"кінчики гілок, і їхнього спільного предка." + +#: ../../src/vcs/branch.txt:186 +msgid "" +"Instead of just moving the branch pointer forward, Git creates a new " +"snapshot that results from this three-way merge and automatically creates a " +"new commit that points to it. This is referred to as a *merge commit*, and " +"is a special in that it has more than one parent." +msgstr "" +"Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " +"новий знімок, який є результатом цього тристороннього злиття, і автоматично " +"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " +"і він особливий тим, що має більше одного батька." + +#: ../../src/vcs/branch.txt:196 +msgid "Merge conflicts" +msgstr "Конфлікти об'єднання" + +#: ../../src/vcs/branch.txt:198 +msgid "" +"Occasionally, the merge process doesn't go smoothly. If the same part of the " +"same file is changed differently in the two branches you're merging, Git " +"won't be able to merge them cleanly." +msgstr "" +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " +"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " +"Git не зможе об'єднати їх чисто." + +#: ../../src/vcs/branch.txt:209 +msgid "" +"Git hasn't automatically created a new merge commit. It has paused the " +"process while you resolve the conflict. If you want to see which files are " +"unmerged at any point after a merge conflict, you can run ``git status``:" +msgstr "" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " +"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " +"після конфлікту злиття, ви можете запустити ``git status``:" + +#: ../../src/vcs/branch.txt:228 +msgid "" +"Anything that has merge conflicts and hasn't been resolved is listed as " +"unmerged. Git adds standard conflict-resolution markers to the files that " +"have conflicts, so you can open them manually and resolve those conflicts. " +"Your file contains a section that looks something like this:" +msgstr "" +"Все, що має конфлікти злиття, які не було вирішено, позначається як не " +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " +"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " +"Ваш файл містить розділ, який виглядає приблизно так:" + +#: ../../src/vcs/branch.txt:243 +msgid "" +"This means the version in ``HEAD`` (your ``master`` branch, because that was " +"what you had checked out when you ran merge command) is the top part of that " +"block (everything above the \"=======\"), while the version in ``vcs`` " +"branch looks like everything in the bottom part. In order to resolve the " +"conflict, you have to either choose one side or the other or merge the " +"contents yourself." +msgstr "" +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " +"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " +"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " +"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " +"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." + +#: ../../src/vcs/branch.txt:249 +msgid "When conflicts are resolved, you can run ``git status`` command again:" +msgstr "" +"Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " +"status``:" + +#: ../../src/vcs/branch.txt:262 +msgid "" +"If you're happy with that, and you verify that everything that had conflicts " +"has been staged, you can run ``git commit`` for finalize the merge commit." +msgstr "" +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " +"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " +"злиття." + +#: ../../src/vcs/branch.txt:266 +msgid "Rebasing" +msgstr "Перебазування" + +#: ../../src/vcs/branch.txt:268 +msgid "" +"In Git, there two main ways to integrate changes from one branch into " +"another: the ``merge`` and the ``rebase``." +msgstr "" +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " +"\"злиття\" і \"перебазування\"." + +#: ../../src/vcs/branch.txt:271 +msgid "" +"Earlier, there was an example of diverged work and commits made on two " +"different branches." +msgstr "" +"Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " +"зроблених на двох різних гілках." + +#: ../../src/vcs/branch.txt:278 +msgid "" +"The easiest way to integrate the branches, as we've already covered, is the " +"``merge`` command. It performs a three-way merge between the two latest " +"branch snapshots, and the most recent common ancestor of the two, creating a " +"new snapshot (and commit)." +msgstr "" +"Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " +"``merge``. Вона виконує тристороннє злиття між двома останніми знімками " +"гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." + +#: ../../src/vcs/branch.txt:283 +msgid "" +"However, there is another way: you can take the patch of the change that was " +"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " +"is called *rebasing*. With ``rebase`` command, you can take all the changes " +"that were committed on one branch and replay them on a different branch." +msgstr "" +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " +"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " +"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " +"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." + +#: ../../src/vcs/branch.txt:295 +msgid "" +"This operation works by going to the common ancestor of the two branches, " +"getting the diff introduced by each commit of the branch you're on, saving " +"those diffs to temporary files, resetting the current branch to the same " +"commit as the branch you are rebasing onto, and finally applying each change " +"in turn." +msgstr "" +"Ця операція виконується шляхом переходу до спільного предка двох гілок, " +"отримання відмінностей, внесених кожним коммітом гілки, на якій ви " +"перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " +"нарешті, застосування кожної зміни по черзі." + +#: ../../src/vcs/branch.txt:306 +msgid "" +"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " +"of their ``master`` branch, rather then merging it in, to keep a mostly " +"linear history." +msgstr "" +"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " +"об'єднувати їх, щоб зберегти переважно лінійну історію." + +#: ../../src/vcs/branch.txt:311 +msgid "Cherry-picking" +msgstr "Cherry-picking" + +#: ../../src/vcs/branch.txt:313 +msgid "" +"The other way to move introduced work from one branch to another is to " +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " +"takes the patch that was introduced in a commit and tries to reapply it on " +"the branch you're currently on. This is useful if you have a number of " +"commits on a topic branch and you want to integrate only one of them, or if " +"you only have one commit on a topic branch and you'd prefer to cherry-pick " +"it rather than run rebase." +msgstr "" +"Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " +"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " +"відновлення бази для одного коміту. Він бере патч, який було внесено в " +"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " +"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " +"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " +"rebase." + +#: ../../src/vcs/branch.txt:333 +msgid "Branching strategies" +msgstr "Стратегії розгалуження" + +#: ../../src/vcs/branch.txt:335 +msgid "" +"Branching strategy in version control systems defines how branches are " +"created, managed, and used in a project's development process. It helps " +"teams collaborate effectively, isolate changes, and organize development " +"efforts. A good branching strategy provides clarity on how to work with " +"branches, minimizes conflicts, and enables a smooth and structured " +"development workflow." +msgstr "" +"Стратегія розгалуження в системах контролю версій визначає, як створюються, " +"управляються та використовуються гілки в процесі розробки проекту. Вона " +"допомагає командам ефективно співпрацювати, ізолювати зміни та " +"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " +"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " +"структурований робочий процес розробки." + +#: ../../src/vcs/branch.txt:342 +msgid "" +"GitFlow is a popular branching strategy that provides a well-defined model " +"for managing branches in a Git repository. It was introduced by Vincent " +"Driessen and is based on the idea of using two main branches: \"master\" and " +"\"develop.\"" +msgstr "" +"GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " +"модель для управління гілками в Git-репозиторії. Вона була представлена " +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " +"основних гілок: \"master\" і \"develop\"." + +#: ../../src/vcs/branch.txt:346 +msgid "" +"**Master Branch**: The \"master\" branch represents the stable version of " +"the codebase. It should always contain production-ready code and be free " +"from any major issues. The \"master\" branch is protected, and only release " +"versions are merged into it." +msgstr "" +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " +"бази. Вона завжди повинна містити готовий до використання код і не містити " +"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " +"релізні версії." + +#: ../../src/vcs/branch.txt:350 +msgid "" +"**Develop Branch**: The \"develop\" branch is where the ongoing development " +"and integration of features take place. It serves as the integration branch " +"for various feature branches and should also contain a stable version of the " +"code." +msgstr "" +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " +"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " +"функціональних гілок, а також повинна містити стабільну версію коду." + +#: ../../src/vcs/branch.txt:354 +msgid "" +"**Feature Branches**: For each new feature or bug fix, a dedicated " +"\"feature\" branch is created off the \"develop\" branch. These branches are " +"short-lived and exist only for the duration of the feature development." +msgstr "" +"**Вітки функцій**: Для кожної нової функції або виправлення помилки " +"створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " +"недовговічні і існують лише на час розробки функції." + +#: ../../src/vcs/branch.txt:357 +msgid "" +"**Release Branches**: When the development on the \"develop\" branch is " +"ready for a release, a \"release\" branch is created. The release branch is " +"used for testing, bug fixing, and preparing for deployment." +msgstr "" +"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " +"створюється гілка \"release\". Релізна гілка використовується для " +"тестування, виправлення помилок і підготовки до розгортання." + +#: ../../src/vcs/branch.txt:360 +msgid "" +"**Hotfix Branches**: If a critical issue is discovered in the production " +"version, a \"hotfix\" branch is created from the \"master\" branch. This " +"allows for a quick fix without affecting ongoing development on the " +"\"develop\" branch." +msgstr "" +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " +"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " +"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." + +#: ../../src/vcs/branch.txt:365 +msgid "" +"GitFlow provides a structured approach to managing branching in a " +"collaborative development environment. It ensures that the main branches " +"remain stable, and new features and bug fixes are integrated smoothly before " +"being released. This strategy is particularly useful for projects with " +"regular releases and a team working on multiple features concurrently." +msgstr "" +"GitFlow забезпечує структурований підхід до управління розгалуженням у " +"середовищі спільної розробки. Він гарантує, що основні гілки залишаються " +"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " +"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " +"і командою, яка працює над декількома функціями одночасно." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/github.po b/src/_locales/uk/LC_MESSAGES/vcs/github.po new file mode 100644 index 000000000..530c87eea --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/github.po @@ -0,0 +1,259 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/github.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/github.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/github.txt:-1 +msgid "version, control, system, vcs, git, github" +msgstr "version, control, system, vcs, git, github" + +#: ../../src/vcs/github.txt:10 +msgid "GitHub" +msgstr "GitHub" + +#: ../../src/vcs/github.txt:12 +msgid "" +"`GitHub`_ is the single largest host for Git repositories, and is the " +"central point of collaboration for millions of developers and projects." +msgstr "" +"`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " +"точкою співпраці для мільйонів розробників і проектів." + +#: ../../src/vcs/github.txt:16 +msgid "Account setup and configuration" +msgstr "Налаштування та конфігурація акаунта" + +#: ../../src/vcs/github.txt:18 +msgid "" +"The first thing you need to do is set up a free user account. Visit " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " +"account creation process. Just follow the hints and provide an email " +"address, username and a strong password." +msgstr "" +"Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " +"GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " +"та надійний пароль." + +#: ../../src/vcs/github.txt:24 +msgid "About authentication to GitHub" +msgstr "Про автентифікацію на GitHub" + +#: ../../src/vcs/github.txt:27 +msgid "" +"Starting in March 2023 and through the end of 2023, GitHub gradually began " +"to require all users who contribute code on GitHub to enable two-factor " +"authentication (2FA)." +msgstr "" +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " +"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " +"двофакторну автентифікацію (2FA)." + +#: ../../src/vcs/github.txt:32 +msgid "Connect with SSH" +msgstr "Підключення за допомогою SSH" + +#: ../../src/vcs/github.txt:34 +msgid "" +"You can access and write data in repositories on GitHub using :abbr:`SSH " +"(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " +"using a private key file on your local machine." +msgstr "" +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " +"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " +"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " +"комп'ютері." + +#: ../../src/vcs/github.txt:39 +msgid "Generating a new SSH key" +msgstr "Генерація нового SSH-ключа" + +#: ../../src/vcs/github.txt:41 +msgid "" +"You can generate a new SSH key on your local machine. After you do that, you " +"can add the **public** key to your account on GitHub to enable " +"authentication for Git operations over SSH." +msgstr "" +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " +"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " +"увімкнути автентифікацію для операцій з Git'ом через SSH." + +#: ../../src/vcs/github.txt:45 +msgid "Open terminal (git-bash will suite for Windows users)" +msgstr "Відкритий термінал (для користувачів Windows підійде git-bash)" + +#: ../../src/vcs/github.txt:46 +msgid "Run command:" +msgstr "Виконати команду:" + +#: ../../src/vcs/github.txt:53 +msgid "" +"If you are using a legacy system that doesn't support the **Ed25519** " +"algorithm, use:" +msgstr "" +"Якщо ви використовуєте застарілу систему, яка не підтримує алгоритм " +"**Ed25519**, використовуйте його:" + +#: ../../src/vcs/github.txt:60 +msgid "" +"When you're prompted to \"Enter a file in which to save the key\", you can " +"press **Enter** to accept the default file location." +msgstr "" +"Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " +"натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." + +#: ../../src/vcs/github.txt:67 +msgid "" +"Type a secure passphrase, if you want -- this is an extra layer of security." +msgstr "" +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." + +#: ../../src/vcs/github.txt:75 +msgid "This will create a new SSH key, using the provided email as label." +msgstr "" +"Буде створено новий SSH-ключ, з використанням наданої адреси електронної " +"пошти як мітки." + +#: ../../src/vcs/github.txt:77 +msgid "" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " +"and ensure there are two files generated:" +msgstr "" +"Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " +"каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" + +#: ../../src/vcs/github.txt:80 +msgid "**id_ALGORITHM** (e.g. \"id_rsa\", \"id_ed252519\" etc.)" +msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощо)." + +#: ../../src/vcs/github.txt:81 +msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" +msgstr "" +"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." + +#: ../../src/vcs/github.txt:84 +msgid "" +"The private key (the one without \".pub\") should be kept secure and " +"private. You should never share this." +msgstr "" +"Закритий ключ (той, що без \".pub\") слід зберігати в безпеці і не " +"розголошувати. Ви ніколи не повинні ділитися ним." + +#: ../../src/vcs/github.txt:87 +msgid "" +"The public key is what you add to servers or services to which you want to " +"authenticate using your private key." +msgstr "" +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " +"хочете пройти автентифікацію за допомогою вашого закритого ключа." + +#: ../../src/vcs/github.txt:91 +msgid "Adding your SSH key to the ssh-agent and GitHub" +msgstr "Додавання SSH-ключа до ssh-агента та GitHub" + +#: ../../src/vcs/github.txt:93 +msgid "" +"Before adding a new SSH key to the ssh-agent to manage your keys, you should " +"have checked for existing SSH keys and generated SSH keys." +msgstr "" +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " +"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." + +#: ../../src/vcs/github.txt:96 +msgid "" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " +"it manually:" +msgstr "" +"Переконайтеся, що ssh-агент запущено. Ви можете скористатися " +"\"Автозапуском\" або запустити його вручну:" + +#: ../../src/vcs/github.txt:104 +msgid "Add you SSH private key to the ssh-agent." +msgstr "Додайте ваш приватний ключ SSH до ssh-агента." + +#: ../../src/vcs/github.txt:110 +msgid "" +"Add the SSH public key to your account on GitHub. Copy the SSH public key to " +"your clipboard." +msgstr "" +"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " +"відкритий ключ SSH до буфера обміну." + +#: ../../src/vcs/github.txt:117 +msgid "" +"Alternatively, if ``clip`` isn't working, just type public key content to " +"the terminal using ``cat``," +msgstr "" +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " +"терміналі за допомогою ``cat``," + +#: ../../src/vcs/github.txt:124 +msgid "" +"or simply navigate to the file and open it with any text editor. At the end, " +"you need to copy public key content." +msgstr "" +"або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " +"текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." + +#: ../../src/vcs/github.txt:127 +msgid "" +"On GitHub, in the upper-right corner of any page, click your profile photo, " +"then click **Settings**." +msgstr "" +"На GitHub у правому верхньому куті будь-якої сторінки натисніть на " +"фотографію свого профілю, а потім натисніть **Налаштування**." + +#: ../../src/vcs/github.txt:129 +msgid "" +"In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " +"press **New SSH key** button." +msgstr "" +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " +"кнопку **Новий ключ SSH**." + +#: ../../src/vcs/github.txt:131 +msgid "In the \"Title\" field, add a descriptive label for the new key." +msgstr "У полі \"Назва\" додайте описову мітку для нового ключа." + +#: ../../src/vcs/github.txt:132 +msgid "Select the type of key -- \"Authentication key\"." +msgstr "Виберіть тип ключа - \"Ключ автентифікації\"." + +#: ../../src/vcs/github.txt:133 +msgid "In the \"Key\" field, paste your public key." +msgstr "У полі \"Ключ\" вставте ваш відкритий ключ." + +#: ../../src/vcs/github.txt:134 +msgid "Click **Add SSH key**." +msgstr "Натисніть **Додати SSH-ключ**." + +#: ../../src/vcs/github.txt:135 +msgid "If prompted, confirm access to your account on GitHub." +msgstr "" +"Якщо з'явиться відповідний запит, підтвердіть доступ до свого облікового " +"запису на GitHub." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/index.po b/src/_locales/uk/LC_MESSAGES/vcs/index.po new file mode 100644 index 000000000..b23852bdb --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/index.po @@ -0,0 +1,74 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/index.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/index.txt:-1 +msgid "version, control, system, vcs, git" +msgstr "version, control, system, vcs, git" + +#: ../../src/vcs/index.txt:8 +msgid "Version Control System" +msgstr "Система контролю версій" + +#: ../../src/vcs/index.txt:10 +msgid "" +":abbr:`VCS (Version Control Systems)` play an integral role in modern " +"software development. They allow multiple developers to work on a project " +"simultaneously without overwriting each other's changes. VCSs track the " +"history of changes to the source code, making it possible to revert to " +"previous states, compare versions, and more." +msgstr "" +":abbr:`VCS (Version Control Systems)` відіграють невід'ємну роль у сучасній " +"розробці програмного забезпечення. Вони дозволяють декільком розробникам " +"працювати над проектом одночасно, не перезаписуючи зміни один одного. VCS " +"відстежують історію змін у вихідному коді, дозволяючи повертатися до " +"попередніх станів, порівнювати версії тощо." + +#: ../../src/vcs/index.txt:16 +msgid "" +"Among the VCSs available, Git stands out as one of the most popular and " +"powerful tools. It's used by small projects and large-scale software alike, " +"owing to its flexibility, distributed nature, and efficient handling of " +"codebase versions." +msgstr "" +"Серед наявних VCS Git є одним з найпопулярніших і найпотужніших " +"інструментів. Його використовують як у невеликих проектах, так і у великому " +"програмному забезпеченні, завдяки його гнучкості, розподіленості та " +"ефективній роботі з версіями кодової бази." + +#: ../../src/vcs/index.txt:21 +msgid "" +"In this part, you'll learn about the fundamentals of version control, how to " +"set up your environment for Git, dive into the basics of commits, branches, " +"and merges, understand the significance of tags, and finally, explore how to " +"collaborate using remote repositories and platforms like GitHub." +msgstr "" +"У цій частині ви дізнаєтеся про основи управління версіями, як налаштувати " +"середовище для Git'а, зануритеся в основи коммітів, гілок і злиття, " +"зрозумієте значення тегів і, нарешті, вивчите, як співпрацювати за допомогою " +"віддалених репозиторіїв і платформ на кшталт GitHub." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/intro.po b/src/_locales/uk/LC_MESSAGES/vcs/intro.po new file mode 100644 index 000000000..c40a07462 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/intro.po @@ -0,0 +1,221 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/intro.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/intro.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/intro.txt:-1 +msgid "version, control, system, vcs, git" +msgstr "version, control, system, vcs, git" + +#: ../../src/vcs/intro.txt:8 +msgid "About version control (Git)" +msgstr "Про контроль версій (Git)" + +#: ../../src/vcs/intro.txt:10 +msgid "" +"Version control is a system that records changes to a file or set of files " +"over time so that you can recall specific versions later. It allows you to " +"revert selected files back to a previous state, revert the entire project " +"back to a previous state, compare changes over time, see who last modified " +"something that might be causing a problem, who introduced an issue and when, " +"and more." +msgstr "" +"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " +"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " +"повернути вибрані файли до попереднього стану, повернути весь проект до " +"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " +"щось, що може спричинити проблему, хто і коли створив проблему, тощо." + +#: ../../src/vcs/intro.txt:16 +msgid "" +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " +"check out the latest snapshot of the files; rather, they fully mirror the " +"repository, including its full history. Thus, if any server dies, and these " +"systems were collaborating via that server, any of the client repositories " +"can be copied back up to the server to restore it. Every clone is really a " +"full backup of all the data." +msgstr "" +"У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " +"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " +"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " +"ладу, а ці системи працювали через нього, будь-який з клієнтських " +"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " +"клон - це фактично повна резервна копія всіх даних." + +#: ../../src/vcs/intro.txt:26 +msgid "Distributed version control diagram" +msgstr "Розподілена схема управління версіями" + +#: ../../src/vcs/intro.txt:29 +msgid "What is Git?" +msgstr "Що таке Git?" + +#: ../../src/vcs/intro.txt:30 +msgid "" +"The major difference between Git and any other VCS is the way Git thinks " +"about its data. Conceptually, most other systems store information as a list " +"of file-based changes. Git doesn't think of or store its data this way. " +"Instead, Git thinks of its data more like a series of snapshots of a " +"miniature filesystem." +msgstr "" +"Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " +"Git'ом мислить про свої дані. Концептуально, більшість інших систем " +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " +"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " +"серію знімків мініатюрної файлової системи." + +#: ../../src/vcs/intro.txt:36 +msgid "" +"This is an important distinction between Git and nearly all other VCSs. It " +"makes Git reconsider almost every aspect of version control that most other " +"systems copied from the previous generation. This makes Git more like a mini " +"filesystem with some incredibly powerful tools built on top of it, rather " +"than simply a VCS." +msgstr "" +"Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " +"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " +"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " +"міні-файлову систему з деякими неймовірно потужними інструментами, " +"побудованими поверх неї, ніж на звичайну VCS." + +#: ../../src/vcs/intro.txt:45 +msgid "Storing data as snapshots of the project over time" +msgstr "Зберігання даних у вигляді знімків проекту з плином часу" + +#: ../../src/vcs/intro.txt:48 +msgid "Local operations" +msgstr "Локальні операції" + +#: ../../src/vcs/intro.txt:49 +msgid "" +"Most operations in Git need only local files and resources to operate -- " +"generally no information is needed from another computer on your network. " +"Because you have the entire history of the project right there on your local " +"disk, most operations seem almost instantaneous." +msgstr "" +"Для виконання більшості операцій у Git'і потрібні лише локальні файли та " +"ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " +"мережі. Оскільки вся історія проекту зберігається на вашому локальному " +"диску, більшість операцій виконуються майже миттєво." + +#: ../../src/vcs/intro.txt:55 +msgid "Integrity" +msgstr "Цілісність" + +#: ../../src/vcs/intro.txt:56 +msgid "" +"Everything in Git is checksummed before it is stored and is then referred to " +"by that checksum. This means it's impossible to change the contents of any " +"file or directory without Git knowing about it." +msgstr "" +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " +"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " +"каталогу без відома Git'а." + +#: ../../src/vcs/intro.txt:61 +msgid "Repository files states" +msgstr "Стани файлів сховища" + +#: ../../src/vcs/intro.txt:62 +msgid "" +"Git has three main states that your files can reside in: **modified**, " +"**staged**, and **committed**:" +msgstr "" +"Git має три основні стани, в яких можуть перебувати ваші файли: " +"**модифіковані**, **на стадії розробки** та **зафіксовані**:" + +#: ../../src/vcs/intro.txt:65 +msgid "" +"Modified means that you have changed the file but have not committed it to " +"your database yet." +msgstr "" +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " +"даних." + +#: ../../src/vcs/intro.txt:67 +msgid "" +"Staged means that you have marked a modified file in its current version to " +"go into your next commit snapshot." +msgstr "" +"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " +"він потрапив до наступного знімка фіксації." + +#: ../../src/vcs/intro.txt:69 +msgid "Committed means that the data is safely stored in your local database." +msgstr "" +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." + +#: ../../src/vcs/intro.txt:76 +msgid "The basic Git workflow goes something like this:" +msgstr "Базовий робочий процес Git'а виглядає приблизно так:" + +#: ../../src/vcs/intro.txt:78 +msgid "You modify files in your working tree." +msgstr "Ви змінюєте файли у вашому робочому дереві." + +#: ../../src/vcs/intro.txt:79 +msgid "" +"You selectively stage just those changes you want to be part of your next " +"commit, which adds only those changes to the staging area." +msgstr "" +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " +"коміт, що додає тільки ці зміни в область стабілізації." + +#: ../../src/vcs/intro.txt:81 +msgid "" +"You do a commit, which takes the files as they are in the staging area and " +"stores that snapshot permanently to your Git directory." +msgstr "" +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " +"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." + +#: ../../src/vcs/intro.txt:85 +msgid "Command line" +msgstr "Командний рядок" + +#: ../../src/vcs/intro.txt:87 +msgid "" +"There are a lot of different ways to use Git. There are the original command-" +"line tools, and there are many graphical user interfaces of varying " +"capabilities. For one, the command line is the only place you can run all " +"Git commands -- most of the GUIs implement only a partial subset of Git " +"functionality for simplicity. If you know how to run the command-line " +"version, you can probably also figure out how to run the GUI version, while " +"the opposite is not necessarily true. Also, while your choice of graphical " +"client is a matter of personal taste, all users will have the command-line " +"tools installed and available." +msgstr "" +"Існує багато різних способів використання Git'у. Існують оригінальні " +"інструменти командного рядка, а також багато графічних інтерфейсів " +"користувача з різними можливостями. З одного боку, командний рядок є єдиним " +"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " +"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " +"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " +"ймовірно, також зможете з'ясувати, як запустити версію з графічним " +"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " +"графічного клієнта є справою особистого смаку, всі користувачі матимуть " +"встановлені та доступні інструменти командного рядка." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po b/src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po new file mode 100644 index 000000000..e44a4939f --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po @@ -0,0 +1,223 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Version Control System - Pull Requests" +msgstr "Система контролю версій - Запити на Злиття (Pull Requests)" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "version, control, system, vcs, git, pull request, merge" +msgstr "version, control, system, vcs, git, pull request, merge" + +#: ../../src/vcs/pullrequest.txt:9 +msgid "Pull Request" +msgstr "Запит на Злиття (Pull Request)" + +#: ../../src/vcs/pullrequest.txt:11 +msgid "" +"Pull request let you tell others about changes you've pushed to a branch in " +"a repository on GitHub. Once a pull request is opened, you can discuss and " +"review the potential changes with collaborators and add follow-up commits " +"before your changes are merged into the base branch:cite:`github:about-pr`." +msgstr "" +"Pull-запит дозволяє вам повідомити інших про зміни, які ви перенесли до " +"гілки в репозиторії на GitHub. Після того, як запит відкрито, ви можете " +"обговорити і переглянути потенційні зміни з колегами і додати подальші " +"коміти, перш ніж ваші зміни будуть злиті в базову гілку branch:cite:`github:" +"about-pr`." + +#: ../../src/vcs/pullrequest.txt:17 +msgid "Draft pull requests" +msgstr "Чернетки pull requests" + +#: ../../src/vcs/pullrequest.txt:19 +msgid "" +"Draft pull requests are available in public repositories on GitHub. When you " +"create a pull request, you can choose to a create a pull request that is " +"ready for review or a draft pull request. Draft pull requests cannot be " +"merged. When you're ready to get feedback on your pull request, you can mark " +"your draft pull request as ready for review." +msgstr "" +"Чернетки pull-запитів доступні в публічних репозиторіях на GitHub. Коли ви " +"створюєте пул-запит, ви можете вибрати між створенням готового до розгляду " +"пул-запиту та чернетки пул-запиту. Чернетки пул-запитів не можна " +"об'єднувати. Коли ви будете готові отримати відгук на свій запит, ви можете " +"позначити свій чернетковий запит як готовий до розгляду." + +#: ../../src/vcs/pullrequest.txt:26 +msgid "Difference between commits on compare and pull request pages" +msgstr "Різниця між коммітами на сторінках порівняння та pull-запитів" + +#: ../../src/vcs/pullrequest.txt:28 +msgid "" +"The compare and pull request pages use different methods to calculate the " +"diff for changed files:" +msgstr "" +"Сторінки запитів порівняння і витягування використовують різні методи для " +"обчислення різниці для змінених файлів:" + +#: ../../src/vcs/pullrequest.txt:31 +msgid "" +"Compare pages show the diff between the tip of the head ref and the current " +"common ancestor (that is, the merge base) of the head and base ref." +msgstr "" +"На сторінках порівняння показано різницю між кінчиком головного референта і " +"поточним спільним предком (тобто, основою злиття) головного і основного " +"референта." + +#: ../../src/vcs/pullrequest.txt:33 +msgid "" +"Pull request pages show the diff between the tip of the head ref and the " +"common ancestor of the head and base ref at the time when the pull request " +"was created. Consequently, the merge base used for the comparison might be " +"different." +msgstr "" +"Сторінки запитів на злиття показують різницю між вершиною головного рефа і " +"спільним предком головного і базового рефів на момент створення запиту на " +"злиття. Отже, база злиття, яка використовується для порівняння, може " +"відрізнятися." + +#: ../../src/vcs/pullrequest.txt:39 +msgid "About comparing branches" +msgstr "Про порівняння гілок" + +#: ../../src/vcs/pullrequest.txt:41 +msgid "" +"Pull requests display diffs to compare the changes you made in your topic " +"branch against the base branch that you want to merge your changes into." +msgstr "" +"Витягніть запити на відображення відмінностей, щоб порівняти зміни, зроблені " +"у вашій гілці теми, з базовою гілкою, до якої ви хочете об'єднати ваші зміни." + +#: ../../src/vcs/pullrequest.txt:44 +msgid "" +"Rather that viewing the commits themselves, you can view the proposed " +"changes as they'll appear in the files once the pull request is merged. The " +"files appear in alphabetical order within the Files changed tab. Additions " +"to the files appear in green and are prefaced by a ``+`` sign while content " +"that has been removed appears in red and is prefaced by a ``-`` sign :cite:" +"`github:compare-pr`." +msgstr "" +"Замість того, щоб переглядати самі комміти, ви можете переглянути " +"запропоновані зміни, які з'являться у файлах після об'єднання запиту на " +"витягування. Файли відображаються в алфавітному порядку на вкладці Змінені " +"файли. Доповнення до файлів відображаються зеленим кольором зі знаком ``+``, " +"тоді як вміст, який було вилучено, відображається червоним кольором зі " +"знаком ``-`` :cite:`github:compare-pr`." + +#: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 +msgid "Creating a pull request" +msgstr "Створення pull-запиту" + +#: ../../src/vcs/pullrequest.txt:54 +msgid "" +"Create a pull request to propose and collaborate on changes to a repository. " +"These changes are proposed in a *branch*, which ensures that the default " +"branch only contains finished and approved work:cite:`github:create-pr`." +msgstr "" +"Створіть pull request, щоб пропонувати зміни до сховища та співпрацювати над " +"ними. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " +"замовчуванням містить лише завершені та затверджені роботи:cite:`github:" +"create-pr`." + +#: ../../src/vcs/pullrequest.txt:59 +msgid "About branches" +msgstr "Про гілки" + +#: ../../src/vcs/pullrequest.txt:61 +msgid "" +"Use a branch to isolate development work without affecting other branches in " +"the repository. Each repository has one default branch, and can have " +"multiple other branches. You can merge a branch into another branch using a " +"pull request." +msgstr "" +"Використовуйте гілку, щоб ізолювати роботу над розробкою, не впливаючи на " +"інші гілки у сховищі. Кожне сховище має одну гілку за замовчуванням і може " +"мати декілька інших гілок. Ви можете об'єднати гілку з іншою гілкою за " +"допомогою pull-запиту." + +#: ../../src/vcs/pullrequest.txt:66 +msgid "" +"Branches allow you to develop features, fix bugs, or safely experiment with " +"new ideas in a contained area of your repository." +msgstr "" +"Гілки дозволяють розробляти функції, виправляти помилки або безпечно " +"експериментувати з новими ідеями в обмеженій області вашого сховища." + +#: ../../src/vcs/pullrequest.txt:69 +msgid "" +"You always create a branch from an existing branch. Typically, you might " +"create a new branch from the default branch of your repository." +msgstr "" +"Ви завжди створюєте гілку з існуючої гілки. Зазвичай, ви можете створити " +"нову гілку з гілки за замовчуванням вашого сховища." + +#: ../../src/vcs/pullrequest.txt:75 +msgid "On GitHub, navigate to the main page of the repository." +msgstr "На GitHub перейдіть на головну сторінку репозиторію." + +#: ../../src/vcs/pullrequest.txt:76 +msgid "Switch to \"Pull requests\" tab." +msgstr "Перейдіть на вкладку \"Pull requests\"." + +#: ../../src/vcs/pullrequest.txt:77 +msgid "Press \"New pull request\" button." +msgstr "Натисніть кнопку \"New pull request\"." + +#: ../../src/vcs/pullrequest.txt:78 +msgid "Select base and source branches." +msgstr "Виберіть базову і вихідну гілки." + +#: ../../src/vcs/pullrequest.txt:79 +msgid "Press \"Create pull request\" button." +msgstr "Натисніть кнопку \"Create pull request\"." + +#: ../../src/vcs/pullrequest.txt:80 +msgid "Provide a meaningful title and description." +msgstr "Надайте змістовну назву та опис." + +#: ../../src/vcs/pullrequest.txt:81 +msgid "Draft or create a pull request." +msgstr "Створіть pull request або його чорнетку." + +#: ../../src/vcs/pullrequest.txt:83 +msgid "" +"To create pull request that is ready for review, click **Create Pull " +"Request**." +msgstr "" +"Щоб створити запит, готовий до перегляду, натисніть **Create Pull Request**." + +#: ../../src/vcs/pullrequest.txt:85 +msgid "" +"To create a draft pull request, use the drop-down and select **Create Draft " +"Pull Request**, then click **Draft Pull Request**." +msgstr "" +"Щоб створити чернетку запиту на вилучення, скористайтеся випадаючим списком " +"і виберіть **Create Draft Pull Request**, а потім натисніть **Draft Pull " +"Request**." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/remotes.po b/src/_locales/uk/LC_MESSAGES/vcs/remotes.po new file mode 100644 index 000000000..407cb8da6 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/remotes.po @@ -0,0 +1,227 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/remotes.txt:3 +msgid "Remotes" +msgstr "Віддалені репозиторії" + +#: ../../src/vcs/remotes.txt:5 +msgid "" +"To be able to collaborate on any Git project, you need to know how to manage " +"your remote repositories. Remote repositories are versions of your project " +"that are hosted on the Internet or network somewhere. You can have several " +"of them, each of which generally is either read-only or read/write for you. " +"Managing remotes includes knowing how to add remote repositories, remove " +"remote repositories that are no longer valid, manage various branches and " +"define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " +"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " +"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " +"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " +"або читання/запису. Керування віддаленими сховищами включає в себе вміння " +"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " +"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " +"чи ні, і багато іншого." + +#: ../../src/vcs/remotes.txt:21 +msgid "Showing your remote" +msgstr "Перелік віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:23 +msgid "" +"To see which remote servers you have configured, you can run the ``git " +"remote`` command. It lists the shortnames of each remote handle you're " +"specified. If you've cloned your repository, you should at least see " +"``origin`` - that is default name Git gives to the server you clone from:" +msgstr "" +"Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " +"команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " +"віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " +"з якого ви клонуєте:" + +#: ../../src/vcs/remotes.txt:41 +msgid "" +"This means we can pull contributions from any of these users pretty easily. " +"We may additionally have permission to push to one or more of these." +msgstr "" +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " +"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " +"або декількох з них." + +#: ../../src/vcs/remotes.txt:45 +msgid "Adding remote repositories" +msgstr "Додавання віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:47 +msgid "" +"To add a new remote Git repository as a shortname you can reference easily, " +"run ``git remote add ``:" +msgstr "" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " +"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" + +#: ../../src/vcs/remotes.txt:61 +msgid "" +"Now you can use the string \"personal\" on the command line in lieu of the " +"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" +"course\" is now accessible as ``personal/master``, while shortname to the " +"same branch in origin will be -- ``origin/master``." +msgstr "" +"Тепер ви можете використовувати рядок \"personal\" в командному рядку " +"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" +"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " +"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." + +#: ../../src/vcs/remotes.txt:67 +msgid "Fetching and pulling from remotes" +msgstr "Отримання та витягування з віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:69 +msgid "" +"To get data from remote project, you can run ``git fetch`` command. The " +"command goes out to that remote project and pulls down all the information " +"from that remote project that you don't have yet. After you do this, you " +"should have references to all the branches from that remote, which you can " +"merge in or inspect at any time." +msgstr "" +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " +"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " +"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " +"переглянути у будь-який час." + +#: ../../src/vcs/remotes.txt:79 +msgid "" +"If your current branch is set up to track a remote branch, you can use ``git " +"pull`` command to automatically fetch and then merge that remote branch into " +"your current branch. By default, the ``git clone`` command automatically " +"sets up your local ``master`` branch to track the remote ``master`` branch " +"(or whatever default remote branch)." +msgstr "" +"Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " +"можете скористатися командою ``git pull`` для автоматичного отримання і " +"подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " +"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " +"іншої віддаленої гілки за замовчуванням)." + +#: ../../src/vcs/remotes.txt:85 +msgid "" +"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." +"rebase`` variable is not set. Git will keep warning you until you set the " +"variable." +msgstr "" +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " +"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " +"доки ви не встановите змінну." + +#: ../../src/vcs/remotes.txt:90 +msgid "" +"If you want the default behavior of Git (fast-forward if possible, else " +"create a merge commit): ``git config --global pull.rebase \"false\"``." +msgstr "" +"Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " +"pull.rebase \"false\"``." + +#: ../../src/vcs/remotes.txt:93 +msgid "" +"If you want to rebase when pulling: ``git config --global pull.rebase " +"\"true\"``." +msgstr "" +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." +"rebase \"true\"``." + +#: ../../src/vcs/remotes.txt:97 +msgid "Pushing to remotes" +msgstr "Відправка до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:99 +msgid "" +"When you have your project at a point that you want to share, you have to " +"push it upstream. The command for this is simple: ``git push " +"``." +msgstr "" +"Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " +"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " +"push <віддалений> <гілка>``." + +#: ../../src/vcs/remotes.txt:106 +msgid "" +"This command works only if you cloned from a server to which you have write " +"access and if nobody has pushed in the meantime. If you and someone else " +"clone at the same time and they push upstream and then you push upstream, " +"you push will rightly be rejected. You'll have to fetch their work first and " +"incorporate it into yours before you'll be allowed to push." +msgstr "" +"Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " +"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " +"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " +"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." + +#: ../../src/vcs/remotes.txt:113 +msgid "Pushing a new branch to remote" +msgstr "Переміщення нової гілки до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:115 +msgid "" +"In case you have created a local branch for some specific needs and you want " +"to share this branch, you need to set up track for this branch. This can be " +"done by using: ``git push --set-upstream origin ``. This will " +"create a new remote branch and set up track to your current local branch. " +"There is a shortcut for this command: ``git push -u origin ``." +msgstr "" +"Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " +"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " +"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " +"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " +"<віддалена_гілка>``." + +#: ../../src/vcs/remotes.txt:122 +msgid "Inspecting a remote" +msgstr "Перевірка віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:124 +msgid "" +"If you want to see more information about a particular remote, you can use " +"the ``git remote show , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/setup.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/setup.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/setup.txt:-1 +msgid "version, control, system, vcs, git, setup" +msgstr "version, control, system, vcs, git, setup" + +#: ../../src/vcs/setup.txt:8 +msgid "Git Setup" +msgstr "Налаштування Git'а" + +#: ../../src/vcs/setup.txt:10 +msgid "" +"Now that you have Git on your system, you'll want to do a few things to " +"customize your Git environment. Git comes with a tool called ``git config`` " +"that lets you get and set configuration variables that control all aspects " +"of how Git looks and operates. These variables can be stored in three " +"different places:" +msgstr "" +"Тепер, коли у вашій системі встановлено Git, ви захочете зробити кілька " +"речей, щоб налаштувати середовище Git'а. Git постачається з інструментом під " +"назвою ``git config``, який дозволяє вам отримувати та встановлювати " +"конфігураційні змінні, що контролюють всі аспекти вигляду та роботи Git'у. " +"Ці змінні можна зберігати у трьох різних місцях:" + +#: ../../src/vcs/setup.txt:16 +msgid "" +"*[path]/etc/gitconfig* file: Contains values applied to every user on the " +"system and all their repositories. If you pass the option ``--system`` to " +"git config, it reads and writes from this file specifically. Because this is " +"a system configuration file, you would need administrative or superuser " +"privilege to make changes to it." +msgstr "" +"Файл *[path]/etc/gitconfig*: Містить значення, що застосовуються до кожного " +"користувача у системі та всіх його сховищ. Якщо ви передасте git config " +"параметр ``--system``, він буде читати і писати саме з цього файлу. Оскільки " +"це файл конфігурації системи, вам знадобляться адміністративні привілеї або " +"привілеї суперкористувача, щоб вносити до нього зміни." + +#: ../../src/vcs/setup.txt:21 +msgid "" +"*~/.gitconfig* or *~/.config/git/config* file: Values specific personally to " +"you, the user. You can make Git read and write to this file specifically by " +"passing the ``--global`` option, and this affects all of the repositories " +"you work with on your system." +msgstr "" +"*~/.gitconfig* або *~/.config/git/config* файл: Значення, характерні " +"особисто для вас, користувача. Ви можете змусити Git'а читати і писати до " +"цього файлу спеціально, передавши опцію ``--global``, і це вплине на всі " +"сховища, з якими ви працюєте у вашій системі." + +#: ../../src/vcs/setup.txt:25 +msgid "" +"*config* file in the Git directory (that is, *.git/config*) of whatever " +"repository you're currently using: Specific to that single repository. You " +"can force Git to read from and write to this file with the ``--local`` " +"option, but that is in fact the default. Unsurprisingly, you need to be " +"located somewhere in a Git repository for this option to work properly." +msgstr "" +"файл *config* у каталозі Git (тобто *.git/config*) того сховища, яке ви " +"зараз використовуєте: Специфічний для цього окремого сховища. Ви можете " +"змусити Git'а читати з цього файлу і писати до нього за допомогою опції ``--" +"local``, але за замовчуванням так і є. Не дивно, що для правильної роботи " +"цієї опції вам потрібно знаходитися десь у сховищі Git'а." + +#: ../../src/vcs/setup.txt:31 +msgid "" +"Each level overrides values in the previous level, so values in *.git/" +"config* trump those in *[path]/etc/gitconfig*." +msgstr "" +"Кожен рівень перевизначає значення попереднього рівня, тому значення у *.git/" +"config* мають перевагу над значеннями у *[path]/etc/gitconfig*." + +#: ../../src/vcs/setup.txt:34 +msgid "You can view all of your settings and where they are coming from using:" +msgstr "" +"Ви можете переглянути всі свої налаштування і те, звідки вони надходять, " +"використовуючи:" + +#: ../../src/vcs/setup.txt:41 +msgid "Your identity" +msgstr "Ваша особистість" + +#: ../../src/vcs/setup.txt:43 +msgid "" +"The first thing you should do when you install Git is to set your user name " +"and email address. This is important because every Git commit uses this " +"information." +msgstr "" +"Перше, що вам слід зробити під час встановлення Git'у, це вказати своє ім'я " +"користувача та адресу електронної пошти. Це важливо, оскільки кожна фіксація " +"Git'а використовує цю інформацію." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/tagging.po b/src/_locales/uk/LC_MESSAGES/vcs/tagging.po new file mode 100644 index 000000000..e1b8a53e9 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/tagging.po @@ -0,0 +1,169 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/tagging.txt:3 +msgid "Tagging" +msgstr "Тегування" + +#: ../../src/vcs/tagging.txt:5 +msgid "" +"Like most VCSs, Git has the ability to tag specific points in a repository's " +"history as being important. Typically, people use this functionality to mark " +"release points (``v1.0``, ``v2.0`` and so on)." +msgstr "" +"Як і більшість VCS, Git має можливість позначати певні моменти в історії " +"сховища як важливі. Зазвичай люди використовують цю функцію для позначення " +"точок релізу (``v1.0``, ``v2.0`` і так далі)." + +#: ../../src/vcs/tagging.txt:10 +msgid "Listing tags" +msgstr "Перелік тегів" + +#: ../../src/vcs/tagging.txt:12 +msgid "" +"Listing the existing tags in Git is straightforward. Just type ``git tag`` " +"(with optional ``-l`` or ``--list``)." +msgstr "" +"Перерахувати існуючі теги у Git'і дуже просто. Просто введіть ``git tag`` (з " +"необов'язковим ``-l`` або ``--list``)." + +#: ../../src/vcs/tagging.txt:21 +msgid "" +"This command lists the tags in alphabetical order, the order in which they " +"are displayed has no real importance. You can also search for tags that " +"match a particular pattern. The Git source repo, for instance contains more " +"than 500 tags. If you're interested only in looking at the 1.8.4 series, you " +"can run this:" +msgstr "" +"Ця команда перелічує мітки в алфавітному порядку, порядок їх відображення не " +"має особливого значення. Ви також можете шукати теги, які відповідають " +"певному шаблону. Наприклад, сховище коду Git містить понад 500 тегів. Якщо " +"вас цікавить лише серія 1.8.4, ви можете виконати цю команду:" + +#: ../../src/vcs/tagging.txt:37 +msgid "Creating tags" +msgstr "Створення тегів" + +#: ../../src/vcs/tagging.txt:39 +msgid "Git supports two types of tags: *lightweight* and *annotated*." +msgstr "Git підтримує два типи тегів: *легкі* та *анотовані*." + +#: ../../src/vcs/tagging.txt:41 +msgid "" +"A lightweight tag is very much like a branch that doesn't change -- it's " +"just a pointer to a specific commit." +msgstr "" +"Полегшений тег дуже схожий на гілку, яка не змінюється -- це просто " +"вказівник на конкретний комміт." + +#: ../../src/vcs/tagging.txt:44 +msgid "" +"Annotated tags, however, are stored as full objects in the Git database. " +"They're checksummed; contain the tagger name, email, and date; have a " +"tagging message; and can be signed and verified with GBU Privacy Guard " +"(GPG). It's generally recommended that you create annotated tags so you can " +"have all this information; but if you want a temporary tag or for some " +"reason don't want to keep the other information, lightweight tags are " +"available too." +msgstr "" +"Анотовані мітки, однак, зберігаються як повноцінні об'єкти в базі даних Git. " +"Вони мають контрольну суму, містять ім'я тегувальника, електронну пошту та " +"дату, мають повідомлення про тегування, а також можуть бути підписані та " +"перевірені за допомогою GBU Privacy Guard (GPG). Зазвичай рекомендується " +"створювати анотовані мітки, щоб мати всю цю інформацію; але якщо вам " +"потрібна тимчасова мітка або з якихось причин ви не хочете зберігати іншу " +"інформацію, доступні також полегшені мітки." + +#: ../../src/vcs/tagging.txt:52 +msgid "Annotated tags" +msgstr "Анотовані теги" + +#: ../../src/vcs/tagging.txt:53 +msgid "" +"Creating an annotated tag in Git is simple. The easiest way is to specify ``-" +"a`` when you run the ``tag`` command:" +msgstr "" +"Створити анотовану мітку в Git'і дуже просто. Найпростіший спосіб - вказати " +"``-a`` при виконанні команди ``tag``:" + +#: ../../src/vcs/tagging.txt:69 +msgid "Lightweight tags" +msgstr "Легкі мітки" + +#: ../../src/vcs/tagging.txt:70 +msgid "" +"Another way to tag commits is with a lightweight tag. this is basically the " +"commit checksum stored in a file -- no other information is kept. To create " +"a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` " +"options, just provide a tag name:" +msgstr "" +"Інший спосіб позначення коммітів - використання полегшених тегів. Це, по " +"суті, контрольна сума комміту, яка зберігається у файлі - ніяка інша " +"інформація не зберігається. Щоб створити полегшену мітку, не вказуйте жодної " +"з опцій ``-a``, ``-s`` або ``-m``, просто вкажіть назву мітки:" + +#: ../../src/vcs/tagging.txt:89 +msgid "Tagging later" +msgstr "Відмітити пізніше" + +#: ../../src/vcs/tagging.txt:90 +msgid "You can also tag commits after you're moved past them." +msgstr "Ви також можете позначати коміти після того, як ви пройшли повз них." + +#: ../../src/vcs/tagging.txt:107 +msgid "Deleting tags" +msgstr "Видалення тегів" + +#: ../../src/vcs/tagging.txt:109 +msgid "" +"To delete a tag on your local repository, you can use ``git tag -d " +"``." +msgstr "" +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " +"tag -d ``." + +#: ../../src/vcs/tagging.txt:117 +msgid "Checking out tags" +msgstr "Перевірка тегів" + +#: ../../src/vcs/tagging.txt:119 +msgid "" +"If you want to view the versions of files a tag is pointing to, you can do a " +"``git checkout`` of that tag, although this puts your repository in " +"\"detached HEAD\" state, which has some ill side effects:" +msgstr "" +"Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " +"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" + +#: ../../src/vcs/tagging.txt:145 +msgid "" +"In \"detached HEAD\" state, if you make changes and then create a commit, " +"the tag will stay the same, but your new commit won’t belong to any branch " +"and will be unreachable, except by the exact commit hash. Thus, if you need " +"to make changes -- say you’re fixing a bug on an older version, for instance " +"-- you will generally want to create a branch:" +msgstr "" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " +"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " +"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " +"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " +"як правило, краще створити гілку:" From 4ee4355d8d92b5287ea11288d898e80abb3e72d8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 20:48:40 +0300 Subject: [PATCH 205/689] Restore master doc translation file --- src/_locales/uk/LC_MESSAGES/index.po | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/index.po diff --git a/src/_locales/uk/LC_MESSAGES/index.po b/src/_locales/uk/LC_MESSAGES/index.po new file mode 100644 index 000000000..5303a5129 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/index.po @@ -0,0 +1,34 @@ +# PYTHON TRAINING COURSE TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/index.txt:21 +msgid "Additional materials" +msgstr "Додаткові матеріали" + +#: ../../src/index.txt:5 +msgid "PYTHON TRAINING COURSE" +msgstr "НАВЧАЛЬНИЙ КУРС PYTHON" + +#: ../../src/index.txt:35 +msgid "References" +msgstr "Посилання" From dcd8bcad4b10c79c021b68fee22d50cde89d3e59 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:19:26 +0300 Subject: [PATCH 206/689] Add functions definition and calling section --- src/basics/functions.txt | 56 +++++++++++++++++++++++++++++++++++----- src/refs.bib | 7 +++++ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 7c24b38cd..378d740c3 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -3,18 +3,62 @@ :author: Serhii Horodilov :keywords: python, basics, functions -.. attention:: Page is under construction - - .. figure:: /../assets/img/construction.svg - :figwidth: 250 - :align: center - ******************************************************************************* Functions ******************************************************************************* +You may be familiar with the mathematical concept of a **function**. It is +a relationship or mapping between one or more inputs and a set of outputs. + +.. math:: + + z = f(x, y) + +Here ``f`` is a function that operates on the inputs ``x`` and ``y``, and +its output is bind to ``z``. + +In programming a **function** is a self-contained block of code that +encapsulate a specific task or related group of tasks. + +You may be familiar with some built-in functions like ``max``, ``min``, ``len`` +etc. + .. todo: function definition +The usual syntax for defining a Python function is as follows: + +:: + + def ([]): + + ++---------------------+-------------------------------------------------------+ +| Component | Meaning | ++=====================+=======================================================+ +| ``def`` | The keyword that informs Python that a function is | +| | being defined | ++---------------------+-------------------------------------------------------+ +| ```` | A valid Python identifier that names the function | ++---------------------+-------------------------------------------------------+ +| ```` | An optional, comma-separated list of parameters that | +| | may be passed to the function | ++---------------------+-------------------------------------------------------+ +| ```` | A block of valid Python statements; | +| | **body** of the function | ++---------------------+-------------------------------------------------------+ + +The syntax for calling a Python function is as follows: + +:: + + ([]) + +The ```` are the values passed into the function. They correspond +to the ```` in the function definition. You can define a function +that doesn't take any arguments, but the parentheses are still required. Both +a function definition and a function call must always include parentheses, +even if they're empty. + .. todo: function arguments (positional and key-word) .. todo: default argument value diff --git a/src/refs.bib b/src/refs.bib index 4e4b61640..1dc49ad96 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -170,3 +170,10 @@ @book{progit url = {https://git-scm.com/book/en/v2}, note = {Online Version}, } + +@misc{realpython:user-func, + title = {Defining Your Own Python Function}, + author = {John Sturtz}, + date = {2020.3.9}, + url = {https://realpython.com/defining-your-own-python-function/}, +} From b1cf5343144c04a3a94f5b5dc6e3f13948b1982b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:41:24 +0300 Subject: [PATCH 207/689] Add positional arguments description --- src/basics/functions.txt | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 378d740c3..3e4580b10 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -59,6 +59,45 @@ that doesn't take any arguments, but the parentheses are still required. Both a function definition and a function call must always include parentheses, even if they're empty. +Argument passing +================ .. todo: function arguments (positional and key-word) +More often, you want to **pass data into a function**. + +Positional arguments +-------------------- + +.. note:: + + Because of the way they're defined and used, positional arguments are also + called *required arguments*. + +The most straightforward way to pass arguments to a function is with +**positional arguments**. +In the function definition, you specify a comma-separated list of parameters +inside the parentheses. +When the function is called, you specify a corresponding list of arguments. + +The parameters behave like **variables** that are defined locally to the +function. + +Although positional arguments are the most straightforward way to pass data to +a function, they also afford the least flexibility. For starters, the **order** +of the arguments in the call must match the order of the parameters in the +definition. + +There's nothing to stop you from specifying positional arguments out of order. +The function even may still run, but it's very unlikely to produce the correct +results. + +.. note:: + + It's responsibility of the programmer who defines the function to document + what the appropriate arguments should be, and it's the responsibility of + the user of the function to be aware of that information and abide by it. + +With positional arguments, the arguments in the call and the parameters in the +definition must agree not only in order, but in number as well. + .. todo: default argument value From 32906ac38f87dad1646eae9df2c62ea804818eea Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:55:31 +0300 Subject: [PATCH 208/689] Add keyword arguments description --- src/basics/functions.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 3e4580b10..b6b230a7c 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -100,4 +100,24 @@ results. With positional arguments, the arguments in the call and the parameters in the definition must agree not only in order, but in number as well. +Keyword arguments +----------------- + +When calling a function, you can specify arguments in the form +``=``. In that case, each ```` must match a parameter +in the function definition. Referencing a keyword that doesn't match any of +these declared parameters generates an exception. + +Using keyword arguments lifts the restriction on arguments order. Each keyword +argument explicitly designates a specific parameter by name, so you can specify +them in any order and Python will still know which argument goes with which +parameter. + +Like with positional arguments, though, the number of arguments and parameters +must still match. + +You can call a function using both positional and keyword arguments. +Once you've specified a keyword argument, there can't be any positional +arguments to the right of it. + .. todo: default argument value From 63ef0c35a05d70c10c6987d5f4dc7413435ff0ab Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:58:17 +0300 Subject: [PATCH 209/689] Add default values description --- src/basics/functions.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index b6b230a7c..89b262185 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -120,4 +120,10 @@ You can call a function using both positional and keyword arguments. Once you've specified a keyword argument, there can't be any positional arguments to the right of it. -.. todo: default argument value +Default values +-------------- + +If a parameter specified in the function definition has the form of +``==``, then ```` becomes a default value for that +parameter. Parameters defined this way are referred to as +**default or optional parameters**. From b8bf2b711c59332054e5bb0cf5364110cf0f9fb2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 20:13:36 +0300 Subject: [PATCH 210/689] Add mutable default values rubric --- src/basics/functions.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 89b262185..a108ed70a 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -127,3 +127,29 @@ If a parameter specified in the function definition has the form of ``==``, then ```` becomes a default value for that parameter. Parameters defined this way are referred to as **default or optional parameters**. + +.. rubric:: Mutable default parameter values + +Things can get weird if you specify a default parameter value that is +a mutable object. + +.. code-block:: python + + >>> def add_to_container(item, container = []): + ... container.append(item) + ... + >>> + >>> add_to_container(42, [1, 2, 3]) + [1, 2, 3, 42] + >>> add_to_container("foobar", ["foo", "bar"]) + ["foo", "bar", "foobar"] + >>> add_to_container(42) + [42] + >>> add_to_container("foobar") # ["foobar"] + [42, "foobar"] + +In Python default parameter values are **defined only once** when the function +is defined. The default value isn't re-defined each time the function is +called. For the example above, each time the ``add_to_container`` function is +called without passing ``container`` argument, the ``.append`` statement is +performed on the same list. From ba319569ee4ac8b29818f8472d4b6e157ced4213 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 21:19:34 +0300 Subject: [PATCH 211/689] Add mutable vs immutable arguments section --- src/basics/functions.txt | 113 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index a108ed70a..521b587a3 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -153,3 +153,116 @@ is defined. The default value isn't re-defined each time the function is called. For the example above, each time the ``add_to_container`` function is called without passing ``container`` argument, the ``.append`` statement is performed on the same list. + +Mutable and immutable arguments +------------------------------- + +.. note:: + + Roughly, you may consider immutable object as passed-by-value, + and mutable objects as passed-by-reference. + However, that's not actual true. + +In programming language design, there are two common paradigms for passing an +argument to a function: + +- **pass-by-value** means a copy of the argument is passed to the function. +- **pass-by-reference** means a reference to the argument is passed to + the function. + +Are parameters in Python pass-by-value or pass-by-reference? They're neither, +exactly. That's because a reference doesn't mean quite the same thing in +Python as it does in C-like languages. + +Recall that in Python, every piece of data is an **object**. A reference points +to an object, not a specific memory location. + +Take a look on the code below: + +.. code-block:: python + :linenos: + + value = 24 + value = 42 + +These assignment statements have the following meaning: + +- **Line 1** cause ``value`` to point to an object whose value is ``24``. +- **Line 2** reassign ``value`` as a new reference to a different object + whose value is ``42``. + +In Python, when you pass an argument to a function, a similar *rebinding* +occurs. + +.. code-block:: python + :linenos: + + def reassign(fx: int) -> None: + fx = 10 + + + x = 5 + reassign(x) + +In the main program, the statement ``x = 5`` on line 5 creates a reference +named ``x`` bound to an object whose value is ``5``. +``reassign`` is then called on line 6 with ``x`` as its argument. +When a function first starts, a new reference called ``fx`` is created, which +initially points to the same ``5`` object. However, when the statement +``fx = 10`` on line 2 is executed, ``reassign`` rebinds ``fx`` to a new +object whose value is ``10``. From now, the two references ``x`` and ``fx`` are +uncoupled one from another. Nothing else that function does will affect ``x``, +and when function terminates, ``x`` will still point to the object ``5``, as it +did prior to the function call. + +You can confirm all this using ``id()``. Here's a slightly augmented version of +the code above: + +.. code-block:: python + :linenos: + + def reassign(fx: int) -> None: + print(f"{fx = }, {id(fx) = }") + fx = 10 + print(f"{fx = }, {id(fx) = }") + + + x = 5 + print(f"{x = }, {id(x) = }") + reassign(x) + print(f"{x = }, {id(x) = }") + +The outputs will look like: + +:: + + x = 5, id(x) = 140706772804520 + fx = 5, id(fx) = 140706772804520 + fx = 42, id(fx) = 140706772805704 + x = 5, id(x) = 140706772804520 + +.. note:: + + Python's argument-passing mechanism has been called **pass-by-assignment**. + You may also see terms pass-by-object, pass-by-object-reference, or + pass-by-sharing. This is because parameter names are bound to objects on + function entry in Python, and assignment is also the process of binding + a name to an object. + +The key takeaway here is that Python function can't change the value of an +argument by reassigning the corresponding parameter to something else. + +However, functions can use references to make modifications inside of a mutable +objects. + +.. code-block:: python + :linenos: + + >>> def insert_into_container(item, container, idx = 0): + ... container.insert(idx, item) + ... + >>> + >>> numbers = [1, 2, 3] + >>> insert_into_container(42, numbers) + >>> numbers + [42, 1, 2, 3] From edfa96af1c80ae22190bf552f2eb7fa96d6cd17d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 21:33:57 +0300 Subject: [PATCH 212/689] Add return statement section (draft) --- src/basics/functions.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 521b587a3..029bef3af 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -266,3 +266,15 @@ objects. >>> insert_into_container(42, numbers) >>> numbers [42, 1, 2, 3] + +The return statement +==================== + +It serves two purposes: + +- It immediately terminates the function and passes execution control back + to the caller. +- It provides a mechanism by which the function can pass data back + to the caller. + +.. todo: complete the return statement section From 0ad40371c8be4979b78281c38f88c2342d3ad85a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 21:58:20 +0300 Subject: [PATCH 213/689] Add argument tuple packing/unpacking section --- src/basics/functions.txt | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 029bef3af..04063c378 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -278,3 +278,81 @@ It serves two purposes: to the caller. .. todo: complete the return statement section + +Variable-length argument list +============================= + +In some cases, when you're defining a function, you may not know beforehand how +many arguments you'll want it to take. + +For example, a function that computes an average of several values may look +something like this: + +.. code-block:: python + + def avg(a, b, c): + return (a + b + c) / 3 + +However, as you're already seen, when positional arguments are used, the number +of arguments passed must match the number of parameters declared. + +Argument tuple packing +---------------------- + +When a parameter name in a function definition is preceded by an asterisk (\*), +it indicates **argument tuple packing**. Any corresponding arguments in +a function call are packed into a tuple that the function can refer to by +the given parameter name. + +.. code-block:: python + + def avg(*args): + return sum(args) / len(args) + +Any name can be used, but *args* is so commonly chosen that it's practically +a standard. + +Argument tuple unpacking +------------------------ + +An analogous operation is available on the other side of the equation in +a function call. When an argument in a function call is preceded by an asterisk, +it indicates that the argument is a tuple that should be **unpacked** and +passed to the function as separate values. + +.. code-block:: python + + def demo_args_unpacking(a, b, c): + print(f"{a = }, {b = }, {c = }") + + + args = 10, 20, 30 + demo_args_unpacking(*args) + +.. note:: + + Although this type of unpacking is called **tuple** unpacking, it doesn't + only work with tuples. The asterisk can be applied to any iterable in + a function call. + + .. code-block:: python + + arguments_list = [10, 20, 30] + demo_args_unpacking(*arguments_list) + arguments_set = {10, 20, 30} + demo_args_unpacking(*arguments_set) + arguments_str = "ABC" + demo_args_unpacking(*arguments_str) + +.. note:: + + You can even do tuple packing and unpacking at the same time. + + .. code-block:: python + + def avg(*args) -> float: + return sum(args) / len(args) + + + numbers = 10, 20, 30 + average = avg(*numbers) From c89aea468c6797e9540b63c7546ae82caede09a5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 22:15:35 +0300 Subject: [PATCH 214/689] Add argument dictionary packing/unpacking section --- src/basics/functions.txt | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 04063c378..f55b3f29b 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -356,3 +356,45 @@ passed to the function as separate values. numbers = 10, 20, 30 average = avg(*numbers) + +Argument dictionary packing +--------------------------- + +Python has a similar operator, the double asterisk (\*\*), which can be used +with function parameters to specify **dictionary packing**. Preceding parameter +in a function definition be a double asterisk indicates that the corresponding +arguments, which are expected to be keyword arguments (``key=value`` pairs), +should be packed into a dictionary. + +.. code-block:: python + + def display_person(first_name: str, last_name: str, **kwargs) -> None: + print(f"{first_name.title()} {last_name.title()}") + for key, value in kwargs.items(): + print(f"{key}:\t{value}") + + + display_person("serhii", "horodilov", school="A-Level", course="Python") + +Again, any name can be used, but the peculiar *kwargs* (which is short for +*keyword args*) is nearly standard. + +Argument dictionary unpacking +----------------------------- + +This is analogous to argument tuple unpacking. +When the double asterisk precedes an argument in a function call, it specifies +that the argument is a dictionary that should be unpacked, with the resulting +items passed to the function as keyword arguments. + +.. code-block:: python + + person_data = { + "first_name": "Serhii", + "last_name": "Horodilov", + "school": "A-Level", + "course": "Python", + "school_occupation": "teacher/mentor", + "job_title": "Software Engineer", + } + display_person(**person_data) From 32a0efe4a09771524e6033a408351c3920e71fc3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 22:19:15 +0300 Subject: [PATCH 215/689] Add pre-translation for functions chapter --- .../uk/LC_MESSAGES/basics/functions.po | 650 +++++++++++++++++- 1 file changed, 643 insertions(+), 7 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index 61e7878af..e72f80b5b 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"POT-Creation-Date: 2023-10-23 22:17+0300\n" +"PO-Revision-Date: 2023-10-23 22:18+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -31,10 +31,646 @@ msgstr "Serhii Horodilov" msgid "python, basics, functions" msgstr "python, basics, functions" -#: ../../src/basics/functions.txt:6 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/basics/functions.txt:14 +#: ../../src/basics/functions.txt:8 msgid "Functions" msgstr "Функції" + +#: ../../src/basics/functions.txt:10 +#, fuzzy +msgid "" +"You may be familiar with the mathematical concept of a **function**. It is a " +"relationship or mapping between one or more inputs and a set of outputs." +msgstr "" +"Можливо, ви знайомі з математичним поняттям **функція**. Це відношення або " +"відображення між одним або декількома входами та набором виходів." + +#: ../../src/basics/functions.txt:13 +#, fuzzy +msgid "z = f(x, y)" +msgstr "z = f(x, y)" + +#: ../../src/basics/functions.txt:17 +#, fuzzy +msgid "" +"Here ``f`` is a function that operates on the inputs ``x`` and ``y``, and " +"its output is bind to ``z``." +msgstr "" +"Тут ``f`` - це функція, яка оперує входами ``x`` та ``y``, а її вихід " +"прив'язаний до ``z``." + +#: ../../src/basics/functions.txt:20 +#, fuzzy +msgid "" +"In programming a **function** is a self-contained block of code that " +"encapsulate a specific task or related group of tasks." +msgstr "" +"У програмуванні **функція** - це автономний блок коду, який інкапсулює певну " +"задачу або пов'язану групу задач." + +#: ../../src/basics/functions.txt:23 +#, fuzzy +msgid "" +"You may be familiar with some built-in functions like ``max``, ``min``, " +"``len`` etc." +msgstr "" +"Ви можете бути знайомі з деякими вбудованими функціями, такими як ``max``, " +"``min``, ``len`` тощо." + +#: ../../src/basics/functions.txt:28 +#, fuzzy +msgid "The usual syntax for defining a Python function is as follows:" +msgstr "Звичайний синтаксис для визначення функції Python наступний:" + +#: ../../src/basics/functions.txt:36 +#, fuzzy +msgid "Component" +msgstr "Компонент" + +#: ../../src/basics/functions.txt:36 +#, fuzzy +msgid "Meaning" +msgstr "Значення" + +#: ../../src/basics/functions.txt:38 +#, fuzzy +msgid "``def``" +msgstr "``def``" + +#: ../../src/basics/functions.txt:38 +#, fuzzy +msgid "The keyword that informs Python that a function is being defined" +msgstr "Ключове слово, яке інформує Python про те, що функція визначається" + +#: ../../src/basics/functions.txt:41 +#, fuzzy +msgid "````" +msgstr "``<ім'я_функції>``" + +#: ../../src/basics/functions.txt:41 +#, fuzzy +msgid "A valid Python identifier that names the function" +msgstr "Правильний ідентифікатор Python, який називає функцію" + +#: ../../src/basics/functions.txt:43 +#, fuzzy +msgid "````" +msgstr "Параметри" + +#: ../../src/basics/functions.txt:43 +#, fuzzy +msgid "" +"An optional, comma-separated list of parameters that may be passed to the " +"function" +msgstr "" +"Необов'язковий список параметрів через кому, які можуть бути передані у " +"функцію" + +#: ../../src/basics/functions.txt:46 +#, fuzzy +msgid "````" +msgstr "''<висловлювання>''" + +#: ../../src/basics/functions.txt:46 +#, fuzzy +msgid "A block of valid Python statements; **body** of the function" +msgstr "Блок допустимих операторів Python; **тіло** функції" + +#: ../../src/basics/functions.txt:50 +#, fuzzy +msgid "The syntax for calling a Python function is as follows:" +msgstr "Синтаксис виклику функції Python наступний:" + +#: ../../src/basics/functions.txt:56 +#, fuzzy +msgid "" +"The ```` are the values passed into the function. They correspond " +"to the ```` in the function definition. You can define a " +"function that doesn't take any arguments, but the parentheses are still " +"required. Both a function definition and a function call must always include " +"parentheses, even if they're empty." +msgstr "" +"Значення ```` - це значення, що передаються у функцію. Вони " +"відповідають ```` у визначенні функції. Ви можете визначити " +"функцію, яка не приймає жодних аргументів, але дужки все одно є " +"обов'язковими. І визначення функції, і її виклик завжди повинні містити " +"дужки, навіть якщо вони порожні." + +#: ../../src/basics/functions.txt:63 +#, fuzzy +msgid "Argument passing" +msgstr "Передача аргументу" + +#: ../../src/basics/functions.txt:66 +#, fuzzy +msgid "More often, you want to **pass data into a function**." +msgstr "Найчастіше вам потрібно **передати дані у функцію**." + +#: ../../src/basics/functions.txt:69 +#, fuzzy +msgid "Positional arguments" +msgstr "Позиційні аргументи" + +#: ../../src/basics/functions.txt:73 +#, fuzzy +msgid "" +"Because of the way they're defined and used, positional arguments are also " +"called *required arguments*." +msgstr "" +"Через те, як вони визначаються і використовуються, позиційні аргументи також " +"називають *обов'язковими аргументами*." + +#: ../../src/basics/functions.txt:76 +#, fuzzy +msgid "" +"The most straightforward way to pass arguments to a function is with " +"**positional arguments**. In the function definition, you specify a comma-" +"separated list of parameters inside the parentheses. When the function is " +"called, you specify a corresponding list of arguments." +msgstr "" +"Найпростіший спосіб передачі аргументів у функцію - за допомогою " +"**позиційних аргументів**. У визначенні функції ви вказуєте список " +"параметрів, розділених комами, всередині круглих дужок. Коли функція " +"викликається, ви вказуєте відповідний список аргументів." + +#: ../../src/basics/functions.txt:82 +#, fuzzy +msgid "" +"The parameters behave like **variables** that are defined locally to the " +"function." +msgstr "Параметри поводяться як **змінні**, визначені локально у функції." + +#: ../../src/basics/functions.txt:85 +#, fuzzy +msgid "" +"Although positional arguments are the most straightforward way to pass data " +"to a function, they also afford the least flexibility. For starters, the " +"**order** of the arguments in the call must match the order of the " +"parameters in the definition." +msgstr "" +"Хоча позиційні аргументи є найпростішим способом передачі даних у функцію, " +"вони також забезпечують найменшу гнучкість. Для початку, **порядок** " +"аргументів у виклику повинен відповідати порядку параметрів у визначенні." + +#: ../../src/basics/functions.txt:90 +#, fuzzy +msgid "" +"There's nothing to stop you from specifying positional arguments out of " +"order. The function even may still run, but it's very unlikely to produce " +"the correct results." +msgstr "" +"Ніщо не заважає вам вказати позиційні аргументи в неправильному порядку. " +"Функція навіть може запуститися, але навряд чи видасть правильні результати." + +#: ../../src/basics/functions.txt:96 +#, fuzzy +msgid "" +"It's responsibility of the programmer who defines the function to document " +"what the appropriate arguments should be, and it's the responsibility of the " +"user of the function to be aware of that information and abide by it." +msgstr "" +"Програміст, який визначає функцію, зобов'язаний задокументувати, якими мають " +"бути відповідні аргументи, а користувач функції зобов'язаний знати цю " +"інформацію і дотримуватися її." + +#: ../../src/basics/functions.txt:100 +#, fuzzy +msgid "" +"With positional arguments, the arguments in the call and the parameters in " +"the definition must agree not only in order, but in number as well." +msgstr "" +"З позиційними аргументами аргументи у виклику та параметри у визначенні " +"повинні узгоджуватися не тільки за порядком, але й за кількістю." + +#: ../../src/basics/functions.txt:104 +#, fuzzy +msgid "Keyword arguments" +msgstr "Аргументи за ключовими словами" + +#: ../../src/basics/functions.txt:106 +#, fuzzy +msgid "" +"When calling a function, you can specify arguments in the form " +"``=``. In that case, each ```` must match a " +"parameter in the function definition. Referencing a keyword that doesn't " +"match any of these declared parameters generates an exception." +msgstr "" +"При виклику функції можна вказувати аргументи у вигляді " +"``=``. У цьому випадку кожен ```` повинен " +"відповідати параметру у визначенні функції. Звернення до ключового слова, " +"яке не відповідає жодному з цих оголошених параметрів, генерує виключення." + +#: ../../src/basics/functions.txt:111 +#, fuzzy +msgid "" +"Using keyword arguments lifts the restriction on arguments order. Each " +"keyword argument explicitly designates a specific parameter by name, so you " +"can specify them in any order and Python will still know which argument goes " +"with which parameter." +msgstr "" +"Використання аргументів з ключовими словами знімає обмеження на порядок " +"аргументів. Кожне ключове слово-аргумент явно вказує на конкретний параметр " +"за назвою, тому ви можете вказати їх у довільному порядку, і Python все одно " +"знатиме, який аргумент йде з яким параметром." + +#: ../../src/basics/functions.txt:116 +#, fuzzy +msgid "" +"Like with positional arguments, though, the number of arguments and " +"parameters must still match." +msgstr "" +"Як і у випадку з позиційними аргументами, кількість аргументів і параметрів " +"має збігатися." + +#: ../../src/basics/functions.txt:119 +#, fuzzy +msgid "" +"You can call a function using both positional and keyword arguments. Once " +"you've specified a keyword argument, there can't be any positional arguments " +"to the right of it." +msgstr "" +"Ви можете викликати функцію, використовуючи як позиційні, так і ключові " +"аргументи. Після того, як ви вказали ключове слово, праворуч від нього не " +"може бути жодних позиційних аргументів." + +#: ../../src/basics/functions.txt:124 +#, fuzzy +msgid "Default values" +msgstr "Значення за замовчуванням" + +#: ../../src/basics/functions.txt:126 +#, fuzzy +msgid "" +"If a parameter specified in the function definition has the form of " +"``==``, then ```` becomes a default value for that " +"parameter. Parameters defined this way are referred to as **default or " +"optional parameters**." +msgstr "" +"Якщо параметр, вказаний у визначенні функції, має вигляд " +"``==``, то значенням за замовчуванням для цього параметра стає " +"````. Параметри, визначені таким чином, називаються **параметрами за " +"замовчуванням або необов'язковими параметрами**." + +#: ../../src/basics/functions.txt:132 +#, fuzzy +msgid "Mutable default parameter values" +msgstr "Змінювані значення параметрів за замовчуванням" + +#: ../../src/basics/functions.txt:133 +#, fuzzy +msgid "" +"Things can get weird if you specify a default parameter value that is a " +"mutable object." +msgstr "" +"Ситуація може ускладнитися, якщо ви вкажете значення параметра за " +"замовчуванням, який є змінюваним об'єктом." + +#: ../../src/basics/functions.txt:151 +#, fuzzy +msgid "" +"In Python default parameter values are **defined only once** when the " +"function is defined. The default value isn't re-defined each time the " +"function is called. For the example above, each time the " +"``add_to_container`` function is called without passing ``container`` " +"argument, the ``.append`` statement is performed on the same list." +msgstr "" +"У Python значення параметрів за замовчуванням **визначаються лише один раз** " +"під час визначення функції. Значення за замовчуванням не перевизначається " +"при кожному виклику функції. У наведеному вище прикладі кожного разу, коли " +"функція ``add_to_container`` викликається без передачі аргументу " +"``container``, оператор ``.append`` виконується над тим самим списком." + +#: ../../src/basics/functions.txt:158 +#, fuzzy +msgid "Mutable and immutable arguments" +msgstr "Змінні та незмінні аргументи" + +#: ../../src/basics/functions.txt:162 +#, fuzzy +msgid "" +"Roughly, you may consider immutable object as passed-by-value, and mutable " +"objects as passed-by-reference. However, that's not actual true." +msgstr "" +"Грубо кажучи, ви можете вважати незмінний об'єкт переданим значенням, а " +"змінювані об'єкти - переданим посиланням. Однак, це не зовсім так." + +#: ../../src/basics/functions.txt:166 +#, fuzzy +msgid "" +"In programming language design, there are two common paradigms for passing " +"an argument to a function:" +msgstr "" +"У мові програмування існує дві поширені парадигми передачі аргументу у " +"функцію:" + +#: ../../src/basics/functions.txt:169 +#, fuzzy +msgid "" +"**pass-by-value** means a copy of the argument is passed to the function." +msgstr "" +"**передати за значенням** означає, що у функцію передається копія аргументу." + +#: ../../src/basics/functions.txt:170 +#, fuzzy +msgid "" +"**pass-by-reference** means a reference to the argument is passed to the " +"function." +msgstr "" +"**передача за посиланням** означає, що у функцію передається посилання на " +"аргумент." + +#: ../../src/basics/functions.txt:173 +#, fuzzy +msgid "" +"Are parameters in Python pass-by-value or pass-by-reference? They're " +"neither, exactly. That's because a reference doesn't mean quite the same " +"thing in Python as it does in C-like languages." +msgstr "" +"Чи є параметри в Python передачею за значенням або за посиланням? Вони не є " +"ні тими, ні іншими. Це тому, що посилання в Python означає не зовсім те " +"саме, що в C-подібних мовах." + +#: ../../src/basics/functions.txt:177 +#, fuzzy +msgid "" +"Recall that in Python, every piece of data is an **object**. A reference " +"points to an object, not a specific memory location." +msgstr "" +"Нагадаємо, що у Python кожен фрагмент даних є **об'єктом**. Посилання вказує " +"на об'єкт, а не на конкретну ділянку пам'яті." + +#: ../../src/basics/functions.txt:180 +#, fuzzy +msgid "Take a look on the code below:" +msgstr "Погляньте на код нижче:" + +#: ../../src/basics/functions.txt:188 +#, fuzzy +msgid "These assignment statements have the following meaning:" +msgstr "Ці оператори присвоювання мають наступне значення:" + +#: ../../src/basics/functions.txt:190 +#, fuzzy +msgid "**Line 1** cause ``value`` to point to an object whose value is ``24``." +msgstr "" +"**Рядок 1** призводить до того, що ``value`` вказує на об'єкт, значенням " +"якого є ``24``." + +#: ../../src/basics/functions.txt:191 +#, fuzzy +msgid "" +"**Line 2** reassign ``value`` as a new reference to a different object whose " +"value is ``42``." +msgstr "" +"**Рядок 2** перепризначити ``value`` як нове посилання на інший об'єкт, " +"значенням якого є ``42``." + +#: ../../src/basics/functions.txt:194 +#, fuzzy +msgid "" +"In Python, when you pass an argument to a function, a similar *rebinding* " +"occurs." +msgstr "" +"У Python, коли ви передаєте аргумент у функцію, відбувається аналогічне " +"*переприв'язування*." + +#: ../../src/basics/functions.txt:207 +#, fuzzy +msgid "" +"In the main program, the statement ``x = 5`` on line 5 creates a reference " +"named ``x`` bound to an object whose value is ``5``. ``reassign`` is then " +"called on line 6 with ``x`` as its argument. When a function first starts, a " +"new reference called ``fx`` is created, which initially points to the same " +"``5`` object. However, when the statement ``fx = 10`` on line 2 is executed, " +"``reassign`` rebinds ``fx`` to a new object whose value is ``10``. From now, " +"the two references ``x`` and ``fx`` are uncoupled one from another. Nothing " +"else that function does will affect ``x``, and when function terminates, " +"``x`` will still point to the object ``5``, as it did prior to the function " +"call." +msgstr "" +"В основній програмі оператор ``x = 5`` у рядку 5 створює посилання з іменем " +"``x``, пов'язане з об'єктом, значенням якого є ``5``. потім у рядку 6 " +"викликається функція ``reassign`` з ``x`` як аргументом. При першому запуску " +"функції створюється нове посилання ``fx``, яке спочатку вказує на той самий " +"об'єкт ``5``. Однак, коли виконується оператор ``fx = 10`` у рядку 2, " +"``reassign`` перепризначає ``fx`` на новий об'єкт, значенням якого є ``10``. " +"Відтепер два посилання ``x`` і ``fx`` від'єднано одне від одного. Ніякі інші " +"дії функції не вплинуть на ``x``, і коли функція завершиться, ``x`` все ще " +"вказуватиме на об'єкт ``5``, як це було до виклику функції." + +#: ../../src/basics/functions.txt:218 +#, fuzzy +msgid "" +"You can confirm all this using ``id()``. Here's a slightly augmented version " +"of the code above:" +msgstr "" +"Ви можете підтвердити все це за допомогою ``id()``. Ось дещо доповнена " +"версія коду вище:" + +#: ../../src/basics/functions.txt:235 +#, fuzzy +msgid "The outputs will look like:" +msgstr "Результати будуть виглядати так:" + +#: ../../src/basics/functions.txt:246 +#, fuzzy +msgid "" +"Python's argument-passing mechanism has been called **pass-by-assignment**. " +"You may also see terms pass-by-object, pass-by-object-reference, or pass-by-" +"sharing. This is because parameter names are bound to objects on function " +"entry in Python, and assignment is also the process of binding a name to an " +"object." +msgstr "" +"Механізм передачі аргументів у Python називається **передача за " +"присвоєнням**. Ви також можете зустріти терміни pass-by-object, pass-by-" +"object-reference або pass-by-sharing. Це пов'язано з тим, що імена " +"параметрів прив'язуються до об'єктів під час виклику функції у Python, а " +"присвоювання - це також процес прив'язки імені до об'єкта." + +#: ../../src/basics/functions.txt:252 +#, fuzzy +msgid "" +"The key takeaway here is that Python function can't change the value of an " +"argument by reassigning the corresponding parameter to something else." +msgstr "" +"Ключовим моментом тут є те, що функція Python не може змінити значення " +"аргументу, перепризначивши відповідний параметр на щось інше." + +#: ../../src/basics/functions.txt:255 +#, fuzzy +msgid "" +"However, functions can use references to make modifications inside of a " +"mutable objects." +msgstr "" +"Однак, функції можуть використовувати посилання для модифікацій всередині " +"змінюваних об'єктів." + +#: ../../src/basics/functions.txt:271 +#, fuzzy +msgid "The return statement" +msgstr "Оператор повернення" + +#: ../../src/basics/functions.txt:273 +#, fuzzy +msgid "It serves two purposes:" +msgstr "Він служить двом цілям:" + +#: ../../src/basics/functions.txt:275 +#, fuzzy +msgid "" +"It immediately terminates the function and passes execution control back to " +"the caller." +msgstr "" +"Він негайно завершує функцію і передає керування виконанням назад тому, хто " +"її викликав." + +#: ../../src/basics/functions.txt:277 +#, fuzzy +msgid "" +"It provides a mechanism by which the function can pass data back to the " +"caller." +msgstr "" +"Він надає механізм, за допомогою якого функція може передавати дані назад " +"тому, хто її викликає." + +#: ../../src/basics/functions.txt:283 +#, fuzzy +msgid "Variable-length argument list" +msgstr "Список аргументів змінної довжини" + +#: ../../src/basics/functions.txt:285 +#, fuzzy +msgid "" +"In some cases, when you're defining a function, you may not know beforehand " +"how many arguments you'll want it to take." +msgstr "" +"У деяких випадках, коли ви визначаєте функцію, ви можете не знати " +"заздалегідь, скільки аргументів ви хочете, щоб вона приймала." + +#: ../../src/basics/functions.txt:288 +#, fuzzy +msgid "" +"For example, a function that computes an average of several values may look " +"something like this:" +msgstr "" +"Наприклад, функція, яка обчислює середнє арифметичне декількох значень, може " +"виглядати приблизно так:" + +#: ../../src/basics/functions.txt:296 +#, fuzzy +msgid "" +"However, as you're already seen, when positional arguments are used, the " +"number of arguments passed must match the number of parameters declared." +msgstr "" +"Однак, як ви вже бачили, коли використовуються позиційні аргументи, " +"кількість переданих аргументів повинна відповідати кількості оголошених " +"параметрів." + +#: ../../src/basics/functions.txt:300 +#, fuzzy +msgid "Argument tuple packing" +msgstr "Пакування кортежів аргументів" + +#: ../../src/basics/functions.txt:302 +#, fuzzy +msgid "" +"When a parameter name in a function definition is preceded by an asterisk " +"(\\*), it indicates **argument tuple packing**. Any corresponding arguments " +"in a function call are packed into a tuple that the function can refer to by " +"the given parameter name." +msgstr "" +"Коли імені параметра у визначенні функції передує зірочка (\\*), це означає " +"**упакування кортежу аргументів**. Будь-які відповідні аргументи у виклику " +"функції упаковуються у кортеж, на який функція може посилатися за вказаним " +"іменем параметра." + +#: ../../src/basics/functions.txt:312 +#, fuzzy +msgid "" +"Any name can be used, but *args* is so commonly chosen that it's practically " +"a standard." +msgstr "" +"Можна використовувати будь-яке ім'я, але *args* є настільки поширеним, що " +"стало практично стандартом." + +#: ../../src/basics/functions.txt:316 +#, fuzzy +msgid "Argument tuple unpacking" +msgstr "Розпакування кортежу аргументів" + +#: ../../src/basics/functions.txt:318 +#, fuzzy +msgid "" +"An analogous operation is available on the other side of the equation in a " +"function call. When an argument in a function call is preceded by an " +"asterisk, it indicates that the argument is a tuple that should be " +"**unpacked** and passed to the function as separate values." +msgstr "" +"Аналогічна операція доступна з іншого боку рівняння у виклику функції. Якщо " +"перед аргументом у виклику функції стоїть зірочка, це означає, що аргумент є " +"кортежем, який слід **розпакувати** і передати у функцію як окремі значення." + +#: ../../src/basics/functions.txt:334 +#, fuzzy +msgid "" +"Although this type of unpacking is called **tuple** unpacking, it doesn't " +"only work with tuples. The asterisk can be applied to any iterable in a " +"function call." +msgstr "" +"Хоча цей тип розпакування називається **розпакуванням кортежів**, він працює " +"не лише з кортежами. Зірочка може бути застосована до будь-якого ітератора у " +"виклику функції." + +#: ../../src/basics/functions.txt:349 +#, fuzzy +msgid "You can even do tuple packing and unpacking at the same time." +msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." + +#: ../../src/basics/functions.txt:361 +#, fuzzy +msgid "Argument dictionary packing" +msgstr "Пакування словника аргументів" + +#: ../../src/basics/functions.txt:363 +#, fuzzy +msgid "" +"Python has a similar operator, the double asterisk (\\*\\*), which can be " +"used with function parameters to specify **dictionary packing**. Preceding " +"parameter in a function definition be a double asterisk indicates that the " +"corresponding arguments, which are expected to be keyword arguments " +"(``key=value`` pairs), should be packed into a dictionary." +msgstr "" +"У мові Python є подібний оператор, подвійна зірочка (\\*\\*), який можна " +"використовувати з параметрами функції для вказівки **пакування словників**. " +"Передування параметру у визначенні функції подвійною зірочкою вказує на те, " +"що відповідні аргументи, які, як очікується, є аргументами ключових слів " +"(пари ``ключ=значення``), мають бути упаковані у словник." + +#: ../../src/basics/functions.txt:379 +#, fuzzy +msgid "" +"Again, any name can be used, but the peculiar *kwargs* (which is short for " +"*keyword args*) is nearly standard." +msgstr "" +"Знову ж таки, можна використовувати будь-яке ім'я, але особливе *kwargs* (що " +"є скороченням від *ключове слово args*) є майже стандартним." + +#: ../../src/basics/functions.txt:383 +#, fuzzy +msgid "Argument dictionary unpacking" +msgstr "Розпакування словника аргументів" + +#: ../../src/basics/functions.txt:385 +#, fuzzy +msgid "" +"This is analogous to argument tuple unpacking. When the double asterisk " +"precedes an argument in a function call, it specifies that the argument is a " +"dictionary that should be unpacked, with the resulting items passed to the " +"function as keyword arguments." +msgstr "" +"Це аналогічно розпакуванню кортежу аргументів. Коли подвійна зірочка стоїть " +"перед аргументом у виклику функції, вона вказує на те, що аргумент є " +"словником, який слід розпакувати, а отримані елементи передати у функцію як " +"аргументи ключових слів." + +#~ msgid "Page is under construction" +#~ msgstr "Сторінка в розробці" From 39ea0cc920b32980feaead86cb99ae12aca238ba Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 23:36:22 +0300 Subject: [PATCH 216/689] Complete return statement section --- .../uk/LC_MESSAGES/basics/functions.po | 130 +++++++++++++++--- src/basics/functions.txt | 67 ++++++++- 2 files changed, 178 insertions(+), 19 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index e72f80b5b..dbd22af0e 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-23 22:17+0300\n" -"PO-Revision-Date: 2023-10-23 22:18+0300\n" +"POT-Creation-Date: 2023-10-23 23:35+0300\n" +"PO-Revision-Date: 2023-10-23 23:36+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -532,12 +532,106 @@ msgstr "" "Він надає механізм, за допомогою якого функція може передавати дані назад " "тому, хто її викликає." -#: ../../src/basics/functions.txt:283 +#: ../../src/basics/functions.txt:280 +#, fuzzy +msgid "" +"The return statement can be used inside of a function or a method to send " +"the result back to the caller. It consists of the ``return`` Python keyword " +"and an optional return value." +msgstr "" +"Оператор return можна використовувати всередині функції або методу, щоб " +"відправити результат назад тому, хто його викликає. Він складається з " +"ключового слова return та необов'язкового значення, що повертається." + +#: ../../src/basics/functions.txt:284 +#, fuzzy +msgid "" +"The return value of a Python function can be any Python object (and you " +"should remember - everything in Python is an object)." +msgstr "" +"Значенням, що повертається функцією Python, може бути будь-який об'єкт " +"Python (і ви повинні пам'ятати - все в Python є об'єктом)." + +#: ../../src/basics/functions.txt:287 +#, fuzzy +msgid "" +"You can omit the return value and use bare ``return`` without a return " +"value. You can also omit the entire ``return`` statement. In both cases, the " +"return value will be ``None``. So, Python functions always have the return " +"value; in case it hasn't been specified - it's ``None``." +msgstr "" +"Ви можете опустити значення, що повертається, і використовувати просто " +"``return`` без значення, що повертається. Ви також можете опустити всю " +"інструкцію ``return``. В обох випадках значенням, що повертається, буде " +"``None``. Отже, функції Python завжди мають значення, що повертається, а " +"якщо його не вказано - це ``None``." + +#: ../../src/basics/functions.txt:292 +#, fuzzy +msgid "**Returning vs Printing**" +msgstr "**Повернення проти друку**" + +#: ../../src/basics/functions.txt:294 +#, fuzzy +msgid "" +"If you're working in an interactive session, then you might think that " +"printing a value and returning a value are equivalent. Consider the " +"following two functions:" +msgstr "" +"Якщо ви працюєте в інтерактивному сеансі, ви можете подумати, що виведення " +"значення і повернення значення еквівалентні. Розглянемо дві наступні функції:" + +#: ../../src/basics/functions.txt:310 +#, fuzzy +msgid "And their output:" +msgstr "Опис Результатів" + +#: ../../src/basics/functions.txt:319 +#, fuzzy +msgid "" +"Both functions seems to do the same thing. But only the second one function " +"actually returns a value, when the first one returns nothing (or **NoneType " +"object**)." +msgstr "" +"Здається, що обидві функції роблять одне й те саме. Але тільки друга функція " +"насправді повертає значення, тоді як перша не повертає нічого (або " +"**NoneType об'єкт**)." + +#: ../../src/basics/functions.txt:324 +#, fuzzy +msgid "Return multiple values" +msgstr "Значення за замовчуванням" + +#: ../../src/basics/functions.txt:326 +#, fuzzy +msgid "" +"You can use a return statement to return multiple values from a function. To " +"do that, you just need to supply several return values separated by commas. " +"The function will return a tuple of values." +msgstr "" +"Ви можете використовувати інструкцію return для повернення декількох значень " +"з функції. Для цього вам просто потрібно вказати декілька значень, що " +"повертаються, розділених комами. Функція поверне кортеж значень." + +#: ../../src/basics/functions.txt:342 +#, fuzzy +msgid "" +"The built-in ``divmod`` function is also an example of a function that " +"returns multiple values. The function takes two (non-complex) numbers as " +"arguments and returns two numbers, the quotient of the two input values and " +"the remainder of the division." +msgstr "" +"Вбудована функція ``divmod`` також є прикладом функції, яка повертає " +"декілька значень. Функція отримує два (нескладних) числа як аргументи і " +"повертає два числа - частку від ділення двох вхідних значень і залишок від " +"ділення." + +#: ../../src/basics/functions.txt:348 #, fuzzy msgid "Variable-length argument list" msgstr "Список аргументів змінної довжини" -#: ../../src/basics/functions.txt:285 +#: ../../src/basics/functions.txt:350 #, fuzzy msgid "" "In some cases, when you're defining a function, you may not know beforehand " @@ -546,7 +640,7 @@ msgstr "" "У деяких випадках, коли ви визначаєте функцію, ви можете не знати " "заздалегідь, скільки аргументів ви хочете, щоб вона приймала." -#: ../../src/basics/functions.txt:288 +#: ../../src/basics/functions.txt:353 #, fuzzy msgid "" "For example, a function that computes an average of several values may look " @@ -555,7 +649,7 @@ msgstr "" "Наприклад, функція, яка обчислює середнє арифметичне декількох значень, може " "виглядати приблизно так:" -#: ../../src/basics/functions.txt:296 +#: ../../src/basics/functions.txt:361 #, fuzzy msgid "" "However, as you're already seen, when positional arguments are used, the " @@ -565,12 +659,12 @@ msgstr "" "кількість переданих аргументів повинна відповідати кількості оголошених " "параметрів." -#: ../../src/basics/functions.txt:300 +#: ../../src/basics/functions.txt:365 #, fuzzy msgid "Argument tuple packing" msgstr "Пакування кортежів аргументів" -#: ../../src/basics/functions.txt:302 +#: ../../src/basics/functions.txt:367 #, fuzzy msgid "" "When a parameter name in a function definition is preceded by an asterisk " @@ -583,7 +677,7 @@ msgstr "" "функції упаковуються у кортеж, на який функція може посилатися за вказаним " "іменем параметра." -#: ../../src/basics/functions.txt:312 +#: ../../src/basics/functions.txt:377 #, fuzzy msgid "" "Any name can be used, but *args* is so commonly chosen that it's practically " @@ -592,12 +686,12 @@ msgstr "" "Можна використовувати будь-яке ім'я, але *args* є настільки поширеним, що " "стало практично стандартом." -#: ../../src/basics/functions.txt:316 +#: ../../src/basics/functions.txt:381 #, fuzzy msgid "Argument tuple unpacking" msgstr "Розпакування кортежу аргументів" -#: ../../src/basics/functions.txt:318 +#: ../../src/basics/functions.txt:383 #, fuzzy msgid "" "An analogous operation is available on the other side of the equation in a " @@ -609,7 +703,7 @@ msgstr "" "перед аргументом у виклику функції стоїть зірочка, це означає, що аргумент є " "кортежем, який слід **розпакувати** і передати у функцію як окремі значення." -#: ../../src/basics/functions.txt:334 +#: ../../src/basics/functions.txt:399 #, fuzzy msgid "" "Although this type of unpacking is called **tuple** unpacking, it doesn't " @@ -620,17 +714,17 @@ msgstr "" "не лише з кортежами. Зірочка може бути застосована до будь-якого ітератора у " "виклику функції." -#: ../../src/basics/functions.txt:349 +#: ../../src/basics/functions.txt:414 #, fuzzy msgid "You can even do tuple packing and unpacking at the same time." msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." -#: ../../src/basics/functions.txt:361 +#: ../../src/basics/functions.txt:426 #, fuzzy msgid "Argument dictionary packing" msgstr "Пакування словника аргументів" -#: ../../src/basics/functions.txt:363 +#: ../../src/basics/functions.txt:428 #, fuzzy msgid "" "Python has a similar operator, the double asterisk (\\*\\*), which can be " @@ -645,7 +739,7 @@ msgstr "" "що відповідні аргументи, які, як очікується, є аргументами ключових слів " "(пари ``ключ=значення``), мають бути упаковані у словник." -#: ../../src/basics/functions.txt:379 +#: ../../src/basics/functions.txt:444 #, fuzzy msgid "" "Again, any name can be used, but the peculiar *kwargs* (which is short for " @@ -654,12 +748,12 @@ msgstr "" "Знову ж таки, можна використовувати будь-яке ім'я, але особливе *kwargs* (що " "є скороченням від *ключове слово args*) є майже стандартним." -#: ../../src/basics/functions.txt:383 +#: ../../src/basics/functions.txt:448 #, fuzzy msgid "Argument dictionary unpacking" msgstr "Розпакування словника аргументів" -#: ../../src/basics/functions.txt:385 +#: ../../src/basics/functions.txt:450 #, fuzzy msgid "" "This is analogous to argument tuple unpacking. When the double asterisk " diff --git a/src/basics/functions.txt b/src/basics/functions.txt index f55b3f29b..49009b697 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -277,7 +277,72 @@ It serves two purposes: - It provides a mechanism by which the function can pass data back to the caller. -.. todo: complete the return statement section +The return statement can be used inside of a function or a method to send +the result back to the caller. It consists of the ``return`` Python keyword +and an optional return value. + +The return value of a Python function can be any Python object (and you should +remember - everything in Python is an object). + +You can omit the return value and use bare ``return`` without a return value. +You can also omit the entire ``return`` statement. In both cases, the return +value will be ``None``. So, Python functions always have the return value; in +case it hasn't been specified - it's ``None``. + +.. important:: **Returning vs Printing** + + If you're working in an interactive session, then you might think that + printing a value and returning a value are equivalent. + Consider the following two functions: + + .. code-block:: python + + from typing import List + + + def print_evens(numbers: List[int]) -> None: + print([number for number in numbers if not number % 2]) + + + def return_evens(numbers: List[int]) -> List[int]: + return [number for number in numbers if not number % 2] + + And their output: + + :: + + >>> print_evens([1, 2, 3, 4, 5, 6, 7, 8, 9]) + [2, 4, 6, 8] + >>> return_evens([1, 2, 3, 4, 5, 6, 7, 8, 9]) + [2, 4, 6, 8] + + Both functions seems to do the same thing. But only the second one + function actually returns a value, when the first one returns nothing + (or **NoneType object**). + +Return multiple values +---------------------- + +You can use a return statement to return multiple values from a function. +To do that, you just need to supply several return values separated by commas. +The function will return a tuple of values. + +.. code-block:: python + + import statistics as st + + + def describe(data): + return st.mean(data), st.median(data), st.mode(data) + + + sample = [8, 1, 9, 1, 4, 6, 1, 9, 8, 3] + mean, median, mode = describe(sample) + +The built-in ``divmod`` function is also an example of a function that returns +multiple values. The function takes two (non-complex) numbers as arguments and +returns two numbers, the quotient of the two input values and the remainder of +the division. Variable-length argument list ============================= From 01ecb202bd4f52af30e1806daaf2860c6f021747 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 00:16:03 +0300 Subject: [PATCH 217/689] Add lambda expression section --- .../uk/LC_MESSAGES/basics/functions.po | 96 +++++++++++++++++-- src/basics/functions.txt | 64 +++++++++++++ src/refs.bib | 7 ++ 3 files changed, 160 insertions(+), 7 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index dbd22af0e..bdec91a8a 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-23 23:35+0300\n" -"PO-Revision-Date: 2023-10-23 23:36+0300\n" +"POT-Creation-Date: 2023-10-24 00:16+0300\n" +"PO-Revision-Date: 2023-10-24 00:17+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -81,12 +81,12 @@ msgstr "" msgid "The usual syntax for defining a Python function is as follows:" msgstr "Звичайний синтаксис для визначення функції Python наступний:" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 #, fuzzy msgid "Component" msgstr "Компонент" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 #, fuzzy msgid "Meaning" msgstr "Значення" @@ -96,7 +96,7 @@ msgstr "Значення" msgid "``def``" msgstr "``def``" -#: ../../src/basics/functions.txt:38 +#: ../../src/basics/functions.txt:38 ../../src/basics/functions.txt:485 #, fuzzy msgid "The keyword that informs Python that a function is being defined" msgstr "Ключове слово, яке інформує Python про те, що функція визначається" @@ -111,12 +111,12 @@ msgstr "``<ім'я_функції>``" msgid "A valid Python identifier that names the function" msgstr "Правильний ідентифікатор Python, який називає функцію" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 #, fuzzy msgid "````" msgstr "Параметри" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 #, fuzzy msgid "" "An optional, comma-separated list of parameters that may be passed to the " @@ -766,5 +766,87 @@ msgstr "" "словником, який слід розпакувати, а отримані елементи передати у функцію як " "аргументи ключових слів." +#: ../../src/basics/functions.txt:468 +#, fuzzy +msgid "Lambda functions" +msgstr "Функції" + +#: ../../src/basics/functions.txt:470 +#, fuzzy +msgid "" +"Lambda expressions in Python and other programming languages have their " +"roots in lambda calculus, a model of computation invented by Alonzo Church. " +"Python is not inherently a functional language, but it adopted some " +"functional concepts early on. In January 1994, ``map()``, ``filter()``, " +"``reduce()``, and the lambda operator were added to the language." +msgstr "" +"Лямбда-вирази в Python та інших мовах програмування беруть свій початок у " +"лямбда-обчисленні - моделі обчислень, винайденій Алонзо Черчем. За своєю " +"суттю Python не є функціональною мовою, але вона рано перейняла деякі " +"функціональні концепції. У січні 1994 року до мови було додано ``map()``, " +"``filter()``, ``reduce()`` та лямбда-оператор." + +#: ../../src/basics/functions.txt:476 +#, fuzzy +msgid "General lambda function syntax is:" +msgstr "Загальний синтаксис лямбда-функції такий:" + +#: ../../src/basics/functions.txt:485 +#, fuzzy +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/basics/functions.txt:491 +#, fuzzy +msgid "````" +msgstr "Вираз Await" + +#: ../../src/basics/functions.txt:491 +#, fuzzy +msgid "A valid Python expression; return statement" +msgstr "Оператор повернення" + +#: ../../src/basics/functions.txt:502 +#, fuzzy +msgid "" +"The code sample above demonstrates the ``get_fullname`` Python function and " +"its lambda version. A lambda form presents syntactic distinctions from a " +"normal function. In particular, a lambda function has the following " +"characteristics:" +msgstr "" +"Наведений вище приклад коду демонструє функцію Python ``get_fullname`` та її " +"лямбда-версію. Лямбда-форма має синтаксичні відмінності від звичайної " +"функції. Зокрема, лямбда-функція має наступні характеристики:" + +#: ../../src/basics/functions.txt:506 +#, fuzzy +msgid "" +"It can only contain expressions and can’t include statements in its body." +msgstr "Він може містити лише вирази і не може включати в себе оператори." + +#: ../../src/basics/functions.txt:507 +#, fuzzy +msgid "It is written as a single line of execution." +msgstr "Він написаний у вигляді одного рядка виконання." + +#: ../../src/basics/functions.txt:508 +#, fuzzy +msgid "It does not support type annotations." +msgstr "Він не підтримує анотації типів." + +#: ../../src/basics/functions.txt:509 +#, fuzzy +msgid "" +"It can be immediately invoked (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." +msgstr "" +"Її можна негайно викликати (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." + +#: ../../src/basics/functions.txt:517 +#, fuzzy +msgid "Classic functional constructs" +msgstr "Класичні функціональні конструкції" + #~ msgid "Page is under construction" #~ msgstr "Сторінка в розробці" diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 49009b697..00b6c36fa 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -463,3 +463,67 @@ items passed to the function as keyword arguments. "job_title": "Software Engineer", } display_person(**person_data) + +Lambda functions +================ + +Lambda expressions in Python and other programming languages have their roots +in lambda calculus, a model of computation invented by Alonzo Church. +Python is not inherently a functional language, but it adopted some functional +concepts early on. In January 1994, ``map()``, ``filter()``, ``reduce()``, and +the lambda operator were added to the language. + +General lambda function syntax is: + +:: + + lambda []: + ++---------------------+-------------------------------------------------------+ +| Component | Meaning | ++=====================+=======================================================+ +| ``lambda`` | The keyword that informs Python that a function is | +| | being defined | ++---------------------+-------------------------------------------------------+ +| ```` | An optional, comma-separated list of parameters that | +| | may be passed to the function | ++---------------------+-------------------------------------------------------+ +| ```` | A valid Python expression; return statement | ++---------------------+-------------------------------------------------------+ + +.. code-block:: python + + def get_fullname(first_name: str, last_name: str): + return f"{first_name.title()} {last_name.title()}" + + + lambda first_name, last_name: f"{first_name.title()} {last_name.title()}" + +The code sample above demonstrates the ``get_fullname`` Python function and its +lambda version. A lambda form presents syntactic distinctions from a normal +function. In particular, a lambda function has the following characteristics: + +- It can only contain expressions and can’t include statements in its body. +- It is written as a single line of execution. +- It does not support type annotations. +- It can be immediately invoked + (:abbr:`IIFE (Immediately Invoked Function Execution)`). + + .. code-block:: python + + (lambda number: "odd" if number % 2 else "even")(42) + +.. rubric:: Classic functional constructs + +.. code-block:: python + + >>> # in-place data modifications + >>> list(map(lambda x: x.upper(), ["foo", "bar", "foobar"])) + ["FOO", "BAR", "FOOBAR"] + >>> # filtering values + >>> list(filter(lambda x: not x % 2, [1, 2, 3, 4, 5, 6, 7])) + [2, 4, 6] + >>> # reduce values + >>> from functools import reduce + >>> reduce(lambda acc, x: acc ^ x, [1, 2, 3, 1234, 3, 2, 1]) + 1234 diff --git a/src/refs.bib b/src/refs.bib index 1dc49ad96..d56df8e40 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -177,3 +177,10 @@ @misc{realpython:user-func date = {2020.3.9}, url = {https://realpython.com/defining-your-own-python-function/}, } + +@misc{realpython:lambda-func, + title = {How to use Python lambda functions}, + author = {Andre Burgaud}, + date = {2019.6.19}, + url = {https://realpython.com/python-lambda/}, +} From ed64675b27647f98128823a14b9f273f6a3a0f4c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 00:36:44 +0300 Subject: [PATCH 218/689] Check functions document translation --- .../uk/LC_MESSAGES/basics/functions.po | 243 +++--------------- 1 file changed, 38 insertions(+), 205 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index bdec91a8a..57b5ac19e 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -4,15 +4,15 @@ # OLEKSANDR YEROMIN , 2023. msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Project-Id-Version: Python Training Course 2023.10.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-24 00:16+0300\n" -"PO-Revision-Date: 2023-10-24 00:17+0300\n" +"POT-Creation-Date: 2023-10-23 23:35+0300\n" +"PO-Revision-Date: 2023-10-24 00:36+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -36,30 +36,26 @@ msgid "Functions" msgstr "Функції" #: ../../src/basics/functions.txt:10 -#, fuzzy msgid "" "You may be familiar with the mathematical concept of a **function**. It is a " "relationship or mapping between one or more inputs and a set of outputs." msgstr "" -"Можливо, ви знайомі з математичним поняттям **функція**. Це відношення або " -"відображення між одним або декількома входами та набором виходів." +"Можливо, ви знайомі з математичним поняттям **функція**. Це відношення між " +"одним або декількома вхідними параметрами та набором результатів." #: ../../src/basics/functions.txt:13 -#, fuzzy msgid "z = f(x, y)" msgstr "z = f(x, y)" #: ../../src/basics/functions.txt:17 -#, fuzzy msgid "" "Here ``f`` is a function that operates on the inputs ``x`` and ``y``, and " "its output is bind to ``z``." msgstr "" -"Тут ``f`` - це функція, яка оперує входами ``x`` та ``y``, а її вихід " -"прив'язаний до ``z``." +"Тут ``f`` - це функція, яка оперує параметрами ``x`` та ``y``, а її " +"результат прив'язаний до ``z``." #: ../../src/basics/functions.txt:20 -#, fuzzy msgid "" "In programming a **function** is a self-contained block of code that " "encapsulate a specific task or related group of tasks." @@ -68,7 +64,6 @@ msgstr "" "задачу або пов'язану групу задач." #: ../../src/basics/functions.txt:23 -#, fuzzy msgid "" "You may be familiar with some built-in functions like ``max``, ``min``, " "``len`` etc." @@ -77,47 +72,38 @@ msgstr "" "``min``, ``len`` тощо." #: ../../src/basics/functions.txt:28 -#, fuzzy msgid "The usual syntax for defining a Python function is as follows:" msgstr "Звичайний синтаксис для визначення функції Python наступний:" -#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 -#, fuzzy +#: ../../src/basics/functions.txt:36 msgid "Component" msgstr "Компонент" -#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 -#, fuzzy +#: ../../src/basics/functions.txt:36 msgid "Meaning" msgstr "Значення" #: ../../src/basics/functions.txt:38 -#, fuzzy msgid "``def``" msgstr "``def``" -#: ../../src/basics/functions.txt:38 ../../src/basics/functions.txt:485 -#, fuzzy +#: ../../src/basics/functions.txt:38 msgid "The keyword that informs Python that a function is being defined" -msgstr "Ключове слово, яке інформує Python про те, що функція визначається" +msgstr "Ключове слово, яке інформує Python про те, що визначається функція" #: ../../src/basics/functions.txt:41 -#, fuzzy msgid "````" -msgstr "``<ім'я_функції>``" +msgstr "````" #: ../../src/basics/functions.txt:41 -#, fuzzy msgid "A valid Python identifier that names the function" -msgstr "Правильний ідентифікатор Python, який називає функцію" +msgstr "Валідний ідентифікатор Python, який називає функцію" -#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 -#, fuzzy +#: ../../src/basics/functions.txt:43 msgid "````" -msgstr "Параметри" +msgstr "````" -#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 -#, fuzzy +#: ../../src/basics/functions.txt:43 msgid "" "An optional, comma-separated list of parameters that may be passed to the " "function" @@ -126,22 +112,18 @@ msgstr "" "функцію" #: ../../src/basics/functions.txt:46 -#, fuzzy msgid "````" -msgstr "''<висловлювання>''" +msgstr "````" #: ../../src/basics/functions.txt:46 -#, fuzzy msgid "A block of valid Python statements; **body** of the function" msgstr "Блок допустимих операторів Python; **тіло** функції" #: ../../src/basics/functions.txt:50 -#, fuzzy msgid "The syntax for calling a Python function is as follows:" msgstr "Синтаксис виклику функції Python наступний:" #: ../../src/basics/functions.txt:56 -#, fuzzy msgid "" "The ```` are the values passed into the function. They correspond " "to the ```` in the function definition. You can define a " @@ -156,22 +138,18 @@ msgstr "" "дужки, навіть якщо вони порожні." #: ../../src/basics/functions.txt:63 -#, fuzzy msgid "Argument passing" -msgstr "Передача аргументу" +msgstr "Передача аргументів" #: ../../src/basics/functions.txt:66 -#, fuzzy msgid "More often, you want to **pass data into a function**." msgstr "Найчастіше вам потрібно **передати дані у функцію**." #: ../../src/basics/functions.txt:69 -#, fuzzy msgid "Positional arguments" msgstr "Позиційні аргументи" #: ../../src/basics/functions.txt:73 -#, fuzzy msgid "" "Because of the way they're defined and used, positional arguments are also " "called *required arguments*." @@ -180,7 +158,6 @@ msgstr "" "називають *обов'язковими аргументами*." #: ../../src/basics/functions.txt:76 -#, fuzzy msgid "" "The most straightforward way to pass arguments to a function is with " "**positional arguments**. In the function definition, you specify a comma-" @@ -193,14 +170,12 @@ msgstr "" "викликається, ви вказуєте відповідний список аргументів." #: ../../src/basics/functions.txt:82 -#, fuzzy msgid "" "The parameters behave like **variables** that are defined locally to the " "function." msgstr "Параметри поводяться як **змінні**, визначені локально у функції." #: ../../src/basics/functions.txt:85 -#, fuzzy msgid "" "Although positional arguments are the most straightforward way to pass data " "to a function, they also afford the least flexibility. For starters, the " @@ -212,7 +187,6 @@ msgstr "" "аргументів у виклику повинен відповідати порядку параметрів у визначенні." #: ../../src/basics/functions.txt:90 -#, fuzzy msgid "" "There's nothing to stop you from specifying positional arguments out of " "order. The function even may still run, but it's very unlikely to produce " @@ -222,7 +196,6 @@ msgstr "" "Функція навіть може запуститися, але навряд чи видасть правильні результати." #: ../../src/basics/functions.txt:96 -#, fuzzy msgid "" "It's responsibility of the programmer who defines the function to document " "what the appropriate arguments should be, and it's the responsibility of the " @@ -233,7 +206,6 @@ msgstr "" "інформацію і дотримуватися її." #: ../../src/basics/functions.txt:100 -#, fuzzy msgid "" "With positional arguments, the arguments in the call and the parameters in " "the definition must agree not only in order, but in number as well." @@ -242,12 +214,10 @@ msgstr "" "повинні узгоджуватися не тільки за порядком, але й за кількістю." #: ../../src/basics/functions.txt:104 -#, fuzzy msgid "Keyword arguments" msgstr "Аргументи за ключовими словами" #: ../../src/basics/functions.txt:106 -#, fuzzy msgid "" "When calling a function, you can specify arguments in the form " "``=``. In that case, each ```` must match a " @@ -260,7 +230,6 @@ msgstr "" "яке не відповідає жодному з цих оголошених параметрів, генерує виключення." #: ../../src/basics/functions.txt:111 -#, fuzzy msgid "" "Using keyword arguments lifts the restriction on arguments order. Each " "keyword argument explicitly designates a specific parameter by name, so you " @@ -273,7 +242,6 @@ msgstr "" "знатиме, який аргумент йде з яким параметром." #: ../../src/basics/functions.txt:116 -#, fuzzy msgid "" "Like with positional arguments, though, the number of arguments and " "parameters must still match." @@ -282,7 +250,6 @@ msgstr "" "має збігатися." #: ../../src/basics/functions.txt:119 -#, fuzzy msgid "" "You can call a function using both positional and keyword arguments. Once " "you've specified a keyword argument, there can't be any positional arguments " @@ -293,12 +260,10 @@ msgstr "" "може бути жодних позиційних аргументів." #: ../../src/basics/functions.txt:124 -#, fuzzy msgid "Default values" msgstr "Значення за замовчуванням" #: ../../src/basics/functions.txt:126 -#, fuzzy msgid "" "If a parameter specified in the function definition has the form of " "``==``, then ```` becomes a default value for that " @@ -311,12 +276,10 @@ msgstr "" "замовчуванням або необов'язковими параметрами**." #: ../../src/basics/functions.txt:132 -#, fuzzy msgid "Mutable default parameter values" msgstr "Змінювані значення параметрів за замовчуванням" #: ../../src/basics/functions.txt:133 -#, fuzzy msgid "" "Things can get weird if you specify a default parameter value that is a " "mutable object." @@ -325,7 +288,6 @@ msgstr "" "замовчуванням, який є змінюваним об'єктом." #: ../../src/basics/functions.txt:151 -#, fuzzy msgid "" "In Python default parameter values are **defined only once** when the " "function is defined. The default value isn't re-defined each time the " @@ -340,12 +302,10 @@ msgstr "" "``container``, оператор ``.append`` виконується над тим самим списком." #: ../../src/basics/functions.txt:158 -#, fuzzy msgid "Mutable and immutable arguments" msgstr "Змінні та незмінні аргументи" #: ../../src/basics/functions.txt:162 -#, fuzzy msgid "" "Roughly, you may consider immutable object as passed-by-value, and mutable " "objects as passed-by-reference. However, that's not actual true." @@ -354,7 +314,6 @@ msgstr "" "змінювані об'єкти - переданим посиланням. Однак, це не зовсім так." #: ../../src/basics/functions.txt:166 -#, fuzzy msgid "" "In programming language design, there are two common paradigms for passing " "an argument to a function:" @@ -363,34 +322,30 @@ msgstr "" "функцію:" #: ../../src/basics/functions.txt:169 -#, fuzzy msgid "" "**pass-by-value** means a copy of the argument is passed to the function." msgstr "" -"**передати за значенням** означає, що у функцію передається копія аргументу." +"**передати-за-значенням** означає, що у функцію передається копія аргументу." #: ../../src/basics/functions.txt:170 -#, fuzzy msgid "" "**pass-by-reference** means a reference to the argument is passed to the " "function." msgstr "" -"**передача за посиланням** означає, що у функцію передається посилання на " +"**передати-за-посиланням** означає, що у функцію передається посилання на " "аргумент." #: ../../src/basics/functions.txt:173 -#, fuzzy msgid "" "Are parameters in Python pass-by-value or pass-by-reference? They're " "neither, exactly. That's because a reference doesn't mean quite the same " "thing in Python as it does in C-like languages." msgstr "" -"Чи є параметри в Python передачею за значенням або за посиланням? Вони не є " +"Чи є параметри в Python переданими за значенням або за посиланням? Вони не є " "ні тими, ні іншими. Це тому, що посилання в Python означає не зовсім те " "саме, що в C-подібних мовах." #: ../../src/basics/functions.txt:177 -#, fuzzy msgid "" "Recall that in Python, every piece of data is an **object**. A reference " "points to an object, not a specific memory location." @@ -399,33 +354,28 @@ msgstr "" "на об'єкт, а не на конкретну ділянку пам'яті." #: ../../src/basics/functions.txt:180 -#, fuzzy msgid "Take a look on the code below:" msgstr "Погляньте на код нижче:" #: ../../src/basics/functions.txt:188 -#, fuzzy msgid "These assignment statements have the following meaning:" msgstr "Ці оператори присвоювання мають наступне значення:" #: ../../src/basics/functions.txt:190 -#, fuzzy msgid "**Line 1** cause ``value`` to point to an object whose value is ``24``." msgstr "" "**Рядок 1** призводить до того, що ``value`` вказує на об'єкт, значенням " "якого є ``24``." #: ../../src/basics/functions.txt:191 -#, fuzzy msgid "" "**Line 2** reassign ``value`` as a new reference to a different object whose " "value is ``42``." msgstr "" -"**Рядок 2** перепризначити ``value`` як нове посилання на інший об'єкт, " +"**Рядок 2** перепризначає ``value`` як нове посилання на інший об'єкт, " "значенням якого є ``42``." #: ../../src/basics/functions.txt:194 -#, fuzzy msgid "" "In Python, when you pass an argument to a function, a similar *rebinding* " "occurs." @@ -434,7 +384,6 @@ msgstr "" "*переприв'язування*." #: ../../src/basics/functions.txt:207 -#, fuzzy msgid "" "In the main program, the statement ``x = 5`` on line 5 creates a reference " "named ``x`` bound to an object whose value is ``5``. ``reassign`` is then " @@ -458,7 +407,6 @@ msgstr "" "вказуватиме на об'єкт ``5``, як це було до виклику функції." #: ../../src/basics/functions.txt:218 -#, fuzzy msgid "" "You can confirm all this using ``id()``. Here's a slightly augmented version " "of the code above:" @@ -467,12 +415,10 @@ msgstr "" "версія коду вище:" #: ../../src/basics/functions.txt:235 -#, fuzzy msgid "The outputs will look like:" msgstr "Результати будуть виглядати так:" #: ../../src/basics/functions.txt:246 -#, fuzzy msgid "" "Python's argument-passing mechanism has been called **pass-by-assignment**. " "You may also see terms pass-by-object, pass-by-object-reference, or pass-by-" @@ -480,14 +426,13 @@ msgid "" "entry in Python, and assignment is also the process of binding a name to an " "object." msgstr "" -"Механізм передачі аргументів у Python називається **передача за " -"присвоєнням**. Ви також можете зустріти терміни pass-by-object, pass-by-" -"object-reference або pass-by-sharing. Це пов'язано з тим, що імена " -"параметрів прив'язуються до об'єктів під час виклику функції у Python, а " -"присвоювання - це також процес прив'язки імені до об'єкта." +"Механізм передачі аргументів у Python називається **передача-за-" +"присвоєнням** (**pass-by-assignment**). Ви також можете зустріти терміни " +"pass-by-object, pass-by-object-reference або pass-by-sharing. Це пов'язано з " +"тим, що імена параметрів прив'язуються до об'єктів під час виклику функції у " +"Python, а присвоювання - це також процес прив'язки імені до об'єкта." #: ../../src/basics/functions.txt:252 -#, fuzzy msgid "" "The key takeaway here is that Python function can't change the value of an " "argument by reassigning the corresponding parameter to something else." @@ -496,7 +441,6 @@ msgstr "" "аргументу, перепризначивши відповідний параметр на щось інше." #: ../../src/basics/functions.txt:255 -#, fuzzy msgid "" "However, functions can use references to make modifications inside of a " "mutable objects." @@ -505,17 +449,14 @@ msgstr "" "змінюваних об'єктів." #: ../../src/basics/functions.txt:271 -#, fuzzy msgid "The return statement" msgstr "Оператор повернення" #: ../../src/basics/functions.txt:273 -#, fuzzy msgid "It serves two purposes:" msgstr "Він служить двом цілям:" #: ../../src/basics/functions.txt:275 -#, fuzzy msgid "" "It immediately terminates the function and passes execution control back to " "the caller." @@ -524,7 +465,6 @@ msgstr "" "її викликав." #: ../../src/basics/functions.txt:277 -#, fuzzy msgid "" "It provides a mechanism by which the function can pass data back to the " "caller." @@ -533,7 +473,6 @@ msgstr "" "тому, хто її викликає." #: ../../src/basics/functions.txt:280 -#, fuzzy msgid "" "The return statement can be used inside of a function or a method to send " "the result back to the caller. It consists of the ``return`` Python keyword " @@ -541,19 +480,17 @@ msgid "" msgstr "" "Оператор return можна використовувати всередині функції або методу, щоб " "відправити результат назад тому, хто його викликає. Він складається з " -"ключового слова return та необов'язкового значення, що повертається." +"ключового слова ``return`` та необов'язкового значення, що повертається." #: ../../src/basics/functions.txt:284 -#, fuzzy msgid "" "The return value of a Python function can be any Python object (and you " "should remember - everything in Python is an object)." msgstr "" -"Значенням, що повертається функцією Python, може бути будь-який об'єкт " -"Python (і ви повинні пам'ятати - все в Python є об'єктом)." +"Значенням, що повертається функцією, може бути будь-який об'єкт Python (і ви " +"повинні пам'ятати - все в Python є об'єктом)." #: ../../src/basics/functions.txt:287 -#, fuzzy msgid "" "You can omit the return value and use bare ``return`` without a return " "value. You can also omit the entire ``return`` statement. In both cases, the " @@ -567,12 +504,10 @@ msgstr "" "якщо його не вказано - це ``None``." #: ../../src/basics/functions.txt:292 -#, fuzzy msgid "**Returning vs Printing**" -msgstr "**Повернення проти друку**" +msgstr "**return проти print**" #: ../../src/basics/functions.txt:294 -#, fuzzy msgid "" "If you're working in an interactive session, then you might think that " "printing a value and returning a value are equivalent. Consider the " @@ -582,12 +517,10 @@ msgstr "" "значення і повернення значення еквівалентні. Розглянемо дві наступні функції:" #: ../../src/basics/functions.txt:310 -#, fuzzy msgid "And their output:" -msgstr "Опис Результатів" +msgstr "Та результати їх викликів:" #: ../../src/basics/functions.txt:319 -#, fuzzy msgid "" "Both functions seems to do the same thing. But only the second one function " "actually returns a value, when the first one returns nothing (or **NoneType " @@ -598,12 +531,10 @@ msgstr "" "**NoneType об'єкт**)." #: ../../src/basics/functions.txt:324 -#, fuzzy msgid "Return multiple values" -msgstr "Значення за замовчуванням" +msgstr "Повернення декількох значень" #: ../../src/basics/functions.txt:326 -#, fuzzy msgid "" "You can use a return statement to return multiple values from a function. To " "do that, you just need to supply several return values separated by commas. " @@ -611,10 +542,9 @@ msgid "" msgstr "" "Ви можете використовувати інструкцію return для повернення декількох значень " "з функції. Для цього вам просто потрібно вказати декілька значень, що " -"повертаються, розділених комами. Функція поверне кортеж значень." +"повертаються, розділених комами. Функція поверне їх як кортеж." #: ../../src/basics/functions.txt:342 -#, fuzzy msgid "" "The built-in ``divmod`` function is also an example of a function that " "returns multiple values. The function takes two (non-complex) numbers as " @@ -627,12 +557,10 @@ msgstr "" "ділення." #: ../../src/basics/functions.txt:348 -#, fuzzy msgid "Variable-length argument list" msgstr "Список аргументів змінної довжини" #: ../../src/basics/functions.txt:350 -#, fuzzy msgid "" "In some cases, when you're defining a function, you may not know beforehand " "how many arguments you'll want it to take." @@ -641,7 +569,6 @@ msgstr "" "заздалегідь, скільки аргументів ви хочете, щоб вона приймала." #: ../../src/basics/functions.txt:353 -#, fuzzy msgid "" "For example, a function that computes an average of several values may look " "something like this:" @@ -650,7 +577,6 @@ msgstr "" "виглядати приблизно так:" #: ../../src/basics/functions.txt:361 -#, fuzzy msgid "" "However, as you're already seen, when positional arguments are used, the " "number of arguments passed must match the number of parameters declared." @@ -665,7 +591,6 @@ msgid "Argument tuple packing" msgstr "Пакування кортежів аргументів" #: ../../src/basics/functions.txt:367 -#, fuzzy msgid "" "When a parameter name in a function definition is preceded by an asterisk " "(\\*), it indicates **argument tuple packing**. Any corresponding arguments " @@ -678,7 +603,6 @@ msgstr "" "іменем параметра." #: ../../src/basics/functions.txt:377 -#, fuzzy msgid "" "Any name can be used, but *args* is so commonly chosen that it's practically " "a standard." @@ -692,7 +616,6 @@ msgid "Argument tuple unpacking" msgstr "Розпакування кортежу аргументів" #: ../../src/basics/functions.txt:383 -#, fuzzy msgid "" "An analogous operation is available on the other side of the equation in a " "function call. When an argument in a function call is preceded by an " @@ -704,18 +627,16 @@ msgstr "" "кортежем, який слід **розпакувати** і передати у функцію як окремі значення." #: ../../src/basics/functions.txt:399 -#, fuzzy msgid "" "Although this type of unpacking is called **tuple** unpacking, it doesn't " "only work with tuples. The asterisk can be applied to any iterable in a " "function call." msgstr "" "Хоча цей тип розпакування називається **розпакуванням кортежів**, він працює " -"не лише з кортежами. Зірочка може бути застосована до будь-якого ітератора у " -"виклику функції." +"не лише з кортежами. Зірочка може бути застосована до будь-якого ітеруємого " +"об'єкта у виклику функції." #: ../../src/basics/functions.txt:414 -#, fuzzy msgid "You can even do tuple packing and unpacking at the same time." msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." @@ -725,7 +646,6 @@ msgid "Argument dictionary packing" msgstr "Пакування словника аргументів" #: ../../src/basics/functions.txt:428 -#, fuzzy msgid "" "Python has a similar operator, the double asterisk (\\*\\*), which can be " "used with function parameters to specify **dictionary packing**. Preceding " @@ -740,13 +660,12 @@ msgstr "" "(пари ``ключ=значення``), мають бути упаковані у словник." #: ../../src/basics/functions.txt:444 -#, fuzzy msgid "" "Again, any name can be used, but the peculiar *kwargs* (which is short for " "*keyword args*) is nearly standard." msgstr "" "Знову ж таки, можна використовувати будь-яке ім'я, але особливе *kwargs* (що " -"є скороченням від *ключове слово args*) є майже стандартним." +"є скороченням від *keyword args*) є майже стандартним." #: ../../src/basics/functions.txt:448 #, fuzzy @@ -754,7 +673,6 @@ msgid "Argument dictionary unpacking" msgstr "Розпакування словника аргументів" #: ../../src/basics/functions.txt:450 -#, fuzzy msgid "" "This is analogous to argument tuple unpacking. When the double asterisk " "precedes an argument in a function call, it specifies that the argument is a " @@ -765,88 +683,3 @@ msgstr "" "перед аргументом у виклику функції, вона вказує на те, що аргумент є " "словником, який слід розпакувати, а отримані елементи передати у функцію як " "аргументи ключових слів." - -#: ../../src/basics/functions.txt:468 -#, fuzzy -msgid "Lambda functions" -msgstr "Функції" - -#: ../../src/basics/functions.txt:470 -#, fuzzy -msgid "" -"Lambda expressions in Python and other programming languages have their " -"roots in lambda calculus, a model of computation invented by Alonzo Church. " -"Python is not inherently a functional language, but it adopted some " -"functional concepts early on. In January 1994, ``map()``, ``filter()``, " -"``reduce()``, and the lambda operator were added to the language." -msgstr "" -"Лямбда-вирази в Python та інших мовах програмування беруть свій початок у " -"лямбда-обчисленні - моделі обчислень, винайденій Алонзо Черчем. За своєю " -"суттю Python не є функціональною мовою, але вона рано перейняла деякі " -"функціональні концепції. У січні 1994 року до мови було додано ``map()``, " -"``filter()``, ``reduce()`` та лямбда-оператор." - -#: ../../src/basics/functions.txt:476 -#, fuzzy -msgid "General lambda function syntax is:" -msgstr "Загальний синтаксис лямбда-функції такий:" - -#: ../../src/basics/functions.txt:485 -#, fuzzy -msgid "``lambda``" -msgstr "``lambda``" - -#: ../../src/basics/functions.txt:491 -#, fuzzy -msgid "````" -msgstr "Вираз Await" - -#: ../../src/basics/functions.txt:491 -#, fuzzy -msgid "A valid Python expression; return statement" -msgstr "Оператор повернення" - -#: ../../src/basics/functions.txt:502 -#, fuzzy -msgid "" -"The code sample above demonstrates the ``get_fullname`` Python function and " -"its lambda version. A lambda form presents syntactic distinctions from a " -"normal function. In particular, a lambda function has the following " -"characteristics:" -msgstr "" -"Наведений вище приклад коду демонструє функцію Python ``get_fullname`` та її " -"лямбда-версію. Лямбда-форма має синтаксичні відмінності від звичайної " -"функції. Зокрема, лямбда-функція має наступні характеристики:" - -#: ../../src/basics/functions.txt:506 -#, fuzzy -msgid "" -"It can only contain expressions and can’t include statements in its body." -msgstr "Він може містити лише вирази і не може включати в себе оператори." - -#: ../../src/basics/functions.txt:507 -#, fuzzy -msgid "It is written as a single line of execution." -msgstr "Він написаний у вигляді одного рядка виконання." - -#: ../../src/basics/functions.txt:508 -#, fuzzy -msgid "It does not support type annotations." -msgstr "Він не підтримує анотації типів." - -#: ../../src/basics/functions.txt:509 -#, fuzzy -msgid "" -"It can be immediately invoked (:abbr:`IIFE (Immediately Invoked Function " -"Execution)`)." -msgstr "" -"Її можна негайно викликати (:abbr:`IIFE (Immediately Invoked Function " -"Execution)`)." - -#: ../../src/basics/functions.txt:517 -#, fuzzy -msgid "Classic functional constructs" -msgstr "Класичні функціональні конструкції" - -#~ msgid "Page is under construction" -#~ msgstr "Сторінка в розробці" From 27c66947a3312b75b08d35e1878d202cf9ab34bf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 02:22:11 +0300 Subject: [PATCH 219/689] Update functions document translation --- .../uk/LC_MESSAGES/basics/functions.po | 96 ++++++++++++++++--- 1 file changed, 81 insertions(+), 15 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index 57b5ac19e..56f5900e6 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,13 +6,13 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.10.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-23 23:35+0300\n" -"PO-Revision-Date: 2023-10-24 00:36+0300\n" +"POT-Creation-Date: 2023-10-24 02:19+0300\n" +"PO-Revision-Date: 2023-10-24 02:21+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -75,11 +75,11 @@ msgstr "" msgid "The usual syntax for defining a Python function is as follows:" msgstr "Звичайний синтаксис для визначення функції Python наступний:" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 msgid "Component" msgstr "Компонент" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 msgid "Meaning" msgstr "Значення" @@ -87,7 +87,7 @@ msgstr "Значення" msgid "``def``" msgstr "``def``" -#: ../../src/basics/functions.txt:38 +#: ../../src/basics/functions.txt:38 ../../src/basics/functions.txt:485 msgid "The keyword that informs Python that a function is being defined" msgstr "Ключове слово, яке інформує Python про те, що визначається функція" @@ -99,11 +99,11 @@ msgstr "````" msgid "A valid Python identifier that names the function" msgstr "Валідний ідентифікатор Python, який називає функцію" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 msgid "````" msgstr "````" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 msgid "" "An optional, comma-separated list of parameters that may be passed to the " "function" @@ -586,9 +586,8 @@ msgstr "" "параметрів." #: ../../src/basics/functions.txt:365 -#, fuzzy msgid "Argument tuple packing" -msgstr "Пакування кортежів аргументів" +msgstr "Пакування аргументів до кортежа" #: ../../src/basics/functions.txt:367 msgid "" @@ -611,7 +610,6 @@ msgstr "" "стало практично стандартом." #: ../../src/basics/functions.txt:381 -#, fuzzy msgid "Argument tuple unpacking" msgstr "Розпакування кортежу аргументів" @@ -641,9 +639,8 @@ msgid "You can even do tuple packing and unpacking at the same time." msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." #: ../../src/basics/functions.txt:426 -#, fuzzy msgid "Argument dictionary packing" -msgstr "Пакування словника аргументів" +msgstr "Пакування аргументів до словника" #: ../../src/basics/functions.txt:428 msgid "" @@ -668,9 +665,8 @@ msgstr "" "є скороченням від *keyword args*) є майже стандартним." #: ../../src/basics/functions.txt:448 -#, fuzzy msgid "Argument dictionary unpacking" -msgstr "Розпакування словника аргументів" +msgstr "Розапакування аргументів зі словника" #: ../../src/basics/functions.txt:450 msgid "" @@ -683,3 +679,73 @@ msgstr "" "перед аргументом у виклику функції, вона вказує на те, що аргумент є " "словником, який слід розпакувати, а отримані елементи передати у функцію як " "аргументи ключових слів." + +#: ../../src/basics/functions.txt:468 +msgid "Lambda functions" +msgstr "Лямбда функції" + +#: ../../src/basics/functions.txt:470 +msgid "" +"Lambda expressions in Python and other programming languages have their " +"roots in lambda calculus, a model of computation invented by Alonzo Church. " +"Python is not inherently a functional language, but it adopted some " +"functional concepts early on. In January 1994, ``map()``, ``filter()``, " +"``reduce()``, and the lambda operator were added to the language." +msgstr "" +"Лямбда-вирази в Python та інших мовах програмування беруть свій початок у " +"лямбда-обчисленні - моделі обчислень, винайденій Алонзо Черчем. За своєю " +"суттю Python не є функціональною мовою, але вона рано перейняла деякі " +"функціональні концепції. У січні 1994 року до мови було додано ``map()``, " +"``filter()``, ``reduce()`` та лямбда-оператор." + +#: ../../src/basics/functions.txt:476 +msgid "General lambda function syntax is:" +msgstr "Загальний синтаксис лямбда-функції такий:" + +#: ../../src/basics/functions.txt:485 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/basics/functions.txt:491 +msgid "````" +msgstr "````" + +#: ../../src/basics/functions.txt:491 +msgid "A valid Python expression; return statement" +msgstr "Валідний вираз Python; оператор повернення" + +#: ../../src/basics/functions.txt:502 +msgid "" +"The code sample above demonstrates the ``get_fullname`` Python function and " +"its lambda version. A lambda form presents syntactic distinctions from a " +"normal function. In particular, a lambda function has the following " +"characteristics:" +msgstr "" +"Наведений вище приклад коду демонструє функцію Python ``get_fullname`` та її " +"лямбда-версію. Лямбда-форма має синтаксичні відмінності від звичайної " +"функції. Зокрема, лямбда-функція має наступні характеристики:" + +#: ../../src/basics/functions.txt:506 +msgid "" +"It can only contain expressions and can’t include statements in its body." +msgstr "Він може містити лише вирази і не може включати в себе оператори." + +#: ../../src/basics/functions.txt:507 +msgid "It is written as a single line of execution." +msgstr "Він написаний у вигляді одного рядка виконання." + +#: ../../src/basics/functions.txt:508 +msgid "It does not support type annotations." +msgstr "Він не підтримує анотації типів." + +#: ../../src/basics/functions.txt:509 +msgid "" +"It can be immediately invoked (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." +msgstr "" +"Її можна негайно викликати (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." + +#: ../../src/basics/functions.txt:517 +msgid "Classic functional constructs" +msgstr "Класичні функціональні конструкції" From 02bbf299d8d3b901e0e206c6bd12a42cd57b3483 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 03:41:37 +0300 Subject: [PATCH 220/689] Clean up todos --- src/basics/functions.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 00b6c36fa..1f3f1d186 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -23,8 +23,6 @@ encapsulate a specific task or related group of tasks. You may be familiar with some built-in functions like ``max``, ``min``, ``len`` etc. -.. todo: function definition - The usual syntax for defining a Python function is as follows: :: @@ -61,7 +59,6 @@ even if they're empty. Argument passing ================ -.. todo: function arguments (positional and key-word) More often, you want to **pass data into a function**. From 3f7e601536b6c7f3ffa65c341020986f006f04ef Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 17 Oct 2023 23:17:33 +0300 Subject: [PATCH 221/689] Add autotranslations (DeepL) for basics block --- .../uk/LC_MESSAGES/basics/bool_logic.po | 272 ++++++++++------ .../uk/LC_MESSAGES/basics/decorators.po | 198 +++++++----- .../uk/LC_MESSAGES/basics/stdtypes.po | 302 +++++++++++++----- .../uk/LC_MESSAGES/basics/variables.po | 74 +++-- 4 files changed, 568 insertions(+), 278 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po index 87a1dff07..d26d3cdc1 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po +++ b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"PO-Revision-Date: 2023-10-17 23:16+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,41 +20,49 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/bool_logic.txt:-1 +#, fuzzy msgid "this document covers usage of logic and comparison operators in Python" msgstr "" -"цей документ охоплює використання логіки та операторів порівняння в Python" +"у цьому документі розглядається використання логічних операторів та " +"операторів порівняння у Python" #: ../../src/basics/bool_logic.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/bool_logic.txt:-1 +#, fuzzy msgid "python, boolean, logic, comparison, operator" msgstr "python, boolean, logic, comparison, operator" #: ../../src/basics/bool_logic.txt:14 +#, fuzzy msgid "Boolean Logic" msgstr "Булева Логіка" #: ../../src/basics/bool_logic.txt:20 +#, fuzzy msgid "" "`George Boole`_ put together what is now known as `Boolean algebra`_, which " "relies on **true** and **false** values and define a set of boolean " "operations: **not**, **and**, and **or**." msgstr "" -"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " -"спирається на значення **true** і **false** і визначає набір логічних " -"операцій: **not**, **and** і **or**." +"`Джордж Буль`_ створив те, що зараз відоме як `булева алгебра`_, яка " +"спирається на значення **істина** та **хибність** і визначає набір булевих " +"операцій: **не**, **і** та **або**." #: ../../src/basics/bool_logic.txt:24 +#, fuzzy msgid "" "These Boolean values and operators are helpful in programming because they " "help you decide the course of action in your programs." msgstr "" -"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " -"допомагають визначити курс дій у ваших програмах." +"Ці булеві значення та оператори корисні у програмуванні, оскільки вони " +"допомагають вам визначати порядок дій у ваших програмах." #: ../../src/basics/bool_logic.txt:27 +#, fuzzy msgid "" "The **Python boolean** type is one of Python's built-in data types. It's " "used to represent the truth value of an expression. For example, the " @@ -63,24 +71,27 @@ msgid "" "programming well in Python." msgstr "" "Тип **Python boolean** є одним із вбудованих типів даних Python. Він " -"використовується для представлення істиності значення виразу. Наприклад, " -"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " -"того, як поводяться логічні значення Python, є важливим для якісного " -"програмування на Python." +"використовується для представлення значення істинності виразу. Наприклад, " +"вираз ``1 < 2`` є ``True`` (істине), тоді як вираз ``0 == 1`` є ``False`` " +"(хибне). Розуміння того, як поводяться булеві значення у Python, є важливим " +"для якісного програмування на Python." #: ../../src/basics/bool_logic.txt:34 +#, fuzzy msgid "Understanding Boolean" -msgstr "Розбираємось з Логічним типом даних" +msgstr "Розуміння булевих функцій" #: ../../src/basics/bool_logic.txt:36 +#, fuzzy msgid "The Boolean type has only two possible values:" -msgstr "Логічний тип має лише два можливих значення:" +msgstr "Тип Boolean має лише два можливих значення:" #: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:119 #: ../../src/basics/bool_logic.txt:121 ../../src/basics/bool_logic.txt:147 #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:189 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 +#, fuzzy msgid "``True``" msgstr "``True``" @@ -89,14 +100,17 @@ msgstr "``True``" #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 +#, fuzzy msgid "``False``" msgstr "``False``" #: ../../src/basics/bool_logic.txt:41 +#, fuzzy msgid "No other value will have ``bool`` as it type." -msgstr "Жодне інше значення не матиме тип ``bool``." +msgstr "Жодне інше значення не буде мати тип ``bool``." #: ../../src/basics/bool_logic.txt:50 +#, fuzzy msgid "" "The type ``bool`` is **built-in**, meaning it's always available in Python. " "``True`` and ``False`` are keywords in Python and can't be used as variable " @@ -104,51 +118,57 @@ msgid "" "``bool``, however this is considered bad style." msgstr "" "Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " -"і ``False`` є ключовими словами в Python і не можуть використовуватися як " -"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " -"значення, однак це вважається поганим стилем." +"та ``False`` є ключовими словами у Python і не можуть використовуватися як " +"імена змінних, але тип ``bool`` не є таким, і його можна присвоювати імені " +"``bool``, однак це вважається поганим стилем." #: ../../src/basics/bool_logic.txt:56 +#, fuzzy msgid "Boolean as numbers" -msgstr "Boolean як число" +msgstr "Булеві як числа" #: ../../src/basics/bool_logic.txt:58 +#, fuzzy msgid "" "Booleans are a subtype of **numeric** type in Python. This means they're " "numbers for all intents and purposes. In other words, you can apply " "arithmetic operations to Boolean, and you can also compare them to numbers. " "``True`` value is treated to be 1, and ``False`` value is treated to be 0." msgstr "" -"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " -"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " -"арифметичні операції до логічних значень, а також порівнювати їх із числами. " -"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " -"0." +"Булеві вирази є підтипом **числового** типу у Python. Це означає, що вони є " +"числами за всіма ознаками. Іншими словами, до булевих типів можна " +"застосовувати арифметичні операції, а також порівнювати їх з числами. " +"Значення ``Істина`` розглядається як 1, а значення ``Неправда`` " +"розглядається як 0." #: ../../src/basics/bool_logic.txt:63 +#, fuzzy msgid "There aren't many uses of the numerical nature of Boolean values." -msgstr "" -"Числовій природі логічних значень можна знайти не так багато застосунків." +msgstr "Існує не так багато застосувань числової природи булевих значень." #: ../../src/basics/bool_logic.txt:66 +#, fuzzy msgid "Truth value testing" msgstr "Перевірка істинності" #: ../../src/basics/bool_logic.txt:68 +#, fuzzy msgid "" "Any object can be tested for truth value. By default an object considered " "``True``, unless its class defines either. Here are most of built-in objects " "considered ``False``:" msgstr "" "Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " -"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " -"вбудованих об'єктів, які вважаються ``False``:" +"вважається ``Істинним``, якщо його клас не визначає іншого значення. " +"Більшість вбудованих об'єктів вважаються такими, що мають значення ``False``:" #: ../../src/basics/bool_logic.txt:72 +#, fuzzy msgid "constant values: ``None`` and ``False``" -msgstr "константи: ``None`` та ``False``" +msgstr "константні значення: ``None`` та ``False``" #: ../../src/basics/bool_logic.txt:73 +#, fuzzy msgid "" "zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " "``Fraction(0, 1)``" @@ -157,6 +177,7 @@ msgstr "" "``Fraction(0, 1)``" #: ../../src/basics/bool_logic.txt:75 +#, fuzzy msgid "" "empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " "``range(0)``." @@ -165,173 +186,207 @@ msgstr "" "``set()``, ``range(0)``." #: ../../src/basics/bool_logic.txt:80 +#, fuzzy msgid "" "If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " "as ``False``." msgstr "" -"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " -"``bool`` як ``False``." +"Якщо ``len(something)`` дорівнює 0, то ``something`` приводиться до ``bool`` " +"як ``False``." #: ../../src/basics/bool_logic.txt:84 +#, fuzzy msgid "Boolean comparison" -msgstr "Логічне Порівняння" +msgstr "Логічне порівняння" #: ../../src/basics/bool_logic.txt:86 +#, fuzzy msgid "Python provides 3 logical operators:" -msgstr "Python надає 3 логічних оператори:" +msgstr "У мові Python передбачено 3 логічних оператори:" #: ../../src/basics/bool_logic.txt:92 ../../src/basics/bool_logic.txt:226 +#, fuzzy msgid "Operator" msgstr "Оператор" #: ../../src/basics/bool_logic.txt:92 +#, fuzzy msgid "Logic operator" msgstr "Логічний оператор" #: ../../src/basics/bool_logic.txt:94 +#, fuzzy msgid "``not``" -msgstr "``not``" +msgstr "ні" #: ../../src/basics/bool_logic.txt:94 +#, fuzzy msgid "Negation" msgstr "Заперечення" #: ../../src/basics/bool_logic.txt:96 +#, fuzzy msgid "``and``" -msgstr "``and``" +msgstr "і.." #: ../../src/basics/bool_logic.txt:96 +#, fuzzy msgid "Conjunction" msgstr "Кон'юнкція" #: ../../src/basics/bool_logic.txt:98 +#, fuzzy msgid "``or``" -msgstr "``or``" +msgstr "або.." #: ../../src/basics/bool_logic.txt:98 +#, fuzzy msgid "Disjunction" msgstr "Диз'юнкція" #: ../../src/basics/bool_logic.txt:101 +#, fuzzy msgid "" "With these operators, you can build expressions by connecting Boolean " "expressions with each other. These operators are **keywords** of the " "language, so you cannot use them as identifiers without causing a " "*SyntaxError*." msgstr "" -"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " -"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " -"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." +"За допомогою цих операторів ви можете створювати вирази, з'єднуючи булеві " +"вирази один з одним. Ці оператори є **ключовими словами** мови, тому ви не " +"можете використовувати їх як ідентифікатори, не викликавши *SyntaxError*." #: ../../src/basics/bool_logic.txt:106 +#, fuzzy msgid "Getting started with ``not`` operator" msgstr "Початок роботи з оператором ``not``" #: ../../src/basics/bool_logic.txt:108 +#, fuzzy msgid "" "The ``not`` operator is the Boolean or logic operator that implements " "negation in Python. It's **unary**, which means that it takes only one " "**operand**. The operand can be a Boolean expression or any Python object. " "The task of ``not`` is to reverse the truth value of its operand." msgstr "" -"Оператор ``not`` є логічним або логічним оператором, який реалізує " -"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " -"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " -"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " -"операнда." +"Оператор ``not`` - це булевий або логічний оператор, який реалізує " +"заперечення у Python. Він є **унарним**, що означає, що він приймає лише " +"один **операнд**. Операндом може бути булевий вираз або будь-який об'єкт " +"Python. Завдання ``not`` полягає в тому, щоб змінити значення істинності " +"свого операнда на протилежне." #: ../../src/basics/bool_logic.txt:113 +#, fuzzy msgid "not operator truth table" msgstr "таблиця істинності оператора not" #: ../../src/basics/bool_logic.txt:117 +#, fuzzy msgid "``operand``" -msgstr "``operand``" +msgstr "``операнд``" #: ../../src/basics/bool_logic.txt:117 +#, fuzzy msgid "``not operand``" -msgstr "``not operand``" +msgstr "``not операнд``" #: ../../src/basics/bool_logic.txt:124 +#, fuzzy msgid "This functionality makes it worthwhile in several situations:" -msgstr "Ця функція доцільна в кількох ситуаціях:" +msgstr "Ця функціональність робить його корисним у кількох ситуаціях:" #: ../../src/basics/bool_logic.txt:127 +#, fuzzy msgid "" "Checking **unmet conditions** in the context of ``if`` statements and " "``while`` loops" msgstr "" -"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " +"Перевірка **невиконання умов** у контексті операторів ``if`` та циклів " "``while``" #: ../../src/basics/bool_logic.txt:129 +#, fuzzy msgid "**Inverting the truth value** of an object or expression" -msgstr "**Інвертування значення істинності** об'єкта чи виразу" +msgstr "**Інвертування значення істинності** об'єкта або виразу" #: ../../src/basics/bool_logic.txt:130 +#, fuzzy msgid "Checking if a **value is not in a given container**" -msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" +msgstr "Перевірка, чи **значення не знаходиться у заданому контейнері**" #: ../../src/basics/bool_logic.txt:131 +#, fuzzy msgid "Checking for an **object's identity**" msgstr "Перевірка **ідентичності об'єкта**" #: ../../src/basics/bool_logic.txt:134 +#, fuzzy msgid "Getting started with ``and`` operator" msgstr "Початок роботи з оператором ``and``" #: ../../src/basics/bool_logic.txt:136 +#, fuzzy msgid "" "Python's ``and`` operator is **binary**, which means it takes two " "**operands**. The operands in an ``and`` expression are commonly known as " "*conditions*. The result of the operator depends on the truth values of its " "operands. It'll be ``True`` if **both** are true." msgstr "" -"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " -"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " -"Результат оператора залежить від істинних значень його операндів. Це буде " -"``True``, якщо **обидва** є істинними." +"Оператор ``and`` у мові Python є **двійковим**, що означає, що він приймає " +"два **операнди**. Операнди у виразі ``і`` зазвичай називають *умовами*. " +"Результат оператора залежить від значень істинності його операндів. " +"Результат буде ``Істина``, якщо **обоє** є істинними." #: ../../src/basics/bool_logic.txt:141 +#, fuzzy msgid "and operator truth table" msgstr "таблиця істинності оператора and" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +#, fuzzy msgid "``operand_1``" msgstr "``operand_1``" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +#, fuzzy msgid "``operand_2``" msgstr "``operand_2``" #: ../../src/basics/bool_logic.txt:145 +#, fuzzy msgid "``operand_1 and operand_2``" msgstr "``operand_1 and operand_2``" #: ../../src/basics/bool_logic.txt:156 +#, fuzzy msgid "" "``and`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``and`` працює не тільки з операндами логічного типу. Його " -"поведінка:" +msgstr "``and`` працює не тільки з операндами булевого типу. Це поведінка:" #: ../../src/basics/bool_logic.txt:159 +#, fuzzy msgid "evaluate 1st operand; return it, if it's ``False`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" +msgstr "" +"обчислити 1-й операнд; повернути його, якщо він рівний ``False`` і завершити" #: ../../src/basics/bool_logic.txt:160 +#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" +msgstr "" +"обчислити 2-й операнд; повернути його, якщо він рівний ``False`` і завершити" #: ../../src/basics/bool_logic.txt:161 ../../src/basics/bool_logic.txt:203 +#, fuzzy msgid "return 2nd operand" msgstr "повернути 2-й операнд" #: ../../src/basics/bool_logic.txt:175 +#, fuzzy msgid "Getting started with ``or`` operator" msgstr "Початок роботи з оператором ``or``" #: ../../src/basics/bool_logic.txt:177 +#, fuzzy msgid "" "With Boolean ``or`` operator, you can connect two Boolean expressions into " "one compound expression. This makes ``or`` the **binary** operator. At least " @@ -339,170 +394,205 @@ msgid "" "considered ``True``, and it doesn't matter which. If both subexpressions are " "``False``, then the expression is ``False``." msgstr "" -"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " -"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " -"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " -"``True``, і не має значення який. Якщо обидва підвирази мають значення " -"``False``, тоді вираз є ``False``." +"За допомогою булевого оператора ``або`` ви можете об'єднати два булевих " +"вирази в один складений вираз. Це робить ``або`` **бінарним** оператором. " +"Принаймні один з підвиразів має бути ``True``, щоб складений вираз вважався " +"``True``, і не має значення, який саме. Якщо обидва під-вирази мають " +"значення ``False``, то вираз буде вважатися ``False``." #: ../../src/basics/bool_logic.txt:183 +#, fuzzy msgid "or operator truth table" msgstr "таблиця істинності оператора or" #: ../../src/basics/bool_logic.txt:187 +#, fuzzy msgid "``operand_1 or operand_2``" msgstr "``operand_1 or operand_2``" #: ../../src/basics/bool_logic.txt:198 +#, fuzzy msgid "" "``or`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" +msgstr "``or`` працює не тільки з операндами булевого типу. Це поведінка:" #: ../../src/basics/bool_logic.txt:201 +#, fuzzy msgid "evaluate 1st operand; return it, if it's ``True`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" +msgstr "" +"обчислити 1-й операнд; повернути його, якщо він рівний ``True`` і завершити" #: ../../src/basics/bool_logic.txt:202 +#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" +msgstr "" +"обчислити 2-й операнд; повернути його, якщо він рівний ``True`` і завершити" #: ../../src/basics/bool_logic.txt:217 +#, fuzzy msgid "Comparison" msgstr "Порівняння" #: ../../src/basics/bool_logic.txt:219 +#, fuzzy msgid "" "There are eight comparison operations in Python. They all have the same " "priority (which is higher than that of the Boolean operations)." msgstr "" -"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " -"(вищий, ніж у логічних операцій)." +"У мові Python існує вісім операцій порівняння. Всі вони мають однаковий " +"пріоритет (вищий, ніж у булевих операцій)." #: ../../src/basics/bool_logic.txt:222 +#, fuzzy msgid "Comparison operators" msgstr "Оператори порівняння" #: ../../src/basics/bool_logic.txt:226 +#, fuzzy msgid "Meaning" msgstr "Значення" #: ../../src/basics/bool_logic.txt:228 +#, fuzzy msgid "``<``" msgstr "``<``" #: ../../src/basics/bool_logic.txt:228 +#, fuzzy msgid "strictly less than" -msgstr "строго менше ніж" +msgstr "строго менше, ніж" #: ../../src/basics/bool_logic.txt:230 +#, fuzzy msgid "``<=``" msgstr "``<=``" #: ../../src/basics/bool_logic.txt:230 +#, fuzzy msgid "less than or equal" msgstr "менше або дорівнює" #: ../../src/basics/bool_logic.txt:232 +#, fuzzy msgid "``>``" msgstr "``>``" #: ../../src/basics/bool_logic.txt:232 +#, fuzzy msgid "strictly greater than" -msgstr "строго більше ніж" +msgstr "строго більше, ніж" #: ../../src/basics/bool_logic.txt:234 +#, fuzzy msgid "``>=``" msgstr "``>=``" #: ../../src/basics/bool_logic.txt:234 +#, fuzzy msgid "greater or equal" msgstr "більше або дорівнює" #: ../../src/basics/bool_logic.txt:236 +#, fuzzy msgid "``==``" msgstr "``==``" #: ../../src/basics/bool_logic.txt:236 +#, fuzzy msgid "equal (aka *equality* comparison)" -msgstr "дорівнює (також відоме як порівняння *equality*)" +msgstr "дорівнює (також відоме як *equality* порівняння)" #: ../../src/basics/bool_logic.txt:238 +#, fuzzy msgid "``!=``" msgstr "``!=``" #: ../../src/basics/bool_logic.txt:238 +#, fuzzy msgid "not equal" msgstr "не дорівнює" #: ../../src/basics/bool_logic.txt:240 +#, fuzzy msgid "``is``" -msgstr "``is``" +msgstr "це.." #: ../../src/basics/bool_logic.txt:240 +#, fuzzy msgid "object identity" -msgstr "ідентичність об'єкта" +msgstr "ідентичність об'єктів" #: ../../src/basics/bool_logic.txt:242 +#, fuzzy msgid "``is not``" -msgstr "``is not``" +msgstr "не є" #: ../../src/basics/bool_logic.txt:242 +#, fuzzy msgid "negated object identity" -msgstr "заперечена ідентичність об'єкта" +msgstr "заперечення ідентичності об'єкта" #: ../../src/basics/bool_logic.txt:245 +#, fuzzy msgid "" "Each of these comparison operators return a Boolean value, it's always " "``True`` or ``False``." msgstr "" -"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " -"``True`` або ``False``." +"Кожен з цих операторів порівняння повертає булеве значення, завжди ``True`` " +"або ``False``." #: ../../src/basics/bool_logic.txt:248 +#, fuzzy msgid "" "You can chain comparison operators together: ``x < y < z`` is equal to ``x < " "y and y < z``." msgstr "" -"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " -"< z``." +"Ви можете з'єднувати оператори порівняння ланцюжком: ``x < y < z`` дорівнює " +"``x < y та y < z``." #: ../../src/basics/bool_logic.txt:252 +#, fuzzy msgid "Equality vs Identity" -msgstr "Рівність та Ідентичність" +msgstr "Рівність vs Ідентичністі" #: ../../src/basics/bool_logic.txt:254 +#, fuzzy msgid "" "It's easier to understand the difference between those by asking the " "question each answers to." msgstr "" -"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " -"відповідає." +"Зрозуміти різницю між ними простіше, задавши питання, на яке відповідає " +"кожна з них." #: ../../src/basics/bool_logic.txt:257 +#, fuzzy msgid "The question for ``==`` (*equality*) is:" -msgstr "Питання для ``==`` (*equality*) таке:" +msgstr "Питання для ``==`` (*рівності*) полягає у наступному:" #: ../../src/basics/bool_logic.txt:259 +#, fuzzy msgid "Is object on the left **equal** to the object on the right" -msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" +msgstr "Чи є об'єкт зліва **рівним** об'єкту справа" #: ../../src/basics/bool_logic.txt:261 +#, fuzzy msgid "The question for ``is`` (*identity*) is:" -msgstr "Питання для ``is`` (*identity*) таке:" +msgstr "Питання для ``is`` (*ідентичність*) полягає в наступному:" #: ../../src/basics/bool_logic.txt:263 +#, fuzzy msgid "Is object on the left **the same** as the object on the right" -msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" +msgstr "Чи є об'єкт ліворуч **таким самим**, як і об'єкт праворуч" #: ../../src/basics/bool_logic.txt:265 +#, fuzzy msgid "" "For example, if there are two cars of the same model, same color etc. in " "front of you - these cars are equal, but they aren't ident to each other. " "But if you are shown two pictures of the same car, you understand that the " "cars on those pictures are the same object." msgstr "" -"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " -"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " -"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " -"одним і тим же об'єктом." +"Наприклад, якщо перед вами стоять два автомобілі однієї моделі, одного " +"кольору і т.д. - ці автомобілі рівні, але вони не ідентичні один одному. Але " +"якщо вам показують дві фотографії однієї і тієї ж машини, ви розумієте, що " +"машини на цих фотографіях - це один і той же об'єкт." diff --git a/src/_locales/uk/LC_MESSAGES/basics/decorators.po b/src/_locales/uk/LC_MESSAGES/basics/decorators.po index 4fa2fd4d8..77d39c0aa 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/decorators.po +++ b/src/_locales/uk/LC_MESSAGES/basics/decorators.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"PO-Revision-Date: 2023-10-17 23:16+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,72 +20,83 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/decorators.txt:-1 +#, fuzzy msgid "Python decorators" msgstr "Декоратори в Python" #: ../../src/basics/decorators.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/decorators.txt:-1 +#, fuzzy msgid "python, basics, decorators" msgstr "python, basics, decorators" #: ../../src/basics/decorators.txt:11 +#, fuzzy msgid "Decorators" msgstr "Декоратори" #: ../../src/basics/decorators.txt:13 +#, fuzzy msgid "" "Decorators provide a simple syntax for calling higher-order functions :cite:" "`realpython:decorators`." msgstr "" -"Декоратори забезпечують простий синтаксис для виклику функцій вищого " -"порядку :cite:`realpython:decorators`." +"Декоратори надають простий синтаксис для виклику функцій вищого порядку :" +"cite:`realpython:decorators`." #: ../../src/basics/decorators.txt:18 +#, fuzzy msgid "There is some kind of misunderstanding in definitions." -msgstr "Є деяке непорозуміння у визначеннях." +msgstr "Існує певне непорозуміння у визначеннях." #: ../../src/basics/decorators.txt:20 +#, fuzzy msgid "" "**Decorator** is a function returning another function, usually applied as a " "function transformation using the ``@wrapper`` syntax :cite:`docs-python:" "term-decorator`." msgstr "" -"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " +"**Декоратор** - це функція, що повертає іншу функцію, зазвичай " "застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" "cite:`docs-python:term-decorator`." #: ../../src/basics/decorators.txt:24 +#, fuzzy msgid "" "However, that's no quit enough to describe it. The more complete definition " "is:" -msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" +msgstr "Однак цього недостатньо, щоб описати його. Більш повне визначення:" #: ../../src/basics/decorators.txt:27 +#, fuzzy msgid "" "**Decorator** is a structural design pattern that lets you attach new " "behaviors to objects by placing these objects inside special wrapper objects " "that contain the behaviors :cite:`refactoring.guru:decorator`." msgstr "" -"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " -"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " -"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." +"**Декоратор** -- це патерн структурного дизайну, який дозволяє додавати нові " +"поведінки до об'єктів, розміщуючи ці об'єкти всередині спеціальних обгорток, " +"які містять поведінку :cite:`refactoring.guru:decorator`." #: ../../src/basics/decorators.txt:31 +#, fuzzy msgid "" "Before you understand decorators, you must first understand how functions " "work." msgstr "" -"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " -"функції." +"Перш ніж розбиратися в декораторах, потрібно зрозуміти, як працюють функції." #: ../../src/basics/decorators.txt:35 +#, fuzzy msgid "First-class objects" msgstr "Об'єкти першого класу" #: ../../src/basics/decorators.txt:37 +#, fuzzy msgid "" "In Python functions are `first-class objects`_. Everything in Python is an " "object. Functions are objects too." @@ -94,10 +105,12 @@ msgstr "" "Функції також є об'єктами." #: ../../src/basics/decorators.txt:41 +#, fuzzy msgid "Inner functions" msgstr "Внутрішні функції" #: ../../src/basics/decorators.txt:43 +#, fuzzy msgid "" "Functions can be nested. This means it is possible to define functions " "inside other functions." @@ -106,10 +119,12 @@ msgstr "" "всередині інших функцій." #: ../../src/basics/decorators.txt:46 +#, fuzzy msgid "Nested functions example" msgstr "Приклад вкладених функцій" #: ../../src/basics/decorators.txt:60 +#, fuzzy msgid "" "The order in which inner functions are defined no matters. The function " "definition does not execute the function body; this gets executed only when " @@ -119,103 +134,116 @@ msgid "" "cause ``NameError`` exception." msgstr "" "Порядок визначення внутрішніх функцій не має значення. Визначення функції не " -"виконує тіло функції; це виконується лише під час виклику функції. Крім " -"того, внутрішні функції не визначені, доки не буде викликана батьківська " -"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " -"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " -"``NameError``." +"виконує тіло функції; воно виконується лише під час виклику функції. Крім " +"того, внутрішні функції не визначаються до виклику батьківської функції. " +"Вони локально масштабуються до свого батька. Спроба викликати функцію " +"``heapify`` поза ``heap_sort`` призведе до виключення ``NameError``." #: ../../src/basics/decorators.txt:68 +#, fuzzy msgid "Functions are objects" msgstr "Функції є об'єктами" #: ../../src/basics/decorators.txt:70 +#, fuzzy msgid "" "This means functions can be passed around and used as arguments, just like " "any other object (e.g. *int*, *str* etc.)." msgstr "" -"Це означає, що функції можна передавати й використовувати як аргументи, як і " -"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." +"Це означає, що функції можна передавати і використовувати як аргументи так " +"само, як і будь-які інші об'єкти (наприклад, *int*, *str* тощо)." #: ../../src/basics/decorators.txt:95 +#, fuzzy msgid "Returning functions" msgstr "Повернення функцій" #: ../../src/basics/decorators.txt:97 +#, fuzzy msgid "" "Since function can be passed as an argument, it may be returned from another " "function." msgstr "" -"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " -"функції." +"Оскільки функція може бути передана як аргумент, вона може бути повернута з " +"іншої функції." #: ../../src/basics/decorators.txt:120 +#, fuzzy msgid "``parent`` returns functions themselves, there are no parentheses." -msgstr "``parent`` повертає самі функції, тут нема дужок." +msgstr "``parent`` повертає самі функції, дужок немає." #: ../../src/basics/decorators.txt:122 +#, fuzzy msgid "" "After running the code snippet above, ``first`` refers the ``first_child`` " "function from the inner ``parent`` scope. From now it can be used to call " "the target function it refers." msgstr "" -"Після виконання наведеного вище фрагмента коду ``first`` посилається на " -"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " -"можна використовувати для виклику цільової функції, на яку він посилається." +"Після виконання наведеного вище фрагмента коду, ``first`` звертається до " +"функції ``first_child`` з внутрішньої області видимості ``parent``. Тепер її " +"можна використовувати для виклику цільової функції, на яку вона посилається." #: ../../src/basics/decorators.txt:134 +#, fuzzy msgid "Simple decorators" msgstr "Прості декоратори" #: ../../src/basics/decorators.txt:136 +#, fuzzy msgid "" "Now you're ready to move on and see the magical beast that is the Python " "decorators. Let's start with a simple example:" msgstr "" -"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " +"Тепер ви готові рухатися далі і побачити чарівного звіра, яким є декоратори " "Python. Почнемо з простого прикладу:" #: ../../src/basics/decorators.txt:154 +#, fuzzy msgid "Running function:" msgstr "Запуск функцій:" #: ../../src/basics/decorators.txt:165 +#, fuzzy msgid "" "The common way to use decorators is to replace the original function with a " "decorated one:" msgstr "" -"Поширеним способом використання декораторів є заміна оригінальної функції на " -"декоровану:" +"Найпоширеніший спосіб використання декораторів - це заміна оригінальної " +"функції на декоровану:" #: ../../src/basics/decorators.txt:176 +#, fuzzy msgid "" "``say_hello`` function is the reference to the ``decorator.." "wrapper``, which itself is bound to the original ``say_hello`` function. " "There is a syntactic sugar to do this, called *pie-syntax*. The following " "example does exact the same things as the first decorator example:" msgstr "" -"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " -"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " -"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " -"ті самі речі, що й перший приклад декоратора:" +"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, яка " +"сама зв'язана з оригінальною функцією ``say_hello``. Для цього існує " +"синтаксичний цукор, який називається *pie-синтаксис*. Наступний приклад " +"робить те саме, що і перший приклад декоратора:" #: ../../src/basics/decorators.txt:198 +#, fuzzy msgid "" "There is no way to *undecorate* object in Python. Once something is bound to " "the decorator's wrapper - it is decorated forever." msgstr "" -"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " -"обгортки декоратора - воно прикрашене назавжди." +"У Python не існує способу *віддекорувати* об'єкт. Як тільки щось прив'язано " +"до обгортки декоратора - воно прикрашене назавжди." #: ../../src/basics/decorators.txt:201 +#, fuzzy msgid "" "A decorated function still remains a **function**. So, it can be decorated " "once more time again, and again, and again..." msgstr "" -"Декорована функція все ще залишається **функцією**. Отже, його можна " -"прикрашати ще раз, і ще, і ще..." +"Прикрашена функція все одно залишається **функцією**. Отже, її можна " +"прикрасити ще раз, і ще раз, і ще раз, і ще раз..." #: ../../src/basics/decorators.txt:253 +#, fuzzy msgid "" "\"Wrapper\" is the alternative nickname for the Decorator pattern that " "clearly expresses the main idea of the pattern. A wrapper is an object that " @@ -224,102 +252,116 @@ msgid "" "the wrapper may alter the result by doing something either before or after " "it passes the request to the target." msgstr "" -"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " -"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " +"\"Обгортка\" - це альтернативна назва шаблону \"Декоратор\", яка чітко " +"виражає основну ідею шаблону. Обгортка - це об'єкт, який можна зв'язати з " "деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " -"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " -"результат, зробивши щось до або після того, як вона передає запит цільовому " -"об'єкту." +"цільовий об'єкт, і делегує йому всі запити, які він отримує. Однак обгортка " +"може змінити результат, виконавши щось до або після передачі запиту " +"цільовому об'єкту." #: ../../src/basics/decorators.txt:261 +#, fuzzy msgid "Passing arguments to the wrapper" -msgstr "Передача аргументів до wrapper" +msgstr "Передача аргументів в обгортку" #: ../../src/basics/decorators.txt:263 +#, fuzzy msgid "" "Until now the examples use *simple* decorators. But what if the decorated " "function gets some arguments? This will cause ``TypeError`` exception that " "tell that \"arguments are missed\". This can be fixed with just passing " "arguments to the ``wrapper`` inner function." msgstr "" -"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " -"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " -"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " -"аргументи внутрішній функції ``wrapper``." +"Досі у прикладах використовувались *прості* декоратори. Але що, якщо " +"декорована функція отримає якісь аргументи? Це викличе виключення " +"``TypeError``, яке скаже, що \"аргументи пропущено\". Це можна виправити, " +"просто передавши аргументи у внутрішню функцію ``обгортки``." #: ../../src/basics/decorators.txt:289 +#, fuzzy msgid "" "If case you're trying to make a generic decorator, you may pass ``*args`` " "and ``**kwargs`` instead of exact arguments:" msgstr "" -"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " +"Якщо ви намагаєтеся створити узагальнений декоратор, ви можете передати " "``*args`` і ``**kwargs`` замість точних аргументів:" #: ../../src/basics/decorators.txt:308 +#, fuzzy msgid "Passing arguments to decorator" -msgstr "Передача аргументів декоратору" +msgstr "Передача аргументів до декоратора" #: ../../src/basics/decorators.txt:310 +#, fuzzy msgid "" "At last it's time to know how to pass arguments to the decorator. Here is a " "simple implementation of ``defer`` decorator which deferred the function " "execution for some time:" msgstr "" -"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " -"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " -"час:" +"Нарешті прийшов час дізнатися, як передавати аргументи декоратору. Ось " +"проста реалізація декоратора ``defer``, який відкладає виконання функції на " +"деякий час:" #: ../../src/basics/decorators.txt:353 +#, fuzzy msgid "Class decorators" msgstr "Декоратори класів" #: ../../src/basics/decorators.txt:355 +#, fuzzy msgid "" "There are some pre-defined decorators exists for usage together with " "classes. They are:" msgstr "" -"Існують деякі попередньо визначені декоратори для використання разом із " -"класами. Це:" +"Існує декілька попередньо визначених декораторів для використання разом з " +"класами. Ось вони:" #: ../../src/basics/decorators.txt:358 +#, fuzzy msgid "``classmethod``" msgstr "``classmethod``" #: ../../src/basics/decorators.txt:359 +#, fuzzy msgid "``staticmethod``" msgstr "``staticmethod``" #: ../../src/basics/decorators.txt:360 +#, fuzzy msgid "``property``" msgstr "``property``" #: ../../src/basics/decorators.txt:362 +#, fuzzy msgid "" "If you develop an intuitive understanding for their differences you'll be " "able to write object-oriented Python that communicates its intent more " "clearly and will be easier to maintain in the long run :cite:`realpython:" "methods-demystified`." msgstr "" -"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " -"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " -"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" +"Якщо ви розвинете інтуїтивне розуміння їх відмінностей, ви зможете писати " +"об'єктно-орієнтований Python, який більш чітко передає свої наміри і який " +"буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" "methods-demystified`." #: ../../src/basics/decorators.txt:368 +#, fuzzy msgid "Class methods" msgstr "Методи класу" #: ../../src/basics/decorators.txt:370 +#, fuzzy msgid "" "Instead of accepting a ``self`` parameter, class methods take a ``cls`` " "parameter that points to the class — and not the object instance — when the " "method is called." msgstr "" -"Замість того, щоб приймати параметр self, під час виклику методу методи " -"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " -"класу." +"Замість того, щоб приймати параметр ``self``, методи класу приймають " +"параметр ``cls``, який вказує на клас - а не на екземпляр об'єкта - під час " +"виклику методу." #: ../../src/basics/decorators.txt:374 +#, fuzzy msgid "" "Because the class method only has access to this ``cls`` argument, it can't " "modify object instance state. That would require access to ``self``. " @@ -327,65 +369,73 @@ msgid "" "instances of the class." msgstr "" "Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " -"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " -"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " -"екземплярів класу." +"змінювати стан екземпляра об'єкта. Для цього потрібен доступ до ``self``. " +"Однак, методи класу все ще можуть змінювати стан класу, який застосовується " +"до всіх екземплярів класу." #: ../../src/basics/decorators.txt:379 +#, fuzzy msgid "" "The common usage for ``classmethod`` is provide alternative initializers." msgstr "" -"Загальним використанням ``методи класу`` є надання альтернативних " +"Загальноприйнятим використанням ``classmethod`` є надання альтернативних " "ініціалізаторів." #: ../../src/basics/decorators.txt:382 +#, fuzzy msgid "Static methods" msgstr "Статичні методи" #: ../../src/basics/decorators.txt:384 +#, fuzzy msgid "" "This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " "course it's free to accept an arbitrary number of other parameters)." msgstr "" -"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " -"він може приймати будь-яку кількість інших параметрів)." +"Цей тип методів не приймає ні параметра ``self``, ні параметра ``cls`` (але, " +"звичайно, він може приймати довільну кількість інших параметрів)." #: ../../src/basics/decorators.txt:387 +#, fuzzy msgid "" "Therefore a static method can neither modify object state nor class state. " "Static methods are restricted in what data they can access - and they're " "primarily a way to namespace your methods." msgstr "" -"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " -"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " -"і вони, перш за все, є способом простору імен ваших методів." +"Тому статичний метод не може змінювати стан об'єкта або класу. Статичні " +"методи обмежені в доступі до даних, до яких вони можуть отримати доступ - і " +"це, насамперед, спосіб організації простору імен ваших методів." #: ../../src/basics/decorators.txt:391 +#, fuzzy msgid "" "It's tricky to explain ``staticmethod`` usage. Almost always you can create " "a dedicated function instead of static method. But sometimes you need to " "bind some logic independent from class itself or its instances to a class - " "it common to encapsulate it with ``staticmethod``." msgstr "" -"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " -"створити спеціальну функцію замість статичного методу. Але іноді вам " -"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " -"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." +"Пояснити використання ``staticmethod`` досить складно. Майже завжди замість " +"статичного методу можна створити спеціальну функцію. Але іноді вам потрібно " +"прив'язати до класу деяку логіку, незалежну від самого класу або його " +"екземплярів, і тоді прийнято інкапсулювати її за допомогою ``staticmethod``." #: ../../src/basics/decorators.txt:397 +#, fuzzy msgid "Properties" msgstr "Властивості" #: ../../src/basics/decorators.txt:399 +#, fuzzy msgid "" "It's a way to bind a method name to access it as an attribute. Properties " "are **read-only** by default. This means a value cannot be assigned to " "``property member``." msgstr "" -"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " -"замовчуванням властивості доступні **лише для читання**. Це означає, що " -"значення не можна призначити ``члену властивості``." +"Це спосіб зв'язати ім'я методу для доступу до нього як до атрибуту. За " +"замовчуванням властивості доступні лише для читання. Це означає, що члену " +"властивості не можна присвоїти значення." #: ../../src/basics/decorators.txt:404 +#, fuzzy msgid "Some examples" msgstr "Деякі приклади" diff --git a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po index 01cdf3130..413e5dda3 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po +++ b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"PO-Revision-Date: 2023-10-17 23:16+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,38 +20,45 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/stdtypes.txt:-1 +#, fuzzy msgid "Python built-in types" msgstr "Вбудовані типи даних в Python" #: ../../src/basics/stdtypes.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/stdtypes.txt:-1 +#, fuzzy msgid "python, basics" msgstr "python, basics" #: ../../src/basics/stdtypes.txt:11 +#, fuzzy msgid "Built-in Types" -msgstr "Вбудовані типи" +msgstr "Вбудовані Типи" #: ../../src/basics/stdtypes.txt:13 +#, fuzzy msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " "instances and exceptions :cite:`docs-python:stdtypes`. This section covers " "only the most base of them. Others will be discussed in the future within " "their own topics." msgstr "" -"Основними вбудованими типами є числа, послідовності, відображення, класи, " -"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " -"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " -"власних тем." +"Основними вбудованими типами є числа, послідовності, словники, класи, " +"екземпляри та винятки :cite:`docs-python:stdtypes`. У цьому розділі " +"розглянуто лише найпростіші з них. Інші будуть розглянуті в майбутньому у " +"відповідних темах." #: ../../src/basics/stdtypes.txt:19 +#, fuzzy msgid "Numeric types" msgstr "Числові типи" #: ../../src/basics/stdtypes.txt:21 +#, fuzzy msgid "" "There are 3 distinct numeric types: *integers*, *floating point numbers*, " "and *complex numbers*. In addition, Booleans are a subtype of integers. " @@ -59,13 +66,14 @@ msgid "" "implemented using ``double`` in C. Complex numbers have a real and imaginary " "part, which are each a floating point number." msgstr "" -"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " -"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " -"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " -"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " -"кожна з яких є числом з плаваючою комою." +"Існує 3 різних числових типи: *цілі числа*, *числа з плаваючою комою* та " +"*комплексні числа*. Крім того, булеві числа є підтипом цілих чисел. Цілі " +"числа мають необмежену точність. Числа з плаваючою комою зазвичай " +"реалізуються за допомогою ``double`` у C. Комплексні числа мають дійсну та " +"уявну частини, кожна з яких є числом з плаваючою комою." #: ../../src/basics/stdtypes.txt:27 +#, fuzzy msgid "" "Numbers are created by numeric literals or as the result of built-in " "functions and operators. Unadorned integer literals (including hex, octal " @@ -76,85 +84,103 @@ msgid "" "number with real and imaginary parts." msgstr "" "Числа створюються за допомогою числових літералів або як результат " -"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " -"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " -"літерали, що містять десяткову кому або знак експоненти, дають числа з " -"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " +"вбудованих функцій та операторів. Цілі літерали без прикрас (включаючи " +"шістнадцяткові, вісімкові та двійкові числа) створюють цілі числа. Числові " +"літерали, що містять десяткову крапку або знак експоненти, дають числа з " +"плаваючою комою. Додавання ``j`` або ``J`` до числового літерала дає уявне " "число (комплексне число з нульовою дійсною частиною), яке ви можете додати " -"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " -"з дійсною та уявною частинами." +"до цілого числа або числа з плаваючою комою, щоб отримати комплексне число з " +"дійсною та уявною частинами." #: ../../src/basics/stdtypes.txt:36 +#, fuzzy msgid "Supported operations" -msgstr "Операції підтримки" +msgstr "Операції, які підтримуються" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 +#, fuzzy msgid "Operation" -msgstr "Операції" +msgstr "Операція" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 +#, fuzzy msgid "Result" msgstr "Результат" #: ../../src/basics/stdtypes.txt:41 +#, fuzzy msgid "``x + y``" msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:41 +#, fuzzy msgid "sum of *x* and *y*" msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:43 +#, fuzzy msgid "``x - y``" msgstr "``x - y``" #: ../../src/basics/stdtypes.txt:43 +#, fuzzy msgid "difference of *x* and *y*" msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:45 +#, fuzzy msgid "``x * y``" msgstr "``x * y``" #: ../../src/basics/stdtypes.txt:45 +#, fuzzy msgid "product of *x* and *y*" msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:47 +#, fuzzy msgid "``x / y``" -msgstr "``x / y``" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:47 +#, fuzzy msgid "quotient of *x* and *y*" msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:49 +#, fuzzy msgid "``x // y``" -msgstr "``x // y``" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:49 +#, fuzzy msgid "floored quotient of *x* and *y*" msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:51 +#, fuzzy msgid "``x % y``" -msgstr "``x % y``" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:51 +#, fuzzy msgid "remainder of ``x / y``" msgstr "залишок від ділення ``x / y``" #: ../../src/basics/stdtypes.txt:53 +#, fuzzy msgid "``-x``" msgstr "``-x``" #: ../../src/basics/stdtypes.txt:53 +#, fuzzy msgid "*x* negated" msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:55 +#, fuzzy msgid "``+x``" msgstr "``+x``" @@ -164,96 +190,115 @@ msgid "*x* unchanged" msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:57 +#, fuzzy msgid "``abs(x)``" msgstr "``abs(x)``" #: ../../src/basics/stdtypes.txt:57 +#, fuzzy msgid "absolute value or magnitude of *x*" msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:59 +#, fuzzy msgid "``int(x)``" msgstr "``int(x)``" #: ../../src/basics/stdtypes.txt:59 +#, fuzzy msgid "*x* converted to integer" -msgstr "*x* перетворено на ціле число" +msgstr "*x* перетворено в ціле число" #: ../../src/basics/stdtypes.txt:61 +#, fuzzy msgid "``float(x)``" msgstr "``float(x)``" #: ../../src/basics/stdtypes.txt:61 +#, fuzzy msgid "*x* converted to floating point" -msgstr "*x* перетворено на число з плаваючою комою" +msgstr "*x* перетворено у число з плаваючою комою" #: ../../src/basics/stdtypes.txt:63 +#, fuzzy msgid "``complex(re, im)``" msgstr "``complex(re, im)``" #: ../../src/basics/stdtypes.txt:63 +#, fuzzy msgid "" "a complex number with real part *re*, imaginary part *im*. *im* defaults to " "zero." msgstr "" -"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " -"замовчуванням на нуль." +"комплексне число з дійсною частиною *re* та уявною частиною *im*. За " +"замовчуванням *im* дорівнює нулю." #: ../../src/basics/stdtypes.txt:66 +#, fuzzy msgid "``divmod(x, y)``" msgstr "``divmod(x, y)``" #: ../../src/basics/stdtypes.txt:66 +#, fuzzy msgid "the pair ``(x // y, x % y)``" msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:68 +#, fuzzy msgid "``pow(x, y)`` ``x ** y``" msgstr "``pow(x, y)`` ``x ** y``" #: ../../src/basics/stdtypes.txt:68 +#, fuzzy msgid "*x* to the power *y*" msgstr "*x* у степені *y*" #: ../../src/basics/stdtypes.txt:72 +#, fuzzy msgid "" "``x // y`` also referred to as integer division. The resultant value is a " "whole integer, through the result's type is not necessarily int. The result " "is always rounded towards minus infinity: ``1 // 2`` is ``0``" msgstr "" -"``x // y`` також називають цілим діленням. Результуюче значення є цілим " -"числом, через тип результату не обов'язково int. Результат завжди " -"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" +"``x // y`` також називається цілочисельним діленням. Значення результату є " +"цілим числом, оскільки тип результату не обов'язково int. Результат завжди " +"округлюється до мінус нескінченності: ``1 // 2`` є ``0``" #: ../../src/basics/stdtypes.txt:77 +#, fuzzy msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " "optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " "and negative infinity." msgstr "" "``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " -"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " -"позитивна та негативна нескінченність." +"префіксом \"+\" або \"-\" для :abbr:`NaN(Not a Number)`` та додатної і " +"від'ємної нескінченності." #: ../../src/basics/stdtypes.txt:82 +#, fuzzy msgid "Code examples" msgstr "Приклади коду" #: ../../src/basics/stdtypes.txt:84 +#, fuzzy msgid "Integer numbers" msgstr "Цілі числа" #: ../../src/basics/stdtypes.txt:98 +#, fuzzy msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: ../../src/basics/stdtypes.txt:114 ../../src/basics/stdtypes.txt:187 #: ../../src/basics/stdtypes.txt:295 ../../src/basics/stdtypes.txt:304 #: ../../src/basics/stdtypes.txt:333 +#, fuzzy msgid "Value comparisons" -msgstr "Порівняння цінностей" +msgstr "Порівняння значень" #: ../../src/basics/stdtypes.txt:116 +#, fuzzy msgid "" "Numbers of built-in numeric types can be compared within and across their " "types (with the restriction that complex numbers do not support order " @@ -261,38 +306,43 @@ msgid "" "mathematically correct without loss of precision." msgstr "" "Числа вбудованих числових типів можна порівнювати всередині та між типами (з " -"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " -"залучених типів вони порівняються математично правильно без втрати точності." +"обмеженням, що комплексні числа не підтримують порівняння порядків). У межах " +"відповідних типів вони порівнюються математично коректно без втрати точності." #: ../../src/basics/stdtypes.txt:121 +#, fuzzy msgid "" "The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." "Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" "number value is false." msgstr "" -"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " -"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " -"є хибним." +"Значення \"не-число\" ``float(\"NaN\")`` та ``decimal.Decimal('NaN')`` є " +"спеціальними. Будь-яке впорядковане порівняння числа зі значенням \"не-" +"число\" є хибним." #: ../../src/basics/stdtypes.txt:125 +#, fuzzy msgid "Sequence types" msgstr "Типи послідовностей" #: ../../src/basics/stdtypes.txt:127 +#, fuzzy msgid "" "There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " "Additional sequence types tailored for processing of binary data and text " "strings are described in dedicated sections." msgstr "" -"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " -"Додаткові типи послідовностей, призначені для обробки двійкових даних і " -"текстових рядків, описані у інших розділах." +"Існує 3 основних типи послідовностей: *списки*, *кортежі* та *об'єкти " +"діапазону*. Додаткові типи послідовностей, призначені для обробки двійкових " +"даних і текстових рядків, описано у відповідних розділах." #: ../../src/basics/stdtypes.txt:132 +#, fuzzy msgid "Lists" msgstr "Списки" #: ../../src/basics/stdtypes.txt:134 +#, fuzzy msgid "" "Lists are mutable sequences, typically used to store collections of items. " "They may be constructed in several ways:" @@ -302,11 +352,13 @@ msgstr "" "способами:" #: ../../src/basics/stdtypes.txt:137 +#, fuzzy msgid "using a pair of square brackets to denote the empty list: ``[]``" msgstr "" -"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" +"використовуючи пару квадратних дужок для позначення порожнього списку: ``[]``" #: ../../src/basics/stdtypes.txt:138 +#, fuzzy msgid "" "using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" @@ -314,18 +366,22 @@ msgstr "" "b, c]``" #: ../../src/basics/stdtypes.txt:139 +#, fuzzy msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" #: ../../src/basics/stdtypes.txt:140 +#, fuzzy msgid "using the type constructor: ``list()`` or ``list(iterable)``" -msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" +msgstr "використовуючи конструктор типу: ``list()`` або ``list(iterable)``" #: ../../src/basics/stdtypes.txt:143 +#, fuzzy msgid "Tuples" msgstr "Кортежі" #: ../../src/basics/stdtypes.txt:145 +#, fuzzy msgid "" "Tuples are immutable sequences, typically used to store collections of data " "or for cases where an immutable sequence of data is needed (such as allowing " @@ -333,38 +389,45 @@ msgid "" "number of ways:" msgstr "" "Кортежі - це незмінні послідовності, які зазвичай використовуються для " -"зберігання колекцій даних або для випадків, коли потрібна незмінна " -"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " -"``dict``). Вони можуть бути конструйовані декількома способами:" +"зберігання наборів даних або у випадках, коли потрібна незмінна " +"послідовність даних (наприклад, для зберігання в екземплярах ``set`` або " +"``dict``). Вони можуть бути побудовані кількома способами:" #: ../../src/basics/stdtypes.txt:150 +#, fuzzy msgid "using a pair of parentheses to denote the empty tuple: ``()``" msgstr "" "використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" #: ../../src/basics/stdtypes.txt:151 +#, fuzzy msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" -"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " +"з використанням кінцевої коми для одиночного кортежу: ``a,`` або ``(a, b, " "c)``" #: ../../src/basics/stdtypes.txt:152 +#, fuzzy msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" -msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" +msgstr "розділення елементів комами: ``a, b, c`` або ``(a, b, c)``" #: ../../src/basics/stdtypes.txt:153 +#, fuzzy msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" -msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" +msgstr "з використанням конструктора типу: ``tuple()`` або ``tuple(iterable)``" #: ../../src/basics/stdtypes.txt:156 +#, fuzzy msgid "Common operations" -msgstr "Загальні операції" +msgstr "Спільні операції" #: ../../src/basics/stdtypes.txt:161 +#, fuzzy msgid "``x in s`` ``x not in s``" msgstr "``x in s`` ``x not in s``" #: ../../src/basics/stdtypes.txt:161 +#, fuzzy msgid "" "``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " "*x*" @@ -373,78 +436,96 @@ msgstr "" "*x*" #: ../../src/basics/stdtypes.txt:164 +#, fuzzy msgid "``s + t``" msgstr "``s + t``" #: ../../src/basics/stdtypes.txt:164 +#, fuzzy msgid "the concatenation of *s* and *t*" -msgstr "конкатенація s і t" +msgstr "конкатенація *s* та *t*" #: ../../src/basics/stdtypes.txt:166 +#, fuzzy msgid "``s * n``" msgstr "``s * n``" #: ../../src/basics/stdtypes.txt:166 +#, fuzzy msgid "equivalent to adding *s* to itself *n* times" -msgstr "еквівалентно додаванню *s* до себе *n* разів" +msgstr "еквівалентно додаванню *s* до самого себе *n* разів" #: ../../src/basics/stdtypes.txt:168 +#, fuzzy msgid "``s[i]``" msgstr "``s[i]``" #: ../../src/basics/stdtypes.txt:168 +#, fuzzy msgid "*i*-th item of *s*, origin 0" -msgstr "*i*-й елемент *s*, джерело 0" +msgstr "*i*-й елемент з *s*, походження 0" #: ../../src/basics/stdtypes.txt:170 +#, fuzzy msgid "``s[i:j]`` ``s[i:j:k]``" msgstr "``s[i:j]`` ``s[i:j:k]``" #: ../../src/basics/stdtypes.txt:170 +#, fuzzy msgid "" "slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " "be omitted." msgstr "" -"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " -"3) можна опустити." +"фрагмент *s* від *i* до *j* з кроком *k*. будь-який з них (або навіть всі 3) " +"можна опустити." #: ../../src/basics/stdtypes.txt:173 +#, fuzzy msgid "``len(s)``" msgstr "``len(s)``" #: ../../src/basics/stdtypes.txt:173 +#, fuzzy msgid "length of *s*" msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:175 +#, fuzzy msgid "``min(s)``" msgstr "``min(s)``" #: ../../src/basics/stdtypes.txt:175 +#, fuzzy msgid "smallest item of *s*" msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:177 +#, fuzzy msgid "``max(s)``" msgstr "``max(s)``" #: ../../src/basics/stdtypes.txt:177 +#, fuzzy msgid "largest item of *s*" msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:179 +#, fuzzy msgid "``s.count(x)``" msgstr "``s.count(x)``" #: ../../src/basics/stdtypes.txt:179 +#, fuzzy msgid "total number of occurrences of *x* in *s*" msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:181 +#, fuzzy msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" #: ../../src/basics/stdtypes.txt:181 +#, fuzzy msgid "" "index of the first occurrence of *x* in *s* at or after index *i* and before " "index *j*" @@ -453,6 +534,7 @@ msgstr "" "індексом *j*" #: ../../src/basics/stdtypes.txt:189 +#, fuzzy msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -460,90 +542,106 @@ msgid "" "these types raises ``TypeError``." msgstr "" "Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " -"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " -"типами призводить до нерівності, а впорядковане порівняння цих типів " +"діапазони не підтримують порівняння за порядком. Порівняння рівності між " +"цими типами призводить до нерівності, а порівняння порядку між цими типами " "викликає ``TypeError``." #: ../../src/basics/stdtypes.txt:194 +#, fuzzy msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " "equal to themselves. Lexicographical comparison between built-in collections " "works as follows:" msgstr "" -"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " -"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " -"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " -"таким чином:" +"Послідовності порівнюються лексикографічно за допомогою порівняння " +"відповідних елементів. Вбудовані контейнери зазвичай вважають ідентичні " +"об'єкти рівними собі. Лексикографічне порівняння між вбудованими колекціями " +"працює наступним чином:" #: ../../src/basics/stdtypes.txt:199 +#, fuzzy msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." msgstr "" -"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " -"мати однакову довжину, і кожна пара відповідних елементів повинна " -"порівнюватися." +"Для того, щоб дві колекції були рівними, вони повинні бути одного типу, мати " +"однакову довжину і кожна пара відповідних елементів повинна порівнюватися " +"однаково." #: ../../src/basics/stdtypes.txt:201 +#, fuzzy msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " "collection is ordered first." msgstr "" -"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " -"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"Колекції, що підтримують порівняння порядків, впорядковуються так само, як і " +"їх перші нерівні елементи. Якщо відповідного елемента не існує, то спочатку " "впорядковується коротша колекція." #: ../../src/basics/stdtypes.txt:206 +#, fuzzy msgid "Mutable sequence types" -msgstr "Змінні типи послідовностей" +msgstr "Типи змінних послідовностей" #: ../../src/basics/stdtypes.txt:211 +#, fuzzy msgid "``s[i] = x``" msgstr "``s[i] = x``" #: ../../src/basics/stdtypes.txt:211 +#, fuzzy msgid "item *i* of *s* is replaced by *x*" -msgstr "елемент *i* з *s* замінюється на *x*" +msgstr "елемент *i* в *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:213 +#, fuzzy msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" #: ../../src/basics/stdtypes.txt:213 +#, fuzzy msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" #: ../../src/basics/stdtypes.txt:216 +#, fuzzy msgid "``del s[i:j]``" msgstr "``del s[i:j]``" #: ../../src/basics/stdtypes.txt:216 +#, fuzzy msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:218 +#, fuzzy msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" #: ../../src/basics/stdtypes.txt:218 +#, fuzzy msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" #: ../../src/basics/stdtypes.txt:220 +#, fuzzy msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" #: ../../src/basics/stdtypes.txt:220 +#, fuzzy msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:222 +#, fuzzy msgid "``s.append(x)``" msgstr "``s.append(x)``" #: ../../src/basics/stdtypes.txt:222 +#, fuzzy msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" @@ -551,42 +649,52 @@ msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" #: ../../src/basics/stdtypes.txt:225 +#, fuzzy msgid "``s.clear()``" msgstr "``s.clear()``" #: ../../src/basics/stdtypes.txt:225 +#, fuzzy msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:227 +#, fuzzy msgid "``s.copy()``" msgstr "``s.copy()``" #: ../../src/basics/stdtypes.txt:227 +#, fuzzy msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:229 +#, fuzzy msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" #: ../../src/basics/stdtypes.txt:229 +#, fuzzy msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:232 +#, fuzzy msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" #: ../../src/basics/stdtypes.txt:232 +#, fuzzy msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" #: ../../src/basics/stdtypes.txt:235 +#, fuzzy msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" #: ../../src/basics/stdtypes.txt:235 +#, fuzzy msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -595,58 +703,70 @@ msgstr "" "пропущено - використовуйте останній доступний індекс)" #: ../../src/basics/stdtypes.txt:238 +#, fuzzy msgid "``s.remove(x)``" msgstr "``s.remove(x)``" #: ../../src/basics/stdtypes.txt:238 +#, fuzzy msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" #: ../../src/basics/stdtypes.txt:240 +#, fuzzy msgid "``s.reverse()``" msgstr "``s.reverse()``" #: ../../src/basics/stdtypes.txt:240 +#, fuzzy msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" #: ../../src/basics/stdtypes.txt:243 +#, fuzzy msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" #: ../../src/basics/stdtypes.txt:244 +#, fuzzy msgid "new in Python version 3.3" -msgstr "нове у версії Python 3.3" +msgstr "нове в Python версії 3.3" #: ../../src/basics/stdtypes.txt:247 +#, fuzzy msgid "Text sequence type" msgstr "Тип текстової послідовності" #: ../../src/basics/stdtypes.txt:250 +#, fuzzy msgid "String methods" -msgstr "Рядкові методи" +msgstr "Методи рядків" #: ../../src/basics/stdtypes.txt:252 +#, fuzzy msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." msgstr "" -"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " -"методами." +"Рядки реалізують всі звичайні операції з послідовністю, а також додаткові " +"методи." #: ../../src/basics/stdtypes.txt:297 +#, fuzzy msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." msgstr "" -"Рядки порівнюються лексикографічно з використанням числових кодових точок " -"Unicode своїх символів." +"Рядки порівнюються лексикографічно, використовуючи числові кодові точки " +"символів у Юнікоді." #: ../../src/basics/stdtypes.txt:301 +#, fuzzy msgid "Set types" -msgstr "Типи сетів" +msgstr "Типи множин" #: ../../src/basics/stdtypes.txt:306 +#, fuzzy msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -654,17 +774,19 @@ msgid "" "sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " "nor supersets of one another)." msgstr "" -"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " -"між типами. Вони визначають оператори порівняння порядку, щоб проходити " -"тести підмножини та надмножини. Ці відношення не визначають загального " -"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " -"підмножини одного іншого, ані надмножини один одного)." +"Множини (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині " +"та між їхніми типами. Вони визначають оператори порівняння порядку, які " +"означають тести підмножин та надмножин. Ці відношення не визначають повного " +"впорядкування (наприклад, дві множини ``{1, 2}`` і ``{2, 3}`` не є рівними, " +"не є підмножинами одна одної і не є надмножинами одна одної)." #: ../../src/basics/stdtypes.txt:313 +#, fuzzy msgid "Mapping type" msgstr "Тип відображення" #: ../../src/basics/stdtypes.txt:315 +#, fuzzy msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " @@ -676,38 +798,44 @@ msgstr "" "набори ключів та їхніх значень." #: ../../src/basics/stdtypes.txt:319 +#, fuzzy msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " "``1.0`` and ``True``) can be used interchangeably to index the same " "dictionary entry." msgstr "" -"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " -"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " -"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " -"тієї самої словникової статті." +"Ключі словника - це майже довільні значення. Значення, які не піддаються " +"хешуванню, не можна використовувати як ключі. Значення, які порівнюються як " +"рівні (наприклад, ``1``, ``1.0`` і ``True``), можуть використовуватися як " +"взаємозамінні для індексації однієї і тієї ж словникової статті." #: ../../src/basics/stdtypes.txt:323 +#, fuzzy msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" #: ../../src/basics/stdtypes.txt:325 +#, fuzzy msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" #: ../../src/basics/stdtypes.txt:326 +#, fuzzy msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" msgstr "" -"Використовуйте розділений комами список пар ``key: value`` з дужками: " +"Використовуйте список пар ``key: value`` через кому з дужками: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" #: ../../src/basics/stdtypes.txt:328 +#, fuzzy msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" #: ../../src/basics/stdtypes.txt:329 +#, fuzzy msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -716,13 +844,15 @@ msgstr "" "``dict(key=100)``" #: ../../src/basics/stdtypes.txt:335 +#, fuzzy msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." msgstr "" -"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " -"однакові пари ключ-значення." +"Екземпляри ``dict`` порівнюються однаково тоді і тільки тоді, коли вони " +"мають однакові пари ключ-значення." #: ../../src/basics/stdtypes.txt:338 +#, fuzzy msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." diff --git a/src/_locales/uk/LC_MESSAGES/basics/variables.po b/src/_locales/uk/LC_MESSAGES/basics/variables.po index 36c224c23..9d685c32a 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/variables.po +++ b/src/_locales/uk/LC_MESSAGES/basics/variables.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:07+0300\n" +"PO-Revision-Date: 2023-10-17 23:15+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,32 +20,38 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/variables.txt:-1 +#, fuzzy msgid "Variables in programming" msgstr "Змінні в програмуванні" #: ../../src/basics/variables.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/variables.txt:-1 +#, fuzzy msgid "programming, basics, variables" msgstr "programming, basics, variables" #: ../../src/basics/variables.txt:8 +#, fuzzy msgid "Variables" msgstr "Змінні" #: ../../src/basics/variables.txt:10 +#, fuzzy msgid "" "In computer science a **variable** is a named storage location in memory " "that can hold a value (*data*). The value stored in a variable can be " "changed or accessed by the program during its execution." msgstr "" -"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " -"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " -"змінено або доступне програмою під час її виконання." +"У комп'ютерних науках **змінна** - це іменована комірка пам'яті, яка може " +"зберігати значення (*дані*). Значення, що зберігається у змінній, може бути " +"змінене або доступне програмі під час її виконання." #: ../../src/basics/variables.txt:14 +#, fuzzy msgid "" "In Python, variables are created dynamically once a value is assigned to " "them. This makes Python a dynamically typed language, which means that the " @@ -53,83 +59,97 @@ msgid "" "do not need to declare a variable before using it, as in statically typed " "languages." msgstr "" -"У Python змінні створюються динамічно після присвоєння їм значення. Це " -"робить Python динамічно типізованою мовою, а це означає, що тип даних " -"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " -"оголошувати змінну перед її використанням, як у статично типізованих мовах." +"У Python змінні створюються динамічно, щойно їм присвоюється значення. Це " +"робить Python динамічно типізованою мовою, що означає, що тип даних змінної " +"виводиться з присвоєного їй значення. Отже, вам не потрібно оголошувати " +"змінну перед її використанням, як у мовах зі статичною типізацією." #: ../../src/basics/variables.txt:19 +#, fuzzy msgid "" "The ability to create variables dynamically and infer their data type makes " "Python code more concise and easier to read. However, it also requires " "careful attention to variable naming and assignment to avoid unexpected " "behavior." msgstr "" -"Можливість динамічно створювати змінні та виводити їхні типи даних робить " -"код Python більш лаконічним і легшим для читання. Однак це також вимагає " -"пильної уваги до іменування та призначення змінних, щоб уникнути " +"Можливість динамічно створювати змінні та визначати тип їхніх даних робить " +"код Python лаконічнішим і легшим для читання. Однак, це також вимагає " +"ретельної уваги до іменування та присвоєння змінних, щоб уникнути " "неочікуваної поведінки." #: ../../src/basics/variables.txt:23 +#, fuzzy msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " "variable, the portion on the left of the operator is a *variable name* and " "the portion on the right is a *value* to assign to a variable." msgstr "" -"У Python ``=`` (оператор присвоєння) використовується для встановлення " -"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " -"частина праворуч - це значення, яке призначається для неї." +"У Python ``=`` (оператор присвоювання) використовується для присвоєння " +"значення деякій змінній, частина ліворуч від оператора - це *ім'я змінної*, " +"а частина праворуч - це *значення*, яке потрібно присвоїти змінній." #: ../../src/basics/variables.txt:27 +#, fuzzy msgid "Variable assignment in Python" -msgstr "Присвоєння змінної в Python" +msgstr "Присвоєння змінних у Python" #: ../../src/basics/variables.txt:34 +#, fuzzy msgid "Variable assignment in Java" -msgstr "Присвоєння змінної в Java" +msgstr "Присвоєння змінних у Java" #: ../../src/basics/variables.txt:42 +#, fuzzy msgid "Naming" -msgstr "Присвоєння назви" +msgstr "Іменування" #: ../../src/basics/variables.txt:44 +#, fuzzy msgid "" "In Python there are several rules that describe how to name your variables. " "Some of these are requirements and cannot be ignored, others are rather " "recommended than required and can be omitted. For now note, that a variable " "name **cannot**:" msgstr "" -"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " -"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " -"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" +"У Python є кілька правил, які описують, як називати ваші змінні. Деякі з них " +"є обов'язковими і не можуть бути проігноровані, інші є скоріше " +"рекомендаційними, ніж обов'язковими, і їх можна опустити. Наразі зауважте, " +"що ім'я змінної **не може**:" #: ../../src/basics/variables.txt:49 +#, fuzzy msgid "a language keyword (like ``pass``, ``def`` or ``class``)" -msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" +msgstr "ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" #: ../../src/basics/variables.txt:50 +#, fuzzy msgid "start with a number (e.g. ``123``, ``1_something``)" -msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" +msgstr "починатись з числа (наприклад, ``123``, ``1_something``)" #: ../../src/basics/variables.txt:51 +#, fuzzy msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" -msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" +msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)." #: ../../src/basics/variables.txt:52 +#, fuzzy msgid "contain white spaces" msgstr "містити пробіли" #: ../../src/basics/variables.txt:54 +#, fuzzy msgid "Also here are some general recommendation on naming anything:" -msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" +msgstr "" +"Також тут є кілька загальних рекомендацій щодо того, як називати будь-що:" #: ../../src/basics/variables.txt:56 +#, fuzzy msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" -"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " -"42``)" +"не використовуйте вбудовані функції як ім'я змінної (наприклад, ``len = 42``)" #: ../../src/basics/variables.txt:57 +#, fuzzy msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" -"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" +"зберігайте змістовність імен (``x = 10`` проти ``number_of_student = 100``)" From 1aa7b8dd563e11166bd14099b0279cbf60750f1f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 18 Oct 2023 00:02:10 +0300 Subject: [PATCH 222/689] Complete check on variables document translations --- .../uk/LC_MESSAGES/basics/variables.po | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/variables.po b/src/_locales/uk/LC_MESSAGES/basics/variables.po index 9d685c32a..95b1e5a98 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/variables.po +++ b/src/_locales/uk/LC_MESSAGES/basics/variables.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:15+0300\n" +"PO-Revision-Date: 2023-10-18 00:01+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,27 +20,22 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/variables.txt:-1 -#, fuzzy msgid "Variables in programming" msgstr "Змінні в програмуванні" #: ../../src/basics/variables.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/variables.txt:-1 -#, fuzzy msgid "programming, basics, variables" msgstr "programming, basics, variables" #: ../../src/basics/variables.txt:8 -#, fuzzy msgid "Variables" msgstr "Змінні" #: ../../src/basics/variables.txt:10 -#, fuzzy msgid "" "In computer science a **variable** is a named storage location in memory " "that can hold a value (*data*). The value stored in a variable can be " @@ -51,7 +46,6 @@ msgstr "" "змінене або доступне програмі під час її виконання." #: ../../src/basics/variables.txt:14 -#, fuzzy msgid "" "In Python, variables are created dynamically once a value is assigned to " "them. This makes Python a dynamically typed language, which means that the " @@ -65,7 +59,6 @@ msgstr "" "змінну перед її використанням, як у мовах зі статичною типізацією." #: ../../src/basics/variables.txt:19 -#, fuzzy msgid "" "The ability to create variables dynamically and infer their data type makes " "Python code more concise and easier to read. However, it also requires " @@ -78,7 +71,6 @@ msgstr "" "неочікуваної поведінки." #: ../../src/basics/variables.txt:23 -#, fuzzy msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " "variable, the portion on the left of the operator is a *variable name* and " @@ -89,22 +81,18 @@ msgstr "" "а частина праворуч - це *значення*, яке потрібно присвоїти змінній." #: ../../src/basics/variables.txt:27 -#, fuzzy msgid "Variable assignment in Python" msgstr "Присвоєння змінних у Python" #: ../../src/basics/variables.txt:34 -#, fuzzy msgid "Variable assignment in Java" msgstr "Присвоєння змінних у Java" #: ../../src/basics/variables.txt:42 -#, fuzzy msgid "Naming" msgstr "Іменування" #: ../../src/basics/variables.txt:44 -#, fuzzy msgid "" "In Python there are several rules that describe how to name your variables. " "Some of these are requirements and cannot be ignored, others are rather " @@ -113,43 +101,36 @@ msgid "" msgstr "" "У Python є кілька правил, які описують, як називати ваші змінні. Деякі з них " "є обов'язковими і не можуть бути проігноровані, інші є скоріше " -"рекомендаційними, ніж обов'язковими, і їх можна опустити. Наразі зауважте, " -"що ім'я змінної **не може**:" +"рекомендаціями, і їх можна опустити. Наразі зауважте, що ім'я змінної **не " +"може**:" #: ../../src/basics/variables.txt:49 -#, fuzzy msgid "a language keyword (like ``pass``, ``def`` or ``class``)" msgstr "ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" #: ../../src/basics/variables.txt:50 -#, fuzzy msgid "start with a number (e.g. ``123``, ``1_something``)" msgstr "починатись з числа (наприклад, ``123``, ``1_something``)" #: ../../src/basics/variables.txt:51 -#, fuzzy msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)." #: ../../src/basics/variables.txt:52 -#, fuzzy msgid "contain white spaces" msgstr "містити пробіли" #: ../../src/basics/variables.txt:54 -#, fuzzy msgid "Also here are some general recommendation on naming anything:" msgstr "" "Також тут є кілька загальних рекомендацій щодо того, як називати будь-що:" #: ../../src/basics/variables.txt:56 -#, fuzzy msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" "не використовуйте вбудовані функції як ім'я змінної (наприклад, ``len = 42``)" #: ../../src/basics/variables.txt:57 -#, fuzzy msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" "зберігайте змістовність імен (``x = 10`` проти ``number_of_student = 100``)" From 44a347c3b58320f52ae33907e5fa8d90579107cf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 18 Oct 2023 00:17:57 +0300 Subject: [PATCH 223/689] Complete check on bool_logic document translations --- .../uk/LC_MESSAGES/basics/bool_logic.po | 151 ++++-------------- 1 file changed, 29 insertions(+), 122 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po index d26d3cdc1..708b3b35f 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po +++ b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:16+0300\n" +"PO-Revision-Date: 2023-10-18 00:17+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,29 +20,24 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/bool_logic.txt:-1 -#, fuzzy msgid "this document covers usage of logic and comparison operators in Python" msgstr "" "у цьому документі розглядається використання логічних операторів та " "операторів порівняння у Python" #: ../../src/basics/bool_logic.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/bool_logic.txt:-1 -#, fuzzy msgid "python, boolean, logic, comparison, operator" msgstr "python, boolean, logic, comparison, operator" #: ../../src/basics/bool_logic.txt:14 -#, fuzzy msgid "Boolean Logic" msgstr "Булева Логіка" #: ../../src/basics/bool_logic.txt:20 -#, fuzzy msgid "" "`George Boole`_ put together what is now known as `Boolean algebra`_, which " "relies on **true** and **false** values and define a set of boolean " @@ -50,10 +45,9 @@ msgid "" msgstr "" "`Джордж Буль`_ створив те, що зараз відоме як `булева алгебра`_, яка " "спирається на значення **істина** та **хибність** і визначає набір булевих " -"операцій: **не**, **і** та **або**." +"операцій: **not**, **and** та **or**." #: ../../src/basics/bool_logic.txt:24 -#, fuzzy msgid "" "These Boolean values and operators are helpful in programming because they " "help you decide the course of action in your programs." @@ -62,7 +56,6 @@ msgstr "" "допомагають вам визначати порядок дій у ваших програмах." #: ../../src/basics/bool_logic.txt:27 -#, fuzzy msgid "" "The **Python boolean** type is one of Python's built-in data types. It's " "used to represent the truth value of an expression. For example, the " @@ -72,17 +65,15 @@ msgid "" msgstr "" "Тип **Python boolean** є одним із вбудованих типів даних Python. Він " "використовується для представлення значення істинності виразу. Наприклад, " -"вираз ``1 < 2`` є ``True`` (істине), тоді як вираз ``0 == 1`` є ``False`` " -"(хибне). Розуміння того, як поводяться булеві значення у Python, є важливим " +"вираз ``1 < 2`` є ``True`` (істина), тоді як вираз ``0 == 1`` є ``False`` " +"(хибний). Розуміння того, як поводяться булеві значення у Python, є важливим " "для якісного програмування на Python." #: ../../src/basics/bool_logic.txt:34 -#, fuzzy msgid "Understanding Boolean" msgstr "Розуміння булевих функцій" #: ../../src/basics/bool_logic.txt:36 -#, fuzzy msgid "The Boolean type has only two possible values:" msgstr "Тип Boolean має лише два можливих значення:" @@ -91,7 +82,6 @@ msgstr "Тип Boolean має лише два можливих значення: #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:189 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 -#, fuzzy msgid "``True``" msgstr "``True``" @@ -100,17 +90,14 @@ msgstr "``True``" #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 -#, fuzzy msgid "``False``" msgstr "``False``" #: ../../src/basics/bool_logic.txt:41 -#, fuzzy msgid "No other value will have ``bool`` as it type." msgstr "Жодне інше значення не буде мати тип ``bool``." #: ../../src/basics/bool_logic.txt:50 -#, fuzzy msgid "" "The type ``bool`` is **built-in**, meaning it's always available in Python. " "``True`` and ``False`` are keywords in Python and can't be used as variable " @@ -119,16 +106,14 @@ msgid "" msgstr "" "Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " "та ``False`` є ключовими словами у Python і не можуть використовуватися як " -"імена змінних, але тип ``bool`` не є таким, і його можна присвоювати імені " -"``bool``, однак це вважається поганим стилем." +"імена змінних, але тип ``bool`` не є таким, і можна зробити змінну ``bool``, " +"однак це вважається поганим стилем." #: ../../src/basics/bool_logic.txt:56 -#, fuzzy msgid "Boolean as numbers" msgstr "Булеві як числа" #: ../../src/basics/bool_logic.txt:58 -#, fuzzy msgid "" "Booleans are a subtype of **numeric** type in Python. This means they're " "numbers for all intents and purposes. In other words, you can apply " @@ -138,37 +123,32 @@ msgstr "" "Булеві вирази є підтипом **числового** типу у Python. Це означає, що вони є " "числами за всіма ознаками. Іншими словами, до булевих типів можна " "застосовувати арифметичні операції, а також порівнювати їх з числами. " -"Значення ``Істина`` розглядається як 1, а значення ``Неправда`` " -"розглядається як 0." +"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " +"0." #: ../../src/basics/bool_logic.txt:63 -#, fuzzy msgid "There aren't many uses of the numerical nature of Boolean values." msgstr "Існує не так багато застосувань числової природи булевих значень." #: ../../src/basics/bool_logic.txt:66 -#, fuzzy msgid "Truth value testing" msgstr "Перевірка істинності" #: ../../src/basics/bool_logic.txt:68 -#, fuzzy msgid "" "Any object can be tested for truth value. By default an object considered " "``True``, unless its class defines either. Here are most of built-in objects " "considered ``False``:" msgstr "" "Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " -"вважається ``Істинним``, якщо його клас не визначає іншого значення. " -"Більшість вбудованих об'єктів вважаються такими, що мають значення ``False``:" +"вважається ``True``, якщо його клас не визначає іншого значення. Ось " +"більшість вбудованих об'єктів, що мають значення ``False``:" #: ../../src/basics/bool_logic.txt:72 -#, fuzzy msgid "constant values: ``None`` and ``False``" msgstr "константні значення: ``None`` та ``False``" #: ../../src/basics/bool_logic.txt:73 -#, fuzzy msgid "" "zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " "``Fraction(0, 1)``" @@ -177,7 +157,6 @@ msgstr "" "``Fraction(0, 1)``" #: ../../src/basics/bool_logic.txt:75 -#, fuzzy msgid "" "empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " "``range(0)``." @@ -186,7 +165,6 @@ msgstr "" "``set()``, ``range(0)``." #: ../../src/basics/bool_logic.txt:80 -#, fuzzy msgid "" "If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " "as ``False``." @@ -195,57 +173,46 @@ msgstr "" "як ``False``." #: ../../src/basics/bool_logic.txt:84 -#, fuzzy msgid "Boolean comparison" msgstr "Логічне порівняння" #: ../../src/basics/bool_logic.txt:86 -#, fuzzy msgid "Python provides 3 logical operators:" msgstr "У мові Python передбачено 3 логічних оператори:" #: ../../src/basics/bool_logic.txt:92 ../../src/basics/bool_logic.txt:226 -#, fuzzy msgid "Operator" msgstr "Оператор" #: ../../src/basics/bool_logic.txt:92 -#, fuzzy msgid "Logic operator" msgstr "Логічний оператор" #: ../../src/basics/bool_logic.txt:94 -#, fuzzy msgid "``not``" -msgstr "ні" +msgstr "``not``" #: ../../src/basics/bool_logic.txt:94 -#, fuzzy msgid "Negation" msgstr "Заперечення" #: ../../src/basics/bool_logic.txt:96 -#, fuzzy msgid "``and``" -msgstr "і.." +msgstr "``and``" #: ../../src/basics/bool_logic.txt:96 -#, fuzzy msgid "Conjunction" msgstr "Кон'юнкція" #: ../../src/basics/bool_logic.txt:98 -#, fuzzy msgid "``or``" -msgstr "або.." +msgstr "``or``" #: ../../src/basics/bool_logic.txt:98 -#, fuzzy msgid "Disjunction" msgstr "Диз'юнкція" #: ../../src/basics/bool_logic.txt:101 -#, fuzzy msgid "" "With these operators, you can build expressions by connecting Boolean " "expressions with each other. These operators are **keywords** of the " @@ -257,12 +224,10 @@ msgstr "" "можете використовувати їх як ідентифікатори, не викликавши *SyntaxError*." #: ../../src/basics/bool_logic.txt:106 -#, fuzzy msgid "Getting started with ``not`` operator" msgstr "Початок роботи з оператором ``not``" #: ../../src/basics/bool_logic.txt:108 -#, fuzzy msgid "" "The ``not`` operator is the Boolean or logic operator that implements " "negation in Python. It's **unary**, which means that it takes only one " @@ -276,27 +241,22 @@ msgstr "" "свого операнда на протилежне." #: ../../src/basics/bool_logic.txt:113 -#, fuzzy msgid "not operator truth table" msgstr "таблиця істинності оператора not" #: ../../src/basics/bool_logic.txt:117 -#, fuzzy msgid "``operand``" msgstr "``операнд``" #: ../../src/basics/bool_logic.txt:117 -#, fuzzy msgid "``not operand``" msgstr "``not операнд``" #: ../../src/basics/bool_logic.txt:124 -#, fuzzy msgid "This functionality makes it worthwhile in several situations:" msgstr "Ця функціональність робить його корисним у кількох ситуаціях:" #: ../../src/basics/bool_logic.txt:127 -#, fuzzy msgid "" "Checking **unmet conditions** in the context of ``if`` statements and " "``while`` loops" @@ -305,27 +265,22 @@ msgstr "" "``while``" #: ../../src/basics/bool_logic.txt:129 -#, fuzzy msgid "**Inverting the truth value** of an object or expression" msgstr "**Інвертування значення істинності** об'єкта або виразу" #: ../../src/basics/bool_logic.txt:130 -#, fuzzy msgid "Checking if a **value is not in a given container**" msgstr "Перевірка, чи **значення не знаходиться у заданому контейнері**" #: ../../src/basics/bool_logic.txt:131 -#, fuzzy msgid "Checking for an **object's identity**" msgstr "Перевірка **ідентичності об'єкта**" #: ../../src/basics/bool_logic.txt:134 -#, fuzzy msgid "Getting started with ``and`` operator" msgstr "Початок роботи з оператором ``and``" #: ../../src/basics/bool_logic.txt:136 -#, fuzzy msgid "" "Python's ``and`` operator is **binary**, which means it takes two " "**operands**. The operands in an ``and`` expression are commonly known as " @@ -333,60 +288,48 @@ msgid "" "operands. It'll be ``True`` if **both** are true." msgstr "" "Оператор ``and`` у мові Python є **двійковим**, що означає, що він приймає " -"два **операнди**. Операнди у виразі ``і`` зазвичай називають *умовами*. " +"два **операнди**. Операнди у виразі ``and`` зазвичай називають *умовами*. " "Результат оператора залежить від значень істинності його операндів. " -"Результат буде ``Істина``, якщо **обоє** є істинними." +"Результат буде ``True``, якщо **обоє** є істинними." #: ../../src/basics/bool_logic.txt:141 -#, fuzzy msgid "and operator truth table" msgstr "таблиця істинності оператора and" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 -#, fuzzy msgid "``operand_1``" msgstr "``operand_1``" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 -#, fuzzy msgid "``operand_2``" msgstr "``operand_2``" #: ../../src/basics/bool_logic.txt:145 -#, fuzzy msgid "``operand_1 and operand_2``" msgstr "``operand_1 and operand_2``" #: ../../src/basics/bool_logic.txt:156 -#, fuzzy msgid "" "``and`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "``and`` працює не тільки з операндами булевого типу. Це поведінка:" +msgstr "``and`` працює не тільки з операндами булевого типу. Ось алгоритм:" #: ../../src/basics/bool_logic.txt:159 -#, fuzzy msgid "evaluate 1st operand; return it, if it's ``False`` and finish" -msgstr "" -"обчислити 1-й операнд; повернути його, якщо він рівний ``False`` і завершити" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` і завершити" #: ../../src/basics/bool_logic.txt:160 -#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" -msgstr "" -"обчислити 2-й операнд; повернути його, якщо він рівний ``False`` і завершити" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` і завершити" #: ../../src/basics/bool_logic.txt:161 ../../src/basics/bool_logic.txt:203 -#, fuzzy msgid "return 2nd operand" msgstr "повернути 2-й операнд" #: ../../src/basics/bool_logic.txt:175 -#, fuzzy msgid "Getting started with ``or`` operator" msgstr "Початок роботи з оператором ``or``" #: ../../src/basics/bool_logic.txt:177 -#, fuzzy msgid "" "With Boolean ``or`` operator, you can connect two Boolean expressions into " "one compound expression. This makes ``or`` the **binary** operator. At least " @@ -394,47 +337,38 @@ msgid "" "considered ``True``, and it doesn't matter which. If both subexpressions are " "``False``, then the expression is ``False``." msgstr "" -"За допомогою булевого оператора ``або`` ви можете об'єднати два булевих " -"вирази в один складений вираз. Це робить ``або`` **бінарним** оператором. " +"За допомогою булевого оператора ``or`` ви можете об'єднати два булевих " +"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " "Принаймні один з підвиразів має бути ``True``, щоб складений вираз вважався " "``True``, і не має значення, який саме. Якщо обидва під-вирази мають " "значення ``False``, то вираз буде вважатися ``False``." #: ../../src/basics/bool_logic.txt:183 -#, fuzzy msgid "or operator truth table" msgstr "таблиця істинності оператора or" #: ../../src/basics/bool_logic.txt:187 -#, fuzzy msgid "``operand_1 or operand_2``" msgstr "``operand_1 or operand_2``" #: ../../src/basics/bool_logic.txt:198 -#, fuzzy msgid "" "``or`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "``or`` працює не тільки з операндами булевого типу. Це поведінка:" +msgstr "``or`` працює не тільки з операндами булевого типу. Ось алгоритм:" #: ../../src/basics/bool_logic.txt:201 -#, fuzzy msgid "evaluate 1st operand; return it, if it's ``True`` and finish" -msgstr "" -"обчислити 1-й операнд; повернути його, якщо він рівний ``True`` і завершити" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` і завершити" #: ../../src/basics/bool_logic.txt:202 -#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" -msgstr "" -"обчислити 2-й операнд; повернути його, якщо він рівний ``True`` і завершити" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` і завершити" #: ../../src/basics/bool_logic.txt:217 -#, fuzzy msgid "Comparison" msgstr "Порівняння" #: ../../src/basics/bool_logic.txt:219 -#, fuzzy msgid "" "There are eight comparison operations in Python. They all have the same " "priority (which is higher than that of the Boolean operations)." @@ -443,97 +377,78 @@ msgstr "" "пріоритет (вищий, ніж у булевих операцій)." #: ../../src/basics/bool_logic.txt:222 -#, fuzzy msgid "Comparison operators" msgstr "Оператори порівняння" #: ../../src/basics/bool_logic.txt:226 -#, fuzzy msgid "Meaning" msgstr "Значення" #: ../../src/basics/bool_logic.txt:228 -#, fuzzy msgid "``<``" msgstr "``<``" #: ../../src/basics/bool_logic.txt:228 -#, fuzzy msgid "strictly less than" msgstr "строго менше, ніж" #: ../../src/basics/bool_logic.txt:230 -#, fuzzy msgid "``<=``" msgstr "``<=``" #: ../../src/basics/bool_logic.txt:230 -#, fuzzy msgid "less than or equal" msgstr "менше або дорівнює" #: ../../src/basics/bool_logic.txt:232 -#, fuzzy msgid "``>``" msgstr "``>``" #: ../../src/basics/bool_logic.txt:232 -#, fuzzy msgid "strictly greater than" msgstr "строго більше, ніж" #: ../../src/basics/bool_logic.txt:234 -#, fuzzy msgid "``>=``" msgstr "``>=``" #: ../../src/basics/bool_logic.txt:234 -#, fuzzy msgid "greater or equal" msgstr "більше або дорівнює" #: ../../src/basics/bool_logic.txt:236 -#, fuzzy msgid "``==``" msgstr "``==``" #: ../../src/basics/bool_logic.txt:236 -#, fuzzy msgid "equal (aka *equality* comparison)" msgstr "дорівнює (також відоме як *equality* порівняння)" #: ../../src/basics/bool_logic.txt:238 -#, fuzzy msgid "``!=``" msgstr "``!=``" #: ../../src/basics/bool_logic.txt:238 -#, fuzzy msgid "not equal" msgstr "не дорівнює" #: ../../src/basics/bool_logic.txt:240 -#, fuzzy msgid "``is``" -msgstr "це.." +msgstr "``is``" #: ../../src/basics/bool_logic.txt:240 -#, fuzzy msgid "object identity" msgstr "ідентичність об'єктів" #: ../../src/basics/bool_logic.txt:242 -#, fuzzy msgid "``is not``" -msgstr "не є" +msgstr "``is not``" #: ../../src/basics/bool_logic.txt:242 -#, fuzzy msgid "negated object identity" msgstr "заперечення ідентичності об'єкта" #: ../../src/basics/bool_logic.txt:245 -#, fuzzy msgid "" "Each of these comparison operators return a Boolean value, it's always " "``True`` or ``False``." @@ -542,21 +457,18 @@ msgstr "" "або ``False``." #: ../../src/basics/bool_logic.txt:248 -#, fuzzy msgid "" "You can chain comparison operators together: ``x < y < z`` is equal to ``x < " "y and y < z``." msgstr "" -"Ви можете з'єднувати оператори порівняння ланцюжком: ``x < y < z`` дорівнює " -"``x < y та y < z``." +"Ви можете з'єднувати оператори порівняння ланцюжком: ``x < y < z`` " +"еквівалентне ``x < y and y < z``." #: ../../src/basics/bool_logic.txt:252 -#, fuzzy msgid "Equality vs Identity" -msgstr "Рівність vs Ідентичністі" +msgstr "Рівність та Ідентичність" #: ../../src/basics/bool_logic.txt:254 -#, fuzzy msgid "" "It's easier to understand the difference between those by asking the " "question each answers to." @@ -565,27 +477,22 @@ msgstr "" "кожна з них." #: ../../src/basics/bool_logic.txt:257 -#, fuzzy msgid "The question for ``==`` (*equality*) is:" msgstr "Питання для ``==`` (*рівності*) полягає у наступному:" #: ../../src/basics/bool_logic.txt:259 -#, fuzzy msgid "Is object on the left **equal** to the object on the right" msgstr "Чи є об'єкт зліва **рівним** об'єкту справа" #: ../../src/basics/bool_logic.txt:261 -#, fuzzy msgid "The question for ``is`` (*identity*) is:" msgstr "Питання для ``is`` (*ідентичність*) полягає в наступному:" #: ../../src/basics/bool_logic.txt:263 -#, fuzzy msgid "Is object on the left **the same** as the object on the right" -msgstr "Чи є об'єкт ліворуч **таким самим**, як і об'єкт праворуч" +msgstr "Чи є об'єкт ліворуч **тим самим**, як і об'єкт праворуч" #: ../../src/basics/bool_logic.txt:265 -#, fuzzy msgid "" "For example, if there are two cars of the same model, same color etc. in " "front of you - these cars are equal, but they aren't ident to each other. " From 376f8c643e96d13d1a11cdafefa0cb35a3e956dc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 18 Oct 2023 12:58:46 +0300 Subject: [PATCH 224/689] Complete check on decorators document translations --- .../uk/LC_MESSAGES/basics/decorators.po | 55 +------------------ 1 file changed, 3 insertions(+), 52 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/decorators.po b/src/_locales/uk/LC_MESSAGES/basics/decorators.po index 77d39c0aa..368055a22 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/decorators.po +++ b/src/_locales/uk/LC_MESSAGES/basics/decorators.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:16+0300\n" +"PO-Revision-Date: 2023-10-18 12:57+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,27 +20,22 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/decorators.txt:-1 -#, fuzzy msgid "Python decorators" msgstr "Декоратори в Python" #: ../../src/basics/decorators.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/decorators.txt:-1 -#, fuzzy msgid "python, basics, decorators" msgstr "python, basics, decorators" #: ../../src/basics/decorators.txt:11 -#, fuzzy msgid "Decorators" msgstr "Декоратори" #: ../../src/basics/decorators.txt:13 -#, fuzzy msgid "" "Decorators provide a simple syntax for calling higher-order functions :cite:" "`realpython:decorators`." @@ -49,7 +44,6 @@ msgstr "" "cite:`realpython:decorators`." #: ../../src/basics/decorators.txt:18 -#, fuzzy msgid "There is some kind of misunderstanding in definitions." msgstr "Існує певне непорозуміння у визначеннях." @@ -83,7 +77,6 @@ msgstr "" "які містять поведінку :cite:`refactoring.guru:decorator`." #: ../../src/basics/decorators.txt:31 -#, fuzzy msgid "" "Before you understand decorators, you must first understand how functions " "work." @@ -91,12 +84,10 @@ msgstr "" "Перш ніж розбиратися в декораторах, потрібно зрозуміти, як працюють функції." #: ../../src/basics/decorators.txt:35 -#, fuzzy msgid "First-class objects" msgstr "Об'єкти першого класу" #: ../../src/basics/decorators.txt:37 -#, fuzzy msgid "" "In Python functions are `first-class objects`_. Everything in Python is an " "object. Functions are objects too." @@ -105,12 +96,10 @@ msgstr "" "Функції також є об'єктами." #: ../../src/basics/decorators.txt:41 -#, fuzzy msgid "Inner functions" msgstr "Внутрішні функції" #: ../../src/basics/decorators.txt:43 -#, fuzzy msgid "" "Functions can be nested. This means it is possible to define functions " "inside other functions." @@ -119,12 +108,10 @@ msgstr "" "всередині інших функцій." #: ../../src/basics/decorators.txt:46 -#, fuzzy msgid "Nested functions example" msgstr "Приклад вкладених функцій" #: ../../src/basics/decorators.txt:60 -#, fuzzy msgid "" "The order in which inner functions are defined no matters. The function " "definition does not execute the function body; this gets executed only when " @@ -140,12 +127,10 @@ msgstr "" "``heapify`` поза ``heap_sort`` призведе до виключення ``NameError``." #: ../../src/basics/decorators.txt:68 -#, fuzzy msgid "Functions are objects" msgstr "Функції є об'єктами" #: ../../src/basics/decorators.txt:70 -#, fuzzy msgid "" "This means functions can be passed around and used as arguments, just like " "any other object (e.g. *int*, *str* etc.)." @@ -154,12 +139,10 @@ msgstr "" "само, як і будь-які інші об'єкти (наприклад, *int*, *str* тощо)." #: ../../src/basics/decorators.txt:95 -#, fuzzy msgid "Returning functions" msgstr "Повернення функцій" #: ../../src/basics/decorators.txt:97 -#, fuzzy msgid "" "Since function can be passed as an argument, it may be returned from another " "function." @@ -168,12 +151,10 @@ msgstr "" "іншої функції." #: ../../src/basics/decorators.txt:120 -#, fuzzy msgid "``parent`` returns functions themselves, there are no parentheses." msgstr "``parent`` повертає самі функції, дужок немає." #: ../../src/basics/decorators.txt:122 -#, fuzzy msgid "" "After running the code snippet above, ``first`` refers the ``first_child`` " "function from the inner ``parent`` scope. From now it can be used to call " @@ -184,12 +165,10 @@ msgstr "" "можна використовувати для виклику цільової функції, на яку вона посилається." #: ../../src/basics/decorators.txt:134 -#, fuzzy msgid "Simple decorators" msgstr "Прості декоратори" #: ../../src/basics/decorators.txt:136 -#, fuzzy msgid "" "Now you're ready to move on and see the magical beast that is the Python " "decorators. Let's start with a simple example:" @@ -198,12 +177,10 @@ msgstr "" "Python. Почнемо з простого прикладу:" #: ../../src/basics/decorators.txt:154 -#, fuzzy msgid "Running function:" msgstr "Запуск функцій:" #: ../../src/basics/decorators.txt:165 -#, fuzzy msgid "" "The common way to use decorators is to replace the original function with a " "decorated one:" @@ -212,7 +189,6 @@ msgstr "" "функції на декоровану:" #: ../../src/basics/decorators.txt:176 -#, fuzzy msgid "" "``say_hello`` function is the reference to the ``decorator.." "wrapper``, which itself is bound to the original ``say_hello`` function. " @@ -225,16 +201,14 @@ msgstr "" "робить те саме, що і перший приклад декоратора:" #: ../../src/basics/decorators.txt:198 -#, fuzzy msgid "" "There is no way to *undecorate* object in Python. Once something is bound to " "the decorator's wrapper - it is decorated forever." msgstr "" -"У Python не існує способу *віддекорувати* об'єкт. Як тільки щось прив'язано " +"У Python не існує способу *роздекорувати* об'єкт. Як тільки щось прив'язано " "до обгортки декоратора - воно прикрашене назавжди." #: ../../src/basics/decorators.txt:201 -#, fuzzy msgid "" "A decorated function still remains a **function**. So, it can be decorated " "once more time again, and again, and again..." @@ -243,7 +217,6 @@ msgstr "" "прикрасити ще раз, і ще раз, і ще раз, і ще раз..." #: ../../src/basics/decorators.txt:253 -#, fuzzy msgid "" "\"Wrapper\" is the alternative nickname for the Decorator pattern that " "clearly expresses the main idea of the pattern. A wrapper is an object that " @@ -260,12 +233,10 @@ msgstr "" "цільовому об'єкту." #: ../../src/basics/decorators.txt:261 -#, fuzzy msgid "Passing arguments to the wrapper" msgstr "Передача аргументів в обгортку" #: ../../src/basics/decorators.txt:263 -#, fuzzy msgid "" "Until now the examples use *simple* decorators. But what if the decorated " "function gets some arguments? This will cause ``TypeError`` exception that " @@ -275,10 +246,9 @@ msgstr "" "Досі у прикладах використовувались *прості* декоратори. Але що, якщо " "декорована функція отримає якісь аргументи? Це викличе виключення " "``TypeError``, яке скаже, що \"аргументи пропущено\". Це можна виправити, " -"просто передавши аргументи у внутрішню функцію ``обгортки``." +"просто передавши аргументи у внутрішню функцію ``wrapper``." #: ../../src/basics/decorators.txt:289 -#, fuzzy msgid "" "If case you're trying to make a generic decorator, you may pass ``*args`` " "and ``**kwargs`` instead of exact arguments:" @@ -287,12 +257,10 @@ msgstr "" "``*args`` і ``**kwargs`` замість точних аргументів:" #: ../../src/basics/decorators.txt:308 -#, fuzzy msgid "Passing arguments to decorator" msgstr "Передача аргументів до декоратора" #: ../../src/basics/decorators.txt:310 -#, fuzzy msgid "" "At last it's time to know how to pass arguments to the decorator. Here is a " "simple implementation of ``defer`` decorator which deferred the function " @@ -303,12 +271,10 @@ msgstr "" "деякий час:" #: ../../src/basics/decorators.txt:353 -#, fuzzy msgid "Class decorators" msgstr "Декоратори класів" #: ../../src/basics/decorators.txt:355 -#, fuzzy msgid "" "There are some pre-defined decorators exists for usage together with " "classes. They are:" @@ -317,22 +283,18 @@ msgstr "" "класами. Ось вони:" #: ../../src/basics/decorators.txt:358 -#, fuzzy msgid "``classmethod``" msgstr "``classmethod``" #: ../../src/basics/decorators.txt:359 -#, fuzzy msgid "``staticmethod``" msgstr "``staticmethod``" #: ../../src/basics/decorators.txt:360 -#, fuzzy msgid "``property``" msgstr "``property``" #: ../../src/basics/decorators.txt:362 -#, fuzzy msgid "" "If you develop an intuitive understanding for their differences you'll be " "able to write object-oriented Python that communicates its intent more " @@ -345,12 +307,10 @@ msgstr "" "methods-demystified`." #: ../../src/basics/decorators.txt:368 -#, fuzzy msgid "Class methods" msgstr "Методи класу" #: ../../src/basics/decorators.txt:370 -#, fuzzy msgid "" "Instead of accepting a ``self`` parameter, class methods take a ``cls`` " "parameter that points to the class — and not the object instance — when the " @@ -361,7 +321,6 @@ msgstr "" "виклику методу." #: ../../src/basics/decorators.txt:374 -#, fuzzy msgid "" "Because the class method only has access to this ``cls`` argument, it can't " "modify object instance state. That would require access to ``self``. " @@ -374,7 +333,6 @@ msgstr "" "до всіх екземплярів класу." #: ../../src/basics/decorators.txt:379 -#, fuzzy msgid "" "The common usage for ``classmethod`` is provide alternative initializers." msgstr "" @@ -382,12 +340,10 @@ msgstr "" "ініціалізаторів." #: ../../src/basics/decorators.txt:382 -#, fuzzy msgid "Static methods" msgstr "Статичні методи" #: ../../src/basics/decorators.txt:384 -#, fuzzy msgid "" "This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " "course it's free to accept an arbitrary number of other parameters)." @@ -396,7 +352,6 @@ msgstr "" "звичайно, він може приймати довільну кількість інших параметрів)." #: ../../src/basics/decorators.txt:387 -#, fuzzy msgid "" "Therefore a static method can neither modify object state nor class state. " "Static methods are restricted in what data they can access - and they're " @@ -407,7 +362,6 @@ msgstr "" "це, насамперед, спосіб організації простору імен ваших методів." #: ../../src/basics/decorators.txt:391 -#, fuzzy msgid "" "It's tricky to explain ``staticmethod`` usage. Almost always you can create " "a dedicated function instead of static method. But sometimes you need to " @@ -420,12 +374,10 @@ msgstr "" "екземплярів, і тоді прийнято інкапсулювати її за допомогою ``staticmethod``." #: ../../src/basics/decorators.txt:397 -#, fuzzy msgid "Properties" msgstr "Властивості" #: ../../src/basics/decorators.txt:399 -#, fuzzy msgid "" "It's a way to bind a method name to access it as an attribute. Properties " "are **read-only** by default. This means a value cannot be assigned to " @@ -436,6 +388,5 @@ msgstr "" "властивості не можна присвоїти значення." #: ../../src/basics/decorators.txt:404 -#, fuzzy msgid "Some examples" msgstr "Деякі приклади" From 1a6619fd85fe40254bebca15854fb2d4dc91e7e2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 23:42:34 +0300 Subject: [PATCH 225/689] Complete check on stdtypes document translation --- .../uk/LC_MESSAGES/basics/stdtypes.po | 165 ++---------------- 1 file changed, 17 insertions(+), 148 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po index 413e5dda3..ce7bc7a62 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po +++ b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:16+0300\n" +"PO-Revision-Date: 2023-10-24 23:41+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,27 +20,22 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/stdtypes.txt:-1 -#, fuzzy msgid "Python built-in types" msgstr "Вбудовані типи даних в Python" #: ../../src/basics/stdtypes.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/stdtypes.txt:-1 -#, fuzzy msgid "python, basics" msgstr "python, basics" #: ../../src/basics/stdtypes.txt:11 -#, fuzzy msgid "Built-in Types" msgstr "Вбудовані Типи" #: ../../src/basics/stdtypes.txt:13 -#, fuzzy msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " "instances and exceptions :cite:`docs-python:stdtypes`. This section covers " @@ -53,12 +48,10 @@ msgstr "" "відповідних темах." #: ../../src/basics/stdtypes.txt:19 -#, fuzzy msgid "Numeric types" msgstr "Числові типи" #: ../../src/basics/stdtypes.txt:21 -#, fuzzy msgid "" "There are 3 distinct numeric types: *integers*, *floating point numbers*, " "and *complex numbers*. In addition, Booleans are a subtype of integers. " @@ -67,13 +60,12 @@ msgid "" "part, which are each a floating point number." msgstr "" "Існує 3 різних числових типи: *цілі числа*, *числа з плаваючою комою* та " -"*комплексні числа*. Крім того, булеві числа є підтипом цілих чисел. Цілі " +"*комплексні числа*. Крім того, булеві значення є підтипом цілих чисел. Цілі " "числа мають необмежену точність. Числа з плаваючою комою зазвичай " "реалізуються за допомогою ``double`` у C. Комплексні числа мають дійсну та " "уявну частини, кожна з яких є числом з плаваючою комою." #: ../../src/basics/stdtypes.txt:27 -#, fuzzy msgid "" "Numbers are created by numeric literals or as the result of built-in " "functions and operators. Unadorned integer literals (including hex, octal " @@ -84,148 +76,121 @@ msgid "" "number with real and imaginary parts." msgstr "" "Числа створюються за допомогою числових літералів або як результат " -"вбудованих функцій та операторів. Цілі літерали без прикрас (включаючи " -"шістнадцяткові, вісімкові та двійкові числа) створюють цілі числа. Числові " -"літерали, що містять десяткову крапку або знак експоненти, дають числа з " -"плаваючою комою. Додавання ``j`` або ``J`` до числового літерала дає уявне " -"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " -"до цілого числа або числа з плаваючою комою, щоб отримати комплексне число з " -"дійсною та уявною частинами." +"вбудованих функцій та операторів. Цілочислені літерали без додатків " +"(включаючи шістнадцяткові, вісімкові та двійкові числа) створюють цілі " +"числа. Числові літерали, що містять десяткову крапку або знак експоненти, " +"дають числа з плаваючою комою. Додавання ``j`` або ``J`` до числового " +"літерала дає уявне число (комплексне число з нульовою дійсною частиною), яке " +"ви можете додати до цілого числа або числа з плаваючою комою, щоб отримати " +"комплексне число з дійсною та уявною частинами." #: ../../src/basics/stdtypes.txt:36 -#, fuzzy msgid "Supported operations" msgstr "Операції, які підтримуються" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 -#, fuzzy msgid "Operation" msgstr "Операція" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 -#, fuzzy msgid "Result" msgstr "Результат" #: ../../src/basics/stdtypes.txt:41 -#, fuzzy msgid "``x + y``" msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:41 -#, fuzzy msgid "sum of *x* and *y*" msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:43 -#, fuzzy msgid "``x - y``" msgstr "``x - y``" #: ../../src/basics/stdtypes.txt:43 -#, fuzzy msgid "difference of *x* and *y*" -msgstr "різниця між *x* і *y*" +msgstr "різниця *x* і *y*" #: ../../src/basics/stdtypes.txt:45 -#, fuzzy msgid "``x * y``" msgstr "``x * y``" #: ../../src/basics/stdtypes.txt:45 -#, fuzzy msgid "product of *x* and *y*" msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:47 -#, fuzzy msgid "``x / y``" -msgstr "``x + y``" +msgstr "``x / y``" #: ../../src/basics/stdtypes.txt:47 -#, fuzzy msgid "quotient of *x* and *y*" msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:49 -#, fuzzy msgid "``x // y``" -msgstr "``x + y``" +msgstr "``x // y``" #: ../../src/basics/stdtypes.txt:49 -#, fuzzy msgid "floored quotient of *x* and *y*" -msgstr "цілочисельне ділення *x* і *y*" +msgstr "поділ націло *x* і *y*" #: ../../src/basics/stdtypes.txt:51 -#, fuzzy msgid "``x % y``" -msgstr "``x + y``" +msgstr "``x % y``" #: ../../src/basics/stdtypes.txt:51 -#, fuzzy msgid "remainder of ``x / y``" msgstr "залишок від ділення ``x / y``" #: ../../src/basics/stdtypes.txt:53 -#, fuzzy msgid "``-x``" msgstr "``-x``" #: ../../src/basics/stdtypes.txt:53 -#, fuzzy msgid "*x* negated" msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:55 -#, fuzzy msgid "``+x``" msgstr "``+x``" #: ../../src/basics/stdtypes.txt:55 -#, fuzzy msgid "*x* unchanged" -msgstr "*y* без змін" +msgstr "*x* без змін" #: ../../src/basics/stdtypes.txt:57 -#, fuzzy msgid "``abs(x)``" msgstr "``abs(x)``" #: ../../src/basics/stdtypes.txt:57 -#, fuzzy msgid "absolute value or magnitude of *x*" msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:59 -#, fuzzy msgid "``int(x)``" msgstr "``int(x)``" #: ../../src/basics/stdtypes.txt:59 -#, fuzzy msgid "*x* converted to integer" -msgstr "*x* перетворено в ціле число" +msgstr "*x* перетворене в ціле число" #: ../../src/basics/stdtypes.txt:61 -#, fuzzy msgid "``float(x)``" msgstr "``float(x)``" #: ../../src/basics/stdtypes.txt:61 -#, fuzzy msgid "*x* converted to floating point" -msgstr "*x* перетворено у число з плаваючою комою" +msgstr "*x* перетворене у число з плаваючою комою" #: ../../src/basics/stdtypes.txt:63 -#, fuzzy msgid "``complex(re, im)``" msgstr "``complex(re, im)``" #: ../../src/basics/stdtypes.txt:63 -#, fuzzy msgid "" "a complex number with real part *re*, imaginary part *im*. *im* defaults to " "zero." @@ -234,27 +199,22 @@ msgstr "" "замовчуванням *im* дорівнює нулю." #: ../../src/basics/stdtypes.txt:66 -#, fuzzy msgid "``divmod(x, y)``" msgstr "``divmod(x, y)``" #: ../../src/basics/stdtypes.txt:66 -#, fuzzy msgid "the pair ``(x // y, x % y)``" msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:68 -#, fuzzy msgid "``pow(x, y)`` ``x ** y``" msgstr "``pow(x, y)`` ``x ** y``" #: ../../src/basics/stdtypes.txt:68 -#, fuzzy msgid "*x* to the power *y*" msgstr "*x* у степені *y*" #: ../../src/basics/stdtypes.txt:72 -#, fuzzy msgid "" "``x // y`` also referred to as integer division. The resultant value is a " "whole integer, through the result's type is not necessarily int. The result " @@ -265,7 +225,6 @@ msgstr "" "округлюється до мінус нескінченності: ``1 // 2`` є ``0``" #: ../../src/basics/stdtypes.txt:77 -#, fuzzy msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " "optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " @@ -276,29 +235,24 @@ msgstr "" "від'ємної нескінченності." #: ../../src/basics/stdtypes.txt:82 -#, fuzzy msgid "Code examples" msgstr "Приклади коду" #: ../../src/basics/stdtypes.txt:84 -#, fuzzy msgid "Integer numbers" msgstr "Цілі числа" #: ../../src/basics/stdtypes.txt:98 -#, fuzzy msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: ../../src/basics/stdtypes.txt:114 ../../src/basics/stdtypes.txt:187 #: ../../src/basics/stdtypes.txt:295 ../../src/basics/stdtypes.txt:304 #: ../../src/basics/stdtypes.txt:333 -#, fuzzy msgid "Value comparisons" msgstr "Порівняння значень" #: ../../src/basics/stdtypes.txt:116 -#, fuzzy msgid "" "Numbers of built-in numeric types can be compared within and across their " "types (with the restriction that complex numbers do not support order " @@ -310,7 +264,6 @@ msgstr "" "відповідних типів вони порівнюються математично коректно без втрати точності." #: ../../src/basics/stdtypes.txt:121 -#, fuzzy msgid "" "The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." "Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" @@ -321,12 +274,10 @@ msgstr "" "число\" є хибним." #: ../../src/basics/stdtypes.txt:125 -#, fuzzy msgid "Sequence types" msgstr "Типи послідовностей" #: ../../src/basics/stdtypes.txt:127 -#, fuzzy msgid "" "There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " "Additional sequence types tailored for processing of binary data and text " @@ -337,12 +288,10 @@ msgstr "" "даних і текстових рядків, описано у відповідних розділах." #: ../../src/basics/stdtypes.txt:132 -#, fuzzy msgid "Lists" msgstr "Списки" #: ../../src/basics/stdtypes.txt:134 -#, fuzzy msgid "" "Lists are mutable sequences, typically used to store collections of items. " "They may be constructed in several ways:" @@ -352,13 +301,11 @@ msgstr "" "способами:" #: ../../src/basics/stdtypes.txt:137 -#, fuzzy msgid "using a pair of square brackets to denote the empty list: ``[]``" msgstr "" "використовуючи пару квадратних дужок для позначення порожнього списку: ``[]``" #: ../../src/basics/stdtypes.txt:138 -#, fuzzy msgid "" "using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" @@ -366,22 +313,18 @@ msgstr "" "b, c]``" #: ../../src/basics/stdtypes.txt:139 -#, fuzzy msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" #: ../../src/basics/stdtypes.txt:140 -#, fuzzy msgid "using the type constructor: ``list()`` or ``list(iterable)``" msgstr "використовуючи конструктор типу: ``list()`` або ``list(iterable)``" #: ../../src/basics/stdtypes.txt:143 -#, fuzzy msgid "Tuples" msgstr "Кортежі" #: ../../src/basics/stdtypes.txt:145 -#, fuzzy msgid "" "Tuples are immutable sequences, typically used to store collections of data " "or for cases where an immutable sequence of data is needed (such as allowing " @@ -394,40 +337,33 @@ msgstr "" "``dict``). Вони можуть бути побудовані кількома способами:" #: ../../src/basics/stdtypes.txt:150 -#, fuzzy msgid "using a pair of parentheses to denote the empty tuple: ``()``" msgstr "" "використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" #: ../../src/basics/stdtypes.txt:151 -#, fuzzy msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" "з використанням кінцевої коми для одиночного кортежу: ``a,`` або ``(a, b, " "c)``" #: ../../src/basics/stdtypes.txt:152 -#, fuzzy msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" msgstr "розділення елементів комами: ``a, b, c`` або ``(a, b, c)``" #: ../../src/basics/stdtypes.txt:153 -#, fuzzy msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" msgstr "з використанням конструктора типу: ``tuple()`` або ``tuple(iterable)``" #: ../../src/basics/stdtypes.txt:156 -#, fuzzy msgid "Common operations" msgstr "Спільні операції" #: ../../src/basics/stdtypes.txt:161 -#, fuzzy msgid "``x in s`` ``x not in s``" msgstr "``x in s`` ``x not in s``" #: ../../src/basics/stdtypes.txt:161 -#, fuzzy msgid "" "``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " "*x*" @@ -436,42 +372,34 @@ msgstr "" "*x*" #: ../../src/basics/stdtypes.txt:164 -#, fuzzy msgid "``s + t``" msgstr "``s + t``" #: ../../src/basics/stdtypes.txt:164 -#, fuzzy msgid "the concatenation of *s* and *t*" msgstr "конкатенація *s* та *t*" #: ../../src/basics/stdtypes.txt:166 -#, fuzzy msgid "``s * n``" msgstr "``s * n``" #: ../../src/basics/stdtypes.txt:166 -#, fuzzy msgid "equivalent to adding *s* to itself *n* times" msgstr "еквівалентно додаванню *s* до самого себе *n* разів" #: ../../src/basics/stdtypes.txt:168 -#, fuzzy msgid "``s[i]``" msgstr "``s[i]``" #: ../../src/basics/stdtypes.txt:168 -#, fuzzy msgid "*i*-th item of *s*, origin 0" msgstr "*i*-й елемент з *s*, походження 0" #: ../../src/basics/stdtypes.txt:170 -#, fuzzy msgid "``s[i:j]`` ``s[i:j:k]``" msgstr "``s[i:j]`` ``s[i:j:k]``" #: ../../src/basics/stdtypes.txt:170 -#, fuzzy msgid "" "slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " "be omitted." @@ -480,52 +408,42 @@ msgstr "" "можна опустити." #: ../../src/basics/stdtypes.txt:173 -#, fuzzy msgid "``len(s)``" msgstr "``len(s)``" #: ../../src/basics/stdtypes.txt:173 -#, fuzzy msgid "length of *s*" msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:175 -#, fuzzy msgid "``min(s)``" msgstr "``min(s)``" #: ../../src/basics/stdtypes.txt:175 -#, fuzzy msgid "smallest item of *s*" msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:177 -#, fuzzy msgid "``max(s)``" msgstr "``max(s)``" #: ../../src/basics/stdtypes.txt:177 -#, fuzzy msgid "largest item of *s*" msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:179 -#, fuzzy msgid "``s.count(x)``" msgstr "``s.count(x)``" #: ../../src/basics/stdtypes.txt:179 -#, fuzzy msgid "total number of occurrences of *x* in *s*" msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:181 -#, fuzzy msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" #: ../../src/basics/stdtypes.txt:181 -#, fuzzy msgid "" "index of the first occurrence of *x* in *s* at or after index *i* and before " "index *j*" @@ -534,7 +452,6 @@ msgstr "" "індексом *j*" #: ../../src/basics/stdtypes.txt:189 -#, fuzzy msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -547,7 +464,6 @@ msgstr "" "викликає ``TypeError``." #: ../../src/basics/stdtypes.txt:194 -#, fuzzy msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " @@ -560,7 +476,6 @@ msgstr "" "працює наступним чином:" #: ../../src/basics/stdtypes.txt:199 -#, fuzzy msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." @@ -570,7 +485,6 @@ msgstr "" "однаково." #: ../../src/basics/stdtypes.txt:201 -#, fuzzy msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " @@ -581,67 +495,54 @@ msgstr "" "впорядковується коротша колекція." #: ../../src/basics/stdtypes.txt:206 -#, fuzzy msgid "Mutable sequence types" msgstr "Типи змінних послідовностей" #: ../../src/basics/stdtypes.txt:211 -#, fuzzy msgid "``s[i] = x``" msgstr "``s[i] = x``" #: ../../src/basics/stdtypes.txt:211 -#, fuzzy msgid "item *i* of *s* is replaced by *x*" msgstr "елемент *i* в *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:213 -#, fuzzy msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" #: ../../src/basics/stdtypes.txt:213 -#, fuzzy msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" #: ../../src/basics/stdtypes.txt:216 -#, fuzzy msgid "``del s[i:j]``" msgstr "``del s[i:j]``" #: ../../src/basics/stdtypes.txt:216 -#, fuzzy msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:218 -#, fuzzy msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" #: ../../src/basics/stdtypes.txt:218 -#, fuzzy msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" #: ../../src/basics/stdtypes.txt:220 -#, fuzzy msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" #: ../../src/basics/stdtypes.txt:220 -#, fuzzy msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:222 -#, fuzzy msgid "``s.append(x)``" msgstr "``s.append(x)``" #: ../../src/basics/stdtypes.txt:222 -#, fuzzy msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" @@ -649,52 +550,42 @@ msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" #: ../../src/basics/stdtypes.txt:225 -#, fuzzy msgid "``s.clear()``" msgstr "``s.clear()``" #: ../../src/basics/stdtypes.txt:225 -#, fuzzy msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:227 -#, fuzzy msgid "``s.copy()``" msgstr "``s.copy()``" #: ../../src/basics/stdtypes.txt:227 -#, fuzzy msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:229 -#, fuzzy msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" #: ../../src/basics/stdtypes.txt:229 -#, fuzzy msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:232 -#, fuzzy msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" #: ../../src/basics/stdtypes.txt:232 -#, fuzzy msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" #: ../../src/basics/stdtypes.txt:235 -#, fuzzy msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" #: ../../src/basics/stdtypes.txt:235 -#, fuzzy msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -703,47 +594,38 @@ msgstr "" "пропущено - використовуйте останній доступний індекс)" #: ../../src/basics/stdtypes.txt:238 -#, fuzzy msgid "``s.remove(x)``" msgstr "``s.remove(x)``" #: ../../src/basics/stdtypes.txt:238 -#, fuzzy msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" #: ../../src/basics/stdtypes.txt:240 -#, fuzzy msgid "``s.reverse()``" msgstr "``s.reverse()``" #: ../../src/basics/stdtypes.txt:240 -#, fuzzy msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" #: ../../src/basics/stdtypes.txt:243 -#, fuzzy msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" #: ../../src/basics/stdtypes.txt:244 -#, fuzzy msgid "new in Python version 3.3" msgstr "нове в Python версії 3.3" #: ../../src/basics/stdtypes.txt:247 -#, fuzzy msgid "Text sequence type" msgstr "Тип текстової послідовності" #: ../../src/basics/stdtypes.txt:250 -#, fuzzy msgid "String methods" msgstr "Методи рядків" #: ../../src/basics/stdtypes.txt:252 -#, fuzzy msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." @@ -752,7 +634,6 @@ msgstr "" "методи." #: ../../src/basics/stdtypes.txt:297 -#, fuzzy msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." @@ -761,12 +642,10 @@ msgstr "" "символів у Юнікоді." #: ../../src/basics/stdtypes.txt:301 -#, fuzzy msgid "Set types" msgstr "Типи множин" #: ../../src/basics/stdtypes.txt:306 -#, fuzzy msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -781,12 +660,10 @@ msgstr "" "не є підмножинами одна одної і не є надмножинами одна одної)." #: ../../src/basics/stdtypes.txt:313 -#, fuzzy msgid "Mapping type" msgstr "Тип відображення" #: ../../src/basics/stdtypes.txt:315 -#, fuzzy msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " @@ -798,7 +675,6 @@ msgstr "" "набори ключів та їхніх значень." #: ../../src/basics/stdtypes.txt:319 -#, fuzzy msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " @@ -811,17 +687,14 @@ msgstr "" "взаємозамінні для індексації однієї і тієї ж словникової статті." #: ../../src/basics/stdtypes.txt:323 -#, fuzzy msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" #: ../../src/basics/stdtypes.txt:325 -#, fuzzy msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" #: ../../src/basics/stdtypes.txt:326 -#, fuzzy msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" @@ -830,12 +703,10 @@ msgstr "" "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" #: ../../src/basics/stdtypes.txt:328 -#, fuzzy msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" #: ../../src/basics/stdtypes.txt:329 -#, fuzzy msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -844,7 +715,6 @@ msgstr "" "``dict(key=100)``" #: ../../src/basics/stdtypes.txt:335 -#, fuzzy msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." @@ -853,6 +723,5 @@ msgstr "" "мають однакові пари ключ-значення." #: ../../src/basics/stdtypes.txt:338 -#, fuzzy msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." From 7a644bcbe674ef1fdd2b542e1249b37be7679495 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 25 Oct 2023 00:02:20 +0300 Subject: [PATCH 226/689] Move Python keywords table into a separate document --- src/_locales/uk/LC_MESSAGES/appx/_keywords.po | 166 ++++++++++++++++++ src/appx/_keywords.txt | 18 ++ src/intro/index.txt | 19 +- 3 files changed, 185 insertions(+), 18 deletions(-) create mode 100644 src/_locales/uk/LC_MESSAGES/appx/_keywords.po create mode 100644 src/appx/_keywords.txt diff --git a/src/_locales/uk/LC_MESSAGES/appx/_keywords.po b/src/_locales/uk/LC_MESSAGES/appx/_keywords.po new file mode 100644 index 000000000..119daae8c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/_keywords.po @@ -0,0 +1,166 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-24 21:59+0100\n" +"PO-Revision-Date: 2023-10-25 00:01+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/_keywords.txt:1 +msgid "Python Keywords" +msgstr "Ключові слова мови Python" + +#: ../../src/appx/_keywords.txt:5 +msgid "``False``" +msgstr "``False``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``await``" +msgstr "``await``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``else``" +msgstr "``else``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``import``" +msgstr "``import``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``pass``" +msgstr "``pass``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``None``" +msgstr "``None``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``break``" +msgstr "``break``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``except``" +msgstr "``except``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``in``" +msgstr "``in``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``raise``" +msgstr "``raise``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``True``" +msgstr "``True``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``class``" +msgstr "``class``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``finally``" +msgstr "``finally``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``is``" +msgstr "``is``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``return``" +msgstr "``return``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``and``" +msgstr "``and``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``continue``" +msgstr "``continue``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``for``" +msgstr "``for``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``try``" +msgstr "``try``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``as``" +msgstr "``as``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``def``" +msgstr "``def``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``from``" +msgstr "``from``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``nonlocal``" +msgstr "``nonlocal``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``while``" +msgstr "``while``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``assert``" +msgstr "``assert``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``del``" +msgstr "``del``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``global``" +msgstr "``global``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``not``" +msgstr "``not``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``with``" +msgstr "``with``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``async``" +msgstr "``async``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``elif``" +msgstr "``elif``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``if``" +msgstr "``if``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``or``" +msgstr "``or``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``yield``" +msgstr "``yield``" diff --git a/src/appx/_keywords.txt b/src/appx/_keywords.txt new file mode 100644 index 000000000..db30e5ef6 --- /dev/null +++ b/src/appx/_keywords.txt @@ -0,0 +1,18 @@ +.. table:: Python Keywords + :align: center + + +------------+--------------+-------------+--------------+------------+ + | ``False`` | ``await`` | ``else`` | ``import`` | ``pass`` | + +------------+--------------+-------------+--------------+------------+ + | ``None`` | ``break`` | ``except`` | ``in`` | ``raise`` | + +------------+--------------+-------------+--------------+------------+ + | ``True`` | ``class`` | ``finally`` | ``is`` | ``return`` | + +------------+--------------+-------------+--------------+------------+ + | ``and`` | ``continue`` | ``for`` | ``lambda`` | ``try`` | + +------------+--------------+-------------+--------------+------------+ + | ``as`` | ``def`` | ``from`` | ``nonlocal`` | ``while`` | + +------------+--------------+-------------+--------------+------------+ + | ``assert`` | ``del`` | ``global`` | ``not`` | ``with`` | + +------------+--------------+-------------+--------------+------------+ + | ``async`` | ``elif`` | ``if`` | ``or`` | ``yield`` | + +------------+--------------+-------------+--------------+------------+ diff --git a/src/intro/index.txt b/src/intro/index.txt index b81778a4e..9a095e652 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -84,24 +84,7 @@ meaning by the compiler or interpreter because they designate specific built-in functionality of the language. There are only 35 :cite:`docs-python:keywords` in Python and they are: -.. table:: Python Keywords - :align: center - - +------------+--------------+-------------+--------------+------------+ - | ``False`` | ``await`` | ``else`` | ``import`` | ``pass`` | - +------------+--------------+-------------+--------------+------------+ - | ``None`` | ``break`` | ``except`` | ``in`` | ``raise`` | - +------------+--------------+-------------+--------------+------------+ - | ``True`` | ``class`` | ``finally`` | ``is`` | ``return`` | - +------------+--------------+-------------+--------------+------------+ - | ``and`` | ``continue`` | ``for`` | ``lambda`` | ``try`` | - +------------+--------------+-------------+--------------+------------+ - | ``as`` | ``def`` | ``from`` | ``nonlocal`` | ``while`` | - +------------+--------------+-------------+--------------+------------+ - | ``assert`` | ``del`` | ``global`` | ``not`` | ``with`` | - +------------+--------------+-------------+--------------+------------+ - | ``async`` | ``elif`` | ``if`` | ``or`` | ``yield`` | - +------------+--------------+-------------+--------------+------------+ +.. include:: /appx/_keywords.txt .. rubric:: Python is general purpose From 721fd2d9253c84c216daadb7cca27607d84b0e46 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 25 Oct 2023 19:48:21 +0300 Subject: [PATCH 227/689] Add code owners file --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..98751adf3 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,6 @@ +/src/basics/ @shorodilov @Bandydan @Jules57 +/src/vcs/ @shorodilov @Bandydan +/src/rdbms/ @shorodilov @Bandydan +/src/oop/ @shorodilov +/src/django/ @PonomaryovVladyslav @shorodilov +/src/deploy/ @PonomaryovVladyslav @shorodilov From d946d9411b83aecd292c27bb17988d7e36371363 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 07:12:20 +0200 Subject: [PATCH 228/689] Update project dependencies --- poetry.lock | 200 ++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- requirements.txt | 6 +- 3 files changed, 105 insertions(+), 103 deletions(-) diff --git a/poetry.lock b/poetry.lock index 33f88c984..58a237ec6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,16 +14,19 @@ files = [ [[package]] name = "babel" -version = "2.13.0" +version = "2.13.1" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, - {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, ] +[package.dependencies] +setuptools = {version = "*", markers = "python_version >= \"3.12\""} + [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] @@ -41,102 +44,102 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, - {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -829,19 +832,18 @@ test = ["pytest"] [[package]] name = "urllib3" -version = "2.0.6" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, - {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] diff --git a/pyproject.toml b/pyproject.toml index f61e6365c..246bfa4c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2023.09.dev" +version = "2023.11.dev" description = "Python training course materials" license = "MIT" authors = [ diff --git a/requirements.txt b/requirements.txt index b37881a85..b1292bf4c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.13.0 ; python_version >= "3.9" and python_version < "4.0" +babel==2.13.1 ; python_version >= "3.9" and python_version < "4.0" certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" -charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" @@ -37,5 +37,5 @@ sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.0.6 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" From df5b4e3b7b68e87b25feabb3557ff39e580409ba Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 22:58:05 +0200 Subject: [PATCH 229/689] Update submodules --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index b2f2737e8..56ce293ef 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit b2f2737e8fbcce616ec3b22d325c20ca317dfff1 +Subproject commit 56ce293ef4329142767e14c270877fd4d90b1928 From 412542c487ff9f99595751848f0533b265b9953b Mon Sep 17 00:00:00 2001 From: Vlad Ponomarov Date: Mon, 20 Nov 2023 20:04:05 +0100 Subject: [PATCH 230/689] add 2 lectures --- lesson3.md | 335 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lesson4.md | 281 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 616 insertions(+) create mode 100644 lesson3.md create mode 100644 lesson4.md diff --git a/lesson3.md b/lesson3.md new file mode 100644 index 000000000..d42198d47 --- /dev/null +++ b/lesson3.md @@ -0,0 +1,335 @@ +# Лекция 3: Списки, Строки как Коллекции, Срезы Строк и Списков, методы строк, Циклы `for` и `while`. + +## 1. Списки (Lists) + +Список - это упорядоченная коллекция элементов, которая может содержать объекты разных типов. Они очень полезны при работе с множеством данных. + +### Создание списков + +Создать список можно, заключив элементы в квадратные скобки `[]` и разделив их запятыми. + +```python +fruits = ['яблоко', 'банан', 'груша', 'апельсин'] +numbers = [1, 2, 3, 4, 5] +mixed_list = [1, 'два', 3.0, True] +``` + +### Доступ к элементам списка + +Чтобы получить доступ к элементам списка, используйте индексацию, начиная с 0. + +```python +print(fruits[0]) # Вывод: 'яблоко' +print(numbers[2]) # Вывод: 3 +``` + +### Изменение элементов списка + +Списки являются изменяемыми, поэтому вы можете изменять их элементы. + +```python +fruits[1] = 'киви' +print(fruits) # Вывод: ['яблоко', 'киви', 'груша', 'апельсин'] +``` + +### Добавление и удаление элементов + +Чтобы добавить элемент в конец списка, используйте метод `append()`. + +```python +fruits.append('ананас') +print(fruits) # Вывод: ['яблоко', 'киви', 'груша', 'апельсин', 'ананас'] +``` + +Чтобы удалить элемент по индексу, используйте `del`. + +```python +del fruits[2] +print(fruits) # Вывод: ['яблоко', 'киви', 'апельсин', 'ананас'] +``` + +## 2. Строки как Коллекции (Strings as Collections) + +Строки в Python также можно рассматривать как коллекции символов. + +### Доступ к символам строки + +Для доступа к символам строки используйте индексацию, так же как и для списков. + +```python +text = "Hello, World!" +print(text[0]) # Вывод: 'H' +``` + +### Срезы строк (String Slicing) + +Срезы позволяют получать подстроки из строки. Синтаксис среза: `строка[начало:конец:шаг]`. + +```python +substring = text[0:5] # Получение подстроки "Hello" +print(substring) # Вывод: 'Hello' + +substring = text[7:] # Получение подстроки с 7-го символа до конца +print(substring) # Вывод: 'World!' + +substring = text[:5] # Получение подстроки с начала до 5-го символа +print(substring) # Вывод: 'Hello' + +substring = text[::2] # Получение каждого второго символа +print(substring) # Вывод: 'Hlo ol!' +``` + +## 3. Циклы `for` и `while` + +Циклы позволяют выполнять повторяющиеся операции. + +### Цикл `for` + +Цикл `for` используется для итерации по коллекциям, таким как списки и строки. + +```python +fruits = ['яблоко', 'киви', 'груша', 'апельсин'] + +for fruit in fruits: + print(fruit) +``` + +### Цикл `while` + +Цикл `while` выполняется до тех пор, пока условие истинно. + +```python +count = 0 + +while count < 5: + print(count) + count += 1 +``` + +### Ключевое слово `break` + +`break` используется для выхода из цикла досрочно, даже если условие цикла остается истинным. Обычно `break` используется внутри условия, чтобы определить момент завершения цикла. + +Пример с циклом `while`: + +```python +count = 0 + +while count < 5: + if count == 3: + break # Выход из цикла, если count равно 3 + print(count) + count += 1 +``` + +Пример с циклом `for`: + +```python +fruits = ['яблоко', 'киви', 'груша', 'апельсин'] + +for fruit in fruits: + if fruit == 'груша': + break # Выход из цикла при нахождении 'груши' + print(fruit) +``` + +### Ключевое слово `continue` + +`continue` используется для перехода к следующей итерации цикла, игнорируя оставшуюся часть текущей итерации. Обычно `continue` используется внутри условия для пропуска определенных действий. + +Пример с циклом `while`: + +```python +count = 0 + +while count < 5: + count += 1 + if count == 3: + continue # Пропустить вывод числа 3 + print(count) +``` + +Пример с циклом `for`: + +```python +fruits = ['яблоко', 'киви', 'груша', 'апельсин'] + +for fruit in fruits: + if fruit == 'груша': + continue # Пропустить вывод 'груши' + print(fruit) +``` + +Ключевые слова `break` и `continue` полезны при создании более сложной логики в циклах и позволяют управлять потоком выполнения программы в более гибком стиле. + +Это основы работы с ключевыми словами `break` и `continue` в Python, списками, строками, срезами и циклами. Надеюсь, что эта лекция помогла вам лучше понять эти концепции и как их использовать в вашем коде. Удачи в изучении Python и разработке! + + +### Бесконечные циклы + +Иногда может потребоваться создать бесконечный цикл, который будет выполняться до тех пор, пока его не прервут. Для этого используется конструкция `while True`. + +```python +while True: + # Этот цикл будет выполняться бесконечно + user_input = input("Введите что-нибудь (для выхода наберите 'q'): ") + if user_input == 'q': + break # Выход из цикла при вводе 'q' +``` + +Бесконечные циклы могут быть полезными в тех случаях, когда нужно создать программу, которая работает в фоновом режиме и ожидает какого-либо события, либо когда нужно регулярно выполнять какую-то задачу, например, мониторинг сенсоров или сетевых подключений. + +Не забывайте, что бесконечные циклы должны иметь какой-то механизм для прерывания, иначе программа будет выполняться бесконечно и может привести к зависанию. + +Практика: + +1. Создайте список numbers с числами от 1 до 10. Используя цикл for, выведите каждое число из списка numbers, возведенное в квадрат. Используя цикл for, найдите сумму всех чисел в списке numbers. +2. Создайте строку text с произвольным текстом. Используя цикл for, выведите каждый символ из строки text. Используя срезы, выведите первые 5 символов и последние 5 символов из строки text. +3. Создайте список чисел от 1 до 20. Используя цикл for, выведите все числа из списка, которые делятся на 3 без остатка. Используя цикл while, найдите сумму всех чисел от 1 до 100. Создайте бесконечный цикл с использованием while True, который будет предлагать пользователю ввод числа и выводить квадрат этого числа. Добавьте условие для выхода из цикла при вводе значения "0" или "exit". +4. Создайте список слов words, включая некоторые повторяющиеся слова. Используя цикл for, выведите все уникальные слова из списка. + + +## Полезные методы строк + +### Длина строки + +Для определения длины строки используйте функцию `len()`. + +```python +text = "Привет, мир!" +length = len(text) # Длина строки: 12 +``` + +### Конкатенация строк + +Для объединения (конкатенации) строк используйте оператор `+`. + +```python +str1 = "Hello" +str2 = "World" +result = str1 + ", " + str2 # Результат: "Hello, World" +``` + +### Умножение строк + +Вы можете умножить строку на число, чтобы повторить ее несколько раз. + +```python +text = "Привет" +result = text * 3 # Результат: "ПриветПриветПривет" +``` + +## Методы строк + +Python предоставляет множество методов для работы с строками. Ниже представлены некоторые из наиболее часто используемых методов. + +### `str.upper()` и `str.lower()` + +Метод `upper()` преобразует все символы строки в верхний регистр, а `lower()` - в нижний. + +```python +text = "Привет, мир!" +uppercase = text.upper() # Результат: "ПРИВЕТ, МИР!" +lowercase = text.lower() # Результат: "привет, мир!" +``` + +### `str.strip()` + +Метод `strip()` удаляет пробелы и символы перевода строки с начала и конца строки. + +```python +text = " Текст с лишними пробелами " +stripped_text = text.strip() # Результат: "Текст с лишними пробелами" +``` + +### `str.split()` + +Метод `split()` разбивает строку на список подстрок, используя разделитель. + +```python +text = "Яблоки, Груши, Бананы" +fruits = text.split(", ") # Результат: ['Яблоки', 'Груши', 'Бананы'] +``` + +### `str.replace()` + +Метод `replace()` заменяет все вхождения подстроки на другую подстроку. + +```python +text = "Привет, мир!" +new_text = text.replace("мир", "вселенная") # Результат: "Привет, вселенная!" +``` + +### `str.find()` и `str.index()` + +Методы `find()` и `index()` находят первое вхождение подстроки в строку и возвращают индекс этого вхождения. Разница между ними в том, что `find()` возвращает -1, если подстрока не найдена, а `index()` вызывает исключение. + +```python +text = "Это пример текста с примерами" +index1 = text.find("пример") # Результат: 4 +index2 = text.index("пример") # Результат: 4 +index3 = text.find("нет") # Результат: -1 +# index4 = text.index("нет") # Вызовет ValueError +``` + +### `str.count()` + +Метод `count()` подсчитывает количество вхождений подстроки в строку. + +```python +text = "Это пример текста с примерами" +count = text.count("пример") # Результат: 2 +``` + +### `str.startswith()` и `str.endswith()` + +Методы `startswith()` и `endswith()` проверяют, начинается ли строка с указанной подстроки или заканчивается ей. + +```python +text = "Это пример текста" +starts_with = text.startswith("Это") # Результат: True +ends_with = text.endswith("текста") # Результат: True +``` + +### `str.join()` + +Метод `join()` объединяет список строк с помощью текущей строки в качестве разделителя. + +```python +fruits = ['Яблоки', 'Груши', 'Бананы'] +text = ', '.join(fruits) # Результат: "Яблоки, Груши, Бананы" +``` + +## Форматирование строк + +Python также предоставляет мощные инструменты для форматирования строк. Один из способов - это использование метода `str.format()`. + +```python +name = "Иван" +age = 30 +text = "Привет, меня зовут {} и мне {} лет.".format(name, age) +# Результат: "Привет, меня зовут Иван и мне 30 лет." +``` + +### F-строки + +Python 3.6 и выше поддерживают f-строки (f-strings), которые представляют собой удобный способ вставки переменных и выражений в строки. + +```python +name = "Иван" +age = 30 +text = f"Привет, меня зовут {name} и мне {age} лет." +# Результат: " + +Привет, меня зовут Иван и мне 30 лет." +``` + +F-строки начинаются с буквы `f` перед открывающей кавычкой, и в фигурных скобках `{}` можно вставлять переменные или выражения, которые будут вычислены и подставлены в строку. + +Практика: + +1. Подсчет гласных букв: Попросите пользователя ввести строку текста, а затем используйте методы строк для подсчета количества гласных букв (а, е, и, о, у) в этой строке. + +2. Замена слов: Создайте строку, содержащую предложение, и попросите пользователя ввести слово. Затем замените все вхождения этого слова в предложении на слово "заменено". Выведите измененное предложение. + +3. Создайте список с повторяющимися элементами. Используйте методы списков для удаления дубликатов и выведите измененный список. \ No newline at end of file diff --git a/lesson4.md b/lesson4.md new file mode 100644 index 000000000..cb2188780 --- /dev/null +++ b/lesson4.md @@ -0,0 +1,281 @@ +# Лекция 4: Некоторые build-in методы. List comprehension Работа с файлами + +# Встроенные Методы в Python: Работа с Данными и Коллекциями + +Python - это язык программирования, который предоставляет множество встроенных (built-in) методов для работы с данными и +коллекциями. Эти методы упрощают манипуляции с данными и делают код более читаемым и эффективным. В этой статье мы +рассмотрим несколько встроенных методов Python, включая `all`, `any`, `sorted`, `len`, `sum`, `min` и `max`. + +## Методы для Работы с Коллекциями + +### `all()` и `any()` + +Метод `all()` проверяет, все ли элементы коллекции истинны (равны `True`). Если все элементы истинны, он +возвращает `True`, иначе - `False`. Рассмотрим пример: + +```python +numbers = [1, 2, 3, 4, 5] +result = all(x > 0 for x in numbers) # True, так как все числа положительные +``` + +Метод `any()` проверяет, есть ли хотя бы один истинный элемент в коллекции. Если хотя бы один элемент истинен, он +возвращает `True`, иначе - `False`. Рассмотрим пример: + +```python +numbers = [1, 2, 3, -1, -2] +result = any(x < 0 for x in numbers) # True, так как есть отрицательные числа +``` + +### `sorted()` + +Метод `sorted()` сортирует элементы коллекции в порядке возрастания (по умолчанию) и возвращает новый список. Он также +может принимать дополнительный аргумент `reverse=True` для сортировки в обратном порядке. Рассмотрим пример: + +```python +numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] +sorted_numbers = sorted(numbers) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] +``` + +## Методы для Работы с Данными + +### `len()` + +Метод `len()` используется для определения длины (количества элементов) коллекции, включая строки, списки, кортежи и +другие. Рассмотрим примеры: + +```python +text = "Привет, мир!" +length = len(text) # Длина строки: 12 + +numbers = [1, 2, 3, 4, 5] +length = len(numbers) # Длина списка: 5 +``` + +### `sum()` + +Метод `sum()` вычисляет сумму всех элементов числовой коллекции, такой как список или кортеж. Рассмотрим пример: + +```python +numbers = [1, 2, 3, 4, 5] +total = sum(numbers) # Сумма: 15 +``` + +### `min()` и `max()` + +Метод `min()` находит наименьший элемент в числовой коллекции, а метод `max()` - наибольший. Рассмотрим пример: + +```python +numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] +min_value = min(numbers) # Минимум: 1 +max_value = max(numbers) # Максимум: 9 +``` + +Python - это язык программирования, который известен своей читаемостью и эффективностью в написании кода. Одним из +мощных инструментов, предоставляемых Python, является List Comprehension, или генераторы списков. Это синтаксическая +конструкция, которая позволяет создавать списки более компактно и эффективно. В этой статье мы рассмотрим, что такое +List Comprehension и как его использовать. + +## Что такое List Comprehension? + +List Comprehension (генераторы списков) - это способ создания новых списков в Python на основе существующего списка или +другой итерируемой последовательности. Этот метод позволяет сократить количество кода и улучшить читаемость, особенно +при создании списков на основе условий. + +Синтаксис List Comprehension выглядит следующим образом: + +```python +new_list = [expression for item in iterable if condition] +``` + +Где: + +- `new_list` - новый список, который будет создан. +- `expression` - выражение, которое определяет, какие элементы будут включены в новый список. +- `item` - переменная, которая принимает каждый элемент из итерируемой последовательности. +- `iterable` - итерируемая последовательность, например, список или кортеж. +- `condition` (опционально) - условие, которому должен соответствовать элемент, чтобы быть включенным в новый список. + +## Примеры использования List Comprehension + +### Создание списка чисел от 0 до 9: + +```python +numbers = [x for x in range(10)] +# Результат: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +### Создание списка квадратов чисел от 0 до 9: + +```python +squares = [x ** 2 for x in range(10)] +# Результат: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] +``` + +### Фильтрация элементов из списка: + +```python +numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +even_numbers = [x for x in numbers if not x % 2] +# Результат: [2, 4, 6, 8, 10] +``` + +### Преобразование строк в список слов: + +```python +text = "Привет, мир! Давайте изучать Python." +words = [word for word in text.split()] +# Результат: ['Привет,', 'мир!', 'Давайте', 'изучать', 'Python.'] +``` + +## Вложенные List Comprehension + +List Comprehension также поддерживает вложенные конструкции, позволяя создавать списки более сложной структуры. + +### Создание матрицы: + +```python +matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] +flattened_matrix = [x for row in matrix for x in row] +# Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +### Получение диагонали матрицы: + +```python +matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] +diagonal = [matrix[i][i] for i in range(len(matrix))] +# Результат: [1, 5, 9] +``` + +Практика: + +1. Используя any, выяснить все ли числа в списке положительные +2. Используя all, выяснить все ли числа в списке четные +3. Из двух списков чисел выяснить в каком сумма элементов больше + +# Работа с Файлами в Python: Чтение и Запись + +Работа с файлами - важная часть программирования в Python. В этой статье мы рассмотрим основные операции чтения и записи +файлов, а также различные способы работы с текстовыми и бинарными файлами в Python. + +## Открытие и Закрытие Файла + +Прежде чем начать работать с файлом, необходимо его открыть с помощью функции `open()`. Эта функция принимает два +аргумента: имя файла и режим доступа (чтение, запись и т. д.). Например, чтобы открыть файл для чтения, используйте +следующий код: + +```python +file = open("example.txt", "r") +``` + +После завершения работы с файлом, его следует закрыть с помощью метода `close()`: + +```python +file.close() +``` + +Закрытие файла важно, чтобы освободить ресурсы и обеспечить целостность данных. + +## Чтение из Файла + +### Чтение всего файла + +Для чтения всего содержимого файла можно использовать метод `read()`: + +```python +file = open("example.txt", "r") +content = file.read() +file.close() +``` + +### Чтение по строкам + +Чтение файла по строкам можно выполнить с помощью итерации: + +```python +file = open("example.txt", "r") +for line in file: + print(line) +file.close() +``` + +### Чтение определенного количества символов + +Можно прочитать определенное количество символов из файла с помощью метода `read()` с аргументом: + +```python +file = open("example.txt", "r") +partial_content = file.read(50) # Прочитать первые 50 символов файла +file.close() +``` + +## Запись в Файл + +### Запись текста в файл + +Для записи текста в файл используйте режим доступа "w" (запись) с функцией `write()`: + +```python +file = open("example.txt", "w") +file.write("Привет, мир!") +file.close() +``` + +Если файл не существует, он будет создан. Если файл существует, его содержимое будет заменено. + +### Добавление текста в файл + +Чтобы добавить текст к существующему файлу, используйте режим доступа "a" (добавление): + +```python +file = open("example.txt", "a") +file.write("\nДополнительная строка") +file.close() +``` + +## Автоматическое Закрытие Файла (Контекстный менеджер) + +Python предоставляет удобный способ автоматического закрытия файла после завершения работы с ним, используя контекстный +менеджер (`with`): + +```python +with open("example.txt", "r") as file: + content = file.read() +# Файл автоматически закроется после завершения блока with +``` + +## Работа с Бинарными Файлами + +Все вышеупомянутые операции могут быть выполнены как с текстовыми, так и с бинарными файлами. Для работы с бинарными +файлами используются режимы доступа "rb" (чтение бинарного файла) и "wb" (запись бинарного файла). + +```python +# Чтение бинарного файла +with open("binary_file.bin", "rb") as file: + binary_data = file.read() + +# Запись бинарного файла +with open("binary_file.bin", "wb") as file: + binary_data = b'\x00\x01\x02\x03\x04' + file.write(binary_data) +``` + +Практика: + +1. **Чтение файла и вывод его содержимого**: Cоздайте текстовый файл `sample.txt` с несколькими строками текста. + Написать программу, которая открывает файл и выводит его содержимое на экран. + +2. **Запись в файл**: Написать программу, которая запрашивает у пользователя несколько строк текста + и записывает их в файл с именем `output.txt`. + +3. **Копирование файла**: Создайте два текстовых файла `source.txt` и `destination.txt`. Написать + программу, которая читает содержимое `source.txt` и записывает его в `destination.txt`. + +4. **Анализ файла**: Создайте текстовый файл со списком чисел. Написать программу, которая читает файл, и печатает самое + большое число из файла. + +5. **Конвертация файлов**: Создайте текстовый файл с температурами в градусах Цельсия. Написать программу, которая + читает файл, конвертирует температуры в градусы Фаренгейта и записывает + результаты в новый файл. + +6. **Подсчет слов в файле**: Написать программу, которая считает количество слов в текстовом файле. From b328787d896e61050b39d7dc957ebe1d231d9d43 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 7 Oct 2023 15:37:50 +0300 Subject: [PATCH 231/689] L29, L30: update assignment links --- lesson29.md | 2 +- lesson30.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson29.md b/lesson29.md index 0f29f7922..b9df03eaf 100644 --- a/lesson29.md +++ b/lesson29.md @@ -652,7 +652,7 @@ def index(request): Продолжаем собирать блог -https://edu-python-course.github.io/_build/html/uk/appx/blog.html#challenge-templates +https://edu-python-course.github.io/_build/html/uk/appx/blog/spec.html#challenge-templates На данном этапе мы пока не можем реализовать все, что указанно в спецификации, поэтому на текущем моменте надо реализовать следующие страницы: diff --git a/lesson30.md b/lesson30.md index b7153097c..f22aa1969 100644 --- a/lesson30.md +++ b/lesson30.md @@ -527,7 +527,7 @@ class Membership(models.Model): # Домашнее задание / Практика: -https://edu-python-course.github.io/_build/html/uk/appx/blog.html#challenge-data-models +https://edu-python-course.github.io/_build/html/uk/appx/blog/spec.html#challenge-data-models topic <--> blogpost = m2m: у blogpost должен быть хотя бы 1 topic From e52af3d114e94e3fee230d7402d7fa011cfe1d06 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 3 Nov 2022 23:50:32 +0200 Subject: [PATCH 232/689] Started global course updated Updated gitignore rules. Added project dependencies suitable for pip and poetry. Added builds automation config: make. --- .gitignore | 27 +- Makefile | 42 +++ README.rst | 33 +++ poetry.lock | 645 +++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 45 ++++ requirements.txt | 174 +++++++++++++ src/conf.py | 40 +++ src/index.txt | 7 + 8 files changed, 1012 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 README.rst create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 src/conf.py create mode 100644 src/index.txt diff --git a/.gitignore b/.gitignore index 744eb8cad..3ce2145a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,27 @@ +# virtual environemt +/.venv/ +/.env/ +/venv/ +/env/ + +# ide configs +/.vscode/ /.idea/ -.vscode + +# emacs cache and backup files +\#* +*~ + +# temporary files storage +/temp/ +/tmp/ + +# documentation builds +_builds/ +_build/ +builds/ +build/ + +# translation object files +*.pot +*.mo diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..050679cb3 --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +# Python training course makefile for builds automation + +# Sphinx settings +SPHINX_SRC = src +SPHINX_CONFIG = $(SPHINX_SRC)/conf.py + +# Internationalization +SPHINXINTL_LANGUAGE ?= ua +LANGUAGE ?= en + +# Sphinx build directories +_SPHINX_OUT_BASE = _build +GETTEXT_DIR = $(_SPHINX_OUT_BASE)/gettext +LATEX_DIR = $(_SPHINX_OUT_BASE)/latex/$(LANGUAGE) +HTML_DIR = $(_SPHINX_OUT_BASE)/html/$(LANGUAGE) + +# Sphinx builders +SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) + +# Makefile targets +all : clean + +clean : + @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" + @rm -rf $(_SPHINX_OUT_BASE) + +html : + @echo "LANGUAGE=$(LANGUAGE): generating HTML output at $(HTML_DIR)" + @$(SPHINX_BUILD) -b html $(SPHINX_SRC) $(HTML_DIR) + +latex : + @echo "LANGUAGE=$(LANGUAGE): generating LaTeX output at $(LATEX_DIR)" + @$(SPHINX_BUILD) -b latex $(SPHINX_SRC) $(LATEX_DIR) + +pdf : latex + @make -C "$(LATEX_DIR)" + +gettext : + @$(SPHINX_BUILD) -b gettext $(SPHINX_SRC) $(GETTEXT_DIR) + +locales : gettext + @sphinx-intl -c $(SPHINX_CONFIG) update -p $(GETTEXT_DIR) diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..2fc5c6d43 --- /dev/null +++ b/README.rst @@ -0,0 +1,33 @@ +############################################################################### + PYTHON TRAINING COURSE +############################################################################### + +This is the training course to master the Python programming language. This +includes the very basics programming topics like data types, variables and +object-oriented programming and advanced topics like multithreading and +web-frameworks for Python. + +Getting started +=============== + +Installing dependencies +----------------------- + +This project comes with dependencies listed in formats suitable for `pip`_ +and `poetry`_ package managers. It's recommended to use virtual environment +while working with this project. + +To install dependencies via pip do: + +.. code-block:: + + pip install -r requirements.txt + +To do the same using poetry: + +.. code-block:: + + poetry install + +.. _pip: https://pip.pypa.io +.. _poetry: https://python-poetry.org diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..7730312c0 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,645 @@ +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "babel" +version = "2.11.0" +description = "Internationalization utilities" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +name = "certifi" +version = "2022.9.24" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "charset-normalizer" +version = "2.1.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "5.0.0" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markdown-it-py" +version = "2.1.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] +profiling = ["gprof2dot"] +plugins = ["mdit-py-plugins"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] +code_style = ["pre-commit (==2.6)"] +benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mdit-py-plugins" +version = "0.3.1" +description = "Collection of plugins for markdown-it-py" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" + +[package.extras] +code_style = ["pre-commit"] +rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "myst-parser" +version = "0.18.1" +description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +docutils = ">=0.15,<0.20" +jinja2 = "*" +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = ">=0.3.1,<0.4.0" +pyyaml = "*" +sphinx = ">=4,<6" +typing-extensions = "*" + +[package.extras] +code_style = ["pre-commit (>=2.12,<3.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +rtd = ["ipython", "sphinx-book-theme", "sphinx-design", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] +testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.0)", "sphinx-pytest", "sphinx (<5.2)"] + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pygments" +version = "2.13.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "pytz" +version = "2022.6" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.28.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "5.3.0" +description = "Python documentation generator" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.20" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.12" +requests = ">=2.5.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest (>=4.6)", "html5lib", "typed-ast", "cython"] + +[[package]] +name = "sphinx-intl" +version = "2.0.1" +description = "Sphinx utility that make it easy to translate and to apply translation." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +babel = "*" +click = "*" +sphinx = "*" + +[package.extras] +test = ["pytest", "mock"] +transifex = ["transifex_client (>=0.11)"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.1.0" +description = "Read the Docs theme for Sphinx" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6,<6" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +test = ["html5lib", "pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["mypy", "flake8", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "urllib3" +version = "1.26.12" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" + +[package.extras] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "zipp" +version = "3.10.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.9" +content-hash = "51f6df5deeeab6ac6526e6be2fa9b37d26f6d30651d3d4f7ee661b97d456fecb" + +[metadata.files] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +babel = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, +] +certifi = [ + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +imagesize = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] +importlib-metadata = [ + {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, + {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, +] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +markdown-it-py = [ + {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, + {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +mdit-py-plugins = [ + {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"}, + {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"}, +] +mdurl = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] +myst-parser = [ + {file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d"}, + {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pygments = [ + {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, + {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pytz = [ + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, +] +sphinx-intl = [ + {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, + {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.1.0-py2.py3-none-any.whl", hash = "sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5"}, + {file = "sphinx_rtd_theme-1.1.0.tar.gz", hash = "sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] +urllib3 = [ + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, +] +zipp = [ + {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, + {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..8ec234817 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,45 @@ +[tool.poetry] +name = "python-course" +version = "0.1.0" +description = "" +license = "MIT" +authors = [ + "Vladyslav Ponomaryov", + "Serhii Horodilov " +] +maintainers = [ + "Serhii Horodilov " +] +readme = "README.rst" +homepage = "" # todo: +repository = "https://github.com/edu-python-course/edu-python-course.github.io" +keywords = [ + "python", + "training", + "course", + "education" +] +classifiers = [ + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Natural Language :: Ukrainian", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Documentation", + "Topic :: Documentation :: Sphinx", + "Topic :: Education" +] + +[tool.poetry.dependencies] +python = "^3.9" +Sphinx = "^5.3.0" +sphinx-intl = "^2.0.1" +sphinx-rtd-theme = "^1.1.0" +myst-parser = "^0.18.1" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..8edb53729 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,174 @@ +alabaster==0.7.12; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 +babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ + --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 +certifi==2022.9.24; python_version >= "3.7" and python_version < "4" \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 +charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +click==8.1.3; python_version >= "3.7" \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e +colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 +docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 \ + --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 +idna==3.4; python_version >= "3.7" and python_version < "4" \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 +imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a +importlib-metadata==5.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ + --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 \ + --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab +jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 +markdown-it-py==2.1.0; python_version >= "3.7" \ + --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da \ + --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 +markupsafe==2.1.1; python_version >= "3.7" \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b +mdit-py-plugins==0.3.1; python_version >= "3.7" \ + --hash=sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441 \ + --hash=sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1 +mdurl==0.1.2; python_version >= "3.7" \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +myst-parser==0.18.1; python_version >= "3.7" \ + --hash=sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d \ + --hash=sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8 +packaging==21.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb +pygments==2.13.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 \ + --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 +pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.6" \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb +pytz==2022.6; python_version >= "3.6" \ + --hash=sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427 \ + --hash=sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2 +pyyaml==6.0; python_version >= "3.7" \ + --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ + --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ + --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 \ + --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ + --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ + --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ + --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ + --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ + --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ + --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ + --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ + --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ + --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ + --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ + --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ + --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ + --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ + --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ + --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ + --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ + --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ + --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ + --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ + --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ + --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ + --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ + --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 +requests==2.28.1; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 +snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 +sphinx-intl==2.0.1; python_version >= "3.5" \ + --hash=sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4 \ + --hash=sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55 +sphinx-rtd-theme==1.1.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") \ + --hash=sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5 \ + --hash=sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3 +sphinx==5.3.0; python_version >= "3.6" \ + --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 \ + --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d +sphinxcontrib-applehelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 \ + --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a +sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \ + --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e +sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 \ + --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 +sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 +sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ + --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 \ + --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd +typing-extensions==4.4.0; python_version >= "3.7" \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa +urllib3==1.26.12; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e +zipp==3.10.0; python_version < "3.10" and python_version >= "3.7" \ + --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ + --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 diff --git a/src/conf.py b/src/conf.py new file mode 100644 index 000000000..cf76ae6af --- /dev/null +++ b/src/conf.py @@ -0,0 +1,40 @@ +# Sphinx documentation generator configuration + +from datetime import datetime + +# project information +project = "Python Training Course" +project_copyright = \ + f"{datetime.now().year}, Python training course authors and contributors" +authors = "Vladyslav Ponomaryov \\and Serhii Horodilov" +version = "2022.11.dev" + +# general configuration +master_doc = root_doc = "index" +extensions = [ + "sphinx_rtd_theme", + "myst_parser", +] +source_suffix = { + ".txt": "restructuredtext", + ".rst": "restructuredtext", + ".md": "markdown", +} +needs_sphinx = "4.0" +exclude_patterns = [] +suppress_warnings = [] + +# options for internationalization +language = "en" +locale_dirs = ["_locales"] + +# options for HTML output +html_theme = "sphinx_rtd_theme" +# html_favicon = "relative/path/to/favicon" todo + +# options for LaTeX output +latex_doc = project.title().replace(" ", "") + ".tex" +latex_engine = "xelatex" +latex_documents = [ + (master_doc, latex_doc, project, authors, "manual", False), +] diff --git a/src/index.txt b/src/index.txt new file mode 100644 index 000000000..05a855ca1 --- /dev/null +++ b/src/index.txt @@ -0,0 +1,7 @@ +.. master document + +############################################################################### + PYTHON TRAINING COURSE +############################################################################### + +This is a training course that will help master Python programming language. From 56ba8bf31572dd98d3fc5c969be870216c06c7c5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 4 Nov 2022 01:54:37 +0200 Subject: [PATCH 233/689] Created base documentation structure --- src/basics/controlflow.txt | 3 +++ src/basics/datatypes.txt | 3 +++ src/basics/exceptions.txt | 3 +++ src/basics/functions.txt | 3 +++ src/basics/index.txt | 15 +++++++++++++++ src/basics/modules.txt | 3 +++ src/basics/pep8.txt | 3 +++ src/basics/testing.txt | 3 +++ src/basics/variables.txt | 3 +++ src/deploy/index.txt | 6 ++++++ src/django/index.txt | 6 ++++++ src/flask/index.txt | 6 ++++++ src/index.txt | 12 +++++++++++- src/intro/index.txt | 3 +++ src/linux/index.txt | 6 ++++++ src/oop/index.txt | 11 +++++++++++ src/oop/inheritance.txt | 3 +++ src/oop/intro.txt | 3 +++ src/oop/patterns.txt | 3 +++ src/oop/solid.txt | 3 +++ src/rdbms/index.txt | 6 ++++++ 21 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/basics/controlflow.txt create mode 100644 src/basics/datatypes.txt create mode 100644 src/basics/exceptions.txt create mode 100644 src/basics/functions.txt create mode 100644 src/basics/index.txt create mode 100644 src/basics/modules.txt create mode 100644 src/basics/pep8.txt create mode 100644 src/basics/testing.txt create mode 100644 src/basics/variables.txt create mode 100644 src/deploy/index.txt create mode 100644 src/django/index.txt create mode 100644 src/flask/index.txt create mode 100644 src/intro/index.txt create mode 100644 src/linux/index.txt create mode 100644 src/oop/index.txt create mode 100644 src/oop/inheritance.txt create mode 100644 src/oop/intro.txt create mode 100644 src/oop/patterns.txt create mode 100644 src/oop/solid.txt create mode 100644 src/rdbms/index.txt diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt new file mode 100644 index 000000000..93b4e4add --- /dev/null +++ b/src/basics/controlflow.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Control Flow +******************************************************************************* diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt new file mode 100644 index 000000000..b49e455dd --- /dev/null +++ b/src/basics/datatypes.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Data Types +******************************************************************************* diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt new file mode 100644 index 000000000..2d5056873 --- /dev/null +++ b/src/basics/exceptions.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Errors and Exceptions +******************************************************************************* diff --git a/src/basics/functions.txt b/src/basics/functions.txt new file mode 100644 index 000000000..36a1acce6 --- /dev/null +++ b/src/basics/functions.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Functions +******************************************************************************* diff --git a/src/basics/index.txt b/src/basics/index.txt new file mode 100644 index 000000000..e59340e4f --- /dev/null +++ b/src/basics/index.txt @@ -0,0 +1,15 @@ +############################################################################### + Python Basics +############################################################################### + +.. toctree:: + :name: basics + + variables + datatypes + controlflow + functions + modules + exceptions + pep8 + testing diff --git a/src/basics/modules.txt b/src/basics/modules.txt new file mode 100644 index 000000000..6e757289f --- /dev/null +++ b/src/basics/modules.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Pythons Modules and Imports +******************************************************************************* diff --git a/src/basics/pep8.txt b/src/basics/pep8.txt new file mode 100644 index 000000000..4f805f71b --- /dev/null +++ b/src/basics/pep8.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Style Guides: PEP8 +******************************************************************************* diff --git a/src/basics/testing.txt b/src/basics/testing.txt new file mode 100644 index 000000000..6507d155f --- /dev/null +++ b/src/basics/testing.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Testing +******************************************************************************* diff --git a/src/basics/variables.txt b/src/basics/variables.txt new file mode 100644 index 000000000..99cd15899 --- /dev/null +++ b/src/basics/variables.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Variables +******************************************************************************* diff --git a/src/deploy/index.txt b/src/deploy/index.txt new file mode 100644 index 000000000..2bcaf44bc --- /dev/null +++ b/src/deploy/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Application Deployment +############################################################################### + +.. toctree:: + :name: deploy diff --git a/src/django/index.txt b/src/django/index.txt new file mode 100644 index 000000000..2fe584b69 --- /dev/null +++ b/src/django/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Django Framework +############################################################################### + +.. toctree:: + :name: django diff --git a/src/flask/index.txt b/src/flask/index.txt new file mode 100644 index 000000000..607e139fa --- /dev/null +++ b/src/flask/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Flask Framework +############################################################################### + +.. toctree:: + :name: flask diff --git a/src/index.txt b/src/index.txt index 05a855ca1..0d5b6e006 100644 --- a/src/index.txt +++ b/src/index.txt @@ -4,4 +4,14 @@ PYTHON TRAINING COURSE ############################################################################### -This is a training course that will help master Python programming language. +.. toctree:: + :name: master + + intro/index + basics/index + rdbms/index + oop/index + flask/index + django/index + linux/index + deploy/index diff --git a/src/intro/index.txt b/src/intro/index.txt new file mode 100644 index 000000000..aca6a9589 --- /dev/null +++ b/src/intro/index.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Introduction to Python +******************************************************************************* diff --git a/src/linux/index.txt b/src/linux/index.txt new file mode 100644 index 000000000..363585aa9 --- /dev/null +++ b/src/linux/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Linux Basics +############################################################################### + +.. toctree:: + :name: linux diff --git a/src/oop/index.txt b/src/oop/index.txt new file mode 100644 index 000000000..eac03d924 --- /dev/null +++ b/src/oop/index.txt @@ -0,0 +1,11 @@ +############################################################################### + Object-Oriented Programming +############################################################################### + +.. toctree:: + :name: oop + + intro + inheritance + patterns + solid diff --git a/src/oop/inheritance.txt b/src/oop/inheritance.txt new file mode 100644 index 000000000..30cded93f --- /dev/null +++ b/src/oop/inheritance.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Inheritance +******************************************************************************* diff --git a/src/oop/intro.txt b/src/oop/intro.txt new file mode 100644 index 000000000..03be8014c --- /dev/null +++ b/src/oop/intro.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Classes and Objects +******************************************************************************* diff --git a/src/oop/patterns.txt b/src/oop/patterns.txt new file mode 100644 index 000000000..dddb5de33 --- /dev/null +++ b/src/oop/patterns.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Design Patterns +******************************************************************************* diff --git a/src/oop/solid.txt b/src/oop/solid.txt new file mode 100644 index 000000000..75f1952a1 --- /dev/null +++ b/src/oop/solid.txt @@ -0,0 +1,3 @@ +******************************************************************************* + Solid Principles +******************************************************************************* diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt new file mode 100644 index 000000000..d9bcfbed7 --- /dev/null +++ b/src/rdbms/index.txt @@ -0,0 +1,6 @@ +############################################################################### + Relational Database +############################################################################### + +.. toctree:: + :name: rdbms From f01e3ec8b63c7f6cf90fce75ff06d05e9354715b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 7 Nov 2022 15:44:39 +0200 Subject: [PATCH 234/689] Added variables description. Added data types description: str, int, float. --- poetry.lock | 17 ++++-- pyproject.toml | 2 +- src/basics/datatypes.txt | 126 +++++++++++++++++++++++++++++++++++++++ src/basics/variables.txt | 10 ++++ 4 files changed, 149 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7730312c0..0e93f78b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -150,9 +150,9 @@ python-versions = ">=3.7" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.16.1,<0.17.0)", "attrs"] code_style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" @@ -311,7 +311,7 @@ transifex = ["transifex_client (>=0.11)"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.0" +version = "1.1.1" description = "Read the Docs theme for Sphinx" category = "main" optional = false @@ -560,6 +560,13 @@ pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, @@ -604,8 +611,8 @@ sphinx-intl = [ {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, ] sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.1.0-py2.py3-none-any.whl", hash = "sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5"}, - {file = "sphinx_rtd_theme-1.1.0.tar.gz", hash = "sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3"}, + {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, + {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, diff --git a/pyproject.toml b/pyproject.toml index 8ec234817..f06c2f2e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "0.1.0" +version = "2022.11.dev" description = "" license = "MIT" authors = [ diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index b49e455dd..df4c63c1b 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -1,3 +1,129 @@ ******************************************************************************* Data Types ******************************************************************************* + +In programming data types is an important concept. Data may represent different +things. + +Data may represent different things and require various operations available. +In programming data types is an important concept. Python has the following +data types built-in by default in these categories: + +:Text: + ``str`` + +:Numeric: + ``int``, ``float``, ``complex`` + +:Sequence: + ``list``, ``tuple``, ``range`` + +:Mapping: + ``dict`` + +:Set: + ``set``, ``frozenset`` + +:Boolean: + ``bool`` + +:None: + ``None`` + +Python uses dynamic typing. This means as a developer you should not declare +a variable with its data type - the interpreter will do this for you. Other +popular language using dynamic typing are JavaScript and PHP. Setting variables +in Python is as easy as: + +.. code-block:: python + + variable = "Hello World" # create variable of str type + +Casting +======= + +You may specify the data type of a variable with casting: + +.. code-block:: python + + x = str(3) # x will be '3' + y = int(3) # y will be 3 + z = float(3) # z will be 3.0 + +Text +==== + +Text data are stored as strings (``str`` data type) in Python. Strings are +surrounded by either single quotation marks, or double quotation marks. So +``'Python'`` is the same as ``"Python"``. To assign string to a variable: + +.. code-block:: python + + string = "string" + string = str("string") # declare using casting + +Multiline strings +----------------- + +You can assign a multiline string using three quotes: + +.. code-block:: python + + variable = """Well, ye scrawny mate- set sails for riddle! + Never love a lagoon.""" + +Single quotes or double quotes +------------------------------ + +Don't care. Use any quote mark you like. Remember the string is any characters +surrounded by the same quotes. So you are use single quotes if double quote +mark is the part of your string data and vice versa. It's not recommended to +mess various quote marks in the same project. + +Strings are subscriptable +------------------------- + +Strings in Python are arrays of bytes representing unicode characters. This is +common for many programming languages. However Python does not have a data type +to represent a single character itself; a single character in Python is of +string type as well. You can get the character at a specific position in +a string. + +.. code-block:: python + + text = "Plank of a salty strength, endure the fortune!" + character = text[10] + +Strings are iterable +-------------------- + +Since strings are arrays, we can loop through the characters in a string with +a ``for`` loop: + +.. code-block:: python + + for character in "foobar": + print(character) + +Integers +======== + +``int``, or integer, is a whole number, positive or negative, without decimals. + +.. code-block:: python + + integer_number = 42 + integer_number = int(42) # declare using casting + +Floats +====== + +``float``, or floating point number, is a number, positive or negative, +containing one or more decimals. + +.. code-block:: python + + float_number = 42. # will assign 42.0 + float_number = .42 # will assign 0.42 + float_number = 4.2 # will assign 4.2 + float_number = float(42) # declare using casting (42.0) diff --git a/src/basics/variables.txt b/src/basics/variables.txt index 99cd15899..d5dd7522a 100644 --- a/src/basics/variables.txt +++ b/src/basics/variables.txt @@ -1,3 +1,13 @@ ******************************************************************************* Variables ******************************************************************************* + +Variables are container for storing data. There is no syntax for declaring +variables in Python. A variable is created the moment you first assign a value +to it. + +.. code-block:: python + + foo = 42 + bar = "some string data" + foobar = 42.0 From 41d360fe79454e55257d05642da809510047eb7f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Nov 2022 16:24:40 +0200 Subject: [PATCH 235/689] Added favicon to assets --- assets/favicon.ico | Bin 0 -> 1150 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/favicon.ico diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..26727d4762173079aa8d81d2c75aa3f2888d3ee4 GIT binary patch literal 1150 zcmc(dF%H5o3`Kt>b~>@b$QhV93?oP25|z4fC@#Xt7XAk;tj0+L45a!^YUh2sO@WSA z--GuJ4hvufU`sK?$TQ9fV6J8CFDXU(mQAlA&pD5%?ytP}jOw3{yJX_t(eJOVZRKH=4qudQ|A44UfC{R>fV g5#wWGZ2W_-eGlKKt#51Kx_s-@Stg&A^LxeK0a(iVDgXcg literal 0 HcmV?d00001 From 5a3168f445ac76886a326f60053abd45edd5d38d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Nov 2022 16:25:57 +0200 Subject: [PATCH 236/689] Updated dependencies --- poetry.lock | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0e93f78b8..020042a1f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -150,9 +150,9 @@ python-versions = ">=3.7" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.16.1,<0.17.0)", "attrs"] code_style = ["pre-commit"] +rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" @@ -405,11 +405,11 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.12" +version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] @@ -560,13 +560,6 @@ pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, @@ -643,8 +636,8 @@ typing-extensions = [ {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, ] zipp = [ {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, From 502824ebef5aef5233284389ee7561d78227b22e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 15:17:06 +0200 Subject: [PATCH 237/689] Updated project dependencies list --- poetry.lock | 293 +++++++++++++++++++++++++++++------------------ requirements.txt | 208 ++++++--------------------------- 2 files changed, 218 insertions(+), 283 deletions(-) diff --git a/poetry.lock b/poetry.lock index 020042a1f..57c1dd236 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,10 @@ [[package]] name = "alabaster" -version = "0.7.12" +version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "babel" @@ -19,7 +19,7 @@ pytz = ">=2015.7" [[package]] name = "certifi" -version = "2022.9.24" +version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -27,14 +27,11 @@ python-versions = ">=3.6" [[package]] name = "charset-normalizer" -version = "2.1.1" +version = "3.0.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] +python-versions = "*" [[package]] name = "click" @@ -81,7 +78,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "5.0.0" +version = "6.0.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -91,9 +88,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8", "importlib-resources (>=1.3)"] [[package]] name = "jinja2" @@ -132,7 +129,7 @@ benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] [[package]] name = "markupsafe" -version = "2.1.1" +version = "2.1.2" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false @@ -140,7 +137,7 @@ python-versions = ">=3.7" [[package]] name = "mdit-py-plugins" -version = "0.3.1" +version = "0.3.3" description = "Collection of plugins for markdown-it-py" category = "main" optional = false @@ -187,18 +184,15 @@ testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytes [[package]] name = "packaging" -version = "21.3" +version = "23.0" description = "Core utilities for Python packages" category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" [[package]] name = "pygments" -version = "2.13.0" +version = "2.14.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -207,20 +201,9 @@ python-versions = ">=3.6" [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["railroad-diagrams", "jinja2"] - [[package]] name = "pytz" -version = "2022.6" +version = "2022.7.1" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -236,7 +219,7 @@ python-versions = ">=3.6" [[package]] name = "requests" -version = "2.28.1" +version = "2.28.2" description = "Python HTTP for Humans." category = "main" optional = false @@ -244,7 +227,7 @@ python-versions = ">=3.7, <4" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" @@ -326,15 +309,15 @@ dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" [package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" @@ -405,7 +388,7 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.13" +version = "1.26.14" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -418,15 +401,15 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "zipp" -version = "3.10.0" +version = "3.12.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8"] [metadata] lock-version = "1.1" @@ -435,20 +418,106 @@ content-hash = "51f6df5deeeab6ac6526e6be2fa9b37d26f6d30651d3d4f7ee661b97d456fecb [metadata.files] alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] babel = [ {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, ] certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, + {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, + {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, ] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, @@ -471,8 +540,8 @@ imagesize = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] importlib-metadata = [ - {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, - {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, + {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, + {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, ] jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, @@ -483,50 +552,60 @@ markdown-it-py = [ {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, ] markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, ] mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"}, - {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"}, + {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, + {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, ] mdurl = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, @@ -537,20 +616,16 @@ myst-parser = [ {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, ] packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, ] pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, ] pytz = [ - {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, - {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, + {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, + {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -588,8 +663,8 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, @@ -608,8 +683,8 @@ sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, ] sphinxcontrib-devhelp = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, @@ -636,10 +711,10 @@ typing-extensions = [ {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] urllib3 = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, ] zipp = [ - {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, - {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, + {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, + {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, ] diff --git a/requirements.txt b/requirements.txt index 8edb53729..827eed2dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,174 +1,34 @@ -alabaster==0.7.12; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ - --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 -babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ - --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 -certifi==2022.9.24; python_version >= "3.7" and python_version < "4" \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 -charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f -click==8.1.3; python_version >= "3.7" \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e -colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 -docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ - --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 \ - --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 -idna==3.4; python_version >= "3.7" and python_version < "4" \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 -imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ - --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a -importlib-metadata==5.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ - --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 \ - --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab -jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 -markdown-it-py==2.1.0; python_version >= "3.7" \ - --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da \ - --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 -markupsafe==2.1.1; python_version >= "3.7" \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b -mdit-py-plugins==0.3.1; python_version >= "3.7" \ - --hash=sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441 \ - --hash=sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1 -mdurl==0.1.2; python_version >= "3.7" \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba -myst-parser==0.18.1; python_version >= "3.7" \ - --hash=sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d \ - --hash=sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8 -packaging==21.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb -pygments==2.13.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 -pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.6" \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb -pytz==2022.6; python_version >= "3.6" \ - --hash=sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427 \ - --hash=sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2 -pyyaml==6.0; python_version >= "3.7" \ - --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ - --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ - --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ - --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ - --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 \ - --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ - --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ - --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ - --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ - --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ - --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ - --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ - --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ - --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ - --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ - --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ - --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ - --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ - --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ - --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ - --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ - --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ - --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ - --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ - --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ - --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ - --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ - --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ - --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ - --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ - --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ - --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ - --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 -requests==2.28.1; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 -snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 -sphinx-intl==2.0.1; python_version >= "3.5" \ - --hash=sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4 \ - --hash=sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55 -sphinx-rtd-theme==1.1.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") \ - --hash=sha256:36da4267c804b98197419df8aa415d245449b8945301fce8c961038e0ba79ec5 \ - --hash=sha256:6e20f00f62b2c05434a33c5116bc3348a41ca94af03d3d7d1714c63457073bb3 -sphinx==5.3.0; python_version >= "3.6" \ - --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 \ - --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d -sphinxcontrib-applehelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 \ - --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a -sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \ - --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e -sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 \ - --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 -sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 -sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ - --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 -sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ - --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 \ - --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd -typing-extensions==4.4.0; python_version >= "3.7" \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa -urllib3==1.26.12; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e -zipp==3.10.0; python_version < "3.10" and python_version >= "3.7" \ - --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ - --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 +alabaster==0.7.13; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +certifi==2022.12.7; python_version >= "3.7" and python_version < "4" +charset-normalizer==3.0.1; python_version >= "3.7" and python_version < "4" +click==8.1.3; python_version >= "3.7" +colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") +docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" +idna==3.4; python_version >= "3.7" and python_version < "4" +imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +importlib-metadata==6.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") +jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +markdown-it-py==2.1.0; python_version >= "3.7" +markupsafe==2.1.2; python_version >= "3.7" +mdit-py-plugins==0.3.3; python_version >= "3.7" +mdurl==0.1.2; python_version >= "3.7" +myst-parser==0.18.1; python_version >= "3.7" +packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +pygments==2.14.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +pytz==2022.7.1; python_version >= "3.6" +pyyaml==6.0; python_version >= "3.7" +requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") +snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinx-intl==2.0.1; python_version >= "3.5" +sphinx-rtd-theme==1.1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") +sphinx==5.3.0; python_version >= "3.6" +sphinxcontrib-applehelp==1.0.4; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" +sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +typing-extensions==4.4.0; python_version >= "3.7" +urllib3==1.26.14; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" +zipp==3.12.0; python_version < "3.10" and python_version >= "3.7" From ed41de021ea4df9d941887f2f93e448ebab44463 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 06:40:14 +0200 Subject: [PATCH 238/689] Added problem sets The problem sets are implemented within its own repository. Added it as a submodule to current project. --- .gitmodules | 3 +++ problem-sets | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 problem-sets diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..fbf6f4a41 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "problem-sets"] + path = problem-sets + url = https://github.com/edu-python-course/problem-sets diff --git a/problem-sets b/problem-sets new file mode 160000 index 000000000..738e6d464 --- /dev/null +++ b/problem-sets @@ -0,0 +1 @@ +Subproject commit 738e6d464d7173d5027d6ff882602109f19088b5 From 877d47916459b08f43b907d734d1884f29a4c618 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 15:04:37 +0200 Subject: [PATCH 239/689] Updated Sphinx configuration Added base directory path and adjusted relative paths: - added "problem-sets" to system path - added favicon path for HTML outtup --- src/conf.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/conf.py b/src/conf.py index cf76ae6af..bb3768dd8 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1,7 +1,13 @@ # Sphinx documentation generator configuration +import sys +from pathlib import Path from datetime import datetime +# set up paths +BASE_DIR = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(BASE_DIR / "problem-sets" / "src")) + # project information project = "Python Training Course" project_copyright = \ @@ -12,6 +18,7 @@ # general configuration master_doc = root_doc = "index" extensions = [ + "sphinx.ext.autodoc", "sphinx_rtd_theme", "myst_parser", ] @@ -30,7 +37,7 @@ # options for HTML output html_theme = "sphinx_rtd_theme" -# html_favicon = "relative/path/to/favicon" todo +html_favicon = str(BASE_DIR / "assets" / "favicon.ico") # options for LaTeX output latex_doc = project.title().replace(" ", "") + ".tex" From 9c1a37f7228fda38a96582980f481d7fb6a73f4e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 28 Jan 2023 18:10:46 +0200 Subject: [PATCH 240/689] Added bibliography Installed 3rd party package for working with bibliography database. Updated Sphinx configuration and project dependencies files. Added references to the master document. --- poetry.lock | 128 ++++++++++++++++++++++++++++++++++++++--------- pyproject.toml | 1 + requirements.txt | 7 ++- src/conf.py | 8 ++- src/index.txt | 5 ++ src/refs.bib | 0 6 files changed, 124 insertions(+), 25 deletions(-) create mode 100644 src/refs.bib diff --git a/poetry.lock b/poetry.lock index 57c1dd236..e725373fd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -106,6 +106,17 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "latexcodec" +version = "2.0.1" +description = "A lexer and codec to work with LaTeX code in Python." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +six = ">=1.4.1" + [[package]] name = "markdown-it-py" version = "2.1.0" @@ -190,6 +201,34 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "pybtex" +version = "0.24.0" +description = "A BibTeX-compatible bibliography processor in Python" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" + +[package.dependencies] +latexcodec = ">=1.0.4" +PyYAML = ">=3.01" +six = "*" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "pybtex-docutils" +version = "1.0.2" +description = "A docutils backend for pybtex." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +docutils = ">=0.8" +pybtex = ">=0.16" + [[package]] name = "pygments" version = "2.14.0" @@ -235,6 +274,14 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "snowballstemmer" version = "2.2.0" @@ -319,6 +366,21 @@ python-versions = ">=3.8" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +[[package]] +name = "sphinxcontrib-bibtex" +version = "2.5.0" +description = "Sphinx extension for BibTeX style citations." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +docutils = ">=0.8" +importlib-metadata = { version = ">=3.6", markers = "python_version < \"3.10\"" } +pybtex = ">=0.24" +pybtex-docutils = ">=1.0.0" +Sphinx = ">=2.1" + [[package]] name = "sphinxcontrib-devhelp" version = "1.0.2" @@ -414,7 +476,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-co [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "51f6df5deeeab6ac6526e6be2fa9b37d26f6d30651d3d4f7ee661b97d456fecb" +content-hash = "9dfe764900129c00fa319ad0ed0ca07186e410a65bee83b291a0359f806d3f78" [metadata.files] alabaster = [ @@ -544,12 +606,16 @@ importlib-metadata = [ {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, ] jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + { file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" }, + { file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852" }, +] +latexcodec = [ + { file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271" }, + { file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a" }, ] markdown-it-py = [ - {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, - {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, + { file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da" }, + { file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27" }, ] markupsafe = [ {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, @@ -609,26 +675,34 @@ mdit-py-plugins = [ ] mdurl = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, + { file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" }, ] myst-parser = [ - {file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d"}, - {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, + { file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d" }, + { file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8" }, ] packaging = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + { file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2" }, + { file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" }, +] +pybtex = [ + { file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f" }, + { file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755" }, +] +pybtex-docutils = [ + { file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016" }, + { file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239" }, ] pygments = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + { file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" }, + { file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297" }, ] pytz = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, + { file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" }, + { file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0" }, ] pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + { file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53" }, {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, @@ -663,12 +737,16 @@ pyyaml = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] requests = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + { file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa" }, + { file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" }, +] +six = [ + { file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" }, + { file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" }, ] snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, + { file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" }, + { file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1" }, ] sphinx = [ {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, @@ -683,12 +761,16 @@ sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + { file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e" }, + { file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228" }, +] +sphinxcontrib-bibtex = [ + { file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa" }, + { file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76" }, ] sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + { file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" }, + { file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e" }, ] sphinxcontrib-htmlhelp = [ {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, diff --git a/pyproject.toml b/pyproject.toml index f06c2f2e4..2b5aba184 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ Sphinx = "^5.3.0" sphinx-intl = "^2.0.1" sphinx-rtd-theme = "^1.1.0" myst-parser = "^0.18.1" +sphinxcontrib-bibtex = "^2.5.0" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index 827eed2dc..f3e31cb75 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,21 +9,26 @@ idna==3.4; python_version >= "3.7" and python_version < "4" imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" importlib-metadata==6.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +latexcodec==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" markdown-it-py==2.1.0; python_version >= "3.7" markupsafe==2.1.2; python_version >= "3.7" mdit-py-plugins==0.3.3; python_version >= "3.7" mdurl==0.1.2; python_version >= "3.7" myst-parser==0.18.1; python_version >= "3.7" packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" +pybtex-docutils==1.0.2; python_version >= "3.6" +pybtex==0.24.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6" pygments==2.14.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" pytz==2022.7.1; python_version >= "3.6" -pyyaml==6.0; python_version >= "3.7" +pyyaml==6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") +six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" sphinx-intl==2.0.1; python_version >= "3.5" sphinx-rtd-theme==1.1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") sphinx==5.3.0; python_version >= "3.6" sphinxcontrib-applehelp==1.0.4; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" +sphinxcontrib-bibtex==2.5.0; python_version >= "3.6" sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" diff --git a/src/conf.py b/src/conf.py index bb3768dd8..f780e8970 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1,8 +1,8 @@ # Sphinx documentation generator configuration import sys -from pathlib import Path from datetime import datetime +from pathlib import Path # set up paths BASE_DIR = Path(__file__).resolve().parent.parent @@ -19,6 +19,8 @@ master_doc = root_doc = "index" extensions = [ "sphinx.ext.autodoc", + + "sphinxcontrib.bibtex", "sphinx_rtd_theme", "myst_parser", ] @@ -31,6 +33,10 @@ exclude_patterns = [] suppress_warnings = [] +# options for bibliography +bibtex_bibfiles = ["refs.bib"] +bibtex_reference_style = "label" + # options for internationalization language = "en" locale_dirs = ["_locales"] diff --git a/src/index.txt b/src/index.txt index 0d5b6e006..a6b7a1184 100644 --- a/src/index.txt +++ b/src/index.txt @@ -15,3 +15,8 @@ django/index linux/index deploy/index + +.. rubric:: References + +.. bibliography:: + :all: diff --git a/src/refs.bib b/src/refs.bib new file mode 100644 index 000000000..e69de29bb From bb87a19c510a62dbd471c6000db2ef39f0a30d3a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 29 Jan 2023 05:38:11 +0200 Subject: [PATCH 241/689] Introduction to Python (#28) Added introduction part including Python brief history and pros, installation and usage guides. Added some static files to the repo and updated bib db with references. Added draft documents for future appendixes (included to toctree in the master document). --- src/_static/img/celebrate.svg | 44 +++++ src/_static/img/cmd-python.png | Bin 0 -> 15353 bytes src/_static/img/dropbox.svg | 17 ++ src/_static/img/emacs.svg | 2 + src/_static/img/facebook.svg | 17 ++ src/_static/img/geany.svg | 10 ++ src/_static/img/google.svg | 28 ++++ src/_static/img/guido-headshot-2019.jpg | Bin 0 -> 288230 bytes src/_static/img/guido-headshot-2019.png | Bin 0 -> 1180935 bytes src/_static/img/instagram.svg | 27 ++++ src/_static/img/microsoft-store-get.png | Bin 0 -> 20391 bytes src/_static/img/microsoft-store-search.png | Bin 0 -> 456351 bytes src/_static/img/netflix.svg | 21 +++ src/_static/img/npp.svg | 122 ++++++++++++++ src/_static/img/pycharm.svg | 106 ++++++++++++ src/_static/img/python.svg | 15 ++ src/_static/img/quora.svg | 4 + src/_static/img/reddit.svg | 17 ++ src/_static/img/spotify.svg | 17 ++ src/_static/img/start-menu-python.png | Bin 0 -> 73292 bytes src/_static/img/terminal-python.png | Bin 0 -> 20583 bytes src/_static/img/vim.svg | 56 +++++++ src/_static/img/vscode.svg | 2 + src/appx/code_edit.txt | 8 + src/appx/env_path.txt | 3 + src/conf.py | 8 +- src/index.txt | 9 ++ src/intro/index.txt | 177 ++++++++++++++++++++- src/intro/install.txt | 133 ++++++++++++++++ src/intro/interact.txt | 151 ++++++++++++++++++ src/refs.bib | 49 ++++++ 31 files changed, 1040 insertions(+), 3 deletions(-) create mode 100644 src/_static/img/celebrate.svg create mode 100644 src/_static/img/cmd-python.png create mode 100644 src/_static/img/dropbox.svg create mode 100644 src/_static/img/emacs.svg create mode 100644 src/_static/img/facebook.svg create mode 100644 src/_static/img/geany.svg create mode 100644 src/_static/img/google.svg create mode 100644 src/_static/img/guido-headshot-2019.jpg create mode 100644 src/_static/img/guido-headshot-2019.png create mode 100644 src/_static/img/instagram.svg create mode 100644 src/_static/img/microsoft-store-get.png create mode 100644 src/_static/img/microsoft-store-search.png create mode 100644 src/_static/img/netflix.svg create mode 100644 src/_static/img/npp.svg create mode 100644 src/_static/img/pycharm.svg create mode 100644 src/_static/img/python.svg create mode 100644 src/_static/img/quora.svg create mode 100644 src/_static/img/reddit.svg create mode 100644 src/_static/img/spotify.svg create mode 100644 src/_static/img/start-menu-python.png create mode 100644 src/_static/img/terminal-python.png create mode 100644 src/_static/img/vim.svg create mode 100644 src/_static/img/vscode.svg create mode 100644 src/appx/code_edit.txt create mode 100644 src/appx/env_path.txt create mode 100644 src/intro/install.txt create mode 100644 src/intro/interact.txt diff --git a/src/_static/img/celebrate.svg b/src/_static/img/celebrate.svg new file mode 100644 index 000000000..21bae043b --- /dev/null +++ b/src/_static/img/celebrate.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/cmd-python.png b/src/_static/img/cmd-python.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8113576c77500c7d63b1549199c58a782f8ffb GIT binary patch literal 15353 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 + + + + Dropbox-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/emacs.svg b/src/_static/img/emacs.svg new file mode 100644 index 000000000..64afe6f03 --- /dev/null +++ b/src/_static/img/emacs.svg @@ -0,0 +1,2 @@ + +file_type_emacs \ No newline at end of file diff --git a/src/_static/img/facebook.svg b/src/_static/img/facebook.svg new file mode 100644 index 000000000..88c648577 --- /dev/null +++ b/src/_static/img/facebook.svg @@ -0,0 +1,17 @@ + + + + + Facebook-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/geany.svg b/src/_static/img/geany.svg new file mode 100644 index 000000000..7d47d524c --- /dev/null +++ b/src/_static/img/geany.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/google.svg b/src/_static/img/google.svg new file mode 100644 index 000000000..b26d4a451 --- /dev/null +++ b/src/_static/img/google.svg @@ -0,0 +1,28 @@ + + + + + Google-color + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/guido-headshot-2019.jpg b/src/_static/img/guido-headshot-2019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28b0e9bd660cfa676eddbcf1a724fbd6881d0c75 GIT binary patch literal 288230 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%0DURW#UTg;G#Uq{X&royzDeQv-H1Uo7KrS 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≻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

    V*i@VeVM)d)eud^iW_yFFRD0t=tJH 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 YQdEZPXIX~+7NdSM|9zeRzy3`84?}#Hvj6}9 literal 0 HcmV?d00001 diff --git a/src/_static/img/guido-headshot-2019.png b/src/_static/img/guido-headshot-2019.png new file mode 100644 index 0000000000000000000000000000000000000000..13c3ac23775967cb0900f04dfd336849ee920f4a GIT binary patch literal 1180935 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

    cCt5;e3E3$<+|D08_+fUtV7NvBU#oorZ@@CD3yp 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≫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≠pU)S?KVii{kz(25U%&$*MXn+-n;jD z-+gZX{Z1e9kx1nK?Qh(*yY?MyfA9x?@IU<4Z~ooiodXy~1As=qh0xY_@HRtO?8|B_ z0hMhdVP3IyJ$H$p03zf%&rR4$0?@LUPXRq#>HADp36(XIRX|pa3c}Og)~*Y5a$}#) zr&h`q0iZ>jBKY?PLnJl;33B8ZAlGUk_#@=XBI_>ZafD7lno1vql2HIVpa~&TmO+)y z%4bWKiOB7Hq0YKhM>U6wMZOC-FXRgwK@mZ40FYJuHL|ks@PP}*J=QctU*)_e-{w0kOTGtfIvyqWZ_ierW9*hzpmT3J8%VpauGcG_+yJ_ zvTikw6|#WmsO8ILOT-dho)A&idX1*_=+C$V{jq11Nb&VoFRfm0Fy^}D;~AcvHzaQR z-~h@%HNS_S+1|m9ojm)-PQQ9)VaC~OG`x(P=uIF(imZ0K<@+lM;N98XvmC%UUjUdh z?@AsgrH!(JC%9f?7r@tiDEXd%&x)~0;Mbmy0dBl(7xR(^L?{WDtfi`Ttu;axr)z0D zJU(C#Oqnq$n|9cvS^Ckjv(qX(qhlG?LLL!Yxw6%+&Y_v{CMG`wcugiP6;9jsrw=U* z4G*54TmJJW7T+(}>5relI(fWF#Qr(TeCiL z-PZSFS-=BhS`Gyq4WKR07(gQL&0Bp7v(AdI)xMKEu-xFIGbM%V8%UKofnP~$6`xyh z>Wt0S(E1uavMg>{05B99cWrceVxgiE(8X*H?MDSlW6;5jeu$LZY7H#{d_+HM<#=GW z0txo{jQc{np-c)etvL-_lxK=QSCxt-V-f2!F9G=LA`HI*950~NXe49no^pf$q?RGZ zP2bq3Q`K^3FZP2A%LHTe6_7j_S&(~30V>yP@iZGPEC{HZu}@dfM2y9hhflDOVw|iC z^s<1jg5qq^gLlIBJYb}RJ9bG5Bpg8In z`$T(RYrN!~Q67PE8NeB24#&_vXUrIyd35j4uId-opZ4rXbf|ga5efFC6l23)$3dp{ zc`nObN0atkIXB?RQa(<_i{OJg-4xy+WuneS_cVe3=dwu~bVs(oe~&(9H}WNG8;h|o zT375J06rkP&fYKhcjfZGDRDYs9hJNi>S1rB<=kNP({n3xRwfDs>%j}%DjhPH&@Jn>RoQFSbMk;2w$lc?E%ZC5RN`)_O>Z zlFh2zU6j8wmf_r$G9}1$fk4Fm@c;Qg-+}hK_MK=l2!n<1@oPtai!X@py^B%RZr*$M zvzzbS{I2%y-+vkHr=b0&>E<^NxZMf0+Yf%pimY3d9%&Ic1OTf#eGVUTe0^|j_F2qZjs`~&>0bOP5 zl?5VKE&_N{mI_5B%h|+c7DbTHA{0gt2IUez2Vf?as%JjpdtuwzuDC@yfnX!IZ&`7b z)UJ(?1gr<-q}{?8bnD34EreYJK-G4ZC4U=%Nr2`2>Kc%}q`wjRKCpJLC0yx=%p}0| zBq$+>%A%=qbt8mzS!A~n&NL5F3^W<9+#}bD-AB+=b10&O{LI6fSqQ& z?XHxivP#qS`6(eQWlz8U(m{gq6v#?1B~7c|vIieLW^S`yy6akQz<`odz+yOrkUSpv z_~g2L|G^Un$@PnCySzMiE0TcogZuZ~&0fG-fKo5zJCIA}rq;Jg3a$Y4H7fw_x3`(g z;n-ECJDK^@=r*^7oke2=VNeTc`v? z#$zQrOgmU@0ninn$qHM&)vy%wF&GWFcBA-EV!i}uue@FKL{0&oGiKhTl#t85lu}aq zNNJPHWv#LeP3H>MW`47*ef9N)z5e={wJz({t2Vrbcn@&@;_I*N?CjLi0QxBRRdVp% zhsWNJDIhMGP1}R-f5iRv!H!AR`qFA|-T?5goW4Twn9Y>DYB4n%D&CkmO(yK}{0tDf zc2K&a|JtLfws3WNW!1~7D_l~Uq+1AO#w%BfzP=Y{=N^w72jB^qE2o0yO3D1RUx8*0 zY}HiCX(#{$ppl14rL+y*5BNmk8LS1Dot`QT5>91@y*kxlV3k)3p!Tdr_Vf zOe*(=td7hl(-{XCuGq)H86cZC<{5wzzfVEE@yyPqOk6n5=L4Gqwgog*8Dhm8tO6@| zDEmB+u_?eO6dZd(xXAuC<64?h!zFk3Y|NS^C-4F2cpl+9%#Wd^cckEG7%f?v<_Ch3CObBJkktOx`;1 zR=LCPZkOQGIWGw(&>n_&wi;FV@!A!AMU|xsWvp6j&=r;l@*{@l}d)~OK37`$>P4H3hndV7&^AY|#dR{XutVe|F_@$2mj#C+J4u*8x1V{clqHs^Icqe`|q3f?lrgD&-?p*`1u!Yq2K=P z-}YbL?SQo7H^1M!ZiDID?cMMGtiRRt_qQnnZhn8~=RX3p|DnHe*Y4VPuw7o%*5m0A zVA8Z9V01P>$eIli{x_CW0Wg7Bxhe`UN-%MNh)^Y@^X#5okEnCkQqz1ir~^^cGkIEX*E`BOs&!5*a{_fI=EUCa#RX z(GY-k;Q&0FOd~KQJq}P7=votSbpG1@lD z<$2PjSyPz z4ei%|?S}yNuf0ZaCY7zmnfYqiWH_`^sqDhOTzGc?>`ELc zch63(g`f?HMnJuH@19MET`QM27X5mwXIHGj{%EwBE;08RK=5q1vV5gtlkV8I^Eu|A zVbj4F(7Lj&tdn6SbBZ%6b4#0YGsKcfOBeE1+1c6oZ~N{twQ=dyV~Z`fn^JFA)P z>}^?jw?u!l_Q8XPmX)hC0)MDAWRC&X1f)Os$U+^!0${vXhsO-tw*Tp;fX<1f#_*VB zkUheli$opZ1)-V1sBSZW&rD#JJ!JyatnYFTJuv=N7#;;UjZ9^!UVE1D5W7F1QiT0$ z3#R18tdfkpHw1{L#8Xz55MW)h7W5&MEn1i{ujc@zh`?_GfC^}juK0eI>j7P|jILO> ziLCs*4^Lc;+O~)#ESfA@5Z>eN?~yRiPHvP<@Y)1CLGJ4zp5@kgQ%t>-O$o-vTnyj` zfaPe6?@7S`Kw6AC%-6_RGP@O!WfsI#cMVpE(MlVp&-Sxo2|@L9g0}QV2*1tnijT06!EB*xtc`T~|9+ z8%=$`^cPbP$uaxYmZXF9VP(DU)FLVPixML;pdtG<8ctcdT!tRkHtTjRQ!K%+Iu-;-2ibp% z<=hg%s4bxP$yy5Il_hgq^o6G`SQqA{yz|h{;PIqk(KY85JUE3JrZMtSR2v58Zo%A>ZyEY%QKJXEh23=0#oOfC4 zk6Z3dSIQsQ*4BY5YL%=q0Zn>hI|kU}yArn*RxljFqXH91Dng$F@OHfj0q+Fkq3Hd!6@DE2$cRkglla(rT^x&M5qvGQBom&NAbJL);r~%DsLp0>=a-r4tf>H zkh`;7?`2V4&XpmVpE~-(h}sAe0mtWY`H6S94ki%6PpOWy&MO<#rniByvxwy;9naigcI{<|F zkcIf{;>t@1DO-6Op-f4?+O4izKC?XIaYBYm+}gSHnHbQBd9pXLOx}C`z71i+4iJuj~{(#?Y3%f&zXY* zt88sqt^nA}BEUl@@_5KGju-$XlLWlZ*6x`gD_pHs^ZW-70OtBkv6&aVlvFSU2!8b7 z5$mxDXHe{ZyMe%oz`hOGYyjSsgh^foD)F|pwJTEgGHUgD+Z9FfM9_RHQJY!}0r~jw z&}mxX2lL4sx&)MWT5iGB`>K^MdOK%c<1!VqDlP6WOYJ7<-^$&6Q;IL1ja`V9H^JH2 znLnd;y-8RnT34K^GS|z3Eyb5gUrArB#EC5_N2YV@w3>Ey{>BsGO(#Qp`RW_%0?rbd zh~0m9WZTeH50I_IVkJO>k~Z!z&zZ79CKPKvwZ@w(YhKiB0*H{(qz`ZtFfKBONyTfk z{)&&iXm{+Qrn>eaw|wd)*IFq?cK4Z=Km?$aGpM7SZ{Q6%3utD2RKrnPSI=gaZjObl) zv8vQ# z1h5^9fer=sVt`n%W0+~MScW~sJ>)9B=-Il@S_3F&?W)B9YHPq3D`GKt74X>CW}Pko zWEL`FdLlMij>Gw~g#esVkW5aVS+rH-o^zWI_*}r3v8O{(3v>az%xhSl8}x0iTJUZ* zmJ>L@C{wWD*1io30Q$m~vDqvz0r0|C0s#4Fka0t&fl>upfqwZ+b>jmI_!U1_%&#%u z;cNzQm=ZR2ei#`8QUUSe1r}1gamoVoCA2UT;RB>cUhh68Wf8PBpM_mvW6*lAP_hN! zPl@Ih`5d38ENKF7bBi{I7V2>CodPt$T!r}#{7Ce?xa?Sj{TX?DWXf3(X42=`xCQB3 z2tE~IZe6LxS_GJrMStU7uKa*M7{`!RLu9-mh@*5hSO+m*^An{+Do$N>Te~h z^CXMRwGJDdPf{+(J4C!dUOKu?U|*gxgGS$m-LXA^W%SK?f@I@Yf> zIrjpVroREkpJP3ARt(ltR}`tDf=VIk+_~l)kn&aKP*W-8^{82Sd&kc|g^(!)!fs{D z6)egHp?(CH&}4+s>Kp__EAgd59#(Vcfir5*ZmFmM%M-9>@7j9uph}dPBZV0bFXxILg;IY!bcK>mDe&rhCmjxXT*_uxxu zQ}RfabyIA-!rT(jMKM=m>_O`?uSw`A0?&|fPT@ORH^~$Vt&yCdgo1bNu6+mF-+uek z`NQp|{c-zs^ZD)T^#0Ay+wZ^c+COh|_xPI|-E`)5d-v~~_KUo)-{05CU-TJon-b9d zzux|S*Y4VPvi;`Y`OV**P2~>XaVy+>qFC**g9vRgPjDvTcs%9cWgp98fWRbyiXFyJ zgad>Z9m?8na)}It05`IdBUq*pd|(GQK(HJjgoX=4!>wRC-Nr-AekU7~zQAZX^0V%DBST17J1kO$0*(T>h4VLLmdP z`YM@Ni190{vs}NG6F~E$1ZBwQtj&b}Z!wpf_(a9bcj;rJ+3`62z1$<1c*8Kt-P1Ou&9H?%UzLT`Lv#t=;UhG!mi#&3u2zvm_7} zvUz)RdO}~bZmE9${3+Mxtkvo944K82mX()*01fjh#f|F4@9!Pk*&D#E<_G|+Bzz92 zSzBdj7Cr6k?C=>~f-V$qFPCe1Y=i;`k^nEw?Np$YbWKgWBn#peK>Fn63-7}M!BnLY^Eo98ROa`-3$Owg0v@W# z{_x&?YclQ@09Y=}vV?1miva!o<9+B&Wz?8EXjpV1aHjDp3EYaYj`}@Q>8MBo5VqDH z02uHcS=J-$!QwUmHyQKqsG7kVfS+T3r2%CzfQ`;i#R9hg86ALu=Cp;-y<%Pxd{65) z0~H2TB1#I7@r3;mvFnQ}`!{asT+tpperyNF$F_TLV99LC`GCNJCyE3>Os-p2Z(O^w zCmIb{s#2nV33s>6t^r$xZChz?@Y$j_w7^!z;)4|ca1OAZSa>^cbM~D|caPF9h@dVjSZTadY4#{t>7ZCkPqO0LFVu8>eHw?Nt)z!Mu@7|_~X(j&~R z66r+%jN)5zRt~Wz7Oj?r#2BUk)JWW8v6pdx_n>RbamN$g3A8FS$RhAK=yeMHE8brk zxCQ%7HRe@fO-T^N1GV2|aSVxn@!pdCtmItl)sVGh&rg*ho_pmp%#%EUCMHLkkmB-L z(>VNa3b+eHtE%Cx+U4SF%4WU-_=ebbuxSsQh_PNvaYg7i$aB3s-3%}Z9m2ioBfNVN z^N^KbWXk+OOG&xFCv3(yS6na6h4O5S!|V=GhnlE*Lgw&UJUb7G85;=o`-<_B6of% zi52(1fMylqA}@egRMvQvGur?}g%t@8>-_PAnq#?dk8L~~+P&Qa`{w-IDw%?y_fVo#y%{t^iwYnDff9<_T>$;vt6*SpPkynhmU;! zs8ppVrK2y3@$PkpmMP{~$M9Qz6ak=jEI^-&Tf464(OfMTa_3*Lw>j@znFsv_qF(A# z^AJu1-O?@k9dXtKr5Iw*)ti@`Zxw)cg3kh0z3N+Wf6tojs*O0aF}{=l2flrD`b&&MIjcSOLyD z=3UolZD(^!LN`&ysgRjqFls6IqWG20KCO+;X|0nIdrIM~^ZoDt!JT{jUHk5|-~R32 z{zuUL|8j##_4DR+({5wh+wb50&h7TT@4tJ^FVlYN9nx*SwGzEaARSY3$5bXgDZrn zB_M7x@_i)Dxxkiw7YNr&wYUY!m91S?Xo1QJ0;H0%DJD?@kP>%EAQH%w>zshU5}>g= z5e7Eed1V?GSd~RZR$_ri)ytL3y}-CEik_qn0ku*pd$J&97!FPlKG^O;9BtakU z?pm>kP$-vCu20g(Y$8qn&CY5yz{%WlA%F#f;mhiky*WQaNJ-iRz$bTMl{Tv=@!Jpp zh|r~s^9TF;Zbhxv70Z3)z)bF$ig}h*rAYr}RhHxR9?y4>gup#O&>J&WB|($>y(~)G zfJ}Gs&KEr4oq)FD&?h`wf|V?{0z^H&E07;WfV;T3vO=+d@U?URsibue@7+Vt0_G|Q z0rMqycex_+2Evy3V!-~&ul<^xzIlTH*9K=O>-@sf2vd3v6J(!$?^A13+l;w{KzQZP z`{Jvw+>ROeP1gt=j>htzMU43ZPv9D&WB?k0j+zB(?$Aif8Nr%oH{d z2NX)+m&>NWw5;_CHBgpexo(F6SxRQ~^5n$h-KEG--<9n?r+9GaQsYzx_d;RIRNbK2 zRNjF(w37ye$yx=?KwG_j*Fk%y({sg-XiWehmC9{AJ#_7S>DFe2Ak+|G4-WTiE1zd< z><89C^r}h*o-hx3PYEnCHuc9dX7h?8pk7>@A(+Pe8o9wMaiT0(BLVk8pZQ8}6g<#J z8IY%%?8@>ldLMILMlsjSUAxn;rdJtIf6cQ-fceWSSY^nN(jZWfSiDh8&y+%^tH0B z1AYYvfv@mO=oB!dIAOW3M*z=j_~7jN4Gd~(i4;6Z@!#yvP%P!jtW`A4-r+rfFlgI` zS2YX4yOe}*IiEpmYsT8QRfz9EgKK$zz|WR|-7x!7WtAdJTHo##XgqeOc~pseskh7VK$p^MQI;U zzL(#D7b*LD!ginwDL10{u+#cS78gjl5E# zL0~w2mm)?yGr;ds9UVq;P z?YEoWfBWA5$RysCdAn=h>86^g5(FpX0RXRQQ$VJ`UI1ZV<;w)Ll_8zeoP#z7C{p(L zA%dTP4}vMeoxr5rY-L@RW?eD91-aM)M0BuAFj#T$2PCK=U@2*w0AvT@SZ;U%ojUX- znh8+po~pqv7x7wMZiz$oY|w^)kan+)fD=O~*a$UpIaj=+K<)xbN=gO+JS8J*BNz<; zOR_3u@+sQ}*cbS&T)vmGAS2+bL=}<+<3a!ffGLCbW#igi&0**Cs=Oj0MjaSgmno9l($*@DZM& z=P6UNK+H_>x{P5kXxl!ZeLMhQBDKcj0q=WTnYt0uL>B_>jfU#D552^ZTDefPYW3Qh z%(<+=vg#>Op27ei7KG!Z16n1g5*-RaCz!APpyvXi6a)_*JhWcBXC2lem1dq9yF3t- z%uXI18`@bjccNG36ne=z7Lw{-rn*qxLSbqG)PdtYA;e$i#H9FQGDmE4x z27q?}6C;330U#id?j9xdQ<>RwnH(U1@r`<>GD}lvYa4-H>!DiA>c8UurJ#{(aRPd2 z@qV}2MvyPkui;xI%gA0sQ-faD-ArX|m10IpgH{V*%lH(lEsqc$&hwO9stw3*yOKfz zxbg{%=VMFIN4e}uv9P-g3an=X46ZnrjB&mTNy zPG=S?mjLP!fFAVe^~f1lu42opGYh6O#$zo35DAB&)lS2L{gwr$ya4tA#wIaAG@4+4 z%mC2}VMxd-4Sg%OLo}NM==b4wQ-G|ptpg!tjb{%A0NG$S>(?*2rcJ+~cLOxex~4eZ zwP;QNhWpP0VNY;4VxE)$FR)U`!y4Ku*reaFuoAw7flN_(5Gbx)R?v~x(@(<_hEg0% zfxF_5OV$M1n*!RwyAGto`2rvtfYs~MPxvkGuK-4H6F}qKfZ@C`gU03-NM*zO^TxK|moML(1F{pA%M}2; z@GJVFwI9>rFzci;hJmPnD|@)!1aOz>N5C%Rv69GIDjBsIw3SL07*o=Eg9bb#ZtT#sJT5F^nN-61W6s&PN?FanJO&tnDj%akCYQ2;HBkbdEZTDWmDNMm%zQHI2ec9b z2|&skC;>!PlSCw8O#o-DUU$p80Bl$Z=5!5WldhG_rfj=&nKWoa1SbKM4nS03TyB4d zTRWCOn30RPO6DX02w8+|#c|FMCbNLEd;9x+m z8`hR(ig6SWat?ONri4b*F~V{Pp_1>*GA;{y2f@Dsc#y?hmQ=A9xw}j8AWO8Y4>4Kc z5LlHM&9mwQY}%cUTiyk1#j)g~tn9i1)(QnsjrLZp=6&e19 z{e$oS(Br^s)hmnAp$&MK+p)^N0j!uCxnQ<<$?A0s$nSKz4rT?|rSwSwaOIhy@60Be z?~J{8`3)d<$Q{$UZa|I zFXfB;1W?Apz8As*d5ljWIu_?SfTQE%eJhpa%@Sce1$V`jMNV|Nv%3SR4A^D0VSoD1 z|J1(zqc5y+(Sm;1WiptuzF`T|635xcH2}DP_>47)1g2IgWH; zQg$z_@;83Xrso$H0}KhsFQBRDcHV+AHit7F`@Mo+thx=eBtUKJKHxz~#{hp9ZNLw} zV958D08N0%tleZBLrVi}2mLBEEk#evM z!DC&3Gvl*t6hIob1vIK8eSwvJ&jH2)mKME3dcm;4V*sQo7Y8Ux0LY|iQ>BP7>pU33 zx1f&|yeX(KnRJGAP&W4&zvrM+`UO47V;~Iwa8RmFL4T2nQnCS%n1`@HdMFM90YEeU z5I}Dc-ozKP)oslESQLw<)2{HE!m|_bxH-H4Nab$Z^Cdi7F5l24!!j#pZOPBsdJKpM zs6$(U7$6*;J5R_*AmEAu)!CPobip_v7WnjvEyg;Cir8CHq$&-WykfNfr>y@t02pW9 zl99NLp`UfHZ(+u?T*~W#9`U{aA4}mL0ijfywHrAooWp~~Upz&@Xyex#tTE)On`(wLGp`&6b~!Ire9r-*fD{>13k-lIM$fS+7&$%nVu<(A#ct zuEL|`oue=nS(@kEQ=wHNI^_yb&K4>4!~^9iq%f*Mw+|0g_I~9aj9D(jxzKIfe8GIN zx02!2MuC%pM>ks5Z*^^t{S{3M7&9K`Rh~C0NhscKIv}QL4@WZeTc1s)}`+O1c?2;d$vXxe0gm&` zUl5{HcX+;bkS8HW!oIA_vhG~hu6!<}d~jS>K;S4cFG-5!i|8tT$`m75f9ts6X3gySM|?(06k<%O9SkS z`LtW&opJsd{(&z;^bIxGrmz$_|1pLL&nC5?X0Au6>O@`sibOeWHy0jGZ}?*M!Oi z3Y01-oV+dMB7Xnq*mkz}01`t@tqbPzkWd|HS<9qcP#xo)?IXrA_Z$lq!1>YMo?Txy zoZh6=5zv=AsuIA-(?NYuJ$88_ED%7`(88cUc7=jUy=e^u@VB;=%x!ABjHB0^c`W_* zUI}opr2lU`w*UBG&lNV8%u$!`rxC>GBlZaNsJPE`5b!q#*wSYyBNSR7OZe5*rI(Tm zL;_CZM+b*?`sTF@tWs2HU&t#Z2UrUu{9aWr8SAyX#cLhpnIac@aIz~<_V@SPRaIa_ zrMndWFYk}7as?0=wITo_2obCRB6;Td;e&^k2Ute|0|I<1yCuPY#r}*JbGCc`$aao* zJHy_bJZ_a@o_?p8!?87b1Hem` zzSjV(QQOPq!F;k9N~to3mIk&{EV2Wjod-vt6#!;yXi>&&Ilyx&lQ-dVY0J8=(2f}Ik1iz3)Iu1Rg^A<^DJT_eM#j^Y+V~ih= zwFWdta_k9uF=Z_BfC#}06ra9ktl~j()1T`ZL1h8aC-v0q4xmsB7cNz=C>iqG*8-ysqA~ zD0C_Xj_|yyUdWS33G?J_HI;IVzOCdHz}Uo>m9#DbEh*-E0soSmrGLtfF0T|RxgwxX z?OpLSogHh&sQ7p(zw{iI(iYrDiWFG9?;BaH1@K%m#~zpET4#V1bOP&cb>}^u9cr4Z zBz#}V&SLzVFoqy;CwR}NVEI_Yjv(+knDSfal!k?oB_k}ob#6Xu>|Kx!1_~# zPsvM2>kQwAR+G7Hcyt=troW6WomPd6q*WUymWB7IVu4DCDl|(uW8|48QNT>Rg|H~y)3hhFb%@4kQg?{E9;F9X0M$80*KmoxEO zFSXl$-@f+S+RgXAt$o{fZ{Pdv>o?zibl2|MceYipF4i~hhc_=Z{S-L&4AX!>)oqr= zTi1p;Y?EoZ*ajVd=vrCWW#yIyMuLle_GUw`4=v#=E&&ulM}VroUOP(fj=dolcltf&3R4sn(mJfs0`p+nY<(zVB{?{r=Eh`UTJ>;3<>+)fM0v;HQv* z1mHyq24!Q{9Ayx+1h6%Sxm*tUI_Yla$H#{b%u0o#_sKKrGuMj6SL~{+$N~XUg-GaB z{Jg-c)=ci;aX_X7Y0a_bO|GkZ0LT|FURk%(w@$mq^D+pSQ$TBzYZV91x^f?Pxle}e zn`h5Fp8f3g8+-NgxjlROm0g?zKv|n|F>8PAul*NR-YVIn$M@~YlP5kNDJixA#S_4b zto%yMBq>kNJV98Vj)yiL4eZ4?&#m7bSRIfk*H+PwT-a~;^LBa54iAq3uR(;&v}F+N zmC0UV74l@zHOhD{pe;p_`n(6ImtZQzhJb-wk!5vLXoBWgu9=5NNAC8mgnzQ=U!7es zzgun%d-dv-Daqaz^DRrefb3{GL?8tu0Vv(&oWJ9&VL+G#VOq7J!>(Y7csPXAR-y;Z z{r&s*?d;;h*G=y08~1($UFcSx2dA&zSid)PcV~g}4KP=NsI*nyW}H_7J%y;`3mN7gDw?SofS~l2#(EH{ACX_a9AImr#tkk6PoZ&bp}- zVF2(K_jOa|_8Dla-fPH^tS}eS2i10?ds)E z?C68XRtmCHxh}9>vPh5b31Cn97SHD`nq*(E0M^NZ#i7|X`#%UTNdxAUm0kG=LMh-@ zzr%AE0A;yL_W%@Q3v+F(a%AD{4=uX&(87T1b+utj=uk|s(-2hdtA6($593jlb?ZEDm^^!cU|5q%D}w<%)S_+yQt_v=3n4Df9QtR;-aqY}tZ&0yxdtJIlyKnpFU5 z&eoMfi^*mB{KQrluPmT>1pG;XwxC~2Kqjm2uJ&WbGG^X_?CAt+92+w)^N6jPGj7g) zkbPFFh_J<&A3E(c5LyN}ACk~AAf;)mh^`ddHso}WF;%Z$CwLoFVRtJm;yonb-ve8n35x@{M-)*p^JbNV(I zPV8m%obw`RMS$@f9uo_vtQ_BD$4|vm&Qpr%tXBtdoe2kkyro7AB$wZEp4PfP_nZx* z4s!=DQ0c)O&snnP-zbqLfOtpME$C;b*R%}0$v7WFtGK1odAqv4@TwoB;x5mH7C1W= z>y;I^lrMp~W?aqcg-vH6tL)r^H<(>K{Sq3?TWR;9#gnWl0NpM8t+uUaL5pRi{EE1u zw$-h<@@+g?FgKgCK}<|8_!sb~h{At#?(4-znx8~e6+dKMS8fq#46v>oCaEmv5qwXI z!2$hLB^Y@}jNxC=RN4|*_PDRb$`p#Ba;6i`N#%tRKht{1JK(O}weN8ITjFOoFSQ%l z=jL_0-TwRC&(v=2@t4sg-+FtuWAFZc({2w!?R_15-+MPr-~G0G-n{tyH(>C0W!~=E zcfQHh5P6CN83AoJx8R)pFA8lL)eMYfs9ujZiX{<$(iO8P!$3 zNmdXg^-3dfhE`!~3y^THXjt)aGpi%)E9>>3-$JGuAlM>MA{Yh{umsf8(YOT>?8Ctr z??x=*&k&UpK2RO*RzAJ%< zXQ*V<(e9Cb^zdUq-mWdCORLrDE_ihSFW2>|Cq?u4SOjkgK8ib^Oa}<&LCd7$ZvpZU zpp-Pl*vnEPLAlZB*z@P-_Uz=ut`Tg%d3j-1wXOs7DPUiU5G4!>Gw=vRUgT)FZM!s6Fo{m81%pW5pe=K%Ahee}VHR*V(w=-z$H^4v!s z-nUFKX;2lyYk_&GA8G-^oPI zLJNg1bZqyaU?;C$0)zp0DS-X`BLvPgptZ_+t(<-Z#w3*5lrsyOUI^Sp6BZ6c0pURh zul07zK#iO?8|l=&L4ti)W7(%&V-U2>i0@s#MfM8LtuC zAs*>F5c+G@YE13V{`FV(8W25ZkB*p}#NnZ34-Z(=oLj|YvAe!HHt=VZ>-IL(etvzho z{?4}7<*rw2cG2oH_N49Y1M=7dDxo-nCgaLBK3+jLbyq0t9c){3(6XJ~l1-qYR;Omk z-K>qEp;a_s4JqwNjd)z+&Xp;3c0)U3)Sa?2Q z4Z0S{0BRwE>8xSV@d(g2LNEYiMRHzJEx?+EEdfAX+9VkAGFbELSAf|I_}$1AFRQV_ z7FK}kIQzG62AE#QN<1v%^|Fn9yilg>RRoY3v1F@ftHx^!%Q7!-3ZSWHOrOddXTg17 zf$*1AAZY*AEI78n^_8uI zVRzRL3gpD-Lo|#qr39exW`Jc>b=SF%V%Y<2_%l2=kSGDZcPzBK1CPCCJ*4OWOv8%; z3BH}!v*1kLD1hS9eT$U#;Ysk)Wzv?>EOT50fH!QxzD%&jG50bMUys>>MNl4r5QG|* zpEt~NDg|a3K-_|d1qJTdo7sH}M^aqB1f27pT-xQq)MqZ)r@<0{k-eyx`Dj_8IkLzD z0E{9_B`p{Y&EfLGHpBZM4AlX{WbV!$rA8yf$Cfe-nWj~CF@<kHMW_@@_DqFEwB5A|f(wZt| z$3M|)fc2HKb3X1`y>`XAEg5^vBH@L#n`b`P@o2#!&`m57wodch23_cw{Xc=uV}Sis zW*1&sv2>y0Wds!>6B2KPcPqEWOx_r*k&Ff|h}^Zi_8n?(@#o*v@8TivV%A@#-TwYx z!-C5c1+FhfmjFw7Wtq^SH2<%Hh#AMtAOkN|rx7}4)Rt~+i zM+I&LKqUw$X_*dvx$Fwq%F-@@U3*uSPaW>Ee&||dHgC2ROS|xUtQH#=Zh|Mu2^Deqqo4TKvd ze^Z=fwcoT$1e->$V+s2I`G+6!?#gECxeHy}2!uPiJc7uz{p9s?s}2AIu&nKD!L|@K zRO4M1UiDWNh2Ch4kQ%jeu3*R8dk8o&Q$6q(&tH0daV65as$SC%fY&-=0R(Zme5-Vr zz`W+Kh;SyW%}%lG7FNY$$})a4PqN51c{Kola$|It`nQ%@eg5L*OaDw6)-?}Op6L6s z9_y#9xw1~XyC`E(UGjXsXvfFLc5!xY$A?D%r=BYa)Sun$9oyeMun(Vn;GfHqFF{(? zd1dEUETsUi?k#u6cCTxyA+MUh4>vwrn=5t@|2#f?E8;D1RMhFq__k4VtHHrjn_lG~Q$_JlYVf)x!-UHUP!-oLJJizVMiA_TQH|8k{tuEmm(fAUO2@TJ9 zZ_&3I`$yyI13;sInFxC{z&uA)$wIvi2*?3c7DKSf(n9SXAZ9bZ5cIn0o&W^-Oqss{ z;3L3XIF(UIv#t677U((zm>3W0HU`+M1Y#2K5f(`0l?3Svw6*ry$+L@2pd~QqjPMEoh2B0_YCB;W555SIRY$8iD`(n)% zlaAc$*=wrxKI_{Oz835Zm>=GT9>U9rC3p910Ntzskc6WgtRMua z6u%X3_XKtDFokca^qvxw&KQ&SsP?URqr4#Gs;_&c_+Dl!=iwSE4X0T8EbDA+`2l^H z0fyx&Ka+<8;Ij`eoB(viv&FBKpMr^j7oIzxmd8-L+wl+_g<=gyvh*{K)xyU7zO%jU z)g4rOKEU|;@Gf~EwAx+fA6jAmD>S zuT#l9g?el8_`z zpi1q?BAVeK7RVDYQ@J#`C(aSZk_cuh9VY;#I?%Fs3sfj^&0;!p5b9an-@1Ma{70g3 z7kC78(+DehgrGRjj3a2}5lFTHyUMgJp-aiI7Kpk^>NDmZ3$}h|II=4M-jcnZlVyhc z@9pi{M~@#Pps&1k_(%61+V^=0gi63VINS%kN{~u;e6uqA#u4`9J}hu25U8d(*au`v zihTa`nf=*|pV&qF!iI~1^~N2*BLZtUXnVzi9TZFMT8V_~LhL?*w!ZI)*p!JKK}g_F z^QXi{`l)%<{0Kx!P;*yOghL5}Y7!9jxq#^L{d*1o<)%4B(9_yz{yuo}$jZ!*%GoJP zy`FKndu*@IPF+ZvA~dQNbKkSUD>HoEJtI{2UfHh82&;0VY<0T4+V0{h7k@8_hEOgL zE6_Ox2z7gH=580^HRvFf+XH@;_>TDiyw|Et8x5w`Zg!9zm-f{c&#ViWQbNCGy~g)d z8K4Dyv^>6Yh_JdqGEAm7^dwILg({SkD3G-mT?$C+X9l5AAYDoy{Vf4n$`uFq%#nb+ z6d7vzTr{XAC6p945APp40N>rKIG7*yM*yIRD>sysPf7^S&<+6bOxHX|wdNJ3;jX06 zl9wk8s17mfN?$bBySuwSN3zH%d7k<`L@<}4ONx)f!$a@e7{OUJj&GDTvg&C!N@=0Q zgtBf4aL6JT0i4RaLnQ$Yo=QY0E}ZcKrCjLc@jae*CGWD|_xnJ9vExCLLM`x=OMK`!7#y z79O#`vzAXmLkoCEpwD5>dZv>W32zj7F~%4T1N5>bcOQ=c_-3q4B$Kmv7I4X4kfH)e z2~cIf#$jBtpojAo4kRpE+P78Vo-MLFHV@@239p)^09fT+Tb1%QjVsQ2ZPEVFl7qf2 zS^$t_%%MWW7Wk1O`|SSPBrm2m;FC zuaUS={1l!6JCX}LbTR7y@KvWBfN1?5AZlV0_TUnrx9p8<#`?{pfa&Q*PEvgFM9-4T zH~V!qYMDy7Ednjr3UF+MAq$)k6o7iSt0@* zDVbr*CiE!+&*cjEc+v(+rbkDnYiKVNcd)H}Bc+j)Qwsf&5@|k|IcRTR*ZlJ^W0(Lc zVb|W=J)6Nh&w-DFGFb!d%T1`3N+GJ;p_IT1sVc)qRIW`qS+tJ_lL0_AV3l0X6+Ij= zo_`~p0u-|+lJJ}dkB)7)oN?{c&jy_Za`o2U%Vx@6DWTi0!&~ZJrgJfs%RYR%*L8lZ z#CL__zC~gQtF<T5FwSI)tydr;-JZhGP$V(%u$t zlLAzHU&^sfnaG$c^hS(Hth{ z#D7BK2k@OwBmMdE&7j`5-e)`EL2uvv}7D^6cm4Uumy#yrJ zy)<2Ch~O(v3WVh^zJBU4-_>f}g+~E1DGB7_toy3YZyF)6dVT335oZ8Hc?oE4B%5jN z1fI114r>rkR6QU=@2P+eL8)0Af(3r)S1rpWd<)QIN z;jp*A<8&kM16`+i?;`Yf0qV*VAmA;5QlMU5AQCz?Z<;^d(>)>p!~*tGY>0kbfCPAn zMyCJ<38$*(FW32YyXoIiOlKS+znCw&YwgL&t4+*%QCXumS@#(vG`s=GvOX!PooLGA zei7_j?TrFKmM}eA0=9%#(`;VX4y`%fkbJWgGPVK8NzqB!P zr>1*r-ldR}JG~S~0vrP6dau<3VCDh9aVZj%VLNR1wu_!~;#Yt0eL!^<(2%!Mx@`aK zpZ{z3D%ievXw_%0U9t71Q+E&~rQ4(b>aW`Lx^LN!9{D`XFRpC(FaC|K(qT)wf~;br zXD1dZ?l6XmD<)=LfaYjniSmvG7*mM-5@4@KlJJt%6tEt#RYIAtH~9}j*G&UuI^UQA zR3}n8!nXwel*wFNN?<;~Ixm8NmjEDf*t7TwaB@|%7}v&@fc<965&#R;d0!?1HjV-k zS*I0?lLA1-=K#ar(BtTp>`X4&vIr01gJ2#gBW$tC7CeJ_Wlmuthirv9kocM>`IDxh`vEjGr+SvWFqie7?RW2RJ;@(wx<8`sEG8Z07GcJ{LmFs zF?fg)!lg?0EH;VR8sNN8=6ogBV?QdkeGSb867VZ{^g5og1hhKs0j!x9X?O$hQ31o% zdJ1TRHv|4h8lGwV;`&j$}JvIYP%2VwR^0NRiheGO2S@>roH>lI@j@%=S>n>8E( zg0+7bhOMAgHSKrp6E&^3K(IWLrpkn`^F;dy8lX#?a||%7pQ3;91?4Fj@VpGq?+m-P z;M{q|zLa;-8sI9L+TTA^E>h1kF&lI}@#)f)S_8{-j>t2t*=hi+`*wAHWy+E+9w5F1 zE9QARQ=@kO-eXtbiI1zAij+Pp_H{m=^>v*+n0NlD z{1&>ehi$>%w4S1e?c)c|GkbM-81xd)RqWvL$97%6w0@m)jpq+LL%Te`FeRMKB@32i z4^4+qgOnqztK9LYoCC8p^OMY4VQbe4oCy);P@Y8M`SJjgMP2Kl>I~Ad$jeUNMjEr` zReicS)5I6GMhkeqJ{Mg@BMDdXD7T1s=>EY`U}tZ4v!HkFu6+j^`{i$I&-^mYWg}kN zU$S?%A+9GX*S^#3xBk1|{9PqX zn~n!wN~YiIcsVq8F<$|h5jJHxRN}PpXy}Ku4rR9{BB-k-bWCow9L@rQD#yi6M9?2u z{jGqZQfxY;-IDI0f#>Nu0Fg?L4co50PF}iGk`>^ z*SEfEJ0rZv{wL`%pDkJz05X;pjef}@qMG!2DY=zgrE_xmZ+AC>8GRWHmHk|nAb=Xr zkODx!ve)VQ`u*?+KXl9Z#pQ(q)=WC%%7=I?Z1w)wjt-9O^i37Pv~M4L@R2=#_KmwW zMi8hw0GMC>m0$7ibOD_zWtZZ2Swi}Qu{G+~UMpP5@-hH=36EOuVP8pwW*!?U7trx= zV!KBVtqu_C^xM{?KXJxcDQ)@vE-uf-oB_H^Ust_UX+Wj+loei9DrJzbUta@?rZyQ* z++wDz+2Kyx^^BtZ7!v7r+@Y%n+2BkE5H7$)_Q$uN&5Ws$r(CKPAQgRAFW5ks_Gx!8J84$wW zmr^JIc(qU*qYdNY}P;}fL zTclI7Fmt+)5>X6+wN%)K6kPKz`&P6Y4jPLAz$rn;02_GDdeX7jeBwM!%q$d5S_s;< zFnm;i1s<|csV;bisSF$dN6F!)tnuvZjhB9#F}D74U+}RWzYe99+d*0SNUTl8*DLHK54dsQHY=wZMGk{3^Ku#-;#Tv5?K6<(X(t3IKUN zEru3`*U2@0UEZ-Jz+7?X5IR5~e#$)rd}XzkSz4Lf7wikD*29-nM?6aZ1MI&5bG7DP z%D}&(KP$kc6iiWQcG&6JY}B=oGLJ)7Yk*@|aqlDT`I(KNH`uSGS(i{`1=!~~lev3? zpBbmDa0rSjmTarDNhP2@l9zO<+0M^9Fo$`p99Dg-O*j{v#@4Qwb8AxbjqW<5hWMd#eJO zj@_H4T8HKoM;}%8c=+k4V*|#RWABPzsr;Ji^~a)l&VeQKxS;QS%cgQ3uOC8}u;Chu=6_6I6PGwU*7V+Xvr^$P1<_(^~nuNkJ_-g_lw{m5p_EsjNP!Z-FKEm>I zM&#jL8PCn2vsOG=$_sAi{65NFjdHH)eBawU&~n|iyY`)K;NyS9k3W0|qrSJjd(AKM zoj*_eDQJHeJl|*+-uK?^_P&nYy!Y z?ugolF?XYkIQW+}U3)ze6$p%bKLl7f**W|}p7py_EZY9|j_oRgx-8QODvDdbQj)lK z6JXVI&%LzbIT0#Wd|v{AZX>}%;9WJ;2Q9!e!kGhYfQEp-3w(T8R@(r=tP-CobF@mT z6=l^E@DJ+RIDjPKR`oaMXRatvy;&u?>m#J~7~6b3cMG$|o#HwPkdk!;dNP@;XCmL* z+cA~Gl2u!l7AZakqrO{nHMau4DoM7xvuE{M)64M4QZz!KmRs}Tdmk!Jl2=6MZmS)|mfQ*kGd|=PNd0~a^3PSA~z&!x;ZdwI70Ys zvEJRD6cig5O(_)gQ=nb-<;SzBD~nW%SPCGmgA_*!q0m|gX!HQi67hq~DEa0*!rtdk>5pr2iN0E#YOhm~XkTRsaiO`Y&t0;xpw<;AN;5OG_(Op1w%X zRjI+PO2tlIy|UpzfNHaUR5_st*p@}GdU0t72fH2;vBUhU&sysp)?R{q7#f!4OmyAh zzA@-X3YvDaZQXX)uCHqLlJ%6Lrh9d5wezayQDEup^x^`6IN+c=$2_S-qRQ-z**n^A zs`?=5x>PB<5=-vwX`Y>hW~7{fwA`hdMY8=;*^=RuT{P-;zjA1=p?~d@2G1)V?*kg( z0bxKm<8MJL3a!~Mr0G(pS#`P|=mEeA3w~`CcPvnuJZ1qgyDwehw^9?n_AE7~LNm=TqtVcFW|7P&M z(bPsW_CKI07M4#y7+?!9htGnny<}i;8FBz86dMGf1tah|XtO^W+8Ur1R%UvE?j+z& zR%Ow+coBSCoPSwpVqYv?GUallKZDw8|*q}5;^=_7O`1w?@UC?0(|26PIv(Pt6Xf|tAlR%5yL zE14vBfal7SN=rKD89^y)S!(@9vv2JtVF7?aV2!1K`cxBd8AZ~we&ckQmxWc8bJSW8%!HF5(YR5y2%d`?jfY8J8w(aM)tc-A9 zO64sLh{!|${QRB@#jVpGSaUD{fCmBk9aH^j)x%bDxveL_Sx}G#J)T{0{x6?D|EXnG!l+!1Wogp$ZrrQolB{g~o<$xo zd~$MPU;Owd_W5VuvmgB62W|yYJifAe%k6#AAG`3F%V!YUIsoaEKciU6+XoLHxrP7Y z?1Xg>A(+d8YtW>r=8C#QUMJp1HrR@3i z(@)){Td}30F};^yZjxzeWvpayQx~i?hq4^Ynwrg~{hsp1NHeGM)R+S1W%*H}xIBPb zR?m~uH&z7DN_i1Y2xK5=@@&n6lvWak74o1y3mD~PeQq^fSe`Fuw!OP;Dg&rKEAgO8 z)a_KZoTdv(c-Uxqe6!Y}*{J&3$u+-GYkCNYN~txk0YU7C3&6d`cXoN<^C&@D$*}s| zQ&xFdp@ZB@$|l9p&lpo0y4IW~8SiKfVCS`P2Ya&=&sP$~?VUXj!O(sckW=-7TBGH2 zC$EGt^N$#Aj~+bsP>|z;W2-?ghsXEql)qP*q&@oR0~^v;f%_&vFb)WPu)psi3sMd} zc=FihU!Pg`^vcqoJh5eGZByo2ardpW*OmhK4%>Yjzqzojk3X_7;3+&`0frWq*x9#8 zF6-I(6$`CUmZA0lKtLtwlodXhDH+%mp2Fr)%sV_{IpmE#b2OX+RhQ!dKLM;$Xfe!qjr|nl zhssO_0~5d`pp*R{EmUmH{){q*a`~PpAs1*=N$Z0As$_P-OwoqyrFo3+qygn|ea6jF z1=c2OOS#p@=qt3iUMk@yU`zXt^$ftfChYem56=LG;{u`ZxH<3v3lEnT3NmNVklgxBCF}-f$!P*GUGTm{lLcEU<9&yY^V|?? zV@W`JIb*%Z+U7E!_Sn13yF#Mo(2lI(iM*6f>H~YLQnGarKEY>lF%Jk-vriHk){nhB zgGUM6E3uu*1B8_2p8d9h9_3jeYkQpcM7t{a$skNM>=(l^bOfO0T870}LQdfdCD2c~ z*XvvnKb102-YMcO3Ox~RD|dyGrtOt>tjKwjWbG7A_3G7Yjyb_mom239K&v#sd(flu zfV8FXkaZfqC2$_04;l89_?h}9p7;9Ii9btj?S}{Voo@~&T{}HLvk#tp&lTO`0ZI(2 z{i?h#lW~v7Ou1jqvZZaWkRe5I9C}*u`}xJGpDPaf;aSp;=nQ=R;u(N_?Dq^XpDZ|h zbY`7q!}_g`=K{%Xl`WcVw-VsUYAr!R!jQmX8*m|jA+RBk zqyt;-%i4>&j{t=Ln#UC)&@duh^W??0PYY_>#~+~TK4su*Y+o0KeaC|-qMq}EUX<^a&9 z7+HlQsQg(f#Tp>Vsh++R0s^KgZzsV{)@FqZ$h|z1NxQN^Ypu_u*ipQ<=34V8uq~@h zgtgGUJ-0zHY$tEd5T2(lluBW7Gk!H?X_jEF#8SGqXh!sP^9&{Idj9;m&yVItwB!~! zz|6tH0fO))&x?8Nexa*bLm&kXfZbRc*APP=I%eg}U0xRi|V{Opo_W9%_ND*|r{ z`pzJH&j1ez=t8c*5~LZDMHJ#dA8zJmI1;c~G1d{3D2waNl7%GSRqbTuX$abrk3Vs+ zesy(i6(yJh@b;t_8TPESzw3$y^+)%-YSirL!GUGvW}S`Mzxo&d($1^b_R(Me&+OTc zpYwfznW1O1UnWDQGKAaEwdk=6KbU6|mOuP}Ee)`2x2#vavJQYH3!qN0ZxlOU{wtrm z!b1!wP&oqQGVhFIPX87mcu==vYw(EN??Zr!cz#m`EItX?v{kc+teMb{Tk`-i$|Es_ zW~cca-)Fs{UBw6|L#&6wKV)HVR&B<6;pCPDb1CL=WziU5xzz?Nb}X<0WB}TN^ND-r z%okGty_2NPI&B*_ppzKj#FL*vyZfIo#-zo=@Va2yI)i~NYL^xe@D4?+FR&V?zoWKA z*`JXv{H5Ii87@2wCkWV`2NS%)7MJxBem3izna#Vlh(hlHCA}Nk46rO-ux^iRHV;^M z7IH;Lte63u4{ZdH46{Gui7?%`A_-`mOvo(9ol0{puVzz`QEnAnI z6=9pHBv`Rxv0TabY7p9;L+{FDE|9u5=2yu~pE z*dsBa?hJQ81*^37fLXDb^vE-lMhq9lx$XEm$j@>VY7nFHmDNx?7R z#RDnX#{OOX+}YW&t*tHVT)lCxwn$Rt`Z#CbCYT$~SS#jPdr?(kTJ;NC@g5A^lB~^i z+~xhXyRvIs*<8W-j$HgLpxW~#<}ATkHGo$&eLfROR*Cry1tX>sn&rwC{2jm#jVmkt zbhh^MVa{BN&nY(!)a|@f^P;uX&+VPP|8QvIuHCi&2pfCjzd`2vX+pYh!?8E-{k*2{ z-2UD#+k!V=mJol_8NKxW&F}APH{ZMY{PwlCzaxfn^V#jr-n@5nE$`nYpu1~#?N-yC zR2;Pny}V?#3Wnnjq80lpc{31-Ss1A`7Eq!%ghmGn0KaGkS$p9z@GT|dL6A~RwK9!s z&nZq@?!aIL4(_+{@mwzfP_C^3gazJ0h)-K87PSPzq+D1RqlwLWBfCDoveW9N4G{z* z?CHj+Y5(HnNA|y-J-5~n!Eze4W(y$(Ayx^KWHnqOpv(}sX9y*M;M5KP=MNFgb}~7; z2S^Uba)#(^$zb08 zSJv*g?TatJae(=~4?pC7J2qurT801#c%37NBa5=8A%xSY9qyOytFOLb&Nl*WqL5~s z=hj9*R@tOw2mx1$nMllbw)OxWbGIPLx+>T4c7Nnv1Fas5$Tc$op5OvtTL3_gt>38H z6d_%}X~cB{#w8_CoH;9%3Qj}0Qp%Gt$7R@Qd*5TffH z>oovXQz#xfPb2)MG6fgnoAs8vt-Daq`1(WUnEfXZ--V8+++6Paa+x0i4nqLE?p1?* z7qX9^eBg=l)~t)_)oZWFTSW<_Ji!?BBrDmP_teJBO)wf`Z!(Xe1oRiNU-{u*wLWWh zb#>(l6r%v00bpG6g}ieQIlfzqX6K0Al4s z3#S2-!-Xv`&TO@PG_4IrL0Iu>H>XHq!E0$zK23GFPK4b~p856v@pTMv0g z1kkp>Z_&awoIEskY;VdikTOYiC?lV z>lu9$IEQYPT^uCLFF{-K%y6S&bAw;P?*u0M0M<|_w@K&;jRXN}21pG>a<+=IH)nuRo}>9 z27q6;0rr46_~Kd?b++RaAQ=oLElmGamTy%ocxX$2wVic0uG}ku@FhTATBI2F=J_k= zksG`BmMp=t=uZ^$tP)`C@7Z(-9k34})tD0Eg%dUf?5&tXS=N^cvF`d z8&?jd&*1U;yW6jNSxhC8OES)vUwvt+(lMWKc14z!$QHfgK=Jq(e!H~l%V!pzcHOIB zXYZknnsrM?;E|cUhe}B4+Pc1gr?=o0V?gsEJh;gozlOHv(7iIWXQ8c$4O&$@e|=)v z%)Zlm2O7$hppgXY4qYm=X+G=10t1#U9I?IQH8Z^+e&|>PzFC(skfds;;_@LVTo6wLI^Q3$MckQm-wfDAv51-z` zu0O@KYPWIiUq-vR|IITTw7>iMMcSXIQ@8K^p6A@vX1{B9?N$Rm`#up^kn&3)Uf@R- zi2y>Vz>wUFR|unW`xfw)1x9Y{I*gUodNdh2P?Wp0zVB9!w|h@XtRzf&U0mMRcRWcD zFkbG&K|q{J9I2LaaJF;-T$Z$J1koM>dr@wV2vY%sU|Ej~0Iywub$Ge5le1I1s$L*; znyI9gtk|-4xGN>km#|boxKbVW&U|b``q~FLjxK9}l_3CZVlR4CYsz{oVFe*|D!*4i zW&{u(Mz{^c>31Y(txm_DoxF5~MLL^v>*}>ErK5?1CIL`ca@|#PvDgTa0+9%eUSbGA zNLFJ3JpHaY5r|iuw5&lA(t7|kS%*sH;wHN}?=|ayJphNm>2xM{&AFA!B~PRli*D+U z>wcP33H@@T{N|f)T!A82dBxYx5c12V62nsFbMDW4D{fuDUs;{Y6;%KzB1{MD@}g!3 zhkN$$(Gh~$(x%*737X_;`OULu0BV)=nRuTCfK?{0)o3!_fPMAVQ=2H39idu(3)tv7 zfl|44I}NPXjB)Lu2BH=-}@(;QPzCzDeXJOwd#G%MQjz| z`wMsbm*+<~1;FK=Dpgp7PUWI1K&8+L#r41Z=J`+euDlxb-47o=_M~5pi%Tmomu0|# z!bw^Ht}y%Y{N#;~;o}cKv48m|e{82xT15a^tBEU}L^tV5(H{TC|IQN1e%?N{{;M|t zW!CmZm9-Ao-hc7eZRh@n08Yk>+`eKzFZ=8h<}tgo>y;b&K!`*E0;MIOw`jBkt!TnR z79X#z3kaMfBH+)Bh1H5_fIR?=rARddfLj*I=RFI%LPwI@$7Yoy1BC&Mq5TzrcFaCc z0HWdmP$eV-Xe_EHwj2V2lR29K?BeMZ05;{>-^b%7AVpp)@JIS&+%v8?;>CzN(ogy% z@a;(=<#kl3SaAP=t>q%0j$4Rz(p<0NtS_I35+Pd$MXg5@<#V3?mEnSZoHEqo0F? z1*JTdk|v#WtN(h%+=baI@HMExg7TP}0Hm3x)nIH%K|(nW0HBpSKrZD{1}GoFL?z|e z-%?tMmc@ws}v$}<}D+|AJ-28 z^kr|$f~=?Fuf-=-=pqAOjX`hPZ}aiQ@`Zx^>o0!98NvLG`(A}aXUULxQ~rwu;|fag z%1a72S-T5cWox&ZcK_(ucK2BW_K|puazz9=JExpsjauF2!+_m;^r1a?@W5)rw)L6~ zPcm6Oty-bDZI%69yS%*Q9IIM{y=$(R+jyNx$<$^qCjrzkK(CT@u5_NlTiQyb%K5W< z_z*f~_BorCOg6;6n8Mc~B6xsGXg2Ke!|z!-qojIScz?wj9hHLHB!V3F*f-Ecj(xA^ zZq6;`FH!!KrSmiab165xG%Mp$xR}D_#KYtr6=AR3l)cow+}$3@!WH)LWUa0CfL^-a zUAt>{?cZ@HFgyH}| zM#;-`Kuees;E@$t_jEyo@A%;jB9<^FFeD+U)$G`sd#P4@2vDPPR{|wZ9vs`fkM7&O z2lwrVN004canG(=4f{85zOl1G)B8I{a8?cKMx%zHRAUr!u}>hR(KiIe&t=)NsQ>`~ z^hrcPR6qI5K03H(qjuL$>Q`3nH0{OJnU$hRdtJM-6@q6rzill(Un7`Y0Ys4PY-g)z z+X#JyT*gX(Nbr%JoSoBu02xBL%H?Q&G)4h30Z$2`Qh>}RbDu*sjaPz8zL0fyMOlJ3 z!Vm&EKb6@#k$jujkC#FXI^DMalxx0#r1+uS&mTQ{1%c4nV__L%iVz(nX*?eu&u1qjUn&X)+GT^DR+&DFe02$eEH zYxe@M7h}Ejxw0iI9#hHlwALD{ycD#~Ta_K_a-S|>TnUpD?=66T>PZJW45$gmxtODN$X3`-*nFG6Bz*kSo`JxxfqT>V1t{W!5w=61d&^ zj8LvM5g@EqYgPh`s_*g^$d^lgt=2;GE6}cW(zv6nf!y2WI<5@dN)#sLK&RP4_)XIP zjgYIqli8SOm6vPlbgV>&EBZFG5%l=z-hG=4`VK+_IFx1I>oPBA?x~^Y3QWv+W_LKS z{&;AKRE9ZP+Mvh$4U{ck3WS+^vMAsimgyHhON zbFPu+!_m%;djZJZ`_qq}Sa~;P8W)tHvN>qpWVsZ-hcMFl>z&zH@-MOWldw2 zD?f1X9+A>6o3XJz>yP*>k9|HhqEgnt4M<%=%vGpiq3jkzzB`Yid6uKJ%gtbSf^Oi+GmCO2t0}g|?B%`+j^A9=}V4o~lpBM}x8A#dyp5c9$^6u^aQ%Sl2pUqXz{OZ)! z&1=Bn*kZB{bDIz}72+C$|HwT$5>7guExLUh)!}LE`8fSpO#o2&vdu!sL;bcbN2~?w zGAR~puH<-t;>o;cfyId5Hub*K?7tfhB`pV7bqhTAQ9?Y; z&ystu;1f#rr^IVPzMIPBjM1^bHZJf|%1H4h9-wop-tYKaIw|K_T`GOR2Izyz`lj5-6xO9cX_SQbju8JWct2f!FovtO~ z&s^tvvdENtykw-L>ybV=vx^|NX|>KYwof54o3qnut!X+wJz>Hz53`BR4YxFjRUD+ z&)vCI-pvIt1QiKjzBjp-4sr*8{H^=xdvgRr#nCC-ti&_9+4cc6y*a>_d#W~aF_*W8 z=ug924u=AKL9i+R#KlaQwVBF##R6rZQEoxb3rtdiFx*JJ*&g~YtAJk#@#9v@Oe!HA)$0wru3cHHeQmYtOV51%SAO-c``oH# zIZNp;Wgk}`)pxh>Gk)bbkfm7)0?mbJK(rxicXxnrh~OgAQwo5cK7GR+z>hq9CjWbvNvshkN)%p_r2{n8ptnLjB8B!p%V zm^;0$?H(Un&=@p+q-vUN(v@Vgf`D96TyWYsgouP$hYp+K=m=5VP ze+MMc&#X``uqPfl&`y=I5J$`cg@he``oy+A`JNTh2@6*MBRn(M9a|6~J_vmT3fZ@G z51m8+!2KokQDiOGmShdZC&B=kK(A@b_LT*pn;C#OwRh-N@MTL`;WrARz#?qRUdzGk z9B?y=D@O)2)tkBJ&a8HBt1KLbelK6wEZm#eY&^4MC}IoNAl$sNc`R&E=4q+Ev9|LF z_f@<);A}NxywI-_z$E~=%YN6w08g-o4FFh5@E0ytJY&7r%^&tHK9pO2+g9waIBOe_ zGL7{WXqKl(SS8+8A?AH8JG9NOFWeG6;(0UnR;W_)?D~r+uPJ+k@dg1{%BHVy3$1-V zmbOqquFEVNYY~F?Oql~&)aOE_xh;!r9ol@K{SKH`jPYVQ^1KGIJpF}MC!?W7<^#ZG zgqdG3CU_0M%i24ICg$Od@(+RofCmAt&>1lKEExX(W$(|PY)!NK zJZ$ZG9&^q-Q`M>J>Ji-lA&^1Y3SH_#A<5wzUebSnB$A*6SrG!D?hA)Q1SL5fq0p5> zm%4JuSMrq4HTFU90{BH9{frqdd5i7we2X6JHFUb{4;eGFpSyz0iM3k-;4S`Wk9YZ5*(Yz7 zYW4J0t~CMg-E@`|;lB<1uug`B1!LoP&M9-Yi`8=EO|ydUYAjG5dZsH1vuP-@UI-P1OTe>5x9o|XyvBUy?L%2URQdAY_rBiKX9%c#O)w{b5|GUKy$5Kx zL`gorybJjjpk1M`e)riY@jrd`VSM-MI2GhNs&=DQtVAEBvI0m&zer)lj?JQOes(mO z-Fd@Nq<-?@hk&Ccit;*kQ2aW8KRvsK!#{oWB(6~+|LC)4ajgPaDaQ@MHFH z6;@-{<7Lq}0jH4>dSj#+pWSTLQ-x!_$r?g(Jl`<=IiIu7uc-@;$s%pu$IxX%Fwf3T zlH!-vi7{^PZKr!mA7j>GK3OF%y0oQIDR_6y1^&{NVc>#oLAC2J0o=WzVUR|exAzku z9-y#mVDLQ97+|=n`}Bh!{2&2a4Lw$IcWmC<*QC)EG^Wz*IJ~cw_Qxpby*>b*eXt6& zIsE4r*R0DJo++gEdp_&z_$+zwy`Nrd7zDZmSOL}-OAS5dFS}kA+uFq5{!Uz6o-vM> z0ONJkSXbv&uH22=b$IghT@>wF3Y|YVx@*Js8SfvChpEM#>*0HM_xE63#tT69OMrI` zzY30x9JuqKWmA~2MhJP)8Vp97oZnofivPBDte5YK2zGY6v9rGwPaYn|Z+_!j@xh}n zMLlnqfUifp`Xri1--ycII{{*e_32d_YsTX8XV+0E0YqaI8TcgMeH`PH4`Xxn3~>1f zATy8AnH%GgZ*4&VlxInLk}wc)ousyP>KcgRIUTgtWu3k*i866 zg@X409r;*nvavXSnT!R7bI*1$7NAV*~H1VPy1pbN{#j*r(t5Km3wxmw^A()^023BFbqmVod_&7C_R>Oar2=xZ|2ndc4Nz9uIfxCk&^t#C>OD3> zq0)*qd})n?JaROPoY@?o$NXjx#auZ7LS>@{gZT&`H%8Jj=>l?h2~FOmi1?aoy^Nyk z4b7X=9LNOopx`KlxIui zu~8Ei6Rj8l0e@OI#p>~T=N**2z%vLeziSl8x=-xw3Oa6dwxiAZ-|>r<0N%^r1;ehj z(O?`zv4RIVQ0~sKB#W%$F^0CrQGzC1=MUb0KlTm}(wXphZzpcx=d<%G)^r)&+E(N@ zfZf3;W|wqdS@A8LYvw+UP`Q2byPptPbye zEYK-1w;M?f`mWYmDLu?CB1Yr*dB@>8Ye2a(=)f1yl)d?tpUc&qm;U~`zwWPp{)K!I zr?&5YL(C!L{$*T$DyQA+FFKI7KmYdEpXd4y7bPc_mUfv76 zBk^hiQe1k!eXfc^8?d97;>p%tyt{iChpp|{@9f0k&VFi-Wh=Jx<4cqQlw=h3E=tG_ zpV5=-^Q%19s@xh5u6x(qo$}#}m(`Wt3qX%gn^k!Na-WF~G zXaS!9Nzc1VkV>DgCk4#gvSzkaGpybsPXfF*ic}XxaJ^&>ua5zmw*cS*d$Nq#6s4Xq zkA{oXUd{VEuUgsmc%u{wYL2O1pZ$ZQ1pNQ$KmB9C<^Y~RVZRbZZ5CI&p0_$P`~Bd- zKHzwg#;K7*@5}l5B_OpA#=P4{0WAdaQvkR^!8Rn)6ba{{*V{1|Hg4Xxg$e!H%JqhU zIv>}=ebCrrj-*itzOFCF&+Em$z3HQi7nm0cX6+6v>eaV};LhG|QWmY6@8vrB?vIJM8T4r&e)({!8zD5L?jn@vD;*>gswq zH^(H+J$~oic>haZ1%T|O!h?clLrG1)s8-9V$Neg|iv7n2@%r|H)e+i6bhozBI33@3 zG>v!Oc_%*o^wW6x;zioKR;L{mt9Zk+?#cPFg{Yp#)$O%W;(&!|0*Xd5s9dM^WsIrf zxY%ZmTXpU;fk&L@gU65JD_{F^WyD|Rp z4`Y5ci1HAneF9)CG#Cfq;NUQ3^AVt%uh}Y!34}1taswdcnwu7L3z(Y6?BX17%f14n zvfb?%!@rv{fZ}i~rZ=bXHh?8xVh&IZ{5`t8gx(rqzjDX0nUABqU4dYmfJM-@#o)k- zg_3)?6{~B2F8epSzKSezrqBSOeD*A6=VySSSrqEsSR-GunQBa#OL1s^H?%OM&3R7&e&0Z=>s2;| zu$S63tK1hSiHY{rXV1W~XM9pE)4eg3-!l+|Kg>!fyYo53tfJ?5*3252P@dVc`D zmSe@ft(McUkeo$FQxpWeQq;_+WMyL#LE+sQa#=(zI2NR~Drbi0Z?W}iNJ_GvP%SzDuAV0^6m_3ce6j#@4OtdT() zTCF)^IJ&az^z=AxZhDF57h}w}LCmp+w}W%|s2#7aq~#1U z?I>QIo<_dWj5FlYr!QW{F8q>V9Tx2Q6h1Yb$7h_JpTxt*57QcHB)q~4LfAQ6vlNDo5@F7r&o}4(2Bpgo)Edg4O2-C;=ac8p;|~EFtNbQDc=AqcH9E=rVj(n@ z>WjI3(mN<$n-oG^tKH?ETIp9$h+&WeK!`opc{&PRDS6?|pFVzl8m|RTe4SriC!njx zS_n2Aqrjo)j{JUY$T(wW>~|jDZGiMqR8VY3!(N(OQnmz=h&)5xt-x#xwp^i@!tIwR zYYZs?>0GXqTK;I*c<;S;QRs3!ZxXLwzm86O3($KLmsjWU>g1TcFT_uN@=>ZFZdm*$ zpZ+9HPG6<YIc70kUyYGKEIpPpYN8oL9;hCr{P)~uz_c0tBnBu6HB zq&t9A!|PQdRRax`tyU^YfleO8&w+qSsh(-yw_|h)4!`n;Clql z=3|dpca0`mojkw<%D1;xeIKQ~(h?xb`|lk*jE@1w7Sa2S-~9FHa_`SR`t**E*7mW7 zPgq1F82;wp{G0LaJMTra(~YBtPvRXw_``Rf#BcuAzYW&4RmS5fS$Z2Af}q*evjXY{jHs_%J%i;MYNdzHX!7vyBo{iJesxbc=XL*2aNAW zw$_N@67Vp*1~Bv@*FTS|WiKk*0Q+(s;N6N+o;8Mt%>|$LE!;Sa)$XHM^Q?M}{kgh? z){C*otPxBA1ok9#R|pMq-6&RVtGG$Vxe$l|9CG|Ur7j5GP2XWY3--fyZ{rPe1)!fZ zRG0VIdwRoM*Q^-}6f5M2p4iPbV0XwKZJTGVL8A;`16nlBz?Y@Nt%wHqD)5}zT}O%H z7;t`boqC98;HzbSoeXuG+sl}~dLG)rq^A{gDX5+d$B~`bJps7~7#ah}%h0f1*A;wG zt!~F^YYX~i{0J>>8QGE{{>V9ib+*}tb`S2n$%|3U0oZXnhmP+&t`Isu1J(pX@O*XW zAV$a`3(LU>$+K-ZxJDsmggwU1Kexc!2%avoE*sW7-`a`^^gUe-V#V{byL*vCmPEH1 zi{&~QH4DXdtS+ykz?o4hw*mXZs1>1^-NTr0|5PIYS(`COz5virWWEZCHPn z`B-xy8Em23MISn1Y_=lQz@VYkf}K`>w*cnf_~viMtMl7rcp6Lx@v?WCT715?6UuxM ztxOp?vPL%8rVg1f8bn4zicVwC&?Sci!q1!~tY5xbi_Z2=nuq7a;ll?W z0!gk&CmMoFMl>v;nb8ngZIQvdB5{>QIi2Gp_Ey8}fIZWIxPopxFP6ySbYEyA86-HD zN6?t#XOY7W9BZDbp}>N))-OqEDTeX$8KaJ}87t~bN9+fZQh8oxKcM840_5|J)=FIk z;8W*+f8AgA*FX3AX~Fb=Sw^nhfAXLFC+UZ`2k`dKZvgne=m5WX-#5SeoqIpwApI}X z3-{Ok^(%h;_TT&We_wX<@Dw!bjj(u}o^=a=%{bhrC{8nTSm*k>3enhVM;jnjFE^4m zWdaE74X#n>?y67E4QWP`5twot?rGKZJK(?apoS04*}n6}oB!qj;UrYPwf3HNG#`@2W*~Q5oM!4 z9RZB50o)aoyh7|ZJFy1LrPg{Frx?|t@AoJ)WP!wk&xUwy8mxJE@l)C7>>T4hmO{e7>y zoj__awL&Y2Ls1fYC|Lcd84`&yZ@9T$J9E$NV{I>8MO;M%7zHiQy;Arjdv%NQ`0khA ziz9&T55D(f)}fL@t@VDH7vCS;Mx|=Yw@w@%Uqqzxp*BDbioH48AAj;m)Bvw3WdMHI zwSqchw#eJT!C^dq{(`Yh0N*=|x0C?>4uE)-7l}1znmdoQ;$;+BsYf#Ijob?rZpAqOXzY+j9rqFj)FwJ{L zXHnSzxaY{L!=1=5@5SwD%yYFU@9oFZVwB@ql-k>j2ew<;t`d1Ogg&nNv98@!Brh4U zYc>k(xGak*gl0D(jnaJ+<%~-@HJs@GSUpwT8(S!vugEtj}x?Xk-5jr(Z$G zg5cG%$a(?lViKd(EXwej73r-S9~Qp@M33^dC>h3&Y?YZJ8STd&{$- zpzh}8BPUFzLfApilNcjQ^!h44G+0?XLQpTiyOFkEo5G*WB&Ny<_%H!P{-yA6 z)@{b`W9~2TULx}anbmeH${MP=Eyj^gofl3<*U0{5JZ@WHG!w(yLA-0;lH!FwBMLE}OJ+BRCNSybj;#^e2? zIFsfI5sx3gA9eVNBZ=joaPGjXoPlNdva`L*9HC#HH|q6bJetIedzV|*4vAzu-+X?S zNb^<3XzRB%bf`>9#&!WUe_KI!HE1|>z&JrJBU6;OYtAQ)qtl5UEGjXc4w2Q!2$HDHMOeH~Ywkg`|JMtXRmL6``iEZ@BQBI*|Yuj4VL|7Uq0u}msgGf{PdT%|L_K^d%bz> z&$_<&zPIo3=6d@XTz}^~-}%n}`1#NG*ZuV?ef|Bv|MvmyDBCKJ0KUXO9Ngv!YpGwM zP)<-91l=l1`F0~Zt!^}mD37ZRip4M{C^!SXb|`uCg(^}m<qU@tUsG&4bNX*(6L^T1N zH9fM;ZUX4$pc|CeL|L#%RSNNSUV7dE(t=;Tk=qTc5LZ#G0EWC*MXXdrA*q+*%kO;< zbpX;S3e8Tp8T(t^m<$F{ZIq(L8dUY(0eUjrQ$TIeBmvlTK8!5jPlYoX2zobBMj>kR zoVs2h0KH018$i(Tc_=R`vl=kUHO9-lZ%_b_k55wQYzd{xRz@mHT0lww1H%yQ!#xLl z%~%g5o}NaPF$7&gca9;_Un)@mlW+MV`;C^{TR-0z*CiW%g2_ zCr~LD3JIuY%h{;pQMRF_lBpkjuQS#yBOU;J8)=N^RH~c!>ef~qm@3h!!#g|C`r5BY zy$HR-)5T0NHdoL*GGNt$z5%yZ)m~m711{M3z3s>XLUK2!$dl_R*0umH{0@-JEH^QE zbpkMjUIBsmg~qVcSOMZwUEN|H^~l}62D~yi3)0Qlh6*&L@rS<+ zeI4+Xq6AovCHGxb>d6y~Bm?yM0Xqmx!=Bx%3c|1l=+oN`6WP|xHfqxq`&e$ps#u8` zBP@t^nw~FHv4*7PSmK$8!r+){k}F0J5?-C#*RD51v}z zoFy-MAZu5H>sWW1Q8v_{6+^7T14gna$0Z`ybe?K)ER8lm#%9+5JJ$(5o~##y_0%t%g<)X`*GtR~w@_BfRY-2AQMq;o^ z0%eVj7Pi|1+%Knq?fKof+Pr5x8}a#CY6sVCO1sd85oa8TE7rn3@8;jvTeWnKY-u>+ zJUu&k6=ir#KA!5)k7~4#MVZwt>r>{e)st;e&qa#pQKnj@zEW*QzFUPpvhd~@{>yT< zJ%~AcwOAVRKT0VVP&#y4Nk)_+dp#N;L&}Xre`scmp^Y8be@%PvL_4y@F=&5)E z*x&G;ijzO9(oJSs8; z6c%&p%oQ{jehu(9Jn$|bx|oVf33%-%p5LHc@?DSQ72qb%f!_h>q7tMEuhT+0jSUMecM|#=2m211}UxJ<{E`^p+{$yLiD%0 zt=Qe}#MSi)3hE;E4>|z+Y;0{e0o1KHI5mUAM zqQO22ugYqzUWzm5VLDkx6$RN!&O5tX@qqaq9UUbPlywyz9ULWNkL&rKz03i(_Mrdz zH-9bVlslIn|C2wCAN}DUrQ%Qx{%#I@f6$9MfVa{BkN`aTlOZ4rkW$&iJP)X9^Zemu zeD{-|M2|5IpwBr9e#>gk*-9KgdlkzuK$JB;dGR6OfVIqLS)bG7VXpwdGI`drvJQ*k zNf#E9gSGAoM6rJ2XAN3)K;llf1D4(bAY`HmZ)^iV9v^pgA#d~Pggn4JLzH&K52AhOkRWG5@Y z22+I{+=@lF?83 zdXu3xw93W2kV&*zfUgAh8TdWer{HJp2KF2<^jdkou~tYf8|5iPa0B3FovQtHOiNY9 z%zDG)84VDujaA~ai%~?g7KQD-=$(BMo2{m~fvvd343$(2T z0v#E(p-lm3?ah$$xmdFQ%EnZ$0|01PwY|g(06zC>j+|eO#~w;a zo@4>w={#Z{MWZi}GfXf=a9Q}$zscu@xTiv$j+ggXL#0%#BtvNWJMz`Pxh|`<#yvyk zcNw$M9u;W)F6!ia-~T9H9KVhqeDW;bY465weel&717e-y!OnI}GlEslJ~UXniOBB- zjRjEDb{Dz8S+wFD+(4^E=C5H=KGeL->6&QHJvIGDt8$uSHv2j6l;ezZ#`La>%hPo4 z_uhGr@fX4(oE6ST3zO#ZwP$%uNn(I&%M9i z@62eG(qu}=^jT&Wz0qkr+!pj+q~l5!#vq8U)#qJ7Wv`V*y0lPr668an1Yw`|JL?zy3Ve&&_L>zu$cQ zvaa0k{_gL7{^Orq3WB$erVl#7NX=2I1JR7sSTO0Dh74viDE-K&CZN&R^c*quG&9lB% z5?8Eg)X=NqJ@kx!<;!13;rv0+8(b>gyj3#%*<^}-Y(Qp9JV(h%8a%rXG#e4<89;f~64@dF(^+}9J zi}=Q`eKUUeqaU(XfJyc|wLs!MdfadN{q%bg#kZtahRc1l^->oAt5;c?g3$^p`gb|!i&U9eWzfQULur!rT`gBB?7!XFL9wsI_Rem6^y44K{?0*M zUR=fnO7hN5hkNQhDgYoh@#^e#G~3Mt)-_~QQ24E!->f$hjqdZhO1hS3+teA#f3Sa; zD$W1k$3IBkDiwNj?KM&v@_&1E8QaYJ8(;Yf&j#cHJi5(J^2qG~iYow%Cy$TfZ~Tp4 zPhq-STdk-;o8#UM`y~IdR@EX(Im)l$%B;s3_cT;FRfh+iJ0`1ek4FG#=?)d!xrI{w5P;U{HUaRR05?Vn09of5@3CHA`_c!o-)W}eTgA>UK=LT& zudgC%8r$Ggz+a`qYaf2X_X@Y3#e}^n7Q2xJ+UZ6yNu-}>sW2ZOiy!mljf6q zHH=~%&~|+j#YazKc5)i?S1$pn4fu1J6#NW(Y!rk2zMc2lx&ffm7571$L>ADp0laM3 z2aBPZW@ALk!Xj!7fG;3r&$+{HYP8UhAd^80(=-*mKhW{`kX>W6llgn^OGK zAAgTAXQOO?d-l*4l=evPHmj+FNqc*n=NK`>)*=fTPTX?t%uIIzWIuZFFlNw)fd6&>{MfLd5uh{ z#Beo=EcZWobsl>U-epYOAO7~e7SA&*-?}I6i-z(kd$Zciqs`fNaeEH^YQm_6?d44I zC?l6#U+br62$Ii?d@>Ba(b{7y^Ass$!AFZK>MdV#rn;C$czW(0d{X4%eU`HcLN{N}$DMrV~A# zR!!z;uhdZr3n)gL1OyC^H9S{vAZrTH%|+IOE9e)L8^W#fqZM8+g5&SGg6 z%@P>;8NrSP%nXgMqRbeUJw##9V_{*Ou_42@u0gp_VKSdu(4+UGzp|R`8086|3&^xE zo5h9uLgPCssLN2k_^7SHVRJ;Pj^DD*Ac^Z*!IjZO-CZlT2f_~U1Qn{t$DrTFaf zBmpFQq*r)t!ZS`z0UC^Fzq^$p6B39lRiY0dWg(NYWXQeMj1A*72YZClXi>ANUOBE* z@wi+D>{nA5wiR|Q5ac?maAg5oDyTC6)nI6SfiZW^pv0jRGjF{$4UH)Pz(?w;J+_dUYineJJ=>)hQxe=0e>POqxgva%2jvn)s9B46a_2Kvq$+2fTCt)^>*Z;JvKbGRm){+k-4~tYy}?N z*^B9Gcm-gwDY0)i7qMauG-xfaPh&YeN%_s0YA1p8%4C`N-OlD~=vSb=09?+deE<#f zVE)o>hVf*^02RjJzH9)lMjSK%LZ<9&8eMq26mjtqJ|0K;;d=l-K?DE`T3G$G-3!cL zu)jg>WdT-McrT+2Dy{&XJU@qEVqF)_N^F>0s(7C(Bj47H?KWVJu+`fv3jhV|yKg1t zpGTJ1!+g0hRRn=%8o+FVY|AEKt5;tTpQ-Cz1`tD6xdr#AGC#&q0jP9z=H_EKT-JTY? z|2(&e1#;UlEC26~BVJQJAy?K@Kp@Zc{P6s7Khu}qZ~>tJpXa8UAFe9^*!KziHKYjI z=aWSY0M{1wH2HxyBYTlYyzk=|p8~k8TfzFW$3J}jG3Q<-9v&X?+)WBkH(kjH7bBWX zbFeL@=|Pv*mubBP=hnVxaz@qRX=_Sk;Drrx&n_aVeu-NPP5a%#qDFx!r*^h?;Q?rk zy;DwV)ceVgzn>y{-g)0~8E!*C^+H-Glb~>;C%lUEt>5 z;oHx|uV2KH-=s zfu3)l_uo^ZcA4?!L!XXYcL1$Z$Z*FL@$LMx!03*7Q302%;ZU7V&? zUORx7lw-(b%!@WJ&)h=2($|0j74*Sugt~?ji_*|DhnV-ML>PwY&z)Q~&H%l(!MZ__ zeR%LNrYhm~FJ^6O`C@8^Wwmq2vM8)5yUaVoItDaM0O} z{-~ewA`!RExrl^3VyaL+IQB)DKFxp)X_&lwV3Q!#-?&(v# z=abae`|A2C87=I?dk9D$_9yY;v(FMReF&((=I{1PH$0ymPXJYKiiVXLYj_u;UrqqM zUI(1a|VGp$Ci3NiZ5h-h`^^F&YD=#(d6o)my2@-}`C=a6c|BiiYyMyVV7h z0hhBDlqvx#OVQ$Mz5tXD#sF$S4gf*gtMIeyV?Lxg;_sYuC)nQK+fQwrdMMErUm8w(tPgt#cu;xOII>vIlV`ogI1MFF#s+4o zQRPctdOy+CF$((;YijlW{iDOw^WV9SlY+aB4ghU2y{kSi58MJ&2GFNbCbd>Odc#Q! z$3Q;lNF$7S_2#zDosCn z`d;ikdKBG*2l1_c^>4=R{%$HjRbveV6RuSmn(@nC=WFie&Sl+0UVG=syRi@GuE7@- zfzxUfIdiZBe&s7uZ$$~(sz5K})90}mK>v*vK*{Rf(9GU;6thjfCV()&{dUL0I)wty z&aNUmW)BBfDVMvx^A6xvk1N2mibB7(Dh0g%>}8Zw`og?Mz@>>l6Yb)09L@;J1{yehm zJA?(0%|@QRn<0C%1LS0Pm)`+)bNC)U%>n)w8c+H|z$7w@y<^}!w}jlAMfUO{R;=L$ zIhCIa2jN=)SH1|4>kXhKz!h|!hi@Yfki9-<4(-_7o<_FPNFG+63>{CSy1N~#VGrKg zj{FL`1+ZyosXzl00uS3eQ1G`xj=^UIi+i#M6TQL61|w+n zwC8Gu&BM>EDWt)k-T^^9*%nMpdF;Gl4UkR7MSfN;DwmM9NiJF3On#O2^kfU(^)?%o zpp2U%kL6zlm<3hG8YuXA1TVIc&C1x(a)z8=M-P78MMi6A{pk2OwMl#r8NYY)orJK@J8EcTwX)V3^f^5EncZd+UPHhIa^!X z$b>~YS9-l0_g0E(GkPs+Q9S0Hja4#G>w(wkq@2z|d-m5a!8=9HWJBaVW0ix+7_A;rEX6(6n0``h3C@2m&+#p~zc-CyMO)9UeWUw_tvlc4@N@A=~EKj(e_&Ue1^ zofKMdf8AgA*Bj7os~W>N0q_2d@}V-L2g5dQiv?f=rPxZn>oo^5AV47Fd#p6Sn2i(Y zSNY}yPfC{e5=f6MScWpJLX-}4{;sl>LYKM6T`QbwDmEvu(?gQLF7FlK>lN6b<*0nz z0oq2?Eu6%Ge+39101&5)p+6h|@HQzFx`~p&kI4&dIJVx}da)cW6lLeo?rw3%yD-{R zL7snB+_ozHW&aw5uMkI_z4+wx808Da6>y^R@vnaMH)4uXXNdT8IEt-qCxyHlW^Ne% z5GCtIpbTKpsA2w~DFiB<6%?Ej3iSvjTQFL$){^pOodAoZsgxON?mCX9chLv+1|S3_ z^WyS689DsC%AZxto!gZ6)liV{iXLU-^{dx>y-dJU&`{+Wl}avEEzbguSjyPh-A$GA z^@Qtn`s5QmNdREhLvXIAe2#*hDq(XEl|&5-8gK;P8X;`oCpdTi9fK`~-sEPcHD5q8 zDA%q}1)!!Ps9G%;k_PmEY7kKIvzmXoT1p}JRlyuped6Vv85wCo?9b@=5Gh0XDya!5Uu0ud0ys?@Mk_U9gS})J8 zVpWHSxTm+V3cqp)qKeXLk)oPb8=k>B%_;!3RV7x(&r)%|RM>9!YSc8{z;nnd^eKggO_IK*ra(bUb=LpRV`r`?E~i}ToOb)dD+BaEOMjhKt+D2D4f@}SB*S5bv`@){&~pY27BhS1nO zX&Y`(sT$<^1Nzu zJNlQec?M@NYqGu5MF#fL90ct~w)8C=3J)3WmeoKpo<)W6P3Ar1WH*|vc3hvofMhst zTV0OxyQrhh3f|(`gW*{Uk*~5}1oD$hc|ayFVy;+}Zc zBs&rNAYk7=ICA^%ulwu%`g2~t`@6sUx6yt6=<{EH9@hPZUqAJ<`@lC}|Gew%zyG}V zfAKv(QR_Y4Mi4s3y$~@N}#RR z?5%C?te@2zkd!8rg(U#XaP*{@@ViQwR(20;4{N;%sRBH&RRGZ?0Cf&fT;THpY{9G{ z<^r~i9$LO{0V4D|q_$o2O}sdH8Lux+QA8)nFdzuuv(?z%A<7p@63=uF*8tQxz-=4Q z@nCxoB?O?t&*&9*9)1l7Rvt(3R;fj^h$q{-349BbR4Z+jW^SyCR}DqRO740S%;#&O za9fDTqHMXw`tAPGdBJIoJYMy&;al zc3>)G2m8B#x;DzJicm2rZ+dhD%z9AT0txo)*{7edF)QBNicYJA0#=RftsVA?vGSKr zYc~!b9_2{sQeDWGVli7Wj%D&FwcC1-HE5VWt?^-%A_oNJbAW>d_w;f*p8|jX)^B_(F0Rhw z^70}n_YdDWiha`qP?R;I*hbEFYP~^^``#5QRLOks;30c5jgLS6IJTfI75tmqs}vUc zo8SCaN!qf+eYyXgE?Ck;8t^WXk<+&5aq&J=^r}K&`qout8BT z#pU@;3~nc}$c|Wxc}xKxS7#T|s8o~TFqh z5lZ+?eE8~B{N%$QLx;CK2fz+cY(Ybho;-=0{vcW?)E$7pgQxGt!K24f00+%_02zQ< zu?aXXH&U2>b_$R&8UhenU@;dbC*VwgBmA*~2lM<~J9w98AOip~8TfhKs75VQiOI$D z$d(L827GO`09SzD6b=sUK>HRcE99(vK8r=~6kr3eFgHBI-?PY~$s|eu2fes!=qJA} z#e4!7diN>x-vbcl6WCs`qs2BfdUYMsv-8*hFjk{}6j@{e>ze({*SAt7>a7?Hk8}>JcvAFp0OvUi)XglQN9`)#LqpD7tkDw9jl8o#%UP-I_fI` z<&66>hgAX4Vi7vVRs^tZWYToP#gd(14Y|SI|#Y z`Eja88=16lo8-C%UseM z1cK~WzGe$a&I{zH5i7+S_e2Ix6>fT50jhd+m&obW)L!t+4*8razQgww=)yD*L);6< zH6tE094pr<+}r4<6f*99@=q|Fj0PH&0luk)8gj>We0Oy$j3BYzgj=y>@*sw4nUry2=@OZ^-`?LR5B{IzDn;dIAT@9m@kaE>*NGzYnc4ae840>}WjJ4zHGO2%B1L=|?P5oRCC_c75c_NPP6MRr7}geP za}E|6^N91Q0bLjownFaK?m#>L?n3mliC=8Fr^VGYr+dJDf8Aey@eAy%tNp+Ic{unl zd;Pq7W&{UcytF|2fj43Bf1UxodGDL+&F9~I_N~9S3x&e%=Re{ zsE1o?JeomlV9yoG_Oit z)OKEZl!C;QCN6S;N?GQ{kVgp`R#rwsq1|(5*L9#rkW2 z)$z%ByuLn5N{?;S%;#%&w_}H|sv&tO1qopBd_my`rN4wSwud5gKI)-_Y+{IFQU^FJ z7+?Q(5ZeF|!xWWEw>;wqC(on3&c^`&5N$tpQPeUh+>dvj#@=BSV5Q+=5qbL!qd@jh zT5fL7BEuS-Urtb>dSON6X?B_N3+sjw@|kNCw;q3Ev6b2kjM2(Vd3r*oI%xlGENQ4Fh? z3`WVjYdg6y`>_YeYqFOXI)qYnimu=t8rS;d`&YcrNRCU^Mj*Mn(@B;4&2P7j zp&oSbM2a*?K!kf;-P{5ua!Jv3-L;k!p<|;ZrYPf9UiNjvku|RPygmTUoK?NYRh0KF z09hVJw%Wgy?LT|=B1HrI+PA(Ddyn5m>4vncg&0129<>Uf3E-KB&I|2s%tjY6y}XW{ zNAI)K@I5@59RrB-6LaU79~KPmEALsK8V%J=aD=4I5yh{QGE0uMlp}>6dtyqM#aFm(9z@&)g& z#7aX9bh<2LBL`nBxnC@AA_wSN_s(LC%*%Fm0p`f!3Y*C9#nM*H@){t4T**tnj!M)L z7~gOn6l%!J*2!LlXSx;{_G;cch5k2@gC28+$O8h`0>=y>yV6SS3Y!4L!Fn1Q zWPrS6TQ>{mNgfa~z>lBHg;W9Eu=oVP;VIiFT7SULXh_V$6!Q0SmEkphh8CtPfdl^BdpqgmZSz9BQ`%2dvSI{XW*Sf4;cgWVzwq2E3{ya(&|*ZuXExX@GE zeEU;)_HEqzm${N&_b0gdr@#NHoc1?w@Q-gE`sVu=KkW7PYd`DyIq&;h-}%mWei~A6 zf8AgASH#K7SDTgLohZT!6f-?zhBhbn&IYB@(02ej2qN)SYTw2IZ$;?w6lI#0Y7 z;=S`^Wk*E?`~b#K3s_XmgL9?q0li@F*3a8lceGdhQkwI-XBahz!e~ z#~F%SHHF(}lEO5Y4Wo(TE8rgj8W+rAhGNt~sVSl?ZJ}(TD#i_C0w%q&sP8$Of00tHWU^P#b&;_fG5&aNl2BjJxXf*r)^h&byxi<2SNXB}?yp zA)iC(DutEc?QxuH9;iqc?9a>nrgv?c%$r^>H_`5Pz!LK?MA$kAd7haHF!BBj3Z-j4 z)3}4eZjQRjwKS-svQR$9kMTW4~?N8})j(F-Ez!MO=rmT9{3bHVhCi0jti_oXrYg zr`>3?Mi=pw_rH`B;P3z7<2XG(Pq~@{K+@&)c|3XNDE``C`wjND6#a{HHq9vKN^I?J zC!^F9g}d8eOz%EQ1rW{8HKgA?)KD|9*qLN8=YxP84M@$p#RUO%fO)-D=AmwNy6_-; z!CJE6sapH1s|#rQHr8|Yp7HLoP7n5LanNl=x7o6(++2!zzJv3*v5}OkH2?$!T z{uWykxWw=p;uh+!V?KHndB#wv)BzBd6B|YL>I$%M85u)t+4te~No-7USn!GQMPxz# zIl$U_12}^QEMm3N=(V}4r?I;HG)C}QvvC+p!0!6|1Y)U+9{}e2 z@WCx>4ZxY)#C$V`#w$^Pb{4nCQ3R8(*@yM;0vR=niXazoZ3uj3I*OHPG@WHwlaCv= zH&RKZ8w5qVyBj4WrMsm=YSaJ$Wu$;K43Lt+fRVxo=`QJRq(*nV{QmFze%`T9JC5hM zci-oAUfhuPFy(ESJ#nx=|1(3RQg@uIK|Pt5aESlQi!b%3-FBs2;2<cW*ij~2)7(6-rLB(y9*i}p5z>l)K7`D(xTx9u4)3TK4C^ODg2SZWm z8f;S6-A;+o5{+gY-GLkNNT}hgA1|mvdA>epK^;FmLw?U9v?fa|4Um;2PB18?7 z?88W``g=dghHnQYicL%3<{J}boQA)B9OOsnI<5Q*FprBLk%B0Hv=L-z>c1B3Q!}`g z@EYhjpLD?yZH@Ga*${K^u>yq9N%&E~&FOl+OR9NO-GGg!`ot*Alo(?Zxpw&<_={_e^(N6d37xG5tfGpZOtv!rdNMOngk`x6(GF$QLy4|-n)I8avdxB3%S`H ztSKxyv#PCG{ObB=s8>A)9d4)xi9jbDHQ8`7w;G1MAcEWfv`Cv=N2kkj%Bp@B_)F(c zar(^V5UtcpRr4*G2iP8j@D2gEF<-f9Ex5ZwNj+Xafg*?871JZ;&UVDf@7pp+Q)|16 zRhq+832rE(S3O;af49*o5@XtjXVj(P-c)FE4EmbqQvgPO(^IG2|i%G^tmK(djBiwa&USjC?;!Ty{SkeImLi(GrS$2P@mcARcg{L-) z>eadUWb{qk)!Z@wje0Dq3fbVLcuqD?=tpvGM$ht9`Erb2LE@hT>D#Lbk(qhbr4iNn z*1XU;>HqbrUz=Lq^uE)Fh$DXUX z>0thcsK?cick5%Pzfz4lRLN}@Do>uv*mTY{!a)O=QIz__`ds>2}QJRIGp9lQ&it#prW!Y4zKnr#Kg>X0|PK3v~V3fsO5PcSFKs z6x$IVBy;nz+3%bPx)_6vO*np!71<%Y=YiYsLI&mP@)p``5Z|UPX~EEjZ-E2*K>N&f z7`}FH-{Wyc0xFx$Dg9z44#5tHm#5>ivX0J|G>$DWXk-t3sxl+YHX4OAIeeMpD2PIH zBeb5@hi+#SOa5KQ$)-{nbnL=h=ewJHhWGD1mGF=Zx22o2tm3fp6%nnJ5zC`Xn?;0& zl+6K~_XRVz`?nI5_u69l;!MD$>_YIF#M66YPitgk?L>5M%mHmdNedfhXyJiX!iESb zgslLi;2!b%sSE1>Q9!H^=0&3cnjRH+@6DdB>n9sSz(!eOc!*u{e5SqSZ%aQZQBNWpJXrl=_LHF@(Z=k9I|M<0kka3=t{^4ll zJxM&B!d91kRho%%QQZ&)N^X>Mu&AnR&ao3(N80sK$`LT}aP8E_J|ZQ8u@6K`d_}yW z;35_6-C<=3p2i9klK7@>EBEER}eXbJLQc|$$=xT$}*Z!<)U+OB#^hfh| zF32C?OuKSg$&$hr-c%z(rfMS5O(`cHKE8LAIhdVqUl2%=lt1!ND7O&2nC`XYlCI$y zkYf*I_VVt#OSFs(=`gPg8z31)4iHj%=J1Z0B43qO$q3t+P^phvNnRLZyrk8JfW6@%9CF%N>)8d zKZuoZTAfXTqtn?2+d!7wZ@)kmV$F<tZE^4a&ZEW7xFFbtRYE%&dAHhSunW zk#nYjQn8BioKtKz`({}KBh;cIx0;W?-vijCgt48Ppm9M*gL zFch-B9E}ROQPwiISvwj_5(zn%z&Y0zV9zc=x%FtYT%vb>QL}C}54?H*q(XIS2)-OJ zU%MPxyE|bdARu@G2d-%L4owzSjnxPuvlO!mpX#M$aaN^4S0a6!xK2+n#7}`LdSu|s z<)^7Zblvs4$I;}#=~XQ}h}IvB2b`fkKO4Jz)E`dGytCJgKds55S^bkY+!vh?@ z=UpKW=K~E5@Vw*4q3zbC|8_B5=R|F;&uYp`>{x9111ivEQUU0=iH2A9NzMB*3dszu zx(erNJB^yML^frbhF9JBj=nA?o~-qn32zO^)h1Oo(*Q!;a5(TG0;BCL3umtUwX<3F z{XAwl-Cf*(*@2!&2w;V0`R?it@6E7@LrR?b!WouF1d*>ex=ks|Yd3eS7lHcwy?Vw= z#$BA@a`tqKLMrhov(x|^Tu7{@0y8LFlZOhBOQVv#QtUe)KTq$n7)jg;D4%jPYNGbO~kp%6Zz$r z=~m+D=QXbil_k7L@?DB04Y_@`i8?>_h-r)x?JpuwGt}@Rh-GO2zMg0DcM1@`5%$GO zIrgNXE&E%5k-57}#;2zxN$SHLj_^>{1jW}~ z-Xs%;7ec#cTpy)=wCvVu8LAOhqY=x^bxoZnPVUh|t z$UjYqrEY^OE?xL-t@mi?NImXNb0<~x9%8T!AJ~c4H5s$^w{ZdLF3KvGb$0Gl&F{6F zFCWB@+oxM;lr`uS@hdMMnl#q_6)0CdEh~l`F*7)ogj!?l%81NCkDmm9&73D9GO5}eG_fdkkV)Wa+YXe0ooVm!>O%k6n-yA9fI4XZ#DD*WRd%+kbU^lus%0H zV4?(Cvn`h0OSu$s!uK&*2-ai-l;N)ntj8*me~Cf|;clf7TFtda`(t4SKRy*L186E3 z2^sWwHfBd)ipP3)!*waU*=cdm3AzCE9gZ+v&j%N=6}m!$J$00MwG@mPTA5tlmO0Ri z=Q_L0QQa#*K1KPC2bHb(t?EYxz-5n%0~nnY%omq@PQ_pUo{piP0)Z^k{TMKGqu|TU zcN#osCJ8B=qWy%hB)#Sb>~i2t23=U-Jd233AI;Pf0MFs`y<(z&#dLb4+pQN$IRyza zJ$_&uS+LoUZTU(QP!qW%RM?~!nV`Sn)TImM?-Ap8D+yq`9iXqqM0QKy-td05UpE_x z1YFOTpjQ_kfpWZ6vPn+TS$L-MBLUzEDxRze@@hcw`7_q;Ap9l`zQQkem1~zcEnqjV zMym}0hH7TY(>c{5EY5`X6q4i0FTSv;9A16@=dp1WNqK)9uHSf7J^Hs_A2lzK$i!rs za$#GZUz;Q|^8b##?iD;N`br4dRd0}OoDQE_DOE`cvUP{0Cvx{Y77$M9T+q{zDA*_1 zQf{p2DkirYZ%oh-^rQnWvu9%P!E-HV{=rpxU$Hc7OYSQ6E3=DIBruYmG3-PjAohLc zWLT3E5@2q@LnB`Wc$H*lK(DN1`$au!sAr6tFkdH%92C@cWI9CLez$rNe3n7Joo zo#0uz^lf`>>LD0*wf}GLRM)H1%ae~zi8O}|5!W?Hw3JhHDi<-&4S{n>s%}zlNn)`W zfB7qQRCg~xzQ}K|Ugcyl{{4P_zT8f19j}W1!cBWX8}fsUzgG;`g%NVwdkS>YMH3+m zV6x#A$ZPlfoHWceAu=dgZ~fK9kb0C{{-i;r8&Cgl81$n}jLS()pVMDNMIUI0&VP%K ze7oYZrE^(=J~>axrJ;To@9{|bk^4bMa{toofAHRb`SQa>{o~&9{o-;ETHSr&&%j3x ziHG7p>#bKkxwevix6I~u^U|oBJ7fst{Zdr-f2;BB>At=7*fB1U*Wg~JTBK!f=~53X zbRfYK!tiDUQzf1bp9dpKD2j)}b|+gU$Kx2yr#(G{N7}c;($$htn#qCtUzhy9-@lRH zUX9E>$<6eNvzu=uW$N!Ll&7<-Pru_U(+qX9wz`!~#!d_d6C|jdf+oxP5mZZKCsB9)& z=cq?%Vfi`JA1GHDLQ+ShRh=gGo+8V;jI19Bfxd4@cnV%-WpeIfOzp73x)?)cb$>Ky z&7v!mTp6UBy1eW7x;!LGg7LO(Kx|HEXsH7;dFOs{aYtb8z2O1y#H|7jNI{zj)V(&5 z)u7#D1yAU>DthC;Y%&h;I5~Oks*FfGqA|V>++4g|TOW~3$zqNUHg+cr+Y`F}hK-lM(=E z>rv@kYW?VhP9uOv*}eSXlxiU+>DW>zyWp?UsLP-k^skC4J`=`NY5euNGT|S`{;=KW z{ctTj(3;Sxi3)8)s2Sl5BtGOUTqNWkuT3Z>3j4O|^6cJ0SKPyE+}?9kq`$5^qJn{l zr)<1D-=)ysxO!H~CD)%SyNX8bd#K%TLj~Mbn=`b}FXN(W8NFFoXra7y| zgT0&35~z8%lr^kLYt*5wSrNZWZ5)gU6^DL%R17 z{v+Uw@Wr%j8YcD?Lok$;=;No@_rm~j(hEkeZr}2?>LczIR(&*g^lI(N`#u`L7^VbZ zFY3r5iqKKPX7RMk(T0G~3g03FF`T3^bk22bveh$#Av-HrgGIaH)hhw^6DmC3umW1> z{a~@zjuV6aBm&5F+sSsRhu<G z{-$wBTzb>+$t29#W)j>n;MM0|lJz;q*6)CfYH@a6kxOlT?d&yWcD=~5>x~avV}X-+ zDV|$EZ$604-KeTM2-z;g(1Sw>5EDp(cc(S7-I}O6b?dSXl?a#pn=RseK0NK?T**MM z`-4#!N{c&3`G%RHJ^|LnM_ZsJ7v3(ojrMt@K_^kh0c!Dew5SdAi_Bryj^4mn_*D8K z`*G*;5g~mQbqW5TO;47b;>PXt;L-bXp8N5}-l&BY{BdcyMGAZ2-_6>H+vCG_!-Ly@ zi|mKJk&u@E1ku-f(su{T4?)1jlw6lRAvBmdPzC=yC%^g4C;@bvL@z+DRqN$AJGeUf zgpo(S;Jr#DxTj??O#IOm^_kF776M(AQ;Y08vokL3Hy2TpK3VX{G0e8R?j*wR!i?c)Oz#BD&q<@H z44BDS(2NQMmbwm_G(_LRneL%C% z1py%cz;8&ZSw!laSMthti?kq>mpCkgPnitt70KW`5z;>sUY%r}O&YDqH@LZcxok51 zYpN)zAgaCRC|OotDUeCU*&p+kxa@M5?!e4H6M{c<0iI+G-|27$|B)p);flZE`{ik% zxHx_Ops&gj16FGPExPTCbFuh9S(RX)1)7b0U76Zgi_y)5FQ4?&KnNI5CBX&fhGzO_ z-1<0{*$w}D4H6DK2aO%nt+mVFx>M5y={w14%)Nkm@Kbb_O}~A90a&tOzOj!9pyQ}75ov8&~!@ZCDGH)%_y=3|%)js@Z&!Aa25mnxnu zCTchrUB|Z0N@XPZO&AQjNCEZLO$51zfBP+dAeJuGB`@xR?rTr%^YR_JQ?YW2U)84armcT zwajH}=D^jX^|^`|1B6s;LGmlM@+c7uN4R_H!SaOVcl^0B*>h@{)}jLEd_DLAsVh6* z;~R#*jj6_o=q2`AJE1b8yej^_Zyh7_)VR&MzTZ1bg5GX9wM`44W9=8^JEt3OLF-A4 z3`u}6*tLnwR0JX#E(zqdd=R(;N$uv>in9jUw0JsyvY zyD56k-Z0GS_lwwMz4N4Zo&mG*INO7A>+v<{wBAO>9s!{K8%kQ;ZP>}e-_d^$B-&!J zl5>J5OBdMBpW&87WpRSmokk5JPd|p+qZ{$asW7-G111vp=UtuZ3%$`zaED9gPa!<{ zd4soe<#FjwgF#)QDH`iG9u4)|O{})oHm5#=fTO^kK?n*WAi?j5w6NBzKC_Kw;|HNU(0 zWn{~<{`-4%k+EFw>!o_B$Df)kce&F4e=YqeGdldr&32(GrC1AE!8QEddog+!bYqkE zw<5MfACR*Np5ARy3Q&FW+;WL#xo9v0crY|Zk`;sSYKbdxH=MQX%qs4k&o8`z-E8a^ z`sA87G@&U=WbH0!#4O>F62Bw{i%%(@&0Pn)F^^ew&LSx*2=BNmhX?bw+^l%$YH@LJ z*zrmPP#18$mPuDm%vK*9svnWC=&7`oX+K?`KE69kyIk}iP{-yOJfd;u807~1@D&&D zJ9Sabr#>`Q_*9ksJ#QkcRw_CrXNQCM#lq9)b*O#{mz5w)6fDuqu>*nvMHVa+fPZKv z3`y3gG+T_RJoPRKm?8aW!yi~`n_IQO8F9I4>9tQlJbhb{-5 zOjGU6`&@vlqm^g2rAFK2IX@hH-vH{i6n!8zGap?A@$UU z7f2)`6AWE_jI7@Vnkgw5jK2S8q>%SHB!(HxqWN(0+@y>|mHR?W<0S>`TL5cXJ$^1# zi_=^-`(v)1TCasQ{luSodxBp`-xM#$ zr{)Gyz3nOX7;Adp-*S#mw(jAqxqB`$cQGm#Q6%DkQO3uNOX-uLP6BH2D*_k&0U2Yk z<7(Jy{yE)Or+lH0$v{g>S9B~X9-MRKoho|Q-9+Enp7hqk4HC z{jO+UvR@w^JgCCYIZnu=t#kK47YXeBw6S)XR!O%2DM}|Udv=Z-Y=Hw?` zitVDRp`f?CK@ZQ%dQi4D1}KSsb%)tekVB0&iuu|z$Ulb>ZH8wDiRM@TRF09rOOn}T z(ERXR21eujqIxLo31y*9$6ujpseQo|#$1TwKvGLG_X`JRufAB;e0-eA22DfVm)R`L z14@KoZh7|%{d?NG-&!p2Ft3({yi|9X#VNb*y2^S@W3BwIC8GJkg4Gt!83yA5e4&&e zLk&2EIWyJKoe6Yc+mP(a6=c6NHXm}&7~PvfV&EhMh(-#*zP_vu^grF zA)e=qa`Z(B;Yx1ongsFvE2<9ir-9BL&SQ6|?i14iy$?+oc>F{ST(PAu(n@VEbY7D$8dTrR4< z9jRsA@t(W3P$0%U{N&<7s99T$ZwJq?s9hT_M*Plx=Wxl##LSdA{Lr~O3%I#=ZCXr* zZs}=j!|z4oF)Z+V$ibLBOpt9_C9APMp;}Qa>IJYGopQoaINyl4Z{iKb3Wbrp5Q&$W5xbDDvdRDO1Bw4gG04)P?*jav0oLkLD|R z65@{f)cW7}J9EygkVF5d@;krq=!zS>_ZfM;h;lX0@8!!~_0gELr&v9J9s&*N9+&&gn&2FBg*d9!3R zh!K!uN5r3!{DS(%PFbYF>ewFJjv1QN+1Cs&Hn2Gi1qi@YY(q1Od{#u)%rYVEC@7Ep}~`&Q0kPYvu1L)I+#UX0zPP9YVOrtmg0C42fh3m`0i{L zBY3DsH&2BVc@=;(v*bScCyEL@7#LH&zTGH@*ZhNZyc#9_zP}ndB>iyIK`|6Crr=)& zH3>RNicfb6<-O2(0=vgCry66|99dd06G4&ybc+r&*CJLmEg@5B($VKD3k$vhm}N6K z60tD%xX1!(DefaynYSQf%+KTTua@iVR087jQC>gcB$hytPl86QYb*PAuSq{481EmJ zJ~UsREsBVV$&_*xdI)IUEQj1o`kkF+`#okCM~c7Z{_8FljTK$uw0k|ehp*{5qHT)V zQ`PDVUK3N594c&=0F*}No1wwr0PiXFoxG!*W+{kMPAkoDlAN>I_2=p^>B#*_43Om@ zOc5~~i}a;auA2DD(N>cL?>s1ux!)(kycc8R1PJeGx!EhLPs+<~?`kxH8NE2~NNZz{BVSk=a0nmzLY# z{PBh8=eHlLcSx;SYj;1noB#^1tzIDd-dH!s8F~;$;6q>fe=h^tB)-`^(2Mrb(sQtR zDPz<~MI@&Oth@oZA4>AmyDyXANUpq>`W(d0ZY(~Frr@xnK$Y#MWYGmy!aWD_q^M17_DM80Q>-{U$UoHPs$$UgRiqU zy7T>;iH;^d)XBMrs?GMe(u9^Wt&Cyg=Fgj{qF#IbUP}x20^D4H0|c=4L7eg#%%D{v zu6#zhaefZ1Z1(%eM{Cy{>9#;L>FHTS`m6Cxx#aqb71}ewDLbGfSut29G=$HF%<4CV zGW9HMa8&QpJ5U9(gX+X6BpI(X6U6IT^g^aXb>rJ78ioM@vyRflsYLl;ICPamI5Brx ziRhTTi8M|7r;5W!P-ZJ9vP^q~bQONKjZ=)(vwQpQjp{c}PK2cVP~i=Src6!c;E`ZX;`ZWG?T+mWGvUIpbSeQm&Z10FzYOnWlpzYZ zJ?U)O1K2D7yfVa9ZMOci>y`raidOzArg_lK^%18U^; z_4ZSv>~x4XJ=K54>JU#P=-jb@$Z8(`Ql{QFC|zRTiv%ue)C5>qFl${tzsLHTw~;<= z*SDLpm`wb&cc7U?Zc2e{58X&hbMX0JCxf;7$X6GdkvAYpOMPTl-T5ZD(WR5xs> zf%1e5C88Ehc%?~fNs`_w$6JSc`t~~suLHgMl&Ig#nDnTL65}5t(ZS1#Rrh^m8u{UT z5AEV8o^Caqjyg6!tT(MALE9{RpcF4K$_mGF_^n$7-4Fg`x%SnIL#fkRkeCe7=-ynZ z&EiQQ#NN>RzJ2VK1!iT6se8PdghJ_rDl^5>;-YHw3Q@!dR0Xneh^fBBlp0`}Vk^J) zG4AmO9wgXudr#k4fUP{1Y0_o>80*$`+^5(dQUlIZnJLZ<{QgJ64H!Jp7gI(4C;EuY z)~I0g_g2_n=F@2gUa+2tmn8G78n6F1fo_Ud&@iW;vXtQT{8wk1)nwyw-7nkiB9I38 zX;1LpeKJ$2e$4b)x36ZHDL?7ps?7`i)Km}e_UTDM>z7&aI;a&?&}Gx{v9fgBJmS;= zQK7LMBupnIreb+{kyBqgj^|#blsL)qlgQ<77h%Xz_{L-lds^~SCMJk%dt0B?WgVky zhS4|j&(adwQl3798E2uqx!FQZ+mCef!s3>PdGFI1Hy}fwOe^zvc0fUX#60)QtGV*u zW0Xa<3N(i(Xaye{zL><*y=)PpWb>{`uWc9+jA-YH1Slgv28`-aV}``=xp6gNy(!R` zJ5Y+ws63($dA7RoB(ttxv#=MYG$h-%pW~J+1Z;a&(GG;cNHR#pAXKd zc9FT+xq#7|F$a{A54r8*zV}8y7&#oAjDJqMtmK*ku>=rN3@8zv9(MGeMI~a#06DFt zM6d&w(RdIn2efALLRnc=Bbk4b0)B^@+hWNDHItYMI;l`@r1*T!6sKVHzHt`h`bu{Ca;6a)Ki z8QG9d_0FQzIREbaoD$oNCEA_t=F;^Y@oI&7Bo2>35L>+*ieNkYnMknO=b;t#C;$dl ztj2SAQSv_W?KM=bm@73}|5B&Z95y;`WVBAf#$52RGGN0_{1&lc8#R@d^im=0F00#M zhrQU@lIB{l+4l9zfTCl!q05IAA<8eD!+oJ0v)hz{aTkYrY8X97Rw?!*z#a5q)`=G| z%ly@bM8ykP#KHZ6$iBe(+T9P{_|-%?wV8RzPgry)ZeT)sz4 zlf90Jqb}FGnSIA*Yy%Qv6;J6GR*pwlJMIEYh~d(k;Lp43c5fM$fRa^&@#MO*mC5i;u->5K4`-k zOPs5vHP1o(0N2hkZxR}z%M^Z+pziUp7as=5M}EBJz@;`dH&;f^))js*F}*Cn@IzuO za489oIs7P?U5xgnla7^s=m;SywkPM66L@e7*)xaG-(NL(EVilzG^SPL$DPvP7k6M|#h25`fiOjI)xCHwg3j1b2DePwRXn+kU z%k@~euo8;>6T%i3`IlTP+9}qtAEj`s+I1Y*s<`O4QU?b_h;CQ7`n=xy+M!Bgpv# z^2bqLu}_P7dNK95)CRjn@PCOFd3TY2-() zwGJm6!UNBs=bm2TVo|1TT+t8V*#>l%jD+#!UIQgGhN@O?6`_MIkJ4RXqQa}ItC*VP7 z&fb}I?#)pKY!11Pwx28*cQ_Tjc)|0Q+g_#iEBUs^>6o;N|61)wRxFr0!Khv^YTDYv zn=GAO%D6v*7ER!#K`H|Ra0j%}maQRbE5aMms{>ZSyxPf9_DZ+_{=Ip}RxdUQrQ`*TmV?Zlr*&R6NXJYYhf5_Hx-5!|%a`HO5)J`#)0ofHRsdx6=E5aMp zGF1R~5`zpb^92{B$on)ZPWMWB!>c#avOkz7dmWeo95rqMO=wWl_!3r{I&(KA`NEQ?G!mtn{n+o# z(Hd-uZsl@7$&q^_hB=~mYmz(>>9kZl)_H~#Ywq*HqsIinDgbXjru6dr^RPLg>hD2h zX!8JQ8Q~?AE>No)njvb-#(Y`FTyq=A!a(IALy2N0c%z z-h}lBRi7xic#068Na{G^R~AA^ixt)X=CI3fq-r1oa09uv5pbvzfht2V(bCPh?7u9kiWr@KSZ&W`Ir-nC`d*H!vgYGPNS?^0y~RK2 z?1={i*Yep`_+vhK?&FgzdQ9NiD+}Svavvg9aJBKvr+KF73BHrdq9B+2 za6|42%$+liG-c;!mHq9L0EQ8Sc&r|dd7VXO*E-DI$rbr(MmVM^ny9kykCqUI(0BVk zIP0bOFV;WtPLa5lPkWauw@WpkH9Oi|bKEHY8ou?rWFQqBH>i@yds#^1?URqSLdDZE zU@5)nDeON*FL}#y{w;SQAEv9~;o+Y`qJiAeE3U81IVs23neJe;&`87rI7503y?sBi zi;(alTR)P#PN9~kKd629j`R!mBAr;}P<#cw?VO$U#<6yLnl{G9m`LD!Uf(G4?|j9w zF}@rWI6do_?DD>2f9!Wt%=W%Lo6wj+m+a4cDiylZ+tq*Qc|3~;+y*7Ds-JPWQS1@P zq@hF6Neu1Vt7U?C>K2!yYY%(WpTO@Cr4KB>4=57w*jXz2?d1DiH0(8koygRH6waS- zV!FONGub|q5Xmk4_)Y$~ZF%!7jxEK)4?Jm*A~K92M=0zIzIb1;di;{YxNW#5Q=_C z&1oSvhON_?8-p2;%K_p|3$1B#`F{RSO%3@IOrpAOg4B}qtHqa?9AJ&fu`pyrixQ`-iAH(Odmu60d6J33x zqwU7AaEW_l)`x7)LJZP0V$r1SbE|3Te7vd4&{S^QUjg>m4m|Rj243L+uX48AwdC&!`+6 z2&Il#`OHW4K&tkEO2(#F{PgRm(|s>=OY4C=dlZ1Qw}4%3e83;4FlUHuxn8*LbxRid z&$it3U!0qOGMH*|wbnvqFg18^2(s~Q1UOSZm-9&osNYL!V;6ZpJoj0`zFoi}0@*i` zs9N9K#0Oyl)cqD78K|#knl6D1F-n`fo^2WwD$wPWJ52?IGcM$GS+E>~klh=|xoUT3{J3>t)RIxFkC`6* z@?ZA3cBmFMoqFt=b&?86I+;n`4`r1o!et>B3}(L-dZrfpBd4~%ht;}TCvuUs0$!0n z=1>Hp4~UOn$!wZ>`n^x;s4=IMnaNdSXJ*A@2rd&t`EzPlP=Hgaz1~*FTgx)x0xDq~KNm6iV=+3}p*;D(%v@loh7_;x#a;sL9xH3;cHF~7Y0uwuTk=JiMl{eK43h7a)? zLSa4aJIq`oAFRG=3+AG!h>YS!P76}AgtDX65LSQ)?(-tYShGg{Ifkj$!1?idZcMsAgqVNftPD>>~5QCXV1uv3=p{5oslc}P zWw~~41;kj~bL$4P#n1?(BfHq9(Sn(Iw_+=KT|S~KtGZ{+bxUuTR#;QZ z>wYSsB3L@$;pBvk%P%P8k|Dy}?2-$3X8%iPOFzUesrar;s9$yMK-Dt$%d zG;ejUe~d&uBvh5)Raj#lvG9>WFnC?0a^tyFit_d&56yuj7)w+Xum^S)EVj4s%9n&i z01CF!SInVmTfZ%`S_puzBZlXIWEP&*uoGBkGfM1K5hJxFEpB zpobJyMRfM^wko7D^+eauri~toW^01Fd8$qLTuqCWLG3xBsukLzjx8brN|QJbWTPb0 z3+z5bSAEK@X7D0kM}z;|OUjr?Z*|C$T;?jYEUciWwY zv38VzYs1cK%GV8X*F%aMpoOGVOV())w?(2-@;GT=Ul!6-QKLBp1NyMLAQJMCYK-o zHzk+vEk9m9+%HcTfFR@IzmdEZSoru63bxVm&1TAZn|@qdsAf{WavX?-9O3VX1c|O~ zmgjW4Tg-2{#lha8)vEz#4#qA%eLVSx5{uxghq>N?vqa$FyS1`16bO~xo@YN>N9 zcPLu$M4ok|L1`RHHI@uW6_agJ`>VE*ngt?0-weJG*>`mD^m=YFWM^^$3-K6J@i8M5fZ>6YvAhMM94 z)YIwVB*7kMuzVv^{<#T&1RtFn3J5l%An01oU3}|Z@qwI2pO-KMZ?uMy2b}rOP+{<% z2YdNAH`g4XN8Wd8?a;V?ify3;`DmTHfb4=GL4A*C> zw4-iw#cy+e&MBKpRx?o9!jA7igbG4<9R0ebr1=cP`s}}(8^%J>g|Gu}t zG$&Qv2YLod(sxsVTUtcpx+b4{u>yYirs1{GH8!{=>vYQGb>3s!?@zp`(f-i5Kuvse z8{`+~Ju4b*)zsHAlUI;%;gDjiTxY_g#a2k9{*%SQz^EU9g=v>STunzud!GL!21SaC znr_E+V z|M;BRP?3|FuG)NxI4ejiCfcU5`Wja-;QNRp$zKBpQ?hwgqhfi6PrDHR*;3B8xmpi9 zLG|N}N&>bS&4s}Bz$41$io`K7*8ZFKuEg{-G_TW7SO1k&-gf)c6O#^i_MuTa;u8;7 z$kO{GWVR55k^A)K%^wz3V2|Vf4mw4+3Qc&il5h|E8hb&>BG&4}nmGgkM;}5F1lMCO^*WN7 zdwcxDI2&XEP!Ht%?9`_?2~H0mZjlauu65(eA}SyDtn|}2_B@`iy{)zCnzjxpPqn$- z6?J6ATw#e_CE)?1|H+|Svs8No+U`^J6d&+gKIB}~!*em4mzysXa@h!9DMY6Tq>b zB}?x;IYsx3I=F&*VQzuIz2jVq-;w}g^b2PVJvg#Gpd)}c{LV+@v0o`{)UUp%yq}7bmn(kff3qp=NazxwnZ1flG=XT#Xf#G4Q>p4{4;HalEjv+A0# zj?-{aKL>EZQ>hz6|JZ78eBdH+0@#N0ak@#%E-@md{^o|3A?Z~r*A&R$I*&u353+v0W zzTmQ|`1-hd^dlQ_ z*V*3Sn5;4gn7`dW-Dj64HTaWdd*XSoRMG_n5MhfPQyvX%dFNrUee!6c8Lu;2)yTiX zv5|TmF}$~#gA%J(;g)xs;7n^6_Pu-x!Zwg@$Bzv76@dGTQLb(+PWi2{&^@O;pb^I* z9kn!NLqKd|W=l5!4P>S~k?C6J2*L_>Jdsk&VkG%hvq}(6{K4|ck50Frk-Nna`Dtz$ zn)%mz>6A|LWp(I!@=kFghjU)y$e|*{hck5Om4lRk2cEILbN!$Urlfv3a^YePPLHsm zm8jnpRUp&ol(%d6c$tTV?-gi`((Od2lGR$*29LOu$E6G3XPy8jn1jQ=?w9yi*=Hnb ze8CYub6iTRhz=5=Z}Sy#IOA1AN%Qw#jf}iE!kMYt{+NORLfbZ8ep%&_Hlt31MhUnl ztDpOg^o54J){N+>4a;cd^(zK!DO%TjD-#te_z@F^Hu)(_dse*6Tzf=NRx#wEfoVPb$K>e-^`MIlQGkl;@^TLwtN9lS;<|@6~NiX!T25EfUvbLld zNfGEF9{l`B_kVIW9g=0^KS;nvINc`vwt3|+DmN#}skJ28f^D$4x{izc?B^8H@qqu1 zF}pcfiibJHu~A?43f36gz$lCkJz6#Q(S<21TM6nfn>iBIsRit77>&Za2 zXiho&llJ?#*W{}I! zK>o|;;@z|s&2+xxPGjQGySMnO`G~>6j7HF~oa|5a88jL``rW!^BqKlM=2v54 z-X?4&g}9hTODNSWwz-x3A~u?mu}x&9-vfOIChYmeZn?}d)v9ZZQ8#)@fof4JnyG&3 zLmKEy6$zILOdHp*3v=qd=+?ibYxfqjWi=~5;>@b=ErsLRnvFzmOP<;!wKoMx$bKg; zzXNaJlwzX~lP3?6-N8OL5TgHBk$YI0XGlq~8O^x_e#~>(cNdp#CMJ8A$ESh3^`}SZ zub`9v;&Q?F|L2um?Y{614i={z!jN^aVsu7wcuZ#(^wGenJh#uPt)Df$f;$5yDBv;B zi@#Tvx|d7&S~dKP!A!ilVdSPxdETj5_)e*6M4V#yq1P!b7^D|eNbDhgQYY9J=M805 z6w#ZZP$+5|;BOPrA<%ob*zn!Qn9lt9msbXO>mGOYi`=bBUKcvyA*y%;yZk~P)VXXY z+oGKyydi0Ick_=KY?6yiZE&`BtwF)xqNzkxF{!3uG%ZwU>>%UbPQJCm+^qfy>9d~@ zdBJbi_&Z{9USz@QJOLcZ~U{OQl1LRp;hDRl--RC_J+u6P)8Tiai> zMH5WAKYXPcIH=GqgRBw3c+HQ-bDl@kf+*%0O^}MmF359*%;Es@W}8g7{Jw;ohKgrm zWU_adQLtIAk~)mfx@A}O=w}cf%>*3C3JQIb=R#-m#yL=*h~1xd+xXT9n$BH>ghzQb{ftDRt^!v&@rQ`P@x39d-PG zis0vMaY<;Kx-gcWuy8_|9KPrFF5vh&0ox29c!-fw^m{?rng8{oO}ud2s;{jmBcRW@ z>INrRFGG}!F@1fy_q7K;n-=$o-d|MpnzWa#`#!C^os(0Mhs%J7+PcaWDL?#i;jA#9 zJYwCEFL|iD=eyyGn)GB#(Bu3f2^IcleHhc17e0DEu?d(`3&8yQt{(+f7Xh|cvAu!Q z9{K}Rc9X+v+yNUnFkoSvN;@eo0I~gD=#Z!;9V!-!7VvsLjj1xAFkO0( zrn3fqbimLVh44by9C+6*3+rFl!c$v4`k)b`3~~>``A6GYlLp=Q8Yt9O-@}Ii$~sdc z{|bj32GXTxDw2~M2Z=8YkVwZup>ll00*{Py6-gT4EB!6Rx{BFlxGDiB_J-f1@aR=l zdcFAVfr{lJSR2qV3@an1&N~;47pdsDKdQ#3O8>vH26x&4(F3WLYrB zZwv!ttAfR*g0=C$q?qzSmLAuzd)7(+q^wMk>2Cu6FVy8U4m$L?s8whIIXNq|$z;Or z%*gPV9lYhPC?eC~K3(9HJ^rOpSp=N4&iYkig!VqOMJDz`qq7bj^dVN-fO{$G$H30mFp}y{!pbSy6t1lt*plQY zhMm!uy~8HLNwD2tP0Cn`!szEWY*}bUk%ktvgB;K}qRWb;gmxL?C4p$B&Pf~1!0-E#2EX0erNha8)O9n#x<>MJEWXxBb}M{@2}+kVhN znUf=3i=6mMI(X{vHz|mVO-@p)#exgLnfnSBcjncVj2EKUg$BxxYkWN{YOz$d zydoNP4Z!=#Y|l6WcyIK&SW!z$3uzYk%54Eg<(f?UCU$A`H1}_aWEj4O^6lw}Yt$pESewpIGyst`RNk_q#UT!JGCZSmDpR7yqLL z*L}J}JgvUCWSgp&ImnL)6C?T}k(^$v@m1KE6nwxBR)n^lSu;Ogsg5_ul$8N*#s_8( zU4X3==)ZDtiMaiz4&$^(3<`bXcNxbS8ItS38Xi8K!Hkm3w8VtSeI@*Me(zCPUh15+ z=hUgA=3{8p^NMcvT}ggneui5)i?2r@d|di3Pz+QE6>w3Qd1X_E_!WOa8Z=~DTU+CF z%jj3A1FOL@A$z$T?5bPIGie%V>6O4yW+wWO_t9h0DQp)hF|&$}$n^%5N(oKK!hn?) zf{nQg$GQ&tFwe4d6>#EnDUtd_`RLOCMg=+vNi#!fI&kMI!6|!O?piVD10@LU!KUG}nK* z`JL$KRu&sewcO}2hU~n zErA9xTr{hb;ZBghb#Vwmggq8%#Yj?dGjE??3f}2LJ{;@1<>d49zN{4^2jk3brMpe; z{-BTaSWh<^U8{Y1H5w~LM@$F6IS^}^01Mr<=*G?tN0$*KoO=oA(9J;;_fj=@E{3lG z&Ja;z3E=N@-EOjc9GO18mr9IrA68avG9)7}^<7-oNj^iyf{ls&ee3EcNrhI7ZSTybn5 zXMXg)C@iN(DgO4#!|!W2J6hYZBUp#-W?2BVkPsW2=FFt^rLO}6uwle~Qkmlr#S@D$ zT`xT`W$qCuqQl>i>Sc=-27l6c02rsep_+(%cu4Wxp|$(?@S zLm5*Kxi-NU%D^(7Fm|7KIS5gGX5dJ#;mnw>nUwJI0V=oEK-XR(R~ah9Nt0U8*L$n) z9rDs>=L#7*MjyV7dgQu@-&tFN#UYu2tFeRQBz}8F=Z{PVm}L2{A=5vN{JnG-KK8!V zzm_L!HPZXV%|>)$@wmxHRaBUMzA>?haCykIjCYe2axl=0;5sb0rl@W1LCN5=I;pxa zD-g#00wUt&CUtF!6K(4fO2C7(e6k%(?4-hRwotnZi-^V0RMn3YtH3GW-P*B%7U^%W zDp?rObo=55b8L@g4@m<&#Hy=ZG^Yh-;{8rLSLI?EYE6I2T{>8f>(~h76ym3Hc1()*XFb6@W$CiCcS1!69K zm$oroT_rgd0+EL}ln<_E=uDaRiLPqH0^Ze#KyMPBi(bf%XE^?`^uPa(+M0iNqB3g_ zI(W|}lUFmRHv*9R7|BOm>fnnz=-oZE{pNnX4L|O`d2l;yXDlr%Wk@vRo!S>vn@Upg z9sla_kOa3?w4NWL_R_e(PrJ8Rf2;v+L<~|PYwI}Coq2qDVreY&)TZKDRKNvLB2U8F zDFc)7E`DEZNAP#invs}tc~n``J{zs<@fpHKe|(d9^BSF(DTRFtGa(-!Wb`XoQ|dEw z5c+;8c1N2rmD!~5C>QnE;XXa#HyW(X9VZEKG2fh?#>Y9_M~Ad5S7bfPm;S+>@>wU@ zF0e{qGlwe2zkj<7gEJbuK0mb&1HCXM9hzLlcA1Ot+x?lcwKyV$vS0WXTO@w;POuTe zrO>v3?{{h!p;#T#@2o5^R)Ws!2GSLN)5%cz_kaQ+#je~G^P=zNTQ%H}#}4;;q&lMU z_m}{C*3UUG#w$N9)H}a2woJ?4U$kc~;5KB5*H{Aq!iEF4XR_xT;1#3arhnAHx7KCE z{`ZjlaqdZW_BS7M+@Iyfq6gdw`^90o3Y`%rcTkc~aR7wEl+z0ib>HT3!dITpTSBWE zP;4F&su9ONzKVe>CPFqx3yn?(R7UHZOu$E(g)ANpHZyigU~+8B%4Rz10C>(4m<9EXq>_fS68|mp@kh zixb%}?w{O)X?dc!s+=R}L0;WUtW`u1JcIF*U_Y@A)M~oFzqZDo{~iFJ8dMc%t3vB( z$3v@dRR#JLEWdD*Oj=%OPTBysP^`KrPiz#t)beQ@xq8d3N0-1now*`uisQPqrmRVq^_$C0>!R_o5*)Hkc_=gphf&6>v5ng9#XT=bRK96&WtW1 zBLWonA#(uD#}*ucRQea@6J2uvz>W9fY64Ln6VG5%5;@E6x6b=k^^?Jg5uW|Gi2x@T z8QxgBcC>eXlY13OR_paYN2t~2vbea5Mkwe;ue>bbMEEDpiq$p@(Th4r%YOYaaAUL} zsPrJXi<_MjvuR^~LRM-p%3Fr8b_w5*Y|Quvw0P&{2zniOuFLtbpUiUe43 z6GOU$ewys`|CWU-B+|y!6+~G~1pBj)fCQN1d=Q1D?F6=2rMg=0X(uq^5jjK@Hq#R&zcjA@rvPW)CPDAhoVN$Y< z@~C~gVXeriDgEqwMk(}`87Ys&iWK&q0KfUYDG$19e7qzwfwO}bz<+8D={E^!&1(a4 zu*vVD$OH?)Lz;H`?AQIZS3i7@LFp-HxiMANN=9)n2-MuQb0f%ew>!Sm>;2QIe=y;y zwaDR-j^pkW?WLFJKsp~IZ9}Swh(CI*%==;`%*GZk?@v?@NYu{cLi7E75ng?@2~RfA z++GWi&R#%X2~rI`q%HhBmch-bYEPrQry^DjxgA!j%$qazbo{*db_HSm-@)2l4nqW; zAfAX95FBy--BC^JMiQt;UHkLoub%kzg72?hG~3TFV8{h@<$t<{NakS|TX8}GWGTqJ zHCj7fg2%;EVBfJ&Yr~_QQe6WLCfh544yV+P9?g`T16v3Z3L{71Z>(|+BAh(llNIKb zh;6HH2G$?%g&D%k#(gDRq|fB5J}{k&H&0H#h=`=|mk$fH^k@2+0Ww49bO5DPdG~+J zBM^0|BovkbjN-8X=}QViG;D8e4NH57zw{4{4JW=L8&t{SKGRZ|4P(zxCpn}oT6B~< zx;wYT9jw$k;@_?zsW8(n_KR}Rls}$obOvN~{BvCmwTG8g890mFzpbH+<0R45Dg%Ye zXx0!#7g6;CFIp*8w&*3tK6tb0l!Nm`1*JPT0rZlWQHcHUx>sOa*-|hoJ-$3u?H?-+ z6e>T?N)}UzGcF4`Z52odx?trPyG%p@aJ~R}V^foM*G} zqhNSH@~Qe7Ymkj$%j-N{9dXfx7=A2jkwi(XimVQ?-5`frPHyS&DGE0XhPy{_EYN4S zgvaqXYikj8kaizsIE6)_?Aq5(4Y+rlacL=757P%g4qHPBH8Z8Ktvr*>@TSr+i;q)< z_Wc^#msc08^6Vj3Zt=eO@6R#=XL+=lF%3}dSJY06zd;|b^h(^r@{|~h{C-aWX8~NM zCMwhFBM496)SCgVe#pj}%`U)xH_If)q2G^0%j8@!_qu>amU0Z>@RRc^YUkX% z&_`9Dyy)5_JPX?}&si4C4LwPvE3^P!q}EImtie%?KJ|2W#wAYKm)>Vqtn2dVdJ~vT z@9AmXZKG(QzX&&eu3S)uA{hRm0@VfZR|V6|1@#-uoZSs3OGq|zj@2{LW%Kro46t~< zEBc+}ZNv4HLkn_MRgq8|!18=$7i=HWJgE!UC%s*jFDvx34gkeCK*aN{o$>}Q$k$B% zc^(Jev7WB)|d$uN%uZ;S12X=MF8!AdI73-J)5j>DTkMfu)M1~@DGVG3%P}-uQ z&UPYgz(`v>D`_@z?K~uZYk1YDw^;qA1Am>ipEbaS{@F^rDYGHk#|{_&Gt{Vk@?ty< zja91O&#SnE+0D7h(vfJ+e~+5@^swBU{MMdETfzhiFiSL=v)O}{_4zHJhS^m5et-Nu zKm4kZ_#?&IM(b#kV<7gE-oV{1Vde)sEnoh87VMkR6z@U+B}Zc{0FFJHbfB`mH;imK zo+*|K&TSwbM-8IDrqv7*cKgg1*OYrU0$`|+4?@#(uKON%-MSVJ+Hg$`+p}3|?-yi& zG;2sWqVmtUFWb7~Z%>g*iuoV+NShB$rTefd6)tdf}XHtGJa{mLr&SGwu zU_0nVKJOI^cy8!rT$*LzuIgRve{yZM-`ApIyW0{8^R6JDZ$aKxV|a-k5BeI&Ix9Gk z10J3HYS1u5usg(qCVZ!28s<6jXIu^NVMOCXO5|0{cYVH&(sbAPZ$EfPp$YPkWEr9P z3d%gWarnqe%anH`iNW8l?$!O*YGJa2`jbE4F|W5%0-xnsf1X4lS@ND7^0a#wvvM=x z|1uVSxdDg&f3b>D@ZQN&=ek;J5CDNXx$d<($DW2F9i*fRZEJ-z)Bm~`{d%?^L2~IWZFwDR8~4^j1ileodD1*`RTJ) zT)i{>eW#oNlM4w1Kct6nN4MB1^xIXxP2TSeDyv+!g%!ZYcRyYL9I5?{1sRea8l%&d zq8KO?>9{!3rau5BFyW;=Nc-pqh7*uVOZ@5_=v{7-G5bahOsbqb)^Q&Ooa z9X)XlaA6y?Xr8@t33S+htgPA0VUB0M3pMIzW6Rf)Ci8rppybF;Urw7>oCr)AK)mft zzQZ;#zWTOzezrAacY;$uBG`^e2C2K4FS2?!kOe-_5nNj{s{-Kc`V+em2eXtkHSZ@r z&O1y9gUJ0y{Ola3l&Z|AXL&b{>32oszw+Y$DTnP^fW!|1#~swF*43k{>YegjQ{6QA zNG$^nluY9L`y(OCPK1WopLZ4oW>^PZ-F?Yg=5@J1mzuK{n)DAHa^!ZS(+5Xwe#-YGfmnqbaO>?rt<0VqcCI z;4*G6rNFzQv*w~{c&$%Y$W)JL$;_-iOy3d>A`S5MScWig8a7~^qOAb&(kgY&GtVo- z!RzApd1W$I4lHtjhd*dbHe%&YlD9k5hw=#-{o3RCh)=}?17St!$ecX++uFG{IXN=T zGtr|s`bi;Oibv_j9UougrEcrLEhhGE4jhxXQ{?`PBks>IGVrF2sW~I2$5%YosEP1) z7Nd)`=;OXC`byogZ$-uXEiGipE`p30hkd-e5#1s{eugyNz_c;ffYCscOgw*kU0WdK zqFNUT_DzT05-v+izm7K_FcE*i9D6Nf4FD@X>KvBJ!=8hBM5qwA2HtTqZz;I~H`4iU^ZGm&eaQzpxfd%TQnyZVx~MM|RZ{S>B;Z8bp*_z?aeVP0L?3X7I?Y z;{l6+9r|%)gQ}K}#6r1DRz)b!lh%;KvLq_LsOC)3mD^9q21{X)Nvog--dEgnD?jp< z;;i(Z`_B1y0XL4Tb6%YNp@E@bop8|kG9ztKbE10y*;P*;J#sYLb{w3me6;2_>!HsB z&xG7>F*Dp^N-IlXtytE$`QX}NMss>OH#bpp7>T7!(Ks(7dGU^~m52H{>BS>n`n}FJ zx4(0ZYh0$d8WbVq7D;5P4*H-o>|)vb2ZIkH_5covSA)82Z6?bzp;n}Xp!=?U+4D=F zaToTxVe~SL`_p?^E(SDG_8(!Mx4aUY z#EHpVTf0oWZD%ql$A$V{3%hmh&wbCZ`)p1In?VkuVC?Fr@bKZ_*SgPtXO6ELAc!m&^#0DU`}w~eoOjT}|1IIJ zU7oK`YOWfK;6JeD!dM6^#P5tSC5!iJUKhL30r~Om#i|KXp!7YaoE`CB3(}~`h%&Wa zO}>&N6p;R_{TZjC88>aM?;!R*A%YPrLc9o2o-+Oule+w4871bVm3F7DPMh{L@ALAM zEq0fF?BwY&Go&K6uoOu^vaA&eLT=3=NN9WTS{LZhv{W~9_=D>JNHwl81?(nX<)LVd za$925`POoeMLk0v_r|tDn`MNj8(*^Vu=?m%xo3(;FA8LbSXPH#1wU!y^FTVKe}h2+ zX0)EY{7^tn+CV0Jv)Y@%*Le;wKf()i72`Er#lr&AH#s5)(^FdyZ|>}PQskKo@JTv- zDP+7+9s~?p1vN_wU%{+;wc>Fulu4pn%(iu&I5?XJaHyfbUOE8gj|L<2x@4%=LiAW( zb(ei`#1H6)@%W~w9p~^}5^jGp$aKY@Avrwq`>ReJxSQ4Fb;8zcy}&3!>3Ll--Nq98 z=8Ut+Ik*4j3P+9e*1&~sSxwtO zM)l<67JQqP$TstX?ye{KS;72zfL4+0Wgi)s!?pG8oKvli^m*Z#K>zY;i>2PbJeaNZ zFW)0jgH|RgpgJVYDPi25UpJTwb-PYnjsl|=w?g29C4ctmcvNKMa$R>PQRmolig=P$ zXEgt__0bN!G_H~SJbx?La zUfhRmA85S|P(DUVwP4G>613WGKmZxQbkGQm$Ell)2PQ|NPvKI-wsezFAIPh7*m&0O zR4ZG&$ci*DhC|2prcICaAvLc7bD0Z&4Mym)!oGjP;B_B8u=^`%Hq7ggl7^n%Ums$G zgu_t~Hh!$3Tn$F`j;4Th81*_-j-V|qQ*=kDr6>$6@Gd9Soa5wXedWq0+K9#BLU=#C zNyLjAoTE9%stta414)bN8qAZ6+-tyV?lup^b%9#ibJf)C`AHUJ;F_+LMh#SK>FM(T z6LXgB`=amu>2Iw;Zif*)4tDhzq{j$N_A@`=(Jn92zQS=a)^V0WT8$TLqBauC>I4W` z0CHvOqBJ8*STR6qxxsO7Uz2aJ&%O-jl;|N4O){Y_@~eDb->#neL^=k_+-i6wy)A#& zkOpuK;#Fd=0wx-<~22~=BMpD48TSKhQx}?>aIvuN<{_v zbVa<(=bh8~r}}6c&PoDBG{g;3+lK9!a8PD07e_AQUf>ZvvLC~`0Juz%W_i`|P>bXv zheuX?78!UsF4@6A_H(6+CHws;^k-lrr&07qC|L8j9iig(l}BwY8O_&NIyXuDSfjis z$r1y>tly97%V#n1YsI0rG2+9E7_Lt~TcSx$jCrbmWI$oO)q8~Jb4FbJYogd^*=OdZ zY`QsbJ9lWBZW>eDkm{S4yNkX}Vbjc43-RvL*llIz9)}pd4!}C@eZ$T9y~$p7{m(&9 z3b(cH!Ha!Mm0vX>p=kA&5?j5v91#G#<=EZ& zE4nJjSy7uNk!rc;DKBBMmy-E%j?Y)!y)7mfPl4E)C9pi;(KGEl^mgS0u=L#i zzm1s(FBVq+=gpIf6?P3gIYyLu0TS=%bV=-D6KG3hU5^qpQYhehhM(~AZkJV#Ih?Wn z$yjZZqWDMO9vm}v^2@(3=lO5G6go5^rYWo_)XUz`V-VV6dwh$e2v=~aSV!GQ5?_wO zWC&DAc=&=S(UE4f)~WDzl{QY}IrLcBlcP7HtahR6`QU&t#legH|J zjkkWOzx^DHPyd=)x4mN5-*v4nWM(<@CiA6I2{7t69K%CEa_eDWi{!aaH&syardkB(E=t)Mz);HM8({HT4N0IbhKzQ4S2PXCA_7O z#V=ks4Ju+VMG2DwBFQnXXt(pD@ZqnLRsFkR-PPN=h?w~4%RUH~W6p7~V$R1qhZ>o7#IrG4b2C zpJ9|MMkVZJR%N5oa60;CDz)i`vZo7>XO%xeYwBbL>^>R-YRUnH+BTc43MSEXEx={4 zme`%4x3Zh(A0mBY3zF((`{3`PPaoG8MY~CWW$;<}HhnO%2YDItTNTP0DqYFHKi4c9 z7G`ED-jVYx`-_qY1-b^<2to$==aIXV1|b~ahMx3@WulHm+8m#J4bIW=$}9Bz@GGBD zsveWr!MEx47lvm*By7?)Hucn0m=Zf#d8rig# z6$cx*1bso&%YhB!QXoSF8GNYM>mawlD9_8kyCF~%naCgDoC<~#U2uWofHN%}(#Tb> z`5N@%(^drDrYiFL#n?GEAq2DL>SpYJ^aM)(Sr0@gJnScQW#KThwI?_N4zjgDuT7IZ zA}rl1((wwWJ=yW{C}_NYp1~Jcw&~9+hK1dU$y-yx6UZw)X}V+Qhdqnj;mm(Fx^~ZX z$>s-$8h>}v^!p$V(8paUp}EgdJVxr^Sm%2wZfDSl^>5{*)+*}Hh_%8DQ0|TfUGkrm z#l6Ucx8bX%yqC*Z>}TrJOQ2?-c99n^6ARSe{>+uws+vhyRf|jhdj#-+zePwriYCTXzDcrZD4etKbzA$eMHW z%##5yYO`wq@J<+^n+?6OgvD7#%6r@_GX5a+o;LxiqGkUoON=2uNan*<=695OV>ZW_ z)K+WN2|og3^Oq9c*3(2AG4(PYVd*Hg-q9JOshd+QfFAR5Zx1X}mjST9NO)VfxR8qM zm+>^GLPo52SscKmfTkA>A@##@nj* zEg^kYgpiX4=94<=jtt_oui$KEuX-EZ-l0XyBNc`#iHUtL>7=o8pw7hI{wyU zWWvARD6@6P^}zfyYzYS#OP!?{jvPld0#Z&1{~0Hk=nN=S7> zP=L6+Tk6PsQ_6Srp}aJ_i5N(+S{7F2wW0enM1R`Bg?A36X zbHN6J_+lui{bOD_>DTa}OpWa3xUUv4j{)z5w(UhazD|%p3zvQYE(-~8d|mQnj<1%7 zugbjFitqtlyS|kiHHDvjqbCJfadZZU&xn0p=+ISK@GuI;xbns=c!*Mn5{vYef#Hi_ zj`|h>jdG-qfCSedB7MnVJDmJHd^&`nvJf*)FtiB$xQRBRb61mYkJ*UAskjJ!iEJ@o>L4wNs zEa8&RMs!%63YLi_+5Q7r^GV%;2{;{f{y}8LI_SR0!{@O(tFU3uw-(~z91N$lyx-p+ zPWeiNy{+b;^LNEub)S}0B}qm{@gNYo4BfLLxy31uv(4wpJ9BJmU9-I5+M5ec)| zx?Kv3Zt1^he?+}v&-?_Hv3bJb{8;@!Qwegb!?DQ%vpvwRNZiDuG3&Go*?w9Ul96Gm z9`bPgtzyb%hGH=lnP zT<6cjr9nds3Pl80X(_EOdc>y5cbmQAmfP&}$nt zZ~uIjb%#n)^T5EM+(L{{C_bWPQ~X1MnnRQ7KQdE^y&(0=6q<8u83CbeFiFB3lNl+Q zwIFcAM>!oqR%mx)g+4Wfw%}v=ZTU3_q9Ij;VbBBDkY)kMqYCdEr|p7@ViqY(k!>MA zj{~c9f8j@GdHP`Q_g|NYLkkiFQ3YX1Y^hhLSbcm(^CLyyKG1O0|5@yw3bbB$!YFzz ztwZ%u?nJ(SjPCL~X}q6`7a4(sT|RKXpwkc-8_hWnc@0{X;$VyZ7)$~%`m0cZL^>~r zl%760K!GdSKqaGMQPJCqvD){jE|Vp8y+3tCvgtV_uNz`0{8o&m*1{gd*z$+P=zPX` zGH|=os`JQz8sqXWdGdYUf8zw`q;I9=2o@rD`R>Yfp-wc`Pu};Ti@R~hoYRFptBb zQN;*P`;jG$hV;IjqG&3{$RmgoUv0eJlgxImBE zS~<2bp8f->;%)U_8#4Cg;DR1dW`O09C~C6s#E^4E@pgR z(6W*p9myBp{-)3V-I?c=~;;Z0h2#$aBwW}@j*ek^19^zPNr=|2<(sT zlVqXC`Bw2@=eZSR)5+M~x{zx2QmePlbjYS0x%^~2m#kQQJPSPZx#*>a1ETehPL`m3 z#@#U5`gY)oi`nToRgZXE!j9!D|Du|W0_mp^qi@|S)@1%SbvSHuq1G)5PGSPao$<{J zthP0;1@^@Ux$%uBpc_}y!U>qd#xl5>A1QwPfV8oc1g<+MEWqjgfM=XQwKn8fFt7a3klLSEje=Iu$q zt;zGy^GL9;;Y6VTIoDSxR|LR1E;)s|(vlb~`5g==LK`BKcH)L3EttqYZ;Br^sL-52 zSo_;_Nga>p|7yU+`v^fbuTyYnq~^ts9{D^BOm~C4;BQd8A~kFnb7*?ep-mO%)pP!x zlJXmF!-s4>k=qC?k-V{S%&C>#fe3>3f<5X*`%&M`q@P{4_>z_IGN z(o?r!EWZCo$Iijtqfn)1Uuy9dOKUFTWv=QAu31*IDN8`xx;cH47G3k?a>M_6cZkc`SrW!_o> z{I)B#U-4};6y{0e-gWO@-+Qte=e)t42LBokEy(Jt<(lki#@zP%0$wV@i=#Bb<-z6i z?FmQgmqESqE1{4;cu$HmToe2g0aLYDyOnOg4$Eyup8LpwYn6PD`FrOp67?%Q<=g=2 zVUm?JH-=yIVGg`l6H6R@e?()}z>>w(CES6=;l=?% zZVuy;_d8Jr(Q|%OINOLL+pq?ddS>;a_8id|SHc*cSs|B6xDT~#QsEhP!|G;u+5`b*t ztB5R#L}i5kUZeGa^*k+&=`5S9(cR`~VMTPX9vrt+{b~%ywB~~$gY?p3Z0zRE?tfIs zA);_kql=2FXt~t#GG9Oa%I<0)#sl^ogivr43Fshsb8}%|23IhY6fZ?OWLrboRisi z@RR^H>@@fMNfLdYI?(s8^+a0GwScFm{SRlzPAq_H7SSJ>*M*S|MUch7h@hj*cI-Q_ zBOo`;DCSs}0}e2__o9oAJ+l{xd(%d*TQvx}+jSULCCPU&Z>6x1>OOFF1eB0j_Q^7< zUFor*pDNH%UX=v2517U{dzz{B{K~Ac_`1e62da}+10)bcWwY7_7gH^-iAV;&&Oo6k zOsgO6ld3j;C5w)9y4qG0?^Z3yYKc)g4Q!lYy)cASJ{qFPGd^hCXHT;9j8ixguUGFJq=>i^W)%Go)Dl>*QuQX5c5A_QgePr2TRW{I_K`~;!LhnSjV@y{_SzLcWRPbupnHuH@rIfkR3S7XJG z5~u4dH@c0oO^k}tV)nh0oy#3EH(!_LTK;k7wLo3}`Q!Uk$IRb~gzTd@MUgLUCb`)^ z!$YnQw0%(Qhyy=W66O=QGrB8Ptwo{LZ=Sgv?t@*Tp8ithtLz7ptdmd3MGy154ar~q zUCl{^NSK%_+oxb0zOJeVM!SkeZ(oeC}N+(4Q%%f>zQ*h>k(kskY@1yTgbg9t(u z5HjRJl>#)gNyk5^p3>O>D3I%mYlTs2cIu$#&u_gGR<|FgKErGi&EByCNk;Bd2TBV} zB53Y9dRL~Tmc%j!v-wRtCkq#y>0O#8{u0>L)6k)=pnfezdxh|!?O{EdQ}3{CJQx$F z;&NQ|UM=VCN0D$jaWUtWc(*rg@x0lu(t(ute7Y$e@cam4H2v6h;*(PB86MaPWps3%|nj7y1pA>2TbN+DN!lG;@4M%ad z&jS|_sq)Cf#`1&K{^I(GiW0$?wK5^xntSJzCf6+YbdhqBpY&lqFoKGc;1ij#DN^g~ z_yFG0x8$0#x1S3|Nq5@~0Omkztz?{_I8$=x`;|dck3l5BhWK26ka|ysSrvpcFO`_c z=W0Da>qfb`H4;sN7A~9$DlW{dTW;;P|~|-%9prds3l207lkb}ZZ(MV7M2EZiVfsZGZ9aK zJ6^r6JiS*So01FOgS2LvtpOwkYrcSM@3HUFGA;p?RvPN?n?UrN)k@njjQou*hvU4J zb$NYB*C$ad@P(cC z{JK}ypSb_Z2XtzXEhrAC>GGvzsGD(bACod1L{m@B>32GU>2=?;myeNAx1@9o`wd^{ zLM>n){@_vLs*Rk$nqo*#KX#(B0UBe~s5Wv7-ezb>%&CyJOMLy~Mj1w9-K~qP z*7ukI-C3dD#=Pe4kdnwRa#zWJB}pjGN$yYFNtq=jyvC+09A||}7ShE4T%I@mHqF?) zKaBLyWjdw&r+GO6SbeHPyt)x&1zy}`0zCfFuGWjYZIbM6>s-jzF_$<;VEeGYg*_qa z?1J&u4~!?c@BxJv?c1~0yqIeAQM>xvD>ezvi@zi&z=UOIBuW3YWY>SPHkh4zyV80;!#R3{E}~=X4;`=KmXSnt@T)EKCJ=x? zG6}2s9`wAH3tP=?=7X*{@CK!uzaB+1Rf~HWPYMrRB=_}KuhIn4zVuiIge`TYz8MU?6vW0G*9Vo3>ahm0p)ZAU|@oRfl)26tfw(nu|pgk@;08 zdz30D<_LUylG5GT)Fe4z84o1bp6qy&rpsY5@gQI_9Ja%|CKtxl@%O-va%D{K@#Go* zdFcJr)5~<=qySR&4DEQ#!waSyRpYwoR_VPHOi=?M5_WF94QPrfp2fj1#1M3-+cz-8 z{5kEQ@4umf;!0=xDpY_aHWqd8K-_>H@^N;{7^FP@wv&!9B!(u+&%(bS7|~)jU`;sZ zz9s%aEC-+vTfVJrWbX^)1pYq&zd%60XX&UULtJ@|vS@9B?{t(~5&7g&li8F7bAZVi z*KIH~Iv5Sryn7$>7}OXMSY1^?TeXPsgTan5g`E;3fT-u*PWAHdHvmNwu$5y$yB3Ba z0~9r&P0}--E@FYa8lq z+aelu6NNQmn!y0ZsBiMDR<#_1!F`M{zB?GlpPfFBYk#mV!y1K4D_{`pBGg*#6% z!YqdHn<;n+E&3DBk)IxpQrcwV5is}dtG98}8^#as?&Ich6sxHo%Y2LhDBS@DJ!6sf z!h2!>hILJ_unPLU0MKtRO4n&mIqZ=_vGr6Js)3PinDrtp=IjBZJKpbaKg4uAjHzCG z0KR*tJzB}|coz`_y&89hTpE(E;b(HB3dXe=(0#doTtHo^2znrtp2m#c9*lC@=l)8) z@7RKj_Z*;-!5}UsKGH2Lz%MgjDki$7(%Ho=&}l)>#3JdIoZqhq*Ym0&Q$o`{-0VfQt%z0N-M$3p9#6NZCoD zzRKI$L|=SP=Y{X+2lBUb0RVa8`9;0b&~{FLiXK;Z`>WWVx(^os&DhTN(0k<|58bO4j@LC0k#j!)F#~m6u~cr7k`}2 zDWC5Ey~D>C!YidhJL2J8^5U8WfA{!Z>}T^>o^>K$xr{;wF!=JT2;|Q?-43#c=eGGt zx zSq`tVK`8OgMYv2UV#;GU9qHnI~P{~^~uI5 zE~DJ*0+h3{S`1@5Tt~5gLqC@>_vkt0cMa%72UG?VzS{u6;Wv06mO)2#BYWS6za{{( zW)!bpL~heW`86WH0*Gw^+WC_x_aERd#!}wR(BInGVQ~juEfngJzkLT??_=9UmeE65 zXjtx}Ly*5Me7k7_Xp5DYl#!82A?5&cb%J~F=X}SM0gnmN-6F+v0I~vH7e6-5XNmXC zke=Pll1wFEyHR17jYb+cFBtNl6_D@XXLu(V0~ak2zu3e3YZp17netd*o^kF{F5L%j zGCE~5lQkTEPCZ*_kGxT@c_oZ6aq+Uiv(5$1@U@BgjOKB^87xQft8af9oA=OvSBbX( z^WkI|GkEWmNuc-URdfoS`1#8(<6+&8U;pqbPOeVjyIH)tzmK=Czl-IpAJ1OAh;RP+ zpGW1?v)Q|`rak%GJ|0H*@!|G$Og)OPh)mR4k&bGe_W2!vjA*;y+dl6^wOx)k@Zkg* zHwvxZIE`{0eT8nwZ41%Ksz{g7JUxxqZ*Sm(ZCo_JQQ0$(My!`J>cT#N#vi)3DWA%8 za)*8{G8djl8+&21n8DXBZ^P&4gLLE}dU-UwXI>eizc*7Txi*z)-!0aY_8c-f`@O=Pl8G%bwm-S%=ymtH zW6^_S@%MDxS`9-)k013|Y8V(5497wWZ!f3g(X7K`zwYkt0D>5O7e*2rKp1eCJlMPhqPGvX7&`W^ zg2C5{6Tr-kndC7dTlCRmt!^>gcB^exFWhUtGlb`FTt*!qN$D^+F~(MV03^>oj^$`EPf6O|eK2BT6nz1Wpbs9HF97L7fHmOS zJ?7rySX$(V10T#_50libxMu$G8n-WCR6{d8D~_Y%>$_ubU!PrF#`WbzdfC24qme+g z2DtTFPs;Q@pQn2~Dp14Q2n=7=VFrB1#<6!HrUv-V08~@RIH2dGbrKinm+|8Iv$(o? zmJ&8~0Ea1Y6n)UkvsmhV&vS1*Y9`U5-*8FF&hHCbT_0rfAUzH=v;jigZ$h~*UtGtj z`-9=1Qmw#PoJOg97}qm^NCnVhQZy6oDMu!YtHZMbkaUb6?M$Bi)gnAke&H4n_(U(3 z+2sx6*SD`6xk_TVJJTii)FvfYTy2^L3QFlPHV^v0hE+ zkgD?nB?wnaex*=K;jaxAOOG=}oOeCk%3%~EeBV7A2A11>X5_#}gV z>a@}VPv+{I*nRaCpmZKPc%s~{&<6A?pn9Why8C0~)*Jc6{m`|T^PDm~mZvXS^EbpY zvW(%ju!{<`+V>x0N}E0NKeHIddeo1ip7k0!8r`{g9L1h-&2=tfL0|JOwx9=hr)&*1C zKI!-OcOTM%r;G26dW$}P)KTz&$@yHoxV$<=?@ZJ7G8mH~SRC|r(QPt^#XGly9k#8R zX8>wLd*_0D{;;^AZui6jw`QqdpUP8tD!=#gzx??AJC$Txe0&|tPyhZWf%e~2KCSFy z`Coi|e=1MqsZd-U*O+n@y<7wgV`RI(%_6Wk0Clt94q`a!r7YElNf@BG(1^vr`3S;& zHw-R$+9^)b8UTjR3qZWa*NG2-N z&px^k;8n65>cFTEG0dg)n z>5=oh*<^^VyN*t?5hsA6_Q^?{pPs@`7`OCQFWz!INM8SD6+nk*m;_P!CEnO<6Ro79 z?ask7?&n345}1+3W_flICGGX6z8!7Us9t(Z-+G+(H?PKvl%GK_u8G+M?W>{vr_Srk z$ivqa+LQ(GRp5c3p6r)jq=au(p4&GJdI>;>k9X5UL_?J}Zf9IqD@ z<(R*`LRJ8En`P_)`U_s!+|14;P`aS581^DJ@5j18dy&1uco_4_Ds~n0L9P_*;RC>S z5ScY&2u%tt0Idny0J&L!r{TI8J)iW;tp3aFCTj4uc`5cAK;V}zBfDKihB47gyISsI z&FA@a5X%KLZJ*IiXog&5rt6eQY)N0;hi$UFe9wVQ5)=W18-u>#a@@)i03ZQo6z@-T@#{GiP2swaT2 zI`l&i!aMuSg8CSbm`BM3cgTU^+*@R8_CTGGJcC{_*VehZl>?g8khEo6iH*NYSl0k)2<`~mLEmOQK8to_VC0PvVT z#(wyLAB^}|gvrkeWq^FC3UJ&-wQ-t`@Jo>nh+nSA{metC%!6*?rJR;ZWj@2_kjx)l zJcL;j_;#;%^15@sI#L~?u5nv~xmMDCc=~8E$YU`-M_zBV3qCxvRxYKvf|&`Oo=uC6 zuujUq^6c^g+3r9sbPsZ}pb=-M=$hO%Uf;gq^`7UeT?%P?)n+x1A@j$>hx_Q%o6xWj z_jkQGZ=WaLxV(Or=EUyJUEIID1DtQ;fAT;5pVO#vpbp~V>N4rsU;p~o>GX|3znhMi zOp7YBdE7nRg~y|s+_YGz##!eqEh0{kFQbTD@KtBOcySe(f@8f+`}Y6r&;Dgv&~SdL z*V|DrI>g1JEb}nDa&~%=PAW0fU;UpV9*lNiTpf!#`uE5AoiR`kx_~V|9+Ld+541;z zJe8;NRDQ4J-~agj_lmZLuYaig27G-0?LWQoH(mIf%JHFIf4m0;^B<-UPvxmRm3aU5 z-F^*d_jnt<8pXU>!VdsUQ0`G~i{&)t0Cz*0O^&t#SO^4NG51VvCt!h#QtIA74GDpU zS+&OijiYz)Xe3#j)CGOX>hiPJB6E21itwFAgR*N~I%hPL4WHJ_#*?FgA?;CAg2eIc z;0^Xd&wZ{{Fkk@$CS~(`L7_*jrPyhnVfgv|V=sZkV#$o!7`+(6)-_FD77SbymKlPN zVXJYL!^#-~v>)zoVmNq+AKrc!z3yW)0492mKRdqy{2T!3836m6Z@x)=HE~f&Ziivx z+45t((u+f)zK8knW3)gvHaznMM%s$s_0XOGM)YKRRFC^CJvyn2QKmOU&}wFQJsFY{ zlKeV~H$1wP6wVXWZ zCBTWtzcpJeeruq!0jNCFjP$;WMT}?+bB*Qu`^R|q_CtLC-K%)@>P_6dzm50rZc=oE zhO^(#5Apu}UCQ{s+fGwdhCEm>G9Y<`vMC#U4<7d%`919wls^ZozdSjM z6UM3nyXsk$KMcV&*;5-3X(WYwV)7=l{=3*?|4dqkP`Eag`mbD>fJs{GscLb*$-MT^ zOmMX0T^dR=WkFAsCl44d?mki)93DUA0#bIXXAvHUuPn-KdS{H%{%Uy0vy}y}?(aXG z;t(;D?u^IMXbJe=ebbdvBLUx0uNynQmme1%H?@aPZXY7wsK)w)w$`rF+2GkOMtZRs zlm5F{PI?iQL-z9J;4ZSWVYHur1zBkEi5>?!j8Z(a_woON6gty6Gy6lSMS2%;*DRnE1e>(ai19h3BrHUB>BY3)=0{K7O~(e0Fk?woiFNhV``St!OpR zqq5q^hv6f-Cl@z^ZgiR_NuIsVMJ?Etp&L^73_SvfMqil&^6N^k4J#`*m{_M+m9NotKyI(Q4bS;dZ!_&ShMkJ?D9b&NrfhF7w#I@ubf@?UA3AXi%^F z;ms$IXROQUbajroLM-Mck>(%Xzda1VQ+X;+<-hfk&*y(D9#&T!_2WOKXk+}Has=YO zep~tU_n$oUpA-u4RG!NJzZb*%^rZSOSk(hz5ukaV?HnV(mHE-&F$RW80v`2*C!oPg z!{8`m$?)NG0@@f!a}07bvzy`C?*$?L=5-oR$wMYo(Rc!s2y$HM*Z4};U@Y3UJ?QX| zAjor(F{CMm@mt>ruqlwmq)03N4GajE0MZd-JZmrkpku6eY4->Ncm$a9?DE^*W6JcM z3^_ogZ57j|2iFb>C$S0n-d& z3gzBY{|E!yBxc>-LjsLvhSziK_}D(TOK8Y?BpDi&@j8sNdt)`61=}tbc$RsyR!!bz z|8|Q)nL1oRaZj@2>$u8ewgpo*ds_<{lSF%&qX@ z_J+@6jK(Q+2FNT|DfE9h#^_(JlSfD+wgJdGKfzFKR4}U30&c2D&z%{dyVNx{DH$Lv zj}hA_6`)ZgI%XaBx$rEklG>yP%m@v^oSr+6;oCt}ja~WDR~|r|lE^_P7g6kwU6qeh zqB+LM@pZk*emhQwc}w{apd4Z5SFqr_XNxC<1(z<{nsRWLJ?9!OI$6 z1hiIiDRj4t!LFxk20w1$&9u-1P|H*RPZ;Tbmjx_u^Xtgf%TdC}H(A*Xz$ciKcWF#i zs%@H=O=qU(8S4^bUjVF?^=?A%3^b#o2b#i5>uxuyU%ZISgYAY?Q1+MzZ=Aax{C1l64@Hf z$MBr{n6ojSuVPNea?*=BG63!h z#2Q*|pj}}_KSq;So}WkV>Urb=Y=N!{0J;v{D6JbmPk z20$4(D*}AenhpKS!t0(FzuIP?Edv47JQLkh7AmwO^Kb)51JrSYI#RE4>}Hir5dP@%VB444^W)Gqm~=jkYAPP_uB1i&+PUUfuu?3tUG}cQB(TF^8|rDUn2kmKp-PnNgxIwDERYS@ipe3S;hr3DI^c8VF)M} znCmrnzp(r7hK5iB5y)@LNMe z>*NaK=Zu!-;-q~}r}HU`Zt^UzX3@pSssolif@*=G_~ONjxVpNEhw&iw|MKEI0oZn@ z8DD<>d7O4S(K$UyXSknXyb8X0fQrRvmH_o+ambiI%Lw4;E5`G6=M1nuixmLPe(9<4 z-94Ndab6=}7r0AnjWg>odSbuU`(BK89pje24Kc^mOk?PAZF;?}Lmo)a#n^g$yidlw zV~~zNqRz}u#`bV-_+czHcpcZ2Tn__HaO{}*S&;30@`ei}Ml|?x)xf`v=CB^OQ7jX` z&C_Dh6ae_}@DP2*s^9HJ_u&x$IZgM-Z$3*FlCP}a#T?t8FMZrgpMWqx(y&h2c+x7z z)kQ1LP7FgWrUjw-0?-Rjy8UCZnkOFfbOGt<(Q;RJeni=`baZTlbN3J-QV}8aZ;ifnnHXfL;!rmAhz1 z;rYv0wod@H03{dp09Cuoizq+;D&~Wm$e1YW{6&=NO=KCnp@2*So=>Xf1W1cqzvfi~ zB+cL5rVw@On!3=1+y!;-b1q_>CLp*Uj$>ZUM)~Dc(hDYR6yasz_d*VkG`vgv8q>S9 z9bm6bIW_&5>3^;7vr=IV@b|7Rb^RnRSnQ0PN}e-Zthtu_;$$ zhYXnaFbA(~o;?S!w<7ocea!B^P2v4|XmtVVJwjuli0Nk6NlD|%`~!ABSXw24+kL+>CANaEu&t7ZVPyI z9g`GEWO6%s-$fJk($<9)+L+JsY(VYWXcFYubKJM^VySfk+nML27#qNOnRdARm-H39 zXz>V4v&S1lp5`?@?Y_h7K4TB9-8P~wQ>I)5JL)#&!8jmKRPY|ZQ*MlGal4B8%rno; z%3r1JF6b(wo<~l1Q*IFFkwvgr@ z^{xq4zrBAKZ{NH^2S3I+z`1$Kn4qIQT6Na%#}~+*d&fNqNjKfzzmM;K_+^T|GXhE)3EVv%wN`DXaqt-~lsI=6xyI|h&p14trBjb}(v+2>_?bI=%F3WRroUF~mh_ zl6HbOiI3h&>kzyhj48qAVItQ{YBDyHk!duzYVZDbEh0mf1!ICHr+W93_uaRQ@nI4+ zWnSZF!1r_7e@LvhPy3Wj;8q9l==qpnIP2qg|E~)KcYx&wj3`5}YZ!;_dA~S+mb|mI zRx1VoA3Z5!46<6InE+x2W77V+_qvnED4i}-E`UG#>gUlcd4{n739x`MG+$z(a$TS2 zbTPgj9_|iV$$^tMfYBe`yv69LCeSCn3{y;J_0sqAvy+sV>`|{EMsq=L4ed0$@6r3L zx7&BeZ39S8nYW>-p`tD>m}IRA2uZlL@)Qs_tr$F0t;Pt?`e_T-NzIi>#f<{54N#bmiDqZmEv1A&+g4#8P ztj3;wH>|vk0eaeMr^S!w&z{A_Cx{!rn8C#s#$n4wMnMJNR*#k%y3b_ zGt~90=QG>rxvc^E&!_Iy-6o^E-K=4BH{hu(z zsl*OoueqNlC!QzJ7AVMDo+0nM=l&}L1;#2v|57+9<1TQ}6JM97&Mq0_W=fhSh&Qa= z5d9PdU`A}lPyY2tzKzEn0+uY+FAW_#i*&Os#VWvq=NnFIB#87={-lB7vdg)iQY5he z(1XvVIWXh^kf2>UBOT*D=fVu*w8{apRsbA5hh_K&UJxu521~$OBl1;bZ$~>!6xTUF zfTtzTs+3}qgO7T>SoV8}^EP>)7jBmTEMx|gr~quU02vd86^hMR(k6kQ*}@Bg!og$m z#P9F!q6GNJjQ}*r(GJ)7V&fw09MdCCH2_Ry=O&Zu6{)&@YA{-{gf zfJ);eEgb2=&5dWsub?+ipZm$9x#PF>ZXS*6&mw9kk(o_m4LxWzpd2uBejdAvt61&; zGk4S2BQM#nzl>6*6?^DpBtd?%iKPoqb9nCa>nMErB|w?+^1S+!cC6sBe3kK}EpdZR z7y-Nh^=oL6_O3$%BU|*^?@f+3qF>NzUh(Km__lr?tJCMPo|$6=ey%XaOL!Xj+9Jmp z^q6v<9Zi#5xov)0?BM(#FNKy|T@r`S`_xI=&<}Bpo z=FL0RQT)lj__KKV*;jFTagCnd#o5_K(iKPG+-aYp<1WJ-7;DDZez*;5wVm_q`)D#| zg$%r0$R*FeddTFe%~~hE{^HB%oH(Ds#XKyF9FN95=43`2-DTu~+scaNCUj=*aO{vh zb!3G(O?`CG_lE@%zjr=!{Pxu6SU#1f@>G7W<-gGgbZkNmy}w)jF+u+=zds%I_EetA zr$vvD6R$3U^tZ;oFAN)A$ur6XzQE}4_%i{Vo{}x!yE3m~#^nh>Xe8)4)O+IOtPCEK z_#C|AmLsUJSg#%iCwx7Gf)atAd%*S5Ir$qFEf}?30uxOm_y6hTG|bN=KJG!*$PuU; z?zf;0{m6TsV_$4rjpsKF&E$K};VxpRmOi$}g#Z&hon2qX=bwL$p>-Y4FP^1vSoi6@ zy?q<^-TOFcw=jlIx$6*??Y`mUwZbUeK!YCjHeOssvwafp-@H$r5<|2HyL^lO;teZ1C;$%cKpP~nknf_z{8mZk3kcD>PtlAd*{vC*3jPt=M4KrnD0 z5HXqzV*p?76_PwQ7m>>|g`tkxLaE(rB`w$C*2VFensTdml+xW&ar8<_LKOw%p| zczS_n%hv%=-lHd8x=25_M7WruXU*T;yDESXBnZ@{hx_+k#4yBHcpvB$73mGqqDVm0a|;E@Bc=3OkKE*BI$S6vYAF<#N7 z{d%&guS6eB;AphSaz3Q5d*p2ZKr8|(D~Mz!GBAD?gC8UrRpc>Og@!GFG=Mh8xapaz zo%#G}%@HiJO?O4=*%)oZvo$%S;Vh?8Jl1KP2{I~a9uF!1Hk*SVq678g*EpY zQVpO?bXZR!OJ7~s$dv)H0YD}YwP zgnf{pME!flYF#e_%*|?VqQ*(g>3jY;ZAA{2JM|OH(_19@%U`%(m`4a++I;4kjp5eF z&TeuO^LMXf{o%W)4*1(F=%0TPHFV1Qwij92V1m8f=NGY~ojZuJX3X;+0CX*A*{VjK zae>?iInjGR;n|~M>`OKDUkTadcaNsL_LPrxlmUYA;`5Zze*eR_k!8#_CjPs487mZB zu6L6%xfe1gvGtffG^vXu>fJ41G7p`Xt8rui=$l3f+QJ6~7g+OLvxw})S?o?av8h1M zi#9X{3_nhzmX7$NZFdi`8BQYyjWUH!6!K-pmG6BPIw5O<#zr+VwHo6Iuq!qqUuiL} zM)$Z73qLiX&$brXEqbU5*j%Ewj8G8RoA{9SHR<0Pn(xO(ZH&@lqYK24KgncvzlluR z4?ls1ygTo>A75StknRl4aq-FpN9g0cq)u`XHi35JghnS>R8~FH-sFzz6Z2>&b4%oJ zv)ZP`xh3>k8pVQ~S;u5FWo}YGdpgA~?%v!1cw6yDfBdtkF+aK>eaoDuW_^whSfC$o zy1jV&$k^+FA9v%=FFub)BQCbfc=fASv4T%et}ep(sPV$Z?0L+`lcbMsKitKy{^oDc zBfB^Ul>du=@uzWea+>;K1iqO^8l;4aNgbM&43t?p|! z(UbJ^@v((?&6&+P$EaeMnS1ucw=E4Yi92rzEEBDeop7cJr zXU)mjGubU3i<1mcin3b5h%&L!Y>tsK1GKM}7&sUr7*V(5$8@%>$-9~#ftdexfFt+1 z7f}ZSkS*<;1Ar3{Hr#l!is@oQJJ%_ryZg%Zr0dZ!ORfztVVYsTBl_FQ15))uU@*8J zaZFvA@gm;cy-(rT^O0v9&oTB-=+iDPUp|j=^(uuSd)&^xvWq$(V7!`QFk?h#0cXv9 z{PPz-kNcbZ_~D1YOqr@n+g$=wwR$@lqk_{Mbbk5#SpwaCK(vPAM(--d)VFsZVn&<3 zdiE@?0pwGF?`*IGECDcR?;Jy}2?%p+41ab{`aIEb9&2bSXm)#mU=PbECF^oIrl5|5 zCVE*M3bTis?f!8%k6INFTYvgG0095=Nkl({t*jHIuL?zoikz<8H8JX;wf(e{|hU4Y>A;C=29>}R7;DMcG2^Wy3{d3#)( z84kv2!Q=M+E*5;=&N232C6B$57c?yOsO>P4HG&1Qp8MS_!!w0VJZn|b8TL64`qn+( zMT~lY*lG{>;MwI|DJ8@*LDXTd{S2JAON%5G`ckIvCT`2p#u{Yvymq%gTmW3m96cQl z;HzAseGPC?rqk725!%6@daAR~F=!tEq6rYpGfu1hGU_MIw5Qs$^!3@fD3JsC+ZF+V ziJB^ao0GHCXf!*}y_!xxaG!kgutVRhhBshx>p}$JM0r?9SK6~#V<7Xlr#l!)k=5&! zuR$kd&OOp=^EN<87gCDyz9Gke{pNXW&%aFI)w9S8(6exU9-H=8F}eK^xyPHxpPU2i z0pVSMQKlMI_;tJN(o1Msy<~i*fYnuO>gRHo_IqqQXMnGI%m5^d(G9#<11!Klg+^K= z%kSa)IF8XGH1%;!Lp;`>BhK z^zqpXs)WLfAvZ#MfQO;|=!)VRde>U90`vs!k9rgRsm?>bOYK;-nvt&?h96Ox521BA zvMXe&gbr$-MsBo-&0xfRjL)~P0cf|e|Li$31c0oarwD`1-~;_&tk!q2Z=Xf6b;kAO z*w3i%`?rzl-p8(3i~Qvm08n(*;~+M)A@kxzY>mcgUBKV`U8%(e&{wFmW8H%GvvKUo za3FOT(c_yfa)s_F$`3W#jn3FNTHJpLUAO6c_jmx%w=dIPev{9wT{s*)9JX|zYce_L zSu0Vm;q{CyJehUB`HJgKPh-jTrM1hXdB8f)27G4tZhdkcxjBFpJ(@E@Vl!pTA@=E) z)QP5=^r8ST&rt7{u~>vP zQ61#sq!BDGq#5m1kayrCzc*QGh*Xf};OuNxKQpFaHF6W&~J0*63JGZx`IxduWETP75jM@)bJE zgqAz>sSzmCSwC%!aBbH-74r9r{=R+lz0=ZDc`8rk_gDU&xBZB%e_H(h`1%xwAFuxr zv>(e6y#ExWfBN_F=41I-;nPuXPvxn6EFV6++Y5S?4M9Nxt~ zwOoUR-vy0&jok;VXHVd6sHh;xFiZh_3X=b5;8<4*+opbv8dvrWmln{k_&mWFo-dYB zDwL8}xKgbp@R+*vv!7NBo=zTtz_ zhR4lejB>Bp$xlw&>AB__aBuc5(ekiY--VY$m^j$T`skzIACse{aCyeq{r85yyQfhw z=y%?ic)7@!t=_cZupb4CYoDW6 zP`T0Q^$hJ}+zMDt0!ZY&#MtCKc_>#Z-!&p@Kdwdtwg@9-kyM7Paj3NhkD_s06b{PQS4!&Z{ z4fW0p0C(`X+1fpB4VWLZr6(r<7IW}dz5+kNQ{tsL*LDDg*JsHC3Sx+Ccal81hKa97 z_l${o007s)@5>>;hG!3lv6@rohb~|qKw)rprviB962?g_R=s#8qaPLu;0uq@$``j$ zIC=iDU4W7;a@*3IyN~k8MP$GH3;G5@Y z4End*jotg#QU35ga_ElvX**`6YEDlmSG$NTOf!sO~IopZmM0TlD-GU&1! zLw9u&@|4bYNB?D9Xi1BiT+7HzX7^Fv3?p-S4md|Yz$Xzn;yVK`UH(k?*Z zcoNy^FiLvR_1YpYNr#~$lo97H+poN;6V(Y+!;_F}<|(73(jqhO{-$iHtJH2L=~V9B zMk09M@}4}*&`sIIau70x4a~CGy*bb)47F;@|(%e=jZC-Y)x5 zqfg~#F-873cj(zSvF6);H$H#%MOw)72*P)7-o!&z{F0z5E&$Yesi~zU>auwk7w$fBoW%1h6N)UaS_Q z_^a>!4PyomGvACdi){n zK$y}TZqiukDxDk)x850rl@|Hw%TswOPv!Sse&>DdpJMG}@w?;qDG}Xoy69+-9e-0H zeER;=f^v8|>g}mKm5)WaF>#v{r=C6mpc894P79-l3zCevXBmq$89>QLh(Y6ZhP{{a zel|>=$r(`W@o9qi6iy5f5`Y`3?%u(4q!t&NA$J0((NM4rdIt=po?sNa-?dXeNiUC+ z5eNx@48PWpI!y4{y31bO{H{5^5tTJiwMtTA~!icgxIo}Xc)9gcW2 zNu9vB3t$om`>IvUqzuRb0PV4~T)ePe`9q+o5p4Ei>pFsUX=VL}YkOVN$J}F|{G1j} z;22*Jjq$*kY}7IKs*L?QdOgqb2FMxqpA5Ks3OzOvlJC~xzEY0~ayx;1=J)MpJxzKJXmOmtf zGR!{x2E7ec%_GZ>yD!g})_Lu9-dn2F00s3}?iPkeI6+3aa{`F5FZRC}yE$^l^^0*g z8T5r}4H*SUzy*R;f%gKC;Tg^=cq)gCxF6cKXBOkM=Xed^Efr5w#_}=FMHu}j-$u}+V+iR^6byvypAn0x!cZT3r);~z8u^}_U2Vuyx6V*E$EzV zJsV~EytuzdKG1o6=#m4({^A!2SVqkRa1Fj6#OACT>)u0T%*ft33q8#lbX;-2jOE+6 zk^lbN*Z}Y{(77<_LWfao=kVb9&tiY^SxO4$)`twQS)rUf#2Xg}fB8e?ZUA3{`zQ$J z$LN##SLh(d9{pO}BR6BltX@xf3=B`-?H7>;G@B?cd)0ua<|$u+p73qG#65)+&9Z@y zr-F9IlMcoH1o|LvIRJW|_UM`3rw#7_T^C#UJ0&HPN4S0k|E?zs_-mFt!x{Ryef4eR z=kPW>tX^I%q1k?&ju$Icn#f-%Mab-O=(h@WscT&E%){GxfHpcEt(tf}=_4Mmu1q=! zUNPAoe}u>JnXJ({&pFL&m0MrwUS8?l1p&q`NBi{9yGX5mI7CkQ;KSmj*Q%q8a8l;F zfM4gr3bM2Te7}DCF1~&LE>15_M8UluR^^mQzsUh~t!b$|Zx<5PJm zPlckf;Y+aO%L&y`KMfo#v}Cv-eaXNVKxx$I#Y-X2e3$l?W3(7vC|KkY$|1w`u}(e1 z%A}d%O@ia+=^XHjv2T5PCIm7GXaE;0fQWXjfjxx*z3`m(11PsR+3P_x+1W#{hfy@c z*j^&!CUpIPqWesq@rw#O!Aclo%v|B%}A+2=1XY&x+TFXH{}`|vm$&ysHe z4$A-|_hWm`@E4!IOooicT-w7-+Xej^d4gEIIVZHwtnl|3+U_^k8#{tte)c@@^YhbW zSb2@lHpE@e^3ixSL|x-`zL=)(D)z%wqfe8e#b7#q znxl@hAXeIVq}yR(Kwy5*#e&GAfopxf^cs7O=aS1GRg64=@d3;-u8f@qwBX9cB5B_O zj2nh7xU??^;2)`urrz(fPF$RK()a;s(#!hF#Vp1xKo6k0n3*hbpSUR-Kup)n&J7T?@Cr`J>T)FsUNU8EAFW7F4T|td&r$H|5>p zGn5x)W1lM`Pm8q0#C0|^>iatb42T45R!a$N3nc_RGR70 z*J}+W0NlvrctR@yX&V3~pe$2{{^bim3!rmri1{S7xzsq19Xz`S1PILLfKENNi`$3D zeg0J#if`hvxmo9%7qP8!Kk~i%#n+K}aUIK0&L^=i0G18A4Pc-Cjd)&uWuL-JkE46uRl^NURyJ93Xjrf0MSLm{@EFnBC@TDf!(-8={<# zk_jLIo3roUB#-;1H;vV74A3$;oX^H#ZUMS=vss8g*k^1mLYRA-*qE8;tuNeY8)&Z2#g5z$`i- zyNmg57TL2F{D&Szz};T3G`eGm{!$*{=ly6LW$2PIQfTr>zk9LozK@JYh@G?|o?jgn zGOkZzdD)149X$;w%+Yt46@HT`_EFoI#eS9MfprPqZgpbz&`)4B|M_Q;Ik|+d0M6(w zkD-IPB8v_+IiY*d;{-jwf!6&=0{Bb<=p^pt0l5Za1#b869b>!g4WS?O=l{#iBDUph zl#$yde7mma6Mq-XMFQQOCyaD)0av~?TEr-eOpdl^(4iZ~AH7~+ET9H+RTVxhq(~HH zA|=jrLGR;yqHJY7?$AgCw8@TVpu&>gJA(M5URB=YHN)ZE<8CoRN*PRY%eCqN^`P%b zH=xt3&wI@_ZwFlP^JvZg>c9H0;``UHVuC)Xqc{FX|MI^dS1(@1`RN5<_9V{RXK+>~ z-kF$@F@JV;5kq*w(EYE!{u;pjGA*vWd;ccB|Nd9;um9`+B5v=*H~pZyFTVh%zVUw!s@y!`T?MY(wvcMsi|3`cQ#`aI4r zf5yGYyo<^;^k}6XQ}}I%zBZ}cbjdu9%vRF;lZ)B37qj^|(O~XTcXRWwjME-`rh_!k zNzXlsO8uu!QwJXM2t1Xi@>Ko+%HP>S{!@(on@X}bep3F9r`-#DX*~J*CzPl2*`LZ& z`J`N3J=iR>laBb^a>pYKrKLQoE={h}kX-=AlBK|6V{B|U$7^DPv`O45_hzi%? zW3}0M6T7s)>&0&ZDu^QV7%b8mQYL?BOu=M=z4fJX*Ov1W%j!%`>Cl3`E&En<)IRah zCf227IcE3i<*?l&U#%hfntGvTm)K07=1ZKeMXnT8FDsnJ6g&VIhCpB^4!G)MWLmsJ zR+Hn*6%5ARt+i>}RAyP!@4emKlK@`0r&uqZmQW!Ki=iYTh|5Ecs3Ndmy)XV~v6B$* zl})BESF|nB+Wzskce$b8{|bMKJ=*V|SL`CD;kTqo4Gegf2l){D_n2nCKhN5)L>4t{ z2d31g$@m7?gjg(Wc1G(W!QL7dyyx??nuL0OQU_LFDw#m=a1e2d-eWevoOkYigr)6S zBmY?n^!oTK0PpRF2%3>mOb;d1ui0HI8^&AQ+-2~sca(zqF^S&`LL6sI>I_Q`?)Rf> zT(bPannA)>c|mWzp^KP&RLf_$ry1{QS1_7g)oG=zpEVm=e3vHQ{21rBO2>{oig)6E zWgV9cl0Ht(G&mchDxWZv%B%+7Qq_j`q$=mwlc1?{kvFMq^ z**bmQmiDVHES@X#8B2_O7PCRbMa6tu@YGTjFzgj}D@N@=kV#ueeDZ$erj76R%g9Z$ zMRC50POrEApCG>R%!1{?$T6f-068)TLTtR@zkK}W<;Vte1w_cZSAhw7VN8|@&;$WB|_j%iVZ`EY|vffD6t) zgk5uA@G2xt{Nk!43|3@jgAEP57M5@=eR*)(fdlg9u6FeSW#m0CJvxmcl5gaC1?gM% z_ENz9w1=K;5pd5Z-ykY3cjdM(I9713?O6a9uw*-N%AxD+R->#T%FW;$pXfP}bBEb? zd&fcb_6PSPHUwZ$H<7z7hHi~LAy@&D5C6uH|1v9aw-g|nBfDjZ*C9NH@)<4h8K8R^F0mpdJW>N1VHlOUehenFlY$KRhYTf*~8o6@{Y5$xmb@@q%!val%AB%Ms%9atV4GU;`B&GxX7+!oVz zH)zz;#JD1F(HIHzIlDYe)_fOWlmlx6-^4-JHKTW`z2NI?3X$sKVql74ic50WUxoJi zooT|SE3gvn@}E%aPDPPke`QapraSQm?8l1$s@3~@jT|)z{*VFwDI;-T;#1#Es`rTV zyB+3-VWY=@&Ff=AP>|=JzKK~WB--!c&GiScn=hd=@&Pn+#{WB+!eUQPY-AM5NO3-P zoN=u?fy~w9;nGUNwe~WfZut5;FF|98!t|==gcq?N`#+HN{$1j#$m!zvLzUm%{L?}V zHJKA159wiFWo)~&xb2tF*sc1{hp0C&U1ise$%@gn_o)HY{L#!PwhZ|!QmxSfphA$f z4*K%G(FY3?wLfGN#m;UOiNNU;h`D-!mju7E?cR6SXh$=%636Z~b;E0a<3o|UhS`W? zZcL{uY`bQxWI{v$ptKwnI&6~vz{;yq8H=;#FCzO5{%uu!1!gcS;W-tWUA1LUUVySO z!#I3bL(dLa<;SOMiFU_7dh;Yd4M8jS$S2J`MuQkd@)-HWF9<^MH!o7N!yCxhGB%r5 zo&|-};{DY49bE)m6PJ~Y4|_Nz;ZlbRsrL7hFzqTzELjz1klCE!=Gp~o>Y`iM9#S1M zX%fgThGbw`lcZbbO3}SAbLm&*iOCdHfH!9vkJ+W;PQfQ`=0A8%=U^2s($lS9&G%|z z{ItwYPJ+3PqMrU5aXiv4_%V0W8wf=+;f(R;fGcl?Vz)I`h?D~$;lxwL$R1G%468Aj&_JNg;)4H14HzF^}mn5 zLN9UZ4{G2T7_g~hf(f}x%@5GdRgm;Do*nY2%IzCypjL0o%x0%`Y+lFMf3L()yiFLp z<91&+C-v$5!3Sj12UKu{sgDsr5`)_{2I)upU_Jmy03Ac+)TICDk!MiUmp zKkf-~hXs~czldDOqTq@^`3LuOUV-ARdz091ypO8raX6P#nh!34%+|LTGF$AAEf zt5iI%hAN*epx8a}w)^$BJSfBQ?Xz}G^zPS#kO}I_=I;z_)%HfPm8vONS0cTHo{c>5 zw_i?~laA6Gn@ktWHZ;kd%A^?sR4GLG-gZT&qV&-3J1&H`PfbFgH^_zWr|%czW!t<; zSN-4nvhNKxDeiGe>{B|tcEIgtZS}bo7czp%V?7L(Vq8;Jw6;b~ydjNjLMFa-v?T-h z)eJEeUWw_I6rz@I_tCPBHI1VrI={*Y_qs4%b_O11*;NIfq{FUJvO`wOuj;MQVz+;P zxxw`|@f$dJ5H;}#p)qX(|vQ2l@ZA%zhzSch1m;6_TIXaQCm?OS2F7?6&yd^aR zdxm91-P4`(f@ecp%8zmzjN_fjPxwA(T0C+x;jkVnG1HBk8oO(rhl;F49xDJT+jPeE!S*{jOB3k>923UBBS7&p0%L2>Lyq z`r2~#v$u&Be@A5*<_1*`jlc9QNo80p)VgbHN!2OPkuL*H~dI z6w3@E_RJkoD^bJ>Y}ZZ$&oY+jugQFdeunoZnh^jVXCTUo&CaL+dBDPUO)Z@1bV-&L zQ>yi_L-#~Isw!gGFGGBi5CUDd|G6OCv382iEkw0M%lSzHgtkQw7?3O#A5djY+HE^- zi=@EXupW>=y%TS1i~wQn7*C+T@-z(sUS)eGlYHh9zQh3Zc9Dk+GEb32Cqi*Vqk@S6 zyH@AZqy7|_3l0-ZYUwu*@TRFyl?H&dpse^N5aRK!eKho_`HD1mP+}47E)6@uj{e$* z)^gwU$9goItm}DutuGn$_`N`UQZq(YOqJWEQn@5nL00*m|52>;f++Z}JdIuZLMUqs zSU5WiPVWsvUcE&&glX6l7JwNIALaD|;bnzRnFyM`!(*Nj!6p5lzU z)2>ZM3bg>~#>TJ-d}_uh>)1#`KkhrRv!DJxG4=73Y`%%Yu8{GMSVTXL@LDCDB(c3O zILyC=sg3Oz?9xi#&z|)}Y4JM77&Vbx8VdUaTpDaqr_pT|J^U2ZmUq)rPTOo}{1ofW z!9sgA3SNYI8vO;vS?vk6>a}a9ZEpcMsR!i?De%0izj@FP9^yg7+Mx=0`gFMxZ-Ho@(NOg3HvkD(6UQg>KK7zOQnuwp5tT3rme_1pDokmKI=XS<(31n}hnTTG?HWlCZECJYQUTQ+D zhT%+Mdgz_Y1^+lc=k|ePHbrCUrU2~#3DOb~DSLiE7oXW+kuE;@sybzb$@AilN$A~L z=aC0+m5J5&iuyP6IB0v{m^T%aqWb(YJWD`cf=QVB&+96-JvAO^@zERM9l7&53|`D* z-tVFs;NlhHQVzR=*Nfb-H{h>7HXp{#=@{=~K^9SI+geku+in;Z`6og&H&nM*oCwKE zp#le6x|SJNw`RSbH{2sr5myyN!U)gvlWT)3#jd@TWm@S(!^`r3~~ zMKTaOZ&Zlk)M)%vUB8`nH2`U(NO&tI){rH2{EGE- zxoOeM*uS_V;MSg1@^K^0O>N)nj;ihcnkONq_#&_w!H^n}ujHYEBFM012y*>5+FKG1`I6}%^M;L%|(9A^Dx>WB)}Bq9{{#NH2!s(>UddV{G$j7L!d8%`%;WPR)fH5Ppzj|Qclmb;-zb4n zj_;a$&0gMWi=F(&pud)_pOV|XVzUK$*D|85`o9T+;;1bp7)EyOKJSZMFB2IpZZNn> zLU}4VjXdrFxm1<3JRJspD7ip zH{Q9#f5M-OS-(81L@7MKKSLdEEeH5J|875DYzj@>`ilXncOeuEsYJClzJ*zLS@-VM z#LigFcp(%Hi60>ysB08bc0-~)P+I%WPVP>hphyn8_siE?ZZ9=V*)OuVa=004M3NeC z-*SYq*`ZSJ0lUwP$4%vnuB6i#zfJdj@0e9s8){gz1%|*Fxqa_*g8-E-u1>;*!dE|G zS+6)m&Wf}?91Fr)sZIAgJJzYI38KE81$w`~Vm7~@V@GJR@eoov0GrWV9z}$f-dC&y ztuODpO-T6U5wvNrGoDS<3*#i}=6%}nUUk;t=<+)8ad!lUpO^Rfi-;?edLvI}hUXiwcm&!8ga9};#^WnOI z=9!TY2tw_F|I%=>a2rRdbHxcqWH)amUAR>;($VB_HGLn{$pC1VHayn=rLL+Hsz<$p z!PL)udg^N)5_`-+2UK3G_B$59V=QW2h2AinhvI;(_|ok2KC}7De9TA4Jlu>@x-Q}# zZR~57zgKh0_s8X?_Q`b7*LGgN6Elab)QU zeE~S@PtKWnAZg@vM2d)ROGaF=>IH@ZEGC6l6>LN!T0pt3_|58SzmMdxoUY{5!PI&F0&6mJ_^6;@HV6${7 zG-oj)?zzNv$K`z?wIV_o3k?Jp^}i>t9T#xp1smHF@YeKhSCn2OU%Zt9II=2HsX}UR z@$~Oq7(kr$ zstvi-8$sJiYYVy1FOLN+Cy7EnMdL;C65!SX%^A zQ|eE&rTN-R{znb%$a-V{1N4aUa&FVg!nSJ4;;4QXG^W!hxSzeT1?F}6K)>c4f0e)< zgunKSFqcp>XqD&daJ@AzC6@vy6|sRDuG>qoxbjV_cT88z)r$CZDJsY8vuUA*45A`D z-GmR9=XwSV-n+4!4HjpdxZZ=coTYLC>N8RrTXlf!Xbq zZ#jx!R^tCM{ih!U^8Bb(#9&2pgz!K!PP5y@2zb$1`Bw+_Tz3kF#T*9&s99Y^UC(G( zzX@Y)gqPtCw21Z`jW-HZ+dh^CR4E922We6W!_q`I`$)Kn#j0-%(lcH&hFHJaCtopX zj>b-?r^hcQmHtujN+*>Yz)y?tX8fI%oD*WA+w);8QmZ><6gU?wm8+b&8=I?JB+qZR z*8uI65de7Wd<9W4UXOVKBq+ex`798BJf^{<+^F;EH^Qd%bg-s4?_pdn1RwdVK>m?5FNp{k%2)@#5!7A?NBZ<|!9!C4RVYfZfsj z!)NQy7lD({DFtcB?>>llRZh109Z1^LQA@>E1il7EMfzplMA@n3XmNsCsd@vAY)fAeP zUOWx$V{OCMwqfZVAjWnJbf-ShOFEeoh@4wyWB|O$GBv+s-!H1nvC^;OCLQA}4bhYy zab5iQlPAt=L9y*e=;cI>KRNX%&{Ir(*MjV?WMNOu96Il^0&CW?c4UR|P@WUk2hFTD zGYE^8pLyJ`W~*@{qs~*zyU2G&PO_{GQC8`O-3s(3Z#@UWODEbhcx`Bj{`%cAnOmwS z^V|HZlo!Kuma13i(!2*9ieowVoYA`1<&W;AtF0PlaT%b$+dk&4_oCN*b3We~OP)f6 zDCHnY;KyV@r`k&`{&q!%6%)U~F?r~U8e6=qp=H=7AxZ~8DTZOd3MwKrzJj}4B zu8mDo+(!_wzJAk&ph#w`;vzR=PwQvtiaj~SvCe4kQq$AOayp)nwL8=B$B-=kw)QeMJveXE*;?hTQOD=tw8;mm6khFvt;XO|CBde9fVWe zU(-a_2;g1G(Jz8kk$N%eqShA~$M_W(wvZ58BLLy~`p=7|!qu0fdyn;A#A7kHa`Tf-jsmj`;9^ILe@>DL zFX#I6tfXW4h=~vGFF1~|g^FWlenJztDhmqr{)qu!sU=O4y%9$Lc6e;|T!TR}n!P1> zV24?AxufKuo2&1MR-18Ue)ZI0{PiNv+RLPf>M4w5a5_$e1~t+6grJdq9u$L1c=wJj z()lwdI@W-9lo5o3Ko>{y6`BBo;!tF|=q&YQo6;I*iPMv?Zhzh?W3rmEJVw**+MD3H zZ1E^?mYw}xAtU#JDfoa=wCt^zNUUE8u`Yg{B#LWxsZEX1X6B!#(hp3am)6U>`!ZtD z6qBnnRAj>Y3zgxJ&BTh<`9H8ULdK2k#pn)mA_9mhdTyB*kO^SU5$%&+D^`q}fXU+{ zU9bGvgMRM*z8WQ(WL<;Ps4fISVN}C_i>wMabwKE0%=!wv=&xt0gIh*@u>wm9J+Y&8aD! z`)4)HvO)7)*u?)>Ry@%8g^#UxCc(UCKywfnunP)z$7Bq!BBu z!McVgPGk#qXK-{|q?q)Hv=MkgiJB|7gv{+$2qiAn+e+X6{aeUjoKURr*Z(c9#%Kj{ zx(bpg*v_4d*)EIVa?@4I(k6cZ+~h~y6L{h28Um}e7*ANcTJT!Np_k98+*a@XyHkXV zR|Rt%o}&8`7~R2gczc))s5zKo`MWqA8|yfP|ZeiSEpvHhYEjzkl??mSjL8TV}GA! zj^n=$)ZHho{okgtC_YBLcy+>8LANCTH^T9A%X0%lyv?bbW~cvxuHPy`#9AHgvW-L)~Q9JcznzPN7TY6;+j6VIvY zzyk5HYIq-Tjy)V1fniNdT9BA1xjz~P2a?_})mD)MT>ir*&n0=*I_PIW9~9lm3p}7d zQiT~G0^?8}h;?+8(u)npnKfwHqyGvP2Gyv_X4TYm z<_H!A-g>8GUB>&tgBD$T`(g^!1XRQe>th>SF*!fZTWsnc@;NGYd6|#6u4j$XolRGb zZf3UJwiDLF)g-^Y4SOrDi1WT`M6b3x8m2kTa&hDCq=cO14oULg4T z9&2+5F7^lQz^Im&Zv*aaZXL)k!L%>0d88h0pP155w*=ceJC*@YoW5a@n(jo22z@LG zuSg)q_kGQQC2hSC`s)i35nt{GX>g25<(SzU)AqOH^%wbw>l9{5`g8brS{ZTbwKRV? z-U!%64kzYk`sI-bR)NVjYMd#!j|0V~I2i<4))9~(&l z?~MfYmdvz_0MF!vKO3Nb)<8b>I4)4tu+vMoW<85Y0gPc{BiGO(4Sn8~xQ+LznDq@} z1hgk(cpaC>cd4{zCYDJP^S+eGE6h&8=5>6vx$Y}5g!b`4?0#4R+YG)YuhD+EiGZ!% zOXBr8iwnH@L~$A`Ds~=c=0y8FCZ=umw(=R#Hfh(tmXk@-&W5e{9m8r=>?j=EqFc}? zu(Jq&97mkP?hJ<;6nTgs{0`{rsSKLC6zHzPN|ZJ%Mq(isrx;zc@=$cCpr$otezU=j z(3S@X7R>0IG;OrK(p4TFn?as(Vpr!6l;^o>mzL;_%8K}%UYT%1uRLx7UZYMv4E1li z3pBAe&3j$d`|p@cAO$eEOVjf2hv%@|X`oh&r2X2iY})m@bNId?1Vys;3;TXp2y(D) zCdwg3$a^X7@j~d$F#lE&i8p<@#1;U$WM6D2sRk~|r0X0P4km}Vq;wWZ(AbBFTXMo<$umnyIZ)=c?xbJisW-a zzDGjG6d=JGmU8a_rBwIb0&ATEc-2_ayBDy!`Kbvxyb(b#eo9k?H=xtDtVqiR-Wch1yuD$Ic3f`J+QM{7j zdN_)Gc=cD0{oLf9%IRdK*WW{DN%COgoo8RVgfbo)d*N}4I^e$VxALZ88xnfHCVC~~ zZxj=7Tlo0qPsU(%+%Gdf+T%g%>XA=vEa*-7H55&_myQk(9hXqIhcS19Z6(Z!DYz z=i~lGaHaf{;P63JFq{&LGek3gKQoMrG}$|;-gW$hhISd;pI<(um#{vxuZ_R*8Sm6dYZw*G z`TB=#bWqgW(bd_or@ka{Q9k{A?Wyp7J7{qldlEawu@?D1Ld&)jju1 zD9Kz7rGxDjGNXt-?M!iGS1eKs4d-G~pPek+tVyC%I0MSPbMhCPxYub5&|^H4G&ps7 za4?#XYnOmEVwSW{TozAOxDToE?QVR>s@zsrXW=jUujXgw9n=+hs3n_|#H)br-(K$IFWG1l$H9h0KiZiY*6S?9n|!k%f6ZsZ)W z4Fm5!6nsC;(Li3kcvI80g1WqPUHC)nB!vjqwxjBu_TYbC&JBnOJ@b8SfTr)~f#M5( z@KO7D3hN=S`nbq&yUgFbOjs)Za{gUG*0%x3XdGZ}TYEIx5f&ljeg6xF+_xA)heSZI zDC1(xssOxR2OTuj2AxJ?H|lGwOe5mH)cMc-gn?9UFi>V`Cq61f)9NCatkyoot$2Rj zzpGH_+9Zq)Q$m0wZe=TVRSgWE#xQ1s zkdc)G{dFmkfUQ&o^3uw1Wx^~wG`@qyT$mQyqgaXjJScdkXR-=Ig`bh(C&FvB2-YeU z@lxPI?RFwEfVyF{HQauk1r2QdfVW*lRi$H9r-{6e)OiQ>8w*=0KEn<0lmvU zihfmJ*8MokT<6%J?5erpti%%_dshIZ<9f@$W?Y4xSe%gy3 z%1xVQhE`^~HSiuYJR}P6?F)S01^O|%r!*?HA9L(;cIEM|L{%_6;Bf=ogin% zRspySQdBgjcG^FYdH4ZRCU%eEal5#E%@SVW)~b7vcBSF-V5Ye$@t>^uA!}f@V|d`O zkk5B2q4f#vPBNGGzw0S{GCKLIdjJ1b&MR4(V#eI*b~_&$Ex!OFIRXkqe!-Xsq(NFs z4kGaj@^h8FoRzd{qKN%tY`(OL*$ihrzwGv{Js53k+&rmscllFHcnX`xyHI!f<|b^O zu-?S><(A(*5W?Q6j-rca<@zGDB2oQxGc7A{j6|B_y_-Loa!nITIADA2iyVM;OI-}e zVEX~L*ZiWE>(+8d2{sHDQzxHx;ShOIltAcSD%5JC^><2haFfgWPYB}}vI zP`TmVS(!F{lQM3_AAag8496M;pWmxW=izKpIHN&0w?PxLizyzAA4wWrTBr^1-?y~U z{2>ye4oEoXu0T_ zY~K11lI1v!?XpVcAx&_Rf3s6>Uf65~NsioY2n8U74`06w(uI*#(f2!g$9*PhcICO9wIC<~P%whp9080)A zKfjePzw@Y5S+669BpC8Y*jNA>dvh6H%1-1vA6Ap9_ZG^C%~Cbc?Coy_VrDjs$kQ*{ zuaY=;wKi`GK5%93>kk+Mo+hT;0yaxczsw|m=bh=mxlI$-4F`x zreNR(nwLP9UVS!uoKuZ|5$x0&0WKr=HMbFF?4@~F1z%evBC6R(pJnrC1sbeK2$lBn zV^)8PTa2(OZHo27Zg=SzKC`ioCmGs5&Run8E8@(<3|pSA+G4)8hpSWYt{y5nKHrno za$!6HBthD6H$5j*sILt0d0F0#C4Ucy`uS~L**n3rWSDL9+cRvT{Tb*rC)}r(Wgt+p zm&eG4u`aOKrpF0$IG^?4h`%z{@!kt1*z{8c&&Xo($ zE4{4gja^h=NLn_0BS9k~?Wq?`afv`^{(*M$>4jrm>7lmUV&L%#(-qEj-&=N%+sUA=|1M5*Yk^LqR4VWjrQ1R z-1da8(HE=Hls1g+49l&dg}+=W6^8$0=5k}9=~|?Z7dDVw{N;vV(~(*X2CKAeSsExd zFg+@C^A_|8cE)ltUSz#(d#Sr=2$%oboadm>P(+w0PZ{!STaYhqNBqEf-D0o`Z|v)tWxnh+6$$URWO%F! zfJ?=wR53ipKHfjt2us$)Lo7De56z#ZrR9b6ZN}1@0-94fAZuFFJBE4l7KgUcvA|y9vH{HY@|YxQidX9@2hX03Ei$(8FR3W*{cJIE3wRy zb@L`nwvg5NWb;H58Ec&>pgos#Dbss&*;6oamjSEl=2D(gV695=@6L71x`}ph-$@7O z#UJ#q_Gwsi61{5tdQmWDEFp&s00s8})iIR`sr5^rKa?e*Rh@d#Ug_^m1=4%9wUfuu zsO~8PP}=JZbD06ReB2rf=d-7d74#)kZ#Pp+eh_?uJ}rwN)R62IqdKO&vhg&Y780(# zwCtq*o4mXqj#P<(%BS(Y4{S&WcCU8X@-(|Q)S6^^!jR(Mi0b+C=mnApuVr0;DrLPo>x?IbKsu}E21#IQJ{Luq|^MZ75LQz10V8y+G`T6-+ zJT>eUGyz%(nJ4F+zipj6HJgvU?}nIp=b3lc$K6eDe4r@9cO5>F9GLDg5NGOiJRrPs zq8ns>r1CUKHPSD1mXMH$cD;GY#W`+xDCu=f=x5jFkZ`dzry|@1A0BD>k*QrhSP`GZ zv85Kb2?~vL=CKTM`&1Zd`lZ##S%aZV+xB==)`rMF}-h z?BFj1UIB~FhT!0mgyy}wuQsMCmPzZn6-xgAD^W!5Yo7s#q*rpETpg48X(@_n#-1nwDY#_}miOH^SHV z9IQad1&n%?#~YlZxaVDMz;LVDDAkp+J6KWZy7N+}Y^TD%9-9Y|@YjqxHl6^T2W zY=YKbb(pgkU$8R#$FvX7r1{PA8dXK~qMqd{>@wJxEdfVFa0H5+nkcTPD`V` zHjbsqR6GmX*-o=ol;Z(=J&$lHWE(rZi=m@}K}$B&7+T`{;-$kep`wk6Iz9Z!hyIH9 zaamlvw@X$SDxqk_>(q)`S5MDO@4X!4UuaZ8t{J#FQ2gF&@OO)MV0EH7i|}UfhYuR{ zqPs9>h@)~09lCXQ#s6l4$$6xZxkW7K7( z$^sVWylO2(3#;5b92UC%T49)}5apOE>4q&AhJ)6iwue)`dg~T^^;qx}`IhMQ!esr;zT}Xf z{t&yq*XBeP_h-m0_4wh4{>5N!jVy zHLDI;BKu~7kJ@#vrfpbW$m;3@we0T)C9958hDMQVwlIdYT5Si?Q%vPEO<5R7B|_qp`N2gY8(%rcng={XH-?`>_MLu4cu&5(kOR|Z@s zF9=U)#)MWJO+(so`67sEWz6evHq5i5Gww6BAbp#{qQs@IIa!eMnA+g`QCa|TtbKwa zXZVPZ8R^(i0T;I9BqrHvz8(!}FRb*W)_~V8&Axn`4m4~g zjEm#KshiW`U!e^)UrgT#>Mmpy_f-MtARk1reeq=qcy2qy`Ow{P{ZjTv<0n6wCsDzJ zfRO0x-xhidPt!mVV>;vYubNoWVn-{$6IeVw!MO6}+%zq*8Pqu-L8cB-rFpanpJU~3 zXo>V^huB)L7I%{{SxBHcd^g#x8tp2bF|+;inPyh9$7k=|S z0+kR^*U&`33`1&?gjA%%}92T*& z&lCoev@b^6+)`VQUoLbJ@876rIWIiH5-i!X|_VHwtC0XJmpkfso8faUpE$h<^t^OooX6f#zzq?-U2ySXdSj}d_l#!xu1mSa{Slm+}sKSfOK(!yw(#$|nRP0pAAImrwOS9Vf z{w+5v<-1ehdAJYPvEHm*aYunLtout>7hfaTMS-ZanCP3jQp7peeRALT*TWj{)Rf`9gs$c;}2*a3OYDw~(Y_I3igFEK#=ySVPvFZJaLhWuQ59ul6ySV*{$7(+ zrymGAMsMEKd><$n8=Mxs{>j>}S#j;JuxdLeJvam^O5o9Q)f(ea{P{VuTSCf!R!^fe z5=60Yk7cnf6Sua?{Yr^nHbG*96WfUkph*o0K33~*mRzyZo7li_HfixGi`pQfqiW<) zPj<~UrqCx0cC3-al$%#pbWqz3hph` zj`zOaHaYd^KifATn`S=Km|EIYdjv%K-f(!LI4N4F0e2(@Jvto$zP%RH#q`n#rXdeR zi5Hw+7Lt}rT9eg1%tqJ(tiB~U;(ydS(b=3A0aq?nU+i(m9K9G1>)N6$L`Xkb>{L_h zUKx06sTp3f_?22|)03RFy*%wyrCJ#p+}yr9H5E&ftJPBXJ-D=JK}NOc@zgsIW?c1+ zj=^u)T*AZ))P>LN3Sw7+ttc@6a|(pkt){!d7__=E4`QE?8a_K+Zo>Y8z*!j}>0&h~YPG1^jW7*@UlrsUYF?N8BQ zA5&Nvl~uJi7@0|}dQYvf_mlP=t=F5n7)h7P@4Jx=vNL}0Z=a5CGOMh+cj2Vw~G{G%iDrpG~W~o-xq8MQaL|4 zF-HIQsFwPeE-hFoLujgXW=h3|CA#M6Ftdlh1H@AHFYga#=GyBS5HuHlIja&9zj1Io z3BY69<_gI+iQMK)5RoEa+pI31UOHcFfjk`zdb~q$1&WMrkPyE2Y{G$DInXkLHY)KY z&uAxHsTj9i&#B3m7W0HWGj`mbPy8r2cCDC%J^w52Ecycsr&qZp1{C%BzJR7P|&W9(No8TQ!Q2cNcHIZfl_>3D+UcQB8{}=#3G#?tYi^vmiPi(7;YV^0O`_ zKq4*03J^H&E^tv(Z|`CHkFIxlP4W)q&)0hOqTozk!hWp6@U=pr?)oLSN1zBLNRp=b zc?n?dTzP!~|BBeyRzDmEGce?ht(>mYMT9YtfJd~3tnXWERhHOC2dE`U_RXH$3N1~)2vSggwnpGoIM{EDuy@hn_7>l!-_FXJ zox#M84!BE|kyIsssIkIT%R%bFU)D6e#&fZsS`DP~o7_g6Gng-@ZLxK~XF7D5{$Ah$ zxK}7@NJ?OGCYqtIaR^*!I?Vv*X?D1OI5TcqZb*#&Htb4PcxKHj3{aX-8%^DnNwyo_ zONYuIHj_>sll^g#^3xSOBLC2;XsPaD&C-AT5kPqV1|5xF_1TBvFJ?E-)-nJ9s#&zP za4D8g??P(L_G0KLvw_E-dHO!7M!DoFwXcTuu=Kj}HLFW2ik7(^zd{=lsxri_h+#JN zt^&-}ni)uipPs{r57Ph5SnOwdU!91Y$9h)!?m z4!gXMpSj81(i!8%4QZRr(-90GL)}k8*J0gvt7qr`7;2ojK-4XOI6RBZ{MhWL3|@kB{AN;qj@MptIwX5XTN~h zw=5z19sYE=o`bdgL$Ty`%h)0lr|F}y%O^)(LWVY1?w%I16AWYZ`vSQixnVhmVbkT0 zY!Uwtr9fK0y~o&(M=>9w2Vm4(mHsnc8TeRUiLztuu75x<`Y!*)HxVbzl!#2dmK_7? zOMp)IEH{m!I0c~YqS651u93l6KbF&R%INQLo-lQ)e+TcXXDr)7D@D6(;D;=IRIj*@ zVw6$-{cRM`x$6h`9A4AiU7#JgT{h{CEljd17NS;gfuI^QcsjRRM7Za_Sd2B_t9y)A z$Y)oH<|eNL?lT8KmIZt#vn~3_)+Pb#jgd)EF#%{50>F08vv=l302JGX>=Io`o7EE@ zOKNn<9)N0Y5u>SOUeAp$()K*_NoMP!;yi(B7f(%;DBpWsiYi*uHu|Ivtuen~Ily`uC4jLfl`OMz(k2?vshV#x&T5B!%*}^@?!K<*Aj`)P<#u^;5h;=CcEm6~ zMz{Mm^}X0QY*Cqw-o@J=zD?tnbAE>x>+p{Y2n}Rmvm3|7$@BR9i+?9hF20P#dc#qfV0X*#eTgOCi76yZ$P~+-& zk73lubHtteEeS~Sn=AMlMZT=_2q+V1qP&5{gc%!N~L1dYwZ*+Uk3c7Fl*{96!k4*M3phbiY69X#AqJRFicK8 zBFFX@-AlYoix-9gx==93&^4pFS&rKPrso**?xWUw^3dyI@BmmbT)%wrMe64NsCl7dG1I_D<4~D);^Jef`3L%HDbBj&NfbGIXS$RZ8R-hQq z_l}f=lJ8uES??nQXfDFbo_D_I`@MV6&l|DGx%kF&XupXpjbQPZIus7wMdnN8)kXKSI}-M&=U9}{}t{rTvymxg&rnlLoXHXxxNorHd$qF68ZTu>dkgK z=i3#T5&%Wn7J$vwTQ0-^l6O3BwT142*<3Avx3TRF0Yi-EdJ;20d_G%`75pjK+m}xw z`~DGz+eRM#-2mJnaEi>?jvoQg@Jy~15H|{EfG+pbcORh5W7OcwJ^HD5{hXgK&|UMx zVv%5JHIBu&8~Mi`xGdk@J0gw4N%R;G;&RJ%lT<+>(HgtjOApJBA&ARt*1Y>rKntg7Ml#fcsq}I zc@>KyV7HD8o}8eF0lIk;AEFoMjxp@LK`t2o40Jo3?GN9n;n2B;+w19G8&N|$_0Dh6 zox=?LpF@w+5fcvXimfO$;mc}?wp0L=@)Ys|KRTzlD7G6T+witgBn!7HxF}?Vjf-QR zIKZ- zj3W~#^1e%n?Y?;VSv+>T@!jh;34FJzj2H6WzPN}|t)3Rl-T&TwxQ`5SaRo2c>#a2J zynXX)+B{GFagk9TUD2L=*5rkqsBpgvHiN}5_1CRjT$Cbd%yDtdTjCa#8FQcW%!+aJ zDA*-^kskK#c$U7AbbjXvGQO*~?9)?uDo^DPruZv@Hr}B@K>+9=`6Kj&EjQe&CyVJ{g@WLl>jL~w)u6xL^o4kkm7O^7z-Rlx) zK^)Dn?YZO$0`r|9(|3<-Go00oyaJX~F9weH`s@UF_}lNj-bH}4UlXHCW6WY`u=~-u zJYB0H;q`(v!;}qaHqqBI8Qr{Sk9$d7*&jT1xJf;|;?!Py=-V#G} zyTfp#6DFYBuIK2ILbRKgF&qtO@iI=@Co%VEDL@tWT{2S2fGk7sYYorLHUx8raZ`>K zhS3;c;!#~@`b`TKu}R6rnizGx(HLWAogx_AQ#{0&ThmV4df7hX*~REj$I*oD0{@+W z3Bx=kMuS!sj|mz8J|u`+0Q5jD>9^x@)Q1+;srMZ3lfD{F{%W0$!I1~jSn>VAa6N$j zG#;PmUO#JurE$lwl@7<>j>fCScX`R{kL~fh1nl7v!ShBhUoxUGx&cK-QFsmAO^F6w zz;REuD>8bP^4UyOYh|u6T>M}d9+J^2G8 zxnYdFwgw2Rw;EgvsK^5r1e@HWSgZjcqr1lh3>P4t)8|)FY9Efn+5lR!@So4FA_vmv zSd^V~#329^NrAwJ=m)Q{A4`Cfd(o}OKD+3UXo8V0t?h?x7My!_c^S~sK5Zx9@1j;p zh6S0X@WW&{i0OEgysY-yFy-U;C7y*}(_(;hpsjlBUEDCczI#nKu>gp{8(^9R17Vi* zC5FE_4FuPMi)5TD3-ravfqWSN%=o#*z>!*a?_<1~NA>&~1HS@@q%E;c$3u-j0-xOs zkjk@HvuOfDhNu^y&(?(iWWxQ^o5eh8&=Nu<`nj-Bfp0vQeFL8_dFcT!{`C*h`T&Ua zoOrrgKsK^tbdNfxN!!Zks(dAKgGo${jJRmU+GFqZegdv$Gvu9TZlO(z4C1p{%Jqtd z3mWg=g~wbqo_`*T!7R$dd6eN>LEr|RlFx6Vc5)H(ZVv!D1azJzkQdKSkZE|Q4DH~( zGV-}Y2W|kWhM;>am}jGB&n{y2@>%3>?;_hD#H@;J2>d6zn6{fy{OmgNy=j!_k7uZt zFQ3K!@-lM!V#<3VFrQ~V*3xYx0Q}xCGTmWpN3$rwTPaTfvhLpOn8NFi6Z*T49pm8Q zN*Ouc5BpJsmr_(t?V7m&{W=-MX4*|UE-l2OFE^_h0KOb^fNuuA%md~MnO0<`^bwgV zATvAYzk!a~tvs>;^k$H6IH1f61n=Tgv0R6JjQCgr&?m7n3I?8x4C4V!AzT!UeAzI@ zHDq@Q2!y6??btFtiT42Rdj99|_hN|*!6z8_) z`sS^x1M#ADo)$vgCY0_$-#dSK?-HFhVjjAK=0=3ItJQdz43mDkYM&+@vZ0@+0P=tK zi$6+>f690l(B9=bBhi|bHu9;yEXLXCGul>)2{JTiF6rLiq?0F1W>;p+$D_x1xPKqL z?j1UGnet#XPdZ3xo?(HGRO7<&L6^Gl`ElVkS4Lkn5)IT%>f#CY3*OaP-siD!Zq?ar z4*K6k^Mf8f=vaLL7W@5Fp2}1C!zjq}@0<_rr?PvnECRV`t;=5R}-a4=d?9}{z38hDNaCo1SOr zy}sz3v^jj|^D6)x$K6nQ>yZcLQw`S{08kGsh%s%Ua38D-E#^3IG0JyA`$`rCy_thds3^A4DOSWHFtq4+R7n78gf+#ug*q{&I1WWfzTh7}-nS z`4sUmOyT^i@S1K{24)#Q|6GOaRyX0x$z#XHJ{3D8MgnQJDj5 z)lE=qTQzwayvDee1!#J3Z{H`~wPOsjKl?hCjL~L2P2uad#c=GYdSSbaRrg(N>ZO!Z zW8NRd#)X(E?P)Y(Rjx*q+mUHC>G(co%K^ZA!0!>&um3o9p8>{K@c$$Cjr)LH#%=0y zUy09UKsM@U(v4mJ@sLAcG>Xjk?^7;>gSQzzOgTGDQipy$Z^o*UjXA*B(EdGqU*0TZ zr*|~qb*^+#Y*FI9oCWxfkrm_u*~l!-q(2Q4WA32i7X6j0HW`;Z;<1V1@G)|a53xlq zGL3p{`~Aq@c9Tck?GHv|piyWC_wmXuY5ZLIE}{?NZ9)2I7B7_<32fqd_G zA9-5LHOdQlly~JD7l+gd(n6Uq37;TVz@C*!l^Y~Lu~A1Q9mway66Ybprbs)?#BT)E zaM+I_{c#(BVdZ9Z@ArD?875t=qPLsq36KA5RqIJVD3hM}V7X!JzrJ`DYaV^j6Wf&2 zMIE9JTF;j8{{E2Zy;?&)r+|CI|7ldK+KSC=8)d-t*I)lUTIerjM^HUl!Y{P{q}_?D zi_4^s7L!p-0sUDQDVT%4d;hB#^zZ2w^KZ2poq9XQ+X;+M(=&A&b7?Y5>q40oL`B*f#egfAQjFGGIpI zX-qU;G-+w0{gVDJT-1w&7>y?B{wjvBNyh|L0yK}Dvaf#jdcmQ4i09O$mp!!|x(Hm- z*nIr^IJN@XWAXRnHNNW~wH(I48noFC-+5mGdAuL!eHbT;A?x0Ac+TNIjksg+H~HrH zWbe1G<5(sB;5(j{-hFw$My8+j?s$ImF?pVbpD%7rb=bE<#`a&-U>Ah00gq;Ym+mvivDZzD8Med4lDFOaC{{~xb$Sw6 z0Ec1W=2mEQ+5w_Z^%}aG79r@r9&}%Z@}_=4N4-??QCfWAIgY(yvwF=un_WJ#9{E*1 zQ>N^jd(#KqUILe8z^MFSokpR!@KbH-0do(#9!^)z546z8me$hCBz4|rE(7T*`TgE| z^wgT$Vgq2)!1lFkwgLJh9uByb?*%^d32i=%q4yf0Q=*NIwLn|$&hO1CZv@N=&<_0s zb%2{f+S6N0ixDmWq%-8syt> zacvubRb~S?Z(R#z0i(Tiy2j?D5z8_%G?+*3>_x0DPa=n`8@BJ+>!p)=IswD*_T>s$ zZe2w1%A$Kx;
    ls7VA0Y5!LW5BWz2P!d&q3$kzxlh~U^=5+NVkQAq6V@53F7K_8 zqdA{r0zZv!>1#Lkn|xGg@9wb|yI0@S>U9+BXUQwPMuz4*VhdPZZ|9Mz>|=$l%pylA z*95xWCV1?YFPdU-GI) zsjlPfw1Zr3Q{PH&WzvOp-z~nYUwl{pCLL`5lR=V*$+0?PFfh}$N!&?a!3IjDudqXS$J;5!p!nLU2b-~L|0D69cM z(mqTK)<(m9hLu=gT)Vg2eZGPZL$F=$H$>R|?M1FJoKP=|M#+3WP0vZ-0|TjRC@hAV z8J5k2oj~bFJ!E@59&QFW^T?wq?-RX9psmZx%P8baF&>Y@u(?tuT6|`myfp2Ok zLhJr`l=`pdc&gE4C^NL3Z!q`(Acj+VpU+DG7DVLr$++V;+oM(KEb;E(c2`ZauLdB3*1v^DbICpuQDjeSB^}2x1vsE%eoVvF$UwoFd5aJ;cjU9 z3ZPQZ!wx-;{gx)a4)ic7R1si&ptT9Z4AoXXD$RP@XPYsZ;@PF*n)YRzxGLK^O&~kB z0Emnhu>thVy94B5leTCuswrH4gKT*|cb<0G<{fRz16EwHav>~62QRwd*!JYs0Q~VH z@-_FVAAnYwAxisvr3G?mX}qD6t*sF=yP?z$+JNw$NXCq|ExXCkL3$!4JoL9P8mQ zoerU1$T!ZSx&hb;@ZaCYUU0wMMy`DknN=oM=#;|Qc^d0w;~-=EQ7=}5ZfrN1sJf?| zwi>OIQJ={3(EEy&t3w|%CYSBp(o?mftRkHMWHv2B7I#cTL56sz|Usk*#-K$ zeF>mGL;_hh?kDe$pb3DKK2^{?hO}qUABCOU3uq_TWoG=CDM61`x7>rF;rA7kTvlk0(hd8f~%zwaedLuZqbQ zvnj!vM`xmSQW86~ksX0g`9Jq4J4tWR_q4U-<2;kP%SFARTblat_B6?+kp_Z)m;iY& z|HJ{XtHadkF4i(Yw1ej;pYV(Nxk{b#rTn#EP^WtIr>j)|eXpDJjnPCd>YOk?8BMf+ zuSSz$Iwtk6KD>#m`bmm*E7t3L$M4H2^91^iwpLyEazTqWpSHN4zE7t8`2Nl7*dQ}& z+G5*`2-BoKZ=c1p)2pO2hT~~UzE|dzbbWrG7UH(l|EztDPN~NfI`3ET7czZz^_(`I zLGxV97l&LQ%AY*#!k~*4X`YsET|`y=AdCL)OZr#}Sz}lZ^j9DIy8Uo-P*zXnsXUcG zgz^vOg>&vc+83XeB;iTee^P$a#m7pRod3g*UpG7uqMT&`uuixM{DCAiNYaFB z=3ypUjSE3$0fXJpTN6YTlhJ}{jA1v&_}8m|m5@9b)*~pUmV<{q8EA)kkI&RtIKKPr zWAUD}ct9P#G_?Izz^{R(3UJc*r8aQl_e}By2Dh*Eev^*2sbNSQ!>2XiW*F2NkdvM; zy=i)YG`g%)@T<2qCD<{%m-h7fcj?(hj7;~-)BOa_+*c@Y5ZtB2U_9TVchJRw21ajh z(2oUw`;5*>BY8!Cc=av;cAsTv@sCC;YR-`ND)p@~BG;I@1q`M2{BV4oK;CoO_1p*d zB%qH$WV;<3=^((fUiIM7AWHP%Z)toi{(T$+i_r$h>kdHrK;wg_?C{-j9Dd}9kK^e3 z@p*pU*_V&cK3;QtzGLifz8npoT~P>yi%Eci(P9zcPDeC!cY*6X5Ft`4Z(VU)vHi+6Xiqdxb3uU$0CA^&y2UFp!j zHTP#|qriQR;lFZEb@s66lAU4r!xu)g7^ou%+H;MPTRiPV_4I@~2a%mj0GPCaI?T`D z_<2-a)ji9Cc<8xtFF19tvwF7yT6I7y&)<#vu_^*oM<%4B2a8#($BWn)y6vJKG|f=w zdIHei7GhP+M)BknFjR}m3qU6Nz>MiLDU3PoGv|5hJOFw&j9vc$z&=4Y zmmxItLhs~^IMDM8t<3MS0$6fa0?9^&)cM{#6bp1)@%)5wK^QVzGea)7Ipkm-v$x-a z=WCJw@{gmKGc+5()_WhzaW~@jHul}SD0XUGn~VM9FviGiwsQ`TH=qM@MthiDQnY{z z1bgIXJ6XkW0I$G*9<#W(dyEFxw_7ieVVc00fykr&?DL39GadaF085kWxs{=!e8{cP zNpHC!?ds7fV{g{=6rsZN)YHyK2uNBOTTI4@HfDx*VaS{U2wPel*rVWc==;-l3;C&W z8#)gDN%I3dC=V-#W@}$BksB9{&_~WCb^2+Pj`K;Gu}V6#RE(;C7MW7kQcf0i^ez{# zKHSE;-UH8sH)!{D3td3Ho7_5`Y2QRX@1e_Wx63%}qw8^u@TH63v-J#}g028q3%b)b zE86Xe6xXNcv~3peAMaueEq0q-G#l--XjrJ!fnM%#2DMkiqF}5EH}ktzUiq(ME7Yj5u?Pfr~0fZ@e@*;>FZ#d9bW$ZY5DXwwA?>lj+K5aPe;8ym8bG= zQJh4NuOxtc$JDBTC1WGKoN)PF5GycpFP!IGyP}>zUdFwIrIhhjfMEEY;8FnNME$qV zF_iP*#q~NpiC*JppY6Lq&4hQpAHkx}6c{D1B+paso$P&I0T|{0A-(h|Asv6`G3Y!N zE!9Pvy=THT?OH1V7FvLD%R2_vmc9wLHM}(X&5k=7^e~o|7?CZEseGJu+R<(c@UU(% zw5-p)@)}VzFBvd;)7{5>hXHzXa}(!hm&sr{Icdkk!vi)q20g~i;hgPl+WRk!W~+HR z2i%B-(QKM%A}u@@*L|Ap1_m9*&=f9A7^wQfc?ecgL|f{Cyac zjIM2p{jiiuA8G#aKCVtt4&HA$gwh|txAz?HvmD0w;6?Y|Bj7%^_1G?d)1dqGTF3eT z+yQij190>E1(KZk{>(7{Ct`ow@HFKv28@o)Pr z?+NnCm0AMOf-XT*3b&;l9=TR)Hv!S+YuF}wjHiPnA4ZO(J^|caG&n4#tkPnRCo&jG zVc)#wNOO50Wq}4L>=`P5*SoG))4od+N6>I`7uh!19dZhtq2YRr0WKQ=H0BuO8vt;v zY?4HPJF<|0W`-6Q8}R=s7d!aYkY^VrJS`z-->XQKi6RYOF7Pb)Xf2o&H&HKQlz?U+ zhh}`&kTW3zLwHS|Qcc*J1}X$Ei^#&77d3l{cwKN%*kdTxnKl;kgHKO0Au zu`{E%IV#MCpDjTX=p^9SyAVJdwnkIX%{9P!3jm%0;L6vRiH9nB$3@ph1yoCE%Y*#2 z>_P8NlY8rtb75zjNedu|Grt4CH-*TZp2iB$oM#;K69D1xKC+C(B)5qwwA*cweQ2rM zdCN1+q@C#$lP+-&{j>zoME0{>=Q@Ci_Hy%O0*j^RFQSwI%+ELIfPSo-T;HLu&}WY> z+pXbebWP^vi^#9IpXaRLAG6;V=ICYjCO{7cj6QHZJecW?BJ=-a?@wc{%d-1EY~6XD z?=!zcy){>L^~7$r*rX^mO%IgfSX7)Ck&Gk`5F;_1M6zOkjGzdJKLi27BnaXFQ4AT1 zfXLPWo033F9Mqh89$3{~<2yg|oyT+MoBwZ}=TyCHHpwPsfc4?-w{G40+HDNtF3 z1AuSD=e`hyjOaV`Y9=STNlxH1j%xJrr7j7~7X2Vu^u<(-5AuV|gz_a_D!EMRZ{!qt zjpQ89H2_{ub{)pN!!`?|hgduYxJR%1I=Q=3VDrFO8hEW$mRvI zMaFlp&u!4}t9_cIGzWQ3lS0x8m7+B&%t>`4XyJfgcWNA3Fy)~y>pweB}i@N2+U@s>CrOl6x(>lRx0PL zT*pC{HqS$fiz~S3Hn&8Nh29_n|lPqmX6xxve$P&jnm5 zoOzp*K~NAXfLYG^{h=oy%L#;I z0Ix_ym5mt=C-&aQIlEWJS1D7m>^foX{=m>)9QolWcRd80X`eG zG0t9G(RbzMo#-lZ;W5VBDg$sSS}sIOUE*UwiS#5iJEKN6a*@AbDI%jZ8PeSbC! zFoY8Ob;+AW0vUb)JP%!!dFFMpK%nRNb)qM~;L*b93jbE`^*4YLBh0faYmBhZpg%7+ zidBbN;ry^-!2^%0>gNbG&u@UStY-ndiRjRe0vDo}Zsb|K*rE|8Q&UX>z$~~>$7&_R zaKYZoFi!!C4$uXj;|2fmH}AD7q25Is2$Wv6+xkr3*Pi8>{qDnYPoQdIdxrvHdR8i5 z)_pmF!in{+&%_Ubc&cLKap1`Y^8!Oz4G_t(HsV9VN;#{4DT9?P*0K4@GfAtXwoHgN zWDysSu`L6Gn(x(V0m_7x8#$YaSLW?&2f_gKtw8HihOP$PvqRH=j)Y^3SlEKLi)A>D z0Upc##8%=JjhH}lS^!9NE3kbF+|=){@`AuwJj36zU}a*|0&I5dMF($XL6*|qD4wRDocv{)fw zD?GC7?XQ*ejFPPfs!#XNt}nwq*uAa zPUb@}8Y7GSoTP&Suo_>~Ie zvO-S!nW(8?Y=un8`Jc!NwhtuBRhNCXnr!qpo@(X{=AjAlzIR|-jT1@dR->+MINx5f zyWC19(I=9l8xuI@*c#jGZ-8D#K)4Kr22K7ty)@b z+!R(mufXs5eBGp`Y%tM%8pm`jXQf=#`W&k$oiYsu4*u0;-|mnWk5o%J(R^er@#bPQ zH{E49jyV-Q6PkCb`%Ra_RJv;SUVL4Aqj|S*V*Ab4rO)!VPOPP8#H%d$NCu0An&rgr zrOJuzHSSome&RG-t|qRJn5#CrmhB4C5~4xdCX=q{FcNP`)}#wnk!U7$C%)!I;yzAf zU<`I;S9ay&Q>6bs+}G}Q;LVGItwDMAJ4)P*#G4yQDAEPj7@&b$z z!WYRM39BfCD+0P!GJ5b30oD8(gceXG1CH$7c^MRVud!(GZkP3$Z1V20$jUI)i;zU_ zbz|uU(DPzJfOiio)MpGco=F>!dB7(xwbbvA>YxA=`OLilnG)V7+Da4G8&5z+_+zP9 zv1(ODUqM!@jOiJkrfFdFiHy3XkcA8g3_y;BgBYBRD|19Z1|v=eRtxX@Qa~-|dxISW zR_gA#WN$U}!K>w7QGuYVVb5MTxg#Jr_Jmg?A==8?1c&7CDhYJpiDe;yg$tqtXeS|= zc>CP*tbUa%HTPIRFT6K+QzH*Mpf&=q;h2PD87Wjz%l~FXsW$SMM=us>qHCi3GNB^lNl2fSY=tZS=RdiRY^TsC}^o-cTcX;b8^Xll4FB zW4Lb|uQP3<4*sSNnnoQ&D)7BGRdiSgFwxn1g74dzV#7hDrN$8H3 zdgb0##tx7h57sh%tJcu7M}xi_{`|(vw|;Cmxu7BdqVY?s4TZ9JPe34;*+u{_5MW>t zhyJ@~Qhg2=BjA(mO=3E{-6DWMApOR-PWUb!XAE#66}HK6acec(=y`RUvrr@ujK9r8 zUnMVFfjW*6BX_JChqxm9u<&BPVt7~CZ5CyH6Pn5E!t}we2+FE z4bA-{meyj(0xme?Agd)0Pig=d#U^JJmn2_WO1 zoKNkcauS#ccrAw=$!*q;mZPra#f2b5V55q7qAt)hXjw`+ZpA)jp&ULF1`YUUfoBO1 zipudhkv#%VqWeO$-3o}Mr7KcdcyDdF7hke9izJs1EYVP#QWXcl^WjizpfNbT7TU@Q zz~-z!YFn(Qwp4SrEUIqUQ(!7Hmi!C!!W%>YESpE7g+^FtuM8*_uWoe>USKITfvt>f z$lx9;S#qwn7i$_v2rD`gqTjnRj?vpJhaQcP!J|J|*lZxZBK^Zc&}urcq`)#qs|CrT zS@X8~m=~B6-;0lux`wt*&MrI}Vm;)@H}$De6yU1b`tTK7?eAH_y{>AvCtP6MM0c}R%CAKPDkO^E6uG_J&z+j=Nd0`svc?8Own~&L1V)r0#P~a z)h9BAh34sC;0YfCy*zTv^}lp)Quj+g+?7rvOFvOLgu?4bUzDU3<)ZXxe$T4REAxT+ zp0j(;zit&g`Ng8op)53qq3-DExUJF8>M!Tz+g1%!OL=aTPXrpcE|A`HJ;UOj=1|wg zD(EccZ|b67T1lww0BK%^ zdm$%ao+I3uDLoW+?xW7=IlL1pj&Vep%K*ZNp>2dP1ByNTQSIZt1zsT;qSV8^v>)4+ zLWX7s$ugW4GKkR=xk^c3sVQSKZIex4lR-zIW#&MREYWxh%C&t@PBobHttOy@;ddb; zpWgwTJfmF3XpXyah%qNyOh#C^ud!aO`d-L^!1{m?Ui~EgGI?#avGBw^Y}Mj1zX;R$A&LPekz!x5m)o^FgM_l&EL(B5Ba zpD!Nh-NCWcrT;19C_tm}1X0A;B^} z3t0gu@xz)h-!5zsTDDZ7Vw`;r?@#{(^vhcG9*FNn z3+U+4EPimjc!qw9--l%I->X`t(X>rsYm02k_kR01-M0l;4i0?}H=*pQc-BfI$wz-~ zoM*ok7+nZ7ku5uDwOkfS{zvFDXQ^-0W)jf>zKA4Yy8>-pO-2@wL{9p{GsX)P#rs{S zcWkX^FU7koLa^vmFAMCaq(2LmZ4?CF#+I6`EUmuJasv0YnyrQ-fgu6OO4Y<ZN$Hu)+1YWA3Oix8IHB3wPvTuH>9^$EZR1!mZ}zwlMj-!gh^Cv zE;%RKqkK@dbT#kC;jPpLBb;92I3xl@T$B*~Hc82`e&U$CO+j-E^pae~q-$3in~dlq zp)(r|Eh|uu9%3;TnP36N;sWB*4@n{=vI!3nXB!mxCD20>3)jDXEF`?Ixr4dE3#+T&rzYT1e}s`&OF={AmvOp5P0Vl*Q<+nUVs;XD;4f=hbn zJUWvEtr-$YiXVMn{!IKJ{$Y``P^|h~E9uZ2U9lCDr|30TT`Z_YfEvBG(7dFPHsN{k zo@gSSiq1d}Lm!Wj5?zsb=4^graf9#J3gZiKkizsYk9;WnuI$RLd{h8q802KSP7y|lZ7jf@mLZ;J zKdvTUgcBo(z1y6(4zTilewveAko6t=FPYr^EM=dh*Qz%qpjozZAsoA&?8hr@0QDu+Z!uCAndBk9ue`Jpt4c(nukBPp3D~JsT@mD^|xl zr|*XX?2EYok?O)2-)4w12(vi@_D9PwLDJ>LwOt7u6a>`MzM!FY$mplApPhZd07B3a z%Moty$v_#52A0o~Q8#JtKYU=#O2dsU?6}CN!ux{9lKud!t~z+}3BhC=0v>K!Dg&QA zzG`)39OA*D&HN7SWd^DLVLy09G=grtpbZaZv4mE#*uvsRL~|blRvvgtSYh~E_|X-# zpq~03j#Z?Sd1ri{E&ePOyh=VMx`r{L@Y(CqJKh$?6Oc!pv>X0mK?qL}gT#I85664V zb1*ik^Vxc-gMF$j_Jq6{dSe+E3Pv?`LLWdkb!_pT>OChzKO^8!t(Dz-&yh$ho-~^K zRx4M;3o`P>RGhs(7cUZG4shnRj_FwfTPXnuJlJ^eIi`<(ljWJc%;X<5y>LxL!n< zgfd20JNHf`dug=^Ffh?|&S2s}cok3le8G`!DH-c^@s;LR)y<+3TTTGRFD2Psi$6#L>c_sRJv<|p(!3=- zx`NNeqih?ZK29x&G4^6Q^b-rxE)(#i`o=r+9CabfIn9$SSd(vrd6RlMDh~ZhVPPOp z+k@%cK`VS$N@smLRC^&=Q5)~n4s9u(>(4osQvDLYpB(IYLboTKmZ?WJlz!tVR-)l5 z^)l;MJ|8a^8!O~1;X=0BmQ!B=-DHi=iEqcj#QA}R->qaYpDKHn`OB*_kAT?QJ5WEe zmPQY8k9dP~=jkK*Hkv1Vp%rhwKJ##7o*W%S7llVhh70&i9eB{wqAmJ6n#+hnaGjvO z@y>j3xC89FvMV3EB00XNw`%y;?=9E`QE`2s@_WMLxhQ)5kh1f#@5-+HG0WlcQH(w5 z7&>H@Cft?qHur|fAR$DM;vhj2xlg$I7tY~$5!UXtSmMQGAF7Ob_C+pYGFWAF;tgP* zyC(s{yQjMRUdcBG!Lxvq@AT#+^7!M~1aRWP;5>DJEZ##V{qXt_1aek9UI#qWQ-L+k zx*bm^0ySxCR%=$!ZypZcA9(#3H-zlBWzb?o%32rrl5sN`*{CbPKkN#mC;Ys0fbJS^ z6CM^BQe^zbaNR#VaE}FGqo;evxSrp1_D7n}cDgXL2q*{o=T&X%M(~6~OPtr~nXP22dJ;cIsOC-x0Wt3dR!#pnvuc zA#nCYSmD=R0Q3A7)fa(jUi{5HYMOuVpZzzP z-lm&p0sg3u&(y&y8gssbc0@_=H+13k>``!&*~Gsile!)ux}~hSSGWCxrZ4O;F7%Zo zfxeaD`pm9m#CEz@PIKyC=tYvcr406Zz3Ij~o^(J*rBbt$_##uSV2TPL2xJJT1Oi6% zDK8$ZHUy6Kd=?Xk5P;%N4;k0XU||dP#B0nGYIC69iO{&ZJhwrsqXuh?vvIq=yb@sV z%aATwwp7)7S^QYDrRWC;0kCm)_cktB6%XgiRm)bZHdozbln!JeYl)ZD5LASC#By35_tjAxcEJg0X`Lvzf&N0H8?%fFWMy*s7#}pU|mif=`jmO#Q%H8(V7pR2S!?&jesI zfW{@s=E#1p>-3!x7<%rkC7wLq}M8qwCJErF@h@>FFqrRJM#a{zU2vCnn6ea)$c-zi3Mye}YZCVh_ zt)u>X1diw%n~J8Lo(&fxTWx0+Ja}lUmS}(3v!Fe+HOIbPk32Ja<*06(&QsgWySk@k zoO{oL28qS=5b@H5@O#(r(v!;~F23@mPl43I<*D`0@7r`HIa}rQoqq3}+Oqq|mSq+# zGdAg6*h=l0OOLYEX*L?zniB;&k|&PuBdl7y2~CrM`qu7P>*`Xx-LaHF@a*zh;Bq9{ zn)ss4CYcjmtG;MJs5|?{$qNvdEHVD`>A;4P$++}+s@=1cboW;Lms5L*aL7pp(WPa{ zXSvkSBqg2_cqgNLk|c|It&-wvB4GsX*OQwtcJzv_VKu0jEja*Z@hF%CK7K@(af$)* zg-$_-F%J@qES@|H0b3$OuZ`rGq^~Rx;Hf8RBl92Uv9l$Jd72|F z(YS1*A>kf#7SRu_%S-8+fmMp4mD=$1^r1~BEFi};M&g%EIQi1w;biFTC!yS8K@^yD zJ*Prw9sz)(d;NE{&ojxhn5BNg>qITESV+6jg@E@+H~YK#3q7vR&TnR?UD=gg`8XBH z>F@EjBj3nxB+LBGi*jSO|NbSq@#f|q>dN1hUD=f%tpJb+9ml`}TuQKHe1+aoUQDnU z-WUobuwn8B6hy1=OxOT+2ahrk+*2;mOxys!f((*kz9a)b+~Xb@G1Sfd{EeXyDFv

    GC7ih?9ptQ))3+4*3(8n2?asbJ>&?6e8S$h-wV`X>$*xz?=c)Gwj20Zvq;<1c=QZP^2cWj>n-5s~K;*>S%)#3bYfInc$$Ex6^t zM1JVbyLFV|dtFJHAw#k=8=IBW&XyJCV1S$~vB;K6h6(}>@f9+oJP=R&)&byiC^3NB zK^c^UApD)}_>QE6y2w4tXU0{=?sF}&by(pXv&-%dN4*~%tVqv9qYRKav>7-$_I(lD zTf}Nz4$Cw^&t8@;C4{ES^hD$eY(84>aVt{zKAIeK_(>_?d1xc*x$N4?yjHI}jdv4bEzM1+@RIwxm;i&Itnb3=0c# z($mERraTg?^1_c(?>fjrE*xAHuDTL-xrH7`Y+750JTx=*Y16FPvDh#%`bB5_hgnk3 z*uy#lXH)K;?#Dmp)L4tSUdutd_&L6sUOFy!#pquOm_sx1>j#4y5_>es%sA=k3=Hn> zcN@zpRo4x(!`hUq7+=ouC9^TzxRBENld5V7#U0zT8J}`C+o4c?NYliT!~9JXkY8xe zY!1nynEni@vMX-QS5}oewR%TFU$Kkv7F{ZI8g7A zgbb^rmK_CxWze-S@6xxw*H7LY|64~fyZUDx*}(kUjQ#_UnIhH}ZOV)YiiHZAD(K(Z zd;i$ij``TFsuJCP!{8+Oq=XTgxDYaEZsozwQJxUV<@RVZIXOlq90 zP%Ocn8U(wjK;pJdffA&bVbv_cBpFn{3|oYk+h^i4 zzLOoT=Hc4+J0pJ|@$8ey_K=J{ysEaVH1RkKaGrqpo=kB5U>pz_a*}I8-eV&+We)$9 zQu2!Iz15U<`1zupoiIXZKH+O*CiY8T{ldbc`E{m~69DGzW$M^jjh1J}Njmn)u> zjZtpCZxuHFVj_THb&>W}hJRLxoBq*$gq(=oKS;VyLx~r!zZrrpMd05cdtJs5f*fNr z?o)~Z4o^ySIpnfbL#2q+Emo3rjnwTy zjea6MED1UCB3#s5|5S@i;nSi^A0YOq?)>|-YgMlnE&`7o5w?GBDF6~=NbH$o7 z=kR;#5WZcRE?1=oCpX-g@~bJJQ`oY&2O&zsWdD)b<$FChqun-C-L#+ER^3oq<=hj) zy0`6xhX~Ll^V`M6xwb&pqDcx9X-GfY#X$~wdUpeMpE7)jkZxYJ&B#4y@jE3ZI@yAU z2~!jTZLL(w4h^=dbmC^;i${e*|8A98DT)N2Fv6=twABr;DN51OmQ~a9)Cv6a zGV$sk49!+Q@z%f3i2IpVHuLIwIc;ByNhZ3TorQ&S&^&qyFd!mlu6F4NT1X`Dtv&Jc zz^jBR9Fr097bht%u_1+yGMujVL;UHzmOo)*Dm103h62-!itH6$FKfF@Jm|V=MeCNsSUS(K$~OE4e_2una!!uPg9 z<$fNq?1y?k-l#s8OqC2@OczY*1fS~e`ie3=irwAn1IS8A!zLpfSO6nVD_XN}tBMJX zNxQ4tLkrs>Ck=}4`S-Kz2!Hlw;B4qw@sjwZo6}0AD|t_1w7iVMy^qixlMTq>jr;tr zT|rwT`Ewo0T2sH0$vPJ(sJ&I_0Zu94hG6#{@)xNg!PG1EkIG#LjKN|5D54#*1k6NC zh8rILT<^`xy^CF4sM`KEnD~N2bBQuvyV`IjRP4=iHg!0A)~XMfC%4U@8UB6NF#DGK zq}h^nRJis8>2Z2)H|kX|@eeXes?Ak1_=J@FZZ_ru%n7fnE*F*AsN z16PiJCrN(NG+TlBwwS$ly}7J}5kTc!4Cb7n{#Z!6HGl4MBvDje&aUppG@I0z6&Sz* zB>o>wZ{bge<34Wd&N1DlySrx$6Jxr&nXaRA7@O{z?mEWNHqDX8;mGOkqxt!~zt8hW z+^@T@%Z9pi;j@_ffshlir}Ri~2i#DMMHH`Q-u2;g>@2*yRpm?TOLvA#Ne8P2@-~~D zvl&E;a8E=P-sMZXgpRL%>?++bl8DeA!h(WRW5~u@0J}bjQiCw0XJ8Dcw12DZPkmdB zH0Z2lUU!8NnohEg7m)t#w$66@!-TxaE7ksdd+Hm5N5@ERzz2 ztp<`Uy*Ly(tGs(g#i~bXn&F4sUXwAi`1ytF(LZt_aaF$%Tz(m+lxtRtbjV{@b=deR zhLJMg1Y=32RYT@^I3IAHW@2o1d-*eu*V6qzj9|>RhFRD1Qqu$1u3rl8<@0c4K zC#uW2WQXr93MtJ0QtZ?nP+Xn%&+t_+d-&0@nh@FJI(4FrOWQ-dH-k0SJ~_W@_)UE+ z$x0m>``3?sz0Za0P>46HUqmi=n&3Tix^zH+#;uAH@=-{yZd_DGPJEqCDK zC873Ub6_CUaZl=;BsPW^6iVWEu&31Zl|EeEM!vxe4P|Y9>iTY8ZVfI7+UPrlni(!# zUiUqOJ8{nSwx1$$`*n49UL1D|_sw+pF8Fu{Geeo~#pLdx>4_iXr|u(+5PzIVQB>5t zA4uZlFn7RuWtjjFkJU-V%<#=BbX*wotWh76)}HcPvt#a~nB0w5J;MEJmi6~D;wxWk z(In$v_ojEj>-s~8o^(MH4*hsY;fimQZLm{OGXhOq9iH+Q0GQ!J)+nymYWMEzJJRG= zrNGG6N}^Jt8e53Ht|XZWTS0SrFCmdAvuVIDQSB&04-)7Px_WkfwaBn51tXz(n}O`sV(MdBzcXn`imJ4qT`zlchTFy0 zb=*N_r=2t4FP^rg38&wZbwNxQ0Vc^$x9fj&o73K+rjz&b{{X7BGq0~Un=6dR6x*O2 ze@<7p(|KZ@oABIf)g*}|o$H>h%Rx=imNPftTz5?2#5GW*-IFfY{h5t>-E}~h)+%s4 zl1eA;`3P;Qj@xFKghBbU8rypTrA`X-^Z@2|eZ!aLmsLE&7>M7aHt6o6a-!#cxVZW? z*Q#;7S++$PZnvC}zkd4&MMs)yT|%B-COyDMam&FD3OU=*s9_h?V4geWcMy=f@#6EU z7MxyhG{3pGauUpxg+X`COrhs}5;IN)bf0ojTYZ^fze-*idgU({e+8UQrQn4g8Zr+Y zPH!=z+uYJVC>`5v!n$qdCP_+uaHSKCRo7jnrMsxu?AKLEi%bvL@2JXuc3j(boIU;f zM?u9~9b|VX6K+t4vKK1TCzKWWPwWl1Ub=qcX4tpM&(vud+nfXE!x`i2rr_r2k5a|+ zVAPY6LnBbY#a#aLKgNg8fUMtdeFM@H%NYZMgWvw&az%oP;`EVHuH|&%`Eaxi@ea@) zLUVfh0-(J;4S6*doT@|fu9CPwILqK)@9>oW$D`5x5!of7U2y;MH`D0gbCIq)jW?V>~)!K4ZOaNdk8oc;$WTSt#!>%@yR!dJ+w zBB)gY3Wpowk~v}IGMcfNaOw?bfx4_(ZPx5K|4Q7r+RU1CB5HAVlqb0_fUW)VG4w42e+>*$Wk(kB`%AE)DwJ2fV*B6^2i#B0WW#W)TcyE$c`caqmJ- zSD?=POX{K+*=zo%fUrvmqznLfc6+-N9c@4b9Q>~i-^3UG7&T!>RGoHd8thd-kcrD8 zMOk?g5K(6YGh_DuQhuN5g!Co|~>Df^L2H|sNH zC1Dykd~81_MUEb~m4Jkqr?f%f!8RUFV$QXve=ioEc`2get;V~(4EHMDW;f3IhIf<7 z=kEu2bWwJZmW}5BzP{}-?*H26zRNLp6@tqx+%@~}5joR_T>qg!j}bPh%&qR0k_>Wo zlHy5stWP=g4549AAb1@49JpYO#sJ~aMPTUnhIUZZ$&%76ZnU?i# zSv(mk&@o~eM1$!yCB*C^rlh>y1w^ZrjWY|x>qqmN_&=B&kQ0xS&NL!)!B=-op4dvZfzHAI)Q(ascB7LayXGeIdCqXDF>kgpxG%@B_bg7)-iyi zA?`>M`R-e9Rj+bSvT#unXh;OLoUM`N@G_3!Q-ffzsIEAVic=vE*=@w>)1M9azoYRo z{jfB5`E_11*4m)IwI0XCGxb!9o3pgHrckFe9=%#<$*ixlG=7bVQ$S&B)65b6qUZBu zNtiFHv#Rj(8=auDfslV%e>k>}BYSr>x<4Ccz^_JFgpW*&3IjJyd6o!em3?RAV|G{Az;s-_HhmaZciTIt4S}z&!jJ)mz1Zgf+rrA`bM7R{x{t%JX zWy3%s55qu%Ybu|xkawHpo^D+NF?|%}mS@2eEYp+t`{BVbV4D=19nI~zOv(kt`LDd< zvBI&l=(8g8T`}j~lS34JMUa6*fPpUa-Crp}JUuFfv;6_%( zepgB#_U@szzGy_z+KLm1uw{R6CZ+XM+H@fCwpHMUIF_?ixXIWDaKR|0ib-+ZwIs_v zie-;%RJ|&k(|Bdnpi*ZkHa}qv1RhTJpL}2p^ar>Ubo)83{2jjMeEJ<|t5t4oQRy%+ zG0cv%w69m7@8MM{ol4Y_!KLj6Dj!D5v&&AeKE;MpLL{AyKDuy=6}&E=kX1d7E1dp* z8mu~wIdC#KT z1y8IyuRpII`|c!Wnz3?6wdOSm@RxGgGAepH<>+BoSfguf{ci@HM-o1nNJ0eKUt2m} zi~?L=n(4o6-*KqUj?YjGM^kh@3>bh-IJNZk8l~N8Kf}QK83|5o+;hMCtiGTxH7qrm z2H4H-cxo6Cj2T*TZj>5Mq<1_6*F=y82#phKGi_7a2Sg#SYjzS;W>mSV-sE9;Gb-UM zHQNB$Dz(O_m(<42}nn9CJFvJ56PQc0T&uQcD8+|DiP@a%6qxwnk!@HF-7Qe+)iPAJZONdvM8Z2 z+JrIHZ6e^4^mhTxjRVH8c3yAV4ZA!mt|rQwWyRx<)?V6PMxQU%Ue;V1XfU2fef-5p z0!feYgU_@do;QgeUYxz9l3 ziBaryXJY8;Dg&@kZ<^U4&;%ybvKrh1{5meNJnU6rpP+l_^I^!dO!J3UtGK_T3u7#E zt_niWIwVjUqq5|t@It8~VbVxXRkaVm{KWYW$i5?{*cG$wRW2AFthcJaehTYKe5wk1 zE9Vv<(5k}dl=uW(FlZ_h&S97gH|RF@X0=m#_5fK{I!?0;7OO4&oRO>OuzRk|OC9j`;AZzE)Y+4o;WDWH9UGOZOJj#^LD zV|J<#Dbh#qL%MM#xVmO!XU54>Gx0cz&! z>nhYl^jUB8VW-TDodKOrC7+Ale(8~;%hQ7*%H7A32^Z>qOP44S#$j+j zQ65V&IZo&J(5V#gR3>0S`t7ggn?N@)pZK6s{kO5vDw|6mN?zRy<<6DnVqwaax^K7g z^+79M=60BJ8vX{VdNnud8+XZUhFz=hi{6#CHaqymqMk4%yvCFjV@ppsd%V`v1^Q!D z^u*`*;BS@@#aB#QF~ppmZ5=?3Hhd)d&hX~&7VbM|K+OC_rX%YhLyY2i5_^O z*5FcJb{-AQQXsxe!&8cqFs|+B=!b^twRM#-kNGm$WIrfdO=M-?{{?yIE&;4e^lM7KLA{O%~ zhfo4;8hC88lLa>PoQP`thw5iy?_EVEbkNY!l?#a-+T^rqLmV!gwE}(+fRR;cG<0ed zNDlpW%ju)YK(m9^3u+45(r~8B<$$vi4SIf%Nlp`3WLNT0!-bI>Jqt)TmMO|=u&>)N z$2d|~WFrZxF>WZX49#GDCxg^Sr8iU55(K7W{nhUcG^QzUrl}^!KNH5EEuHA9c?Djt z(T5q1QCYU<8stwOityqLZJ3SG_daU^9#KkXwf!R4-g{CqV=Ql64ndcpgZG1F1~Z>6 zvQ|1@C=TqDSS9_drclmC$NGx->F9g|I7NUTxim6A`?4mUH$=^rl%sX#Ib(15MfPal zG)NB|amdMBM@agi8OrlobmbQ5j9(gxbj~qRoXyasEH7}u#S|;_a&i7PYlbSj=&^xu z=fl#g>QCyg2Hcbi-O3?WFudVjCV@BTxw zLkCwF;cGeQXxfQUjhcY;pKYhQP^MgJ`TMW*8|tZQ(kHV@gCsT8p8S-h~OU zsC?r`p{WxuqF_n1UgD1?vPFlu>z5*^hO=G#$u@zyT6@6T9 zK+L#ubD3b*?5>_LS>><=jALTdA_%9Olb~Sp#cnB50bf*sxeNo@=&;70l<@-C(N}K$ z&%NRk71(4-!eMy`TRwLUA(z7aLGZr5u&?_IYBroCa>6MLx1bFmrtJXc=sZQgE-@lH z;`SAaX9i`@Q|%f()$O>118#@8!nP$EmEi0erKMXS`bi=7SJXldV{?AhETqY*!ve_65?$Y*MbPjE#J#j_cda&wczL6g)(qJnLB`ly3oS_-) z_MYUSL%RVvU``(R7kmda6S*!y*-idNLmh$_4{mUW38FP7%%~JU~q*RWo zKO~pnTO4wt%G)3Ip)RF=Z_XG~jLhD{?H+8ag-)TaLKB6NgSiYpLJ?Oy!*?52lmrR* z5l)?3r=-9+`iLGGcz5B@6;PaxWS?-q6Gpx#a1jC4_4lwfQQzwnZEJ}~Bt{qXJqyNs zcFni%HErW>KN4fSW1>LWr%&(wq>WVsastjtk z$ARy%ov(uG7W={g=I`mYP%(x*2WsVL!ewT^5>&P3_EWoCLTv&Ysm2wkAagtOcsgT3 zYE`5SNF`_HZfp-Z&Gre{w`b0!oBZ9FC3&Z}~KG z->OSNz9h>^of2g`k?wr~Tiona@N3|q=3zGg-dreDwqP=|)JGM*mF-y(_RnY=i@i%! zEXiaIHLaiMc>PyTmpc6XSH#A^kymS#Xy&8iET`6|f@W$5*vD0oljbgh{vmDT!wikK)z2#DqZp8E8^i~m)N9KE z9|0mo1^x9puy$Fcfh1ykc!xv1??i>Lgphzlol7P2qeR*H;f+7xm7xxlNM{LG@DO*? zv6jxy%5W|GfxEBe6WQ#MM?oPE?J;U0!%S&n>Dcz;MeXJ!$7|YF%#v<3{f(yMGHcyd&&{P zM2Wx9XW^_064bUM+%f~)eVM}ye}!Oc3(W4)FM9`YrRtxoJ)GcUSa?D&+2l7GvaWCL zBF+fjF+}0j){DvW1EI9e{{F* za~C3}9+?Bi-X^lEA&C_ zpL}u}fjv&W3dr2qarl^jGI?AiqJJcQdgi{d11%ZKW(G!+S%}eGP-@`wyx0*oco>Qk zTx_g90i={EZO)Bcj!%_p^k{ z&M)&Ggxa()OEvCGEZ}f30Z#8f5b7OO!MX4>KLK`09d7-s9a2>#Zbz4TgHXSiE}e3E z93*@U7Iw|=G|$VKXZbJN;s7@@G|4l(;V)b=zTBdD2HL^9FS33G!kl+TcP_bW$4+y6 zTPI%ceV3Ue_@SG3*~7x_;Z&&Q#Xs+f4@s~5yJ>k$5fUYhOjx{sQk`8g$dk0_J<^IU z;e;zPBYd~(2>>(^X=yECp%_REDbD-RyJbZz2g2)=j1^tR$u!VR% zgYR)xd}uCuFas3G2y0k2>&Ul$>V048DV}fwwe1(SK}*A~OC`ObWi6?SPi6ww@rcS? z*L<%vwl}Vtqpg_{6CN`#E~Ti@hkeMQBx=clWd$8sdclIg#si#?n%*%YG9Z3+!6 z;4w=*$&h~_9hrg76~zQiN7OyTi*a~DdLEC#_FFYbGqwK(_Xlx7Q|~#)w^Rj^O8Z;6 zz0$le12*McStE01xLZbKnCOW5&SYWBj}qe5A;sroe* zL02KlGIFJKEl3VLisJFoOUubQ;j0#-$s2k)g7%-Qg^N4l9l~T zp%vGgZPRI#tgc!Ydu;BoVu%Fxx{VIU%K2f*9qcn0uo1|r zy!tBWSsJ8)EC4lGQxoDlfdc|IV_qKwNL_m_*j>AVXeZ=U!#1@n3~*sJPW@k5yQ5`p z?Ov!4yJ9r*J7cWH5fmGI)u<|n9z_-)jg6pqk&qYP zIn^}ux~}Jk7h0TGw*RIW4K5HQc3A{CzA+0#^@Y3jNl^}r-G7;SKhbgDni1%O>-n5h z2e?Abj=L7xJmxDPT3)O}2`;hF3&Qsm4I6*T*sxx~t8($eQiN#bg?{p4_9}16sZq^l zAHXyANpgWkRmwQnenr22Gi%u%sl6vbtkjFmLazziABmSoIL$m;(f>|?p=n@GqJMJK ze5tW+l|x~G)jNFAYMxGJZ*I2-CvUqWzpS=-b9l~qvJyzG7#J?|GWHT{$D$Ow1LTcs zz@c=;KjIujv#dY2^V}oRsN}73kCv>E1SAapC8sDQ^7%o&6Xe_ew5u8u%dG8Of_Dp` zCj!fbfit|Jci>NkEb_Y2;|J>j0in zM!0YhN3#(0{n<2l!VhX43+FLt;_dzLNChELxr)~Z+zvw&37%7i$g%@H53r3Y_{ zwd%D>v5a|btgecv3i!?JB@lWS7N3ZKOs-mWVs_sxVOm8gDzODe%*J#V2tKEvQ)afLFqLi8l`l0AiGK3!xppCXcTzG$TcT|L<*d`5 zT@Kos*_M@6TP;EnOK{*4p7LwjzR#|`v8y}mGR2eP5z9kFo|mdW9jP4G#Si0cpva9@ zt*!y2ob?i5i}^yMn#xt&cFm;XJ6;r<^AdO6id(lNAE{~J42VvTjLiOhQ5BC*)< z9h%i!i0`?c%rkwy)I;d$mhi)0Cz57~+EF7F}OWEJ6( zWD^8WB#n%@{uOe1AE_u864}E<}?uzUuhh-y-0b$Icl#Sz|jZ2|CX>yqa^?<#BB9vU``V?K{O=-m3W5~1_ z4yS)^{PD`SyPt8Iv=;{MO~+NnYF$8%*z@LsGum%48<)2R%pZTN$&x63d*Xd)$n1_ds}??{aKaT|8?y{n;vyxFM|x;Zukj&dymw@WW6hQt-WPA)tT9wV2mwH9*z}H2 z@YnwK!H>=r^lPtHnc zper9J$QS;FCFG`~YffMePjGt~kByycew}paPj1R2`DfZzeV@FODV%ijC?B?e-cm{~ zh7rt7kG~d}=W?*H*t*KIeEpdmG(W4pqnM|7`0)4WCfE=7jkV{$*j0NrU0v1lH+VS- zp*9Wv!Fj6JG5GDV38e=I+T##yntH;|^=yLr%V5sNIakJEAJcDa25(n&WZjd=aK3#h@{xOvHs83qX*H;FbGc+{ zT^5({0{0B>!ZaD=6`?-eW^q|j@Ya5dHpi)Dtp!pGLpdeu(=JFEc?X#>@T`X;W)#uj zfB0%TX{AoZV%6Hq%IKh?2lwJji=Rx~`P?Ud{W z9)m9*@SCVyhYfK_+^*^dfZSNw$CP|q^uXCgrgCLBX*=W^kO6c}IKE~9*$OopsD z=>SX8>MNu56Uw!gUBca5|FT0LGb=ehvUGjF@Ynm1A+jwEOe$xhNj8rhBQ(G9ar!Y8 zr>o;41~0uVJ4!^esTz6+-M6J^Am8lI7-?8mIJqP5AnjRJPduIT5~jK3Qg*tIawqqg zpN;(sVqm|pocIcKWXUzisW zj|k8W|Zq_%8jvL;@mmX#~4AAg_ieQH;Is@3E$@UHV;9ZA5IcEpSYn z4{64J*GF7W*^z4)`l~^0QESzA{3nGsT!_~#Kwm|>$cXk@6aUTq?et&l-aS&yEF5Xd zN4Jc;AY0zx@@vU6Z;Q-I_fnHOBYa<;hgPGDyE%#4F@fz@RZjNh+n&8<=yp&04Oh^i zZ*Z^lTCuCBT)fKyl~y5tzow4LUWg zwI3BF8|&RX&+1mP9UM`@zcV5y^e@_iG(Nnl7|Mk2)VYa%X>FIZUe-AbIj4vgbWGc< zoF$O|B5zZ*hh*EDv-bi8k2!ctkGAPZ`}hp%Y}?|=58YfTPmyqQ8&G9oy5BKi5kF=u*}wmFB^{iPv2m2Xtd~?V?p&ps zZLbU|xq)gVNLw56N?4yQhn^P7b(W#&-9Gp?UW}n_s{Ai2KT<^AKZdkF-bOWTy;8Fe zb05AaI`GWuQH*)zF3<*C_aBBZ-3Lh#>Ggz6cj?gveM#TV7}}QlL{a;)WZdvy9q@ws zOOtg1G=P}>RQGjAT1NUqn{ikKUGa4$*0SIiUO|dO1^Eu!{ye*Q%P6`6h+aST{EjD$)HvQlzxHAs0H{#> zDei-mGh`J_h-nVR-fc`&Ik-ZZ;s3pNLWq7n@m7A|(H1r5bS5xSSRT z^$6|2XrT6RX3@%2%-+a#sCY5Cyg`nvR$ae>Y;Hp*7e}~0@3+tAb13Xr_kv_^-dE2n z&{atNEhX3*0TbJwd$w4{JbM?SRwa)kft=8a%S31;{Z8@ipi}S za19*V7p;i)`&Wm5FG<9(Slz}ZWOjLvtcAq$5V_okOo)Qf<_Sj)gof*#3H$U}iVLq% zmSnMkElMVQTQLBf<+7PP)cvW~^cnYJJsO#7{;hEi87|^!NL6p4E1po)a7j$R{1smC z#n@$$3EE7Mh{%J{J6zJsjg!_5Rkud7hU0sElEnt4hw{UH25g)TM2K(Z#&wPfZ+#QKXWzLuLF)~W! zLW({&U!Xc9E=GJDWt=%>=jKzwPK#HCmM!v3E-~hhktf5M=&;=2s$5)ziucuT7Y5mF}(WSBKP(&U-G*`v2%;O)SmKg7c(+ zRo4~qUpfrNp&#EV26oLr?r)uuF<@a}t%UEwdOwEoTSO)Tx zi(MrRTqJYPiPJJ6{B$uDs*F8z)O@gGH_pe~8=QZtF*nk-g725vv3r!}tC6WE(YE-s8Ck z1&0Q;4trQgy?OV@T`PvqkT>y0WqFTCUa4kw;z{cF0Ae%TusLG|Z6n^h0^{zR0|Ddh z$fn$njgo2BvYMFJ`k&4Mvgtub5=W=zhxfj?lRIp77renVEU}m`kJz&qoS18MQ5cq4 zxL{RWs1aRb72cALd8Qbkf2Te7577jk?GUqv(g9f|GnyrH0^Sp zQCJaP#m#9K`bG3`R)1_^e>X+jpl)DVr}@oWqAyZb*hSaE!9;S+_aD5EoZfj55w3L|d40i1EV~XNl zjwmffsliW*QqU*(Fo`$5c3{NUt34G?3_z-t@FhCLf5yDaT7R81<#)ki8@tMGnrzPo z2X0oN&`2rTVi|Hvb1)zIG#**P##@;+?=OkwnxDg zrFDerkH)t2lIvY|{BO`OU7$5F|7Sj7kZKF3a)(v>NggS=lu)~5dEXG&SyEanK<(a% z?Y?uaR2WvLvsA41D)LS8 zL3)WYP5sKr*IQ@6De(Frw$V9NbT37sKC{kD%!WZan?blt-BMJ$!;fxevyE($?h}>sn(vxTK2@?+s73t%j8qWy=L4h16=u&%>Pe`ao?YApik~X-{#DkN` zQ^8YC$k>e=ff~Q^jt|C$ojp*+J!&8}Qri{+L#B*DFDRaM$nL6oIZJvmO3%Q*Y(&OC zSr!IYiE!BZe7+Vq5J_J5zS~5y_;K3z_)8m8JIQdNu8-{L3$I9gnmN2|M<(u@O9K!H zg!-DAJ0>kM2gG+B82EbD((guj6p@Ddh;zwbW+saZ+i+m;pX2Xj#~o#2>`f=*|9Fp9 z!!HmoCM-}Ctai`Xf0cSXmZaYH-M`u@o%70If%#3Rt&#zJ^8>c4eDcmmI~1+bUxSTd<*rRu||pX#}_+QuSmfj9^g7?yO9h&#VXY)uX0*c1q||Zko;~H-!X~ z8N-%K*NfQ291{qpS(1tj|N8#PVN-G4#w@qtv7>YFgcK@b@ZDLvn{T7r;QjEfV%uVG zjm(F4Kjj>)&?8*I2=zPL5=y7pF64Qp=$3KsXrv$G;{2yLCAXzawp7c5PQ@Og#V=5f z)u~f9sN~E-U0R**;X6Bc`DX@~aDw)n2TlR`p!&(GZ;el=6WnNb|4_ew2lF!NlTLou zUe8}z6 zB6huyu>Fe(0nfCAi55$oZH19q*fQ`~6YS8SVT7N3i3B)M{QHo3K@;}!8RvKNghO0B z{B)sr%JOb9)g_?6gW%{=%o#>>P^4ZvDZFTH_Bk@@|5oSo*w^z9kC!EX+j=<6qP~{$ zy#Bw|d0gz8Tq@qEl0eo)l6fMocmmJn12Y@|>e zG6hK=C^!&O;|EK7^*&VEMmh(Zg-X!p^&EnbdNHTG)Th%?ZL@MB)gS7(It4-^6)`G z5^#Z1t4ob29r(VX<&nF2#aKK|pb=U4Ripkl{rAW83Sf`7Zj*t!k6+^)jH^C3UsmBv$ z7{UdaU{C?s&VgzncGnfH)9{3s$2T}a)ljXhPdl+TGt8Diu?E?18c1D7vZ?db zTh_XeX!!F!5JvRVH*FAT&vu{Uwx}qoQ6B%rab^!g=#y^hj{DOU=#K4!F66~Red|H) z2hcKA#n=o4HIe^DLV-#b>^JjTJvC{Q<74F@h%vhdbdgX!V-#$K4V+l&Nd6IhLGc0M z1iB8C__%6JS#{Zy`27kV;7`H686FAdx69UUkb!UD8K8KI!Zd1Rfl4@C@eB(aummY|T14PzuD3$9@ zi^n>W%cGJ2kP$nPMdlJ`5Mjp99wKTnGB_{j4DSNHAhVWOyIm*&G>7~|f4Qd^(K7~8 zlv_rN^oT#`8-kY!|HDMrbjYO}l)g#mJ@#p%fMX+a{ek3CxPj;*Y_+7p}9 z5YdhZYTMl9mGeFguElo)^%Y$hPI&&7Ui0z)YWHBSi>TF=nF%vy)h?FlYqRbAdPdt% z54%hO*L`a`se>2fV^&!wyCd@%WshuWH;xZ&|D|s_kNloY>|*u-5=4=t$8-Aoc?#wX zSUX$sT{7>xlFu;+D`W-P76t6AP)iQR=7|hG9f#NpUsTJV&x}@-oBC&5XJv~{lN=pQ zbp{90Jf!!TKmVX(=)kvO$=VL2TCcBhw_4j=Y5oH;C5y_X@jUreOA zWNEj~sM>PXLAGx@R}Ca)C6TDOuJNa#F(jfvMEJOQY^{~$<_}0;m(OiP5r&E{14EIM zYgrx^+N>Ksy=*6~Bj*EGuAp{g`e2{EXT)%I?xn^YAjGy9#VguIDwAn&6EmnI>dr~= zW(~f2xGmT~Kn5OS9_hF_biPEUyb} zS5ROv=zCRWWeWg}5k}hG&;*SLjXzlV)zIY{+9sc!NnymRBe}8JyT^0j@s`gSx7KrY|YdNSFt;kz*>`C)CCi6tr6YTix9*787 zB7!Y1QCx8|qlh>IDD!MbP?WsHo^H4Pi8;5Cz8s*xP}x8h&ig$57FSP>Rs@_LO=@7| zW70pBt)x;ufELZo%7V=)zw(*%xt41wHJe)WxKN(H_0z8(71+=}T=Z5CtPj-Ry&!PE zG!csDmU_3~v(MFPKt1!;c3n&A+gj^fC`&~b2DIkEG$iy#CvydnP;$9KL0a^53`Na` zoj-jR-Orh<`#c05>e4KK0mgbc)$OE^Qpzg>RhgEFQndPCfqMUK*cRwQSP<@iDqXv^ ze&252-mUg{%B@T3+*{gqTiCvwT6m{QLH#WLlT6K4%AuX)Rz#sYM z(WP=B0kI|)B7eixyqY zr;dC3I$60C*%pp+Aj`fOF{4iJX!wjo33oNQzf7prPx7E6qf8<8ub0eP=_pCv%F9t~ z0i4~Oi}f6`xUy&ZFf37u^OVtu(yfE7C^ybPrkI0PSZOspCq(H<^Je znK&%N1r9HF=?3MdwQuro6P9=IT-O50AKJPTH!tm2-{$up#;?!2JrO-V9@FL+T*q())Bfd+56v)zM9oucL#Z&r zLtUc*)GYATO2!7P0~eOk8_TJ<{5uD<}qVn7FiSY8s7B$SC;`_Bx?23P!JNck& z-$7;@%|@`kn|UUf(hokKWd%}=^(N@w%xuOTEnVBR3&Ci{c_iE+Wk&ifVVNbD^wA7p zFN?7QBA~MC6Ad#Y+={VnC={TwdY>H4gPJ5_9ge<)2h`3eusN_H*B@u%v7r`YQSgJ- z*U06_npwi=t$kWe3mh7ZFlDzL>k*4L%tuej>C*cOzr+A;sa$K1cO?=8HQx;PYTVMk z@mm>Bu@s2(F&oqzBM%Br$XX*Q$iiu#7V{sx*(+MriuB^S+*e8ru+;C7J$)ormkt5A zP{W+eM#Z%dzMqI7qQkr!Vc>%jI=d@=w@UI5*&)KlJtwuo#j`G)mdNYA{bjMKlg z3DDWk0_2)zWkDw&DU61d@@9uwVOR}5>J@eX*HuetgdekLZ;qy2LF{L5H2T-jYoEIu);y&Y z8JL&Ck_7ah#py6uo4hxeEIaf?ydTCfXYYUHfz-nq2Yh50f=nuP5RosP8s z7GtAJxi-Bv{yEq}9U8I+##=PD{T&kw0Fa~F;&IglhrEv24F)wHAYisp&^ZG!Z%e&a z!H9>;Yo9?hwO5yWdMxlAlI->uv<}2eIoeP1aS(El{gKl|<&DSxqvaKnAjOIq3G>eMe`lLV@o~bee!d13S^dixXgy!Smw6)zWog_c_D9Y z8z;9VgUt&SrZYwyswvJkxw2}zCPU!QryaM)r$_SCtHIaQbZdCV%DEyRvI?Yo+B9rP z_>D)Z<~IcEJ=@CbR(Ym)C)LiR1c>^UM_CCun|Wwt@cmr!NSe>zXYj1gnhH{65v|ho z>W0K=v;^uFM4Shsz^I-#Qw=S=QEFda7XA3`5A?d-27wLIAmiSHf z@p(JXs9H_|+}G29YU49IJXD)2RJGXR>K9(s@S|7|$BG~oJa4*$jQB!34ZnOf#1K!n zj>{zE3JswjHU^?+@bJoBZ14$=OV_xr(uu+7$d*P_Vz0R2Tl+^vq)S-q{BKn!5+0+eal=hc@xT@Iff*rvB&-cxsH3tYXhnv( zvHxP}xC=$l+&+-Y{d__k!MH|u;9z# zFjY^St{-y&AM1L~B5QCx5)E2La4ot@B^$a(Y{(mGjRl*_kzSV#y+^>3UM+mTe>MxV zWDbgbL_}=4tM8~)yIr%2+}#+6!B9RDplEMzN|9P84h|wMwuh!F7Juo>I<}Fe7x+*^RY)gCS^tUYvyC2@rcC2whIbuCGnwm{J<>4m z)|A1*xuKga+WlOID8P@KW5=0X%T?AMT0?0$5FqH5y73tvxq~`~d=JMRsV&{|gf5Jl zsE9z7445llGSWCZ*wHwqXWu-iD}}#ZmIq5{&W?CJ$6St>Vw}pMSigV4d=Jibw>Hv* zhE)mvcFeT?2Zw#B0_yFqnNIVd*YjXdZ*vFcZR-U{VAAhvJBum1cO>x=tkwQjD}Vn2 z;-z5B?hkr$fB*lV@w&46U3%H|7`E=-PH{84s9pI=rq1A*pEjZ;^+K<6g{{)mF#5PG zQIBeP3p=o@G|hl&macwpzow)8zL@{4CWMi9*V33uv(=Q<)J&9Ks?=7plAI&9uS@!e zt7@~G-O_>ZWbd+B2g|O>YG)GPVK%d5qLW{bh0|b(n8B6}jX0TD1*{T#T5*9hM|el1 z(XP#sap9{ARf?dR@C2z@IO(z)?>QR{5cdRx)guq?LKE7-bL>$9w7_d$+=poYQ}&aM z>y^G1s9(rYNjO;-fh7A?z7aO3dIZNJnWTQ`Na zUX5+s9w+{^M7_FoBt$liCE|0%_j}}Z&@T3RW{VjYmiXhX8n8}{g9Z9J-(YTTxqE3A z)Kw5{QD#G2-(bHgFaE^Yet+*DVaXCFw04|yz48(icmFYF&s?Te75TtqHz<>ag7zPO zrd~gdZPKlOF z;_=18`rON|-lR3JnKj3KCM_tY?lBMy4&DuVwCHVynkta&7i@!D-YUQ`5GinMGT?Bl zFZ|RuHht^m5QB>ds%I{6L)PYQ|3P@cZ9*en!teBF&D#u-DJYPlZ z)RITwcWy4T;k}LCMU)F|m7&CoSRfM^vR+?O<$S|cht@i7jEY4~ibdIi7NROA%|W<* z!xPDZE_#)lr@Q9^j@0L1+{q=@x z+0g{tvTyBb0zA(Rgw#02Zm?NbG>k-lvy06cAEj3x)%{aINpfxz7l!+TX)69(3i#jb z5ua|Jt|QooCfJhNUz&l%ubGGYQAY+;Ala1JM@q|%3{Hrl-*bL%>a2li%68>bTSou% z{>yg1gZ0_)jbY2elih!7ioRms!^8aeY3n#;?wIv@nPbq|nkhDh-spIU5zlv0l|Gq` zq+Eq%E;@dvU5@m0M%~u*r6SdWH9;od#-GbT)QoIuf>xd+o@qg;B4i;9qL_*Th;0!3 zv_NNesJ6CU^KGfbSEI_EedjlC@Ga2{!rEqjj@ov&1ciRZI#C{&!yMqut2U(fq$Jc= zy!=h-iSMZv4&Wl|hsYWqoh}stvUkT?HAR}@>i)f5SYiy!SC9Zq?yLqs5OkYWc%R}= z5(LKgJ5z})+ZP2T5iq#lz$Rr9cEYuHak7)7Mqqw7 z*(AH8nEqJ3@{FKkvcT+!}cF1IJ zo}DCx@9>O{e|V#PN`;L^%b~}TJu_cm{RdN*Q+z{FKTiXI_KcGc2haWw&Wl`~k0yW4GV1$F zpgG1;f5iOm-s`urty(PDs+AkclUwzSljnMR%4lEEC#urIT2L%L1nXD;GcUQEM#d_p zZzY&oGx<5y6Zq%)v3fsoc-*j1#8d9P=HWj+;EHt%@(tsd>(7-0)=yobSvEvh-9omU zItlen?(bZmf!+3w63 zfIIUYu&JMuZ_Fz9$Sil(+sjRrSketG9^ z$kA@GU*vm;@LO~7Gm|4cqXlTXX_ihwyc%vH2Bn@Ls`IjN|A6R}DL< z39q1=FlJOtl9@Dg#E+*Wb!?x1ZuZX6iv>_1C}U#G(+rU+0bh!y>2T^N~T>Q`85)a0u z4@K^3rX*!}#OGoGsa6=ZBV?%GThLhFkW?R2oKl9BT!%B>EZgl6uVwS%=6Jz_ z6nj~^44rqrq8T{veI0Mwbo!dIl6uYlY}n?W{&co@>63DnzyA&-^wMTjh?%8#5)Ymk zgBaNrm9|r^K~#9ZrnC?p|K<6A40<(*9AnE{zAPilkw-`I9G@=U3;s06o`U1nbUC{# zG!K$gCKvjBXSqy!+DjlhWkHi_2cs+CcX3-jj|(IM0aS(aMRzRWMm^41fDMApE0Rlb0zKa z&@zOIO?Fhb1xu9&VIoa*9T*ZRSrR_rj;bbnkM2O8e?O+x5NPra?oCRcJwl@ta13J$ zzl!OklI;-Y@cNE$&vOkN4RCZl!~Ug=sg@(U(Slmt?uPPmFpzkLetOVzeR>{#OzZLd z&bIZA%-(;y;q>B0FitJr>3mcVDDMpJZwFPbucC!;Zamr=iaf-4C+4L!M zSpBJiuJi`C+YAgLXKml_f1Gu?M)(IGkFEn3dK)G`s zpco#lP6wu2g4emXuJrh>2TYpNW*H2ykZ{^`*x1q=ba(W8+<|5y5z6|_E^olPDEJ)? zOyW1U-R{OM{5HQIXQ8cK%WCWs-6${j@C-ci4T(jLXT*Eairn>pD{q^4EqvUP5Zq}5 z$>B$&Xw$7aOjL2^BV>^BNb2y%oqRQ0a(p>*5*Tjw2;&E85gAecZoa9$h~xajy|M*V zb#Kh;pB0c*4!r)=zsu4)!YiTB!@rcEvJnqC7)vopvnsj>nI$=XMdm=r=PMPu{3Nf* zR|e9LX@@IG!^SyECUd0)9#_49WSBm!nL|g^>L_0s&E%!U>25J}J-Fi*kFj1R_|bU5 zil*8f-kYS(p}?N!Wp~c__wc>9ZRYtWYDtF}NT&(E6Fq4x?ccjZtpFG7-ZsCPay+}1 zU=z-GCx^I^DXJN5u~^J|sg^(OQ=#>PFpT9V_3w9d%9Q<2I>K_l45V1<%-wZQgiB2O zQCtT!LwY{FaAqirx>5O((($r1vl(v^6C&i}>;aq7^Bk0X2zN(hyK)WM0XNvE$B%g$z>9C@atN`b4f8Jqsvr3Y!i5qAQUkJ7(|_o9s1yqjKu4fRVCUF_g6rK3VkZhawc zntJ@Mo9;i;LUzV|XI{wesHUGYbp1=EX9cYk_UAEI8BbEkn}Vu&_swBcday6f)AeQo zlM2+>_h>1iAs?E0;xSsHzEwQV7c1*^Z7CMMrfrCp%CpRYzwGfOFFftSH-CzzvZ7Yf zePMpiuBq3GKFN3`bjjD%Za-6rm15x19y;5tE7G^EtZe30ZZKO03#u!udCx#6`48BU zG8rmlEbv2#oPSrYJdE6@0bg^q=@f_#u$Y!ldBt#TFDouCCdRALwuxI|cjngZVU168+vZAcoNiQPx#h@IIz$GfFJwns*y zb+L8j2A&w}^hL89_d^DTN~BYxL_d~Bgh-lrln!P15;;-cXyzbVov`?i7iAeF6JF^3 za0w2QcfQr;-mcFv#|^KT%0cdbe7YGs^+H(c3tmF$%hv$(-I?`rnbil)wwW&B#3Xeb zU_liMhng1bdy?doJ5@Tz;L6`(rMCcBX@aeK}Aj$>uMZ;r4t;8=7wdE73? zblEaP$G1-@jhQ;6U859@7*URZ8tK4|tCwOjc$K9O@H95#s}NSEpRJ4?PlzTT2o5C4 zHxj{{^A2;k`VU9x^CF(AdK{zojy{)Mn3nxqNlY6WRg6}R;g;oo_60=bH&sc&e&7z`OR zB&Z*!r>{~^_*7H{Ij0IbW$3rNBCT9k#@~6Qrx1fgNbJvbR;;)4;MUR{ed$-FPuTWPbdX)sh^2SiGAlGa(J4lqr_bY zuCb>8BcENqIkXb;|1BeqX6effQNU!-(>?dm(>%VDvD*IY#_Hj;^X!3fATCXlF?(xy*R=ctE~T z{LZ>>E*LXtK`Gv}z2X)F-q%rx|WD3!^GN zsy1K)$suG(>h;Ky$n|n*f_?5mKpb2R_|I)aH#4rky2GDPZB&hO?YyQs&8t6`J80w> zbE2pa?Mz`O7X2paMb!oi>zLn5Bkh!Q2y0tHl+5S?xmlUcXBt`r1iZt_4=LQ;ue863 z9ULuz=fkSoJW@|e=Y_U}vjS{v^Vk)#JUC}x1B15oI_@DM$o3B>&yOAJJA;ICKNx2= zNRh))p3;byjWE*>nw^@C38aqOT(O=9p07b0^8?~tNleFUJFEDG52#_~m_;b{N!lT~ z8`5hB$&NpIlREAi9#lv~q*gH3mopt!S0~l*PhVvlV;xFPCi{n)AJZHN&hgdy=>%SE z0rEMJATPAZ&u|DWiWJ|F<@F5P+y`~fGs|kqwEQ#SIvAhwYA61FW8alVDLa7yx@L&L-Yly(O1Bw8>^kk}eW@6|R9k&neN!U%ZXi_`#DDcSP4!rL_c zoMI6`ZI9C&qwg4p;mcw}7{m5jmL*A==5_c-+iJ1xl6q~ANm`@|@R3aor0xT{<9xIy zFs>pxcgduwp(`tQh|5SmNW2cG*P)v{0(qKnW1&LAn#?hZutJ_%B;=$2-zS04a?9O3 zBB^=SlrxF~RTRXF=7HBDTV+J|>Zl}$;5<>GqQEJUX|cw?=J<}ae)k(jx-0gtFUXhY zrrk^k9t8RiaNt9lCbo4YcRwJ#YCo#eR?sm_fH5qoG z|B%Bt|GqPI@Vr`@{ZZO{ti=i%5;e>pX5p@V@V#72jU;O0G^-rk&TjEjf3i6L-%WzA zw4k6U)TYhNZLC}82|Kn&voRB8W5H%9fr1VDv#G#@s;fTo%^T6$S650KpJ98@NBfwu z(5_$QvqX{e!%^I{Pcl8Jxl#ht$|XaG^i?OTE``!=9msw2JV7eWsqlnEmJ(v+{Ve@0 zm46;&(_-<6#v=CxmBw@rrmlI(fLK5`iK~xg1L6d@3iO~VpLDZ+W z?(e)%vq2##0ib;_PIv#Z+!V@);4W--p>sK+QORg-QTJr?FqNsyD|1Zd`7BwfB z5n*ZJx4pydKcc;0j3RF$jUX;PETkOAoH-oqRD=&|i7V*A1P=iJLuoPdoQ=dP&Y1!# zYBA3%nQ>J7*mol-V80?LdrEavoB3igIUqR|?#`FBzkNOhE{V>vT-*9qoFxPSUinEeX{Px^GSZ+-) z=#+Va|A+=(C5`#m|AgsTl*<2xvldYw?Y4t~&S9bhbk7Dn3u3(AiOO>|?44OQ$a;QY zzwse=IR=;_?~E?_FjGpU#a^O^+KT(Ka8qHE0 z4U6ctk#*bGKf5L$4#yil0SsnT7?Q%I1FUpNB=!d;cbcRfdx6VT>l;-AIh_3>tHDW+ zd6TyJ77eR|_POHDG`$v<>|S0_OGkNn0%wbBwDpL?qt4Wbd;_*zHHEME9iEKlDe10w z;vCCJ?Lb61*xH77cp+rTp0EInQScOsWGzE~0+2d^jp|OJL)<@GxZ|D9cDx+bE|q81 zDEov=yy_-zScM;UCjP0$!&gTU6ws-N5?;Lw#~~6%VcEWffOTL~Y*Qb;W>G+*#3uQc zc~~66XM3C#a>c>Wm?|;Qt)0L;8cVd-&fj2@>PNleSuQ2@EJG}hdH1CwATA!>e5$H4 zh*(+6236+4?_kjr#}~aGyqA|7eK@~3bVgfN`cNC*(yH698?KtJDgMDdIHl!+$5VlFn`WxzhDw*Q zddk8XmipIKefyI?3$C3{Q-G6QL5UrHA$$t%HoDV3R45Y-LGbpm=^W(JI?l3DO*qi+ zCH#*$L_3RZYp8Uo9RI2nx9|LT=kNgpJe;LIlO>(1ZhhK=2z4ZvLQ|c2M@pS9AGjWs zZec?m|GP%0lhp_pexxGHMjKVKV9ufF8sE)y`eenEfi~ zxa6{XVJptPjx@&d%)9B@X3NvUV#rq1!`V0NHPk;xoXL^*e!x9`elORz}UX4#^2Ng8ujDDJ1!!p*iySd9|ZU&Hsk*q0j%pLwn=AZJD_nuuT1U z38ha4rgufV|B7=j4Z%EaYItT9f!s5N91zZA<9Qg~@dYx4+cnz@Y$(;@_pFl2YmwQJQO1KO}$?b+14S? zk?7Hzis~BhWQjSt26RLIooOfOM3f~K1g*b43*n451Nztw*@BMR^Z?I5UtK*ld{<8t zUw-x#e@^wSHJ=te(YaC1vIIPXdg-R#mVLl2!Kon%4pOR99@P&x$MMYSP#Nv_1)19o zwXu)-o!P@QjrReR2?>MsJXfM=fY0lC(Lu(#I_b)qFVAGQ&iCz23T-OsR zb^%;W$7;qH1`X%dbF7B<^Q~J}JznYC12k<&I35+4!vgNe_B)3<25sNQzL<9WGMj@o z4>VaKcaVKqiM`+StqBB*ey?{n5jf1#W~ZZzPbg7d6QCu@m7gOOR<0>` zzn?M!+mwK*emWFo4o^QyME?T5l0~tIkCS;AvTJ#I&9Yqn0^hjBPH^72)z67(E@MuF zf;0d8uQJ@7U1yks7JNVqN)V6Bh0P`hI`)t&c16b*zJX!rg<{AcF1+`$GI+D(u{n0- z0P-Sy`0o#O6x+4aY{xtInD9l7NcSFXfgzA5PjHi zvXa1@N#&N7+cwZ}0536C9uwf|@xJW@3kF#k6a$C?eXHSIBX&h=t1Ep*T@+&7HQHfdwKec za8YiOs<|Uplc2Tt3(c!C{oc$JoIbJWi&PXT=R59Uj)dK{Ve^btYQTFGJ6{5Bo_rw zwvb>Z>(*%t)U7kFSD6$hRz$TeFDI>9FCY|jUy-80fa>vNRCd%##QpOyw4IhA1wLf_~66{c;k#P*i>j;9;S*3${d z#*x8ca+TLU6~$H7SdWm)=*h!rOGqoT;oVh(3gF@LpjpQ-*ZtoK6UPn@#|ZfC{wg&! zEXHmN5h&w{6{!81SYA!}mCUpx4+)R?3T-kPMgZAr+Ndoy6TJY&-T6yMxQ4cf0HZqb zczH^7LxIjKqO8 zwzWli75!{d`Stlp@!+8l^_{>@H2j+;ht^Z(%f& zGnk!S?mzAJr1+1Gvdo&epUsqEZTgi4LHz6Co4|Z8KkL0|Ld7mBA&x^lBdhna&Nw}C z#3=QpP933&bpc}Dj_4Q(zT!wvA;-C$PNSB|k3Sx3G`59nt48lKV8^3n3B+tIK*);wPeL+ri%ZU3k!04(DZw4W2jx%u?2MUJ5~cBf&Y~4E@l-d&D+!el{ShHC&r`ZxT|@o~pVoI^lCBG*Q+B?kuci zJiwD<@&gmI5f$p6;`}?$s)tUA>NeQ7rg%mM$I5jmf&O9zR$72pV%gp{o`>X5+Zf!# zVA1US4F8)cd@jlCO;mvxo^8%1vYX6SX3j+aleHo-@Vvd{)-f#U=uofept@~lZ)?r* zey>J!8B$`!iP4v)jLFZ zCflbH(H36}Zf3TIZH7oYLb^U;g|x%RWPq_eQmdvE>u*Y{`O;_=$iGjy$bQ+IR)m_u- zS_<;)j5PF&2eBkzb7UN2$`F>6P!;;7xp!4oQEMm|u^vMG>c6 zdke5^R<~8hDl>*Z%nO#OziRMs7;~hiC&HvtQJ4|ZibpssKGo&8_woq&f=2Kg$aInM zWq64CPS=nY%E=T%MZ|9Z5#;$18mAbP8}=74QLl?X%s*pA0s|-a2SzflIV$+8Qlc~G z&tXzHvO!B^P=50^hTEKPouOk}WXlgd;=P|>L2L-60JtFg*Kzt7-{yu4iMNigN|uS^adB+NI%fPzGpEEYoe7VC}uQ4jS(K(t-4 zuV)YeVsA`1uwj-?hL7XW`W`04ayTMx?z6PW!Ck+Ugi`b)%;?NhXaNUQO9W&4lhvbHJGF<3P%;;3Wj`cm#Jt~3@@l(?-*K_!3 z(Zrixc@FI^(XF@MJ|FSHzqtF@(`3SFWp#8sBP`Vo7F-uxxh^-Z&HJVWW1GMm3L*axfNE7zb5|hZlf>{>62{KENr@c^RmFbbuJuY z-M$ZFJ*Li?y+)%B)-`}Milnn z6GM>n(J#rX6_bL-CH*F@3A7ggZpxmIE+y!}a}@KR~a?=lGPGd2yV93p;X)G6|M z@d$c6KIOx;o)tf7X7D)Hk^Ub5`ED1d7V1cS>HcPO0)t|Dt9yqSmq0agpN9`a2qp8X z@v6vh82QuVAIeDzA^GO7V=R(E*ct|=6$Rdtysu3!UT<3TVAuv}LgmUhb$@mAhm?_a zA!JS&c|Lk()oWyo1Kr`GXf?Hrv(6Y(H{xK4+~wViVU~tP*|m($jdOaD`Y{_$wk(hvtrmU~&jw5#8V4dp?drlHu@b zrIKrzheqbCjr=brw=LBzZJ(H-#;jBW5gaGP;*U1U3-noEtV;+&;_kOS506l=eF&un zDbQPI_oGcj6MF)|Y|&o-fX|oqN#;UQbK6}lP~Ywvx}U^s`1JUcpe+0}gA$&3He~w{ zO`C|<6>&L!5p6!~8;8&bk^;G&vR(1_Z>k?Bu1{X(nsBF!-IdOPyF?prlMS>S5Rv2f zuIc_&X%)cwkbBYp@jk+=fgq}Q+=#Le)E0X(!4URzT#seT!2i7gB1NmDE<{}VGm5{f4INi`d~?FKg-JCI`ywi1{bAW}WQjA1$R z)3iQdGH1j1qm(5w8m(;ahFc)OHZ{~^<(BlokUUf_kU}BY*oClQM$j8IC<_sJbuO)( z_WW;@47^09US>Lac7ir(>)|&C=xnL63atLPkVYqS_+&1zD~C98t|`u64~(+&a^ zcq|7Su%&ms!k$CdGjHDjXd}Yhj`boO76VPkdT-W=xZBB1IOkl5jWuTR)(CQiMZhB$ zRr5x>@nhhnre?mqV)*!bD50|a0ixatK^8#31)gyzFsvjjDUA?j*$W^wu?2C?G%Tcw z?rHXDAKYu!$I>u{++c{?fbKS;2P}Docdm4&r0HS9JtJrK_@lvsDaS`|yXPq=o?hip zLn7oZ{~VC58Icakt|*n*Uqv%lA3B)Z)9$I|_uS1;U8G2e5d{qG7v(tBKs?8@akSZF z38Oo6&f5%p1Hq*9TWx9(p0Zi>f3K%6pcSci4!mfq_kGPaYAwOrrgv*| z>^02{&V92)wwc`%F2)gAD+L#;7vR$tcel9PPm%cAtp34z)qm(MylzlDLkoPraB@F( zL;yc_>VQM5TGnte8vf5<9d+=tyE+I@4uyhv2m}{0{LdVd{C(d5}UJDaEP zFF19_Yp2~aZEv(T1=puL$WX`ZvCh_7^G-7;=!)2&HhDj?U7>wPa&|L1r!LvtTdUHb zohJUPMDu^1DxgoJs-xQ(1QmRHf40vpfBf#xol21(N~ald-9P`l!r~U6+z_KOVzS>n zn4CM(p=Ius9k==Td6h~xJ>!Qia?2;E>ra~tFRysq-MT{IR^-o;xW7mHlxLh7{nByE zokIQ{?K$VJ6jrYs8HrGg1HaKQKW%hc{DCYNYj5iE_ zOGZew#9dWkdA;!fer_8F&VPAJE{ury`I(U>Yo=`|Ep-SIvs%eJp$lEv_u#a|$4?h; z(_Yt2u^~irb}`dMnihTAfMMKH^T zQf5AO?PV%}3HJqXIC6yiMNwt+;*pAKS?H@>>JKmyGV>vOX+5-&W|Yt$t7k^xnr&@H(^H|rmUVIhzrT!|WV^Dfs{8w4YbkS&`vIKae@6g=H@N5k<-4{a zew#$@@9+?0G&{gCDQDW9tb9$OApi9M2Oqr09%+GS3ljL&38uAy?X?)YejQSCC{}%e zh}>F8_qZ^c}KgWYSq7%9rv7J6{KP5K;N?Ca{d)52kW(m z?c)MaWv)1BW>-|#hWrVf@?^O&+=>ND-ZlG>JI1(J{?#|fyMVwc`{?F8J^2K?=~Byp z5HCjuS&J28ACt_C7_YcZN<&0|xJ+6$_NqloPA8TFgPDH&CJvzy`E$;(99;Q_EdSKAQC9!25s_?9rcU+V zkq!6rNn~+LH}g7l8|T%kY?J)q-r2`e>V9F`(|SwMoLitL;J*?Z2V)PYaeF4Op{;B5PMB}!~4#O z!^&nbZPbmbua+gH7kbWvEDPVG7&K3=3!;WA68dda1Fb2`_w9_7BRF>P>@Ivn36&Kq z4!zkWWz$~Ors(n8Ol*JY>T>+^5*l`GNOn#hA_rZOiZx=`@D?r6nM{mSJe<^ZG2}LB z8U<@g1wqvbjdWFER0bMrZ+_{r-66-*(9-?*L{ApKaqWNYkr*MPAt)&8KQ%DfW6^Ik zE4Cbzu;@K1Lq}X?^Xv@c>DuV@W{W;|Cgns{Y7pl##FDjB>gVYX$*+@nyZIUE+R*z| zv=?O5bu$p(^?p2WypqNjsUh?wVPSxAbq4fwQ7pioJZ?F~X#p9r037qsewQV}DAW*U z?mE1tX>X6!GQ4MnF&q-{qduS4jA#%_&5#4s$EK z_(TSo5q~l5WZ6yIagOb$4t#ByWQ0lnL{~CPOO1o^U;m6lPpV2D$TMzC4mW3sg{&CP z`8&0<9~<5qcr`%%I%M8(Y2n)#-+unmfi!m!q7Ea1McCh(G7f(zY=_muj}-*15yy%A zX~5-6^VY)9qN-JrkVmysR7*lM-lbY}rL7iNaN9EjvoDdvFH{es~Az~{$tk=8EeK-quhQ^1> zJzI88$Rv1h#lINoWQ7=~ajO30wDIS=@3fp(ZmB$uSZkA%px+iUwksl6($xAGd%V zu$w4DKnq}~2g`Aj_t9_tXSSxhGU7+Smm|yyG4jVpJX%mnmjm;Pfd2D;C9T4UzX8rkgl8z#C)vGwEg4ZA$nu{#3jhS-7=yCS>n; z;KIDsd^jlf4=q+(k!%2U_mAS%&t78;85Ge9*yK-JuRWD^#Hur340!(K*&fy+ZlGSI zW$-vTkr(H>PkBDr@KCQH(hw4rEgtU)rhX7pUAfhZY35z@JNFT|nQu7}4xd|U40Lb$ z>wRVX`{k;epB6IOtdKGPEwJ(3^@BH7KBqq)IyCdp||cAKCLxZ=@F?kE|h7i=i;-h=&_muyl8kEQcGm4z-;I z^wYrLl_FJtvRyafw1h0)V?TbJcEYMv&t|OgY8L)a3rB*7{t+(5><=O#n_hId>tb8- z@>SHL##93*q1_6io;af~{ZhgqT!kdotY+^1kecTD?t0Z!uTmTW%4Dv><}>2WJRxM{ zW(mfXga}#YHl)bWkVrp1#;+PJ0ldFvwLNRjQP$5|K@aA8%tl)|pZy$OEt`=oJBA$7 zHrQgRUWJMc)sH-=^|QrfVfuBYQq-$=2yD6Z{8?;_9`}?R%c3Xw*HUw;E!lzbx2ThW*#JWns_J=Q>3P{m7)_D@a_-GloemCrzxA(b@#p*4F;DyTt+b{+#v- zFZW1+6V$usg-)~kx&D4H4QZu^G30(EB`V{Gp^O%k_BDpVUdjtPM!dgLId8j%hB|bv zEv6my58hsC&W7s+#^yQU;JmiF(wAhjKz82a^ZKQL?sY48bWKZuOL*~%y;V6HvT)cm z6?p&_ilN%P{M(Quq?UiK1bLsmX$&IDC2!l&DKiC8O-S3_+XFKeGCzW>WpP#k3E=_mLZr;_+R^I;|Yge{RpW7ZhqlKpC z?Z05w9e*EFZ#@<0Z^E~F{|j8|C;H}b&Fbzl8s~rhSnw&W7NZ0=2$rtXFpw6WE zX%DuuG|TK5l3tahH(V|25NenTmQy2mOrevWB>9zkr!>nfI`R|eUyhQc7Fqwuq(0Mz zn-jECBdk_zUu;ti@de|||5UjfpSQk(HyDk_op&|&Vc$zp&wmqKb_sN+tSVMsGa_^Y z7>=Rl8>eHchChz|LIh>R04t+Kk2OPn8ahZ69`$;2MK2wSmX$l0IJgjd94&U;_MwVF z&VZCf2Blw5w*8;BJ#UtMP6!i;!gw;#o z=LP`!NQCDSdAy8=RyKv25`KK`-uu!HXxQh@zwtQL%2X z>LAh~1eNP>z0qm8&yHT%$}aG9k!_(4SC=LDi}w&9bN`2`mmRTbyZ@hKnM^zO=IZb( zFH|;G`MH*t{|`qr1Azfzz;{cs0TIlfNNY3@E8j=ttaL?pw(53sb)26gz9}kufubwA z+TZFMCP5df4knJ+TK!9q-@tbZ318jkz-dtj_~6nJTZse9A@O2{ufQfKp#qAIC6h*{@;fZ2TT8lg+Yup{{SNv zt9qHFo~Q-&NFn)PM$LB3f@0n++$+IMueI~^ijk{rv-?qkKW`{pI7nZA%PvFE9>eC) zw|y%J>#RvN{Xi=%;WFNoc@hbB6UG5;1I;PnigmgJ^ScCFQ{+*q>;@(mIG3^^oB79Q z`UCWOa zpm$Rm{U!digJgoi^xBjv0^mIO1OXzva zgho|S={1Xag)95y0}C~e86~WbCIDN9wBlh9;5?b(&~%KI^@FKg<)u>1km>67V!E22 zH>h(21x%X0K+%jmD2BT)NlFc|(WT%nR9&vW@~wuj%QIZd+Gi10+Tg?onuA#~yUqQgjr3v|W0^?3`PgDC|Bqh(`bYdM8tA z>umcMn(BUVJcM0Ji8)3M1B|n!rI~6NuMeRV5MfBZzK?kQ4G$Mrxs$~UPazI(bl7{_ zy)qhUXvSDDfgw#9%@o!?-{tLn7@KNjbuTm|zr*-2bH8))DCCa*;|dVyIE>9j@sdJ} zhVDGbv*!!#T|l#6g1m|MyCH;$>Y7-fjNlr7OqSd_f-pF&^xli#yU2XzG_zllboL=U zT&FcTeU;zBKQ;^^0mj(bc;p^ykp54YU)`cB`cz410siDeF(To}vo09|E zF4E|3d)L(*0S=XStBRZ2cp(j*M249O9v;!1DmO=$9F!NFEW}2$m?s3acLlg*GT53R zq9aSR3bP-Jk2<+0;gh_8B*?cHsCc3$pI}jEhaY4DQ#f7UW-P2CCkK zja>aQ=gA33HL%8Q(HW>p8z?@0NPhGQvi)FvM}lm-ADM-bCO}dmE--A{+G=dSv?$N< znlYgvmMN0%r;P>LWshQcs4F8D=mi8l=6DPcU2c^YA?SNLOdUS(XwxtUQ51;hz(5E2 za4~B&c>ytT*<^?$6-S$DDkS|daOF*eqZwWd|6gQJVm)C+e{E#Pnf=CDKFFdKDhIj8 zyqeurcrNLIizkcaedlc>{Q5164NQ`c{ylHh&?m~lFUj>YHS(TnF;!GJ+5pcdoI8Am z-j=p#-aWbSQ?Yqxp{ZHkg!cvoD{uL7yj+sn+ih}w!*X4_Y?l9gPQ!^7iwlfYi1!CNhrFr>k) z87SL9gI6<6gbB?uORpHPp6N3UL>hlGDwpuCL+8xe%*#XPw2sxR$<%RaR2sQrU@Nye|%$;$xN`;0EnnVB%T z-7^nkZ7(NRdlGE7+a|CLF(Nb+ix+72nr02FT*Vu$7L8=)SJ9ZY7df*dw{!y-T60X` zQxGk^lgsTe?*1M=BjocV9nYdOnVA{D9f2hC>g79Dn~QzO+k|E9Wo|Q{0Y0x%tD)2C z5)K!TAQ#?jY7M{j?e7~G_K%-F#@WdUYP?PZ11INa1~LK;w*mF1&!3RS2L?do0U&qW z^OI8?@;dDs?T9W&`T=7Sy@wFXk#8+iE9M`n$D#-BhukbpZ9L?D%c-xEc> zz`T!uO#6S5LeZ@C-ar0Z>!rAi^y#F_U zgK#X2&a{u6{hKHpJva3__67*#Bh(KL;E6_{*aMoGRgk|q>zK7?W`(WvI-#%uEuUST)&?$KIGEEoDt8w@##?30SH|`>u z*+eH_;=LYpTs};@H4|jdu9e{!cF<~Q`N=Vy-4?ur@7c}<+SNL&?1pKxqgDw4es*@I zaIikQwLE-;Z(EDTq2(M*b8C~(N=Wqh(LO1`yPiWdy@oo0v{^ZWr_Z`hd0CDj!g&gv zXCI;VzyAgLwIzBf?Ga6nO!q8;g*kps{y`N9S&%A*$rPH%D)~23Ej=oxiOvs!3f#kf+vwgG!;j$ zQNg6!Gaek;DIt~1@ScSi&3bNw{jYBTTp<@jp(wij9%3u7J(g8lN_JsGttpIK_ z>JfJ8x#B?dIws}?;59StT05_I^SI{5(?RNJZYz?%>SY1nN>>x{j_H`7>@@vHI3ILr z-*-16>_lAwbWnB{n^z{jgI9xb6%>H*Eug|&()^2o?dNd z%Kj;DC_Z+P7wHY@V}8~Eg3_5&XW2v6*=QAzZY3*O$uG-`X4!w;B0aVg>GGvq{k)Xx zzrW}j$wHf6ljX%Py7B7w7yW)UlUF}~6}f)>GVK>V=c@3x)olApRH9*@NlZR?$k^w9%z3j$+_KEGl~-fz(va70 zPR)|i+?A28b?^fMfIU>yc!C#`A8DWXPM4srEvNX-njt5Q)XODQt5wXjzIMDwOEXvk zS-IF};sk(T&^%LMZqrCN+gK6Y<;JUWOhx0!q|zoj_S|QgJ=x_#FW_kOyJl8f0}N$? z-$kp!_i+&LV|f4hBVIQ#QPI-b3@qL+%l-7=7zYPOCWx2ib|GIlH*g}CZACYC(J(Ka zo|u`&ez%TlqihBcssu&j9l+-``Tn6y3gzk9CT zPMdJwCufGSk=?pK5c>du>NM^PW-oB09*M1A#b`Odax4FG*U{(9n zXJYH{Z<)s_X3uqi6~lZYoYb6MNmM0 z0RCha6D?YfX!*bp!!Dn(|0;Z`Bmyqh=d1^l>*>NS8s z9h|2zX8ma}%;C?nov|%OEsUL0ObB=Ig)r{2|0#H0Duxd0Ljz4-Lf@42>$XN1)f#Ya zZ^7k@z#`yxS@)fve~9U52<^e2xc5CE8o>0Ew{iN>2N=k+%h9!tS1s?AS@X4!yEMB_RZS}vka4o49lHm7z|)- zZ37;Hx|ZUo-^!(2GSgag*1tTA=KPHrF&;M#7eRd72RkGCzS|54jc0rp)}xdCU1cOQ zQDxy^n=`KMtT3ggfle(0(11sbc@MKr)4?!etiP}VQ4-uk;ec7&uYoV=Cu4FN-MY|m zOILY)*6*5OmuL`DgQD_GTJG?%)O)NNqpQq}yT>v*R{c%0?PHdw_HAFuN>;Lxt3sXe z|B&AJs&e&OeZKyEslz@`Ui7TxJy-90(RGsLHP@eEH01TnT$iiou0HVU=c}?juYWX_ z-DgRcpjF#-vuAUwlsEe= zYwfdUrZsa)WWaE0^B9`IQw|!@ISn%Vk=-jlJesO<`-WPqRN9hwQHF)FR-n!9Oy%I$XHK57ODG+w~`jS1NbK&KgY zZQmB~x#1z)nRN9WSbaz_jTHPZ+AJ_u|NQcHgjc-D>X2Z1QTVJzQV;fGw zaRgHJvs6wdMHE3fh0Ca4U1$P=*KEXP`Jj5~V|_?`rH0@N!H-oP8T z?w~!a<4FZeee~*!fN6~Hdjf?dmp)$zY%_I{@Z>(X^8{r^d zLX-FHZLgzHDiU6k$Zls*>x}t6VN3{=0iOr8Ru!3>dx+oIH9G|i2!K7iYofV->-&F* zarxA^st2P{G6mb%#EH1ykM} z86hvXi&?vg?zC+J`whw`>=$K>P6^bhFj_~?FlrWI6C@S=+~c02-|m|Mo7jz8Xdj=N zS=D*O2k)Ji(0`nVhjs2^IS%+g-&TfwiPy6q_&0Abe<8R=PK-l*R z%xrfT3j5JKJ_kB23`bp4PJOml&2A6tO<2?wBU85lV8mxK9j}ic*+$j2Q;8&=pFe?z zP(NY6R?tg%KFCeoPmopcG!1BJHMYy)f+bG^mf2Qj7ai8k+?vDZ@tT+$gV7YZ8~5<| z-~*HkXGq18h{v;fESk*sIpII(_F*@*3kTtyC5`&90l&6@$YaKS?{eC_ zS9zJkO`vsjOR%XQs9gXrft>BqY!m5mu`Iks$2j{(;m>bt-j}yj!MxhD32R zoEltEx+*6ZpX1_phql|K?xsFdG=ANyfl9gUn;rS24w-l9855(VKg8i#eqlVWWF;&4 zjTiFa5$&u$m96zvWqIwAQ@_r=OS#U@lI!QLrmNqsv+nZy@;B%83zqU_8T=|Qa6Lm` zB%hZL$@SlsXFMdbHRz$*ZJ=B(qF$<)?U%IHQ4!oVb0ec}V%xGB zKhsYFUZYdYxl6@J>vA!(v$$qC%cFIcOR!(Mu1|Q44xTZyKDt+F5U*)a)4=56Akb^x zO%Sc;$h}_fp1M}>t;on`%`x*fA&^Rx#xe+$4wq({3B{UMm%FXpy!BVt2{IIvPWK9! zmA|R+DByR!qlPL7?Ydvauw359DhC?fnw9T%2n)T%_EJl?d%i8|gRXJ!m;35~#&p*n znxI;m`QA>ZO}cV{w>6_q!&#BBV+4{`ziR@?X}hL1UMKfm%`Vmi9Ve$qN8)DB^)kO# zs&zE&5z?6)BB=xhG~$^>IJ_=Gl@m92c1@ruyE8;Okw%peMSL*9yT+`xcsPPauWh^o zPtGvofYx|vEFXGILT!ni)-y`UIEGH_hmT_CQ+bxu!nqu4 zfbhb1xxKfK(piCUU?aJgL!nZ@pi1cR22m@Qu)Dc~(bR#K0F7X#vj6M9`1d$Ee~!#r z4qk$sFOea%g>jTW!ruNJ)EXV!+}cJY5W?Z%bF{Qa{-}>&JdN#}w{diMh>N2mLRt&H zAYpGZGRr%#>EoB`2-ue zG|MQAxj%?7fw%nZ5bnVg(|7{CY8&lB!MJK45neqZg6HuOau2?PiA8YjRN>vcgJ~*+ z+R@KZyvQTIcN3ne1?T!Yklw>HMf_J}dY18c%KBiwz0oAwX$+ps4YUZRGq%^UJB}W~ zURwz&RzR;>gJt(I_eEh>O3b4hu1o^1SQOnx4};@p2qZJeZoi8Duuj1Bq4M_6P^mmJ z>#^N)7q;H~9-`Tsa1-L?8t>cKVR{~fBWqxnNAv7C+GodT6Xrdk5Zt*vIQ$v2JHp`f z2<}c7(Nqi*^^0y-)8wqXUCbg8<8@%$L_$JuyV*i-Ho|1ogL7`N4lYo;c!FTShnPRX zzURQ&<_7lnZn4i&Kd{|upil#TD%0%d7W+;FiD=5qK+A;DK#4?uwH!sWYSRI4nV z8UL0|8rp$?4HDVhhM6Jv@ckO~I`ZeIW+_RBeOPTa;3v#FXP7hw81NqF+(VeqZH#gtgga4XuqX2zFxoCYx^(qEcwUkrBYUKe$m`jMag zRnHC+)Kwl4?_$P1%)hZffc-RN0!0Q{f8OQn_@yp2=`(NAWy@nCU3;l_^<6qh`c3B~ zREb9a8J)Pihrf^5w^uImD_O}(uE;m`#x}O$SCpk5(y`E+pMUSwYp-7adG{^PYtrW{ zi4y&~@}dVXGq{xN-b~ta-oE(4np6WOxe9m!i)yWOZHx z1v(bS?LyxP*nJ+KnQc-Ylozd|)iuV*HP}V(}8R%3%5UD z*3i2h9utLrFdAcHW6cEe(iU&MTHUPw9`k*J1V`RRfFxw_&=y+d!m-(xz1L}@T&km` z;A+IGO0|!d-uhhvY6#x&VxU3G32rcttyay<2*=Z#_}~6N|37T+-Z1-n-@bhtt!5Wb zpC2F^kC}2mFBXtqTgS8KM+Rz&r{}mRlnkUj``|-#32$3_H_&DI1esoLcNakd^4ZY= zTm(UPE{p9u_wj^48@0mlvCYl-9*t(jtbY$Ab7ntsZP_)cm*AUEc<(VnTibAl6Cm|r zSZg73`xaU(PdA~eb$p1#otI$|&S$L(a*0h0-4V>a`7_969c z*3HH?+T{y4yKS@z4c3XnY=Jgod+PUrcBRPY)|hU{q*FaTF?-)92;ks%%w34EO(jzq z#I`pvnK=p4HoA>7{OAAUe?_;~KsuE}G8xBNnPp=SSoclT%4M@-Ls$b#tu7iYR|UdU zSNE~qYq^Ti2kfirCz_2P_BBv8gwqNl6pmrg9~vE|fk(GTF5w>DC2t>ntdgm6F89QA8v5YFTDnl^oxGFDt=GAMjUoTnSbNxQ* z=ojB0xqklo&3_+JTGyYw{QRQlEU(pZ^+m2;%imUO+gGxZ-!QqjD9jb;tx03IR4$;L zKVJl%BcN)_qU9`+0v}0#$WYZ^YK%+c@Dhk+jOwrS%%$-t5SCG`Ezk5md~RSe9*qqqc0*?0hPkfW>mvyV@j+U@T&` zlkdu-9YZd*A$o_(UPxu#@%9~?I@bsp0@W8R}a$G{Kw@8DhOEn*8A4(A?K39ARLwjtN(N z!lA?KHp>YnnIL8%Lb3oj&$4CP&_3togU4pDY07dAX0u3t`*jrf46oaZK<*}bvmSi$ z6g*mQuf9&$G#E!Pbca*Oy!tKpqG=R9_y~jZ=NP-#*1r2km}-kZzJGReo&9Bi#~=QL zZNi3c;|7L=%W=PB`mQ(ZH+}N>=@YmK=An2PZMJ!b$A^)N5Sq*(7+)hG#}SAo*^k0F zJ1z5b8cuJR{lSkwB#X9oXJA>jDm4t6J*;Qe&6;)vX46)HnmO;90CWNK+%A7pzgOKW z)`TyR#^%-?Y_4saJ`iR57pV7!9o8ND7vEO{N+Dl}FwEb^3tctVG8qM%W0|lZF=XEZ z`-z)s36ud@xHTrPGzTF+5znX1d$x2r84QJUGdhhQiO5^LK zv%Fr1^x5*bD#ktjixRzl!`G1)rF%6KSJVEy=UlyhDK9#ADSvu7s|&OE z5xh>Hbu91EO!C6$r4CiH<{XWFTA={~aa1m&1V9fa1WN(;VuoHu?_{Q6PW(=zcd5^m z=5jzlVu1Sv=L}R|Ds|;Y>t>hlrr)(Coc`*Z@~RoJsd*O~v3#BkUK!z<>5^-{($Td8 z0(gf&sM$L$0T}W+4TenltoCS#{&;9+vo)jMA%JT}OR#KaznHd5g9kh(KwM8{u)DKm z03L({xyzc}L-7OV zh=jD3KEQmt(CRedW@+nr?Oq!JzOTyY?)`g66ZHCQ6K}u!bNtIc`DZ3T*W<(IsFcg* zy-x}kSX<8`A{cAitSc|ed4!8f6#+s}E*d0Q5}ax+Z13#xSuONB4YPc}9;rU&XtJ$6 zxP6~ceu3xD-oXfc+KWf$vZ#C+@+-tK)F&uwNXc@TET0ty<&o7wYnWNS;kv8 zH(7Tb*uyT{>kQpi8=ZO^@yrH1@htq25YmY_fxTtwdCsRyd0p}R47nS7sGk*(h(wXw zyK9yqIOlF0KlupWWE^%hhUoT9U@$?mz_KMwM%Fi>xaF`X1pYKZ)rEL0h<260Nf7Oi zC+OR4od4t}{5(Kz_paFk-=+Mq%r|bo2Ak#HEuJEnx{1i|%7UJR*`Emi7W+~xhSc^0#CP9Bw|0)n z^Y_qY-QRladvN=MX3IjwVsH_{10MEV_S2w(xj8(rd#sxR@8NX{aCrR5BY3f^4W)}i^DIHF(H%@j zYs$5xMQ-v(S_;u>AfG=seNvtsQ(mFLE)BHF3r1~S9wACo15gSEr*-Tz!n)0VBmfqS z%gbdpTJ%MS*8R7e7&8wcmqoopedweSgZ~ZyQ)n#uFxrcY}bKPNqzG z+rx>O@k}IQVp)@xhiPk{`&cTCA^~!3V-o=uzShc42)YW`W!GxPy?-s8!ux;ww|M*Q zpCLvNe&gHUW_#@6!*@PW*fesWm*qP!FfnwF5lZ;r3|P4P=J!}vz>|+3vQ5qT9$_;> zSjt}@kzIq8-X>`K&A`g2*ELN>Yo4{Ix7O?{;Gm*;pIn?{``$g&)b8yuL6_I^nKxg0 zVCtz^t}-74F$V!PoJ1;gu9X0*}|aHL;0AX9ToJtkPJlOC-{E)KZLNMkggAsLMz z98RNBuN!DQdGxUv46?idvqV6B(3eQSJ#(X4u9-d7)44R;y=ITyW~;t_r;5RBYzD9@ z`BQWo=NJ!LXt%5Ej(x1H?ID>W?6aSqo*m%FKmH4N*>+XWE>Dnf?lo;$Tch>ZuC?E41~KjyVVSi0YMtoV$(ctl$q8V?i&hGQA9^ZN+r zu)F9r*vBdtaJd6;_!H>6{BVWWjkkja^R&waGeW(x0A~&AslAEb7c<-oU8TePZjMWP z%k((GHR0RoF)=ONJTFfpZ6E1W()`Tk1}~MPm%#4#TJU?QBU#=)zJuJ`>)z(phJ^{82 zd_AK_@M|@jCN2FY4}wmsVP@ksJLa0&Chu}9*S1k%0)#ARxtk}$1Ug#Zt})-8*>TCT z=5xCJj+vFzTHHwrxFaPoNpj}P1H8wC0xdQ-Wm+lYlCxRuPB zz*?O`$y|F_x-c{T*>n;j-Q{OfC*NNH_xHi=zA==$awT$Tro@c@w!^T_vq zesPF@9NGk00e}V?w8nmCeap;z`a(f78Qn8#A3h}U2F78(EJzX!JS;&ikVw;<;^ttP25tueUlp`iLdsh!E5cpM8q$y<6D1afg6xnKks`p&9} zxzOxP5Zm4|v+-v?{Y&^+ZjRI@+AQA+^VK2jTZtH2!!9yxhdw?d5KbXqt)t9-uow*M z!KoJtQ@f8&r-c#qN@Q&ZzUUgfgm?Ax z>1Z*FZ}v_%;6CM{MHmZN{9OcsGlyBSBPAz2HR0!9=vSlDbnu*$9mK#i`^iE#Dfp)b z7U!@$4g$Q#41NSyz5;i72`rxPx&(IJ=;R}qKJ}VDOK%$CXQi!6mfy`Eo-lfx&(ome zcsMr8c1{cB<&`U0$x41hgu48Qy6Tr^*?*m4Y{$=((%)Z}I`_IPv>oO8k1x9Tx-1jD ze(m2k^UL&>f0ya$_`GLcJgW}F9vuCa_q znVbY({gqx2>>85SAv^F=r!0Ye`Bx%D)@R!O27)~@EOih(7f`&I`O#;ujC&fPS}W={ z?(lL^mkTHV;oyHqOh?;G*=C`%^2PgUXzF>A#bCg~;9br%Y354qs>-wAT`(c|*7Nnd zzAx6r%fMdD;Om_7Y$Dh*F9KPmsppty(U_IXtk%^k_?^56G*d4SFu|n=rpkd!myT={ z2oZv69Ss8Sd8vRt0Y>ial}-~)dthc6HLLDpd1{+0mKsRF@B|mL#2&tzX2ixC(BOT0 z*>w}``fJUj%6S8txl|U} zLuJYOWp^1av7YbX(FZ|vS= z{s>>jdjQB0#)E=S<|lu80?W6E{;f#eS|+e}>n28x1|r&Dn=K^ZkKvG@JSF7((?9-a zs1*vxKRZIV)kQLwM5844ezrZf0!3oaX87(i3!CekxVX4LG`R(bGenRE-%Y@1Bjg&R za{7e8)rUV6MXlX2Yj{V4iP>7LBA5%u&31hOzTYmP`r{AZft%%+hy;+jeFsyP!H4g^ z%lbG$C>w)4?xWvsp-E_r-oA_M{X01QC8{(5auJ z@WI@K?y^U#v z{bp?)GlKWg!*|V~lapj<3%&`d!AJ%#{qcVbcRYooXCJWd^x$_}tj988xrJe+ieamT zcD;#KvttHJ1$BD{uV(Z+-UJsVb*iR0Hg~p-4p19*6JjfsigA6{;M9Q7ufDGx6B_jvvbhXid+k-MZ>0I&T30Te zMZI9T43sOPd%xXAjrsNY{qTD?3CIbylQ`RT!UTMD8M0?%SI{}?1m%&96myn``i2Qc z$ug15XA93C^O=A7?X&N?*3825ELDv8ZVm(ZEEhh;=wDsSe10Y>bDkI2TM8maJtbh* zEd6pe-RME4rDvJvQnwl1ON=IBblyrXxr7OI`S@mSwuX6o_v5pzG&elmVSvUbFnWl&jY-@4tG@_4GdPw_j4qSJJuuJjt~* zR%_c=vXXzKa&mS$?+MuL7V;M-=xSDRIHDmv#z-^8G&ve z3J51R?72;#6;RuYAaybb70gVooit&2^CFPjQoqn9r*TODbrGU0ARcfc7WA5cOU4CM zU`^v#7fm!P&HFuk#&o0z&_m`$+pZDDdCc9^Z^kWj;hMTMNOj2Qoy}ylD`?&Lv-c2O ze zzE>|7fzA}xTx;H4X8-o%N(p7couB36CXn|AJ#=UgD?;~qqk^72Bt*;b=X=wx-iT%3 z_p@vW>ze%z!i_lLp`taq1okdrGD_GS@!6joK0&!zhCkxNMYC$w-)dd+C&y3G&{k+P z>hskqvi=A>8Z>Cs5pV@?TrHzbScxRl_~Sco;Lm>azZ1?2NQF`+qW5e%G|!hCcHbTt zs8Gad6M&E9F>n(g`(xvl?+OO6mC0e&t(f=-u|SGI;YF!%jPb;cQL~MF{+P@&!N%4t z+! z&av&VWcch>cMM-_3!VOy=PcAZ4FijVu^ZuBj9_~o4L&2Zv5vD(9%7=6@2n`|qd7X2 zIzBzf}d|LWZ>vI(D>jz z(?Q8=ztyK7vbBui4)`z|HkcD92K5d`vk{zrxrV#hwrXe*+{ZyDyum0U zmf!3P-aUDOYO{b=txBMd!4*v+yZK-rv5Z#-?%vb1UL3>BYo>tB(uBl1vlXcC?I42 z&@vA8buDx0w3=WyW14kLhCSv{F(-hKCuI6rYusg-eRTT{9Pae4gLZb-IsglV!>xpnjAG(*n}@U#TaU?dYb= zhw{YdN$(kj%nKFsLf_qdu9gz$Gqo(srN?p~@`jbHWF@~TBL1U2^x3}bMjuFDT#C+L zKle@KdK$~mO8@$^uU_|6WSPeGG^G*$j(nBGml<0Ay(%v{cU6`TU&_~gnJ<&ev{$q3 zD_O}uGNBPXSCr*uzm4+6IXd-*iDW*Nt0xUYfw^4Z1-Z+0=h6oP(dCSdK-UC;6S!U; zOP!>{7^jy?R>$(YM1M7dthLgX+0Kj@!sj?$9zwepZl04{`f`1!d7jdz!Kt)$Kkdpz zItHp2`CC5YdOntizAy7?-i;=y&YSh?m-jByT8d`IbiD>7ln?&;+3%X|)cIwa`mUK? z&4l$kZJeK<(FHE5eH!=mAcnfcaQ zdjm-{$S-PyC_yMH2K%;f5`G-VvkX2H9*p&!9B*1M!Cu=z~2gl4b3WU z#1q)tT1S|$E5Nw3yMvD&e~4+fk4mM4Ub|_w3JXODq0xYu3AK2?)@T<>71XsiHrs^F zcc_$$Xf>K9kJ^u00m+88qWw=1PbTo>$rHpAQL{$8PAKmu0_D2d3tiCT z^YKTK;M@bn6foQDrDFKj_kS1X`2zaw8v4}|N}7f34q2ak2agY@2Tu_6deHARQ9OHu z+xKn|Wc=t_79w|F!uH*LG~fOZAN~Ai7|gmXcj7wRq)p(@?e5{QSjA}Wf-~Sni)GHl zaO2KC`fSUAU<_~n=O5vaupei-Yd3Gek@O?EP1lWLb6|2!8ISwV7)jIwB)g zRb^=uSO5ruP1WdL&FQtKUuLo2=YjkO?6u~7@B_HI*)wZq$QgDMBmp)+09A!Tp+sh- z4y{~kH?5W1eBZuy+;18@A|p!xRR!CbC+@X-kJ#tjv$yZ>h<%pWeg(E!`|t>z!U2i| zsJ(a$p+*<&LIttuY4jUyg7y0dXQN27?ON<_sO_L#I^cH-U_g*uFE>$-C)ti&)EgzF zW)?7a?KYD9y}R`glgTiS4);*0)X{JCP$LLWrE}CD?7swe+I~>VAL5umJ0Te-NR~Xu zf;tmD;>oOpH^6?*xP{^od$6|;KAp{))4?W@_$&dkj@c8qT$r7+rSOH5Jen+HZ)ew@ z+sO_Dr#dlVb8{0R>I)rdsACj0V5a5r@@gk1`OKIY4r=Lm!f-5! zR5XqRP7$O0Mdf>;#5OGLBG}3!JJCj*ZCXFrK>cJN{bm^hf_>=%H!!Inuxon7o(7nk zN2<5eFCuLl(#aem)y4FY3rf$c$b4)J^AniXetQj+YU__(sdsGVooyjK=5(3qQ|2+y ziXq->Rg-w_@|paTNUt%W#TChErbs+$@IWM;rrCBK-Kit#x<_}um}jp;#-L=xk{?jXBK#QT_>5J>V)Y$M&0mP|LzkY4i(d>KHgZ7b%_e zhk&YIuZ-$QGfvIW3^T5Ff-9ZCIDtB`ahGN4XgDnkRoTkNj&Wl;?bkG0mG{bb;6VMb zjG*ET%QZ(%cIS~BbnpPS=O9Yt(z~Z36Q$#*gX*2R0KnX@e?qG`CIwS1(r( zrUl;aw2&sa6JPR}9hHI3_OtKEXEg$~2KkB-piE88AQ6jUgP=>REVM*jPU*IHx6!Ot zF_TW?-jfFy5KQa*?6s98TNYs8E`G(+3PFBFN8sr=EW(rd`FR2nekbka z@A8}Qdv5O^AY=nG0UYh`+qvxV2>B$>(*%<5zVo)V+sToRii@IJt=l=<#bS|dP($ss zi&CM8dmns+9D!+CN20Oa4iAqBz<2SZAAARQK7J3Eu3o|P{8dz1lPD8luy?ZTJ#%u` zWjlQC>%WeV9zFJ!P;1^i8pc<@`5Sor;4Yh)b$#U(_AAzPVGj2`{s7wsCo{;bUPk)bs;w4i_X+qqJ+xyHrQ{6y&_W@4c{}JB(kN+N}M-Oot4j_AT z1#@3`70pTZ@74g*mo77(HLP5@h2rB!=nVphU%qa~?}2g|hz7BF_k9f5jte(#p~G)_ z{Pd}{Z6G^ES#4qS{ddvcV|%kNbW+m>c8d=mpmMT-Ua*Jh@Du{6I6?%KMfSVE!ZIc+ zB^1^l;VJXV@Oz3Hgnk0z@-e~QiIanU^ZdTGyM=bWVc$*tSu@pzLJ9doh5aCmn)czh z+qN1(@==k~I?BfU;)3P-?)!Jlk(~5VNn0t{|9b2rIzwG@s1+W;$&ek>My-LC^cQ6? z#x$yDsZvIr;e?=HGN6+oI_)kp=_%uL&?p1#1|pP~5QQbIL6vwMLFO^hsw2>C5g@Z1 zmNn5RqF*^iuegu)u};-EK#-t5NEx4?JUYE|N}i;@{NUR(5CvcQim#0HTub7$mqa>O z@h>9rt$J#9K0sOHXRrY|TPClSLJS(j>_~4@_qa4cLVPWg*HMXKw#THF^V=31z7YT? zADw~cSX5gB9B5Y^lwQ9Tv;bc~o+`+6oAib0q%nW}7C+gPwI*rpgu10_Dm}j`NhCGotlezg?Nm z72wbF?%%N^=_UxQu3Wi-$g~C-~4rKKYWa4rG}#qpP<#OAfC-4J%1Yqr7l4u2%HZo zlSMpx|A!b542M!_>^$4T%*wJI{TECwWAEd;HfVC%WZSasr>@;Vl7KhHK2hQ~zW?!u zsBa%4JRo4p%`pEQx&g{jAY%PF5ecC9b)PXS+D~=m%&XZK83K zr_4prmH!2uT2SvG8VMqrO(Lrq@vU`~3BD%?3{P#afB-l+fpj*7^x_gSQ(4>g0e(An zHdN~D|7Y#k+v;oby%j>&5p@#|fMf%p1P;?2F<^8`$9U)R) zHc-ZP%ciE7Hi1+whbm=Dz9>qi0s*#UxPuDgW~LU|mtwXDz1=8*f{1~(bP%9N36A9p zpx0^Gwwv}O0BDWj50f$RbMv6h<)3~Q*bBQ!4ELQovg;G>W=<2v0iL46?IA#%^m z;iUx)?sX8SZm>=Vwiy zHD9Mc{q&RY=F*&7f)|jBG+Lk|f5E!Hh!Mx|^YU=?GVd>nGx}_V2kmWte|SHpF^%b$ zl(x2Z26Y;xd4ik6!vnO6B?5EJ+R$*Lb>{SsfmwoMPcI1EdSG2fvNM#O!RX>Dm?7xX zF}iA&+5unwW6$(kB*Rc(-3v^kX&sUQc%083nGqRaeBOKKvv<*_p{?JV*===tHY402 z4I7m90@8qagpb6c$mFuPytIPV*#+|s z-YQmbT5Y1+XxZ$VmfQxT5yX=*+R}YH3hR{Zc5U?%76@=ps%6OGoX#HC%7`$5`{K+3 z5(F!|here?0o=S!kVinIu_%_^S`R z^X|Jy5M-}ixr)E@&EG^ilf&JIkC2<4Lw7KN*FXPx#8~pP^-aty&SCxj9RtU`S{1X4 z^T-gW-u}{?$Slkvm7d4q+!g%xZ~S9?{VU&KUQryKY+_?;o9!CM55NDHxOVvpj#-E4 z*+pzTd4gvT@8Ra>K967`hrRWu24H9A*RZ>Hgyn0m;OaHTfAk0y0^ZmD`~Lww0-q1Q z`)wR-AE3DY3@6Ov_}MyQT1lYg)cp>766K^-Lw0GAb?xATx4(yzViPlOejb}2euz%9 zfa-Pu^Ovq;^P_jM_xKLxKhLth`s+yZStk%B0E`)b2jBiPB+@eogtBO`9|R_QXcJKC z=(KVEkyb5_6(?BX54D6WP@7OMjNyI zHnm2XWmWCO0`(Vd{gCYGh{+sfsNQIzSS}d&*Q%i+`&*n~Kf(T!rQBS-dJ_Z6tAKy6 z>G|F$R>}xdy+p}#xlu!<>MiG=q&^9X-vPmL|g8!%(DMH$*=c5D}7p8)0Y>}OM!Mru8`+tb`kmG>fRqNq8GgzrRP<8 zB#(bFypCy1WBMhegPq-hmK&FT7Lq@8Cmg&n|vh7Lk3Cy1lJg8>0Q7xUNi9Zc1=y9p8RM+Cz`TmlbG^5^s2p0$Q34qOA3fJ#Kr9hAqgjsJnykO#7Wtiy z^2cZUz5}5k(}(4XkhPp+&GVyR=}d5q|u=9}r~q@vU$FDfSKyuz$RdZ~VP~jNkch{s-jN zuA$JZpwlkm|M(C87VrMxhv=~$OP4R9nJ=PPIwG%Wy!z%BF~2;EPVoeXM<)R3Ko-9& z{~1W06GCK)24C7YNtNm6*ZLW4zY>9a+Rogso3Dim!TcZ)M3&{wFDzl60A5ShRn~Mmju3ecYFh&3 zE|r_HBi+(b@0hnhw}UXhVW8WyrT0O3i>P-@KRDkV(lgrjBYmXdyFrftmaScR_N(41K!d?j3b@t zt-@)W?v&nERK;VVmX8K543JA1QI>3Lf%K5_;BRvsAf{ioiv^QAN2@K$(E8PyThpR4zwwy0DDQ zRF1$eWc#h+EaIBnt2^5EQ0$ zmN(mAZf*`bM_Og)t7TkWyJQ0?If6wEatO2}(kZ-g^_GDl9nqy3`WsiSVQzX3wNepX z0v+w$ZFO2!Z=F3aUk939KRzkh8Q3=&UxPinJ3FkuX8A&F^pG95)zTT*t%mJ`pCF*B zH(CVzZG74?=x0omBzkKrz+0GRu*$lWDh&+6Nu=Xh+k$ZW8^4CF_us+J z<|Bg0HI!>@#4-`oDn%UC+el1Lkw1Kljdy>5%JDIdKlm8E!!0DI zrch%WZ+&>zP7!Emc{e-#1lu|}lSZZ1M1TOe)2yhri10fUiaHW+7GZvG0b+sQN})pV zzmHff!Ty{up9ICdeMBy;Qa9A(XaT)u)s9me1fxjA()KM|L4r^@*ejRqREM=IH}Uab zeh<_0GyJASY(9KoD@D}5BcUK}z4bNkI}*rGvJXetw?xTglIf8kJ%zYDtcND;__yioEM=R#*&x|~I<9X6YJ+yumd~^Kyum&8c^%^@ z8IZ0}zY=MY`2@d*oE&P^fGstbK44sJRT0oP-yhVYr_z&rZ~BlR*-o$+>J9~wcO9-s zBAFf$KW^}laVW8r}Xs%%cowpGFX>W`AA@UoBs2% zH(wx5AG)AIt$ej7%V<(C9Ld}e@{24YVJBGYRY?F^_gNdI`i*#ql(=7HZ& zf@qP`RdRACW6+FFCKFE9y?6=IayA2Xn75vb56!ZRwCq!PYPMQ{L_pQ!(=&*T56vct z*CCH0U6oF=zh1d6{`m?41>KAE&Sv(9?{u#`yxC(GVTNwNW~N=<;zxWbt&VI9vB4|F z6N1+Q+5`qI1_79CC}!~%2(IM$I>a^=pf1VNH9_u7I%`25u$8BH)y!g{UPZA}qb=P> zhTy70W4uEnd@hkefNgqIE3@ho=+Z#nK9sXTEyu6g_qw^bhKK9x=+Ii%-u2XE*uLp) zg5!8JMnK%M!Gj(R^p(X$474m8T~rCa6NwaVUB6}fjdutB!G?* z*tZDQv`1aQq0hdQ%S~f%Z_j2=?I=Cg`S_%OO9YF#OxnQ3=GHToyNw4A?x9+)nA5XI zyuWnm68`S*{w}V4^((mfg)br=h?*~kF8gPUfKBJ8|H&Wy2dwWt#_#;o-^D-szy1rn z`Q=|nfNlHm!yn_IQX?QBV_Aelp0N(!2e?f!ae(AN_Sh>1Duv^6L z<7fE#mwy|_g>8KN;YV0X1<;H?|aS7MI_%(!Ixs9ifK1Pf{w%c#nstA3X<+V#F9PgoYyo=?< z738;gf4B>sgJ18|5$bmM9ViPC_7#HRCm-KIbm>*xc>PN_-rGTY`v9}AT)`f{Nu$_i z*aKR51kwcjl)+$h0_*%9=|~*4N(nP7m+;XCZ?hkkFo*{EUCT&JP2uqP0Gk_65SyK6 zpG~s8%cwOQsOF29B$$sxLgxHXAhJe1q;KD+yj;C>9aZY5kMDe7d&ad7zRh-0KWXq= z%Q0O>&iqnY^M{bo01PGm;Be2J&P9?@)_V!lQ(44PF*_$;9@Zn19R$=*s4KKu<&^ma z*xxni6Pj#eg8gn%=f%s6vsEM-%p=exxCirO2Q~vwP9Sv>g3vt0i~4WU^osm?XivWe zHMJ5*`_#>Gob-Y~x4yIKL=V*K>eo4v4_*D_bd`cgv*OZ&XMxe(3MJ)lx{Bc5<;fBa zpo?dF$6CpYyq560JiU0HzH+}u%hlD>ZQhK%%GMxEow}se8K2uerZN2r(*HE7k3>!< z{4D4v$?GDXME<-+b-Q3(hBT4!%}2RGbad;1%_qVDy|GknyCh=X=IW$mPDg*IK!nG9~rD}mODrQCxc$c zA&CPGCI}G77#4_9d@Xm?;DC9-XI|zxSq3$K$$_0#6v$JuW&{Olm9LCoi$kN>>2KA6 zNeHIpjoAwz05E=)C)4z`9M*W(vfBvK@f>Co(})bh$mjDYS1UI2oYe7G+YW)7 z&ajWM?Hb)WSsEC4F1Nj{5%Y;89_()5pin>}oWxvm78{jgpxegB4<2Ik@YtNAHBO3{ zTUtgYMpR4Ew`&pnXzBYaS1z$V`UKXjPpO1Lr$}&mihQ|*)4(Z0>6{HnWTw;PC2Wqm zI{miIfFcq`yEj2VH-lgQwQu4P0iK-0WeMv0jh@Zo)yUhk^@qqGZQ@{K7ysLT_}_5n z{qJJ^@rSs2`3iyA5}N$p;p`MLxp@S_x@Q45Nzrv6I?2ifVfZ1FYiR27s zvMKv^*IxZHa??2iJp#@8DNYE;%k4Hc4$5fA$s0S+;53N6hj%fNOp$NO#38|EIEu{D zRqP$?p-1fV^hx|Lt$%XnO5$OPzZhZxv{szasjnL z7qxa1lTo&RFpH~S`7O-dzJ~XI^dkgH2Y7t%J4h{D#mbw%hRlsMRQfS&-~AY|aE$%9 zkJ7UzNGx7QjNm;~s~{N5VCDL4*6#r_mtF%B3GCl}h=uu8>=h2pX-E+!&1r|x&;|(lo;D9+&&IPr} z2it2xqfXLcUBYzvB@vM^X-b_;FrePo-Bt6yY0&hT6g9OsOy=EKrY7N^5C!Qi7)0oEeOHb5K-=>}O9ft*d*zZCbegCrQ zoc-s>#dm4--aT`1-MdlJdlyE@|86vnsW(6QGxtZlh(;OF@6iHA>C^K31am`!)8*@@ z(XwBZ?=bFowtY-v`X!<5?cG7SRi&|9M*i^7&QR9ulZ;2&ngkmJ%L4&TZ*QcQ(8}Al z41IYBm(w|cbZ@5U9Bey%q9Bm#*D(ryJz{ZaAS#Z+8PWJtJQ=pi+m&O-CJpl$CB=7f z<@C#(J&_dG<*m9YNGTL2NL%CEyuie6Ae_&3*_KHWy*K0T^S5TvIeHsp;G0_Fl62h@K zlJU45W2FHA`=xLPeHt^6S0O?j6 zX5@E!1n&gAC4%?d%(N|oR~u?JU1#lU#fH3umsr24=~+agaofZHjc1>AAxB>TeqlNrQ3Hv+y8V-PH;a0|iS-ZPLokv+t=wQ=>0mM*BjA!p z^ooJO9_91tdmo^%`H;XfK;8%`+0PS`U2GEA$0j1!ezJ~eG>GNvYlslA%d7m{;sXBS zPyY)h6JaFCZ!SGcAbkah=WtRwLc2Ah~n-pUb%jqIBwGRwXdl7vwHVWw#`LQ}l(f9i8 z!i&hIzlcWDz9{aC-i?yt`s3RWJ6wg2v*)q-{$*^^C{CRqDeQ6j+My^Q4q8&lU-|m@!vKgv0 zuC>2j=?t3lnd;(Z$F+Rjm8Yv2tbH2heB{c~@^XQ6e-OE{l>G2kPx6zeTr!U+_}^Y zI!(qS0IW3{<}9vCKr4R4hrX3&uLS_L&)1gF6F?pn^ElW)B5*1a;IxqnYniWRCIdDo zqjtGLP-pv`g8_7j4wT;<0siG{mkpdGV+60PX*d?MHkH!?wVmQs8%?}=<)-x`&B8U< zuPWqA08~f13Bb?K&Uqk+?U>2rm^^}nj=W1|@r_^qCcgju@0)*xUZ-yZ0RnB)Q&R-1 zQ7kVkliwiX;WUAK2z$G7WEVg>9K*N&_>b}9AHR)TH(tT<&Vda?HQAo~hkN)(|M++D z=9_QgmD@MauC)l{@;Ex)L^7SQfsMC+@ICW@AJP)d&`Z(#Atb%O68+cAuGHE*+>I-R2_Q?0~)+5v^ zRV*$qq15i-+0G8yy%y30>5Ptz`yb)mKmB7I-TjE^B3QU_6K}rtMNr_;sWog_`Si>j z<`=GFd3hO&m#<)QY93SRG}b@*5#IijKf=NG2EvIn!8pHlZXVg$CG6k(2nqI$Pj6%}t?JZD4L;m7gqvD*J+Dxn8ZJ zS}a+A%T7-r7L8+Pebbhuclb`{KZ~5)kbU!MZc{bZ>hyhdRIv zLIxR!T3V^SlA~n0#9bK#*hT00d9y>BS(lNo=YDW5o7AN}%R>e!qkCz)239Svp#vt} z3pi@IsOqOWSzg1kT|OekJv--k$cyF0pg3-JOu_G<&XuG10<*n7K|6z%y{e7^#5Tju zG~%I2!@pW98~9*K+wU4=P@Buq90;oA0B$-xg{91_?RVF#-gG97bR=!$u!&i?nfUGxJ=moa?Qre z`@Edyt*$KL=Jjjl*<1VDBf$_JZ#=>N{yq)}!nMCX5{VE5=W#;5RY#o*Um-{=l`6Iz zUiq!8te6A58lUTktUmcmrLzX~8w5zx1oLu$_wk(%$#<3Q6tI2rdk076bT1r>BCXlt znQ81F9U{*VNk*_+-sAH$zWnCr@#7!7gNOI-!nd=8ajjnAsMbeX_2n8Y`K^B>|5{@uSpi(qvBq{eO-Vtei3>4Q5+ zrc${2=I5}pxk0`=m|k4Q%GK+(l0bXo<$$h~&m&rI;z!^6b0i6RVq%o%L@Kge@$uSsU%#yMwv4CCWw^odCc4(khZO^XwmzyB=DT0Ti1h1VahzZtP&5 zZM-nOh`lFI@Zme(LvDW7Ky+ZDi;q710S@y!*dPF}*2@?)^8~wh@WBuN6AE|U!Srel z{cwVEtYhfvI6BxtoxnL0&tNi=L~pW%e!YiAv5u)%UPGl%z|VZpykzqUqPO1AShv9IFMfVV3`P5*RzkssS z4*`}RrCewxTfP<~kCHR*y;aN873|z@AWOf!;~k}shO1!w?|4-{3KJSAG{EkW(=Ci- z@hmRWdf=UD$cJXey?c=xJQ&6$DG$?CLq8u10{L!6-GOxl@uuL))icGph%BGsRY7SK zUycI>+UweCFs3n$>6e}U$KmxtI@3`X&_(Z@UV0umUF0YK?-#ujjsE^DWV&*AZ}g(d zjgmj^MNGU*UN1_gckT~{3nIOD!TXx z7GRfwDPSjXpnct1{_cTW0Z$Leo3UvIC5>61&iDikJmbx;Kb&zVvfnh5l~%hY6=Z07 z%RjxV=6z_DdIlxSbVj3>miI*MGN`>W2nCoIp}qH;@3ePZL9_1Oq?7pN#nn-c&dUV)rt4kURr{GZZPY)+E>TF z$@re60qw>2wj`7)MI4uoP^=XQWJ)OOtZO39YQF`34f6!A&}VstQl6lU@0q{q*(ZPx z^FB@Bo{FW&GqAnCOQ1>+%<9(aq*GAuZm*6Kw5T@hh2$aN!_|lBJRy)Wi!13|18S&{fK^N<; zCHz_rKQ%RF+XEsx(_J(0iwk)FqYrHWKm!e$wbk@-Zh8g{ezOvJ)4+s)oV+F0YNse1 z7YPn~SbzE$^UU*&H{QUv|Lp(3x4!kCaR2=uqkG!MrR%R6z=}l4V=rXKt9e@xI(YKv zG21GI>sM~t(Qm7lm+|#q{|3JM&Udi?>|^9+R#B<5uXM^tPfe>Q5ojJGIyY~Q)#fi> z#VJAVL@a4b=ELNx-DFt=gk5%)M!kTYr%zDaI>MK~^mUZ^EwtZ%_LUn*%+0YrQA83m zNT;Uo!H>R+a0Iyi`kUwwQK^i}H(s%Rr@OKkwtEGjli>uVxf#ezKqBBo|q@~Oe};>vxe16Ivc&qcCF*d2X_!7u%3)0P-Op0 zXQ$9&ze6{Ka=*@8fuPAGs@+P2P%IyQs5oOmzB4@SB}f%2>X|dd*~P zg+{kiBY5v)dwUyAeg_@LrtK7R+7^u^5Fr3=6WFOwoC;8~4?TJM)b_FG;u$S`*LHSu zUZ~^5G#I2oo%y9@bGX<&?byi(Q?pYhM;Z)k)tYRF61xXMer5_+%<sXGmB>xly?%EqJ-6T*-J_ey6f^5eL_H*f*PXwkl znJ2lcNcRfz%q~7vrgV+~x-F}xEKBDpcsfu1G0xK~ZzHu6-@CkZ?}hV$Nh`+&0DQlh zUi?co{lTp^lFo8vxU15-t1It}50cCCjMP6F&*D&0{?|31=hPsg0=4$(#No|oQFpO%lK=RLoOM&o|cvLk(#%>1NuF6}7ejxK5(KaIY# zKSaJ~u8hyZ;|1l7&ut&mn0^6iV{>~@Z?{k^=5e&YhfbxAAZ;@NR|~v91M5TJYesF) z?J2)lFGvSCU1Iux2C$Zhx_918&`__?m~{7^!Fg^J%4|K$gLIaL zC^_v@-YVPM>*@h|oh7YnuhT}YS!J7b*;GALYeoL9px&zEFn>bqQM04s`jf09L5Q8h z-0vVoFs?o72|4Z}&&DgiUnJ~#~C)3-re^QCCGa6bOW0^yLj^}U&q3w zE9g&zkUu#_aH4~U4?ZC9Z=g`g+n|J24y;^Wz|8zIlH_%IdJ1KN*aXX*TfB_JQW@pq z2`;a!;H@uxkqsR(Ft20kbe{g&jT?w$37%6)TdfjcTgrK#U{Ew6ZrP716f?bHaPyVdtbgonubWqS_2)!1 zffV~wHjy&$o{A@IFMX#qKq{GKpXy?=-^9V;F4~$cCpQ|vSzKL4n80{B8Nq3#fM%-q3ml((*qEDnQL3$o7MFB-6; zs&3M2@|rIn4_fInrZJ7_mzHexw3B&9{`-r_|K912PfPPRNsdQdho+)Oe#Q5blB@X3 zG{k7!(em}%9~>#2KdpP`kL!On!b6D)|6dO8$26uf{Q}VD*3O{Rsv=M0_2l>v?Lrxl zXJHy^Ednv~lHTnNXQ6eJTgT24mhq-pApv(S-xSH9bUMHRSu<8?2nu+5;8nBL9t~B6 z#aDS|U^4jij7ay2LLdwy*vX{9%xrX3_+iFt5gfL(I2FUKIq0m8Th!LnB%% z3LFmtPTIezz1NOkSFYlkfz2460qv3F*Ih*xZ&+vldkX{v;!GZ%_`l`flVKk4@|VG{ z8AAOh!`gzf=n)(fl(h*E3kQ4H-`?c6X<{yxMvA~x03^ix=W;nLWU`neKwg`lCs>&> za4F|{$#@94R04}LQ?_SWR3ZS^EctA92JvK^_dVmI)2Q2VXBw>08SL5z-mDR15tw(` zX1fHDli>)Pe8QF$v-xaQMk*3BP%e7q$~8QA^4RLFRSN?2Iq|i2nTC82hlj@mjWt{5 zu6^Y4fGz+b9{?e?(|bSu5dl@3dH0YZ(Cha*IAmYd7Kqme2L-H6xq1>_K$KL+SKgZI17XS4B{C`2UH-YKdX-udmV* z-;M3N@sMrbVELB_)HKsPgYwpq4H!JzrpzOQW;;mGPk!eXFtv08Ey_tU(zd=b8B3U~ zG$#U>TU$ko{ja)zz;6^lgWn}15A+GP?Z!I!=;O_Aev`im+6nSB*tfc}%>EuhW@-_! zkj`)q;^^d<-#Uf~ej5!iO|UO*Z*ACYxboC0i8w*I0A7+{e0q8s)oR^l_T4HC&928& zNkpS@%uUbPN(0T3YkNa9mO@`gjUAt0XKS6{oq5)Z=(XzzowhOAX(B4;jZBl2x4Lf2 zw*F`kX3%HfW?FVSlL7T5wD`PTMIa>~0TBXp>W4{fX`w7r5lF5C&L!_UmBGom$@1_j zJs4!0N%q}yDKEE#{p=a_shzbheMngvNWZe)8r0EXq)3BWB4w|xt80(xygaGD5VVyn(kGIM zjokyE1|8Fw#`McTLmX$b>}PsqNdEhaX!QMP`k$6efBuZg@#ksU5xS_r(PyrbKPht; z<@Y>NTo**HY(HI;-aYfb8|LwQ_G3(A8q?o6$?=@L`RYh98PTPaym^P0v1l`=G}JpZ z-ZgV-#|+VM?9rGOV3&bw0GBfE*AXHac+TK6BbETvuETi#xb9y0xV-FMk7)#-z308r z@Vz6)gUB;5y?9z$?q-o(*^1{3O#L=c&vyz+EAr> z&gyUPJic^qq*Vvvoj*UxH}9FP9Mb6+IQ?b~Y=%lR-ZUs-N2*Qb5Kl)5>H>(cOdTVqI+0O=lL&!Y-1cCHS+2lT zETki^*p|#MAwbk4=ZwX6`}s!T1j7YQJ%?KEhjS!wmLx%qi}rqv(mRLYjn>$%?FyMG7oz4v3ADOUr^ zVVMRvR+d)@5<8fkUqzY#v35F%?c+Qa*A`e_4?BBXSh#k{_P^IoPVgW9{l6suOJizb z4R`LohuOI${MJACC;0qZ-@w6M6}4&$cggpwuYCdOL<;%C9ent~dpJHS;>PV)Ff%`g zY%+&wrjs}K9_!KWP9n3kfP?Ze_V%~2x&9b$y!sk0UA~6($4?MpyDmgB1dLGw{js?; z$^@2$W)~^8M<^Y~;oc##tjpT+0xATHQ`uRR8!dvKzHNu7SDT0@a*VT#NG^xRJKI=X zeU&mfz~je{v3ldW?OPx4o5dqjh&1Z>qu>8`m|DJy`L$OO4JMG(mV^nmGXZ%x9K+J} zYY2Cn2)8SUB_ixIRm?4~p*xX5JRU`cA3QoWg_ClgK&)p27?b2X-&**=E7)6oGmaDYo10{*n1O&`Ju;BFnde1_%%Gd*-uX zb@4K;$%$R3&F`^|Xgoq)60_|E+6L0m@CN(1w)J!fMjt$SXr~hBBm-p`3&oIN{A@bs zIm<(feC=bhQ9-*=Lc8Cv!Jr6baWy-GIm$*Pm$YXA_Lty*a@TL#ph%oTIcT2PDFG9d ziBk#g5PVDCCBHUPE;;6N1MWjTamu=>Z;SZk6Y{RK>eo(>xvOY`_xkMy6SbjDQ&Ou1}9xSm)6p2FFo^hLFF6IlzXS6L<0HlUPM+|+%R8~;yV6By4O4R%ncBz zj>e;&5A)M_!(?CQw)bqSNUJqIw|z`w`X!{7!f}2*;nyin_x!Z?EC8ro2 zIi_4CU2x?8t^5@9+ub{I_x`vpt^b+GrGFl|`0gt5-;4Cy1xLd?HQWBr?7^7EG^W2X z+TY(FlqGGfxxbzzkXD9n@?!^&1Um8I3fL5$5v{0k4i%qs{0UrhG46^O$1K)u7hT`j(Xc$RzEqxyqa}_J2}hh6WDnB&1IBpX|a~ApN0d_{CG&^ zkf{#8e~5K!wCV)w1Ydc?BE}F541XEuFRjB)-=mQYak3 z6nWh{I>x&{`XLfC38V;gcL>5S%`LLxZ6pI>#8PowT3KPA?W5Z|C2;Et#{c}U{%=^Aox$zvZ=qE!;NW-Y#nvL1ykI`uSt_ z$tG&uJf^0SSX#b~^xP%HrujVxstb9Y6hKgW8bvyiWIH4gh~*GtU)q0i4-?S=s!YFh z;|ewiv}1Eql>cq)e|(31Gm1RpRf>ee1XSVF4Et@B=yw9`^gMy=DYAhi;)z)lOM7VY zyIlGF*U-%G;>qLt2&881sJV%D1I1)c0*{_P!305iqgTLtAN_~`nDt4g(WvDy=$stH&HB>RrQ`*bjY8MbXK)MG!SZVHhX_V>v_1ML=d17&_v zAeXW@DV=08EgeCb3`VJ2;s~9peKmN%Kz*b*cKlnLeU!2)okT@ydd#**n5_0Gt=eBs zJtf^my&>Je9&P$S%EEkPFrD6wVziDjA=|``XwORGXI>H zlK0Ca$-4{BBhx)Ta=%B@`STimC-VOu%~N#Iv(HKwl`EpwJEw~nbI-)YX!ta8Be|pb zTtx1@pGKd(Oqrj7{xyyN_2K=P#x$nCW;)nA9LPyowbekLAfR-3h&};QpP)>8q6Lzu zoNbA!X36whfL+fz1cH8DLI128a$bdb`&Cs~`E}pxWp=ar6Fq#oe5(t)I z>WKC@jlxgzAfs2&1;%xrx5&K3%k{K?_Rt_^sRkh3jJfjGa$cRotoqsv72`WT#e=Jt z8(eS$tu|=D-%6vj{-9?f+v6&SRWxQ5T%AN-eeI7TgW6wS>bCqgSSY5T0@AzR- zPJ;s~zrsE!CwEb%Z}A&v2+A}AyfQP5>14{<4g_8`wn-=!=XWJ91kUm{U#^w0ySK-B zb+ItNjAzd_*uEjuYh4>uP`ju-u3oxqGycZ}#oFG{s8!KumaIL4lM(D}Y~sg1{yv)Z z0(#vR78h1fVY@F7Y-^xIv$UEWOeN!(p37nDV2eQf3JxhVfA9zYJ9!V|*3H)pDC%gn zdaY$`uve<#AN}rshkW4#fAF9G6T&+Gyw$_CS8w3UzxnGpNWdmmoQn zNn?LwADv2tfT@f4R0i{_SD0TH;a(8wXcYU6GBU9UX6F|1_`y2vJ$yhc#D3W6+f4oC z>(}w_r_B5mnsQQCJYicsW8V*9W_rN}VKn-aNJr7?wAubSL{ky; z5@7=21d_=)tiAR{%E^Qcq69KA1Ox2XY!l7o3yhwyZ3T3b1b+LaJWlEr#3*K3eNg8o zlbn_1bg)xne`{JFOlPxpqJd5wIA$Ak8Ba6j8=Kow446*D@aXXa6pjvUi^hzc$`Kr^ z@7F42w3=mf$**{N@bIo}t5Cm?jF;KR)TdYHXVE;`L%(=r&g94jI_$IZy`Ym0;_M%k z6gw@UL;28Y7wRk8>LI!DWXF?H&7x~{iJU}gfK8&yE^TonXC}AZwrwjhCvp-%>KW-G zkte&J?$QyOTJnA-)1HXhZ}IJyb%AmH7VxHavEWGWU0g4Y7e;@(JUv}=|%5Ep3eU1>7sH>b2)|P?j1SCe^TcC@7(=G<&2U)j>0Gp{4irHjA=|``uUNT#OpkEEj=zA9iX9O#0bb}Nu2}qp@Ao3v`u4FS7#9FoxAtb znf}mJA<4ZzGXhPgc(X9N_ZxoBu+%;O{e%wDy~U%o?C#xfkIn}vwMSY2QA^`x;9D7% zFAZ3NF$G5|NBh@Bju#o!s;lEifi>}h1^^h&%4b{`^jqZ8_}{trGKd8v&Eb;+{^UY? zx7DU9S4ONnr+c&cJ@cq-Gxxqc<+)!#UiUKQTkVE@v!FKcld3vWjlfYxal6@}-R})7 zSi1&1gIhf4csDIE*9;{e@h$5-=n;HPu-q={%?7I*q_G|%&}x~1e~rLMdyGLqe*MxK z7MJGDm_OLr^*qVv^T;GKHi)33x`^&@a&m&}%WDQ^3snNHR*QfzWsc)&>|1gk*J9Z- zxhcdFaWwh_u&D%M;Rw>Pga>HjNu+Z#Sl>UeEgKrNP@b2g^195Ej+$|hkY)D^vo<4Ru}Q{oqM*b;CKGXKSG=Q{KtRy zzoXx5Bb&<*tbYS@b2GU6;66DV;Am&hoUt7p?Ay1>E-e!{_p!hE5L+Mr7=vgB)30A6 zP|hM43!qXz!4kplpZ~?5qtPB%NJl<>2fK6p9F!qo0Hd}pkaDp4JykUFuPy3VT zvy83HN0?b$MJSqNKg*-Zc2IvR6R_vz=TT)}Y@QUXy^~8z1m`Im3~F{8*xuYiJejnu z8glZcN#B!72`%<>dHO(=n7y zLRLrmt$w6aEGDEUwLL_#BpskZEs}hD^tv5et)%_=8mJQBmWh{|`0RncmXV83i zP#3Z83PII>(gW{Kuetla1|8HEQWzwcpSyY-dcRe^;+}0AAn9t`j`&`C+qE@jYkz!h z`6jLsaFTfo7JY**I6W zkqk-Cp_1)or%~yaw7c>|UOu|vqTGcepD0BP{ImWB7U+??^1ugbN-0s?f$iyV1rKfGo2}tn3~R-AA#uX6y`2p zK@9|a^(x-`^FKq3W!$)V3&l2{#)IY*uS;3cKu0*6!PkG|n^>BeBWNuno=zhaNwSUR zk;!GzBEXWxCX`y3%4HDew`bSGWHfApIw6A1d`FHTJ!cTo~ae0-WCd78^U~P&0hw`BX)mkN?Eff9INfh%%RBGBPp@A)} zW+>ud_W+^E5LOl!wes4wejIK;MW>wC>Tk+Q7Xk98W&IOfg6Vb>Apu&7q?28NcRNXe z--1$XPVFQsXY$Tqx=cZP#Raw*1jzN?gx283z8SLfxf4g-!L=D0m=P#S63JRZ_7ud0S!KvuF-Y^4Tec?jcH6{`o$&T zHOlS3b~63bkYCs7e)P8^mGxQ6dztt@X&r_d?3^)wMy?|MAo9oa$NyQ=Xx@GvUY1-Q zFGxE+0&YxW`fDV4im%n{C^ZP$j|oEZ!x?rOh7B6EEdr`j2hxXE2cC7+EQHyWhIHd$pIAduw)2-${E!8?_2*<%$PrS#g19@uM`ZZLM4e)iz{6eh6N|1fc{t znlY^L8|$dKDFSKD#HR>kZe3c%<&`D0It}EqX-u-r&CN|5>}<39kQe^GLck?2-|JhO z1dn0NXQph~^77J>?W3+$sy53uGc$vDFl^s$I+;X=^|`Tj#lY|>f!4w_L1?pM=b!i3 zlr0-P>7z>n|0}P3j_pgZ9!(>jNa50@OSpUg4nBDA9XwutgtfJ0T)lZ6U-`z@QEfD_ ze{_uL`30nM(`?(2IYEm=Q+DR~E3dtZ+pph7p-{qm?|z6UPoALBs^aREOQ__TE}bym zyIncJtE0{~X7jMK^sq3$ida0wHlzr(>WIfu1fDUrXAsAQf~^uL7Ymr3oi;%J_V<5) z@<|aJ8yi-~La~TBg5+aeXJ+x}-aYK^?_pti3CZLFzh4afVgt`Ux{u{+ui&*Wd=>F< zhQRm~U;6Ub@ZsBUWA|VeJKG1?C+Mz`?`SN9sTF;L8652%qQf=}O$5>F^ld9aFh&5I zWWJp)@`WP;`4ZcFg5NlacznuwcPdH1+^(9Vuuw9C<(U+ApFP5WZKm1rnVBiJ(J9KM zstp`8`va`5Tt}XD?b+5E%4-+cSKXHuP&p~tYLA)KB^zwfstK*e(2;Ng?COsixal@J zC>))bZ-b?!Rdfj^yR8mlsVu_rB;LIJ1!NYN>?k+!sgoV#;7!WN20$o-y&Cy0<z1MT?MR$Xn+MllXeCh3JAI?wfo%D;!b!F-5C-1pm z7kF{hjy*=zKK35#qN~ZhK)hBoSaF{Ivm9A(I~_y%f%2rbF!|#v<8gR(dd+^@Ac9wx zt|Gk~FrNFZs|H?0(!lzyd|aL$&t6jd48 z{?_%=$i@G8(DU;4wBQK2$WEy}k1l%e()tT~-ZMw8!A8T2Nbmi5IJ)SWpDuX+0gX)^ z&_AXzjp^r1yZd_s9S2pZS8ShXD?)*gvzw!;d^2#gFneUoqJ~=L;RIU;< z%c0r>J9l2Q(CZKGBde7FY_sM0IjpW;LV9){B%K9AlaJSi>5vxb4hcya(kUG>6)9=y z?ru;)Y3T-OiIJm5N#_WG(cLi^4Flf&fA5EQ;+%6|*9~NneOqh9DhB%E;Sjxl?c}QP z?y->R0qxB588GjdB{8>AVn61})}J^mVcZ7(IgkFU0-oJ`Kyp{gaqz>!8!5jh1>s@r zQA_K2PP`IW2Iuc2E}dappLv{P%EMC$En?t%&MxVt`MR*os%5^T#K@#1OnN&G*x8Y%?V{c)W*r4*40taFe)?1-xK z)(|EO>oMQQ3*e+MY6~30`EroL@%&5}93M~iQqI~%I7evcD&5eij~l(sR*3$k7$Iwl z>iX63BAB)Jj?qu!WzwvGmv!fzzVNRGi&g%rYIA#UoF;113Y#xy&5a%?x=8G>4$?e` z{IXXUgIq_SswKrh;<;Z^vOHlR3bbb>NjCw|NChs{dCoN2J$Iq9M@ya$l>+{C4uAUs z*})i#9J`vF+_Mf&g|EfgSN%(+im0$dm98}HJaznK(ufnP6HOYB)Hm__Ml-8nUx2yN z%Nv73!Ff>jfme&h6u{%)$I)rBtAE$y*jX$#!3UAwT;w8Ve41)=oI7RuS4W+?@+rUw8ukLy`ZIImxd#zoe-oNV;k>v1pVkG1 zH3&4#mTfe9hSSO?i-3m9o{Pa7@abt9^4iNErm&oIIW1|OTJ8N4af;bWnT$yNLYI>K z#;C-DSdu20fH;2;DU*&`tNI;#+S$g?$pH_a_LcROd^bvSbqvH96qvHxhU&5s5;~? ziOocxxXQ-=#HVueRHc^xBtds(U@1k9mb1jr-e*Uourj*1_>S}p#dSnln`~>Iu;(=) zhZ}#Ly&CXDlo=n3@Www6v*Os{>zgC2uwIBK@YAeYQM%POqw|DOHGDGKbv_hpQ{{Ek zXkGmFtYm{b>o{iD9gB)(%iZ8gjc+-gg_6i{H!CZnDdT#1*?8&x1{1j}dqaW>h4(N0 ztvq9sGXROYed5X#z#aRu+TsBXEwuhje#V79OwRZ!O}VR`_j_)IqcZYakq!SNKe01l7wj;F=JS!tB%+EJF4CV6+8Im2Q>Hg@4pxfKBLCO zxHq!K8Pn~{?inJ7v{q#w*_jnDi!0TSbR-TlE1DVc9on{(U22RqsOyqv2z#HaV7b2O z#pl>O;;B;phGuLijDxqQ80k$k{|S~_2F&)Z>1^vpa?r?zD;LMGcL&BfF(ymR*r%H@ zY15bo^9*U^-SJI0od>0@s^>2yu_Wmnpc=)g*pIIThjteRPCQdNBeyKLA~9}k*p2_L zB8Y)6zuem4e7^oHZGpksZq+){gf#Jso?B-wSnPCewdA^Ly^fr;$z2MluoWJ0?ktAi zpz?PZQzq{N_Yau;-go-Qh`ea%lxAHi3end94;%P7dnFD$wVc#T!0ye1aurV6!|56( zn7<*C0GhX+zTkG*%CrCNu1%Tm^0FC8V~1~}w;pYj1YY&*r$p~5!E;r#nqq&IUaC=9 z9pv8TwZ-rcYi@=7FNt$v+W^^3j26vY0YXO{gsa-(dgsVoCCWnncaMkum=zVp!H|0y z{>Os0&zN>5Q_UVshjq?Szq0^l$~12VenuRK;wb$x{Y?~(weHTVn7rsYb)r1Au|4=p9MszNsHDiefalsa97&z>~<>yIN{LG z&ea?Z?bn1mDVg6pA$<;4>X@(9dCd4Rmp2PsIIc6R935l0tWC?RqKH?Jp7(>ElFFp}hv=}5y zdP$}kGFzXU;qrJ8cw4uoiaKOCXQKgf#+d0?e9a88@Yu1AyzzfF!h`Jmu=j1Bb8@Qa zg7Bta;`Lu$`QX2zOJ{Ly5;<<1$8myOuSnjAK3zSSr}+(fq%gbNU`t6!N=$pb6#o=b8d59 zIdfTIj#^z}BcRCsL|hq1+a(tJzTY3K^s~hB{+C_uk)csm${6$T)!)5BSm*?OY;m&gu2j!dv6UstHmVH(_qKoHX8!lvXjWqI*KPpQ(z?&^ ze5m>d9;%OSQn0}9DwT`>rk>p$01K#prtn**RX>N7rZa8M4G)fxBbmPzUMd(F8uzNz z|8y?=c6skZYSCt7*ly+Sr(czyD6n{tx?qQ?H&;!TPxep*?)NM_w91??-&GNso2D2cZ`ysFPUVtjoUWJ{w9_?S)-*M0O_-`gT2T_H zpd1DH3PH1#b%7V7DvH@%Qq-A>yqR)k8U__JlSLg_W=|C0*=M+yK|~_hS^;>q0uE0d zoTd;GEniHZOmk5|HSw4Ev%z?D4gW@)g0ngbevu*QhpX>?Jyb|ivYaUwU+ z#Z(5p-7^(OU~rSu*SscBU-ZdCrCN(WXQOqMUv;j`N%81gNlybsg{}jP`2+>iWFS$C zvFNvdZIZWR*P*+=k{;4tmXgrNK6+pL-VJtdwf)5TAS|3YS7f0qfE0N67SG{s`O`%e zT9F`oqt>Z%&JYV94kjaEeYyum@7fA8j@+jmQA?6XWhzOqi{x!HI~0L!t?S3TdJLgouS?u z?Q_4qDUL&EKQEEZj@3X^&ai7qwRy1660$!h?&4Q>8A6z+YBQ~Y%D7(Hn0B;IoMH^% zDJ{tJ?DRRa=~kDoCp5(;wBOxTtfHC^EvP;mSRlRpnL<4&6>ajoj4?e~)Cz;Uf3C8P z&md)8Yt3q8E2B!ZMy|)i4j=8)_XTDy=p|udLYHgut>3+cRr(+4Exylypv?B^n9M1z zT>5%^DHR%1H#ST4`beSt_N&Vap^V!6Rvy{cE@tw*;N*g8whFBGpMYbnb_S4LNQK&a zT`Rgl7*l!}BLVpfT)cz~A5^jJu=lP-aJ`Hcb($cPM!CUxzl;j0FQ2r797I8|xE(f7 zOna{S#V?p>GVWS>x722GOQ!;T2k&3nZtCgq0!rt~r`gb&&LWm=X?!?FDKyUw_=gR_ zhAC)jSBTUGyZ-I)|LR^C%G&)|mcpX-WhL3*%EMj|efEn9+fSp~%~DI8tZpvWi4W!? zZ=jy!{b`{=(aaCs(*eFWdlq2%8L4k0S^g-r#rkr_I@Uhc>>lSJIdapVpx7V3>MfCU zcxIA4UCvJVj8AxMy~eFw4Nx!c&yL*5jHszXJK)EC{OlObg5BDSb;akPkh4Rsxz^^8 z8jF#oRilpYkv@!O$Fp7y)VurR9M3;jGd_b6+JGj_4G?cW$i<>{7`vExKR&CQ*4}GU zFC%|1YaHSjfP4e1GnMSeT5R>F-S8P<+4Cn8zBC6fuhV(GX|S(Wn<8h=DX zj>D1sSHn8NyDtX$ck0fY-8_gS1Fox}mAtER9OBV$BM?AwZtv*9b3>Hv35-S<~--ozTgKk;&YWfdL37X+h5`gQU$pgQA#x)4e_=dar#1G&pO?lgK76| zsZsEV*Skfq$zJx!d*M)aD>EAly6s_nT^mZW5~O0r09L0;lZQPIyHKK_eX+vVH)Sx) zUq|<32Rz4NOqy5kyxEWf%6|ByWh9v@ayhG&D#mYvdTf(fu3WAjx-EO}eyZAh*XY-L zsk)oRix&{7CLdh=VJ8`#^dAps+7gNIhW6Q`Eo}kuBCX^L z#NCJ@8~v|i%@Gg)gTv?@4)?XA>2MvbIjx#;o02aZyV4Sf>`t`keZBqnd_y+ggkyYUN)U7=bc>?pJXLY)gOIV21fK93cwk664ZY8eM@``D)XIgoKQRlMf&|WSk zsu%Z18P;{*_mv)fcL9pRMqV8f)7gpWJDq<%Ed!{O{RA;nZ(r>V3WvR+NwztQw6e8c z;SN5xh9Xi{;!G_JxpOvwc1He*Q!T|MB4~0Bx^PHq%_BsQo|KAEXD~h!WV0_wu@&)PY{a8qoA#OAR^be6!wYj5n#zTWNt~ddQW` ze_-e=wmQOylKAsZBbTnKoDtNdj3`-a^AAv z`cs9wyQ;3o5U)fmZJ0N;LAW);;!DmbqVV&Ng0 zNF@6#Fdis>VolE2&r3~5LwRp?maTVeMrlm=CC9GB`u=YGZmjQE?p~K+lnIO~?7Qp< zO)!xFtPQI$m^V29YcWkvz~WU>-yx`T+&|UH+n^zNl;s8f#yz~#Nu`7Dd7wjv%w(I> z8&Z%2ZpWuri!EpM^#tCO4@*Zv)yAE%>WRz}se&r5t2d1x)`VvkHX)cKUXI2UQQIjL zOMb3Q_ut5Q&)cwWjREDtk3%8%tNBIqhZpp^Ak)9~xFqkZb=;CU6Zl18I}}DO?(;bA zJMPnBGBV&tH#;ke58+!mV_vg`Q6pR1d#)(1!;fk47NY}^)fv|5d*9}Z+~ZHJ(}*H} z!M|f&Gw70_Q8ZyGnKtCX{-VEor6b1=l)|!ra;@p? ztaFQbTmxP_<7$z|Y$73N=lB)a8#8)KdpjwK?ufZCWxu5sq~4h=)#{$Di5Qq~f077v zxL#;GQSD4Ik%un3pqotFO)Vj-x~Y;vq?69YzXOvci`0fYElr%90S74GxvNzT#doKE z@Jm&yLETH8xKQvuE4oi3ysK35)^NY-_~Il+iV=yD2;W9)=3SKqz^D$80gde;r)uB- z%iX_ANbO5gz8u(t1BdTMk`QjF1pxfRR9o~g-B=Isq^Y_PH8@c9(b+#0m|t%9X^%UUvN$%Md;XrrnicTdHc%XKh(82sVmDM~Ad<-k!OOh+QDTzN>wK02s*8ffHu^~68<)K)DkUNDx84Tos@cWu0;4?@=NKdpRVQ7uC#j{+I%a}fz+Hhm(j@>p$#_Wb zqmPRZCdrkztK5YBNF9xZ%_g^yM10Pg@peU36P|BMeAk&?2ZCZLc#{aDkJNuG&M(x| z#H4?H5+4!!XQpjHrZOxNRlf2(jGu{BeWHSbJdNMD)@q&BH9aHCs$Buhy9!D12}q8_ z_}i|2PZdEulK4Ce!IpLEU% z&{kr`u(`SQY+Tg{z@>^yTtciDGu-nyhonY&Yu$7pxQf5(x5-#N)1{zvTc|2~T>F^Q zxdU^}!`hI=QhNZ^u{wh>#-E5yW8niYsep?Y(?fO;zeA!=(b(a;=u2uFl9Ph$9D7N;%Y-r3icam4#^pY_SKD8=2^`h? zHNoHO%HdiZyqbjR=y`|Dea?CVoM1voo4m}iF;#{XfTT~yHEuUs)4wQ8i)1u+s0Qc_ z-3$n9t|+DYZk6447R*zXmUq<^(6yYKNRj0RFPEy_>O04gp;1}O^(&L6aP&5Q_eTo* zpAIpFlS%}-f_IT9>k+5cfM4!L`yE$D!(+mm0Qk*SQl8J`{3`a@T48WSq;6we3E1(! zBOF~J3*-IV3TQVe$)|Hk7Dyrmzg61u>^t9^M!Yr_A*7ldL9CY!?OK(MBB91g#w<{a z4XZ)Z9or7pr+~@5``t-fiKhpf{QtiIXiu#?uA6xTIWTkTOT-(;?LHHRE%rS>HVF5k z{VnlIb4>&7AEDlu*#~Rv${Ym%=k&92!3HtmhNWEhXsAsbZ*|w5V9p>&may5u`{(Up zE#g;g8N_PvRcsTkF-}g}EDv->T55J>ysif;Hh@=eqf zSn5Kv9$C!?@y#WxhA8pp5IlxqyO6%^TBJ+gCy@^qA|suw(+g8f#Bu#35CmvUP2C-S zogQkC-c_n5S0)sJ?$X&BCrs}9jM(O&7i6v6`0%!VtZu`!)13$~Pd|*cjxh_+Y*IhX zde)Ek7WkeWrddS3vyW5+9FJuZG4hQ=Y4KeCWr~T3)fCTQkotom&0ht>>h7Q`k8xq2 zsZ?!=0(@mCb?s5qA~SGO)_Wbi_PM>321ZX%E!m; z=|n|S?@Qj^?`4NC_orw~(#`S2n<0TuWT`u8XZ?q!%SLBx!uhd1<6K^leKm!r&w$ILqX>qh~2C?st`3{tu5Pc(AqNQU|2OOamiGeRq4`*ZrE6D&!*LBss4m)_QK{$!X@r zq0>P7Jny|<25a<4*VOn$d^qAw2<<K0z5EAJ)j6ykAjCr&R?ae(w8%Dj5p z((y}jMJV3xPG5$7k%QTI^g`keq~*u(A6WaSykC3@%Rt`mk^7sgYR$?LaFZ0baUCmd zKUVJf`32D4aI))sX)s@c@9IqS1+82v2`{)(rJUJaJm22KYks;v4gTNQZ&Nh3oFm`( zL8;(_Vu4BjJ5WVCoY_W=$XV6UDD`Wb zJX)QrgYuj2DEUnXcFpvg&V|N_jP7x;*!Zj2ntJCtBES-axGGq_TSpoJ3sx|nBcJKv znSeBq_2xg>Ew>Jpno_F)2?wKFj^AXK+IF6|9g1cgyGH$@ofQio z)L{xw+iizbW5C@Xr(~A~Ba`|DZVX30s@WrC_X*?G_0k<;0qbp2N#+vvjK1R`=d7@rzn!tWq17o3I+>~NW6T`ol3ze7h~ohj88V}WpN*x zkHm^+lx1U{SsP#%0fXJ{8=(d7*n`rTAEUZ1)8%dnOmC!CoxZsF_2IBwIL&y&1Ci)) zulxd!c})8jrhYaBnYm+dE(XBn=M`Gi*M{pF+Lhw4N#ecF93Sw7=7l>>Z=vfNrVm2@ zDL!@#O%+*xb*)U2ZLCvQuR_M|UMAo<2n3`#K`_S*#|8M;JMRKIo$5>40v5&i=>bns zM8Sjdd0>i9e{{}a9YHl#0|PqcqNCTSEQLr)kD_3&Orl&ULR(U%yKzRN`F>pmId06} zW3D-%z0=pBQ=X9oY4IeE&>aZY5OG;<4s#Uxc6s@3@m0PHmmjH}RTz$?u-Mlh9Xav> z0#Avyq?hjKcC%^~faf2exR?dSITC_H;16<5eOkQn2&{cV*2{9WFz+DWt4*~k4p#V- z%1-mIy5c(;G^_bsBY^74jaGzp@RVlj;80s?Y5-z?A1z4_XM1zQR_7O6`EZ9;z!$0`X|~Yv9{fS;+b}`Mbn@nNqS3rkz48iezqIQ zpJeuL^wuLGzxvt=&kf)*>1kdG z{!nyXE#-4LU0VEPxAz-CUvBh0Zyx>ef3O_o!pb}yD%T-WHapCv^ApCyuyNx`()Xb7 z?;P9nU<~jcHXTD2%V~2X-ZS)MD6gEHq(|f7p0GoR!h85UiY$9Pj7o)jE)+=jRj+r$ z+~hIiOBml71Dtyl5-L}9iHTJ7R^E$dV^7Yf;1st}(TMUYm`&4koU|A_p~*wPZxf!U zsb5)-MfP7$P^Xa{^7+ULC|E*>r`rPhKCEC2*t;wrwulyPW77;~PEI+tM*fHplcU+ix87+9zW__v0UO83<5hlpJ5rlJ zvo0;I6%>uvGxbZ!Z-^f_q>FmqJF=!nkAA1mWqS#!YyDYV{1UUno;)mI3{isjHi9KQ z$(B0hWA~ILzWN+LXd~1tz`+N%+!E*P(}EO?L_*r=bKCb=X}@w%fr*0!>kFmqePP=I z`EN|f?d!AQWyKIjccnWXw)+n52Q9M@04}!Vs1|fGU~KeIsU+%fqSdfByYy3&}L8z7fsQ$2)U=Z zH=-$59kssW#2@9nclrv8BX1Wu?Cnr6!QKF7D65S6>1VkQ*OyX{ZBQpn01hL`)bY2!;eTYeM>*^m!~%_M7ol{`O~ zw01bs{7xHt!k8j+eRBN&(jaV0jrAsP9QUcB&8Dr4+cit3+hwQhBY3_HmYT#D^%bZU zsrZ^V7@mQOy?v}7-GSNKeicWI)S6cF5ydKF(?nXMF4W;@$uVs}YG2ByrPJgOdvPq< zQi-`OtNf=-lso8nvZjoF{Z)hQK5q1R8%ma#*uqAaCd{*j==rNAjEsWUG1ln%#om76 zCYFvPH&znKh38K>ISkp#7+7_4 zi6h%JP%$fvzqlk!3qqb_vn6=?*t4G^HDBRZNlh|`E`(%;8oTv+yvnT!8f{dkSX^uq zlM+*Ym1S|Cx6m~w++9k)y38U-Og>?kuu=B08;O*Xw~9Po==*!Xx>%&lyx2Rn#2b9k z17`zBTMg`#2Sq5ZN2=W4#CDz=rsrlho&3qz`cfR@$*UBaDLmk@c;5z2)8nDs5=PwI z;L){ZIZprNyN>@F4n|eN`{R7Wuxgc+lDoNC}=so2tTJ%zMO2ofDka_#nMbaS%4)EBvhpUDU3J^5Jv zb;Ln0A+CRv#eChCWXwI+3(IfwepC7aZ$Ur+H3ocC>Ew>TW?`Q%o#~X!dBxG@^qu2A z0n$(YSO?TPz1LJ_s!aq&*7r^+9pG~8N{1Ux>$Topd}q%L>e))Z#e--JLgu}L6>|3E zPOGoAzP|%&YEj=D@e=BUZTR_*XZe9|HZ=XAxHFgIkUoOu8Y@PG%l|1oi<=l9$bj-Uiccjv9Anz@bcPkXlgfb(Kr1M zN|{q>P?pfz~oE_8p+p7x})ZFDg@&17=pH>tF}kmv$sOIu^zxzIAdXlYBs@PZ@Z zD*LP@^tUJzW^Unb%H?l_soYa0gUwMgD&^{rPNQE+R@wer=<7C@4ldQW?3M|K z0Y3=Mgt(r}(pN)qT2gf@;G`J(LBi3c=oDcz$6A*Mm=v=fbOHCp_So9{gm0xW z954g0H{1H_u=(N30dm3ka$nrQ`(4AN0^q!M15Vhp{I@L=9|QP$DAQ+hJs6}*S2G)R zg2xqtv#e(EKQ@{MIruDEhmzn+X>60TCjM#UB^_zA-vi}}->$Ky6=2Y^PUN0tTj_x?l8vC#sZmr9i@&EHyzDIk{)A-MCS!ZOVsROVMrRx%^S zQ(|1(PT&ST2Qw?{TsuSG^K;Yp1GRvQo<#i75*t#roryA^hClQG4T7?fo&feZLp_%Q z6Bi2)XjV>VYn}DT@OHi2BkSAB-N{F?j_a%VQ!4nw%SYtEYR}y``r9P8qPI!5Iadi8 z8Fd}i^2OWVl!~}ErwhbZT7&6~ck0_Zw7NRt$6`76$RQ5+knu7VPz0X5&-xy9Y~T=% zrYBYwj>*3e;O&DXAG8f3=&irXp-9TjP-@N}u73GpMgNKP>1eOSXA5oO^1R;Sg;Hx8 z@98U=t!TjQ^rW?S^7eZY?%1n=MaMHzJUW<_5inEf*Zui?U`lC#%i6!iRMt93pv3e( zrAlj)RN%E%UNf`tNqDJ+RQvA$?6h%20c4o$ix{Ovn;#1$kabvw8ZYvuDJ%qcu&r5J z@*DRxEp@VUt<|GFTjOy8(^*wTNBs$f(K5Xq#h6l&?}{Av`GlzTN_7?c0LGEmRZ{G7 zE$9DkQ=o`4g_YgyYlx`;Q0odM)ff0ZdBeI-_H=1wD_lKtUB9)?Ssd_Tfq-GM{Rl9S z{?yXOWVNs=#vfae{gjhuBsCemA&wZJXjwhEV?~sHpnhbOET)@I=g-f{Y47eSrNa!n zl!`rXpF+R-83_}I$@{_ahG^wQiHrcG_$G2}dbpPpU(YLtamIwkx-#Vlc=)b@K~4Z2 zoC`dl;xDC#D?%e^z7Wl}Bu%us0BFfwy>#Zc(0IoD#OWu0BCKqbk8y4$=Dnkn8#sfWc710}4PZGMDk2!RJHb2?A{?w_Ek-a%l1{bx!)6x`%2XLBv~b)Ad09N# zv#C@3%cs~T`0m=1xm1hMH%-3UKv)({cV6fhpY)-OctJ5z_-KX^3pa`UGoLH*&lKfu z>+5;%Qr?g+YvR_=O)=)d^tno9fs%zmFq2mb@9&!q*XUP84t6nm}BDGtD zyYQ8l(PHVBQTKOxoq3@kACm@*k$QNy)L-Pz5j$_%zJ7Nuj{EmjRz;cZFcYbvnpCRm z7l%1BQ&wP?a^2qUA(jQKV!M7eVdaEvOMte1u7RS+i?b`vQa0br)xZ8{Xc4Yx=hLY2 zW)G~3cj24pB_9_IS9fwh-_}sVJTHHbqY=&19PAg1 zR&Rg5aQ*X5;QH`k%v{|SgCNMi-FyUgh?RhmoQ5h6o-PHREyEwFc*g|HtRA1qe;|ej zAq&E~i?=nJ&uww*0pbw1eTkjtG>Sb~EqudvrI8V_?~dv_7Vc&9#^>cCt$~}`21n8X z-=9`HZ$r#?T}KX9H=5|P!EX9XHrTB&*u3KR{kLR%F1fuaqeAL@V7fN5a{urjx-=yvu?GVBgaxMDwy5nqi&M{iPYQE>qtN>XI+w*r8es+v=sc93|k`AVU zo!WhqlawDn;{YF0W-3M691Td~vBdk*`Mh$uJNwu=(?tTc~+YA1E)XK;_GORJMcu+9@ z(jmk3L&8Lh_^K!#=ZGglP2hqe_H|LD=k7kv&P!>wTe{)6l?-C$ywB^bG)W;CM1+}) z!Z;jKG=Lnld6?vO_mp%{QOFy?uD36J_=e35C9{Hq*PK`ZWYqS3ftHy4}=ByBV6-45l3mxo8@k&Y(J9_e>>_<$ll^5A^)d9emet z9o*0VXDQlNxFa~^v)^yjEiP%tPmxh}@6z9*)DyKFNDv_=!HJ&}#lgmiV+*?&W&!^U zfUT_bo=p>FGp3OKuKhOe?o~uXeLddA zuquh~^GXR?>|rbg&mfdSbxFu$(=3=sQH`g?MK2)&rL|87yr7VIAD~*a0J^U6m|T&; z-ofTZG(Au#hGEU?QjcC#tlRPSJ~02UX*Cr_>iE=%7{lyXI~5k#;EyXTyaE&e)QTZV z%yppD*l#y*7uajru$_s(M%b=p%Udl<&U|QOnAOqq5s1*253#&hgs73{v`P>_cm&dv zt+LO^FRZcom>$8~*Ws5NNuequiC!Z9?6h?Teq(Xh_z8a+pLy=I($Dv?V(n0JY9^2> zNzryM9SJ)db;it@w8d%=5O7ft*y=hochrQJt70$&r~je<(Z>c`T2YG4Z&i2wY|*j( zmaNeoyMjO?{pCd9Zo7~CpcUo|4A9W~Uiuk))l&Vd^+)u-wSpy7JA)R3SL=(jIJ2d* zmK|6{_P7k_r5V1)mrfU&yM<8AQb+Mlxfb29!A1X9r5S$ANjXBNrW{W};hbvnw?(0) z@l0$q(QLFoH(YHXwp$Dg8MNUI38U7d0j;Tb z4!~Mn^g$K5&gK68O_jly&ru#OnDy2iWf~cY%6slDH+T<8&FuyL6<8#3#PaN*0%YOs zog3O3_Q_iPc~~S?zZ*CtQ0Qw!gtQ?J$ferg6wmE_p}t501E;M+P0sear?XicL_3GB zfWQ|kFUEPt;f^NoODtHwG{#Nr6uCT9I+Pv5dNIA&*mXZb!tH`BBLOx3Ah}59`V_<^mo1R zT^IX49`?5REj5{Q-REaJnBiNxYh|V_YeUT{T5&Igo6BjeHou)M;ZvQUq)-`ydGV^3 z)F~kkG9%}cQ-@$-Qk`O4G6_TtL9ak{AFqSSgyND zYzXgdMrT=|ia^r!`BdC5*_G%G$qrwJ|NTg;`Y)`?(n|#+9P_Q3RJO_KXP?0&7W(^l zw2!J}6;hZL00)`zwZ#RQ=97%xw9>zXhLQkR$`ODYOFYSs$PeN(^?-=zt>DFAyD`S| z6(;HkIpBAg_@1uG=P%_IVPD1^&tJ*yaq{GOx%!DSwg(Q8&qRzzUHhKL$fEno>tnAF z$Lc`KUKr4iX%e0P3ey7f0VO-e&-O7_!&ecNf#aPk<+`IG`7{Bb2Sxt4gN?Id8WGy- z9wdEy>mSYN5g!aip;Rl)NH5@~K1!&A7~iZA0cV?2UyN^?=Z8?6TG~+?>rG;z|Im|x z^8rBugM)Lm?!$0M4)p%3^_~(2*RX+Axn^U^g8sYLG^Ypi$09^Ejh~5jmTMb6k5`fc zdlTMqW(;sI9F?Bgk`^QJJD1A+FiC1av%sIKEKy?JCPAX{D5#BQ_46I1wKaymyXs2U z)UfSmQXzTP%ef9mNd*b&I`nXS@Q3vqw8#KMRZeo$itVk>L=OV-i%1FulYHB5B4w9# z|2MmT;iwi=KM$Vws**@ZYK>?Qdg0*5p3y%ZZO!0m-C}td0Dl_niVs8^OzMCff%rf* zE|-&)|L}w|oBb|nXPs9#2J^ts;-IJc{mR?ao9NCPf-Id_<>zAjI`1u(y@Ydc$m}m$ z8xIc2`eU!ygx9z>b1n`j>LV`mMs45C>ieAXc`;HKsxFI zKVg0zz2O={a^Ax29Tp~z$TDM^8vfb7{7!1oq{#x~4chbg+93R9tYPv*W`0mLEcjfV z8~WG_mRM4#S(NMSsl$i;C{QactII{03#MeeeU+nN?N8h?FW%eWnRV7EEb}7!BGr>b z8rmkqmxp<aR`5t0GY|AF%*L^3jzD~AT?bG zr)#;`wztP#)k`5Zv4O#{`ngvFz&b~UFw_Sh(Ib+k`NM_kQ!0;wm-gabiz;*m7a~X> z(`ew$*=Fp5lY3-Gxw4N@Ja;{_mOpeRC}3C&_?Ly6DO3Y)BFtq7VEe?MYxB{cPor-D zB@~=QHQDNPp7BP{=g88f9zF$4rkIX~t473TR_QSvHc8r&Hl#Vs{C|pVS2g*A;qsB? zrHzu-qp65#DLMWAwJm82Qu#b+#UpJzaiwjobaEAy)_vrypVTx>P-J#g)}< zKcXqkX0Y${bW;EgpHYa~$Tn?1k1=kt51U&jOp6JcD?uqU zm+$>tkJqYKI<(+9V^`cYVomg`iJKZyei|+eA-i6#5QBtTeuYfSwFvm721@ALuHkxY z>Q~@Vc4-*U+1Q{9sc27DzU7V!wTO_@Su?6n!DuU}Nj>(58_&Ng9P`Fkw!Jww*)1AL zYEDgnA0M-V9!59^ycvDS7y_FgsIye=cRo2cd4@MY#!(>6QN^IuN3r9E#Bp|10daQE z*gGK0+x%*Ed+uYk@~DR%X-honH&MbgnTkIlZ}3@Bjp6okb?T($B7XuBYd+F_Q%X)5g5i*!XDD3tOAdB#xtW(GsJeq%~F=>X?E~g z#G5w0;0KwoppmQ8ky^v7uF6R#w!c^Sioc^2H?f)wHcbInbD)*3h2dAMIq0)KO{8CP zo?%J3-=y0-#M2U?DpDz=Bw;EkP5{X_P9w!6K!lkRnN9GIAIuWQ%w%I`!Tw>Ztg%_5 zAad7mB>6ug32$N3cB3A|k<@0NlWY+Cb3h1ACSP98Fbe}o;YXNKyL-&?nAg8&eqZM^ zo(-rVou#oj=Yjfp)Qfr=^Y_Sp+KZ{w9K8GBSClV(pL1?%o}>6$zaWnGuzEAl~jJ2=d#tS)IEg zy;O2?`_K`dSr}v*#xxPWA?7XwLL3jfM{cME-^MtViLn-+quu)@;CS9C#xcFDFxjIs zOC$eqHn|C?UGsg-=op&pG;*b#F{5@>@dH(HRw!ayD4o9qXr8}Q3-`JVINsKC=L;%L zKg)W}q+=&GVbk4Eqaxz#ztW&v!sY`KW+ifsis>Yqis`_i4j%<6(STH;b3GS|~nNDCH+nmOL!R5#{II@Iw*^Uteh_skz>h@sE7@ zH9+`FA(`P+8O^{1H<3QA;=&wPk19?!;K)-T0;o53VYj1Nf7lR9I3eywehX(1&(N8W zME$W>%f?3Ub~458=Dnj7$9yl9dsa?kD5H(+h_NuSVqK`O7fNs1W;Xd07d`@Qdo~!K z3J*ur%%J7YI~UnFdmsG15s~b#h|$`HFTl?JR1iKm1GQEm(!2irziRm>3Mx7u{Xy`x z69zxzzSbp~;A!}rmdT1eC#XHJ%e=X01v{;@TAhu})U00Z^f-sZHCQocbBM=KPT_lV zT0D=oQ@%eQS9z7^zs$R&t3@8z2k#ylOL3oR9gVKW&s$&7YWdfokcK*zROTCwa^Qj= zoFKZ{e_zNN@9kmit1J9)ooZUu`!lv7v651071s?tz~4*ju{iIM=WBLA-}d>gg{eBe z``H%g5DG;Fi|}?_Syz~3mQ&r3=g%;@VUMkiB(B;WzKCy{`@l=jrXbj;&CiyR`B${# zMyJ<94Pz_jGv2q4lQ^swu_f+y9*lF2IyGssy^_f@Osh|%bX%O6QJd#YtG%MDH_wB2 z&rSQNOhU*zuVzepV(FS3#e+C9YFn=*gThzJ&dN7WUZH?;j;MhzRpG>)dTCB`m5mAP zuv8ir&@E!LLxH(^{$vPmQCPFaN&P_cOqaa=0QMNG= zqUUI{1h~G)vjDNBc|nqM+ZntYpi@axPhig|8~slfMvgt3AfSP$3new)>qon`IDhVV z_1E#v70#h6q2h~g>u2u1zwkLMJs>z?e+DvrFT+l9AgT~#D}1yVW9Eh>2i1iVTB%3i zBvTX6UI3UuW(@5%@^0*@!{b%L&&B7-_Jf7-1SJhVPWVt>q{)!3g8yt^80k_-b$s`C z6MMfG!eKCrmN5oSqLQxH5!&!ekNjKi>C9}2Nma^{|88x?T5?X3=-)q7GfI`#^hGM- z{ry3JZC@fz`KO@eku1nXUY-glcm+&5qp{D>;x8f8Vc^h&7-U+K`=;ubY4H&pNzbhw zDYXI){TxEoadTnT7i9t&O*rqE}YzRT6J}>x@+i$@;~a z_+_!geps>A1q@G6J z?}&CheBUI{fMJkMV|T^@eW0mP^spksYkR*VjVkXJ0KR%e)HVk2(#xxd#&&52zRDe* z)CpCGVhedyx0X#h(vq66lFsGcp?Fm~_6heN#PZ)Zs@dyq4r1qOmV%^hA~j>s)vzmB^mo2+CxENEY!E{{3WX0CDC^A*C-W++UN6|eP}^2+u9 z+GTLRPQIQl?n`cJAJQ0xmUJ_B^_4y>L?o#`lS98IpvggZ4Z6JU1QGn_nK}PLyXp$*$qXee`Hu&BoBHlIaT5_ZDg=|~GbWf8J z0XJ8skJ#0womK&Jc~Sx28#DYMLTxd`_aS=sI~8wG*gbiz=hQe9s;BP#Vrgdk%_tD6 z-?`WDhifPPJuf{gSt)OQJnw0n=I%}nBoLo_)?kq=4oE!7t9Ro>3)V3U35oPOE--=( zoQ+HTLdGqm<-O~jDAzLxBR)?rpvRgp&r6(Eb4svFR`0!db11sN@p}eFPJ3hjNzhgl z#`HI8APG-p6G!TuGYo1h>s43Cw!r>$zn_LAwB)3ZOEJ{?%)i(2J_sn!{yR(&>{v+|C@T)oC8xH1nF( ztwBTMqQ}Li`uXEB(VfyYU8xpiQAn>%!ZG#6YMdr}oTk|N1A{qJ(xwKH7OZJbZu9-q z&uhHxw~+lN)d!O&W5trq@5rB@N(Rq17Id}_Hc(c@nHL+MB~})`t^Uz*%H)SFNF!MP z%e0pN5W1Enb_ro^RqYR9+?pfH)9oKYtRXI@qo@37{l6mdbLa4&BNwbV%67tWh*qx7 z-4qtupi(J;;kn6Zgg;}8aH~+DT+e~&LIi5vub1q7O^gG~ttQ#(_V28Tj(s3n3i7AA zmVG3R1m-e-a$wO=;L(bZrYFf_p(_cr#W#;s)-9Y?&RTm%S(wv3&fHVO_FhFn6A&&^ zq24n(R7oI|pH24CeXamG-yXn$7?=sL5k?83R_5>5XZ{c7KpDT?d*r=W9tNh(fEB;q zQdDQq3XJOB%~lHl8_|$sl}XC?+<-nSN4B09!87hPOJrp-@ZLN^GY?I$$$PVS7HD&` z|GMhUvM7l1=0m5T)Q}OdAXT#t0w`k^0N0VQ=aE7*zBLu4#9^n z82Ny|%U4097^CmRlcl#d^MJtFmI504dZ+W_Wsr+!y;oe1M=za7?*(j?zX5&*#TCfX zRs*dUm+>D8!uBDn? z@5mU>|RBAZHMW@gU#6Yn>#-!KqT$`^2OOweDiTOY6) z?L-=lR@3C5(X1JGuT)E3y}|*{DO@^(lWHEJPS2dQX{F24`yV5dilW|c5#$i)#Jv6V za_S}E-M6LFeKc!2t>F~w+Z(9XYqpQR-_W~LG#gdy>}_G2a$TGD)yOzIBG3Hyr3 zlO^%)@nH8XPup*F1fd2SP2cdU8DzBt_1v5?ohQF8Nb6|?|5~3(AC$~L-(SKbfOE6Y+t+5@LOt`yk_@xvO%p< zr(88CLu24RrZN4r#J}Hi_Wglh_C70(%C5-it(T>X())vZ=IGP-{b}m+B0ASxBtLVa zpR`b=bK!Y((K~FCD9-d>nte zD(IOrPAwj@GLWr2&hqtmb-zVAM_J%ZhP>$yIbj;+AyRxd6RvVBZi=!!!!69K{zYz2ilFMOTsbu!;xw?LFh4;A#kNG&`xd3RCj+ zIXQG|wrTtm=!)c-y46rUyl2)X1P7t;1Oa=(9M);Cb)!=u;4ET_zheY9THI16*q1{+ z&5n0kEldsqytYAXiiO!FT$x=(wOB)gfGWmxYxB#PjU{X;c%N-lVx2p!I*#)DDAfu` zrs6n0KC>8dx|u@Vvbz(`jo1=?2y5+4@uL924-zLgpP`4%x1*UBa!kYj|b#8s5D2 z3Mxl=1XD4ja#^&i1Ul_15FB786va$3i9Xw4I-WxH;KYvKOU~r*$KU@h{_?%IF*P@h z>z8k!n6I$C3g#(4ILUr?+Cjdshm+DiqD-4iWH2+gjBI8O8Yc+K6FHx^T0=*K;TQo| zl&3J=BY@06IurCLYniXc@s{1JuO%QYn$Ws!n zFN>VK=<4k-*DSr9(+LK9D?!YO9QCJW+12+3EL(tG<8pfMWI=jV{au5c69&H7rwM=s z!kw)41nPUkm@H~$6#?|lM(ru6t1 z4@_fDIwylvvE+HccISWkmoJB9cq@k7fTydwBi$>W$?+Na?>(~iU_0pQ+QtS_DMxL} zYK3yDRX1ZA)0lobqI~_#oqao*eGxgG^gPmge|R4Gb%djrDPMF^T9L~0KljJ`gtmGf zlh4ca)5!fXxG4Se$i;Q}kEVCON6YuebMO3dbUzwKNzeTGTtIS?FkU7BUnZ}(+C($gqWFTh*_ZcFjy~OY?b%Y3lOlb0woSGcx5o|aCs`tdYf(2K#4%4 zb1Fv|;kBC#V5U*ftddHxKptg~s~lFBd9&$MJ`*Xf&6=_P@)EASF)iJ2s}iU+JGFrA)* z&iLNk-7zq7`Q|NLU%iZIC`hn)j9R^9eI!nBt$vl__lxn}Qf`i*Wx~AQ$H@L9!ToGv zn!vGR$H&dh&e&>}AAj!$I5^ryJd?7SbL}S9s@{tBusl4G8z;e3RD+ zflOVgXHMI;)kf#@_uEZ=C+b1=rGd_Lmu}+slSE2pwB;bcGADVJBSOiGByW;J7+_!V zpCW}N&TgjR3hmI>E2V;LFx7PLRSIqQ`V)=?;zdUq^|8w_Rtx$ z&>ggg^#eF8&(slW6Orj)wIj<^+jyTre;>3;NcB|x zJg}~->h0Hm_9c0>wvoakc{)@2TW!Q&lirF1>BU~9&OeJyJRN(JAJdqAV(NCg|1B>i zPX;B{=laLpyWgKi{@hSBC>}dafct55w{ZiA`_U@oS<6E;&hoxiO+kS>S zcR#}ZNB2?97tL#~0I~KFyP4Nh8cQ;|WMm24*?wjM8k<=cP^a;xaQ2M%0&DK-g2|ds zp8dd6M<>ZBvwJEp=V-~rb@Hp3b(hXPbMf?C!3;ZJ9K91zcKq2sZ2s0e)z5$@<7;Nc z1Ls~aqnW>5IU<)Q3mEcw&ZEGp@jo=2UD=K_3+2sJs|~yXh0#3RJuepgr2Jg{6ufx+ zDy)k?4i=}0g8{i+N_mezJ%PjWV)SCf!b$9p5!dn<3%GUr74pw|5G-hhS&%}&IFU+Xb9;k8w@e<{ZUmm0bQ19d zfhqxbG#){&EdJRa=q*g5HXF8EON-0a{s)`u_|CWf1jonw2ol_u7%$0hpJH2V@2um|gLjaOg>mcJZKM_wtVJWJm3x{-vO_dT!1=`5m-J-h4W+A9?yI#LUi3H>Fpw zycjfssIv48O`iB$qZ)S`ZE1YlOXGrD z6=U+ws{&K7oO6Au0RtW3)?)femABYH#JOx|ptG-Xd~( zUiTq?u72(+@;^VX*C+L#?nm?Rlium?joxXSSG`)ceztvZ{8uB7X-s2!AyL=;d&<=B z>)y%R^JMR5NlxZ}9yH4PMP+}F;bmwvo@3&oFiQS%K1-P|OBa>-v!D@P ze=4U5V;a-nG#%|84xT*T7|0uLv0O6G@EnC8MI+pz8u+wc$J~4-*(gxB6{DQ^vGcq|(%43$y=`}_L_)WxUv^vjdAj%X986Q4G?5Mjd+Zu^vHGwOFP# z)W_xJW#o$|Y!`xH0$;5hm>lM>qwIp3u@yfWKww|V%b8oVj8r0Fb#1lU#=pFuYngU3 z5yQ#RA&w6Z&?ZQ)AD^I1(0s7{41-P`tFt*Ib!K{}g`M?vqzJZ_u3f_1+$XEHNHk`H0NRsposmHR*)8u@P=B{Rr@iwGI?r8YsE_NN$mGoAl6hG9d*=Be?f6Q4P|3IM zhbwgisHI!9;>Ow`7>17Ia~}3Z;@g#_yd_U|l$>-X|Hedu-YO@_k$x*r@u$B_YAdA? z&wd@FXVyNv7uf*88E@V*t3TuTNxH`B?<2+c=c)JNRnN4gMY7jyj+e=gX-q!>*{WqH zlOoBN3y%EnUqnt;KaE~Czn_*y`MIcWFCu?@1((;k7AK8X#-G4Xqs;s?^rCz|OF5%) zM|mD4#r?E6FQ5{E$Uh(6k7-Q5RJ6UbH<00+r;)yOw2McZkMQx`4{`tfcTw8fHs@C| zx@fwYp(VgBhjTifN>_mw$&cc6XrwDR5TzL^o4p>+8p%*{R~MW?CF92hzbtxrpBrB8 z-v3+qIC9T)6)8Ul@s=X6es z6l|tRBMv0De_hU_ES>JfFK=bsdIs(%jYno;`OwVtj8u}+xVBS!s=f8h)p?YxZo_s6 z695=M8d64?wQxto{_D5tsVr0 znqk&{bN5W;x|!s5%UcPdx~lFv+g?$CVU^9vTq%EyR5D?}N3)YL&EAqDffPBCV+*rQg2<%OXc1`c zZEaYe)zWJ5%+50$fSJVXOcp1{2Y9;i)ao@oowIh;Ruk=izkTZ#4)*t<8S^*+yTEan zd1)3}XNYUCATmiHFEAcYpw2p;_FA@tU+2812%4=d3Wt0KBr{2t!!APEP7u`QQc0Zh zKEU?qG-~KJt7Nq41(p?>JSG2|1mZhrmdlvVX7I|5o4CHRiq+gSQsF4usf~0th4~qR z`s_4%73R_J7@(Dxd_g+N)M>AQa`}+`phkdHW7{9w%9zkZl;0oT410sXsaD2-^_$fB z@#Ix|q6g%q%;&9c%LCeMBY{TiWBh*VH~Lm`1gAbD{|CX~BmpI5g>|=O=uBt*bD$Y| zuYZe7uGRmTr`pQy1)PU*tgkX(^?4m%7m3BaGu_$7PRCe2)}ts3UbY_4Wm*Mol~J#C zVrS1xKF;-*_|VnUC+GUW@#)C@_Q$c60z+OEoIbF)8bpxJQatkN;!!J{={FtgsnF?p zIzr)0M-BC?z_%U$$x3M3l8zFT13-mjIF2~~zJ%Fs5$Yao^Uw+q&8l}>O-rxYdA-wj z5+8C%DY8KnlH!OQk7s1{IsdJAE{NPa{nowZZM=JV*}Gw|dh>;JkC%R^PgrjU+&2!! zPU*%prk5qklFnq`kZe7V^ltS1CuIBu^l9;4RPIkg7xDT$dYQPR{QKjZc6!-NTo@() zJAb%{Tv->D>C$`}FF$X(h_?%#{T@5s`0VyE{Zi4+`u3ni5OGv5V&`ZN4>zCSgZJOV z&PVqUDAh1Y!=yvwHDuswxYU@2w3aE_jE4X_jW9XNve|VSzp`H>8v+;tTAEqcZy7-@ zID^TPA)2bZIC(#RelBN9qxWV&(I9pJSF>SWy7T4e3L+O@R|PHWS6W6@d9%Q@E?9e##KT3r`-6M$wK3CZR*lBDK!%?C zcQ%le9 zZ0}gU0GI{{bXA!m+XK%yBK8g%-4z4ol~U2txwF@mUS(A(e5YCMP}p-oRVtvyXAP!l z@>{M`hCY6H-T7CW)o*`y7r_XDHF>h{AJP(SuRk9j9TAl8vR$g!+}TD;v&{tCn!!vYV|e=P zG22#s8c4+BHkcv6J~-{7Nsz5s`KcU%JHe#tq}h9|9MHgr>ZyI+b934Q&u>Kl+w3%{ z6B$Zfcge5h>#L4IF!_^sKm2 zy~KKuN6p}}{nR%!=teC;o(Al(eOvV*&-McDBI}3hs}gC()Bbbz4ts8clWK3~rTjE& zF3Az!1L+0d4AG@*Oxtc;rC=8GFhj@xFzFKVQQC2^>OCtWJdi|gHXD+(FlT7 zIbO3sM6Ue&deo89J6Y3v7sttf`kUiv^qp7kkniDunHbc2FRs1vcp}-rfWk08JCl7F zSS90A{r7C9pK(-oz01Ch#Ca6Id3ypqI= zw2z*-_wKoVyL*12GrnEWd-u$drDHv8Acc?B4x@P~h$PSQCa={n&ySw~JD{WA88N{)9w|D!be&R?$=rE~PWw(vCE1*A+bO7N4=r&Uhm-uugYnRKGj zI4_&#r>z^)kC(}h>6eB!pKJ`YUsh+YKihtaj~{%9yYIb&(#9sj?Jfa3ElL{3GUS}> z3tR~dn2{~H;(I9#z0+Na^CW#BSoRZHdTHx4!9ueK6Db|yR9)sZtQ6*TZ*M9?C2?ZrPgzD2C@ z8E+a`(Y*_1Jm+|Y`%meQHO&}tk z_1xo`ywR*bwLukcn}w^t`jlp#-TrcYb61{7_lj?T-nL|@4lLKT7r#NX-QY8?tp)4_ z#sm^N6CKnVG`710g9O<9&?)lG0@#CD4{a&%>ZE}LbE3#^CcbB9rxA}6Q1Z7tziY4Y zM1<`g57}PzHuH+|dnRLXb9N`^hMKjlmWn9L6}o z2qSwSMuTT<^1pYm$NDzO+`wBg!1hzV+Lx{JY_&m`ZN)srgN~z9J7v>peMth}ip{>q z37nD%zR#riy+dqomdm;ZnWtpCczlFLy=-zUaIB-x1U7Zvynw1a+UpzXn@dO3nho!a z{6xwePo9PY$mMdFN@uMN3Ix_2R!$Bd+npv(8*STu5F`)s6rM^DOlweup{90V8wCm4 z1th~05kw{LzhnDIGa;SMGs|>n#vSIl$uDrf`#PlRR9}Oals}ISmpPW27UKB)5 zCs;c5IbMy=;VioiK5DRX7)PL7Al#O(^RZ^sC1dKtx^ENwt1qiRQUe)ym$N+$L`(*? z<$&$OGSz-Ih@pJd-&6*_h4!)s`293kG{JPrr$c@i(|D1?Ije_PT_b;eM8mOIBdZV7 zD2xJkk?QaCo{Oh4MY?AU)=S;vyp2VcFU!#YjQm-&>J4n}jc41(G^Upz!%cp<^~=_a z$i@Ggq)}d<$NTemRs5H&??psydT}PB1-b@y&;9ZJ@BCqup2z49ADzP^1MJ%0-JxM912#b8 zNJg0q8k=3GajSa)OUbnz?W36|inzdx?WY|YYBGkjgi(9CJsohaFFbkjemld-bj9$u z3?~_WGUh~1{?5~$gLP+EiNu>3gTr{v5LFy!kon7VUeKA!W~AL!Mwq-K>&jmi1e&#E zQ%gH_esGxWqh+?bI>TB()b>#id0-XT9@2}RktpL+&qb=4K(kvG@9N|DJg0M`()eL| zrjYJp*!y7>M$3ZgE- z^I6&aEwJny`l+93>qRIOu{P8*#TBU5Nd!I3-gUj1cQ>G+e7wB)%>*XY(CjPfZyJumfNR4?6%pP=v1=-CbE-m06h?^W^T~;q!C{ zA1?pDzaG8U;?{K!kI2lb>?+p?^K*|4YHDg~c2sR#U-uz%US_ZSF{1YlxL%EO>Br?{ zaO$lm%#IIO(k_FA{JC2kBbeDomtC~NN9cmbZSfML8`)@!eh%W3#Tzr2GJ+@*u)x{ALwEySrXi zTD>wvhDxmJc9% z(0gFRyxm$Xowmv$Szz#oJ@#wejpmF2$%!20^)hOeP!AdIYlS=7msIAVcntoQ_`*QR zio&i{j|*~?fizL77_eelHbx@GVajjHum|c?F8ouzRjqDA>EI=_(04Eh!oBer>5fY} zy?cqZaa^iyX@}7^<3#zUEy^gQkEP8s&=?ST)_sPkjl6j_(V%J49&z|Nzeu07I$wth zOiSR*cANu-pk)A(Z-d*C@R$atkiR0(zHs!ZnGb`QzOK#uj)4d-b5}Wiyz4ZQ@`hL_yqV}yd_@7opn?GOv3?g#sJ9EJQ!V- z{+SH-bL96P?%^J80=0AOr7!uN?WqRZTK)VfLfsc6%%hv%>1vpl9;oBq#v6U_Kg?tn z=K0k?_)RWh9swVNI(@=C+@AxVLeEWfRPeV_WPaWJzK47GNx}B!yD^5t!RcYyJbGWg ze)+ik^Y3J^fBpN?*_YBS1?XDJKFSHk2-mKmDEZJYDa{zOKo~kQ%2AZ0gnD-6LJHR~ zW(f%oB?eV0X5Y{;>o$wSA0RF>D?CY$BB%(Vu<40E?KBnBz#U4W(+X0ls&QsIT*d=m z`lUZ*$=^vo?`o6sYs`dtPuj=>24 zzq*V;L(&|xKeb;%8vVvCmw0MFApPTg8iu26;7lIY_&xhCsQrNY9Udm`!2cnTx9Mq~ zI2B%;o#H_W_Z*m#6Ml(2aSD1n$6|DaM+fI0gbjX2T$$Zjm#j zlKR332ACmhUn;)p^0Ew7cUNU?u~QzbY?SNaMLF-YZ2nXV`Gt)K>YK7M|F1R<-|z31{^hWI@el*G?OF4mKm5XnX0g|OLB{WTZ{2Y@J^xZX z7S}!7j7%_KA#&XAC<0HeIs-T`kNx=!9^@8+pFMg+(d2*Tfh6P;o*{>vOwV;!&`h~I zy{>uAiUf>rFCSmL_Of>j${2WJwq5llZZT8OA#4v;*UA!C>ZzU>=wPNFJkS;cR;=t; zDZSP8^5Bb~l~$))x@)W6>woIiHmX0xBmYaal{5CEx0hqjvShg1UMl-<->6K3axTM~ z&G(e)uO2)s54w+J_P5Kb>g?+BSoxni&vt7=Ze4ji@L)$vbYl1-GqhRqgI459H7Aq| zNJ&;@*qb2as?~Ns#{gljlb zKP2ED?%^Kz7Goz(CONZR)$NNmRX@KE+}3vQ0-64@0ZEn!%q%2-@F?i zo}ZTYC;R2i`_1yzH(!;1{)fLW?;bxZ%Ofe~<0a2-_~hhe_E1Z?UX+?F@J#J`Cy2R?9FHk!O~nGZ9Alp7hrF&oY- z9K7NmvT?04b5i*LS#VX57Cfw^V4FrWup>j0d@#aMkOu=!=O?bH(vuU!xu={NSy@!& zV%%5Ru4KT;C{R8eyv81EW}rD}Zbe4f;!4oEsCGbkC1FB0EXxu=c(6p}Dg0b*Xz%c# z?CrfT$H#}|p$yV5WP~#NyxdtRyC?6$Qv6E%awS4a43US zd^x{3D{ITWvf7ihjW5a)2YI!762p+)1zF&o-db5%UiHcH)RQ=9l3AcgR_MT;eo*$uC|fB z$f^lWoL4=pc6+Kzp%!fmqg~hI@>RR^#k8SZS9y0^GVE1%D+?-v$~YGPJzyhyxGnm9 z3x;HZva{Oa@_MLxkF6OJGVzRi|1mIEW#F~EmBQ^z^`h40_CgOpIcRBNj3c>{9|q$j ztIMLr?E-mLTh8`JKSdh)I97^ywTR*bj_DH_;L1q)EO1hffL9`^9dV*R%Xt>O`auRf zeUl*$?hmeMKMWkP7h5#ZmX!Ar?b9UF?v%emlb&*| zo=9bmyU*$8Vqk65Y)OFzwwB<|)$ZvdxzC+;4gXnrz`z-fd|MB?|dgXGlFw2I4tqi>wClf9`0cd__X+0 zh<-0z0`2kpz&xC@;P2%P`PBY5;i&V-I6P4zBATzBA z{v13t)VOW~^2oUJ($wLzG~th%^#?L6e>d=@KBV`{#s_C7aS+u0PWijX zzb#+>-QSn97jMf7N}Uuv3`-Ol8^KoFrGV%+%8Zw83akjRPhC&EY&Z=sJ!6;cgD@*` z3X=!wxfO8F9L=<)jEf@Wd}UOjk>!C&>8waL?JLvZkDt@&iQY;~90oYXweK0$Zx13g zxH7%z5K8DA*?`0_Z0InJp=4+N>^a9lD|x}$I^Ael0M>q8+^oNpo%-pnc0SJ3{#94u8Uh-8JGU>w7lJV zQx0}^%5nds9PjLv7J&E3=- zjJAJrR32`8QGO-YT3>a!nTe-8oC`1e&VTufM>76fF6a5tnT*2_A5JSs!G6Eozv zSRE2&VkH9Q>yL)z;P}XV^K$!6YZ9Nk+%cpmGkoEoFxvOvoWtv6e4PzMXRACAedL7< zA=f@#Ubrp8a)&3!#!tS({<*@DD`aXVPNSDW#=&>j@K5UJXXRR3Eg(o#|00S@-l~7+l`Q(%idFIwdqcEY$}G#v1SRPqYM|Yatxa zO}W4e&_`H4^@{OEd!z0xm*7!PNqigcP1{FaaLHHb0@#{BoqAw#COqS0TZnQ_+cU;L z{R!ZHOMi$%+;HMyQ{VWL4xTUzpJzi%Xl|U#uKb*anuIp!uky*bNt39V#KA=m6zy_S z9=#{s^u54r`Rvq*Ur9S(=X#A&&I3Lq#sb{!*A${0f69nI{G69;AjiaUcC*5-oriI1AXj&(&K-` z+s7f=>gNM(^Db~xKKQ4*31;)ixU=c*O3OT$mw)tVp9vo$rY=MRY0}*lZi_pwP`AM> zu1`&$@oPNz$^B;u=JUqu9`4~!2CrVd8lOu^KRr4uzu$jT{_c1GR9^l4Z_2{nk>pke zr3`jvqA*CUq)imRFs=Y*IXp`hvfU`JQp7I8c=8fvDc3Ap%r?PHH|>HMdlaUGRBBM- zcoLs@n8<29{+;a!g~=+R;&4JeN+`1*q(d<$9$|?m@uEQD61Q>bH_9?Nm0>K(;4(=ubFoG0l`b2V@Q z7%!>x4t*$%zAjDah@VPnmNy~Nhfz;>EMb42}s z&1||9Zj3xHW!G;`FQ3YE(B=GHCl_US!4+TAZ4p_1A)S;JLjt~g06=X4BafL$Uk@h3 zh?!MR93RL4XFvI`e)-F?B3fR(cv>!n|BH5~9PRFwQyK4F8K&1Vz@NXCp?`2t9zFcR zGDW^NGQ~&spR*jD!?`$6j@1bm%-kbBUXuK?BwhUU^=%i8%*mL9UJM4#0$@~vy6Cc( zTX7|h2Fgj9mfNb+6%GfR8XIFZtX$>{&QX7$Hb=R+2VLz^JYmM46W!?u+O4i=?sz3m z@NU5~)|7)~`CP+xa-zOQ@-RAsKLgMHGSk}Ybi_CPRvEbV>u19I%SS&eYn`6=@_Vva zF=+D)qH#!@uK^PvXPhX%tb9ECj32Tfo|AV^{0>=PE-NzLkpp8>L!kXbCp=;Hnk()m zD{mAlWtz0e46;K%q=ceH@e~feW#J`18*R)^JBN@hoZt2EZ`-WmaWlZ+!2#&FRNtWA z_+4HE-@!s2b(-0LC)W< zcg5{C{27q>-Kl4k79%=?=Bi#nK#mlgHab^oVFHhp6tHWp0&cesS0dUpv z5`X&Nh9kpg;vLG}FO$EAKN)OpZjYZmc|JZlIxffi2j$7ZtMXeJ>|6i*bs5WG_ti%z zdD6<*U%Ds_ITRO^qN%dT6UCm{t|i3@WmZa}(xYfzqr^61pHCp$kBw{VUbGLCI26-x z_>s+GW1vm}6)ucm8_QN|Q4(XeCHEmZja(j@M*N)d0g?s)L(lt~^<);_`|o9h5H%F@ zMu|mnLjhx;LTRI%9AtLsW!N09g%dRnb9ke;q2RjA!Xa)sU;NSMZK(4!$1za>G9)RD-8Fj@~XgIb-KwHWp08eu!5+f>c zaJU&uZkgfEJE7wWFX-c{LavWvxjr-XBNHuA7kz;X`k~YO5*+}83EXi`82*e;Fqm^D z1D>U}4}S3rFT4Nl<&(0%_rCPj+U4xBuQn!w_Uycz>>iYL8M}F~<3L8^(dn_TQS-j+ zUc0QyDBS3E%IU?a4aJrW?~RQ|UXp*(KV{>2`PHv}C0ban-WX4E&}jau-WO$PQ=gsg zs#lXhEBPhBA1}MsKgtA8iE}Qan?VEaFUL6Qh*k#bxI#``5Oc?+!#(q&afK7xmphZ$ zMvPeuuec9g?eRj!iwt+}edijvQ_(NR`Cz$6>krIF)o@wuwr%9Q{0gHExR%Za-F5T< z(96mIo>9jkYm_@c^(6nSYpxQD0i3Sm`)mfu80o`^S9=_tmtp^yANKP=(Q*tFu~*;t zX|F0vuBZu|F%Ups!Lkz!VhOQv!UrH*3qvRF1XYf!3(4B>tc(T>6tS9vzAXlfDC5PD zK|u_9v)MA{Z8Co0RqynF80>NkvS!`;3=zViw`mItDhGpUyc5TUdvgv##Ep0{yb~_z z2l$bMPW=E-PXA4&VpyPFi}-Ts=lu zzJs5VvSooX3{TbG_YTVT{%(19uvd1E_R7~!o{V3-d^>*o=3T>_d$@`KS;O>{yKbK{8^m0L8i?#`HlGi=4Emd+!QZ6x>@)X+%;snI_+%* z&#;@~dY9NAvpJQ3yj>!*C^T(g95HHn?iPh#P)Z_E5Hk4|*{Wy*faO zF<~gFxlfUFDEFCv(%{p^Ww^5+Q+lOUTc04`%r3KB6W+l?+=O3J5>c>GU|Ax6(F`c4 zl;V+iD95tknEi{{9lGI~M*wt(a!YxoAj>i18peC@CDH`%0G^bMI626XWg<CwlHF=5$ML+W; zUDhl0OgLK@cqaWENVeANd3JY279l)=KSE?$fy@hs!ta^gNxjCkVeF&sFvF_UVW5na zuksQ;wH7f!JXd@UsoQzCD;me1X&#=O81G26e;`BgWYqUP@V|Wcu#66lWF((R&J-%Q zx4$Fa#Q}I{=O-@n>e>U(7>~r0JGJOU(7%T)YWm8Gi=Ulq(VzmeD%GGCD zX^XTSRtZpcmfv%SI_=eGCy0Jzw~R$KJQ%_QW}q3Exbn&K9x!0lfM~GM2Oq&tn^PX( z4Vh5>4C+BN+>yU!QHD7@_pCeZ8{!1^qb^kD;gIVJWwfjQV`aoxv`3l9&vn+!T-S~| zryrxQa z-=^}$3G&l0KmE6cz|9k=@v9dpE25bJ8*gp+fZkX^k^{J;scEf&_~`(`6A$tRUud`B zNSER87|42{T~H((?@4QZBQh?u@}6;=r-C`4P>s5bWVrWt_R9X|W_kVQWqGmrro7#M zr|=#x8*St|36Al z@0ZEn!;cDYHs6k)J%2g=_PZzJy`%lIbG%pH9Bh>r?_QU$UVJBm{kP@aKYdmDhlgGU z&+NFDbxKi1o;mQXjq=azjg%0S6;u@r-%yOCSYwzw_Py(J05mU2p+=Dcpba2i z?nOu0gz8kdc!D=+@Igu!GW;$u*h8^{PH0{hk7C(2MqGR1(zpwpD?YHw29I%vac6gl zn<|VR2vGS$L5!!OyWG%|yhw*%_Aku7fuHwjxG*RVb>t`U8XocvpK2VW5ku`ajUP&L z(hua5bRML!DjNU_Ai~lGKIqRpai(#Gw!jy(kPm5a;mN(=@Ew{Y2iPKt6Ruv`8#wU~ zV@fQ5rwXRFz5T8RatDA&4-_MN@=HoQ01*2?;7&qmCO4CSBw{0k2x(0+YBg?I*- zW(;1Hxqo_6`sb&isHkguJXlD+dJ4TgW=FP z9zA;Gfdd9Lxc8jX<1ZxGBk$E$d!&9v6Ia@ehG#O|56Uw9R(oWSu%-OD0u4hNSQ5=E zopxDU#>DkF7CeT59<77uKs;bj=3Hi9v(saw%cd|FrZ2p8@@IH-@h zMgF?*Pi5v_bqg6WvG~P14x>Y^Op6CL!bk%*JhqH9w{Cm@%@z>=UfQr0A3$Hr6$2qD z(<#r6-#BF3#;VGujHB$5;RqwG5GozAj+JKAF2`-!InJzBQg{HZ@H*_&lA@S+C;kOky`_UJueWCnS z3Lwr0w#iu;Y~ss9bjrwTocGjYSfbD=e++hJVlg-X`XkD=BBO=7=z+i=%A0Wt98U%r zO+5`qlu6Hyv0Xr<@!R{$#XpP%8+T3v4Gr!KArQ+=YF$3XXu94e|EUs4+)E5zY2&5` zh1+4lD;(v=%|hY=vY)bFlTL5;liu!d-bB?T4N7eo6c|3~6mK$+1J0!YrlQS^JA*mw?`Ds6 z?v?cne3o7GxlEK;quvz02a~bLkMz9YZ zqxxuXUqib!ga3N^L}v2F?GuIY#8e6tB(}YE*q;~_^>?cFY0X}mb0(KGVPX( zUyOEWLtbec+;87r?s{N>di1^Vi!5QjlH{w7RnJ}ZK^U~~JY~W78MKh>!3)b7^{4o5 zi^`M1hE9unPD;&8RkDafAzxK7V^$%nkF&C(XtE-jzp*R|x3WFBM` zE$|GW?kzWh^aC=#+K=B}%CGduDTe~$$deU3!%@iTNb*2^q{BevDnNJ=?L}=1d6Z)i zM4n`*a)7rj{OW5&yIPmx(jV9T0`y4U5q05#6FkFUS0AG~@gS=l^kzKrof`SkR&apB zF}9Ux);}HTXK|!+xTxhfQpmSr$ZWdG3#9Rm+>qXbwF+b9lW|H~{ml|;zYC976wp`& z;Kz@~oB1)A$?uR|$sFZYS|IDq@fw)WFMk}rCwK+f?{O;yZD+E*NM-Tzd(tU?>fULG zD&x_4IomlbM_W7PVDo)>CqsT``(1heZl~<*zAx|9$Ncv3)A5rRug7oR-p|0_!=DBG z!Ls;-Y;(2y9Jp(`*?7EXd!7e%{QRB$LBdVxi9eg)JeZgMV>ID>n9`( zQIhi9k>Z1rtH78YzyOuOp6v={#!piaGY(;>g;B$Alp!lbO3yRGr-mF*w=Mi|girCw z311kq)A&h;_e`R`PXN3?L%-4~fB67b)TQJ>YvdVuW58GemZFyj$61L|ygVe2Lzw_Y zpU@0M94Xr}4%#x3I-DRbgONdw$PYZw7oC1h1CYixProZ~0QJsKrEwV*pM3K@=%0Q_ zk{%%Q3Z;D7FV(*jPwmnlATBsDfXKJbi{I%`c9RFZTM2EzRV0NM0M~?O!t|W_P3y}z z8%Vzd@<&0(pFDXde8S_!{jiR_XQD${B-PgOQiQFSUE+7mt2bPGqc~p6#n? z4Sj{!qG-VIe)z@D%iwI_!8B&H;m4p^{?4IT@agR2SoDr8s`ocrZ|VDod}| zD-Ry7EAMNC39tGZ>e%NEv^$f0!Nnj6@<4xu|H`Bt#wr)~o_jD!?TI?TFy~-8Z}Cz5 zkkODEsukL(Pk4fHhd5(QW2|F*+OQU#`sIEM*@dSJBL$A&6ExZB9X{jW9bpEQi@b>g z(6#2ESFFNe@Pg(1F=#Rz#(?6*pt%KM6vjJv!AU<$8A;Co0`yRz34R6~7K0b~kp^Sm zX)$z>FU7Z0;KW!=Fva~-B-{hUPmSDdo x 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

    Sh@JtRA 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%0Duf18b~vFL+@^NH5!}+(AxX0vru|z?9wRD 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

    $woZUfn!#x<2qo-L@^W^!ErKz76v5oZsnG) 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 z zPZN9Be@eSDDBw;f-_P!z-@JVF{mpl;zT2xCM%ux8VMY#B%CNdP0(egmkrnSd(JPw< z`0lJux}ZEb$feGtvv}iynM~j;9E>t>NWVNV?J>nEO}K~1MqSLJ(C#O<)o)wJ&z!FS z?+;H8vrbTrtDA8#xpvic&%kf=g|ftb4$f`7c~%hq;y?zJCUchcW>hpstZGayFXZ*G3q@vl1mMf?BU z?f=;IFN15N@Yn5nem$b)kB_7KaQs$H&%&#Eq-QACp4ujF?O?lZr`^hZ&TYzRE ziKnDd+cFX`8&dn1=fO?nTF^FK(VZ{n^d!%kMWG{_(TtH@DBSpO?`q zu#tSbYUX1NUL*+;b@jx#n^zy_w7)>sZiYwstCPI+r29Odo}~-m;8?=`q(3+g7wNij z#cTcwT@>$cpZ_Ag`lmN{!7XTFtJft^#dt+Wz}Ix{<3puWFE;Fb_0VBIiiGyxeL zf`o%F*#HlD*yvdL`}=Icv#ol~euYcA&rCV82|rFOI-@sAft#%u?BR4e5G?j)=G41& zBzS#t_O;!}?{rrCSb`tHfm=f?_}E-!TstCsO3sM3fSpsF2}#O>;UdS^Y0u~ykcv1s z^-LS6wsp*Y_)=Lt(=oZx;AH8=olkeA--GKxe(k$#=WIwa{Pydoo7d}T4_0!yS!3}j z90`Lu4(ta910(mcSFGONckK*J%7gn}o9h{P$j<`s5XXnL*V6R=(59pB?`w*CU9;!X z$-BX|_60Khk9P0bR`bVHA z&^!Sk87&=sHYnILq&tO?&AUgwhH!Ut?@2L+QT}{xvs-i^;GZ@+{Y>a4bLh-(*yZSf zp5*Is*Jw2T(5^F{yp2C-4`%5H*NL&T75kG%1;x=CPo8ak37_0PF@^SG*322OT^`J-X^y@lUw9oWH_dmrmdeKo19p;mp>bcq^ zanFN)^lt~J-Cp`2 z(c^((sQp00)5{a#P=o^7l+u^hB8Ci z9~Fpz2R=rY*6>TGF-v7s1Yx{aGR4uh=ZHtqs?U!@f=0nGINGlK1drd0d5X-Z-8dTp z**9go-h+Bs(EjYj^L12g(UW)*WbNQPI0$CefP=xd&V>xs`;7L- zkL{n0;)M5+;u@LUgeq9ZBUj}o@Fkg#5v>I-3w|!Rp)Z#dCDCP{9jFnk_o{1+ZAx0V zb(>u3wd(#>$QK+6a5`UOY(MgI_!m`n+zbw7wi8}K>_&Ae-za(7rI}@i&3CVMuy=vS3de1Sz1w@ zQw~$euG_A7YH-e#X@NyJZDrYZqt#EmSE+|J`Pp=$sba09vMY?@UHgf&Gw$WTZdIl}oMj^kINByQ;s%M5ST-FIyU1;XBg4S91 zE@$}X-~UO0`}a35IK&snjDq1Hj!>oF2x6ytS2;_1Q%8sO3P;D%P?9Pz{Y-txr`^*V zf_=(tpJEH|yJtrEz1BgG9Ngf5KMW#X2)6M-dTpJORR`F-mx#I?vW?#2WbH?KG)Wxx zZs1;L09V`EZI$hnhT5VpRG0xW2ReGffuVb2wnDm$lCH{|y`!gB*7^(u>x{9yxCeGK z4#4Vjahu+FH84Ap?P?}>h(8ew$9CIQzg^P&ZKr?J@z=G(-*n^e+u!x%m!;Ud@Crbi z@e@tlQ*eNIs*PziZtdC14UTpkx$?#RD-72*blv7)Mo)Crei?X<@z-=A?eX=V(Tn3m zFlu;AvZiOjQGWQ7opXNlGq|Q>ySb5P53f6XF3)#;P5&d&&S5y0ru@eZ@W{RE^V8lU z{&?pm{GjN`d0IP*&pIzx@$#O1qbr>bmJ5vAOSy8DxO=i5yEfS?EoX4k2OplPpy=1X z{*=`@7Ra~E!3D#WReKz;m+~F`9VU)Xqi4sF10?WV-laZA@V3M11m~QF^3orB&Nh^~ zYs3+(uN-#AzH@d^nqv#-n}dr$q5A`)YtT<_j!m|?w>=>F0%(gqk}Yj`(%+6qfAq$& zAN1mJMtjC_yL(x{{_^JT<)7W$zWS4!N6)MZ@4a;$AYi?~`JZivo`+tC?_fN1cJG=4 zPX;X*?7M0UJi7Y$2jvBS=L?XB$Q9r6bpHhHM;9O80xT^o(h528m z%l`cFgNJ|7y}y2R|H0pOZ5B^ue%jh78(4|PI#tLVC;52+h27M4v-H^R+xV`t{7SLO zMms)vPx~KU|4;zUCot>q1lR8bvOVAHe%auy$UQraR%jROkB#2v2L(BbFG%T32M#WP z^W7&wzQE=E&FlOrYmAtVj`X;hfZRM0TnEqAHFlw{cJ zU1k89HDHvPO=WlBV}{K+ zvu^ByxChx0Gx5$k62bX6+jv(%{q*+c(X9a7NFca^T?cW&x97e?KKp}5wbk3;b~G|6 zNM|ee4eGUfI{EBW=FaH?@&~SX^)Wdxd&BHMvbibbuHhZc7cjQZ_YAi%y!eX25624T zckvm&+1u#FHxP7cBXXgG!7Phk?={zCVx8%gISEVP#~*N^Y56p_>BjDFl)IFnQ6lh1 zTkSw1_j|yHUdKfHt5;szuqY$BK2yUVlat_0qeUM&QCX@A&gwjRK%LR5azTbx8?Y?R znIa#bdyW?Th3hu`V!yPLGgxC_w00yGXy1at?G-zjJZTI_#53|2j@s9uJ6;^R+tKB8 z6h!l?MN4fyi->-N}KNg^pXNB6{}Yn{Ln%{ra7ty)wy6`4Iz6)eY{Ww}Y*qcX46& z;51fw9{0!{9d&$xbKh?>t_VW+$<_2}Fs+?}wKQUgGeV9}r(h~!YN0%I$n(N7y!)~OrMtAA;NpxrjP(ME#t$t50;&%%@&v6rYD%Gc2|S*jd-dGLSz@BR;S zx&)+~3K1|9TE-gzL&^pS4*#wy0J4n!hVuiI@SG7m*g=-?9A-J+v}S;>w3CM02Z{Bp z1&q2jogU#ME@%DWoEv$AD++QD0=P0yN5iHVt0O_DfGTbEoccpJVfT*ozQ>#rSpa|u z{kD>LP+$&b3fu(oj1^;YCGbWAs}u8ft1`gxa3Ajn!=WE0UAF~+Z42ZyoB~+^*6VkF zT-hweb1Q5L+H*Xxa{=7z-!Vm7zSP|_SqTo%?HU~*H2??5=@3Au+$Ea%*Q*s;X zIKq2Aho?-+-|UE-0}UqFP6J8-BrM}w^}!o^G^nE}De}s(2geao0>~*pf=s}s=;vSw z)bazCW^P>NRVKKkom%Z^no(uqYd}g~{*+S3FB}hY*mEQAKsle0dldF)Emy+^5*ud*XWk>rN@yaI`>Rj1i&tWn8 zVq{@$bnnbA-r_9yh|4#-RWrX zELz5EIGr}qiSx^~vvdDExSj{oA3AOnKHc-H_J7}lzn{3?yZ6s3vO^V>ZFyAcx@~FN z#+RL(_O`^!;MNJslEjsB-SIPWj2;X0(LEX{dmWj>)fBd#g*&>cuxzJvxVlzd?cLog zP6yu8t_I`v{wd<$EqBFd%Un=5sI`O6ny zztE_tr_<)iymD>y^k8Va-dkHtCI;sf=(&%TogJC2x}QzcEjpce;5#!3;O^eFECJuq zpW3negSl;KEBoN6uCt%>3yiMSQNl@Af9QJM$myYzdnezwGA{KwdL-W*!r;Hk4BUUL z=fbZxw`@j=rdzHzF0@)Zo6SEu^EyIpKPg>Dvu@GL95+D`N_IjeP^_3Pz`@wO2KHjB&X~8|e{G7?@e2!&& z-t%}goWkdxj%?2iK7b#N7d~EfH%D{n$5KM|1W6MuT4i=c#(6wIi0s0@9cg%Sk169Eq`mvge&|xY^-FR%))6D%Z~;cry+V}YSra&O~iE+agEJuQL-QvZuaaFfifqcx@>iXg5c#=Hu1IGJ~+J}y+&CI*h1;+7? zJ&MQVi@)$KV68m51Z$VjA;EbcY^3Jg5&)g|=k0=I3pe_#qD~I&O&UdrVdf_W^nBXr z0xpX)3Y5v(`j^(OgRkAXHU~HDIv6Wwvx{sUr|0bI2vA3MUwlH&Z||NgDA&g2LjOr| zX*at!`sg&e`Y(_*t5ezIa@PhA#VYWGhu6cvKG}^<>R;i?4L7f%Xt!_80FKr={sj1o zW@*%$tfJEZFN~oQMO-FRpL7=nibM^7T zbsFp|Nx^gIRMP6-_wlP|K7a5p)(n<2SV~5NAo$ivfIprSL-j?Y1=JnExB)x&qpG|M zgrnKyrycL$IlV9*9ea;pe&jrsjBeL( zkN@&|-RBA`*rk)+K+@W9^{oK~85|z`U;hvPBH;v_G7iJf^yx=HRsJg4)QAeP4LHmT zun9x=7y;)t72&06INswGEU#iE7DyfCjYxJu%4vLCAfff<|&`oWko+DOXMUf@q;IbC-AF)F$qv>M}j zx(S@hqW=Qij#nXNFx7Dckij-}`E({|0N(eRGrmTiYy=y41}oBC%DD=#&AU9NkeCW4 zksi4t)H+;}NfnkK2|ne_ELfeQImRDthR1~_=Mx>tSkI=clHY5+3+BiFlZN8`^!aqm z9H;BkQGQWiidVA9>p&eGN|-VT=WlqEGx8oyl!e!m@SdSjH$$}<0;O{V7I~&9DLQh`5P&`cEkB2slXD!Z<4B?N z{rjH}-(ZRcB}Z4XYC)$O+u*%>`t;`ci=4~g*CxwY(bic==F2}iML)E~vQuJCVKAvX z^mfew>{C!1z~4YxeB%hTbYy>A2wKBu@-E+SlDL>qG8di7TBW@SYi>ymg! zI}JYvZ*;4?1?K3YOkns`&Y}G|zgCDgtH15am+NRE+?IBo0!oqeN7#0+oxBY?INQ62 z*L!86vd;6fo${pVuR6v9%CRF{CkvhTf3ke2D~NUH)IXj9W4eYvaS7|}vKQ{&b=Qp>nesS~U#m{e^q*ou*{!#$xE9G$PSLKCLM?Qyt z+v>T{%XZ-U(bkRD3bI`V?m`EY9B+bY#eI9s(xm@7;;F#>%hw#&LzbzoKM#h3Ni_RV3k6y!X@0(k3dhd28Gh|z5Df6>YzYv}LrK^-- zH0_6UEXVtdoQ*{N}Tc?5SGsVp@c=}SHIFMkmA z%}((SZQPqLz=^NbRF2?4h2F6}I$npz=ZED9r`fFVK-crUvL7jr!+b{Myf1xh!-Lr& zBarLVbxa;N`ykxyUj?nz&tF7Ka-lVY(bZ%q8+@HrYW65w!R|d{EAm@sGj7rRz(pK2 zFFq`uxORVKb%6%gHgw&{>twrnP|Z)qtN#3${Lc0VzbX6+e3BD7XUExJK^lJrUv)5a zE*<@ssIXHTdF}bC#;l8iTF}!?YHzP0Rwh15Mn^tMSjDgWs`%%Dwop>mUE<5rN z?aJ)kX+a_T4we%{o>*fud4q@VYewhQW-pe26L{jEwV)=CfKe{~#}l3Dg9Tj+aQWG@ zPvL?tJhjoV5HqedS(icYM#U7FB_Xgl4E z9`?#Qb@4k5_(2){Iw60xQ|;d7{^GxE^z|C7gNe?qoQ-~$#*EZSNZ0racI{9n_n{5^ zqp-j}I(|%#SaeUN7PwQU{P^MTn?19)(GB98lI=NL4P?B>4|*+Vj=XhmJiWx2%Hlh2 z1_PO^{VR3t>lAnP@HSg%i#cB8X)}Q?aCok>?D+r5Y`}Q63sL4TRqD#RD&geaZpcgR^)_N#|6R;!h`BVx)?p{YoO+iqoH*8XLUv|2 z5KP4$BS85Qa=?tA6HJabxF{l?10IU0zJI2TbyOnFr{VWw3^DBfe8))+pX`GK7V!d^5v_W zXWj?b*^^SGc&@WrP-MpaC-T2(UH#NMg_r!PM#G%}dCy>Z?xuD{4xAsH!Q{A})VJP; z#FHc20#$tRX+UiT3}`UA>HUOD0`=fwvYiawZH3$y$(Ip!PL2Asjp|1q^$I?7gq{TF z7Sef4R(q~pFpPuk>)NsD^;?{)A7eowl3_Gc_P7B4cyEdq0|#Ft=g@sr0*+q|d+pH3 z1fz#`d#^EFrM_!f99(c7=ZNGV+B^tPEB$V5j$mY{1>G_yk;_Yt2V-Z!7tiN}tYhEMNZy0b_IBuJ;)a<$AVz+bXHL z?YQT<#Jir8&v78P(V`m}PfmKz!)L4FuD0q|#r3G{PKWBMIXIuXj-1$Cd+eMnIlu1I zfwPq%|2erlIQeXAYnNxsJ6enaavj}D2lsdV)Z^gnT8(4@ZESkhzwtp{&%hR4mTNpj zzhkS^T`O8%rA-$o9}LP+?)f|0ZZ9hBqVlBO!%JH7vwO4<`pA6Xnd4S{aI&w^?hjVw zP7j^@?%S5`vdOzm`g5{2b=7xQimr|;4Z5`&cXFv;IX^A&z7O8~hv$EC^Zm;| zyLsyS@%#(zES;f#jwQa*5y#FeKNtgGb=|-J`zH?`{@bp8m81IS?>~I_b@lvBDgL%Z z?{Mbo(Ca|nXj6RSD7sI783^#HG^<5Fd7Q7H{N#mBx4@o7&^8k<*nO8 zAWe4H^#Z2K62h;e&AuA0avcOZRSoFyoq~%U^(iL zw5Knvq^sj$j2K_8fzuh_(OHs@7vx??lwT(SdJ53Ja4zF;GshVO&hN9jbc zt38?LUsqh5nmy>Nch&tkS_uje9;N>h|GlZ2G!_^cR!gasf}G= z6l@x(3ZJOc?%rBs?Xv+KqzI;u@zMzk=-aUr?{E;6O*T zIf3%=!)!|*9Cmtt0bG2ra2>nhn%>_O>C%dW%xt*I7al0<`0~dF=x~8E-GBp&f5J~& zH;}PdDOukFhm|cax-ZC&*5vW{e!N1rF#{Z!@|Io8=B=pEbf-8rOszV^^5SqZxy z@ZYp!)G3K(uN_uDSpbJk8$ru;eqCSJtbVYY@p1z4qZ^Q4rvNxC&gvD!r;mMU$)M@M zYr1|FYFE*#^FvQB=;5z;k50zr6Kr4QkiHu(w#yNp!0bu~gE-4;9pq{J3n=R!OjoNX zSwa)>8eS~e&eu5|G0`*N&=_A&=LkCSNiVRJhR(Xm2SC+5UPTiFKx`V?eoEFJ{Ga~i zzc@^2114hG0ox2=yM-Y(Ek2+J&;{_f87xzK38hAN zdLTH)2~I`q(@iPtP5laJ9SQ4stxSTosTL)?zKh4ycxFn|m=;lp6Q=cK>1-47A#S8H zCX7Bc_`+Q?b3t>=y~!Vw+9A2T#&y-rgorWl2* z(Z6?Akq>v%R-PqzPoEiK7qmZ5c@+?G>cf!YARwEX-5r7Ugmb@AU}_KEe|WtBOpweW z+`GW&6|>K408xg(cyB94k!ieUH*?3PL0x+Jsb9$BJ zonz8(@4duJ`McYmTq(p>;oyW1MZWKqXH*&1Db-*TB-$6$)+i|=5KLK*E*kkM`_o5o zwu7a6N9e7*nE?xizz_12&vxek3CaRiBg3i4cn0T=6oT`1yd=xYjrHxPQIYc*oD>Is z2+YXcKC>6T>s1XNYYPO)8Hv3$t?=2+s{(eNP1 z-gvKV#Z$^%**LOZ<#x1zuMU*ab@B&>qZBzp0(R{d-kL$sMyF`iGi9OM=$8!a9Vz#f zRoQn>U*0?=pTVtD2~P$aJ&?gq#8=K{EyRCI^Ug@rCL`c_D)qAaT!$WD-_P~A7&56| z?OmPtrapAmIkcHE(b!ZY?ZD!B+9Vm6K_qbPch8?iTY7?$5BHwaQx$h)4*xpXP6x@+ z4@(!%o+O^@%+Yq^r%#wz#dSKT`zA4~m*cZF1j^&RzOb)?_*7Y^U7ZdsJmhexms3hd z;>qdc@xEH^4_yY!*Bq`~J#9}pWJ#H58jm7#^5FXHKi$Zv?W%8ox?R(2$JcAHmiAre ze;cj;CWilI$6p8A{}inMu|&5e^?A92m*b@zyt!VZyE^TAHtI@u(E+8M^Avq$S!Y{t zkkK>4=g9*38g@Fca>(KG^{-ut+d6REc3ockw{t3`dZe_%IQb(J>g$1j!+mYneL$mQ z*R~xLQ{I(xxgSta2gLT>O-FD#bb7*for&;X9((t?_9Iuef#C?LE)Lu)&D{%L?jHPT zrj>!0mm{0D)Dr?M0noRSFZJVra(XE9hdZ^r6aDv zyiHwFD1ZM$*P{bL5*xnPIu4V_3Rvyu*44>ekhIR+Q;zni?d%)ewS%t@(~Y+U=7RLC z2LJP$+n2w%dHn3Vn}@g03fRp`JELQpjRe`CTF1zK2R7Rk-=FS3;s{>ANq>EQ;fEb& z@LG!g%QKh{o<_U0Rq_sx!=hj*9ej3A^3G=$(scrM`s7^!i8Uaey!hG8_s{?A=Gn8C z>)>NwQVy7%k!*54Eq{_W=nnZ4*CuNA~M zvU_{JpKV6p7RvN2dKihjtsU}h_-|Vkyt+eZJo43-x9MD8K{0~J7t&d7qzRw-C-5?h zke*%Z4^|?t;Anya1i3{DSkC&W|4PPDfDuMmKHe z_-@+8*U~@UD(?919sJqJ3$H%s_B|>X6MROd)yKC0a30HOh^9uu!9D#;3@dm0aKW$2 z2p0ZjV3bbowc<_Br`ydYG?0*m8qMWh=SAt+Z+?vW`8c!j^F=DVpZ2g0tz>fd%jX$B zr+g;gKi!T!Li6C;z{$~DkBbM^!Glgc*9oAUp{LHu2g7-OI{gK;d}3v(M_fV1(Qq;s z40wBB<(J{z@o%oQ-dBTybAD|!;*Wc6fWF|f>EN2L+pcbbq>dRpTL)d~v{{2|+65l@ z3B32dK3{ol@{Im_C3&y~^ZfBO>3rpwvqiYu#Q|U?;NlAdR`@^`rX%idleyC=bo|C> zn(pIQkpX%5b0^q6x);4{)tLS{<>AciE<4h$?D4yOvw_O5E#L)RXhsozhTr61olMG! z?&=_Kw)qPkx6VW`9bCxcfrAcQdj$5SKKwhgUuqxmRDO7zxTx}?oBVvxz0*#JB|Z(f zJPLF^;W&c99%vkZ81W+thOI}ZN>y$P56oXEMqjOakHszy*3fkB4sX2i+E)i!poeLje2kvH;z?H#Z+M z1e;b|c`tn1^XZFyBIhZ(;<}tS|ZepzIbC?O=Z$jo5Tom!!cYhqrm^KE-53o`u z9Hz4_!HTPxgd-tiDA#LQx-;q{dxRRpT{u#9(GdTt>nyGj?HD%7B>6DfD5wG-I&CC3 zC1MH@-maV|g6`+MIx3XoOPL!XefHpV%$VkP9y5UUejSEJ}1F!Ic>GRCR7DIs45_`ZFeGvV#Ma3j1re)P2KA>XG;fHB-P1s9BJ~lk&|%N z*+U5n*mW$uc=6pFp)*QQz^#WKt&;&x0Y#S7k8Vb3R)6>R*_P-;(QoAB>9g^D%DuL` zQT^3&(j;=eP0{eC{g9V4R@cSOA2qi^G82S|3oWFQ!nfIhugwV67Oh+?7@#XgpUR~db0Rf&+p8Ya zk$019M>FtT48k+Itmh$m^XYzcOJB_StuDOpWV~1~6@SmxxjfFQ)akiC_iUrza6Z4? zD{Z&Vx#!otUvz#~+y2|?IwSEnH-FJH--rKuY1;l7cz?QG^Ix|Gl~sT~YSw1(azBC; zt+mqyf3@u`fY-kFqQn1jB!;&__P;C(fL5AaTdfSYAaZ>kqHCkt&7LuGVBVM8B(M$ME?lXeY!@uU2b;O$~up?^=uAvTaxh;I4-;> z;YJ3Bn>$Cp{4{7+_F#71dH?0STsucCY1nD7ocot*w;i2%@=cyPPDiM#3rCy!JUuD9 z2Jgji&cO^$;O-2aySLky+SKoCt#i-t2j{w5`Z<+LlXPT9*jnd<7VPrusyxy9{*!e6 z^Pk<^efNu-Cj#}SFALyb+&sSPn7*7}@woKBM=G*~wi+nzq649b2@6s#G`McAztJW6 zyyEfW{Uam0*R#>LziTPVzMhZ2ZSKJ-=y#2^b4uIkhIOK*H@r8xspOj$n%*qo-Sc1E z{OrY_O*dxz`il+~L!&-=_~f?*-@gf$zevaao1D#G=ZE}FPV3+1l)j^rzfVW+-RO-x zJ-m6ww@80l<(!YQ#WV#Z(Uxr$RIIbB`qN_5W#|M?z6qz$XF*MW|M2Gh>}rIWemv{O z5Ht3yP`5nADz=xr=#}-jy1I5M|QVJ zBVGfqn}WMZXyFhebvW^J0Rj1IgvFu~^NC#4B1adb?Qlng=>mFyUl*+9*=*6Shd)Y1KY_9iK)%-e`hwNTO89ta}At0l4z$4 z^#2lEY!Mo2O9DK&00K0VxzS-Y_AK4fv-$HqPP&etQG-9D-#!N`Av*F649rB!;8E7> z3LMBm{Ql#|>kJCMHxY`a(v`;z`kHSxT34=mK>|lR8~|L()k%MCuxw=r7=tPJkF52y zGHKhLJM!anx3@8}wM<*%nQLR8wWDR4qp(&bU0DLc?a;4fL$sxBXa3ZM`X zu*IG^?OtBh?!I$MU@|ZPy4VKt+5^ok6g3z$4^?`xMvhf`_fP zn~)rcD3I`}-1qMVkU!kKE@1!RZO3>2c=P)6ADPK5>hio`=+*ZxZ+`LW=Ql6zzN@^u ziaFDz7;{sU&*FU*kK@7L=?pIT-Wa+6^kzXaf!Qat5|WrTe#t1ult)MWVYFS&@hZ=8 zI*#CK4A*yfO@Swr1P*=Iun1)a$0zH2I);!Nl@P3Qe%JBw#rx9s4?!INHH7fkf@;yq zs4_+Vc*Zpa96Xb$o-thT+rony`E9||*KqopLe*;*&Gq8JmC7LdUo-033FDowQ{ft{qchUM}HkDoL?g$kMBJm zo@lJ|jAH@riF`2Xo=K?VomK;f3(c$lLpZ*E^X}$D{IZHY9)d|iVgTnU?2JX&}2p_M6o>f$)f$dx{`bvojzQ%8wU@~ocQ z<6LN0M~;)9+720}3rvxtYkT`+pT&U=t# znej1mgRY!`2*!J&wTbgS(J=c=N9OA3ndU{PI_uXAz>Z@vC;Z-{G&erZIaj z`Zz0$Bn4mLo|n$`whr#w$=J7F&&xKvbbo1TPUzrFt*eWq(KdPFr7KPlo%4XF00(=gl~-E~aAgF{*x%Qvp$r#x$C z$v8TD>fhFTST73WdEijD{BuOearx)GMcZ}PluudcDXDT+C)hz&Hl110UukM3{G|Lm zmvs3LO*xWZ=$&pH-lmhTIy(NMtxiJQx0yPXN0%RXRoE3>pe}WmRu#_45t@$2{YG2z zR=ytX{^UWc=mxR8@?HKp60;<7^h_o&beycT&B3k?gq|)$;|raYCE3anOpF#}v1i?* z)3xuVce8(CvE!jX3V>bN=?6g<{R^k|&$W%u1$Vx${^j=h&CRo)-Q0ini3hW*fd~FJR^xg<(Flle=NV)L7lfhcWPz*{`i6(i*;2@tzP7j@J&e>A%qT_Wh z0|Zx&#ZWI?8Cqzn8hPo0@hqL?nHon6xQF*=GF)Pv_@C2 z{OPNIa`XKAmw)%-`R%{^diVG@4?XxGhe|P)v(K|ZL$R_P@ z7yeI@pQi=DPqY0NAxn~`N6C#2Q_u@0j9%cGS$_YJ-}MidfcIU#i4p79Z?c#1sO0NJ zHO<#M#rWvn=!t&OUtnV-b@-;s$l-OS23fY^`I8sf_V(wc+elvReIx$y`o*JyukO>e zg0zjE8}&vz9WABLqD-f=9Y&sC7hJ#2XZvGtTilMnMzEiy|6k@uegEWn<)u%sFa4;4 z9(-1puF;Jq=*@51C+BoJf5@JG&Nk-DWFRSna6CcAwhFUW&<2;%Wd=|tJC*eyyK?*N z?&f83>9r{Kd;v*#(f4%8X7fdsKU(F!GG6BczI~nDNp2F3iYZSpu~&i`Uy{)-jQp!R za#W6>^UP*FLKZIME?@OQNb!r^<`-QD*T@t+k4}nDm8C6w)bZVO`ihUgz=H0<*Wl*M zP?r|(+gFW}vzK1mjK9srU8xLpqLyQm44wxZAm+GL|%#eIVYc71LeQTW?SQCrH1Mfs{ zMhRK0Ji!kdb~xIILX39nRL}OTBLdFhYoM?U-ODG5rpo3sPp-q!Z~le)g5{}&dQ1Dn z3jXLBe(1gYrL$JV77(m11AVAJ8LK?{xU<no5cpHJK@!_tcbz9fqDo?sn5WXlXA z*K7^Cq9;g?&TsFYa`{X;rbg@9bKE+<6rI;OzlrSdiM>LwnKV5o7i5SIn=FqC(N28^ z%gA82))uM*eHUQ59)E+W`p{b$K{Qsej$x<_jYEAkjIGWtFb@uiFo(j~x8EJRRu_h< zeuA~0r-Kg%eR%Z@QTC0}@@x^WcGHQ@l$Rs0aD&_&nF~H^T)|_%ACVa#FgX%Pjqt#h z@DINlN(RQ_TA#!5O##9mfB55+wvGcm-ll(9N&LA{_Gd3r8qW&am7QSs9E>9IbFgLA+b9fwWeoa~ie8J?rVjB;=YK&vrWGF0O$IXp%izx66FNENsb_X-*}&qjt% zujy&H==H5ZGc4tSqbW0v&P zDeX?HsDACoJKg7t2AXuRf`Otd?Y@&6owP}vQUYe*t^H)=KiKePj#xP3=afk0oCR!7 z`$Pc-XCuzR>;3x|Ih3!SzuLMI_ft^J!-o_s-cPaAZnpAla7;l{ICxZ@bEbPX8H=$3 zmIV&Mt#i#QG7HAr)*;sZ#I&aj=T@ID-Q+9!4nA}!t(|P>nTGE=VT@XYFZ>AG(p82P zb@wU2%C*LWAVV9ZVDb1-_-^zgI(Vl&MYnc6#abC!_U5frkDAGnKuG6;S8f5N*R_6>%$ z_n&TE`;ial=hnG*WD725yXIZmw(IptAFTK9|HpQ#)Bkn*uS@mo?i-okXnb<&JMp(8 zPn&Y=IN*rJbe6URUd~u8+0%X<<&zmrYU_-YwH&(94$ni=3EQc!19u4DyH?KHHyY6s zB@4)t{9>rr7CT<+DvxbxE3;;^^Mvu6o?GzNw$8LTeoA)Z9GpxqbX0~^^pm0$F<5s0 zr0t^Psp#D6D&abEF*;xFp8O~9OGkhgJue+KwhL%ygJ^Ipzxvw2CF%6$@a_JUHZn`o zkDT>y<&TD|r^l}Qx!$@1G6G}edO{1R7|!u9zQTRYyzAp|<1szTALtk_zr^1!wZ#W? zV8Ot{_PYY~+owOfdGhT0o5$W;zk7Le+kK;7kF$wBXBCGKG#s>tQwKPIx(%vrz_cx^ipb{x->wlf0O`EcK9_rf2~=tb0(&c2R{bj=A~&LURy zP5#Rt(m}s__vQ0%9=-heum6|d|1bXh7eD*OufBWw?5}Sh-~I0Squc-Zf_;2)X8)KO zhetZ3IjwKgyKlc%7FwiZ&ro2bj?vLj>nuBG& za>P2m^R0Wv{yt4spFeAV`aFN<+0Ba= zFE(T4`g#Z1mhN<*9@v#PUEj7&`Rbw%mCgTv^VMh8Zk#WOF8y>aX^IY$vvxt@1_^GT z1jF-aU)}ixX#PC^QHP0krDI_;P~yvp2lBo0q6zO<{a{ClpHi!6Kg;J^QG|J!egCh8S1r?+7`Ya*pB^1ScFHF^r;8?a8|-02+Vk!XSitPMGJIbl^NQQizx0 zpW{*Mi!Vcn5TF!jVFJGGou84kLzuHg!s;~Lmog|-c`l4_UjtT5w-=OqTsi$sDM9rF z>k*H`5fL%HoYird13u~0dEWWb5Cre-?_O_O)Z6zzEU-|%sYTCnPE4DA@#6W-i-Pxu z4~_v?uNqiVLZ$~_P~0_#740a7y(9nThxKYsh)b)7j&e9SdS@6fqVw>;BjSTc(Ftiv zBj_9O?fCA#G+@~0M>fKJ6vSo_Fhn(+(?BR84hw;dp20%FDYKlq8fvuExH+5f8QsI@TRr_WW=HS{babBRt-l5}_@VP)j**5|UifUK-i*1R zm$Eo3sV65XkEJ0TWU!4a<6#&~!L41ap-(uL#yyUX!YPw$#|2pyG|Lah$4_%i83qpO z6OQN;B#AGlQNRCOFdeM~BAfz>=mexs7L*=Gu(YMQzRQpPGjiPnBiY9z{*!4qX05yl zKO-o67cRUwsGNx@ZZeC`yMN{9X``G&Yc@PK#qjxyn?L*cFK>SK^814J=QYVkm2vnq zezdDghX5F(PGv;HV8(mbtd_uBFs2RC2^1|S5`1XRAXCCRF-&Q+fDff<*3HMtS-Tny zj^l=3qff?+48YGKA->AMF`hvx6%D}Ym)0nOsgmd2!0L9x#)QR$NZJoSNJ}>R)7-~vCo^_m)Q5h4h{>`C@ zu1l*=AbM%J3*g{ex+!s#Sf>AU!xxWs?D5KJUwd;LewX_l(e=pqkIx*zc-=g+mF``o z{s3h_n!jDAzwO>{!o_Fid@KInch88tWZ&iVTCHA-k3T_*?zlo`$9h`c+MP?Ix4t!J@4$IC%&aQ88*A2^y`Fk-ThJq^QpHx%eOO! zvMs0l{as~oc=g}Sm9aeSol8S!`q~3}+Xl<^Sx0UoSWX$|Ilk{s=igv(XX(4|U+E`j zo(J=F;n<_&=#;DcR6iWqZL*$TzF)h$_we@S-s7jSGX0UwdsJ}#$hXv=y-GK}+BeD{ z+&)_X|1kadpgi}}Gp6^VaR?l&!8CaMJG%8h-`u;(^5sT<UrcWX0v+uYJD=?ol%J{L@AEARc#>0GH@oi) z5EPW>@P5ewKlbj7Oye8fHyd8sd)*^1phY+BeL;J=i!Ow-0GQsO&p3~!5bu3+uQ^Qz zpV9u?c(ybP5cx24U2tpb)gvg_>qyx>dQ|{Gx4#cY3vO+_pMqNc!^ijOzifB_Z@N4^ zIzG|s<-w81=|Q8*Nn!MI=jhEpen6Wu4V|qzcpqMlpVKWz7fx2vOJ{_dPnzFK2ZZ z_K^U->rIL0gGJ}PZ+)RLJBd#QX}kyi^yzsQT0n6)Z8xReXs;Oo$`uH@ zhS&9-WjJqO&JVr9@w4d~WIbHqw&3owzDtki=aTUgKt+pWOE50z`}&1W(v;b{ zt1UboOy7LR(crW(b<^i~GXFUr!R)oGZ;gy7f9#4l!{7@Zp|6^3=eQ1o?#Zis+woh1 zC*8s?c=_zbMz_6ALB7fJIyvwxn8_))u6`Ig2z2N3(TC^+7xEk&XrX=abM`C!e4kRC z&W;N_FqOA`mZ77zv$dV#5nltYObdST%hq{Nnoaw5KAB;M${Vcc3T`xBU|$)^CvWPU zyk6>^eXnhq@q`mL`1y3i=%C7X zvbL2rBoDrtvE`nb)<694$MXu#)?7MefekKb%|CcoT6Si(I6mMXiox$mzE=p3)`JO8 zu60HGEm)52M58-bx_2@B(R;#BohPoj_?h9MjcE^_u@n3;&$bwC_q9)Lj@}F4)i=Ih z%7`MWsSPQE98h242{IH8mCI&tz@{U3>~K;4 zG%~_wQ~f1#+k_Ya6`;_5SAqg|i&>?NJ^3n25MK#!0tm_+aZSG}#}uXGnbIS0odbe! zsXGQ>PJKtpZp5He!MTQ}CprZ;*bl_l4Z*j#m9mu6b2@$m2$1#sJvhCYTiFs*BhcO_ z2_7awos{G;L>IwdkU{u0@Siy3)k$asjug)48iH?QzkC0>MxB#d$;%MqYQw+YZ~xJA2QA=-MSPCyae zSLSgB*3iO{ks6OcjVWzt(tmOoO=}!E&!b!Cgb&XTO=U?ACXn4%SLJ^AWQs2b;Hn^? z)iGLu;Rxz6Fs65XZfCsDG@jGrs@&z_2=U!LlSKYNyJKCxy& z4(qGu-z|9O^pvUHbh7A`oCNvgX{E(yqrw*CSlZxL_LNHL)vcb>IdTF@n|6ET`UJ#! z{HCNRiQtjf=BT_a6i5+;@04!%pdvY*)0Q)E`|R1xpM3XcH?Lm2n!GY>+5*EsnUnL+ zU%)}3oz4%moAN{dVDecj=^sBi?-=3*-ecWZHz1(#TI`9 zbjC>SXRdQr|yevwv&f*^T+#3ciGW*+tMBVePFxf@BF%5@2!l> z_T%*$!XMf#aJN9d^IsJpcKrJ9E9gI*nD*;;QScTWt;axrz0bim$|W$EbA?}JjzcwF z`kw=0W{L$mZwbR{tA(cHP=M@!q3e4zHBFK3!0+URR3%{F_Cbnf$|>6g^Wn|`T$>JU zvaKA%xA4-@d6nz=@GcR?I93Zf?2$C`bZ&DWucVufmG?ZVJaxErXukT&f2z2qRhK(p zO2(A3Iwf_#YkF4CPB_W8=a)RE+-rHtzu;0E7>)(XmSPZyNLXo^!u;7^FLJ3ze(@>Cj0g`?>>I~{kwPX{_xJIcLC2v zRUSPp2>yQShkVZP7KU6_1J54zoPGQud-V@Fxc~V2_06Xo;s@!7habRDz3ub^$CjP& z>Y5o(({n%ubI)dz1Ck8Tn_?h%3_to+z+%KT-7nyyBOfIPPmKVw2ZG0T*Jh4wQLt#h zS*G)?4sy(=92ob$~Vtt{LyagPr1obPF^mj!Xt;jCGC_|0@-FkNR*t>Xj#s=G$N*&@>c z$vc_QIpVbuvnEW>Uc0XjwqbHG)H?6}bzt!LH=2vOl~%g+@dhB&7fP(7GZMVscja?aErO6(Y~ zHOtirJ@^FCdbh7ejUz`ym36)m@BITk(DELdT!VFjJH~Y%ffrO!e(i4x*xwh-TAg$Y zT|K(nG?=F;=*PDfw(~AKK@IodS_4Xm0Ok{ATg@>c8d1Si`GQToqU&*r1{OH;SuQl- zw3^o9(<}^=O@q*Rap0r;lyUY!9ZrI#^{iDc8lja>!W}s{LXA)0K$FoJZGas`dO86| z5BU#0PUDe+bm)+oA}~s&&d#q2<4S8C7+X7lk_bNanhr)GGWz39_oc;e+ql>LgVTBE z+jAO(98e@vqLhCPa8u(a#|%z1j~z}> zn7sn&c&71v}Zd zBIw@Hs&LcrIrO9NMKNv)Q!tJR3`sJ-5d!>Zqj>hdWc*+N)j35}x%;v~<+>g(OE(!q zcM83-EWR{HCEkCk;$uK_p+aEBr5}9+mD|a0Z6RFW1S@9?1)oIU+b`Pn`DVO@ksjPW zuHD?sQSd1lQ%ChUqcejGdT^YDk~mKSOQZ}R?|SuP2stNu?cuXt^N#e*MvEPTQTvFP zr`*o*IY`IzQmuWO>iQ{pXQ1IFEn+b;W>mm$O1`6iM^4Xv9{#8IkL+AF_XpFDdF+#q z%en18zy9g=pOkmmu4zkMAb;;~tKzq%`%Q^|m2Ua<=T9I0=F_JSf8YLh9Km<*e)y#| zF!o86cJD%xaO9F8#-lj;;mq9k+<)Dh(Fxy1aydUZj`7u1zZjF{bh13@4dv z^6n(=xz#>g{Yl%&@LZ>WBfZyIX-0WMC%0oVr|fH+#HR{dIg-k*4)tvWUm3&ULf_>( z(46zGDp&oE?wroU(~iKgR|P8LTlx<4;N@!V@OrMzUjz27Ip7Evu#cD3Bh4kBdg-_6 zXQc?vA3n*E>?r8=9{SzO0`iwP54OL!xxb*i{b>RF(g@n`7R=wze%=%8%?@)`bTA)X z$wyGd1&xm9WNQIvDwp4AHdud@&Fgl(Kl!`dpAXW8Es1W$co!fq9Oe?|AsHrIlV{!nn5NVitr_- zJEE~p9yFX>2R!>}6jz6=UGQiW-FxzTFE{$3#E~`dR93*Ov%cRSKN%%|7jEs=?s;wc zz4c^1%-L40kv5-CqxZpcI`Pmpr#VQD-;s@<4wvH8r(&Hse4IJ1<=$&v(dInN-kCnz zwMm-i%P(Oa&p6AIuhNhKw3+{SvQ0kLPKTG71OkC48^!b)*Qe10ed+iUFzU2A!IlmO zBZO?p78F(1+GTiD-fWQjZKk)Y2Nl;rgm(P|i_dBcI>Y&Z{E(P^0$nv zTAXh_{rE;SJMS7kW!|#`Lwf`t2TSO=fh6*Up0{^rRsE;Q*+z?_0eL+3oo(l1NAm)E zG^n)U!T#df8F@Ukg(v)8e<<(^)-8q`4rF6~YWdJ;K~DM6eekvOLFW^Wb#!SE2fu+V zodMzv`fu&6dOp5Cz9JGIA57h!7rO{l3|Othi4FUpT_5_g;R0$Ky)oE=!yw1X>4)|w z7>oY!43uxPbt`u>KbH5jVR^{Yp^Y?V(VTW=AAbFgkIkQA2TvP5zRS@Wdu31?M+b5h zT+3fx|F?DUB^`bYVwu^tAhxv5 zW?~-SPdm8FZh)Kq0WTfpRTLdQ^Zn9K`}$J4ip*5y%3Rw5Tl>l@FKiBdljmrRHgFvO z%g84~&*NMDxRJ-2&1MB1pBkNy-l_P?PgN(Y>l~X5wRN99n{PIm4hC^okH+8R^b=lH z06u{M{EJ7scAs3J({vVH0M5ZD2GAxeqcjixpa0kYTZ}wTH36A$)WA<;Iop*W3ccgQ-9V0c^=!vZ(XOnDjgEi%=%(e!Y- z_KIrsdSb!%I04&~ngm-X!U=2`SUrH=%d*Pp>wVg(?0bjCG-)fGK52hw^zmN#V)p18 z97cH+!T@PcTa}YU^bBfDr$yET()ebf5R1Bb4_UCaX(0*Z_@|tpC#q#r%I+V`D4(N@ zLb!hddQ*)Ay5UTy%gZ8;-#OQ3>N_}k7Clc8ALm9xin8lV>F%SWP1+DT4n{QFcjPPj{~1-IQXsnwVTS&c&S~W+Xar}JjM4X zDdXDxG`+)7?G3iVvv^d9IwyLIdTX4C9fNv z4uYM#I(L%ecLmpf_vO>4-?smCxc%jq&maCGIr{5x`J4A2-u{P-(jTJzyAPi~{&K;A z8Eo2CwAS%>4c@=rf71CGecJSU75WE;*hW{|BJa@<(Rgt7JHhl7uLC=|CYx76&cSxN zB+8|YuI-%MoM%^BjOKRR1@GxR>Dy&?ywXXwIlW5hV*2@~+XcQ;WOdUk2c2w11=H1>^Ug zzPhX_Jw>TRUFPwS8?fx%ho)epj7; z6~w>J-`VHZg7+`8k$+Y8-&Wq=RpdLA^halZn-004JwG6uZ7TSiw`aGonknIYi0^;? zPi}ts@=wo7))u829%NqNlg^8V+`o0gllM^9{iySLuZg5{=w$kK-#owQ2G53H2zlLV z3yih1i|pB^O0MJnYs4Ix39CU@yi0Y zUM&cWjcVH~UzwYcRlSp)Hj=z|(kpAWy8Y^(vhDaG?etFfz^V=4p^lf0+S32pYYFj_ zoxbuyC+7lz?wy?vz|LJpeX|=z#VriB5#r=<9Y)FCwF3yx=3_1RjNZGCSFtA?<>i0P zF3~;xz&ku4N$9d&P(};j?<>aB7)lNbnq^IAR6c-VgIzhtBsTg-SO!<5aYhI@=ji`p&x&R zUronrN2AgIx3GKX(Ih+X172_6Z__<{H7NtqDllXSFyN0MIFM`_mOqC=h71?514D^7 zWVj(SZ^&%-8?3TrwuS>QL@qh^zD~FQzyI@A&yWgSJvH@K)v0ry`{kTdr&5;fRl@Ha z#^SAb*E6< z!{0YLVRG#3=D^cY=Csq%_|OlGa9i61YZKMfF$+p20u>*lORmYM42T@j3kyny7T%{n zI53-cc&40Ar-Pm78y!kLjmh#{<-4q6pVLP5Iql}R1RVc+KloZ4S$*iMce{F(MiY$(zhICO=KBQDx>G(9w~JcYdC zD|8r`NA7B8qf6`T2s}>FwxxY~?7Vh3J6;Yg=YC_sz~Q=>vT~B$#ttewGTlp$d@3BF z0h-K!E?*S8P>J|Mlo_S&MOco*yr-uZNpdBmdS4EMO>s(HAxeZs z*)>^b96Pln@PN%08y8&ev&MLYeZk?L3>9e z>N(Ez`0S8O?Tk6*-Ez<|^cGaPynWpsDvW{4$I{9hMp88?#NkHVB0K1rWGv5svj!r+%Nu)e(eZMsrSleAO3k)Oc>zf(5&Q{kDN5!|;O7`Yid4wsX&)8*pH`SS6H zA9bYNB6JcD++_q1S)CjcC9k2?9vD);s&xLqryXC}(Ozd$jbLb(uqbVAI`#1KQm^w> z%8zj%)AXu%1||+IH(KAwki>b6kZU>(;J2UP`zS%U@3LEa!HV$~l$xITO>Ka!jxKx# zaVQ&I8(KD)+CNSJ6g@fIZO^(X-h!@v?kL6+k_@bch8QjUmxvFDaY%xa1Q-@W68H)b zQ!sP|U-Z7bnqY)s?{|37E@fqYqoWC-NqfC3H%o)jtJHaL9NkVCN&W#N8hKI& z9`A76!I^H@;ntCy{A1ul3Su^G1~-QW2EiwkC~rHBt+2xL-A*PQm91?}MW%gCKrwQs zbA+^7mHtvEU25s8GN~Kanyj(EHa8ve>>Q^Z`kEh)=a1Ld&AEE~%<;WD|Kgcd2kej6 zJsJ3O^7xFc_4(a0&XogBenpo@24i0ZBg^tbu74Mu{yGJImFvH}y}A87Jo_rL@ax#0 z--H?8N9v!2m!Fv`XjWe+)JH*h)8bzb~IdS9UXGAP<<-ZI0S`uY8j4<=Y&8m7}Tc z|07TQL+bry;7fA8`8vhE%cDPNi#_PqUErDOs*90Fok*4I{9`k9vRYKlyVg1)uaYzw zk$(Q_O^#Rf+ZP{xvi#YTpDuf+r>Vj~1HeO@0AcELNtwOVvH981BauM;?V8xKVfzVq zh_3QxLWx@}DrQ!gL`qC`%+91vbx1T(f`8=?I`a{&x3ItLpo2v|C43S^dIT10QRG2M zU6Q}9W)9k1@0tc_V=u8%BqH@o+9#Ik%)Oy{V2G`gptGg<)2`0Wu|wfylfj2h$M07? z3{0fn;u2rcftujh&ON+^N1mxaCibakjXMOtl0mDU^CA7Fc#}i%kM;t3V;ZBaVqUs3 zBV^VRc>eNbeC*}&_Qp(y_@VGd$AizJ)h`6^+P3WK;)?|B5*@yTZ(EagvWAE7wWYP? zG6{?|mdJVINB$}P&+7tSClCWk%-f-zz{P22(k?=fP`Q{Jt@J=igeDFp`Hk!`> zNO%iwd*EON@vZbmzz9UAq38Ln@^qskqu0&`&OE-Qt@!vLF|9$i$QQcuWB9m7C-VeY zv?d_WGwSF}t9zY1Gl-&GJErk04XbzG44Bw;{J<);9hG+0l zY3+43d@3G!4qkka`~^SQ)h3Rex$FJ*gIrJ9;DEMf7oeB28iCt%%)yGjOkCC6DEkbW z;3b%*jg$gjJ7ioFv!edgC}%MsGI%vM$}Yzd`>~ymw$eF9qz$q`9@^PLHgZjF23E3| zMk{C4zubHDWr4rRdj3Y=15e-;A3+h`V&tRB@WfV~8IcNgM9{&`Vn(;{-$?jjbYZ>* zL87emKm2P8N01(k?XbWDpB^Lr5A0tl~`-=}L zwbk9Ro3SmC4+EJtr0UvB;R}AS&6R`fUjLaGtt6>Em=S)mGO@1ww0a%-i`~T(U_r;m zmTAAUDpL3AOTZ~dJSa}NrgCzKe;(Fx*>+n|Y6@Jrk4NjKF7#A>jm@UhHgNv^fBabr zBtXnn#zN1cq?HhkFftmFuo%}Zb2VtMvj`DuL?vJWw1EWy2_i+UM@~dCm-+h#aNM+aZ8!di*OG;Os5In7zxPK)%Jt2&$4hbrph(Z zs~j*coM$Dl&oDUc>_8j$b472XK&OTT5ft6h0{s3YYQt|kT=HC>RxPCsO~6QRIJ<0n z0;H3(<>~oZ68CvuQPSRbd_0%u;Wq*87%e@K42ZVT*YxN$(R9t`Fv)c zyh(fb6nJjp3^{F|G}2LF>fp*}oeOl&H1IIAcnDI!L)UbWoj*BW&dx5Dlfx%z?;w=( zeh{wuH_06T>0xjGS%mb5*qYB~F|_a~vfve= zCOiXL>IP?iq_TE4+hSjIJOv3S#fANtk-%;FLP+02>s)VeP9rKzDpCJq?SuDr!=p8T zYKxB9$CjYcJ3G?4)3!va!D60k5VEbA3^rI3=;d-~F?7p+0wB-Y)}zkUom93a6YA69 z(f7$?hkZ(IlVp7F^kPQRCFS{Te~6EIFcU1v`~LPF^{y>YUt_VjNTI+s^4^Xt_^6w> zgCCC3hta0|pTqp#(h4ql4)%}qYMGRZ;cn+@&Sw?{eAcHmHL^LQSe2e|V{la0y4xi7 z{k^3@epq+m`y74J@XOTlMe6!__Fv?t^%$C*=lEUr9}1J_Qip)DRrzBla$+$;fHzL6 z%=o>wwNqd19qY^MH#1s$ndJSA#o{iPXGsKqyt|6ANmBapC(BRIezF{%g%6>jPYmtc z$JXW#Ewn){Bq@AhJ1VshIQGPi>-f3Lz{Wq+ zuEtg(7s;}yq0h$72%aQ82}A5cX@D5E$QnD;mCxfNd~xNah5o!s6~D2$j%^4pI)K9m zwVg>WiZgjneKWf%cxTs{pgjXT)=VNa+O>fh?R5aC-)mw%@n-fyK(1e@?x*aHgggGd z_~wr;cPC?Gio#d;2G{74j&anZ|B^W7>NaJ-N8j*Kd4DHVMx6@|i3tc>;{+Qe}7vGge>=HUOkvnuGH)U$8e1b7W z5gg2(kqe5I!B58MgReLE1fs7(d7g1-XHet>&SJ66U9eD3F%7)=Z)99(q_g&IJD&P( ze*Lbt#?KfnZ?b40P6u3cVSGOtMfMx-s5wyQU}l5Z4-M;2B4edXVxsaVyXWo_2jgdL zbY!8roqFN74*Ff+c#S4`Lau`xKa>$GvJ=kD>`@mOr-LNbr4BT2{*`*V0CaGioJ4z} zSLBsWc4R+1bWeSyYyT#{nZcjA58ld2+MnEHcr~w^q-CVW!Bc&yAaHGM33~uqRiqqfI}rQ#fA^nSkirxI0euX( zDXeL!iCgL~L-u?N(f6{`aHp^2{!DowXp-mr4x=c81VxfJfd>HsluiN3R|F|cd+mMi zv?p-lXiUwRq%KM$@K5k9IPjhB2DI5K^pQ*>D!$d%-t#n}7mr}+a4<60p34xSQ-7l* zzS*i=NA_bxZm*M2OKuR$q9_pnL<0*Uf#YURuaea_W2|;e-45gIAtnZv{lzcG(EH&! zf)(X>{_558?DAC{6B|>d}l@|5xO_&PW?DX zX$VNSI4$y^v%vc&62a*uMyGAhVwBK3y?5SEN$akIyGjd2a*%d8ah)&(kx{IIRECD9 zWJnOSF1lh`5Ey5Aakl)|Pxhr=fgR;}xEY!;I9^3)$3ozVip#uspp-+CF<7@r{3+qo zC~;?~0sw^5KAKWKG^BXwT%(%nrDOILA3df%>n9N<)A+-v2{bzu@%W_Q8nzIfPvW2} zKD3iU5E7noKAh%m93cL+Qy@nPns4Vaur>6NadNu38&>D`%Kd zEFXtX?%UVj>*lvI4fLG*+umQx+Z^pHP1iE(bz95R!{BW*BBD~)+aZ%{;3iM)l+1B> zt^K{e|f*z`}}_Q;PYkY;G2h?gRc^` z|7Nql|Ly(m;nlKx@@!}C_$LAl&`2oNM-E^b%GddKL@4~EH#4PtWCeQVF5H}lXXG5* zy%*Zrw*`w+lTV7EB^AY2YF!a{r}p^PwH(}XrTU&SX@f7`+mNf!B(iefJ=e2)wIj|c zH3Z(k;q{fiY7|*{Aor2~CCRx(&X&WI<^J$2iFlIoB;ACe06<`Wsafj2xG2iFO_F==FgTA zEkpnNTS@h|MCgWgbK_CAD#!U_Ydd=PZu>U(zKeeSuay0Dp7{!iStwD2Luoo8YPiggf|hKC(NykO-pBO5phscGk4& zH;FYQ>n~ouUVi`l#q#Xc%LdYLJ_?P`Klph0_`^?@vm|=HU*Arr-N2EffdBZ!Y{N;E z1noyjmV7eyC^ohWkc9?D#ZJTmfk2>s85_ag-$aI9-v@@+4r`EHr%f}Bz;o&S<;!@0 zxPxQ}fjm?SPDgtu%gOy={XJYdI!i`_>m7PT76VDnz4M(i;j=iVTuoWr6Aqvhh{WVtx@#Slq|I57AGmP3M`_=}z7Ke1lt-wSagUz=D< z$F}6x2)i|c&LZ(G@hT<7+A+O-yd8D&NZ4yfWQRr_{YF^vjUp(7^H z`5}(Eyi6Ih=fb~Rv&4{0pYvufjW-S^y_Wv8$S{(;2XZMQPwA$(P$krM%v{(fi2{4oQ2v_ zHn56!&{yXP`4r6l^ii-p#A%MebELD|?9p!%I{4`zluH!5)G# zvKD#sTPLP6Vs^81$j4>s7K@T5wp0DyC-1<7f4LzJg(KYpm*?Q-i)H*y{ZHCpyE|f@ zGS&OQJF^%g1MCui25)V_Eil^5pb;0^=*Zn9PK`S|BRW;B@vKkOszZl?L9;b}RabK? zdW8RZsIM(##~V6sc29Yn-}N1-ch(|Fd#S^&oX!Js1-HJY5qu^4yZ_~He^z4G$%K&e zy+y%&NQf~2&BFu-LMlVB6(GjTHH7N>O1YQ+0suuDBT~bj205`NH`y=WL?!hA<(@|{ zy^5ALOid-AMkhOhY!9#;K%Kkjbi4Vb%@VE5O*`NZl9Jrc90)3K` z3GPUP4#h*QU^>TUs=6Ughe;ul+L#HRp zlhccSYJ#(F4|48R>B}oMjZu*Za2W71nmb8FXczu~VFWOA4{ZR^5zyc}_{Dt0s0p5I z43)Y)hjGl?OrN9J!%yufji>82iYkecl#W3be52RABNCbh=k9?`9o^E_DhKK##B~}m z_-KZ=7Eyvzp{yL?eT))e2LoWpaDWE~o)CKS&>k!Dkn89LU$nvR;-2eZi$3;u6)-SP zk2&QSxEq)OHwW}-+3f4q-o(hXHi}2+_Sh>1_Uu*;#gk4;OTBnvTH?GHZta3&o}_i? zOd{u;w2mM>wq6&oZbPT~q)_=R5P?UGD_PYhNT-Jn?m0uE)bsM?i{)h<-#Cfz3>r zcj*!UhNh)0JxbZ~IqgiZELo;sI}M^by)i+jq@97~!Xz$a4bK@s{tc=U<>_?{PuP(d zd%@N4bLd18YUtoW*3c=84a7B$9rZ|^bnBi`J=Pf*7y=8qHqxXnMqS(fB2mjh0>G}p z5O@z0$c)UO-^g}lEjS~zdqY=F8-u3I1Xy$;GL-Z3&<-C6X2-w&^*lGSwFf_S;y3&R z8fG5oY$+Vk1J~KZ%4nbWq%-KwQH9m1|Ibz!rh;y3p!@!{+NkXC2B&-YwO(J_bQD-9 z=XZIT>u6>4r112DXWr?Y>-2ou9ES-6n`>Hwko(-Y?!P-#zSZzD|Js z>oD-kor9xaCgb^hvw!gUX7Bi$huxzu-|ig#?~v`A`er1ftqcVuMHKA&V;eznd%51 z*(52vy{6CcJr6pU?E6WqJK}wu#QJo(H;p|B`C=;jkIi|6!vdY^79lmLjLny|3&sB=$j$yMs}h@4c^jf-+v~T z>_PbF+{n2RV>6Mu+PA6g-eoqj#p)DXIs;&VEq)i6Ce{|n6{PA=uHR3L6rrrY<>SbG z@4FUV=A-E7YFjr}d_M`?ku$F#d2b#rA4Cp)8~nq_JRbbvTY?1 zGMErJ$whPIY+y6k!EWH2*Hvuotc{A_G`6+Lc_ya@lTMH4wbduFsp7Jsg)dtK=Fo~w zm*=$8GS%WuZ8}f`FTD_VX@`7ir!&XW20+DjdugkSGvX=Q#QDH|Sd|+&cJw|p$4kk( z+{2e@W(_EbxGCnx{c;UncBUxa=DK62tmoOziU=R+vQ%k}iP1<04|#%1Ed9^}?17su zh-v#8&JCXhv^*Dl3~YK$#=w`)y;X1W99d9MndWt|J?vX!V>%F>=@*TvKeMjFtIO9N zl)5p9miyI9^a}jqJUq7blY61xI(ug$t_p5=ro{MWF@Nf|!y$GT|8?||t9;6S$OVCt-Fw~f#U zowCz`zA}SH;e)n1s6lR&0ZX25?3451VdRQDMd)^a_8i~kjZ zDsl)HU<(uh&_K#j<{GV>lR}L!Se^cpIx$l~PcS5bMojwqF2;=U+6o&a1gerZ1TrF7 zgBB~rATq*bKz8u97Z@<)ru&vin2?==X%eFVW<-nIo0l>S!hPUUo)U&Wt!OoPs&&IO znf9E8;b5|8RvF9)-RULb00>Qt%(W?I5z03&mKT>VBB-}%bJN8fW|e9yv@#3{x>BD6 zw4D;cpYavsXdYE56*xO`9A*}u(6Wh7;7GL*KvTZLlj6ldf#JG6oL&3{EsAdHfgeFo zI=|byTbc~6eotbp6M&+|s0IJ>DRiP7(-HHI#-_)Q+)M}0)Kt(~ADPe?!PJx3;IM?& z3mqN=PCPP=u`t9jkgwr@rU-oSj`7E~2`1Z;Q_)?DMq!aeAdQaOV-cn8YJ6WygDTX+j=8>ft;HpHC97c$YogiV>SB z+T;e`)rIdTXJ>T~KGA{hl-^3b?O|`3-NIXi4j3Js#k|0ztVLyvOvAal8#=(p=PbYl zMfW5EzU{wuT9ihq1H49Q+6x>wjxNrZPZB(SdhzjcavIp9dq^U1TKQR7it*rJ=zhAc-mxS_Y!vDRl>>0$m&6Uq9>}{_0`>_{*KW<6rLVpCqwA{(Q50_|?Pi{;ziS z_P+{{ze%S2&1SRvZM@-C>d5nZ&z8+W5`1+=CbCO1?$u9c0_*)okg=a6Cf9;b-@T9B zG8%p#Kk6tE@1k$989N83J%1Z`H{KbK{w-(c%O*CYQ`nt1`95hF6<>9=Q{y4JU zPTd5Irkook{==Ijvh~qvKQ`W{x!$~f)8v4Us?QBh^_{V;{D>J{d_1(;8J@lINBG~x zZOLhH^ZvA00uXm;)2H0b!qB1H_m`76tP6;B&7LGc{e)TY_$YF0+WukcY~m7Gum1v0 z&fg}BK}&&q=~W*QpSp$HbajC{m~aAHT=Q-@n=zxR0^b~CpV>@w>6#_WO_Gc8i|u%T zLpHL^Uf8^DUyYOe~6*~pq$VA+5w$b0mR}jc^>}O}wk?GI^PwZ&d5m2up21m06#NzNq zUwQ*ivPG`x51iV0vTdiaVBl*kz11_aFm^vXUgqeI*ws7xO(?}&Y<-~c96b9DFaY24PjBG34cha&Nz1>0V$_~>hE z{rvMg&vXVs&`c#QL!aT_j+X3nYaQ^zj}GwU7-elcwWp~M-F1k8)mC`&N8S&DliAm^ zra@?t@^`gssiu4>1%*L{cVY-UQuolbgveI9hVOJAyp4-n;AvCqvh`Uk0Fe>#y zOgmr!yJu}H!jzN(RbW!yl!+=MCWpCtz&KPR;SGTGn!zQ4Wvg%^atJTMKH0ZgVGLdj zUtCD=;YjsV1=p12+{*k*vj?u1KfL<=^7|LRTfDQQ-SarFi}Um4{NiG{xOkfLi_pu| z+=xSjfHF@H5%?L#C}RYo@7xE6!ULD!Q~?RzHY@bbs{;T4SMW-L*ykg&dk^mdFj`(d z2mXWnCUoj*Z&mQOtu*TUXK8Du(Y=W*ghvcb9Fj!c#*wWw1Di$ZC`sGO7S05|f)xXC zP~MWGzMm7`)e)o(wU7aJ{ZBGUIK3#y3xeJdX%n8wwT#)y}U5pP>*)%>+11U z`Z1hj(f7priHYzgh@o)mkD;p^MY)0pXOw@BwCXYZ8GNQ3KfdC}DYs`b$D7;K9bPjO z{rJL6#K0NxMf%>deo@!$#eb#Mn_h>mwKz?!dWI4(GgAnR2bw9tlTz-7u_8aX#}#5xL*=@`S1u6Q#V?!CTzwOn4k>Te;q?@yDp z!_)~Mv<~5y(+@vd{``~AmY-hyq@!^HwAXLqpshliXOvy_xIx|n{Np@BSMA!oCe!3N zx^fU)!R|ht9AnApjJ*)7k_+wQopO%0+vr1VaoeOL>cP(jc&1H-M+|pi%Du{Nf`Puv zndBO;Or7MY$h5Xc_TmJ*c9ZfFUp>BT6*(Qb3C(r(kj;ZlI~C|JN9b!9w>s8xBtK~9x6c`3^jdHEn7z-XoEb&7(kHx~5gFG5Zz$7%AvpEEu%ZCJWj0-VQ$SB#?N!r$fi{s2n}WZ@$4NTOR%*&wZwlV3rI=`~Idj9FMoY$5%wipn6hK5RP5fFKG%T z$DZAFIDprFAGx@k#y;$d7BbIe+)t{$8DbbnZ9! z{PxUx?zpzGK4V+!Z5cizd|vBWxA)7~oYzK#XsaxH<*rFWl9?ATUMxR8|L5hmzy0m< zyWjn8dH(zl%TZ&Pbou6CIXwGl`8R+0*UMl3)xTdp`sC9j49BJMjc&QL zV^p1QBzIPvH{D+QySJNm&_8?qynMTe9WV-qpGNob&{jE2dBLoD*dPAcmu;@22XLiF z#V|g`XG+f!^V~!~OzBq_Zr7j3Z~DCK)A+BG`mF@w9efGB#4{nScD?(25u2n_N<3ov zxem3Na!<~OmWRP~$g&%?0=l$3WgFQ`F^1E;x9fudu^VB8&^c4rZSpA`+Ppm#UJsa5zAG>x; z+OXlH^Q|T8)6k?HTwB=#^Y!JM(!n+K>Z?P6QPQrS zo5*)<8o5aMm3HN0+IwHVZR)VkqM(PRAAX|+Jx9~hHn8BoIy_%lV++$}^WOjY-~X|M ziv$GlZ6K8(l;OL3d)Xc_!QW|uO+6lwgj^3XLWnkyAVW_XLJ3;@^*v{ZM9|fz7Yx(w z1pFa&Yvc0vRf(n^$WUb8Etlw6%cQam9$IZ87ot!OJ{HvezYAq>K<9vgIC$f z&gfK`;xriD%1r9lsbS`Zd#7g?%aecTz_>fOCM#5KwjocXRI(>4{_r%VR zA`5%_(WfNHdg(do7`*G(*D-(=VVU;xbRI_Az!}=NBPIH^2DY909zL0lS^kje&`w87 zllEM{y}JyeaiFP*K|e{51Fp&iSU&kz%U^u@mrdG@_K~Ab#}0w$oi-T{vZh^O9-7nj zRW{e8{V@E7I~ke)MMp{Sh>WAljaB&o00iqvL_t&&<9Bv&(JAL-^(H)0XX%`+vb321 zQ+e2v?N_f}HK4#33yrn>)(*5>`53*gtR`^Eb!F^6w`iqPQyK*pI#UEM7Kmb4;jlhm zUgsI_vvHJ1M&~PgBiCft3xV)CD z{zMkR;f@*w2}TpFVIV1Zefgp=(+Si2baxyf7XOwf{h&-+I=PQ*#^Aza)mI)qty6|kbj#^s{e%+=cBKK1^ z^{u1YQ0sNN-uAb9?``35-rzk)Xu7^`>u*o^wLbs&?DiUau$Be0-;dAczD;@8=G^bO zUK-^ZSy<24I#xNu?`el5g=}fr^|emE%l);Cy|l~LXZWCO4H~!hSAxMl8Cn0o|NMWJ zAAkIDdHM2r19@^3qrGfm3-RvN?dv4m38)_qmQVidv*q9Z)xTT*^-unMIZo2%-D%|u zXMWRfwotpi7Q$!4RZ=CE0ZYG!9lJ^fz3yY-FR>ln12^4p^g0%tUh|EqCx~_w*FCbW zt@8x^UMu$wHv49|F{W<~Zch`Ju`gl(YZDobSEpH4uCZxiADtR>{$+f$>9yb&J84TW zEP!=%UGU5f^D&b9U4y+*K}lXaBLe5E_#m+(4G30Aj%TC{tPQAR-|+XfAUE;Z_@X2+ zjV>?Yq!g=*iCO6qq^_qNHWj~;s6(<$|6BzAi0#2QaMy6hLLUb(D~$d>j+iq{{nA3?KWvi zj8c0(uk%j%hvln^a-%I|HIOx!N3zGKZ zi_#4&D;*_)Obq&ZeF5G&cb$v1uEi2!!@zPI`djme9Tbc6ldr^hNqpIf`oGj$Thsfo zW6VonRBwc(x@rOIvn1|vhx79!@W*GBx!c{?j>LHE^J>dH$LCpxr<-_~xRB4rW~tK*1$+xJ0%vs4fK2WwB#DhtVXVq^SqZ+Ek^{6C-b(X&ibeDnYS002ov JPDHLkV1fn(1{VMT literal 0 HcmV?d00001 diff --git a/src/_static/img/instagram.svg b/src/_static/img/instagram.svg new file mode 100644 index 000000000..b7b97924b --- /dev/null +++ b/src/_static/img/instagram.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/microsoft-store-get.png b/src/_static/img/microsoft-store-get.png new file mode 100644 index 0000000000000000000000000000000000000000..34921faa58175d321c6bfa26698a05087c056427 GIT binary patch literal 20391 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 literal 0 HcmV?d00001 diff --git a/src/_static/img/microsoft-store-search.png b/src/_static/img/microsoft-store-search.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca927db3e8eba553a81d4ffb9d4cdcfe88c879a GIT binary patch literal 456351 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

    cCt5;e3E3$<+|D08_+fUtV7NvBU#oorZ@@CD3yp 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≫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

    @#Y&jPNs|^M4KMdEhiUI#<0AT{ZZ9?uMB#;?& zUveK$NWS{!ZZ-B>^AJi0jBKK(noyksmH0KJPA+{qnW;K>Oody;ZORZN%7f=hTo1EIF=uF}w4XKT+dKhbnn*oM!C{(f(R^;c?sH7%=kqA`gK*~UrC~$4q-jw#VDe+x8v6G25L{;a zxb%FP06BdI5lv0NqcT7`hc=t_boomsCqypWupb9ELV9p;D38WsO-zou1zB#RE7|q^ zm6<(lGM1^@3`zyW@tqc6UDu&NMGg z!B99{_XvZTsH<&af_5G~L0m!Sf*hVm+b*@^vrOxy_Kn}J$8djfE{fkn9pc=lg3+rZ zM6-VhjE;MLU-6X(Sy4s&K2D4CRA}DD>pbRo69ee`<)6rYT68-gq#b}_bk@$ynWYEq z@n3Q=;nDof(8oK-{MeE~roDu_zL-yWM1X?GyLUG~*XHeStttBZ1l|p!a0=dW$yOD@ z`aWG>G@caNim(_&JL5arD>s%TEv$7Mgc@AZHq@q8`%a^M4jG-1vkk=iv!iy54Rlg< zof}0rEYGJ$h4b)(y&GGQR$Tn`=)vc0k-u>zHr|!UXGfe5Gi%}mARaAWLtZor_<2|` z+3d0$M=uf3I5rHT9U$;Or>3hK&U=mDMMXt<$qRB_trXB-l!}5M#4b7d`_J)=v~_lh zD2c`xLvMv^1&BJ$3(M02yhiwVc)sMu@#}vVYe(mFK(H^U>~fPy>VL=viEP@mFZ~xg zz8M^i8#uhjxBG-O;}QTGu?nmAzo@y~%Dyh9c=m&TCuoLSUkVlsq2#bh$&(A+wm z54`b*A2i_m79eY~J~qLLkLYF_eDUgQrw(D#>}HJ3$#orzEnb?>tO10YQhJ;ajv!I$ zoA_Tysn@Y&kgiTh-8n`5NcW5#*I}qb{q5y#GV>!1Gx3?)89wT6x5hU?aax2G!5yul#}n$4H+3KygjrYYc}Rp$|HXUKI|Ja6o27Tk5qDZ_hoCnO-i}*5Z|$} z>9H?=O3?}DQ|69#JC>JZY8SJ+F{^_1s9j&Ou^H2i$CzkKy)v`w9)oNYWJ4EgL@r^j zy|Q?I)!XI^I^|E$jg;WCqIV9D&xh`U3mRtzP)iWflfH8NX0W<9h0>@g(N-h^jmB8uZ;q^ORZH|Wc(cT^;#3#ElP9ou2pq_`JUum2^jjAu2mfte4Z@Qy&^x|a9<7piI z8_@hz9BnwXfhiUb{q4*pk-hG9TK3g0?AZkS#?QAx-z}e`AKrJ2 ziK2ZWF!X2UA)5JMu1uEPingzdl$f2HkN>Ap9)H-dFX?LNi$^~E&s~Q^J`a>hIa|rB zNs4)Sd6g6P3`JkOXkP_lqRpY0@IC=@IhsouVEt&$Bbv*uV3^I_xkVPK%ZD`Rm&inb zn0H6QeY54~)U&--Vd-9 zY!UuxV|yFU%6GwE$kTP}s@EF+%E`7O zw7__Zm~s*VYfW|#J*pwXS>UR9nfoP^NDL8gZ)S-hwSMQfl3|y;rl2xDKEax;s#@*L zvF7vU!jL*?K(l*!ImG78{rmSw#F}g>l101-nKN~jwOEGZEu;016-mACSWB9u+UdxZ zS%t)3zB$WKK+A4fx4ky&-aqpv8I;^8SQltOvJ-xrY54g@ww9m{0KdyzsvTDen4kNo za`f?iE=62$ANTDm&|vfAQRHfA?Ly*OJ3Q)?&(_mXXQVjgH~gXXgZ)!b>bKd|{JuWk z?(OM_`ipVis4&B-XL>~Js{^H)=~-X(ssf_kOW_hhSJZ;igY`2hizEqiV5DzG#@9p? z%BcV4yQ*aX+P>&`G-bn^h4)P*nFwB3RERTOLE%AB=ZHQd?W--(?>kF|y3fWPyZeuA z3j(z&)bg4pQX)=#qf + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/npp.svg b/src/_static/img/npp.svg new file mode 100644 index 000000000..a0331d399 --- /dev/null +++ b/src/_static/img/npp.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/pycharm.svg b/src/_static/img/pycharm.svg new file mode 100644 index 000000000..86bb6d44c --- /dev/null +++ b/src/_static/img/pycharm.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/python.svg b/src/_static/img/python.svg new file mode 100644 index 000000000..25df8268f --- /dev/null +++ b/src/_static/img/python.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/quora.svg b/src/_static/img/quora.svg new file mode 100644 index 000000000..a4c327ddc --- /dev/null +++ b/src/_static/img/quora.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/_static/img/reddit.svg b/src/_static/img/reddit.svg new file mode 100644 index 000000000..64b767668 --- /dev/null +++ b/src/_static/img/reddit.svg @@ -0,0 +1,17 @@ + + + + + Reddit-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/spotify.svg b/src/_static/img/spotify.svg new file mode 100644 index 000000000..fb46e3ac8 --- /dev/null +++ b/src/_static/img/spotify.svg @@ -0,0 +1,17 @@ + + + + + Spotify-color + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/start-menu-python.png b/src/_static/img/start-menu-python.png new file mode 100644 index 0000000000000000000000000000000000000000..419ae72b448636669216d41db028686fa84fb15d GIT binary patch literal 73292 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 M<952(!S~_+0cY-dqyPW_ literal 0 HcmV?d00001 diff --git a/src/_static/img/terminal-python.png b/src/_static/img/terminal-python.png new file mode 100644 index 0000000000000000000000000000000000000000..1d86fe5a8b2a23dfcdc2c55d336d1a5aba0cb64b GIT binary patch literal 20583 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 A9{>OV literal 0 HcmV?d00001 diff --git a/src/_static/img/vim.svg b/src/_static/img/vim.svg new file mode 100644 index 000000000..4c4dbfcf2 --- /dev/null +++ b/src/_static/img/vim.svg @@ -0,0 +1,56 @@ + + + + + + + + + file_type_vim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/_static/img/vscode.svg b/src/_static/img/vscode.svg new file mode 100644 index 000000000..0efbaffc7 --- /dev/null +++ b/src/_static/img/vscode.svg @@ -0,0 +1,2 @@ + +file_type_vscode3 \ No newline at end of file diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt new file mode 100644 index 000000000..5a30e7b7e --- /dev/null +++ b/src/appx/code_edit.txt @@ -0,0 +1,8 @@ +############################################################################### + Code Editors +############################################################################### + +Writing Python using IDLE or the Python Shell is great for simple things, but +those tools quickly turn larger programming projects into frustrating pits of +despair. Using an IDE, or even just a good dedicated code editor, makes coding +fun — but which one is best for you? :cite:`realpython:code-edit` diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt new file mode 100644 index 000000000..704d464f0 --- /dev/null +++ b/src/appx/env_path.txt @@ -0,0 +1,3 @@ +############################################################################### + Issue - System Environment PATH +############################################################################### diff --git a/src/conf.py b/src/conf.py index f780e8970..4b3dad418 100644 --- a/src/conf.py +++ b/src/conf.py @@ -12,13 +12,15 @@ project = "Python Training Course" project_copyright = \ f"{datetime.now().year}, Python training course authors and contributors" -authors = "Vladyslav Ponomaryov \\and Serhii Horodilov" +authors = "Vladyslav Ponomaryov \\and " \ + "Serhii Horodilov" version = "2022.11.dev" # general configuration master_doc = root_doc = "index" extensions = [ "sphinx.ext.autodoc", + "sphinx.ext.imgconverter", "sphinxcontrib.bibtex", "sphinx_rtd_theme", @@ -51,3 +53,7 @@ latex_documents = [ (master_doc, latex_doc, project, authors, "manual", False), ] +latex_appendices = [ + "appx/code_edit", + "appx/env_path", +] diff --git a/src/index.txt b/src/index.txt index a6b7a1184..c3202897d 100644 --- a/src/index.txt +++ b/src/index.txt @@ -16,6 +16,15 @@ linux/index deploy/index +.. only:: builder_html + + .. toctree:: + :name: appx + :caption: Additional materials + + appx/code_edit + appx/env_path + .. rubric:: References .. bibliography:: diff --git a/src/intro/index.txt b/src/intro/index.txt index aca6a9589..d27f152ed 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -1,3 +1,176 @@ -******************************************************************************* + + There are a whole bunch of common programming tasks that are easy in + Python. For someone who is not yet a programmer, who wants to become + a programmer, for those people Python is particularly easy to get. + In Python, every symbol you type is essential. + + |guido| Guido van Rossum + +############################################################################### Introduction to Python -******************************************************************************* +############################################################################### + +|python| **Python** is a high-level, interpreted scripting language. +It was created in the early 1990s by Guido van Rossum at Stichting Mathematisch +Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of +a language called ABC. Guido remains Python’s principal author, although it +includes many contributions from others. + +Python 2.0 was released in 2000, and the 2.x versions were the prevalent +releases until December 2008. At that time, the development team made +the decision to release version 3.0, which contained a few relatively small but +significant changes that were not backward compatible with the 2.x versions. +Python 2 and 3 are very similar, and some features of Python 3 have been +backported to Python 2. But in general, they remain not quite compatible. + +Both Python 2 and 3 have continued to be maintained and developed, with +periodic release updates for both. However, an official End Of Life date of +January 1, 2020 has been established for Python 2, after which time it will no +longer be maintained. + +Python is still maintained by a core development team at the Institute, and +Guido is still in charge, having been given the title of BDFL (Benevolent +Dictator For Life) by the Python community. The name Python, by the way, +derives not from the snake, but from the British comedy troupe Monty Python’s +Flying Circus, of which Guido was, and presumably still is, a fan. It is common +to find references to Monty Python sketches and movies scattered throughout +the Python documentation. + +Here are some significant facts about Python. + +.. seealso:: + The original article in English by :cite:author:`realpython:py3-intro` + +.. rubric:: Python is popular + +Python has been growing in popularity over the last few years. +The 2018 Stack Overflow Developer Survey ranked Python as the 7th most popular +and the number one most wanted technology of the year. +By the end of Q-4 in 2022 Python is the **top** language on all GitHut metrics +:cite:label:`github:stats`. + +Here are some logos of unknown companies across the globe who uses Python: + +.. centered:: + |google| |facebook| |instagram| |spotify| |quora| |netflix| |dropbox| + |reddit| + +.. rubric:: Python is interpreted + +Many languages are compiled, meaning the source code you create needs to be +translated into machine code, the language of your computer’s processor, before +it can be run. Programs written in an interpreted language are passed straight +to an interpreter that runs them directly. + +This makes for a quicker development cycle because you just type in your code +and run it, without the intermediate compilation step. + +.. rubric:: Python is free + +The Python interpreter is developed under an OSI-approved open-source license, +making it free to install, use, and distribute, even for commercial purposes. + +.. rubric:: Python is portable + +Because Python code is interpreted and not compiled into native machine +instructions, code written for one platform will work on any other platform +that has the Python interpreter installed. +This is true of any interpreted language, not just Python. + +.. rubric:: Python is simple + +As programming languages go, Python is relatively uncluttered, +and the developers have deliberately kept it that way. A rough estimate of +the complexity of a language can be gleaned from the number of keywords or +reserved words in the language. These are words that are reserved for special +meaning by the compiler or interpreter because they designate specific built-in +functionality of the language. +There are only 35 :cite:`docs-python:keywords` in Python and they are: + ++--------+----------+---------+----------+--------+ +| False | await | else | import | pass | ++--------+----------+---------+----------+--------+ +| None | break | except | in | raise | ++--------+----------+---------+----------+--------+ +| True | class | finally | is | return | ++--------+----------+---------+----------+--------+ +| and | continue | for | lambda | try | ++--------+----------+---------+----------+--------+ +| as | def | from | nonlocal | while | ++--------+----------+---------+----------+--------+ +| assert | del | global | not | with | ++--------+----------+---------+----------+--------+ +| async | elif | if | or | yield | ++--------+----------+---------+----------+--------+ + +.. rubric:: Python is general purpose + +Python is everywhere. Talking more specific common scopes for Python developers +are :cite:`python-usage`: + +- Web Scraping Applications +- Data Science Solutions +- Machine Learning Applications +- Web Development +- Game Development +- Scientific and Numeric Applications +- Image Design and Graphic Design Applications +- Finance Fintech Platform +- Language Development +- Operating Systems + + +.. toctree:: + :caption: Contents + :name: intro + + install + interact + +.. static files within this document + +.. |python| image:: ../_static/img/python.svg + :width: 24 + +.. |google| image:: ../_static/img/google.svg + :width: 64 + :alt: Google + :target: https://about.google/ + +.. |facebook| image:: ../_static/img/facebook.svg + :width: 64 + :alt: Facebook + :target: https://www.facebook.com/ + +.. |instagram| image:: ../_static/img/instagram.svg + :width: 64 + :alt: Instagram + :target: https://about.instagram.com/ + +.. |spotify| image:: ../_static/img/spotify.svg + :width: 64 + :alt: Spotify + :target: https://support.spotify.com/us/article/what-is-spotify/ + +.. |quora| image:: ../_static/img/quora.svg + :width: 64 + :alt: Quora + :target: https://www.quora.com/about + +.. |netflix| image:: ../_static/img/netflix.svg + :width: 64 + :alt: Netflix + :target: https://about.netflix.com + +.. |dropbox| image:: ../_static/img/dropbox.svg + :width: 64 + :alt: Dropbox + :target: https://www.dropbox.com/about + +.. |reddit| image:: ../_static/img/reddit.svg + :width: 64 + :alt: Reddit + :target: https://www.redditinc.com/ + +.. |guido| image:: ../_static/img/guido-headshot-2019.jpg + :width: 100 diff --git a/src/intro/install.txt b/src/intro/install.txt new file mode 100644 index 000000000..eba2332b0 --- /dev/null +++ b/src/intro/install.txt @@ -0,0 +1,133 @@ +******************************************************************************* + Install Python +******************************************************************************* + +The `Python wiki `_ +briefly describes the installation process. + +.. note:: To become a **true** professional, you need a special software called + :abbr:`IDE (Integrated Development Environment)` or at least a code + editor supporting syntax highlight. Refer :doc:`/appx/code_edit` for + more information. + +Linux +===== + +On most Linux distros Python comes pre-installed and/or all distro have it +available in their package repository (I haven't seen the one which does have). +The installation process depends on the distro, but here are some examples how +you can install it: + +.. code-block:: + :caption: Install Python + + # Debian / Ubuntu (and other distros that uses ``apt``) + apt install python3 python3-dev + + # ArchLinux + pacman -S python3 + + # RedHat, CentOS, Fedora + dnf install python3 python3-devel + + # Gentoo + # ... you should know what to do + +MacOS +===== + +For newer versions of MacOS Python is no longer included by default and you +will have to download and install it. + +The process is described at: `Using Python on a Mac`_. + +Briefly, you are invited to visit `downloads`_ and download the latest +stable version of Python. A "universal binary" build of Python runs natively on +Mac's new Intel and legacy PPC CPUs. + +After the installation you would get: + +- `Python 3.x` folder in `Applications` folder. + Standard development environment (`IDLE`) and `PythonLauncher` included. +- A framework `/Library/Frameworks/Python.framework` included libraries and + executables. + +Install from Homebrew +--------------------- + +Python for MacOS is available via Homebrew. You are to search `formulae`_ for +the latest available version. In general, it's as easy as: + +.. code-block:: shell + + brew install python@3.9 + +Windows +======= + +As for MacOS, here is the official documentation: `Using Python on Windows`_. + +For Windows' users the stable release is available from `downloads`_. Just +download the installer and proceed to common steps to install software. + +.. important:: It's recommended to **Add Python3.x to PATH**, this will avoid + problems at the beginning of your journey with Python + +.. image:: https://docs.python.org/3/_images/win_installer.png + :width: 600 + +Going on with **Install Now**: + +- Python will be installed to your user directory +- Python Launcher will be installed according to the option at the bottom + of the page + +Using **Customize installation** will perform an *all-users* installation. + +Removing the MAX_PATH Limitation +-------------------------------- + +Windows historically has limited path lengths to 260 characters. This meant +that paths longer than this would not resolve and errors would result. In the +latest versions of Windows, this limitation can be expanded to approximately +32,000 characters. This allows the open() function, the os module and most +other path functionality to accept and return paths longer than 260 characters. + +You will need PC administrator assistance to perform this action. + +Install from the Microsoft Store +-------------------------------- + +You can install from the Microsoft Store in two steps: + +#. Open the Microsoft Store app and search for ``Python`` + The result should look like: + + .. figure:: ../_static/img/microsoft-store-search.png + :align: center + + Microsoft Store - search results for "Python" + + Select ``Python 3.9`` or the higher available version. + +#. Click **GET** and wait until the installer is downloaded. The installation + process should run automatically. Follow the installer's instructions. + + .. figure:: ../_static/img/microsoft-store-get.png + :scale: 50% + :align: center + +Online Interpreters +=================== + +Installing or updating Python on your computer is the first step to becoming +a Python programmer :cite:`realpython:install-and-setup`. + +But if you cannot install Python at the moment for some reason, are can go +with online interpreters. `repl.it `_ provides the ability +to create and store Python scripts (they are called *repl* here) for free. + +.. _formulae: https://formulae.brew.sh/formula/ +.. _Using Python on Windows: https://docs.python.org/3/using/windows.html +.. _Using Python on a Mac: https://docs.python.org/3/using/mac.html +.. _downloads: https://www.python.org/downloads/ diff --git a/src/intro/interact.txt b/src/intro/interact.txt new file mode 100644 index 000000000..19655ecaf --- /dev/null +++ b/src/intro/interact.txt @@ -0,0 +1,151 @@ +******************************************************************************* + Interacting with Python Interpreter +******************************************************************************* + + It’s time to write some Python code! + + :cite:t:`realpython:interact` + +In short there are three major ways to do something with Python: + +- interactive Python console +- running code from file [#]_ +- use online editors (like `repl.it `_) + +Using Python interpreter interactively +====================================== + +Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight +forward way to start talking to Python. This simply means starting up the +interpreter and typing commands to it directly :cite:`realpython:interact`. +The interpreter: + +- Reads the command you enter +- Evaluates and executes it +- Prints the output (if any) back to the console +- Loops back and repeats + +Starting the interpreter +------------------------ + +In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the +installer placed a shortcut on the desktop to launch the Python. + +For example in Windows the interpreter can be found in the **Start** menu +labeled **Python 3.x**: + +.. figure:: ../_static/img/start-menu-python.png + :align: center + + Windows start menu Python group + +.. hint:: In case you are getting error saying python is not installed, but you + are sure that the interpreter **is installed** - this means you have + no Python in your ``PATH``. Message may look like: + ``'python' is not recognized as an internal or external command`` / + ``python: command not found`` + + Refer :doc:`/appx/env_path` for problem solution. + +The alternative is to launch from a terminal window: + +- **Command Prompt** in Windows +- **Terminal** both in macOS and Linux + +.. figure:: ../_static/img/cmd-python.png + :align: center + + Start Python via Command Prompt + +.. figure:: ../_static/img/terminal-python.png + :align: center + + Start Python via Terminal + +Running code +------------ + +Put the Python code in interactive console and press enter to execute it. + +#. Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after + it +#. Type the command ``print("Hello, World!")`` +#. Press enter + +.. code-block:: python + + print("Hello, World!") + +Your session should look like: + +:: + + print("Hello, World!") + "Hello, World!" + +If you've seen string "Hello, World!" printed back, congrats - you've run your +first program in Python. + +.. image:: ../_static/img/celebrate.svg + :width: 200 + :align: center + +Exiting the interpreter +----------------------- + +To exit the interactive console type "exit" and hit enter. + +.. code-block:: python + + exit() + +Running code from file +====================== + +A Python script is a reusable set of code. It is essentially a Python program - +a sequence of Python instructions - contained in a file. You can run the +program by specifying the name of the script file to the interpreter. + +Python scripts are just plain text, so you can edit them with any text editor. +If you have a favorite programmer’s editor that operates on text files, it +should be fine to use. Otherwise here are some options for the first time: + +- Windows: |npp| `Notepad++ `_ +- Linux: |geany| `Geany `_ + +Using whatever editor create a script file called ``hello.py`` and put the code +in it: + +.. code-block:: python + + print("Hello, World!") + +Save file keeping track on the directory you choose to save into. Now, open +the terminal or command prompt in this directory. + +.. hint:: In window you may open Command Prompt in the directory by typing + "cmd" to the address bar in explorer. + +In the terminal (or command prompt) type: + +.. code-block:: + + python hello.py + +Python will print string "Hello, World!". Your session should look like: + +:: + + python hello.py + Hello, World! + +.. footnotes + +.. [#] Files containing Python code are called *modules*. + +.. static files within document + +.. |npp| image:: ../_static/img/npp.svg + :width: 24 +.. |geany| image:: ../_static/img/geany.svg + :width: 24 diff --git a/src/refs.bib b/src/refs.bib index e69de29bb..fd8f08bde 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -0,0 +1,49 @@ +******************************************************************************* +Python training course bibliography database +******************************************************************************* + +@misc{realpython:py3-intro, + title = "Intoduction to Python 3", + author = "John Sturtz", + url = {https://realpython.com/python-introduction/}, + urldate = {2018.5.21}, +} + +@misc{github:stats, + title = "{GitHut 2.0}", + author = "Fabian Beuke", + url = {https://madnight.github.io/githut/#/2022/4}, +} + +@misc{docs-python:keywords, + title = "{Python Documentation}", + url = {https://docs.python.org/3.10/reference/lexical_analysis.html#keywords}, +} + +@misc{python-usage, + title = "Top 10 Python Uses for 2022", + author = "Yancy Dennis", + url = {https://python.plainenglish.io/top-10-python-uses-for-2022-a10cbfb5f041}, + urldate = {2022.1.24}, +} + +@misc{realpython:install-and-setup, + title = "Python 3 Installation & Setup Guide", + author = "{Real Python}", + url = {https://realpython.com/installing-python/}, + urldate = {2020.8.31}, +} + +@misc{realpython:interact, + title = "Interacting with Python", + author = "John Sturtz", + url = {https://realpython.com/interacting-with-python/}, + urldate = {2018.5.28}, +} + +@misc{realpython:code-edit, + title = "Python IDEs and Code Editors (Guide)", + author = "Jon Fincher", + url = {https://realpython.com/python-ides-code-editors-guide/}, + urldata = {2018.3.13}, +} \ No newline at end of file From 1dfd40d1aaa2ed64edb016002edf7bc52a59be6c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 29 Jan 2023 06:05:49 +0200 Subject: [PATCH 242/689] Moved images to "assets" --- {src/_static => assets}/img/celebrate.svg | 0 {src/_static => assets}/img/cmd-python.png | Bin {src/_static => assets}/img/dropbox.svg | 0 {src/_static => assets}/img/emacs.svg | 0 {src/_static => assets}/img/facebook.svg | 0 {src/_static => assets}/img/geany.svg | 0 {src/_static => assets}/img/google.svg | 0 .../img/guido-headshot-2019.jpg | Bin {src/_static => assets}/img/instagram.svg | 0 .../img/microsoft-store-get.png | Bin .../img/microsoft-store-search.png | Bin {src/_static => assets}/img/netflix.svg | 0 {src/_static => assets}/img/npp.svg | 0 {src/_static => assets}/img/pycharm.svg | 0 {src/_static => assets}/img/python.svg | 0 {src/_static => assets}/img/quora.svg | 0 {src/_static => assets}/img/reddit.svg | 0 {src/_static => assets}/img/spotify.svg | 0 .../img/start-menu-python.png | Bin .../img/terminal-python.png | Bin {src/_static => assets}/img/vim.svg | 0 {src/_static => assets}/img/vscode.svg | 0 src/_static/img/guido-headshot-2019.png | Bin 1180935 -> 0 bytes src/intro/index.txt | 25 ++++++++---------- src/intro/install.txt | 9 ++++--- src/intro/interact.txt | 12 ++++----- 26 files changed, 23 insertions(+), 23 deletions(-) rename {src/_static => assets}/img/celebrate.svg (100%) rename {src/_static => assets}/img/cmd-python.png (100%) rename {src/_static => assets}/img/dropbox.svg (100%) rename {src/_static => assets}/img/emacs.svg (100%) rename {src/_static => assets}/img/facebook.svg (100%) rename {src/_static => assets}/img/geany.svg (100%) rename {src/_static => assets}/img/google.svg (100%) rename {src/_static => assets}/img/guido-headshot-2019.jpg (100%) rename {src/_static => assets}/img/instagram.svg (100%) rename {src/_static => assets}/img/microsoft-store-get.png (100%) rename {src/_static => assets}/img/microsoft-store-search.png (100%) rename {src/_static => assets}/img/netflix.svg (100%) rename {src/_static => assets}/img/npp.svg (100%) rename {src/_static => assets}/img/pycharm.svg (100%) rename {src/_static => assets}/img/python.svg (100%) rename {src/_static => assets}/img/quora.svg (100%) rename {src/_static => assets}/img/reddit.svg (100%) rename {src/_static => assets}/img/spotify.svg (100%) rename {src/_static => assets}/img/start-menu-python.png (100%) rename {src/_static => assets}/img/terminal-python.png (100%) rename {src/_static => assets}/img/vim.svg (100%) rename {src/_static => assets}/img/vscode.svg (100%) delete mode 100644 src/_static/img/guido-headshot-2019.png diff --git a/src/_static/img/celebrate.svg b/assets/img/celebrate.svg similarity index 100% rename from src/_static/img/celebrate.svg rename to assets/img/celebrate.svg diff --git a/src/_static/img/cmd-python.png b/assets/img/cmd-python.png similarity index 100% rename from src/_static/img/cmd-python.png rename to assets/img/cmd-python.png diff --git a/src/_static/img/dropbox.svg b/assets/img/dropbox.svg similarity index 100% rename from src/_static/img/dropbox.svg rename to assets/img/dropbox.svg diff --git a/src/_static/img/emacs.svg b/assets/img/emacs.svg similarity index 100% rename from src/_static/img/emacs.svg rename to assets/img/emacs.svg diff --git a/src/_static/img/facebook.svg b/assets/img/facebook.svg similarity index 100% rename from src/_static/img/facebook.svg rename to assets/img/facebook.svg diff --git a/src/_static/img/geany.svg b/assets/img/geany.svg similarity index 100% rename from src/_static/img/geany.svg rename to assets/img/geany.svg diff --git a/src/_static/img/google.svg b/assets/img/google.svg similarity index 100% rename from src/_static/img/google.svg rename to assets/img/google.svg diff --git a/src/_static/img/guido-headshot-2019.jpg b/assets/img/guido-headshot-2019.jpg similarity index 100% rename from src/_static/img/guido-headshot-2019.jpg rename to assets/img/guido-headshot-2019.jpg diff --git a/src/_static/img/instagram.svg b/assets/img/instagram.svg similarity index 100% rename from src/_static/img/instagram.svg rename to assets/img/instagram.svg diff --git a/src/_static/img/microsoft-store-get.png b/assets/img/microsoft-store-get.png similarity index 100% rename from src/_static/img/microsoft-store-get.png rename to assets/img/microsoft-store-get.png diff --git a/src/_static/img/microsoft-store-search.png b/assets/img/microsoft-store-search.png similarity index 100% rename from src/_static/img/microsoft-store-search.png rename to assets/img/microsoft-store-search.png diff --git a/src/_static/img/netflix.svg b/assets/img/netflix.svg similarity index 100% rename from src/_static/img/netflix.svg rename to assets/img/netflix.svg diff --git a/src/_static/img/npp.svg b/assets/img/npp.svg similarity index 100% rename from src/_static/img/npp.svg rename to assets/img/npp.svg diff --git a/src/_static/img/pycharm.svg b/assets/img/pycharm.svg similarity index 100% rename from src/_static/img/pycharm.svg rename to assets/img/pycharm.svg diff --git a/src/_static/img/python.svg b/assets/img/python.svg similarity index 100% rename from src/_static/img/python.svg rename to assets/img/python.svg diff --git a/src/_static/img/quora.svg b/assets/img/quora.svg similarity index 100% rename from src/_static/img/quora.svg rename to assets/img/quora.svg diff --git a/src/_static/img/reddit.svg b/assets/img/reddit.svg similarity index 100% rename from src/_static/img/reddit.svg rename to assets/img/reddit.svg diff --git a/src/_static/img/spotify.svg b/assets/img/spotify.svg similarity index 100% rename from src/_static/img/spotify.svg rename to assets/img/spotify.svg diff --git a/src/_static/img/start-menu-python.png b/assets/img/start-menu-python.png similarity index 100% rename from src/_static/img/start-menu-python.png rename to assets/img/start-menu-python.png diff --git a/src/_static/img/terminal-python.png b/assets/img/terminal-python.png similarity index 100% rename from src/_static/img/terminal-python.png rename to assets/img/terminal-python.png diff --git a/src/_static/img/vim.svg b/assets/img/vim.svg similarity index 100% rename from src/_static/img/vim.svg rename to assets/img/vim.svg diff --git a/src/_static/img/vscode.svg b/assets/img/vscode.svg similarity index 100% rename from src/_static/img/vscode.svg rename to assets/img/vscode.svg diff --git a/src/_static/img/guido-headshot-2019.png b/src/_static/img/guido-headshot-2019.png deleted file mode 100644 index 13c3ac23775967cb0900f04dfd336849ee920f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180935 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≠pU)S?KVii{kz(25U%&$*MXn+-n;jD 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 x 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

    Sh@JtRA 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%0Duf18b~vFL+@^NH5!}+(AxX0vru|z?9wRD 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

    $woZUfn!#x<2qo-L@^W^!ErKz76v5oZsnG) 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 z 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 JPDHLkV1fn(1{VMT diff --git a/src/intro/index.txt b/src/intro/index.txt index d27f152ed..322bee8fb 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -38,16 +38,13 @@ the Python documentation. Here are some significant facts about Python. -.. seealso:: - The original article in English by :cite:author:`realpython:py3-intro` - .. rubric:: Python is popular Python has been growing in popularity over the last few years. The 2018 Stack Overflow Developer Survey ranked Python as the 7th most popular and the number one most wanted technology of the year. By the end of Q-4 in 2022 Python is the **top** language on all GitHut metrics -:cite:label:`github:stats`. +:cite:`github:stats`. Here are some logos of unknown companies across the globe who uses Python: @@ -129,48 +126,48 @@ are :cite:`python-usage`: .. static files within this document -.. |python| image:: ../_static/img/python.svg +.. |python| image:: /../assets/img/python.svg :width: 24 -.. |google| image:: ../_static/img/google.svg +.. |google| image:: /../assets/img/google.svg :width: 64 :alt: Google :target: https://about.google/ -.. |facebook| image:: ../_static/img/facebook.svg +.. |facebook| image:: /../assets/img/facebook.svg :width: 64 :alt: Facebook :target: https://www.facebook.com/ -.. |instagram| image:: ../_static/img/instagram.svg +.. |instagram| image:: /../assets/img/instagram.svg :width: 64 :alt: Instagram :target: https://about.instagram.com/ -.. |spotify| image:: ../_static/img/spotify.svg +.. |spotify| image:: /../assets/img/spotify.svg :width: 64 :alt: Spotify :target: https://support.spotify.com/us/article/what-is-spotify/ -.. |quora| image:: ../_static/img/quora.svg +.. |quora| image:: /../assets/img/quora.svg :width: 64 :alt: Quora :target: https://www.quora.com/about -.. |netflix| image:: ../_static/img/netflix.svg +.. |netflix| image:: /../assets/img/netflix.svg :width: 64 :alt: Netflix :target: https://about.netflix.com -.. |dropbox| image:: ../_static/img/dropbox.svg +.. |dropbox| image:: /../assets/img/dropbox.svg :width: 64 :alt: Dropbox :target: https://www.dropbox.com/about -.. |reddit| image:: ../_static/img/reddit.svg +.. |reddit| image:: /../assets/img/reddit.svg :width: 64 :alt: Reddit :target: https://www.redditinc.com/ -.. |guido| image:: ../_static/img/guido-headshot-2019.jpg +.. |guido| image:: /../assets/img/guido-headshot-2019.jpg :width: 100 diff --git a/src/intro/install.txt b/src/intro/install.txt index eba2332b0..359ba78ef 100644 --- a/src/intro/install.txt +++ b/src/intro/install.txt @@ -73,8 +73,11 @@ download the installer and proceed to common steps to install software. .. important:: It's recommended to **Add Python3.x to PATH**, this will avoid problems at the beginning of your journey with Python -.. image:: https://docs.python.org/3/_images/win_installer.png +.. figure:: https://docs.python.org/3/_images/win_installer.png :width: 600 + :align: center + + Python installer first page Going on with **Install Now**: @@ -103,7 +106,7 @@ You can install from the Microsoft Store in two steps: #. Open the Microsoft Store app and search for ``Python`` The result should look like: - .. figure:: ../_static/img/microsoft-store-search.png + .. figure:: /../assets/img/microsoft-store-search.png :align: center Microsoft Store - search results for "Python" @@ -113,7 +116,7 @@ You can install from the Microsoft Store in two steps: #. Click **GET** and wait until the installer is downloaded. The installation process should run automatically. Follow the installer's instructions. - .. figure:: ../_static/img/microsoft-store-get.png + .. figure:: /../assets/img/microsoft-store-get.png :scale: 50% :align: center diff --git a/src/intro/interact.txt b/src/intro/interact.txt index 19655ecaf..9b78646f2 100644 --- a/src/intro/interact.txt +++ b/src/intro/interact.txt @@ -34,7 +34,7 @@ installer placed a shortcut on the desktop to launch the Python. For example in Windows the interpreter can be found in the **Start** menu labeled **Python 3.x**: -.. figure:: ../_static/img/start-menu-python.png +.. figure:: /../assets/img/start-menu-python.png :align: center Windows start menu Python group @@ -52,12 +52,12 @@ The alternative is to launch from a terminal window: - **Command Prompt** in Windows - **Terminal** both in macOS and Linux -.. figure:: ../_static/img/cmd-python.png +.. figure:: /../assets/img/cmd-python.png :align: center Start Python via Command Prompt -.. figure:: ../_static/img/terminal-python.png +.. figure:: /../assets/img/terminal-python.png :align: center Start Python via Terminal @@ -86,7 +86,7 @@ Your session should look like: If you've seen string "Hello, World!" printed back, congrats - you've run your first program in Python. -.. image:: ../_static/img/celebrate.svg +.. image:: /../assets/img/celebrate.svg :width: 200 :align: center @@ -145,7 +145,7 @@ Python will print string "Hello, World!". Your session should look like: .. static files within document -.. |npp| image:: ../_static/img/npp.svg +.. |npp| image:: /../assets/img/npp.svg :width: 24 -.. |geany| image:: ../_static/img/geany.svg +.. |geany| image:: /../assets/img/geany.svg :width: 24 From 98ae2e2bfe0b575a28b82863de9724dfa2918017 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 29 Jan 2023 16:25:09 +0200 Subject: [PATCH 243/689] Added 'make all' instruction (target) Updated Makefile with a target to build all the documentations. This action performs '_build' directory clean up and generates HTML and PDF outputs in 'en' and 'ua' languages. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 050679cb3..0234fb152 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,8 @@ SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) # Makefile targets all : clean + @make LANGUAGE=en html pdf + @make LANGUAGE=ua html pdf clean : @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" From 93624eb75f59e6ea7c0039f01c2ddfb3459bda2a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 4 Feb 2023 03:36:28 +0200 Subject: [PATCH 244/689] Added appx.: userful software list --- src/appx/software_list.md | 96 +++++++++++++++++++++++++++++++++++++++ src/conf.py | 3 ++ src/index.txt | 1 + 3 files changed, 100 insertions(+) create mode 100644 src/appx/software_list.md diff --git a/src/appx/software_list.md b/src/appx/software_list.md new file mode 100644 index 000000000..fe72f2848 --- /dev/null +++ b/src/appx/software_list.md @@ -0,0 +1,96 @@ +Software List +============= + +7zip +---- + +**7-Zip** is **free software** with **open source**. + +- High compression ratio in [7z format](https://7-zip.org/7z.html) with + **LZMA** and **LZMA2** compression +- Supported formats: + - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM + - Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, + GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, + SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z. +- Self-extracting capability for 7z format +- Integration with Windows Shell + +https://7-zip.org/ + +cygwin +------ + +It is a large collection of GNU and Open Source tools which provide +functionality similar to a +[Linux distribution](https://en.wikipedia.org/wiki/Linux_distribution) on +Windows and a DLL (cygwin1.dll) which provides substantial POSIX API +functionality. + +**Cygwin is not**: + +- a way to run native Linux apps on Windows. You must rebuild your application + *from source* if you want it to run on Windows. +- a way to magically make native Windows apps aware of UNIX® functionality like + `signals`, `ptys` etc. Again, you need to build your apps *from source* if + you want to take advantage of Cygwin functionality. + +https://www.cygwin.com/ + +git[^cygwin-pkg] +--- + +Git is a [free and open source](https://git-scm.com/about/free-and-open-source) +distributed version control system designed to handle everything from small to +very large projects with speed and efficiency. + +https://git-scm.com/ + +PostgreSQL[^cygwin-pkg] +---------- + +PostgreSQL is a powerful, open source object-relational database system with +over 35 years of active development that has earned it a strong reputation for +reliability, feature robustness, and performance. + +https://www.postgresql.org/ + +psql[^cygwin-pkg] +---- + +A terminal-based front-end to PostgreSQL. It enables you to type in queries +interactively, issue them to PostgreSQL, and see the query results. +Alternatively, input can be from a file or from command line arguments. +In addition, psql provides a number of meta-commands and various shell-like +features to facilitate writing scripts and automating a wide variety of tasks. + +On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux +look for `postgresql-client` package. + +https://www.postgresql.org/docs/current/app-psql.html + +pgAdmin +------- + +pgAdmin is the most popular and feature rich Open Source administration and +development platform for PostgreSQL, the most advanced Open Source database +in the world. + +It is a PostgreSQL client (like a `psql`), but with web based GUI. + +https://pgadmin.org/ + +SQLite[^cygwin-pkg] +------ + +SQLite is a C-language library that implements a +[small](https://sqlite.org/footprint.html), +[fast](https://sqlite.org/fasterthanfs.html), +[self-contained](https://sqlite.org/selfcontained.html), +[high-reliability](https://sqlite.org/hirely.html), +[full-featured](https://sqlite.org/fullsql.html), SQL database engine. + +https://sqlite.org/ + +[^cygwin-pkg]: available for installation as a cygwin package + diff --git a/src/conf.py b/src/conf.py index 4b3dad418..844f50c9d 100644 --- a/src/conf.py +++ b/src/conf.py @@ -52,8 +52,11 @@ latex_engine = "xelatex" latex_documents = [ (master_doc, latex_doc, project, authors, "manual", False), + ("appx/software_list", "Software.tex", project, authors, "howto", False), + ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ] latex_appendices = [ + "appx/software_list", "appx/code_edit", "appx/env_path", ] diff --git a/src/index.txt b/src/index.txt index c3202897d..a0fbf68e3 100644 --- a/src/index.txt +++ b/src/index.txt @@ -22,6 +22,7 @@ :name: appx :caption: Additional materials + appx/software_list appx/code_edit appx/env_path From 25a902d3a2071da4a275e00701735f5ff3877775 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 18 Feb 2023 14:48:39 +0200 Subject: [PATCH 245/689] Added docker to software list appx --- src/appx/software_list.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/appx/software_list.md b/src/appx/software_list.md index fe72f2848..9d5d6f34a 100644 --- a/src/appx/software_list.md +++ b/src/appx/software_list.md @@ -46,6 +46,19 @@ very large projects with speed and efficiency. https://git-scm.com/ +Docker +------ + +> The most-loved Tool in Stack Overflow’s 2022 Developer Survey. + +Docker helps developers bring their ideas to life by conquering the complexity +of app development. We simplify and accelerate development workflows with +an integrated dev pipeline and through the consolidation of application +components. Actively used by millions of developers around the world, +Docker Desktop and Docker Hub provide unmatched simplicity, agility and choice. + +https://www.docker.com/ + PostgreSQL[^cygwin-pkg] ---------- @@ -92,5 +105,6 @@ SQLite is a C-language library that implements a https://sqlite.org/ + [^cygwin-pkg]: available for installation as a cygwin package From 06174c4670f2bf36b3c8d67562704bc176fe70c6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 00:17:47 +0200 Subject: [PATCH 246/689] Minor change - updated appxs headings --- src/appx/code_edit.txt | 8 +++++--- src/appx/env_path.txt | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt index 5a30e7b7e..f3308f071 100644 --- a/src/appx/code_edit.txt +++ b/src/appx/code_edit.txt @@ -1,6 +1,8 @@ -############################################################################### - Code Editors -############################################################################### +.. appendix + +############ +Code Editors +############ Writing Python using IDLE or the Python Shell is great for simple things, but those tools quickly turn larger programming projects into frustrating pits of diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 704d464f0..6786d036e 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -1,3 +1,5 @@ -############################################################################### - Issue - System Environment PATH -############################################################################### +.. appendix + +############################### +Issue - System Environment PATH +############################### From 1a6268ea99adcc2a050ff275be5adfdf78861def Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 00:53:51 +0200 Subject: [PATCH 247/689] Added operator precedence appendix Added operator precedence table with description and footnotes. Updated references file. --- src/appx/precedence.txt | 68 +++++++++++++++++++++++++++++++++++++++++ src/refs.bib | 7 ++++- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/appx/precedence.txt diff --git a/src/appx/precedence.txt b/src/appx/precedence.txt new file mode 100644 index 000000000..d88a0a8ee --- /dev/null +++ b/src/appx/precedence.txt @@ -0,0 +1,68 @@ +.. appendix + +.. todo: + https://docs.python.org/3/reference/expressions.html#operator-precedence + +################### +Operator Precedence +################### + +The following table summarizes the operator precedence in Python, from highest +precedence (most binding) to lowest precedence (least binding) +:cite:`docs-python:operator-precedence`. Operators in the same cell have the +same precedence (use left-to-right precedence). + ++------------------------+----------------------------------------------------+ +| Operator | Description | ++========================+====================================================+ +| ``(expressions...)``, | Binding or parenthesized expression, list display, | +| ``[expressions...]``, | dictionary display, set display | +| ``{key: value...}``, | | +| ``{expressions...}`` | | ++------------------------+----------------------------------------------------+ +| ``x[index]``, | Subscription, slicing, call, attribute reference | +| ``x[index:index]``, | | +| ``x(arguments...)``, | | +| ``x.attribute`` | | ++------------------------+----------------------------------------------------+ +| ``await x`` | Await expression | ++------------------------+----------------------------------------------------+ +| ``**`` | Exponentiation[#]_ | ++------------------------+----------------------------------------------------+ +| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | ++------------------------+----------------------------------------------------+ +| ``*``, ``@``, ``/``, | Multiplication, matrix multiplication, division, | +| ``//``, ``%`` | floor division, remainder[#]_ | ++------------------------+----------------------------------------------------+ +| ``+``, ``-`` | Addition and subtraction | ++------------------------+----------------------------------------------------+ +| ``<<``, ``>>`` | Shifts | ++------------------------+----------------------------------------------------+ +| ``&`` | Bitwise AND | ++------------------------+----------------------------------------------------+ +| ``^`` | Bitwise XOR | ++------------------------+----------------------------------------------------+ +| ``|`` | Bitwise OR | ++------------------------+----------------------------------------------------+ +| ``in``, ``not in``, | Comparisons, including membership tests and | +| ``is``, ``is not``, | identity tests | +| ``<``, ``<=``, ``>``, | | +| ``>=``, ``==``, ``!=`` | | ++------------------------+----------------------------------------------------+ +| ``not x`` | Boolean NOT | ++------------------------+----------------------------------------------------+ +| ``and`` | Boolean AND | ++------------------------+----------------------------------------------------+ +| ``or`` | Boolean OR | ++------------------------+----------------------------------------------------+ +| ``if - else`` | Conditional expression (ternary ``if``) | ++------------------------+----------------------------------------------------+ +| ``lambda`` | Lambda expression | ++------------------------+----------------------------------------------------+ +| ``=``, ``:=`` | Assignment expression | ++------------------------+----------------------------------------------------+ + +.. [#] the power operator binds less tightly than an arithmetic or bitwise + unary operator on its right (``2 ** -1`` is ``0.5``). +.. [#] the ``%`` operator is also used for string formatting; + the same precedence applies. diff --git a/src/refs.bib b/src/refs.bib index fd8f08bde..88658275d 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -46,4 +46,9 @@ @misc{realpython:code-edit author = "Jon Fincher", url = {https://realpython.com/python-ides-code-editors-guide/}, urldata = {2018.3.13}, -} \ No newline at end of file +} + +@misc{docs-python:operator-precedence, + title = "{Python Documentation}", + url = {https://docs.python.org/3/reference/expressions.html#operator-precedence}, +} From 3b17d22184295f42cbaf7f1265712198cff6073c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 02:25:53 +0200 Subject: [PATCH 248/689] Added string formating appendix Added conversion descriptions without code examples. Updated references file. --- src/appx/printf.txt | 73 +++++++++++++++++++++++++++++++++++++++++++++ src/refs.bib | 5 ++++ 2 files changed, 78 insertions(+) create mode 100644 src/appx/printf.txt diff --git a/src/appx/printf.txt b/src/appx/printf.txt new file mode 100644 index 000000000..5a7ea0f79 --- /dev/null +++ b/src/appx/printf.txt @@ -0,0 +1,73 @@ +.. appendix + +.. todo: add code examples + +################################## +``printf-style`` String Formatting +################################## + +String objects have one unique built-in operation: the ``%`` operator (modulo). +This is also known as the string *formatting* or *interpolation* operator +:cite:`docs-python:printf-style`. Given ``format % values`` (where *format* is +a string), ``%`` conversion specifications in *format* are replaced with zero +or more elements of *values*. If *format* requires a single argument, *values* +may be a single non-tuple object. + +The conversion flag characters are: + ++------------+----------------------------------------------------------------+ +| Flag | Meaning | ++============+================================================================+ +| ``#`` | The value conversion will use the "alternative form" | ++------------+----------------------------------------------------------------+ +| ``0`` | The conversion will be zero padded for numeric values | ++------------+----------------------------------------------------------------+ +| ``'-'`` | The converted value is left adjusted (override the ``'0'`` if | +| | both are given) | ++------------+----------------------------------------------------------------+ +| ``' '`` | (a space) A blank should be left before a positive number | ++------------+----------------------------------------------------------------+ +| ``'+'`` | A sign character (``'+'`` or ``'-'``) will precede | +| | the conversion (overrides a "space" flag) | ++------------+----------------------------------------------------------------+ + +The conversion types are: + ++------------+----------------------------------------------------------------+ +| Conversion | Meaning | ++============+================================================================+ +| ``'d'`` | Signed integer decimal | ++------------+----------------------------------------------------------------+ +| ``'i'`` | Signed integer decimal | ++------------+----------------------------------------------------------------+ +| ``'o'`` | Signed octal value | ++------------+----------------------------------------------------------------+ +| ``'u'`` | Obsolete type - it is identical to ``'d'`` | ++------------+----------------------------------------------------------------+ +| ``'x'`` | Signed hexadecimal (lowercase) | ++------------+----------------------------------------------------------------+ +| ``'X'`` | Signed hexadecimal (uppercase) | ++------------+----------------------------------------------------------------+ +| ``'e'`` | Floating point exponential format (lowercase) | ++------------+----------------------------------------------------------------+ +| ``'E'`` | Floating point exponential format (uppercase) | ++------------+----------------------------------------------------------------+ +| ``'f'`` | Floating point decimal format | +| ``'F'`` | | ++------------+----------------------------------------------------------------+ +| ``'g'`` | Floating point format. Uses lowercase exponential format if | +| | exponent is less that -4 or not less than precision, decimal | +| | format overwise. | +| ``'G'`` | | ++------------+----------------------------------------------------------------+ +| ``'c'`` | Single character (accepts integer or single character string) | ++------------+----------------------------------------------------------------+ +| ``'r'`` | Converts any Python object using ``repr()`` | ++------------+----------------------------------------------------------------+ +| ``'s'`` | Converts any Python object using ``str()`` | ++------------+----------------------------------------------------------------+ +| ``'a'`` | Converts any Python object using ``ascii()`` | ++------------+----------------------------------------------------------------+ +| ``'%'`` | No arguments is converted, results in a ``'%'`` character in | +| | the result. | ++------------+----------------------------------------------------------------+ diff --git a/src/refs.bib b/src/refs.bib index 88658275d..569696c29 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -52,3 +52,8 @@ @misc{docs-python:operator-precedence title = "{Python Documentation}", url = {https://docs.python.org/3/reference/expressions.html#operator-precedence}, } + +@misc{docs-python:printf-formating, + title = "{Python Documentation}", + url = {https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting}, +} From 7050571a966277bc128a019c7d50fd33b8d2b5a8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 02:59:15 +0200 Subject: [PATCH 249/689] Added appendecies files to Sphinx builder config --- src/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/conf.py b/src/conf.py index 844f50c9d..1020d144e 100644 --- a/src/conf.py +++ b/src/conf.py @@ -59,4 +59,6 @@ "appx/software_list", "appx/code_edit", "appx/env_path", + "appx/precedence", + "appx/printf", ] From 16ff235cd4f79a3f75b95639664927275981fe2c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 22:48:16 +0200 Subject: [PATCH 250/689] OOP introduction Added OOP introduction document. Updated OOP index file to suite changes. --- src/oop/index.txt | 4 + src/oop/intro.txt | 338 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 342 insertions(+) diff --git a/src/oop/index.txt b/src/oop/index.txt index eac03d924..2dba1e612 100644 --- a/src/oop/index.txt +++ b/src/oop/index.txt @@ -2,6 +2,10 @@ Object-Oriented Programming ############################################################################### +Object-oriented programming (OOP) is one of the biggest and most important +subjects in all of programming. It is a method of structuring a program by +bundling related properties and behavior into individual objects. + .. toctree:: :name: oop diff --git a/src/oop/intro.txt b/src/oop/intro.txt index 03be8014c..e45e7b8d3 100644 --- a/src/oop/intro.txt +++ b/src/oop/intro.txt @@ -1,3 +1,341 @@ ******************************************************************************* Classes and Objects ******************************************************************************* + +Conceptually, objects are like the components of a system. Think of a program +as a factory assembly line of sorts. At each step of the assembly line a system +component processes some material, ultimately transforming raw material into a +finished product. + +An object contains data, like the raw or preprocessed materials at each step on +an assembly line, and behavior, like the action each assembly line component +performs. + +Paradigm of Object-Oriented Programming +======================================= + +Object-oriented programming is a programming paradigm that provides a means of +structuring programs so that properties and behaviors are bundled together +into individual **objects**. + +For instance, an object could represent a person with **properties** like +a name, age, and address and **behaviors** such as walking, talking, running. +Or it could represent an email with properties like a recipient list, subject, +and body and behaviors like adding attachments and sending. + +Put another way, object-oriented programming is an approach for modeling +concrete, real-world things, like cars, as well as relations between things, +like companies and employees, students and teachers, and so on. OOP models +real-world entities as software objects that have some data associated with +them and can perform certain functions. + + +Object-Oriented Programming Concepts +==================================== + +So far, we can discuss the major concepts within the OOP paradigm. +And they are: + +:**encapsulation**: + + In OOP refers to the bundling of data with methods that operate that data, + or restricting of direct access to some of an object's components. + + .. note:: Encapsulation mechanism is often confused with *hiding*. It's not + actually that encapsulation does, but data hiding is available to + us due to the encapsulation. + +:**inheritance**: + + It's a mechanism of basing an object or a class upon another object + (prototype-based inheritance) or class (class-based inheritance), + retaining similar implementation. Also defined as deriving new classes + (subclasses) from existing ones such as a super class or base class and + forming them into a hierarchy of classes. + +:**polymorphism**: + + It's a provision of a single interface to entities of different types or + the use of a single symbol to represent multiple different types. + The concept is borrowed from a principle in biology where an organism or + species can have many different forms or stages. + +:**abstraction**: + + The process of removing or generalizing details or attributes in the study + of objects or systems to focus attention on details of greater importance, + it is similar in nature to the process of generalization. + The creation of abstract concept-objects by mirroring common features or + attributes of various non-abstract objects or systems of study is the + result of the process of abstraction. + +Define a Class in Python +======================== + +Primitive data-structures - like numbers, strings, lists etc. - are designed to +represent simple pieces of information, such as the cost of a product, the name +of a novel, or someone's favorite colors. What if you want to represent things +that are more complex? + +For example, let's say you want to track employees in an organization. You need +to store some basic information about each employee. Let's start from a very +beginning and try to represent an individual employee as a bunch of variables: + +.. code-block:: python + + first_name = "Serhii" + last_name = "Horodilov" + job_title = "Software Engineer" + +This approach has number of issues. Once it's required to store information +for more that one person, you are to create another set of variables: +``first_name_1``, ``first_name_2`` etc. The most terrifying issue is that these +portions of data have no relations to each other. Let's try to use ``list`` for +this purpose: + +.. code-block:: python + + serhii = ["Serhii", "Horodilov", "Software Engineer"] + vlad = ["Vladyslav", "Ponomaryov", "Release Manager"] + +There are number of issues with this approach as well. + +First, it can make larger code files more difficult to manage. If you reference +``serhii[0]`` several lines away from where ``serhii`` list is declared, will +you remember that the element with ``index 0`` is the person's name? Of course, +you can use ``dict`` structure, but... + +Second, it can introduce errors if not every person has the same number of +properties. + +A great way to make this type of code more manageable and more maintainable is +to use **classes**. + +All classes definitions in Python start with the keyword ``class``, which is +followed by the name of the class and a colon. Any code that is indented below +the class definition is considered the part of the class's body. + +.. code-block:: python + + class Person: + """Person class implementation""" + +Classes vs Instances +==================== + +Classes are used to create user-defined data structures. As it was mentioned +above OOP is about bundling data and behaviors. Classes define data structures; +each portion of data bundled within a classes is called **property** or +**field**. Classes also define functions called **methods**, which identify the +behavior and actions that an object created from the class can perform with its +data. + +.. code-block:: python + + class Person: + """Person class implementation""" + + first_name: str = "" + last_name: str = "" + job_title: str = "" + +A class is a blueprint for how something should be defined. It doesn't actually +contain any data. The person class above specifies that ``first_name`` and +``last_name`` properties are bundled within this class, but it don't actually +contain the person's name. + +While classes are blueprints, an **instance** is an **object** that is built +from a form has been filled out with information. Just like many people can +fill out the same form with their own unique information, many instances can +be created from a single class. + +.. code-block:: python + + serhii = Person() + serhii.first_name = "Serhii" + serhii.last_name = "Horodilov" + serhii.job_title = "Software Engineer" + + vlad = Person() + vlad.first_name = "Vladyslav" + vlad.last_name = "Ponomaryov" + vlad.job_title = "Release Manager" + +Methods +======= + +A function bundled within a class is called **method**. There are several ways +to define a class method. For now it's needed to know, that each method will +get a special argument at the first position. This argument is a reference to +an actual object. By convention, this argument is called ``self``. + +.. code-block:: python + + class Person: + """Person class implementation""" + + first_name: str = "" + last_name: str = "" + job_title: str = "" + + def get_fullname(self) -> str: + """Return a person's fullname""" + + return " ".join([self.first_name, self.last_name]) + +Initializing Instance with Data +------------------------------- + +There are several methods surrounded with double underscores (``__method__``) +that are called **dunder methods** or **magic methods**. We'll take a closer +look at these methods in the future. For now, it's ok to just one of these +special methods: ``__init__``. It initializes an instance with some specific +data. + +.. code-block:: python + + class Person: + """Person class implementation""" + + programming_language: str = "Python" + + def __init__( + self, first_name: str, last_name: str, job_title: str + ) -> None: + """Initialize a person instance""" + + self.first_name = first_name + self.last_name = last_name + self.job_title = job_title + + def get_fullname(self) -> str: + """Return a person's fullname""" + + return " ".join([self.first_name, self.last_name]) + + + serhii = Person("Serhii", "Horodilov", "Software Engineer") + vlad = Person("Vladyslav", "Ponomaryov", "Release Manager") + + serhii.first_name # Serhii + serhii.last_name # Horodilov + +Note, this call definition has a property called ``programming_language`` +defined outside of the ``__init__`` method. This property is shared across +all the class instances. + +Some More Details on ``self`` +----------------------------- + +``self`` is nothing except the convention. Instance methods will receive +a pointer to the instance itself as the first argument. In two words: it is +the actual object to call the method with. For example, the student class +defines attributes (student's name and scores) and methods available for +each student instance: complete the challenge or skip classes. While the +actual student instance contains data and methods related to the exact one +student. The ``self`` is a referer to this exact object. + +Data Hiding +=========== + +Many programming languages has *access modifiers* implemented. The Python has +also, but actually no. It's implemented as a convention-level. All class's +members starting with underscore are considered to be **protected** members +and should not be accessible outside the class instance; on the other hand +members starting with two underscores are considered to be **private** members +and shouldn't be accessible outside the class instance as well. + +.. code-block:: python + + class Employee: + """Employee class implementation""" + + def __init__(self, salary: float, hours: int = None) -> None: + """Initialize an employee instance""" + + self.__salary = salary + self._hours = hours + + def report_hours(self, hours: int) -> None: + """Report working hours""" + + # some validation stuff goes here + self._hours += hours + + def change_salary(salary: float) -> None: + """Change salary size""" + + self.__salary = salary + + def get_payment(self) -> float: + """Return a payment size""" + + return round(self.__salary * self._hours, 2) + +With the implementation above there are **public** attributes, but you can +still access data outside the class, but you definitely shouldn't. + +.. code-block:: python + + employee = Employee(100_500) + # you're able to make changes to protected member, but this code smells + # use dedicated method `report_hours` instead + employee._hours = 100 + # accessing Employee.__salary attribute will raise an exception + # the interpreter will add _className before each private member + # but you know - `change_salary` method is that you need + employee._Employee__salary + +Few Words about Inheritance +=========================== + +.. note:: Just in two words. This topic is discovered in the future articles. + +You can derive your classes from a super class. Derived classes are called +*sub classes* and the class used to inherit from is called *super class*. +Other terms are *child* class and *parent* class, but they are not common +(this is author's personal opinion). + +Just put a super class in parenthesis two inherit from it: + +.. code-block:: python + + class Dog(): + """Abstract dog implementation""" + + + class JackRussellTerrier(Dog): + """Jack russell terrier species implementation""" + +Few Words about Polymorphism +============================ + +You've already use this. The most simple explanation is **addition operator**. +For different types of data it would produce different types of output: + +.. code-block:: python + + ["a", "b", "c"] + ["d"] # the result is ["a", "b", "c", "d"] + "a" + "b" + "cd" # the result is "abcd" + +For example you may have various classes inherited from a base class, that +provides a common interface, but each derived class may implement the method +in its own way. + +.. code-block:: python + + class Animal: + """Abstract animal""" + + def voice(self): + pass + + + class Cat(Animal): + def voice(self): + print("MEOW") + + + class Dog(Animal): + def voice(self): + print("ARF) From 35a6c69da976f3e777438038263c6ab38011e6bc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 22:49:07 +0200 Subject: [PATCH 251/689] OOP translation Added introduction translation. --- src/_locales/ua/LC_MESSAGES/oop.po | 474 +++++++++++++++++++++++++++++ 1 file changed, 474 insertions(+) create mode 100644 src/_locales/ua/LC_MESSAGES/oop.po diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/ua/LC_MESSAGES/oop.po new file mode 100644 index 000000000..3b7ceaf55 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/oop.po @@ -0,0 +1,474 @@ +# OBJECT-ORIENTED PROGRAMMING TOPICS +# +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-21 17:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.11.0\n" + +#: ../../src/oop/index.txt:3 +msgid "Object-Oriented Programming" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:5 +msgid "" +"Object-oriented programming (OOP) is one of the biggest and most " +"important subjects in all of programming. It is a method of structuring a" +" program by bundling related properties and behavior into individual " +"objects." +msgstr "" +"Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " +"найважливіших тем у всьому програмуванні. Це метод структурування" +"програми шляхом об'єднання пов'язаних властивостей і поведінки в окремі " +"об'єкти." + +#: ../../src/oop/inheritance.txt:3 +msgid "Inheritance" +msgstr "Наслідування" + +#: ../../src/oop/intro.txt:3 +msgid "Classes and Objects" +msgstr "Класи та Об'єкти" + +#: ../../src/oop/intro.txt:5 +msgid "" +"Conceptually, objects are like the components of a system. Think of a " +"program as a factory assembly line of sorts. At each step of the assembly" +" line a system component processes some material, ultimately transforming" +" raw material into a finished product." +msgstr "" +"Концептуально об'єкти схожі на компоненти системи. Думайте про програму як " +"про заводську конвеєрну лінію. На кожному кроці складання системний компонент" +" обробляє певний матеріал, остаточно перетворюючи сировину на закінчений " +"продукт." + +#: ../../src/oop/intro.txt:10 +msgid "" +"An object contains data, like the raw or preprocessed materials at each " +"step on an assembly line, and behavior, like the action each assembly " +"line component performs." +msgstr "" +"Об'єкт містить дані, як-от необроблені або попередньо оброблені матеріали на " +"кожному кроці складальної лінії, і поведінку, як-от дію, яку виконує кожен " +"компонент складальної лінії." + +#: ../../src/oop/intro.txt:15 +msgid "Paradigm of Object-Oriented Programming" +msgstr "Парадигма Об'єктно-Орієнтованого Програмування" + +#: ../../src/oop/intro.txt:17 +msgid "" +"Object-oriented programming is a programming paradigm that provides a " +"means of structuring programs so that properties and behaviors are " +"bundled together into individual **objects**." +msgstr "" +"Об'єктно-орієнтоване програмування - це парадигма програмування, яка " +"надає засоби структурування програм так, що властивості та поведінка " +"об'єднуються в окремі **об'єкти**." + +#: ../../src/oop/intro.txt:21 +msgid "" +"For instance, an object could represent a person with **properties** like" +" a name, age, and address and **behaviors** such as walking, talking, " +"running. Or it could represent an email with properties like a recipient " +"list, subject, and body and behaviors like adding attachments and " +"sending." +msgstr "" +"Наприклад, об'єкт може представляти особу з такими **властивостями**, як" +" ім'я, вік та адреса, а також такими **поведінками**, як ходьба, розмова, " +"біг. Або він може представляти електронний лист із такими властивостями, як " +"список одержувачів, тема , а також тіло та поведінку, як-от додавання " +"вкладень і надсилання." + +#: ../../src/oop/intro.txt:26 +msgid "" +"Put another way, object-oriented programming is an approach for modeling " +"concrete, real-world things, like cars, as well as relations between " +"things, like companies and employees, students and teachers, and so on. " +"OOP models real-world entities as software objects that have some data " +"associated with them and can perform certain functions." +msgstr "" +"Інакше кажучи, об'єктно-орієнтоване програмування - це підхід до моделювання " +"конкретних речей реального світу, таких як автомобілі, а також відносин між " +"речами, такими як компанії та працівники, студенти та викладачі тощо. " +"ООП моделює сутності реального світу як програмні об'єкти, які " +"мають деякі дані, пов'язані з ними та можуть виконувати певні функції." + +#: ../../src/oop/intro.txt:34 +msgid "Object-Oriented Programming Concepts" +msgstr "Концепції Об'єктно-Орієнтованого Програмування" + +#: ../../src/oop/intro.txt:36 +msgid "" +"So far, we can discuss the major concepts within the OOP paradigm. And " +"they are:" +msgstr "" +"Поки що ми можемо обговорити основні концепції парадигми ООП. І вони:" + +#: ../../src/oop/intro.txt +msgid "**encapsulation**" +msgstr "**інкапсуляція**" + +#: ../../src/oop/intro.txt:41 +msgid "" +"In OOP refers to the bundling of data with methods that operate that " +"data, or restricting of direct access to some of an object's components." +msgstr "" +"В ООП означає об'єднання даних із методами, які обробляють ці дані, або " +"обмеження прямого доступу до деяких компонентів об'єкта." + +#: ../../src/oop/intro.txt:44 +msgid "" +"Encapsulation mechanism is often confused with *hiding*. It's not " +"actually that encapsulation does, but data hiding is available to us due " +"to the encapsulation." +msgstr "" +"Механізм інкапсуляції часто плутають із приховуванням. Насправді інкапсуляція" +" це не робить, але приховування даних доступне для нас завдяки інкапсуляції." + +#: ../../src/oop/intro.txt +msgid "**inheritance**" +msgstr "**наслідування**" + +#: ../../src/oop/intro.txt:50 +msgid "" +"It's a mechanism of basing an object or a class upon another object " +"(prototype-based inheritance) or class (class-based inheritance), " +"retaining similar implementation. Also defined as deriving new classes " +"(subclasses) from existing ones such as a super class or base class and " +"forming them into a hierarchy of classes." +msgstr "" +"Це механізм базування об'єкта або класу на іншому об'єкті " +"(успадкування на основі прототипу) або класу (успадкування на основі класу), " +"зберігаючи подібну реалізацію. Також визначається як отримання нових класів " +"(підкласів) із існуючих такі як суперклас або базовий клас і " +"формування їх у ієрархію класів." + +#: ../../src/oop/intro.txt +msgid "**polymorphism**" +msgstr "**поліморфізм**" + +#: ../../src/oop/intro.txt:58 +msgid "" +"It's a provision of a single interface to entities of different types or " +"the use of a single symbol to represent multiple different types. The " +"concept is borrowed from a principle in biology where an organism or " +"species can have many different forms or stages." +msgstr "" +"Це надання єдиного інтерфейсу для сутностей різних типів або " +"використання одного символу для представлення кількох різних типів. " +"Концепція запозичена з принципу в біології, згідно з яким організм або " +"вид може мати багато різних форми чи етапи." + +#: ../../src/oop/intro.txt +msgid "**abstraction**" +msgstr "**абстракція**" + +#: ../../src/oop/intro.txt:65 +msgid "" +"The process of removing or generalizing details or attributes in the " +"study of objects or systems to focus attention on details of greater " +"importance, it is similar in nature to the process of generalization. The" +" creation of abstract concept-objects by mirroring common features or " +"attributes of various non-abstract objects or systems of study is the " +"result of the process of abstraction." +msgstr "" +"Процес видалення або узагальнення деталей або атрибутів під час дослідження " +"об'єктів або систем, щоб зосередити увагу на деталях більшої важливості, " +"подібний за своєю природою до процесу узагальнення. Створення абстрактних " +"понять-об'єктів шляхом віддзеркалення спільних рис або атрибутів різних " +"неабстрактних об'єктів або систем дослідження є результатом процесу " +"абстрагування." + +#: ../../src/oop/intro.txt:73 +msgid "Define a Class in Python" +msgstr "Визначення Классу в Python" + +#: ../../src/oop/intro.txt:75 +msgid "" +"Primitive data-structures - like numbers, strings, lists etc. - are " +"designed to represent simple pieces of information, such as the cost of a" +" product, the name of a novel, or someone's favorite colors. What if you " +"want to represent things that are more complex?" +msgstr "" +"Примітивні структури даних - як-от числа, рядки, списки тощо - призначені " +"для представлення простих фрагментів інформації, таких як вартість продукту, " +"назва роману чи чиїсь улюблені кольори. Що, якщо ви бажаєте представити " +"складніші речі?" + +#: ../../src/oop/intro.txt:80 +msgid "" +"For example, let's say you want to track employees in an organization. " +"You need to store some basic information about each employee. Let's start" +" from a very beginning and try to represent an individual employee as a " +"bunch of variables:" +msgstr "" +"Наприклад, скажімо, ви хочете відслідковувати співробітників в організації. " +"Вам потрібно зберегти деяку базову інформацію про кожного працівника. " +"Давайте почнемо з самого початку та спробуємо представити окремого " +"працівника як групу змінних:" + +#: ../../src/oop/intro.txt:90 +msgid "" +"This approach has number of issues. Once it's required to store " +"information for more that one person, you are to create another set of " +"variables: ``first_name_1``, ``first_name_2`` etc. The most terrifying " +"issue is that these portions of data have no relations to each other. " +"Let's try to use ``list`` for this purpose:" +msgstr "" +"Цей підхід має низку проблем. Після того, як буде потрібно зберігати " +"інформацію про більше ніж одну особу, ви повинні створити інший набір " +"змінних: ``first_name_1``, ``first_name_2`` тощо. Найжахливіше проблема " +"в тому, що ці частини даних не мають жодного відношення одна до одної. " +"Давайте спробуємо використати ``список`` для цієї мети:" + +#: ../../src/oop/intro.txt:101 +msgid "There are number of issues with this approach as well." +msgstr "З цим підходом також виникає ряд проблем." + +#: ../../src/oop/intro.txt:103 +msgid "" +"First, it can make larger code files more difficult to manage. If you " +"reference ``serhii[0]`` several lines away from where ``serhii`` list is " +"declared, will you remember that the element with ``index 0`` is the " +"person's name? Of course, you can use ``dict`` structure, but..." +msgstr "" +"По-перше, це може ускладнити керування великими файлами коду. Якщо ви " +"посилаєтеся на ``serhii[0]`` на кілька рядків від місця, де оголошено список " +"``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я " "особи? " +"Звичайно, ви можете використовувати структуру ``dict``, але..." + +#: ../../src/oop/intro.txt:108 +msgid "" +"Second, it can introduce errors if not every person has the same number " +"of properties." +msgstr "" +"По-друге, це може призвести до помилок, якщо не кожна особа має однакову " +"кількість властивостей." + +#: ../../src/oop/intro.txt:111 +msgid "" +"A great way to make this type of code more manageable and more " +"maintainable is to use **classes**." +msgstr "" +"Чудовий спосіб зробити цей тип коду більш керованим і придатним для " +"обслуговування - це використання **класів**." + +#: ../../src/oop/intro.txt:114 +msgid "" +"All classes definitions in Python start with the keyword ``class``, which" +" is followed by the name of the class and a colon. Any code that is " +"indented below the class definition is considered the part of the class's" +" body." +msgstr "" +"Усі визначення класів у Python починаються з ключового слова ``class``, за " +"яким йдуть ім'я класу та двокрапка. Будь-який код, який має відступ під " +"визначенням класу, вважається частиною тіла класу." + +#: ../../src/oop/intro.txt:124 +msgid "Classes vs Instances" +msgstr "Класи та Екземпляри Класу" + +#: ../../src/oop/intro.txt:126 +msgid "" +"Classes are used to create user-defined data structures. As it was " +"mentioned above OOP is about bundling data and behaviors. Classes define " +"data structures; each portion of data bundled within a classes is called " +"**property** or **field**. Classes also define functions called " +"**methods**, which identify the behavior and actions that an object " +"created from the class can perform with its data." +msgstr "" +"Класи використовуються для створення визначених користувачем структур даних. " +"Як було зазначено вище, ООП стосується об'єднання даних і поведінки. Класи " +"визначають структури даних; кожна частина даних, об'єднаних у класи, " +"називається властивістю або полем. Класи також визначають функції, " +"які називаються методами, які ідентифікують поведінку та дії, які об'єкт, " +"створений з класу, може виконувати зі своїми даними." + +#: ../../src/oop/intro.txt:142 +msgid "" +"A class is a blueprint for how something should be defined. It doesn't " +"actually contain any data. The person class above specifies that " +"``first_name`` and ``last_name`` properties are bundled within this " +"class, but it don't actually contain the person's name." +msgstr "" +"Клас - це схема того, як щось має бути визначено. Він насправді не містить " +"жодних даних. Клас person вище вказує, що властивості " "first_name`` і " +"``last_name`` об'єднані в цей класу, але насправді він не містить імені " +"людини." + +#: ../../src/oop/intro.txt:147 +msgid "" +"While classes are blueprints, an **instance** is an **object** that is " +"built from a form has been filled out with information. Just like many " +"people can fill out the same form with their own unique information, many" +" instances can be created from a single class." +msgstr "" +"Хоча класи є кресленнями, екземпляр - це об'єкт, створений із форми, " +"заповненої інформацією. Подібно до того, як багато людей можуть заповнювати " +"ту саму форму своєю унікальною інформацією, багато екземплярів можуть бути " +"створений з одного класу." + +#: ../../src/oop/intro.txt:165 +msgid "Methods" +msgstr "Методи" + +#: ../../src/oop/intro.txt:167 +msgid "" +"A function bundled within a class is called **method**. There are several" +" ways to define a class method. For now it's needed to know, that each " +"method will get a special argument at the first position. This argument " +"is a reference to an actual object. By convention, this argument is " +"called ``self``." +msgstr "" +"Функція, об'єднана в клас, називається методом. Існує кілька способів " +"визначення методу класу. Наразі необхідно знати, що кожен метод отримає " +"спеціальний аргумент у першій позиції. Цей аргумент є посилання на реальний " +"об'єкт. За домовленістю цей аргумент називається ``self``." + +#: ../../src/oop/intro.txt:187 +msgid "Initializing Instance with Data" +msgstr "Ініціалізація Екземпляру з Даними" + +#: ../../src/oop/intro.txt:189 +msgid "" +"There are several methods surrounded with double underscores " +"(``__method__``) that are called **dunder methods** or **magic methods**." +" We'll take a closer look at these methods in the future. For now, it's " +"ok to just one of these special methods: ``__init__``. It initializes an " +"instance with some specific data." +msgstr "" +"Є кілька методів, позначених подвійним підкресленням (``__method__``), які " +"називаються методами dunder або магічними методами. Ми детальніше розглянемо " +"ці методи в майбутньому. Наразі можна використовувати лише один із цих " +"спеціальних методів: ``__init__``. Він ініціалізує примірник певними даними." + +#: ../../src/oop/intro.txt:223 +msgid "" +"Note, this call definition has a property called ``programming_language``" +" defined outside of the ``__init__`` method. This property is shared " +"across all the class instances." +msgstr "" +"Зверніть увагу, що це визначення виклику має властивість під назвою " +"``programming_language``, визначену за межами методу ``__init__``. Ця " +"властивість є спільною для всіх екземплярів класу." + +#: ../../src/oop/intro.txt:228 +msgid "Some More Details on ``self``" +msgstr "Дещо Більше про ``self``" + +#: ../../src/oop/intro.txt:230 +msgid "" +"``self`` is nothing except the convention. Instance methods will receive " +"a pointer to the instance itself as the first argument. In two words: it " +"is the actual object to call the method with. For example, the student " +"class defines attributes (student's name and scores) and methods " +"available for each student instance: complete the challenge or skip " +"classes. While the actual student instance contains data and methods " +"related to the exact one student. The ``self`` is a referer to this exact" +" object." +msgstr "" +"``self`` - це не що інше, як конвенція. Методи екземпляра отримають " +"вказівник на сам екземпляр як перший аргумент. У двох словах: це фактичний " +"об'єкт для виклику методу. Наприклад, Клас студента визначає атрибути (ім'я " +"студента та бали) і методи, доступні для кожного екземпляра студента: " +"виконайте завдання або пропустіть заняття. Тоді як фактичний екземпляр " +"студента містить дані та методи, пов'язані з одним студентом. ``self`` є " +"посиланням саме на цей об'єкт." + +#: ../../src/oop/intro.txt:239 +msgid "Data Hiding" +msgstr "Приховання Даних" + +#: ../../src/oop/intro.txt:241 +msgid "" +"Many programming languages has *access modifiers* implemented. The Python" +" has also, but actually no. It's implemented as a convention-level. All " +"class's members starting with underscore are considered to be " +"**protected** members and should not be accessible outside the class " +"instance; on the other hand members starting with two underscores are " +"considered to be **private** members and shouldn't be accessible outside " +"the class instance as well." +msgstr "" +"Багато мов програмування мають реалізовані модифікатори доступу. Python" +" також має, але насправді ні. Він реалізований на рівні конвенції. Усі " +"члени класу, які починаються з підкреслення, вважаються захищеними членами " +"та не повинні бути доступними за межами екземпляр класу; з іншого боку, " +"члени, які починаються з двох символів підкреслення, вважаються приватними " +"членами та не повинні бути доступними за межами екземпляра класу." + +#: ../../src/oop/intro.txt:276 +msgid "" +"With the implementation above there are **public** attributes, but you " +"can still access data outside the class, but you definitely shouldn't." +msgstr "" +"З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " +"можете отримати доступ до даних за межами класу, але точно не повинні." + +#: ../../src/oop/intro.txt:287 +msgid "Few Words about Inheritance" +msgstr "Кілька Слів про Наслідування" + +#: ../../src/oop/intro.txt:289 +msgid "Just in two words. This topic is discovered in the future articles." +msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." + +#: ../../src/oop/intro.txt:291 +msgid "" +"You can derive your classes from a super class. Derived classes are " +"called *sub classes* and the class used to inherit from is called *super " +"class*. Other terms are *child* class and *parent* class, but they are " +"not common (this is author's personal opinion)." +msgstr "" +"Ви можете отримати свої класи від суперкласу. Похідні класи називаються " +"*підкласами*, а клас, який використовується для успадкування, називається " +"*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " +"вони не є поширеними ( це особиста думка автора)." + +#: ../../src/oop/intro.txt:296 +msgid "Just put a super class in parenthesis two inherit from it:" +msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" + +#: ../../src/oop/intro.txt:308 +msgid "Few Words about Polymorphism" +msgstr "Кілька Слів про Поліморфізм" + +#: ../../src/oop/intro.txt:310 +msgid "" +"You've already use this. The most simple explanation is **addition " +"operator**. For different types of data it would produce different types " +"of output:" +msgstr "" +"Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " +"Для різних типів даних він створюватиме різні типи виводу:" + +#: ../../src/oop/intro.txt:318 +msgid "" +"For example you may have various classes inherited from a base class, " +"that provides a common interface, but each derived class may implement " +"the method in its own way." +msgstr "" +"Наприклад, у вас можуть бути різні класи, успадковані від базового класу, " +"який забезпечує загальний інтерфейс, але кожен похідний клас може " +"реалізовувати метод по-своєму." + +#: ../../src/oop/patterns.txt:3 +msgid "Design Patterns" +msgstr "" + +#: ../../src/oop/solid.txt:3 +msgid "Solid Principles" +msgstr "" + From f7f8f21bdfdaafa12ca203dfa8bf3aa9b1ff08b2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 14 Mar 2023 03:08:33 +0200 Subject: [PATCH 252/689] Project dependencies Updated "myst-parser" to stable release version. Updated sphinx and related packages. Signed-off-by: Serhii Horodilov --- poetry.lock | 790 ++++++++++++++++++++++++----------------------- pyproject.toml | 8 +- requirements.txt | 79 ++--- 3 files changed, 453 insertions(+), 424 deletions(-) diff --git a/poetry.lock b/poetry.lock index e725373fd..3cba978bf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. + [[package]] name = "alabaster" version = "0.7.13" @@ -5,6 +7,10 @@ description = "A configurable sidebar-enabled Sphinx theme" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] [[package]] name = "babel" @@ -13,6 +19,10 @@ description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, +] [package.dependencies] pytz = ">=2015.7" @@ -24,6 +34,10 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] [[package]] name = "charset-normalizer" @@ -32,6 +46,96 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "main" optional = false python-versions = "*" +files = [ + {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, + {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, +] [[package]] name = "click" @@ -40,6 +144,10 @@ description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -51,14 +159,22 @@ description = "Cross-platform colored terminal text." category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "docutils" -version = "0.17.1" +version = "0.18.1" description = "Docutils -- Python Documentation Utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, + {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, +] [[package]] name = "idna" @@ -67,6 +183,10 @@ description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] [[package]] name = "imagesize" @@ -75,6 +195,10 @@ description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" @@ -83,14 +207,18 @@ description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, + {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, +] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8", "importlib-resources (>=1.3)"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "jinja2" @@ -99,6 +227,10 @@ description = "A very fast and expressive template engine." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -113,6 +245,10 @@ description = "A lexer and codec to work with LaTeX code in Python." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, + {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, +] [package.dependencies] six = ">=1.4.1" @@ -124,19 +260,23 @@ description = "Python port of markdown-it. Markdown parsing, done right!" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, + {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, +] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] -profiling = ["gprof2dot"] -plugins = ["mdit-py-plugins"] +benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] +code-style = ["pre-commit (==2.6)"] +compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] -compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] -code_style = ["pre-commit (==2.6)"] -benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" @@ -145,20 +285,76 @@ description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] [[package]] name = "mdit-py-plugins" -version = "0.3.3" +version = "0.3.5" description = "Collection of plugins for markdown-it-py" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, + {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, +] [package.dependencies] markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit"] +code-style = ["pre-commit"] rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] @@ -169,29 +365,37 @@ description = "Markdown URL utilities" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] [[package]] name = "myst-parser" -version = "0.18.1" -description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." +version = "1.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, + {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, +] [package.dependencies] docutils = ">=0.15,<0.20" jinja2 = "*" markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.1,<0.4.0" +mdit-py-plugins = ">=0.3.4,<0.4.0" pyyaml = "*" -sphinx = ">=4,<6" -typing-extensions = "*" +sphinx = ">=5,<7" [package.extras] -code_style = ["pre-commit (>=2.12,<3.0)"] +code-style = ["pre-commit (>=3.0,<4.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "sphinx-book-theme", "sphinx-design", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] -testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.0)", "sphinx-pytest", "sphinx (<5.2)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] [[package]] name = "packaging" @@ -200,6 +404,10 @@ description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] [[package]] name = "pybtex" @@ -208,6 +416,10 @@ description = "A BibTeX-compatible bibliography processor in Python" category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +files = [ + {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, + {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, +] [package.dependencies] latexcodec = ">=1.0.4" @@ -224,6 +436,10 @@ description = "A docutils backend for pybtex." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016"}, + {file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239"}, +] [package.dependencies] docutils = ">=0.8" @@ -236,6 +452,10 @@ description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] [package.extras] plugins = ["importlib-metadata"] @@ -247,6 +467,10 @@ description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +files = [ + {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, + {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, +] [[package]] name = "pyyaml" @@ -255,6 +479,48 @@ description = "YAML parser and emitter for Python" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] [[package]] name = "requests" @@ -263,6 +529,10 @@ description = "Python HTTP for Humans." category = "main" optional = false python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] [package.dependencies] certifi = ">=2017.4.17" @@ -272,7 +542,24 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "67.6.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.6.0-py3-none-any.whl", hash = "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2"}, + {file = "setuptools-67.6.0.tar.gz", hash = "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -281,6 +568,10 @@ description = "Python 2 and 3 compatibility utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "snowballstemmer" @@ -289,26 +580,34 @@ description = "This package provides 29 stemmers for 28 languages generated from category = "main" optional = false python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] name = "sphinx" -version = "5.3.0" +version = "6.1.3" description = "Python documentation generator" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "Sphinx-6.1.3.tar.gz", hash = "sha256:0dac3b698538ffef41716cf97ba26c1c7788dba73ce6f150c1ff5b4720786dd2"}, + {file = "sphinx-6.1.3-py3-none-any.whl", hash = "sha256:807d1cb3d6be87eb78a381c3e70ebd8d346b9a25f3753e9947e866b2786865fc"}, +] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.13" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -319,40 +618,49 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest (>=4.6)", "html5lib", "typed-ast", "cython"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-intl" -version = "2.0.1" +version = "2.1.0" description = "Sphinx utility that make it easy to translate and to apply translation." category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" +files = [ + {file = "sphinx-intl-2.1.0.tar.gz", hash = "sha256:9d9849ae42515b39786824e99f1e30db0404c377b01bb022690fc932b0221c02"}, + {file = "sphinx_intl-2.1.0-py3-none-any.whl", hash = "sha256:9798946b995989de691387651d70c3fc191275b587e2e519655541edfd7bbd68"}, +] [package.dependencies] babel = "*" click = "*" +setuptools = "*" sphinx = "*" [package.extras] -test = ["pytest", "mock"] -transifex = ["transifex_client (>=0.11)"] +test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.1" +version = "1.2.0" description = "Read the Docs theme for Sphinx" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "sphinx_rtd_theme-1.2.0-py2.py3-none-any.whl", hash = "sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2"}, + {file = "sphinx_rtd_theme-1.2.0.tar.gz", hash = "sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8"}, +] [package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" +docutils = "<0.19" +sphinx = ">=1.6,<7" +sphinxcontrib-jquery = {version = ">=2.0.0,<3.0.0 || >3.0.0", markers = "python_version > \"3\""} [package.extras] -dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" @@ -361,9 +669,13 @@ description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -373,10 +685,14 @@ description = "Sphinx extension for BibTeX style citations." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa"}, + {file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76"}, +] [package.dependencies] docutils = ">=0.8" -importlib-metadata = { version = ">=3.6", markers = "python_version < \"3.10\"" } +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} pybtex = ">=0.24" pybtex-docutils = ">=1.0.0" Sphinx = ">=2.1" @@ -388,10 +704,14 @@ description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -400,10 +720,29 @@ description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML h category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] + +[[package]] +name = "sphinxcontrib-jquery" +version = "2.0.0" +description = "Extension to include jQuery on newer Sphinx releases" +category = "main" +optional = false +python-versions = ">=2.7" +files = [ + {file = "sphinxcontrib-jquery-2.0.0.tar.gz", hash = "sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa"}, + {file = "sphinxcontrib_jquery-2.0.0-py3-none-any.whl", hash = "sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995"}, +] + +[package.dependencies] +setuptools = "*" [[package]] name = "sphinxcontrib-jsmath" @@ -412,9 +751,13 @@ description = "A sphinx extension which renders display math in HTML via JavaScr category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] -test = ["mypy", "flake8", "pytest"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -423,10 +766,14 @@ description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp d category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -435,19 +782,15 @@ description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -[[package]] -name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - [[package]] name = "urllib3" version = "1.26.14" @@ -455,10 +798,14 @@ description = "HTTP library with thread-safe connection pooling, file post, and category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, +] [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -468,335 +815,16 @@ description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, + {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, +] [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.9" -content-hash = "9dfe764900129c00fa319ad0ed0ca07186e410a65bee83b291a0359f806d3f78" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] -babel = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -charset-normalizer = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, -] -jinja2 = [ - { file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" }, - { file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852" }, -] -latexcodec = [ - { file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271" }, - { file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a" }, -] -markdown-it-py = [ - { file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da" }, - { file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27" }, -] -markupsafe = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, -] -mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, - {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, -] -mdurl = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - { file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" }, -] -myst-parser = [ - { file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d" }, - { file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8" }, -] -packaging = [ - { file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2" }, - { file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" }, -] -pybtex = [ - { file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f" }, - { file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755" }, -] -pybtex-docutils = [ - { file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016" }, - { file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239" }, -] -pygments = [ - { file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" }, - { file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297" }, -] -pytz = [ - { file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" }, - { file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0" }, -] -pyyaml = [ - { file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53" }, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -requests = [ - { file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa" }, - { file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" }, -] -six = [ - { file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" }, - { file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" }, -] -snowballstemmer = [ - { file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" }, - { file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1" }, -] -sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, -] -sphinx-intl = [ - {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, - {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, - {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, -] -sphinxcontrib-applehelp = [ - { file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e" }, - { file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228" }, -] -sphinxcontrib-bibtex = [ - { file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa" }, - { file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76" }, -] -sphinxcontrib-devhelp = [ - { file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" }, - { file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e" }, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -urllib3 = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, -] -zipp = [ - {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, - {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, -] +content-hash = "8cd52ebd6491a532634639dcece042cb9d8dade3b412c454cabd4d6852f55c6f" diff --git a/pyproject.toml b/pyproject.toml index 2b5aba184..b6fe31691 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,10 +33,10 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.9" -Sphinx = "^5.3.0" -sphinx-intl = "^2.0.1" -sphinx-rtd-theme = "^1.1.0" -myst-parser = "^0.18.1" +Sphinx = "^6.1.3" +sphinx-intl = "^2.1.0" +sphinx-rtd-theme = "^1.2.0" +myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index f3e31cb75..65b689912 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,39 +1,40 @@ -alabaster==0.7.13; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -babel==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -certifi==2022.12.7; python_version >= "3.7" and python_version < "4" -charset-normalizer==3.0.1; python_version >= "3.7" and python_version < "4" -click==8.1.3; python_version >= "3.7" -colorama==0.4.6; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.7.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") -docutils==0.17.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" -idna==3.4; python_version >= "3.7" and python_version < "4" -imagesize==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -importlib-metadata==6.0.0; python_version < "3.10" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") -jinja2==3.1.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -latexcodec==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -markdown-it-py==2.1.0; python_version >= "3.7" -markupsafe==2.1.2; python_version >= "3.7" -mdit-py-plugins==0.3.3; python_version >= "3.7" -mdurl==0.1.2; python_version >= "3.7" -myst-parser==0.18.1; python_version >= "3.7" -packaging==23.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -pybtex-docutils==1.0.2; python_version >= "3.6" -pybtex==0.24.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6" -pygments==2.14.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -pytz==2022.7.1; python_version >= "3.6" -pyyaml==6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" -requests==2.28.2; python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") -six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" -snowballstemmer==2.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinx-intl==2.0.1; python_version >= "3.5" -sphinx-rtd-theme==1.1.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") -sphinx==5.3.0; python_version >= "3.6" -sphinxcontrib-applehelp==1.0.4; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.8" -sphinxcontrib-bibtex==2.5.0; python_version >= "3.6" -sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" -typing-extensions==4.4.0; python_version >= "3.7" -urllib3==1.26.14; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0" -zipp==3.12.0; python_version < "3.10" and python_version >= "3.7" +alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" +babel==2.11.0 ; python_version >= "3.9" and python_version < "4.0" +certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4" +charset-normalizer==3.0.1 ; python_version >= "3.9" and python_version < "4" +click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" +docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" +idna==3.4 ; python_version >= "3.9" and python_version < "4" +imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==6.0.0 ; python_version >= "3.9" and python_version < "3.10" +jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +markdown-it-py==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" +myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" +pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2022.7.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" +requests==2.28.2 ; python_version >= "3.9" and python_version < "4" +setuptools==67.6.0 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==1.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jquery==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" +urllib3==1.26.14 ; python_version >= "3.9" and python_version < "4" +zipp==3.12.0 ; python_version >= "3.9" and python_version < "3.10" From 8934cca2d6745937f088c39b584f542fcb0de473 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 05:01:31 +0200 Subject: [PATCH 253/689] Completed variables document --- src/basics/variables.txt | 51 +++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/src/basics/variables.txt b/src/basics/variables.txt index d5dd7522a..cc4525a03 100644 --- a/src/basics/variables.txt +++ b/src/basics/variables.txt @@ -2,12 +2,51 @@ Variables ******************************************************************************* -Variables are container for storing data. There is no syntax for declaring -variables in Python. A variable is created the moment you first assign a value -to it. +In computer science a **variable** is a named storage location in memory that +can hold a value (*data*). The value stored in a variable can be changed or +accessed by the program during its execution. + +In Python, variables are created dynamically once a value is assigned to them. +This makes Python a dynamically typed language, which means that the data type +of a variable is inferred from the value assigned to it. So, you do not need +to declare a variable before using it, as in statically typed languages. + +The ability to create variables dynamically and infer their data type makes +Python code more concise and easier to read. However, it also requires careful +attention to variable naming and assignment to avoid unexpected behavior. + +In Python ``=`` (assignment operator) is used to set a value to some variable, +the portion on the left of the operator is a *variable name* and the portion +on the right is a *value* to assign to a variable. .. code-block:: python + :caption: Variable assignment in Python + + number_of_students = 10 + greeting = "hello" + pi = 3.14 + +.. code-block:: java + :caption: Variable assignment in Java + + int number_of_students = 10; + String greeting = "hello"; + double pi = 3.14; + +Naming +====== + +In Python there are several rules that describe how to name your variables. +Some of these are requirements and cannot be ignored, others are rather +recommended than required and can be omitted. For now note, that a variable +name **cannot**: + +- a language keyword (like ``pass``, ``def`` or ``class``) +- start with a number (e.g. ``123``, ``1_something``) +- contain special operators in it (``+``, ``-``, ``=`` etc.) +- contain white spaces + +Also here are some general recommendation on naming anything: - foo = 42 - bar = "some string data" - foobar = 42.0 +- do not use built-in functions as a variable name (e.g. ``len = 42``) +- keep names meaningful (``x = 10`` vs ``number_of_student = 100``) From 58afcb52f8d4afca83c5fe733924da0b67117cfb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 05:03:55 +0200 Subject: [PATCH 254/689] Added syntax document --- src/basics/index.txt | 1 + src/basics/syntax.txt | 109 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 src/basics/syntax.txt diff --git a/src/basics/index.txt b/src/basics/index.txt index e59340e4f..df8f9a5e2 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -6,6 +6,7 @@ :name: basics variables + syntax datatypes controlflow functions diff --git a/src/basics/syntax.txt b/src/basics/syntax.txt new file mode 100644 index 000000000..704f16599 --- /dev/null +++ b/src/basics/syntax.txt @@ -0,0 +1,109 @@ +******************************************************************************* + Python Syntax +******************************************************************************* + +.. note:: As a natural language like English or Ukrainian has its own rules to + write down something, programming languages do. + This makes them programming **languages**. + +A programming language syntax is the set of rules and principles that govern +how code is written and structured in a given programming language. Syntax +encompasses the rules for writing statements, expressions, variables, data +types, control structures, and other constructs that make up the language. + +The syntax of a programming language defines how code is organized and +interpreted by a compiler or interpreter. It defines the rules for writing +valid statements and expressions that can be understood and executed by +the language's runtime system. + +A programming language's syntax is designed to be both readable and expressive, +allowing programmers to write code that is easy to understand and modify. +Syntax often influences the style and structure of code, as well as its +maintainability and performance. + +Different programming languages have different syntax, with some languages +being more concise and expressive than others. While syntax is an important +aspect of a programming language, it is only one of several factors that +determine its ease of use, flexibility, and suitability for different +programming tasks. + +In the case of Python, the language's syntax defines how code is written and +structured in a way that is consistent, readable, and easy to understand. +A general overview is provided below, no need to dive deep in this now. All of +the following is to be discussed during the course. So, some of the key aspects +of Python's syntax include: + +:Indentation: + Python uses whitespace, specifically indentation, to delimit blocks of + code, such as loops, conditionals, and functions. This means that + the indentation level of a line determines which block of code it belongs + to. + +:Statement structure: + Python statements are typically written on one line, with the end of + the line indicating the end of the statement. However, if a statement is + too long to fit on one line, it can be continued across multiple lines + using backslashes. + +:Variables: + In Python, variables are created automatically when a value is assigned to + them, and their type is inferred from the value. Variables can be assigned + values of different types, including integers, floats, strings, and more + complex data structures like lists and dictionaries. + +:Operators: + Python supports a wide range of operators for performing arithmetic, + comparison, and logical operations. These include arithmetic operators like + ``+``, ``-``, ``*``, and ``/``, as well as comparison operators like + ``<``, ``>``, ``==``, and ``!=``. + +:Control flow: + Python provides control flow statements like if, else, elif, for, and + while to control the flow of execution in a program. These statements are + used to make decisions, repeat code, or perform actions based on + conditions. + +:Functions: + In Python, functions are defined using the def keyword and can take + arguments and return values. The body of a function is defined using + a block of indented code. + +:Modules: + Python has a large library of modules that provide pre-written code for + a variety of tasks. Modules can be imported into a program using the import + statement. + +:Exception handling: + Python provides a way to handle errors and exceptions in a program using + the try, except, else, and finally keywords. These statements allow + a program to gracefully recover from errors and continue executing. + +In few words: + +.. code-block:: python + :caption: Input/Output example script + + # This is a comment. + # It is used to provide additional information or context in a script. + + # Getting input from the user + name = input("What is your name? ") # stores string input by the user + age = int(input("How old are you? ")) + is_student = input("Are you a student? (yes/no) ") + + # Converting user input to boolean + is_student = is_student.lower() == "yes" + + # Displaying values of variables + print("My name is", name) + print("I am", age, "years old") + print("I am a student:", is_student) + +The code snippet above demonstrates some basics abilities of Python to gather +data from the user, process it and print out back. Note the words starting with +a **#** (hash) symbol. This is a comment. Any sequence of characters after +the hash and till the line end are considered to be a comment. These are for +those people, who see the code and they are ignored by the interpreter. + +On the other hand each individual line is the instruction for the interpreter +to perform some action, like gather inputs, do math, store data in memory etc. From 95e8eed73ce7899e67e38427f5682ca0453e1be6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 05:34:31 +0200 Subject: [PATCH 255/689] Updated data types overview --- src/basics/datatypes.txt | 66 +++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 38 deletions(-) diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index df4c63c1b..6ac8e28e3 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -2,33 +2,11 @@ Data Types ******************************************************************************* -In programming data types is an important concept. Data may represent different -things. - Data may represent different things and require various operations available. -In programming data types is an important concept. Python has the following -data types built-in by default in these categories: - -:Text: - ``str`` - -:Numeric: - ``int``, ``float``, ``complex`` - -:Sequence: - ``list``, ``tuple``, ``range`` - -:Mapping: - ``dict`` - -:Set: - ``set``, ``frozenset`` - -:Boolean: - ``bool`` - -:None: - ``None`` +In programming data types is an important concept. For example **1984** may be +a number (``1984``), a text (``"1984``) or event a date. The data type +describes the operations, that are allowed for the data, like additions for +numbers or concatenation for text (e.g. ``1 + 2 -> 3``, ``"1" + "3" -> "13"``). Python uses dynamic typing. This means as a developer you should not declare a variable with its data type - the interpreter will do this for you. Other @@ -37,18 +15,30 @@ in Python is as easy as: .. code-block:: python - variable = "Hello World" # create variable of str type - -Casting -======= - -You may specify the data type of a variable with casting: - -.. code-block:: python - - x = str(3) # x will be '3' - y = int(3) # y will be 3 - z = float(3) # z will be 3.0 + script_name = "Circle area" # create a text variable + radius = 5 # create an integer variable + area = 2 * 3.14 * 5 ** 2 # create a floating-point variable + +Built-In Data Types +=================== + +Python has the following data types built-in: + +- Integers (``int``) +- Floating-point numbers (``float``) +- Complex numbers (``complex``) +- Booleans (``bool``) +- Strings (``str``) +- Bytes (``bytes``) +- Byte arrays (``bytearray``) +- Lists (``list``) +- Tuples (``tuple``) +- Sets (``set``) +- Frozen sets (``frozenset``) +- Dictionaries (``dict``) +- None (``NoneType``) + +Any one can use them without additional imports or packages installations. Text ==== From aa3fae444b522ef0cab48057104fd5712007daa9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 06:36:07 +0200 Subject: [PATCH 256/689] Updated strings: indexes, slices, immutable --- src/basics/datatypes.txt | 113 ++++++++++++++++++++++++++++++++------- 1 file changed, 93 insertions(+), 20 deletions(-) diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index 6ac8e28e3..5377cf63f 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -43,46 +43,109 @@ Any one can use them without additional imports or packages installations. Text ==== -Text data are stored as strings (``str`` data type) in Python. Strings are -surrounded by either single quotation marks, or double quotation marks. So -``'Python'`` is the same as ``"Python"``. To assign string to a variable: +Text data are stored as strings (``str`` data type) in Python. Any sequence of +letters, digits, punctuation marks and whitespace characters enclosed with +quotes is considered to be a string literal. Both single quotes (``'``) and +double quotes (``"``) can be used interchangeably to create a string in Python. .. code-block:: python - string = "string" - string = str("string") # declare using casting + variable = 'string' + variable = "string" + variable = str("string") # declare using built-in constructor + +Escaping +-------- + +In programming this is a process of using a special character to indicate that +the following character(s) should be treated differently from their literal +meaning. The common usage is to include a special character(s) within strings. +A **backslash** character is used to *escape* the following one. + +.. code-block:: python + :caption: Example of Escaping in Python + + # Escaping single quotes within a string + print('She said, "I\'m ready for the test!"') + + # Escaping double quotes within a string + print("He replied, \"I'll be there in a minute.\"") + + # Escaping backslash itself + print("Backslash \\ is a special character for escaping other characters") + + # Escaping a newline character + print("Hello\nworld") + + # Escaping a tab character + print("Name\tAge\tGender") + +Single quotes or double quotes +------------------------------ + +Don't care. Use any quote mark you like. A *string* is a sequence of characters +after the opening quote and till the closing one. You may use double quotes in +case a single quote is a part of the text (e.g. ``"It's a Serhii's document"``) +and vise versa (e.g. ``'The name of the ship was a "Billy of Tea"'``). It's +a good practice not to mess single and double quotes within one project. Just +keep using a chosen one character for all strings. Multiline strings ----------------- -You can assign a multiline string using three quotes: +You can assign a multiline string by using triple quotes: Both single quote +and double quote characters are available. .. code-block:: python variable = """Well, ye scrawny mate- set sails for riddle! Never love a lagoon.""" + variable = '''Hello + World''' -Single quotes or double quotes ------------------------------- - -Don't care. Use any quote mark you like. Remember the string is any characters -surrounded by the same quotes. So you are use single quotes if double quote -mark is the part of your string data and vice versa. It's not recommended to -mess various quote marks in the same project. +The same syntax is used to create docstring, which are a special case of string +usage. We will look on these in the future. Strings are subscriptable ------------------------- -Strings in Python are arrays of bytes representing unicode characters. This is -common for many programming languages. However Python does not have a data type -to represent a single character itself; a single character in Python is of -string type as well. You can get the character at a specific position in -a string. +.. note:: ``str`` is not the only one subscriptable data type in Python. + +This means you can access individual characters or slices within a string using +indexes. A string is a *sequence* of characters and each character within +a string has its own position - an *index*. Indexing starts at 0, so the first +character in a string is at index 0, the second one is at index 1, and so on. +Negative indexing is also possible, with -1 representing the last character in +a string, -2 representing the second-to-last character, and so on. Use square +brackets (``[]``) to access the index. + +.. code-block:: python + + variable = "Plank of a salty strength, endure the fortune!" + + variable[0] # P + variable[-4] # u + +You can also *slice* strings, this means to get a subsequence of characters. +The slice syntax consists of 3 digits: + +- the first one represent the index to start (inclusive), defaults to 0 +- the second one represent the index to stop (non-inclusive), defaults to + the length of the sequence +- the third one represents a step, defaults to 1 + +These numbers are separated within colon (``:``) and enclosed within square +brackets. Any slice digit may be omitted. .. code-block:: python + :caption: Sequence slicing + + variable = "0123456789" # a string of digits - text = "Plank of a salty strength, endure the fortune!" - character = text[10] + variable[0:10:1] # 0123456789 + variable[:10:2] # 02468 + variable[:-2] # 01234567 + variable[::-1] # 9876543210 Strings are iterable -------------------- @@ -95,6 +158,16 @@ a ``for`` loop: for character in "foobar": print(character) +Strings are immutable +--------------------- + +This means, you cannot change an individual character within a string. + +.. code-block:: python + + variable = "variable" + variable[0] = "V" # this action will cause an error + Integers ======== From 247b9b45b125422d8091467b1d8ad3393921ce8f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 07:36:05 +0200 Subject: [PATCH 257/689] Added string operations --- src/basics/datatypes.txt | 65 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt index 5377cf63f..14915fe97 100644 --- a/src/basics/datatypes.txt +++ b/src/basics/datatypes.txt @@ -106,6 +106,71 @@ and double quote characters are available. The same syntax is used to create docstring, which are a special case of string usage. We will look on these in the future. +Supported operations +-------------------- + +.. note:: This subsection describes only the most common operations. + +:Concatenation: + The ``+`` operator is used to concatenate (join) two or more strings. + + .. code-block:: python + + "Serhii" + " " + "Horodilov" # "Serhii Horodilov" + + On the other hand the ``join`` method concatenates a collection of strings, + which may be more efficient than using ``+``. + + .. code-block:: python + + " ".join(["Serhii", "Horodilov"]) # "Serhii Horodilov" + +:Repetition: + The ``*`` operator is used to repeat a string a specified number of times. + Only multipliers of the ``int`` type are allowed. + + .. code-block:: python + + "Serhii" * 5 # "SerhiiSerhiiSerhiiSerhiiSerhii" + +:Length: + The ``len`` function is used to find the length of a string. + + .. code-block:: python + + len("Serhii Horodilov") # 8 + +:Case conversion: + The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform + actions on case. + + ``lower`` creates a new string with all lower-case characters. + + ``upper`` creates a new string with all upper-case characters. + + ``capitalize`` creates a new string with the upper-case 1st character. + + ``title`` will make all characters after whitespace upper case. + + .. code-block:: python + + name = "serhii horodilov" + name.lower() # "serhii horodilov" + name.upper() # "SERHII HORODILOV" + name.capitalize() # "Serhii horodilov" + name.title() # "Serhii Horodilov" + +:Stripping: + The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove + leading and/or trailing whitespace characters. + + .. code-block:: python + + name = " Serhii Horodilov " + name.strip() # "Serhii Horodilov" + name.lstrip() # "Serhii Horodilov " + name.rstrip() # " Serhii Horodilov" + Strings are subscriptable ------------------------- From c0053489a5dca8b6ae57b48a56b8b89a1bcec839 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 03:04:33 +0200 Subject: [PATCH 258/689] Rebased 'feature/basics' onto 'devel' branch --- src/basics/index.txt | 1 + src/basics/stdtypes.txt | 113 ++++++++++++++++++++++++++++++++++++++++ src/refs.bib | 10 ++++ 3 files changed, 124 insertions(+) create mode 100644 src/basics/stdtypes.txt diff --git a/src/basics/index.txt b/src/basics/index.txt index df8f9a5e2..9f8a2b8a0 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -8,6 +8,7 @@ variables syntax datatypes + stdtypes controlflow functions modules diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt new file mode 100644 index 000000000..d4af9152a --- /dev/null +++ b/src/basics/stdtypes.txt @@ -0,0 +1,113 @@ +******************************************************************************* + Built-in Types +******************************************************************************* + +The principal built-in types are numerics, sequences, mappings, classes, +instances and exceptions :cite:`docs-python:stdtypes`. This section covers +only the most base of them. Others will be discussed in the future within +their own topics. + +Numeric types +============= + +There are 3 distinct numeric types: *integers*, *floating point numbers*, and +*complex numbers*. In addition, Booleans are a subtype of integers. Integers +have unlimited precision. Floating point numbers are usually implemented usign +``double`` in C. Complex numbers have a real and imaginary part, which are each +a floating point number. + +Numbers are created by numeric literals or as the result of built-in functions +and operators. Unadorned integer literals (including hex, octal and binary +numbers) yield integers. Numeric literals containing a decimal point or an +exponent sign yield floating point numbers. Appending ``j`` or ``J`` to a +numeric literal yields an imaginary number (a complex number with a zero real +part) which you can add to an integer or float to get a complex number with +real and imaginary parts. + +Supported operations +-------------------- + ++---------------------+-------------------------------------------------------+ +| Operation | Result | ++=====================+=======================================================+ +| ``x + y`` | sum of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x - y`` | difference of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x * y`` | product of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x / y`` | quotient of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x // y`` | floored quotient of *x* and *y* | ++---------------------+-------------------------------------------------------+ +| ``x % y`` | remainder of ``x / y`` | ++---------------------+-------------------------------------------------------+ +| ``-x`` | *x* negated | ++---------------------+-------------------------------------------------------+ +| ``+x`` | *y* unchanged | ++---------------------+-------------------------------------------------------+ +| ``abs(x)`` | absolute value or magnitude of *x* | ++---------------------+-------------------------------------------------------+ +| ``int(x)`` | *x* converted to integer | ++---------------------+-------------------------------------------------------+ +| ``float(x)`` | *x* converted to floating point | ++---------------------+-------------------------------------------------------+ +| ``complex(re, im)`` | a complex number with real part *re*, imaginary part | +| | *im*. *im* defaults to zero. | ++---------------------+-------------------------------------------------------+ +| ``divmod(x, y)`` | the pair ``(x // y, x % y)`` | ++---------------------+-------------------------------------------------------+ +| ``pow(x, y)`` | *x* to the power *y* | +| ``x ** y`` | | ++---------------------+-------------------------------------------------------+ + +.. note:: ``x // y`` also referred to as integer division. The resultant value + is a whole integer, through the result's type is not necessarily int. + The result is always rounded towards minus infinity: + ``1 // 2`` is ``0`` + +.. note:: ``float(x)`` also accepts the strings ``"nan"`` and ``"inf"`` with + an optional prefix "+" or "-" for :abbr:Nan(Not a Number) and + positive and negative infinity. + +Code examples +------------- + +.. code-block:: python + :caption: Integer numbers + + x = 42 + y = 24 + a = int(42) + b = int(42.24) + + result = x + y # for both int operands only + result = x - y # for both int operands only + result = x * y # for both int operands only + result = x // y # for any numeric operands + +.. code-block:: python + :caption: Floating point numbers + + x = 42. + y = .24 + z = 42.24 + a = float(42) + b = float(42.24) + + result = x + y # for any float operand + result = x - y # for any float operand + result = x * y # for any float operand + result = x / y # for any numeric operands + +Sequence types +============== + +Text sequence type +================== + +Set types +========= + +Mapping type +============ diff --git a/src/refs.bib b/src/refs.bib index 569696c29..446cc4a9d 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -2,6 +2,11 @@ Python training course bibliography database ******************************************************************************* +@misc{docs-python, + title = "{Python Documentation}", + url = {https://docs.python.org}, +} + @misc{realpython:py3-intro, title = "Intoduction to Python 3", author = "John Sturtz", @@ -57,3 +62,8 @@ @misc{docs-python:printf-formating title = "{Python Documentation}", url = {https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting}, } + +@misc{docs-python:stdtypes, + title = "{Python Documentation}", + url = {https://docs.python.org/library/stdtypes.html} +} From 8f516afc6d6a4a7a2d849ae10e1bbb08b2dce88c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:37:51 +0200 Subject: [PATCH 259/689] Added general sequence types description and operations --- src/basics/stdtypes.txt | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index d4af9152a..ecbf03019 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -103,6 +103,41 @@ Code examples Sequence types ============== +There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. +Additional sequence types tailored for processing of binary data and text +strings are described in dedicated sections. + +Common operations +----------------- + ++----------------------+------------------------------------------------------+ +| Operation | Result | ++======================+======================================================+ +| ``x in s`` | ``True`` if an item of *s* equal to *x* | +| ``x not in s`` | ``False`` if an item of *s* equal to *x* | ++----------------------+------------------------------------------------------+ +| ``s + t`` | the concatenation of *s* and *t* | ++----------------------+------------------------------------------------------+ +| ``s * n`` | equivalent to adding *s* to itself *n* times | ++----------------------+------------------------------------------------------+ +| ``s[i]`` | *i*-th item of *s*, origin 0 | ++----------------------+------------------------------------------------------+ +| ``s[i:j]`` | slice of *s* from *i* to *j* with step *k*. any of | +| ``s[i:j:k]`` | these (or even all 3) may be omitted. | ++----------------------+------------------------------------------------------+ +| ``len(s)`` | length of *s* | ++----------------------+------------------------------------------------------+ +| ``min(s)`` | smallest item of *s* | ++----------------------+------------------------------------------------------+ +| ``max(s)`` | largest item of *s* | ++----------------------+------------------------------------------------------+ +| ``s.count(x)`` | total number of occurrences of *x* in *s* | ++----------------------+------------------------------------------------------+ +| ``s.index(x)`` | index of the first occurrence of *x* in *s* | +| ``s.index(x, i)`` | (at or after index *i* and before index *j*) | +| ``s.index(x, i, j)`` | | ++----------------------+------------------------------------------------------+ + Text sequence type ================== From e7a5d8b4eed6af0262bffdf9b580690eb4cac6a5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:42:18 +0200 Subject: [PATCH 260/689] Updated numeric types with values comparison section --- src/basics/stdtypes.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index ecbf03019..0c8e3d5f3 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -100,6 +100,17 @@ Code examples result = x * y # for any float operand result = x / y # for any numeric operands +Value comparison +---------------- + +Numbers of built-in numeric types can be compared within and across their types +(with the restriction that complex numbers do not support order comparison). +Within the limits of the types involved, they compare mathematically correct +without loss of precision. + +The "not-a-number" values ``float("NaN")`` and ``decimal.Decimal('NaN')`` are +special. Any ordered comparison of a number to a not-a-number value is false. + Sequence types ============== From 1c80406164faebec815ccd7779056b5b2c8f43d5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:49:04 +0200 Subject: [PATCH 261/689] Updated sequences types with value comparison section --- src/basics/stdtypes.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 0c8e3d5f3..84496935b 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -149,6 +149,27 @@ Common operations | ``s.index(x, i, j)`` | | +----------------------+------------------------------------------------------+ +Value comparison +---------------- + +.. todo: make TypeError a link + +Sequences can be compared only within each of their types, with the restriction +that ranges do not support order comparison. Equality comparison across these +types results in inequality, and ordering comparison across these types raises +``TypeError``. + +Sequences compare lexicographically using comparison of corresponding elements. +The built-in containers typically assume identical objects are equal to +themselves. Lexicographical comparison between buit-in collections works as +follows: + +- For two collections to compare equal, they must be of the same type, have + the same length, and each pair of corresponding elements must compare equal. +- Collections that supports order comparison are ordered the same as their + first unequal elements. If corresponding element does not exist, the shorter + collection is ordered first. + Text sequence type ================== From 305b74e2d58fe2bf714ab2ba9c369200f7bb0327 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:54:25 +0200 Subject: [PATCH 262/689] Updated sets types with values comparison section --- src/basics/stdtypes.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 84496935b..ada85d26f 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -176,5 +176,14 @@ Text sequence type Set types ========= +Value comparison +---------------- + +Sets (instances of ``set`` or ``frozenset``) can be compared within and across +their types. They define order comparison operators to mean subset and superset +tests. Those relations do not define total ordering (e.g. two sets ``{1, 2}`` +and ``{2, 3}`` are not equal, nor subsets of one another, nor supersets of one +another). + Mapping type ============ From e6d5594749634a4f1475b3ea4119504f2856f226 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:55:37 +0200 Subject: [PATCH 263/689] Minor changes in subsection headings --- src/basics/stdtypes.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index ada85d26f..1bca07bff 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -100,8 +100,8 @@ Code examples result = x * y # for any float operand result = x / y # for any numeric operands -Value comparison ----------------- +Value comparisons +----------------- Numbers of built-in numeric types can be compared within and across their types (with the restriction that complex numbers do not support order comparison). @@ -149,8 +149,8 @@ Common operations | ``s.index(x, i, j)`` | | +----------------------+------------------------------------------------------+ -Value comparison ----------------- +Value comparisons +----------------- .. todo: make TypeError a link @@ -176,8 +176,8 @@ Text sequence type Set types ========= -Value comparison ----------------- +Value comparisons +----------------- Sets (instances of ``set`` or ``frozenset``) can be compared within and across their types. They define order comparison operators to mean subset and superset From 8d0d8339512320ba24f5cd8fec84f41fed6abc43 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 12 Mar 2023 23:59:58 +0200 Subject: [PATCH 264/689] Updated mapping type with value comparison section --- src/basics/stdtypes.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 1bca07bff..79887f9cc 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -187,3 +187,11 @@ another). Mapping type ============ + +Value comparisons +----------------- + +Instances of ``dict`` compare equal if and only if they have equal key-value +pairs. + +Order comparisons raise ``TypeError``. From a1a9fc06ef40870fb029f6ab74bd4f11f3982803 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 00:04:56 +0200 Subject: [PATCH 265/689] Update string type with value comparison section --- src/basics/stdtypes.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 79887f9cc..2ca9073e6 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -173,6 +173,12 @@ follows: Text sequence type ================== +Value comparisons +----------------- + +Strings compare lexicographically using the numerical Unicode code points of +their characters. + Set types ========= From 322bf5dac79223ac30299b1d644f0e40f6a4390e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:25:32 +0200 Subject: [PATCH 266/689] Added list operations --- src/basics/stdtypes.txt | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 2ca9073e6..b64a21c74 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -170,6 +170,47 @@ follows: first unequal elements. If corresponding element does not exist, the shorter collection is ordered first. +Mutable sequence types +---------------------- + ++--------------------+--------------------------------------------------------+ +| Operation | Result | ++====================+========================================================+ +| ``s[i] = x`` | item *i* of *s* is replaced by *x* | ++--------------------+--------------------------------------------------------+ +| ``s[i:j] = t`` | slice of *s* from *i* to *j* replaced by the contents | +| | of *t* | ++--------------------+--------------------------------------------------------+ +| ``del s[i:j]`` | same as ``s[i:j] = []`` | ++--------------------+--------------------------------------------------------+ +| ``s[i:j:k] = t`` | the elements of *s* are replaced by those of *t*[#]_ | ++--------------------+--------------------------------------------------------+ +| ``del s[i:j:k]`` | removes the elements of ``s[i:j:k]`` from the list | ++--------------------+--------------------------------------------------------+ +| ``s.append(x)`` | appends *x* to the end of the sequence; the same as | +| | ``s[len(s):len(s)] = [x]`` | ++--------------------+--------------------------------------------------------+ +| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#3.3]_ | ++--------------------+--------------------------------------------------------+ +| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#3.3]_ | ++--------------------+--------------------------------------------------------+ +| ``s.extend(t)`` | extends *s* with the contents of *t* | +| ``s += t`` | | ++--------------------+--------------------------------------------------------+ +| ``s.insert(i, x)`` | inserts *x* into *s* at the index *i*; same as | +| | ``s[i:i] = [x]`` | ++--------------------+--------------------------------------------------------+ +| ``s.pop()``, | retrieves the item at *i* and also removes it from *s* | +| ``s.pop(i)`` | (if *i* is omitted - use the last one available index) | ++--------------------+--------------------------------------------------------+ +| ``s.remove(x)`` | remove the first item that is equal to *x* from *s* | ++--------------------+--------------------------------------------------------+ +| ``s.reverse()`` | reverses the items of *s* in place | ++--------------------+--------------------------------------------------------+ + +.. [#] *t* must have the same length as the slice it is replacing +.. [#3.3] new in Python version 3.3 + Text sequence type ================== From a612d6b841819c5e426bd8bc998b684340fe3a41 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:37:59 +0200 Subject: [PATCH 267/689] Added list constructor --- src/basics/stdtypes.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index b64a21c74..9a75b08de 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -118,6 +118,17 @@ There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. Additional sequence types tailored for processing of binary data and text strings are described in dedicated sections. +Lists +----- + +Lists are mutable sequences, typically used to store collections of items. +They may be constructed in several ways: + +- using a pair of square brackets to denote the empty list: ``[]`` +- using square brackets, separating items with commas: ``[a]``, ``[a, b, c]`` +- using a list comprehension: ``[x for x in iterable]`` +- using the type constuctor: ``list()`` or ``list(iterable)`` + Common operations ----------------- From 75d51abc8714adf5f1c7ccfee9cd67db866aa382 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:42:32 +0200 Subject: [PATCH 268/689] Added tuple constructor --- src/basics/stdtypes.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 9a75b08de..e68c4f3f5 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -129,6 +129,19 @@ They may be constructed in several ways: - using a list comprehension: ``[x for x in iterable]`` - using the type constuctor: ``list()`` or ``list(iterable)`` +Tuples +------ + +Tuples are immutable sequences, typically used to store collections of data or +for cases where an immutable sequence of data is needed (such as allowing +storage in a ``set`` or ``dict`` instances). +They may be constructed in a number of ways: + +- using a pair of parentheses to denote the empty tuple: ``()`` +- using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)`` +- separating items with commas: ``a, b, c`` or ``(a, b, c)`` +- using the type constructor: ``tuple()`` or ``tuple(iterable)`` + Common operations ----------------- From 8e858324798546c3e2800832b94b938fea247d75 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 01:55:28 +0200 Subject: [PATCH 269/689] Added string methods placeholder --- src/basics/stdtypes.txt | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index e68c4f3f5..9a23c8daa 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -238,6 +238,51 @@ Mutable sequence types Text sequence type ================== +String methods +-------------- + +Strings implement all of the common sequence operations, along with the +additional methods. + +.. todo: methods to be described + str.capitalize() + str.center() + str.count() + str.encode() + str.endswith(suffix) + str.expandtabs(tabsize=8) + str.find(sub) + str.format() + str.index(sub) + str.isalnum() + srt.isalpha() + str.isascii() + str.isdecimal() + str.isdigit() + str.islower() + str.isnumeric() + str.isprintable() + str.isspace() + str.istitle() + str.isupper() + str.join() + str.ljust() + str.lower() + str.lstrip() + str.replace() + str.rfind() + str.rindex() + str.rjust() + str.rsplit() + str.rstrip() + str.split() + str.splitlines() + str.startswith(prefix) + str.strip() + str.swapcase() + str.title() + str.upper() + Value comparisons ----------------- From d86cb51fa19159146c8b87f9a801111927f2f034 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 13 Mar 2023 02:38:40 +0200 Subject: [PATCH 270/689] Added brief mapping type description --- src/basics/stdtypes.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 9a23c8daa..d513bf45c 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -304,6 +304,23 @@ another). Mapping type ============ +A mapping object maps hashable values to arbitrary objects. Mappings are +mutable objects. There is currently ony one standard mapping type, the +*dictionary*. In few words mappings are collections of keys and their values. + +A dictionary's keys are almost arbitrary values. Values that are not hashable +may not be used as keys. Values that compare equal (such as ``1``, ``1.0`` and +``True``) can be used interchangeably to index the same dictionary entry. + +Dictionaries can be created by several means: + +- Use braces to denote the empty dictionary: ``{}`` +- Use a comma-separated list of ``key: value`` pairs with braces: + ``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} +- Use a dict comprehension: `{x: x ** 2 for x in range(10)}`` +- Use the type constructor: ``dict()``, ``dict([('key', 100)])``, + ``dict(key=100)`` + Value comparisons ----------------- From 89b6d9b5cecc2b8774b385d3e93168d3c59cb6eb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 18 Mar 2023 00:44:50 +0200 Subject: [PATCH 271/689] Removed deprecated datatypes file Basis types are described within 'stdtypes.txt'. Fixed typos and references mistakes. --- src/appx/precedence.txt | 4 +- src/appx/printf.txt | 10 +- src/basics/datatypes.txt | 257 --------------------------------------- src/basics/index.txt | 1 - src/basics/stdtypes.txt | 18 +-- src/index.txt | 2 + src/refs.bib | 2 +- 7 files changed, 19 insertions(+), 275 deletions(-) delete mode 100644 src/basics/datatypes.txt diff --git a/src/appx/precedence.txt b/src/appx/precedence.txt index d88a0a8ee..5fce07b0a 100644 --- a/src/appx/precedence.txt +++ b/src/appx/precedence.txt @@ -27,12 +27,12 @@ same precedence (use left-to-right precedence). +------------------------+----------------------------------------------------+ | ``await x`` | Await expression | +------------------------+----------------------------------------------------+ -| ``**`` | Exponentiation[#]_ | +| ``**`` | Exponentiation [#]_ | +------------------------+----------------------------------------------------+ | ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT | +------------------------+----------------------------------------------------+ | ``*``, ``@``, ``/``, | Multiplication, matrix multiplication, division, | -| ``//``, ``%`` | floor division, remainder[#]_ | +| ``//``, ``%`` | floor division, remainder [#]_ | +------------------------+----------------------------------------------------+ | ``+``, ``-`` | Addition and subtraction | +------------------------+----------------------------------------------------+ diff --git a/src/appx/printf.txt b/src/appx/printf.txt index 5a7ea0f79..af9dda63b 100644 --- a/src/appx/printf.txt +++ b/src/appx/printf.txt @@ -8,10 +8,10 @@ String objects have one unique built-in operation: the ``%`` operator (modulo). This is also known as the string *formatting* or *interpolation* operator -:cite:`docs-python:printf-style`. Given ``format % values`` (where *format* is -a string), ``%`` conversion specifications in *format* are replaced with zero -or more elements of *values*. If *format* requires a single argument, *values* -may be a single non-tuple object. +:cite:`docs-python:printf-formatting`. Given ``format % values`` (where +*format* is a string), ``%`` conversion specifications in *format* are replaced +with zero or more elements of *values*. If *format* requires a single argument, +*values* may be a single non-tuple object. The conversion flag characters are: @@ -57,7 +57,7 @@ The conversion types are: +------------+----------------------------------------------------------------+ | ``'g'`` | Floating point format. Uses lowercase exponential format if | | | exponent is less that -4 or not less than precision, decimal | -| | format overwise. | +| | format otherwise. | | ``'G'`` | | +------------+----------------------------------------------------------------+ | ``'c'`` | Single character (accepts integer or single character string) | diff --git a/src/basics/datatypes.txt b/src/basics/datatypes.txt deleted file mode 100644 index 14915fe97..000000000 --- a/src/basics/datatypes.txt +++ /dev/null @@ -1,257 +0,0 @@ -******************************************************************************* - Data Types -******************************************************************************* - -Data may represent different things and require various operations available. -In programming data types is an important concept. For example **1984** may be -a number (``1984``), a text (``"1984``) or event a date. The data type -describes the operations, that are allowed for the data, like additions for -numbers or concatenation for text (e.g. ``1 + 2 -> 3``, ``"1" + "3" -> "13"``). - -Python uses dynamic typing. This means as a developer you should not declare -a variable with its data type - the interpreter will do this for you. Other -popular language using dynamic typing are JavaScript and PHP. Setting variables -in Python is as easy as: - -.. code-block:: python - - script_name = "Circle area" # create a text variable - radius = 5 # create an integer variable - area = 2 * 3.14 * 5 ** 2 # create a floating-point variable - -Built-In Data Types -=================== - -Python has the following data types built-in: - -- Integers (``int``) -- Floating-point numbers (``float``) -- Complex numbers (``complex``) -- Booleans (``bool``) -- Strings (``str``) -- Bytes (``bytes``) -- Byte arrays (``bytearray``) -- Lists (``list``) -- Tuples (``tuple``) -- Sets (``set``) -- Frozen sets (``frozenset``) -- Dictionaries (``dict``) -- None (``NoneType``) - -Any one can use them without additional imports or packages installations. - -Text -==== - -Text data are stored as strings (``str`` data type) in Python. Any sequence of -letters, digits, punctuation marks and whitespace characters enclosed with -quotes is considered to be a string literal. Both single quotes (``'``) and -double quotes (``"``) can be used interchangeably to create a string in Python. - -.. code-block:: python - - variable = 'string' - variable = "string" - variable = str("string") # declare using built-in constructor - -Escaping --------- - -In programming this is a process of using a special character to indicate that -the following character(s) should be treated differently from their literal -meaning. The common usage is to include a special character(s) within strings. -A **backslash** character is used to *escape* the following one. - -.. code-block:: python - :caption: Example of Escaping in Python - - # Escaping single quotes within a string - print('She said, "I\'m ready for the test!"') - - # Escaping double quotes within a string - print("He replied, \"I'll be there in a minute.\"") - - # Escaping backslash itself - print("Backslash \\ is a special character for escaping other characters") - - # Escaping a newline character - print("Hello\nworld") - - # Escaping a tab character - print("Name\tAge\tGender") - -Single quotes or double quotes ------------------------------- - -Don't care. Use any quote mark you like. A *string* is a sequence of characters -after the opening quote and till the closing one. You may use double quotes in -case a single quote is a part of the text (e.g. ``"It's a Serhii's document"``) -and vise versa (e.g. ``'The name of the ship was a "Billy of Tea"'``). It's -a good practice not to mess single and double quotes within one project. Just -keep using a chosen one character for all strings. - -Multiline strings ------------------ - -You can assign a multiline string by using triple quotes: Both single quote -and double quote characters are available. - -.. code-block:: python - - variable = """Well, ye scrawny mate- set sails for riddle! - Never love a lagoon.""" - variable = '''Hello - World''' - -The same syntax is used to create docstring, which are a special case of string -usage. We will look on these in the future. - -Supported operations --------------------- - -.. note:: This subsection describes only the most common operations. - -:Concatenation: - The ``+`` operator is used to concatenate (join) two or more strings. - - .. code-block:: python - - "Serhii" + " " + "Horodilov" # "Serhii Horodilov" - - On the other hand the ``join`` method concatenates a collection of strings, - which may be more efficient than using ``+``. - - .. code-block:: python - - " ".join(["Serhii", "Horodilov"]) # "Serhii Horodilov" - -:Repetition: - The ``*`` operator is used to repeat a string a specified number of times. - Only multipliers of the ``int`` type are allowed. - - .. code-block:: python - - "Serhii" * 5 # "SerhiiSerhiiSerhiiSerhiiSerhii" - -:Length: - The ``len`` function is used to find the length of a string. - - .. code-block:: python - - len("Serhii Horodilov") # 8 - -:Case conversion: - The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform - actions on case. - - ``lower`` creates a new string with all lower-case characters. - - ``upper`` creates a new string with all upper-case characters. - - ``capitalize`` creates a new string with the upper-case 1st character. - - ``title`` will make all characters after whitespace upper case. - - .. code-block:: python - - name = "serhii horodilov" - name.lower() # "serhii horodilov" - name.upper() # "SERHII HORODILOV" - name.capitalize() # "Serhii horodilov" - name.title() # "Serhii Horodilov" - -:Stripping: - The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove - leading and/or trailing whitespace characters. - - .. code-block:: python - - name = " Serhii Horodilov " - name.strip() # "Serhii Horodilov" - name.lstrip() # "Serhii Horodilov " - name.rstrip() # " Serhii Horodilov" - -Strings are subscriptable -------------------------- - -.. note:: ``str`` is not the only one subscriptable data type in Python. - -This means you can access individual characters or slices within a string using -indexes. A string is a *sequence* of characters and each character within -a string has its own position - an *index*. Indexing starts at 0, so the first -character in a string is at index 0, the second one is at index 1, and so on. -Negative indexing is also possible, with -1 representing the last character in -a string, -2 representing the second-to-last character, and so on. Use square -brackets (``[]``) to access the index. - -.. code-block:: python - - variable = "Plank of a salty strength, endure the fortune!" - - variable[0] # P - variable[-4] # u - -You can also *slice* strings, this means to get a subsequence of characters. -The slice syntax consists of 3 digits: - -- the first one represent the index to start (inclusive), defaults to 0 -- the second one represent the index to stop (non-inclusive), defaults to - the length of the sequence -- the third one represents a step, defaults to 1 - -These numbers are separated within colon (``:``) and enclosed within square -brackets. Any slice digit may be omitted. - -.. code-block:: python - :caption: Sequence slicing - - variable = "0123456789" # a string of digits - - variable[0:10:1] # 0123456789 - variable[:10:2] # 02468 - variable[:-2] # 01234567 - variable[::-1] # 9876543210 - -Strings are iterable --------------------- - -Since strings are arrays, we can loop through the characters in a string with -a ``for`` loop: - -.. code-block:: python - - for character in "foobar": - print(character) - -Strings are immutable ---------------------- - -This means, you cannot change an individual character within a string. - -.. code-block:: python - - variable = "variable" - variable[0] = "V" # this action will cause an error - -Integers -======== - -``int``, or integer, is a whole number, positive or negative, without decimals. - -.. code-block:: python - - integer_number = 42 - integer_number = int(42) # declare using casting - -Floats -====== - -``float``, or floating point number, is a number, positive or negative, -containing one or more decimals. - -.. code-block:: python - - float_number = 42. # will assign 42.0 - float_number = .42 # will assign 0.42 - float_number = 4.2 # will assign 4.2 - float_number = float(42) # declare using casting (42.0) diff --git a/src/basics/index.txt b/src/basics/index.txt index 9f8a2b8a0..468d9cc36 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -7,7 +7,6 @@ variables syntax - datatypes stdtypes controlflow functions diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index d513bf45c..bbabe1b9d 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -12,7 +12,7 @@ Numeric types There are 3 distinct numeric types: *integers*, *floating point numbers*, and *complex numbers*. In addition, Booleans are a subtype of integers. Integers -have unlimited precision. Floating point numbers are usually implemented usign +have unlimited precision. Floating point numbers are usually implemented using ``double`` in C. Complex numbers have a real and imaginary part, which are each a floating point number. @@ -127,7 +127,7 @@ They may be constructed in several ways: - using a pair of square brackets to denote the empty list: ``[]`` - using square brackets, separating items with commas: ``[a]``, ``[a, b, c]`` - using a list comprehension: ``[x for x in iterable]`` -- using the type constuctor: ``list()`` or ``list(iterable)`` +- using the type constructor: ``list()`` or ``list(iterable)`` Tuples ------ @@ -185,7 +185,7 @@ types results in inequality, and ordering comparison across these types raises Sequences compare lexicographically using comparison of corresponding elements. The built-in containers typically assume identical objects are equal to -themselves. Lexicographical comparison between buit-in collections works as +themselves. Lexicographical comparison between built-in collections works as follows: - For two collections to compare equal, they must be of the same type, have @@ -207,16 +207,16 @@ Mutable sequence types +--------------------+--------------------------------------------------------+ | ``del s[i:j]`` | same as ``s[i:j] = []`` | +--------------------+--------------------------------------------------------+ -| ``s[i:j:k] = t`` | the elements of *s* are replaced by those of *t*[#]_ | +| ``s[i:j:k] = t`` | the elements of *s* are replaced by those of *t* [#]_ | +--------------------+--------------------------------------------------------+ | ``del s[i:j:k]`` | removes the elements of ``s[i:j:k]`` from the list | +--------------------+--------------------------------------------------------+ | ``s.append(x)`` | appends *x* to the end of the sequence; the same as | | | ``s[len(s):len(s)] = [x]`` | +--------------------+--------------------------------------------------------+ -| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#3.3]_ | +| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#new]_ | +--------------------+--------------------------------------------------------+ -| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#3.3]_ | +| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#new]_ | +--------------------+--------------------------------------------------------+ | ``s.extend(t)`` | extends *s* with the contents of *t* | | ``s += t`` | | @@ -233,7 +233,7 @@ Mutable sequence types +--------------------+--------------------------------------------------------+ .. [#] *t* must have the same length as the slice it is replacing -.. [#3.3] new in Python version 3.3 +.. [#new] new in Python version 3.3 Text sequence type ================== @@ -316,8 +316,8 @@ Dictionaries can be created by several means: - Use braces to denote the empty dictionary: ``{}`` - Use a comma-separated list of ``key: value`` pairs with braces: - ``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} -- Use a dict comprehension: `{x: x ** 2 for x in range(10)}`` + ``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}`` +- Use a dict comprehension: ``{x: x ** 2 for x in range(10)}`` - Use the type constructor: ``dict()``, ``dict([('key', 100)])``, ``dict(key=100)`` diff --git a/src/index.txt b/src/index.txt index a0fbf68e3..8da277c3e 100644 --- a/src/index.txt +++ b/src/index.txt @@ -25,6 +25,8 @@ appx/software_list appx/code_edit appx/env_path + appx/precedence + appx/printf .. rubric:: References diff --git a/src/refs.bib b/src/refs.bib index 446cc4a9d..de0048798 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -58,7 +58,7 @@ @misc{docs-python:operator-precedence url = {https://docs.python.org/3/reference/expressions.html#operator-precedence}, } -@misc{docs-python:printf-formating, +@misc{docs-python:printf-formatting, title = "{Python Documentation}", url = {https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting}, } From 6e898b3b2db6bf7923aad6e9c2704f2d502e1419 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Mar 2023 17:34:30 +0200 Subject: [PATCH 272/689] Fixed "stdtypes" footnotes Signed-off-by: Serhii Horodilov --- src/basics/stdtypes.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index bbabe1b9d..46f69fe30 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -214,9 +214,9 @@ Mutable sequence types | ``s.append(x)`` | appends *x* to the end of the sequence; the same as | | | ``s[len(s):len(s)] = [x]`` | +--------------------+--------------------------------------------------------+ -| ``s.clear()`` | removes all items from *s* (``del s[:]``)[#new]_ | +| ``s.clear()`` | removes all items from *s* (``del s[:]``) [#py33]_ | +--------------------+--------------------------------------------------------+ -| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``)[#new]_ | +| ``s.copy()`` | creates a shallow copy of *s* (``s[:]``) [#py33]_ | +--------------------+--------------------------------------------------------+ | ``s.extend(t)`` | extends *s* with the contents of *t* | | ``s += t`` | | @@ -232,8 +232,8 @@ Mutable sequence types | ``s.reverse()`` | reverses the items of *s* in place | +--------------------+--------------------------------------------------------+ -.. [#] *t* must have the same length as the slice it is replacing -.. [#new] new in Python version 3.3 +.. [#] *t* must have the same length as the slice it is replacing +.. [#py33] new in Python version 3.3 Text sequence type ================== From 0071c262899c146eed396c1873489bef2a868fce Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 04:11:32 +0200 Subject: [PATCH 273/689] DB - Aggregate functions Signed-off-by: Serhii Horodilov --- assets/img/aggregate-function.svg | 78 +++++++++++++++++ assets/sql/products.pg13-1.dump.sql | 103 ++++++++++++++++++++++ src/rdbms/aggregation.txt | 127 ++++++++++++++++++++++++++++ src/rdbms/index.txt | 20 +++++ src/rdbms/products_table.csv | 11 +++ 5 files changed, 339 insertions(+) create mode 100644 assets/img/aggregate-function.svg create mode 100644 assets/sql/products.pg13-1.dump.sql create mode 100644 src/rdbms/aggregation.txt create mode 100644 src/rdbms/products_table.csv diff --git a/assets/img/aggregate-function.svg b/assets/img/aggregate-function.svg new file mode 100644 index 000000000..f1cae6e44 --- /dev/null +++ b/assets/img/aggregate-function.svg @@ -0,0 +1,78 @@ + + + + + + + aggregate-func + + + + ( + + + + + + DISTINCT + + + + + + + + expr + + + + ) + + + + filter-clause + + + + + + + + + + + + + , + + + + + + * + + + + + + + + + diff --git a/assets/sql/products.pg13-1.dump.sql b/assets/sql/products.pg13-1.dump.sql new file mode 100644 index 000000000..b7ff37b33 --- /dev/null +++ b/assets/sql/products.pg13-1.dump.sql @@ -0,0 +1,103 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 13.1 (Debian 13.1-1.pgdg100+1) +-- Dumped by pg_dump version 14.5 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: product; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.product ( + id integer NOT NULL, + name text NOT NULL, + price integer NOT NULL, + category text NOT NULL, + sold integer NOT NULL +); + + +ALTER TABLE public.product OWNER TO postgres; + +-- +-- Name: product_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.product_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.product_id_seq OWNER TO postgres; + +-- +-- Name: product_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.product_id_seq OWNED BY public.product.id; + + +-- +-- Name: product id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.product ALTER COLUMN id SET DEFAULT nextval('public.product_id_seq'::regclass); + + +-- +-- Data for Name: product; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY public.product (id, name, price, category, sold) FROM stdin; +1 Samsung Galaxy 100000 Phones 500 +2 iPhone 13 Pro 120000 Phones 300 +3 MacBook Pro 350000 Laptops 100 +4 Lenovo ThinkPad 150000 Laptops 200 +5 HP Printer 20000 Printers 800 +6 Dell Monitor 50000 Monitors 400 +7 Sony Headphones 30000 Audio 0 +8 Bose Soundbar 70000 Audio 0 +9 Xbox Series X 60000 Gaming 250 +10 PlayStation 5 55000 Gaming 350 +\. + + +-- +-- Name: product_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.product_id_seq', 10, true); + + +-- +-- Name: product product_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.product + ADD CONSTRAINT product_pkey PRIMARY KEY (id); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt new file mode 100644 index 000000000..fd23691f6 --- /dev/null +++ b/src/rdbms/aggregation.txt @@ -0,0 +1,127 @@ +******************************************************************************* + Data Aggregation +******************************************************************************* + +Here is some dummy data, that will be used as example in this section. + +.. csv-table:: product + :align: center + :file: products_table.csv + :header-rows: 1 + +.. only:: builder_html + + The same dataset is available as: + + - :download:`csv file <./products_table.csv>` + - :download:`postgres dump file ` + +Aggregate functions +=================== + +*Aggregate functions* compute a single result from a set of input values. +Various RDBMS implement various built-in aggregate functions. In this section +we will review 5 basic functions that are available in all RDBMS. + +.. image:: /../assets/img/aggregate-function.svg + +Count +----- + +The ``count(field)`` function returns a count of the number of times that +``field`` is not ``NULL`` in a group. +The ``count(*)`` function (with no arguments) returns the total number of rows +in the group. + +.. code-block:: sql + + SELECT count(*) as "total products" FROM product; + +:: + + total_products + ---------------- + 10 + +Maximum value +------------- + +The ``max()`` aggregate function returns the maximum value of all values in +the group. The maximum value is the value that would be returned last in +an ORDER BY on the same column. +Aggregate function returns ``NULL`` if and only if there are no non-NULL values +in the group. + +.. code-block:: sql + + SELECT max(price) as "maximum price" FROM product; + +:: + + maximum price +--------------- + 350000 + +Minimum value +------------- + +The ``min()`` aggregate function returns the minimum non-NULL value of all +values in the group. The minimum value is the first non-NULL value that would +appear in an ORDER BY of the column. +Aggregate function returns ``NULL`` if and only if there are no non-NULL values +in the group. + +.. code-block:: sql + + SELECT min(price) as "minimum price" FROM product; + +:: + + minimum price +--------------- + 20000 + +Average value +------------- + +The ``avg()`` function returns the average value of all non-NULL inputs within +a group. String and BLOB values that do not look like numbers are interpreted +as 0. The result is always a floating point value whenever there is at least +one non-NULL input even if all inputs are integers. +The result is ``NULL`` if and only if there are no non-NULL inputs. + +.. code-block:: sql + + SELECT avg(price) as "average price" FROM product; + +:: + + average price + --------------------- + 100500.000000000000 + + +Sum of values +------------- + +The ``sum()`` aggregate functions return the sum of all non-NULL values in +the group. +If there are no non-NULL input rows then function returns ``NULL``. + +.. note:: + NULL is not normally a helpful result for the sum of no rows but + the SQL standard requires it. + + SQLite implements ``total`` aggregate function, that is similar to + ``sum``, but returns ``0.0`` (always floating point) if there are + no non-NULL input rows. + +.. code-block:: sql + + SELECT sum(sold) as "total sold items" FROM product; + +:: + + total sold items + ------------------ + 3750 diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index d9bcfbed7..5b7ae7612 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -2,5 +2,25 @@ Relational Database ############################################################################### +:abbr:`RDBMS (Relational Database Management System)` is a type of software +that helps users to create, update, manage, and access relational databases. +Relational databases organize data into tables, which consist of rows and +columns. Each column represents a specific attribute of the data, while each +row represents a specific instance of that data. + +RDBMS allow users to interact with the database using +:abbr:`SQL (Structured Query Language)`, which is a standard language for +managing and manipulating relational databases. SQL allows users to perform +a variety of operations on the database, including adding, updating, and +deleting data, as well as retrieving data based on specific criteria. + +RDBMS also provide a range of features to ensure data integrity, such as +enforcing data constraints, supporting transactions, and providing backup +and recovery capabilities. Additionally, RDBMS systems often provide tools +for managing the database, such as user interfaces for creating and modifying +tables and views, and monitoring tools for optimizing database performance. + .. toctree:: :name: rdbms + + aggregation diff --git a/src/rdbms/products_table.csv b/src/rdbms/products_table.csv new file mode 100644 index 000000000..4e4549145 --- /dev/null +++ b/src/rdbms/products_table.csv @@ -0,0 +1,11 @@ +id,name,price,category,sold +1,"Samsung Galaxy",100000,Phones,500 +2,"iPhone 13 Pro",120000,Phones,300 +3,"MacBook Pro",350000,Laptops,100 +4,"Lenovo ThinkPad",150000,Laptops,200 +5,"HP Printer",20000,Printers,800 +6,"Dell Monitor",50000,Monitors,400 +7,"Sony Headphones",30000,Audio,0 +8,"Bose Soundbar",70000,Audio,0 +9,"Xbox Series X",60000,Gaming,250 +10,"PlayStation 5",55000,Gaming,350 From d29ea3e0ffa399975ba7f47c209c29c8cc8a9475 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 05:18:55 +0200 Subject: [PATCH 274/689] DB - Group by and having Signed-off-by: Serhii Horodilov --- src/rdbms/aggregation.txt | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index fd23691f6..ea4fedf04 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -125,3 +125,100 @@ If there are no non-NULL input rows then function returns ``NULL``. total sold items ------------------ 3750 + +Grouping data +============= + +Getting some aggregated values is not very helpful itself. Most cases require +to group outputs in some specific manner. + +For example, if the task is to count number of registered categories it is +simple to solve as: + +.. code-block:: + + SELECT count(DISTINCT category) FROM product; + +:: + + count + ------- + 6 + +But in case, the task is to count **sold** items for each category, this +becomes impossible to solve without grouping items. ``GROUP BY`` clause +provides the ability to group rows based on some field(s) values. + +General syntax is: + +:: + + SELECT select_list + FROM ... + [WHERE ...] + GROUP BY grouping_column_reference [, grouping_column_reference]... + +.. code-block:: + + SELECT category, sum(sold) as sold FROM product GROUP BY category; + +.. table:: + :align: center + + ======== ==== + category sold + ======== ==== + Audio 0 + Printers 800 + Gaming 600 + Monitors 400 + Laptops 300 + Phones 800 + ======== ==== + +If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` clause, +then each of the expressions specified as part of the GROUP BY clause is +evaluated for each row of the dataset according to the processing rules stated +below for ORDER BY expressions. Each row is then assigned to a "group" based on +the results; rows for which the results of evaluating the GROUP BY expressions +are the same get assigned to the same group. For the purposes of grouping rows, +``NULL`` values are considered equal. The usual rules for selecting a collation +sequence with which to compare text values apply when evaluating expressions in +a GROUP BY clause. The expressions in the GROUP BY clause do not have to be +expressions that appear in the result. The expressions in a GROUP BY clause may +not be aggregate expressions. + +Having clause +------------- + +But what, if the task is to filter categories, that have less than 500 sold +items in it? ``WHERE`` clause will be useless, cause it's evaluated before +grouping output. In other words, only rows that suite WHERE filter will be +selected. + +.. code-block:: sql + + SELECT category, sum(sold) as sold + FROM product + GROUP BY category + HAVING sum(sold) < 500; + +.. table:: + :align: center + + ======== ==== + category sold + ======== ==== + Audio 0 + Monitors 400 + Laptops 300 + ======== ==== + +If a ``HAVING`` clause is specified, it is evaluated once for each group of +rows as a boolean expression. If the result of evaluating the HAVING clause is +false, the group is discarded. If the HAVING clause is an aggregate expression, +it is evaluated across all rows in the group. + +If a HAVING clause is a non-aggregate expression, it is evaluated with respect +to an arbitrarily selected row from the group. The HAVING expression may refer +to values, even aggregate functions, that are not in the result. From 4712c56b3449d20287ee4fdb8b167c5460d69fa4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 27 Mar 2023 17:26:54 +0300 Subject: [PATCH 275/689] Rebased onto 'devel' branch and resolved conflicts Signed-off-by: Serhii Horodilov # Conflicts: # poetry.lock # requirements.txt --- poetry.lock | 256 +++++++++++++++++------------------- pyproject.toml | 1 + requirements.txt | 18 +-- src/conf.py | 1 + src/rdbms/index.txt | 1 + src/rdbms/normalization.txt | 142 ++++++++++++++++++++ 6 files changed, 274 insertions(+), 145 deletions(-) create mode 100644 src/rdbms/normalization.txt diff --git a/poetry.lock b/poetry.lock index 3cba978bf..7a858d484 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,19 +14,16 @@ files = [ [[package]] name = "babel" -version = "2.11.0" +version = "2.12.1" description = "Internationalization utilities" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] -[package.dependencies] -pytz = ">=2015.7" - [[package]] name = "certifi" version = "2022.12.7" @@ -41,100 +38,87 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.0.1" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = "*" -files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] [[package]] @@ -202,14 +186,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.0.0" +version = "6.1.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, + {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, + {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, ] [package.dependencies] @@ -255,24 +239,24 @@ six = ">=1.4.1" [[package]] name = "markdown-it-py" -version = "2.1.0" +version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, - {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, + {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, + {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, ] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] -code-style = ["pre-commit (==2.6)"] -compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] @@ -460,18 +444,6 @@ files = [ [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pytz" -version = "2022.7.1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, -] - [[package]] name = "pyyaml" version = "6.0" @@ -715,14 +687,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.0" +version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, ] [package.extras] @@ -731,18 +703,18 @@ test = ["html5lib", "pytest"] [[package]] name = "sphinxcontrib-jquery" -version = "2.0.0" +version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" category = "main" optional = false python-versions = ">=2.7" files = [ - {file = "sphinxcontrib-jquery-2.0.0.tar.gz", hash = "sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa"}, - {file = "sphinxcontrib_jquery-2.0.0-py3-none-any.whl", hash = "sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995"}, + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, ] [package.dependencies] -setuptools = "*" +Sphinx = ">=1.8" [[package]] name = "sphinxcontrib-jsmath" @@ -759,6 +731,18 @@ files = [ [package.extras] test = ["flake8", "mypy", "pytest"] +[[package]] +name = "sphinxcontrib-mermaid" +version = "0.8.1" +description = "Mermaid diagrams in yours Sphinx powered docs" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinxcontrib-mermaid-0.8.1.tar.gz", hash = "sha256:fa3e5325d4ba395336e6137d113f55026b1a03ccd115dc54113d1d871a580466"}, + {file = "sphinxcontrib_mermaid-0.8.1-py3-none-any.whl", hash = "sha256:15491c24ec78cf1626b1e79e797a9ce87cb7959cf38f955eb72dd5512aeb6ce9"}, +] + [[package]] name = "sphinxcontrib-qthelp" version = "1.0.3" @@ -793,14 +777,14 @@ test = ["pytest"] [[package]] name = "urllib3" -version = "1.26.14" +version = "1.26.15" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, ] [package.extras] @@ -810,21 +794,21 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "zipp" -version = "3.12.0" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.12.0-py3-none-any.whl", hash = "sha256:9eb0a4c5feab9b08871db0d672745b53450d7f26992fd1e4653aa43345e97b86"}, - {file = "zipp-3.12.0.tar.gz", hash = "sha256:73efd63936398aac78fd92b6f4865190119d6c91b531532e798977ea8dd402eb"}, + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "8cd52ebd6491a532634639dcece042cb9d8dade3b412c454cabd4d6852f55c6f" +content-hash = "1a2e7b2d16a856baa85023359e142ff950911a5a26e41614c462053ddca4a8dd" diff --git a/pyproject.toml b/pyproject.toml index b6fe31691..36544b23c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ sphinx-intl = "^2.1.0" sphinx-rtd-theme = "^1.2.0" myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" +sphinxcontrib-mermaid = "^0.8.1" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index 65b689912..1cb4a09e6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,16 +1,16 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.11.0 ; python_version >= "3.9" and python_version < "4.0" +babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4" -charset-normalizer==3.0.1 ; python_version >= "3.9" and python_version < "4" +charset-normalizer==3.1.0 ; python_version >= "3.9" and python_version < "4" click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.4 ; python_version >= "3.9" and python_version < "4" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.0.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==6.1.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" -markdown-it-py==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" @@ -19,7 +19,6 @@ packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" -pytz==2022.7.1 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" requests==2.28.2 ; python_version >= "3.9" and python_version < "4" setuptools==67.6.0 ; python_version >= "3.9" and python_version < "4.0" @@ -31,10 +30,11 @@ sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-jquery==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" -urllib3==1.26.14 ; python_version >= "3.9" and python_version < "4" -zipp==3.12.0 ; python_version >= "3.9" and python_version < "3.10" +urllib3==1.26.15 ; python_version >= "3.9" and python_version < "4" +zipp==3.15.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/src/conf.py b/src/conf.py index 1020d144e..4060685b5 100644 --- a/src/conf.py +++ b/src/conf.py @@ -23,6 +23,7 @@ "sphinx.ext.imgconverter", "sphinxcontrib.bibtex", + "sphinxcontrib.mermaid", "sphinx_rtd_theme", "myst_parser", ] diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 5b7ae7612..c6929e386 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -24,3 +24,4 @@ tables and views, and monitoring tools for optimizing database performance. :name: rdbms aggregation + normalization diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt new file mode 100644 index 000000000..3affcaa67 --- /dev/null +++ b/src/rdbms/normalization.txt @@ -0,0 +1,142 @@ +******************************************************************************* + Database Normalization +******************************************************************************* + +Normalization is a process of organizing data in a database so that it is free +from redundancy and dependency. It helps to eliminate data inconsistencies and +anomalies, thereby improving data integrity. Normalization is a set of rules or +guidelines to design a database schema in such a way that it avoids data +duplication, data redundancy, and data inconsistency. + +There are several normal forms, each building on the previous one, which guide +us in the normalization process. The most commonly used normal forms are: + +- **First Normal Form (1NF)**: + Each column should hold atomic (indivisible) values. + There should be no repeating groups or arrays of data in a table. +- **Second Normal Form (2NF)**: + Each non-key column should be functionally dependent on the entire primary + key. In other words, every column in a table should be related to + the primary key and not dependent on any other non-key columns. +- **Third Normal Form (3NF)**: + All non-key columns should be dependent only on the primary key and not on + any other non-key columns. This eliminates transitive dependencies. + +Normalization reduces data redundancy and dependency, making the database more +efficient, flexible, and scalable. It also helps in maintaining data +consistency and accuracy, and ensures that updates and deletions are properly +handled. + +First normal form (1NF) +======================= + +It's easier to understand normalization via examples. +Let's start with some dummy orders data. + +.. csv-table:: Initial data + :header-rows: 1 + + order,customer,product,quantity,price,total + 1,"John Doe","(Apple, Orange)","(2, 3)","(100, 50)","(200, 150)" + 2,"Jane Smith","Banana",4,25,100 + +This table violates 1NF, since its columns contain multiple values. To bring +this to 1NF all data within the table are to be atomic. + +.. csv-table:: 1NF applied + :header-rows: 1 + + order,customer,product,quantity,price,total + 1,"John Doe","Apple",2,100 ,200 + 2,"John Doe","Orange",3,50 ,150 + 3,"Jane Smith","Banana",4,25,100 + +From now each peace of data is represented as atomic value. + +Second normal form (2NF) +======================== + +The table above is in 1NF, but ``item price`` is dependent on the *item* entity +itself and have low cohesion to *orders*. To bring it into 2NF a dedicated +table to store information about items themselves is to be created. After that +``order`` and ``product`` table are connected (related) to each other via a +foreign key. + +.. csv-table:: ``order`` table + :header-rows: 1 + + id, customer, product_id, quantity + 1, "John Doe", 1, 2 + 2, "John Doe", 2, 3 + 3, "Jane Smith", 3, 4 + +.. csv-table:: ``product`` table + :header-rows: 1 + + id, product, price + 1, "Apple", 100 + 2, "Orange", 50 + 3, "Banana", 25 + +.. mermaid:: + :align: center + + erDiagram + ORDER ||--|{ PRODUCT : contains + ORDER { + int id pk + string customer + int product_id fk + int quantity + } + PRODUCT { + int id pk + string name + int price + } + +.. note:: ``total`` field is also removed, since now it can be calculated + as product of ``product.price`` and ``order.quantity``. + +Third normal form (3NF) +======================= + +At last it's time to remove a transitive functional dependency. Customer's name +is not actually dependent on a product, but on a person, who places an order. + +.. csv-table:: ``order`` table + :header-rows: 1 + + id, customer_id, product_id, quantity + 1, 1, 1, 2 + 2, 1, 2, 3 + 3, 2, 3, 4 + +.. csv-table:: ``customer`` table + :header-rows: 1 + + id, customer + 1, "John Doe" + 3, "Jane Smith" + +.. mermaid:: + :align: center + + erDiagram + CUSTOMER }o--|| ORDER : places + ORDER ||--|{ PRODUCT : contains + ORDER { + int id pk + int customer_id fk + int product_id fk + int quantity + } + PRODUCT { + int id pk + string name + int price + } + CUSTOMER { + int id pk + string name + } From 9dc6d6d333d199fdecc7790e446aaae0e5479335 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 08:25:29 +0200 Subject: [PATCH 276/689] DB - Relationships Signed-off-by: Serhii Horodilov --- src/rdbms/index.txt | 1 + src/rdbms/relations.txt | 130 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 src/rdbms/relations.txt diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index c6929e386..337ec1331 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -24,4 +24,5 @@ tables and views, and monitoring tools for optimizing database performance. :name: rdbms aggregation + relations normalization diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt new file mode 100644 index 000000000..b4d4a6053 --- /dev/null +++ b/src/rdbms/relations.txt @@ -0,0 +1,130 @@ +******************************************************************************* + Data Relationships +******************************************************************************* + +It's time to talk about **data relations**. + +For example your database contains two tables: ``weather`` and ``city``. The +diagram below demonstrates the overall data structure: + +.. mermaid:: + :align: center + + erDiagram + weather { + string city + int temp_lo + int temp_hi + date date + } + city { + string name + point location + } + +Consider the following problem: you want to make sure no one can insert +a record into ``weather`` without a matching entry in ``city`` table. +This is called maintaining the *referential integrity* of your data. +In simplistic database systems this would be implemented (if at all) by first +looking at the cities table to check if a matching record exists, and then +inserting or rejecting the new weather records. This approach has a number of +problems and is very inconvenient. + +.. code-block:: sql + + CREATE TABLE city ( + name varchar(80) primary key, + location point + ); + + CREATE TABLE weather ( + city varchar(80) references cities(name), + temp_lo int, + temp_hi int, + date date + ); + +This declaration creates a relationship between two (or even more) tables. + +Foreign key (FK) +=========== + +So far, you have knowledge about **primary** keys. +The **foreign** key is a column, that *references* some another table. +In common, it's a reference to another table's PK; but there is no limitation +of this kind, any column can be referenced by another one. +FKs handle data integrity only, it's not required for FK to be non-NULL value. + +The relation's properties are described by CONSTRAINTS and the database's +structure. + +For example, modifying declaration with ``NOT NULL`` constraint grants +that each record within a table has a matching one entity in another table. + +.. code-block:: sql + + CREATE TABLE weather ( + city varchar(80) references cities(name) NOT NULL, + ... + ); + +This brings us to various relationship models. + +One-to-many relationship (1-to-N) +------------------------ + +This is the most common relationship. + +For the example above there are no limitations on temperature measurements in +a specified city. So, a single city may has 0 or N related records in +``weather`` table. But each weather record is related to the only one city. + +Another example is employees and office buildings they work in. Some big +company may have multiple offices and employee across the globe. +Multiple employees can be present in a single office building at a time. +But each employee can be physically located only in a single office at a time. + +.. mermaid:: + + erDiagram + employee }o--|| office : located + employee { + int id + string first_name + string last_name + email email + int office_id fk + } + office { + int id + point location + text address + } + +One-to-one relationship (1-to-1) +----------------------- + +``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is +and only one matching record. Back to the example with employees. Multiple +workstations (personal computers) are located in each office building. +The only one person can occupy the only one work station at a time. + +.. mermaid:: + + erDiagram + employee ||--|| work_station : occupies + +Many-to-many relationship (N-to-N) +------------------------- + +These relationships require additional table. +A good example may be a *project role*. There are many of them in a production +team. And some employees may be assigned to the same role (e.g. developers, +testers etc.). But also a single person can be a developer and tester at +a time. + +.. mermaid:: + + erDiagram + employee }o--|{ employee_role : execute + role }o--|{ employee_role : assign From af905475060e79c771aea5c55574485d2b67f2be Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Mar 2023 09:21:19 +0200 Subject: [PATCH 277/689] DB - Joins Signed-off-by: Serhii Horodilov --- src/rdbms/relations.txt | 234 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index b4d4a6053..ebdfcfb2c 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -128,3 +128,237 @@ a time. erDiagram employee }o--|{ employee_role : execute role }o--|{ employee_role : assign + +Joining data +============ + +``JOIN`` is used to *join* data fetched from multiple related tables. +To build a valid query you are to set the tables to join and parameter to use +for this operation. + +Common syntax is: + +:: + + T1 join_type T2 [ join_condition ] + +There are various join types available. +Here are is some dummy data to demonstrate their purpose. + +.. table:: poem + + +----+------------------------+-----------+ + | id | title | author_id | + +====+========================+===========+ + | 1 | On the Field of Battle | 1 | + +----+------------------------+-----------+ + | 2 | Moses | 2 | + +----+------------------------+-----------+ + | 3 | The Forest Song | 1 | + +----+------------------------+-----------+ + | 4 | In the Catacombs | null | + +----+------------------------+-----------+ + | 5 | The Singing Stones | 1 | + +----+------------------------+-----------+ + | 6 | Ancient Fairy Tales | null | + +----+------------------------+-----------+ + | 7 | My Thoughts | 2 | + +----+------------------------+-----------+ + | 8 | To Shevchenko | null | + +----+------------------------+-----------+ + + +.. table:: author + + +----+---------------+ + | id | name | + +====+===============+ + | 1 | Larysa Kosach | + +----+---------------+ + | 2 | Ivan Franko | + +----+---------------+ + | 3 | John Doe | + +----+---------------+ + +.. code-block:: sql + + CREATE TABLE author + ( + id SERIAL PRIMARY KEY, + name VARCHAR(32) NOT NULL UNIQUE + ); + CREATE TABLE poem + ( + id SERIAL PRIMARY KEY, + title VARCHAR(32) NOT NULL UNIQUE, + author_id INT REFERENCES author (id) + ); + INSERT INTO author(name) + VALUES ('Larysa Kosach'), + ('Ivan Franko'), + ('John Doe'); + INSERT INTO poem(title, author_id) + VALUES ('On the Field of Battle', 1), + ('Moses', 2), + ('The Forest Song', 1), + ('In the Catacombs', null), + ('The Singing Stones', 1), + ('Ancient Fairy Tales', null), + ('My Thoughts', 2), + ('To Shevchenko', null) + ; + +Join types +---------- + +:Cross join: + + .. code-block:: + + T1 CROSS JOIN T2 + + For every possible combination of rows from T1 and T2 + (i.e., a Cartesian product), the joined table will contain a row consisting + of all columns in T1 followed by all columns in T2. If the tables have N + and M rows respectively, the joined table will have N * M rows. + +:Qualified joins: + + .. code-block:: + + T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON condition + + The words ``INNER`` and ``OUTER`` are optional for all forms. + ``INNER`` is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` + join. + +INNER JOIN +---------- + +For each row R1 of T1, the joined table has a row for each row in T2 that +satisfies the join condition with R1. + +.. code-block:: sql + :caption: Inner join + + SELECT p.title, a.name + FROM poem p + JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ + +LEFT OUTER JOIN +--------------- + +First, an inner join is performed. Then, for each row in T1 that does not +satisfy the join condition with any row in T2, a joined row is added with null +values in columns of T2. Thus, the joined table always has at least one row for +each row in T1. + +.. code-block:: sql + :caption: Left join + + SELECT p.title, a.name + FROM poem p + LEFT JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| In the Catacombs | null | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| Ancient Fairy Tales | null | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ +| To Shevchenko | null | ++------------------------+---------------+ + +RIGHT OUTER JOIN +---------------- + +First, an inner join is performed. Then, for each row in T2 that does not +satisfy the join condition with any row in T1, a joined row is added with +null values in columns of T1. This is the converse of a left join: the result +table will always have a row for each row in T2. + +.. code-block:: sql + :caption: Right join + + SELECT p.title, a.name + FROM poem p + RIGHT JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ +| null | John Doe | ++------------------------+---------------+ + +FULL OUTER JOIN +--------------- + +First, an inner join is performed. Then, for each row in T1 that does not +satisfy the join condition with any row in T2, a joined row is added with +null values in columns of T2. Also, for each row of T2 that does not satisfy +the join condition with any row in T1, a joined row with null values in +the columns of T1 is added. + +.. code-block:: sql + :caption: Full join + + SELECT p.title, a.name + FROM poem p + FULL JOIN author a on p.author_id = a.id; + ++------------------------+---------------+ +| title | name | ++========================+===============+ +| On the Field of Battle | Larysa Kosach | ++------------------------+---------------+ +| Moses | Ivan Franko | ++------------------------+---------------+ +| The Forest Song | Larysa Kosach | ++------------------------+---------------+ +| In the Catacombs | null | ++------------------------+---------------+ +| The Singing Stones | Larysa Kosach | ++------------------------+---------------+ +| Ancient Fairy Tales | null | ++------------------------+---------------+ +| My Thoughts | Ivan Franko | ++------------------------+---------------+ +| To Shevchenko | null | ++------------------------+---------------+ +| null | John Doe | ++------------------------+---------------+ From 1730aa2a0307c5afda9b6970c03d3bd035a754f6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 22:56:30 +0200 Subject: [PATCH 278/689] Added training course index page Start implementing GitHub pages deployment. Added index file to track entire course content. --- index.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 000000000..2c3c0d2e3 --- /dev/null +++ b/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Python Training Course + + +
    +

    Python Training Course

    +
    + + From 4f8d3b422cda96886a7fb830e968d889a49a14cb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Nov 2022 23:23:30 +0200 Subject: [PATCH 279/689] Deploy to GitHub Pages Added a workflow to deploy static content to Pages. --- .github/workflows/deploy_pages.yml | 52 ++++++++++++++++++++++++++++++ index.html | 10 ++++++ 2 files changed, 62 insertions(+) create mode 100644 .github/workflows/deploy_pages.yml diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml new file mode 100644 index 000000000..930ee80fe --- /dev/null +++ b/.github/workflows/deploy_pages.yml @@ -0,0 +1,52 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: + - gh-pages + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v2 + - name: Install dependencies + run: | + pip install sphinx sphinx_rtd_theme myst_parser + - name: Build documents + run: | + LANGUAGE=en make html + LANGUAGE=ua make html + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: "." + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/index.html b/index.html index 2c3c0d2e3..7ce3f3ce1 100644 --- a/index.html +++ b/index.html @@ -13,6 +13,16 @@
    From 1a3dff70bee180b9d1d3a0031cf6156c573ef50d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 24 Mar 2023 17:11:21 +0200 Subject: [PATCH 280/689] Fixed headers --- src/rdbms/relations.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index ebdfcfb2c..7f9a19d17 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -47,7 +47,7 @@ problems and is very inconvenient. This declaration creates a relationship between two (or even more) tables. Foreign key (FK) -=========== +================ So far, you have knowledge about **primary** keys. The **foreign** key is a column, that *references* some another table. @@ -71,7 +71,7 @@ that each record within a table has a matching one entity in another table. This brings us to various relationship models. One-to-many relationship (1-to-N) ------------------------- +--------------------------------- This is the most common relationship. @@ -102,7 +102,7 @@ But each employee can be physically located only in a single office at a time. } One-to-one relationship (1-to-1) ------------------------ +-------------------------------- ``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is and only one matching record. Back to the example with employees. Multiple @@ -115,7 +115,7 @@ The only one person can occupy the only one work station at a time. employee ||--|| work_station : occupies Many-to-many relationship (N-to-N) -------------------------- +---------------------------------- These relationships require additional table. A good example may be a *project role*. There are many of them in a production From 02aa6688c0c6f8274e9b5e3d0e807a27b96f62fa Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 24 Mar 2023 18:26:52 +0200 Subject: [PATCH 281/689] DB - translation UA --- src/_locales/ua/LC_MESSAGES/rdbms.po | 1133 ++++++++++++++++++++++++++ src/rdbms/aggregation.txt | 12 +- 2 files changed, 1139 insertions(+), 6 deletions(-) create mode 100644 src/_locales/ua/LC_MESSAGES/rdbms.po diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po new file mode 100644 index 000000000..733037fc8 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -0,0 +1,1133 @@ +# COURSE/RELATIONAL DATABASES TRANSLATION. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# Serhii Horodilov , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course.github.io/issues\n" +"POT-Creation-Date: 2023-03-24 17:08+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Serhii Horodilov \n" +"Language: ua\n" +"Language-Team: ua \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: ../../src/rdbms/aggregation.txt:3 +msgid "Data Aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:5 +msgid "Here is some dummy data, that will be used as example in this section." +msgstr "" +"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі" + +#: ../../src/rdbms/aggregation.txt:7 ../../src/rdbms/normalization.txt:1 +msgid "product" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:174 +msgid "id" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:174 +#: ../../src/rdbms/relations.txt:249 ../../src/rdbms/relations.txt:278 +#: ../../src/rdbms/relations.txt:313 ../../src/rdbms/relations.txt:345 +msgid "name" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +msgid "price" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/products_table.csv:1 +msgid "category" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/products_table.csv:1 +msgid "sold" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:157 +#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:176 +msgid "1" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Samsung Galaxy" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "100000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/products_table.csv:1 +msgid "Phones" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "500" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:165 +#: ../../src/rdbms/relations.txt:178 +msgid "2" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "iPhone 13 Pro" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "120000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/products_table.csv:1 +msgid "300" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:180 +msgid "3" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "MacBook Pro" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/products_table.csv:1 +msgid "Laptops" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +msgid "100" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/relations.txt:159 +msgid "4" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Lenovo ThinkPad" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "150000" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 +msgid "200" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:161 +msgid "5" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "HP Printer" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "20000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/products_table.csv:1 +msgid "Printers" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/aggregation.txt:176 +#: ../../src/rdbms/products_table.csv:1 +msgid "800" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:163 +msgid "6" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Dell Monitor" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "50000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/products_table.csv:1 +msgid "Monitors" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/products_table.csv:1 +msgid "400" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:165 +msgid "7" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Sony Headphones" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "30000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/products_table.csv:1 +msgid "Audio" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/products_table.csv:1 +msgid "0" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:167 +msgid "8" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Bose Soundbar" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "70000" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "9" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Xbox Series X" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "60000" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:173 ../../src/rdbms/products_table.csv:1 +msgid "Gaming" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "250" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "10" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "PlayStation 5" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "55000" +msgstr "" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:14 +msgid "The same dataset is available as:" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:16 +msgid ":download:`csv file <./products_table.csv>`" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:17 +msgid ":download:`postgres dump file `" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:20 +msgid "Aggregate functions" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:22 +msgid "" +"*Aggregate functions* compute a single result from a set of input values." +" Various RDBMS implement various built-in aggregate functions. In this " +"section we will review 5 basic functions that are available in all RDBMS." +msgstr "" +"*Агрегатні функції* обчислюють один результат із набору вхідних значень." +" Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " +"розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." + +#: ../../src/rdbms/aggregation.txt:29 +msgid "Count" +msgstr "Підрахунок" + +#: ../../src/rdbms/aggregation.txt:31 +msgid "" +"The ``count(field)`` function returns a count of the number of times that" +" ``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no" +" arguments) returns the total number of rows in the group." +msgstr "" +"Функція ``count(field)`` повертає кількість разів, коли" " ``field`` не є " +"``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " +"кількість рядків у групі." + +#: ../../src/rdbms/aggregation.txt:47 +msgid "Maximum value" +msgstr "Максимальне значення" + +#: ../../src/rdbms/aggregation.txt:49 +msgid "" +"The ``max()`` aggregate function returns the maximum value of all values " +"in the group. The maximum value is the value that would be returned last " +"in an ORDER BY on the same column. Aggregate function returns ``NULL`` if" +" and only if there are no non-NULL values in the group." +msgstr "" +"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень " +"у групі. Максимальне значення - це значення, яке буде повернуто останнім " +"у ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, " +"якщо і лише якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:66 +msgid "Minimum value" +msgstr "Мінімальне значення" + +#: ../../src/rdbms/aggregation.txt:68 +msgid "" +"The ``min()`` aggregate function returns the minimum non-NULL value of " +"all values in the group. The minimum value is the first non-NULL value " +"that would appear in an ORDER BY of the column. Aggregate function " +"returns ``NULL`` if and only if there are no non-NULL values in the " +"group." +msgstr "" +"Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " +"значень у групі. Мінімальне значення - це перше значення не NULL, яке " +"з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " +"якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:85 +msgid "Average value" +msgstr "Середнє значення" + +#: ../../src/rdbms/aggregation.txt:87 +msgid "" +"The ``avg()`` function returns the average value of all non-NULL inputs " +"within a group. String and BLOB values that do not look like numbers are " +"interpreted as 0. The result is always a floating point value whenever " +"there is at least one non-NULL input even if all inputs are integers. The" +" result is ``NULL`` if and only if there are no non-NULL inputs." +msgstr "" +"Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " +"групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " +"як 0. Результат завжди значення з плаваючою комою щоразу, коли " +"є принаймні один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. " +"Результатом є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." + +#: ../../src/rdbms/aggregation.txt:105 +msgid "Sum of values" +msgstr "Сума значень" + +#: ../../src/rdbms/aggregation.txt:107 +msgid "" +"The ``sum()`` aggregate functions return the sum of all non-NULL values " +"in the group. If there are no non-NULL input rows then function returns " +"``NULL``." +msgstr "" +"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від NULL," +" у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." + +#: ../../src/rdbms/aggregation.txt:112 +msgid "" +"NULL is not normally a helpful result for the sum of no rows but the SQL " +"standard requires it." +msgstr "" +"NULL зазвичай не є корисним результатом для суми відсутності рядків, але " +"стандарт SQL вимагає цього." + +#: ../../src/rdbms/aggregation.txt:115 +msgid "" +"SQLite implements ``total`` aggregate function, that is similar to " +"``sum``, but returns ``0.0`` (always floating point) if there are no non-" +"NULL input rows." +msgstr "" +"SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " +"повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " +"відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:130 +msgid "Grouping data" +msgstr "Групування даних" + +#: ../../src/rdbms/aggregation.txt:132 +msgid "" +"Getting some aggregated values is not very helpful itself. Most cases " +"require to group outputs in some specific manner." +msgstr "" +"Отримання деяких агрегованих значень не є дуже корисним саме по собі. " +"Більшість випадків вимагають згрупувати виходи певним чином." + +#: ../../src/rdbms/aggregation.txt:135 +msgid "" +"For example, if the task is to count number of registered categories it " +"is simple to solve as:" +msgstr "" +"Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " +"категорій, його " "просто вирішити так:" + +#: ../../src/rdbms/aggregation.txt:148 +msgid "" +"But in case, the task is to count **sold** items for each category, this " +"becomes impossible to solve without grouping items. ``GROUP BY`` clause " +"provides the ability to group rows based on some field(s) values." +msgstr "" +"Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " +"кожної категорії, це " "стає неможливим вирішити без групування товарів. " +"Пункт ``GROUP BY`` надає можливість групувати рядки на основі певного " +"значення поля(ів)." + +#: ../../src/rdbms/aggregation.txt:152 +msgid "General syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/aggregation.txt:173 +msgid "600" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:179 +msgid "" +"If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " +"clause, then each of the expressions specified as part of the GROUP BY " +"clause is evaluated for each row of the dataset according to the " +"processing rules stated below for ORDER BY expressions. Each row is then " +"assigned to a \"group\" based on the results; rows for which the results " +"of evaluating the GROUP BY expressions are the same get assigned to the " +"same group. For the purposes of grouping rows, ``NULL`` values are " +"considered equal. The usual rules for selecting a collation sequence with" +" which to compare text values apply when evaluating expressions in a " +"GROUP BY clause. The expressions in the GROUP BY clause do not have to be" +" expressions that appear in the result. The expressions in a GROUP BY " +"clause may not be aggregate expressions." +msgstr "" +"Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " +"тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " +"для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " +"для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " +"результатів; рядки, для яких результати оцінювання виразів GROUP BY " +"однакові призначаються до однієї групи. Для цілей групування рядків значення " +"``NULL`` вважаються рівними. Звичайні правила для вибору послідовності " +"порівняння, з якою порівнюються текстові значення, застосовуються під час " +"оцінювання виразів у Речення GROUP BY. Вирази в пункті GROUP BY не " +"обов'язково повинні бути виразами, які з'являються в результаті. " +"Вирази в пункті GROUP BY " "не можуть бути сукупними виразами." + +#: ../../src/rdbms/aggregation.txt:192 +msgid "Having clause" +msgstr "" + +#: ../../src/rdbms/aggregation.txt:194 +msgid "" +"But what, if the task is to filter categories, that have less than 500 " +"sold items in it? ``WHERE`` clause will be useless, cause it's evaluated " +"before grouping output. In other words, only rows that suite WHERE filter" +" will be selected." +msgstr "" +"Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " +"500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " +"перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " +"вибрано фільтр." + +#: ../../src/rdbms/aggregation.txt:217 +msgid "" +"If a ``HAVING`` clause is specified, it is evaluated once for each group " +"of rows as a boolean expression. If the result of evaluating the HAVING " +"clause is false, the group is discarded. If the HAVING clause is an " +"aggregate expression, it is evaluated across all rows in the group." +msgstr "" +"Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " +"групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " +"хибний, групу відкидають. Якщо речення HAVING є " +"агрегатним виразом, воно обчислюється в усіх рядках у групі." + +#: ../../src/rdbms/aggregation.txt:222 +msgid "" +"If a HAVING clause is a non-aggregate expression, it is evaluated with " +"respect to an arbitrarily selected row from the group. The HAVING " +"expression may refer to values, even aggregate functions, that are not in" +" the result." +msgstr "" +"Якщо речення HAVING є неагрегатним виразом, воно оцінюється " +"щодо довільно вибраного рядка з групи. Вираз HAVING може посилатися на " +"значення, навіть агрегатні функції, яких немає в результат." + +#: ../../src/rdbms/index.txt:3 +msgid "Relational Database" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:5 +msgid "" +":abbr:`RDBMS (Relational Database Management System)` is a type of " +"software that helps users to create, update, manage, and access " +"relational databases. Relational databases organize data into tables, " +"which consist of rows and columns. Each column represents a specific " +"attribute of the data, while each row represents a specific instance of " +"that data." +msgstr "" +":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " +"забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " +"отримувати доступ до реляційних баз даних. Реляційні бази даних " +"організовують дані в таблиці, які складаються з рядків і стовпців. " +"Кожен стовпець представляє певний " "атрибут даних, тоді як кожен рядок " +"представляє конкретний екземпляр цих даних." + +#: ../../src/rdbms/index.txt:11 +msgid "" +"RDBMS allow users to interact with the database using :abbr:`SQL " +"(Structured Query Language)`, which is a standard language for managing " +"and manipulating relational databases. SQL allows users to perform a " +"variety of operations on the database, including adding, updating, and " +"deleting data, as well as retrieving data based on specific criteria." +msgstr "" +"СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " +"(Structured Query Language)`, яка є стандартною мовою для керування " +"і маніпулювання реляційними базами даних. SQL дозволяє користувачам " +"виконувати різноманітність операцій з базою даних, включаючи додавання, " +"оновлення та видалення даних, а також отримання даних на основі певних " +"критеріїв." + +#: ../../src/rdbms/index.txt:17 +msgid "" +"RDBMS also provide a range of features to ensure data integrity, such as " +"enforcing data constraints, supporting transactions, and providing backup" +" and recovery capabilities. Additionally, RDBMS systems often provide " +"tools for managing the database, such as user interfaces for creating and" +" modifying tables and views, and monitoring tools for optimizing database" +" performance." +msgstr "" +"СУБД також надає низку функцій для забезпечення цілісності даних, таких як " +"дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " +"резервного копіювання" "і відновлення. Крім того, системи РСУБД часто " +"надають інструменти для керування базою даних, такі як інтерфейси " +"користувача для створення та модифікації таблиць і представлень, а також " +"інструменти моніторингу для оптимізації продуктивності бази даних." + +#: ../../src/rdbms/normalization.txt:3 +msgid "Database Normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:5 +msgid "" +"Normalization is a process of organizing data in a database so that it is" +" free from redundancy and dependency. It helps to eliminate data " +"inconsistencies and anomalies, thereby improving data integrity. " +"Normalization is a set of rules or guidelines to design a database schema" +" in such a way that it avoids data duplication, data redundancy, and data" +" inconsistency." +msgstr "" +"Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " +"вона була вільна від надлишковості та залежності. Це допомагає усунути " +"невідповідності та аномалії даних, тим самим покращуючи цілісність даних. " +"Нормалізація - це набір правил або вказівки щодо розробки схеми бази даних " +"таким чином, щоб уникнути дублювання даних, надмірності даних і " +"неузгодженості даних." + +#: ../../src/rdbms/normalization.txt:11 +msgid "" +"There are several normal forms, each building on the previous one, which " +"guide us in the normalization process. The most commonly used normal " +"forms are:" +msgstr "" +"Існує кілька нормальних форм, кожна з яких будується на попередній, які " +"скеровують нас у процесі нормалізації. Найпоширенішими звичайними " +"формами є:" + +#: ../../src/rdbms/normalization.txt:14 +msgid "" +"**First Normal Form (1NF)**: Each column should hold atomic (indivisible)" +" values. There should be no repeating groups or arrays of data in a " +"table." +msgstr "" +"Перша нормальна форма (1NF): кожен стовпець має містити атомарні (неподільні)" +" значення. У таблиці не повинно бути повторюваних груп або масивів даних." + +#: ../../src/rdbms/normalization.txt:17 +msgid "" +"**Second Normal Form (2NF)**: Each non-key column should be functionally " +"dependent on the entire primary key. In other words, every column in a " +"table should be related to the primary key and not dependent on any other" +" non-key columns." +msgstr "" +"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " +"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " +"таблиці має бути пов'язаний із первинним ключем, а не залежати від " +"будь-яких інших неключових стовпців." + +#: ../../src/rdbms/normalization.txt:21 +msgid "" +"**Third Normal Form (3NF)**: All non-key columns should be dependent only" +" on the primary key and not on any other non-key columns. This eliminates" +" transitive dependencies." +msgstr "" +"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише" +" від первинного ключа, а не від будь-яких інших неключових стовпців. " +"Це усуває транзитивні залежності." + +#: ../../src/rdbms/normalization.txt:25 +msgid "" +"Normalization reduces data redundancy and dependency, making the database" +" more efficient, flexible, and scalable. It also helps in maintaining " +"data consistency and accuracy, and ensures that updates and deletions are" +" properly handled." +msgstr "" +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних" +" більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень " +"і видалень." + +#: ../../src/rdbms/normalization.txt:31 +msgid "First normal form (1NF)" +msgstr "Перша нормальна форма (1NF)" + +#: ../../src/rdbms/normalization.txt:33 +msgid "" +"It's easier to understand normalization via examples. Let's start with " +"some dummy orders data." +msgstr "" +"Легше зрозуміти нормалізацію на прикладах. Почнемо з " +"деяких фіктивних даних про замовлення." + +#: ../../src/rdbms/normalization.txt:36 +msgid "Initial data" +msgstr "Початкові дані" + +#: ../../src/rdbms/normalization.txt:1 +msgid "order" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "quantity" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "total" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:180 +#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:363 +msgid "John Doe" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(Apple, Orange)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(2, 3)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(100, 50)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(200, 150)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Jane Smith" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Banana" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "25" +msgstr "" + +#: ../../src/rdbms/normalization.txt:43 +msgid "" +"This table violates 1NF, since its columns contain multiple values. To " +"bring this to 1NF all data within the table are to be atomic." +msgstr "" +"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " +"привести це до 1NF, усі дані в таблиці мають бути атомарними." + +#: ../../src/rdbms/normalization.txt:46 +msgid "1NF applied" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Apple" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Orange" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "50" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "150" +msgstr "" + +#: ../../src/rdbms/normalization.txt:54 +msgid "From now each peace of data is represented as atomic value." +msgstr "Відтепер кожна частина даних представлена як атомарне значення." + +#: ../../src/rdbms/normalization.txt:57 +msgid "Second normal form (2NF)" +msgstr "Друга нормальна форма (2NF)" + +#: ../../src/rdbms/normalization.txt:59 +msgid "" +"The table above is in 1NF, but ``item price`` is dependent on the *item* " +"entity itself and have low cohesion to *orders*. To bring it into 2NF a " +"dedicated table to store information about items themselves is to be " +"created. After that ``order`` and ``product`` table are connected " +"(related) to each other via a foreign key." +msgstr "" +"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " +"елемента і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " +"спеціальну таблицю для зберігання інформації про самі товари має бути " +"створено. Після цього таблиці ``order`` і ``product`` з'єднуються " +"(пов'язані) одна з одною за допомогою зовнішнього ключа." + +#: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 +msgid "``order`` table" +msgstr "" + +#: ../../src/rdbms/normalization.txt:1 +msgid "product_id" +msgstr "" + +#: ../../src/rdbms/normalization.txt:73 +msgid "``product`` table" +msgstr "" + +#: ../../src/rdbms/normalization.txt:98 +msgid "" +"``total`` field is also removed, since now it can be calculated as " +"product of ``product.price`` and ``order.quantity``." +msgstr "" +"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " +"добуток ``product.price`` і ``order.quantity``." + +#: ../../src/rdbms/normalization.txt:102 +msgid "Third normal form (3NF)" +msgstr "" + +#: ../../src/rdbms/normalization.txt:104 +msgid "" +"At last it's time to remove a transitive functional dependency. " +"Customer's name is not actually dependent on a product, but on a person, " +"who places an order." +msgstr "" +"Нарешті настав час видалити транзитивну функціональну залежність. " +"Ім'я клієнта насправді залежить не від продукту, а від особи, " +"яка робить замовлення." + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer_id" +msgstr "" + +#: ../../src/rdbms/normalization.txt:115 +msgid "``customer`` table" +msgstr "" + +#: ../../src/rdbms/relations.txt:3 +msgid "Data Relationships" +msgstr "Зв'язки даних" + +#: ../../src/rdbms/relations.txt:5 +msgid "It's time to talk about **data relations**." +msgstr "Настав час поговорити про **відносини даних**." + +#: ../../src/rdbms/relations.txt:7 +msgid "" +"For example your database contains two tables: ``weather`` and ``city``. " +"The diagram below demonstrates the overall data structure:" +msgstr "" +"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " +"Діаграма нижче демонструє загальну структуру даних:" + +#: ../../src/rdbms/relations.txt:25 +msgid "" +"Consider the following problem: you want to make sure no one can insert a" +" record into ``weather`` without a matching entry in ``city`` table. This" +" is called maintaining the *referential integrity* of your data. In " +"simplistic database systems this would be implemented (if at all) by " +"first looking at the cities table to check if a matching record exists, " +"and then inserting or rejecting the new weather records. This approach " +"has a number of problems and is very inconvenient." +msgstr "" +"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити" +" запис до ``weather`` без відповідного запису в ``city`` таблиці. Це" +"називається підтримкою посилальної цілісності ваші дані. У " +"спрощених системах баз даних це було б реалізовано (якщо взагалі) " +"спочатку переглядаючи таблицю міст, щоб перевірити, чи існує відповідний " +"запис, а потім вставляв або відхиляв нові записи погоди. Цей підхід " +"має низку проблем і дуже незручно." + +#: ../../src/rdbms/relations.txt:47 +msgid "" +"This declaration creates a relationship between two (or even more) tables." +msgstr "" +"Це оголошення створює зв'язок між двома (або навіть більше) таблицями." + +#: ../../src/rdbms/relations.txt:50 +msgid "Foreign key (FK)" +msgstr "Зовнішній ключ (FK)" + +#: ../../src/rdbms/relations.txt:52 +msgid "" +"So far, you have knowledge about **primary** keys. The **foreign** key is" +" a column, that *references* some another table. In common, it's a " +"reference to another table's PK; but there is no limitation of this kind," +" any column can be referenced by another one. FKs handle data integrity " +"only, it's not required for FK to be non-NULL value." +msgstr "" +"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це" +" стовпець, який посилається на іншу таблицю. Загалом, це посилання на PK " +"іншої таблиці; але такого роду обмежень немає ," +" на будь-який стовпець може посилатися інший. FK обробляє лише " +"цілісність даних, не обов'язково, щоб значення FK було відмінним від NULL." + +#: ../../src/rdbms/relations.txt:58 +msgid "" +"The relation's properties are described by CONSTRAINTS and the database's" +" structure." +msgstr "" +"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." + +#: ../../src/rdbms/relations.txt:61 +msgid "" +"For example, modifying declaration with ``NOT NULL`` constraint grants " +"that each record within a table has a matching one entity in another " +"table." +msgstr "" +"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що " +"кожний запис у таблиці має відповідну сутність в іншій таблиці." + +#: ../../src/rdbms/relations.txt:71 +msgid "This brings us to various relationship models." +msgstr "Це підводить нас до різних моделей відносин." + +#: ../../src/rdbms/relations.txt:74 +msgid "One-to-many relationship (1-to-N)" +msgstr "Зв'язок один-до-багатьох (1-до-N)" + +#: ../../src/rdbms/relations.txt:76 +msgid "This is the most common relationship." +msgstr "Це найпоширеніший зв'язок." + +#: ../../src/rdbms/relations.txt:78 +msgid "" +"For the example above there are no limitations on temperature " +"measurements in a specified city. So, a single city may has 0 or N " +"related records in ``weather`` table. But each weather record is related " +"to the only one city." +msgstr "" +"Для наведеного вище прикладу немає обмежень на вимірювання " +"температури у визначеному місті. Отже, окреме місто може мати 0 або N " +"пов'язаних записів у таблиці ``погода``. Але кожен запис погоди пов'язаний " +"до єдиного міста." + +#: ../../src/rdbms/relations.txt:82 +msgid "" +"Another example is employees and office buildings they work in. Some big " +"company may have multiple offices and employee across the globe. Multiple" +" employees can be present in a single office building at a time. But each" +" employee can be physically located only in a single office at a time." +msgstr "" +"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " +"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " +"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " +"одночасно. Але кожен працівник може фізично перебувати лише в одному " +"офісі одночасно." + +#: ../../src/rdbms/relations.txt:105 +msgid "One-to-one relationship (1-to-1)" +msgstr "" + +#: ../../src/rdbms/relations.txt:107 +msgid "" +"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there" +" is and only one matching record. Back to the example with employees. " +"Multiple workstations (personal computers) are located in each office " +"building. The only one person can occupy the only one work station at a " +"time." +msgstr "" +"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " +"наявність лише одного відповідного запису. Повернемося до прикладу зі " +"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " +"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " +"одну робочу станцію одночасно." + +#: ../../src/rdbms/relations.txt:118 +msgid "Many-to-many relationship (N-to-N)" +msgstr "Зв'язок багато-до-багатьох (N-до-N)" + +#: ../../src/rdbms/relations.txt:120 +msgid "" +"These relationships require additional table. A good example may be a " +"*project role*. There are many of them in a production team. And some " +"employees may be assigned to the same role (e.g. developers, testers " +"etc.). But also a single person can be a developer and tester at a time." +msgstr "" +"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути " +"роль у проекті. Їх багато у виробничій команді. І деяким " +"працівникам може бути призначено ту саму роль (наприклад, розробники, " +"тестувальники і т. д.). Але також одна людина може бути розробником і " +"тестувальником одночасно." + +#: ../../src/rdbms/relations.txt:133 +msgid "Joining data" +msgstr "Об'єднання даних" + +#: ../../src/rdbms/relations.txt:135 +msgid "" +"``JOIN`` is used to *join* data fetched from multiple related tables. To " +"build a valid query you are to set the tables to join and parameter to " +"use for this operation." +msgstr "" +"``JOIN`` використовується для об'єднання даних, отриманих з кількох " +"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " +"таблиці для об'єднання та параметр, який використовується для цієї операції." + +#: ../../src/rdbms/relations.txt:139 +msgid "Common syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/relations.txt:145 +msgid "" +"There are various join types available. Here are is some dummy data to " +"demonstrate their purpose." +msgstr "" +"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб " +"продемонструвати їх призначення." + +#: ../../src/rdbms/relations.txt:148 +msgid "poem" +msgstr "" + +#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:249 +#: ../../src/rdbms/relations.txt:278 ../../src/rdbms/relations.txt:313 +#: ../../src/rdbms/relations.txt:345 +msgid "title" +msgstr "" + +#: ../../src/rdbms/relations.txt:151 +msgid "author_id" +msgstr "" + +#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:251 +#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:315 +#: ../../src/rdbms/relations.txt:347 +msgid "On the Field of Battle" +msgstr "" + +#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:253 +#: ../../src/rdbms/relations.txt:282 ../../src/rdbms/relations.txt:317 +#: ../../src/rdbms/relations.txt:349 +msgid "Moses" +msgstr "" + +#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:255 +#: ../../src/rdbms/relations.txt:284 ../../src/rdbms/relations.txt:319 +#: ../../src/rdbms/relations.txt:351 +msgid "The Forest Song" +msgstr "" + +#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:286 +#: ../../src/rdbms/relations.txt:353 +msgid "In the Catacombs" +msgstr "" + +#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:163 +#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:286 +#: ../../src/rdbms/relations.txt:290 ../../src/rdbms/relations.txt:294 +#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:353 +#: ../../src/rdbms/relations.txt:357 ../../src/rdbms/relations.txt:361 +#: ../../src/rdbms/relations.txt:363 +msgid "null" +msgstr "" + +#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:257 +#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:321 +#: ../../src/rdbms/relations.txt:355 +msgid "The Singing Stones" +msgstr "" + +#: ../../src/rdbms/relations.txt:163 ../../src/rdbms/relations.txt:290 +#: ../../src/rdbms/relations.txt:357 +msgid "Ancient Fairy Tales" +msgstr "" + +#: ../../src/rdbms/relations.txt:165 ../../src/rdbms/relations.txt:259 +#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:323 +#: ../../src/rdbms/relations.txt:359 +msgid "My Thoughts" +msgstr "" + +#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:294 +#: ../../src/rdbms/relations.txt:361 +msgid "To Shevchenko" +msgstr "" + +#: ../../src/rdbms/relations.txt:171 +msgid "author" +msgstr "" + +#: ../../src/rdbms/relations.txt:176 ../../src/rdbms/relations.txt:251 +#: ../../src/rdbms/relations.txt:255 ../../src/rdbms/relations.txt:257 +#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:284 +#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:315 +#: ../../src/rdbms/relations.txt:319 ../../src/rdbms/relations.txt:321 +#: ../../src/rdbms/relations.txt:347 ../../src/rdbms/relations.txt:351 +#: ../../src/rdbms/relations.txt:355 +msgid "Larysa Kosach" +msgstr "" + +#: ../../src/rdbms/relations.txt:178 ../../src/rdbms/relations.txt:253 +#: ../../src/rdbms/relations.txt:259 ../../src/rdbms/relations.txt:282 +#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:317 +#: ../../src/rdbms/relations.txt:323 ../../src/rdbms/relations.txt:349 +#: ../../src/rdbms/relations.txt:359 +msgid "Ivan Franko" +msgstr "" + +#: ../../src/rdbms/relations.txt:212 +msgid "Join types" +msgstr "" + +#: ../../src/rdbms/relations.txt +msgid "Cross join" +msgstr "" + +#: ../../src/rdbms/relations.txt:220 +msgid "" +"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " +"product), the joined table will contain a row consisting of all columns " +"in T1 followed by all columns in T2. If the tables have N and M rows " +"respectively, the joined table will have N * M rows." +msgstr "" +"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто, декартового " +"добутку), об'єднана таблиця міститиме рядок, що складається з усіх стовпців " +"у T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " +"відповідно, об'єднана таблиця матиме N M рядків." + +#: ../../src/rdbms/relations.txt +msgid "Qualified joins" +msgstr "" + +#: ../../src/rdbms/relations.txt:231 +msgid "" +"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` " +"is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +msgstr "" +"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` " +"є типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." + +#: ../../src/rdbms/relations.txt:236 +msgid "INNER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:238 +msgid "" +"For each row R1 of T1, the joined table has a row for each row in T2 that" +" satisfies the join condition with R1." +msgstr "" +"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " +"який задовольняє умову об'єднання з R1." + +#: ../../src/rdbms/relations.txt:241 +msgid "Inner join" +msgstr "" + +#: ../../src/rdbms/relations.txt:263 +msgid "LEFT OUTER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:265 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not" +" satisfy the join condition with any row in T2, a joined row is added " +"with null values in columns of T2. Thus, the joined table always has at " +"least one row for each row in T1." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " +"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." + +#: ../../src/rdbms/relations.txt:270 +msgid "Left join" +msgstr "" + +#: ../../src/rdbms/relations.txt:298 +msgid "RIGHT OUTER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:300 +msgid "" +"First, an inner join is performed. Then, for each row in T2 that does not" +" satisfy the join condition with any row in T1, a joined row is added " +"with null values in columns of T1. This is the converse of a left join: " +"the result table will always have a row for each row in T2." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " +"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " +"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " +"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного " +"рядка в T2." + +#: ../../src/rdbms/relations.txt:305 +msgid "Right join" +msgstr "" + +#: ../../src/rdbms/relations.txt:329 +msgid "FULL OUTER JOIN" +msgstr "" + +#: ../../src/rdbms/relations.txt:331 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not" +" satisfy the join condition with any row in T2, a joined row is added " +"with null values in columns of T2. Also, for each row of T2 that does not" +" satisfy the join condition with any row in T1, a joined row with null " +"values in the columns of T1 is added." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " +"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " +"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." + +#: ../../src/rdbms/relations.txt:337 +msgid "Full join" +msgstr "" + diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index ea4fedf04..f8eadbd3e 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -58,9 +58,9 @@ in the group. :: - maximum price ---------------- - 350000 + maximum price + --------------- + 350000 Minimum value ------------- @@ -77,9 +77,9 @@ in the group. :: - minimum price ---------------- - 20000 + minimum price + --------------- + 20000 Average value ------------- From da751cb5f12b506c75e1968c4f6f47179e4b0a5f Mon Sep 17 00:00:00 2001 From: Un1corN1k Date: Tue, 14 Mar 2023 23:05:55 +0200 Subject: [PATCH 282/689] Added translations for Python/Basics Signed-off-by: Oleksandr Yeromin --- src/_locales/ua/LC_MESSAGES/basics.po | 1445 +++++++++++++++++++++++++ 1 file changed, 1445 insertions(+) create mode 100644 src/_locales/ua/LC_MESSAGES/basics.po diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po new file mode 100644 index 000000000..b5423286b --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -0,0 +1,1445 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-14 22:40+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.11.0\n" + +#: ../../src/basics/controlflow.txt:3 +msgid "Control Flow" +msgstr "" + +#: ../../src/basics/datatypes.txt:3 +msgid "Data Types" +msgstr "Типи Даних" + +#: ../../src/basics/datatypes.txt:5 +msgid "" +"Data may represent different things and require various operations " +"available. In programming data types is an important concept. For example" +" **1984** may be a number (``1984``), a text (``\"1984"``) or event a " +"date. The data type describes the operations, that are allowed for the " +"data, like additions for numbers or concatenation for text (e.g. ``1 + 2 " +"-> 3``, ``\"1\" + \"3\" -> \"13\"``)." +msgstr "" +"Дані можуть представляти різні речі та вимагати різноманітних доступних" +"операцій. У програмуванні типи даних є важливою концепцією. " +"Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984"`` ) " +"або подією чи датою. Тип даних описує можливі операції, дозволені для даних, " +"як-от додавання чисел або конкатенація для тексту " +"(наприклад, ``1 + 2 " "-> 3``, ``\"1\" + \"3 \" -> \"13\"``). " + +#: ../../src/basics/datatypes.txt:11 +msgid "" +"Python uses dynamic typing. This means as a developer you should not " +"declare a variable with its data type - the interpreter will do this for " +"you. Other popular language using dynamic typing are JavaScript and PHP. " +"Setting variables in Python is as easy as:" +msgstr "" +"Python використовує динамічну типізацію. Це означає, що ви, як розробник, " +"не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " +"за вас. Іншими популярними мовами, які використовують динамічну типізацію, " +"є JavaScript і PHP. Налаштування змінних у Python доволі просто, як: " + +#: ../../src/basics/datatypes.txt:23 +msgid "Built-In Data Types" +msgstr "Вбудовані типи даних" + +#: ../../src/basics/datatypes.txt:25 +msgid "Python has the following data types built-in:" +msgstr "Python має такі вбудовані типи даних:" + +#: ../../src/basics/datatypes.txt:27 +msgid "Integers (``int``)" +msgstr "Цілі числа (``int``)" + +#: ../../src/basics/datatypes.txt:28 +msgid "Floating-point numbers (``float``)" +msgstr "Числа з плаваючою крапкою (``float``)" + +#: ../../src/basics/datatypes.txt:29 +msgid "Complex numbers (``complex``)" +msgstr "Комплексні числа (``complex``)" + +#: ../../src/basics/datatypes.txt:30 +msgid "Booleans (``bool``)" +msgstr "Логічні значення (``bool``)" + +#: ../../src/basics/datatypes.txt:31 +msgid "Strings (``str``)" +msgstr "Рядки (``str``)" + +#: ../../src/basics/datatypes.txt:32 +msgid "Bytes (``bytes``)" +msgstr "Байти (``bytes``)" + +#: ../../src/basics/datatypes.txt:33 +msgid "Byte arrays (``bytearray``)" +msgstr "Масиви байтів (``bytearray``)" + +#: ../../src/basics/datatypes.txt:34 +msgid "Lists (``list``)" +msgstr "Списки (``list``)" + +#: ../../src/basics/datatypes.txt:35 +msgid "Tuples (``tuple``)" +msgstr "Кортежі (``tuple``)" + +#: ../../src/basics/datatypes.txt:36 +msgid "Sets (``set``)" +msgstr "Cети (``set``)" + +#: ../../src/basics/datatypes.txt:37 +msgid "Frozen sets (``frozenset``)" +msgstr "Заморожені сети (``frozenset``)" + +#: ../../src/basics/datatypes.txt:38 +msgid "Dictionaries (``dict``)" +msgstr "Словники (``dict``)" + +#: ../../src/basics/datatypes.txt:39 +msgid "None (``NoneType``)" +msgstr "Жодного (``NoneType``)" + +#: ../../src/basics/datatypes.txt:41 +msgid "" +"Any one can use them without additional imports or packages installations." +msgstr "" +"Будь-хто може використовувати їх без додаткового імпорту " +"чи встановлення пакетів. " + +#: ../../src/basics/datatypes.txt:44 +msgid "Text" +msgstr "Текстові дані" + +#: ../../src/basics/datatypes.txt:46 +msgid "" +"Text data are stored as strings (``str`` data type) in Python. Any " +"sequence of letters, digits, punctuation marks and whitespace characters " +"enclosed with quotes is considered to be a string literal. Both single " +"quotes (``'``) and double quotes (``\"``) can be used interchangeably to " +"create a string in Python." +msgstr "" +"Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-яка " +"послідовність літер, цифр, знаків пунктуації та пробілів, взята в лапки, " +"вважається рядковим літералом. Обидві одинарні лапки (``'``) або подвійні " +"лапки (``\"``) можна взаємозамінно використовувати для створення рядків." + +#: ../../src/basics/datatypes.txt:58 +msgid "Escaping" +msgstr "Екранування" + +#: ../../src/basics/datatypes.txt:60 +msgid "" +"In programming this is a process of using a special character to indicate" +" that the following character(s) should be treated differently from their" +" literal meaning. The common usage is to include a special character(s) " +"within strings. A **backslash** character is used to *escape* the " +"following one." +msgstr "" +"У програмуванні це процес використання спеціального символу, щоб вказати, що " +"наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне значення. " +"Загальне використання полягає в тому, щоб включити спеціальний(і) символ(и) " +"в рядки. Символ **backslash** використовується для екранування наступного. " + +#: ../../src/basics/datatypes.txt:65 +msgid "Example of Escaping in Python" +msgstr "Приклади Екранування в Python" + +#: ../../src/basics/datatypes.txt:84 +msgid "Single quotes or double quotes" +msgstr "Одинарні або подвійні лапки" + +#: ../../src/basics/datatypes.txt:86 +msgid "" +"Don't care. Use any quote mark you like. A *string* is a sequence of " +"characters after the opening quote and till the closing one. You may use " +"double quotes in case a single quote is a part of the text (e.g. ``\"It's" +" a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship " +"was a \"Billy of Tea\"'``). It's a good practice not to mess single and " +"double quotes within one project. Just keep using a chosen one character " +"for all strings." +msgstr "" +"Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " +"після початкової лапки та до кінцевої. Ви можете використовувати подвійні " +"лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " +"Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of Tea\"'``). " +"Рекомендується не плутати одинарні та подвійні лапки в одному проекті. " +"Просто продовжуйте використовувати один вибраний символ для всіх рядків. " + +#: ../../src/basics/datatypes.txt:94 +msgid "Multiline strings" +msgstr "Багатострічкові рядки" + +#: ../../src/basics/datatypes.txt:96 +msgid "" +"You can assign a multiline string by using triple quotes: Both single " +"quote and double quote characters are available." +msgstr "" +"Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: в " +"середині них доступні як одинарні, так і подвійні лапки. " + +#: ../../src/basics/datatypes.txt:106 +msgid "" +"The same syntax is used to create docstring, which are a special case of " +"string usage. We will look on these in the future." +msgstr "" +"Такий самий синтаксис використовується для створення рядка документації, " +"який є окремим випадком використання рядка. Ми розглянемо це в майбутньому. " + +#: ../../src/basics/datatypes.txt:110 ../../src/basics/stdtypes.txt:28 +msgid "Supported operations" +msgstr "Операції підтримки" + +#: ../../src/basics/datatypes.txt:112 +msgid "This subsection describes only the most common operations." +msgstr "" +"У цьому розділі описано лише найпоширеніші операції. " + +#: ../../src/basics/datatypes.txt +msgid "Concatenation" +msgstr "Конкатинація" + +#: ../../src/basics/datatypes.txt:115 +msgid "The ``+`` operator is used to concatenate (join) two or more strings." +msgstr "" +"Оператор ``+`` використовується для конкатенації (об'єднання) двох або " +"більше рядків. " + +#: ../../src/basics/datatypes.txt:121 +msgid "" +"On the other hand the ``join`` method concatenates a collection of " +"strings, which may be more efficient than using ``+``." +msgstr "" +"З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " +"ефективнішим, ніж використання ``+``. " + +#: ../../src/basics/datatypes.txt +msgid "Repetition" +msgstr "Повторення" + +#: ../../src/basics/datatypes.txt:129 +msgid "" +"The ``*`` operator is used to repeat a string a specified number of " +"times. Only multipliers of the ``int`` type are allowed." +msgstr "" +"Оператор ``*`` використовується для повторення рядка вказану кількість " +"разів. Дозволені операції лише з множниками типу ``int``. " + +#: ../../src/basics/datatypes.txt +msgid "Length" +msgstr "Довжина" + +#: ../../src/basics/datatypes.txt:137 +msgid "The ``len`` function is used to find the length of a string." +msgstr "Функція ``len`` використовується для визначення довжини рядка." + +#: ../../src/basics/datatypes.txt +msgid "Case conversion" +msgstr "Перетворення регістру" + +#: ../../src/basics/datatypes.txt:144 +msgid "" +"The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " +"actions on case." +msgstr "" +"Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " +"зміною регістра. " + +#: ../../src/basics/datatypes.txt:147 +msgid "``lower`` creates a new string with all lower-case characters." +msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." + +#: ../../src/basics/datatypes.txt:149 +msgid "``upper`` creates a new string with all upper-case characters." +msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." + +#: ../../src/basics/datatypes.txt:151 +msgid "``capitalize`` creates a new string with the upper-case 1st character." +msgstr "``capitalize`` створює новий рядок із першим символом у верхньому " +"регістрі. " + +#: ../../src/basics/datatypes.txt:153 +msgid "``title`` will make all characters after whitespace upper case." +msgstr "``title`` зробить усі символи після пробілів верхнім регістром." + +#: ../../src/basics/datatypes.txt +msgid "Stripping" +msgstr "Зачистка" + +#: ../../src/basics/datatypes.txt:164 +msgid "" +"The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " +"leading and/or trailing whitespace characters." +msgstr "" +"Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " +"початкових і/або кінцевих пробільних символів. " + +#: ../../src/basics/datatypes.txt:175 +msgid "Strings are subscriptable" +msgstr "Рядки можна підписувати" + +#: ../../src/basics/datatypes.txt:177 +msgid "``str`` is not the only one subscriptable data type in Python." +msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." + +#: ../../src/basics/datatypes.txt:179 +msgid "" +"This means you can access individual characters or slices within a string" +" using indexes. A string is a *sequence* of characters and each character" +" within a string has its own position - an *index*. Indexing starts at 0," +" so the first character in a string is at index 0, the second one is at " +"index 1, and so on. Negative indexing is also possible, with -1 " +"representing the last character in a string, -2 representing the second-" +"to-last character, and so on. Use square brackets (``[]``) to access the " +"index." +msgstr "" +"Це означає, що ви можете отримати доступ до окремих символів або фрагментів " +"у рядку за допомогою індексів. Рядок — це послідовність символів, і кожен " +"символ у рядку має власну позицію — індекс. Індексація починається з 0, " +"отже, перший символ у рядку має індекс 0, другий - індекс 1 і так далі. " +"Також можливе від'ємне індексування, коли -1 представляє останній символ у " +"рядку, а -2 представляє передостанній символ і так далі. Використовуйте " +"квадратні дужки (``[]``), щоб отримати доступ до індексу. " + +#: ../../src/basics/datatypes.txt:194 +msgid "" +"You can also *slice* strings, this means to get a subsequence of " +"characters. The slice syntax consists of 3 digits:" +msgstr "" +"Ви також можете *розрізати* рядки, тобто отримати підпослідовність символів. " +"Синтаксис фрагмента складається з 3 цифр: " + +#: ../../src/basics/datatypes.txt:197 +msgid "the first one represent the index to start (inclusive), defaults to 0" +msgstr "" +"Перший представляє початковий індекс (включно), за замовчанням " +"дорівнює 0. " + +#: ../../src/basics/datatypes.txt:198 +msgid "" +"the second one represent the index to stop (non-inclusive), defaults to " +"the length of the sequence" +msgstr "" +"Другий представляє індекс для зупинки (не включно), за замовчуванням довжина " +"послідовності. " + +#: ../../src/basics/datatypes.txt:200 +msgid "the third one represents a step, defaults to 1" +msgstr "Третій представляє крок, за замовчуванням 1." + +#: ../../src/basics/datatypes.txt:202 +msgid "" +"These numbers are separated within colon (``:``) and enclosed within " +"square brackets. Any slice digit may be omitted." +msgstr "" +"Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " +"цифра зрізу може бути упущена. " + +#: ../../src/basics/datatypes.txt:205 +msgid "Sequence slicing" +msgstr "Нарізка послідовності" + +#: ../../src/basics/datatypes.txt:216 +msgid "Strings are iterable" +msgstr "Рядки можна повторювати" + +#: ../../src/basics/datatypes.txt:218 +msgid "" +"Since strings are arrays, we can loop through the characters in a string " +"with a ``for`` loop:" +msgstr "" +"Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " +"допомогою циклу ``for``: " + +#: ../../src/basics/datatypes.txt:227 +msgid "Strings are immutable" +msgstr "Рядки незмінні" + +#: ../../src/basics/datatypes.txt:229 +msgid "This means, you cannot change an individual character within a string." +msgstr "Це означає, що ви не можете змінити окремий символ у рядку." + +#: ../../src/basics/datatypes.txt:237 +msgid "Integers" +msgstr "Цілі числа" + +#: ../../src/basics/datatypes.txt:239 +msgid "" +"``int``, or integer, is a whole number, positive or negative, without " +"decimals." +msgstr "" +"``int``, тобто ціле число, може бути додатнім або від'ємним, без десяткових " +"знаків. " + +#: ../../src/basics/datatypes.txt:247 +msgid "Floats" +msgstr "Числа з плаваючою комою" + +#: ../../src/basics/datatypes.txt:249 +msgid "" +"``float``, or floating point number, is a number, positive or negative, " +"containing one or more decimals." +msgstr "" +"``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, що " +"містить один або більше десяткових знаків. " + +#: ../../src/basics/exceptions.txt:3 +msgid "Errors and Exceptions" +msgstr "Помилки та винятки" + +#: ../../src/basics/functions.txt:3 ../../src/basics/syntax.txt +msgid "Functions" +msgstr "Функції" + +#: ../../src/basics/index.txt:3 +msgid "Python Basics" +msgstr "Основи Python" + +#: ../../src/basics/modules.txt:3 +msgid "Pythons Modules and Imports" +msgstr "Модулі та імпорт Pythons" + +#: ../../src/basics/pep8.txt:3 +msgid "Style Guides: PEP8" +msgstr "Керівництво по стилю: PEP8" + +#: ../../src/basics/stdtypes.txt:3 +msgid "Built-in Types" +msgstr "Вбудовані типи" + +#: ../../src/basics/stdtypes.txt:5 +msgid "" +"The principal built-in types are numerics, sequences, mappings, classes, " +"instances and exceptions :cite:`docs-python:stdtypes`. This section " +"covers only the most base of them. Others will be discussed in the future" +" within their own topics." +msgstr "" +"Основними вбудованими типами є числа, послідовності, відображення, класи, " +"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " +"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " +"власних тем. " + +#: ../../src/basics/stdtypes.txt:11 +msgid "Numeric types" +msgstr "Числові типи" + +#: ../../src/basics/stdtypes.txt:13 +msgid "" +"There are 3 distinct numeric types: *integers*, *floating point numbers*," +" and *complex numbers*. In addition, Booleans are a subtype of integers. " +"Integers have unlimited precision. Floating point numbers are usually " +"implemented usign ``double`` in C. Complex numbers have a real and " +"imaginary part, which are each a floating point number." +msgstr "" +"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " +"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " +"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " +"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " +"кожна з яких є числом з плаваючою комою. " + +#: ../../src/basics/stdtypes.txt:19 +msgid "" +"Numbers are created by numeric literals or as the result of built-in " +"functions and operators. Unadorned integer literals (including hex, octal" +" and binary numbers) yield integers. Numeric literals containing a " +"decimal point or an exponent sign yield floating point numbers. Appending" +" ``j`` or ``J`` to a numeric literal yields an imaginary number (a " +"complex number with a zero real part) which you can add to an integer or " +"float to get a complex number with real and imaginary parts." +msgstr "" +"Числа створюються за допомогою числових літералів або як результат " +"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " +"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " +"літерали, що містять десяткову кому або знак експоненти, дають числа з " +"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " +"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " +"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " +"з дійсною та уявною частинами. " + +#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 +#: ../../src/basics/stdtypes.txt:201 +msgid "Operation" +msgstr "Операції" + +#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 +#: ../../src/basics/stdtypes.txt:201 +msgid "Result" +msgstr "Результат" + +#: ../../src/basics/stdtypes.txt:33 +msgid "``x + y``" +msgstr "``x + y``" + +#: ../../src/basics/stdtypes.txt:33 +msgid "sum of *x* and *y*" +msgstr "сума *x* і *y*" + +#: ../../src/basics/stdtypes.txt:35 +msgid "``x - y``" +msgstr "``x - y``" + +#: ../../src/basics/stdtypes.txt:35 +msgid "difference of *x* and *y*" +msgstr "різниця між *x* і *y*" + +#: ../../src/basics/stdtypes.txt:37 +msgid "``x * y``" +msgstr "``x * y``" + +#: ../../src/basics/stdtypes.txt:37 +msgid "product of *x* and *y*" +msgstr "добуток *x* і *y*" + +#: ../../src/basics/stdtypes.txt:39 +msgid "``x / y``" +msgstr "``x / y``" + +#: ../../src/basics/stdtypes.txt:39 +msgid "quotient of *x* and *y*" +msgstr "частка *x* і *y*" + +#: ../../src/basics/stdtypes.txt:41 +msgid "``x // y``" +msgstr "``x // y``" + +#: ../../src/basics/stdtypes.txt:41 +msgid "floored quotient of *x* and *y*" +msgstr "цілочисельне ділення *x* і *y*" + +#: ../../src/basics/stdtypes.txt:43 +msgid "``x % y``" +msgstr "``x % y``" + +#: ../../src/basics/stdtypes.txt:43 +msgid "remainder of ``x / y``" +msgstr "залишок від ділення``x / y``" + +#: ../../src/basics/stdtypes.txt:45 +msgid "``-x``" +msgstr "``-x``" + +#: ../../src/basics/stdtypes.txt:45 +msgid "*x* negated" +msgstr "*x* заперечено" + +#: ../../src/basics/stdtypes.txt:47 +msgid "``+x``" +msgstr "``+x``" + +#: ../../src/basics/stdtypes.txt:47 +msgid "*y* unchanged" +msgstr "*y* без змін" + +#: ../../src/basics/stdtypes.txt:49 +msgid "``abs(x)``" +msgstr "``abs(x)``" + +#: ../../src/basics/stdtypes.txt:49 +msgid "absolute value or magnitude of *x*" +msgstr "абсолютне значення або величина *x*" + +#: ../../src/basics/stdtypes.txt:51 +msgid "``int(x)``" +msgstr "``int(x)``" + +#: ../../src/basics/stdtypes.txt:51 +msgid "*x* converted to integer" +msgstr "*x* перетворено на ціле число" + +#: ../../src/basics/stdtypes.txt:53 +msgid "``float(x)``" +msgstr "``float(x)``" + +#: ../../src/basics/stdtypes.txt:53 +msgid "*x* converted to floating point" +msgstr "*x* перетворено на число з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:55 +msgid "``complex(re, im)``" +msgstr "``complex(re, im)``" + +#: ../../src/basics/stdtypes.txt:55 +msgid "" +"a complex number with real part *re*, imaginary part *im*. *im* defaults " +"to zero." +msgstr "" +"Комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " +"замовчуванням на нуль. " + +#: ../../src/basics/stdtypes.txt:58 +msgid "``divmod(x, y)``" +msgstr "``divmod(x, y)``" + +#: ../../src/basics/stdtypes.txt:58 +msgid "the pair ``(x // y, x % y)``" +msgstr "об'єднує ``(x // y, x % y)``" + +#: ../../src/basics/stdtypes.txt:60 +msgid "``pow(x, y)`` ``x ** y``" +msgstr "``pow(x, y)`` ``x ** y`" + +#: ../../src/basics/stdtypes.txt:60 +msgid "*x* to the power *y*" +msgstr "*x* у степені *y*" + +#: ../../src/basics/stdtypes.txt:64 +msgid "" +"``x // y`` also referred to as integer division. The resultant value is a" +" whole integer, through the result's type is not necessarily int. The " +"result is always rounded towards minus infinity: ``1 // 2`` is ``0``" +msgstr "" +"``x // y`` також називають цілим діленням. Результуюче значення є цілим " +"числом, через тип результату не обов'язково int. Результат завжди " +"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0`` " + +#: ../../src/basics/stdtypes.txt:69 +msgid "" +"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an" +" optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive " +"and negative infinity." +msgstr "" +"``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " +"префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " +"нескінченність. " + +#: ../../src/basics/stdtypes.txt:74 +msgid "Code examples" +msgstr "Приклади коду" + +#: ../../src/basics/stdtypes.txt:76 +msgid "Integer numbers" +msgstr "Цілі числа" + +#: ../../src/basics/stdtypes.txt:89 +msgid "Floating point numbers" +msgstr "Числа з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:104 ../../src/basics/stdtypes.txt:177 +#: ../../src/basics/stdtypes.txt:287 ../../src/basics/stdtypes.txt:296 +#: ../../src/basics/stdtypes.txt:325 +msgid "Value comparisons" +msgstr "Порівняння цінностей" + +#: ../../src/basics/stdtypes.txt:106 +msgid "" +"Numbers of built-in numeric types can be compared within and across their" +" types (with the restriction that complex numbers do not support order " +"comparison). Within the limits of the types involved, they compare " +"mathematically correct without loss of precision." +msgstr "" +"Числа вбудованих числових типів можна порівнювати всередині та між типами " +"(з обмеженням, що комплексні числа не підтримують порядок порівняння). У " +"межах залучених типів вони порівняються математично правильно без втрати " +"точності. " + +#: ../../src/basics/stdtypes.txt:111 +msgid "" +"The \"not-a-number\" values ``float(\"NaN\")`` and " +"``decimal.Decimal('NaN')`` are special. Any ordered comparison of a " +"number to a not-a-number value is false." +msgstr "" +"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` " +"є спеціальними. Будь-яке впорядковане порівняння числа з нечисловим " +"значенням є хибним." + +#: ../../src/basics/stdtypes.txt:115 +msgid "Sequence types" +msgstr "Типи послідовностей" + +#: ../../src/basics/stdtypes.txt:117 +msgid "" +"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*." +" Additional sequence types tailored for processing of binary data and " +"text strings are described in dedicated sections." +msgstr "" +"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " +"Додаткові типи послідовностей, призначені для обробки двійкових даних і " +"текстових рядків, описані у інших розділах. " + +#: ../../src/basics/stdtypes.txt:122 +msgid "Lists" +msgstr "Списки" + +#: ../../src/basics/stdtypes.txt:124 +msgid "" +"Lists are mutable sequences, typically used to store collections of " +"items. They may be constructed in several ways:" +msgstr "" +"Списки - це змінні послідовності, які зазвичай використовуються для " +"зберігання колекцій елементів. Вони можуть бути побудовані кількома способами:" + +#: ../../src/basics/stdtypes.txt:127 +msgid "using a pair of square brackets to denote the empty list: ``[]``" +msgstr "" +"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" + +#: ../../src/basics/stdtypes.txt:128 +msgid "" +"using square brackets, separating items with commas: ``[a]``, ``[a, b, " +"c]``" +msgstr "" +"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, " +"``[a, b, c]`` " + +#: ../../src/basics/stdtypes.txt:129 +msgid "using a list comprehension: ``[x for x in iterable]``" +msgstr "використовуючи генератори списків: ``[x for x in iterable]``" + +#: ../../src/basics/stdtypes.txt:130 +msgid "using the type constuctor: ``list()`` or ``list(iterable)``" +msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" + +#: ../../src/basics/stdtypes.txt:133 +msgid "Tuples" +msgstr "Кортежі" + +#: ../../src/basics/stdtypes.txt:135 +msgid "" +"Tuples are immutable sequences, typically used to store collections of " +"data or for cases where an immutable sequence of data is needed (such as " +"allowing storage in a ``set`` or ``dict`` instances). They may be " +"constructed in a number of ways:" +msgstr "" +"Кортежі - це незмінні послідовності, які зазвичай використовуються для " +"зберігання колекцій даних або для випадків, коли потрібна незмінна " +"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " +"``dict``). Вони можуть бути конструйовані декількома способами: " + +#: ../../src/basics/stdtypes.txt:140 +msgid "using a pair of parentheses to denote the empty tuple: ``()``" +msgstr "" +"використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" + +#: ../../src/basics/stdtypes.txt:141 +msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" +msgstr "" +"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або " +"``(a, b, c)``" + +#: ../../src/basics/stdtypes.txt:142 +msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" +msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" + +#: ../../src/basics/stdtypes.txt:143 +msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" +msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" + +#: ../../src/basics/stdtypes.txt:146 +msgid "Common operations" +msgstr "Загальні операції" + +#: ../../src/basics/stdtypes.txt:151 +msgid "``x in s`` ``x not in s``" +msgstr "``x in s`` ``x not in s``" + +#: ../../src/basics/stdtypes.txt:151 +msgid "" +"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal" +" to *x*" +msgstr "" +"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* " +"дорівнює *x*" + +#: ../../src/basics/stdtypes.txt:154 +msgid "``s + t``" +msgstr "``s + t``" + +#: ../../src/basics/stdtypes.txt:154 +msgid "the concatenation of *s* and *t*" +msgstr "конкатенація s і t" + +#: ../../src/basics/stdtypes.txt:156 +msgid "``s * n``" +msgstr "``s * n``" + +#: ../../src/basics/stdtypes.txt:156 +msgid "equivalent to adding *s* to itself *n* times" +msgstr "еквівалентно додаванню *s* до себе *n* разів" + +#: ../../src/basics/stdtypes.txt:158 +msgid "``s[i]``" +msgstr "``s[i]``" + +#: ../../src/basics/stdtypes.txt:158 +msgid "*i*-th item of *s*, origin 0" +msgstr "*i*-й елемент *s*, джерело 0" + +#: ../../src/basics/stdtypes.txt:160 +msgid "``s[i:j]`` ``s[i:j:k]``" +msgstr "``s[i:j]`` ``s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:160 +msgid "" +"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) " +"may be omitted." +msgstr "" +"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " +"3) можна опустити. " + +#: ../../src/basics/stdtypes.txt:163 +msgid "``len(s)``" +msgstr "``len(s)``" + +#: ../../src/basics/stdtypes.txt:163 +msgid "length of *s*" +msgstr "довжина *s*" + +#: ../../src/basics/stdtypes.txt:165 +msgid "``min(s)``" +msgstr "``min(s)``" + +#: ../../src/basics/stdtypes.txt:165 +msgid "smallest item of *s*" +msgstr "найменший елемент *s*" + +#: ../../src/basics/stdtypes.txt:167 +msgid "``max(s)``" +msgstr "``max(s)``" + +#: ../../src/basics/stdtypes.txt:167 +msgid "largest item of *s*" +msgstr "найбільший елемент *s*" + +#: ../../src/basics/stdtypes.txt:169 +msgid "``s.count(x)``" +msgstr "``s.count(x)``" + +#: ../../src/basics/stdtypes.txt:169 +msgid "total number of occurrences of *x* in *s*" +msgstr "загальна кількість входжень *x* у *s*" + +#: ../../src/basics/stdtypes.txt:171 +msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" +msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" + +#: ../../src/basics/stdtypes.txt:171 +msgid "" +"index of the first occurrence of *x* in *s* (at or after index *i* and " +"before index *j*)" +msgstr "" +"індекс першого входження *x* у *s* (в або після індексу *i* та перед " +"індексом *j*) " + +#: ../../src/basics/stdtypes.txt:181 +msgid "" +"Sequences can be compared only within each of their types, with the " +"restriction that ranges do not support order comparison. Equality " +"comparison across these types results in inequality, and ordering " +"comparison across these types raises ``TypeError``." +msgstr "" +"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, " +"що діапазони не підтримують порівняння порядку. Порівняння рівності між " +"цими типами призводить до нерівності, а впорядковане порівняння цих " +"типів викликає ``TypeError``. " + +#: ../../src/basics/stdtypes.txt:186 +msgid "" +"Sequences compare lexicographically using comparison of corresponding " +"elements. The built-in containers typically assume identical objects are " +"equal to themselves. Lexicographical comparison between buit-in " +"collections works as follows:" +msgstr "" +"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " +"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " +"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " +"таким чином: " + +#: ../../src/basics/stdtypes.txt:191 +msgid "" +"For two collections to compare equal, they must be of the same type, have" +" the same length, and each pair of corresponding elements must compare " +"equal." +msgstr "" +"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " +"мати однакову довжину, і кожна пара відповідних елементів повинна " +"порівнюватися. " + +#: ../../src/basics/stdtypes.txt:193 +msgid "" +"Collections that supports order comparison are ordered the same as their " +"first unequal elements. If corresponding element does not exist, the " +"shorter collection is ordered first." +msgstr "" +"Колекції, які підтримують порівняння порядку, упорядковуються так само, як " +"і їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"впорядковується коротша колекція. " + +#: ../../src/basics/stdtypes.txt:198 +msgid "Mutable sequence types" +msgstr "Змінні типи послідовностей" + +#: ../../src/basics/stdtypes.txt:203 +msgid "``s[i] = x``" +msgstr "``s[i] = x``" + +#: ../../src/basics/stdtypes.txt:203 +msgid "item *i* of *s* is replaced by *x*" +msgstr "елемент *i* з *s* замінюється на *x*" + +#: ../../src/basics/stdtypes.txt:205 +msgid "``s[i:j] = t``" +msgstr "``s[i:j] = t``" + +#: ../../src/basics/stdtypes.txt:205 +msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" +msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" + +#: ../../src/basics/stdtypes.txt:208 +msgid "``del s[i:j]``" +msgstr "``del s[i:j]``" + +#: ../../src/basics/stdtypes.txt:208 +msgid "same as ``s[i:j] = []``" +msgstr "те саме, що ``s[i:j] = []``" + +#: ../../src/basics/stdtypes.txt:210 +msgid "``s[i:j:k] = t``" +msgstr "``s[i:j:k] = t``" + +#: ../../src/basics/stdtypes.txt:210 +msgid "the elements of *s* are replaced by those of *t*[#]_" +msgstr "елементи *s* замінюються елементами *t*[#]_" + +#: ../../src/basics/stdtypes.txt:212 +msgid "``del s[i:j:k]``" +msgstr "``del s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:212 +msgid "removes the elements of ``s[i:j:k]`` from the list" +msgstr "видаляє елементи ``s[i:j:k]`` зі списку" + +#: ../../src/basics/stdtypes.txt:214 +msgid "``s.append(x)``" +msgstr "``s.append(x)``" + +#: ../../src/basics/stdtypes.txt:214 +msgid "" +"appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " +"[x]``" +msgstr "" +"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]`` " + +#: ../../src/basics/stdtypes.txt:217 +msgid "``s.clear()``" +msgstr "``s.clear()``" + +#: ../../src/basics/stdtypes.txt:217 +msgid "removes all items from *s* (``del s[:]``)[#3.3]_" +msgstr "видаляє всі елементи з *s* (``del s[:]``)[#3.3]_" + +#: ../../src/basics/stdtypes.txt:219 +msgid "``s.copy()``" +msgstr "``s.copy()``" + +#: ../../src/basics/stdtypes.txt:219 +msgid "creates a shallow copy of *s* (``s[:]``)[#3.3]_" +msgstr "створює поверхневу копію *s* (``s[:]``)[#3.3]_" + +#: ../../src/basics/stdtypes.txt:221 +msgid "``s.extend(t)`` ``s += t``" +msgstr "``s.extend(t)`` ``s += t`` + +#: ../../src/basics/stdtypes.txt:221 +msgid "extends *s* with the contents of *t*" +msgstr "розширює *s* вмістом *t*" + +#: ../../src/basics/stdtypes.txt:224 +msgid "``s.insert(i, x)``" +msgstr "``s.insert(i, x)``" + +#: ../../src/basics/stdtypes.txt:224 +msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" +msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" + +#: ../../src/basics/stdtypes.txt:227 +msgid "``s.pop()``, ``s.pop(i)``" +msgstr "``s.pop()``, ``s.pop(i)``" + +#: ../../src/basics/stdtypes.txt:227 +msgid "" +"retrieves the item at *i* and also removes it from *s* (if *i* is omitted" +" - use the last one available index)" +msgstr "" +"отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " +"пропущено - використовуйте останній доступний індекс)" + +#: ../../src/basics/stdtypes.txt:230 +msgid "``s.remove(x)``" +msgstr "``s.remove(x)``" + +#: ../../src/basics/stdtypes.txt:230 +msgid "remove the first item that is equal to *x* from *s*" +msgstr "видалити перший елемент, який дорівнює *x*, із *s*" + +#: ../../src/basics/stdtypes.txt:232 +msgid "``s.reverse()``" +msgstr "``s.reverse()``" + +#: ../../src/basics/stdtypes.txt:232 +msgid "reverses the items of *s* in place" +msgstr "перевертає елементи *s* на місце" + +#: ../../src/basics/stdtypes.txt:235 +msgid "*t* must have the same length as the slice it is replacing" +msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" + +#: ../../src/basics/stdtypes.txt:236 +msgid "new in Python version 3.3" +msgstr "нове у версії Python 3.3" + +#: ../../src/basics/stdtypes.txt:239 +msgid "Text sequence type" +msgstr "Тип текстової послідовності" + +#: ../../src/basics/stdtypes.txt:242 +msgid "String methods" +msgstr "Рядкові методи" + +#: ../../src/basics/stdtypes.txt:244 +msgid "" +"Strings implement all of the common sequence operations, along with the " +"additional methods." +msgstr "" +"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " +"методами. " + +#: ../../src/basics/stdtypes.txt:289 +msgid "" +"Strings compare lexicographically using the numerical Unicode code points" +" of their characters." +msgstr "" +"Рядки порівнюються лексикографічно з використанням числових кодових точок " +"Unicode своїх символів. " + +#: ../../src/basics/stdtypes.txt:293 +msgid "Set types" +msgstr "Типи сетів" + +#: ../../src/basics/stdtypes.txt:298 +msgid "" +"Sets (instances of ``set`` or ``frozenset``) can be compared within and " +"across their types. They define order comparison operators to mean subset" +" and superset tests. Those relations do not define total ordering (e.g. " +"two sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one " +"another, nor supersets of one another)." +msgstr "" +"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " +"між типами. Вони визначають оператори порівняння порядку, щоб проходити " +"тести підмножини та надмножини. Ці відношення не визначають загального " +"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " +"підмножини одного іншого, ані надмножини один одного). " + +#: ../../src/basics/stdtypes.txt:305 +msgid "Mapping type" +msgstr "Тип відображення" + +#: ../../src/basics/stdtypes.txt:307 +msgid "" +"A mapping object maps hashable values to arbitrary objects. Mappings are " +"mutable objects. There is currently ony one standard mapping type, the " +"*dictionary*. In few words mappings are collections of keys and their " +"values." +msgstr "" +"Об’єкт зіставлення зіставляє хешовані значення з довільними об’єктами. " +"Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " +"відображення, *dictionary*. Якщо кількома словами, то відображення - це " +"набори ключів та їхніх значень. " + +#: ../../src/basics/stdtypes.txt:311 +msgid "" +"A dictionary's keys are almost arbitrary values. Values that are not " +"hashable may not be used as keys. Values that compare equal (such as " +"``1``, ``1.0`` and ``True``) can be used interchangeably to index the " +"same dictionary entry." +msgstr "" +"Ключі словника - це майже довільні значення. Значення, які не хешуються, " +"не можуть бути використані як ключі. Значення, які порівнюються (такі як " +"``1``, ``1.0`` і ``True``), можна використовувати як взаємозамінні для " +"індексування тієї самої словникової статті. " + +#: ../../src/basics/stdtypes.txt:315 +msgid "Dictionaries can be created by several means:" +msgstr "Словники можна створювати кількома способами:" + +#: ../../src/basics/stdtypes.txt:317 +msgid "Use braces to denote the empty dictionary: ``{}``" +msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" + +#: ../../src/basics/stdtypes.txt:318 +msgid "" +"Use a comma-separated list of ``key: value`` pairs with braces: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}" +msgstr "" +"Використовуйте розділений комами список пар ``key: value`` з дужками: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} " + +#: ../../src/basics/stdtypes.txt:320 +msgid "Use a dict comprehension: `{x: x ** 2 for x in range(10)}``" +msgstr "Використовуючи генератори списків: `{x: x 2 for x in range(10)}``" + +#: ../../src/basics/stdtypes.txt:321 +msgid "" +"Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)``" +msgstr "" +"Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)`` " + +#: ../../src/basics/stdtypes.txt:327 +msgid "" +"Instances of ``dict`` compare equal if and only if they have equal key-" +"value pairs." +msgstr "" +"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони " +"мають однакові пари ключ-значення. " + +#: ../../src/basics/stdtypes.txt:330 +msgid "Order comparisons raise ``TypeError``." +msgstr "Порівняння порядку викликає ``TypeError``." + +#: ../../src/basics/syntax.txt:3 +msgid "Python Syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:5 +msgid "" +"As a natural language like English or Ukrainian has its own rules to " +"write down something, programming languages do. This makes them " +"programming **languages**." +msgstr "" +"Оскільки природна мова, як-от англійська чи українська, має власні правила " +"запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " +"мовами програмування." + +#: ../../src/basics/syntax.txt:9 +msgid "" +"A programming language syntax is the set of rules and principles that " +"govern how code is written and structured in a given programming " +"language. Syntax encompasses the rules for writing statements, " +"expressions, variables, data types, control structures, and other " +"constructs that make up the language." +msgstr "" +"Синтаксис мови програмування - це набір правил і принципів, які регулюють " +"написання та структурування коду даною мовою програмування. Синтаксис " +"охоплює правила написання операторів, виразів, змінних, типів даних, " +"керуючих структур та інших конструкцій, які складають мову." + +#: ../../src/basics/syntax.txt:14 +msgid "" +"The syntax of a programming language defines how code is organized and " +"interpreted by a compiler or interpreter. It defines the rules for " +"writing valid statements and expressions that can be understood and " +"executed by the language's runtime system." +msgstr "" +"Синтаксис мови програмування визначає, як код організовується та " +"інтерпретується компілятором або інтерпретатором. Він визначає правила " +"написання дійсних операторів і виразів, які можуть бути зрозумілі та " +"виконані системою виконання мови. " + +#: ../../src/basics/syntax.txt:19 +msgid "" +"A programming language's syntax is designed to be both readable and " +"expressive, allowing programmers to write code that is easy to understand" +" and modify. Syntax often influences the style and structure of code, as " +"well as its maintainability and performance." +msgstr "" +"Синтаксис мови програмування розроблено таким чином, щоб він був " +"читабельним і виразним, дозволяючи програмістам писати код, який легко " +"зрозуміти та змінювати. Синтаксис часто впливає на стиль і структуру коду, " +"а також на його зручність обслуговування та продуктивність. " + +#: ../../src/basics/syntax.txt:24 +msgid "" +"Different programming languages have different syntax, with some " +"languages being more concise and expressive than others. While syntax is " +"an important aspect of a programming language, it is only one of several " +"factors that determine its ease of use, flexibility, and suitability for " +"different programming tasks." +msgstr "" +"Різні мови програмування мають різний синтаксис, при цьому деякі мови є " +"більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " +"аспектом мови програмування, він є лише одним із кількох факторів, які " +"визначають її легкість у використанні, гнучкість і придатність для різних " +"завдань програмування. " + +#: ../../src/basics/syntax.txt:30 +msgid "" +"In the case of Python, the language's syntax defines how code is written " +"and structured in a way that is consistent, readable, and easy to " +"understand. A general overview is provided below, no need to dive deep in" +" this now. All of the following is to be discussed during the course. So," +" some of the key aspects of Python's syntax include:" +msgstr "" +"У випадку Python синтаксис мови визначає, як код буде написаний і " +"структурований таким чином, щоб він був послідовним, читабельним і легким " +"для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " +"занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " +"курсу. Отже, деякі з ключових аспектів синтаксису Python включають: " + +#: ../../src/basics/syntax.txt +msgid "Indentation" +msgstr "Відступ" + +#: ../../src/basics/syntax.txt:37 +msgid "" +"Python uses whitespace, specifically indentation, to delimit blocks of " +"code, such as loops, conditionals, and functions. This means that the " +"indentation level of a line determines which block of code it belongs to." +msgstr "" +"Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " +"таких як цикли, умови та функції. Це означає, що рівень відступу рядка " +"визначає, до якого блоку коду він належить. " + +#: ../../src/basics/syntax.txt +msgid "Statement structure" +msgstr "Структура коду" + +#: ../../src/basics/syntax.txt:43 +msgid "" +"Python statements are typically written on one line, with the end of the " +"line indicating the end of the statement. However, if a statement is too " +"long to fit on one line, it can be continued across multiple lines using " +"backslashes." +msgstr "" +"Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " +"вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " +"поміститися в один рядок, його можна продовжити в кількох рядках, " +"використовуючи зворотні похилі риски. " + +#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:3 +msgid "Variables" +msgstr "Змінні" + +#: ../../src/basics/syntax.txt:49 +msgid "" +"In Python, variables are created automatically when a value is assigned " +"to them, and their type is inferred from the value. Variables can be " +"assigned values of different types, including integers, floats, strings, " +"and more complex data structures like lists and dictionaries." +msgstr "" +"У Python змінні створюються автоматично, якщо їм присвоюється значення, і " +"їхній тип визначається на основі значення. Змінним можна присвоювати " +"значення різних типів, включаючи цілі числа, числа з плаваючою комою, рядки " +"та складніші структури даних, такі як списки та словники." + +#: ../../src/basics/syntax.txt +msgid "Operators" +msgstr "Оператори" + +#: ../../src/basics/syntax.txt:55 +msgid "" +"Python supports a wide range of operators for performing arithmetic, " +"comparison, and logical operations. These include arithmetic operators " +"like ``+``, ``-``, ``*``, and ``/``, as well as comparison operators like" +" ``<``, ``>``, ``==``, and ``!=``." +msgstr "" +"Python підтримує широкий спектр операторів для виконання арифметичних, " +"порівнянь і логічних операцій. До них належать арифметичні оператори, такі " +"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як ``<`` " +", ``>``, ``==`` і ``!=``. " + +#: ../../src/basics/syntax.txt +msgid "Control flow" +msgstr "Контроль потоку" + +#: ../../src/basics/syntax.txt:61 +msgid "" +"Python provides control flow statements like if, else, elif, for, and " +"while to control the flow of execution in a program. These statements are" +" used to make decisions, repeat code, or perform actions based on " +"conditions." +msgstr "" +"Python надає оператори потоку керування, як-от if, else, elif, for та while, " +"для керування потоком виконання в програмі. Ці оператори використовуються " +"для прийняття рішень, повторення коду або виконання дій на основі заданих " +"умов." + +#: ../../src/basics/syntax.txt:67 +msgid "" +"In Python, functions are defined using the def keyword and can take " +"arguments and return values. The body of a function is defined using a " +"block of indented code." +msgstr "" +"У Python функції визначаються за допомогою ключового слова def і можуть " +"отримувати аргументи та повертати значення. Тіло функції визначається за " +"допомогою блоку коду з відступами. " + +#: ../../src/basics/syntax.txt +msgid "Modules" +msgstr "Модулі" + +#: ../../src/basics/syntax.txt:72 +msgid "" +"Python has a large library of modules that provide pre-written code for a" +" variety of tasks. Modules can be imported into a program using the " +"import statement." +msgstr "" +"Python має велику бібліотеку модулів, які містять попередньо написаний код " +"для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " +"оператора імпорту." + +#: ../../src/basics/syntax.txt +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/syntax.txt:77 +msgid "" +"Python provides a way to handle errors and exceptions in a program using " +"the try, except, else, and finally keywords. These statements allow a " +"program to gracefully recover from errors and continue executing." +msgstr "" +"Python надає спосіб обробки помилок і винятків у програмі за допомогою " +"ключових слів try, except, else і finally. Ці оператори дозволяють програмі " +"плавно відновлюватися після помилок і продовжувати виконання. " + +#: ../../src/basics/syntax.txt:81 +msgid "In few words:" +msgstr "У кількох словах:" + +#: ../../src/basics/syntax.txt:83 +msgid "Input/Output example script" +msgstr "Приклад сценарію Input/Output" + +#: ../../src/basics/syntax.txt:102 +msgid "" +"The code snippet above demonstrates some basics abilities of Python to " +"gather data from the user, process it and print out back. Note the words " +"starting with a **#** (hash) symbol. This is a comment. Any sequence of " +"characters after the hash and till the line end are considered to be a " +"comment. These are for those people, who see the code and they are " +"ignored by the interpreter." +msgstr "" +"Наведений вище фрагмент коду демонструє деякі основні можливості Python " +"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть " +"увагу на слова, що починаються символом **#**(решітка). Це коментар. " +"Будь-яка послідовність символів після хеша і до кінця рядка вважається " +"коментарем. Це необхідно, щоб люди які бачать код могли його зрозуміти, при " +"цьому інтерпретатор їх ігнорує. " + +#: ../../src/basics/syntax.txt:108 +msgid "" +"On the other hand each individual line is the instruction for the " +"interpreter to perform some action, like gather inputs, do math, store " +"data in memory etc." +msgstr "" +"З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " +"певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " +"збереження даних у пам'яті тощо. " + +#: ../../src/basics/testing.txt:3 +msgid "Testing" +msgstr "Тестування" + +#: ../../src/basics/variables.txt:5 +msgid "" +"In computer science a **variable** is a named storage location in memory " +"that can hold a value (*data*). The value stored in a variable can be " +"changed or accessed by the program during its execution." +msgstr "" +"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " +"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " +"змінено або доступне програмою під час її виконання. " + +#: ../../src/basics/variables.txt:9 +msgid "" +"In Python, variables are created dynamically once a value is assigned to " +"them. This makes Python a dynamically typed language, which means that " +"the data type of a variable is inferred from the value assigned to it. " +"So, you do not need to declare a variable before using it, as in " +"statically typed languages." +msgstr "" +"У Python змінні створюються динамічно після присвоєння їм значення. Це " +"робить Python динамічно типізованою мовою, а це означає, що тип даних " +"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " +"оголошувати змінну перед її використанням, як у статично типізованих мовах. " + +#: ../../src/basics/variables.txt:14 +msgid "" +"The ability to create variables dynamically and infer their data type " +"makes Python code more concise and easier to read. However, it also " +"requires careful attention to variable naming and assignment to avoid " +"unexpected behavior." +msgstr "" +"Можливість динамічно створювати змінні та виводити їхні типи даних робить " +"код Python більш лаконічним і легшим для читання. Однак це також вимагає " +"пильної уваги до іменування та призначення змінних, щоб уникнути " +"неочікуваної поведінки. " + +#: ../../src/basics/variables.txt:18 +msgid "" +"In Python ``=`` (assignment operator) is used to set a value to some " +"variable, the portion on the left of the operator is a *variable name* " +"and the portion on the right is a *value* to assign to a variable." +msgstr "" +"У Python ``=`` (оператор присвоєння) використовується для встановлення " +"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " +"частина праворуч - це значення, яке призначається для неї. " + +#: ../../src/basics/variables.txt:22 +msgid "Variable assignment in Python" +msgstr "Присвоєння змінної в Python" + +#: ../../src/basics/variables.txt:29 +msgid "Variable assignment in Java" +msgstr "Присвоєння змінної в Java" + +#: ../../src/basics/variables.txt:37 +msgid "Naming" +msgstr "Присвоєння назви" + +#: ../../src/basics/variables.txt:39 +msgid "" +"In Python there are several rules that describe how to name your " +"variables. Some of these are requirements and cannot be ignored, others " +"are rather recommended than required and can be omitted. For now note, " +"that a variable name **cannot**:" +msgstr "" +"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " +"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " +"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" + +#: ../../src/basics/variables.txt:44 +msgid "a language keyword (like ``pass``, ``def`` or ``class``)" +msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" + +#: ../../src/basics/variables.txt:45 +msgid "start with a number (e.g. ``123``, ``1_something``)" +msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" + +#: ../../src/basics/variables.txt:46 +msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" +msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" + +#: ../../src/basics/variables.txt:47 +msgid "contain white spaces" +msgstr "містити пробіли" + +#: ../../src/basics/variables.txt:49 +msgid "Also here are some general recommendation on naming anything:" +msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" + +#: ../../src/basics/variables.txt:51 +msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" +msgstr "" +"не використовуйте вбудовані функції як назву змінної (наприклад, " +"``len = 42``)" + +#: ../../src/basics/variables.txt:52 +msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" +msgstr "" +"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``) " + From 4416d4cb66a64ccfb81e6089ee09d632c922acf0 Mon Sep 17 00:00:00 2001 From: Oleksandr Yeromin <127413390+Un1corN1k@users.noreply.github.com> Date: Sun, 26 Mar 2023 21:11:42 +0300 Subject: [PATCH 283/689] Apply suggestions from code review Co-authored-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/basics.po | 84 +++++++++++++-------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index b5423286b..6c1e5e16c 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -1,8 +1,8 @@ -# SOME DESCRIPTIVE TITLE. +# PYTHON/BASICS TRANSLATION # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. +# FIRST AUTHOR OLEKSANDR YEROMIN , 2023. # #, fuzzy msgid "" @@ -20,7 +20,7 @@ msgstr "" #: ../../src/basics/controlflow.txt:3 msgid "Control Flow" -msgstr "" +msgstr "Керування виконанням" #: ../../src/basics/datatypes.txt:3 msgid "Data Types" @@ -40,7 +40,7 @@ msgstr "" "Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984"`` ) " "або подією чи датою. Тип даних описує можливі операції, дозволені для даних, " "як-от додавання чисел або конкатенація для тексту " -"(наприклад, ``1 + 2 " "-> 3``, ``\"1\" + \"3 \" -> \"13\"``). " +"(наприклад, ``1 + 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." #: ../../src/basics/datatypes.txt:11 msgid "" @@ -482,7 +482,7 @@ msgstr "Результат" #: ../../src/basics/stdtypes.txt:33 msgid "``x + y``" -msgstr "``x + y``" +msgstr "" #: ../../src/basics/stdtypes.txt:33 msgid "sum of *x* and *y*" @@ -490,7 +490,7 @@ msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:35 msgid "``x - y``" -msgstr "``x - y``" +msgstr "" #: ../../src/basics/stdtypes.txt:35 msgid "difference of *x* and *y*" @@ -498,7 +498,7 @@ msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:37 msgid "``x * y``" -msgstr "``x * y``" +msgstr "" #: ../../src/basics/stdtypes.txt:37 msgid "product of *x* and *y*" @@ -506,7 +506,7 @@ msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:39 msgid "``x / y``" -msgstr "``x / y``" +msgstr "" #: ../../src/basics/stdtypes.txt:39 msgid "quotient of *x* and *y*" @@ -514,7 +514,7 @@ msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:41 msgid "``x // y``" -msgstr "``x // y``" +msgstr "" #: ../../src/basics/stdtypes.txt:41 msgid "floored quotient of *x* and *y*" @@ -522,7 +522,7 @@ msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:43 msgid "``x % y``" -msgstr "``x % y``" +msgstr "" #: ../../src/basics/stdtypes.txt:43 msgid "remainder of ``x / y``" @@ -530,15 +530,15 @@ msgstr "залишок від ділення``x / y``" #: ../../src/basics/stdtypes.txt:45 msgid "``-x``" -msgstr "``-x``" +msgstr "" #: ../../src/basics/stdtypes.txt:45 msgid "*x* negated" -msgstr "*x* заперечено" +msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:47 msgid "``+x``" -msgstr "``+x``" +msgstr "" #: ../../src/basics/stdtypes.txt:47 msgid "*y* unchanged" @@ -546,7 +546,7 @@ msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:49 msgid "``abs(x)``" -msgstr "``abs(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:49 msgid "absolute value or magnitude of *x*" @@ -554,7 +554,7 @@ msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:51 msgid "``int(x)``" -msgstr "``int(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:51 msgid "*x* converted to integer" @@ -562,7 +562,7 @@ msgstr "*x* перетворено на ціле число" #: ../../src/basics/stdtypes.txt:53 msgid "``float(x)``" -msgstr "``float(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:53 msgid "*x* converted to floating point" @@ -570,7 +570,7 @@ msgstr "*x* перетворено на число з плаваючою ком #: ../../src/basics/stdtypes.txt:55 msgid "``complex(re, im)``" -msgstr "``complex(re, im)``" +msgstr "" #: ../../src/basics/stdtypes.txt:55 msgid "" @@ -582,7 +582,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:58 msgid "``divmod(x, y)``" -msgstr "``divmod(x, y)``" +msgstr "" #: ../../src/basics/stdtypes.txt:58 msgid "the pair ``(x // y, x % y)``" @@ -590,7 +590,7 @@ msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:60 msgid "``pow(x, y)`` ``x ** y``" -msgstr "``pow(x, y)`` ``x ** y`" +msgstr "" #: ../../src/basics/stdtypes.txt:60 msgid "*x* to the power *y*" @@ -744,7 +744,7 @@ msgstr "Загальні операції" #: ../../src/basics/stdtypes.txt:151 msgid "``x in s`` ``x not in s``" -msgstr "``x in s`` ``x not in s``" +msgstr "" #: ../../src/basics/stdtypes.txt:151 msgid "" @@ -756,7 +756,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:154 msgid "``s + t``" -msgstr "``s + t``" +msgstr "" #: ../../src/basics/stdtypes.txt:154 msgid "the concatenation of *s* and *t*" @@ -764,7 +764,7 @@ msgstr "конкатенація s і t" #: ../../src/basics/stdtypes.txt:156 msgid "``s * n``" -msgstr "``s * n``" +msgstr "" #: ../../src/basics/stdtypes.txt:156 msgid "equivalent to adding *s* to itself *n* times" @@ -772,7 +772,7 @@ msgstr "еквівалентно додаванню *s* до себе *n* раз #: ../../src/basics/stdtypes.txt:158 msgid "``s[i]``" -msgstr "``s[i]``" +msgstr "" #: ../../src/basics/stdtypes.txt:158 msgid "*i*-th item of *s*, origin 0" @@ -780,7 +780,7 @@ msgstr "*i*-й елемент *s*, джерело 0" #: ../../src/basics/stdtypes.txt:160 msgid "``s[i:j]`` ``s[i:j:k]``" -msgstr "``s[i:j]`` ``s[i:j:k]``" +msgstr "" #: ../../src/basics/stdtypes.txt:160 msgid "" @@ -792,7 +792,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:163 msgid "``len(s)``" -msgstr "``len(s)``" +msgstr "" #: ../../src/basics/stdtypes.txt:163 msgid "length of *s*" @@ -800,7 +800,7 @@ msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:165 msgid "``min(s)``" -msgstr "``min(s)``" +msgstr "" #: ../../src/basics/stdtypes.txt:165 msgid "smallest item of *s*" @@ -808,7 +808,7 @@ msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:167 msgid "``max(s)``" -msgstr "``max(s)``" +msgstr "" #: ../../src/basics/stdtypes.txt:167 msgid "largest item of *s*" @@ -816,7 +816,7 @@ msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:169 msgid "``s.count(x)``" -msgstr "``s.count(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:169 msgid "total number of occurrences of *x* in *s*" @@ -824,7 +824,7 @@ msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:171 msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" +msgstr "" #: ../../src/basics/stdtypes.txt:171 msgid "" @@ -884,7 +884,7 @@ msgstr "Змінні типи послідовностей" #: ../../src/basics/stdtypes.txt:203 msgid "``s[i] = x``" -msgstr "``s[i] = x``" +msgstr "" #: ../../src/basics/stdtypes.txt:203 msgid "item *i* of *s* is replaced by *x*" @@ -892,7 +892,7 @@ msgstr "елемент *i* з *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:205 msgid "``s[i:j] = t``" -msgstr "``s[i:j] = t``" +msgstr "" #: ../../src/basics/stdtypes.txt:205 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" @@ -900,7 +900,7 @@ msgstr "фрагмент *s* від *i* до *j*, замінений вміст #: ../../src/basics/stdtypes.txt:208 msgid "``del s[i:j]``" -msgstr "``del s[i:j]``" +msgstr "" #: ../../src/basics/stdtypes.txt:208 msgid "same as ``s[i:j] = []``" @@ -908,7 +908,7 @@ msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:210 msgid "``s[i:j:k] = t``" -msgstr "``s[i:j:k] = t``" +msgstr "" #: ../../src/basics/stdtypes.txt:210 msgid "the elements of *s* are replaced by those of *t*[#]_" @@ -916,7 +916,7 @@ msgstr "елементи *s* замінюються елементами *t*[#]_ #: ../../src/basics/stdtypes.txt:212 msgid "``del s[i:j:k]``" -msgstr "``del s[i:j:k]``" +msgstr "" #: ../../src/basics/stdtypes.txt:212 msgid "removes the elements of ``s[i:j:k]`` from the list" @@ -924,7 +924,7 @@ msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:214 msgid "``s.append(x)``" -msgstr "``s.append(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:214 msgid "" @@ -935,7 +935,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:217 msgid "``s.clear()``" -msgstr "``s.clear()``" +msgstr "" #: ../../src/basics/stdtypes.txt:217 msgid "removes all items from *s* (``del s[:]``)[#3.3]_" @@ -943,7 +943,7 @@ msgstr "видаляє всі елементи з *s* (``del s[:]``)[#3.3]_" #: ../../src/basics/stdtypes.txt:219 msgid "``s.copy()``" -msgstr "``s.copy()``" +msgstr "" #: ../../src/basics/stdtypes.txt:219 msgid "creates a shallow copy of *s* (``s[:]``)[#3.3]_" @@ -951,7 +951,7 @@ msgstr "створює поверхневу копію *s* (``s[:]``)[#3.3]_" #: ../../src/basics/stdtypes.txt:221 msgid "``s.extend(t)`` ``s += t``" -msgstr "``s.extend(t)`` ``s += t`` +msgstr "" #: ../../src/basics/stdtypes.txt:221 msgid "extends *s* with the contents of *t*" @@ -959,7 +959,7 @@ msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:224 msgid "``s.insert(i, x)``" -msgstr "``s.insert(i, x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:224 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" @@ -967,7 +967,7 @@ msgstr "вставляє *x* у *s* за індексом *i*; те саме, щ #: ../../src/basics/stdtypes.txt:227 msgid "``s.pop()``, ``s.pop(i)``" -msgstr "``s.pop()``, ``s.pop(i)``" +msgstr "" #: ../../src/basics/stdtypes.txt:227 msgid "" @@ -979,7 +979,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:230 msgid "``s.remove(x)``" -msgstr "``s.remove(x)``" +msgstr "" #: ../../src/basics/stdtypes.txt:230 msgid "remove the first item that is equal to *x* from *s*" @@ -987,7 +987,7 @@ msgstr "видалити перший елемент, який дорівнює #: ../../src/basics/stdtypes.txt:232 msgid "``s.reverse()``" -msgstr "``s.reverse()``" +msgstr "" #: ../../src/basics/stdtypes.txt:232 msgid "reverses the items of *s* in place" From db2f62def1f4b4b0f5b206a4e7b2588a996d9644 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 27 Mar 2023 18:11:59 +0300 Subject: [PATCH 284/689] Added blog submodule "blog" is a Django project. It contains challenges for the web-development training block. --- .gitmodules | 3 +++ blog | 1 + 2 files changed, 4 insertions(+) create mode 160000 blog diff --git a/.gitmodules b/.gitmodules index fbf6f4a41..f858bdca8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "problem-sets"] path = problem-sets url = https://github.com/edu-python-course/problem-sets +[submodule "blog"] + path = blog + url = https://github.com/edu-python-course/blog diff --git a/blog b/blog new file mode 160000 index 000000000..2e531410b --- /dev/null +++ b/blog @@ -0,0 +1 @@ +Subproject commit 2e531410b5d0e5a2781bb679b4583d80039df531 From e4b87a8b28fa24bd6a2d0f7e90fc3084672db744 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 4 Apr 2023 16:17:22 +0300 Subject: [PATCH 285/689] Added appendixes Added specification for Django project. Added convenience store challenge description. --- src/appx/blog.md | 2 ++ src/appx/conv_store.txt | 1 + src/conf.py | 2 ++ src/index.txt | 2 ++ 4 files changed, 7 insertions(+) create mode 100644 src/appx/blog.md create mode 100644 src/appx/conv_store.txt diff --git a/src/appx/blog.md b/src/appx/blog.md new file mode 100644 index 000000000..835e1d15f --- /dev/null +++ b/src/appx/blog.md @@ -0,0 +1,2 @@ +```{include} /../blog/docs/spec.md +``` diff --git a/src/appx/conv_store.txt b/src/appx/conv_store.txt new file mode 100644 index 000000000..cb1d4aaa1 --- /dev/null +++ b/src/appx/conv_store.txt @@ -0,0 +1 @@ +.. include:: /../problem-sets/src/conv_store/challenge.rst diff --git a/src/conf.py b/src/conf.py index 4060685b5..40cb0d14f 100644 --- a/src/conf.py +++ b/src/conf.py @@ -62,4 +62,6 @@ "appx/env_path", "appx/precedence", "appx/printf", + "appx/conv_store", + "appx/blog", ] diff --git a/src/index.txt b/src/index.txt index 8da277c3e..8e98da58f 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,6 +27,8 @@ appx/env_path appx/precedence appx/printf + appx/conv_store + appx/blog .. rubric:: References From 31c57c8c9305aca3db73c80011b373688e95f665 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 4 Apr 2023 16:18:28 +0300 Subject: [PATCH 286/689] Added "conv store" translation --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 1445 +++++++++++++++++++++++++++ 2 files changed, 1446 insertions(+), 1 deletion(-) create mode 100644 src/_locales/ua/LC_MESSAGES/appx.po diff --git a/problem-sets b/problem-sets index 738e6d464..d73d389d9 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 738e6d464d7173d5027d6ff882602109f19088b5 +Subproject commit d73d389d9b78f0dbbbf7cfe7a39d7bfab193718c diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po new file mode 100644 index 000000000..68c519a02 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -0,0 +1,1445 @@ +# APPENDIXES TRANSLATION FILE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-04 15:54+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: ua\n" +"Language-Team: ua \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: ../../blog/docs/spec.md:2 +msgid "Blog Project Specification" +msgstr "" + +#: ../../blog/docs/spec.md:5 +msgid "" +"As a developer you were asked to create a simple blog site. The goal is " +"to create a place on the Internet where users can share their stories to " +"public." +msgstr "" + +#: ../../blog/docs/spec.md:8 +msgid "" +"This document applies requirements for the entire project step-by-step. " +"You will start from creating the appropriate URL dispatcher and " +"connecting a PostgreSQL database to store the data and will finish with " +"implementing REST API for the blog." +msgstr "" + +#: ../../blog/docs/spec.md:13 +msgid "" +"There are some boiler plates, that may be useful in your future work, but" +" you aren't forced to use them. It's on your choice." +msgstr "" + +#: ../../blog/docs/spec.md:16 +msgid "[Starter template](https://github.com/edu-python-course/django-template)" +msgstr "" + +#: ../../blog/docs/spec.md:17 +msgid "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +msgstr "" + +#: ../../blog/docs/spec.md:20 +msgid "Challenge: Site views" +msgstr "" + +#: ../../blog/docs/spec.md:23 +msgid "" +"It's ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." +msgstr "" + +#: ../../blog/docs/spec.md:29 +msgid "" +"`/blogs/`: A site's homepage. This will contain a list of blogs available" +" via the django site." +msgstr "" + +#: ../../blog/docs/spec.md:32 +msgid "" +"`/about/`: Provides a regular text for a user, describing the " +"functionalities of the django site." +msgstr "" + +#: ../../blog/docs/spec.md:35 +msgid "`/`: same as `/blogs/`" +msgstr "" + +#: ../../blog/docs/spec.md:37 +msgid "" +"`//`: A single blog post detail view. The URL contains dynamic part" +" in it. This will be used to fetch a single blogpost from the database." +msgstr "" + +#: ../../blog/docs/spec.md:40 +msgid "`/comment/`: This view will be used to add comments to a blogpost." +msgstr "" + +#: ../../blog/docs/spec.md:42 +msgid "`/create/`: A post creation form." +msgstr "" + +#: ../../blog/docs/spec.md:44 +msgid "`//update/`: A view to update an existing post data." +msgstr "" + +#: ../../blog/docs/spec.md:46 +msgid "`//delete/`: A view to confirm post deletion." +msgstr "" + +#: ../../blog/docs/spec.md:48 +msgid "`/profile/`: A site user's personal page." +msgstr "" + +#: ../../blog/docs/spec.md:50 +msgid "" +"`/change_password/`: This route will be used to change users' credential " +"data." +msgstr "" + +#: ../../blog/docs/spec.md:52 +msgid "`/register/`: This view contains a user registration form." +msgstr "" + +#: ../../blog/docs/spec.md:54 +msgid "`/login/`: This view contains a login form." +msgstr "" + +#: ../../blog/docs/spec.md:56 +msgid "`/logout/`: Logout page. This view should redirect user back to homepage." +msgstr "" + +#: ../../blog/docs/spec.md:61 +msgid "Challenge: Data models" +msgstr "" + +#: ../../blog/docs/spec.md:64 +msgid "You are to implement data models for the blog site." +msgstr "" + +#: ../../blog/docs/spec.md:66 +msgid "The `auth.User` will be used as `user` model." +msgstr "" + +#: ../../blog/docs/spec.md:68 +msgid "" +"`post.slug` value should be autogenerated when a record is created or " +"updated and follow the pattern:" +msgstr "" + +#: ../../blog/docs/spec.md:75 +msgid "" +"User preferred topics should be marked with a `notify` flag. This value " +"should be `True` by default." +msgstr "" + +#: ../../blog/docs/spec.md:108 +msgid "Challenge: ORM" +msgstr "" + +#: ../../blog/docs/spec.md:111 +msgid "" +"Update existing views to represent entities that are actually stored " +"inside the project's database." +msgstr "" + +#: ../../blog/docs/spec.md:114 +msgid "`/blogs/` or `/`: should represent a list of existing blogposts." +msgstr "" + +#: ../../blog/docs/spec.md:116 +msgid "`//`: should represent a single existing blogpost." +msgstr "" + +#: ../../blog/docs/spec.md:118 +msgid "" +"`/profile/`: should contain information about user and a list " +"of posts authored by this user." +msgstr "" + +#: ../../blog/docs/spec.md:121 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise `Http404` in case entity couldn't be fetched." +msgstr "" + +#: ../../blog/docs/spec.md:126 +msgid "Challenge: Templates" +msgstr "" + +#: ../../blog/docs/spec.md:129 +msgid "" +"It's time to work with data representations. You're to add HTML template " +"to the blog site project. Keep templates together with appropriate " +"applications, we don't need mess in project files." +msgstr "" + +#: ../../blog/docs/spec.md:134 +msgid "Application-level templates should be extended from the base one." +msgstr "" + +#: ../../blog/docs/spec.md:135 +msgid "" +"Each page should contain a navbar at the top. Navbar will contain " +"permalinks to the home and about pages." +msgstr "" + +#: ../../blog/docs/spec.md:137 +msgid "" +"For anonymous users `/register/` and `/login/` links should be visible in" +" navbar." +msgstr "" + +#: ../../blog/docs/spec.md:139 +msgid "" +"For authenticated users `/logout/` and `/create/` links should be visible" +" in navbar." +msgstr "" + +#: ../../blog/docs/spec.md:141 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin " +"page." +msgstr "" + +#: ../../blog/docs/spec.md:142 +msgid "" +"Each page should contain a list of links to archive views for the last " +"year." +msgstr "" + +#: ../../blog/docs/spec.md:143 +msgid "For the `post_list.html` each post entity should provide the information:" +msgstr "" + +#: ../../blog/docs/spec.md:144 +msgid "title (each word should be capitalized)" +msgstr "" + +#: ../../blog/docs/spec.md:145 +msgid "creation date" +msgstr "" + +#: ../../blog/docs/spec.md:146 +msgid "list of related topics (first 3 topics)" +msgstr "" + +#: ../../blog/docs/spec.md:147 +msgid "trimmed content (~50 words or fewer)" +msgstr "" + +#: ../../blog/docs/spec.md:148 +msgid "number of comments" +msgstr "" + +#: ../../blog/docs/spec.md:149 +msgid "Each post entity on a list view should be a link to corresponding post." +msgstr "" + +#: ../../blog/docs/spec.md:150 +msgid "Detail view should contain links to `/update/` and `/delete/`." +msgstr "" + +#: ../../blog/docs/spec.md:151 +msgid "Detail view should contain a list of post related comments." +msgstr "" + +#: ../../blog/docs/spec.md:152 +msgid "" +"Auth views should use `register.html` and `login.html` with corresponding" +" forms." +msgstr "" + +#: ../../blog/docs/spec.md:155 +msgid "" +"For now, it's ok to use admin as \"test user\". Authentication system " +"will be implemented in the future challenges. `user` object is available " +"(by default) in any template context. To test anonymous access you can " +"use `usar.is_authenticated`, which returns `False` for non-authenticated " +"users." +msgstr "" + +#: ../../blog/docs/spec.md:162 +msgid "Challenge: Auth forms" +msgstr "" + +#: ../../blog/docs/spec.md:165 +msgid "Create form for new users registration with required fields:" +msgstr "" + +#: ../../blog/docs/spec.md:166 +msgid "`username`" +msgstr "" + +#: ../../blog/docs/spec.md:167 +msgid "`email`" +msgstr "" + +#: ../../blog/docs/spec.md:168 +msgid "`password`" +msgstr "" + +#: ../../blog/docs/spec.md:169 +msgid "`confirm password`" +msgstr "" + +#: ../../blog/docs/spec.md:170 +msgid "`username` value should be validated against existing values" +msgstr "" + +#: ../../blog/docs/spec.md:171 +msgid "`password` and `confirm password` values should match" +msgstr "" + +#: ../../blog/docs/spec.md:172 +msgid "Create form for existing users login" +msgstr "" + +#: ../../blog/docs/spec.md:173 +msgid "Validations errors are to be rendered on the template" +msgstr "" + +#: ../../blog/docs/spec.md:175 +msgid "Challenge: Blogpost Creation and Update" +msgstr "" + +#: ../../blog/docs/spec.md:178 +msgid "Create a form to work with the blogpost model." +msgstr "" + +#: ../../blog/docs/spec.md:179 +msgid "" +"Create a form to gather a comment from a user. Form should be used within" +" a \"post detail\" view." +msgstr "" + +#: ../../blog/docs/spec.md:181 +msgid "Form should be used for *create* and *update* view." +msgstr "" + +#: ../../blog/docs/spec.md:183 +msgid "It's ok to use a *pre-defined* user as a post's author for now." +msgstr "" + +#: ../../blog/docs/spec.md:187 +msgid "Challenge: Authentication" +msgstr "" + +#: ../../blog/docs/spec.md:190 +msgid "" +"`/register/`: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " +"authentication process. Invalid form should provide information about " +"error(s)." +msgstr "" + +#: ../../blog/docs/spec.md:195 +msgid "" +"`/login/`: Users should provide their credentials to login. In case login" +" is successful they should be redirected to their profile (if no " +"`next=url` query string available)." +msgstr "" + +#: ../../blog/docs/spec.md:199 +msgid "" +"`/create/`: Only authenticated users should be able to visit this page. " +"In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to post creation. Then a post is created, it should be authored " +"by the currently authenticated user." +msgstr "" + +#: ../../blog/docs/spec.md:205 +msgid "" +"`//comment`: Currently authenticated user should be referenced as a" +" comment's author." +msgstr "" + +#: ../../blog/docs/spec.md:207 +msgid "Posts may be modified or deleted only by their authors (no exceptions)." +msgstr "" + +#: ../../blog/docs/spec.md:211 +msgid "Challenge: Class-Based Views" +msgstr "" + +#: ../../blog/docs/spec.md:214 +msgid "Replace **all** existing views via ``CBV``." +msgstr "" + +#: ../../blog/docs/spec.md:215 +msgid "Existing functionality should not be corrupted." +msgstr "" + +#: ../../blog/docs/spec.md:217 +msgid "It's ok to use Django built-in views for auth." +msgstr "" + +#: ../../blog/docs/spec.md:226 +msgid "Challenge: Serializers" +msgstr "" + +#: ../../blog/docs/spec.md:229 +msgid "Create serializers for:" +msgstr "" + +#: ../../blog/docs/spec.md:230 +msgid "Blogpost entity" +msgstr "" + +#: ../../blog/docs/spec.md:231 +msgid "Blogpost comment" +msgstr "" + +#: ../../blog/docs/spec.md:232 +msgid "User" +msgstr "" + +#: ../../blog/docs/spec.md:236 +msgid "Challenge: API views" +msgstr "" + +#: ../../blog/docs/spec.md:239 +msgid "" +"All blog-site functionality are to be reflected via REST API. It's ok to " +"use *pre-defined* user as a post's author for now." +msgstr "" + +#: ../../blog/docs/spec.md:244 +msgid "Challenge: Authentication and Permissions" +msgstr "" + +#: ../../blog/docs/spec.md:247 +msgid "Implement REST authentication system." +msgstr "" + +#: ../../blog/docs/spec.md:248 +msgid "Only account owner can change their account data." +msgstr "" + +#: ../../blog/docs/spec.md:249 +msgid "Only authenticated users can create posts and comments." +msgstr "" + +#: ../../blog/docs/spec.md:250 +msgid "Only authors can change their posts." +msgstr "" + +#: ../../src/appx/code_edit.txt:5 +msgid "Code Editors" +msgstr "" + +#: ../../src/appx/code_edit.txt:7 +msgid "" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:3 +msgid "Convenience Store Challenge" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:5 +msgid "" +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." +msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " "попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " "це буде складним завданням застосувати сучасний підхід до цього" " місця та реорганізувати процеси. На щастя, ви розробник " "Python, який знає, як працювати з різними доходами та результатами даних. " "Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" " деякі примітки, щоб розділити весь проект на окремі частини для " "поетапної реалізації." + +#: ../../problem-sets/src/conv_store/challenge.rst:14 +msgid "Your notes are here," +msgstr "Ваші нотатки тут," + +#: ../../problem-sets/src/conv_store/challenge.rst:18 +msgid "Products and Carts" +msgstr "Товари та кошик" + +#: ../../problem-sets/src/conv_store/challenge.rst:20 +msgid "" +"It's a good idea to with basics - the objects you're going to work with. " +"At stage one the main goal is to implement data models - classes to work " +"around data in the future." +msgstr "" +"Це гарна ідея з основами - об'єктами, з якими ви збираєтеся працювати. " +"На першому етапі головною метою є реалізація моделей даних - класів для " +"роботи з даними в майбутньому." + +#: ../../problem-sets/src/conv_store/challenge.rst:25 +msgid "Product" +msgstr "Товар" + +#: ../../problem-sets/src/conv_store/challenge.rst:27 +msgid "This class represents goods available to purchase in the store." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: ../../problem-sets/src/conv_store/challenge.rst:29 +msgid "Each product instance should have next attributes:" +msgstr "Кожен екземпляр продукту повинен мати такі атрибути:" + +#: ../../problem-sets/src/conv_store/challenge.rst:31 +msgid "``name`` - a product title (e.g. \"apple\", \"juice\")" +msgstr "``name`` - назва товару (прик. \"apple\", \"juice\")" + +#: ../../problem-sets/src/conv_store/challenge.rst:32 +msgid "``price`` - a price for a single product unit (e.g. 3655, 500, 12999)" +msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" + +#: ../../problem-sets/src/conv_store/challenge.rst:33 +msgid "``unit`` - a size of a single product's unit (e.g. 1, 0.500, 12)" +msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: ../../problem-sets/src/conv_store/challenge.rst:35 +msgid "" +"``Product`` class should implement ``get_total`` method to calculate " +"price for a specified quantity of a product. Quantity arguments is " +"something you can think about as \"total number of product's units\". It " +"is of a numeric type (``int`` or ``float``) and it may be omitted. In " +"case argument hasn't been passed just consider it is equal to unit " +"attribute value." +msgstr "" +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"ціни для визначеної кількості товару. Аргументи кількості - це те, " +"що ви можете розглядати як \"загальну кількість одиниць продукту\". " +"Він має числовий тип (``int`` або ``float``), і його можна опустити. " +"У випадку, якщо аргумент не було передано, просто вважайте, що він дорівнює " +"одиничному значенню атрибута." + +#: ../../problem-sets/src/conv_store/challenge.rst:43 +#: ../../problem-sets/src/conv_store/challenge.rst:68 +#: ../../problem-sets/src/conv_store/challenge.rst:112 +#: ../../problem-sets/src/conv_store/challenge.rst:175 +#: ../../problem-sets/src/conv_store/challenge.rst:210 +msgid "Test Cases" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:54 +msgid "Shopping Cart" +msgstr "Кошик для покупок" + +#: ../../problem-sets/src/conv_store/challenge.rst:56 +msgid "" +"This class represents the container for the products. It's main " +"responsibility is to store information about the purchases and their " +"amount (quantities)." +msgstr "" +"Цей клас представляє контейнер для продуктів. Його основна відповідальність -" +" зберігати інформацію про покупки та їх кількість." + +#: ../../problem-sets/src/conv_store/challenge.rst:59 +msgid "" +"Each cart instance should store data about ``Product`` objects in it and " +"corresponding quantity value for each individual product." +msgstr "" +"Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " +"ньому та відповідне значення кількості для кожного окремого продукту." + +#: ../../problem-sets/src/conv_store/challenge.rst:61 +msgid "" +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." +msgstr "" +"``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " +"вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " +"пропущено, просто використовує натомість значення ``Product.unit``." + +#: ../../problem-sets/src/conv_store/challenge.rst:64 +msgid "" +"``ShoppingCart`` should implement ``get_total`` method to calculate the " +"total price for the entire cart contents." +msgstr "" +"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення загальної" +" ціни всього вмісту кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:83 +msgid "Initialization, Representation and Type Casting" +msgstr "Ініціалізація, представлення та приведення типів" + +#: ../../problem-sets/src/conv_store/challenge.rst:85 +msgid "" +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." +msgstr "" +"Важко встановлювати властивості одну за одною, також неінформативно" +"отримувати представлення рядків об'єктів за замовчуванням. Настав час це " +"виправити." + +#: ../../problem-sets/src/conv_store/challenge.rst:88 +msgid "``Product`` should be initialized with all required data, no defaults." +msgstr "" +"``Продукт`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." + +#: ../../problem-sets/src/conv_store/challenge.rst:89 +msgid "" +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." +msgstr "" +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." + +#: ../../problem-sets/src/conv_store/challenge.rst:91 +msgid "Provide a human readable representations. For example:" +msgstr "Надайте представлення, зрозумілі людині. Наприклад:" + +#: ../../problem-sets/src/conv_store/challenge.rst:93 +msgid "``Product('juice', 35.66, 1)``" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:94 +msgid "````" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:96 +msgid "" +"While casting product instance to ``str`` type it should be equal to its " +"``name`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``str`` він повинен " +"дорівнювати значенню атрибута ``name``." + +#: ../../problem-sets/src/conv_store/challenge.rst:98 +msgid "" +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." + +#: ../../problem-sets/src/conv_store/challenge.rst:100 +msgid "" +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." +msgstr "" +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." + +#: ../../problem-sets/src/conv_store/challenge.rst:102 +msgid "" +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." +msgstr "" +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:105 +msgid "Implement equality operator support for your objects:" +msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" + +#: ../../problem-sets/src/conv_store/challenge.rst:107 +msgid "consider products equal if all their properties are the same" +msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:108 +msgid "" +"consider carts equal if products and corresponding quantities are the same" +msgstr "" +"вважати кошики рівними, якщо продукти та відповідна кількість однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:134 +msgid "Payment Processors" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:136 +msgid "" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:139 +msgid "cart validation - it should not be empty or already purchased" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:140 +msgid "payment validation - various payment types requires various validations" +msgstr "" +"підтвердження платежу - різні типи платежу вимагають різних перевірок" + +#: ../../problem-sets/src/conv_store/challenge.rst:141 +msgid "purchasing the cart" +msgstr "купівля кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:143 +msgid "" +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." +msgstr "" +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." + +#: ../../problem-sets/src/conv_store/challenge.rst:146 +msgid "" +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." +msgstr "" +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість " "захищеною, оскільки до неї не слід звертатися поза " +"екземпляром картки." + +#: ../../problem-sets/src/conv_store/challenge.rst:149 +msgid "" +"Implement ``PaymentValidator`` class with ``is_valid`` that takes no " +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." +msgstr "" +"Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " +"аргументів і повертає значення логічного типу. Це абстрактний клас " +"для майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:152 +msgid "" +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." +msgstr "" +"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який " +"бере об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний " +"клас для майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:155 +msgid "" +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." +msgstr "" +"Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " +"цього класу вважаються завжди дійсними." + +#: ../../problem-sets/src/conv_store/challenge.rst:157 +msgid "Inherit ``CodeValidator`` from the base validator." +msgstr "Успадкувати ``CodeValidator`` від основного валідатора." + +#: ../../problem-sets/src/conv_store/challenge.rst:159 +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." + +#: ../../problem-sets/src/conv_store/challenge.rst:160 +msgid "" +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." +msgstr "" +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." + +#: ../../problem-sets/src/conv_store/challenge.rst:164 +msgid "" +"Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." +msgstr "" +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." + +#: ../../problem-sets/src/conv_store/challenge.rst:169 +msgid "" +"Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing card payment...\" and \"Security code: {code}\" should be " +"printed out." +msgstr "" +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка платежу карткою...\" і \"Код безпеки : {code}\" слід " +"роздрукувати." + +#: ../../problem-sets/src/conv_store/challenge.rst:189 +msgid "More Enhancements for Shopping Carts" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:191 +msgid "Make your ``ShoppingCart`` an actual container" +msgstr "" + +#: ../../problem-sets/src/conv_store/challenge.rst:193 +msgid "" +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." +msgstr "" +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." + +#: ../../problem-sets/src/conv_store/challenge.rst:195 +msgid "" +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." +msgstr "" +"Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " +"товар та відповідну кількість " +"(type hint: ``Tuple[Product, Union[int, " "float]] ``)." + +#: ../../problem-sets/src/conv_store/challenge.rst:199 +msgid "" +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." +msgstr "" +"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати примірник" +" продукту та відповідну кількість для кожної ітерації." + +#: ../../problem-sets/src/conv_store/challenge.rst:201 +msgid "" +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." +msgstr "" +"Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " +"кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " +"натомість відповідне значення кількості." + +#: ../../problem-sets/src/conv_store/challenge.rst:204 +msgid "" +"Implement ``remove_product`` method to completely remove some product " +"from the cart." +msgstr "" +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти " +"з кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:206 +msgid "" +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." +msgstr "" +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:235 +msgid "Testing Software" +msgstr "Тестування програмного забезпечення" + +#: ../../problem-sets/src/conv_store/challenge.rst:237 +msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." +msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." + +#: ../../problem-sets/src/conv_store/challenge.rst:239 +msgid "Tests should be located inside of \"tests\" directory." +msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." + +#: ../../problem-sets/src/conv_store/challenge.rst:240 +msgid "``pytest`` and ``coverage`` libraries will be used for testing." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." + +#: ../../problem-sets/src/conv_store/challenge.rst:241 +#, python-format +msgid "At least 50% coverage." +msgstr "Принаймні 50% покриття." + +#: ../../problem-sets/src/conv_store/challenge.rst:242 +msgid "Project dependencies are to be updated." +msgstr "Залежності проекту потрібно оновити." + +#: ../../src/appx/env_path.txt:5 +msgid "Issue - System Environment PATH" +msgstr "" + +#: ../../src/appx/precedence.txt:8 +msgid "Operator Precedence" +msgstr "" + +#: ../../src/appx/precedence.txt:10 +msgid "" +"The following table summarizes the operator precedence in Python, from " +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." +msgstr "" + +#: ../../src/appx/precedence.txt:16 +msgid "Operator" +msgstr "" + +#: ../../src/appx/precedence.txt:16 +msgid "Description" +msgstr "" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" +msgstr "" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" +msgstr "" + +#: ../../src/appx/precedence.txt:23 +msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" +msgstr "" + +#: ../../src/appx/precedence.txt:23 +msgid "Subscription, slicing, call, attribute reference" +msgstr "" + +#: ../../src/appx/precedence.txt:28 +msgid "``await x``" +msgstr "" + +#: ../../src/appx/precedence.txt:28 +msgid "Await expression" +msgstr "" + +#: ../../src/appx/precedence.txt:30 +msgid "``**``" +msgstr "" + +#: ../../src/appx/precedence.txt:30 +msgid "Exponentiation [#]_" +msgstr "" + +#: ../../src/appx/precedence.txt:32 +msgid "``+x``, ``-x``, ``~x``" +msgstr "" + +#: ../../src/appx/precedence.txt:32 +msgid "Positive, negative, bitwise NOT" +msgstr "" + +#: ../../src/appx/precedence.txt:34 +msgid "``*``, ``@``, ``/``, ``//``, ``%``" +msgstr "" + +#: ../../src/appx/precedence.txt:34 +msgid "" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" +msgstr "" + +#: ../../src/appx/precedence.txt:37 +msgid "``+``, ``-``" +msgstr "" + +#: ../../src/appx/precedence.txt:37 +msgid "Addition and subtraction" +msgstr "" + +#: ../../src/appx/precedence.txt:39 +msgid "``<<``, ``>>``" +msgstr "" + +#: ../../src/appx/precedence.txt:39 +msgid "Shifts" +msgstr "" + +#: ../../src/appx/precedence.txt:41 +msgid "``&``" +msgstr "" + +#: ../../src/appx/precedence.txt:41 +msgid "Bitwise AND" +msgstr "" + +#: ../../src/appx/precedence.txt:43 +msgid "``^``" +msgstr "" + +#: ../../src/appx/precedence.txt:43 +msgid "Bitwise XOR" +msgstr "" + +#: ../../src/appx/precedence.txt:45 +msgid "``|``" +msgstr "" + +#: ../../src/appx/precedence.txt:45 +msgid "Bitwise OR" +msgstr "" + +#: ../../src/appx/precedence.txt:47 +msgid "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" +msgstr "" + +#: ../../src/appx/precedence.txt:47 +msgid "Comparisons, including membership tests and identity tests" +msgstr "" + +#: ../../src/appx/precedence.txt:52 +msgid "``not x``" +msgstr "" + +#: ../../src/appx/precedence.txt:52 +msgid "Boolean NOT" +msgstr "" + +#: ../../src/appx/precedence.txt:54 +msgid "``and``" +msgstr "" + +#: ../../src/appx/precedence.txt:54 +msgid "Boolean AND" +msgstr "" + +#: ../../src/appx/precedence.txt:56 +msgid "``or``" +msgstr "" + +#: ../../src/appx/precedence.txt:56 +msgid "Boolean OR" +msgstr "" + +#: ../../src/appx/precedence.txt:58 +msgid "``if - else``" +msgstr "" + +#: ../../src/appx/precedence.txt:58 +msgid "Conditional expression (ternary ``if``)" +msgstr "" + +#: ../../src/appx/precedence.txt:60 +msgid "``lambda``" +msgstr "" + +#: ../../src/appx/precedence.txt:60 +msgid "Lambda expression" +msgstr "" + +#: ../../src/appx/precedence.txt:62 +msgid "``=``, ``:=``" +msgstr "" + +#: ../../src/appx/precedence.txt:62 +msgid "Assignment expression" +msgstr "" + +#: ../../src/appx/precedence.txt:65 +msgid "" +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." +msgstr "" + +#: ../../src/appx/precedence.txt:67 +msgid "" +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." +msgstr "" + +#: ../../src/appx/printf.txt:7 +msgid "``printf-style`` String Formatting" +msgstr "" + +#: ../../src/appx/printf.txt:9 +msgid "" +"String objects have one unique built-in operation: the ``%`` operator " +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" + +#: ../../src/appx/printf.txt:16 +msgid "The conversion flag characters are:" +msgstr "" + +#: ../../src/appx/printf.txt:19 +msgid "Flag" +msgstr "" + +#: ../../src/appx/printf.txt:19 ../../src/appx/printf.txt:37 +msgid "Meaning" +msgstr "" + +#: ../../src/appx/printf.txt:21 +msgid "``#``" +msgstr "" + +#: ../../src/appx/printf.txt:21 +msgid "The value conversion will use the \"alternative form\"" +msgstr "" + +#: ../../src/appx/printf.txt:23 +msgid "``0``" +msgstr "" + +#: ../../src/appx/printf.txt:23 +msgid "The conversion will be zero padded for numeric values" +msgstr "" + +#: ../../src/appx/printf.txt:25 +msgid "``'-'``" +msgstr "" + +#: ../../src/appx/printf.txt:25 +msgid "" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" +msgstr "" + +#: ../../src/appx/printf.txt:28 +msgid "``' '``" +msgstr "" + +#: ../../src/appx/printf.txt:28 +msgid "(a space) A blank should be left before a positive number" +msgstr "" + +#: ../../src/appx/printf.txt:30 +msgid "``'+'``" +msgstr "" + +#: ../../src/appx/printf.txt:30 +msgid "" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" +msgstr "" + +#: ../../src/appx/printf.txt:34 +msgid "The conversion types are:" +msgstr "" + +#: ../../src/appx/printf.txt:37 +msgid "Conversion" +msgstr "" + +#: ../../src/appx/printf.txt:39 +msgid "``'d'``" +msgstr "" + +#: ../../src/appx/printf.txt:39 ../../src/appx/printf.txt:41 +msgid "Signed integer decimal" +msgstr "" + +#: ../../src/appx/printf.txt:41 +msgid "``'i'``" +msgstr "" + +#: ../../src/appx/printf.txt:43 +msgid "``'o'``" +msgstr "" + +#: ../../src/appx/printf.txt:43 +msgid "Signed octal value" +msgstr "" + +#: ../../src/appx/printf.txt:45 +msgid "``'u'``" +msgstr "" + +#: ../../src/appx/printf.txt:45 +msgid "Obsolete type - it is identical to ``'d'``" +msgstr "" + +#: ../../src/appx/printf.txt:47 +msgid "``'x'``" +msgstr "" + +#: ../../src/appx/printf.txt:47 +msgid "Signed hexadecimal (lowercase)" +msgstr "" + +#: ../../src/appx/printf.txt:49 +msgid "``'X'``" +msgstr "" + +#: ../../src/appx/printf.txt:49 +msgid "Signed hexadecimal (uppercase)" +msgstr "" + +#: ../../src/appx/printf.txt:51 +msgid "``'e'``" +msgstr "" + +#: ../../src/appx/printf.txt:51 +msgid "Floating point exponential format (lowercase)" +msgstr "" + +#: ../../src/appx/printf.txt:53 +msgid "``'E'``" +msgstr "" + +#: ../../src/appx/printf.txt:53 +msgid "Floating point exponential format (uppercase)" +msgstr "" + +#: ../../src/appx/printf.txt:55 +msgid "``'f'`` ``'F'``" +msgstr "" + +#: ../../src/appx/printf.txt:55 +msgid "Floating point decimal format" +msgstr "" + +#: ../../src/appx/printf.txt:58 +msgid "``'g'``" +msgstr "" + +#: ../../src/appx/printf.txt:61 +msgid "``'G'``" +msgstr "" + +#: ../../src/appx/printf.txt:58 +msgid "" +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." +msgstr "" + +#: ../../src/appx/printf.txt:63 +msgid "``'c'``" +msgstr "" + +#: ../../src/appx/printf.txt:63 +msgid "Single character (accepts integer or single character string)" +msgstr "" + +#: ../../src/appx/printf.txt:65 +msgid "``'r'``" +msgstr "" + +#: ../../src/appx/printf.txt:65 +msgid "Converts any Python object using ``repr()``" +msgstr "" + +#: ../../src/appx/printf.txt:67 +msgid "``'s'``" +msgstr "" + +#: ../../src/appx/printf.txt:67 +msgid "Converts any Python object using ``str()``" +msgstr "" + +#: ../../src/appx/printf.txt:69 +msgid "``'a'``" +msgstr "" + +#: ../../src/appx/printf.txt:69 +msgid "Converts any Python object using ``ascii()``" +msgstr "" + +#: ../../src/appx/printf.txt:71 +msgid "``'%'``" +msgstr "" + +#: ../../src/appx/printf.txt:71 +msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgstr "" + +#: ../../src/appx/software_list.md:1 +msgid "Software List" +msgstr "" + +#: ../../src/appx/software_list.md:4 +msgid "7zip" +msgstr "" + +#: ../../src/appx/software_list.md:7 +msgid "**7-Zip** is **free software** with **open source**." +msgstr "" + +#: ../../src/appx/software_list.md:9 +msgid "" +"High compression ratio in [7z format](https://7-zip.org/7z.html) with " +"**LZMA** and **LZMA2** compression" +msgstr "" + +#: ../../src/appx/software_list.md:11 +msgid "Supported formats:" +msgstr "" + +#: ../../src/appx/software_list.md:12 +msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" +msgstr "" + +#: ../../src/appx/software_list.md:13 +msgid "" +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +msgstr "" + +#: ../../src/appx/software_list.md:16 +msgid "Self-extracting capability for 7z format" +msgstr "" + +#: ../../src/appx/software_list.md:17 +msgid "Integration with Windows Shell" +msgstr "" + +#: ../../src/appx/software_list.md:19 +msgid "https://7-zip.org/" +msgstr "" + +#: ../../src/appx/software_list.md:21 +msgid "cygwin" +msgstr "" + +#: ../../src/appx/software_list.md:24 +msgid "" +"It is a large collection of GNU and Open Source tools which provide " +"functionality similar to a [Linux " +"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " +"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " +"functionality." +msgstr "" + +#: ../../src/appx/software_list.md:30 +msgid "**Cygwin is not**:" +msgstr "" + +#: ../../src/appx/software_list.md:32 +msgid "" +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." +msgstr "" + +#: ../../src/appx/software_list.md:34 +msgid "" +"a way to magically make native Windows apps aware of UNIX® functionality " +"like `signals`, `ptys` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." +msgstr "" + +#: ../../src/appx/software_list.md:38 +msgid "https://www.cygwin.com/" +msgstr "" + +#: ../../src/appx/software_list.md:40 +msgid "git[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:43 +msgid "" +"Git is a [free and open source](https://git-scm.com/about/free-and-open-" +"source) distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." +msgstr "" + +#: ../../src/appx/software_list.md:47 +msgid "https://git-scm.com/" +msgstr "" + +#: ../../src/appx/software_list.md:49 +msgid "Docker" +msgstr "" + +#: ../../src/appx/software_list.md:52 +msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." +msgstr "" + +#: ../../src/appx/software_list.md:54 +msgid "" +"Docker helps developers bring their ideas to life by conquering the " +"complexity of app development. We simplify and accelerate development " +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" + +#: ../../src/appx/software_list.md:60 +msgid "https://www.docker.com/" +msgstr "" + +#: ../../src/appx/software_list.md:62 +msgid "PostgreSQL[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:65 +msgid "" +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." +msgstr "" + +#: ../../src/appx/software_list.md:69 +msgid "https://www.postgresql.org/" +msgstr "" + +#: ../../src/appx/software_list.md:71 +msgid "psql[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:74 +msgid "" +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." +msgstr "" + +#: ../../src/appx/software_list.md:80 +msgid "" +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for `postgresql-client` package." +msgstr "" + +#: ../../src/appx/software_list.md:83 +msgid "https://www.postgresql.org/docs/current/app-psql.html" +msgstr "" + +#: ../../src/appx/software_list.md:85 +msgid "pgAdmin" +msgstr "" + +#: ../../src/appx/software_list.md:88 +msgid "" +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." +msgstr "" + +#: ../../src/appx/software_list.md:92 +msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." +msgstr "" + +#: ../../src/appx/software_list.md:94 +msgid "https://pgadmin.org/" +msgstr "" + +#: ../../src/appx/software_list.md:96 +msgid "SQLite[^cygwin-pkg]" +msgstr "" + +#: ../../src/appx/software_list.md:99 +msgid "" +"SQLite is a C-language library that implements a " +"[small](https://sqlite.org/footprint.html), " +"[fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-" +"reliability](https://sqlite.org/hirely.html), [full-" +"featured](https://sqlite.org/fullsql.html), SQL database engine." +msgstr "" + +#: ../../src/appx/software_list.md:106 +msgid "https://sqlite.org/" +msgstr "" + +#: ../../src/appx/software_list.md:109 +msgid "available for installation as a cygwin package" +msgstr "" + From aabb10d647003d2179223fffc8c2d3efe42fc6d9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 4 Apr 2023 16:25:34 +0300 Subject: [PATCH 287/689] Updated pages deployment workflow --- .github/workflows/deploy_pages.yml | 4 +++- src/_locales/ua/LC_MESSAGES/appx.po | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 930ee80fe..93ebaa607 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -31,11 +31,13 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + submodules: true - name: Setup Python uses: actions/setup-python@v2 - name: Install dependencies run: | - pip install sphinx sphinx_rtd_theme myst_parser + pip install -r requirements.txt - name: Build documents run: | LANGUAGE=en make html diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 68c519a02..1bc659b75 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -468,7 +468,16 @@ msgid "" "After some time the scope of works and timelines were discussed and wrote" " some notes to split the entire project into individual pieces to " "implement step-by-step." -msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " "попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " "це буде складним завданням застосувати сучасний підхід до цього" " місця та реорганізувати процеси. На щастя, ви розробник " "Python, який знає, як працювати з різними доходами та результатами даних. " "Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" " деякі примітки, щоб розділити весь проект на окремі частини для " "поетапної реалізації." +msgstr "" +"Місцевий магазин має проблеми з системою реєстрації платежів. Власник " +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " +"це буде складним завданням застосувати сучасний підхід до цього " +"місця та реорганізувати процеси. На щастя, ви розробник " +"Python, який знає, як працювати з різними доходами та результатами даних. " +"Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" +" деякі примітки, щоб розділити весь проект на окремі частини для " +"поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -662,17 +671,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:134 msgid "Payment Processors" -msgstr "" +msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:136 msgid "" "The owner asked you to implement a flexible payment system. Purchasing " "the shopping card consists of several steps:" msgstr "" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:139 msgid "cart validation - it should not be empty or already purchased" -msgstr "" +msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" #: ../../problem-sets/src/conv_store/challenge.rst:140 msgid "payment validation - various payment types requires various validations" @@ -774,11 +785,11 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:189 msgid "More Enhancements for Shopping Carts" -msgstr "" +msgstr "Більше покращень для кошиків для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:191 msgid "Make your ``ShoppingCart`` an actual container" -msgstr "" +msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" #: ../../problem-sets/src/conv_store/challenge.rst:193 msgid "" From de00f9aa73ddc461fe35330b8f0398df631c071f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 5 Apr 2023 16:21:00 +0300 Subject: [PATCH 288/689] Updated problem-sets submodule Updated translations Signed-off-by: Serhii Horodilov --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 336 +++++++++++++++++----------- 2 files changed, 204 insertions(+), 134 deletions(-) diff --git a/problem-sets b/problem-sets index d73d389d9..d138fe5b0 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit d73d389d9b78f0dbbbf7cfe7a39d7bfab193718c +Subproject commit d138fe5b02e31d316e4360c9c34421d779d59aff diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 1bc659b75..7f20885cb 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 15:54+0300\n" +"POT-Creation-Date: 2023-04-05 16:17+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"Last-Translator: Serhii Horodilov \n" "Language: ua\n" "Language-Team: ua \n" "MIME-Version: 1.0\n" @@ -470,14 +470,14 @@ msgid "" "implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, " -"це буде складним завданням застосувати сучасний підхід до цього " -"місця та реорганізувати процеси. На щастя, ви розробник " -"Python, який знає, як працювати з різними доходами та результатами даних. " -"Через деякий час обговорювалися обсяги робіт і часові рамки та були написані" -" деякі примітки, щоб розділити весь проект на окремі частини для " -"поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -488,14 +488,15 @@ msgid "Products and Carts" msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 +#, fuzzy msgid "" -"It's a good idea to with basics - the objects you're going to work with. " -"At stage one the main goal is to implement data models - classes to work " -"around data in the future." +"It's a good idea to start with basics - the objects you're going to work " +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" -"Це гарна ідея з основами - об'єктами, з якими ви збираєтеся працювати. " -"На першому етапі головною метою є реалізація моделей даних - класів для " -"роботи з даними в майбутньому." +"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. " +"На першому етапі головною метою є впровадження моделей даних - класів для" +" роботи з даними в майбутньому." #: ../../problem-sets/src/conv_store/challenge.rst:25 msgid "Product" @@ -523,42 +524,113 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"``Product`` class should implement ``get_total`` method to calculate " -"price for a specified quantity of a product. Quantity arguments is " -"something you can think about as \"total number of product's units\". It " -"is of a numeric type (``int`` or ``float``) and it may be omitted. In " -"case argument hasn't been passed just consider it is equal to unit " -"attribute value." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." +msgstr "" +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." + +#: ../../problem-sets/src/conv_store/challenge.rst:39 +#, fuzzy +msgid "" +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" "Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"ціни для визначеної кількості товару. Аргументи кількості - це те, " -"що ви можете розглядати як \"загальну кількість одиниць продукту\". " -"Він має числовий тип (``int`` або ``float``), і його можна опустити. " -"У випадку, якщо аргумент не було передано, просто вважайте, що він дорівнює " -"одиничному значенню атрибута." +"загальної ціни на вказану кількість продукту для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу " +"(``int`` або ``float``). Якщо аргумент кількості пропущено, просто " +"використовуйте значення атрибута ``unit``." -#: ../../problem-sets/src/conv_store/challenge.rst:43 -#: ../../problem-sets/src/conv_store/challenge.rst:68 -#: ../../problem-sets/src/conv_store/challenge.rst:112 -#: ../../problem-sets/src/conv_store/challenge.rst:175 -#: ../../problem-sets/src/conv_store/challenge.rst:210 -msgid "Test Cases" +#: ../../problem-sets/src/conv_store/challenge.rst:46 +msgid "Code notes" +msgstr "" + +#: conv_store.models.Product:1 of +msgid "Product model implementation" +msgstr "Реалізація моделі товару" + +#: conv_store.models.Product:3 of +#, fuzzy +msgid "Instances of this class represent a product available for purchase." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: conv_store.models.Product of +msgid "Variables" +msgstr "Змінні" + +#: conv_store.models.Product:5 of +msgid "the name of a product" +msgstr "назва товару" + +#: conv_store.models.Product:7 of +#, fuzzy +msgid "the price for a single product unit" +msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" + +#: conv_store.models.Product:9 of +#, fuzzy +msgid "the size of a single product unit" +msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: conv_store.models.Product.get_total:1 of +msgid "Return the total price for a specified amount of a product" +msgstr "Повертає загальну ціну за вказану кількість товару" + +#: conv_store.models.Product.get_total:3 of +msgid "" +"If the quantity argument is omitted, unit attribute value should be used " +"instead." msgstr "" +"Якщо аргумент кількості пропущено, замість нього слід використовувати " +"значення атрибута одиниці." + +#: conv_store.models.Product.get_total of +msgid "Parameters" +msgstr "Параметри" + +#: conv_store.models.Product.get_total:6 of +msgid "a quantity to purchase, defaults to None" +msgstr "кількість для покупки, за замовчуванням None" + +#: conv_store.models.Product.get_total of +msgid "Returns" +msgstr "Повертає" + +#: conv_store.models.Product.get_total:9 of +msgid "total price for a specified amount of a product" +msgstr "загальна ціна за вказану кількість товару" + +#: conv_store.models.Product.get_total of +msgid "Return type" +msgstr "Тип повернення" -#: ../../problem-sets/src/conv_store/challenge.rst:54 +#: ../../problem-sets/src/conv_store/challenge.rst:51 +#: ../../problem-sets/src/conv_store/challenge.rst:78 +#: ../../problem-sets/src/conv_store/challenge.rst:122 +#: ../../problem-sets/src/conv_store/challenge.rst:185 +#: ../../problem-sets/src/conv_store/challenge.rst:220 +msgid "Test cases" +msgstr "Тестові приклади" + +#: ../../problem-sets/src/conv_store/challenge.rst:63 msgid "Shopping Cart" msgstr "Кошик для покупок" -#: ../../problem-sets/src/conv_store/challenge.rst:56 +#: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " "responsibility is to store information about the purchases and their " "amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність -" -" зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." -#: ../../problem-sets/src/conv_store/challenge.rst:59 +#: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" "Each cart instance should store data about ``Product`` objects in it and " "corresponding quantity value for each individual product." @@ -566,7 +638,7 @@ msgstr "" "Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " "ньому та відповідне значення кількості для кожного окремого продукту." -#: ../../problem-sets/src/conv_store/challenge.rst:61 +#: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" "``ShoppingCart`` should implement ``add_product`` method to put a " "specified quantity into a cart. ``quantity`` argument is optional, if " @@ -576,54 +648,54 @@ msgstr "" "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " "пропущено, просто використовує натомість значення ``Product.unit``." -#: ../../problem-sets/src/conv_store/challenge.rst:64 +#: ../../problem-sets/src/conv_store/challenge.rst:73 msgid "" "``ShoppingCart`` should implement ``get_total`` method to calculate the " "total price for the entire cart contents." msgstr "" -"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення загальної" -" ціни всього вмісту кошика." +"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " +"загальної ціни всього вмісту кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:83 +#: ../../problem-sets/src/conv_store/challenge.rst:93 msgid "Initialization, Representation and Type Casting" msgstr "Ініціалізація, представлення та приведення типів" -#: ../../problem-sets/src/conv_store/challenge.rst:85 +#: ../../problem-sets/src/conv_store/challenge.rst:95 msgid "" "It's difficult to set properties one-by-one, also it's not informative to" " get default objects string representations. It's time to fix this." msgstr "" -"Важко встановлювати властивості одну за одною, також неінформативно" -"отримувати представлення рядків об'єктів за замовчуванням. Настав час це " -"виправити." +"Важко встановлювати властивості одну за одною, також " +"неінформативноотримувати представлення рядків об'єктів за замовчуванням. " +"Настав час це виправити." -#: ../../problem-sets/src/conv_store/challenge.rst:88 +#: ../../problem-sets/src/conv_store/challenge.rst:98 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" "``Продукт`` має бути ініціалізований усіма необхідними даними, без " "значень за замовчуванням." -#: ../../problem-sets/src/conv_store/challenge.rst:89 +#: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" "Apply ``ShoppingCart.__init__`` to separate products and quantities " "between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." -#: ../../problem-sets/src/conv_store/challenge.rst:91 +#: ../../problem-sets/src/conv_store/challenge.rst:101 msgid "Provide a human readable representations. For example:" msgstr "Надайте представлення, зрозумілі людині. Наприклад:" -#: ../../problem-sets/src/conv_store/challenge.rst:93 +#: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "``Product('juice', 35.66, 1)``" msgstr "" -#: ../../problem-sets/src/conv_store/challenge.rst:94 +#: ../../problem-sets/src/conv_store/challenge.rst:104 msgid "````" msgstr "" -#: ../../problem-sets/src/conv_store/challenge.rst:96 +#: ../../problem-sets/src/conv_store/challenge.rst:106 msgid "" "While casting product instance to ``str`` type it should be equal to its " "``name`` attribute value." @@ -631,49 +703,48 @@ msgstr "" "Під час приведення екземпляра продукту до типу ``str`` він повинен " "дорівнювати значенню атрибута ``name``." -#: ../../problem-sets/src/conv_store/challenge.rst:98 +#: ../../problem-sets/src/conv_store/challenge.rst:108 msgid "" "While casting product instance to ``float`` type it should be equal to " "its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." -#: ../../problem-sets/src/conv_store/challenge.rst:100 +#: ../../problem-sets/src/conv_store/challenge.rst:110 msgid "" "While casting shopping cart instance to ``float`` type it should be equal" " to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." -#: ../../problem-sets/src/conv_store/challenge.rst:102 +#: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" "While casting shopping cart instance to ``bool`` consider it ``True`` if " "at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:105 +#: ../../problem-sets/src/conv_store/challenge.rst:115 msgid "Implement equality operator support for your objects:" msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" -#: ../../problem-sets/src/conv_store/challenge.rst:107 +#: ../../problem-sets/src/conv_store/challenge.rst:117 msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:108 -msgid "" -"consider carts equal if products and corresponding quantities are the same" -msgstr "" -"вважати кошики рівними, якщо продукти та відповідна кількість однакові" +#: ../../problem-sets/src/conv_store/challenge.rst:118 +msgid "consider carts equal if products and corresponding quantities are the same" +msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:134 +#: ../../problem-sets/src/conv_store/challenge.rst:144 msgid "Payment Processors" msgstr "Опрацювання платежів" -#: ../../problem-sets/src/conv_store/challenge.rst:136 +#: ../../problem-sets/src/conv_store/challenge.rst:146 msgid "" "The owner asked you to implement a flexible payment system. Purchasing " "the shopping card consists of several steps:" @@ -681,20 +752,19 @@ msgstr "" "Власник попросив вас запровадити гнучку платіжну систему. Придбання " "картки покупок складається з кількох кроків:" -#: ../../problem-sets/src/conv_store/challenge.rst:139 +#: ../../problem-sets/src/conv_store/challenge.rst:149 msgid "cart validation - it should not be empty or already purchased" msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" -#: ../../problem-sets/src/conv_store/challenge.rst:140 +#: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "payment validation - various payment types requires various validations" -msgstr "" -"підтвердження платежу - різні типи платежу вимагають різних перевірок" +msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" -#: ../../problem-sets/src/conv_store/challenge.rst:141 +#: ../../problem-sets/src/conv_store/challenge.rst:151 msgid "purchasing the cart" msgstr "купівля кошика" -#: ../../problem-sets/src/conv_store/challenge.rst:143 +#: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "" "For now there are two payment types available in the store: cash and " "credit card, but they maybe extended at any time." @@ -702,37 +772,37 @@ msgstr "" "Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " "але їх можна продовжити в будь-який час." -#: ../../problem-sets/src/conv_store/challenge.rst:146 +#: ../../problem-sets/src/conv_store/challenge.rst:156 msgid "" "Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " "this property *protected*, since it should not be accessed outside the " "card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість " "захищеною, оскільки до неї не слід звертатися поза " +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість \" \"захищеною, оскільки до неї не слід звертатися поза " "екземпляром картки." -#: ../../problem-sets/src/conv_store/challenge.rst:149 +#: ../../problem-sets/src/conv_store/challenge.rst:159 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " "arguments and return a value of a boolean type. This is an abstract class" " for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " -"аргументів і повертає значення логічного типу. Це абстрактний клас " -"для майбутнього використання." +"аргументів і повертає значення логічного типу. Це абстрактний клас для " +"майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:152 +#: ../../problem-sets/src/conv_store/challenge.rst:162 msgid "" "Implement ``PaymentProcessor`` class with ``purchase`` method that takes " "a ``ShoppingCart`` object and returns nothing. This is an abstract class " "for the future usage." msgstr "" -"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який " -"бере об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний " -"клас для майбутнього використання." +"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " +"об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " +"майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:155 +#: ../../problem-sets/src/conv_store/challenge.rst:165 msgid "" "Inherit ``CashPaymentValidator`` from the base validator. The instances " "of this class are considered to be always valid." @@ -740,17 +810,15 @@ msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." -#: ../../problem-sets/src/conv_store/challenge.rst:157 +#: ../../problem-sets/src/conv_store/challenge.rst:167 msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." -#: ../../problem-sets/src/conv_store/challenge.rst:159 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +#: ../../problem-sets/src/conv_store/challenge.rst:169 +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." -#: ../../problem-sets/src/conv_store/challenge.rst:160 +#: ../../problem-sets/src/conv_store/challenge.rst:170 msgid "" "``is_valid`` method should ask a customer for a security code and check " "it against the stored value. In case codes are equal payment considered " @@ -759,65 +827,65 @@ msgstr "" "Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " "зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." -#: ../../problem-sets/src/conv_store/challenge.rst:164 +#: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " "\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" " printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." -#: ../../problem-sets/src/conv_store/challenge.rst:169 +#: ../../problem-sets/src/conv_store/challenge.rst:179 msgid "" "Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка платежу карткою...\" і \"Код безпеки : {code}\" слід " -"роздрукувати." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка платежу карткою...\" і \"Код безпеки :" +" {code}\" слід роздрукувати." -#: ../../problem-sets/src/conv_store/challenge.rst:189 +#: ../../problem-sets/src/conv_store/challenge.rst:199 msgid "More Enhancements for Shopping Carts" msgstr "Більше покращень для кошиків для покупок" -#: ../../problem-sets/src/conv_store/challenge.rst:191 +#: ../../problem-sets/src/conv_store/challenge.rst:201 msgid "Make your ``ShoppingCart`` an actual container" msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" -#: ../../problem-sets/src/conv_store/challenge.rst:193 +#: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "" "Implement ``len(cart_obj)`` and make it return the number of products in " "the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." -#: ../../problem-sets/src/conv_store/challenge.rst:195 +#: ../../problem-sets/src/conv_store/challenge.rst:205 msgid "" "Implement ``cart[...]`` behavior to take a ``tuple`` containing product " "and corresponding quantity (type hint: ``Tuple[Product, Union[int, " "float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " -"товар та відповідну кількість " -"(type hint: ``Tuple[Product, Union[int, " "float]] ``)." +"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, \" " +"\"float]] ``)." -#: ../../problem-sets/src/conv_store/challenge.rst:199 +#: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" "Make your ``ShoppingCart`` iterable - let it provide the product instance" " and corresponding quantity for each iteration." msgstr "" -"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати примірник" -" продукту та відповідну кількість для кожної ітерації." +"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " +"примірник продукту та відповідну кількість для кожної ітерації." -#: ../../problem-sets/src/conv_store/challenge.rst:201 +#: ../../problem-sets/src/conv_store/challenge.rst:211 msgid "" "Avoid products duplication. In case someone tries to put the product into" " a cart and this product already is present there, do not it for the " @@ -827,45 +895,44 @@ msgstr "" "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " "натомість відповідне значення кількості." -#: ../../problem-sets/src/conv_store/challenge.rst:204 +#: ../../problem-sets/src/conv_store/challenge.rst:214 msgid "" "Implement ``remove_product`` method to completely remove some product " "from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти " -"з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:206 +#: ../../problem-sets/src/conv_store/challenge.rst:216 msgid "" "Implement ``sub_product`` to decrease some product quantity. If quantity " "is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:235 +#: ../../problem-sets/src/conv_store/challenge.rst:245 msgid "Testing Software" msgstr "Тестування програмного забезпечення" -#: ../../problem-sets/src/conv_store/challenge.rst:237 +#: ../../problem-sets/src/conv_store/challenge.rst:247 msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." -#: ../../problem-sets/src/conv_store/challenge.rst:239 +#: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Tests should be located inside of \"tests\" directory." msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." -#: ../../problem-sets/src/conv_store/challenge.rst:240 +#: ../../problem-sets/src/conv_store/challenge.rst:250 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." -#: ../../problem-sets/src/conv_store/challenge.rst:241 +#: ../../problem-sets/src/conv_store/challenge.rst:251 #, python-format msgid "At least 50% coverage." msgstr "Принаймні 50% покриття." -#: ../../problem-sets/src/conv_store/challenge.rst:242 +#: ../../problem-sets/src/conv_store/challenge.rst:252 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." @@ -1454,3 +1521,6 @@ msgstr "" msgid "available for installation as a cygwin package" msgstr "" +#~ msgid "Test Cases" +#~ msgstr "" + From 9e034ab15bf0dc5cbeff3224f76929b1cc4cfffd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 6 Apr 2023 03:39:22 +0300 Subject: [PATCH 289/689] Relink submodules via SSH --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index f858bdca8..9442fc6e5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "problem-sets"] path = problem-sets - url = https://github.com/edu-python-course/problem-sets + url = git@github.com:edu-python-course/problem-sets [submodule "blog"] path = blog - url = https://github.com/edu-python-course/blog + url = git@github.com:edu-python-course/blog From 60609bec4c5bdcd60aedacc2d443235ae58bf6b6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 6 Apr 2023 12:27:14 +0300 Subject: [PATCH 290/689] Updated translations: appx --- src/_locales/ua/LC_MESSAGES/appx.po | 515 ++++++++++++++-------------- 1 file changed, 252 insertions(+), 263 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 7f20885cb..73ca3a908 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -4,20 +4,22 @@ # Course package. # SERHII HORODILOV , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-05 16:17+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"POT-Creation-Date: 2023-04-06 12:11+0300\n" +"PO-Revision-Date: 2023-04-06 12:24+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: ua\n" "Language-Team: ua \n" +"Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../blog/docs/spec.md:2 msgid "Blog Project Specification" @@ -25,31 +27,32 @@ msgstr "" #: ../../blog/docs/spec.md:5 msgid "" -"As a developer you were asked to create a simple blog site. The goal is " -"to create a place on the Internet where users can share their stories to " -"public." +"As a developer you were asked to create a simple blog site. The goal is to " +"create a place on the Internet where users can share their stories to public." msgstr "" #: ../../blog/docs/spec.md:8 msgid "" -"This document applies requirements for the entire project step-by-step. " -"You will start from creating the appropriate URL dispatcher and " -"connecting a PostgreSQL database to store the data and will finish with " -"implementing REST API for the blog." +"This document applies requirements for the entire project step-by-step. You " +"will start from creating the appropriate URL dispatcher and connecting a " +"PostgreSQL database to store the data and will finish with implementing REST " +"API for the blog." msgstr "" #: ../../blog/docs/spec.md:13 msgid "" -"There are some boiler plates, that may be useful in your future work, but" -" you aren't forced to use them. It's on your choice." +"There are some boiler plates, that may be useful in your future work, but " +"you aren't forced to use them. It's on your choice." msgstr "" #: ../../blog/docs/spec.md:16 -msgid "[Starter template](https://github.com/edu-python-course/django-template)" +msgid "" +"[Starter template](https://github.com/edu-python-course/django-template)" msgstr "" #: ../../blog/docs/spec.md:17 -msgid "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +msgid "" +"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" msgstr "" #: ../../blog/docs/spec.md:20 @@ -58,15 +61,15 @@ msgstr "" #: ../../blog/docs/spec.md:23 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" #: ../../blog/docs/spec.md:29 msgid "" -"`/blogs/`: A site's homepage. This will contain a list of blogs available" -" via the django site." +"`/blogs/`: A site's homepage. This will contain a list of blogs available " +"via the django site." msgstr "" #: ../../blog/docs/spec.md:32 @@ -81,12 +84,13 @@ msgstr "" #: ../../blog/docs/spec.md:37 msgid "" -"`//`: A single blog post detail view. The URL contains dynamic part" -" in it. This will be used to fetch a single blogpost from the database." +"`//`: A single blog post detail view. The URL contains dynamic part in " +"it. This will be used to fetch a single blogpost from the database." msgstr "" #: ../../blog/docs/spec.md:40 -msgid "`/comment/`: This view will be used to add comments to a blogpost." +msgid "" +"`/comment/`: This view will be used to add comments to a blogpost." msgstr "" #: ../../blog/docs/spec.md:42 @@ -120,7 +124,8 @@ msgid "`/login/`: This view contains a login form." msgstr "" #: ../../blog/docs/spec.md:56 -msgid "`/logout/`: Logout page. This view should redirect user back to homepage." +msgid "" +"`/logout/`: Logout page. This view should redirect user back to homepage." msgstr "" #: ../../blog/docs/spec.md:61 @@ -153,8 +158,8 @@ msgstr "" #: ../../blog/docs/spec.md:111 msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project's database." +"Update existing views to represent entities that are actually stored inside " +"the project's database." msgstr "" #: ../../blog/docs/spec.md:114 @@ -167,8 +172,8 @@ msgstr "" #: ../../blog/docs/spec.md:118 msgid "" -"`/profile/`: should contain information about user and a list " -"of posts authored by this user." +"`/profile/`: should contain information about user and a list of " +"posts authored by this user." msgstr "" #: ../../blog/docs/spec.md:121 @@ -183,8 +188,8 @@ msgstr "" #: ../../blog/docs/spec.md:129 msgid "" -"It's time to work with data representations. You're to add HTML template " -"to the blog site project. Keep templates together with appropriate " +"It's time to work with data representations. You're to add HTML template to " +"the blog site project. Keep templates together with appropriate " "applications, we don't need mess in project files." msgstr "" @@ -194,36 +199,35 @@ msgstr "" #: ../../blog/docs/spec.md:135 msgid "" -"Each page should contain a navbar at the top. Navbar will contain " -"permalinks to the home and about pages." +"Each page should contain a navbar at the top. Navbar will contain permalinks " +"to the home and about pages." msgstr "" #: ../../blog/docs/spec.md:137 msgid "" -"For anonymous users `/register/` and `/login/` links should be visible in" -" navbar." +"For anonymous users `/register/` and `/login/` links should be visible in " +"navbar." msgstr "" #: ../../blog/docs/spec.md:139 msgid "" -"For authenticated users `/logout/` and `/create/` links should be visible" -" in navbar." +"For authenticated users `/logout/` and `/create/` links should be visible in " +"navbar." msgstr "" #: ../../blog/docs/spec.md:141 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" #: ../../blog/docs/spec.md:142 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" #: ../../blog/docs/spec.md:143 -msgid "For the `post_list.html` each post entity should provide the information:" +msgid "" +"For the `post_list.html` each post entity should provide the information:" msgstr "" #: ../../blog/docs/spec.md:144 @@ -260,17 +264,16 @@ msgstr "" #: ../../blog/docs/spec.md:152 msgid "" -"Auth views should use `register.html` and `login.html` with corresponding" -" forms." +"Auth views should use `register.html` and `login.html` with corresponding " +"forms." msgstr "" #: ../../blog/docs/spec.md:155 msgid "" -"For now, it's ok to use admin as \"test user\". Authentication system " -"will be implemented in the future challenges. `user` object is available " -"(by default) in any template context. To test anonymous access you can " -"use `usar.is_authenticated`, which returns `False` for non-authenticated " -"users." +"For now, it's ok to use admin as \"test user\". Authentication system will " +"be implemented in the future challenges. `user` object is available (by " +"default) in any template context. To test anonymous access you can use `usar." +"is_authenticated`, which returns `False` for non-authenticated users." msgstr "" #: ../../blog/docs/spec.md:162 @@ -323,8 +326,8 @@ msgstr "" #: ../../blog/docs/spec.md:179 msgid "" -"Create a form to gather a comment from a user. Form should be used within" -" a \"post detail\" view." +"Create a form to gather a comment from a user. Form should be used within a " +"\"post detail\" view." msgstr "" #: ../../blog/docs/spec.md:181 @@ -350,24 +353,24 @@ msgstr "" #: ../../blog/docs/spec.md:195 msgid "" -"`/login/`: Users should provide their credentials to login. In case login" -" is successful they should be redirected to their profile (if no " -"`next=url` query string available)." +"`/login/`: Users should provide their credentials to login. In case login is " +"successful they should be redirected to their profile (if no `next=url` " +"query string available)." msgstr "" #: ../../blog/docs/spec.md:199 msgid "" -"`/create/`: Only authenticated users should be able to visit this page. " -"In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to post creation. Then a post is created, it should be authored " -"by the currently authenticated user." +"`/create/`: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"post creation. Then a post is created, it should be authored by the " +"currently authenticated user." msgstr "" #: ../../blog/docs/spec.md:205 msgid "" -"`//comment`: Currently authenticated user should be referenced as a" -" comment's author." +"`//comment`: Currently authenticated user should be referenced as a " +"comment's author." msgstr "" #: ../../blog/docs/spec.md:207 @@ -416,8 +419,8 @@ msgstr "" #: ../../blog/docs/spec.md:239 msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to " -"use *pre-defined* user as a post's author for now." +"All blog-site functionality are to be reflected via REST API. It's ok to use " +"*pre-defined* user as a post's author for now." msgstr "" #: ../../blog/docs/spec.md:244 @@ -446,11 +449,11 @@ msgstr "" #: ../../src/appx/code_edit.txt:7 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:3 @@ -459,44 +462,41 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," -msgstr "Ваші нотатки тут," +msgstr "Ваші нотатки ось," #: ../../problem-sets/src/conv_store/challenge.rst:18 msgid "Products and Carts" msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 -#, fuzzy msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" -"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. " -"На першому етапі головною метою є впровадження моделей даних - класів для" -" роботи з даними в майбутньому." +"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " +"першому етапі головною метою є впровадження моделей даних - класів для " +"роботи з даними в майбутньому." #: ../../problem-sets/src/conv_store/challenge.rst:25 msgid "Product" @@ -524,27 +524,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" "Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " "зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 -#, fuzzy msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" "Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість продукту для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу " -"(``int`` або ``float``). Якщо аргумент кількості пропущено, просто " -"використовуйте значення атрибута ``unit``." +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " +"``float``). Якщо аргумент кількості пропущено, просто використовуйте " +"значення атрибута ``unit``." #: ../../problem-sets/src/conv_store/challenge.rst:46 msgid "Code notes" @@ -555,7 +553,6 @@ msgid "Product model implementation" msgstr "Реалізація моделі товару" #: conv_store.models.Product:3 of -#, fuzzy msgid "Instances of this class represent a product available for purchase." msgstr "Цей клас представляє товари, які можна придбати в магазині." @@ -568,12 +565,10 @@ msgid "the name of a product" msgstr "назва товару" #: conv_store.models.Product:7 of -#, fuzzy msgid "the price for a single product unit" msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" #: conv_store.models.Product:9 of -#, fuzzy msgid "the size of a single product unit" msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" @@ -624,11 +619,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -640,9 +635,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " @@ -662,8 +657,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:95 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -672,16 +667,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:98 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:101 msgid "Provide a human readable representations. For example:" @@ -705,28 +700,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:108 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:110 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:115 msgid "Implement equality operator support for your objects:" @@ -737,7 +731,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:118 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:144 @@ -746,11 +741,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:146 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:149 msgid "cart validation - it should not be empty or already purchased" @@ -766,27 +761,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:156 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість \" \"захищеною, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:159 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -794,9 +789,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:162 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -804,8 +799,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:165 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -815,29 +810,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:169 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:170 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:179 msgid "" @@ -846,10 +843,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка платежу карткою...\" і \"Код безпеки :" -" {code}\" слід роздрукувати." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:199 msgid "More Enhancements for Shopping Carts" @@ -861,35 +857,34 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:205 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " -"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, \" " -"\"float]] ``)." +"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " +"float]]``)." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:211 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -897,19 +892,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:214 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:216 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:245 msgid "Testing Software" @@ -925,12 +920,13 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:250 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:251 #, python-format msgid "At least 50% coverage." -msgstr "Принаймні 50% покриття." +msgstr "Хоча б 50% покриття тестами." #: ../../problem-sets/src/conv_store/challenge.rst:252 msgid "Project dependencies are to be updated." @@ -947,9 +943,9 @@ msgstr "" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" #: ../../src/appx/precedence.txt:16 @@ -968,8 +964,8 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" #: ../../src/appx/precedence.txt:23 @@ -1010,8 +1006,8 @@ msgstr "" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "" #: ../../src/appx/precedence.txt:37 @@ -1114,14 +1110,14 @@ msgstr "" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" #: ../../src/appx/printf.txt:7 @@ -1131,12 +1127,11 @@ msgstr "" #: ../../src/appx/printf.txt:9 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." msgstr "" #: ../../src/appx/printf.txt:16 @@ -1173,8 +1168,7 @@ msgstr "" #: ../../src/appx/printf.txt:25 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" #: ../../src/appx/printf.txt:28 @@ -1191,8 +1185,8 @@ msgstr "" #: ../../src/appx/printf.txt:30 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" #: ../../src/appx/printf.txt:34 @@ -1281,8 +1275,8 @@ msgstr "" #: ../../src/appx/printf.txt:58 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" #: ../../src/appx/printf.txt:63 @@ -1322,7 +1316,8 @@ msgid "``'%'``" msgstr "" #: ../../src/appx/printf.txt:71 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "" #: ../../src/appx/software_list.md:1 @@ -1353,9 +1348,9 @@ msgstr "" #: ../../src/appx/software_list.md:13 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" #: ../../src/appx/software_list.md:16 @@ -1377,10 +1372,9 @@ msgstr "" #: ../../src/appx/software_list.md:24 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux " -"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " -"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " -"functionality." +"functionality similar to a [Linux distribution](https://en.wikipedia.org/" +"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " +"substantial POSIX API functionality." msgstr "" #: ../../src/appx/software_list.md:30 @@ -1389,15 +1383,15 @@ msgstr "" #: ../../src/appx/software_list.md:32 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" #: ../../src/appx/software_list.md:34 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from " -"source* if you want to take advantage of Cygwin functionality." +"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " +"if you want to take advantage of Cygwin functionality." msgstr "" #: ../../src/appx/software_list.md:38 @@ -1431,10 +1425,10 @@ msgstr "" msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." msgstr "" #: ../../src/appx/software_list.md:60 @@ -1447,9 +1441,9 @@ msgstr "" #: ../../src/appx/software_list.md:65 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" #: ../../src/appx/software_list.md:69 @@ -1462,18 +1456,18 @@ msgstr "" #: ../../src/appx/software_list.md:74 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" #: ../../src/appx/software_list.md:80 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for `postgresql-client` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for `postgresql-client` package." msgstr "" #: ../../src/appx/software_list.md:83 @@ -1486,9 +1480,9 @@ msgstr "" #: ../../src/appx/software_list.md:88 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" #: ../../src/appx/software_list.md:92 @@ -1505,12 +1499,11 @@ msgstr "" #: ../../src/appx/software_list.md:99 msgid "" -"SQLite is a C-language library that implements a " -"[small](https://sqlite.org/footprint.html), " -"[fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-" -"reliability](https://sqlite.org/hirely.html), [full-" -"featured](https://sqlite.org/fullsql.html), SQL database engine." +"SQLite is a C-language library that implements a [small](https://sqlite.org/" +"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-reliability]" +"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." +"html), SQL database engine." msgstr "" #: ../../src/appx/software_list.md:106 @@ -1519,8 +1512,4 @@ msgstr "" #: ../../src/appx/software_list.md:109 msgid "available for installation as a cygwin package" -msgstr "" - -#~ msgid "Test Cases" -#~ msgstr "" - +msgstr "доступно для встановлення як пакет cygwin" From 5de2ede39b67a9f89bc884a56275cb5cd6f32d3a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 8 Apr 2023 17:43:09 +0300 Subject: [PATCH 291/689] Added WRW challenge description (exam task - OOP block) --- src/appx/wrw_game.txt | 1 + src/index.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 src/appx/wrw_game.txt diff --git a/src/appx/wrw_game.txt b/src/appx/wrw_game.txt new file mode 100644 index 000000000..b75805cd6 --- /dev/null +++ b/src/appx/wrw_game.txt @@ -0,0 +1 @@ +.. include:: /../problem-sets/src/wrw_game/challenge.rst diff --git a/src/index.txt b/src/index.txt index 8e98da58f..7dcf895fa 100644 --- a/src/index.txt +++ b/src/index.txt @@ -28,6 +28,7 @@ appx/precedence appx/printf appx/conv_store + appx/wrw_game appx/blog .. rubric:: References From 8c3fd6950e75943f34caa5cefd3626173d9f2b03 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 8 Apr 2023 19:09:59 +0300 Subject: [PATCH 292/689] Updated "appx" translations Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 897 +++++++++++++++++++++++----- 1 file changed, 738 insertions(+), 159 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 73ca3a908..d18645d3c 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,13 +8,13 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 12:11+0300\n" -"PO-Revision-Date: 2023-04-06 12:24+0300\n" +"POT-Creation-Date: 2023-04-08 17:35+0300\n" +"PO-Revision-Date: 2023-04-08 19:09+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" @@ -23,13 +23,16 @@ msgstr "" #: ../../blog/docs/spec.md:2 msgid "Blog Project Specification" -msgstr "" +msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.md:5 msgid "" "As a developer you were asked to create a simple blog site. The goal is to " "create a place on the Internet where users can share their stories to public." msgstr "" +"Вас, як розробника, попросили створити простий сайт блогу. Мета - \" " +"\"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " +"історіями з громадськістю." #: ../../blog/docs/spec.md:8 msgid "" @@ -38,26 +41,34 @@ msgid "" "PostgreSQL database to store the data and will finish with implementing REST " "API for the blog." msgstr "" +"Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " +"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " +"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " +"API для блог." #: ../../blog/docs/spec.md:13 msgid "" "There are some boiler plates, that may be useful in your future work, but " "you aren't forced to use them. It's on your choice." msgstr "" +"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " +"ви не змушені їх використовувати. Це на ваш вибір." #: ../../blog/docs/spec.md:16 msgid "" "[Starter template](https://github.com/edu-python-course/django-template)" msgstr "" +"[Starter template](https://github.com/edu-python-course/django-template)" #: ../../blog/docs/spec.md:17 msgid "" "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" msgstr "" +"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" #: ../../blog/docs/spec.md:20 msgid "Challenge: Site views" -msgstr "" +msgstr "Завдання: Site views" #: ../../blog/docs/spec.md:23 msgid "" @@ -65,126 +76,154 @@ msgid "" "are available and provide correct data. Use anything you like to return " "within HTTP response." msgstr "" +"Це нормально поки що не повертати фактичний вміст. Просто переконайтеся, що " +"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " +"хочете, щоб повернути у відповіді HTTP." #: ../../blog/docs/spec.md:29 msgid "" "`/blogs/`: A site's homepage. This will contain a list of blogs available " "via the django site." msgstr "" +"`блоги`: домашня сторінка сайту. Вона міститиме список блогів, доступних " +"через сайт django." #: ../../blog/docs/spec.md:32 msgid "" "`/about/`: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" +"`about`: надає звичайний текст для користувача, описуючи функції сайту " +"django." #: ../../blog/docs/spec.md:35 msgid "`/`: same as `/blogs/`" -msgstr "" +msgstr "`/`: те ж саме `/blogs/`" #: ../../blog/docs/spec.md:37 msgid "" "`//`: A single blog post detail view. The URL contains dynamic part in " "it. This will be used to fetch a single blogpost from the database." msgstr "" +"``: детальний перегляд окремої публікації блогу. URL-адреса містить у " +"ній динамічну частину. Це буде використано для отримання окремої публікації " +"блогу з бази даних." #: ../../blog/docs/spec.md:40 msgid "" "`/comment/`: This view will be used to add comments to a blogpost." msgstr "" +"`/comment/`: Використовуватиметься для додавання коментарів до " +"публікації блогу." #: ../../blog/docs/spec.md:42 msgid "`/create/`: A post creation form." -msgstr "" +msgstr "`/create/`: Форма для створення допису." #: ../../blog/docs/spec.md:44 msgid "`//update/`: A view to update an existing post data." -msgstr "" +msgstr "`//update/`: Сторінка для оновлення даних існуючого допису." #: ../../blog/docs/spec.md:46 msgid "`//delete/`: A view to confirm post deletion." -msgstr "" +msgstr "`//delete/`: Підтверждення видалення допису." #: ../../blog/docs/spec.md:48 msgid "`/profile/`: A site user's personal page." -msgstr "" +msgstr "`/profile/`: Персональна сторінка користувача." #: ../../blog/docs/spec.md:50 msgid "" "`/change_password/`: This route will be used to change users' credential " "data." msgstr "" +"`/change_password/`: Ця сторінка використовуватиметься для зміни облікових " +"даних користувачів." #: ../../blog/docs/spec.md:52 msgid "`/register/`: This view contains a user registration form." -msgstr "" +msgstr "`/register/`: Сторінка з формою для реєстрації нового користувача." #: ../../blog/docs/spec.md:54 msgid "`/login/`: This view contains a login form." -msgstr "" +msgstr "`/login/`: Сторінка з формою для логіна." #: ../../blog/docs/spec.md:56 msgid "" "`/logout/`: Logout page. This view should redirect user back to homepage." msgstr "" +"`/logout/`: Логаут. Має перенаправляти користувача назад на домашню " +"сторінку.." #: ../../blog/docs/spec.md:61 msgid "Challenge: Data models" -msgstr "" +msgstr "Завдання: моделі даних" #: ../../blog/docs/spec.md:64 msgid "You are to implement data models for the blog site." -msgstr "" +msgstr "Ви повинні реалізувати моделі даних для сайту блогу." #: ../../blog/docs/spec.md:66 msgid "The `auth.User` will be used as `user` model." -msgstr "" +msgstr "`auth.User` використовуватиметься як модель `user`." #: ../../blog/docs/spec.md:68 msgid "" "`post.slug` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" +"Значення `post.slug` має автоматично генеруватися під час створення або " +"оновлення запису та слідувати шаблону:" #: ../../blog/docs/spec.md:75 msgid "" "User preferred topics should be marked with a `notify` flag. This value " "should be `True` by default." msgstr "" +"Вибрані користувачем теми мають бути позначені прапорцем `notify`. За " +"замовчуванням це значення має бути `True`." #: ../../blog/docs/spec.md:108 msgid "Challenge: ORM" -msgstr "" +msgstr "Завдання: ORM" #: ../../blog/docs/spec.md:111 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." msgstr "" +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." #: ../../blog/docs/spec.md:114 msgid "`/blogs/` or `/`: should represent a list of existing blogposts." msgstr "" +"`/blogs/` або `/`: має представляти список існуючих публікацій у блозі." #: ../../blog/docs/spec.md:116 msgid "`//`: should represent a single existing blogpost." -msgstr "" +msgstr "`//`: має представляти одну наявну публікацію в блозі." #: ../../blog/docs/spec.md:118 msgid "" "`/profile/`: should contain information about user and a list of " "posts authored by this user." msgstr "" +"`/profile/`: має містити інформацію про користувача та список " +"публікацій, автором яких є цей користувач." #: ../../blog/docs/spec.md:121 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise `Http404` in case entity couldn't be fetched." msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " +"не вдалося отримати." #: ../../blog/docs/spec.md:126 msgid "Challenge: Templates" -msgstr "" +msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.md:129 msgid "" @@ -192,81 +231,100 @@ msgid "" "the blog site project. Keep templates together with appropriate " "applications, we don't need mess in project files." msgstr "" +"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" +"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " +"додатками, нам не потрібен безлад у файлах проекту." #: ../../blog/docs/spec.md:134 msgid "Application-level templates should be extended from the base one." -msgstr "" +msgstr "Шаблони прикладного рівня повинні бути розширені з базового." #: ../../blog/docs/spec.md:135 msgid "" "Each page should contain a navbar at the top. Navbar will contain permalinks " "to the home and about pages." msgstr "" +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " +"міститиме постійні посилання на домашню сторінку та сторінку про." #: ../../blog/docs/spec.md:137 msgid "" "For anonymous users `/register/` and `/login/` links should be visible in " "navbar." msgstr "" +"Для анонімних користувачів посилання `/register/` та `/login/` мають бути " +"видимими на навігаційній панелі." #: ../../blog/docs/spec.md:139 msgid "" "For authenticated users `/logout/` and `/create/` links should be visible in " "navbar." msgstr "" +"Для автентифікованих користувачів посилання `/logout/` і `/create/` мають " +"бути видимими на навігаційній панелі." #: ../../blog/docs/spec.md:141 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.md:142 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../blog/docs/spec.md:143 msgid "" "For the `post_list.html` each post entity should provide the information:" msgstr "" +"Для `post_list.html` кожна сутність повідомлення повинна надавати інформацію:" #: ../../blog/docs/spec.md:144 msgid "title (each word should be capitalized)" -msgstr "" +msgstr "назва (кожне слово має бути великим)" #: ../../blog/docs/spec.md:145 msgid "creation date" -msgstr "" +msgstr "дата створення" #: ../../blog/docs/spec.md:146 msgid "list of related topics (first 3 topics)" -msgstr "" +msgstr "список пов'язаних тем (перші 3 теми)" #: ../../blog/docs/spec.md:147 msgid "trimmed content (~50 words or fewer)" -msgstr "" +msgstr "обрізаний вміст (~50 слів або менше)" #: ../../blog/docs/spec.md:148 msgid "number of comments" -msgstr "" +msgstr "кількість коментарів" #: ../../blog/docs/spec.md:149 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" +"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " +"публікацію." #: ../../blog/docs/spec.md:150 -msgid "Detail view should contain links to `/update/` and `/delete/`." -msgstr "" +msgid "Detail view should contain links to `/update/` and `/update/`." +msgstr "Детальний перегляд має містити посилання на `/update/` та `/update/`." #: ../../blog/docs/spec.md:151 msgid "Detail view should contain a list of post related comments." msgstr "" +"Подання деталей має містити список коментарів, пов'язаних із публікацією." #: ../../blog/docs/spec.md:152 msgid "" "Auth views should use `register.html` and `login.html` with corresponding " "forms." msgstr "" +"Подання авторизації повинні використовувати `register.html` і `login.html` з " +"відповідними формами." #: ../../blog/docs/spec.md:155 msgid "" @@ -275,72 +333,83 @@ msgid "" "default) in any template context. To test anonymous access you can use `usar." "is_authenticated`, which returns `False` for non-authenticated users." msgstr "" +"Наразі можна використовувати адміністратора як \"тестового користувача\". " +"Система автентифікації буде впроваджена в майбутніх викликах. Об'єкт `user` " +"доступний (за замовчуванням) у будь-якому контексті шаблону. перевірте " +"анонімний доступ, ви можете використовувати `usar.is_authenticated`, який " +"повертає `False` для неавтентифікованих користувачів." #: ../../blog/docs/spec.md:162 msgid "Challenge: Auth forms" -msgstr "" +msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.md:165 msgid "Create form for new users registration with required fields:" msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.md:166 msgid "`username`" -msgstr "" +msgstr "`username`" #: ../../blog/docs/spec.md:167 msgid "`email`" -msgstr "" +msgstr "`email`" #: ../../blog/docs/spec.md:168 msgid "`password`" -msgstr "" +msgstr "`password`" #: ../../blog/docs/spec.md:169 msgid "`confirm password`" -msgstr "" +msgstr "`confirm password`" #: ../../blog/docs/spec.md:170 msgid "`username` value should be validated against existing values" msgstr "" +"значення `username` має перевірятися на відповідність існуючим значенням" #: ../../blog/docs/spec.md:171 msgid "`password` and `confirm password` values should match" -msgstr "" +msgstr "значення `password` і `confirm password` мають збігатися" #: ../../blog/docs/spec.md:172 msgid "Create form for existing users login" -msgstr "" +msgstr "Створити форму для входу існуючих користувачів" #: ../../blog/docs/spec.md:173 msgid "Validations errors are to be rendered on the template" -msgstr "" +msgstr "Помилки перевірки мають бути відображені в шаблоні" #: ../../blog/docs/spec.md:175 msgid "Challenge: Blogpost Creation and Update" -msgstr "" +msgstr "Завдання: Створення та Оновлення Дописів" #: ../../blog/docs/spec.md:178 msgid "Create a form to work with the blogpost model." -msgstr "" +msgstr "Створіть форму для роботи з моделлю допису." #: ../../blog/docs/spec.md:179 msgid "" "Create a form to gather a comment from a user. Form should be used within a " "\"post detail\" view." msgstr "" +"Створіть форму для збору коментарів від користувача. Форму слід " +"використовувати в перегляді \"подробиць публікації\"." #: ../../blog/docs/spec.md:181 msgid "Form should be used for *create* and *update* view." -msgstr "" +msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." #: ../../blog/docs/spec.md:183 msgid "It's ok to use a *pre-defined* user as a post's author for now." msgstr "" +"Поки що можна використовувати попередньо визначеного користувача як автора " +"допису." #: ../../blog/docs/spec.md:187 msgid "Challenge: Authentication" -msgstr "" +msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.md:190 msgid "" @@ -350,6 +419,11 @@ msgid "" "authentication process. Invalid form should provide information about " "error(s)." msgstr "" +"`/register/`: користувачі повинні надати всю необхідну інформацію про себе: " +"бажане ім'я користувача та електронну пошту. Дані імені (як ім'я, так і " +"останнє) є необов'язковими. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процес автентифікації. " +"Недійсна форма повинна надавати інформацію про \" \"помилку(и)." #: ../../blog/docs/spec.md:195 msgid "" @@ -357,6 +431,9 @@ msgid "" "successful they should be redirected to their profile (if no `next=url` " "query string available)." msgstr "" +"`/login/`: користувачі повинні надати свої облікові дані для входу. Якщо " +"вхід буде успішним, вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту `next=url`)." #: ../../blog/docs/spec.md:199 msgid "" @@ -366,86 +443,98 @@ msgid "" "post creation. Then a post is created, it should be authored by the " "currently authenticated user." msgstr "" +"`/create/`: Лише автентифіковані користувачі повинні мати змогу відвідувати " +"цю сторінку. У випадку, якщо анонімний користувач намагається надіслати " +"запит на цей перегляд, його слід спочатку переспрямувати до перегляду входу, " +"а після успішної автентифікації повернутися до створення допису. Потім " +"створюється допис, автором якого має бути наразі автентифікований користувач." #: ../../blog/docs/spec.md:205 msgid "" "`//comment`: Currently authenticated user should be referenced as a " "comment's author." msgstr "" +"`//comment`: наразі автентифікований користувач має вказуватися як " +"автор коментаря." #: ../../blog/docs/spec.md:207 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" +"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." #: ../../blog/docs/spec.md:211 msgid "Challenge: Class-Based Views" -msgstr "" +msgstr "Завдання: Class-Based Views" #: ../../blog/docs/spec.md:214 msgid "Replace **all** existing views via ``CBV``." -msgstr "" +msgstr "Замінити **всі** існуючі перегляди через ``CBV``." #: ../../blog/docs/spec.md:215 msgid "Existing functionality should not be corrupted." -msgstr "" +msgstr "Існуюча функціональність не повинна бути пошкоджена." #: ../../blog/docs/spec.md:217 msgid "It's ok to use Django built-in views for auth." -msgstr "" +msgstr "Використовувати вбудовані представлення Django для авторизації можна." #: ../../blog/docs/spec.md:226 msgid "Challenge: Serializers" -msgstr "" +msgstr "Завдання: Серіалізатори" #: ../../blog/docs/spec.md:229 msgid "Create serializers for:" -msgstr "" +msgstr "Створіть серіалізатори для:" #: ../../blog/docs/spec.md:230 msgid "Blogpost entity" -msgstr "" +msgstr "Об'єкт публікації в блозі" #: ../../blog/docs/spec.md:231 msgid "Blogpost comment" -msgstr "" +msgstr "Коментар у блозі" #: ../../blog/docs/spec.md:232 msgid "User" -msgstr "" +msgstr "Користувач" #: ../../blog/docs/spec.md:236 msgid "Challenge: API views" -msgstr "" +msgstr "Завдання: API views" #: ../../blog/docs/spec.md:239 msgid "" "All blog-site functionality are to be reflected via REST API. It's ok to use " "*pre-defined* user as a post's author for now." msgstr "" +"Усі функції сайту блогу мають бути відображені через REST API. Наразі можна " +"використовувати попередньо визначеного користувача як автора публікації." #: ../../blog/docs/spec.md:244 msgid "Challenge: Authentication and Permissions" -msgstr "" +msgstr "Завдання: Автентифікація та Дозволи" #: ../../blog/docs/spec.md:247 msgid "Implement REST authentication system." -msgstr "" +msgstr "Запровадити систему автентифікації REST." #: ../../blog/docs/spec.md:248 msgid "Only account owner can change their account data." msgstr "" +"Лише власник облікового запису може змінити дані свого облікового запису." #: ../../blog/docs/spec.md:249 msgid "Only authenticated users can create posts and comments." msgstr "" +"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." #: ../../blog/docs/spec.md:250 msgid "Only authors can change their posts." -msgstr "" +msgstr "Тільки автори можуть змінювати свої повідомлення." #: ../../src/appx/code_edit.txt:5 msgid "Code Editors" -msgstr "" +msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:7 msgid "" @@ -455,10 +544,15 @@ msgid "" "makes coding fun — but which one is best for you? :cite:`realpython:code-" "edit`" msgstr "" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" -msgstr "" +msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" @@ -546,7 +640,7 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:46 msgid "Code notes" -msgstr "" +msgstr "Примітки до коду" #: conv_store.models.Product:1 of msgid "Product model implementation" @@ -684,11 +778,11 @@ msgstr "Надайте представлення, зрозумілі людин #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "``Product('juice', 35.66, 1)``" -msgstr "" +msgstr "``Product('juice', 35.66, 1)``" #: ../../problem-sets/src/conv_store/challenge.rst:104 msgid "````" -msgstr "" +msgstr "````" #: ../../problem-sets/src/conv_store/challenge.rst:106 msgid "" @@ -924,7 +1018,6 @@ msgstr "" "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:251 -#, python-format msgid "At least 50% coverage." msgstr "Хоча б 50% покриття тестами." @@ -934,11 +1027,11 @@ msgstr "Залежності проекту потрібно оновити." #: ../../src/appx/env_path.txt:5 msgid "Issue - System Environment PATH" -msgstr "" +msgstr "Проблема - System Environment PATH" #: ../../src/appx/precedence.txt:8 msgid "Operator Precedence" -msgstr "" +msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" @@ -947,182 +1040,197 @@ msgid "" "`docs-python:operator-precedence`. Operators in the same cell have the same " "precedence (use left-to-right precedence)." msgstr "" +"У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " +"найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " +"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" -msgstr "" +msgstr "Оператор" #: ../../src/appx/precedence.txt:16 msgid "Description" -msgstr "" +msgstr "Опис" #: ../../src/appx/precedence.txt:18 msgid "" "``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " "``{expressions...}``" msgstr "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" #: ../../src/appx/precedence.txt:18 msgid "" "Binding or parenthesized expression, list display, dictionary display, set " "display" msgstr "" +"Прив’язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" -msgstr "" +msgstr "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" #: ../../src/appx/precedence.txt:23 msgid "Subscription, slicing, call, attribute reference" -msgstr "" +msgstr "Підписка, нарізка, виклик, посилання на атрибути" #: ../../src/appx/precedence.txt:28 msgid "``await x``" -msgstr "" +msgstr "``await x``" #: ../../src/appx/precedence.txt:28 msgid "Await expression" -msgstr "" +msgstr "Вираз Await" #: ../../src/appx/precedence.txt:30 msgid "``**``" -msgstr "" +msgstr "``**``" #: ../../src/appx/precedence.txt:30 msgid "Exponentiation [#]_" -msgstr "" +msgstr "Піднесення до степеня [#]_" #: ../../src/appx/precedence.txt:32 msgid "``+x``, ``-x``, ``~x``" -msgstr "" +msgstr "``+x``, ``-x``, ``~x``" #: ../../src/appx/precedence.txt:32 msgid "Positive, negative, bitwise NOT" -msgstr "" +msgstr "Позитивне, негативне, побітове НІ" #: ../../src/appx/precedence.txt:34 msgid "``*``, ``@``, ``/``, ``//``, ``%``" -msgstr "" +msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" "Multiplication, matrix multiplication, division, floor division, remainder " "[#]_" -msgstr "" +msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 msgid "``+``, ``-``" -msgstr "" +msgstr "``+``, ``-``" #: ../../src/appx/precedence.txt:37 msgid "Addition and subtraction" -msgstr "" +msgstr "Додавання і віднімання" #: ../../src/appx/precedence.txt:39 msgid "``<<``, ``>>``" -msgstr "" +msgstr "``<<``, ``>>``" #: ../../src/appx/precedence.txt:39 msgid "Shifts" -msgstr "" +msgstr "Зсуви" #: ../../src/appx/precedence.txt:41 msgid "``&``" -msgstr "" +msgstr "``&``" #: ../../src/appx/precedence.txt:41 msgid "Bitwise AND" -msgstr "" +msgstr "Побітове І" #: ../../src/appx/precedence.txt:43 msgid "``^``" -msgstr "" +msgstr "``^``" #: ../../src/appx/precedence.txt:43 msgid "Bitwise XOR" -msgstr "" +msgstr "Побітове XOR" #: ../../src/appx/precedence.txt:45 msgid "``|``" -msgstr "" +msgstr "``|``" #: ../../src/appx/precedence.txt:45 msgid "Bitwise OR" -msgstr "" +msgstr "Порозрядне АБО" #: ../../src/appx/precedence.txt:47 msgid "" "``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " "``==``, ``!=``" msgstr "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" #: ../../src/appx/precedence.txt:47 msgid "Comparisons, including membership tests and identity tests" -msgstr "" +msgstr "Порівняння, включаючи тести на приналежність і тести на ідентифікацію" #: ../../src/appx/precedence.txt:52 msgid "``not x``" -msgstr "" +msgstr "``not x``" #: ../../src/appx/precedence.txt:52 msgid "Boolean NOT" -msgstr "" +msgstr "Логічне НІ" #: ../../src/appx/precedence.txt:54 msgid "``and``" -msgstr "" +msgstr "``and``" #: ../../src/appx/precedence.txt:54 msgid "Boolean AND" -msgstr "" +msgstr "Логічне І" #: ../../src/appx/precedence.txt:56 msgid "``or``" -msgstr "" +msgstr "``or``" #: ../../src/appx/precedence.txt:56 msgid "Boolean OR" -msgstr "" +msgstr "Логічне АБО" #: ../../src/appx/precedence.txt:58 msgid "``if - else``" -msgstr "" +msgstr "``if - else``" #: ../../src/appx/precedence.txt:58 msgid "Conditional expression (ternary ``if``)" -msgstr "" +msgstr "Умовний вираз (трійковий ``if``)" #: ../../src/appx/precedence.txt:60 msgid "``lambda``" -msgstr "" +msgstr "``lambda``" #: ../../src/appx/precedence.txt:60 msgid "Lambda expression" -msgstr "" +msgstr "Lambda вирази" #: ../../src/appx/precedence.txt:62 msgid "``=``, ``:=``" -msgstr "" +msgstr "``=``, ``:=``" #: ../../src/appx/precedence.txt:62 msgid "Assignment expression" -msgstr "" +msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" "the power operator binds less tightly than an arithmetic or bitwise unary " "operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" +"оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " +"унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" "the ``%`` operator is also used for string formatting; the same precedence " "applies." msgstr "" +"оператор ``%`` також використовується для форматування рядків; " +"застосовується той самий пріоритет." #: ../../src/appx/printf.txt:7 msgid "``printf-style`` String Formatting" -msgstr "" +msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:9 msgid "" @@ -1133,218 +1241,233 @@ msgid "" "are replaced with zero or more elements of *values*. If *format* requires a " "single argument, *values* may be a single non-tuple object." msgstr "" +"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об’єктом." #: ../../src/appx/printf.txt:16 msgid "The conversion flag characters are:" -msgstr "" +msgstr "Символи перетворення:" #: ../../src/appx/printf.txt:19 msgid "Flag" -msgstr "" +msgstr "Символ" #: ../../src/appx/printf.txt:19 ../../src/appx/printf.txt:37 msgid "Meaning" -msgstr "" +msgstr "Значення" #: ../../src/appx/printf.txt:21 msgid "``#``" -msgstr "" +msgstr "``#``" #: ../../src/appx/printf.txt:21 msgid "The value conversion will use the \"alternative form\"" -msgstr "" +msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" #: ../../src/appx/printf.txt:23 msgid "``0``" -msgstr "" +msgstr "``0``" #: ../../src/appx/printf.txt:23 msgid "The conversion will be zero padded for numeric values" -msgstr "" +msgstr "Перетворення буде доповнено нулем для числових значень" #: ../../src/appx/printf.txt:25 msgid "``'-'``" -msgstr "" +msgstr "``'-'``" #: ../../src/appx/printf.txt:25 msgid "" "The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:28 msgid "``' '``" -msgstr "" +msgstr "``' '``" #: ../../src/appx/printf.txt:28 msgid "(a space) A blank should be left before a positive number" -msgstr "" +msgstr "(пробіл) Перед додатним числом слід залишити пробіл" #: ../../src/appx/printf.txt:30 msgid "``'+'``" -msgstr "" +msgstr "``'+'``" #: ../../src/appx/printf.txt:30 msgid "" "A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " "a \"space\" flag)" msgstr "" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:34 msgid "The conversion types are:" -msgstr "" +msgstr "Типи перетворення:" #: ../../src/appx/printf.txt:37 msgid "Conversion" -msgstr "" +msgstr "Перетворення" #: ../../src/appx/printf.txt:39 msgid "``'d'``" -msgstr "" +msgstr "``'d'``" #: ../../src/appx/printf.txt:39 ../../src/appx/printf.txt:41 msgid "Signed integer decimal" -msgstr "" +msgstr "Ціле десяткове число зі знаком" #: ../../src/appx/printf.txt:41 msgid "``'i'``" -msgstr "" +msgstr "``'i'``" #: ../../src/appx/printf.txt:43 msgid "``'o'``" -msgstr "" +msgstr "``'o'``" #: ../../src/appx/printf.txt:43 msgid "Signed octal value" -msgstr "" +msgstr "Вісімкове значення зі знаком" #: ../../src/appx/printf.txt:45 msgid "``'u'``" -msgstr "" +msgstr "``'u'``" #: ../../src/appx/printf.txt:45 msgid "Obsolete type - it is identical to ``'d'``" -msgstr "" +msgstr "Застарілий тип - ідентичний ``'d``" #: ../../src/appx/printf.txt:47 msgid "``'x'``" -msgstr "" +msgstr "``'x'``" #: ../../src/appx/printf.txt:47 msgid "Signed hexadecimal (lowercase)" -msgstr "" +msgstr "Шістнадцяткове число зі знаком (маленький регістр)" #: ../../src/appx/printf.txt:49 msgid "``'X'``" -msgstr "" +msgstr "``'X'``" #: ../../src/appx/printf.txt:49 msgid "Signed hexadecimal (uppercase)" -msgstr "" +msgstr "Шістнадцяткове число зі знаком (верхній регістр)" #: ../../src/appx/printf.txt:51 msgid "``'e'``" -msgstr "" +msgstr "``'e'``" #: ../../src/appx/printf.txt:51 msgid "Floating point exponential format (lowercase)" -msgstr "" +msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" #: ../../src/appx/printf.txt:53 msgid "``'E'``" -msgstr "" +msgstr "``'E'``" #: ../../src/appx/printf.txt:53 msgid "Floating point exponential format (uppercase)" -msgstr "" +msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" #: ../../src/appx/printf.txt:55 msgid "``'f'`` ``'F'``" -msgstr "" +msgstr "``'f'`` ``'F'``" #: ../../src/appx/printf.txt:55 msgid "Floating point decimal format" -msgstr "" +msgstr "Десятковий формат із плаваючою комою" #: ../../src/appx/printf.txt:58 msgid "``'g'``" -msgstr "" +msgstr "``'g'``" #: ../../src/appx/printf.txt:61 msgid "``'G'``" -msgstr "" +msgstr "``'G'``" #: ../../src/appx/printf.txt:58 msgid "" "Floating point format. Uses lowercase exponential format if exponent is less " "that -4 or not less than precision, decimal format otherwise." msgstr "" +"Формат з плаваючою комою. Використовує нижній регістр експоненціального " +"формату, якщо показник степеня менший за -4 або не менший за точність, " +"десятковий формат інакше." #: ../../src/appx/printf.txt:63 msgid "``'c'``" -msgstr "" +msgstr "``'c'``" #: ../../src/appx/printf.txt:63 msgid "Single character (accepts integer or single character string)" -msgstr "" +msgstr "Один символ (приймає ціле число або рядок з одним символом)" #: ../../src/appx/printf.txt:65 msgid "``'r'``" -msgstr "" +msgstr "``'r'``" #: ../../src/appx/printf.txt:65 msgid "Converts any Python object using ``repr()``" -msgstr "" +msgstr "Перетворює будь-який об’єкт Python за допомогою ``repr()``" #: ../../src/appx/printf.txt:67 msgid "``'s'``" -msgstr "" +msgstr "``'s'``" #: ../../src/appx/printf.txt:67 msgid "Converts any Python object using ``str()``" -msgstr "" +msgstr "Перетворює будь-який об’єкт Python за допомогою ``str()``" #: ../../src/appx/printf.txt:69 msgid "``'a'``" -msgstr "" +msgstr "``'a'``" #: ../../src/appx/printf.txt:69 msgid "Converts any Python object using ``ascii()``" -msgstr "" +msgstr "Перетворює будь-який об’єкт Python за допомогою ``ascii()``" #: ../../src/appx/printf.txt:71 msgid "``'%'``" -msgstr "" +msgstr "``'%'``" #: ../../src/appx/printf.txt:71 msgid "" "No arguments is converted, results in a ``'%'`` character in the result." -msgstr "" +msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.md:1 msgid "Software List" -msgstr "" +msgstr "Список Програмного Забезпечення" #: ../../src/appx/software_list.md:4 msgid "7zip" -msgstr "" +msgstr "7zip" #: ../../src/appx/software_list.md:7 msgid "**7-Zip** is **free software** with **open source**." msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.md:9 msgid "" "High compression ratio in [7z format](https://7-zip.org/7z.html) with " "**LZMA** and **LZMA2** compression" msgstr "" +"Високий ступінь стиснення у [форматі 7z](https://7-zip.org/7z.html) зі " +"стисненням **LZMA** і **LZMA2**" #: ../../src/appx/software_list.md:11 msgid "Supported formats:" -msgstr "" +msgstr "Підтримувані формати:" #: ../../src/appx/software_list.md:12 msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" -msgstr "" +msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" #: ../../src/appx/software_list.md:13 msgid "" @@ -1352,22 +1475,25 @@ msgid "" "HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " "UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" +"Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." #: ../../src/appx/software_list.md:16 msgid "Self-extracting capability for 7z format" -msgstr "" +msgstr "Можливість саморозпакування для формату 7z" #: ../../src/appx/software_list.md:17 msgid "Integration with Windows Shell" -msgstr "" +msgstr "Інтеграція з Windows Shell" #: ../../src/appx/software_list.md:19 msgid "https://7-zip.org/" -msgstr "" +msgstr "https://7-zip.org/" #: ../../src/appx/software_list.md:21 msgid "cygwin" -msgstr "" +msgstr "cygwin" #: ../../src/appx/software_list.md:24 msgid "" @@ -1376,16 +1502,22 @@ msgid "" "wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " "substantial POSIX API functionality." msgstr "" +"Це велика колекція інструментів GNU та Open Source, які забезпечують " +"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" +"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.md:30 msgid "**Cygwin is not**:" -msgstr "" +msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.md:32 msgid "" "a way to run native Linux apps on Windows. You must rebuild your application " "*from source* if you want it to run on Windows." msgstr "" +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.md:34 msgid "" @@ -1393,14 +1525,18 @@ msgid "" "like `signals`, `ptys` etc. Again, you need to build your apps *from source* " "if you want to take advantage of Cygwin functionality." msgstr "" +"спосіб чарівним чином зробити рідні програми Windows відомими " +"функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " +"потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " +"перевагами функціональності Cygwin." #: ../../src/appx/software_list.md:38 msgid "https://www.cygwin.com/" -msgstr "" +msgstr "https://www.cygwin.com/" #: ../../src/appx/software_list.md:40 msgid "git[^cygwin-pkg]" -msgstr "" +msgstr "git[^cygwin-pkg]" #: ../../src/appx/software_list.md:43 msgid "" @@ -1408,18 +1544,24 @@ msgid "" "source) distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" +"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." +"com/about/free-and-open-source) розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.md:47 msgid "https://git-scm.com/" -msgstr "" +msgstr "https://git-scm.com/" #: ../../src/appx/software_list.md:49 msgid "Docker" -msgstr "" +msgstr "Docker" #: ../../src/appx/software_list.md:52 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.md:54 msgid "" @@ -1430,14 +1572,20 @@ msgid "" "world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " "and choice." msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.md:60 msgid "https://www.docker.com/" -msgstr "" +msgstr "https://www.docker.com/" #: ../../src/appx/software_list.md:62 msgid "PostgreSQL[^cygwin-pkg]" -msgstr "" +msgstr "PostgreSQL[^cygwin-pkg]" #: ../../src/appx/software_list.md:65 msgid "" @@ -1445,14 +1593,17 @@ msgid "" "over 35 years of active development that has earned it a strong reputation " "for reliability, feature robustness, and performance." msgstr "" +"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.md:69 msgid "https://www.postgresql.org/" -msgstr "" +msgstr "https://www.postgresql.org/" #: ../../src/appx/software_list.md:71 msgid "psql[^cygwin-pkg]" -msgstr "" +msgstr "psql[^cygwin-pkg]" #: ../../src/appx/software_list.md:74 msgid "" @@ -1463,20 +1614,28 @@ msgid "" "features to facilitate writing scripts and automating a wide variety of " "tasks." msgstr "" +"Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.md:80 msgid "" "On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " "look for `postgresql-client` package." msgstr "" +"У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " +"знайдіть пакет `postgresql-client`." #: ../../src/appx/software_list.md:83 msgid "https://www.postgresql.org/docs/current/app-psql.html" -msgstr "" +msgstr "https://www.postgresql.org/docs/current/app-psql.html" #: ../../src/appx/software_list.md:85 msgid "pgAdmin" -msgstr "" +msgstr "pgAdmin" #: ../../src/appx/software_list.md:88 msgid "" @@ -1484,18 +1643,23 @@ msgid "" "development platform for PostgreSQL, the most advanced Open Source database " "in the world." msgstr "" +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.md:92 msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." msgstr "" +"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" +"інтерфейсу." #: ../../src/appx/software_list.md:94 msgid "https://pgadmin.org/" -msgstr "" +msgstr "https://pgadmin.org/" #: ../../src/appx/software_list.md:96 msgid "SQLite[^cygwin-pkg]" -msgstr "" +msgstr "SQLite[^cygwin-pkg]" #: ../../src/appx/software_list.md:99 msgid "" @@ -1505,11 +1669,426 @@ msgid "" "(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." "html), SQL database engine." msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" +"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " +"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" +"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" +"fullsql.html) , двигун бази даних SQL." #: ../../src/appx/software_list.md:106 msgid "https://sqlite.org/" -msgstr "" +msgstr "https://sqlite.org/" #: ../../src/appx/software_list.md:109 msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" + +#: ../../problem-sets/src/wrw_game/challenge.rst:3 +msgid "WARRIORS, ROBBERS AND WIZARDS GAME" +msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" + +#: ../../problem-sets/src/wrw_game/challenge.rst:5 +msgid "" +"Warriors, robbers and wizards (WRW) game is a \"Paper, Rock and Scissors\" " +"clone, but in a fantasy setting. It comes with a simple command line " +"interface where the use must type in his or her choice. The enemy is " +"controlled by the script. The player's goal is to gain as many score points, " +"as it possible." +msgstr "" +"Гра Warriors, robbers and wizards (WRW) є клоном \"Paper, Rock and " +"Scissors\", але у фентезійній обстановці. Вона постачається з простим " +"інтерфейсом командного рядка, де для використання потрібно вводити його або " +"її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога більше " +"очок." + +#: ../../problem-sets/src/wrw_game/challenge.rst:12 +msgid "Code Organization" +msgstr "Організація коду" + +#: ../../problem-sets/src/wrw_game/challenge.rst:14 +msgid "Use separate modules to maintain your code base. For example:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:26 +msgid "General Playground Description" +msgstr "Загальний опис ігрового майданчика" + +#: ../../problem-sets/src/wrw_game/challenge.rst:28 +msgid "" +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." +msgstr "" +"Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " +"захисту. Раунди повторюються, поки гравець не буде переможений." + +#: ../../problem-sets/src/wrw_game/challenge.rst:32 +msgid "Fight Rules" +msgstr "Правила боротьби" + +#: ../../problem-sets/src/wrw_game/challenge.rst:34 +msgid "It's simple..." +msgstr "Це просто..." + +#: ../../problem-sets/src/wrw_game/challenge.rst:36 +msgid "**Warrior** beats **Robber**" +msgstr "Воїн перемагає розбійника" + +#: ../../problem-sets/src/wrw_game/challenge.rst:37 +msgid "**Robber** beats **Wizard**" +msgstr "**Розбійник** перемагає **Чарівника**" + +#: ../../problem-sets/src/wrw_game/challenge.rst:38 +msgid "**Wizard** beats **Warrior**" +msgstr "**Чарівник** перемагає **Воїна**" + +#: ../../problem-sets/src/wrw_game/challenge.rst:41 +msgid "Attack Stage" +msgstr "Стадія атаки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:43 +msgid "" +"Player selects the choice to attack from **warrior**, **robber** or " +"**wizard**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог обирає " +"вибір для захисту з тих самих варіантів за допомогою\" \"довільного. Якщо " +"атака успішна:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:47 +msgid "enemy health is decreased" +msgstr "здоров'я ворога зменшено" + +#: ../../problem-sets/src/wrw_game/challenge.rst:48 +msgid "player gains score points" +msgstr "гравець отримує очки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:50 +msgid "In case enemy is defeated:" +msgstr "Якщо ворог переможений:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:52 +msgid "a new enemy instance is initialized using higher level" +msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" + +#: ../../problem-sets/src/wrw_game/challenge.rst:53 +msgid "player gains some extra score points" +msgstr "гравець отримує додаткові очки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:54 +msgid "next defence stage is skipped, and player attacks again" +msgstr "наступний етап захисту пропущено, і гравець атакує знову" + +#: ../../problem-sets/src/wrw_game/challenge.rst:57 +msgid "Defence Stage" +msgstr "Стадія захисту" + +#: ../../problem-sets/src/wrw_game/challenge.rst:59 +msgid "" +"Player selects the choice to defend from **warrior**, **robber** or " +"**wizard**, enemy selects the choice to attack from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника, " +"ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " +"атака успішна:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:63 +msgid "player health is decreased" +msgstr "здоров'я гравця знижено" + +#: ../../problem-sets/src/wrw_game/challenge.rst:65 +msgid "If player is defeated:" +msgstr "Якщо гравець переможений:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:67 +msgid "report the message about gained score points to the terminal" +msgstr "повідомляти повідомлення про набрані бали на термінал" + +#: ../../problem-sets/src/wrw_game/challenge.rst:68 +msgid "write down player's name and score points to \"scores.txt\" file" +msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" + +#: ../../problem-sets/src/wrw_game/challenge.rst:72 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../problem-sets/src/wrw_game/challenge.rst:75 +msgid "Enemy Down" +msgstr "Enemy Down" + +#: ../../problem-sets/src/wrw_game/challenge.rst:77 +msgid "" +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." +msgstr "" +"Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." + +#: ../../problem-sets/src/wrw_game/challenge.rst:82 +msgid "Game Over" +msgstr "Game Over" + +#: ../../problem-sets/src/wrw_game/challenge.rst:84 +msgid "" +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." +msgstr "" +"Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." + +#: ../../problem-sets/src/wrw_game/challenge.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../problem-sets/src/wrw_game/challenge.rst:93 +msgid "Enemy" +msgstr "Ворог" + +#: ../../problem-sets/src/wrw_game/challenge.rst:95 +msgid "" +"Represents the playing enemy-bot. All choices made by this model are random. " +"The model should implement methods:" +msgstr "" +"Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " +"випадкові. Модель має реалізовувати методи:" + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``__init__``" +msgstr "``__init__``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:99 +msgid "" +"Initialize enemy instance. Initializer should receive one argument of " +"integer type - ``level: int``. Health points value should be set equal to " +"level value." +msgstr "" +"Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " +"аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " +"встановлено рівним значенню рівня." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``descrease_health``" +msgstr "``descrease_health``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:104 +msgid "" +"Method decreases the health points value by 1 (one). If this value becomes " +"less that 1 (one) the ``EnemyDown`` exception is raised." +msgstr "" +"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стає " +"меншим за 1 (один), виникає виняток ``EnemyDown``." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``select_attack``" +msgstr "``select_attack``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:108 +msgid "Return a random attack choice from valid choices." +msgstr "Повернути випадковий вибір атаки з дійсних виборів." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``select_defence``" +msgstr "``select_defence``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:111 +msgid "Return a random defence choice from valid choices." +msgstr "Повернути випадковий вибір захисту з дійсних виборів." + +#: ../../problem-sets/src/wrw_game/challenge.rst:113 +msgid "You are free to implement other methods you like, if needed." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." + +#: ../../problem-sets/src/wrw_game/challenge.rst:116 +msgid "Player" +msgstr "Гравець" + +#: ../../problem-sets/src/wrw_game/challenge.rst:118 +msgid "" +"This model is controlled by the user. It represents a playing user. All " +"choices are controlled by the user. The model should implement methods:" +msgstr "" +"Цією моделлю керує користувач. Вона представляє гравця. Усі вибори контролює " +"користувач. Модель має реалізовувати методи:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:122 +msgid "" +"Initialize player instance. Initializer should receive player's name as an " +"argument - ``name: str``. Health points are to be set from settings. Score " +"points should be initialized with 0 (zero)." +msgstr "" +"Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця як " +"аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " +"налаштувань. Очки мають бути ініціалізовані 0 (нулем)." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``decrease_health``" +msgstr "``decrease_health``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:127 +msgid "" +"Method decreases the health points value by 1 (one). If this value becomes " +"less that 1 (one) the ``GameOver`` exception is raised." +msgstr "" +"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " +"менше 1 (один), виникає виняток ``GameOver``." + +#: ../../problem-sets/src/wrw_game/challenge.rst:131 +#: ../../problem-sets/src/wrw_game/challenge.rst:134 +msgid "Return a fight choice made by the user. Performs choice validation." +msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``fight``" +msgstr "``fight``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:137 +msgid "" +"Static method to perform a fight. Takes two arguments representing attack " +"and defence choices. Performs fight result calculation and return it back." +msgstr "" +"Статичний метод для проведення бою. Бере два аргументи, що представляють " +"атаку та вибір захисту. Виконує обчислення результату бою та повертає його " +"назад." + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``attack``" +msgstr "``attack``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:141 +msgid "" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" +msgstr "" +"Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:147 +msgid "``\"YOUR ATTACK IS SUCCESSFUL!\"``" +msgstr "``\"YOUR ATTACK IS SUCCESSFUL!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:148 +msgid "``\"YOUR ATTACK IS FAILED!\"``" +msgstr "``\"YOUR ATTACK IS FAILED!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:149 +#: ../../problem-sets/src/wrw_game/challenge.rst:160 +msgid "``IT'S A DRAW!\"``" +msgstr "``IT'S A DRAW!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst +msgid "``defence``" +msgstr "``defence``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:152 +msgid "" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" +msgstr "" +"Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:158 +msgid "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" +msgstr "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:159 +msgid "``\"YOUR DEFENCE IS FAILED!\"``" +msgstr "``\"YOUR DEFENCE IS FAILED!\"``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:164 +msgid "Settings" +msgstr "Налаштування" + +#: ../../problem-sets/src/wrw_game/challenge.rst:166 +msgid "" +"**settings.py** module contains constants values for the game (e.g. " +"``INITIAL_PLAYER_HEALTH = 5``)." +msgstr "" +"Модуль settings.py містить значення констант для гри (наприклад, " +"``INITIAL_PLAYER_HEALTH = 5``)." + +#: ../../problem-sets/src/wrw_game/challenge.rst:171 +msgid "Engine" +msgstr "Ігровий рушій" + +#: ../../problem-sets/src/wrw_game/challenge.rst:173 +msgid "Engine module should provide two functions:" +msgstr "Модуль двигуна має забезпечувати дві функції:" + +#: ../../problem-sets/src/wrw_game/challenge.rst:175 +msgid "``get_player_name``" +msgstr "``get_player_name``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:176 +msgid "``play``" +msgstr "``play``" + +#: ../../problem-sets/src/wrw_game/challenge.rst:179 +msgid "Player name getter" +msgstr "Отримання імені гравця" + +#: ../../problem-sets/src/wrw_game/challenge.rst:181 +msgid "" +"Asks the user to type in his or her name and return it back. Leading and " +"trailing whitespaces are to be trimmed. Name should contain at least one " +"character." +msgstr "" +"Просить користувача ввести своє ім'я та повернути його назад. Пробіли на " +"початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " +"символ." + +#: ../../problem-sets/src/wrw_game/challenge.rst:186 +msgid "Play" +msgstr "Гра" + +#: ../../problem-sets/src/wrw_game/challenge.rst:188 +msgid "" +"This function initializes player and enemy instance. It processes game " +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." +msgstr "" +"Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." + +#: ../../problem-sets/src/wrw_game/challenge.rst:199 +msgid "Optional Enhancements" +msgstr "Додаткові Вдосконалення" + +#: ../../problem-sets/src/wrw_game/challenge.rst:201 +msgid "Add scores processor to show top-10 scores from a record table." +msgstr "" +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." + +#: ../../problem-sets/src/wrw_game/challenge.rst:202 +msgid "Create game menu, for example: ::" +msgstr "Створити меню гри, наприклад: ::" From bc6227e4cfd14133dec7a5ceac93177958f4b15d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 8 Apr 2023 19:41:43 +0300 Subject: [PATCH 293/689] Updated translations Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 4 +- src/_locales/ua/LC_MESSAGES/basics.po | 1219 ++++++++++++------------- src/_locales/ua/LC_MESSAGES/oop.po | 342 ++++--- src/_locales/ua/LC_MESSAGES/rdbms.po | 658 +++++++------ src/basics/stdtypes.txt | 2 +- src/basics/syntax.txt | 2 +- src/oop/solid.txt | 2 +- src/rdbms/aggregation.txt | 2 +- 8 files changed, 1081 insertions(+), 1150 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index d18645d3c..f2cdf2980 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-08 17:35+0300\n" -"PO-Revision-Date: 2023-04-08 19:09+0300\n" +"PO-Revision-Date: 2023-04-08 19:13+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -310,7 +310,7 @@ msgstr "" "публікацію." #: ../../blog/docs/spec.md:150 -msgid "Detail view should contain links to `/update/` and `/update/`." +msgid "Detail view should contain links to `/update/` and `/delete/`." msgstr "Детальний перегляд має містити посилання на `/update/` та `/update/`." #: ../../blog/docs/spec.md:151 diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index 6c1e5e16c..8256b04f2 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -2,401 +2,29 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR OLEKSANDR YEROMIN , 2023. +# OLEKSANDR YEROMIN , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-14 22:40+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-04-08 19:38+0300\n" +"PO-Revision-Date: 2023-04-08 19:40+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../src/basics/controlflow.txt:3 msgid "Control Flow" msgstr "Керування виконанням" -#: ../../src/basics/datatypes.txt:3 -msgid "Data Types" -msgstr "Типи Даних" - -#: ../../src/basics/datatypes.txt:5 -msgid "" -"Data may represent different things and require various operations " -"available. In programming data types is an important concept. For example" -" **1984** may be a number (``1984``), a text (``\"1984"``) or event a " -"date. The data type describes the operations, that are allowed for the " -"data, like additions for numbers or concatenation for text (e.g. ``1 + 2 " -"-> 3``, ``\"1\" + \"3\" -> \"13\"``)." -msgstr "" -"Дані можуть представляти різні речі та вимагати різноманітних доступних" -"операцій. У програмуванні типи даних є важливою концепцією. " -"Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984"`` ) " -"або подією чи датою. Тип даних описує можливі операції, дозволені для даних, " -"як-от додавання чисел або конкатенація для тексту " -"(наприклад, ``1 + 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." - -#: ../../src/basics/datatypes.txt:11 -msgid "" -"Python uses dynamic typing. This means as a developer you should not " -"declare a variable with its data type - the interpreter will do this for " -"you. Other popular language using dynamic typing are JavaScript and PHP. " -"Setting variables in Python is as easy as:" -msgstr "" -"Python використовує динамічну типізацію. Це означає, що ви, як розробник, " -"не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " -"за вас. Іншими популярними мовами, які використовують динамічну типізацію, " -"є JavaScript і PHP. Налаштування змінних у Python доволі просто, як: " - -#: ../../src/basics/datatypes.txt:23 -msgid "Built-In Data Types" -msgstr "Вбудовані типи даних" - -#: ../../src/basics/datatypes.txt:25 -msgid "Python has the following data types built-in:" -msgstr "Python має такі вбудовані типи даних:" - -#: ../../src/basics/datatypes.txt:27 -msgid "Integers (``int``)" -msgstr "Цілі числа (``int``)" - -#: ../../src/basics/datatypes.txt:28 -msgid "Floating-point numbers (``float``)" -msgstr "Числа з плаваючою крапкою (``float``)" - -#: ../../src/basics/datatypes.txt:29 -msgid "Complex numbers (``complex``)" -msgstr "Комплексні числа (``complex``)" - -#: ../../src/basics/datatypes.txt:30 -msgid "Booleans (``bool``)" -msgstr "Логічні значення (``bool``)" - -#: ../../src/basics/datatypes.txt:31 -msgid "Strings (``str``)" -msgstr "Рядки (``str``)" - -#: ../../src/basics/datatypes.txt:32 -msgid "Bytes (``bytes``)" -msgstr "Байти (``bytes``)" - -#: ../../src/basics/datatypes.txt:33 -msgid "Byte arrays (``bytearray``)" -msgstr "Масиви байтів (``bytearray``)" - -#: ../../src/basics/datatypes.txt:34 -msgid "Lists (``list``)" -msgstr "Списки (``list``)" - -#: ../../src/basics/datatypes.txt:35 -msgid "Tuples (``tuple``)" -msgstr "Кортежі (``tuple``)" - -#: ../../src/basics/datatypes.txt:36 -msgid "Sets (``set``)" -msgstr "Cети (``set``)" - -#: ../../src/basics/datatypes.txt:37 -msgid "Frozen sets (``frozenset``)" -msgstr "Заморожені сети (``frozenset``)" - -#: ../../src/basics/datatypes.txt:38 -msgid "Dictionaries (``dict``)" -msgstr "Словники (``dict``)" - -#: ../../src/basics/datatypes.txt:39 -msgid "None (``NoneType``)" -msgstr "Жодного (``NoneType``)" - -#: ../../src/basics/datatypes.txt:41 -msgid "" -"Any one can use them without additional imports or packages installations." -msgstr "" -"Будь-хто може використовувати їх без додаткового імпорту " -"чи встановлення пакетів. " - -#: ../../src/basics/datatypes.txt:44 -msgid "Text" -msgstr "Текстові дані" - -#: ../../src/basics/datatypes.txt:46 -msgid "" -"Text data are stored as strings (``str`` data type) in Python. Any " -"sequence of letters, digits, punctuation marks and whitespace characters " -"enclosed with quotes is considered to be a string literal. Both single " -"quotes (``'``) and double quotes (``\"``) can be used interchangeably to " -"create a string in Python." -msgstr "" -"Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-яка " -"послідовність літер, цифр, знаків пунктуації та пробілів, взята в лапки, " -"вважається рядковим літералом. Обидві одинарні лапки (``'``) або подвійні " -"лапки (``\"``) можна взаємозамінно використовувати для створення рядків." - -#: ../../src/basics/datatypes.txt:58 -msgid "Escaping" -msgstr "Екранування" - -#: ../../src/basics/datatypes.txt:60 -msgid "" -"In programming this is a process of using a special character to indicate" -" that the following character(s) should be treated differently from their" -" literal meaning. The common usage is to include a special character(s) " -"within strings. A **backslash** character is used to *escape* the " -"following one." -msgstr "" -"У програмуванні це процес використання спеціального символу, щоб вказати, що " -"наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне значення. " -"Загальне використання полягає в тому, щоб включити спеціальний(і) символ(и) " -"в рядки. Символ **backslash** використовується для екранування наступного. " - -#: ../../src/basics/datatypes.txt:65 -msgid "Example of Escaping in Python" -msgstr "Приклади Екранування в Python" - -#: ../../src/basics/datatypes.txt:84 -msgid "Single quotes or double quotes" -msgstr "Одинарні або подвійні лапки" - -#: ../../src/basics/datatypes.txt:86 -msgid "" -"Don't care. Use any quote mark you like. A *string* is a sequence of " -"characters after the opening quote and till the closing one. You may use " -"double quotes in case a single quote is a part of the text (e.g. ``\"It's" -" a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship " -"was a \"Billy of Tea\"'``). It's a good practice not to mess single and " -"double quotes within one project. Just keep using a chosen one character " -"for all strings." -msgstr "" -"Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " -"після початкової лапки та до кінцевої. Ви можете використовувати подвійні " -"лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " -"Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of Tea\"'``). " -"Рекомендується не плутати одинарні та подвійні лапки в одному проекті. " -"Просто продовжуйте використовувати один вибраний символ для всіх рядків. " - -#: ../../src/basics/datatypes.txt:94 -msgid "Multiline strings" -msgstr "Багатострічкові рядки" - -#: ../../src/basics/datatypes.txt:96 -msgid "" -"You can assign a multiline string by using triple quotes: Both single " -"quote and double quote characters are available." -msgstr "" -"Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: в " -"середині них доступні як одинарні, так і подвійні лапки. " - -#: ../../src/basics/datatypes.txt:106 -msgid "" -"The same syntax is used to create docstring, which are a special case of " -"string usage. We will look on these in the future." -msgstr "" -"Такий самий синтаксис використовується для створення рядка документації, " -"який є окремим випадком використання рядка. Ми розглянемо це в майбутньому. " - -#: ../../src/basics/datatypes.txt:110 ../../src/basics/stdtypes.txt:28 -msgid "Supported operations" -msgstr "Операції підтримки" - -#: ../../src/basics/datatypes.txt:112 -msgid "This subsection describes only the most common operations." -msgstr "" -"У цьому розділі описано лише найпоширеніші операції. " - -#: ../../src/basics/datatypes.txt -msgid "Concatenation" -msgstr "Конкатинація" - -#: ../../src/basics/datatypes.txt:115 -msgid "The ``+`` operator is used to concatenate (join) two or more strings." -msgstr "" -"Оператор ``+`` використовується для конкатенації (об'єднання) двох або " -"більше рядків. " - -#: ../../src/basics/datatypes.txt:121 -msgid "" -"On the other hand the ``join`` method concatenates a collection of " -"strings, which may be more efficient than using ``+``." -msgstr "" -"З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " -"ефективнішим, ніж використання ``+``. " - -#: ../../src/basics/datatypes.txt -msgid "Repetition" -msgstr "Повторення" - -#: ../../src/basics/datatypes.txt:129 -msgid "" -"The ``*`` operator is used to repeat a string a specified number of " -"times. Only multipliers of the ``int`` type are allowed." -msgstr "" -"Оператор ``*`` використовується для повторення рядка вказану кількість " -"разів. Дозволені операції лише з множниками типу ``int``. " - -#: ../../src/basics/datatypes.txt -msgid "Length" -msgstr "Довжина" - -#: ../../src/basics/datatypes.txt:137 -msgid "The ``len`` function is used to find the length of a string." -msgstr "Функція ``len`` використовується для визначення довжини рядка." - -#: ../../src/basics/datatypes.txt -msgid "Case conversion" -msgstr "Перетворення регістру" - -#: ../../src/basics/datatypes.txt:144 -msgid "" -"The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " -"actions on case." -msgstr "" -"Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " -"зміною регістра. " - -#: ../../src/basics/datatypes.txt:147 -msgid "``lower`` creates a new string with all lower-case characters." -msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." - -#: ../../src/basics/datatypes.txt:149 -msgid "``upper`` creates a new string with all upper-case characters." -msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." - -#: ../../src/basics/datatypes.txt:151 -msgid "``capitalize`` creates a new string with the upper-case 1st character." -msgstr "``capitalize`` створює новий рядок із першим символом у верхньому " -"регістрі. " - -#: ../../src/basics/datatypes.txt:153 -msgid "``title`` will make all characters after whitespace upper case." -msgstr "``title`` зробить усі символи після пробілів верхнім регістром." - -#: ../../src/basics/datatypes.txt -msgid "Stripping" -msgstr "Зачистка" - -#: ../../src/basics/datatypes.txt:164 -msgid "" -"The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " -"leading and/or trailing whitespace characters." -msgstr "" -"Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " -"початкових і/або кінцевих пробільних символів. " - -#: ../../src/basics/datatypes.txt:175 -msgid "Strings are subscriptable" -msgstr "Рядки можна підписувати" - -#: ../../src/basics/datatypes.txt:177 -msgid "``str`` is not the only one subscriptable data type in Python." -msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." - -#: ../../src/basics/datatypes.txt:179 -msgid "" -"This means you can access individual characters or slices within a string" -" using indexes. A string is a *sequence* of characters and each character" -" within a string has its own position - an *index*. Indexing starts at 0," -" so the first character in a string is at index 0, the second one is at " -"index 1, and so on. Negative indexing is also possible, with -1 " -"representing the last character in a string, -2 representing the second-" -"to-last character, and so on. Use square brackets (``[]``) to access the " -"index." -msgstr "" -"Це означає, що ви можете отримати доступ до окремих символів або фрагментів " -"у рядку за допомогою індексів. Рядок — це послідовність символів, і кожен " -"символ у рядку має власну позицію — індекс. Індексація починається з 0, " -"отже, перший символ у рядку має індекс 0, другий - індекс 1 і так далі. " -"Також можливе від'ємне індексування, коли -1 представляє останній символ у " -"рядку, а -2 представляє передостанній символ і так далі. Використовуйте " -"квадратні дужки (``[]``), щоб отримати доступ до індексу. " - -#: ../../src/basics/datatypes.txt:194 -msgid "" -"You can also *slice* strings, this means to get a subsequence of " -"characters. The slice syntax consists of 3 digits:" -msgstr "" -"Ви також можете *розрізати* рядки, тобто отримати підпослідовність символів. " -"Синтаксис фрагмента складається з 3 цифр: " - -#: ../../src/basics/datatypes.txt:197 -msgid "the first one represent the index to start (inclusive), defaults to 0" -msgstr "" -"Перший представляє початковий індекс (включно), за замовчанням " -"дорівнює 0. " - -#: ../../src/basics/datatypes.txt:198 -msgid "" -"the second one represent the index to stop (non-inclusive), defaults to " -"the length of the sequence" -msgstr "" -"Другий представляє індекс для зупинки (не включно), за замовчуванням довжина " -"послідовності. " - -#: ../../src/basics/datatypes.txt:200 -msgid "the third one represents a step, defaults to 1" -msgstr "Третій представляє крок, за замовчуванням 1." - -#: ../../src/basics/datatypes.txt:202 -msgid "" -"These numbers are separated within colon (``:``) and enclosed within " -"square brackets. Any slice digit may be omitted." -msgstr "" -"Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " -"цифра зрізу може бути упущена. " - -#: ../../src/basics/datatypes.txt:205 -msgid "Sequence slicing" -msgstr "Нарізка послідовності" - -#: ../../src/basics/datatypes.txt:216 -msgid "Strings are iterable" -msgstr "Рядки можна повторювати" - -#: ../../src/basics/datatypes.txt:218 -msgid "" -"Since strings are arrays, we can loop through the characters in a string " -"with a ``for`` loop:" -msgstr "" -"Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " -"допомогою циклу ``for``: " - -#: ../../src/basics/datatypes.txt:227 -msgid "Strings are immutable" -msgstr "Рядки незмінні" - -#: ../../src/basics/datatypes.txt:229 -msgid "This means, you cannot change an individual character within a string." -msgstr "Це означає, що ви не можете змінити окремий символ у рядку." - -#: ../../src/basics/datatypes.txt:237 -msgid "Integers" -msgstr "Цілі числа" - -#: ../../src/basics/datatypes.txt:239 -msgid "" -"``int``, or integer, is a whole number, positive or negative, without " -"decimals." -msgstr "" -"``int``, тобто ціле число, може бути додатнім або від'ємним, без десяткових " -"знаків. " - -#: ../../src/basics/datatypes.txt:247 -msgid "Floats" -msgstr "Числа з плаваючою комою" - -#: ../../src/basics/datatypes.txt:249 -msgid "" -"``float``, or floating point number, is a number, positive or negative, " -"containing one or more decimals." -msgstr "" -"``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, що " -"містить один або більше десяткових знаків. " - #: ../../src/basics/exceptions.txt:3 msgid "Errors and Exceptions" msgstr "Помилки та винятки" @@ -424,14 +52,14 @@ msgstr "Вбудовані типи" #: ../../src/basics/stdtypes.txt:5 msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " -"instances and exceptions :cite:`docs-python:stdtypes`. This section " -"covers only the most base of them. Others will be discussed in the future" -" within their own topics." +"instances and exceptions :cite:`docs-python:stdtypes`. This section covers " +"only the most base of them. Others will be discussed in the future within " +"their own topics." msgstr "" "Основними вбудованими типами є числа, послідовності, відображення, класи, " "екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " "найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " -"власних тем. " +"власних тем." #: ../../src/basics/stdtypes.txt:11 msgid "Numeric types" @@ -439,27 +67,27 @@ msgstr "Числові типи" #: ../../src/basics/stdtypes.txt:13 msgid "" -"There are 3 distinct numeric types: *integers*, *floating point numbers*," -" and *complex numbers*. In addition, Booleans are a subtype of integers. " +"There are 3 distinct numeric types: *integers*, *floating point numbers*, " +"and *complex numbers*. In addition, Booleans are a subtype of integers. " "Integers have unlimited precision. Floating point numbers are usually " -"implemented usign ``double`` in C. Complex numbers have a real and " -"imaginary part, which are each a floating point number." +"implemented using ``double`` in C. Complex numbers have a real and imaginary " +"part, which are each a floating point number." msgstr "" "Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " "numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " "мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " "через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " -"кожна з яких є числом з плаваючою комою. " +"кожна з яких є числом з плаваючою комою." #: ../../src/basics/stdtypes.txt:19 msgid "" "Numbers are created by numeric literals or as the result of built-in " -"functions and operators. Unadorned integer literals (including hex, octal" -" and binary numbers) yield integers. Numeric literals containing a " -"decimal point or an exponent sign yield floating point numbers. Appending" -" ``j`` or ``J`` to a numeric literal yields an imaginary number (a " -"complex number with a zero real part) which you can add to an integer or " -"float to get a complex number with real and imaginary parts." +"functions and operators. Unadorned integer literals (including hex, octal " +"and binary numbers) yield integers. Numeric literals containing a decimal " +"point or an exponent sign yield floating point numbers. Appending ``j`` or " +"``J`` to a numeric literal yields an imaginary number (a complex number with " +"a zero real part) which you can add to an integer or float to get a complex " +"number with real and imaginary parts." msgstr "" "Числа створюються за допомогою числових літералів або як результат " "вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " @@ -468,7 +96,11 @@ msgstr "" "плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " "число (комплексне число з нульовою дійсною частиною), яке ви можете додати " "до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " -"з дійсною та уявною частинами. " +"з дійсною та уявною частинами." + +#: ../../src/basics/stdtypes.txt:28 +msgid "Supported operations" +msgstr "Операції підтримки" #: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 #: ../../src/basics/stdtypes.txt:201 @@ -482,7 +114,7 @@ msgstr "Результат" #: ../../src/basics/stdtypes.txt:33 msgid "``x + y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:33 msgid "sum of *x* and *y*" @@ -490,7 +122,7 @@ msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:35 msgid "``x - y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:35 msgid "difference of *x* and *y*" @@ -498,7 +130,7 @@ msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:37 msgid "``x * y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:37 msgid "product of *x* and *y*" @@ -506,7 +138,7 @@ msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:39 msgid "``x / y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:39 msgid "quotient of *x* and *y*" @@ -514,7 +146,7 @@ msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:41 msgid "``x // y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:41 msgid "floored quotient of *x* and *y*" @@ -522,7 +154,7 @@ msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:43 msgid "``x % y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:43 msgid "remainder of ``x / y``" @@ -530,7 +162,7 @@ msgstr "залишок від ділення``x / y``" #: ../../src/basics/stdtypes.txt:45 msgid "``-x``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:45 msgid "*x* negated" @@ -538,7 +170,7 @@ msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:47 msgid "``+x``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:47 msgid "*y* unchanged" @@ -546,7 +178,7 @@ msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:49 msgid "``abs(x)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:49 msgid "absolute value or magnitude of *x*" @@ -554,7 +186,7 @@ msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:51 msgid "``int(x)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:51 msgid "*x* converted to integer" @@ -562,7 +194,7 @@ msgstr "*x* перетворено на ціле число" #: ../../src/basics/stdtypes.txt:53 msgid "``float(x)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:53 msgid "*x* converted to floating point" @@ -570,19 +202,19 @@ msgstr "*x* перетворено на число з плаваючою ком #: ../../src/basics/stdtypes.txt:55 msgid "``complex(re, im)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:55 msgid "" -"a complex number with real part *re*, imaginary part *im*. *im* defaults " -"to zero." +"a complex number with real part *re*, imaginary part *im*. *im* defaults to " +"zero." msgstr "" -"Комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " -"замовчуванням на нуль. " +"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " +"замовчуванням на нуль." #: ../../src/basics/stdtypes.txt:58 msgid "``divmod(x, y)``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:58 msgid "the pair ``(x // y, x % y)``" @@ -590,7 +222,7 @@ msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:60 msgid "``pow(x, y)`` ``x ** y``" -msgstr "" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:60 msgid "*x* to the power *y*" @@ -598,23 +230,23 @@ msgstr "*x* у степені *y*" #: ../../src/basics/stdtypes.txt:64 msgid "" -"``x // y`` also referred to as integer division. The resultant value is a" -" whole integer, through the result's type is not necessarily int. The " -"result is always rounded towards minus infinity: ``1 // 2`` is ``0``" +"``x // y`` also referred to as integer division. The resultant value is a " +"whole integer, through the result's type is not necessarily int. The result " +"is always rounded towards minus infinity: ``1 // 2`` is ``0``" msgstr "" "``x // y`` також називають цілим діленням. Результуюче значення є цілим " "числом, через тип результату не обов'язково int. Результат завжди " -"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0`` " +"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" #: ../../src/basics/stdtypes.txt:69 msgid "" -"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an" -" optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive " -"and negative infinity." +"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " +"optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive and " +"negative infinity." msgstr "" "``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " "префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " -"нескінченність. " +"нескінченність." #: ../../src/basics/stdtypes.txt:74 msgid "Code examples" @@ -636,25 +268,24 @@ msgstr "Порівняння цінностей" #: ../../src/basics/stdtypes.txt:106 msgid "" -"Numbers of built-in numeric types can be compared within and across their" -" types (with the restriction that complex numbers do not support order " +"Numbers of built-in numeric types can be compared within and across their " +"types (with the restriction that complex numbers do not support order " "comparison). Within the limits of the types involved, they compare " "mathematically correct without loss of precision." msgstr "" -"Числа вбудованих числових типів можна порівнювати всередині та між типами " -"(з обмеженням, що комплексні числа не підтримують порядок порівняння). У " -"межах залучених типів вони порівняються математично правильно без втрати " -"точності. " +"Числа вбудованих числових типів можна порівнювати всередині та між типами (з " +"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " +"залучених типів вони порівняються математично правильно без втрати точності." #: ../../src/basics/stdtypes.txt:111 msgid "" -"The \"not-a-number\" values ``float(\"NaN\")`` and " -"``decimal.Decimal('NaN')`` are special. Any ordered comparison of a " -"number to a not-a-number value is false." +"The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." +"Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" +"number value is false." msgstr "" -"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` " -"є спеціальними. Будь-яке впорядковане порівняння числа з нечисловим " -"значенням є хибним." +"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " +"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " +"є хибним." #: ../../src/basics/stdtypes.txt:115 msgid "Sequence types" @@ -662,13 +293,13 @@ msgstr "Типи послідовностей" #: ../../src/basics/stdtypes.txt:117 msgid "" -"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*." -" Additional sequence types tailored for processing of binary data and " -"text strings are described in dedicated sections." +"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " +"Additional sequence types tailored for processing of binary data and text " +"strings are described in dedicated sections." msgstr "" "Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " "Додаткові типи послідовностей, призначені для обробки двійкових даних і " -"текстових рядків, описані у інших розділах. " +"текстових рядків, описані у інших розділах." #: ../../src/basics/stdtypes.txt:122 msgid "Lists" @@ -676,11 +307,12 @@ msgstr "Списки" #: ../../src/basics/stdtypes.txt:124 msgid "" -"Lists are mutable sequences, typically used to store collections of " -"items. They may be constructed in several ways:" +"Lists are mutable sequences, typically used to store collections of items. " +"They may be constructed in several ways:" msgstr "" "Списки - це змінні послідовності, які зазвичай використовуються для " -"зберігання колекцій елементів. Вони можуть бути побудовані кількома способами:" +"зберігання колекцій елементів. Вони можуть бути побудовані кількома " +"способами:" #: ../../src/basics/stdtypes.txt:127 msgid "using a pair of square brackets to denote the empty list: ``[]``" @@ -689,18 +321,17 @@ msgstr "" #: ../../src/basics/stdtypes.txt:128 msgid "" -"using square brackets, separating items with commas: ``[a]``, ``[a, b, " -"c]``" +"using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" -"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, " -"``[a, b, c]`` " +"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " +"b, c]``" #: ../../src/basics/stdtypes.txt:129 msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" #: ../../src/basics/stdtypes.txt:130 -msgid "using the type constuctor: ``list()`` or ``list(iterable)``" +msgid "using the type constructor: ``list()`` or ``list(iterable)``" msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" #: ../../src/basics/stdtypes.txt:133 @@ -709,15 +340,15 @@ msgstr "Кортежі" #: ../../src/basics/stdtypes.txt:135 msgid "" -"Tuples are immutable sequences, typically used to store collections of " -"data or for cases where an immutable sequence of data is needed (such as " -"allowing storage in a ``set`` or ``dict`` instances). They may be " -"constructed in a number of ways:" +"Tuples are immutable sequences, typically used to store collections of data " +"or for cases where an immutable sequence of data is needed (such as allowing " +"storage in a ``set`` or ``dict`` instances). They may be constructed in a " +"number of ways:" msgstr "" "Кортежі - це незмінні послідовності, які зазвичай використовуються для " "зберігання колекцій даних або для випадків, коли потрібна незмінна " "послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " -"``dict``). Вони можуть бути конструйовані декількома способами: " +"``dict``). Вони можуть бути конструйовані декількома способами:" #: ../../src/basics/stdtypes.txt:140 msgid "using a pair of parentheses to denote the empty tuple: ``()``" @@ -727,8 +358,8 @@ msgstr "" #: ../../src/basics/stdtypes.txt:141 msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" -"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або " -"``(a, b, c)``" +"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " +"c)``" #: ../../src/basics/stdtypes.txt:142 msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" @@ -744,19 +375,19 @@ msgstr "Загальні операції" #: ../../src/basics/stdtypes.txt:151 msgid "``x in s`` ``x not in s``" -msgstr "" +msgstr "``x in s`` ``x not in s``" #: ../../src/basics/stdtypes.txt:151 msgid "" -"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal" -" to *x*" +"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " +"*x*" msgstr "" -"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* " -"дорівнює *x*" +"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " +"*x*" #: ../../src/basics/stdtypes.txt:154 msgid "``s + t``" -msgstr "" +msgstr "``s + t``" #: ../../src/basics/stdtypes.txt:154 msgid "the concatenation of *s* and *t*" @@ -764,7 +395,7 @@ msgstr "конкатенація s і t" #: ../../src/basics/stdtypes.txt:156 msgid "``s * n``" -msgstr "" +msgstr "``s * n``" #: ../../src/basics/stdtypes.txt:156 msgid "equivalent to adding *s* to itself *n* times" @@ -772,7 +403,7 @@ msgstr "еквівалентно додаванню *s* до себе *n* раз #: ../../src/basics/stdtypes.txt:158 msgid "``s[i]``" -msgstr "" +msgstr "``s[i]``" #: ../../src/basics/stdtypes.txt:158 msgid "*i*-th item of *s*, origin 0" @@ -780,19 +411,19 @@ msgstr "*i*-й елемент *s*, джерело 0" #: ../../src/basics/stdtypes.txt:160 msgid "``s[i:j]`` ``s[i:j:k]``" -msgstr "" +msgstr "``s[i:j]`` ``s[i:j:k]``" #: ../../src/basics/stdtypes.txt:160 msgid "" -"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) " -"may be omitted." +"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " +"be omitted." msgstr "" "фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " -"3) можна опустити. " +"3) можна опустити." #: ../../src/basics/stdtypes.txt:163 msgid "``len(s)``" -msgstr "" +msgstr "``len(s)``" #: ../../src/basics/stdtypes.txt:163 msgid "length of *s*" @@ -800,7 +431,7 @@ msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:165 msgid "``min(s)``" -msgstr "" +msgstr "``min(s)``" #: ../../src/basics/stdtypes.txt:165 msgid "smallest item of *s*" @@ -808,7 +439,7 @@ msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:167 msgid "``max(s)``" -msgstr "" +msgstr "``max(s)``" #: ../../src/basics/stdtypes.txt:167 msgid "largest item of *s*" @@ -816,7 +447,7 @@ msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:169 msgid "``s.count(x)``" -msgstr "" +msgstr "``s.count(x)``" #: ../../src/basics/stdtypes.txt:169 msgid "total number of occurrences of *x* in *s*" @@ -824,59 +455,58 @@ msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:171 msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -msgstr "" +msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" #: ../../src/basics/stdtypes.txt:171 msgid "" -"index of the first occurrence of *x* in *s* (at or after index *i* and " -"before index *j*)" +"index of the first occurrence of *x* in *s* at or after index *i* and before " +"index *j*" msgstr "" -"індекс першого входження *x* у *s* (в або після індексу *i* та перед " -"індексом *j*) " +"індекс першого входження *x* у *s* на або після індексу *i* та перед " +"індексом *j*" #: ../../src/basics/stdtypes.txt:181 msgid "" "Sequences can be compared only within each of their types, with the " -"restriction that ranges do not support order comparison. Equality " -"comparison across these types results in inequality, and ordering " -"comparison across these types raises ``TypeError``." +"restriction that ranges do not support order comparison. Equality comparison " +"across these types results in inequality, and ordering comparison across " +"these types raises ``TypeError``." msgstr "" -"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, " -"що діапазони не підтримують порівняння порядку. Порівняння рівності між " -"цими типами призводить до нерівності, а впорядковане порівняння цих " -"типів викликає ``TypeError``. " +"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " +"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " +"типами призводить до нерівності, а впорядковане порівняння цих типів " +"викликає ``TypeError``." #: ../../src/basics/stdtypes.txt:186 msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " -"equal to themselves. Lexicographical comparison between buit-in " -"collections works as follows:" +"equal to themselves. Lexicographical comparison between built-in collections " +"works as follows:" msgstr "" "Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " "елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " "рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " -"таким чином: " +"таким чином:" #: ../../src/basics/stdtypes.txt:191 msgid "" -"For two collections to compare equal, they must be of the same type, have" -" the same length, and each pair of corresponding elements must compare " -"equal." +"For two collections to compare equal, they must be of the same type, have " +"the same length, and each pair of corresponding elements must compare equal." msgstr "" "Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " "мати однакову довжину, і кожна пара відповідних елементів повинна " -"порівнюватися. " +"порівнюватися." #: ../../src/basics/stdtypes.txt:193 msgid "" "Collections that supports order comparison are ordered the same as their " -"first unequal elements. If corresponding element does not exist, the " -"shorter collection is ordered first." +"first unequal elements. If corresponding element does not exist, the shorter " +"collection is ordered first." msgstr "" -"Колекції, які підтримують порівняння порядку, упорядковуються так само, як " -"і їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " -"впорядковується коротша колекція. " +"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " +"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"впорядковується коротша колекція." #: ../../src/basics/stdtypes.txt:198 msgid "Mutable sequence types" @@ -884,7 +514,7 @@ msgstr "Змінні типи послідовностей" #: ../../src/basics/stdtypes.txt:203 msgid "``s[i] = x``" -msgstr "" +msgstr "``s[i] = x``" #: ../../src/basics/stdtypes.txt:203 msgid "item *i* of *s* is replaced by *x*" @@ -892,7 +522,7 @@ msgstr "елемент *i* з *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:205 msgid "``s[i:j] = t``" -msgstr "" +msgstr "``s[i:j] = t``" #: ../../src/basics/stdtypes.txt:205 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" @@ -900,7 +530,7 @@ msgstr "фрагмент *s* від *i* до *j*, замінений вміст #: ../../src/basics/stdtypes.txt:208 msgid "``del s[i:j]``" -msgstr "" +msgstr "``del s[i:j]``" #: ../../src/basics/stdtypes.txt:208 msgid "same as ``s[i:j] = []``" @@ -908,15 +538,15 @@ msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:210 msgid "``s[i:j:k] = t``" -msgstr "" +msgstr "``s[i:j:k] = t``" #: ../../src/basics/stdtypes.txt:210 -msgid "the elements of *s* are replaced by those of *t*[#]_" -msgstr "елементи *s* замінюються елементами *t*[#]_" +msgid "the elements of *s* are replaced by those of *t* [#]_" +msgstr "елементи *s* замінюються елементами *t* [#]_" #: ../../src/basics/stdtypes.txt:212 msgid "``del s[i:j:k]``" -msgstr "" +msgstr "``del s[i:j:k]``" #: ../../src/basics/stdtypes.txt:212 msgid "removes the elements of ``s[i:j:k]`` from the list" @@ -924,34 +554,34 @@ msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:214 msgid "``s.append(x)``" -msgstr "" +msgstr "``s.append(x)``" #: ../../src/basics/stdtypes.txt:214 msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" msgstr "" -"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]`` " +"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" #: ../../src/basics/stdtypes.txt:217 msgid "``s.clear()``" -msgstr "" +msgstr "``s.clear()``" #: ../../src/basics/stdtypes.txt:217 -msgid "removes all items from *s* (``del s[:]``)[#3.3]_" -msgstr "видаляє всі елементи з *s* (``del s[:]``)[#3.3]_" +msgid "removes all items from *s* (``del s[:]``) [#py33]_" +msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:219 msgid "``s.copy()``" -msgstr "" +msgstr "``s.copy()``" #: ../../src/basics/stdtypes.txt:219 -msgid "creates a shallow copy of *s* (``s[:]``)[#3.3]_" -msgstr "створює поверхневу копію *s* (``s[:]``)[#3.3]_" +msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" +msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:221 msgid "``s.extend(t)`` ``s += t``" -msgstr "" +msgstr "``s.extend(t)`` ``s += t``" #: ../../src/basics/stdtypes.txt:221 msgid "extends *s* with the contents of *t*" @@ -959,7 +589,7 @@ msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:224 msgid "``s.insert(i, x)``" -msgstr "" +msgstr "``s.insert(i, x)``" #: ../../src/basics/stdtypes.txt:224 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" @@ -967,19 +597,19 @@ msgstr "вставляє *x* у *s* за індексом *i*; те саме, щ #: ../../src/basics/stdtypes.txt:227 msgid "``s.pop()``, ``s.pop(i)``" -msgstr "" +msgstr "``s.pop()``, ``s.pop(i)``" #: ../../src/basics/stdtypes.txt:227 msgid "" -"retrieves the item at *i* and also removes it from *s* (if *i* is omitted" -" - use the last one available index)" +"retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " +"use the last one available index)" msgstr "" "отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " "пропущено - використовуйте останній доступний індекс)" #: ../../src/basics/stdtypes.txt:230 msgid "``s.remove(x)``" -msgstr "" +msgstr "``s.remove(x)``" #: ../../src/basics/stdtypes.txt:230 msgid "remove the first item that is equal to *x* from *s*" @@ -987,7 +617,7 @@ msgstr "видалити перший елемент, який дорівнює #: ../../src/basics/stdtypes.txt:232 msgid "``s.reverse()``" -msgstr "" +msgstr "``s.reverse()``" #: ../../src/basics/stdtypes.txt:232 msgid "reverses the items of *s* in place" @@ -1015,15 +645,15 @@ msgid "" "additional methods." msgstr "" "Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " -"методами. " +"методами." #: ../../src/basics/stdtypes.txt:289 msgid "" -"Strings compare lexicographically using the numerical Unicode code points" -" of their characters." +"Strings compare lexicographically using the numerical Unicode code points of " +"their characters." msgstr "" "Рядки порівнюються лексикографічно з використанням числових кодових точок " -"Unicode своїх символів. " +"Unicode своїх символів." #: ../../src/basics/stdtypes.txt:293 msgid "Set types" @@ -1032,16 +662,16 @@ msgstr "Типи сетів" #: ../../src/basics/stdtypes.txt:298 msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " -"across their types. They define order comparison operators to mean subset" -" and superset tests. Those relations do not define total ordering (e.g. " -"two sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one " -"another, nor supersets of one another)." +"across their types. They define order comparison operators to mean subset " +"and superset tests. Those relations do not define total ordering (e.g. two " +"sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " +"nor supersets of one another)." msgstr "" "Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " "між типами. Вони визначають оператори порівняння порядку, щоб проходити " "тести підмножини та надмножини. Ці відношення не визначають загального " "порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " -"підмножини одного іншого, ані надмножини один одного). " +"підмножини одного іншого, ані надмножини один одного)." #: ../../src/basics/stdtypes.txt:305 msgid "Mapping type" @@ -1051,25 +681,24 @@ msgstr "Тип відображення" msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " -"*dictionary*. In few words mappings are collections of keys and their " -"values." +"*dictionary*. In few words mappings are collections of keys and their values." msgstr "" "Об’єкт зіставлення зіставляє хешовані значення з довільними об’єктами. " "Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " "відображення, *dictionary*. Якщо кількома словами, то відображення - це " -"набори ключів та їхніх значень. " +"набори ключів та їхніх значень." #: ../../src/basics/stdtypes.txt:311 msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " -"hashable may not be used as keys. Values that compare equal (such as " -"``1``, ``1.0`` and ``True``) can be used interchangeably to index the " -"same dictionary entry." +"hashable may not be used as keys. Values that compare equal (such as ``1``, " +"``1.0`` and ``True``) can be used interchangeably to index the same " +"dictionary entry." msgstr "" -"Ключі словника - це майже довільні значення. Значення, які не хешуються, " -"не можуть бути використані як ключі. Значення, які порівнюються (такі як " -"``1``, ``1.0`` і ``True``), можна використовувати як взаємозамінні для " -"індексування тієї самої словникової статті. " +"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " +"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " +"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " +"тієї самої словникової статті." #: ../../src/basics/stdtypes.txt:315 msgid "Dictionaries can be created by several means:" @@ -1082,14 +711,14 @@ msgstr "Використовуйте дужки для позначення по #: ../../src/basics/stdtypes.txt:318 msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}" +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" msgstr "" "Використовуйте розділений комами список пар ``key: value`` з дужками: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34} " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" #: ../../src/basics/stdtypes.txt:320 -msgid "Use a dict comprehension: `{x: x ** 2 for x in range(10)}``" -msgstr "Використовуючи генератори списків: `{x: x 2 for x in range(10)}``" +msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" +msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" #: ../../src/basics/stdtypes.txt:321 msgid "" @@ -1097,15 +726,15 @@ msgid "" "``dict(key=100)``" msgstr "" "Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " -"``dict(key=100)`` " +"``dict(key=100)``" #: ../../src/basics/stdtypes.txt:327 msgid "" -"Instances of ``dict`` compare equal if and only if they have equal key-" -"value pairs." +"Instances of ``dict`` compare equal if and only if they have equal key-value " +"pairs." msgstr "" -"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони " -"мають однакові пари ключ-значення. " +"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " +"однакові пари ключ-значення." #: ../../src/basics/stdtypes.txt:330 msgid "Order comparisons raise ``TypeError``." @@ -1117,9 +746,9 @@ msgstr "Синтаксис Python" #: ../../src/basics/syntax.txt:5 msgid "" -"As a natural language like English or Ukrainian has its own rules to " -"write down something, programming languages do. This makes them " -"programming **languages**." +"As a natural language like English or Ukrainian has its own rules to write " +"down something, programming languages do. This makes them programming " +"**languages**." msgstr "" "Оскільки природна мова, як-от англійська чи українська, має власні правила " "запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " @@ -1127,11 +756,10 @@ msgstr "" #: ../../src/basics/syntax.txt:9 msgid "" -"A programming language syntax is the set of rules and principles that " -"govern how code is written and structured in a given programming " -"language. Syntax encompasses the rules for writing statements, " -"expressions, variables, data types, control structures, and other " -"constructs that make up the language." +"A programming language syntax is the set of rules and principles that govern " +"how code is written and structured in a given programming language. Syntax " +"encompasses the rules for writing statements, expressions, variables, data " +"types, control structures, and other constructs that make up the language." msgstr "" "Синтаксис мови програмування - це набір правил і принципів, які регулюють " "написання та структурування коду даною мовою програмування. Синтаксис " @@ -1141,54 +769,54 @@ msgstr "" #: ../../src/basics/syntax.txt:14 msgid "" "The syntax of a programming language defines how code is organized and " -"interpreted by a compiler or interpreter. It defines the rules for " -"writing valid statements and expressions that can be understood and " -"executed by the language's runtime system." +"interpreted by a compiler or interpreter. It defines the rules for writing " +"valid statements and expressions that can be understood and executed by the " +"language's runtime system." msgstr "" "Синтаксис мови програмування визначає, як код організовується та " "інтерпретується компілятором або інтерпретатором. Він визначає правила " "написання дійсних операторів і виразів, які можуть бути зрозумілі та " -"виконані системою виконання мови. " +"виконані системою виконання мови." #: ../../src/basics/syntax.txt:19 msgid "" "A programming language's syntax is designed to be both readable and " -"expressive, allowing programmers to write code that is easy to understand" -" and modify. Syntax often influences the style and structure of code, as " -"well as its maintainability and performance." +"expressive, allowing programmers to write code that is easy to understand " +"and modify. Syntax often influences the style and structure of code, as well " +"as its maintainability and performance." msgstr "" -"Синтаксис мови програмування розроблено таким чином, щоб він був " -"читабельним і виразним, дозволяючи програмістам писати код, який легко " -"зрозуміти та змінювати. Синтаксис часто впливає на стиль і структуру коду, " -"а також на його зручність обслуговування та продуктивність. " +"Синтаксис мови програмування розроблено таким чином, щоб він був читабельним " +"і виразним, дозволяючи програмістам писати код, який легко зрозуміти та " +"змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " +"його зручність обслуговування та продуктивність." #: ../../src/basics/syntax.txt:24 msgid "" -"Different programming languages have different syntax, with some " -"languages being more concise and expressive than others. While syntax is " -"an important aspect of a programming language, it is only one of several " -"factors that determine its ease of use, flexibility, and suitability for " -"different programming tasks." +"Different programming languages have different syntax, with some languages " +"being more concise and expressive than others. While syntax is an important " +"aspect of a programming language, it is only one of several factors that " +"determine its ease of use, flexibility, and suitability for different " +"programming tasks." msgstr "" "Різні мови програмування мають різний синтаксис, при цьому деякі мови є " "більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " "аспектом мови програмування, він є лише одним із кількох факторів, які " "визначають її легкість у використанні, гнучкість і придатність для різних " -"завдань програмування. " +"завдань програмування." #: ../../src/basics/syntax.txt:30 msgid "" -"In the case of Python, the language's syntax defines how code is written " -"and structured in a way that is consistent, readable, and easy to " -"understand. A general overview is provided below, no need to dive deep in" -" this now. All of the following is to be discussed during the course. So," -" some of the key aspects of Python's syntax include:" +"In the case of Python, the language's syntax defines how code is written and " +"structured in a way that is consistent, readable, and easy to understand. A " +"general overview is provided below, no need to dive deep in this now. All of " +"the following is to be discussed during the course. So, some of the key " +"aspects of Python's syntax include:" msgstr "" "У випадку Python синтаксис мови визначає, як код буде написаний і " "структурований таким чином, щоб він був послідовним, читабельним і легким " "для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " "занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " -"курсу. Отже, деякі з ключових аспектів синтаксису Python включають: " +"курсу. Отже, деякі з ключових аспектів синтаксису Python включають:" #: ../../src/basics/syntax.txt msgid "Indentation" @@ -1196,13 +824,13 @@ msgstr "Відступ" #: ../../src/basics/syntax.txt:37 msgid "" -"Python uses whitespace, specifically indentation, to delimit blocks of " -"code, such as loops, conditionals, and functions. This means that the " -"indentation level of a line determines which block of code it belongs to." +"Python uses whitespace, specifically indentation, to delimit blocks of code, " +"such as loops, conditionals, and functions. This means that the indentation " +"level of a line determines which block of code it belongs to." msgstr "" "Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " "таких як цикли, умови та функції. Це означає, що рівень відступу рядка " -"визначає, до якого блоку коду він належить. " +"визначає, до якого блоку коду він належить." #: ../../src/basics/syntax.txt msgid "Statement structure" @@ -1218,7 +846,7 @@ msgstr "" "Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " "вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " "поміститися в один рядок, його можна продовжити в кількох рядках, " -"використовуючи зворотні похилі риски. " +"використовуючи зворотні похилі риски." #: ../../src/basics/syntax.txt ../../src/basics/variables.txt:3 msgid "Variables" @@ -1226,10 +854,10 @@ msgstr "Змінні" #: ../../src/basics/syntax.txt:49 msgid "" -"In Python, variables are created automatically when a value is assigned " -"to them, and their type is inferred from the value. Variables can be " -"assigned values of different types, including integers, floats, strings, " -"and more complex data structures like lists and dictionaries." +"In Python, variables are created automatically when a value is assigned to " +"them, and their type is inferred from the value. Variables can be assigned " +"values of different types, including integers, floats, strings, and more " +"complex data structures like lists and dictionaries." msgstr "" "У Python змінні створюються автоматично, якщо їм присвоюється значення, і " "їхній тип визначається на основі значення. Змінним можна присвоювати " @@ -1243,14 +871,14 @@ msgstr "Оператори" #: ../../src/basics/syntax.txt:55 msgid "" "Python supports a wide range of operators for performing arithmetic, " -"comparison, and logical operations. These include arithmetic operators " -"like ``+``, ``-``, ``*``, and ``/``, as well as comparison operators like" -" ``<``, ``>``, ``==``, and ``!=``." +"comparison, and logical operations. These include arithmetic operators like " +"``+``, ``-``, ``*``, and ``/``, as well as comparison operators like ``<``, " +"``>``, ``==``, and ``!=``." msgstr "" "Python підтримує широкий спектр операторів для виконання арифметичних, " "порівнянь і логічних операцій. До них належать арифметичні оператори, такі " -"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як ``<`` " -", ``>``, ``==`` і ``!=``. " +"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як " +"``<`` , ``>``, ``==`` і ``!=``." #: ../../src/basics/syntax.txt msgid "Control flow" @@ -1258,10 +886,9 @@ msgstr "Контроль потоку" #: ../../src/basics/syntax.txt:61 msgid "" -"Python provides control flow statements like if, else, elif, for, and " -"while to control the flow of execution in a program. These statements are" -" used to make decisions, repeat code, or perform actions based on " -"conditions." +"Python provides control flow statements like if, else, elif, for, and while " +"to control the flow of execution in a program. These statements are used to " +"make decisions, repeat code, or perform actions based on conditions." msgstr "" "Python надає оператори потоку керування, як-от if, else, elif, for та while, " "для керування потоком виконання в програмі. Ці оператори використовуються " @@ -1271,12 +898,12 @@ msgstr "" #: ../../src/basics/syntax.txt:67 msgid "" "In Python, functions are defined using the def keyword and can take " -"arguments and return values. The body of a function is defined using a " -"block of indented code." +"arguments and return values. The body of a function is defined using a block " +"of indented code." msgstr "" "У Python функції визначаються за допомогою ключового слова def і можуть " "отримувати аргументи та повертати значення. Тіло функції визначається за " -"допомогою блоку коду з відступами. " +"допомогою блоку коду з відступами." #: ../../src/basics/syntax.txt msgid "Modules" @@ -1284,9 +911,9 @@ msgstr "Модулі" #: ../../src/basics/syntax.txt:72 msgid "" -"Python has a large library of modules that provide pre-written code for a" -" variety of tasks. Modules can be imported into a program using the " -"import statement." +"Python has a large library of modules that provide pre-written code for a " +"variety of tasks. Modules can be imported into a program using the import " +"statement." msgstr "" "Python має велику бібліотеку модулів, які містять попередньо написаний код " "для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " @@ -1298,13 +925,13 @@ msgstr "Обробка винятків" #: ../../src/basics/syntax.txt:77 msgid "" -"Python provides a way to handle errors and exceptions in a program using " -"the try, except, else, and finally keywords. These statements allow a " -"program to gracefully recover from errors and continue executing." +"Python provides a way to handle errors and exceptions in a program using the " +"try, except, else, and finally keywords. These statements allow a program to " +"gracefully recover from errors and continue executing." msgstr "" "Python надає спосіб обробки помилок і винятків у програмі за допомогою " "ключових слів try, except, else і finally. Ці оператори дозволяють програмі " -"плавно відновлюватися після помилок і продовжувати виконання. " +"плавно відновлюватися після помилок і продовжувати виконання." #: ../../src/basics/syntax.txt:81 msgid "In few words:" @@ -1318,27 +945,27 @@ msgstr "Приклад сценарію Input/Output" msgid "" "The code snippet above demonstrates some basics abilities of Python to " "gather data from the user, process it and print out back. Note the words " -"starting with a **#** (hash) symbol. This is a comment. Any sequence of " +"starting with a # (hash) symbol. This is a comment. Any sequence of " "characters after the hash and till the line end are considered to be a " -"comment. These are for those people, who see the code and they are " -"ignored by the interpreter." +"comment. These are for those people, who see the code and they are ignored " +"by the interpreter." msgstr "" "Наведений вище фрагмент коду демонструє деякі основні можливості Python " -"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть " -"увагу на слова, що починаються символом **#**(решітка). Це коментар. " -"Будь-яка послідовність символів після хеша і до кінця рядка вважається " -"коментарем. Це необхідно, щоб люди які бачать код могли його зрозуміти, при " -"цьому інтерпретатор їх ігнорує. " +"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть увагу " +"на слова, що починаються символом #(решітка). Це коментар. Будь-яка " +"послідовність символів після хеша і до кінця рядка вважається коментарем. Це " +"необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " +"інтерпретатор їх ігнорує." #: ../../src/basics/syntax.txt:108 msgid "" "On the other hand each individual line is the instruction for the " -"interpreter to perform some action, like gather inputs, do math, store " -"data in memory etc." +"interpreter to perform some action, like gather inputs, do math, store data " +"in memory etc." msgstr "" "З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " "певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " -"збереження даних у пам'яті тощо. " +"збереження даних у пам'яті тощо." #: ../../src/basics/testing.txt:3 msgid "Testing" @@ -1352,42 +979,42 @@ msgid "" msgstr "" "В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " "зберігати значення (дані). Значення, яке зберігається у змінній, може бути " -"змінено або доступне програмою під час її виконання. " +"змінено або доступне програмою під час її виконання." #: ../../src/basics/variables.txt:9 msgid "" "In Python, variables are created dynamically once a value is assigned to " -"them. This makes Python a dynamically typed language, which means that " -"the data type of a variable is inferred from the value assigned to it. " -"So, you do not need to declare a variable before using it, as in " -"statically typed languages." +"them. This makes Python a dynamically typed language, which means that the " +"data type of a variable is inferred from the value assigned to it. So, you " +"do not need to declare a variable before using it, as in statically typed " +"languages." msgstr "" "У Python змінні створюються динамічно після присвоєння їм значення. Це " "робить Python динамічно типізованою мовою, а це означає, що тип даних " "змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " -"оголошувати змінну перед її використанням, як у статично типізованих мовах. " +"оголошувати змінну перед її використанням, як у статично типізованих мовах." #: ../../src/basics/variables.txt:14 msgid "" -"The ability to create variables dynamically and infer their data type " -"makes Python code more concise and easier to read. However, it also " -"requires careful attention to variable naming and assignment to avoid " -"unexpected behavior." +"The ability to create variables dynamically and infer their data type makes " +"Python code more concise and easier to read. However, it also requires " +"careful attention to variable naming and assignment to avoid unexpected " +"behavior." msgstr "" "Можливість динамічно створювати змінні та виводити їхні типи даних робить " "код Python більш лаконічним і легшим для читання. Однак це також вимагає " "пильної уваги до іменування та призначення змінних, щоб уникнути " -"неочікуваної поведінки. " +"неочікуваної поведінки." #: ../../src/basics/variables.txt:18 msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " -"variable, the portion on the left of the operator is a *variable name* " -"and the portion on the right is a *value* to assign to a variable." +"variable, the portion on the left of the operator is a *variable name* and " +"the portion on the right is a *value* to assign to a variable." msgstr "" "У Python ``=`` (оператор присвоєння) використовується для встановлення " "значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " -"частина праворуч - це значення, яке призначається для неї. " +"частина праворуч - це значення, яке призначається для неї." #: ../../src/basics/variables.txt:22 msgid "Variable assignment in Python" @@ -1403,10 +1030,10 @@ msgstr "Присвоєння назви" #: ../../src/basics/variables.txt:39 msgid "" -"In Python there are several rules that describe how to name your " -"variables. Some of these are requirements and cannot be ignored, others " -"are rather recommended than required and can be omitted. For now note, " -"that a variable name **cannot**:" +"In Python there are several rules that describe how to name your variables. " +"Some of these are requirements and cannot be ignored, others are rather " +"recommended than required and can be omitted. For now note, that a variable " +"name **cannot**:" msgstr "" "У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " "них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " @@ -1435,11 +1062,329 @@ msgstr "Також ось деякі загальні рекомендації #: ../../src/basics/variables.txt:51 msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" -"не використовуйте вбудовані функції як назву змінної (наприклад, " -"``len = 42``)" +"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " +"42``)" #: ../../src/basics/variables.txt:52 msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" -"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``) " - +"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" + +#~ msgid "Data Types" +#~ msgstr "Типи Даних" + +#~ msgid "" +#~ "Data may represent different things and require various operations " +#~ "available. In programming data types is an important concept. For example " +#~ "**1984** may be a number (``1984``), a text (``\"1984\"``) or event a " +#~ "date. The data type describes the operations, that are allowed for the " +#~ "data, like additions for numbers or concatenation for text (e.g. ``1 + 2 -" +#~ "> 3``, ``\"1\" + \"3\" -> \"13\"``)." +#~ msgstr "" +#~ "Дані можуть представляти різні речі та вимагати різноманітних " +#~ "доступнихоперацій. У програмуванні типи даних є важливою концепцією. " +#~ "Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984\"`` ) " +#~ "або подією чи датою. Тип даних описує можливі операції, дозволені для " +#~ "даних, як-от додавання чисел або конкатенація для тексту (наприклад, ``1 " +#~ "+ 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." + +#~ msgid "" +#~ "Python uses dynamic typing. This means as a developer you should not " +#~ "declare a variable with its data type - the interpreter will do this for " +#~ "you. Other popular language using dynamic typing are JavaScript and PHP. " +#~ "Setting variables in Python is as easy as:" +#~ msgstr "" +#~ "Python використовує динамічну типізацію. Це означає, що ви, як розробник, " +#~ "не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " +#~ "за вас. Іншими популярними мовами, які використовують динамічну " +#~ "типізацію, є JavaScript і PHP. Налаштування змінних у Python доволі " +#~ "просто, як: " + +#~ msgid "Built-In Data Types" +#~ msgstr "Вбудовані типи даних" + +#~ msgid "Python has the following data types built-in:" +#~ msgstr "Python має такі вбудовані типи даних:" + +#~ msgid "Integers (``int``)" +#~ msgstr "Цілі числа (``int``)" + +#~ msgid "Floating-point numbers (``float``)" +#~ msgstr "Числа з плаваючою крапкою (``float``)" + +#~ msgid "Complex numbers (``complex``)" +#~ msgstr "Комплексні числа (``complex``)" + +#~ msgid "Booleans (``bool``)" +#~ msgstr "Логічні значення (``bool``)" + +#~ msgid "Strings (``str``)" +#~ msgstr "Рядки (``str``)" + +#~ msgid "Bytes (``bytes``)" +#~ msgstr "Байти (``bytes``)" + +#~ msgid "Byte arrays (``bytearray``)" +#~ msgstr "Масиви байтів (``bytearray``)" + +#~ msgid "Lists (``list``)" +#~ msgstr "Списки (``list``)" + +#~ msgid "Tuples (``tuple``)" +#~ msgstr "Кортежі (``tuple``)" + +#~ msgid "Sets (``set``)" +#~ msgstr "Cети (``set``)" + +#~ msgid "Frozen sets (``frozenset``)" +#~ msgstr "Заморожені сети (``frozenset``)" + +#~ msgid "Dictionaries (``dict``)" +#~ msgstr "Словники (``dict``)" + +#~ msgid "None (``NoneType``)" +#~ msgstr "Жодного (``NoneType``)" + +#~ msgid "" +#~ "Any one can use them without additional imports or packages installations." +#~ msgstr "" +#~ "Будь-хто може використовувати їх без додаткового імпорту чи встановлення " +#~ "пакетів. " + +#~ msgid "Text" +#~ msgstr "Текстові дані" + +#~ msgid "" +#~ "Text data are stored as strings (``str`` data type) in Python. Any " +#~ "sequence of letters, digits, punctuation marks and whitespace characters " +#~ "enclosed with quotes is considered to be a string literal. Both single " +#~ "quotes (``'``) and double quotes (``\"``) can be used interchangeably to " +#~ "create a string in Python." +#~ msgstr "" +#~ "Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-" +#~ "яка послідовність літер, цифр, знаків пунктуації та пробілів, взята в " +#~ "лапки, вважається рядковим літералом. Обидві одинарні лапки (``'``) або " +#~ "подвійні лапки (``\"``) можна взаємозамінно використовувати для створення " +#~ "рядків." + +#~ msgid "Escaping" +#~ msgstr "Екранування" + +#~ msgid "" +#~ "In programming this is a process of using a special character to indicate " +#~ "that the following character(s) should be treated differently from their " +#~ "literal meaning. The common usage is to include a special character(s) " +#~ "within strings. A **backslash** character is used to *escape* the " +#~ "following one." +#~ msgstr "" +#~ "У програмуванні це процес використання спеціального символу, щоб вказати, " +#~ "що наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне " +#~ "значення. Загальне використання полягає в тому, щоб включити " +#~ "спеціальний(і) символ(и) в рядки. Символ **backslash** використовується " +#~ "для екранування наступного. " + +#~ msgid "Example of Escaping in Python" +#~ msgstr "Приклади Екранування в Python" + +#~ msgid "Single quotes or double quotes" +#~ msgstr "Одинарні або подвійні лапки" + +#~ msgid "" +#~ "Don't care. Use any quote mark you like. A *string* is a sequence of " +#~ "characters after the opening quote and till the closing one. You may use " +#~ "double quotes in case a single quote is a part of the text (e.g. ``\"It's " +#~ "a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship was " +#~ "a \"Billy of Tea\"'``). It's a good practice not to mess single and " +#~ "double quotes within one project. Just keep using a chosen one character " +#~ "for all strings." +#~ msgstr "" +#~ "Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " +#~ "після початкової лапки та до кінцевої. Ви можете використовувати подвійні " +#~ "лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " +#~ "Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of " +#~ "Tea\"'``). Рекомендується не плутати одинарні та подвійні лапки в одному " +#~ "проекті. Просто продовжуйте використовувати один вибраний символ для всіх " +#~ "рядків. " + +#~ msgid "Multiline strings" +#~ msgstr "Багатострічкові рядки" + +#~ msgid "" +#~ "You can assign a multiline string by using triple quotes: Both single " +#~ "quote and double quote characters are available." +#~ msgstr "" +#~ "Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: " +#~ "в середині них доступні як одинарні, так і подвійні лапки. " + +#~ msgid "" +#~ "The same syntax is used to create docstring, which are a special case of " +#~ "string usage. We will look on these in the future." +#~ msgstr "" +#~ "Такий самий синтаксис використовується для створення рядка документації, " +#~ "який є окремим випадком використання рядка. Ми розглянемо це в " +#~ "майбутньому. " + +#~ msgid "This subsection describes only the most common operations." +#~ msgstr "У цьому розділі описано лише найпоширеніші операції. " + +#~ msgid "Concatenation" +#~ msgstr "Конкатинація" + +#~ msgid "" +#~ "The ``+`` operator is used to concatenate (join) two or more strings." +#~ msgstr "" +#~ "Оператор ``+`` використовується для конкатенації (об'єднання) двох або " +#~ "більше рядків. " + +#~ msgid "" +#~ "On the other hand the ``join`` method concatenates a collection of " +#~ "strings, which may be more efficient than using ``+``." +#~ msgstr "" +#~ "З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " +#~ "ефективнішим, ніж використання ``+``. " + +#~ msgid "Repetition" +#~ msgstr "Повторення" + +#~ msgid "" +#~ "The ``*`` operator is used to repeat a string a specified number of " +#~ "times. Only multipliers of the ``int`` type are allowed." +#~ msgstr "" +#~ "Оператор ``*`` використовується для повторення рядка вказану кількість " +#~ "разів. Дозволені операції лише з множниками типу ``int``. " + +#~ msgid "Length" +#~ msgstr "Довжина" + +#~ msgid "The ``len`` function is used to find the length of a string." +#~ msgstr "Функція ``len`` використовується для визначення довжини рядка." + +#~ msgid "Case conversion" +#~ msgstr "Перетворення регістру" + +#~ msgid "" +#~ "The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " +#~ "actions on case." +#~ msgstr "" +#~ "Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " +#~ "зміною регістра. " + +#~ msgid "``lower`` creates a new string with all lower-case characters." +#~ msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." + +#~ msgid "``upper`` creates a new string with all upper-case characters." +#~ msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." + +#~ msgid "" +#~ "``capitalize`` creates a new string with the upper-case 1st character." +#~ msgstr "" +#~ "``capitalize`` створює новий рядок із першим символом у верхньому " +#~ "регістрі. " + +#~ msgid "``title`` will make all characters after whitespace upper case." +#~ msgstr "``title`` зробить усі символи після пробілів верхнім регістром." + +#~ msgid "Stripping" +#~ msgstr "Зачистка" + +#~ msgid "" +#~ "The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " +#~ "leading and/or trailing whitespace characters." +#~ msgstr "" +#~ "Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " +#~ "початкових і/або кінцевих пробільних символів. " + +#~ msgid "Strings are subscriptable" +#~ msgstr "Рядки можна підписувати" + +#~ msgid "``str`` is not the only one subscriptable data type in Python." +#~ msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." + +#~ msgid "" +#~ "This means you can access individual characters or slices within a string " +#~ "using indexes. A string is a *sequence* of characters and each character " +#~ "within a string has its own position - an *index*. Indexing starts at 0, " +#~ "so the first character in a string is at index 0, the second one is at " +#~ "index 1, and so on. Negative indexing is also possible, with -1 " +#~ "representing the last character in a string, -2 representing the second-" +#~ "to-last character, and so on. Use square brackets (``[]``) to access the " +#~ "index." +#~ msgstr "" +#~ "Це означає, що ви можете отримати доступ до окремих символів або " +#~ "фрагментів у рядку за допомогою індексів. Рядок — це послідовність " +#~ "символів, і кожен символ у рядку має власну позицію — індекс. Індексація " +#~ "починається з 0, отже, перший символ у рядку має індекс 0, другий - " +#~ "індекс 1 і так далі. Також можливе від'ємне індексування, коли -1 " +#~ "представляє останній символ у рядку, а -2 представляє передостанній " +#~ "символ і так далі. Використовуйте квадратні дужки (``[]``), щоб отримати " +#~ "доступ до індексу. " + +#~ msgid "" +#~ "You can also *slice* strings, this means to get a subsequence of " +#~ "characters. The slice syntax consists of 3 digits:" +#~ msgstr "" +#~ "Ви також можете *розрізати* рядки, тобто отримати підпослідовність " +#~ "символів. Синтаксис фрагмента складається з 3 цифр: " + +#~ msgid "" +#~ "the first one represent the index to start (inclusive), defaults to 0" +#~ msgstr "" +#~ "Перший представляє початковий індекс (включно), за замовчанням дорівнює " +#~ "0. " + +#~ msgid "" +#~ "the second one represent the index to stop (non-inclusive), defaults to " +#~ "the length of the sequence" +#~ msgstr "" +#~ "Другий представляє індекс для зупинки (не включно), за замовчуванням " +#~ "довжина послідовності. " + +#~ msgid "the third one represents a step, defaults to 1" +#~ msgstr "Третій представляє крок, за замовчуванням 1." + +#~ msgid "" +#~ "These numbers are separated within colon (``:``) and enclosed within " +#~ "square brackets. Any slice digit may be omitted." +#~ msgstr "" +#~ "Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " +#~ "цифра зрізу може бути упущена. " + +#~ msgid "Sequence slicing" +#~ msgstr "Нарізка послідовності" + +#~ msgid "Strings are iterable" +#~ msgstr "Рядки можна повторювати" + +#~ msgid "" +#~ "Since strings are arrays, we can loop through the characters in a string " +#~ "with a ``for`` loop:" +#~ msgstr "" +#~ "Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " +#~ "допомогою циклу ``for``: " + +#~ msgid "Strings are immutable" +#~ msgstr "Рядки незмінні" + +#~ msgid "" +#~ "This means, you cannot change an individual character within a string." +#~ msgstr "Це означає, що ви не можете змінити окремий символ у рядку." + +#~ msgid "Integers" +#~ msgstr "Цілі числа" + +#~ msgid "" +#~ "``int``, or integer, is a whole number, positive or negative, without " +#~ "decimals." +#~ msgstr "" +#~ "``int``, тобто ціле число, може бути додатнім або від'ємним, без " +#~ "десяткових знаків. " + +#~ msgid "Floats" +#~ msgstr "Числа з плаваючою комою" + +#~ msgid "" +#~ "``float``, or floating point number, is a number, positive or negative, " +#~ "containing one or more decimals." +#~ msgstr "" +#~ "``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, " +#~ "що містить один або більше десяткових знаків. " diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/ua/LC_MESSAGES/oop.po index 3b7ceaf55..44383228d 100644 --- a/src/_locales/ua/LC_MESSAGES/oop.po +++ b/src/_locales/ua/LC_MESSAGES/oop.po @@ -3,20 +3,22 @@ # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-21 17:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-04-08 19:28+0300\n" +"PO-Revision-Date: 2023-04-08 19:29+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../src/oop/index.txt:3 msgid "Object-Oriented Programming" @@ -24,15 +26,13 @@ msgstr "Об'єктно-орієнтоване програмування" #: ../../src/oop/index.txt:5 msgid "" -"Object-oriented programming (OOP) is one of the biggest and most " -"important subjects in all of programming. It is a method of structuring a" -" program by bundling related properties and behavior into individual " -"objects." +"Object-oriented programming (OOP) is one of the biggest and most important " +"subjects in all of programming. It is a method of structuring a program by " +"bundling related properties and behavior into individual objects." msgstr "" "Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " -"найважливіших тем у всьому програмуванні. Це метод структурування" -"програми шляхом об'єднання пов'язаних властивостей і поведінки в окремі " -"об'єкти." +"найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " +"шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." #: ../../src/oop/inheritance.txt:3 msgid "Inheritance" @@ -45,20 +45,20 @@ msgstr "Класи та Об'єкти" #: ../../src/oop/intro.txt:5 msgid "" "Conceptually, objects are like the components of a system. Think of a " -"program as a factory assembly line of sorts. At each step of the assembly" -" line a system component processes some material, ultimately transforming" -" raw material into a finished product." +"program as a factory assembly line of sorts. At each step of the assembly " +"line a system component processes some material, ultimately transforming raw " +"material into a finished product." msgstr "" "Концептуально об'єкти схожі на компоненти системи. Думайте про програму як " -"про заводську конвеєрну лінію. На кожному кроці складання системний компонент" -" обробляє певний матеріал, остаточно перетворюючи сировину на закінчений " -"продукт." +"про заводську конвеєрну лінію. На кожному кроці складання системний " +"компонент обробляє певний матеріал, остаточно перетворюючи сировину на " +"закінчений продукт." #: ../../src/oop/intro.txt:10 msgid "" -"An object contains data, like the raw or preprocessed materials at each " -"step on an assembly line, and behavior, like the action each assembly " -"line component performs." +"An object contains data, like the raw or preprocessed materials at each step " +"on an assembly line, and behavior, like the action each assembly line " +"component performs." msgstr "" "Об'єкт містить дані, як-от необроблені або попередньо оброблені матеріали на " "кожному кроці складальної лінії, і поведінку, як-от дію, яку виконує кожен " @@ -70,24 +70,23 @@ msgstr "Парадигма Об'єктно-Орієнтованого Прогр #: ../../src/oop/intro.txt:17 msgid "" -"Object-oriented programming is a programming paradigm that provides a " -"means of structuring programs so that properties and behaviors are " -"bundled together into individual **objects**." +"Object-oriented programming is a programming paradigm that provides a means " +"of structuring programs so that properties and behaviors are bundled " +"together into individual **objects**." msgstr "" -"Об'єктно-орієнтоване програмування - це парадигма програмування, яка " -"надає засоби структурування програм так, що властивості та поведінка " -"об'єднуються в окремі **об'єкти**." +"Об'єктно-орієнтоване програмування - це парадигма програмування, яка надає " +"засоби структурування програм так, що властивості та поведінка об'єднуються " +"в окремі **об'єкти**." #: ../../src/oop/intro.txt:21 msgid "" -"For instance, an object could represent a person with **properties** like" -" a name, age, and address and **behaviors** such as walking, talking, " -"running. Or it could represent an email with properties like a recipient " -"list, subject, and body and behaviors like adding attachments and " -"sending." +"For instance, an object could represent a person with **properties** like a " +"name, age, and address and **behaviors** such as walking, talking, running. " +"Or it could represent an email with properties like a recipient list, " +"subject, and body and behaviors like adding attachments and sending." msgstr "" -"Наприклад, об'єкт може представляти особу з такими **властивостями**, як" -" ім'я, вік та адреса, а також такими **поведінками**, як ходьба, розмова, " +"Наприклад, об'єкт може представляти особу з такими **властивостями**, як " +"ім'я, вік та адреса, а також такими **поведінками**, як ходьба, розмова, " "біг. Або він може представляти електронний лист із такими властивостями, як " "список одержувачів, тема , а також тіло та поведінку, як-от додавання " "вкладень і надсилання." @@ -95,16 +94,16 @@ msgstr "" #: ../../src/oop/intro.txt:26 msgid "" "Put another way, object-oriented programming is an approach for modeling " -"concrete, real-world things, like cars, as well as relations between " -"things, like companies and employees, students and teachers, and so on. " -"OOP models real-world entities as software objects that have some data " -"associated with them and can perform certain functions." +"concrete, real-world things, like cars, as well as relations between things, " +"like companies and employees, students and teachers, and so on. OOP models " +"real-world entities as software objects that have some data associated with " +"them and can perform certain functions." msgstr "" "Інакше кажучи, об'єктно-орієнтоване програмування - це підхід до моделювання " "конкретних речей реального світу, таких як автомобілі, а також відносин між " -"речами, такими як компанії та працівники, студенти та викладачі тощо. " -"ООП моделює сутності реального світу як програмні об'єкти, які " -"мають деякі дані, пов'язані з ними та можуть виконувати певні функції." +"речами, такими як компанії та працівники, студенти та викладачі тощо. ООП " +"моделює сутності реального світу як програмні об'єкти, які мають деякі дані, " +"пов'язані з ними та можуть виконувати певні функції." #: ../../src/oop/intro.txt:34 msgid "Object-Oriented Programming Concepts" @@ -112,10 +111,9 @@ msgstr "Концепції Об'єктно-Орієнтованого Прогр #: ../../src/oop/intro.txt:36 msgid "" -"So far, we can discuss the major concepts within the OOP paradigm. And " -"they are:" -msgstr "" -"Поки що ми можемо обговорити основні концепції парадигми ООП. І вони:" +"So far, we can discuss the major concepts within the OOP paradigm. And they " +"are:" +msgstr "Поки що ми можемо обговорити основні концепції парадигми ООП. І вони:" #: ../../src/oop/intro.txt msgid "**encapsulation**" @@ -123,20 +121,21 @@ msgstr "**інкапсуляція**" #: ../../src/oop/intro.txt:41 msgid "" -"In OOP refers to the bundling of data with methods that operate that " -"data, or restricting of direct access to some of an object's components." +"In OOP refers to the bundling of data with methods that operate that data, " +"or restricting of direct access to some of an object's components." msgstr "" "В ООП означає об'єднання даних із методами, які обробляють ці дані, або " "обмеження прямого доступу до деяких компонентів об'єкта." #: ../../src/oop/intro.txt:44 msgid "" -"Encapsulation mechanism is often confused with *hiding*. It's not " -"actually that encapsulation does, but data hiding is available to us due " -"to the encapsulation." +"Encapsulation mechanism is often confused with *hiding*. It's not actually " +"that encapsulation does, but data hiding is available to us due to the " +"encapsulation." msgstr "" -"Механізм інкапсуляції часто плутають із приховуванням. Насправді інкапсуляція" -" це не робить, але приховування даних доступне для нас завдяки інкапсуляції." +"Механізм інкапсуляції часто плутають із приховуванням. Насправді " +"інкапсуляція це не робить, але приховування даних доступне для нас завдяки " +"інкапсуляції." #: ../../src/oop/intro.txt msgid "**inheritance**" @@ -145,16 +144,16 @@ msgstr "**наслідування**" #: ../../src/oop/intro.txt:50 msgid "" "It's a mechanism of basing an object or a class upon another object " -"(prototype-based inheritance) or class (class-based inheritance), " -"retaining similar implementation. Also defined as deriving new classes " -"(subclasses) from existing ones such as a super class or base class and " -"forming them into a hierarchy of classes." +"(prototype-based inheritance) or class (class-based inheritance), retaining " +"similar implementation. Also defined as deriving new classes (subclasses) " +"from existing ones such as a super class or base class and forming them into " +"a hierarchy of classes." msgstr "" -"Це механізм базування об'єкта або класу на іншому об'єкті " -"(успадкування на основі прототипу) або класу (успадкування на основі класу), " -"зберігаючи подібну реалізацію. Також визначається як отримання нових класів " -"(підкласів) із існуючих такі як суперклас або базовий клас і " -"формування їх у ієрархію класів." +"Це механізм базування об'єкта або класу на іншому об'єкті (успадкування на " +"основі прототипу) або класу (успадкування на основі класу), зберігаючи " +"подібну реалізацію. Також визначається як отримання нових класів (підкласів) " +"із існуючих такі як суперклас або базовий клас і формування їх у ієрархію " +"класів." #: ../../src/oop/intro.txt msgid "**polymorphism**" @@ -162,15 +161,15 @@ msgstr "**поліморфізм**" #: ../../src/oop/intro.txt:58 msgid "" -"It's a provision of a single interface to entities of different types or " -"the use of a single symbol to represent multiple different types. The " -"concept is borrowed from a principle in biology where an organism or " -"species can have many different forms or stages." +"It's a provision of a single interface to entities of different types or the " +"use of a single symbol to represent multiple different types. The concept is " +"borrowed from a principle in biology where an organism or species can have " +"many different forms or stages." msgstr "" -"Це надання єдиного інтерфейсу для сутностей різних типів або " -"використання одного символу для представлення кількох різних типів. " -"Концепція запозичена з принципу в біології, згідно з яким організм або " -"вид може мати багато різних форми чи етапи." +"Це надання єдиного інтерфейсу для сутностей різних типів або використання " +"одного символу для представлення кількох різних типів. Концепція запозичена " +"з принципу в біології, згідно з яким організм або вид може мати багато " +"різних форми чи етапи." #: ../../src/oop/intro.txt msgid "**abstraction**" @@ -178,12 +177,12 @@ msgstr "**абстракція**" #: ../../src/oop/intro.txt:65 msgid "" -"The process of removing or generalizing details or attributes in the " -"study of objects or systems to focus attention on details of greater " -"importance, it is similar in nature to the process of generalization. The" -" creation of abstract concept-objects by mirroring common features or " -"attributes of various non-abstract objects or systems of study is the " -"result of the process of abstraction." +"The process of removing or generalizing details or attributes in the study " +"of objects or systems to focus attention on details of greater importance, " +"it is similar in nature to the process of generalization. The creation of " +"abstract concept-objects by mirroring common features or attributes of " +"various non-abstract objects or systems of study is the result of the " +"process of abstraction." msgstr "" "Процес видалення або узагальнення деталей або атрибутів під час дослідження " "об'єктів або систем, щоб зосередити увагу на деталях більшої важливості, " @@ -198,10 +197,10 @@ msgstr "Визначення Классу в Python" #: ../../src/oop/intro.txt:75 msgid "" -"Primitive data-structures - like numbers, strings, lists etc. - are " -"designed to represent simple pieces of information, such as the cost of a" -" product, the name of a novel, or someone's favorite colors. What if you " -"want to represent things that are more complex?" +"Primitive data-structures - like numbers, strings, lists etc. - are designed " +"to represent simple pieces of information, such as the cost of a product, " +"the name of a novel, or someone's favorite colors. What if you want to " +"represent things that are more complex?" msgstr "" "Примітивні структури даних - як-от числа, рядки, списки тощо - призначені " "для представлення простих фрагментів інформації, таких як вартість продукту, " @@ -210,10 +209,10 @@ msgstr "" #: ../../src/oop/intro.txt:80 msgid "" -"For example, let's say you want to track employees in an organization. " -"You need to store some basic information about each employee. Let's start" -" from a very beginning and try to represent an individual employee as a " -"bunch of variables:" +"For example, let's say you want to track employees in an organization. You " +"need to store some basic information about each employee. Let's start from a " +"very beginning and try to represent an individual employee as a bunch of " +"variables:" msgstr "" "Наприклад, скажімо, ви хочете відслідковувати співробітників в організації. " "Вам потрібно зберегти деяку базову інформацію про кожного працівника. " @@ -222,17 +221,17 @@ msgstr "" #: ../../src/oop/intro.txt:90 msgid "" -"This approach has number of issues. Once it's required to store " -"information for more that one person, you are to create another set of " -"variables: ``first_name_1``, ``first_name_2`` etc. The most terrifying " -"issue is that these portions of data have no relations to each other. " -"Let's try to use ``list`` for this purpose:" +"This approach has number of issues. Once it's required to store information " +"for more that one person, you are to create another set of variables: " +"``first_name_1``, ``first_name_2`` etc. The most terrifying issue is that " +"these portions of data have no relations to each other. Let's try to use " +"``list`` for this purpose:" msgstr "" "Цей підхід має низку проблем. Після того, як буде потрібно зберігати " "інформацію про більше ніж одну особу, ви повинні створити інший набір " -"змінних: ``first_name_1``, ``first_name_2`` тощо. Найжахливіше проблема " -"в тому, що ці частини даних не мають жодного відношення одна до одної. " -"Давайте спробуємо використати ``список`` для цієї мети:" +"змінних: ``first_name_1``, ``first_name_2`` тощо. Найжахливіше проблема в " +"тому, що ці частини даних не мають жодного відношення одна до одної. Давайте " +"спробуємо використати ``список`` для цієї мети:" #: ../../src/oop/intro.txt:101 msgid "There are number of issues with this approach as well." @@ -247,31 +246,30 @@ msgid "" msgstr "" "По-перше, це може ускладнити керування великими файлами коду. Якщо ви " "посилаєтеся на ``serhii[0]`` на кілька рядків від місця, де оголошено список " -"``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я " "особи? " +"``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я \" \"особи? " "Звичайно, ви можете використовувати структуру ``dict``, але..." #: ../../src/oop/intro.txt:108 msgid "" -"Second, it can introduce errors if not every person has the same number " -"of properties." +"Second, it can introduce errors if not every person has the same number of " +"properties." msgstr "" "По-друге, це може призвести до помилок, якщо не кожна особа має однакову " "кількість властивостей." #: ../../src/oop/intro.txt:111 msgid "" -"A great way to make this type of code more manageable and more " -"maintainable is to use **classes**." +"A great way to make this type of code more manageable and more maintainable " +"is to use **classes**." msgstr "" "Чудовий спосіб зробити цей тип коду більш керованим і придатним для " "обслуговування - це використання **класів**." #: ../../src/oop/intro.txt:114 msgid "" -"All classes definitions in Python start with the keyword ``class``, which" -" is followed by the name of the class and a colon. Any code that is " -"indented below the class definition is considered the part of the class's" -" body." +"All classes definitions in Python start with the keyword ``class``, which is " +"followed by the name of the class and a colon. Any code that is indented " +"below the class definition is considered the part of the class's body." msgstr "" "Усі визначення класів у Python починаються з ключового слова ``class``, за " "яким йдуть ім'я класу та двокрапка. Будь-який код, який має відступ під " @@ -283,38 +281,38 @@ msgstr "Класи та Екземпляри Класу" #: ../../src/oop/intro.txt:126 msgid "" -"Classes are used to create user-defined data structures. As it was " -"mentioned above OOP is about bundling data and behaviors. Classes define " -"data structures; each portion of data bundled within a classes is called " -"**property** or **field**. Classes also define functions called " -"**methods**, which identify the behavior and actions that an object " -"created from the class can perform with its data." +"Classes are used to create user-defined data structures. As it was mentioned " +"above OOP is about bundling data and behaviors. Classes define data " +"structures; each portion of data bundled within a classes is called " +"**property** or **field**. Classes also define functions called **methods**, " +"which identify the behavior and actions that an object created from the " +"class can perform with its data." msgstr "" "Класи використовуються для створення визначених користувачем структур даних. " "Як було зазначено вище, ООП стосується об'єднання даних і поведінки. Класи " "визначають структури даних; кожна частина даних, об'єднаних у класи, " -"називається властивістю або полем. Класи також визначають функції, " -"які називаються методами, які ідентифікують поведінку та дії, які об'єкт, " +"називається властивістю або полем. Класи також визначають функції, які " +"називаються методами, які ідентифікують поведінку та дії, які об'єкт, " "створений з класу, може виконувати зі своїми даними." #: ../../src/oop/intro.txt:142 msgid "" "A class is a blueprint for how something should be defined. It doesn't " "actually contain any data. The person class above specifies that " -"``first_name`` and ``last_name`` properties are bundled within this " -"class, but it don't actually contain the person's name." +"``first_name`` and ``last_name`` properties are bundled within this class, " +"but it don't actually contain the person's name." msgstr "" "Клас - це схема того, як щось має бути визначено. Він насправді не містить " -"жодних даних. Клас person вище вказує, що властивості " "first_name`` і " +"жодних даних. Клас person вище вказує, що властивості \" \"first_name`` і " "``last_name`` об'єднані в цей класу, але насправді він не містить імені " "людини." #: ../../src/oop/intro.txt:147 msgid "" -"While classes are blueprints, an **instance** is an **object** that is " -"built from a form has been filled out with information. Just like many " -"people can fill out the same form with their own unique information, many" -" instances can be created from a single class." +"While classes are blueprints, an **instance** is an **object** that is built " +"from a form has been filled out with information. Just like many people can " +"fill out the same form with their own unique information, many instances can " +"be created from a single class." msgstr "" "Хоча класи є кресленнями, екземпляр - це об'єкт, створений із форми, " "заповненої інформацією. Подібно до того, як багато людей можуть заповнювати " @@ -327,11 +325,11 @@ msgstr "Методи" #: ../../src/oop/intro.txt:167 msgid "" -"A function bundled within a class is called **method**. There are several" -" ways to define a class method. For now it's needed to know, that each " -"method will get a special argument at the first position. This argument " -"is a reference to an actual object. By convention, this argument is " -"called ``self``." +"A function bundled within a class is called **method**. There are several " +"ways to define a class method. For now it's needed to know, that each method " +"will get a special argument at the first position. This argument is a " +"reference to an actual object. By convention, this argument is called " +"``self``." msgstr "" "Функція, об'єднана в клас, називається методом. Існує кілька способів " "визначення методу класу. Наразі необхідно знати, що кожен метод отримає " @@ -345,10 +343,10 @@ msgstr "Ініціалізація Екземпляру з Даними" #: ../../src/oop/intro.txt:189 msgid "" "There are several methods surrounded with double underscores " -"(``__method__``) that are called **dunder methods** or **magic methods**." -" We'll take a closer look at these methods in the future. For now, it's " -"ok to just one of these special methods: ``__init__``. It initializes an " -"instance with some specific data." +"(``__method__``) that are called **dunder methods** or **magic methods**. " +"We'll take a closer look at these methods in the future. For now, it's ok to " +"just one of these special methods: ``__init__``. It initializes an instance " +"with some specific data." msgstr "" "Є кілька методів, позначених подвійним підкресленням (``__method__``), які " "називаються методами dunder або магічними методами. Ми детальніше розглянемо " @@ -357,9 +355,9 @@ msgstr "" #: ../../src/oop/intro.txt:223 msgid "" -"Note, this call definition has a property called ``programming_language``" -" defined outside of the ``__init__`` method. This property is shared " -"across all the class instances." +"Note, this call definition has a property called ``programming_language`` " +"defined outside of the ``__init__`` method. This property is shared across " +"all the class instances." msgstr "" "Зверніть увагу, що це визначення виклику має властивість під назвою " "``programming_language``, визначену за межами методу ``__init__``. Ця " @@ -371,14 +369,13 @@ msgstr "Дещо Більше про ``self``" #: ../../src/oop/intro.txt:230 msgid "" -"``self`` is nothing except the convention. Instance methods will receive " -"a pointer to the instance itself as the first argument. In two words: it " -"is the actual object to call the method with. For example, the student " -"class defines attributes (student's name and scores) and methods " -"available for each student instance: complete the challenge or skip " -"classes. While the actual student instance contains data and methods " -"related to the exact one student. The ``self`` is a referer to this exact" -" object." +"``self`` is nothing except the convention. Instance methods will receive a " +"pointer to the instance itself as the first argument. In two words: it is " +"the actual object to call the method with. For example, the student class " +"defines attributes (student's name and scores) and methods available for " +"each student instance: complete the challenge or skip classes. While the " +"actual student instance contains data and methods related to the exact one " +"student. The ``self`` is a referer to this exact object." msgstr "" "``self`` - це не що інше, як конвенція. Методи екземпляра отримають " "вказівник на сам екземпляр як перший аргумент. У двох словах: це фактичний " @@ -394,71 +391,71 @@ msgstr "Приховання Даних" #: ../../src/oop/intro.txt:241 msgid "" -"Many programming languages has *access modifiers* implemented. The Python" -" has also, but actually no. It's implemented as a convention-level. All " -"class's members starting with underscore are considered to be " -"**protected** members and should not be accessible outside the class " -"instance; on the other hand members starting with two underscores are " -"considered to be **private** members and shouldn't be accessible outside " -"the class instance as well." +"Many programming languages has *access modifiers* implemented. The Python " +"has also, but actually no. It's implemented as a convention-level. All " +"class's members starting with underscore are considered to be **protected** " +"members and should not be accessible outside the class instance; on the " +"other hand members starting with two underscores are considered to be " +"**private** members and shouldn't be accessible outside the class instance " +"as well." msgstr "" -"Багато мов програмування мають реалізовані модифікатори доступу. Python" -" також має, але насправді ні. Він реалізований на рівні конвенції. Усі " -"члени класу, які починаються з підкреслення, вважаються захищеними членами " -"та не повинні бути доступними за межами екземпляр класу; з іншого боку, " -"члени, які починаються з двох символів підкреслення, вважаються приватними " -"членами та не повинні бути доступними за межами екземпляра класу." +"Багато мов програмування мають реалізовані модифікатори доступу. Python " +"також має, але насправді ні. Він реалізований на рівні конвенції. Усі члени " +"класу, які починаються з підкреслення, вважаються захищеними членами та не " +"повинні бути доступними за межами екземпляр класу; з іншого боку, члени, які " +"починаються з двох символів підкреслення, вважаються приватними членами та " +"не повинні бути доступними за межами екземпляра класу." -#: ../../src/oop/intro.txt:276 +#: ../../src/oop/intro.txt:275 msgid "" -"With the implementation above there are **public** attributes, but you " -"can still access data outside the class, but you definitely shouldn't." +"With the implementation above there are **public** attributes, but you can " +"still access data outside the class, but you definitely shouldn't." msgstr "" "З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " "можете отримати доступ до даних за межами класу, але точно не повинні." -#: ../../src/oop/intro.txt:287 +#: ../../src/oop/intro.txt:290 msgid "Few Words about Inheritance" msgstr "Кілька Слів про Наслідування" -#: ../../src/oop/intro.txt:289 +#: ../../src/oop/intro.txt:292 msgid "Just in two words. This topic is discovered in the future articles." msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." -#: ../../src/oop/intro.txt:291 +#: ../../src/oop/intro.txt:294 msgid "" -"You can derive your classes from a super class. Derived classes are " -"called *sub classes* and the class used to inherit from is called *super " -"class*. Other terms are *child* class and *parent* class, but they are " -"not common (this is author's personal opinion)." +"You can derive your classes from a super class. Derived classes are called " +"*sub classes* and the class used to inherit from is called *super class*. " +"Other terms are *child* class and *parent* class, but they are not common " +"(this is author's personal opinion)." msgstr "" "Ви можете отримати свої класи від суперкласу. Похідні класи називаються " "*підкласами*, а клас, який використовується для успадкування, називається " "*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " "вони не є поширеними ( це особиста думка автора)." -#: ../../src/oop/intro.txt:296 +#: ../../src/oop/intro.txt:299 msgid "Just put a super class in parenthesis two inherit from it:" msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" -#: ../../src/oop/intro.txt:308 +#: ../../src/oop/intro.txt:311 msgid "Few Words about Polymorphism" msgstr "Кілька Слів про Поліморфізм" -#: ../../src/oop/intro.txt:310 +#: ../../src/oop/intro.txt:313 msgid "" "You've already use this. The most simple explanation is **addition " -"operator**. For different types of data it would produce different types " -"of output:" +"operator**. For different types of data it would produce different types of " +"output:" msgstr "" "Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " "Для різних типів даних він створюватиме різні типи виводу:" -#: ../../src/oop/intro.txt:318 +#: ../../src/oop/intro.txt:321 msgid "" -"For example you may have various classes inherited from a base class, " -"that provides a common interface, but each derived class may implement " -"the method in its own way." +"For example you may have various classes inherited from a base class, that " +"provides a common interface, but each derived class may implement the method " +"in its own way." msgstr "" "Наприклад, у вас можуть бути різні класи, успадковані від базового класу, " "який забезпечує загальний інтерфейс, але кожен похідний клас може " @@ -466,9 +463,8 @@ msgstr "" #: ../../src/oop/patterns.txt:3 msgid "Design Patterns" -msgstr "" +msgstr "Патерни Проектування" #: ../../src/oop/solid.txt:3 -msgid "Solid Principles" -msgstr "" - +msgid "SOLID Principles" +msgstr "Принципи SOLID" diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po index 733037fc8..138a92235 100644 --- a/src/_locales/ua/LC_MESSAGES/rdbms.po +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -4,20 +4,21 @@ # Course package. # Serhii Horodilov , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course.github.io/issues\n" -"POT-Creation-Date: 2023-03-24 17:08+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-04-08 19:28+0300\n" +"PO-Revision-Date: 2023-04-08 19:29+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: ua\n" "Language-Team: ua \n" +"Language: ua\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../src/rdbms/aggregation.txt:3 msgid "Data Aggregation" @@ -26,254 +27,256 @@ msgstr "Агрегація даних" #: ../../src/rdbms/aggregation.txt:5 msgid "Here is some dummy data, that will be used as example in this section." msgstr "" -"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі" +"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." #: ../../src/rdbms/aggregation.txt:7 ../../src/rdbms/normalization.txt:1 msgid "product" -msgstr "" +msgstr "product" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:174 msgid "id" -msgstr "" +msgstr "id" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:174 #: ../../src/rdbms/relations.txt:249 ../../src/rdbms/relations.txt:278 #: ../../src/rdbms/relations.txt:313 ../../src/rdbms/relations.txt:345 msgid "name" -msgstr "" +msgstr "name" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 msgid "price" -msgstr "" +msgstr "price" #: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 #: ../../src/rdbms/products_table.csv:1 msgid "category" -msgstr "" +msgstr "category" #: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 #: ../../src/rdbms/products_table.csv:1 msgid "sold" -msgstr "" +msgstr "sold" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:157 #: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:176 msgid "1" -msgstr "" +msgstr "1" #: ../../src/rdbms/products_table.csv:1 msgid "Samsung Galaxy" -msgstr "" +msgstr "Samsung Galaxy" #: ../../src/rdbms/products_table.csv:1 msgid "100000" -msgstr "" +msgstr "100000" #: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/products_table.csv:1 msgid "Phones" -msgstr "" +msgstr "Phones" #: ../../src/rdbms/products_table.csv:1 msgid "500" -msgstr "" +msgstr "500" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:165 #: ../../src/rdbms/relations.txt:178 msgid "2" -msgstr "" +msgstr "2" #: ../../src/rdbms/products_table.csv:1 msgid "iPhone 13 Pro" -msgstr "" +msgstr "iPhone 13 Pro" #: ../../src/rdbms/products_table.csv:1 msgid "120000" -msgstr "" +msgstr "120000" #: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 #: ../../src/rdbms/products_table.csv:1 msgid "300" -msgstr "" +msgstr "300" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:180 msgid "3" -msgstr "" +msgstr "3" #: ../../src/rdbms/products_table.csv:1 msgid "MacBook Pro" -msgstr "" +msgstr "MacBook Pro" #: ../../src/rdbms/products_table.csv:1 msgid "350000" -msgstr "" +msgstr "350000" #: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 #: ../../src/rdbms/products_table.csv:1 msgid "Laptops" -msgstr "" +msgstr "Laptops" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 msgid "100" -msgstr "" +msgstr "100" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 #: ../../src/rdbms/relations.txt:159 msgid "4" -msgstr "" +msgstr "4" #: ../../src/rdbms/products_table.csv:1 msgid "Lenovo ThinkPad" -msgstr "" +msgstr "Lenovo ThinkPad" #: ../../src/rdbms/products_table.csv:1 msgid "150000" -msgstr "" +msgstr "150000" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 msgid "200" -msgstr "" +msgstr "200" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:161 msgid "5" -msgstr "" +msgstr "5" #: ../../src/rdbms/products_table.csv:1 msgid "HP Printer" -msgstr "" +msgstr "HP Printer" #: ../../src/rdbms/products_table.csv:1 msgid "20000" -msgstr "" +msgstr "20000" #: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/products_table.csv:1 msgid "Printers" -msgstr "" +msgstr "Printers" #: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/aggregation.txt:176 #: ../../src/rdbms/products_table.csv:1 msgid "800" -msgstr "" +msgstr "800" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:163 msgid "6" -msgstr "" +msgstr "6" #: ../../src/rdbms/products_table.csv:1 msgid "Dell Monitor" -msgstr "" +msgstr "Dell Monitor" #: ../../src/rdbms/products_table.csv:1 msgid "50000" -msgstr "" +msgstr "50000" #: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 #: ../../src/rdbms/products_table.csv:1 msgid "Monitors" -msgstr "" +msgstr "Monitors" #: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 #: ../../src/rdbms/products_table.csv:1 msgid "400" -msgstr "" +msgstr "400" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:165 msgid "7" -msgstr "" +msgstr "7" #: ../../src/rdbms/products_table.csv:1 msgid "Sony Headphones" -msgstr "" +msgstr "Sony Headphones" #: ../../src/rdbms/products_table.csv:1 msgid "30000" -msgstr "" +msgstr "30000" #: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 #: ../../src/rdbms/products_table.csv:1 msgid "Audio" -msgstr "" +msgstr "Audio" #: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 #: ../../src/rdbms/products_table.csv:1 msgid "0" -msgstr "" +msgstr "0" #: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:167 msgid "8" -msgstr "" +msgstr "8" #: ../../src/rdbms/products_table.csv:1 msgid "Bose Soundbar" -msgstr "" +msgstr "Bose Soundbar" #: ../../src/rdbms/products_table.csv:1 msgid "70000" -msgstr "" +msgstr "70000" #: ../../src/rdbms/products_table.csv:1 msgid "9" -msgstr "" +msgstr "9" #: ../../src/rdbms/products_table.csv:1 msgid "Xbox Series X" -msgstr "" +msgstr "Xbox Series X" #: ../../src/rdbms/products_table.csv:1 msgid "60000" -msgstr "" +msgstr "60000" #: ../../src/rdbms/aggregation.txt:173 ../../src/rdbms/products_table.csv:1 msgid "Gaming" -msgstr "" +msgstr "Gaming" #: ../../src/rdbms/products_table.csv:1 msgid "250" -msgstr "" +msgstr "250" #: ../../src/rdbms/products_table.csv:1 msgid "10" -msgstr "" +msgstr "10" #: ../../src/rdbms/products_table.csv:1 msgid "PlayStation 5" -msgstr "" +msgstr "PlayStation 5" #: ../../src/rdbms/products_table.csv:1 msgid "55000" -msgstr "" +msgstr "55000" #: ../../src/rdbms/products_table.csv:1 msgid "350" -msgstr "" +msgstr "350" #: ../../src/rdbms/aggregation.txt:14 msgid "The same dataset is available as:" -msgstr "" +msgstr "The same dataset is available as:" #: ../../src/rdbms/aggregation.txt:16 msgid ":download:`csv file <./products_table.csv>`" -msgstr "" +msgstr ":download:`csv file <./products_table.csv>`" #: ../../src/rdbms/aggregation.txt:17 -msgid ":download:`postgres dump file `" +msgid "" +":download:`postgres dump file `" msgstr "" +":download:`postgres dump file `" #: ../../src/rdbms/aggregation.txt:20 msgid "Aggregate functions" -msgstr "" +msgstr "Агрегуючі функції" #: ../../src/rdbms/aggregation.txt:22 msgid "" -"*Aggregate functions* compute a single result from a set of input values." -" Various RDBMS implement various built-in aggregate functions. In this " +"*Aggregate functions* compute a single result from a set of input values. " +"Various RDBMS implement various built-in aggregate functions. In this " "section we will review 5 basic functions that are available in all RDBMS." msgstr "" -"*Агрегатні функції* обчислюють один результат із набору вхідних значень." -" Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " +"*Агрегатні функції* обчислюють один результат із набору вхідних значень. " +"Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " "розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." #: ../../src/rdbms/aggregation.txt:29 @@ -282,11 +285,11 @@ msgstr "Підрахунок" #: ../../src/rdbms/aggregation.txt:31 msgid "" -"The ``count(field)`` function returns a count of the number of times that" -" ``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no" -" arguments) returns the total number of rows in the group." +"The ``count(field)`` function returns a count of the number of times that " +"``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " +"arguments) returns the total number of rows in the group." msgstr "" -"Функція ``count(field)`` повертає кількість разів, коли" " ``field`` не є " +"Функція ``count(field)`` повертає кількість разів, коли\" \" ``field`` не є " "``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " "кількість рядків у групі." @@ -296,15 +299,15 @@ msgstr "Максимальне значення" #: ../../src/rdbms/aggregation.txt:49 msgid "" -"The ``max()`` aggregate function returns the maximum value of all values " -"in the group. The maximum value is the value that would be returned last " -"in an ORDER BY on the same column. Aggregate function returns ``NULL`` if" -" and only if there are no non-NULL values in the group." +"The ``max()`` aggregate function returns the maximum value of all values in " +"the group. The maximum value is the value that would be returned last in an " +"ORDER BY on the same column. Aggregate function returns ``NULL`` if and only " +"if there are no non-NULL values in the group." msgstr "" -"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень " -"у групі. Максимальне значення - це значення, яке буде повернуто останнім " -"у ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, " -"якщо і лише якщо в групі немає значень, відмінних від NULL." +"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень у " +"групі. Максимальне значення - це значення, яке буде повернуто останнім у " +"ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " +"і лише якщо в групі немає значень, відмінних від NULL." #: ../../src/rdbms/aggregation.txt:66 msgid "Minimum value" @@ -312,11 +315,10 @@ msgstr "Мінімальне значення" #: ../../src/rdbms/aggregation.txt:68 msgid "" -"The ``min()`` aggregate function returns the minimum non-NULL value of " -"all values in the group. The minimum value is the first non-NULL value " -"that would appear in an ORDER BY of the column. Aggregate function " -"returns ``NULL`` if and only if there are no non-NULL values in the " -"group." +"The ``min()`` aggregate function returns the minimum non-NULL value of all " +"values in the group. The minimum value is the first non-NULL value that " +"would appear in an ORDER BY of the column. Aggregate function returns " +"``NULL`` if and only if there are no non-NULL values in the group." msgstr "" "Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " "значень у групі. Мінімальне значення - це перше значення не NULL, яке " @@ -331,15 +333,15 @@ msgstr "Середнє значення" msgid "" "The ``avg()`` function returns the average value of all non-NULL inputs " "within a group. String and BLOB values that do not look like numbers are " -"interpreted as 0. The result is always a floating point value whenever " -"there is at least one non-NULL input even if all inputs are integers. The" -" result is ``NULL`` if and only if there are no non-NULL inputs." +"interpreted as 0. The result is always a floating point value whenever there " +"is at least one non-NULL input even if all inputs are integers. The result " +"is ``NULL`` if and only if there are no non-NULL inputs." msgstr "" "Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " "групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " -"як 0. Результат завжди значення з плаваючою комою щоразу, коли " -"є принаймні один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. " -"Результатом є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." +"як 0. Результат завжди значення з плаваючою комою щоразу, коли є принаймні " +"один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " +"є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." #: ../../src/rdbms/aggregation.txt:105 msgid "Sum of values" @@ -347,12 +349,12 @@ msgstr "Сума значень" #: ../../src/rdbms/aggregation.txt:107 msgid "" -"The ``sum()`` aggregate functions return the sum of all non-NULL values " -"in the group. If there are no non-NULL input rows then function returns " +"The ``sum()`` aggregate functions return the sum of all non-NULL values in " +"the group. If there are no non-NULL input rows then function returns " "``NULL``." msgstr "" -"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від NULL," -" у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." +"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " +"NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." #: ../../src/rdbms/aggregation.txt:112 msgid "" @@ -364,9 +366,9 @@ msgstr "" #: ../../src/rdbms/aggregation.txt:115 msgid "" -"SQLite implements ``total`` aggregate function, that is similar to " -"``sum``, but returns ``0.0`` (always floating point) if there are no non-" -"NULL input rows." +"SQLite implements ``total`` aggregate function, that is similar to ``sum``, " +"but returns ``0.0`` (always floating point) if there are no non-NULL input " +"rows." msgstr "" "SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " "повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " @@ -386,11 +388,11 @@ msgstr "" #: ../../src/rdbms/aggregation.txt:135 msgid "" -"For example, if the task is to count number of registered categories it " -"is simple to solve as:" +"For example, if the task is to count number of registered categories it is " +"simple to solve as:" msgstr "" "Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " -"категорій, його " "просто вирішити так:" +"категорій, його \" \"просто вирішити так:" #: ../../src/rdbms/aggregation.txt:148 msgid "" @@ -399,7 +401,7 @@ msgid "" "provides the ability to group rows based on some field(s) values." msgstr "" "Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " -"кожної категорії, це " "стає неможливим вирішити без групування товарів. " +"кожної категорії, це \" \"стає неможливим вирішити без групування товарів. " "Пункт ``GROUP BY`` надає можливість групувати рядки на основі певного " "значення поля(ів)." @@ -409,45 +411,44 @@ msgstr "Загальний синтаксис:" #: ../../src/rdbms/aggregation.txt:173 msgid "600" -msgstr "" +msgstr "600" #: ../../src/rdbms/aggregation.txt:179 msgid "" "If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " "clause, then each of the expressions specified as part of the GROUP BY " -"clause is evaluated for each row of the dataset according to the " -"processing rules stated below for ORDER BY expressions. Each row is then " -"assigned to a \"group\" based on the results; rows for which the results " -"of evaluating the GROUP BY expressions are the same get assigned to the " -"same group. For the purposes of grouping rows, ``NULL`` values are " -"considered equal. The usual rules for selecting a collation sequence with" -" which to compare text values apply when evaluating expressions in a " -"GROUP BY clause. The expressions in the GROUP BY clause do not have to be" -" expressions that appear in the result. The expressions in a GROUP BY " -"clause may not be aggregate expressions." +"clause is evaluated for each row of the dataset according to the processing " +"rules stated below for ORDER BY expressions. Each row is then assigned to a " +"\"group\" based on the results; rows for which the results of evaluating the " +"GROUP BY expressions are the same get assigned to the same group. For the " +"purposes of grouping rows, ``NULL`` values are considered equal. The usual " +"rules for selecting a collation sequence with which to compare text values " +"apply when evaluating expressions in a GROUP BY clause. The expressions in " +"the GROUP BY clause do not have to be expressions that appear in the result. " +"The expressions in a GROUP BY clause may not be aggregate expressions." msgstr "" "Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " "тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " "для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " "для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " -"результатів; рядки, для яких результати оцінювання виразів GROUP BY " -"однакові призначаються до однієї групи. Для цілей групування рядків значення " -"``NULL`` вважаються рівними. Звичайні правила для вибору послідовності " -"порівняння, з якою порівнюються текстові значення, застосовуються під час " -"оцінювання виразів у Речення GROUP BY. Вирази в пункті GROUP BY не " -"обов'язково повинні бути виразами, які з'являються в результаті. " -"Вирази в пункті GROUP BY " "не можуть бути сукупними виразами." +"результатів; рядки, для яких результати оцінювання виразів GROUP BY однакові " +"призначаються до однієї групи. Для цілей групування рядків значення ``NULL`` " +"вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " +"якою порівнюються текстові значення, застосовуються під час оцінювання " +"виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " +"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY \" " +"\"не можуть бути сукупними виразами." #: ../../src/rdbms/aggregation.txt:192 -msgid "Having clause" +msgid "HAVING clause" msgstr "" #: ../../src/rdbms/aggregation.txt:194 msgid "" -"But what, if the task is to filter categories, that have less than 500 " -"sold items in it? ``WHERE`` clause will be useless, cause it's evaluated " -"before grouping output. In other words, only rows that suite WHERE filter" -" will be selected." +"But what, if the task is to filter categories, that have less than 500 sold " +"items in it? ``WHERE`` clause will be useless, cause it's evaluated before " +"grouping output. In other words, only rows that suite WHERE filter will be " +"selected." msgstr "" "Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " "500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " @@ -456,26 +457,25 @@ msgstr "" #: ../../src/rdbms/aggregation.txt:217 msgid "" -"If a ``HAVING`` clause is specified, it is evaluated once for each group " -"of rows as a boolean expression. If the result of evaluating the HAVING " -"clause is false, the group is discarded. If the HAVING clause is an " -"aggregate expression, it is evaluated across all rows in the group." +"If a ``HAVING`` clause is specified, it is evaluated once for each group of " +"rows as a boolean expression. If the result of evaluating the HAVING clause " +"is false, the group is discarded. If the HAVING clause is an aggregate " +"expression, it is evaluated across all rows in the group." msgstr "" "Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " "групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " -"хибний, групу відкидають. Якщо речення HAVING є " -"агрегатним виразом, воно обчислюється в усіх рядках у групі." +"хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " +"обчислюється в усіх рядках у групі." #: ../../src/rdbms/aggregation.txt:222 msgid "" "If a HAVING clause is a non-aggregate expression, it is evaluated with " -"respect to an arbitrarily selected row from the group. The HAVING " -"expression may refer to values, even aggregate functions, that are not in" -" the result." +"respect to an arbitrarily selected row from the group. The HAVING expression " +"may refer to values, even aggregate functions, that are not in the result." msgstr "" -"Якщо речення HAVING є неагрегатним виразом, воно оцінюється " -"щодо довільно вибраного рядка з групи. Вираз HAVING може посилатися на " -"значення, навіть агрегатні функції, яких немає в результат." +"Якщо речення HAVING є неагрегатним виразом, воно оцінюється щодо довільно " +"вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " +"агрегатні функції, яких немає в результат." #: ../../src/rdbms/index.txt:3 msgid "Relational Database" @@ -483,47 +483,45 @@ msgstr "Реляційні бази даних" #: ../../src/rdbms/index.txt:5 msgid "" -":abbr:`RDBMS (Relational Database Management System)` is a type of " -"software that helps users to create, update, manage, and access " -"relational databases. Relational databases organize data into tables, " -"which consist of rows and columns. Each column represents a specific " -"attribute of the data, while each row represents a specific instance of " -"that data." +":abbr:`RDBMS (Relational Database Management System)` is a type of software " +"that helps users to create, update, manage, and access relational databases. " +"Relational databases organize data into tables, which consist of rows and " +"columns. Each column represents a specific attribute of the data, while each " +"row represents a specific instance of that data." msgstr "" ":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " "забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " "отримувати доступ до реляційних баз даних. Реляційні бази даних " -"організовують дані в таблиці, які складаються з рядків і стовпців. " -"Кожен стовпець представляє певний " "атрибут даних, тоді як кожен рядок " +"організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " +"стовпець представляє певний \" \"атрибут даних, тоді як кожен рядок " "представляє конкретний екземпляр цих даних." #: ../../src/rdbms/index.txt:11 msgid "" -"RDBMS allow users to interact with the database using :abbr:`SQL " -"(Structured Query Language)`, which is a standard language for managing " -"and manipulating relational databases. SQL allows users to perform a " -"variety of operations on the database, including adding, updating, and " -"deleting data, as well as retrieving data based on specific criteria." +"RDBMS allow users to interact with the database using :abbr:`SQL (Structured " +"Query Language)`, which is a standard language for managing and manipulating " +"relational databases. SQL allows users to perform a variety of operations on " +"the database, including adding, updating, and deleting data, as well as " +"retrieving data based on specific criteria." msgstr "" "СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " -"(Structured Query Language)`, яка є стандартною мовою для керування " -"і маніпулювання реляційними базами даних. SQL дозволяє користувачам " -"виконувати різноманітність операцій з базою даних, включаючи додавання, " -"оновлення та видалення даних, а також отримання даних на основі певних " -"критеріїв." +"(Structured Query Language)`, яка є стандартною мовою для керування і " +"маніпулювання реляційними базами даних. SQL дозволяє користувачам виконувати " +"різноманітність операцій з базою даних, включаючи додавання, оновлення та " +"видалення даних, а також отримання даних на основі певних критеріїв." #: ../../src/rdbms/index.txt:17 msgid "" "RDBMS also provide a range of features to ensure data integrity, such as " -"enforcing data constraints, supporting transactions, and providing backup" -" and recovery capabilities. Additionally, RDBMS systems often provide " -"tools for managing the database, such as user interfaces for creating and" -" modifying tables and views, and monitoring tools for optimizing database" -" performance." +"enforcing data constraints, supporting transactions, and providing backup " +"and recovery capabilities. Additionally, RDBMS systems often provide tools " +"for managing the database, such as user interfaces for creating and " +"modifying tables and views, and monitoring tools for optimizing database " +"performance." msgstr "" "СУБД також надає низку функцій для забезпечення цілісності даних, таких як " "дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " -"резервного копіювання" "і відновлення. Крім того, системи РСУБД часто " +"резервного копіювання\" \"і відновлення. Крім того, системи РСУБД часто " "надають інструменти для керування базою даних, такі як інтерфейси " "користувача для створення та модифікації таблиць і представлень, а також " "інструменти моніторингу для оптимізації продуктивності бази даних." @@ -534,12 +532,12 @@ msgstr "Нормалізація баз даних" #: ../../src/rdbms/normalization.txt:5 msgid "" -"Normalization is a process of organizing data in a database so that it is" -" free from redundancy and dependency. It helps to eliminate data " +"Normalization is a process of organizing data in a database so that it is " +"free from redundancy and dependency. It helps to eliminate data " "inconsistencies and anomalies, thereby improving data integrity. " -"Normalization is a set of rules or guidelines to design a database schema" -" in such a way that it avoids data duplication, data redundancy, and data" -" inconsistency." +"Normalization is a set of rules or guidelines to design a database schema in " +"such a way that it avoids data duplication, data redundancy, and data " +"inconsistency." msgstr "" "Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " "вона була вільна від надлишковості та залежності. Це допомагає усунути " @@ -551,55 +549,54 @@ msgstr "" #: ../../src/rdbms/normalization.txt:11 msgid "" "There are several normal forms, each building on the previous one, which " -"guide us in the normalization process. The most commonly used normal " -"forms are:" +"guide us in the normalization process. The most commonly used normal forms " +"are:" msgstr "" "Існує кілька нормальних форм, кожна з яких будується на попередній, які " -"скеровують нас у процесі нормалізації. Найпоширенішими звичайними " -"формами є:" +"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" #: ../../src/rdbms/normalization.txt:14 msgid "" -"**First Normal Form (1NF)**: Each column should hold atomic (indivisible)" -" values. There should be no repeating groups or arrays of data in a " -"table." +"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " +"values. There should be no repeating groups or arrays of data in a table." msgstr "" -"Перша нормальна форма (1NF): кожен стовпець має містити атомарні (неподільні)" -" значення. У таблиці не повинно бути повторюваних груп або масивів даних." +"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " +"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " +"масивів даних." #: ../../src/rdbms/normalization.txt:17 msgid "" "**Second Normal Form (2NF)**: Each non-key column should be functionally " -"dependent on the entire primary key. In other words, every column in a " -"table should be related to the primary key and not dependent on any other" -" non-key columns." +"dependent on the entire primary key. In other words, every column in a table " +"should be related to the primary key and not dependent on any other non-key " +"columns." msgstr "" "Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " "залежати від усього первинного ключа. Іншими словами, кожен стовпець у " -"таблиці має бути пов'язаний із первинним ключем, а не залежати від " -"будь-яких інших неключових стовпців." +"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " +"інших неключових стовпців." #: ../../src/rdbms/normalization.txt:21 msgid "" -"**Third Normal Form (3NF)**: All non-key columns should be dependent only" -" on the primary key and not on any other non-key columns. This eliminates" -" transitive dependencies." +"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " +"the primary key and not on any other non-key columns. This eliminates " +"transitive dependencies." msgstr "" -"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише" -" від первинного ключа, а не від будь-яких інших неключових стовпців. " -"Це усуває транзитивні залежності." +"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " +"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " +"транзитивні залежності." #: ../../src/rdbms/normalization.txt:25 msgid "" -"Normalization reduces data redundancy and dependency, making the database" -" more efficient, flexible, and scalable. It also helps in maintaining " -"data consistency and accuracy, and ensures that updates and deletions are" -" properly handled." +"Normalization reduces data redundancy and dependency, making the database " +"more efficient, flexible, and scalable. It also helps in maintaining data " +"consistency and accuracy, and ensures that updates and deletions are " +"properly handled." msgstr "" -"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних" -" більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " -"узгодженість і точність даних, а також гарантує належну обробку оновлень " -"і видалень." +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " +"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень і " +"видалень." #: ../../src/rdbms/normalization.txt:31 msgid "First normal form (1NF)" @@ -607,11 +604,11 @@ msgstr "Перша нормальна форма (1NF)" #: ../../src/rdbms/normalization.txt:33 msgid "" -"It's easier to understand normalization via examples. Let's start with " -"some dummy orders data." +"It's easier to understand normalization via examples. Let's start with some " +"dummy orders data." msgstr "" -"Легше зрозуміти нормалізацію на прикладах. Почнемо з " -"деяких фіктивних даних про замовлення." +"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " +"про замовлення." #: ../../src/rdbms/normalization.txt:36 msgid "Initial data" @@ -668,8 +665,8 @@ msgstr "" #: ../../src/rdbms/normalization.txt:43 msgid "" -"This table violates 1NF, since its columns contain multiple values. To " -"bring this to 1NF all data within the table are to be atomic." +"This table violates 1NF, since its columns contain multiple values. To bring " +"this to 1NF all data within the table are to be atomic." msgstr "" "Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " "привести це до 1NF, усі дані в таблиці мають бути атомарними." @@ -707,8 +704,8 @@ msgid "" "The table above is in 1NF, but ``item price`` is dependent on the *item* " "entity itself and have low cohesion to *orders*. To bring it into 2NF a " "dedicated table to store information about items themselves is to be " -"created. After that ``order`` and ``product`` table are connected " -"(related) to each other via a foreign key." +"created. After that ``order`` and ``product`` table are connected (related) " +"to each other via a foreign key." msgstr "" "Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " "елемента і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " @@ -718,45 +715,45 @@ msgstr "" #: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 msgid "``order`` table" -msgstr "" +msgstr "таблиця ``order``" #: ../../src/rdbms/normalization.txt:1 msgid "product_id" -msgstr "" +msgstr "product_id" #: ../../src/rdbms/normalization.txt:73 msgid "``product`` table" -msgstr "" +msgstr "таблиця ``product``" #: ../../src/rdbms/normalization.txt:98 msgid "" -"``total`` field is also removed, since now it can be calculated as " -"product of ``product.price`` and ``order.quantity``." +"``total`` field is also removed, since now it can be calculated as product " +"of ``product.price`` and ``order.quantity``." msgstr "" "Поле ``total`` також видалено, оскільки тепер його можна обчислити як " "добуток ``product.price`` і ``order.quantity``." #: ../../src/rdbms/normalization.txt:102 msgid "Third normal form (3NF)" -msgstr "" +msgstr "3-тя нормальна форма (3NF)" #: ../../src/rdbms/normalization.txt:104 msgid "" -"At last it's time to remove a transitive functional dependency. " -"Customer's name is not actually dependent on a product, but on a person, " -"who places an order." +"At last it's time to remove a transitive functional dependency. Customer's " +"name is not actually dependent on a product, but on a person, who places an " +"order." msgstr "" -"Нарешті настав час видалити транзитивну функціональну залежність. " -"Ім'я клієнта насправді залежить не від продукту, а від особи, " -"яка робить замовлення." +"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " +"клієнта насправді залежить не від продукту, а від особи, яка робить " +"замовлення." #: ../../src/rdbms/normalization.txt:1 msgid "customer_id" -msgstr "" +msgstr "customer_id" #: ../../src/rdbms/normalization.txt:115 msgid "``customer`` table" -msgstr "" +msgstr "таблиця ``customer``" #: ../../src/rdbms/relations.txt:3 msgid "Data Relationships" @@ -768,35 +765,34 @@ msgstr "Настав час поговорити про **відносини д #: ../../src/rdbms/relations.txt:7 msgid "" -"For example your database contains two tables: ``weather`` and ``city``. " -"The diagram below demonstrates the overall data structure:" +"For example your database contains two tables: ``weather`` and ``city``. The " +"diagram below demonstrates the overall data structure:" msgstr "" "Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " "Діаграма нижче демонструє загальну структуру даних:" #: ../../src/rdbms/relations.txt:25 msgid "" -"Consider the following problem: you want to make sure no one can insert a" -" record into ``weather`` without a matching entry in ``city`` table. This" -" is called maintaining the *referential integrity* of your data. In " -"simplistic database systems this would be implemented (if at all) by " -"first looking at the cities table to check if a matching record exists, " -"and then inserting or rejecting the new weather records. This approach " -"has a number of problems and is very inconvenient." -msgstr "" -"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити" -" запис до ``weather`` без відповідного запису в ``city`` таблиці. Це" -"називається підтримкою посилальної цілісності ваші дані. У " -"спрощених системах баз даних це було б реалізовано (якщо взагалі) " -"спочатку переглядаючи таблицю міст, щоб перевірити, чи існує відповідний " -"запис, а потім вставляв або відхиляв нові записи погоди. Цей підхід " -"має низку проблем і дуже незручно." +"Consider the following problem: you want to make sure no one can insert a " +"record into ``weather`` without a matching entry in ``city`` table. This is " +"called maintaining the *referential integrity* of your data. In simplistic " +"database systems this would be implemented (if at all) by first looking at " +"the cities table to check if a matching record exists, and then inserting or " +"rejecting the new weather records. This approach has a number of problems " +"and is very inconvenient." +msgstr "" +"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " +"запис до ``weather`` без відповідного запису в ``city`` таблиці. " +"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " +"системах баз даних це було б реалізовано (якщо взагалі) спочатку " +"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " +"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " +"і дуже незручно." #: ../../src/rdbms/relations.txt:47 msgid "" "This declaration creates a relationship between two (or even more) tables." -msgstr "" -"Це оголошення створює зв'язок між двома (або навіть більше) таблицями." +msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." #: ../../src/rdbms/relations.txt:50 msgid "Foreign key (FK)" @@ -804,33 +800,32 @@ msgstr "Зовнішній ключ (FK)" #: ../../src/rdbms/relations.txt:52 msgid "" -"So far, you have knowledge about **primary** keys. The **foreign** key is" -" a column, that *references* some another table. In common, it's a " -"reference to another table's PK; but there is no limitation of this kind," -" any column can be referenced by another one. FKs handle data integrity " -"only, it's not required for FK to be non-NULL value." -msgstr "" -"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це" -" стовпець, який посилається на іншу таблицю. Загалом, це посилання на PK " -"іншої таблиці; але такого роду обмежень немає ," -" на будь-який стовпець може посилатися інший. FK обробляє лише " -"цілісність даних, не обов'язково, щоб значення FK було відмінним від NULL." +"So far, you have knowledge about **primary** keys. The **foreign** key is a " +"column, that *references* some another table. In common, it's a reference to " +"another table's PK; but there is no limitation of this kind, any column can " +"be referenced by another one. FKs handle data integrity only, it's not " +"required for FK to be non-NULL value." +msgstr "" +"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " +"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " +"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " +"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " +"відмінним від NULL." #: ../../src/rdbms/relations.txt:58 msgid "" -"The relation's properties are described by CONSTRAINTS and the database's" -" structure." +"The relation's properties are described by CONSTRAINTS and the database's " +"structure." msgstr "" "Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." #: ../../src/rdbms/relations.txt:61 msgid "" -"For example, modifying declaration with ``NOT NULL`` constraint grants " -"that each record within a table has a matching one entity in another " -"table." +"For example, modifying declaration with ``NOT NULL`` constraint grants that " +"each record within a table has a matching one entity in another table." msgstr "" -"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що " -"кожний запис у таблиці має відповідну сутність в іншій таблиці." +"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " +"запис у таблиці має відповідну сутність в іншій таблиці." #: ../../src/rdbms/relations.txt:71 msgid "This brings us to various relationship models." @@ -846,40 +841,37 @@ msgstr "Це найпоширеніший зв'язок." #: ../../src/rdbms/relations.txt:78 msgid "" -"For the example above there are no limitations on temperature " -"measurements in a specified city. So, a single city may has 0 or N " -"related records in ``weather`` table. But each weather record is related " -"to the only one city." +"For the example above there are no limitations on temperature measurements " +"in a specified city. So, a single city may has 0 or N related records in " +"``weather`` table. But each weather record is related to the only one city." msgstr "" -"Для наведеного вище прикладу немає обмежень на вимірювання " -"температури у визначеному місті. Отже, окреме місто може мати 0 або N " -"пов'язаних записів у таблиці ``погода``. Але кожен запис погоди пов'язаний " -"до єдиного міста." +"Для наведеного вище прикладу немає обмежень на вимірювання температури у " +"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " +"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." #: ../../src/rdbms/relations.txt:82 msgid "" "Another example is employees and office buildings they work in. Some big " -"company may have multiple offices and employee across the globe. Multiple" -" employees can be present in a single office building at a time. But each" -" employee can be physically located only in a single office at a time." +"company may have multiple offices and employee across the globe. Multiple " +"employees can be present in a single office building at a time. But each " +"employee can be physically located only in a single office at a time." msgstr "" "Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " "Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " "світу. Декілька працівників можуть бути присутні в одній офісній будівлі " -"одночасно. Але кожен працівник може фізично перебувати лише в одному " -"офісі одночасно." +"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " +"одночасно." #: ../../src/rdbms/relations.txt:105 msgid "One-to-one relationship (1-to-1)" -msgstr "" +msgstr "One-to-one relationship (1-to-1)" #: ../../src/rdbms/relations.txt:107 msgid "" -"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there" -" is and only one matching record. Back to the example with employees. " -"Multiple workstations (personal computers) are located in each office " -"building. The only one person can occupy the only one work station at a " -"time." +"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " +"and only one matching record. Back to the example with employees. Multiple " +"workstations (personal computers) are located in each office building. The " +"only one person can occupy the only one work station at a time." msgstr "" "Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " "наявність лише одного відповідного запису. Повернемося до прикладу зі " @@ -895,14 +887,13 @@ msgstr "Зв'язок багато-до-багатьох (N-до-N)" msgid "" "These relationships require additional table. A good example may be a " "*project role*. There are many of them in a production team. And some " -"employees may be assigned to the same role (e.g. developers, testers " -"etc.). But also a single person can be a developer and tester at a time." +"employees may be assigned to the same role (e.g. developers, testers etc.). " +"But also a single person can be a developer and tester at a time." msgstr "" -"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути " -"роль у проекті. Їх багато у виробничій команді. І деяким " -"працівникам може бути призначено ту саму роль (наприклад, розробники, " -"тестувальники і т. д.). Але також одна людина може бути розробником і " -"тестувальником одночасно." +"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " +"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " +"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " +"також одна людина може бути розробником і тестувальником одночасно." #: ../../src/rdbms/relations.txt:133 msgid "Joining data" @@ -911,8 +902,8 @@ msgstr "Об'єднання даних" #: ../../src/rdbms/relations.txt:135 msgid "" "``JOIN`` is used to *join* data fetched from multiple related tables. To " -"build a valid query you are to set the tables to join and parameter to " -"use for this operation." +"build a valid query you are to set the tables to join and parameter to use " +"for this operation." msgstr "" "``JOIN`` використовується для об'єднання даних, отриманих з кількох " "пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " @@ -927,45 +918,45 @@ msgid "" "There are various join types available. Here are is some dummy data to " "demonstrate their purpose." msgstr "" -"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб " -"продемонструвати їх призначення." +"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " +"їх призначення." #: ../../src/rdbms/relations.txt:148 msgid "poem" -msgstr "" +msgstr "poem" #: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:249 #: ../../src/rdbms/relations.txt:278 ../../src/rdbms/relations.txt:313 #: ../../src/rdbms/relations.txt:345 msgid "title" -msgstr "" +msgstr "title" #: ../../src/rdbms/relations.txt:151 msgid "author_id" -msgstr "" +msgstr "author_id" #: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:251 #: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:315 #: ../../src/rdbms/relations.txt:347 msgid "On the Field of Battle" -msgstr "" +msgstr "On the Field of Battle" #: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:253 #: ../../src/rdbms/relations.txt:282 ../../src/rdbms/relations.txt:317 #: ../../src/rdbms/relations.txt:349 msgid "Moses" -msgstr "" +msgstr "Moses" #: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:255 #: ../../src/rdbms/relations.txt:284 ../../src/rdbms/relations.txt:319 #: ../../src/rdbms/relations.txt:351 msgid "The Forest Song" -msgstr "" +msgstr "The Forest Song" #: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:286 #: ../../src/rdbms/relations.txt:353 msgid "In the Catacombs" -msgstr "" +msgstr "In the Catacombs" #: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:163 #: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:286 @@ -974,33 +965,33 @@ msgstr "" #: ../../src/rdbms/relations.txt:357 ../../src/rdbms/relations.txt:361 #: ../../src/rdbms/relations.txt:363 msgid "null" -msgstr "" +msgstr "null" #: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:257 #: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:321 #: ../../src/rdbms/relations.txt:355 msgid "The Singing Stones" -msgstr "" +msgstr "The Singing Stones" #: ../../src/rdbms/relations.txt:163 ../../src/rdbms/relations.txt:290 #: ../../src/rdbms/relations.txt:357 msgid "Ancient Fairy Tales" -msgstr "" +msgstr "Ancient Fairy Tales" #: ../../src/rdbms/relations.txt:165 ../../src/rdbms/relations.txt:259 #: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:323 #: ../../src/rdbms/relations.txt:359 msgid "My Thoughts" -msgstr "" +msgstr "My Thoughts" #: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:294 #: ../../src/rdbms/relations.txt:361 msgid "To Shevchenko" -msgstr "" +msgstr "To Shevchenko" #: ../../src/rdbms/relations.txt:171 msgid "author" -msgstr "" +msgstr "author" #: ../../src/rdbms/relations.txt:176 ../../src/rdbms/relations.txt:251 #: ../../src/rdbms/relations.txt:255 ../../src/rdbms/relations.txt:257 @@ -1010,7 +1001,7 @@ msgstr "" #: ../../src/rdbms/relations.txt:347 ../../src/rdbms/relations.txt:351 #: ../../src/rdbms/relations.txt:355 msgid "Larysa Kosach" -msgstr "" +msgstr "Larysa Kosach" #: ../../src/rdbms/relations.txt:178 ../../src/rdbms/relations.txt:253 #: ../../src/rdbms/relations.txt:259 ../../src/rdbms/relations.txt:282 @@ -1018,66 +1009,66 @@ msgstr "" #: ../../src/rdbms/relations.txt:323 ../../src/rdbms/relations.txt:349 #: ../../src/rdbms/relations.txt:359 msgid "Ivan Franko" -msgstr "" +msgstr "Ivan Franko" #: ../../src/rdbms/relations.txt:212 msgid "Join types" -msgstr "" +msgstr "Join types" #: ../../src/rdbms/relations.txt msgid "Cross join" -msgstr "" +msgstr "Cross join" #: ../../src/rdbms/relations.txt:220 msgid "" "For every possible combination of rows from T1 and T2 (i.e., a Cartesian " -"product), the joined table will contain a row consisting of all columns " -"in T1 followed by all columns in T2. If the tables have N and M rows " +"product), the joined table will contain a row consisting of all columns in " +"T1 followed by all columns in T2. If the tables have N and M rows " "respectively, the joined table will have N * M rows." msgstr "" -"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто, декартового " -"добутку), об'єднана таблиця міститиме рядок, що складається з усіх стовпців " -"у T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " -"відповідно, об'єднана таблиця матиме N M рядків." +"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " +"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " +"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " +"відповідно, об’єднана таблиця матиме N * M рядків." #: ../../src/rdbms/relations.txt msgid "Qualified joins" -msgstr "" +msgstr "Qualified joins" #: ../../src/rdbms/relations.txt:231 msgid "" -"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` " -"is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " +"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." msgstr "" -"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` " -"є типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." +"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " +"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." #: ../../src/rdbms/relations.txt:236 msgid "INNER JOIN" -msgstr "" +msgstr "INNER JOIN" #: ../../src/rdbms/relations.txt:238 msgid "" -"For each row R1 of T1, the joined table has a row for each row in T2 that" -" satisfies the join condition with R1." +"For each row R1 of T1, the joined table has a row for each row in T2 that " +"satisfies the join condition with R1." msgstr "" "Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " "який задовольняє умову об'єднання з R1." #: ../../src/rdbms/relations.txt:241 msgid "Inner join" -msgstr "" +msgstr "Inner join" #: ../../src/rdbms/relations.txt:263 msgid "LEFT OUTER JOIN" -msgstr "" +msgstr "LEFT OUTER JOIN" #: ../../src/rdbms/relations.txt:265 msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not" -" satisfy the join condition with any row in T2, a joined row is added " -"with null values in columns of T2. Thus, the joined table always has at " -"least one row for each row in T1." +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Thus, the joined table always has at least one " +"row for each row in T1." msgstr "" "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " "який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " @@ -1086,40 +1077,40 @@ msgstr "" #: ../../src/rdbms/relations.txt:270 msgid "Left join" -msgstr "" +msgstr "Left join" #: ../../src/rdbms/relations.txt:298 msgid "RIGHT OUTER JOIN" -msgstr "" +msgstr "RIGHT OUTER JOIN" #: ../../src/rdbms/relations.txt:300 msgid "" -"First, an inner join is performed. Then, for each row in T2 that does not" -" satisfy the join condition with any row in T1, a joined row is added " -"with null values in columns of T1. This is the converse of a left join: " -"the result table will always have a row for each row in T2." +"First, an inner join is performed. Then, for each row in T2 that does not " +"satisfy the join condition with any row in T1, a joined row is added with " +"null values in columns of T1. This is the converse of a left join: the " +"result table will always have a row for each row in T2." msgstr "" "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " "який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " "рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " -"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного " -"рядка в T2." +"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " +"в T2." #: ../../src/rdbms/relations.txt:305 msgid "Right join" -msgstr "" +msgstr "Right join" #: ../../src/rdbms/relations.txt:329 msgid "FULL OUTER JOIN" -msgstr "" +msgstr "FULL OUTER JOIN" #: ../../src/rdbms/relations.txt:331 msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not" -" satisfy the join condition with any row in T2, a joined row is added " -"with null values in columns of T2. Also, for each row of T2 that does not" -" satisfy the join condition with any row in T1, a joined row with null " -"values in the columns of T1 is added." +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Also, for each row of T2 that does not satisfy " +"the join condition with any row in T1, a joined row with null values in the " +"columns of T1 is added." msgstr "" "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " "який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " @@ -1129,5 +1120,4 @@ msgstr "" #: ../../src/rdbms/relations.txt:337 msgid "Full join" -msgstr "" - +msgstr "Full join" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 46f69fe30..bf5a7477a 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -169,7 +169,7 @@ Common operations | ``s.count(x)`` | total number of occurrences of *x* in *s* | +----------------------+------------------------------------------------------+ | ``s.index(x)`` | index of the first occurrence of *x* in *s* | -| ``s.index(x, i)`` | (at or after index *i* and before index *j*) | +| ``s.index(x, i)`` | at or after index *i* and before index *j* | | ``s.index(x, i, j)`` | | +----------------------+------------------------------------------------------+ diff --git a/src/basics/syntax.txt b/src/basics/syntax.txt index 704f16599..6f9f45432 100644 --- a/src/basics/syntax.txt +++ b/src/basics/syntax.txt @@ -101,7 +101,7 @@ In few words: The code snippet above demonstrates some basics abilities of Python to gather data from the user, process it and print out back. Note the words starting with -a **#** (hash) symbol. This is a comment. Any sequence of characters after +a # (hash) symbol. This is a comment. Any sequence of characters after the hash and till the line end are considered to be a comment. These are for those people, who see the code and they are ignored by the interpreter. diff --git a/src/oop/solid.txt b/src/oop/solid.txt index 75f1952a1..b616b5aae 100644 --- a/src/oop/solid.txt +++ b/src/oop/solid.txt @@ -1,3 +1,3 @@ ******************************************************************************* - Solid Principles + SOLID Principles ******************************************************************************* diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index f8eadbd3e..8b5385edd 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -188,7 +188,7 @@ a GROUP BY clause. The expressions in the GROUP BY clause do not have to be expressions that appear in the result. The expressions in a GROUP BY clause may not be aggregate expressions. -Having clause +HAVING clause ------------- But what, if the task is to filter categories, that have less than 500 sold From d1288c0c84d3f0ddd9f03f1b4b9aae9bb4045dd0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 9 Apr 2023 01:10:07 +0300 Subject: [PATCH 294/689] Updated submodules to latest versions --- blog | 2 +- problem-sets | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blog b/blog index 2e531410b..111fe1623 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 2e531410b5d0e5a2781bb679b4583d80039df531 +Subproject commit 111fe162309264de92ecf0cde4262ee2fcc9acf2 diff --git a/problem-sets b/problem-sets index d138fe5b0..d0b5a7412 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit d138fe5b02e31d316e4360c9c34421d779d59aff +Subproject commit d0b5a74121c75af4e15e4ef83385d833b60e970c From 62ecfa3257d986cca4b8254611598a90c0419d2b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 9 Apr 2023 02:02:40 +0300 Subject: [PATCH 295/689] Updated blog documents Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 477 ++++++++++++++-------------- src/appx/blog.md | 2 - src/appx/blog.txt | 1 + 3 files changed, 248 insertions(+), 232 deletions(-) delete mode 100644 src/appx/blog.md create mode 100644 src/appx/blog.txt diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index f2cdf2980..aa064a8bb 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 17:35+0300\n" -"PO-Revision-Date: 2023-04-08 19:13+0300\n" +"POT-Creation-Date: 2023-04-09 01:18+0300\n" +"PO-Revision-Date: 2023-04-09 01:33+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -21,11 +21,11 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../blog/docs/spec.md:2 +#: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" msgstr "Специфікація Проекту Блогу" -#: ../../blog/docs/spec.md:5 +#: ../../blog/docs/spec.rst:12 msgid "" "As a developer you were asked to create a simple blog site. The goal is to " "create a place on the Internet where users can share their stories to public." @@ -34,7 +34,7 @@ msgstr "" "\"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " "історіями з громадськістю." -#: ../../blog/docs/spec.md:8 +#: ../../blog/docs/spec.rst:16 msgid "" "This document applies requirements for the entire project step-by-step. You " "will start from creating the appropriate URL dispatcher and connecting a " @@ -46,200 +46,199 @@ msgstr "" "бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " "API для блог." -#: ../../blog/docs/spec.md:13 +#: ../../blog/docs/spec.rst:21 msgid "" "There are some boiler plates, that may be useful in your future work, but " -"you aren't forced to use them. It's on your choice." +"you aren’t forced to use them. It’s on your choice." msgstr "" "Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " "ви не змушені їх використовувати. Це на ваш вибір." -#: ../../blog/docs/spec.md:16 -msgid "" -"[Starter template](https://github.com/edu-python-course/django-template)" -msgstr "" -"[Starter template](https://github.com/edu-python-course/django-template)" +#: ../../blog/docs/spec.rst:24 +msgid "`Starter template`_" +msgstr "`Starter template`_" -#: ../../blog/docs/spec.md:17 -msgid "" -"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" -msgstr "" -"[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#: ../../blog/docs/spec.rst:25 +msgid "`Bootstrap template`_" +msgstr "`Bootstrap template`_" -#: ../../blog/docs/spec.md:20 +#: ../../blog/docs/spec.rst:28 msgid "Challenge: Site views" msgstr "Завдання: Site views" -#: ../../blog/docs/spec.md:23 +#: ../../blog/docs/spec.rst:30 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " +"It’s ok not to return **actual** content for now. Just ensure all the routes " "are available and provide correct data. Use anything you like to return " "within HTTP response." msgstr "" -"Це нормально поки що не повертати фактичний вміст. Просто переконайтеся, що " -"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " -"хочете, щоб повернути у відповіді HTTP." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " +"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " +"щоб повернути у відповіді HTTP." -#: ../../blog/docs/spec.md:29 +#: ../../blog/docs/spec.rst:34 msgid "" -"`/blogs/`: A site's homepage. This will contain a list of blogs available " +"``/blogs/``: A site’s homepage. This will contain a list of blogs available " "via the django site." msgstr "" -"`блоги`: домашня сторінка сайту. Вона міститиме список блогів, доступних " -"через сайт django." +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " +"на сайті django." -#: ../../blog/docs/spec.md:32 +#: ../../blog/docs/spec.rst:36 msgid "" -"`/about/`: Provides a regular text for a user, describing the " +"``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"`about`: надає звичайний текст для користувача, описуючи функції сайту " +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " "django." -#: ../../blog/docs/spec.md:35 -msgid "`/`: same as `/blogs/`" -msgstr "`/`: те ж саме `/blogs/`" +#: ../../blog/docs/spec.rst:38 +msgid "``/``: same as ``/blogs/``" +msgstr "``/``: те ж саме ``/blogs/``" -#: ../../blog/docs/spec.md:37 +#: ../../blog/docs/spec.rst:39 msgid "" -"`//`: A single blog post detail view. The URL contains dynamic part in " -"it. This will be used to fetch a single blogpost from the database." +"``//``: A single blog post detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single blogpost from the database." msgstr "" -"``: детальний перегляд окремої публікації блогу. URL-адреса містить у " -"ній динамічну частину. Це буде використано для отримання окремої публікації " -"блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " +"містить динамічну частину. Це буде використано для отримання однієї " +"публікації блогу з бази даних." -#: ../../blog/docs/spec.md:40 +#: ../../blog/docs/spec.rst:42 msgid "" -"`/comment/`: This view will be used to add comments to a blogpost." +"``//comment/``: This view will be used to add comments to a " +"blogpost." msgstr "" -"`/comment/`: Використовуватиметься для додавання коментарів до " -"публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання " +"коментарів до публікації блогу." -#: ../../blog/docs/spec.md:42 -msgid "`/create/`: A post creation form." -msgstr "`/create/`: Форма для створення допису." +#: ../../blog/docs/spec.rst:44 +msgid "``/create/``: A post creation form." +msgstr "``/create/``: форма створення публікації." -#: ../../blog/docs/spec.md:44 -msgid "`//update/`: A view to update an existing post data." -msgstr "`//update/`: Сторінка для оновлення даних існуючого допису." +#: ../../blog/docs/spec.rst:45 +msgid "``//update/``: A view to update an existing post data." +msgstr "" +"``//update/``: перегляд для оновлення наявних даних публікації." -#: ../../blog/docs/spec.md:46 -msgid "`//delete/`: A view to confirm post deletion." -msgstr "`//delete/`: Підтверждення видалення допису." +#: ../../blog/docs/spec.rst:46 +msgid "``//delete/``: A view to confirm post deletion." +msgstr "" +"``//delete/``: перегляд для підтвердження видалення публікації." -#: ../../blog/docs/spec.md:48 -msgid "`/profile/`: A site user's personal page." -msgstr "`/profile/`: Персональна сторінка користувача." +#: ../../blog/docs/spec.rst:47 +msgid "``/profile//``: A site user’s personal page." +msgstr "``/profile//``: Персональна сторінка користувача." -#: ../../blog/docs/spec.md:50 +#: ../../blog/docs/spec.rst:48 msgid "" -"`/change_password/`: This route will be used to change users' credential " +"``/change_password/``: This route will be used to change users’ credential " "data." msgstr "" -"`/change_password/`: Ця сторінка використовуватиметься для зміни облікових " +"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " "даних користувачів." -#: ../../blog/docs/spec.md:52 -msgid "`/register/`: This view contains a user registration form." -msgstr "`/register/`: Сторінка з формою для реєстрації нового користувача." +#: ../../blog/docs/spec.rst:50 +msgid "``/register/``: This view contains a user registration form." +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../blog/docs/spec.md:54 -msgid "`/login/`: This view contains a login form." -msgstr "`/login/`: Сторінка з формою для логіна." +#: ../../blog/docs/spec.rst:51 +msgid "``/login/``: This view contains a login form." +msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../blog/docs/spec.md:56 +#: ../../blog/docs/spec.rst:52 msgid "" -"`/logout/`: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" -"`/logout/`: Логаут. Має перенаправляти користувача назад на домашню " +"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.md:61 +#: ../../blog/docs/spec.rst:56 msgid "Challenge: Data models" msgstr "Завдання: моделі даних" -#: ../../blog/docs/spec.md:64 +#: ../../blog/docs/spec.rst:58 msgid "You are to implement data models for the blog site." msgstr "Ви повинні реалізувати моделі даних для сайту блогу." -#: ../../blog/docs/spec.md:66 -msgid "The `auth.User` will be used as `user` model." -msgstr "`auth.User` використовуватиметься як модель `user`." +#: ../../blog/docs/spec.rst:60 +msgid "The ``auth.User`` will be used as ``user`` model." +msgstr "``auth.User`` використовуватиметься як модель ``user``." -#: ../../blog/docs/spec.md:68 +#: ../../blog/docs/spec.rst:62 msgid "" -"`post.slug` value should be autogenerated when a record is created or " +"``post.slug`` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" -"Значення `post.slug` має автоматично генеруватися під час створення або " +"Значення ``post.slug`` має автоматично генеруватися під час створення або " "оновлення запису та слідувати шаблону:" -#: ../../blog/docs/spec.md:75 +#: ../../blog/docs/spec.rst:69 msgid "" -"User preferred topics should be marked with a `notify` flag. This value " -"should be `True` by default." +"User preferred topics should be marked with a ``notify`` flag. This value " +"should be ``True`` by default." msgstr "" -"Вибрані користувачем теми мають бути позначені прапорцем `notify`. За " -"замовчуванням це значення має бути `True`." +"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " +"замовчуванням це значення має бути ``True``." -#: ../../blog/docs/spec.md:108 +#: ../../blog/docs/spec.rst:102 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../blog/docs/spec.md:111 +#: ../../blog/docs/spec.rst:104 msgid "" "Update existing views to represent entities that are actually stored inside " -"the project's database." +"the project’s database." msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " +"базі даних проекту." -#: ../../blog/docs/spec.md:114 -msgid "`/blogs/` or `/`: should represent a list of existing blogposts." +#: ../../blog/docs/spec.rst:107 +msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." msgstr "" -"`/blogs/` або `/`: має представляти список існуючих публікацій у блозі." +"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." -#: ../../blog/docs/spec.md:116 -msgid "`//`: should represent a single existing blogpost." -msgstr "`//`: має представляти одну наявну публікацію в блозі." +#: ../../blog/docs/spec.rst:108 +msgid "``//``: should represent a single existing blogpost." +msgstr "``//``: має представляти одну наявну публікацію в блозі." -#: ../../blog/docs/spec.md:118 +#: ../../blog/docs/spec.rst:109 msgid "" -"`/profile/`: should contain information about user and a list of " -"posts authored by this user." +"``/profile//``: should contain information about user and a " +"list of posts authored by this user." msgstr "" -"`/profile/`: має містити інформацію про користувача та список " -"публікацій, автором яких є цей користувач." +"``/profile//``: має містити інформацію про користувача та " +"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.md:121 +#: ../../blog/docs/spec.rst:111 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise `Http404` in case entity couldn't be fetched." +"*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " "*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " "не вдалося отримати." -#: ../../blog/docs/spec.md:126 +#: ../../blog/docs/spec.rst:116 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.md:129 +#: ../../blog/docs/spec.rst:118 msgid "" -"It's time to work with data representations. You're to add HTML template to " +"It’s time to work with data representations. You’re to add HTML template to " "the blog site project. Keep templates together with appropriate " -"applications, we don't need mess in project files." +"applications, we don’t need mess in project files." msgstr "" "Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" "шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " "додатками, нам не потрібен безлад у файлах проекту." -#: ../../blog/docs/spec.md:134 +#: ../../blog/docs/spec.rst:122 msgid "Application-level templates should be extended from the base one." msgstr "Шаблони прикладного рівня повинні бути розширені з базового." -#: ../../blog/docs/spec.md:135 +#: ../../blog/docs/spec.rst:123 msgid "" "Each page should contain a navbar at the top. Navbar will contain permalinks " "to the home and about pages." @@ -247,149 +246,153 @@ msgstr "" "Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " "міститиме постійні посилання на домашню сторінку та сторінку про." -#: ../../blog/docs/spec.md:137 +#: ../../blog/docs/spec.rst:125 msgid "" -"For anonymous users `/register/` and `/login/` links should be visible in " -"navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання `/register/` та `/login/` мають бути " -"видимими на навігаційній панелі." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." -#: ../../blog/docs/spec.md:139 +#: ../../blog/docs/spec.rst:127 msgid "" -"For authenticated users `/logout/` and `/create/` links should be visible in " -"navbar." +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." msgstr "" -"Для автентифікованих користувачів посилання `/logout/` і `/create/` мають " -"бути видимими на навігаційній панелі." +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.md:141 +#: ../../blog/docs/spec.rst:129 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.md:142 +#: ../../blog/docs/spec.rst:131 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../blog/docs/spec.md:143 +#: ../../blog/docs/spec.rst:133 msgid "" -"For the `post_list.html` each post entity should provide the information:" +"For the ``post_list.html`` each post entity should provide the information:" msgstr "" -"Для `post_list.html` кожна сутність повідомлення повинна надавати інформацію:" +"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" -#: ../../blog/docs/spec.md:144 +#: ../../blog/docs/spec.rst:136 msgid "title (each word should be capitalized)" msgstr "назва (кожне слово має бути великим)" -#: ../../blog/docs/spec.md:145 +#: ../../blog/docs/spec.rst:137 msgid "creation date" msgstr "дата створення" -#: ../../blog/docs/spec.md:146 +#: ../../blog/docs/spec.rst:138 msgid "list of related topics (first 3 topics)" msgstr "список пов'язаних тем (перші 3 теми)" -#: ../../blog/docs/spec.md:147 +#: ../../blog/docs/spec.rst:139 msgid "trimmed content (~50 words or fewer)" msgstr "обрізаний вміст (~50 слів або менше)" -#: ../../blog/docs/spec.md:148 +#: ../../blog/docs/spec.rst:140 msgid "number of comments" msgstr "кількість коментарів" -#: ../../blog/docs/spec.md:149 +#: ../../blog/docs/spec.rst:142 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" "Кожна сутність публікації в поданні списку має бути посиланням на відповідну " "публікацію." -#: ../../blog/docs/spec.md:150 -msgid "Detail view should contain links to `/update/` and `/delete/`." -msgstr "Детальний перегляд має містити посилання на `/update/` та `/update/`." +#: ../../blog/docs/spec.rst:144 +msgid "Detail view should contain links to ``/update/`` and ``/delete/``." +msgstr "" +"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." -#: ../../blog/docs/spec.md:151 +#: ../../blog/docs/spec.rst:145 msgid "Detail view should contain a list of post related comments." msgstr "" "Подання деталей має містити список коментарів, пов'язаних із публікацією." -#: ../../blog/docs/spec.md:152 +#: ../../blog/docs/spec.rst:146 msgid "" -"Auth views should use `register.html` and `login.html` with corresponding " -"forms." +"Auth views should use ``register.html`` and ``login.html`` with " +"corresponding forms." msgstr "" -"Подання авторизації повинні використовувати `register.html` і `login.html` з " -"відповідними формами." +"Подання авторизації повинні використовувати ``register.html`` і ``login." +"html`` з відповідними формами." -#: ../../blog/docs/spec.md:155 +#: ../../blog/docs/spec.rst:149 msgid "" -"For now, it's ok to use admin as \"test user\". Authentication system will " -"be implemented in the future challenges. `user` object is available (by " -"default) in any template context. To test anonymous access you can use `usar." -"is_authenticated`, which returns `False` for non-authenticated users." +"For now, it’s ok to use admin as “test user”. Authentication system will be " +"implemented in the future challenges. ``user`` object is available (by " +"default) in any template context. To test anonymous access you can use " +"``user.is_authenticated``, which returns ``False`` for non-authenticated " +"users." msgstr "" -"Наразі можна використовувати адміністратора як \"тестового користувача\". " -"Система автентифікації буде впроваджена в майбутніх викликах. Об'єкт `user` " -"доступний (за замовчуванням) у будь-якому контексті шаблону. перевірте " -"анонімний доступ, ви можете використовувати `usar.is_authenticated`, який " -"повертає `False` для неавтентифікованих користувачів." +"Наразі можна використовувати адміністратора як «тестового користувача». " +"Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " +"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " +"Щоб перевірити анонімний доступ, ви можете використовувати ``user." +"is_authenticated``, який повертає ``False`` для неавтентифікованих " +"користувачів." -#: ../../blog/docs/spec.md:162 +#: ../../blog/docs/spec.rst:156 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.md:165 +#: ../../blog/docs/spec.rst:158 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.md:166 -msgid "`username`" -msgstr "`username`" +#: ../../blog/docs/spec.rst:160 +msgid "``username``" +msgstr "``username``" -#: ../../blog/docs/spec.md:167 -msgid "`email`" -msgstr "`email`" +#: ../../blog/docs/spec.rst:161 +msgid "``email``" +msgstr "``email``" -#: ../../blog/docs/spec.md:168 -msgid "`password`" -msgstr "`password`" +#: ../../blog/docs/spec.rst:162 +msgid "``password``" +msgstr "``password``" -#: ../../blog/docs/spec.md:169 -msgid "`confirm password`" -msgstr "`confirm password`" +#: ../../blog/docs/spec.rst:163 +msgid "``confirm password``" +msgstr "``confirm password``" -#: ../../blog/docs/spec.md:170 -msgid "`username` value should be validated against existing values" +#: ../../blog/docs/spec.rst:165 +msgid "``username`` value should be validated against existing values" msgstr "" -"значення `username` має перевірятися на відповідність існуючим значенням" +"Значення \"ім'я користувача\" має перевірятися на відповідність існуючим " +"значенням" -#: ../../blog/docs/spec.md:171 -msgid "`password` and `confirm password` values should match" -msgstr "значення `password` і `confirm password` мають збігатися" +#: ../../blog/docs/spec.rst:166 +msgid "``password`` and ``confirm password`` values should match" +msgstr "Значення ``password`` і ``confirm password`` мають збігатися" -#: ../../blog/docs/spec.md:172 +#: ../../blog/docs/spec.rst:167 msgid "Create form for existing users login" msgstr "Створити форму для входу існуючих користувачів" -#: ../../blog/docs/spec.md:173 +#: ../../blog/docs/spec.rst:168 msgid "Validations errors are to be rendered on the template" msgstr "Помилки перевірки мають бути відображені в шаблоні" -#: ../../blog/docs/spec.md:175 +#: ../../blog/docs/spec.rst:171 msgid "Challenge: Blogpost Creation and Update" msgstr "Завдання: Створення та Оновлення Дописів" -#: ../../blog/docs/spec.md:178 +#: ../../blog/docs/spec.rst:173 msgid "Create a form to work with the blogpost model." msgstr "Створіть форму для роботи з моделлю допису." -#: ../../blog/docs/spec.md:179 +#: ../../blog/docs/spec.rst:174 msgid "" "Create a form to gather a comment from a user. Form should be used within a " "\"post detail\" view." @@ -397,138 +400,140 @@ msgstr "" "Створіть форму для збору коментарів від користувача. Форму слід " "використовувати в перегляді \"подробиць публікації\"." -#: ../../blog/docs/spec.md:181 +#: ../../blog/docs/spec.rst:176 msgid "Form should be used for *create* and *update* view." msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." -#: ../../blog/docs/spec.md:183 -msgid "It's ok to use a *pre-defined* user as a post's author for now." +#: ../../blog/docs/spec.rst:178 +msgid "It’s ok to use a *pre-defined* user as a post’s author for now." msgstr "" -"Поки що можна використовувати попередньо визначеного користувача як автора " -"допису." +"Наразі можна використовувати *попередньо визначеного* користувача як автора " +"публікації." -#: ../../blog/docs/spec.md:187 +#: ../../blog/docs/spec.rst:181 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.md:190 +#: ../../blog/docs/spec.rst:183 msgid "" -"`/register/`: Users should provide all required information about them: " +"``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " "After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" -"`/register/`: користувачі повинні надати всю необхідну інформацію про себе: " -"бажане ім'я користувача та електронну пошту. Дані імені (як ім'я, так і " -"останнє) є необов'язковими. Після створення користувача вони повинні бути " -"перенаправлені на сторінку входу для виконання процес автентифікації. " -"Недійсна форма повинна надавати інформацію про \" \"помилку(и)." +"``/register/``: користувачі повинні надати всю необхідну інформацію про " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім’я та " +"прізвище) необов’язкові. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процесу автентифікації. " +"Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.md:195 +#: ../../blog/docs/spec.rst:188 msgid "" -"`/login/`: Users should provide their credentials to login. In case login is " -"successful they should be redirected to their profile (if no `next=url` " -"query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"`/login/`: користувачі повинні надати свої облікові дані для входу. Якщо " -"вхід буде успішним, вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту `next=url`)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.md:199 +#: ../../blog/docs/spec.rst:191 msgid "" -"`/create/`: Only authenticated users should be able to visit this page. In " +"``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " "to the login view first, and after successful authentication get back to " "post creation. Then a post is created, it should be authored by the " "currently authenticated user." msgstr "" -"`/create/`: Лише автентифіковані користувачі повинні мати змогу відвідувати " -"цю сторінку. У випадку, якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, його слід спочатку переспрямувати до перегляду входу, " -"а після успішної автентифікації повернутися до створення допису. Потім " -"створюється допис, автором якого має бути наразі автентифікований користувач." +"``/create/``: лише автентифіковані користувачі повинні мати змогу " +"відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " +"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " +"входу, а після успішної автентифікації повернутися до створення публікації. " +"Потім створюється допис, автором якого має бути поточний автентифікований " +"користувач." -#: ../../blog/docs/spec.md:205 +#: ../../blog/docs/spec.rst:196 msgid "" -"`//comment`: Currently authenticated user should be referenced as a " -"comment's author." +"``//comment``: Currently authenticated user should be referenced " +"as a comment’s author." msgstr "" -"`//comment`: наразі автентифікований користувач має вказуватися як " -"автор коментаря." +"``//comment``: як автора коментаря має бути вказано поточного " +"автентифікованого користувача." -#: ../../blog/docs/spec.md:207 +#: ../../blog/docs/spec.rst:198 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" "Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." -#: ../../blog/docs/spec.md:211 +#: ../../blog/docs/spec.rst:202 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.md:214 +#: ../../blog/docs/spec.rst:204 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.md:215 +#: ../../blog/docs/spec.rst:205 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.md:217 -msgid "It's ok to use Django built-in views for auth." -msgstr "Використовувати вбудовані представлення Django для авторизації можна." +#: ../../blog/docs/spec.rst:207 +msgid "It’s ok to use Django built-in views for auth." +msgstr "" +"Для автентифікації можна використовувати вбудовані представлення Django." -#: ../../blog/docs/spec.md:226 +#: ../../blog/docs/spec.rst:210 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.md:229 +#: ../../blog/docs/spec.rst:212 msgid "Create serializers for:" msgstr "Створіть серіалізатори для:" -#: ../../blog/docs/spec.md:230 +#: ../../blog/docs/spec.rst:214 msgid "Blogpost entity" msgstr "Об'єкт публікації в блозі" -#: ../../blog/docs/spec.md:231 +#: ../../blog/docs/spec.rst:215 msgid "Blogpost comment" msgstr "Коментар у блозі" -#: ../../blog/docs/spec.md:232 +#: ../../blog/docs/spec.rst:216 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.md:236 +#: ../../blog/docs/spec.rst:219 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.md:239 +#: ../../blog/docs/spec.rst:221 msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to use " -"*pre-defined* user as a post's author for now." +"All blog-site functionality are to be reflected via REST API. It’s ok to use " +"*pre-defined* user as a post’s author for now." msgstr "" -"Усі функції сайту блогу мають бути відображені через REST API. Наразі можна " -"використовувати попередньо визначеного користувача як автора публікації." +"Усі функції сайту блогу мають відображатися через REST API. Наразі можна " +"використовувати *попередньо визначеного* користувача як автора публікації." -#: ../../blog/docs/spec.md:244 +#: ../../blog/docs/spec.rst:225 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.md:247 +#: ../../blog/docs/spec.rst:227 msgid "Implement REST authentication system." msgstr "Запровадити систему автентифікації REST." -#: ../../blog/docs/spec.md:248 +#: ../../blog/docs/spec.rst:228 msgid "Only account owner can change their account data." msgstr "" "Лише власник облікового запису може змінити дані свого облікового запису." -#: ../../blog/docs/spec.md:249 +#: ../../blog/docs/spec.rst:229 msgid "Only authenticated users can create posts and comments." msgstr "" "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." -#: ../../blog/docs/spec.md:250 +#: ../../blog/docs/spec.rst:230 msgid "Only authors can change their posts." msgstr "Тільки автори можуть змінювати свої повідомлення." @@ -639,8 +644,8 @@ msgstr "" "значення атрибута ``unit``." #: ../../problem-sets/src/conv_store/challenge.rst:46 -msgid "Code notes" -msgstr "Примітки до коду" +msgid "Code explanation" +msgstr "Пояснення коду" #: conv_store.models.Product:1 of msgid "Product model implementation" @@ -1018,10 +1023,6 @@ msgstr "" "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:251 -msgid "At least 50% coverage." -msgstr "Хоча б 50% покриття тестами." - -#: ../../problem-sets/src/conv_store/challenge.rst:252 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." @@ -2092,3 +2093,19 @@ msgstr "" #: ../../problem-sets/src/wrw_game/challenge.rst:202 msgid "Create game menu, for example: ::" msgstr "Створити меню гри, наприклад: ::" + +#~ msgid "" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" +#~ msgstr "" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" + +#~ msgid "" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#~ msgstr "" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" + +#~ msgid "Code notes" +#~ msgstr "Примітки до коду" + +#~ msgid "At least 50% coverage." +#~ msgstr "Хоча б 50% покриття тестами." diff --git a/src/appx/blog.md b/src/appx/blog.md deleted file mode 100644 index 835e1d15f..000000000 --- a/src/appx/blog.md +++ /dev/null @@ -1,2 +0,0 @@ -```{include} /../blog/docs/spec.md -``` diff --git a/src/appx/blog.txt b/src/appx/blog.txt new file mode 100644 index 000000000..d2c1bd5b1 --- /dev/null +++ b/src/appx/blog.txt @@ -0,0 +1 @@ +.. include:: /../blog/docs/spec.rst From e629dbef92559305f7f3f14664b7d6157d259f08 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 17:59:50 +0300 Subject: [PATCH 296/689] Applied fixes: #48, #49 Signed-off-by: Serhii Horodilov --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 171 ++++++++++++++++++---------- 2 files changed, 114 insertions(+), 59 deletions(-) diff --git a/problem-sets b/problem-sets index d0b5a7412..aca9b8b8b 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit d0b5a74121c75af4e15e4ef83385d833b60e970c +Subproject commit aca9b8b8b48d5739c363ea286704cd562835944d diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index aa064a8bb..224a8f72e 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-09 01:18+0300\n" -"PO-Revision-Date: 2023-04-09 01:33+0300\n" +"POT-Creation-Date: 2023-04-10 17:46+0300\n" +"PO-Revision-Date: 2023-04-10 17:59+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -30,9 +30,9 @@ msgid "" "As a developer you were asked to create a simple blog site. The goal is to " "create a place on the Internet where users can share their stories to public." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - \" " -"\"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " -"історіями з громадськістю." +"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " +"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " +"громадськістю." #: ../../blog/docs/spec.rst:16 msgid "" @@ -644,6 +644,7 @@ msgstr "" "значення атрибута ``unit``." #: ../../problem-sets/src/conv_store/challenge.rst:46 +#: ../../problem-sets/src/conv_store/challenge.rst:77 msgid "Code explanation" msgstr "Пояснення коду" @@ -655,7 +656,7 @@ msgstr "Реалізація моделі товару" msgid "Instances of this class represent a product available for purchase." msgstr "Цей клас представляє товари, які можна придбати в магазині." -#: conv_store.models.Product of +#: conv_store.models.Product conv_store.models.ShoppingCart of msgid "Variables" msgstr "Змінні" @@ -665,11 +666,11 @@ msgstr "назва товару" #: conv_store.models.Product:7 of msgid "the price for a single product unit" -msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" +msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" #: conv_store.models.Product:9 of msgid "the size of a single product unit" -msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" +msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" #: conv_store.models.Product.get_total:1 of msgid "Return the total price for a specified amount of a product" @@ -683,7 +684,8 @@ msgstr "" "Якщо аргумент кількості пропущено, замість нього слід використовувати " "значення атрибута одиниці." -#: conv_store.models.Product.get_total of +#: conv_store.models.Product.get_total +#: conv_store.models.ShoppingCart.add_product of msgid "Parameters" msgstr "Параметри" @@ -691,23 +693,25 @@ msgstr "Параметри" msgid "a quantity to purchase, defaults to None" msgstr "кількість для покупки, за замовчуванням None" -#: conv_store.models.Product.get_total of +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of msgid "Returns" msgstr "Повертає" #: conv_store.models.Product.get_total:9 of msgid "total price for a specified amount of a product" -msgstr "загальна ціна за вказану кількість товару" +msgstr "вартість вказаної кількості товару" -#: conv_store.models.Product.get_total of +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of msgid "Return type" msgstr "Тип повернення" #: ../../problem-sets/src/conv_store/challenge.rst:51 -#: ../../problem-sets/src/conv_store/challenge.rst:78 -#: ../../problem-sets/src/conv_store/challenge.rst:122 -#: ../../problem-sets/src/conv_store/challenge.rst:185 -#: ../../problem-sets/src/conv_store/challenge.rst:220 +#: ../../problem-sets/src/conv_store/challenge.rst:82 +#: ../../problem-sets/src/conv_store/challenge.rst:126 +#: ../../problem-sets/src/conv_store/challenge.rst:189 +#: ../../problem-sets/src/conv_store/challenge.rst:224 msgid "Test cases" msgstr "Тестові приклади" @@ -750,11 +754,62 @@ msgstr "" "``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " "загальної ціни всього вмісту кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:93 +#: conv_store.models.ShoppingCart:1 of +msgid "Shopping cart model implementation" +msgstr "Реалізація моделі кошика" + +#: conv_store.models.ShoppingCart:3 of +msgid "" +"In general shopping cart is a container for products. Instances of this " +"class handle product and corresponding quantity for each item inside a " +"shopping cart instance." +msgstr "" +"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " +"класу обробляють продукт і відповідну кількість для кожного товару в " +"екземплярі кошика для покупок." + +#: conv_store.models.ShoppingCart:7 of +msgid "product appended to the shopping cart instance" +msgstr "товар, доданий до екземпляра кошика" + +#: conv_store.models.ShoppingCart:9 of +msgid "corresponding quantities for each product in cart" +msgstr "відповідна кількість для товару у кошику" + +#: conv_store.models.ShoppingCart.add_product:1 of +msgid "Add product to the shopping cart" +msgstr "Додає товар до кошика" + +#: conv_store.models.ShoppingCart.add_product:3 of +msgid "" +"This method adds a product instance and corresponding quantity value to the " +"cart." +msgstr "" +"Цей метод додає екземпляр продукту та відповідне значення кількості до " +"кошика." + +#: conv_store.models.ShoppingCart.add_product:6 of +msgid "a product instance to add to cart" +msgstr "екземпляр товару, щоб додати до кошика" + +#: conv_store.models.ShoppingCart.add_product:8 of +msgid "a quantity of a product to add. Defaults to the product unit value." +msgstr "" +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." + +#: conv_store.models.ShoppingCart.get_total:1 of +msgid "Return the total price for all the product in the cart" +msgstr "Повертає загальну вартість усіх товарів у кошику" + +#: conv_store.models.ShoppingCart.get_total:3 of +msgid "total cart price" +msgstr "загальна вартість кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:97 msgid "Initialization, Representation and Type Casting" msgstr "Ініціалізація, представлення та приведення типів" -#: ../../problem-sets/src/conv_store/challenge.rst:95 +#: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" "It's difficult to set properties one-by-one, also it's not informative to " "get default objects string representations. It's time to fix this." @@ -763,13 +818,13 @@ msgstr "" "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " "Настав час це виправити." -#: ../../problem-sets/src/conv_store/challenge.rst:98 +#: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" "``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " "за замовчуванням." -#: ../../problem-sets/src/conv_store/challenge.rst:99 +#: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" "Apply ``ShoppingCart.__init__`` to separate products and quantities between " "different carts." @@ -777,19 +832,19 @@ msgstr "" "Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " "між різними візками." -#: ../../problem-sets/src/conv_store/challenge.rst:101 +#: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" msgstr "Надайте представлення, зрозумілі людині. Наприклад:" -#: ../../problem-sets/src/conv_store/challenge.rst:103 +#: ../../problem-sets/src/conv_store/challenge.rst:107 msgid "``Product('juice', 35.66, 1)``" msgstr "``Product('juice', 35.66, 1)``" -#: ../../problem-sets/src/conv_store/challenge.rst:104 +#: ../../problem-sets/src/conv_store/challenge.rst:108 msgid "````" msgstr "````" -#: ../../problem-sets/src/conv_store/challenge.rst:106 +#: ../../problem-sets/src/conv_store/challenge.rst:110 msgid "" "While casting product instance to ``str`` type it should be equal to its " "``name`` attribute value." @@ -797,7 +852,7 @@ msgstr "" "Під час приведення екземпляра продукту до типу ``str`` він повинен " "дорівнювати значенню атрибута ``name``." -#: ../../problem-sets/src/conv_store/challenge.rst:108 +#: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" "While casting product instance to ``float`` type it should be equal to its " "``price`` attribute value." @@ -805,7 +860,7 @@ msgstr "" "Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " "значенню його атрибута ``price``." -#: ../../problem-sets/src/conv_store/challenge.rst:110 +#: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" "While casting shopping cart instance to ``float`` type it should be equal to " "its total price value." @@ -813,7 +868,7 @@ msgstr "" "Під час приведення екземпляра кошика для покупок до типу ``float`` він має " "дорівнювати загальному значенню ціни." -#: ../../problem-sets/src/conv_store/challenge.rst:112 +#: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" "While casting shopping cart instance to ``bool`` consider it ``True`` if at " "least one product is attach to current cart." @@ -821,24 +876,24 @@ msgstr "" "Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " "``True``, якщо принаймні один продукт приєднаний до поточного кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:115 +#: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" -#: ../../problem-sets/src/conv_store/challenge.rst:117 +#: ../../problem-sets/src/conv_store/challenge.rst:121 msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:118 +#: ../../problem-sets/src/conv_store/challenge.rst:122 msgid "" "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" -#: ../../problem-sets/src/conv_store/challenge.rst:144 +#: ../../problem-sets/src/conv_store/challenge.rst:148 msgid "Payment Processors" msgstr "Опрацювання платежів" -#: ../../problem-sets/src/conv_store/challenge.rst:146 +#: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" "The owner asked you to implement a flexible payment system. Purchasing the " "shopping card consists of several steps:" @@ -846,19 +901,19 @@ msgstr "" "Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " "покупок складається з кількох кроків:" -#: ../../problem-sets/src/conv_store/challenge.rst:149 +#: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" -#: ../../problem-sets/src/conv_store/challenge.rst:150 +#: ../../problem-sets/src/conv_store/challenge.rst:154 msgid "payment validation - various payment types requires various validations" msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" -#: ../../problem-sets/src/conv_store/challenge.rst:151 +#: ../../problem-sets/src/conv_store/challenge.rst:155 msgid "purchasing the cart" msgstr "купівля кошика" -#: ../../problem-sets/src/conv_store/challenge.rst:153 +#: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" "For now there are two payment types available in the store: cash and credit " "card, but they maybe extended at any time." @@ -866,7 +921,7 @@ msgstr "" "Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " "їх можна продовжити в будь-який час." -#: ../../problem-sets/src/conv_store/challenge.rst:156 +#: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" "Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " "property *protected*, since it should not be accessed outside the card " @@ -876,7 +931,7 @@ msgstr "" "властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " "картки." -#: ../../problem-sets/src/conv_store/challenge.rst:159 +#: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " "arguments and return a value of a boolean type. This is an abstract class " @@ -886,7 +941,7 @@ msgstr "" "аргументів і повертає значення логічного типу. Це абстрактний клас для " "майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:162 +#: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" "Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " "``ShoppingCart`` object and returns nothing. This is an abstract class for " @@ -896,7 +951,7 @@ msgstr "" "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " "майбутнього використання." -#: ../../problem-sets/src/conv_store/challenge.rst:165 +#: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" "Inherit ``CashPaymentValidator`` from the base validator. The instances of " "this class are considered to be always valid." @@ -904,17 +959,17 @@ msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." -#: ../../problem-sets/src/conv_store/challenge.rst:167 +#: ../../problem-sets/src/conv_store/challenge.rst:171 msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." -#: ../../problem-sets/src/conv_store/challenge.rst:169 +#: ../../problem-sets/src/conv_store/challenge.rst:173 msgid "" "The instances of this class are created with ``security_code`` argument." msgstr "" "Екземпляри цього класу створено за допомогою аргументу ``security_code``." -#: ../../problem-sets/src/conv_store/challenge.rst:170 +#: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" "``is_valid`` method should ask a customer for a security code and check it " "against the stored value. In case codes are equal payment considered to be " @@ -923,7 +978,7 @@ msgstr "" "Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " "збереженим значенням. Якщо коди однакові, оплата вважається дійсною." -#: ../../problem-sets/src/conv_store/challenge.rst:174 +#: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " @@ -935,7 +990,7 @@ msgstr "" "\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " "слід роздрукувати." -#: ../../problem-sets/src/conv_store/challenge.rst:179 +#: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" "Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " @@ -946,15 +1001,15 @@ msgstr "" "і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " "повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." -#: ../../problem-sets/src/conv_store/challenge.rst:199 +#: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" msgstr "Більше покращень для кошиків для покупок" -#: ../../problem-sets/src/conv_store/challenge.rst:201 +#: ../../problem-sets/src/conv_store/challenge.rst:205 msgid "Make your ``ShoppingCart`` an actual container" msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" -#: ../../problem-sets/src/conv_store/challenge.rst:203 +#: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" "Implement ``len(cart_obj)`` and make it return the number of products in the " "cart." @@ -962,7 +1017,7 @@ msgstr "" "Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " "кошику." -#: ../../problem-sets/src/conv_store/challenge.rst:205 +#: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" "Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " "corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." @@ -971,7 +1026,7 @@ msgstr "" "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " "float]]``)." -#: ../../problem-sets/src/conv_store/challenge.rst:209 +#: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" "Make your ``ShoppingCart`` iterable - let it provide the product instance " "and corresponding quantity for each iteration." @@ -979,7 +1034,7 @@ msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." -#: ../../problem-sets/src/conv_store/challenge.rst:211 +#: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" "Avoid products duplication. In case someone tries to put the product into a " "cart and this product already is present there, do not it for the second " @@ -989,7 +1044,7 @@ msgstr "" "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " "натомість відповідне значення кількості." -#: ../../problem-sets/src/conv_store/challenge.rst:214 +#: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" "Implement ``remove_product`` method to completely remove some product from " "the cart." @@ -997,7 +1052,7 @@ msgstr "" "Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " "кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:216 +#: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" "Implement ``sub_product`` to decrease some product quantity. If quantity is " "equal to 0 (zero) or less - remove product from the cart." @@ -1005,24 +1060,24 @@ msgstr "" "Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " "дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." -#: ../../problem-sets/src/conv_store/challenge.rst:245 +#: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" msgstr "Тестування програмного забезпечення" -#: ../../problem-sets/src/conv_store/challenge.rst:247 +#: ../../problem-sets/src/conv_store/challenge.rst:251 msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." -#: ../../problem-sets/src/conv_store/challenge.rst:249 +#: ../../problem-sets/src/conv_store/challenge.rst:253 msgid "Tests should be located inside of \"tests\" directory." msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." -#: ../../problem-sets/src/conv_store/challenge.rst:250 +#: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." msgstr "" "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." -#: ../../problem-sets/src/conv_store/challenge.rst:251 +#: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." From cfb4c89af117e185297cb5254c7c4a5d0f9ac797 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 16:21:44 +0300 Subject: [PATCH 297/689] Added base "Exceptions" materials Signed-off-by: Serhii Horodilov --- src/basics/exceptions.txt | 241 ++++++++++++++++++++++++++++++++++++++ src/refs.bib | 17 ++- 2 files changed, 254 insertions(+), 4 deletions(-) diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 2d5056873..498fa6666 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -1,3 +1,244 @@ +.. _built-in exceptions: + https://docs.python.org/library/exceptions.html#bltin-exceptions + ******************************************************************************* Errors and Exceptions ******************************************************************************* + +There are (at least) two distinguishable kinds of errors: +*syntax errors* and *exceptions* :cite:`docs-python:errors`. + +Syntax errors +============= + +Syntax errors are also known as parsing errors. + +.. code-block:: python + + >>> while True print("the loop is running...") + File "", line 1 + while True print('the loop is running...') + ^^^^^ + SyntaxError: invalid syntax + +The parser repeats the offending line and displays a little ‘arrow’ pointing at +the earliest point in the line where the error was detected. The error is +caused by (or at least detected at) the token preceding the arrow. + +Exceptions +========== + +Even if a statement or expression is syntactically correct, it may cause an +error when an attempt is made to execute it. Errors detected during execution +are called exceptions and are not unconditionally fatal: you will soon learn +how to handle them in Python programs. + +Exceptions come in different types, and the type is printed as part of +the message. + +For example, the ``div`` function implemented as + +.. code-block:: python + + def div(x: Union[int, float], y: Union[int, float]) -> float: + """Return the result of dividing `x` by `y`.""" + + return x / y + +may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` +parameter. + +Standard exception names are built-in identifiers (not reserved keywords). + +.. seealso:: The list of `built-in exceptions`_ + +Tracebacks +========== + +.. note:: "File" is replaced with a *dummy string* within the example above. + +Let's assume the following modules structure: + +:: + + / + |-- main.py + |-- func.py + +The **main** module imports a ``div`` function implemented above from the +**func** module. The code in main is implemented as follows: + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + print(f"{x = }, {y = } -> {div(x, y) = }") + +While running the code with correct inputs it will work fine. But there are +at two exceptions for this script. + +The first one is related on type conversion. While running the main script +there is case of invalid input. + +:: + + Please enter a number: 100 + Please enter a number: one + Traceback (most recent call last): + File "path/to/module.py", line 5, in + y = int(input("Please enter a number: ")) + ValueError: invalid literal for int() with base 10: 'one' + +Note the **traceback** indicates the module and the exact line of code that +causes the exception. + +The second one exception occurs when a 0 is passed as the second parameter to +``div`` function. The traceback would look like: + +:: + + Please enter a number: 100 + Please enter a number: 0 + Traceback (most recent call last): + File "path/to/main.py", line 6, in + print(f"{x = }, {y = } -> {div(x, y) = }") + File "path/to/func.py", line 11, in div + return x / y + ZeroDivisionError: division by zero + +The traceback indicates all calls (top to bottom) that cause an exception. + +Exception handling +================== + +It is possible to write programs that handle selected exceptions. +The ``try`` statement is used to do that. + +The try statement works as follows. + +#. First, the try clause (the statement(s) between the try and except + keywords) is executed. +#. If no exception occurs, the except clause is skipped and execution of + the try statement is finished. +#. If an exception occurs during execution of the try clause, the rest of + the clause is skipped. Then, if its type matches the exception named after + the except keyword, the except clause is executed, and then execution + continues after the try/except block. +#. If an exception occurs which does not match the exception named in + the except clause, it is passed on to outer try statements; if no handler + is found, it is an unhandled exception and execution stops with a message + as shown above. + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + try: + print(f"{x = }, {y = } -> {div(x, y) = }") + except: + print("An exception occurs") + +A try statement may have more than one except clause, to specify handlers for +different exceptions. + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + try: + print(f"{x = }, {y = } -> {div(x, y) = }") + except (ValueError, ZeroDivisionError): + print("An exception occurs") + +.. code-block:: python + + from func import div + + if __name__ == "__main__": + x = int(input("Please enter a number: ")) + y = int(input("Please enter a number: ")) + try: + print(f"{x = }, {y = } -> {div(x, y) = }") + except ValueError as exc: + print(f"Value cannot be converted, {exc}") + except ZeroDivisionError: + print(f"Zero division error: {y = }") + +All exceptions +-------------- + +It's a bad practice to handle **all** exceptions. + +When indicating an ``except`` block without specifying an exception to catch it +will work for any exception, that occurs in ``try`` block. The same is relevant +for handling ``BaseException`` and ``Exception``. + +:: + + except: + ... + + except (BaseException, Exception): + ... + + except Exception: + ... + +All exceptions are inherited from ``Exception`` class, which is subclass of +``BaseException``. So, you can never know what exactly goes wrong with your +code. + +``finally`` statement +--------------------- + +The ``try`` statement cannot be used itself. This will cause ``SyntaxError``. +Either ``except`` or ``finally`` block is required to be included. + +While the ``except`` block tries to catch the exceptions if any, +the ``finally`` block will be always executed regardless of the exception +occurs. + +.. code-block:: python + + try: + ... # some code that may cause an exception + finally: + ... # this code will be always executed + + try: + result = 10 // 2 + except ZeroDivisionError: + print("zero division") + finally: + print("it's finished") + + try: + result = 10 // 0 + except ZeroDivisionError: + print("zero division") + finally: + print("it's finished") + +``else`` statement +------------------ + +.. todo: complete the block + +Raising exceptions +================== + +.. todo: complete the block + +Creating custom exceptions +========================== + +.. todo: complete the block diff --git a/src/refs.bib b/src/refs.bib index de0048798..468c010da 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -1,6 +1,10 @@ -******************************************************************************* -Python training course bibliography database -******************************************************************************* +############################################################################### +# Python training course bibliography database # +############################################################################### +# This document provides references to resources used during course creation. +# Most of them are online documentation from official resource and articles +# published at thematic sites. + @misc{docs-python, title = "{Python Documentation}", @@ -65,5 +69,10 @@ @misc{docs-python:printf-formatting @misc{docs-python:stdtypes, title = "{Python Documentation}", - url = {https://docs.python.org/library/stdtypes.html} + url = {https://docs.python.org/library/stdtypes.html}, } + +@misc{docs-python:errors, + title = "{Errors and Exceptions}", + url = {https://docs.python.org/3.11/tutorial/errors.html}, +} \ No newline at end of file From 6da2cc90a80907279224fa11d49e191fda082cec Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 18:07:00 +0300 Subject: [PATCH 298/689] Added `try/else` section Signed-off-by: Serhii Horodilov --- src/basics/exceptions.txt | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 498fa6666..8b395913e 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -231,7 +231,26 @@ occurs. ``else`` statement ------------------ -.. todo: complete the block +The ``try`` statement can also use ``else`` (which is optional). +The statements within this block will be execute only in case there were +no exceptions raised while running the ``try``. + +.. code-block:: python + + try: + result = 10 // 2 + except ZeroDivisionError: + print("zero division") + else: + print("no errors occurred") # this **WILL** be printed out + + try: + result = 10 // 0 + except ZeroDivisionError: + print("zero division") + else: + print("no errors occurred") # this **WILL NOT** be printed out + Raising exceptions ================== From d18730e94d5b94787d659fe94dc57523f3358827 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 18:21:30 +0300 Subject: [PATCH 299/689] Added raising and creating exception sections Signed-off-by: Serhii Horodilov --- src/basics/exceptions.txt | 56 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 8b395913e..bbb33f02c 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -255,9 +255,61 @@ no exceptions raised while running the ``try``. Raising exceptions ================== -.. todo: complete the block +The ``raise`` statement allows the programmer to force a specified exception +to occur. The sole argument to raise indicates the exception to be raised. +This must be either an exception instance or an exception class (a class that +derives from ``BaseException``, such as ``Exception`` or one of its +subclasses). If an exception class is passed, it will be implicitly +instantiated by calling its constructor with no arguments. + +.. code-block:: python + + raise NameError("name error") + raise NameError Creating custom exceptions ========================== -.. todo: complete the block +Programs may name their own exceptions by creating a new exception class. +Exceptions should typically be derived from the Exception class, either +directly or indirectly. + +Exception classes can be defined which do anything any other class can do, +but are usually kept simple, often only offering a number of attributes that +allow information about the error to be extracted by handlers for +the exception. + +Most exceptions are defined with names that end in “Error”, similar to the +naming of the standard exceptions. + +Many standard modules define their own exceptions to report errors that may +occur in functions they define. + +.. code-block:: python + :caption: User-define exception + + class InvalidInputError(Exception): + """This is a custom exception for demo needs""" + + + class NegativeError(ValueError): + """Raised when a negative value passed""" + + + def sum_positive(x: int, y: int) -> int: + """Return the sum of positive integers""" + + if x < 0 or y < 0: + raise NegativeError + + return x + y + + + try: + x = int(input("Enter number x: ")) + y = int(input("Enter number y: ")) + result = sum_positive(x, y) + except ValueError: + raise InvalidInputError("could not convert to integer") + except NegativeError: + print("this function works only with positive integers") From 5a2266707f181fed7e933728c1aa5426907a20a3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 10 Apr 2023 23:16:30 +0300 Subject: [PATCH 300/689] Applied fixes for translations and "exceptions" document Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/basics.po | 354 +++++++++++++++++++++++++- src/basics/exceptions.txt | 38 ++- src/basics/stdtypes.txt | 2 - 3 files changed, 378 insertions(+), 16 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index 8256b04f2..dde1e54aa 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 19:38+0300\n" -"PO-Revision-Date: 2023-04-08 19:40+0300\n" +"POT-Creation-Date: 2023-04-10 23:14+0300\n" +"PO-Revision-Date: 2023-04-10 23:14+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -25,10 +25,354 @@ msgstr "" msgid "Control Flow" msgstr "Керування виконанням" -#: ../../src/basics/exceptions.txt:3 +#: ../../src/basics/exceptions.txt:6 msgid "Errors and Exceptions" msgstr "Помилки та винятки" +#: ../../src/basics/exceptions.txt:8 +msgid "" +"There are (at least) two distinguishable kinds of errors: *syntax errors* " +"and *exceptions* :cite:`docs-python:errors`." +msgstr "" +"Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" +"cite:`docs-python:errors`." + +#: ../../src/basics/exceptions.txt:12 +msgid "Syntax errors" +msgstr "Синтаксичні помилки" + +#: ../../src/basics/exceptions.txt:14 +msgid "Syntax errors are also known as parsing errors." +msgstr "Синтаксичні помилки також відомі як помилки Python парсера." + +#: ../../src/basics/exceptions.txt:24 +msgid "" +"The parser repeats the offending line and displays a little \"arrow\" " +"pointing at the earliest point in the line where the error was detected. The " +"error is caused by (or at least detected at) the token preceding the arrow." +msgstr "" +"Синтаксичний аналізатор повторює неправильний рядок і відображає маленьку " +"\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " +"Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." + +#: ../../src/basics/exceptions.txt:29 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../src/basics/exceptions.txt:31 +msgid "" +"Even if a statement or expression is syntactically correct, it may cause an " +"error when an attempt is made to execute it. Errors detected during " +"execution are called exceptions and are not unconditionally fatal: you will " +"soon learn how to handle them in Python programs." +msgstr "" +"Навіть якщо оператор або вираз синтаксично правильний, це може спричинити " +"помилку під час спроби його виконання. Помилки, виявлені під час виконання, " +"називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " +"обробляти в програмах на Python." + +#: ../../src/basics/exceptions.txt:36 +msgid "" +"Exceptions come in different types, and the type is printed as part of the " +"message." +msgstr "" +"Винятки бувають різних типів, і тип друкується як частина повідомлення." + +#: ../../src/basics/exceptions.txt:39 +msgid "For example, the ``div`` function implemented as" +msgstr "Наприклад, функція ``div``, реалізована як" + +#: ../../src/basics/exceptions.txt:48 +msgid "" +"may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " +"parameter." +msgstr "" +"може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " +"``y``." + +#: ../../src/basics/exceptions.txt:51 +msgid "" +"Standard exception names are built-in identifiers (not reserved keywords)." +msgstr "" +"Стандартні назви винятків є вбудованими ідентифікаторами (а не " +"зарезервованими ключовими словами)." + +#: ../../src/basics/exceptions.txt:53 +msgid "The list of `built-in exceptions`_" +msgstr "Список `вбудованих винятків`_" + +#: ../../src/basics/exceptions.txt:56 +msgid "Tracebacks" +msgstr "Відстеження" + +#: ../../src/basics/exceptions.txt:58 +msgid "\"File\" is replaced with a *dummy string* within the examples." +msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." + +#: ../../src/basics/exceptions.txt:60 +msgid "Let's assume the following modules structure:" +msgstr "Припустимо наступну структуру модулів:" + +#: ../../src/basics/exceptions.txt:68 +msgid "" +"The **main** module imports a ``div`` function implemented above from the " +"**func** module. The code in main is implemented as follows:" +msgstr "" +"Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " +"**func**. Основний код реалізовано наступним чином:" + +#: ../../src/basics/exceptions.txt:80 +msgid "" +"While running the code with correct inputs it will work fine. But there are " +"at two exceptions for this script." +msgstr "" +"Під час виконання коду з правильними введеннями він працюватиме нормально. " +"Але для цього сценарію є два винятки." + +#: ../../src/basics/exceptions.txt:83 +msgid "" +"The first one is related on type conversion. While running the main script " +"there is case of invalid input." +msgstr "" +"Перший пов'язаний з перетворенням типів. Під час виконання основного " +"сценарію є випадок неправильного введення." + +#: ../../src/basics/exceptions.txt:95 +msgid "" +"Note the **traceback** indicates the module and the exact line of code that " +"causes the exception." +msgstr "" +"Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " +"викликає виняток." + +#: ../../src/basics/exceptions.txt:98 +msgid "" +"The second one exception occurs when a 0 is passed as the second parameter " +"to ``div`` function. The traceback would look like:" +msgstr "" +"Другий виняток виникає, коли 0 передається як другий параметр функції " +"``div``. Трасування виглядатиме так:" + +#: ../../src/basics/exceptions.txt:112 +msgid "" +"The traceback indicates all calls (top to bottom) that cause an exception." +msgstr "" +"Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " +"виняток." + +#: ../../src/basics/exceptions.txt:115 ../../src/basics/syntax.txt +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/exceptions.txt:117 +msgid "" +"It is possible to write programs that handle selected exceptions. The " +"``try`` statement is used to do that." +msgstr "" +"Можна писати програми, які оброблятимуть вибрані винятки. Для цього " +"використовується інструкція ``try``." + +#: ../../src/basics/exceptions.txt:120 +msgid "The try statement works as follows." +msgstr "Інструкція try працює наступним чином." + +#: ../../src/basics/exceptions.txt:122 +msgid "" +"First, the try clause (the statement(s) between the try and except keywords) " +"is executed." +msgstr "" +"Спочатку виконується речення try (вираз(и) між ключовими словами try і " +"except)." + +#: ../../src/basics/exceptions.txt:124 +msgid "" +"If no exception occurs, the except clause is skipped and execution of the " +"try statement is finished." +msgstr "" +"Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " +"оператора try завершується." + +#: ../../src/basics/exceptions.txt:126 +msgid "" +"If an exception occurs during execution of the try clause, the rest of the " +"clause is skipped. Then, if its type matches the exception named after the " +"except keyword, the except clause is executed, and then execution continues " +"after the try/except block." +msgstr "" +"Якщо під час виконання try виникає виняток, решта пропозиції пропускається. " +"Потім, якщо його тип збігається з винятком, названим за ключовим словом " +"osim, виконується пропозиція, а потім виконання продовжується після блоку " +"try/except." + +#: ../../src/basics/exceptions.txt:130 +msgid "" +"If an exception occurs which does not match the exception named in the " +"except clause, it is passed on to outer try statements; if no handler is " +"found, it is an unhandled exception and execution stops with a message as " +"shown above." +msgstr "" +"Якщо виникає виняток, який не збігається з винятком, названим у реченні " +"винятку, він передається зовнішнім операторам try; якщо обробник не " +"знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " +"повідомленням, як показано вище." + +#: ../../src/basics/exceptions.txt:147 +msgid "" +"A try statement may have more than one except clause, to specify handlers " +"for different exceptions." +msgstr "" +"Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " +"різних винятків." + +#: ../../src/basics/exceptions.txt:177 +msgid "Handling ALL exception" +msgstr "Опрацювання усіх винятків" + +#: ../../src/basics/exceptions.txt:179 +msgid "It's a bad practice to handle **all** exceptions." +msgstr "Обробляти **всі** винятки – це погана практика." + +#: ../../src/basics/exceptions.txt:181 +msgid "" +"When indicating an ``except`` block without specifying an exception to catch " +"it will work for any exception, that occurs in ``try`` block. The same is " +"relevant for handling ``BaseException`` and ``Exception``. But you can never " +"say what exact goes wrong." +msgstr "" +"Якщо вказати блок ``except`` без визначення винятку для перехоплення, він " +"працюватиме для будь-якого винятку, який виникає в блоці ``try``. Те саме " +"стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " +"можливо сказати, який саме виняток стався." + +#: ../../src/basics/exceptions.txt:186 +msgid "" +"However, this scenario may work for logging an exception and raising it " +"again to be handled on upper levels." +msgstr "" +"Проте, такий сценарій може працювати для логування винятків, після чого вони " +"підійматься заново, щоб бути опрацьованими на вищих рівнях програми." + +#: ../../src/basics/exceptions.txt:208 +msgid "" +"All exceptions are inherited from ``Exception`` class, which is subclass of " +"``BaseException``. So, you can never know what exactly goes wrong with your " +"code." +msgstr "" +"Усі винятки успадковуються від класу ``Exception``, який є підкласом " +"``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " +"вашим кодом." + +#: ../../src/basics/exceptions.txt:213 +msgid "``finally`` statement" +msgstr "Вираз ``finally``" + +#: ../../src/basics/exceptions.txt:215 +msgid "" +"The ``try`` statement cannot be used itself. This will cause " +"``SyntaxError``. Either ``except`` or ``finally`` block is required to be " +"included." +msgstr "" +"Оператор ``try`` не може бути використаний сам по собі. Це спричинить " +"``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." + +#: ../../src/basics/exceptions.txt:218 +msgid "" +"While the ``except`` block tries to catch the exceptions if any, the " +"``finally`` block will be always executed regardless of the exception occurs." +msgstr "" +"У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " +"блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." + +#: ../../src/basics/exceptions.txt:244 +msgid "``else`` statement" +msgstr "Вираз ``else``" + +#: ../../src/basics/exceptions.txt:246 +msgid "" +"The ``try`` statement can also use ``else`` (which is optional). The " +"statements within this block will be execute only in case there were no " +"exceptions raised while running the ``try``." +msgstr "" +"Оператор ``try`` також може використовувати ``else`` (який є " +"необов’язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " +"якщо під час виконання ``try`` не було викликано винятків." + +#: ../../src/basics/exceptions.txt:268 +msgid "Raising exceptions" +msgstr "Винятки: raising" + +#: ../../src/basics/exceptions.txt:270 +msgid "" +"The ``raise`` statement allows the programmer to force a specified exception " +"to occur. The sole argument to raise indicates the exception to be raised. " +"This must be either an exception instance or an exception class (a class " +"that derives from ``BaseException``, such as ``Exception`` or one of its " +"subclasses). If an exception class is passed, it will be implicitly " +"instantiated by calling its constructor with no arguments." +msgstr "" +"Інструкція ``raise`` дозволяє програмісту примусово викликати певний " +"виняток. Єдиний аргумент, який потрібно викликати, вказує на виняток, який " +"потрібно викликати. Це має бути екземпляр винятку або клас винятку (клас, " +"який походить від ``BaseException``, наприклад ``Exception`` або один із " +"його підкласів). Якщо передано клас винятків, він буде неявно створений " +"шляхом виклику його конструктора без аргументів." + +#: ../../src/basics/exceptions.txt:282 +msgid "" +"``raise`` statement itself will re-raise all the exceptions within the " +"context. Also exceptions can be raised again from the ``except`` block. It's " +"a common pattern to catch the exception for loggers and when re-raise it." +msgstr "" +"Сам оператор ``raise`` повторно викличе всі винятки в контексті опрацювання. " +"Крім того, винятки можуть бути викликані знову з блоку ``except``. Це " +"загальний шаблон для перехоплення винятку для реєстрації повідомлення про " +"виняткову ситуацію і повторного його підняття." + +#: ../../src/basics/exceptions.txt:295 +msgid "Creating custom exceptions" +msgstr "Створення винятків" + +#: ../../src/basics/exceptions.txt:297 +msgid "" +"Programs may name their own exceptions by creating a new exception class. " +"Exceptions should typically be derived from the Exception class, either " +"directly or indirectly." +msgstr "" +"Програми можуть називати власні винятки, створюючи новий клас винятків. " +"Винятки зазвичай мають бути похідними від класу Exception, прямо чи " +"опосередковано." + +#: ../../src/basics/exceptions.txt:301 +msgid "" +"Exception classes can be defined which do anything any other class can do, " +"but are usually kept simple, often only offering a number of attributes that " +"allow information about the error to be extracted by handlers for the " +"exception." +msgstr "" +"Можна визначити класи винятків, які роблять усе, що може зробити будь-який " +"інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " +"які дозволяють обробникам витягувати інформацію про помилку для винятку." + +#: ../../src/basics/exceptions.txt:306 +msgid "" +"Most exceptions are defined with names that end in \"Error\", similar to the " +"naming of the standard exceptions." +msgstr "" +"Більшість винятків визначено з іменами, які закінчуються на \"Error\", " +"подібно до назв стандартних винятків." + +#: ../../src/basics/exceptions.txt:309 +msgid "" +"Many standard modules define their own exceptions to report errors that may " +"occur in functions they define." +msgstr "" +"Багато стандартних модулів визначають власні винятки, щоб повідомляти про " +"помилки, які можуть виникнути у функціях, які вони визначають." + +#: ../../src/basics/exceptions.txt:312 +msgid "User-defined exception" +msgstr "Виняток, визначений користувачем" + #: ../../src/basics/functions.txt:3 ../../src/basics/syntax.txt msgid "Functions" msgstr "Функції" @@ -919,10 +1263,6 @@ msgstr "" "для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " "оператора імпорту." -#: ../../src/basics/syntax.txt -msgid "Exception handling" -msgstr "Обробка винятків" - #: ../../src/basics/syntax.txt:77 msgid "" "Python provides a way to handle errors and exceptions in a program using the " diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index bbb33f02c..51aa19e33 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -21,7 +21,7 @@ Syntax errors are also known as parsing errors. ^^^^^ SyntaxError: invalid syntax -The parser repeats the offending line and displays a little ‘arrow’ pointing at +The parser repeats the offending line and displays a little "arrow" pointing at the earliest point in the line where the error was detected. The error is caused by (or at least detected at) the token preceding the arrow. @@ -55,7 +55,7 @@ Standard exception names are built-in identifiers (not reserved keywords). Tracebacks ========== -.. note:: "File" is replaced with a *dummy string* within the example above. +.. note:: "File" is replaced with a *dummy string* within the examples. Let's assume the following modules structure: @@ -173,14 +173,26 @@ different exceptions. except ZeroDivisionError: print(f"Zero division error: {y = }") -All exceptions --------------- +Handling ALL exception +---------------------- It's a bad practice to handle **all** exceptions. When indicating an ``except`` block without specifying an exception to catch it will work for any exception, that occurs in ``try`` block. The same is relevant -for handling ``BaseException`` and ``Exception``. +for handling ``BaseException`` and ``Exception``. But you can never say what +exact goes wrong. + +.. note:: However, this scenario may work for logging an exception and raising + it again to be handled on upper levels. + + .. code-block:: python + + try: + ... # some code that may raise an exception + except: + ... # logging actions + raise # raise an exception again :: @@ -267,6 +279,18 @@ instantiated by calling its constructor with no arguments. raise NameError("name error") raise NameError +``raise`` statement itself will re-raise all the exceptions within the context. +Also exceptions can be raised again from the ``except`` block. It's a common +pattern to catch the exception for loggers and when re-raise it. + +.. code-block:: python + + try: + result = 10 // 0 + except: + print("zero division") + raise + Creating custom exceptions ========================== @@ -279,14 +303,14 @@ but are usually kept simple, often only offering a number of attributes that allow information about the error to be extracted by handlers for the exception. -Most exceptions are defined with names that end in “Error”, similar to the +Most exceptions are defined with names that end in "Error", similar to the naming of the standard exceptions. Many standard modules define their own exceptions to report errors that may occur in functions they define. .. code-block:: python - :caption: User-define exception + :caption: User-defined exception class InvalidInputError(Exception): """This is a custom exception for demo needs""" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index bf5a7477a..ce5054a4a 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -176,8 +176,6 @@ Common operations Value comparisons ----------------- -.. todo: make TypeError a link - Sequences can be compared only within each of their types, with the restriction that ranges do not support order comparison. Equality comparison across these types results in inequality, and ordering comparison across these types raises From 1b3156a18fbc64583cd2f2b9627b45d886509f19 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 01:56:13 +0300 Subject: [PATCH 301/689] Updated challenge: WRW -> WTK Signed-off-by: Serhii Horodilov --- problem-sets | 2 +- pyproject.toml | 4 ++-- src/appx/wrw_game.txt | 1 - src/appx/wtk.txt | 1 + src/conf.py | 2 +- src/index.txt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 src/appx/wrw_game.txt create mode 100644 src/appx/wtk.txt diff --git a/problem-sets b/problem-sets index aca9b8b8b..63d3c3e36 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit aca9b8b8b48d5739c363ea286704cd562835944d +Subproject commit 63d3c3e362420dd3ed3190dd47fd775accab2fbb diff --git a/pyproject.toml b/pyproject.toml index 36544b23c..7fb533276 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2022.11.dev" +version = "2023.04.dev" description = "" license = "MIT" authors = [ @@ -11,7 +11,7 @@ maintainers = [ "Serhii Horodilov " ] readme = "README.rst" -homepage = "" # todo: +homepage = "https://edu-python-course.github.io" repository = "https://github.com/edu-python-course/edu-python-course.github.io" keywords = [ "python", diff --git a/src/appx/wrw_game.txt b/src/appx/wrw_game.txt deleted file mode 100644 index b75805cd6..000000000 --- a/src/appx/wrw_game.txt +++ /dev/null @@ -1 +0,0 @@ -.. include:: /../problem-sets/src/wrw_game/challenge.rst diff --git a/src/appx/wtk.txt b/src/appx/wtk.txt new file mode 100644 index 000000000..1a55429df --- /dev/null +++ b/src/appx/wtk.txt @@ -0,0 +1 @@ +.. include:: /../problem-sets/src/wtk/challenge.rst diff --git a/src/conf.py b/src/conf.py index 40cb0d14f..8155e8f22 100644 --- a/src/conf.py +++ b/src/conf.py @@ -14,7 +14,7 @@ f"{datetime.now().year}, Python training course authors and contributors" authors = "Vladyslav Ponomaryov \\and " \ "Serhii Horodilov" -version = "2022.11.dev" +version = "2023.04.dev" # general configuration master_doc = root_doc = "index" diff --git a/src/index.txt b/src/index.txt index 7dcf895fa..06ef56b85 100644 --- a/src/index.txt +++ b/src/index.txt @@ -28,7 +28,7 @@ appx/precedence appx/printf appx/conv_store - appx/wrw_game + appx/wtk appx/blog .. rubric:: References From dc250f872081ae8f95a27ef0ed66a396b6b5fdc6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 02:04:30 +0300 Subject: [PATCH 302/689] Updated translations Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 1455 ++++++++++++++++----------- 1 file changed, 851 insertions(+), 604 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index 224a8f72e..d39303e45 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:46+0300\n" +"POT-Creation-Date: 2023-04-11 02:01+0300\n" "PO-Revision-Date: 2023-04-10 17:59+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" "Language: uk\n" +"Language-Team: ua \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" #: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" @@ -27,32 +26,33 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"As a developer you were asked to create a simple blog site. The goal is to " -"create a place on the Internet where users can share their stories to public." +"As a developer you were asked to create a simple blog site. The goal is " +"to create a place on the Internet where users can share their stories to " +"public." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " -"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " -"громадськістю." +"Вас, як розробника, попросили створити простий сайт блогу. Мета - " +"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " +"історіями з громадськістю." #: ../../blog/docs/spec.rst:16 msgid "" -"This document applies requirements for the entire project step-by-step. You " -"will start from creating the appropriate URL dispatcher and connecting a " -"PostgreSQL database to store the data and will finish with implementing REST " -"API for the blog." +"This document applies requirements for the entire project step-by-step. " +"You will start from creating the appropriate URL dispatcher and " +"connecting a PostgreSQL database to store the data and will finish with " +"implementing REST API for the blog." msgstr "" "Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " -"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " -"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " -"API для блог." +"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до" +" бази даних PostgreSQL для зберігання даних і закінчите впровадженням " +"REST API для блог." #: ../../blog/docs/spec.rst:21 msgid "" -"There are some boiler plates, that may be useful in your future work, but " -"you aren’t forced to use them. It’s on your choice." +"There are some boiler plates, that may be useful in your future work, but" +" you aren’t forced to use them. It’s on your choice." msgstr "" -"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " -"ви не змушені їх використовувати. Це на ваш вибір." +"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, " +"але ви не змушені їх використовувати. Це на ваш вибір." #: ../../blog/docs/spec.rst:24 msgid "`Starter template`_" @@ -68,29 +68,29 @@ msgstr "Завдання: Site views" #: ../../blog/docs/spec.rst:30 msgid "" -"It’s ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." +"It’s ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " -"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " -"щоб повернути у відповіді HTTP." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " +"хочете, щоб повернути у відповіді HTTP." #: ../../blog/docs/spec.rst:34 msgid "" -"``/blogs/``: A site’s homepage. This will contain a list of blogs available " -"via the django site." +"``/blogs/``: A site’s homepage. This will contain a list of blogs " +"available via the django site." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " -"на сайті django." +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " +"доступних на сайті django." #: ../../blog/docs/spec.rst:36 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." +"``/about/``: надає звичайний текст для користувача, що описує функції " +"сайту django." #: ../../blog/docs/spec.rst:38 msgid "``/``: same as ``/blogs/``" @@ -98,20 +98,21 @@ msgstr "``/``: те ж саме ``/blogs/``" #: ../../blog/docs/spec.rst:39 msgid "" -"``//``: A single blog post detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single blogpost from the database." +"``//``: A single blog post detail view. The URL contains " +"dynamic part in it. This will be used to fetch a single blogpost from the" +" database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " -"містить динамічну частину. Це буде використано для отримання однієї " -"публікації блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. " +"URL-адреса містить динамічну частину. Це буде використано для отримання " +"однієї публікації блогу з бази даних." #: ../../blog/docs/spec.rst:42 msgid "" "``//comment/``: This view will be used to add comments to a " "blogpost." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання " -"коментарів до публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання" +" коментарів до публікації блогу." #: ../../blog/docs/spec.rst:44 msgid "``/create/``: A post creation form." @@ -119,13 +120,11 @@ msgstr "``/create/``: форма створення публікації." #: ../../blog/docs/spec.rst:45 msgid "``//update/``: A view to update an existing post data." -msgstr "" -"``//update/``: перегляд для оновлення наявних даних публікації." +msgstr "``//update/``: перегляд для оновлення наявних даних публікації." #: ../../blog/docs/spec.rst:46 msgid "``//delete/``: A view to confirm post deletion." -msgstr "" -"``//delete/``: перегляд для підтвердження видалення публікації." +msgstr "``//delete/``: перегляд для підтвердження видалення публікації." #: ../../blog/docs/spec.rst:47 msgid "``/profile//``: A site user’s personal page." @@ -133,11 +132,11 @@ msgstr "``/profile//``: Персональна сторінка к #: ../../blog/docs/spec.rst:48 msgid "" -"``/change_password/``: This route will be used to change users’ credential " -"data." +"``/change_password/``: This route will be used to change users’ " +"credential data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " -"даних користувачів." +"``/change_password/``: Ця сторінка використовуватиметься для зміни " +"облікових даних користувачів." #: ../../blog/docs/spec.rst:50 msgid "``/register/``: This view contains a user registration form." @@ -149,7 +148,8 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../blog/docs/spec.rst:52 msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to " +"homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -171,13 +171,13 @@ msgid "" "``post.slug`` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або " -"оновлення запису та слідувати шаблону:" +"Значення ``post.slug`` має автоматично генеруватися під час створення або" +" оновлення запису та слідувати шаблону:" #: ../../blog/docs/spec.rst:69 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value " -"should be ``True`` by default." +"User preferred topics should be marked with a ``notify`` flag. This value" +" should be ``True`` by default." msgstr "" "Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " "замовчуванням це значення має бути ``True``." @@ -188,16 +188,17 @@ msgstr "Завдання: ORM" #: ../../blog/docs/spec.rst:104 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project’s database." +"Update existing views to represent entities that are actually stored " +"inside the project’s database." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " -"базі даних проекту." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" +" в базі даних проекту." #: ../../blog/docs/spec.rst:107 msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." msgstr "" -"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." +"``/blogs/`` або ``/``: має представляти список існуючих публікацій у " +"блозі." #: ../../blog/docs/spec.rst:108 msgid "``//``: should represent a single existing blogpost." @@ -205,8 +206,8 @@ msgstr "``//``: має представляти одну наявну #: ../../blog/docs/spec.rst:109 msgid "" -"``/profile//``: should contain information about user and a " -"list of posts authored by this user." +"``/profile//``: should contain information about user and a" +" list of posts authored by this user." msgstr "" "``/profile//``: має містити інформацію про користувача та " "список публікацій, автором яких є цей користувач." @@ -217,8 +218,8 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " -"не вдалося отримати." +"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо " +"сутність не вдалося отримати." #: ../../blog/docs/spec.rst:116 msgid "Challenge: Templates" @@ -226,13 +227,13 @@ msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.rst:118 msgid "" -"It’s time to work with data representations. You’re to add HTML template to " -"the blog site project. Keep templates together with appropriate " +"It’s time to work with data representations. You’re to add HTML template " +"to the blog site project. Keep templates together with appropriate " "applications, we don’t need mess in project files." msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" -"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " -"додатками, нам не потрібен безлад у файлах проекту." +"Настав час попрацювати з представленнями даних. Ви повинні додати " +"HTML-шаблон до проекту сайту блогу. Зберігайте шаблони разом із " +"відповідними додатками, нам не потрібен безлад у файлах проекту." #: ../../blog/docs/spec.rst:122 msgid "Application-level templates should be extended from the base one." @@ -240,19 +241,19 @@ msgstr "Шаблони прикладного рівня повинні бути #: ../../blog/docs/spec.rst:123 msgid "" -"Each page should contain a navbar at the top. Navbar will contain permalinks " -"to the home and about pages." +"Each page should contain a navbar at the top. Navbar will contain " +"permalinks to the home and about pages." msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " -"міститиме постійні посилання на домашню сторінку та сторінку про." +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна " +"панель міститиме постійні посилання на домашню сторінку та сторінку про." #: ../../blog/docs/spec.rst:125 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be " +"visible in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " +"бути видимими на панелі навігації." #: ../../blog/docs/spec.rst:127 msgid "" @@ -264,23 +265,25 @@ msgstr "" #: ../../blog/docs/spec.rst:129 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"If authenticated user is admin or stuff they should see a link to admin " +"page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.rst:131 msgid "" -"Each page should contain a list of links to archive views for the last year." +"Each page should contain a list of links to archive views for the last " +"year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." +"Кожна сторінка має містити список посилань на перегляди архіву за " +"останній рік." #: ../../blog/docs/spec.rst:133 msgid "" -"For the ``post_list.html`` each post entity should provide the information:" -msgstr "" -"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" +"For the ``post_list.html`` each post entity should provide the " +"information:" +msgstr "Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" #: ../../blog/docs/spec.rst:136 msgid "title (each word should be capitalized)" @@ -305,41 +308,39 @@ msgstr "кількість коментарів" #: ../../blog/docs/spec.rst:142 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " -"публікацію." +"Кожна сутність публікації в поданні списку має бути посиланням на " +"відповідну публікацію." #: ../../blog/docs/spec.rst:144 msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -msgstr "" -"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +msgstr "Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." #: ../../blog/docs/spec.rst:145 msgid "Detail view should contain a list of post related comments." -msgstr "" -"Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." #: ../../blog/docs/spec.rst:146 msgid "" "Auth views should use ``register.html`` and ``login.html`` with " "corresponding forms." msgstr "" -"Подання авторизації повинні використовувати ``register.html`` і ``login." -"html`` з відповідними формами." +"Подання авторизації повинні використовувати ``register.html`` і " +"``login.html`` з відповідними формами." #: ../../blog/docs/spec.rst:149 msgid "" -"For now, it’s ok to use admin as “test user”. Authentication system will be " -"implemented in the future challenges. ``user`` object is available (by " -"default) in any template context. To test anonymous access you can use " +"For now, it’s ok to use admin as “test user”. Authentication system will " +"be implemented in the future challenges. ``user`` object is available (by" +" default) in any template context. To test anonymous access you can use " "``user.is_authenticated``, which returns ``False`` for non-authenticated " "users." msgstr "" "Наразі можна використовувати адміністратора як «тестового користувача». " "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " -"Щоб перевірити анонімний доступ, ви можете використовувати ``user." -"is_authenticated``, який повертає ``False`` для неавтентифікованих " -"користувачів." +"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону." +" Щоб перевірити анонімний доступ, ви можете використовувати " +"``user.is_authenticated``, який повертає ``False`` для неавтентифікованих" +" користувачів." #: ../../blog/docs/spec.rst:156 msgid "Challenge: Auth forms" @@ -347,8 +348,7 @@ msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.rst:158 msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.rst:160 msgid "``username``" @@ -394,8 +394,8 @@ msgstr "Створіть форму для роботи з моделлю доп #: ../../blog/docs/spec.rst:174 msgid "" -"Create a form to gather a comment from a user. Form should be used within a " -"\"post detail\" view." +"Create a form to gather a comment from a user. Form should be used within" +" a \"post detail\" view." msgstr "" "Створіть форму для збору коментарів від користувача. Форму слід " "використовувати в перегляді \"подробиць публікації\"." @@ -407,8 +407,8 @@ msgstr "Форму слід використовувати для перегля #: ../../blog/docs/spec.rst:178 msgid "It’s ok to use a *pre-defined* user as a post’s author for now." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як автора " -"публікації." +"Наразі можна використовувати *попередньо визначеного* користувача як " +"автора публікації." #: ../../blog/docs/spec.rst:181 msgid "Challenge: Authentication" @@ -416,9 +416,9 @@ msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.rst:183 msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them:" +" desired username and email. Name data (both first and last) is optional." +" After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -430,33 +430,33 @@ msgstr "" #: ../../blog/docs/spec.rst:188 msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case " +"login is successful they should be redirected to their profile (if no " +"``?next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У " +"разі успішного входу вони повинні бути перенаправлені до свого профілю " +"(якщо немає рядка запиту ``?next=url``)." #: ../../blog/docs/spec.rst:191 msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"post creation. Then a post is created, it should be authored by the " -"currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page." +" In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to post creation. Then a post is created, it should be authored " +"by the currently authenticated user." msgstr "" "``/create/``: лише автентифіковані користувачі повинні мати змогу " "відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " -"входу, а після успішної автентифікації повернутися до створення публікації. " -"Потім створюється допис, автором якого має бути поточний автентифікований " -"користувач." +"запит на цей перегляд, він повинен бути спершу перенаправлений до " +"перегляду входу, а після успішної автентифікації повернутися до створення" +" публікації. Потім створюється допис, автором якого має бути поточний " +"автентифікований користувач." #: ../../blog/docs/spec.rst:196 msgid "" -"``//comment``: Currently authenticated user should be referenced " -"as a comment’s author." +"``//comment``: Currently authenticated user should be " +"referenced as a comment’s author." msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." @@ -464,7 +464,8 @@ msgstr "" #: ../../blog/docs/spec.rst:198 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" -"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." +"Дописи можуть бути змінені або видалені лише їхніми авторами (без " +"винятків)." #: ../../blog/docs/spec.rst:202 msgid "Challenge: Class-Based Views" @@ -480,8 +481,7 @@ msgstr "Існуюча функціональність не повинна бу #: ../../blog/docs/spec.rst:207 msgid "It’s ok to use Django built-in views for auth." -msgstr "" -"Для автентифікації можна використовувати вбудовані представлення Django." +msgstr "Для автентифікації можна використовувати вбудовані представлення Django." #: ../../blog/docs/spec.rst:210 msgid "Challenge: Serializers" @@ -509,11 +509,12 @@ msgstr "Завдання: API views" #: ../../blog/docs/spec.rst:221 msgid "" -"All blog-site functionality are to be reflected via REST API. It’s ok to use " -"*pre-defined* user as a post’s author for now." +"All blog-site functionality are to be reflected via REST API. It’s ok to " +"use *pre-defined* user as a post’s author for now." msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора публікації." +"використовувати *попередньо визначеного* користувача як автора " +"публікації." #: ../../blog/docs/spec.rst:225 msgid "Challenge: Authentication and Permissions" @@ -525,13 +526,11 @@ msgstr "Запровадити систему автентифікації REST. #: ../../blog/docs/spec.rst:228 msgid "Only account owner can change their account data." -msgstr "" -"Лише власник облікового запису може змінити дані свого облікового запису." +msgstr "Лише власник облікового запису може змінити дані свого облікового запису." #: ../../blog/docs/spec.rst:229 msgid "Only authenticated users can create posts and comments." -msgstr "" -"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." +msgstr "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." #: ../../blog/docs/spec.rst:230 msgid "Only authors can change their posts." @@ -543,17 +542,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:7 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово " +"підходить для простих речей, але ці інструменти швидко перетворюють " +"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" +" або навіть просто хорошого спеціального редактора коду робить кодування " +"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" @@ -561,23 +560,25 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -590,8 +591,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -623,23 +624,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " +"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " +"дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" +" загальної ціни на вказану кількість товару для покупки. Бажану кількість" +" буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -656,7 +659,8 @@ msgstr "Реалізація моделі товару" msgid "Instances of this class represent a product available for purchase." msgstr "Цей клас представляє товари, які можна придбати в магазині." -#: conv_store.models.Product conv_store.models.ShoppingCart of +#: conv_store.models.Product conv_store.models.ShoppingCart of wtk.models.Enemy +#: wtk.models.Player msgid "Variables" msgstr "Змінні" @@ -685,7 +689,8 @@ msgstr "" "значення атрибута одиниці." #: conv_store.models.Product.get_total -#: conv_store.models.ShoppingCart.add_product of +#: conv_store.models.ShoppingCart.add_product of wtk.models.Enemy.__init__ +#: wtk.models.Player.__init__ msgid "Parameters" msgstr "Параметри" @@ -694,7 +699,9 @@ msgid "a quantity to purchase, defaults to None" msgstr "кількість для покупки, за замовчуванням None" #: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total -#: of +#: of wtk.engine.get_player_name wtk.models.Enemy.select_attack +#: wtk.models.Enemy.select_defence wtk.models.Player.select_attack +#: wtk.models.Player.select_defence msgid "Returns" msgstr "Повертає" @@ -722,11 +729,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." +"responsibility is to store information about the purchases and their " +"amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -738,9 +745,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " @@ -782,8 +789,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." +"This method adds a product instance and corresponding quantity value to " +"the cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -795,7 +802,8 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці " +"продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -811,8 +819,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -821,16 +829,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." +"``Продукт`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -854,27 +862,28 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -885,8 +894,7 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" +msgid "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -895,11 +903,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -915,27 +923,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість *protected*, оскільки до неї не слід звертатися поза " +"екземпляром картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -943,9 +951,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -953,8 +961,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -964,31 +972,29 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -997,9 +1003,10 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " +"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " +": {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1011,16 +1018,17 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1028,17 +1036,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1046,19 +1054,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." +"Implement ``remove_product`` method to completely remove some product " +"from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1074,8 +1082,7 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1092,15 +1099,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " -"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." +"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. " +"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " +"пріоритет зліва направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1120,11 +1127,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" msgstr "" -"Прив’язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" +"Прив’язка або вираз у дужках, відображення списку, відображення словника," +" відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1164,8 +1171,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1270,16 +1277,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1291,18 +1298,20 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:9 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об’єктом." +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" +"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` " +"(по модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" +" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " +"*format* замінюються нулем або більше елементами *значень*. Якщо для " +"*format* потрібен один аргумент, *values* може бути одним некортежним " +"об’єктом." #: ../../src/appx/printf.txt:16 msgid "The conversion flag characters are:" @@ -1338,9 +1347,11 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:25 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " +"обидва)" #: ../../src/appx/printf.txt:28 msgid "``' '``" @@ -1356,11 +1367,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:30 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " +"(перевизначає прапор \"пробіл\")" #: ../../src/appx/printf.txt:34 msgid "The conversion types are:" @@ -1448,8 +1459,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:58 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -1492,8 +1503,7 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:71 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." +msgid "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.md:1 @@ -1506,8 +1516,7 @@ msgstr "7zip" #: ../../src/appx/software_list.md:7 msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.md:9 msgid "" @@ -1527,9 +1536,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.md:13 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -1554,14 +1563,15 @@ msgstr "cygwin" #: ../../src/appx/software_list.md:24 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux distribution](https://en.wikipedia.org/" -"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " -"substantial POSIX API functionality." +"functionality similar to a [Linux " +"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " +"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " +"functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" -"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." +"функціональність, подібну до [дистрибутива " +"Linux](https://en.wikipedia.org/wiki/Linux_distribution) у Windows та DLL" +" (cygwin1.dll), яка забезпечує значний POSIX Функціонал API." #: ../../src/appx/software_list.md:30 msgid "**Cygwin is not**:" @@ -1569,17 +1579,18 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.md:32 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " +"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " +"Windows." #: ../../src/appx/software_list.md:34 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " -"if you want to take advantage of Cygwin functionality." +"like `signals`, `ptys` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." msgstr "" "спосіб чарівним чином зробити рідні програми Windows відомими " "функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " @@ -1600,10 +1611,10 @@ msgid "" "source) distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" -"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." -"com/about/free-and-open-source) розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." +"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-" +"scm.com/about/free-and-open-source) розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від " +"малих до дуже великих." #: ../../src/appx/software_list.md:47 msgid "https://git-scm.com/" @@ -1616,24 +1627,24 @@ msgstr "Docker" #: ../../src/appx/software_list.md:52 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" +" рік." #: ../../src/appx/software_list.md:54 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " +"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " +"розробки за допомогою інтегрованого конвеєра розробників і консолідації " +"компонентів програми. Активно використовувані мільйонами розробників у " +"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " +"простоту, гнучкість і вибір." #: ../../src/appx/software_list.md:60 msgid "https://www.docker.com/" @@ -1645,13 +1656,14 @@ msgstr "PostgreSQL[^cygwin-pkg]" #: ../../src/appx/software_list.md:65 msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." +"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим " +"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" +" вона заслужила міцну репутацію надійності, надійності функцій і " +"продуктивності." #: ../../src/appx/software_list.md:69 msgid "https://www.postgresql.org/" @@ -1663,24 +1675,24 @@ msgstr "psql[^cygwin-pkg]" #: ../../src/appx/software_list.md:74 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" +" запиту. Крім того, введення може бути з файлу або з аргументів " +"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" +" функцій, подібних до оболонки, для полегшення написання сценаріїв і " +"автоматизації різноманітних завдань." #: ../../src/appx/software_list.md:80 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for `postgresql-client` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for `postgresql-client` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет `postgresql-client`." @@ -1695,19 +1707,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.md:88 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа " +"адміністрування та розробки з відкритим кодом для PostgreSQL, " +"найдосконалішої бази даних з відкритим кодом у світі." #: ../../src/appx/software_list.md:92 msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" -"інтерфейсу." +"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." #: ../../src/appx/software_list.md:94 msgid "https://pgadmin.org/" @@ -1719,17 +1731,20 @@ msgstr "SQLite[^cygwin-pkg]" #: ../../src/appx/software_list.md:99 msgid "" -"SQLite is a C-language library that implements a [small](https://sqlite.org/" -"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-reliability]" -"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." -"html), SQL database engine." -msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" -"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " -"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" -"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" -"fullsql.html) , двигун бази даних SQL." +"SQLite is a C-language library that implements a " +"[small](https://sqlite.org/footprint.html), " +"[fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-" +"reliability](https://sqlite.org/hirely.html), [full-" +"featured](https://sqlite.org/fullsql.html), SQL database engine." +msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує " +"[маленьку](https://sqlite.org/footprint.html), " +"[швидку](https://sqlite.org/fasterthanfs.html), [самодостатню]( " +"https://sqlite.org/selfcontained.html), [висока " +"надійність](https://sqlite.org/hirely.html), " +"[повнофункціональний](https://sqlite.org/fullsql.html) , двигун бази " +"даних SQL." #: ../../src/appx/software_list.md:106 msgid "https://sqlite.org/" @@ -1739,371 +1754,478 @@ msgstr "https://sqlite.org/" msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" -#: ../../problem-sets/src/wrw_game/challenge.rst:3 -msgid "WARRIORS, ROBBERS AND WIZARDS GAME" -msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" +#: ../../problem-sets/src/wtk/challenge.rst:3 +msgid "Wizards, Thiefs and Knights" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:5 +#: ../../problem-sets/src/wtk/challenge.rst:5 +#, fuzzy msgid "" -"Warriors, robbers and wizards (WRW) game is a \"Paper, Rock and Scissors\" " -"clone, but in a fantasy setting. It comes with a simple command line " -"interface where the use must type in his or her choice. The enemy is " -"controlled by the script. The player's goal is to gain as many score points, " -"as it possible." +"\"Wizards, Thiefs and Knights\" (WTK) game is a \"Paper, Rock and " +"Scissors\" clone, but in a fantasy setting. It comes with a simple " +"command line interface where the use must type in his or her choice. The " +"enemy is controlled by the script. The player's goal is to gain as many " +"score points, as it possible." msgstr "" "Гра Warriors, robbers and wizards (WRW) є клоном \"Paper, Rock and " "Scissors\", але у фентезійній обстановці. Вона постачається з простим " -"інтерфейсом командного рядка, де для використання потрібно вводити його або " -"її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога більше " -"очок." +"інтерфейсом командного рядка, де для використання потрібно вводити його " +"або її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога " +"більше очок." -#: ../../problem-sets/src/wrw_game/challenge.rst:12 -msgid "Code Organization" +#: ../../problem-sets/src/wtk/challenge.rst:12 +#, fuzzy +msgid "Code organization" msgstr "Організація коду" -#: ../../problem-sets/src/wrw_game/challenge.rst:14 +#: ../../problem-sets/src/wtk/challenge.rst:14 msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" -#: ../../problem-sets/src/wrw_game/challenge.rst:26 -msgid "General Playground Description" +#: ../../problem-sets/src/wtk/challenge.rst:26 +#, fuzzy +msgid "General playground description" msgstr "Загальний опис ігрового майданчика" -#: ../../problem-sets/src/wrw_game/challenge.rst:28 +#: ../../problem-sets/src/wtk/challenge.rst:28 msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." +"The game process is divided into rounds. Each round consists of " +"**attack** and **defence** stages. Rounds are repeated, until player is " +"defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." -#: ../../problem-sets/src/wrw_game/challenge.rst:32 -msgid "Fight Rules" +#: ../../problem-sets/src/wtk/challenge.rst:32 +#, fuzzy +msgid "Fight rules" msgstr "Правила боротьби" -#: ../../problem-sets/src/wrw_game/challenge.rst:34 +#: ../../problem-sets/src/wtk/challenge.rst:34 msgid "It's simple..." msgstr "Це просто..." -#: ../../problem-sets/src/wrw_game/challenge.rst:36 -msgid "**Warrior** beats **Robber**" -msgstr "Воїн перемагає розбійника" +#: ../../problem-sets/src/wtk/challenge.rst:36 +#, fuzzy +msgid "**Knight** beats **Thief**" +msgstr "**Чарівник** перемагає **Воїна**" -#: ../../problem-sets/src/wrw_game/challenge.rst:37 -msgid "**Robber** beats **Wizard**" +#: ../../problem-sets/src/wtk/challenge.rst:37 +#, fuzzy +msgid "**Thief** beats **Wizard**" msgstr "**Розбійник** перемагає **Чарівника**" -#: ../../problem-sets/src/wrw_game/challenge.rst:38 -msgid "**Wizard** beats **Warrior**" +#: ../../problem-sets/src/wtk/challenge.rst:38 +#, fuzzy +msgid "**Wizard** beats **Knight**" msgstr "**Чарівник** перемагає **Воїна**" -#: ../../problem-sets/src/wrw_game/challenge.rst:41 -msgid "Attack Stage" +#: ../../problem-sets/src/wtk/challenge.rst:41 +#, fuzzy +msgid "Attack stage" msgstr "Стадія атаки" -#: ../../problem-sets/src/wrw_game/challenge.rst:43 +#: ../../problem-sets/src/wtk/challenge.rst:43 +#, fuzzy msgid "" -"Player selects the choice to attack from **warrior**, **robber** or " -"**wizard**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" +"Player selects the choice to attack from **knight**, **thief** or " +"**wizard**, enemy selects the choice for defence from the same options by" +" random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог обирає " -"вибір для захисту з тих самих варіантів за допомогою\" \"довільного. Якщо " -"атака успішна:" +"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог " +"обирає вибір для захисту з тих самих варіантів за допомогою\" " +"\"довільного. Якщо атака успішна:" -#: ../../problem-sets/src/wrw_game/challenge.rst:47 +#: ../../problem-sets/src/wtk/challenge.rst:47 msgid "enemy health is decreased" msgstr "здоров'я ворога зменшено" -#: ../../problem-sets/src/wrw_game/challenge.rst:48 +#: ../../problem-sets/src/wtk/challenge.rst:48 msgid "player gains score points" msgstr "гравець отримує очки" -#: ../../problem-sets/src/wrw_game/challenge.rst:50 +#: ../../problem-sets/src/wtk/challenge.rst:50 msgid "In case enemy is defeated:" msgstr "Якщо ворог переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:52 +#: ../../problem-sets/src/wtk/challenge.rst:52 msgid "a new enemy instance is initialized using higher level" msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" -#: ../../problem-sets/src/wrw_game/challenge.rst:53 +#: ../../problem-sets/src/wtk/challenge.rst:53 msgid "player gains some extra score points" msgstr "гравець отримує додаткові очки" -#: ../../problem-sets/src/wrw_game/challenge.rst:54 +#: ../../problem-sets/src/wtk/challenge.rst:54 msgid "next defence stage is skipped, and player attacks again" msgstr "наступний етап захисту пропущено, і гравець атакує знову" -#: ../../problem-sets/src/wrw_game/challenge.rst:57 -msgid "Defence Stage" +#: ../../problem-sets/src/wtk/challenge.rst:57 +#, fuzzy +msgid "Defence stage" msgstr "Стадія захисту" -#: ../../problem-sets/src/wrw_game/challenge.rst:59 +#: ../../problem-sets/src/wtk/challenge.rst:59 +#, fuzzy msgid "" -"Player selects the choice to defend from **warrior**, **robber** or " +"Player selects the choice to defend from **knight**, **thief** or " "**wizard**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника, " -"ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " +"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника," +" ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " "атака успішна:" -#: ../../problem-sets/src/wrw_game/challenge.rst:63 +#: ../../problem-sets/src/wtk/challenge.rst:63 msgid "player health is decreased" msgstr "здоров'я гравця знижено" -#: ../../problem-sets/src/wrw_game/challenge.rst:65 +#: ../../problem-sets/src/wtk/challenge.rst:65 msgid "If player is defeated:" msgstr "Якщо гравець переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:67 +#: ../../problem-sets/src/wtk/challenge.rst:67 msgid "report the message about gained score points to the terminal" msgstr "повідомляти повідомлення про набрані бали на термінал" -#: ../../problem-sets/src/wrw_game/challenge.rst:68 +#: ../../problem-sets/src/wtk/challenge.rst:68 msgid "write down player's name and score points to \"scores.txt\" file" msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" -#: ../../problem-sets/src/wrw_game/challenge.rst:72 +#: ../../problem-sets/src/wtk/challenge.rst:72 msgid "Exceptions" msgstr "Винятки" -#: ../../problem-sets/src/wrw_game/challenge.rst:75 -msgid "Enemy Down" +#: ../../problem-sets/src/wtk/challenge.rst:75 +#, fuzzy +msgid "Enemy down" msgstr "Enemy Down" -#: ../../problem-sets/src/wrw_game/challenge.rst:77 +#: ../../problem-sets/src/wtk/challenge.rst:77 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom " +"exception ``EnemyDown`` should be used to track these cases. Exception " +"should provide the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" +" повинен надавати деталі про екземпляр ворога, особливо його рівень." + +#: of wtk.exceptions.EnemyDown:1 +#, fuzzy +msgid "Raised when an enemy is defeated" +msgstr "Якщо ворог переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:82 -msgid "Game Over" +#: ../../problem-sets/src/wtk/challenge.rst:84 +#, fuzzy +msgid "Game over" msgstr "Game Over" -#: ../../problem-sets/src/wrw_game/challenge.rst:84 +#: ../../problem-sets/src/wtk/challenge.rst:86 msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." +"This is an exceptional scenario when player is defeated. A custom " +"exception ``GameOver`` should be used to track these cases. Exception " +"should provide the details on the player's instance, especially its score" +" points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати " +"бали." + +#: of wtk.exceptions.GameOver:1 +#, fuzzy +msgid "Raised when a player is defeated" +msgstr "Якщо гравець переможений:" -#: ../../problem-sets/src/wrw_game/challenge.rst:90 +#: ../../problem-sets/src/wtk/challenge.rst:94 msgid "Models" msgstr "Моделі" -#: ../../problem-sets/src/wrw_game/challenge.rst:93 +#: ../../problem-sets/src/wtk/challenge.rst:97 msgid "Enemy" msgstr "Ворог" -#: ../../problem-sets/src/wrw_game/challenge.rst:95 -msgid "" -"Represents the playing enemy-bot. All choices made by this model are random. " -"The model should implement methods:" +#: of wtk.models.Enemy:1 +#, fuzzy +msgid "Enemy model" +msgstr "Enemy Down" + +#: of wtk.models.Enemy:3 +msgid "Represents the playing enemy-bot." msgstr "" -"Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " -"випадкові. Модель має реалізовувати методи:" -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``__init__``" -msgstr "``__init__``" +#: of wtk.models.Enemy:5 +msgid "enemy's level value" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:99 -msgid "" -"Initialize enemy instance. Initializer should receive one argument of " -"integer type - ``level: int``. Health points value should be set equal to " -"level value." +#: of wtk.models.Enemy:7 +msgid "enemy's instance health points" msgstr "" -"Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " -"аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " -"встановлено рівним значенню рівня." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``descrease_health``" -msgstr "``descrease_health``" +#: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 +msgid "Initialize instance" +msgstr "" + +#: of wtk.models.Enemy.__init__:3 +msgid "an enemy's level indicator" +msgstr "" + +#: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 +#, fuzzy +msgid "Decrease health points" +msgstr "``decrease_health``" -#: ../../problem-sets/src/wrw_game/challenge.rst:104 +#: of wtk.models.Enemy.decrease_health:3 +#, fuzzy msgid "" -"Method decreases the health points value by 1 (one). If this value becomes " -"less that 1 (one) the ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``EnemyDown`` exception is raised." msgstr "" "Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стає " "меншим за 1 (один), виникає виняток ``EnemyDown``." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``select_attack``" -msgstr "``select_attack``" +#: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health +msgid "raise" +msgstr "" + +#: of wtk.models.Enemy.decrease_health:6 +#, fuzzy +msgid "EnemyDown" +msgstr "Enemy Down" -#: ../../problem-sets/src/wrw_game/challenge.rst:108 -msgid "Return a random attack choice from valid choices." +#: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 +#, fuzzy +msgid "Return a random fight choice" msgstr "Повернути випадковий вибір атаки з дійсних виборів." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``select_defence``" -msgstr "``select_defence``" +#: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 +msgid "Choices made by an enemy are random." +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:111 -msgid "Return a random defence choice from valid choices." -msgstr "Повернути випадковий вибір захисту з дійсних виборів." +#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 +#: wtk.models.Player.select_attack:7 wtk.models.Player.select_defence:7 +msgid "a fight choice" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:113 +#: ../../problem-sets/src/wtk/challenge.rst:103 msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." -#: ../../problem-sets/src/wrw_game/challenge.rst:116 +#: ../../problem-sets/src/wtk/challenge.rst:106 msgid "Player" msgstr "Гравець" -#: ../../problem-sets/src/wrw_game/challenge.rst:118 -msgid "" -"This model is controlled by the user. It represents a playing user. All " -"choices are controlled by the user. The model should implement methods:" -msgstr "" -"Цією моделлю керує користувач. Вона представляє гравця. Усі вибори контролює " -"користувач. Модель має реалізовувати методи:" +#: of wtk.models.Player:1 +#, fuzzy +msgid "Player model" +msgstr "Гравець" -#: ../../problem-sets/src/wrw_game/challenge.rst:122 -msgid "" -"Initialize player instance. Initializer should receive player's name as an " -"argument - ``name: str``. Health points are to be set from settings. Score " -"points should be initialized with 0 (zero)." +#: of wtk.models.Player:3 +msgid "This model is controlled by the player." msgstr "" -"Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця як " -"аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " -"налаштувань. Очки мають бути ініціалізовані 0 (нулем)." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``decrease_health``" -msgstr "``decrease_health``" - -#: ../../problem-sets/src/wrw_game/challenge.rst:127 -msgid "" -"Method decreases the health points value by 1 (one). If this value becomes " -"less that 1 (one) the ``GameOver`` exception is raised." -msgstr "" -"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " -"менше 1 (один), виникає виняток ``GameOver``." +#: of wtk.models.Player:5 +#, fuzzy +msgid "player's name" +msgstr "Отримання імені гравця" -#: ../../problem-sets/src/wrw_game/challenge.rst:131 -#: ../../problem-sets/src/wrw_game/challenge.rst:134 -msgid "Return a fight choice made by the user. Performs choice validation." -msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." +#: of wtk.models.Player:7 +#, fuzzy +msgid "player's instance health points" +msgstr "гравець отримує очки" -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``fight``" -msgstr "``fight``" +#: of wtk.models.Player:9 +#, fuzzy +msgid "player's instance gained score points" +msgstr "гравець отримує очки" -#: ../../problem-sets/src/wrw_game/challenge.rst:137 +#: of wtk.models.Player.__init__:3 msgid "" -"Static method to perform a fight. Takes two arguments representing attack " -"and defence choices. Performs fight result calculation and return it back." +"This method performs player instance initialization. It set instance " +"name, initial score points value and health." msgstr "" -"Статичний метод для проведення бою. Бере два аргументи, що представляють " -"атаку та вибір захисту. Виконує обчислення результату бою та повертає його " -"назад." -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``attack``" -msgstr "``attack``" +#: of wtk.models.Player.__init__:6 +#, fuzzy +msgid "a player's name" +msgstr "Отримання імені гравця" + +#: of wtk.models.Player.attack:1 +#, fuzzy +msgid "Attack an enemy" +msgstr "Стадія атаки" -#: ../../problem-sets/src/wrw_game/challenge.rst:141 +#: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" +"Perform attack on an enemy instance. This method takes an enemy instance " +"as an argument. After that, it takes attack choice from the player model " +"and the defence choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease enemy " +"health, assign score points etc.). Based on fight result should print out" +" a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" - -#: ../../problem-sets/src/wrw_game/challenge.rst:147 -msgid "``\"YOUR ATTACK IS SUCCESSFUL!\"``" +"противника як аргумент. Після цього він приймає вибір атаки з моделі " +"гравця та вибір захисту з моделі противника. Після результату битви " +"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " +"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" +" \"повідомлення:" + +#: of wtk.models.Player.attack:10 +#, fuzzy +msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" msgstr "``\"YOUR ATTACK IS SUCCESSFUL!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:148 -msgid "``\"YOUR ATTACK IS FAILED!\"``" +#: of wtk.models.Player.attack:11 +#, fuzzy +msgid "\"YOUR ATTACK IS FAILED!\"" msgstr "``\"YOUR ATTACK IS FAILED!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:149 -#: ../../problem-sets/src/wrw_game/challenge.rst:160 -msgid "``IT'S A DRAW!\"``" +#: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 +#, fuzzy +msgid "\"IT'S A DRAW!\"" msgstr "``IT'S A DRAW!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst -msgid "``defence``" -msgstr "``defence``" +#: of wtk.models.Player.decrease_health:3 +#, fuzzy +msgid "" +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``GameOver`` exception is raised." +msgstr "" +"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " +"менше 1 (один), виникає виняток ``GameOver``." + +#: of wtk.models.Player.decrease_health:6 +#, fuzzy +msgid "GameOver" +msgstr "Game Over" + +#: of wtk.models.Player.defence:1 +msgid "Defend from an enemy's attack" +msgstr "" -#: ../../problem-sets/src/wrw_game/challenge.rst:152 +#: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance" +" as an argument. After that, it takes defence choice from the player " +"model and the attack choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease player " +"health). Based on fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" - -#: ../../problem-sets/src/wrw_game/challenge.rst:158 -msgid "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та " +"вибір атаки від моделі ворога. Після результату бою необхідно виконати " +"операцію обчислення (зменшити здоров'я гравця). За результатами бою " +"повинно вийти повідомлення:" + +#: of wtk.models.Player.defence:10 +#, fuzzy +msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" msgstr "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:159 -msgid "``\"YOUR DEFENCE IS FAILED!\"``" +#: of wtk.models.Player.defence:11 +#, fuzzy +msgid "\"YOUR DEFENCE IS FAILED!\"" msgstr "``\"YOUR DEFENCE IS FAILED!\"``" -#: ../../problem-sets/src/wrw_game/challenge.rst:164 +#: of wtk.models.Player.fight:1 +msgid "Fight result calculation interface" +msgstr "" + +#: of wtk.models.Player.fight:3 +msgid "The method calculates the fight result based on the game rules:" +msgstr "" + +#: of wtk.models.Player.fight:5 +#, fuzzy +msgid "**knight** beats **thief**" +msgstr "**Чарівник** перемагає **Воїна**" + +#: of wtk.models.Player.fight:6 +#, fuzzy +msgid "**thief** beats **wizard**" +msgstr "**Розбійник** перемагає **Чарівника**" + +#: of wtk.models.Player.fight:7 +#, fuzzy +msgid "**wizard** beats **knight**" +msgstr "**Чарівник** перемагає **Воїна**" + +#: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 +#, fuzzy +msgid "Return fight choice from the user's prompt" +msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." + +#: of wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 +msgid "" +"The player is asked to make their decision for the upcoming fight. The " +"chosen value is validated and if it is invalid the question is repeated." +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:115 msgid "Settings" msgstr "Налаштування" -#: ../../problem-sets/src/wrw_game/challenge.rst:166 -msgid "" -"**settings.py** module contains constants values for the game (e.g. " -"``INITIAL_PLAYER_HEALTH = 5``)." +#: ../../problem-sets/src/wtk/challenge.rst:117 +#, fuzzy +msgid "Settings module contains constants values for the game." msgstr "" "Модуль settings.py містить значення констант для гри (наприклад, " "``INITIAL_PLAYER_HEALTH = 5``)." -#: ../../problem-sets/src/wrw_game/challenge.rst:171 +#: ../../problem-sets/src/wtk/challenge.rst:119 +msgid "For example," +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:123 +msgid "Initial health meter value for a player instance" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst +msgid "type" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:125 +#: ../../problem-sets/src/wtk/challenge.rst:131 +#: ../../problem-sets/src/wtk/challenge.rst:137 +#: ../../problem-sets/src/wtk/challenge.rst:143 +msgid "int" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:129 +msgid "Indicates the level to initialize the first enemy instance." +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:135 +msgid "Set the score value to assign when an attack is successful" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:141 +msgid "Set the score value to assign when an enemy is defeated" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:147 msgid "Engine" msgstr "Ігровий рушій" -#: ../../problem-sets/src/wrw_game/challenge.rst:173 +#: ../../problem-sets/src/wtk/challenge.rst:149 msgid "Engine module should provide two functions:" msgstr "Модуль двигуна має забезпечувати дві функції:" -#: ../../problem-sets/src/wrw_game/challenge.rst:175 +#: ../../problem-sets/src/wtk/challenge.rst:151 msgid "``get_player_name``" msgstr "``get_player_name``" -#: ../../problem-sets/src/wrw_game/challenge.rst:176 +#: ../../problem-sets/src/wtk/challenge.rst:152 msgid "``play``" msgstr "``play``" -#: ../../problem-sets/src/wrw_game/challenge.rst:179 +#: ../../problem-sets/src/wtk/challenge.rst:155 msgid "Player name getter" msgstr "Отримання імені гравця" -#: ../../problem-sets/src/wrw_game/challenge.rst:181 +#: ../../problem-sets/src/wtk/challenge.rst:157 msgid "" "Asks the user to type in his or her name and return it back. Leading and " "trailing whitespaces are to be trimmed. Name should contain at least one " @@ -2113,54 +2235,179 @@ msgstr "" "початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " "символ." -#: ../../problem-sets/src/wrw_game/challenge.rst:186 +#: of wtk.engine.get_player_name:1 +msgid "Return a player's name from the user prompt" +msgstr "" + +#: of wtk.engine.get_player_name:3 +msgid "" +"A validation process is performed as well. The player name cannot be an " +"empty string." +msgstr "" + +#: of wtk.engine.get_player_name:6 +#, fuzzy +msgid "a player defined name" +msgstr "Якщо гравець переможений:" + +#: ../../problem-sets/src/wtk/challenge.rst:164 msgid "Play" msgstr "Гра" -#: ../../problem-sets/src/wrw_game/challenge.rst:188 +#: ../../problem-sets/src/wtk/challenge.rst:166 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated " +"- a new one should be initialized with level increased by 1 (one). This " +"case should be reported to the terminal. If a player is defeated - the " +"\"Game Over\" message should be reported to the terminal. " +"``KeyboardInterrupt`` should be handled as well - it's behavior is " +"similar to \"Game Over\" event, but \"game over\" message should be " +"omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." - -#: ../../problem-sets/src/wrw_game/challenge.rst:199 +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " +"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " +"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " +"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " +"також слід обробити - це поведінка подібно до події \"Game Over\", але " +"повідомлення \"Game Over\" має бути пропущено." + +#: of wtk.engine.play:1 +msgid "Run the game" +msgstr "" + +#: of wtk.engine.play:3 +msgid "" +"The function initializes player and enemy instances. After that it runs " +"the game process in an endless loop. Once the player is defeated - it " +"stops the execution." +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:179 msgid "Optional Enhancements" msgstr "Додаткові Вдосконалення" -#: ../../problem-sets/src/wrw_game/challenge.rst:201 +#: ../../problem-sets/src/wtk/challenge.rst:181 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" +" записів." -#: ../../problem-sets/src/wrw_game/challenge.rst:202 +#: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Create game menu, for example: ::" msgstr "Створити меню гри, наприклад: ::" +#: ../../problem-sets/src/wtk/challenge.rst:188 +msgid "Store score table to the database instead of using text file." +msgstr "" + #~ msgid "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" +#~ "[Starter template](https://github.com/edu-python-" +#~ "course/django-template)" #~ msgstr "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" +#~ "[Starter template](https://github.com/edu-python-" +#~ "course/django-template)" #~ msgid "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-" +#~ "course/blog-bootstrap)" #~ msgstr "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-" +#~ "course/blog-bootstrap)" #~ msgid "Code notes" #~ msgstr "Примітки до коду" #~ msgid "At least 50% coverage." #~ msgstr "Хоча б 50% покриття тестами." + +#~ msgid "WARRIORS, ROBBERS AND WIZARDS GAME" +#~ msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" + +#~ msgid "**Warrior** beats **Robber**" +#~ msgstr "Воїн перемагає розбійника" + +#~ msgid "" +#~ "Represents the playing enemy-bot. All" +#~ " choices made by this model are " +#~ "random. The model should implement " +#~ "methods:" +#~ msgstr "" +#~ "Представляє граючого ворожого бота. Усі " +#~ "вибори, зроблені цією моделлю, випадкові. " +#~ "Модель має реалізовувати методи:" + +#~ msgid "``__init__``" +#~ msgstr "``__init__``" + +#~ msgid "" +#~ "Initialize enemy instance. Initializer should" +#~ " receive one argument of integer type" +#~ " - ``level: int``. Health points " +#~ "value should be set equal to level" +#~ " value." +#~ msgstr "" +#~ "Ініціалізувати екземпляр противника. Ініціалізатор" +#~ " повинен отримати один аргумент цілого " +#~ "типу - ``level: int``. Значення очок " +#~ "здоров'я має бути встановлено рівним " +#~ "значенню рівня." + +#~ msgid "``descrease_health``" +#~ msgstr "``descrease_health``" + +#~ msgid "``select_attack``" +#~ msgstr "``select_attack``" + +#~ msgid "``select_defence``" +#~ msgstr "``select_defence``" + +#~ msgid "Return a random defence choice from valid choices." +#~ msgstr "Повернути випадковий вибір захисту з дійсних виборів." + +#~ msgid "" +#~ "This model is controlled by the " +#~ "user. It represents a playing user. " +#~ "All choices are controlled by the " +#~ "user. The model should implement " +#~ "methods:" +#~ msgstr "" +#~ "Цією моделлю керує користувач. Вона " +#~ "представляє гравця. Усі вибори контролює " +#~ "користувач. Модель має реалізовувати методи:" + +#~ msgid "" +#~ "Initialize player instance. Initializer should" +#~ " receive player's name as an argument" +#~ " - ``name: str``. Health points are" +#~ " to be set from settings. Score " +#~ "points should be initialized with 0 " +#~ "(zero)." +#~ msgstr "" +#~ "Ініціалізувати екземпляр гравця. Ініціалізатор " +#~ "має отримати ім'я гравця як аргумент " +#~ "- ``ім'я: str``. Очки здоров'я повинні" +#~ " бути встановлені з налаштувань. Очки " +#~ "мають бути ініціалізовані 0 (нулем)." + +#~ msgid "``fight``" +#~ msgstr "``fight``" + +#~ msgid "" +#~ "Static method to perform a fight. " +#~ "Takes two arguments representing attack " +#~ "and defence choices. Performs fight " +#~ "result calculation and return it back." +#~ msgstr "" +#~ "Статичний метод для проведення бою. Бере" +#~ " два аргументи, що представляють атаку " +#~ "та вибір захисту. Виконує обчислення " +#~ "результату бою та повертає його назад." + +#~ msgid "``attack``" +#~ msgstr "``attack``" + +#~ msgid "``defence``" +#~ msgstr "``defence``" + From 2055111818fcac3cae33f6b63bc169171a7a5560 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 14:18:50 +0300 Subject: [PATCH 303/689] Fixed #50 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0234fb152..c833158a2 100644 --- a/Makefile +++ b/Makefile @@ -19,8 +19,8 @@ SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) # Makefile targets all : clean - @make LANGUAGE=en html pdf - @make LANGUAGE=ua html pdf + @make LANGUAGE=en html + @make LANGUAGE=ua html clean : @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" From af2b09792648dda32f5a022f35564f24581d468c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 16:07:22 +0300 Subject: [PATCH 304/689] Fixed typos in RDBMS translation - fixed #43 Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/rdbms.po | 72 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po index 138a92235..481ee4f54 100644 --- a/src/_locales/ua/LC_MESSAGES/rdbms.po +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -10,7 +10,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" "POT-Creation-Date: 2023-04-08 19:28+0300\n" -"PO-Revision-Date: 2023-04-08 19:29+0300\n" +"PO-Revision-Date: 2023-04-11 16:06+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -289,7 +289,7 @@ msgid "" "``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " "arguments) returns the total number of rows in the group." msgstr "" -"Функція ``count(field)`` повертає кількість разів, коли\" \" ``field`` не є " +"Функція ``count(field)`` повертає кількість разів, коли ``field`` не є " "``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " "кількість рядків у групі." @@ -392,7 +392,7 @@ msgid "" "simple to solve as:" msgstr "" "Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " -"категорій, його \" \"просто вирішити так:" +"категорій, його просто вирішити так:" #: ../../src/rdbms/aggregation.txt:148 msgid "" @@ -401,9 +401,9 @@ msgid "" "provides the ability to group rows based on some field(s) values." msgstr "" "Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " -"кожної категорії, це \" \"стає неможливим вирішити без групування товарів. " -"Пункт ``GROUP BY`` надає можливість групувати рядки на основі певного " -"значення поля(ів)." +"кожної категорії, це стає неможливим вирішити без групування товарів. Пункт " +"``GROUP BY`` надає можливість групувати рядки на основі певного значення " +"поля(ів)." #: ../../src/rdbms/aggregation.txt:152 msgid "General syntax is:" @@ -436,12 +436,12 @@ msgstr "" "вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " "якою порівнюються текстові значення, застосовуються під час оцінювання " "виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " -"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY \" " -"\"не можуть бути сукупними виразами." +"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " +"можуть бути сукупними виразами." #: ../../src/rdbms/aggregation.txt:192 msgid "HAVING clause" -msgstr "" +msgstr "Вираз HAVING" #: ../../src/rdbms/aggregation.txt:194 msgid "" @@ -493,8 +493,8 @@ msgstr "" "забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " "отримувати доступ до реляційних баз даних. Реляційні бази даних " "організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " -"стовпець представляє певний \" \"атрибут даних, тоді як кожен рядок " -"представляє конкретний екземпляр цих даних." +"стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " +"конкретний екземпляр цих даних." #: ../../src/rdbms/index.txt:11 msgid "" @@ -521,10 +521,10 @@ msgid "" msgstr "" "СУБД також надає низку функцій для забезпечення цілісності даних, таких як " "дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " -"резервного копіювання\" \"і відновлення. Крім того, системи РСУБД часто " -"надають інструменти для керування базою даних, такі як інтерфейси " -"користувача для створення та модифікації таблиць і представлень, а також " -"інструменти моніторингу для оптимізації продуктивності бази даних." +"резервного копіюванняі відновлення. Крім того, системи РСУБД часто надають " +"інструменти для керування базою даних, такі як інтерфейси користувача для " +"створення та модифікації таблиць і представлень, а також інструменти " +"моніторингу для оптимізації продуктивності бази даних." #: ../../src/rdbms/normalization.txt:3 msgid "Database Normalization" @@ -616,52 +616,52 @@ msgstr "Початкові дані" #: ../../src/rdbms/normalization.txt:1 msgid "order" -msgstr "" +msgstr "order" #: ../../src/rdbms/normalization.txt:1 msgid "customer" -msgstr "" +msgstr "customer" #: ../../src/rdbms/normalization.txt:1 msgid "quantity" -msgstr "" +msgstr "quantity" #: ../../src/rdbms/normalization.txt:1 msgid "total" -msgstr "" +msgstr "total" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:180 #: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:363 msgid "John Doe" -msgstr "" +msgstr "John Doe" #: ../../src/rdbms/normalization.txt:1 msgid "(Apple, Orange)" -msgstr "" +msgstr "(Apple, Orange)" #: ../../src/rdbms/normalization.txt:1 msgid "(2, 3)" -msgstr "" +msgstr "(2, 3)" #: ../../src/rdbms/normalization.txt:1 msgid "(100, 50)" -msgstr "" +msgstr "(100, 50)" #: ../../src/rdbms/normalization.txt:1 msgid "(200, 150)" -msgstr "" +msgstr "(200, 150)" #: ../../src/rdbms/normalization.txt:1 msgid "Jane Smith" -msgstr "" +msgstr "Jane Smith" #: ../../src/rdbms/normalization.txt:1 msgid "Banana" -msgstr "" +msgstr "Banana" #: ../../src/rdbms/normalization.txt:1 msgid "25" -msgstr "" +msgstr "25" #: ../../src/rdbms/normalization.txt:43 msgid "" @@ -673,23 +673,23 @@ msgstr "" #: ../../src/rdbms/normalization.txt:46 msgid "1NF applied" -msgstr "" +msgstr "Застосовано 1NF" #: ../../src/rdbms/normalization.txt:1 msgid "Apple" -msgstr "" +msgstr "Apple" #: ../../src/rdbms/normalization.txt:1 msgid "Orange" -msgstr "" +msgstr "Orange" #: ../../src/rdbms/normalization.txt:1 msgid "50" -msgstr "" +msgstr "50" #: ../../src/rdbms/normalization.txt:1 msgid "150" -msgstr "" +msgstr "150" #: ../../src/rdbms/normalization.txt:54 msgid "From now each peace of data is represented as atomic value." @@ -708,10 +708,10 @@ msgid "" "to each other via a foreign key." msgstr "" "Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " -"елемента і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " -"спеціальну таблицю для зберігання інформації про самі товари має бути " -"створено. Після цього таблиці ``order`` і ``product`` з'єднуються " -"(пов'язані) одна з одною за допомогою зовнішнього ключа." +"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " +"потрібно створити окрему таблицю для зберігання інформації про самі товари. " +"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " +"одною за допомогою зовнішнього ключа." #: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 msgid "``order`` table" From 3c69a3aa6aecc0db310e31c86884d6b64891f527 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 11 Apr 2023 14:51:50 +0300 Subject: [PATCH 305/689] Issue #44 - updated "data hiding" section description. Signed-off-by: Serhii Horodilov --- assets/img/wy_ban.jpg | Bin 0 -> 300914 bytes src/_locales/ua/LC_MESSAGES/oop.po | 97 +++++++++++++++++++++-------- src/oop/intro.txt | 69 ++++++++++---------- src/refs.bib | 9 ++- 4 files changed, 115 insertions(+), 60 deletions(-) create mode 100644 assets/img/wy_ban.jpg diff --git a/assets/img/wy_ban.jpg b/assets/img/wy_ban.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb8122c6983d4b2608258abafe54b2e5a5f4712f GIT binary patch literal 300914 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�YrW9bVw3*SGdvmhM@Z}Bz_aC zHn~{<(uT5q-xxrbGv44-B8=8c-r=NivB6w3${LB@kDM7SYeXM5Ju1#G-eI*^>{oFK zMw2IIr(xGVv}duV;9s_&izaD$Nu1t+{DzNzdJ|VBc+LC;!>h(3y3|a;E29$vBITGS zdMvzo9QL6i%AoaB>}+w$F@xrHHz)CdOb&ocn@BMOSxYwuBscsOgsy0g6%~c}d|7urx)CF}H zz&@)kBzkL!Y6e}CP`FaS3(?I;B$sYBwi@L)cz?3pS^iu8plU1#V*6)v{Na+v+9U=V zHa?Z5>H~y&qvR-4?o}Zkvw9a^Ih+#jsW$(|i+O-`(J)kErD6YZ$7XH9!k-IgmA_eI zWQBolz*$@hJ8|9M4qI_1(MZ*2a7raHicH_p={XNgg6tH_BLs%zt=-s`+zSIiaWSQP z61%Pmhu>aE;Jp24%sdMiIbOH^$}dZAFd2aY`|D)WwvkxERV}wBc{#4y8WV$pl7|>` zgGElqjrx=N!2QJJenj6FewMV6oCIv=_s3hjSAa*`!k!?ICYDExYDw#Hz3kr~MSb>S z61LIb1u|}OQtaCGDhunDQ`RtcN(-fL_;UG()T9rD`pM(f&wW5#)(c$0@h^W{7&?u> zJ%9<^g7dKQ^X?0^rS}J=Y2j+BYOGMa_59mH)3eQDNMjHvU3p&n-fxmCd@hw#9u~oI z9wR}4Hmh%3 z>JSBK(M**%)wL&;swWqh5UEa-qW9MtO(B%xhMW6dW*=oK>`9mg&=e-gN?!n@S<&Wk zkAE0MGyo4aA{h^NuaoV&|0(Fn!ELG@h?+@yc+0qEjj%5pP<_tokL-tftcN-Sb}P0( zxA!sTOU9nZxReu-kzoRplCdZ%2}<$d<7Y4;W+S_ZX1;-Z*y(%(PBOLcI(2kD3NjBJ zL>;{H4tlSB@nT!ib&-9pte3j`$gflur9*$y-i}gHK;A9ViyPY#o}W2fl~O#Bz4c~( zt1m1agpzgN)U5I7@~Zp4HSZwLjM>2Z3;Y{xT+iS^@H&u@?jGAbr4zZTtrIap68qYZdv`*-!7t z#7Oa}hMk=>Qs(aJku*DwPQlVReVNSLF?uU)@#7M$3J|-H@p-J0cg#xvnd9)|>35Br zZ&@0Bo(>CQqQ5XlizAx>s{c(5&K-*TY(MQ=a?Os(WWy5B%x^%i%Q9XGv;m&z! zZS>tIPxjF110?&|NwvGb+Y%9G2{ z1YhHH?Fe^{H%WF&o9H$J^~mQ7DsMYH*+*C)5|QOWel0%Mf2K;6SbLgzuLyEYDmht} z^+fx#Q4H=BEDHAph*-NrFS+Cy#3+IC19)Qk~Q zL0GqcTeEj#S|@8ODGu{``}7=*I9{AQ?Xo~XudyNbky{LVt`c9(iVcd5)Lju!E%^d- zJdIlE5Vb|20aUM`)-vQcN5-`RQeoKS=dtus-wUXVPA-m)#%=!KD}6*bA(RJZE{%38 z)=u0ojAIG`>4&bo_$94Fir7bMkEv2CFMk<^rS?G+0;oyvw2)so-}G518jp9SA#2jpdbG{sg%8ZYJK-Q+cd6h`ww{3K<`u2F3JLwkMVrLgsI0LFRQ`O$3N3|Bj zJPf^-A`{T#x;^(6c;=bENTBBbb&&Bic%>5;P%TG`Z>1mT8P!!!Kw1IpEUg`yDmX5G z>cpdikWHdGwVpfL#p94@*)$CE{~}#`1m#zNwH39FDD2Nc&n5z0l2TCq0>nW8Neja? zhi80fdn2@9d+BG-$v38X^4~au9M6)})+m{#ggszoJmuJFFrt>kutBHL zN(D8Yl%Avtsb(%g);k59yc8A7ME7Xu{cT#~FmM|%(#_TN^4&>AINqvDZgTD- zZ}_L*9@*DR5F-&HiuO43;*satuj+xj;>o<9`czHh!&!TKk@!IQuKvUN96rKntW5Tb zyR#guYXMmdX$2+}C*?L1?Hy%4Nw5zHXI~iaoZjCIRM5#SISO0#MyIO)`& zL2%N$eFP(XC#g*!R3E3d)+(EY{zVYt`;t~XSK)CdLUFPmO@a@0NPpk&n#Yv;(i>rw zZ?9EXel`B)TYu`u@2{ZTLLpsRhb~&&u$ceG(*k8P$|=h&r)lB08-jU8b8CpB`c{R} z(g*kLd6{>8`IX*jo_cQWCW(Hjq@AA}X>?Dq#{Tcj`%B67yB{v@$NZvh^@gKg!HZ4> zAJia=8z&-e0S^9jCJ%jt~nowQYa zE2i7RDn07xe3|rB?cQi|hj7?YKchFe&g$c;HNJO+#qNC-LR=}JwMV$D+dY-n_j-P{ zpLaGP5bP}bpO7+F{I2@s(|^|FUr!)QV8nH_#-Rs^GDOMX;S1<|tT`Yt)L8P@S6jJP zyKU#bTrEIZ^dD!>i879Qymo#e+^ySTvKn|c$&87n5@%IwM&$H|W?i|}yvFs$Z8;Pv zUXTnl?7}?O*S;zKOBhAGekFybrp~=c^A&3&cRqQ&cEUNQ`_x)U>&rv^csu?Pm9~33 z-HwKou7G7Cag#^X&a*3$Jzq1`&C}*<;pU^Hd)xlrXhgHv%d5jH9E%3cL7!IV;%Tw% zIrKtO?Qgd8zc`b)-fH^$trP`aI*c&TMZxJgo+ImiDvit4X@D@?RgUKj;v?+R5r;i3f1P>$l`~D<+P8aVJM<;pGroj{R@?lS zZ;9jKM^IG0r_cGw6~CWrx&qe!AX4I)_M$gtX>C5|I;~&7T`|Jn-If?tiVl>xTbnSS zyI>CLp}y|?;pb-eMOfTBO

    _D@9{qBSj<+Qtme#5@w6LlGCu#h+AvqL5x9ryyndt6(tDFx4;Uqd;oA^Fu8Gfe}EiFoP-x(h6uow>II?sNGPpH?u15d7bZJEWFxQ zQf*;ULA2ilOM&_0RD*EghnhAr0=p3LYr8{#UU0tFBo!g5J=Qk?h>no>?UF-(gIUDX!oeCqbkPHsGldcvhYoD>_V_V6AX29zNq#;VHg9rF58BspJS~WRIAKG^WfG} z9|cPL1(119W7mMH8E@)7{^w2*5`)-0=20LE8p$J?tF3W%5%zL~?u~5$4oKa=txs&& zd+Y@NTknEeaQxpk6cEJIlZgU-1$kPS&+v(#Cm^G7g*B*!tw-vn2$gQ1rUWsA`Sy_@z*S4K<#9S2v z-EBOR?Y)7Xl3kQIt;eMNW#xYINr1t2m07i#e7s3i1+LL3XPf!q@KwqHB(Hg8_AZ&?skB4ewV)3Yqs z;gubzq{Q>50A~+$&dnG3*_mia3k%4(LmLersYdLoSy{dtDTwrHtf3W83h2l7KZ8ci zVTelmQFgziYp(xP?wPdyrc`Ho^YPw=0q?WktGGwv1m zC4FBS!#>ji9vtE)y|U8r!*pvu4|y*?ABOI5)>%5S7-PHKrPP zfm|Cg_7nTE9%gw}yNXM{00f-z9Hkb?8;`DE{3CMxn))u{98C63 zRJX>+I1cNB?t5n)FSFa+}`*K6gmez)h19dG|kW4sOrOAn*4^Xl(@D z6nVdR_{SUjH&Bo0-|(ha^}l_nc>m?KS;!k4Vm>s~z*CBwKEFMQ;bAK>5qEjEc((ua zuZUZ7SkOt&Tu_a<0pI+=@HvZ9Dv^b`&PwaviisV3~7@! zp&eO3k@&HoOY{3#%oKpaC^n{1*-&ZIx&waq|CpM{^S|DPBLu16kbD= zZCbBIUe)Eh_o%MDzE$_!{X)x{?pe`h=Ds@ps5CABIqWwBzOeV`|0KjxOhi0hQZvp6 z@&YopvE2ll)hcx`jOAU1NjjM+lA;BY;|_N^^fGKW73()n4)`RIT2I0K^^asNPzZ?~ z_geq%Fe%D)q)1h=`4Ub*`2J~Oxcct%m)r6^S!SwdhRea@f-f8w;7{IRyXv&4z0DL$ z2rM^vP%~tt5t0czAu$xdtuJ`naz>*&-+o2gL=)4H6KD|KIDFY@?ya|0+4~S%^m2dO zxF|MoI`RRfwFj=H?#wSJY5kR4VhQ=Xe${Sn%VSq4D*)lK+!%01Dc8A zCVy8|1IUIVtqpP&b?LZMZ#w>*_AV=TsZBEQ{&-6k|1nOqU-brZ5O#EV`msCfXhKlC zr~aL{R7U_zi2+@m1m=W)rr+qI7o!yV_!aOEZI=u$=dZ2RI>L7ik!xiiV%HzT4o!c1 z_R!kbPPZI(**j9TA{`bDZTERz*tcib8J{EE^stY&+qO?6`S6C*3 z=8c%V_WpSA`43-1l9qfs@_ZGZc_!1r{kvyYwgIaH;dPV@;n+y+ELxJC@JIc!{#ub% z>mB^|fVpNnp?V)hxU%&Hdu8ZycJ2qdQ5}?G)o&kUWG$V!E`Y_gOsi}XK!fTDJ|kHQ z*w8?*r{zX)yx`o5pL?c!<4E*fsN^%@q_N3{+RvwNsq${A=Q5dU?*!tsGjd3uO@21^ z9|tK|-!oHN|1CX&pGEK)k=Hz}Y4+I<*NIqqMNJ1dVb1H+5|NV56ULqa^1jC>k97XvBEMbM*o78_d}t4g z?7TYh`_!1&9~wq}sWlnt}1aGCQ(GXXJ)zbOZS27 ztnp>MVmO~1%*fjri}a|yx{{;~Mp^`6S$5;&P5^P<-s=n`=>>i+%6@ECXcgec;%MgU zIdFbjBoHdhy2`>qF>)v3jM_^rLT9@lcN`jatT=IQsnqS>MWa_@3-&KoLOvh*^iPxA zV{ozDXSYyU{li8SL&2HHo0a^9dqEg(YaTCzGi*|Br~kdzy&*eo2e>IqX?c{(GM=8@ zQXb_Y?PC|}ykS0=!QalpIWsB;Yv7{xw~CiW{_dK4zxaOH9K_qSA3X4fkj;A)y;DZR z5nMi#eUZrI;YaV>lpRNLUa{GHm+B9&|N?9t}6|Af@% z*5pga*uH<^I7!g^PY+sc)=?SX2zq;LykHoO$@^^3g%i zobr*m6_YjfQGs63ogX&C&*`$7yXD~ssJwVld2x>B3bK_!MourVl6Vqu*Ahq7@_~j; zmnFJ4?Y+{wS!JHn$E#avDI4EAF(O-!%M{u zE_Z)7Tr2ptbjH6szr`i#plWi_<{bRW!cZOQ3F4&y!hX>Q7YnT>oZ-h)`?`{UA6XJp zIJyzf?(RtUEb}lruyMH6Wx;LgVvTueR`r=<=YN;o&)hs%AVOd5(CtcD(vW@czgZqB zC#n9nb}-xr!-mXY`2>|#^W$#=XpUx)rL-y>4pB<6?hWt`e$3CsDVop0588Kqa|?_>$y;GJb7xX+E{t_A2xvXk_oiT7Sh&b`YYRvQY(9&n>ysVXh|uCCyUgxL zm&jlZ^MA}4%o_%wI%kjY&OsA=lT@}Svrd^_Ost{x%ck{JmPVUP($$Zj120S|jSKho z06&wD8T@lLX&iB&(F6ZaK;i|N#mK$mph|m9Y@xnQEak){C5^Dut$;-|NPk!&Khp_n z?gS&4Q+l)Y9M1&gR{QkR0Vl&GVrycAo%gjBKI;ay&L@8za;-ZBErp-yz}y4kICnj8 zFDNrgy89BK1jzb>9AU_N%1=hSx&6B>*Y&BlBJb(@<25Aua=Js$Z7t}0wf|wL`-%bU1s8{a2Uo8X)`89s^hbzKj^-l);PM20{Z)s#O`4hd`L|-{MCZh& zl`Z^1==T{Ow5sPxLkre8{~&g9 zFLnFe^wxu}*xm|Y(doIZIB9N;(N+I0~|4R}IUEiBEm9T<OrN^bEsvryK^1=YKN^H_O1#T6L4r)Y_)ZXSE zW2??N9{GJH8rg=7-_jY6>Yw$Np1qRK$<5A8N&w(j(puRANwt!t@n|&1;f#ZsY&D*7 z^xrKzAYBV=^;PV+`(O9W%-02v9vSDY?C1!O>%m%eU{40i3muIMdwk7$8~^o+{uTF- zL`AlO#+3*SHhjWP?OH6j^3loxxFRNglBs%U6QV5Hkfb>2d##;YnBur5J`XVV7vn!;L>1b~UwTJC2bM z`JFPwI}g7p1ru>tgcHUPGskKdljA)BURyDA;Fgp!_R6#=*?I8$rL*7P|AhK)DEes# zMpOXcivX%dv{MeVPt46)rj`;a*bf~)xGxNrY$;&ow=^{7_hbj_%J%x=&jjYcEH;Wp zQb?p@o-R8MCM9cYQeGEzrLpUK`t{1Btr9`vrmq97V*geLFPh(6qO0`VTWlJKE~58{bgdH7@&3%!`~ebq~y=Fjcjb88}-hp?4N> zymX<~d@#&kBbRDu&k+Q2r2bDsPzyHW8t}}C3PVMbf}_K=M;=8Oy9Y6JA4xOro=f|3 z2tMoG$lZcvk0+tdAG#0{Q6w(3?}`v;QpQ<|r_X`9uH##Ea?cG@{$y%ms?Xc!w84`l z^GhN`g{VR=MecC!I@m-=YGr8Q(;2G*ZE{K8Zk+_QD2s0ol^!SgT)NQUjkg*Qlp)-f zadHvHLz>7q%CQUL%TbEeTnlDeR_QI*KxF;T*7pOPr^W*O#fiLhs|#+!_9QnEa_%o6 zers1}TCyE47osd6{jPdUKzwxqRkgx{6^gth1yK?ot8QL^BnH)mlSU;|rPjct+p$WY zhfP;Rc3I_YKi&9;4@en5NbumIRSfS+*DU+~*Pov<9r{R-PUPBBz|_RmwgnxfIy-!>DDX<#lfBoe2`G==jH6U)$gfG(-E7W06&3M3 zDsVeE(jEw3LH6&W>S`x{)nO~&r~hsKn~GQZ@qC&OEurS-4qr@u9`O{5Kv_1uU#xwe zcsRyIG1df(Sq$x;BT3w|KhGaDB_iiNOULim@oWAQYKHW4hG_Yd4S;SzOK`jP#SfF- zF{37{MSs*_6ME*Iy%yGnU=*Z55lIleCL(L-Nl=|j6#4ACdlXP6!WMeN;H}s$dD3}^ zo0RxE;O8Ns!}`jtCJeN5>pcJ36XCy8nUA$=!qI#Tk>do2;9iDcShqDRJ8N z&j4kw3oyl3X&yFAdwdJ6q??z9%qKjE`VC)4>oo8J1!VzIhlXJmzix2Fz6@l$PP`oo z7f5X9e)(bg-TqY0$iL}FmA@Ys`??RHi%RFZJwMMqI-@f_ko!1pa`%771FG0fPBC5K zJvcgV{@_@bSJ=^9k!9FpD;C*~V`$`vn5m%+?JjUpzXd8h{7nCo4dM8ae1mQ+^`v*D z48AdSLl9we#PNpor%m|#EyypW9>|4$HfQM4>{DN#x*1aU2gW}L6nrbwy!7Ce6g}0> zEsgGPd-{iCdv|j^e<0WBkqEh|rbb@E%CL={XHm`wS5<8{twQslotd1tk;q-;qfxNI zDusc?SARNx-50%1=+12u6#|SkMeq(ay1BQUmpRKO&Ru~<0%PW~5qjbel6$&kR1L~N z3VsoJf*)Z5Jyu25|EJyPkZ^CPEA^Jhv?ZGRG;(Bao-e(VBz1dvG)ez0S%kRB^nLuC zFbR1ju&Gt7#AdIVCZu*9rz>p&@Uv6h-$8l7$KO$CK^WkutNk=Zfeds5WlVtqd`MR$ z1p!u_xWan3hr|dZWduqZ&kyuHS3Cs0KOHr1R0FJ61Z_ovew z68>jw3cAVGfpwPvQFTwdY;!kofGUgJ;7P*tZl8a%k;=I2x+1cSia_M5EJMb)j-HNB z#&2O<$A!(EMbHkU?s_S10qr%f(h0jB1~_lU?b~Efy7Qr~K#;8n0WI z9nlbmu2Xly`l^vNZ*M5wf4eCPC6*X36F1RH*gaYY=bngKT84HJtaA&gJeAGtzWf5% z6k|BZ6VGIW3KtR^4(*!s|C#I)eZ2Ne+BULP@Av)$&K!4&-G4u`BE#;L^uM2P@(hw7 zm*=*=zm?LDgD~C$U|(su#j&saISGTv%KFoM%Cv7SaIhh+BYbR~H`DG}NMQtHWDWtEy2`LNlM?*76k0X1sh zDF)UGP(IQS8Qp`FuXYE@M~QPOLDz0x1}X0~N0wM~!l8zBv&6?|@0?OVv0R9;%R>Q1 z_~@WqkYWw(zVxYk+Km3QL3NIak8^FqzwQ{4l;T5YRG9Yn&b`)pNDrfOs+KGT2DP%H}lH&|J|>E;FPYG2i!7x zjSw#uNzGwXm2hEHiXID{P`3C8Y2+@pp>V>b2Hy8HpS=F6eFYn*~8vLN~$<=Lnc^=>u z^MJ>lDh0mTB-!i0U70su-$3L!8xCJUTzn7hL9^z@VDrO2iR=oW$N;%=?<;e3dskdxP**jrqm-lm_}C@KMdRA;7q)+vsn!}-wV$1zA*#et&er+Nz`OBP! zau@4H-->YL)mE9XD6P=1!>Z752Q1p*G8$Q-!QgG!4Rz7B+ge>*q9&Tc%Mpbx{93?b z|MhX$p zx3gO9=%cuV0xuYVJ-!=q;>Bp{bwXF4S;7{Lh^DRS+ZKkYz4OsNa2wUb&D)PC7S@lF z*idY2NUW)B%t$akttb^^3Sc#|8u2@jLm{u}E&Spo%$i^DLSt(GCF~j~kg#25m~=j- z27M(xtO8IW!jj3a%45o*=86R#T43>@Uk~pYC6NQm1`(g+V_he%Ij~608AQ(rZCz3dRLM^b&K*q?ERUpIr;-#DQ=1x zX&H;!ir;pdR=4L)L47!zl(nYqP2H&Kw{$Vyfl$Cizsmi@7H?6ANwPojFYox(&TZ!T zCjD{Bztw-+->FKy&T!VeTe_gevi8wN{}h5QGBIsx$HlOr^Yc^|QlW9j=Mm5zqRcU! zSu85|tkbXpSD(JCH(G7>Gxrx6>u$uZa0n7Vei%H=kSuO;B18K7s6iqUG2g48n`WK` zTrPZo5rB^7s0vCVHF$Ag>iL_8j$s+kN3~Vd_dIa#RW}8vncwLGgOJ?bh`M@0HMW;Gx-$nU32UrMS1y;8 zX>bqbQ?|Gq)xNvotzBrZlo7ILV;F5LG;Af(6nMv4|101jGXE1wys7qE_2A7bdy!UC zYH~SMhQMsW+$u!K@op)ZfY>acOGbaWJWA7J@aBgY=Tx$OSy+YlLA+Mv|2p@?IpoCW7heCr4Y zq47@P!*NF1#S@KRbY;FG(aIFzG7->E%Tnqmf|s zdX2sLMG`b+11O{cLXm&bAwp)jtSkIc`qQ=7c+_2lQ>2P5D9N_tv2p6_fgss1QA)<9 z)(~N%g3OR_lWeFuhEG>#&f&{VNtIdk0uYc>qsYoeJj`1luA#=;6 zs32Inwy!VzXaLZMm^Q#uSeL^WdY&)?d#T!bDSr(9!BP9VBO+T$Tr*N%_U{s(IDH)` zHoe3b+ufl%!rwJI7OjwyBa@SNvOAsk%2J2xq9-EBMrq{^9q6Cc@pN>GlM{5Z37chl z;Fg(Y*;=igQH~83VMkfw>O8MIf1_-d`$w43j|ND5%zO5tROVLSy}ZU%FTl*(A+!vT z-W7HZ|8AI`J-cs66aq#7n?Y-Dql>a;zKIR&N<^hl1jQk6`!|h;H|$ZKY{Flm5SJn^ z$fXw8DRT_mH;GoXfo1U33*i^j#-BvI(unS-b{Ln2^%Am598E08?j1iZBPo|#7%-Q- zqVj1ysR^#%zVD56Col3BjR2W(Tq|&QS8OcDB#YjB@*H%}H=CP;uy#5Co17BZ(v~92 zg(vrOfJPUiiwzAaB)gAsj*hM~au?T)ULhA?4?_0NnmtL|6M8z}a&o0yj$e2XkG4=A zGzeqg@l~y&Yix=hgxm`;^oLnQ=vb6qx&=Tg%}}19FHGFfUy*uIa7Ba^4)T6ulVY!G z_|SF=wyrOip9I{Kx&$Q-Fhb~}V~h;Mc8S3uIH(w;f9x?E^jP`f8BZ5_bGa+T-N35?ki}l{CF}M7!T8bS1Agv4)YoW_0Z8usP}8&On1d=VOv=H|1?Uu4p>iw}=iuW7~~HvT4x4iICLRE`P*RpZgMs%0)o) zAMGp0px8Ul_fOE1fTi5NZC_WDF@YsCx35kFL>;3Pq%*0=-lSJ>7Ykl-Kd6yFO)#0L( z@9U1M+S9%qZE*>obZ!k9lS7Xb>)RMTRTLdG+ysMqSFpk!2T~UORp6Kxf3dyG*)q-p zz$mI$@!{^5{CBsM<5aCUMa?EK4xN@t)awmWo4!qK&2&P${IFY*^uI-&u)BG!Fg-r} z_K)UooVi_U%$EzJ=BKiPr@F?lwA@C{Vom9N{c+mL{{o^Lbc$jNR-3S4j-j+Q`*kjw zWuJ0eF>OS5=SQ2AqsigA&?gU{>(u{d0g&f)^eCv=P6U7~xN=c{5JEM&<#a6zXG>y~ z63+sE+Zp5ylrD{JbGyEdC|pM?*u97jhVMkVYmW#6Jp?BuqUno=8aQ$5LgPZ=p>C-d@l`2;%t)cY~(A* z9m{GZXjS)%41cph;xOL zcNp1PKmTg7wmxUS3D&5awd(2dPgf9#WV&oG&&s|a+t)Cyyg3FGqCe**=tJO3HuzdP za<#;zyva5;ZwYq|v;I5ys=aO1?`KxZ#_s8^ zT0-uyQ)i(a-Fr0CHzrK=k{ppTI;K6B_{5klCtau9j>enTY^-k5y~G8iMVHcSr~qL% zUjR)na=##@gy#FXtSIWoethHW%ecS8J}zP?hZqpGHj=wuGH02pY&TI?3lDVm)t22~ zso3K@V2nK*{^T&zSJy%!Wz7E8SQvhbId%2)9|oI*G%vxlR%C8NcLR-hf%k47{3`e3 zr1SR`^|ubg^HS;8VP^vlToW;TeVW%mGC!WVqVhOD;Wq0O#ryqNVLkcnX>WP5h$coG zd$03v>ScW3ZIR76-d1}^+Do-j8b1O;nw$@>Dg8@ybVQ>APc}A`dxfr!oVZhU;#KlM z+Ww>_QBjB`!b#^rrJvcTXjsZuDvhv(_KY7?!lYk+MyQ~Is61wczF_KD{df?Q@*34I zvP@d9IP+;z0$YcQETAs1Pur0Crv!L~2&oO)@8B?ebYMMQ^?KUZ9_8D+NQWd~A=X2; zB|5{J2EfKINvs%{=*kF2U%Ti;x|^5QZIV~;wSUFZzkS#&kl2MTJUD>3?R1q$d? z{d&B~;ZS4^(xOS7d3t9KMJ?HRzs|?BS|u1Mty{eh=u9;qF7K#zDXv#HDleRvqg#(o zNO0vn{t3cZFRFb-TdNe)pcwOVH36VooqSom4aKtRD3!h48**E%;|JFz+dg!z(beQD ztJkSJ0Em}}$A*l0o zKl!7<9H>0=O-p5OIY|TxR~E3JAw)eIoKPE*Garpri_`Q(+KfPHQL7(U6rZDdU^5|w zwz5eo$dT#lA+TcUO0MjXT2Y2+V&333_Omwo!<}%?vm*_fodmjmp+COo#f5)g82kd0 zDAp}bu~qJR@SxhI@<vynp)T`2b+jc2J19 z^*qH4vG6s}$aP~8_Ye@cgbGIM#)+8UkmFza>KY6Mm3a=P{ysY+VGC$poaRskt61>A08IyH8xVT6kzUW5G-k>Y-DgYHJzDN-@`SC_wwC!;gZOW5)8FqmPu7f^_u^x% z@D>K4px?R^eK@77X%YI3E=oP=y^ioH78e;<4_p<0LC1$e`-X`9>_DGh(Yw7fOY_Od z?})l|rHRT#+*1-_`U|B>EH1*dfi_c@>LLs-IF(USln~CQx-{OeU_`jCs4z2Cjo|?Y zO@d}cg>;3&_Yg_(>nDY1e$Pd(?2!=_10%!OnWKOHRNMabN=u)>FA#bCmCYSm_{cxy zMcYJ|lJA>)fpJwD@wD8d?E~^?NURw`rGK($O0m=%LWdm^+vVY&u~PvG$$_6(^LVk5 zC_d{_181ExQiv;nS;UJ<$~8x-u+BH%PA__z@@V|u(O(A(0f)+pB&q=@U%1Rh!)1b; z5T6}Qbe-#6H*`4yAY5tAUw@-01S1`2+4pC%`~^SIaN>&OG38|~Nye49on`pS4n!mn z!9EZDjXu7d>cAH3Xb@z4QyOoq9b%qdJH8W1!6p7lIuK>dbLGE{uvo8d55q*q;GMxc zroDB7zjdDK0lCRmXA+Xa_L_zX`i-PKg8VQUi@W6t<$FyCex*7`Z)Cr++HgjP0hLB0 z{8Vq8YKRBoc!<5_>j;ZtcY&AWJ;I4Y#oSZ>2`LcH#HipG$(<7#te>8JEv}DZ;hvXN zal|ku11CO0WF@RV0WC`N+iWlKp2cGUZviHky3VQyd9c-L_bxN4VA1&7SQ7Zt6@`wM z=eM*0qBL;!%S=YPO8f1eTZM>faPaXPG$l(}2iexK>ICQ%yjU-wAgwpiw)>lGOi%yiWK};cQ7!hdnu9l4OGmKaKhBvYhl^<-)R7-6z>U zy>iI0hG9(fx0bnrxcD6)nfyf62#_^JMKo^E7HWSEGh&c7KS%*}kpQC!yTY1D|00Lp z5V;d;T~!tTcVuzROvnD#UQNWx=+XVhKo4~f_-@YPiUtC^4NVE->3IJiQfCJP*xs5< z+?V3}t|f^T&$b@Fxj@M{RO9?cJre*$*V7VrkZ5;S*qjwV=h#dw?uh)|j=!;tqY2f8u6mjE#zlY-R{9lTwrN%*kqD z3=4P=4wT!#t6hmq+KamqqDas4mK<{|AQd-7-rtCAcMLlgPG}I6{XJNa!hCo=0d%-g zIS#vLbYGHg`%7)kLT}xf$)~sO*%;gGfz}^s-e(vqQ8Ftg>IwWpkuHYOq%PmB_p_lV zoI4(0_&pKEQi@-0JhtxIA*b2!&bY+U-hFL1eQohnyaK=vfBh*GK--0unmu^v%oyaJ*r!7Sp4uHNZnxqi&|#CLD1J-X4SKH|`DF zvfp*~b;ctKt8^gmP86|nNQG2RIc*&s!@GnWS4qy6^J%tD4&|_rL&PdMM68^T8#ye* zVi<-wubIQfY_n6p`}6(%13d0~ulssk*YkQFkoYadT6PpdCjZ>N4WRvJ<*}`7(;+&9 zi?!8qw4(3|Y#rGvR&(Q$am#k&@%DM~l5e8eGpQQam(GY!N`ijH0{)fdLpSF8JME-D z9Tc8xBUWPj({aSz3>X^{=0vIjK$>udLm@bN- zQ?BpeY{#(iIDU>R;vSwxyDMjq^uDvyBnPRr`QD+w^H96~`u%sfsbn6zjZUEQ93u7g zICb|88AE`3A%^A@W6nlx0g=DQ-`T~%0_u_N-6AL{=7_{k<2ouBpg)jkJV&S5U0>jm9)y)*=ZAjWRQ?kKV^`3kgiVK*7*$UsJ6fAAWbrOI+;e zohz&pUOPdH-PUlLSJ}=hPDLuAs$*}!Eorp&ic{rcT`z}rXRMW`Jq2BTFHIaCt^faK zamkHk<(mE#o&o=plC&1|l+s5T*azqEmuK;$Qh=s=K!)!2cz~w8Bpmu>1DWcXd4C|^ zpwiH)T}>H>2q8D{kXy^;w-OW|DhJSNDX3dvcmOk7cGP3r*AM~AUm?5|R&O%NITR@V z0NACYe<4vevA(&dpskm|c^MD_gvu&EoNdr)8S6#?AR#o=M=;V&n4*&4??i4fTZCEH z>FMIhCT|=IrA1##Uaq&D8=+BKGeoT>`~TQAQojKlK*!H;wbWB{Np^9GU&q{@o)TBs z;rg#cQIw5*lS)Y>Siv#$95DXIZ%8a`cOK&9vsE$Y7VrVt?N z_OUYP>OP=o*gckP6Lv+#*nGZE;L_Bj#rYJ3%B#9ujlUGm4!wZ04+jf)0U_*{|5(CImi+jj;v{UkCBKV3r!*577}Z3=`FlXb7CdDlW+O_(vj$AWBg>r zVw}WZvB1*#__;Zn%}{Rq*41M>py8{_68p$lIKv7)PSEA;zDpUE!5}vvCjDO!i_Io^ z0y{E>wgEO~q(6jen0Jtas9S*69~Deo+?2@r7oPF(){aeS(=7>N8qYC4QVXq#(zw#6 zXffYtoXgQvIR5MF-X5a{IvVQA7a?kSl}B-Yurss`vxTFW)rsiwR*~1oar0YZC4F-9 zdk!3oX5D@Y*-^l{)u!Xe?{6ikNPkoS*d2Z4tTA|lUXSAJAHc;DwXw@N$1F28B@xRI z;0Va*t#cJDXP08KzdDZ2+b}h%l6bRi%>@i`rROISMG@QaYtqx(xB}nKH0^W;vAqVD zA7pH8(WlFQfMfH8F}yHNSBO37uh>7p01wil^UTREMv7qTr{QT$l57ASq%&Xl=JHo6 z46k%wKl5YT>jUeUL6;#0Q`mdZ7p6rIGV83okgh2SXqYebKq7Nt`!biYQuTFUYsI7Vxg~!YCgKG9)hVnEeU1COwREZgKkz2A z^@}776gh=X?%9lCU=Y}rJsj=!o{P>|nmWTcY0 z?M*BgmRRPKfNMB9UhLD=C+L z9^7o4xMme1xPi|56RbYInCTMSYc+@?R&w0k&E63baUHp5Ft>d4PfG|GZxLohV=BF_gUKBxBg$m6A%&E+0{Z2TSwJU=+={nV_m zijGT0eDEsSEb$~WfU~8_Q8eVU`xQ~fH@#yDmY#g#k*TYmvg94?E2RRIkQ&?A?S`1K#S1ejSUgj zpUN)4jo<)7@+e`=#<`W(vx66|+BN)RvX6zYS8O33+&kxV3`x>c-VPGQY`P^9YsRrR zBHOnlKcMgx51~G$#9!XWdIAkY-bu_w0SHz<#JgZw^aVUc%AQ^7UHSs!YV`q*3LnMK zSwt+~_r#oyNh5E2OoPqrPXstR#dvy#0YW4fOd2n$&@HRFZu6b&g#~tBG`ojm03PXy ztP0J!^(@1vn*U2*jhh+;2)X~O;nJ$bpTv2rT(Ku>wL!%GsrDb3y@;NCDj{O>446d{apC>020_OUtfh9 zydL)WbhBI0p+7u@b z7$FNp(#+ugPa`Wu%DrajrGtX@1pbvL_|&=9yxIKc?IksDemeGdPxW(wUW?AgBz6=1 zbbh$l1h8tiP!t~8!?L8Nmo?O*Y3SVy2dF=PYz8HfvNjakAK1&nLft(9n$%|>4RYa< z^_N+^m{2z6o6@DID?fWXPdqPqgJ?yb2iG#qRxiR%eCsj(L>Eu{e)m4_x#5Y_PuM)U zsr3KJyz9^g&q&ACE6H?rS{GbDOGaiR?}cj3ot2HZhr&b0pLJ6L6TYoN6_D+=$j5!? zB;3w*@To}OAu}elquAPgck*7?x=s!`G(2sdv(ViUY%1?tfATT5hU@x#dfGtw(i2HJ4MKbALEAE1uV*6`)qzRM%Rc_Fqy(;iBxBnO8qjpWDO3>8??_H!WN9 zC|FFSfEVQ-9hIpWI65HAwgw=RG{MXvo~=g;NBD4tGRPq!`X9~7lB%#wo=fmU$_|-DT9h@U8IFOWl1F+aNP`wdMW!VGFSV^KQTOZw-I=P>*J! zODMc-jl){yD#~byG0!?V_gSff^IZC1Xpb2;?R(ib8{R7!wG0a1w{54$7dR||#kc;< zCj7oD+tkT<|K%R(o4drq1w&w31PEeW+>A@bX|}Y?gipWMM{c69)+00}KC|?27BTRK zrGskQkFKYM@1OnVx?0Y!mxAJrc*p{vAUE5L-0_RmijCG(oWjkrz)CIU4}68rO;xL9 z&KndPtTXZ*&f|$foq3drEeG33-zKpi0Ek|_@YAVLq-U)5-1RBv$;gfwwP#@{X_xb* zWlVR!QDwe*M_P>pf~JDHHwgQ1c`{>MXK>EELyL*>+Z$E5?PNT;I(ZRQguIJpn4_OI zwW3#gD!F9G;c0S*;(6xHl2o`wvF(Ldwh8cqF$c0gjg4RV^{-nb`gX?c0@k@D9=_wh z&vSRvFMwT=&JcMS@Bvy0NVCSx@zeMkYP3bY;`ZaLB1P|>@)8AwiKbZKxdwbzf zk5D`&m(Z~vc|a#f{#DC<&(9j=>Ye&p30eK7rUzugoWw-3_Wrx=bp_o$AEhUx@lWXB z^Gx&$@KN}YA!FNF%n{$Fl4OC4=WIDh)(5OGVs|@M0^q|=ILg6uhs&C7+;F+~^&A)o zF4YX4o{B;)?}4nCmH9u@LK*H-ig~a%I18(Kn(6^$O;Zc$-2fXX+W)N8Ou105@x|By^GwndNOmP}4E z;-J8isr3?k>U!+%<|1EC`0bvMy{SWfM}NBA*^AyEbLg*_s* zbqUPl8qZwiCBH!`Lk|Lo?{%cl`UyXTCc`Wd9#q7|->z#U77e{A>BuWx3moDIU9BS5 zmz+NV-JFE|PKGx0bfnoFeC^wEw10L}bk9)7ou-?BLFxql)LHHs+G|=#2lsW3hWvlg zpUHLnz}1M&#u8pnLT1>tmbYG?TDShxuNI0b5wl(M$DYT2jQGa6i2k)eq~Nn?J2PrK ze|{IvR6Ug*-hF(PB)Exii$u;xB)V%=Cs=j95xideag{aM`HV$JRlsnan1jn!Y~9yq zZsF)TSY;^mswlSnc@*Mwik}hB&nw2ox<-)wiwD<)`hG3QMVvDPZb|Rhk~yuUr2Rc? zpWET@G5t#c;KG6fki)C)`sIRa!&}tTF5}AAN8mkr8KSk769BC}(P zw&<6OZ0G!L%GWbiJu!jn*V_g{jL+Mf9fclDDmtoQzgk?zTf>P@iqr&-M6iPQVLA_6 zTCS~$VY|PtIFVcYF_aR0dF9fhSW2fJe2R`_dyarFa(fN1r~NohfNKxFA(Ys1HU_Kk zaONty+P8c1=Qn5P$xZCQn)mcJ49K$dJHb1Ig|)3l1a1Pex367KGdiwCp5fQV z@a4$pr2#~W;3$;X#;IrRI#{w0Y^ezGvJM;p)261fo!>sAvSM;tN)>4Gy0;kj`Et@JKEZtR?2L zt|7Tl^;fK_LwpGL${P;*&==V=OP^BYu1gs@aha>0QL?833MUiWWvj$%LY}JQ7`Cg( z3b^d3W`#~G6pxk0#?=d}+DZ1r)9_eM?UF1k{F-e=l&#v^`esKLfQFB)6Jgz|2@cs5 zQ=sLL7KroyFjE^#{unx7DwqAg`>^%ab=Jl7AJ4XgPP05XJ5 zaBhtlt3D`%Iz{r^4Z}FE;b-u@vSurw4VmXd{!zb+NP@<%8Xo|fv+~gmQ-E-|ORkYy zKI;P6&uyMdO`0uNx6XD~8vb0Xr_C)Gg=~4tOdo;OU>LHKwBHX~HfKs!#b>*OMezNY z$cGEdhTxCoZd`|$&lV>|#9BGzcsyFZSGNCZFnrcP;}dK;b~88h()didXxYZm5621R z{}ro9cuDX$R~8olvPO1nv;IUDH_t*-+>aHQSj{>ne$23WKB9S=fl880w?gWoc~q|m z&u0|w_|wNCrI3N_1jK3YXc4Z6%$>h6h>(GMRTuP5{8-|{5g^icu&MX)g1lm-;~uA*+x4dgal(#$i0p52!!Ra`Pb(B)bCZj#oGe=F0|2I0 zJgs(pc31^XHN4)>D`4$xd2)`)r!Aj0-hCYV-`t!=Nhw*pDOd~+wjGUk#UNl!*_EX`6dBK z6NMFo>Rd52XQa2#@O)swe&=s3?@w1^2%va}72+D|PAdP}KIgL)Jr?1nkM5qnvGy`8 zy#RkQ`f=<2_Vjz_D?H&Ohvtv(;oqAiV=w;R6h=G#bbPpR{Arxir=3TQSM7)=LnTsM zg?^tIkD`YsGHVXDd^>C~RcGceGD8FBu@d)S0d}A^JjR_faz39xz5G>IuBo(~{HP+< zP*oT}8>$&o-x{ZX zJpddXJ+{=;HU%+W=&DC@Gxs|+LIg94(kC80k^Y~{3jq3Q0}}5T)`kdb)5Hdss9W|p zxn%LxL%~n0c2vx3>`?xwtn$S0aSLf~sL8mJdEt zV9iLilVYUx1k}sN&)I-RLIzv$mvz}X(!N=Gw1pm{o&#o}?AE;{Lf>^(m6vH6h&oP%2b}K!}@lwqDW}!GPQ15Mj zK(8aGtWH4zE-MjZ6)OW-BL_(LQzquwI~eHIy$G!qBNap0*PaGh>;dzSuWh50IuTxi z{oq<|A2UR>mpCuI!#9Krk1QLtSViz+n+&SAb`2m8LThn#lrErS6Ue7RWN7tgEQ$uQB0b+(C zod5WF4K2+|_lWdJ<8SSsReDgk^zkVX32K+S5DJ|*clo?mI=%CdaYTZVs*{3}$)(cH zILO+w)J#_Gg$Al$SAF65woe2Ri4S~VtF3X)A@zJN>c-dldh0sD4;Rew@rjmbO5B>W zilXymQe^Mf9R4!d2Eau1?on&e2RdDy;;Py671H=Bm+V};sP_iAlD`=#D>C%^{jO+6q;ZgY>nG9g2!sZ6_s3cK4p@k8$#mEoLr};7gfP^a zEVHkLj+iqhlnqU|6z9VJ)QoMPmL7KZb5Nihm$WfUW{0UoHJq-E@(K&s`+k;w0>sz9K-K-#g#x zpfmI9uh_bUGExsfH+=XfY|%D<#ijt&=*TDCKX;Zh*%lFt0D)LHY!)hgc*$Z{jmh@K z9&RjgRb>5N#t-oE&^9aNfH4AqcecWpuwEH>!{Nf+%d2J|RHXYNoXgcx!V*Ous-qO^ zNrcN&pgO%NTDb_0g|I1`qRLd~h8A$%X%;rGISink#H>=D3-qP~?Ev{5;tIZ4kHtgs z=mp?^8Ppuf1K)E}@2%PQY^emHk$=VPBg?tOyT>~Rv?&@pc$@uZ60d62-+lNs(7e>~ z)D?E@k3i5NT(;325|Uc!5fh?p!&1_RKj$1ddCr(ua7dEvW?jOtL$?l5kaJ*hArP4} zPgFDEp*G;X^mcYr@s|kgpG6D&kMI8lKLr*CzI07kj<@?G^J%X%G+On=qs@%>AVh2V zlBVCB3=W`R{nyDX)0*;3dH}li!2@^8F~MTgy7p+(h^lb9r2N%Kt7Sf$7*?X?hC(K_ zWqsT|uKJX3>0-cBq)>+{x@PjiY~Ou`tXtZGUJ2-(8rXAwmRP5BTYdguTN%2@I)G`{ zDIK(65RgxJi(X(zP;=Lc4B10`b>9(@JRo;~eV-kU+ZRrT+G@E|N=k4vkyuscH>X7E zbKnA!-lh#TonrKk=bjl-eHblR4vxid3(E02=)|U?Cez2cVxE62pCj?5^XSp$2C&j( z;-@#(a(ydfkdL4RlBdSaXp3n+h2RdQMe(%H{nydz*0N5VU9X2(u}zfv0Q%3O7_m)- zFqM`wzqy6C%o82OCY_WF)ErE>b}arl>*OQFM!fGPiz)i3d{dNG_m~RL+o#wX{KVIh z+5O=ZfD(Kr)Mr63EYZD6^jAlUdp?k_EQAYf-hQ(rhte>%c!5y*dIIo&v}a+;wvWlc zsuO})baTV~NRcyd84Q1l#I^#k=uDl+sMRF!6}aeMkpW@5odc+n)s|(xNBxKWD;5BR zVQuqRWjwNovjyWqM!q7y{}t1p1#EqV(w?CGtVTPbuj2UTGZW$eEd||eNuR1^Y?${Jf z0TMK^b$}FK`FX{@qwXo8$ZX{KzhWQPFTxFm2u_<@89<_>69BkYW_Lg(S2b#ltOlPH z73N7|-A4CtgzM^CBKwW6=%dCC-`1TDLiy#eW5V4g5KA%x@GChowH)q%QHfEUfqBS8 zL~OqrSjQWatPLx3Yx1X>nkUu>3}AD!E8+7O%`hxFG*kd72UYU+U(0p-{Nz%8p_oLQ z`0x8O(t-K(M3M?$hmRlFOEA%L+wu`*0!js&c0=PE3@htyJ9*#>({AuATRvwLxx+ zV%1%{nSyt2Q`+6(Jg?upCl@EaQ#wN~E!z3)ypK61jQlI6RE%;=4Vz@n@K&h|6Xef+ zM8a)H`xRmxnhz65<9`au$F>pR|E>7l-gK9@{=8lALL9LEvksZ?@E;lP{duEWfNMrQ zHQZ4k@xP*=Z-?`;?t6m`zi>%bA?PQVbb1x z(^F2cz^p-?CKukM@Cw)Syin}^`#k~2cKnv%dT|1M$>``S4+EXp;miG=w z!&6(!FhA7e8wNGUF0JNH51cfDZQ(IEUtHy<+V1X$#|Y0uo;&^)wJ3sXx2HoaM_9zZ zwJ8iez!ux9wH1dLG=X$Df{_UqR&ErSO%b412~_TI0VpL%Bkt;M#LQs;mIV$*8Siv< z2<-EA9#b}L_^=4_JK7=sW$&9whWz`d`Py_m5+1~L?3r5q&HuU5D!ULCoc??E&9Pf2 za@r1wG{Av~mO1PZZkopl@VQsu3XUTn!MR2KfY zDqZ@Zi&2&<;nxeLOBW|YAt;=C=Hg>?d%aZvF*MpB#_zD_C(@=7@N>f!`>OZtO;V#O z#3BlZf&IR)#Lb*Kq?W=kUV9;qrft!nMsO3S{>k7Yziu4WFb#$@|E8AC3s6xbs@mhL zcOp`+iR10aD53(rdv?N>gtU%|S?4K4Wt5MEO;1cPNdQSx0-C*qOkq8f?tJ%jvRtFV z@zB55fQ8t>R0G=keY}WSfQPihN&|kQWT!s0{eK1w^!Z(_-I?=eO44QOY$3wOL;dt& zNfrRr%kd;;V}F=W1e?oiUr#%=bSaujPX!DBO_e!L?_KIDqMaGYQK62BWx!uCPpkka z2tyBe1%qFFWgd9G7?Iu-JKi3APkH!RG8!I^ z0eYcB-V@0iJxIy^h3?>GrDWxp%oB&#LZDg5dW9PFSVZv8hSQQ4l~qt76y}TvkanLn z47~^7g3>e`lq=D`RKZu6{vzaHxy``~DXDFR1T ztleCH2KK%$_C|IMwI(!yNLR!j{P-f-UyY0~ibW2DKrs(IP0MUJKI&xA6rgQsp5XjJ zTy@X)bhnv`K_>L^%#bCS$>w|f54xCNYy^&U{qiY`I?z_+A___nh(gCStG4eSDVW*8 z+u}f|hRbDxjpsh6zARNisMv>$YSWX^Z3skW+K@%iiS+AFuTrrGfC@tRP0|h#kMNGg zMgUJ)4!G8=y2b2R3{~JuU%%I_vE?eXLB9KNAn29Z#BKPmtqDmeXJF4q8QZCzMUcvt z8>K}M)dTtE(D?H3^AE|wp%19yJ>8HJs>MPnE!7ZS_!@jQL|aNYDui?wj#10JME~Gs zU2Km7W;g(_1AJZu=foum9DB1sF`;3IqiuOz6Vh>8t5M=-x!>uwyFz03<#xdyUeGGk z0xsjlcPZZe&;SBqDpDzw`ch1u!-VJd)G2$llJ_$R@sj#&>NMiefULv42g0dNLE6x1 zw(>`l$aajDtU%H$J*B0N{Czz0ub4bycXxi;30`FL7y=w!Zy*Xt8iIh&h71m)5#I#fL*NF~+aF2Ar8bahO4 zk@VEByC-k4cB&GmOu{2@7{SgkL#fwOKlKi)1a18CkSajOkW37KzAW09_gPNrTat3W z#Hr|L)(MYIniE#GhOd`xJmwjN_~V)k@(-OKYH$nQn741~-p5=FItzkunuP1X63CJ_ zd48S5@_Mmqf&e-pz`5UXp!tjM9jkq=J&Q5gtHu$>@wD|W9~W-Oe{Z5HLY~Bq%V=*e zgqFhfixW2tz_6*!sCM=gkLh;4xgzNvqWc>`14jw?O5qHu2!X0{Puf=?0)7_)FZyW68H#GvPR_l!wdA18<9Hov96zUy!symRRti6N&)Ixzt#Lc_p z#`MU;8Y8@ZZj0+lBi;ecjh{PGO^CDwJl|GLDniq@RUfg;EIio@$f^G3f~v+q_uy?^fUVZ?iU?j zC!(QY+j0>;JCmq4(y|o(RhnmrA!3({!B@idu1rW9?Ehl|Mx&g|_tz_{anPZUn5>2Q z3^Id5^Z$3sB_QBgA;14w1Mg89n(9`2uI#S;DzTPh#bYUtMIrY00c@;zucKctZsn ztayS@&hQ*eduq(#5HLhKcX(Q2_%xOw{GuVT7BWl)V;g~Ds+`FzTKOLOcxUt>NS2}F z;&>6nGZE*oj`7o?_j#;Tv6q9%(1b-lD2()THPphx>ET@im}@d;oh0BpR$PySH!x0! zlXfNxO{3VWBolfET#=?fz9w1r!~LBBotDcfdTAzU=Ie!;=WzfduZ)1!tu63hvAqmn z%r4&qdvlxqDDK6@$X|z?dDHy?v7ZDQZ9>I0{Tgza+${L+J^XSgWO?Wc0?-q~83wbZ9-Rge%-F@P)((wZ}=3*O^ z$c5xZTq0*3dM47_Ij`-|m9d7V`-U@^Ddp6C)Wwqv!00u|xLIRSA|Cha$(l#aA^b2i zJ(j?Iz3~LHK1vI~dVNnF0Yr)wwl5(5wh3}(KvE-Cg;7v=G{*@z@7mS{8@rlg_dCsV zzP0>Zz>9`&fTBeqVdmtS+Ex5ZU1+>q81{|=#C>+t3tqrn~g;soL!92%2sxGyrJlSm`YX7u{?m8(9nOv0`G zlur>YcuiyLrEJ226zL>eBEt=pTi|tKm%pmdcsC8ukNFiBq>?dQwMFV{-7}$RX-ZLi z&h!OY-t);RZ<3yMDc8kj6E{D%LeKh>#nE*7&z+y;^}=Qs5sWYLkOzs#`z5LoYdAKA!ok$Kati zWu9ARceOiero1n@(UvePvg~QOAD)6-dE(*7^<`#TQ{u`Qiv$@On zkiP-UXup8&$S>88w~vdK{(&0D%!&#>FN=&A>o4b-nAfn{d}wFYRX`Bp_%X69*2t!z z$YJy zhB-frk2^KGK=iad*Y!AS%`Y$hwKp#GU`{b1+sCy6K0j}ph^)=evx+K(BZWCEBlRNf z9ROKC%3B>K*&(`z_wg&ipYXu+et))Xf`Ia6iY)8z<)CBUkbE+c8cGQgDj#ark-ymI}R^gNZHl*I@#5(%I0hl z!ey-nx8;Y?_ZDb-%MKF9wjqZ=GxI@K!* zTF?jDwNYM`^aP8czSrtNd2A~W2;pE zpl@zcPsy#(sY3pxo~%3tM{keuIQVu6*S0ga`-6^~Qa8u3MQuNc>qZxpcWx&dyS0XTDkeQHh zs!{(^-(1YQiqPiOyKnw$Xna=?aM`n7S^4_!UB}wyv4=#xz1cF+xUMax`@7=43!aR% zXCM0`DyBQ8)G{J6cShoW;(a(YXrTjELHHIR8jR|Xf{n;34p^6aGzY`{_@pDq$s6^J zDVf@WQ~$8L9we0{^gR*bC64tvShB6x<@sbXE<3~ULQYHH>x)UU=z-9))1rQx+i`0Z zk(A8!iP15>4ZRzB)FxjlK9i|Fi|W8gJ9P&5vu-O%fmIP-q+V(lef5n=oDaYWsZA!X1N&vFB1$?;8tz%YjU*MDf@AsCb(lwu>!^@_3`aLjPA{_tBC+DSeLn`fE)Ji#oBm$V-E5&61j$ALD^B3R8%+ekZ;CUXWR?; z*-E$6Y+1JHaukk|wX|0ya8gDWa_6I+pEGS0w#aW1DVBk8{PhR1q4e18fIvVc6bkNZ zWfER`b}YMVGES`T__<#g7qSGhYjT*39f(!`C@g?`01X-i50d;Vc7M5e(~NP*B0{;N zSW5oKs5V7m&}YIu;0gJmftDSf{=bB)z< z$IczGb1idr`-}X-~A>?zU_Sn+^vM1&{@pN<(vd z+&gTB7T^9u>?J~_r>>ChAK!;zd<-u9_Eo6f>8#&{5~sPF40g4gc9GXq?uFmFI zXzS|j#@FV!#Wc4f$kW%`d2B!6ZcPOrHQSvu-@qcHrIPN2HU{1g?l1L~doIj8e{6H% zCL2Ay*szI=>Ii{CATw&CB%I(dOVUIuuy%y(LZ9FP=KKj|RwYpH;)$i+ne88T@U-3q z;TJ9Byx^qT(m}w9oJL=@?aJMGE5O+5qu#p`)fL6?`cJbrzmi&z#WxanY654;n*Ae-|Bl;?c}udJfeRy?vBoEd^ac|8lf7Dz zHyCSvlHt2`%I9W^`V`CGt&(CP<>*f1fR4yXv`N?8Q6taE>6LT~XHFB115c;(a`&0d z<~e=ix1gE{&=O$XS{wQPa9-?#0;elZUb7Jjg``vofCsv@7320$eqGx6r4&l}gK_vO zMUc8Rr*C`M_j>T7SBysZ4Bx9{gGb8jyyr{fhbd0yl|yXL_aDt19@1OMMod5;bkd&` z@SIv5DoDa4JVJoG7EK}`YqC3Cq<2N`-dK)!r*-~RvtE#_`NLk}Xqx!0%PY21tL}}T zTy+ZUZnWF=42-t9vM(Dy5<)5v#sI787FfAQYAtD2UCKP_pZ$c@D{l2ne6POOhM@dM z?~@_C=`mvOAd{^<>N16iDXR7TD@ObScPd7Vxq}&?&JyP7{IHNx zpWw-+gxF$-L`Pp23gRJzI1vP6ahWmmI`TRdq<@ij)v%1(1<7 z@G0(dN{1q-S#M~$J|JM{?aUXwclLd1+I6My#F;iR(x08kW0iKc&EM;p;6ka-S-+Bw zkTNW;+HI*<*M1R9abb(X+9JcVo)^tj2d}R1OI?s$=JVMFj)cRdtWf zBY~!kPQj@dz#HOEbCe%x{UZMHNbX(TWWRc0m$z)Ow_yWV9XVduQ9!)WJ>$84@9^*)2wV?H%H`;jr&{b#& z;tY3o-u7P~E!YfFI-}S&plWVzPZ2DGpXzZ;UDP8erz%L>5yPZzhRM^-zb>Ty=?TM< zS60Gg`0X=$8tY+m4)V57yd(Wh)W5h`YYfE%i;xiuKE~Qv2OZ1T+*D&L0Ux_q!s}Im z$=u#b<>#9E|2ZwH?Ppu;jHD9-DMZFnt5+LEOr*^1bF3Sh89MJDuy(pL+wn~M;Xmfx z2FCyFU||OH!Spu0x^M22KJ2A?kJ~jRch3J#e>rc`6zdmmi&8wmXtCDKsZaZ0RCg_{ zl%RI`zuhrjn9%}xY18uXDp-9VY;!aA;8N4Q#POlvbcfo>{0h&K>1_0rU$n$Z|GaGi zct`v|M<*%E;gad2th4qH4{Q%`-&{(e^4q*96;D7?TQ2Aw+|-5c^(c7#CyVp;X>!XN z02*0vd(-lrNJ2y14iBxVYi3GZt*Wa{_XAa@e7GU{&mN$L`JE9T^O(TGiM3I(j;TDK zKowJillPy;nh)${t*?*Prphm`F$c+Eh2!C*^45XguzWwivdsYROc5Pv1sf|G)(~7R zB>P5(z8L_BTy6(Fqa=p6M41Wa40YbQ&XXb8C5VxEP<1LUplr-{^paK6+|WhiQ{<4N ztm7*4V~*HK7Yn(=!Jjjx%%H9X06<5cIQ^Ae?-z}L7OrCm)bkaVy}c6^hw3+gQWQJj zY^zC$gLR-b1^f{oNW`+qGZUl`+FRFoos)ALZzDk^J_8!*(m>6F+!=%dz)M6EiUMrz z24I^4>c`1TQSd4etZN$yRoz(1d*J%b6Fe?~?x^^$`MKGxv)SYY6iw(C?v1rU=kPWG zbV}~fP5D|M*sm7C7}O@+*}>Iy;^_tO zpwRn7=sd0KUbXj~HHBVt31wwm>HKjHecAU*h3cb>szKFO+>BPE{GGDphH zv+j-?aHm_Ps#?-;_`GE=h`=_F*xaazs&gCZosnGfq=GkZR3 zIHhvx~Cw5vVd>5Gp&C5r1)5npixwF zCr)BSe~pFPz)s|Z%o&9PaGAcS30Kh6r*5k3SDtQms}z!DJBRG~GU{{TO8#U}`xHtL zqYR{DIayt5oc6K2hkuQ_@K-E*9Qr?ALE5={`4HrRd|3`0*UA+?b-h(u0ryiNy?tab_(kz7>+um_ zd@`#KH2o{KO-(~po~v$9_`U+EFoYezWzj0q*A?7XzVREu&(ir)&(d z>2r7{Dk%eHV|s;6n=b3C;>YI)$d1y;);jfLBJ3JZ)Gjd0&;BtAt24gtiHmcWN9C1B ziAXznOO43GXZa4yllw`>+XkX%9tCZWP!eQMa!sc-mv4-^8gwJYT`8};C_ztON*fh# z{yvZ&lxi5dK7^G>`~nH!z%U!@ur|JHZjoAF6w7gBJA$;ft$0lN?4pD~4TF%SK~t=`KIqdKU+V3`2g3 zKExW4PBKw-Q6KZb$jP2=#0%W4(_Px8aCcena)0r}2;~2A&Um*O;p{V^R##klC$8>C zYwwD>BXL>%=N-dvr6#HH8H=#v%eMsYHxO7M1@dd)QK=X>u_6g>e8!Z5Rq8Vm5-K8#UAM}{I+rN#S302#)Md_o`E=YN%EopKbL<{ zk10-1?&HSbJP|k{z!cO$q}I77ZI}!!@veM$UKpsCmTJht-->w%7>RVJgy`()m!ut> zbjly54rfq^xYn52G(uL_GrM6$vpGWqIwca;HP(w?g7l+r11kCgTM}=+7f%d~U!~DU zLILTP)pz2{@|ExMVbD*Huwo4lU;)R@?Et=l7nr#zq;~s!QA}oylE=~oNyx-;&@7s; zox5%IgV$2$e(S$)@au1OTqbxt8*F8ANh8jxeT1UVAG($*^^zrf2ux%Q6C-`De8rcq zP)o#CxL`18D;|`(kD(LMzBSPsgF<+?y+&#ijx4s#B0R#+D&UG&xhrymb(@T)cI0toLu>v^^ z%}3Yk<^ge*YRHqOK2n*}*Mc|_eea{gS*uW=Og~?jUOKdvSShlCZh}GD7cFi-Rd-owe-ecZ!$5U>nk`qr5eT%#WYOLs<|FJgqJ-pu}UsUwaWo5PToF6wTv3 zQWW}*Jf;OdHa--T(x8%tx)s_+e?2l5izCds;R&mWRTG^0cl&?+gx4M?K#{f;X8(_* zbB|}b|Np;I=}0FbhjpP;PC1{gqhqX8VUDXPa^uiRC!w zVNNqM!`SR_{obGN?|-w~ZSU7!dmbK-$Grj345tnvdEpuN|JgVsGUTPd%OtXgRF5Bf zb-?7gKJTK@u_Pu%$|d~eH-?NyF<6~S+9>(7r%5O<|JSFPpiNLQ1Y8le^Lbxzo!i|Q zP#Y&7p|w?#ps=OSH_Za}rB2@t=7Cbl@g}BOf=|3}8|EAHk3eWPBLCuEgA=+TQhbCd ze#vD2O?@h1Fd?ONTwgZo@}YRCPV;GMhlIGR?%)H?3CnY-CV2uBh1DC5Y>VUSepeC+ zYFCwi2QkXSG5-?^i@W#JMAWzExiF!1$$)~n&~mEv-rJFXi2C*WBE-4q30b7a-vmlK z&D^t`Q7iyVz5#nCpbT|Dy)gi^p;u9DRZXwdjFap6lswKn{$c!*xGiXADVu^<;RlOPEaD9C6Zi^LH}CgBg`TfRNWeZ39Q0! z&HEcSt29fG44#v1VRuoI^#$o2DGt5OPl2($K;nTrI8bXOr z^j+L;BnQ=>PKxf|xpx?c4-Rw{_n`*lM+7?wTmt|S`-5$0Xz6a&IuPqe`}MLq{i*;m z)k@u3LGT}lC5`4luT&bWSqkt=`K*pei6LD7EX`u}X??O0;!@&KTPT;%tDq_%DWQu( z$9Wl>6Jap9|AZ!&MD>pD^2V0Pa;$YJ2D6r{zRNqok_z7DDD!*Jtf7LLiG~7fHB$Lg zPA_;Z5GZ3BO$;L(245;pjong^2|pPQ0wi8EOnRjD-R6&R&wyOQx+DKC&Fin=S5cYc zxUYk1sj_M+Lga?2E}}k-wL{NluarfcuY;K&FbZ2TIGYk259u25pHQlC-Q2sk{$6TJ zs)Bd(xy;p?FqcLE@5LjSwjr-#zNdwnhR0+W}cN3a7 zeryJMd@@Wi(XFbtF6kRN?1hnBq9G`pTQ~bJrzXD8A=X_tchQXSMM+6+45O|BiOUoEb2a}CxgCXy@#S_ayco3j71B!|S2 z1eNa4P)>Z2^Zs+Dsd4qn8BX z@s`+Mcdj5+j>-6~txf=487uLH*q{G|I>Rfu!*iy`Qtx$l8+2MK3J^e|LzWQm&}L`zcC%Jan-C;DzjbfxXrg%?%+W;<2OX|$+FT`VDcl^Mk?4U+E4nA6^!`Wd%<`$C6N_Zj8MH`XlXRMWb zPhHn!9vkjxoTIgmq;_y?Hc9cRD#iuzhcFA1MEwp*JzB!yL~r+@agFf8idtvYGc*YB zx!%;j_ijB)L}bB~kip44)qg(Ja}3c6&W6Q@Mr*GxeNc*V_%R%Oq^qFvVQ`*XdudJW zhfm{U#UNazZT#72DrAqjQ*RYJi<0x;t@`%XKDZ};~|(bh5hi+czJx@E8^xn{>AX-nK)n@xOe%A zGEuTIw$Es-_#ofu{CpbHipGtHezFL#&key zQ1OL=-?ePyOw^f9PYZ_EUxpvhQX|*oYrId1-);A;-)ExyhZi>2q<$ju?m9Y7b+)E@ z;C#cGG|tQZTUYL((zA}sHh@CW;CCTfJf)aBBO&FWn@k``ra2ay(HS<_mvREP(G)u= zj(@*bYotZy7ToSz%V;4T7UEb|RJ$9E(%RhZ9VuglDqZ+qF#%f@fVDoiuodQH9l8+l zs53g3v`cO6bcdpytMjW0Gxu4qy2$ws7%LU?jMrPLuB}&d4QVcesUv+R_CwBKf_sQlO`A06MfT3DM7y(P&2k9h;Kx07 zzh=^X-G7v0eGL@J*3&zKyXM2$v6BG zBqH^Oc{jLs*^i^g=3ocl-Wk{4Z5}m8TJlOi=?imN=>Q9oEG0$XvQc*CkCUu6*HQ00@UFYZ5qkQu+XG7oT%q=YaB8#&N+ErCs(A#elcUz|Z+#5#_6&=-N zohZqoT6_(3GGxxBSFJ2UKNO$eneIKin0fvyw#xE+)p7B#-eNb#{fTvd4^4#mGWs_eGfYXqYvbnkWN$@!&HOkt!A z`k47o(@V9;o=?T;5mf_^RA=2soO4#!f9+LUJ_B3)1D?R#N~AzAA1jeg-ywhTw!DjBDqIr4Rq zpgK%dK72I;)C4)dW;&o&K=JSwZF&ElsShDLs`X6)KGG1bVAEJPG%g)P?n$RF0YUBz zu(9B%kFK2IdefB8u4&wM*@q{Niq1waRPB3B35M;r6+5dSn_Uvm!c3obFXEio7>dF= zrX!L>cEfyLIlYTGnV22MC>5-fm6*c#>SNeq?N6zlFy)J*~Q%yTHehlJV_eR?J zAur84v;_99-TLhWXxjEl+((J*b>z4-1sxlG(b5|>o8!!WTsBIVHWaye_Z|xex);T0p@O{g4XI+AzD&4MI zIqA)8^Egp=rRH$_2~9*;`rbEVjKob+QG{*IT$=F_nWJNk79O`XW_83GV?@>hccK~C zXltHSw%`gwB~@EfW=&|a(bLpZ zg%4LiKIv*pZ?Dw8F2}#4u<*OmhQ@m zwbU{5o*rm3A78H*4*La-lRHyyFZheRQ9Wd(DNEoViKe76EeI>7Zw%mw$@~c0J#$h85fw+CQ72Wt~V5q2|DntKD@_R~!<&5|9D8D&?`Rt|Nh7t?lpz0hz*+ege4 zmiZu;dC)b^x8tcowJ=mu8gwW!j7?xh+(6kQ&6%KgSgBzALExV6C1;1I0wu7`M#d5A zXL;^o3%nfn=em)f{ktkQI}s=RjD5YzoOn0ZcYZ<=Moew}@69f~w~0$Kz7a#*PP{VV z*h&!KWY?AB*7e$!>A@{dkTrHdO#u90I9*(&WY+Zc$Mc$upFIuSF43D2w${#hluno(tbnU?T?O;j*E(}83_2`cc zlnYnRj7WIE#1z3ydTcxOP&Cs$cxQCSzOFsc-2lTPV?`18;1u?$!%7o6GBMn0O0v}@I39KlX4gS z&7Em?gz(`l&D@b9nch3t^zDB2>WJV*Q)p5>OeAl;t(}m;tAnMx)}#-_yqgNu*000zCeLsYJO$!)*HsSk>N{d=UT%LW_s53sM#PMFB z?Z{Qmwp{m?AOC*-?tvQ?FHdYK?ehSX*3do_@3eBqzzRZ&vp$-(gw@@osn71K zf4<>E9F*QcXWe43DzBB%p3(kvOvmKbWt#Z|glh!qJTb!ea6rgMWX>B)kRF+W?j_4c zjD%0o!g*B>sVTQ(1a4=}`=;}*b^%Id6JKSw%?dSKkH6`tQjRyglYB8;ZPFilRRih~ zsWr%xo{?2kby~bAx40sMAD{5(3R@VzVhwtE0as>7;M>LJrP0S2{AXeM#-}UOYhb&9 ze8da~zVjZppN+Cw52<_qMOE>Q@OD>$iXxI$w=euTA}?}eM-L>wn%FIJz}s$PeX zD-5Xr)g&(W1e=u8)_m{Y35S*8fQ)YCqQ(Id$N3MfPxI3C)bulxH6;7B@`Y%CuN)P! zg?NXkSML_%_Gu-8?k2~XY@&*y7M0Vdt|NIkv|Fz@9t2-Qq@Zhwya`1MbK__Zr1Mo(8Fderddpp#s@t zk;6=D8#uNBx-%P;ySD)4B22=ClUgDT9|(x=t{ge2uP-IbUIPYm6sUN*S?T4jZ(?{GQ=BD)$nItoC412Wl0vZeRT| z-d5=GPIAlTQ8Y9UIttt=1%t=7>MQC_o%_`W%!d8dSezK%=2X z%HXN+{R=;zjl~V1K#H=apoMpGGdQ%tkV924mwW$rjle0i3 zp|{GHS=#q!D0MQ3UA*ZSM)8AVX#MYx3bY?G>d-Y{0A^xHve2>iI56NS-6R~d8#Kt< zjZUH)lcs=ATX@$gIs}6083a~&$>savcL*k7#5&XZ9bQn!i;bkZ7I6;oHwAN>NhX(j z0g`HS$h7YS2!6#w3;om;mVT9)QR0G){Rn|@+i=h zeP^&h5omNvH|7FcA$0#* zx*ru=sIdRx!40uHV=E@f5u`%+=kI}6IhiM-GDEv^*JhiR76s~z&@M^L2ckDuxpsoL zjYQA}MobBp+AQsoqP;wO{M`h!35IFP`liaXI7jgvGG*Ev{Fk{Kr5rP$Dl=`Np!gmw z{R3hOtXWKyzp^8O2cJEa|JHAD)FrT~~9^nud zDWjt1#{oCh_sHZ!N~M0Xh&mOaHs8$-6%RCrPbD z>aHogz>ks6(U(cqj6k3QnJ{`3dSV)G#>v;;l#zHHpL9r}_>h7=^`kGn_srrS>h`yk zH^qAo(BZ6?VVWGk-)ROzcuLjd!I)0e#3tro0N&^ycK0D)u=PK zMr!l?M(0BXlAJ$JPo}%U!d9kO)7y%145V6Xtci1>uDSifvnjekI@oxtK#P7(4UV7kZu z7K)IfTk{%eVSV7H7-Ub83l|@O+KEL#NUTDS4OAOv*sgGTm&I#Z!)v`ba{~Q93F8*T zVDNpazjgEe(Mo;=fS8wP)BTDpMZP7tFJ0Vn!5ngpe#^E58Q_+so4RIG=RD^>)J+JPtl2{4n)f#R=FhcW-r@faU$#)q$C0jp8z z-;Lbh4?F)EeG<1YJ`qS-qe$|U=jc|4zBH$}XkOtuD4gQ~vkOem1SqrwQ~9rr?yHpA z{)KCsa$wX#e%LPQcmDZATv1RBYK~CLXi26#r_s{#Su+c$#!ldS`7$CPy(v7ezE*&V zZsDI*Wn1l9OqDN;A8i5ek|_g4Ok7srUh9a{kFQ*je)chOTVx+{bNoknd~JP#OG@(F zKt?_owWvIR>lZ~o%LuZp?;YHSY6IfHT*;VaqWU2Qm>kjMJkrlMZrV29`RO!?@Z)N4 zG_^l%J1Y58?$eCN1gI$LNCn%;|2iN$?RIxOy`b>EEMBbi$PTU^41^p2CK-lysbJVI zCygj`;FrL~q3{{#xLL})lZ)-|k4s96axDfWCa2`)C{6>Abd$Wc2o)HzM-t%Rl@u}$ z6!&v9sDrdC#t?v4d-S63{ zW*!R!Aj^{NvDE>ejxU_@ad3V#TDo*1Ha>DP+)Ik^nIgGM8rqGjVmq`A*jnw+kokV? zdbbAAL3n>R%P(6LdwDmar4bP$5ZS^qK?&opW7lTIV>GXA$WaB19mG)tvNw78_H~f* zA0;DKR2r@C1t7OT>a5_8V{erDNZcbxO9m#zFkX*(RG2n9AR)@%@z0K)w$wd&B~U*3 zliN&S*J&88SdYKMZ;s-xpRx<9QNL7MYw(lPK+QMPVn>@OPw2d`de#1wBU7&r{BEkcoe(T=WGf^-}eT zAFj{&i!xPTKg|%jCPgIi@)0V$*Xy`rRwh2zUO2wWac7)=gW0)iuqP@`hBPkFPgNRF zoV@n&(PI-6{bc~CMrjLWc+DO1u%mMS6QWoExD_e`s*$T(xH?Y8q?#6}6mvObhbU}R zCPbaM<^0RV`wl1f5zClTtiivGPyBu!x4!uK_-lEPuFlwNc|>qxWDk8Os!XqSycx)z zjQ05F(2m}tI7+<%a0pF&D~AG3Y;iwsW`Mj}57vWjiwbR19p0cXk49}X2A#wGEB_rR zF!fiD8YhK}OlXksCVOvGqZ`)b2OL?)!aI z1rYR1BXxt0U$8I^u&K9$*c~_|7bgsk4S%V#wbW)^oPR{>&8jW4j%>h4Ml&mp?!Qo3 zUcN=TzvBuP|>nCxeeR)k`0g<|ot=P&f0ZneZ75vEENaE4; z#6^7%qw*?v-(t67h!O^dfI00PJ95_(hgIP|t!W%w8~b%U&F%Wc>=Bzml z+`5ys&mZ%Lc!qtd!%c>5GKW9nQ+IUw;!utH33g_C`2Ec?y|{9$2-h^di0sy0OYD2XrzB01hD;6ETo3^tkJDg(nB~h~L;$7pYp3~Lu{LLm5#I>Rd%T3s5oi_M z%K{fKZnp>$Me}a6j(oDe0R!=@kI19cn!(N%HO@8;K&uO>?6ez@N|yHS*S@x55mfz`WYsRF5R+?J(+ik?(0uq3B&Xf69lK3UT;`sKz=TK z{1?TV zzC&^b>S1-ZNN2Rt$aLGBSxSX=Rx;^sb$wXqNh^L$Y>#L(Lqz}gf~~pu&PbLIc|EhZ zdJ#6L0}~tTK2=!MJ`l+5tbLUp3WS4|%HwsS&pG{0HQ4LYcG2$1z1$~1q>N`YR79>4 z^n35DV+f#lxuf`M{Q6Ej?4zj{oPFpDg|5YKfI{B0C(whxE2`#+WZ>>6J?{kLlw@jBtnpL_yx z$?|zk@D9or51cL~zN+!gob4Hii^>FJCu}O17fGB_KSCXUSI&cJ>%F>QI;wWZd7@on zO|Ugu$bo>Wkt>)b$APejm=J161Z1@rc4I6AuI8_%P?d(tr+O@_la4swgz@)5Js$MFx^-bAeU$-Q-^OR~ zk&}EQ3Z|7THt}nh&`uOHI~A9p+~YhHK-T2=p)r9jV)2NXF9_jg(}3A^RxOrtz~Zbn zc#Px}op#Q1^!I?2z1?@b!rm(m3&w%aq!Ck*YKxhi`@?o(HT;e`OC_Y-+)*N}Ux8M{YY^NB=J8Xah&|rRRDAxyZI)rZYYkgJf=OLfQ z1wirj|IVI_p8kD^Yo)uX|Gl>-K%I+C4Ah7Xxq&J!%m2HhW2KTr# ztom0tw{XOM$2VwMsJrzX6FLRlS!@Nb)qmD6M_A9Z?1aFW`Jo+gNI^vc@wc zgF`o)ujqwNJl(Tq=s@j=%`8~1&2R$8YP(9bjr*ti{TK*7c7brCG6~TboMd{$Hyyft zgU;I@+37WBdtkclSWoYhG<&@5h_8(iDC8qsI{x1bC7q7WBj(<)LF*RM7IDsZ#({S- zVjDlg(0=C0*89#@znxQ2Nl9|H9H5sYrmF^re69ZzLJ$_Z1^?nb#YRJaBB~fMN{RbM zj04Lq7~9M-VaKoVnh=%2lco)-DWh>Lu z@vf>MOtyCKU!d;M1-IwFAA`amy@Aa)pt1!o!dDkU1}3Nole#T%@Nc&Hp47IC#I^4= z0kmgZg9sy38W|hmM5Pr_olxVH!H|~gu7+1CK6m))?Jj)`=o~{Vlo*4VPjQ$23Qq7; z-maJ)WFq7IG1^VtBb4j)&DB4GlNX{_Yyua+wl5Qz6Cx>F7`mfJS>(e%0-46tyT!y1 zS=6>m#k9+}XopA6aiCvhc=#OdA={*Iig%+Qixh@`Xpb-Sm8i=cag!KPll5oR0FQVX z%~yxCq+|hCq8KNr(M#w*p(Ej}g`{q`YG2r(-~cM_UZmHW@~levON_tzI!76hL9B)X zb92nPGy$i)zTK>1n{y^cB7IKm@H35TMGtAmfzKwa!ml9Kx%fXJpU3}nIJ5KC37z>D zn7ZjRpjbBz=o`=>?YvVE-#p(NRahICW6Ln(uF7gn)6`YYP9?R}TXX7Gh{9#%#*f0f zp^@hU%i+-Wo>|nHsJQFwg4y}HgzkzF58%p_@UCQvY^RqYu^mC7BlZa|y$#5XjrauU zF&6ZF_+BUP(DCFfc`H)r$l3GDkWVW?$U5ZDas}Jf$NZF2wDiYg zSvF@o1Y;Kp!d~>RB}BQ?}eC&M;u z$>AV_)>Ni*;5moO8)^=jMa4r;L?7gdvcYA&rO!Zzwv_py?Tzz#XYLuF+4VV} zpRQY};=TPa#E7%hkn%acdF)B8nZdImB=pExEmO1 z1#Ynyn&uAq8}FGrQhQ3GwyNo}Zp9tUr1F&2*1i`;?)WURvoz>AC<{lKCMFbBS}M1|$VVGIL-)gU@n+oBOQ+%XtUCwxP-?*% zZpazbe(G6=*V;X_C)lc?eMW^?;on((;kaS@ptZ3IvAL(&!Q=z(&c!yiOLtD)@{vJm zL>+#kCk9N(za1~IHvDy`ZFw!Nc5Sk;1>>Zy4 zI~_~u8bD>fP>x`x@GA3%|FEq#yp8V`nQq^TK*|G*;~oTu+9|ZlL;F7>8nm>Uv+zq{kGtHv`1_St`f5u z%-ZA;2mE2}C+prM6=%;7`KSfSw>ZBa`0tTxX29MvT6rdvS=TOhWM${}hNYrBrH^Z* zwyN~`dLZ(V25kVB!;aEixx91I=EdVrocf#4E9f2g60EWdqsuM>d^TruT)uVQZrk(P zk3u7{Fg==obk2SvKYnj%RP@c2gyG5Y#rgyFvzfn#eH{MvtMSM7NA*;+XFDXPK}rGB&`exQX1M>2}OOtZtc#|NHOYuUUha_^Q)%7>th9a0GB zTOJ6n@8h?(voo^v#%C`VCXvbZF2LnW-z$dqq0?bHj1w!*r&p?*H)2x$QI{8{ZKlN# z-I{k+fE}_}O#az#_oV~-$Jcshm$w*r`$&I32Q1Jj52ILA(v4xD%+sQN6TZ1=l2?B% zlXt}^BKi&RN9VUojFk#8jPvlC@0xUtm{oJx-NcA&-o|=<7J9{0c^#MLd&)+|PPLc$ zbP@`iQqJ9InAw&~-%Ur;YX-l@`=`9Jd1Vt1dw$YC8b)~Wl(Y08bN(&bucRJKkfgIK(aLY7k*l{|9D*Ob7?@VZE|_S`1O3N zLWRb}D1uebSJn*sRP(AL@SuXi7nU5QVa0@YmJ}YQ-q&W^Yx-vwIr|o-`aQrZWnQk{ zbP5dlPv{OtmQD0m-){DoG;*dp=OWHb`gcqAk!Sk?Cq`OOvlkWzHkJ>Jg5fWLAz_8d z74Q^c!7Y%PCl&DZ!PT;PH`$fFxx4d0`J8!D@BKEzhYO)0UwI0A*x%hq9jNcM^Vo7W z!ok>NQgn11H1g$BZitDG7O(7rKyv`*b|5?$WDBHm+J4ZAYjugzXHeM)+lFrv ziK_$qUH1GH724fHv@$_qrhqh5QeShUBwfC9RLwL;ND>&ALpuux*M2_R-0&)~GmHNG zlE*L8ot@Z0Xayy1gzXNVI0EiYC)hN5n7#_71D3UpC&7`)G`h{gDxnu;8=a5m2Sk0- z&b|?v_dgn0vz>7$l|3`$-PKLYZ`l=PDPMlizN5b?vOQ*KM$%yVxhTh==724*A= z>r%UcSEY|~zsJl$NjDb0M2;{PKWZ8h79;UC4HKMXEqhp`E6f}1;&$78uUcXEKLm;Z zQ4~aji6Y?kkkByc|Aej+IV_AeyP-7c$j`bRcc?0)bOKeOk;bB~h4Tjl2QIPftLa5r zlpjOO_MM8^)xLG`^4jsGS8URDOO7RT|6-p1zRiw(qtg|YGeH|~Bp*eHntba^;y!!k zzM<2cVFt%jX1d<@cLTKa;dszTLQ(Wxc$;f|GgGv{=(nOHT5^0$fNgK#;et^uu*}at zIf(xS#~X!WQrn+CC>dS|#SYX0RtgxT!GDP>Djd6UX=XhYbFFv;^K_fG2`&Y{!qzs);Ayfmw#18v75yfo(cnY7VaiFCTz^N5XLxqHXrL5;D=SdL$7-wRkWv;Kh+B9 zn;z@aC*YaIA-xa8^j>t{c8-trKE6hn=12xHNCUNxfgGyGZ~aGDo)fw5Ycn2rAuA0k z!D=HAj;c@%c}a3!D~JNp-1^2H)kI_eJsUXPtsIq~11Q29K(U}2d|QdOmvx@iFy-!i z=`p3>fe>A0Bj#$GT5@`{yrb!x)b$>&nezB9Q`!a?L0CP=py8asLbNT#wF^p7U^ z&bi+8P*Th(5mGUt6axVC=_dbE+ez$dbgc>x8g;NQbaL{iwj--;A&5c7My@Fzrn8*{ z)^$BmCVG14%tltK6)=0T%@ANK`6CY_Z>)DrR(59h#I>XJWBygF;v5O*G~uegbH zw~6QkGKcr?VV71ZyZYGUZu@V3ed$0brgI3jzHjnHTk`WVpD=nb6o4CUE8YH$T1ax$ z#<%(7%c7RHL}vL9mD?BHX{n>vI@fZ3=o9f!>UP{KHTg_Pg53lBsCpv=V*p!#_KLg$ zAa7sJjKq%Vps>Y{yNL!S-JC}565efihxCiVzKCgiG?Fq&%Q&9(&mWwx`I)xl0!5*y z-QA}+#|5dkfusV7^C8n@FBouHD~2xqt32?9Q8C`*>`1_~JQ%2PM|VM2`d8K5aT$z= z>P~VLBxnebyT0A;(flFqr@>NjxYr8Ua1-bqYW3P6Qp?@@D~cYi9;UY>Y>=NcMXxQV z|KK9x3^c}g~TT~g~q=$DD$9;2&p%co(4HmCu5B)Mf(Z!#(&mUn2 z+y8Ijv(%IN^r47I+>%4>^h?)FBCK<1B|qjAKX!O-tWL63SaK2QHn z+`?m#yFYni`w;oc)gruu4L&3_j03Kbhs^QkzO0~ok#2A**o?19%5$Cz<8yl1cRnAN zSP(2P1OI*^cO?H!?{*3586m9+jd1(K3+IwNxlZ06yeU17!*}An_{)>P8DlN+xPiNe zjN)p9<)%c$fpvoDT-uk@T-9A~Sy$YDLK~AjqRB`Tt|>aM#=9!)%|!|aG0kh>HHDTh z7e9fiRM>*~H;|nTE$VM7Oao6F_-$seOa%f#IzAPum>L?wAdR$aE)ejSgXp}KKY?NK zts?6?K%n)0E5!`m_JFtH`y_dlMBo>@PN%>=U)~QyITiL zf<`GDJnuo9K+s8>`tZyD30>8o-;oH5o}+-LmoNaQ7qeVKZWV`~7qApqSN$GI~V{u64STS`Oi7;c#0JDXkPfrRskI*8UV0HqKXOu2%8 zd2pUoux3Q_z5a*{g6Emk1nVfPxxQN(4Zo59zIlPh{5CsCs9UfX)0o*X5mUevX{}y% z2)jw(meB_F0W7DlN4HUu`oo%LWLM)M!!V;di_ekdX-+i}4BsimM5-1~A+IbRWpUht z2!8(w8P3c;5lg?*Wv2U4mog};kx!l{H?%a@y-`;s5(U-1C#pB7oWzi_qPr#obW9JV z?PbWlGCphqf5T1n#cIt0Q@sy>EZ-n8c z511GM)d;pR``1K?buFn&IF3L?nP=xEF=ZGz};>x)~>_O(!;P(f-oqb=tmMdqQr3COgIfkQ{%R8;?Gs)b zpu-TC(nxg6~`daR{c?c~J+ znr};l|N0X^XzUBOf0&U2CC&yfD6bO5ga>8g>SP>_nauB;Sk0@`yMC>kLIO?);~J)h zB`E)&4^zuIjp#iO<@mrK6Rv7?%|{>%HxCscd*ka>r2oOWwr+OmcbT%NXE8l8IdH=5 zz~mNgNR~pr#g!(BwS4{E@Q_tsnlv?T zto|c%5&;L050O#phduT5&&ja%38N|y72u+%d!&FCqF@17eS%izygX{zju4BB`>Ft>o$Hx87Jvt*a16c7z0GI8a zSsSYZ4afTm-{tIa_?j3jjGj%5cEo(u9?kOKDCuP+PiJi_@wRzw5(1`gWTRhn)@we! zxxB6?pan$5W#wxpSg5E;nce-;!{m-4Zmj08F$Z6^+?N{_wu4E)diSE@D=K|T)s;j}=1sSVnS`0_hf5WG$J7D# zZv*$@?+qv$EPZJLniC~f8GW{?+uK_vd5oUnfecI|a2Rf5nm@3QBwzh~q4|7zK2&5& zXA|0%WW^a!Elmvm6&-^d+#*2Xz8}U^>&ZKT!?0z8GJ? zl<`+l{3m-^f?#w%@^h-zJAz!?XYp11k+ouM!tjjU)lQ90!{AmHMo#B}4ACaX$qj(P z!}to59f$_=TkE*|yQaBAbV{DCuAFAr(>+x|$%P2y0R9}pkA7i6=OXsh-Y~~La%MnO z;GikHH@fx+Exw?w<0SGn&S0B|-yOsBGA5KDgRAv zNNoie&05;mz}=|SCltHFWeDXTzZ=>dGn0K1WCFJ zlxf8;=EvdAvaKJii+*8>bc|m}QOlZvNcc8lYYR$O?}e&w+h$4o9LHo3{9_CEH=o2@ zd8Fc3FV30_{AB2&x(f69owvsL=Fp^Xe4z)36JawBWZPc0p7PDsvo$&EYvccAQ|!I* z{#o)H)5GkrnFymE=&JfFoMa;t9M5pCO3>FqB;hn|ZaBtnxV|q90&0-6kdkrh7PU~nQmL`lxyb9AJ%oXXBK|>)?Og%K zq3VDLLG?I{mZKBz?)q?MBK;p+&=b)*-?X6fRW~2luee)gJdyK7;Rrh16WnXjzd(l( zK1srmkx1x%Qk=14@%TiC2(noN1}pNZyyXixVEU(ep2z;;sIoUsT1-6#A}}8NGR5Wu zSg#r6MBBC#JKa+d7x$Sewsty?WP-0-!dWW`OApHFWNLp!^K-39U~E>WO|R?Zf+%Lulmb%q|lXLg3^ z6G!m%uvjM}C-_F&{n}fIO0xjn*vN}4AyF|Y3aC7)(wF(6eft0LbncH#|L+@DDwT4m zbZ}blPAVY@Ij$q2ES2+Nl@M}1AGTE@IV}lAEW&bJj&t1Pn54xpHq3cWV`H<~sqgFa z%l97$ubzkddEeLdxa1RVz7kE9CxIHNKFTbDgnPstKEj+4h?ilGs<}9%`tD!Zw5{vC z*+loyx%3rU8e^bxv`zJ{cK;dbToh{Fx)_)~N#ZAqjSs#a;35ml z0=F)idoY04!o-(3oWy3rLC&_WCoI#W?PU9MEaf4k4BDe;X~ez)q&@!w9Lqe#7h;e~dcO*?-Z zdp-&50$cyA_@qG!>tGsGw5zcK!%xCoGa^@Nz|4g?Z%g!j znvdz2TmJ zV!LMHe{5_Ilcm@4RxpP>LHJ5dRt086=x;Dy+Ot?B{FCnOdA6H{IV?Yh zt%?|M?LB(jB0$+w44L!L^Ydt1Ex(U!d<~LXBFXeSa>X z>?TB$Vxu2&clt;*=q4E+D{h~n+mPw*gRV^;eB-Z|V51eoRLRFD5R#O~Z=R_33qaF} zAds^?o^kxrJb6wC#X)pMLKTXw9wHSvFX7kTc=Bo`^OUY8#3R6musZo!^PiX*$7cMYp~ejK4d_r!Pnn@} zF@;Ki1qJO3&Ao)JOS@Yer@^-JY|JSsSW`r-|Izylyx(?9RH)}n8twBA4ELQNbSR%- ztY)9N+^01~AIr>AegoM2j2<^Oh46hEjNZwuEjwwuXSbvaHHxyq-9_K%ZS&?m!Ne%a z3ZmW7vL$IP2_W;jGO=c#3_Yi)GM<@ty_n!ml(dU;e6s;eh1bbfYH(Dr4dMVdzYkhN zV81r^eF45(n1mDKzH#PSdz6I}tx1>*EN74n@@_8GfeAvYYwyyjG1`R$5!WXxk{^Z?(DG&iNY6(vLeFFEAtFnwmwa3{tyRTE}vUi&@WVRs1Mz1>qj zGi@{5W`5$P;hrKvzkm&;k;H*RBvn`c$oh)n=p)wat9Dtlf8E4jEPPkTP1jSlU9JnUD6wj3PY4 zr8_dL+H$=-ZHq4Nu1}kz5EKP({P@km)A&z#*~NiHm-8ew3g?026881=_vVS)XrE*r ziF3C>2R-6Wi29?-4YQ--S5G$AX;xnZq)+bt<0k(8W40Tk{3l$k`&=_7%H`EOpm#67 z?Hj$aQ@UR8dqh0Icb29HpwkTv5;vQ4s~Vf=%6QTiLT8?PY`~8)p=R)m?(JBOAOFjJ z@1s^x*a9r<2ZkfNEUzhl)SIC!TVH;LcD6Zi=h4X6+Chs$vW-}GDck?>WH;|VBm0)rP7vJ=dg(?a-8#nUTQiZVOyXBa58C!pB@8|GS2h#XD^7*g>TIXLySjm{A;>`YAa;e? zjuk=~(^%1|=m*0!kYkIfXIln?4_tJ=R(Hv0_n$Vf^ddBQ+SB!MuFET*VpZ+NCWkY% zwiDC{UeVza(XVRqujQzPj20GUEefU2rCQeX*E*YbjTrv@5%5uQ1E3y5u8v124&nEQ zZwD)qVI>1gcJ3+8m8QobpTf5SgjC<$p&MNegYsSIh=`|!Pcjf0%1OpAT*Vp6+>%^r zrgXedt)!7^d#K9qhBtv`-%DDl6YnZ6Qt2Tx$1p@DQYp5lrMaQ}w8A(pV}j4#Y6=7E zw-fW?`{ec+SPl$1`o#fJCF>)+_BIEZ{+X2FiAUrV<2CgB=m`5zxW zsv76L*b7&JA?GGqbnoa!YPSp*mpPXFd_oQQ`A77-W8G0$0ddOO;!p3Y3xT%yvQFQ_yGj4~HGAR5e5nuocKtYJQT4Glx~cs>Zk@P}uVNmWz; zw5UF8gqgJbn29(DAO01$-}rv&2ak3Y@EHjO#ONX&TCln;e*3On{+g}Je?u{VV9M>T z1YL(CKfColR4@5=lpLY>$t6gG9!q;Ot(!0oRV78|q8ygmz0K*)h3E_vL$)3Ht>pP8 z(E@pj1z!{dX_$NB~*-n_?1QR;>&^-aU?QIq@5f@1$5Y_!+pZXX#E3yx<@=^y{ny5g|c~N|Zgi^i@*ybCac*f=Um9%3m1uy*Tz# z{E?!JE^N&&8}G!~)rfiJ|4-~|NKzQ#lM0k(k5~M9{HMt^nIz>&o;V404+aKhf1`Ao z&|6&bd8`H~zlm5Pgk*klK6LBYPjRt5SH%DBo0QT*qP=_`zRbAM^o($4(!&TKX9Co> za#H`92_e-h1Br+@8`FPc z_bVbqdRn{#Fc^=d@y+bNG!GT!0ufyFIYiDDL1NFQJlH;W??Q?~Y}a4NIJ^5X(r-B{ z|5Ro)+{*3uh(Y}?UK9|M^X#`oX3{>Hz>62*94qUDgRlH=8^lHYU@L}jmQ8zkqWAjy zpRJvFV=y91N<(2>@U%i`4enCi@Og=XFNiZU0+HNnJLM8-5^DaOt~&jrLZe5LFw%p{ zo6n)xgn45j^+?Zg@Di2O6Wz!HRy^bnEXZmFRXJMp$HB97hBrPAAUQOn*FD1ZMwT? zwVs|d19m9)UH;=F7&n2ajD^ufL69eCiC?mhW}_$E6$X_fmj58++tvs`OFRzh4?;xm zY^aCrA}ax&#r2?=Ao%a$NH5G?kzD@JP1v?9_~ zIK=|JEfuNf%r<9>V^pZi%Y+K=neeZsMVSs1O!20ZJ~fwGVvLCTp;%yc>iH>t$+wF} ztzEnH0{|^Mm$F&M46+MXw-9U7Y20;)vJNcW=It~4SM@l{&@TtW{chV0y`LV>QZ949 z9>tm6$Q{LWQz_^U8zz)I1@ub-u@;uAav)v8&3&My21lU=wNHIk zV}3Nh#L4!emtxBRXeh8&!Fq++(eu+0m$cGi^;8BKfv}~^pUpDUIDw$4F2Eb1ED{i1 zOxF#Y&j6-E7On7MW@gXw8X*WO;ldtYLx7tI(B)$O{rs-dhA)3mDAp-csgi6|eu5eyUIKu|GaM4dHYwMsdoIcmk z+j`IP45Yh{i{y$_PIAP)I|*C6J<#KeL<&Xw*1eLOy&IZKIYHbY+v&6JWGjov^c|w7 zuqaV}burNr2-&2hW9eALP)fD=o1S%!M5a;Lfgf+#e}cHPwr1MocID13h~i5u=(^s_ z2&>cG^Pkx1<~wi>r%42ZnJzyVyLk#W8IAjR)QBewY$LGCp1N{(p6JcOM+bZZ-dUT< zTc>kU?-rkb@vzDKt5k<^hDR=9cQAM?NZlUFF7KRg=BwGLtWGVgiqQbv2C| zu&nd-_WWN1#>OZx$YD#P_5QaZcvz}w8ZpRqYo@}RQgE0g>(F)N@$&i$FdDKRj_FrE zkrc?j{&2CUb~En??BFO`7=e2Ah-sJbamYd4DtTZo(bL--cpOa%kjvSkJuOVX4#WZY zkp*&Qy!z8DdKq>s-|xNx|8J6@9Pl6*vw5+YUx-HPilTe zGUKaBIOXJu4!-3;PrWandU1ADqz?BLQ85P(H4M1jjfd1r@DQ!9z!65!_#lS72Pl^(#XDDL$Be`2t0xdIXaryRk#nftIKHEHf`cb?v& zC>(>udx9iJmqi!TRUqef2ridN8Fj5nu*%l<3obK0AO7BRd9!H-dM@YntzK5olfp#T z1{#V$uiAINP!85SjPjUU+&Vd_Ri@Qx!|}~pXmMR^GDMngoJbaXWx5eZ{rFUNan-;T zZJ9pQdGMzpq1qTc4(wj(ITR57-5)JGbxy@Db|_w^FG(^<%s@{7p zVWe8yOP;KtboK1a*$3n3I$$qon371C5@Xw?dcv#?aOgc>U-$T_p09zI`;D+W0GS69 z5Z*Esj`K-nsQ>YymzktOn4L(R(F^W9{YAM?Mj8D=vlBpxw~0@oGy4v-g2@NYAdDN9 zffdX~Ipt9yF1c%4_@yqqH4G@{AY3rfW(zn)1S`+|^(LQ6ufsNOhEBNdkg>?6MTp+8 zFz7VSr_3+JW>oY- zmcI`l8yL2zUK6x%T(X}C6A2@8bKs1vw%%F>LX zo}Q>jku<__6wr+TqUUT+GF0OF!#>dg*HB$Jp?*`)^33j+`o!kuGBp#p-gk~43$zwl z69L$1AHoczak~hVli_b9^Bwf=}PB5B=i@|*u!fvv@GD6=pV+f7pF3I%IQ zUEg{hF4Oex%wK;hbq|3C{1q67EE~+_gS*a#b_AM8?O~rJkz%?X*o%gz^SeQ6yTEi* z_GemL*9;Pa9lp$PNm@-PfBoF|QL8U+CJlhU5pV(aPpbDBk}BJ4$V>klbONhbJbFlf zVqD$%@&MUuK!k&v=6Q0&@AaQ-l(}>n;A9?UrcxxfT#aI*E2j%TX>YmSMH`u10pHW- z1wozd$&Mq7i9Y+H>VB-h)B$9_!5+xyeH=_~GvrHRvg@Cu&OOK763H<3j3;|BodD*{vr{=L|JIuQXv#S2nF~kT96({m@EA z)C5`(-Ju_Rk~t&bSrN=&rP2Sy+C>P|yWsUPuVFHz;u_9pIk;3D+WT##V&n?>}MsQ}|{;oVLsxJa>FtgveyE=q|sF6@FY8 zK%@S<_VbDBl}!S4j$C&^bimF@X*xP3{KzqJpuhtR!nu*qJ|G?sF^Mpfzn_+K-S%fKQTQL~6x=fJCpDd+=Zj*wPnenMq?v>5F;Y@6t#5HPw)|9(GW(u50=n(h#cvQ-*r6|e|Qe6Z(` z_IArXDh9~=FtcS8ymk{DvnLy}WA^*eeU>xGtB@<*kB4!Ra*b@EEKdiTp8zy!2#9r) zKSfNVoPnfWGOqsOV3Y$_x}$d!qR^KkvH~*GdHnxHyEx#ls;@Zbr;nT{j!CWADG2`| z$|;@liyv;IblC5&&)s8~#x{b`pc+}=aSg~22$DLmSsSU%^~E_y!sS7h(U%5SuEy`s z;OC5}<%ZMJNXV;Eq!#kgRhiE#X2wgHz4|OAiK (pinz^)hK?`s|gq+4o{A5>8T) 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≈LNgSn4b!da`!X-lKX|=Yd}ZcW`zrHf6=@zYg1r1 zlqfv@aj9YBA!0WH8sz}BQY$tq*N^=%`4O(C^$j~NvsIlco+mS3y0vfsbmE4XX+C;% zC99O+f{TV!ON5gg;cX(|t}`|BfvsAGF*v29mJkwP=D7Hq%}LY!C93lk+nuGJUBsBs ze=H*E89X@O7jM*t&V_C-((?3_(XIC&9?-b&j;0}=AwYZ=kl-v{f3{M35~$<=^p+lV zxvQhrGrxvf)-?T@y>lw#yrR3u44x0&>Q7k82c5)op>!A*sC^xvQ+ohaLWRl`xdi^p zV-zLyoj`NKlFCk+h#;bWsSJ?SsXO`K?i9*H1JxFz9$;tg5nm4M^7ezzO}WpMe^T?9 zMj*<|%XjvFPb1mEZTPZtkFPdALlTDhMGKCB48{e;GF1&DoG=yH#i&0}^ z0Q^Hw7qZ#F)jQ9T*6W=f2RB2G?NFiPq&G%P zlVwO0;gp}S&KG0J?+kB}IJC=2HfhF2lpM}9rh%Yw8`pX}rDpuId&{J&PwCjRd8`g?W?N}bijf#`C{BOG3@frd?ZB2QJZ|+*E zUuNG6>qk=`f@TfrQd9*dh;gA5B?~>t$nL^lV}z?`E@L9ikyTcs`(^%$I9;U4#{1PZ8TP7u%vFYReMoCHqS#INaj9AW@KQ$*)fSvE2{{Q_ z`T(hQN!+SAJ-VMwc{_t`cN93Rm8$Z#) zNi|iaadEVq>oB>7_=-kQfC7QYs)9VDh#|qt86DUY=(c9y_KnxMQmzq+mtd+6H~)iI zoUEQ*)PQ<=SYpj5nD_kiU6lYF^XK(o$9|imft4>Bu=m0wV?n40JN_el88QNC1)cx) zB1m2Ewa%^LRO|j%$b{#HA71$M?fPdZLL=vN)Nh z7ub>6L7U(?C2ir~;B$E_-|`ak3k6mI1PCxT$)hFb&WjDNz|Fe!aJo zxpSp7xGzO?OE#$}2tGw?O2yQ4e?0LIRrKU#@INl)r@fQ9b!qS-H1$4s3PV2FZaIF6 zQUNB=ZeZq(LZBxAMdFoECX6EP(mESBmyYlfE3DfZV<%nV5kw9(c~n(BjN<#k;n9@% za$vP9T?8<;VHd*WCw{sj1G|XvH&QEiM2p+S?nMv!I^0XRK2}-UE?sutY86|bosjir z!m?Pi?Lv;R0WVcPXug~O!f1gl2R@l7Z zj|gF5i|y6IK+;}kDG zb1J5Nvqyxh1S|k|7n#UVHD^e;{bIdgeIvL*Be9j3ADB3JHMA@Ag`?;XEDwODv$wur za?(8uUmT>P&K9FaM|rxuQ!geHg&0xfzI)XD1Y;>qwYg0{tNRr`kUlWIo>k1g1~}@f z5gq6m2)VPv2Z`y_(ZGJ7tiGVS1Ro=iM3Ss!Nwyzp-z%J6xY~8J@VOCR z@>P;p>e#2jWQ7evK2Iog=4yvY(L&EMh@2=bvZ4Vv%BO!?lT` zn^lqFg~a5y^zpAt-^VkgU9pzy<6RR`eB75dtSy2*PIlhc+nBfQq*U!343Y4Em*o`2 zeQL_duQ7Q96#(B~B6$%s8{7-gG9-?gnef;OyJqH;9^@ubd#?@eLdg8^ZhQxFz2_ z#Q6B|;vkXe;WXiiN0IsW*QfPL-phu1jU!2+tPrE}xO1jCs|?_NgqmJ_<8!}*Lmwl1t%zf1DI@^5j$m_}GF0)Jz#$faEFz~) z4EMNDW$9>IZJmq1yr2o<66)^w9wj=<9QIs>E4G^3s>8RmA~o%^N#tPHJJ=uE)zq}K zSkWj^iJa>OzL*CzcnN`O24P%V+Xm)c|7>LgA-|9p#d;u4wxT@}agXMMq>xtX5>cC= zQ#~cbeC3R_z)5$$os*&z-K8=ON4VbBV=>GNG~RHeBwsp7 zvm_oFav}M#!YU&=s_$C!W(GGVr3AVVXX~)>$H%d_o)uF?70WGB_ZJy2O-}ao^V;Zv zLt_;Vo%*bfQ-St0Sx*rg4UED7BhGoGJm(uHAZvG+8c%xWdRM{GwK1&DpQhchQ~S*@ z`>Y%LOl=Zbw@kG2>rCnE@;Nm22A+u@2auEN%xZJgD_;8%!Ft z{oYn3=Go0+WESSH_QE<~MDdndogvY|t^gn1s)S`wRPZDjbdQ+7^L!6Mg~?GD^*UBm z$mh)bvt1fiRTRrNSE~9en5ow+(ytodH_uNeRjykmP`2i<(kbz9j}Kb)TY(b_GRejU z^8)F?o@kkB!-H0!XZXpy{D1L}$(MwVh1sl26w?lti5*0dKGc?tF#w0Ntp-QsUaE9p z61~>i7Ni<#>U*p`L;UX8Y2XGy46sW?8N>rTOEhIDXN@&JSge}dT3H(Xv}mxcR35#I zi)YKwcrj`bE#YR<#?(O!NxJ^>>ExN!X(<`C7~WpQ)Eb)$eT-%g0K%3SyAN^(hd(n5 zU@k*HFS_b+H_#w$T%OJyLv9%}6IEmrhH{M%(=>0rv4!kzw?f9}p)gmHZ(L|3jus851<#>$sZ9(KP!R^LZKS@?LrPkqHw;< zrDEqN>7<*D$PMM>#8a%d;UyUxzY5N#M7IoXPv29`kIGA4`c2x<2+vS63>Yi&JIo56 zZ_-#zORm&JFeD*e+kgPR51hBURHsB5dj)lp#0x|u(ZD~T7Z@pU^;!|B^Nd9xFbQ-5 z*>rrLe(P%0kP9Q6)WTsluBLJoTIf2H~J~u%PmG$7LaDk#PC+VSP z$VJ8xWAj*#lE+ z>R(U(BEDUu!r%;fUM64gUfAHmWdP$ygSNqW2hy{FBv4cswSVFId1UZEek0pVg=KD8 z*bw`Q{%5H8+>NP6#8TuN;=O+pmGZ+aynls)^i3p#E&O*lOW#F>5r?lxV2!BkQf#pG-n#;G3 z7tPZF!pU$^3+3Aw%K?yK-Ubt1e%SxHmx*>oOt+2xSbRATN!qGjj88_!naZ-mq!>?+ zWa-WuLjRrkV8yi2GAwN9MBjr{aR8y#qHNBAW4%oY@nPoe^dogFKd}RxuqYNL1E2aG zoDsKQrrxSL5ADR?n#g@Pq@zZf7c_KLUF3Bg;7`g~TI3bi>TQQkqVxmNfWf!d1Kmno ztUFD3L2rcofKJ=rX?}mtgv|GxX4UbcH5xQ?(x`#Pj(2<2j@`3N#F&j!HM$A29`rg^ z)z0>3R*|0ShQtl3q9A=HDw?|7u1*L1*j7*cpE*ozDl94SZZ+BvaJHGxj+KkZ+LTN1 zJFCVk{Y}}Bq&2J|wh)YAxQodxPl{1tXOaFTmC46dqfA-q z>WHE39`Gs{O-BDj3vEHq5AP#C@y*^{m%8~eu|CRip+V@@!R7+qp4wI9CZ4^H)0s54 ze_iY?aZq1rZENw*A7Vz+*^~!yLbU>J4<8#HH_dw9{UZ=D@b!_ZH|v;TavBkk7(|@Z zRXAP_uZKkGXpvCyZ;&u>@mtc4K%ap1+aG`G$IGCZyUP`xQZ&Glb+;@j_hv@ZwdJd` zQ|v=(d$mZmbx$nEefl&rcQ52rd%f2GRa32M+{nh&4=DDZqYV+l6|2q*hy)du7 zODKXl(+K=XQI75)(bhj*YM!*O1u|Qu+4m_<>|m8O90tOp293^Q5u^7DWGDvs`BkCj zUrFG@jSMNiKsWZ_DrQy_ca^I6x5**u6BF*8K-=Ib3?&qVW*!5Wnrq?22- zDSvT%2Um{EAPlf&51({9$Ys5fQ4xIIFZajxxY6FE#NJdjkmaxYUeW$U!WxsUCid>Z zK!fwl;==517?QXP423FQ#)mGd>_Up}S04pq-kH4J;N#fcq)d+ByC_YN>m~64!%eEy zO(t7AjbUeg<&6#wFhu`5(Ub%k4AqsNq=&qm#$;28n~&A>CfM?8!x|Oe`14J!Pas;Xvb{=;tCKg|7FypstM*kN0=<}XxL>=w6YynM8}P7 zSUf>%S$`JArw;|F)%}l>mVUk6y0ct_aDde>xIK8=ukU=!M3+e|kK&-Cn@&*L+2PMM z(|x%eIo(v*_nX~M76{-HrXVX2az7t-K;N@>8<`CwsQhGJDg(tl{l!8<%0eSu<7kNY zaG~D-%H^-W+(>Qr&mJ{_Vf)6kDb?O1ZUdHYMt&e(I&)k~hP-4zyMji!9Qw)qqNE4Ik0 z*hJ-_l+dr+!P{|a9Gl&v6-a1u&ED}N$hWxGXPrw6ef3vh)gZKqz z5FzWokq>9IZz#s`Ll@3o=MD3IjqWK0#v8mP?E!UX`K9W1^L;+0ef;l4AHS?7XzMM* z9|srlcCGs~hyU=C`5jFZCVz8q#rSh1|7bk4KTx#=ezql<=k;juVh;KFv-QkYkE6AfO9|0gZK+Hkg2C*hpNBxY?NH-LK+ z44IDD{B`Ia*7Iw=GMo^&$Ql;bCd5w?>{tra2j1$L7pp52g4xsyjBspQ5w8e1@DBkV zXad>2wP}g)4+(?;&w%8}3z)rYZ^g^~U%&o40XJ(gfN)J5yz2I>wLBT9<8|bM-AyXY z*MIPj(s9KQoe9a{zrS$?+jmk^_WcwK4Q03Z%>x1joZ7deLq*7YS>ENXkUaEd2QSAN zjh+)TYHbib30eVOq%tf0=a=OAe7l`mZm_(~Wse3}jaXo+@!ZND4j5f-YXtB^vt?JF z-MZDQ!YO=njFt_sLaZyIxMa?s9b{?h5I0bt5+po;E58MEYoiY=$^(H*FI_!Z7&ywSM`VoH2Y+ zw=N5u6?y{|o_d{oEC}&?di`(Ks_cd_>lR=gUrb-P;Sv5?Cuizp;zB*Bb21lySlSoj zm%{Q|WSl47N%DaZ-5cGMpCucYs6Bu2rQuoD#+T~k=`x9k4}oZ@$93280`gWKDm;JH za!KK0`-#WNhPq)_SYK4fo2p?v6)|})w9UbaR^CfI_I()d9p?vYuDB-UA%jZ8tKG_4 zPwqJv-8O(IhQNBTpsjRM#W~qjmD6_W7S$}65CroFXRx?6>$S7D=>eaZ;Q>)}7Tt8E z>FKk&!?f=9Y$Uiw;UU+W`l4i?pYuxv{7s^DA;y~E{ChEc1NLuKY;E<|CTlaE z@y%+N*ZBORnoyAmn9sLj*WUco`d!w-f6G@EAD5PhxtCtQop?gioMUkDuWj2>rCgVb z#TxySA9OY{$@{DM!`Kzn;mI|8(L+31m94sxQ@f``p%um{;N# z;)i=;Y2cJ*3?b#?YTe}%s;^I+&^d9P!|b(n@vS*t$=owPnV3tK1urs;N^Cb$?Tiar zQcTi16;#VAejNvFQ`~FE*K6kq<^6}w^h$sjpV$G}2M)Vwq-NSWgU`(ee?hYQETfnxui_qNe+4|f?e%?1F>6xZT_8@}-n zn;v#;Qs>UHxZYxaZ8GHnH8CfrY`$-6w~WKISn}d-((#>JLO)vvd@T(dF^=@|%k@0g&>c55UGYgUrR4`=AEp2L#OB*j$>j}ehS7t7?wN#cz11xEqyPv~vH&ME zVj>XDcS>r3K<|DwPxEB8eF>Ixs?%E|5_N~>@^FMuQwCP02yA8uG~y!JqK_QzUCM$* zTiMaduekoP+Z%UGKY))V6YS z#j4G`Xq!spwfS<3WLa~oG3jH$DS;x%g9PA+)&8;MWNY&=Egy;VS4|Gv|2)^CMe+AU z6L=ZQYfOGzJNASg*CH^}uYz`Lb2+f`!c^B`GoW~s{*rEp>EsII3bpcxvvgk=p%%(x z`eLS=48ka`Gz|lrHO-VV*GAQ>+y?1^g1umqO?X?^+k%-76Y6O&_ek>#2A4P=p1ASu zMDF7gKmK;RO*SNg3h$gM)_Zt^dqCmVqv1f+)_=FAEYd&7#~R;ycQtD6(%JRBrdU#z z(!d9z4RKfZzY_&0*zn{JWv(NQSK>UJOB)sa8_OOhnq+0U?lz&9-H?H~3}pr3Grc}} zQ4yXZkNhiCaki)nrq_r-t$u^UkC{`n3Hz zTcK{$-_u~$o=S{VEm_~uZ&|5hhR!?k$)>H$Iu`ggQRASC(lXQj=mN& z?q3Jy@Istd#XV0iLV*3_o079kY4z>xxWg*?t9rnjLaS;QY#gkSjaC$cuOGl_EgR+H z9{>AYJHvFS4`>S{pIQLkdl8m7Z8g7eeL)OkL**$&)MzUlUVQQeuAGOY!Qj7M#*7JhygE!Ws>cCw?_wII2{t>4-pr#Be$4xJ zg^5rDWlVsh*r%{{ry`Q!LI$C9Y_d&->Q4a^afb(rSLejM}2#VBQTgicchn<5k0?kxr~u~ckODvVQ&g!Xs3mBH@NMAAsLsS5(lXxtGuOT z%6`#xhF~kI!DP3otS9+4k^b`Oi@a(?rq$F#)gqn`%rtE^}!=;_iSsN%;(y zrDG7PFUW(swzD@>eHYMqsnPO%$CYQu_-SB3g{dA;>A;KDQ=fRW82+fMTevj(+4|V& zJt?GQ6H>c4zhM7*NY(hXWWbaj^j%IftY?wipI4lz0ff(cR+o4rYCK@X7yq7^fyM7N zb+%yIxAWW~GbwiNB9Br$`(cgV*Qf8vzZCq~#kIGh#Dtb2ox8H=n0$A^NfDR$e0;VA zUzcT&Y`Wy7tfKxvdlRW!v1HLl9jMyg@BCZF^2E$9D?514#m2p+;CaW{F#Gj6YVl}F zhlg^p`VPH@K%(pp4bZTOo+xM`d_AR;l@`Jx_!loseLc&Cn}2ib^yzUn|LPv z6Oh#R*#vL@|SR3Em#i6u(4lZHi||n2Hfs z){lruOqi;)=RUAqd%3zcE{IZo(NXd)b-Oh9^oRH_>y1$b-g|<~3oxLiB1d=Xx-1{W z`1L%eV%xHjFHyRl(v7SP7|n6Z^xUhCokH2TF2Q7l6=4bcM$MUDpmtB05&Fha@8AeW z`m#myTj=Oks!-T?keq#}o{D(=VSk2u$~DQ%_s@?1pHTV<{C^03Ks5aYD}tfmjeq=R=9@7|=H~(R6^SW*vo7JWOB2E9 z8m;?V+V^;TMx;rll_opY6s~vrYm#nAs#@{a%fGqG|J@dPV(CEaO&HzRsbD4Ek2SUa z`vzq;g{3w5(a9YwQ5KjOwF-c>AiNoQ>BUHebe!jtS~XGVYwj86Ue}3p8)7N)YECp2wtd9<6;C@8Brso z=#02YlLVGt#5$u=4Vi!Sy=03y=h&oGj|Qz5;U}s_xAiLL_g|FoZjYp{tU&636I5pwZuRP;}? zqesgD9;I`Q!uVhkTW{SvYywi1cF<{hvh653(jUx?$9~()Js0Qi2x${J9cA{G{14!c z7MS%A2N|ZKUEM7=uJ>q7?_S-;84ux4u}AduJYi(QR^M_CU%N>WuqiYgb^{sGrKd64 z3@R}${{4fMyE^+|EUx+ezUym3GF*tlsLQOPu*)bOe2qQfqAOl9w^#hW%9XlFCiv723Pj^IY(A-R zWV#lG+xr!HH6X#E)w^o-C+_z$Nw)y=gBTSY7*UOp7cH4rIkxHu&bP~}PXX-vg&|h` z9tgUzLihbcCpn@AtaFLHLuU7Sb}v|1R?b=z{PXp8-`!PpQ(?o50dkU0r6HB(i+pxK6m79$qs6zX`p0m&?fUAYIY7 ziwPN3#qz676coGZuhupSn*0;u{BUNrUH~C*e`b$Ro$2&u?)07Mn;N zH8svU4i10LKXqIpsi7$NElP@~t=SzaV6yZI>|utue^7dZw+pY$RN*fF7ML&&Hmt{Wg+3@ z7LCYM+(2MIc_lEUem1RXVMk}AD$xB;ojqf>pIpJ&sep?t6Co&1?6Y_a2qdL?>O`?e zXmNGQ?G#FK>)k;+rCGXa#P{dCyPgnb%7=tqC#B=Zt{0{@7I5Pa z^x_Qj9z(VasbSl2{Gy69Sv9^F@TC4HWNkuH=032%{~&|&cg;uFWBFdNXO_La$(P)$ zeR$ZKj2@w;#I>%kC2ecAZjsb;s_U+7xTZ#0G7ZSkv* zGrID4;$@Fi3{y^ihx5u$$X({E2~}PUntKl#o8{*{hg>FU&|kb=-oELX;?zT(uK}sF z>RrEX+-Q0mi3aYwSpGd9j`JGK2dCSka6h3@5^C9`x=Gg6~#1{bbYvCMTw$v;FPTXc~dxoA=!t}NJ*%h{aK zLz76mbWuTe#NlHVskFk{(uS{=JJ_7$`9|IrD)7HHElqJvO-o;&m#MJ_slUUvqEMmqUZkSj-1>@L7>}RpIb&1~in6hzQf55@U2^zrsE2 z%u@W0G9uLK0_VvsT(Ie{Q~F2^R@V6P$g+v&zecx{w*?1IrFpYXqs{=vdQg%%=KQ^~ zMGsi*`YYfRk5(?KGii}Hg6_|_KQfUFnyAJ884S7BYlzL@XAm#^N>0cL*1V6gKlGbK zG{NiT%s>Bj?1O6uV9;uHixo%Q9?KZ6DJh$yXE3e(-3#mEdcW=-$&IGoYd*F!f!?de*Mk*QZF)b0P`xjky% z^IR`~=kf7=53>ovyWXfC{d8g&s$BxzHQO0An)9){Ynx4z-Gqap+MjNHo}0nQ$2FHp zSPOMZSFXfc#MvteB#^$Q2@V{n*Q`$-ZM_<1gmg^8{yu=wxaT|G{deMP-1u6;h3}u* zN)k{JMaL1idvQ~>RM{K_V!-IUVr0&r4vrVk0s?!kWaes4XI9$2H(t3T@m_o-r-?Ez z+3a#~|8c?&bC->N1c$wU;9hV)_gmOHQwxplYLp-Acl#=*m26&BSRkjyT}levX<2OY zoF0h(w&_1kS@X~hCSZ#b3mG<|qR6~h@|ozHD%z-l+;Z>TP%~(YpUshf%h#LS16OSG z!OR!82G@rOmQ|oE>%mE#dR_g$ik*xin+br?fQM6zE~!abA4zo|l@PhyLQ6nn5$?MV z(iRI%!5ZUDzCOFCFMBDQWjo06Z^vd2>+BT#YHDm|SB^y5G>2-RzE#e(PXXi@pp#VB z*@4p^z27$RmJ*$w>G|D(284^!;X>l| zs^US4(p1_!YrCwAf_hQue}gv^mfd))%Oq&*?zCw<-#p6Crg1Nu3UPUz=LyFEw7pw< zCnpyOSSUluG%A~po+cl31oLE)v1euhJzbo}8>Pk-QV-B_pVA=F)g^Lj;&Rhj+DbMH z$dP}WBcywcV%lz#jM(9T@8eo~`ejxSunQ$J}QE^vDRGEl5CQiHvY^cR^s^+NfpqiJ@B+iCzgk)MpGd#0&Snz zBJ&chtGMttTQPoVq1dg+0}mRX?evvNdxe62S(~LAzQxE|He`4ngYCLQLks8boN7WYlG6+Fb=mKia%`UVJ{QaUP;wo8Wrz+|upa+HkO=A)f#lh9(|j!hgk13@oF_jGyhc+PNy zE2`3SO*B2XMYBcU{i7b8{VFDx z1G8-+LNOY96}Naz{8T6hEh|J8@E4{3Zp>|d0q15KvQld>oHHAfA`$Ycp$5E+<0P&I zsbi%oC@^D)@R7}ChLr5e(i_GAG76~ro4dp*e0CQ%Srl`6dedOi0&6~6w$H6RuVlGq z)_6hxi8udzb9%+knGlW4uiZhCFJJ+B10p+qugoMU4O^p0nD+&O(D@l2J&Merx=mFR z9eFo}J=ZE7>VTLyNDZt7i0=my#7g_kr?gYaBaY?YmJHgijrJzpz%C_0=0Bg4FY5io zBhT&Tb$L|D;wi7Qmk7VHr9jU7V!!k0tu(MKMW|du&w)8NVd=OT>&Z3!sOy05-f9lm z>f>E%H)|{r+S@{pJXyqVZ&5=?5>nnr?npM)q4gHDjdSUf2vESFjcfPP$0JyLV$v03 z&4rr|>uUK9ivlI^kj!1Ft)0=~DwZ7S<0a>erH4;0H2}wHaeuQc&+il#zZ2GgS4L9L=HMSgQsD}N}p>axorg4sc?2v$zBVzsw z=+!?SyaBml)Nw2_f&SUSZbY)o^O8xFtYpquoq5htjZRy!y2qxJ$n4y6w!XdbXOPLp zm*j`#U28c8h`dqb=)rA%~RKDM=thNn*9DNXca zUTK9EeZpIW&dg;3OuHjMVW8IDC+WMs=JrwCW5;5(_Zctg5>LKVl+8*!sK1>@KoH_N z<5}=5E349L@(Gdru4yYP&H!N~jn~k8{EL<3i%f!=qT;Pfy_n0!UAUJ;MYXG)1!==7 zjM}Op*nG0 zau%r^kg>IFdZM$LaZ1x};VTpp5E>vn5cB)i^}1*OAq2*8L55o$G(ulud1|CvxBL&@@-UdLca{5_93B4bX;S+@EX;r5yTm z^aANad6G4!klnrrjUd;j^9Cz&s=s5AD=W|YZJjhyUFssNhVh0o zjmcViw!T3Z5?eZUt;Ly7VqJa=(p3s@xWxP5YlC+}-EcL)#O^YtbURoYDt%RBUVQFD zxqy8CQgBt5UIz1(?E~B@|Ec-COi=o%IfI_Gh9|67VPTg7irS=BoJWwVu{Y$;+9=s{ zD2kBFU-m@N%3#WR{HbO}@~)p6)UklZA=SU`VNW2JYj6%SzGC~^a&jlki)-FIaM5U3 z8~G7`pEhF_nYa9Iu2@Ooj>eYt`}(7KY^(Kd%=#L$g~=5qQ2H$x4hesDW`>u<3%(SN zSES}o95eg1dUxn%vu>`B_s7T+ySbBUO>{xlxAEzx(AYrw$%T!4%=@W`F8M*3A1K#o z8t27FKZ1#O=$e|iJ6A*OUxKeNU(J2!<0Klh8oo@-_;_)IW zLQKk;RyXe#uo6U$gBK;aB_pU>Vm|dhKj}r_Nq@MX6R*dE_^C#6GrivE(vCWycY|y( z(gp;(wsNdn#wB{o>cP{^hmOzS2Cxa<=C%E7{wZEhUC?Bwwgwo7ziIECa560B{dRCB zyFqPL#f(%;y&vJAy{uKc6ZgCPgI_IpbV>i%@O$oaeeLdXC8|2;$k4KgNS}!=`X$?K|0E#b=%5R-i?luqoc z8}8OIZC13C8hV!LFZ@&IW19z>U%a$6!-`%0RDu(>5J}LIZrZ3g(_Ot{PQIdX$K9)`#5_jaIgDN?Em6PyOSG1CN3DYE0gU(<~nL-!_4DMT#UiyAXJ0 zza?sS(8Xn>Q+cHR>I#5Qdc{>1Ka5lozx1fLMox85?2j2kGALpA*ieh*Q1}6_^BFJW zrJ%4?LVYbgt^Ft_jHA=cJu-#lV@XFtB;Kum{5d13m1=O{ZPROg?JUPj7xAC*8}Uy| zotI5750-Xp8t3*WUlu@4OhR~xHc{C|4g+baiWv26a~r<`Y6EU)qx7ZeT8{MIwa>Or z7h=yxj2Gf)@YF>jXuUlK**xq_h|tlA#BI9NCBqkX|*7nZ(v&HPwW68yodD@toi?%v0}`mAkrOo-`D$kd*X zT{#ch&&H%QqZr3Zj^7#78;mtQ`7fNEN#QnP5fKdb!|*8 z8-Ti>dB*)cuEfd?D1lt35pzqt$#CIbu9Q)TcMfa06>nLF_5hG9MJiX_`}?mqD^qub|Mf z)5pp4o7Z2wD6%yt?2Fpq{`ilk;rspW&;ORj>(JusuJUh(&R*T1ec!g*eVBYlA%KhN zyz(nK7K)=c>g=({V9R@-Ssqh8k)$)*FT(-IwN3r4X}nLaak{7RMw>hGi+Zpld_@~}d(KFlII$dH4`xupIT92L=Y z3kE(xg?#ny+T>f9&01Xj6{KDMeK_If_nAjXrE34j_7%og;!M~hDI@gvHnlHAc z7Ne(1#GM&4B-;(su^(<+z`y-Mbar^FIM?mHNFTmFrIr8}Vp(kTx1r7rhJ&Dd_ILa> zb3Ar*{v2v z?&Te)OV3vLI1@Tm^R@ou)D+i09a7tF8>5Cl-(BE}9MwtZr2X3If_(Ndj;Lwa?)vko zVfGJ|S=L`uHa1Q#UUXwE4F|cdFLfH}cm`&LR9i!t8*2#lDhR@M-Mz9HV%Hj`yC)hO zXln3lpsYe>qx=Y$pZ!q1;Jh5!kr9rL3fWV|Q|-U&fA{DBkGm#(W=hlMfI1x24QhkC;P@th}}85*;HP%y!7o$xDhg3-QRp$xwkFZ47o1KE7mE8Qyh9GGM_ z&zyg!civt1&fCP((RQnsALtKC3gwl%mMdg#4stjzu&j44W?Ou*Irb2_j{V2^tnFL76?RRaN{<#5D*=`H_bck5uHYWu zd%suAAs&aHqb=K6uv35rJml1j58T1Ql_=Yw|3-5*U2&fzAZI~%YvmJ2{a?DLUn#Zh z5Gev@ZP$Rs2z;AJe5efb@ob!xt%g{6GN@o(DXv7mGZLGIS~B&i3Euv@>kZh+C3SUp zKTo(O72q?qqqS$wcr5WEuG3N8>FWlOTvhgCQq1Gt8dl%WC$F@u{|Bjvoqz?y5X?Q7hc%A$ur=!SoT(Z}> zZ^dAEj#z(nv1ynz-@B4?Ulgdo`_IIqS19^2>bW)L)l7$qtz}Bb!k_78U4!@SW$pnE zkMeV8t>b;l0mA$!cH5wt%ggd+)ZI^63Of=NHS=-RAsFU7H>V>3+MU$;)kbq!Oa| zJD+8Db&Fur4_D&%zr6$efDR#E(yJ#wF8*9oz2R_=BkjMudH9gxlBq|u;{-U!Nu_)l zxTD?x+l;mb0iYc6 zT~`$)6Mimo`wUUhCvzk7zfC z5A|qlx~G>c>q!#g$o*F7u*QU~5s0`+wt`Xzf>Ml4?ZRUV4H;rr{c*g+`E_QD92tn{ zRic&8N3Yg{q>5o71*a57qiiU~gpFK=t-4o<>3|a<>Gp&ig5Yc&cV!)O@48tJq_E#S z2s{hD&Qe-*NSgf-uPS=AxyuMkzon*7L$)KK(r!Wmdj%&0b)D}d0Z-QLDl^y;U#Whg z`8^=qE?}48Ap7k%@r66+Y0u`-P2O*WHywYWTg!kk3CIqhEG)YfKG;JfgSwf_e>{!c znj5dn#bJ%01HhZW3nvG}PRfoSd`C&F50M_2->8Uoi*J_sq!SbVS}&#u2w`*oV17M& zxcz*n3$joWVe7hYJbQLjShNhDiZryUb+kn^Rs4$Sd+P;}do`cOX) zxub9JeG8*X0Xt{sofcEG4@g9z{~!{eHE9en-?xXSlTxxm7W?WuA7djs15fadX!5Q| zp4^%VoMH4e#9y-|D2+e?qfVpKYh5S`SjUFjy{!@(#W3%(Ngt)Av0-zu>!YJ~v8uNP z^soGmI~;|;LzA`_9sDBIp$97kkIAKEP0nu$ui6GhmD~-!FM597@9f?*X4)R1w!CLJ zTQb2l-F2KunspTIE%#A<(jicoax>AU?I5hT|4jqWf)3zzSdYy2aX!(SzCV+-wXOS) zC(F9$%*X>D_m`idHyh=$lC_s0x0V+s4t~qNe&p#J$PxXcW?BB$Cf+M6wKtXq;4qNJ z;z;r0s~nVe6Bm#Y8>cb^0UhZ~j#xq{1YnxC{1kdDK)YX2; zz(uQ|NfEl&o6>oKD4vu4ZAZm+Fvi&+PjZi62i!mw4Xl^j!7m}cd}{nf*wGxw?uVf%wh&LJpsbK6byoQ8dFZdSxfd`+Zv>`? zLsmeD>+36_y2yJ#ZgKtPY;|*3k9)OObh;zz{pu>%^|2V=8~A$Lfu15sN$4C21oB#b z%v#68`Z_IKcL%$)tPWF=m@q?JX_Iz&%PM0{ih)kjSKjAmiid8>^_)BhMxF zMkWfmse*$bkKq=wtsUm~Ez*hog9H5IukT1=A1h#c^Y!G ze*|z@mU_XBNXy@)V+#AJsS0ea+Q!WQGfV}bAC6Qim%(jk63w5C0@rg0-K-dSWo9EJ zNaK_a>R6ni(bcvKzuLw0a{umcV_GpRm7_m(dW6D7`r#TZr$1nmpAtU0PnDl@IKc5F z$mCPXGnRU3wLv3KS(*N-{(1Q8ahZ6`s#ej8KL3v`yCCG(tpinKfMKD7_Gv4BFmPn2`-5j+cn zQOmj8YX}r)u;nH*ir5txtB?yWq&B8oUzYiD7WwC~q@Ts;+DJSTbBxqqK3QFNN*wl8 zG9s9MbU><(?Y+p4ylIJwneGv!E>>njlr@$UWX3gIa4SiG{;ryPV$*;vD0~v#9Jg!m zgpf^j=r+>skV{6KF+)hVYwYPAJhcszTBF!E=wb@HMqDAo4dQ_d#jnTm#+YHR%g0IU z^EOj{0vDf^%?ea#pD`>kxS?0OD=~tLJ#x+EAEsoO+9%sct+21m`C#Yx76ju zc=)r5wdNLTi(y8*HQ%}6Ox~x_>dv>0Tb@FKhcF_LW1AWZ`GMcoFc3$nW&EIDLHly3 z!TU4qcGMRNS#T+UHoCs*=?Sj|f^igcmol`mpU2Ea&>`ZxkL7CfX&&4ivT5G__Ey1C zNLt@r=V)5Dk=%aK(<~V8v2##oE{3z6aN82G6D=`b zhY&5Z${@6RA8Dv68*-{{`j{#e=fd~4=T57eV?;i`H$Qq*d>R1C9?sslk32yF{zP zUipk|(C^b>qQ=k8C2KYu>n*Fg@Z#*8C|Di!Wafn^B)GbE&05vfdR?6zT6EMYp@+Cg0eqd`=kJj0ZuVV!M zS8dns;aA38eR@b7Kx*S@YH7s4LAC_o>5%W=LLV*DLS1H@F6CsG_4unNFWgk5f~Lvc zQ<+yD=z=y{%_c6w8kO3);>%$@(TJC~&Z&17?^nTI%Vb?pqahDq@ zN-={<@YTgNf*vIfTRTA?TUzl*{z)5G%chcNYnRxylsS?#y3bc-y`^ERVZC~BxCAhcDat$ zpT6&^b|>w0DgTk`0h-6IkHBhl+tk*LnZR4i6NP$VqDBuEOXzMRbiEkWUkjGyrF~3_ zV-oDi*5z*FQoecu!8fFPK3KYCW}|D(NN@YDU=6#akY2giuIoQ?3lFtIeFcT~bM4;t z*B+HN_f6GTKQk&rG`v2U*uHerBk@OtrzN@ps>3z~5?_fKbP8d2f3WDXu=BTXX=z4s zHP*Irq*Cdxz;?5ld4%I-)+~_aF5Sz%^>xIXtoI+oH)Qw}bd1=hIal4$g;Pw$T^w~MdptgI7O&_C)G5kU_QMQb2T z7}?~%yt@&cObMb-XbkgnH=x5a{_#Lr)lO%#Togqm9;h0u)g=3~;38=m6PAB>r7pA$ zVDU+#d^+slbq^7BIijotl2P|6XNi<&iIOSlQruU&CaDLeK^%UhRtx9%&ijd})P zumE<+>SRCt2ssn#C%m1ye#!p@LdetClDI(>YO^H0zj6WppI6z{B1mOYhjhAmJA3cR z43FU>p8vLQ^Y&9pwm_+1V|+BjVzI=5MqI_Mx|ATz%{$O1;D7(|e5W)^zqbu){{WX} zg&40RS`x1PG4l2=82%GTKVyd(>-Pmu3l!rWDOJ(_!|lf0KmZ%5_H5nb16{pzS-zT7 zO~_VN$@`I%Vs1EX7<4$o!tjeroc5I4JzVE~b9~& z{;JO>tCCCL+A)yq;0~sTzV(ksZE0n@C!)7~-*7mbkA)68to4uQ>^~m&^5BsvP>ZQC z&&Q5w(6CEO*lUAH&>15sU5-gB=mZ-q7ra-I^QzyT6hluQFs!ZR6Nd#cLfY_fbkUg2 z;_~dcT?_Ths8*-@&J_kYfJf}k4w~k62oavap5(;WTbDuZ(YPqQP^E2q1xxFUwJ9YdvVW@Jioz~Df5o)zr<|g}AGxc_rw3?pd;tls< zWQyYKY8*?~)a!Fv7OFDXbPb!>6Xd>zU4xf5`4g>6{R~(D`M{)dBL-RTT4i)(rY^Cs z&!+o_)_+VEjG= z>DqFFgxiOb8sEs3h)PBRQ*y^Q@h=nr{9|dn5&Jo%a}TE_!LO9MYp&G4Ux@4@7AiIu z3XP%CL#!9-ahr80&AeiwCC3N7?VOFuIl|dRapx>#&>RKjN+a|A6Gn%bi%Z@mjFwK_ zh&_p~flUAa>QNKlFD=;Ac_(_vIsUNCMcHSz3h`iPBe_?vZ%W1kaA-W|KhC#fxk*oa z@3BjS*39vcH65wkO5rWcDZrozAM2~F<(4(@AHO$D6Sf+ySoPD#-_p8IRw`T)xr%Ka z$=g|;8S(VcDL~Nu*2d=*Y6B-gW&tKUqjmjEn5RD?ub#XzYw2+IOZmK0ow6B8{WZqJ zLd>HG^O)sE1GL3v&3`;TD!hckW~mQl1p`hvN1u(Pwi~!w()-cajct7p^$jF z3gP$rfsK5J>t+C@d~0r<|HH}(`+Dg!FMbb<&28SS96KAFz=ZLAUxr)$q2IwsiD&Ny zWOH z7K86r=PwTif8u2Fe2eI#R|VrYD!>-BWB;v0geqjtCtG=O(@8JP#k|MWIiHC_UgI(Z zQ6|$-BCc;~&TybJNF>{T$2;IPy-mq3hZ?fioV3uLA53hvm;C9=iGQ!r@c7JbQ147-XD^n#YSxAHUI*O&L_^ zJc_&hSwADc7LWOCF`C);)mnKa4pI?3eexI3Fb=^YZmwAz_a2c+aIot7||w$e9+@ySf`3?_I!{ z8!^R_eZY!h%&fyD29;D>0MX7v1o9lf2- z6-0hOA6oHPuf;M%`YvH;eOy7d?z%N~jyM!PRDl111FS?aDTw8H1%?AmaHo`E)(*ux!KX~$}a^Jd5y2bhxVHK@O^Sg z+pl9=P6FWvS$6xf;ri>ODEM)f?>T-mMqvzF;{^?xVA@?>;#I4~Y;m&bDt6$n$uD0J zBjBRG#m#f=WGMsxctq-71bI)79h%I_0N|wjG2nHyQ}TrVKn=MbtY-q_-TJBUC6IX# zdi33|cOBlr`pAy=IZwo=_fj--jq@!bOUc&W4k@pR<6YWP@ zPs_f)?C*GW-!9yq<219ZMoygf%lfo zI>pmWt&%cbkiRcnuH-7ki_+JWe?Hkxi**dmrWFi7ge$;juUe* zgl8dyxc}5is6!={pi#iY;!pU>rhpi01n%>9`)^ivG_Xes-_!Hz z&c>X**ZSY{aLk@7Z_f@40uo^%0rSF}FV3KsvtOMq^_Z1K3bOXB0>>4|vOoGFL-enC z>}G2z;r9QO9cM$WGZSAIde_p)Ohh4KseLaYY3lj+zf}pzQ8mWYdv0JY3RirrC0)Ti zSsSaAb6!lOx-8-Cf`adDsW;Og+a`SY=(kS|KZ5uFln7*U=9XZaTNTMmG}B~UC*gN@ z@Fv=RZy&e`D`AV8+yNGjc@7eKG}iObkAKQ7B{if><%B=XzsLZy%1I_da-i?TS}wo>54Nx!iI?`Shkt&jnX5_cSmUSv{%M5GK?Y zjCVS*2q){V1adxEU;SN>uSy7nu=S4P1o2AW33|z|5GCIuGGS5e*cWN z{U`QbCN9S|9lb-OJ$2tlqL&YsL5cXswa3#SL z^TL!p?C)5pr}+5j1Yb~XRsXrb(qLuxP+$w+=J1PXOV`7q4;uYwM{(Uqn#3u^R&v<< zd#S0KeNSJt*78sB$RL0Iy-eY!=WUur*Y6*c3*Eg-DT4G{)YS-f3dA>*g+2WKMb>%< zxc|ytpb``rNf7{|%@m^5LV%QQtzPCHsGYY?vC7!~$3wcDRa$VxGF|ahvOziYv!R0` zj043G_Ez8rXd>61zB22e_gCQx{eJB$Hi2pqQ=!udH~D#oyx=F+cd%bya?cL>`HARs zP+I&XT1&kyNxfG2V__soC*Kb-I&O7-pBd>BxGLBxvqPq@P_a9)p;P<&@}IlhN^KX# zt@5avn8PO?1~X-vnW9Xc!x(53r$! z-R3H68w`;sfZK`A_b76>+!1sdS<#jZJ~Z<&J@xbrB_*Aj4_P;Ym5)1{7snRvqcZ7~ zpgjc8Tyb6(sHwINc&dOgo$I~ml&b2A@=%#-wM_rur^V;r?W}#B37{`J8AC2l-b(mx z{pcUhsF-vjFF@Ex2=CQmBVg`+?9gT{&ep`$ZC`VZ6_hw3jqGh1QsXs6oVax~J1Z+qHro+~^@Rau#P)%tcsPuTGH#Vx+91MOz1+j_}I zkdd^3^E?h3*<&3^jRA9)bl^-K>#F%f*no?jqv72QlhkF%LM`m(>fYiO+vUq(=SHek zGQo3%n5LJ-0_8*OCe52oolPZ-E6MdRn#p^5%=@61J{g_OWD!7}s-C=e^J?hYK?j8Q z;pe{LouC>&YU;qUqt1HjOolE>o>NeN6iA9!nFO0W!LN@%9D-hM^AZM#6VlOJyMcm2 z6YD5e<|B}6W((!KXIh5&p3+y`t`Z}L7SaxS&%D`+d55-r`Zpu=kX$3AhnblbTIrChq10>1hY;LFn)y6q!)6MgMk+_k(kqz~Mgngxa%&DZ-pl0Pl zq!aN|`LI@P`tES(7L0%1!0t-7oiA40I*e#)+eewTtwHD`_&_h|!=%SmH;+uTWGY1u z%HfS&fwI_xRFnGW1!K{fRV#g2q}>rD^Dl*u^-TKkHY z_4*pm)ibscjgl92z@irrk&?8kJO;3gs)GRM4|xR`xl_{K_l~E8ejZBbMXP^w@uS_< zL`_n@{(xR8G{_t>>d?gG?|c|rp4h9~*llx2`02f!ajllryvCm91cSb#k!e)3q{)9g z(KqKKbp6(wo1FMGNFTziqjcS-Fo%b|Gf1tsyhd#5Hnx8jK$wp*?`2FF;d((d_dNh> zmT3aO{)p~ln^tRYbCyxEtl3GwVMHU$71g}yuv_g-kBb-f5G}}9w76Vsuone& zoMDQ}5zcPIzCtV1<7daQ0Vfzf&m^rkDeLpo{K)N|BMWe$L5&WKE@)~jc*3?%eHf=} zW!>*74$JG|)2XSM7@%*aNu@Y-j?``X z30oDmZChC*p${fO#S1BQ{bL`MURFoZWEM*Qe|+xe;M;SX4TQ=Zsc z)~!@f%K?8d*qSF? zCj2=NSE0@F*a5RJlRXJQM8*Rk`UW9{J+2Eb2sa!E^pj+{@2UiW^~iisQ&G#mwVvck zDq%!UB)~wtvFk)sLL6EqPu^7i4>h=tUWK6iqBplwdnwTTkcypUyk6U1-OzpI@Q}Z{ z0IZac6)Qa7p6%!80E8E)71~$ic;_x!0HpEu*zHwg=ssktC=iwYz3Gvnb!z|@v`&xH z6M`huo2Ad_-Y8+IIekxHa}Kpo!*?_^Nk|5(r?uPZ3g#3_&vq|Tx_#OE4@|AKvXN^L05dzn5QP-6X*nMjt3NW zvV&J0x7UHRDsB{G*~sY~S`;Yv+8w3V5s|tkS`phEFNiB+K1v1X6Q=w1`@=m?)z}Vl zqrA~uVA+;{<+MkP*_Iz-8zP$dmpkOp6{YzkHGJojWr(#(GwpiWN$>Gjuj4*B78iEH zq>z@gq={YFWDiyLrz8JS3*35QKF#LYT)(BqHJjUEuI-*Pqq5MqDA0)shIM242}xtPLq4ZeKfoIx1yy+u7WGx&jJ$TPxrgZ&ua)tmu8 zaGCX^WDU@zAKadr@87>rST<$at2Sg&i@eGbp9gLie?Gc+xzX2x_geWVARV`s#}_9e z>K{7@Cj-~}UX{VV;*{c%SJ9@;L&7O;$Ws=N(u)&|}o3Hek#OqHYi?xG;VNfMc4x*XctShhm zs2)bfT3K-&$?7#6Ub_VCWo4HuSaP50y%AaappAIOfh2CXe~)oUoZ43AIgxWB-V6By zbh%A;^J=As)gBx$={Gpp48E5=zP*ULN=m=YLQJWsnZ;3cZasv3+qj`Jo$}|$zIzWS z38~}PIhU%2OBlkaus(Qto{q^IHt;^!?i?VLb2UJb6K-~Tx4k-9X*dDog=NDHX1rM9H>CrN)BtuUX>T`G31&_A&E zC7SB*Ssa;wSd1@}H=WqO@5e0Tn0~gOynbNe_@T9oMNApET;1UsBv+YI4aOVgCBH1N zhYian#r@cM{s4S8y~-DuW8dGGPM$kUR6O@&XfW7;Hj&mjOJV4?TQab9R@lm#I3*S3 zTPvdX)p63)YlyNG7cP8 z%&WWirIT)c;|#7GfonqM#5@`XoL}Y|qDG9Z$IWX6j}~nK>waFdUzjY z{_YzFi-Fw?-G%2%1RBW-MEkTiORHhb_%YL_P#b=Uo6>i<2;1Ji*o#JTX>CR`DDx*1 zj8XuN{5C!enz5h45-G(}S4cXN0mHtp&wb~2LOAMh8?=j~2p5OGjcSHP-45G7xgXT( qV{}IFSI@adP+ysZlE0is=ULs9\n" "Language-Team: \n" "Language: uk\n" @@ -392,37 +392,58 @@ msgstr "Приховання Даних" #: ../../src/oop/intro.txt:241 msgid "" "Many programming languages has *access modifiers* implemented. The Python " -"has also, but actually no. It's implemented as a convention-level. All " -"class's members starting with underscore are considered to be **protected** " -"members and should not be accessible outside the class instance; on the " -"other hand members starting with two underscores are considered to be " -"**private** members and shouldn't be accessible outside the class instance " -"as well." +"has also." msgstr "" -"Багато мов програмування мають реалізовані модифікатори доступу. Python " -"також має, але насправді ні. Він реалізований на рівні конвенції. Усі члени " -"класу, які починаються з підкреслення, вважаються захищеними членами та не " -"повинні бути доступними за межами екземпляр класу; з іншого боку, члени, які " -"починаються з двох символів підкреслення, вважаються приватними членами та " -"не повинні бути доступними за межами екземпляра класу." +"У багатьох мовах програмування реалізовані *модифікатори доступу*. Python " +"також має." -#: ../../src/oop/intro.txt:275 +#: ../../src/oop/intro.txt:247 msgid "" -"With the implementation above there are **public** attributes, but you can " -"still access data outside the class, but you definitely shouldn't." +"\"Private\" instance variables that cannot be accessed except from inside an " +"object don't exist in Python :cite:`docs-python:private-variables`. It's " +"implemented as a convention-level." msgstr "" -"З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " -"можете отримати доступ до даних за межами класу, але точно не повинні." +"\"Приватні\" змінні екземплярів, до яких можна отримати доступ лише " +"зсередини об’єкта, не існують у Python :cite:`docs-python:private-" +"variables`. Це реалізовано на рівні домовленності." -#: ../../src/oop/intro.txt:290 +#: ../../src/oop/intro.txt:251 +msgid "" +"A name prefixed with an underscore (e.g. ``_spam``) should be treated as a " +"non-public part of the API (whether it is a function, a method or a data " +"member). These should not be used outside the class itself and can be " +"changed without notice." +msgstr "" +"Ім’я з префіксом підкреслення (наприклад, ``_spam``) слід розглядати як " +"закриту частину API (незалежно від того, чи це функція, метод або елемент " +"даних). Вони не повинні використовуватися поза межами самого класу та можуть " +"бути змінені без попередження." + +#: ../../src/oop/intro.txt:256 +msgid "" +"Since there is a valid use case for class-private members (namely to avoid " +"name clashes of names with names defined by subclasses), there is limited " +"support for such a mechanism, called *name mangling*. Any identifier with at " +"least two leading underscore (e.g. ``__spam``) is textually replaced with " +"``_classname__spam``, where ``_classname`` is the current class name with " +"leading underscore stripped." +msgstr "" +"Оскільки існує дійсний варіант використання для приватних членів класу (а " +"саме, щоб уникнути зіткнень імен з іменами, визначеними підкласами), існує " +"обмежена підтримка такого механізму, що називається *викривлення імен*. Будь-" +"який ідентифікатор із принаймні двома символами підкреслення на початку " +"(наприклад, ``__spam``) текстово замінюється на ``_classname__spam``, де " +"``_classname`` є поточною назвою класу з видаленням підкреслення на початку." + +#: ../../src/oop/intro.txt:295 msgid "Few Words about Inheritance" msgstr "Кілька Слів про Наслідування" -#: ../../src/oop/intro.txt:292 +#: ../../src/oop/intro.txt:297 msgid "Just in two words. This topic is discovered in the future articles." msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." -#: ../../src/oop/intro.txt:294 +#: ../../src/oop/intro.txt:299 msgid "" "You can derive your classes from a super class. Derived classes are called " "*sub classes* and the class used to inherit from is called *super class*. " @@ -434,15 +455,15 @@ msgstr "" "*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " "вони не є поширеними ( це особиста думка автора)." -#: ../../src/oop/intro.txt:299 +#: ../../src/oop/intro.txt:304 msgid "Just put a super class in parenthesis two inherit from it:" msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" -#: ../../src/oop/intro.txt:311 +#: ../../src/oop/intro.txt:316 msgid "Few Words about Polymorphism" msgstr "Кілька Слів про Поліморфізм" -#: ../../src/oop/intro.txt:313 +#: ../../src/oop/intro.txt:318 msgid "" "You've already use this. The most simple explanation is **addition " "operator**. For different types of data it would produce different types of " @@ -451,7 +472,7 @@ msgstr "" "Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " "Для різних типів даних він створюватиме різні типи виводу:" -#: ../../src/oop/intro.txt:321 +#: ../../src/oop/intro.txt:326 msgid "" "For example you may have various classes inherited from a base class, that " "provides a common interface, but each derived class may implement the method " @@ -468,3 +489,27 @@ msgstr "Патерни Проектування" #: ../../src/oop/solid.txt:3 msgid "SOLID Principles" msgstr "Принципи SOLID" + +#~ msgid "" +#~ "Many programming languages has *access modifiers* implemented. The Python " +#~ "has also, but actually no. It's implemented as a convention-level. All " +#~ "class's members starting with underscore are considered to be " +#~ "**protected** members and should not be accessible outside the class " +#~ "instance; on the other hand members starting with two underscores are " +#~ "considered to be **private** members and shouldn't be accessible outside " +#~ "the class instance as well." +#~ msgstr "" +#~ "Багато мов програмування мають реалізовані модифікатори доступу. Python " +#~ "також має, але насправді ні. Він реалізований на рівні конвенції. Усі " +#~ "члени класу, які починаються з підкреслення, вважаються захищеними " +#~ "членами та не повинні бути доступними за межами екземпляр класу; з іншого " +#~ "боку, члени, які починаються з двох символів підкреслення, вважаються " +#~ "приватними членами та не повинні бути доступними за межами екземпляра " +#~ "класу." + +#~ msgid "" +#~ "With the implementation above there are **public** attributes, but you " +#~ "can still access data outside the class, but you definitely shouldn't." +#~ msgstr "" +#~ "З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " +#~ "можете отримати доступ до даних за межами класу, але точно не повинні." diff --git a/src/oop/intro.txt b/src/oop/intro.txt index e45e7b8d3..fc2f9569e 100644 --- a/src/oop/intro.txt +++ b/src/oop/intro.txt @@ -239,52 +239,57 @@ Data Hiding =========== Many programming languages has *access modifiers* implemented. The Python has -also, but actually no. It's implemented as a convention-level. All class's -members starting with underscore are considered to be **protected** members -and should not be accessible outside the class instance; on the other hand -members starting with two underscores are considered to be **private** members -and shouldn't be accessible outside the class instance as well. +also. + +.. image:: /../assets/img/wy_ban.jpg + :align: center + +"Private" instance variables that cannot be accessed except from inside an +object don't exist in Python :cite:`docs-python:private-variables`. It's +implemented as a convention-level. + +A name prefixed with an underscore (e.g. ``_spam``) should be treated as +a non-public part of the API (whether it is a function, a method or a data +member). These should not be used outside the class itself and can be changed +without notice. + +Since there is a valid use case for class-private members (namely to avoid name +clashes of names with names defined by subclasses), there is limited support +for such a mechanism, called *name mangling*. Any identifier with at least two +leading underscore (e.g. ``__spam``) is textually replaced with +``_classname__spam``, where ``_classname`` is the current class name with +leading underscore stripped. .. code-block:: python class Employee: - """Employee class implementation""" + """Employee superclass example""" - def __init__(self, salary: float, hours: int = None) -> None: - """Initialize an employee instance""" - - self.__salary = salary - self._hours = hours + first_name: str = "" + last_name: str = "" - def report_hours(self, hours: int) -> None: - """Report working hours""" + _rate: int = 0 + __tax: float = 0.18 - # some validation stuff goes here - self._hours += hours + def _get_amount(self, hours: int) -> int: + return self._rate * hours - def change_salary(salary: float) -> None: - """Change salary size""" + def _get_tax(self, amount: int) -> int: + return int(round(self.__tax * amount, 0)) - self.__salary = salary + def get_balance(self, hours: int) -> int: + amount = self._get_amount(hours) + tax = self._get_tax(amount) - def get_payment(self) -> float: - """Return a payment size""" + return amount - tax - return round(self.__salary * self._hours, 2) + def set_rate(self, rate: int) -> None: + self._rate = rate -With the implementation above there are **public** attributes, but you can -still access data outside the class, but you definitely shouldn't. -.. code-block:: python + class Employee10PercentTax(Employee): + _Employee__tax = 0.10 - employee = Employee(100_500) - # you're able to make changes to protected member, but this code smells - # use dedicated method `report_hours` instead - employee._hours = 100 - # accessing Employee.__salary attribute will raise an exception - # the interpreter will add _className before each private member - # but you know - `change_salary` method is that you need - employee._Employee__salary Few Words about Inheritance =========================== diff --git a/src/refs.bib b/src/refs.bib index 468c010da..943d60b67 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -73,6 +73,11 @@ @misc{docs-python:stdtypes } @misc{docs-python:errors, - title = "{Errors and Exceptions}", + title = "{Python Documentation: Errors and Exceptions}", url = {https://docs.python.org/3.11/tutorial/errors.html}, -} \ No newline at end of file +} + +@misc{docs-python:private-variables, + title = "{Python Documentation: Private Variables}", + url = {https://docs.python.org/3/tutorial/classes.html?highlight=private#private-variables}, +} From 610caad760daf08707ea4e181e0e2df05bea4d5c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 12 Apr 2023 14:24:13 +0300 Subject: [PATCH 306/689] Updated translation for "wkt" --- problem-sets | 2 +- src/_locales/ua/LC_MESSAGES/appx.po | 1169 +++++++++++++-------------- 2 files changed, 550 insertions(+), 621 deletions(-) diff --git a/problem-sets b/problem-sets index 63d3c3e36..8864d69c0 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 63d3c3e362420dd3ed3190dd47fd775accab2fbb +Subproject commit 8864d69c093a8a5e4ccee1b847253342905832a0 diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index d39303e45..a0945f508 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -8,17 +8,18 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 02:01+0300\n" -"PO-Revision-Date: 2023-04-10 17:59+0300\n" +"POT-Creation-Date: 2023-04-12 14:00+0300\n" +"PO-Revision-Date: 2023-04-12 14:22+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: ua \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" #: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" @@ -26,33 +27,32 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"As a developer you were asked to create a simple blog site. The goal is " -"to create a place on the Internet where users can share their stories to " -"public." +"As a developer you were asked to create a simple blog site. The goal is to " +"create a place on the Internet where users can share their stories to public." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - " -"створити місце в Інтернеті, де користувачі зможуть ділитися своїми " -"історіями з громадськістю." +"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " +"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " +"громадськістю." #: ../../blog/docs/spec.rst:16 msgid "" -"This document applies requirements for the entire project step-by-step. " -"You will start from creating the appropriate URL dispatcher and " -"connecting a PostgreSQL database to store the data and will finish with " -"implementing REST API for the blog." +"This document applies requirements for the entire project step-by-step. You " +"will start from creating the appropriate URL dispatcher and connecting a " +"PostgreSQL database to store the data and will finish with implementing REST " +"API for the blog." msgstr "" "Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " -"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до" -" бази даних PostgreSQL для зберігання даних і закінчите впровадженням " -"REST API для блог." +"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " +"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " +"API для блог." #: ../../blog/docs/spec.rst:21 msgid "" -"There are some boiler plates, that may be useful in your future work, but" -" you aren’t forced to use them. It’s on your choice." +"There are some boiler plates, that may be useful in your future work, but " +"you aren’t forced to use them. It’s on your choice." msgstr "" -"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, " -"але ви не змушені їх використовувати. Це на ваш вибір." +"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " +"ви не змушені їх використовувати. Це на ваш вибір." #: ../../blog/docs/spec.rst:24 msgid "`Starter template`_" @@ -68,29 +68,29 @@ msgstr "Завдання: Site views" #: ../../blog/docs/spec.rst:30 msgid "" -"It’s ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It’s ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " -"хочете, щоб повернути у відповіді HTTP." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " +"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " +"щоб повернути у відповіді HTTP." #: ../../blog/docs/spec.rst:34 msgid "" -"``/blogs/``: A site’s homepage. This will contain a list of blogs " -"available via the django site." +"``/blogs/``: A site’s homepage. This will contain a list of blogs available " +"via the django site." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " -"доступних на сайті django." +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " +"на сайті django." #: ../../blog/docs/spec.rst:36 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції " -"сайту django." +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." #: ../../blog/docs/spec.rst:38 msgid "``/``: same as ``/blogs/``" @@ -98,21 +98,20 @@ msgstr "``/``: те ж саме ``/blogs/``" #: ../../blog/docs/spec.rst:39 msgid "" -"``//``: A single blog post detail view. The URL contains " -"dynamic part in it. This will be used to fetch a single blogpost from the" -" database." +"``//``: A single blog post detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single blogpost from the database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. " -"URL-адреса містить динамічну частину. Це буде використано для отримання " -"однієї публікації блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " +"містить динамічну частину. Це буде використано для отримання однієї " +"публікації блогу з бази даних." #: ../../blog/docs/spec.rst:42 msgid "" "``//comment/``: This view will be used to add comments to a " "blogpost." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання" -" коментарів до публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання " +"коментарів до публікації блогу." #: ../../blog/docs/spec.rst:44 msgid "``/create/``: A post creation form." @@ -120,11 +119,13 @@ msgstr "``/create/``: форма створення публікації." #: ../../blog/docs/spec.rst:45 msgid "``//update/``: A view to update an existing post data." -msgstr "``//update/``: перегляд для оновлення наявних даних публікації." +msgstr "" +"``//update/``: перегляд для оновлення наявних даних публікації." #: ../../blog/docs/spec.rst:46 msgid "``//delete/``: A view to confirm post deletion." -msgstr "``//delete/``: перегляд для підтвердження видалення публікації." +msgstr "" +"``//delete/``: перегляд для підтвердження видалення публікації." #: ../../blog/docs/spec.rst:47 msgid "``/profile//``: A site user’s personal page." @@ -132,11 +133,11 @@ msgstr "``/profile//``: Персональна сторінка к #: ../../blog/docs/spec.rst:48 msgid "" -"``/change_password/``: This route will be used to change users’ " -"credential data." +"``/change_password/``: This route will be used to change users’ credential " +"data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни " -"облікових даних користувачів." +"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " +"даних користувачів." #: ../../blog/docs/spec.rst:50 msgid "``/register/``: This view contains a user registration form." @@ -148,8 +149,7 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../blog/docs/spec.rst:52 msgid "" -"``/logout/``: Logout page. This view should redirect user back to " -"homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -171,13 +171,13 @@ msgid "" "``post.slug`` value should be autogenerated when a record is created or " "updated and follow the pattern:" msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або" -" оновлення запису та слідувати шаблону:" +"Значення ``post.slug`` має автоматично генеруватися під час створення або " +"оновлення запису та слідувати шаблону:" #: ../../blog/docs/spec.rst:69 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value" -" should be ``True`` by default." +"User preferred topics should be marked with a ``notify`` flag. This value " +"should be ``True`` by default." msgstr "" "Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " "замовчуванням це значення має бути ``True``." @@ -188,17 +188,16 @@ msgstr "Завдання: ORM" #: ../../blog/docs/spec.rst:104 msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project’s database." +"Update existing views to represent entities that are actually stored inside " +"the project’s database." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" -" в базі даних проекту." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " +"базі даних проекту." #: ../../blog/docs/spec.rst:107 msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." msgstr "" -"``/blogs/`` або ``/``: має представляти список існуючих публікацій у " -"блозі." +"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." #: ../../blog/docs/spec.rst:108 msgid "``//``: should represent a single existing blogpost." @@ -206,8 +205,8 @@ msgstr "``//``: має представляти одну наявну #: ../../blog/docs/spec.rst:109 msgid "" -"``/profile//``: should contain information about user and a" -" list of posts authored by this user." +"``/profile//``: should contain information about user and a " +"list of posts authored by this user." msgstr "" "``/profile//``: має містити інформацію про користувача та " "список публікацій, автором яких є цей користувач." @@ -218,8 +217,8 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо " -"сутність не вдалося отримати." +"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " +"не вдалося отримати." #: ../../blog/docs/spec.rst:116 msgid "Challenge: Templates" @@ -227,13 +226,13 @@ msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.rst:118 msgid "" -"It’s time to work with data representations. You’re to add HTML template " -"to the blog site project. Keep templates together with appropriate " +"It’s time to work with data representations. You’re to add HTML template to " +"the blog site project. Keep templates together with appropriate " "applications, we don’t need mess in project files." msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати " -"HTML-шаблон до проекту сайту блогу. Зберігайте шаблони разом із " -"відповідними додатками, нам не потрібен безлад у файлах проекту." +"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" +"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " +"додатками, нам не потрібен безлад у файлах проекту." #: ../../blog/docs/spec.rst:122 msgid "Application-level templates should be extended from the base one." @@ -241,19 +240,19 @@ msgstr "Шаблони прикладного рівня повинні бути #: ../../blog/docs/spec.rst:123 msgid "" -"Each page should contain a navbar at the top. Navbar will contain " -"permalinks to the home and about pages." +"Each page should contain a navbar at the top. Navbar will contain permalinks " +"to the home and about pages." msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна " -"панель міститиме постійні посилання на домашню сторінку та сторінку про." +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " +"міститиме постійні посилання на домашню сторінку та сторінку про." #: ../../blog/docs/spec.rst:125 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be " -"visible in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " -"бути видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." #: ../../blog/docs/spec.rst:127 msgid "" @@ -265,25 +264,23 @@ msgstr "" #: ../../blog/docs/spec.rst:129 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.rst:131 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за " -"останній рік." +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../blog/docs/spec.rst:133 msgid "" -"For the ``post_list.html`` each post entity should provide the " -"information:" -msgstr "Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" +"For the ``post_list.html`` each post entity should provide the information:" +msgstr "" +"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" #: ../../blog/docs/spec.rst:136 msgid "title (each word should be capitalized)" @@ -308,39 +305,41 @@ msgstr "кількість коментарів" #: ../../blog/docs/spec.rst:142 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на " -"відповідну публікацію." +"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " +"публікацію." #: ../../blog/docs/spec.rst:144 msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -msgstr "Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +msgstr "" +"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." #: ../../blog/docs/spec.rst:145 msgid "Detail view should contain a list of post related comments." -msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "" +"Подання деталей має містити список коментарів, пов'язаних із публікацією." #: ../../blog/docs/spec.rst:146 msgid "" "Auth views should use ``register.html`` and ``login.html`` with " "corresponding forms." msgstr "" -"Подання авторизації повинні використовувати ``register.html`` і " -"``login.html`` з відповідними формами." +"Подання авторизації повинні використовувати ``register.html`` і ``login." +"html`` з відповідними формами." #: ../../blog/docs/spec.rst:149 msgid "" -"For now, it’s ok to use admin as “test user”. Authentication system will " -"be implemented in the future challenges. ``user`` object is available (by" -" default) in any template context. To test anonymous access you can use " +"For now, it’s ok to use admin as “test user”. Authentication system will be " +"implemented in the future challenges. ``user`` object is available (by " +"default) in any template context. To test anonymous access you can use " "``user.is_authenticated``, which returns ``False`` for non-authenticated " "users." msgstr "" "Наразі можна використовувати адміністратора як «тестового користувача». " "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону." -" Щоб перевірити анонімний доступ, ви можете використовувати " -"``user.is_authenticated``, який повертає ``False`` для неавтентифікованих" -" користувачів." +"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " +"Щоб перевірити анонімний доступ, ви можете використовувати ``user." +"is_authenticated``, який повертає ``False`` для неавтентифікованих " +"користувачів." #: ../../blog/docs/spec.rst:156 msgid "Challenge: Auth forms" @@ -348,7 +347,8 @@ msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.rst:158 msgid "Create form for new users registration with required fields:" -msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.rst:160 msgid "``username``" @@ -394,8 +394,8 @@ msgstr "Створіть форму для роботи з моделлю доп #: ../../blog/docs/spec.rst:174 msgid "" -"Create a form to gather a comment from a user. Form should be used within" -" a \"post detail\" view." +"Create a form to gather a comment from a user. Form should be used within a " +"\"post detail\" view." msgstr "" "Створіть форму для збору коментарів від користувача. Форму слід " "використовувати в перегляді \"подробиць публікації\"." @@ -407,8 +407,8 @@ msgstr "Форму слід використовувати для перегля #: ../../blog/docs/spec.rst:178 msgid "It’s ok to use a *pre-defined* user as a post’s author for now." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як " -"автора публікації." +"Наразі можна використовувати *попередньо визначеного* користувача як автора " +"публікації." #: ../../blog/docs/spec.rst:181 msgid "Challenge: Authentication" @@ -416,9 +416,9 @@ msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.rst:183 msgid "" -"``/register/``: Users should provide all required information about them:" -" desired username and email. Name data (both first and last) is optional." -" After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -430,33 +430,33 @@ msgstr "" #: ../../blog/docs/spec.rst:188 msgid "" -"``/login/``: Users should provide their credentials to login. In case " -"login is successful they should be redirected to their profile (if no " -"``?next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У " -"разі успішного входу вони повинні бути перенаправлені до свого профілю " -"(якщо немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." #: ../../blog/docs/spec.rst:191 msgid "" -"``/create/``: Only authenticated users should be able to visit this page." -" In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to post creation. Then a post is created, it should be authored " -"by the currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"post creation. Then a post is created, it should be authored by the " +"currently authenticated user." msgstr "" "``/create/``: лише автентифіковані користувачі повинні мати змогу " "відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до " -"перегляду входу, а після успішної автентифікації повернутися до створення" -" публікації. Потім створюється допис, автором якого має бути поточний " -"автентифікований користувач." +"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " +"входу, а після успішної автентифікації повернутися до створення публікації. " +"Потім створюється допис, автором якого має бути поточний автентифікований " +"користувач." #: ../../blog/docs/spec.rst:196 msgid "" -"``//comment``: Currently authenticated user should be " -"referenced as a comment’s author." +"``//comment``: Currently authenticated user should be referenced " +"as a comment’s author." msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." @@ -464,8 +464,7 @@ msgstr "" #: ../../blog/docs/spec.rst:198 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" -"Дописи можуть бути змінені або видалені лише їхніми авторами (без " -"винятків)." +"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." #: ../../blog/docs/spec.rst:202 msgid "Challenge: Class-Based Views" @@ -481,7 +480,8 @@ msgstr "Існуюча функціональність не повинна бу #: ../../blog/docs/spec.rst:207 msgid "It’s ok to use Django built-in views for auth." -msgstr "Для автентифікації можна використовувати вбудовані представлення Django." +msgstr "" +"Для автентифікації можна використовувати вбудовані представлення Django." #: ../../blog/docs/spec.rst:210 msgid "Challenge: Serializers" @@ -509,12 +509,11 @@ msgstr "Завдання: API views" #: ../../blog/docs/spec.rst:221 msgid "" -"All blog-site functionality are to be reflected via REST API. It’s ok to " -"use *pre-defined* user as a post’s author for now." +"All blog-site functionality are to be reflected via REST API. It’s ok to use " +"*pre-defined* user as a post’s author for now." msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора " -"публікації." +"використовувати *попередньо визначеного* користувача як автора публікації." #: ../../blog/docs/spec.rst:225 msgid "Challenge: Authentication and Permissions" @@ -526,11 +525,13 @@ msgstr "Запровадити систему автентифікації REST. #: ../../blog/docs/spec.rst:228 msgid "Only account owner can change their account data." -msgstr "Лише власник облікового запису може змінити дані свого облікового запису." +msgstr "" +"Лише власник облікового запису може змінити дані свого облікового запису." #: ../../blog/docs/spec.rst:229 msgid "Only authenticated users can create posts and comments." -msgstr "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." +msgstr "" +"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." #: ../../blog/docs/spec.rst:230 msgid "Only authors can change their posts." @@ -542,17 +543,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:7 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово " -"підходить для простих речей, але ці інструменти швидко перетворюють " -"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" -" або навіть просто хорошого спеціального редактора коду робить кодування " -"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" @@ -560,25 +561,23 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -591,8 +590,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -624,25 +623,23 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " -"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " -"дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" -" загальної ціни на вказану кількість товару для покупки. Бажану кількість" -" буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -729,11 +726,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -745,9 +742,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " @@ -789,8 +786,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to " -"the cart." +"This method adds a product instance and corresponding quantity value to the " +"cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -802,8 +799,7 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці " -"продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -819,8 +815,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -829,16 +825,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -862,28 +858,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -894,7 +889,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -903,11 +899,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -923,27 +919,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість *protected*, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -951,9 +947,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -961,8 +957,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -972,29 +968,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1003,10 +1001,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " -"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " -": {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1018,17 +1015,16 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1036,17 +1032,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1054,19 +1050,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1082,7 +1078,8 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1099,15 +1096,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " -"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. " -"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " -"пріоритет зліва направо)." +"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1127,11 +1124,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" -"Прив’язка або вираз у дужках, відображення списку, відображення словника," -" відображення набору" +"Прив’язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1171,8 +1168,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1277,16 +1274,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1298,20 +1295,18 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:9 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." -msgstr "" -"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` " -"(по модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" -" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " -"*format* замінюються нулем або більше елементами *значень*. Якщо для " -"*format* потрібен один аргумент, *values* може бути одним некортежним " -"об’єктом." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об’єктом." #: ../../src/appx/printf.txt:16 msgid "The conversion flag characters are:" @@ -1347,11 +1342,9 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:25 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " -"обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:28 msgid "``' '``" @@ -1367,11 +1360,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:30 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " -"(перевизначає прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:34 msgid "The conversion types are:" @@ -1459,8 +1452,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:58 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -1503,7 +1496,8 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:71 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.md:1 @@ -1516,7 +1510,8 @@ msgstr "7zip" #: ../../src/appx/software_list.md:7 msgid "**7-Zip** is **free software** with **open source**." -msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.md:9 msgid "" @@ -1536,9 +1531,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.md:13 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -1563,15 +1558,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.md:24 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux " -"distribution](https://en.wikipedia.org/wiki/Linux_distribution) on " -"Windows and a DLL (cygwin1.dll) which provides substantial POSIX API " -"functionality." +"functionality similar to a [Linux distribution](https://en.wikipedia.org/" +"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " +"substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до [дистрибутива " -"Linux](https://en.wikipedia.org/wiki/Linux_distribution) у Windows та DLL" -" (cygwin1.dll), яка забезпечує значний POSIX Функціонал API." +"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" +"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.md:30 msgid "**Cygwin is not**:" @@ -1579,18 +1573,17 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.md:32 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " -"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " -"Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.md:34 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from " -"source* if you want to take advantage of Cygwin functionality." +"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " +"if you want to take advantage of Cygwin functionality." msgstr "" "спосіб чарівним чином зробити рідні програми Windows відомими " "функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " @@ -1611,10 +1604,10 @@ msgid "" "source) distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" -"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-" -"scm.com/about/free-and-open-source) розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від " -"малих до дуже великих." +"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." +"com/about/free-and-open-source) розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.md:47 msgid "https://git-scm.com/" @@ -1627,24 +1620,24 @@ msgstr "Docker" #: ../../src/appx/software_list.md:52 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" -" рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.md:54 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " -"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " -"розробки за допомогою інтегрованого конвеєра розробників і консолідації " -"компонентів програми. Активно використовувані мільйонами розробників у " -"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " -"простоту, гнучкість і вибір." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.md:60 msgid "https://www.docker.com/" @@ -1656,14 +1649,13 @@ msgstr "PostgreSQL[^cygwin-pkg]" #: ../../src/appx/software_list.md:65 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим " -"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" -" вона заслужила міцну репутацію надійності, надійності функцій і " -"продуктивності." +"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.md:69 msgid "https://www.postgresql.org/" @@ -1675,24 +1667,24 @@ msgstr "psql[^cygwin-pkg]" #: ../../src/appx/software_list.md:74 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" -" запиту. Крім того, введення може бути з файлу або з аргументів " -"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" -" функцій, подібних до оболонки, для полегшення написання сценаріїв і " -"автоматизації різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.md:80 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for `postgresql-client` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for `postgresql-client` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет `postgresql-client`." @@ -1707,19 +1699,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.md:88 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа " -"адміністрування та розробки з відкритим кодом для PostgreSQL, " -"найдосконалішої бази даних з відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.md:92 msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." +"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" +"інтерфейсу." #: ../../src/appx/software_list.md:94 msgid "https://pgadmin.org/" @@ -1731,20 +1723,17 @@ msgstr "SQLite[^cygwin-pkg]" #: ../../src/appx/software_list.md:99 msgid "" -"SQLite is a C-language library that implements a " -"[small](https://sqlite.org/footprint.html), " -"[fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-" -"reliability](https://sqlite.org/hirely.html), [full-" -"featured](https://sqlite.org/fullsql.html), SQL database engine." -msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує " -"[маленьку](https://sqlite.org/footprint.html), " -"[швидку](https://sqlite.org/fasterthanfs.html), [самодостатню]( " -"https://sqlite.org/selfcontained.html), [висока " -"надійність](https://sqlite.org/hirely.html), " -"[повнофункціональний](https://sqlite.org/fullsql.html) , двигун бази " -"даних SQL." +"SQLite is a C-language library that implements a [small](https://sqlite.org/" +"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" +"contained](https://sqlite.org/selfcontained.html), [high-reliability]" +"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." +"html), SQL database engine." +msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" +"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " +"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" +"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" +"fullsql.html) , двигун бази даних SQL." #: ../../src/appx/software_list.md:106 msgid "https://sqlite.org/" @@ -1755,49 +1744,44 @@ msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" #: ../../problem-sets/src/wtk/challenge.rst:3 -msgid "Wizards, Thiefs and Knights" -msgstr "" +msgid "Wizards, Thieves and Knights" +msgstr "Чарівники, Злодії та Рицарі" #: ../../problem-sets/src/wtk/challenge.rst:5 -#, fuzzy msgid "" -"\"Wizards, Thiefs and Knights\" (WTK) game is a \"Paper, Rock and " -"Scissors\" clone, but in a fantasy setting. It comes with a simple " -"command line interface where the use must type in his or her choice. The " -"enemy is controlled by the script. The player's goal is to gain as many " -"score points, as it possible." +"\"Wizards, Thieves and Knights\" (WTK) game is a \"Paper, Rock and " +"Scissors\" clone but in a fantasy setting. It comes with a simple command " +"line interface where the use must type in his or her choice. The enemy is " +"controlled by the script. The player's goal is to gain as many score points, " +"as it possible." msgstr "" -"Гра Warriors, robbers and wizards (WRW) є клоном \"Paper, Rock and " -"Scissors\", але у фентезійній обстановці. Вона постачається з простим " -"інтерфейсом командного рядка, де для використання потрібно вводити його " -"або її вибору. Ворог керується сценарієм. Мета гравця - отримати якомога " -"більше очок." +"Гра \"Чарівники, Злодії та Рицарі» (WTK) — це клон \"Камень, ножиці, " +"бумага\", але у фентезійному сеттингу. Вона має простий інтерфейс командного " +"рядка, де користувач повинен ввести свій вибір. Ворогом керує скрипт. Мета " +"гравця - набрати якомога більше очок." #: ../../problem-sets/src/wtk/challenge.rst:12 -#, fuzzy msgid "Code organization" msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:14 msgid "Use separate modules to maintain your code base. For example:" -msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:26 -#, fuzzy msgid "General playground description" -msgstr "Загальний опис ігрового майданчика" +msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:28 msgid "" -"The game process is divided into rounds. Each round consists of " -"**attack** and **defence** stages. Rounds are repeated, until player is " -"defeated." +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." #: ../../problem-sets/src/wtk/challenge.rst:32 -#, fuzzy msgid "Fight rules" msgstr "Правила боротьби" @@ -1806,35 +1790,29 @@ msgid "It's simple..." msgstr "Це просто..." #: ../../problem-sets/src/wtk/challenge.rst:36 -#, fuzzy -msgid "**Knight** beats **Thief**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**Wizard** beats **Knight**" +msgstr "**Чарівник** перемагає **Рицаря**" #: ../../problem-sets/src/wtk/challenge.rst:37 -#, fuzzy msgid "**Thief** beats **Wizard**" -msgstr "**Розбійник** перемагає **Чарівника**" +msgstr "**Злодій** перемагає **Чарівника**" #: ../../problem-sets/src/wtk/challenge.rst:38 -#, fuzzy -msgid "**Wizard** beats **Knight**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**Knight** beats **Thief**" +msgstr "**Рицар** перемагає **Злодія**" #: ../../problem-sets/src/wtk/challenge.rst:41 -#, fuzzy msgid "Attack stage" msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:43 -#, fuzzy msgid "" -"Player selects the choice to attack from **knight**, **thief** or " -"**wizard**, enemy selects the choice for defence from the same options by" -" random. If the attack is successful:" +"Player selects the choice to attack from **wizard**, **thief** or " +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для атаки воїна, розбійника чи чарівника, ворог " -"обирає вибір для захисту з тих самих варіантів за допомогою\" " -"\"довільного. Якщо атака успішна:" +"Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " +"обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:47 msgid "enemy health is decreased" @@ -1861,20 +1839,17 @@ msgid "next defence stage is skipped, and player attacks again" msgstr "наступний етап захисту пропущено, і гравець атакує знову" #: ../../problem-sets/src/wtk/challenge.rst:57 -#, fuzzy msgid "Defence stage" msgstr "Стадія захисту" #: ../../problem-sets/src/wtk/challenge.rst:59 -#, fuzzy msgid "" -"Player selects the choice to defend from **knight**, **thief** or " -"**wizard**, enemy selects the choice to attack from the same options by " +"Player selects the choice to defend from **wizard**, **thief** or " +"**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець обирає вибір для захисту від воїна, грабіжника чи \" \"чарівника," -" ворог обирає вибір для атаки з тих же параметрів випадковим чином. Якщо " -"атака успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:63 msgid "player health is decreased" @@ -1897,46 +1872,40 @@ msgid "Exceptions" msgstr "Винятки" #: ../../problem-sets/src/wtk/challenge.rst:75 -#, fuzzy msgid "Enemy down" -msgstr "Enemy Down" +msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:77 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom " -"exception ``EnemyDown`` should be used to track these cases. Exception " -"should provide the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" -" повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 -#, fuzzy msgid "Raised when an enemy is defeated" -msgstr "Якщо ворог переможений:" +msgstr "Виникає, коли ворог переможений" #: ../../problem-sets/src/wtk/challenge.rst:84 -#, fuzzy msgid "Game over" -msgstr "Game Over" +msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:86 msgid "" -"This is an exceptional scenario when player is defeated. A custom " -"exception ``GameOver`` should be used to track these cases. Exception " -"should provide the details on the player's instance, especially its score" -" points." +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати " -"бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." #: of wtk.exceptions.GameOver:1 -#, fuzzy msgid "Raised when a player is defeated" -msgstr "Якщо гравець переможений:" +msgstr "Виникає, коли гравця переможено" #: ../../problem-sets/src/wtk/challenge.rst:94 msgid "Models" @@ -1947,263 +1916,244 @@ msgid "Enemy" msgstr "Ворог" #: of wtk.models.Enemy:1 -#, fuzzy msgid "Enemy model" -msgstr "Enemy Down" +msgstr "Модель супротивника" #: of wtk.models.Enemy:3 msgid "Represents the playing enemy-bot." -msgstr "" +msgstr "Представляє граючого ворога-бота." #: of wtk.models.Enemy:5 msgid "enemy's level value" -msgstr "" +msgstr "значення рівня противника" #: of wtk.models.Enemy:7 msgid "enemy's instance health points" -msgstr "" +msgstr "очки здоров'я ворога" #: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 msgid "Initialize instance" -msgstr "" +msgstr "Ініціалізувати екземпляр" #: of wtk.models.Enemy.__init__:3 msgid "an enemy's level indicator" -msgstr "" +msgstr "індикатор рівня противника" #: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 -#, fuzzy msgid "Decrease health points" -msgstr "``decrease_health``" +msgstr "Зменшує очоки здоров'я" #: of wtk.models.Enemy.decrease_health:3 -#, fuzzy msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стає " -"меншим за 1 (один), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" -msgstr "" +msgstr "raise" #: of wtk.models.Enemy.decrease_health:6 -#, fuzzy msgid "EnemyDown" -msgstr "Enemy Down" +msgstr "EnemyDown" #: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 -#, fuzzy msgid "Return a random fight choice" -msgstr "Повернути випадковий вибір атаки з дійсних виборів." +msgstr "Повертає випадковий варіант для бою" #: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 msgid "Choices made by an enemy are random." -msgstr "" +msgstr "Вибори, зроблені супротивником, випадкові." #: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 #: wtk.models.Player.select_attack:7 wtk.models.Player.select_defence:7 msgid "a fight choice" -msgstr "" +msgstr "варіант для бою" #: ../../problem-sets/src/wtk/challenge.rst:103 msgid "You are free to implement other methods you like, if needed." -msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:106 msgid "Player" msgstr "Гравець" #: of wtk.models.Player:1 -#, fuzzy msgid "Player model" -msgstr "Гравець" +msgstr "Модель гравця" #: of wtk.models.Player:3 msgid "This model is controlled by the player." -msgstr "" +msgstr "Ця модель керується гравцем." #: of wtk.models.Player:5 -#, fuzzy msgid "player's name" -msgstr "Отримання імені гравця" +msgstr "ім'я гравця" #: of wtk.models.Player:7 -#, fuzzy msgid "player's instance health points" -msgstr "гравець отримує очки" +msgstr "очки здоров'я гравця" #: of wtk.models.Player:9 -#, fuzzy msgid "player's instance gained score points" -msgstr "гравець отримує очки" +msgstr "очки, зароблені гравцем" #: of wtk.models.Player.__init__:3 msgid "" -"This method performs player instance initialization. It set instance " -"name, initial score points value and health." +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." msgstr "" +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров’я." #: of wtk.models.Player.__init__:6 -#, fuzzy msgid "a player's name" -msgstr "Отримання імені гравця" +msgstr "ім'я гравця" #: of wtk.models.Player.attack:1 -#, fuzzy msgid "Attack an enemy" -msgstr "Стадія атаки" +msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance " -"as an argument. After that, it takes attack choice from the player model " -"and the defence choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease enemy " -"health, assign score points etc.). Based on fight result should print out" -" a message:" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі " -"гравця та вибір захисту з моделі противника. Після результату битви " -"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " -"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" -" \"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" #: of wtk.models.Player.attack:10 -#, fuzzy msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" -msgstr "``\"YOUR ATTACK IS SUCCESSFUL!\"``" +msgstr "\"YOUR ATTACK IS SUCCESSFUL!\"" #: of wtk.models.Player.attack:11 -#, fuzzy msgid "\"YOUR ATTACK IS FAILED!\"" -msgstr "``\"YOUR ATTACK IS FAILED!\"``" +msgstr "\"YOUR ATTACK IS FAILED!\"" #: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 -#, fuzzy msgid "\"IT'S A DRAW!\"" -msgstr "``IT'S A DRAW!\"``" +msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 -#, fuzzy msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." msgstr "" -"Метод зменшує значення очок здоров'я на 1 (один). Якщо це значення стане " -"менше 1 (один), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." #: of wtk.models.Player.decrease_health:6 -#, fuzzy msgid "GameOver" -msgstr "Game Over" +msgstr "GameOver" #: of wtk.models.Player.defence:1 msgid "Defend from an enemy's attack" -msgstr "" +msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance" -" as an argument. After that, it takes defence choice from the player " -"model and the attack choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease player " -"health). Based on fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та " -"вибір атаки від моделі ворога. Після результату бою необхідно виконати " -"операцію обчислення (зменшити здоров'я гравця). За результатами бою " -"повинно вийти повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" #: of wtk.models.Player.defence:10 -#, fuzzy msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" -msgstr "``\"YOUR DEFENCE IS SUCCESSFUL!\"``" +msgstr "\"YOUR DEFENCE IS SUCCESSFUL!\"" #: of wtk.models.Player.defence:11 -#, fuzzy msgid "\"YOUR DEFENCE IS FAILED!\"" -msgstr "``\"YOUR DEFENCE IS FAILED!\"``" +msgstr "\"YOUR DEFENCE IS FAILED!\"" #: of wtk.models.Player.fight:1 msgid "Fight result calculation interface" -msgstr "" +msgstr "Інтерфейс для вирахування результатів двобою" #: of wtk.models.Player.fight:3 msgid "The method calculates the fight result based on the game rules:" -msgstr "" +msgstr "Метод розраховує результат бою за правилами гри:" #: of wtk.models.Player.fight:5 -#, fuzzy -msgid "**knight** beats **thief**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**wizard** beats **knight**" +msgstr "**чарівник** перемагає **рицаря**" #: of wtk.models.Player.fight:6 -#, fuzzy msgid "**thief** beats **wizard**" -msgstr "**Розбійник** перемагає **Чарівника**" +msgstr "**злодій** перемагає **чарівника**" #: of wtk.models.Player.fight:7 -#, fuzzy -msgid "**wizard** beats **knight**" -msgstr "**Чарівник** перемагає **Воїна**" +msgid "**knight** beats **thief**" +msgstr "**рицар** перемагає **злодія**" #: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 -#, fuzzy msgid "Return fight choice from the user's prompt" -msgstr "Повернути вибір бою, зроблений користувачем. Виконує перевірку вибору." +msgstr "Повертає варіант для поєдинку з вводу користувача" #: of wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 msgid "" "The player is asked to make their decision for the upcoming fight. The " "chosen value is validated and if it is invalid the question is repeated." msgstr "" +"Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " +"перевіряється, і якщо воно недійсне, запитання повторюється." #: ../../problem-sets/src/wtk/challenge.rst:115 msgid "Settings" msgstr "Налаштування" #: ../../problem-sets/src/wtk/challenge.rst:117 -#, fuzzy msgid "Settings module contains constants values for the game." -msgstr "" -"Модуль settings.py містить значення констант для гри (наприклад, " -"``INITIAL_PLAYER_HEALTH = 5``)." +msgstr "Модуль налаштувань містить значення констант для гри." #: ../../problem-sets/src/wtk/challenge.rst:119 msgid "For example," -msgstr "" +msgstr "Наприклад," #: ../../problem-sets/src/wtk/challenge.rst:123 msgid "Initial health meter value for a player instance" -msgstr "" +msgstr "Початкове значення індикатора стану здоров'я для екземпляру гравця" #: ../../problem-sets/src/wtk/challenge.rst msgid "type" -msgstr "" +msgstr "type" #: ../../problem-sets/src/wtk/challenge.rst:125 #: ../../problem-sets/src/wtk/challenge.rst:131 #: ../../problem-sets/src/wtk/challenge.rst:137 #: ../../problem-sets/src/wtk/challenge.rst:143 msgid "int" -msgstr "" +msgstr "int" #: ../../problem-sets/src/wtk/challenge.rst:129 msgid "Indicates the level to initialize the first enemy instance." -msgstr "" +msgstr "Вказує рівень для ініціалізації першого екземпляра ворога." #: ../../problem-sets/src/wtk/challenge.rst:135 msgid "Set the score value to assign when an attack is successful" msgstr "" +"Встановлює кількість балів, яку буде присвоєно, якщо атака буде успішною" #: ../../problem-sets/src/wtk/challenge.rst:141 msgid "Set the score value to assign when an enemy is defeated" msgstr "" +"Встановлює кількість балів, яку буде присвоєно, якщо ворог зазнає поразки" #: ../../problem-sets/src/wtk/challenge.rst:147 msgid "Engine" @@ -2237,18 +2187,18 @@ msgstr "" #: of wtk.engine.get_player_name:1 msgid "Return a player's name from the user prompt" -msgstr "" +msgstr "Повертає ім'я гравця з вводу користувача" #: of wtk.engine.get_player_name:3 msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." #: of wtk.engine.get_player_name:6 -#, fuzzy msgid "a player defined name" -msgstr "Якщо гравець переможений:" +msgstr "ім'я визначене гравцем" #: ../../problem-sets/src/wtk/challenge.rst:164 msgid "Play" @@ -2257,32 +2207,34 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:166 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated " -"- a new one should be initialized with level increased by 1 (one). This " -"case should be reported to the terminal. If a player is defeated - the " -"\"Game Over\" message should be reported to the terminal. " -"``KeyboardInterrupt`` should be handled as well - it's behavior is " -"similar to \"Game Over\" event, but \"game over\" message should be " -"omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " -"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " -"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " -"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " -"також слід обробити - це поведінка подібно до події \"Game Over\", але " -"повідомлення \"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" -msgstr "" +msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs " -"the game process in an endless loop. Once the player is defeated - it " -"stops the execution." +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." msgstr "" +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:179 msgid "Optional Enhancements" @@ -2291,8 +2243,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:181 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" -" записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Create game menu, for example: ::" @@ -2301,20 +2253,17 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:188 msgid "Store score table to the database instead of using text file." msgstr "" +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." #~ msgid "" -#~ "[Starter template](https://github.com/edu-python-" -#~ "course/django-template)" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" #~ msgstr "" -#~ "[Starter template](https://github.com/edu-python-" -#~ "course/django-template)" +#~ "[Starter template](https://github.com/edu-python-course/django-template)" #~ msgid "" -#~ "[Bootstrap templates](https://github.com/edu-python-" -#~ "course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" #~ msgstr "" -#~ "[Bootstrap templates](https://github.com/edu-python-" -#~ "course/blog-bootstrap)" +#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" #~ msgid "Code notes" #~ msgstr "Примітки до коду" @@ -2329,30 +2278,23 @@ msgstr "" #~ msgstr "Воїн перемагає розбійника" #~ msgid "" -#~ "Represents the playing enemy-bot. All" -#~ " choices made by this model are " -#~ "random. The model should implement " -#~ "methods:" +#~ "Represents the playing enemy-bot. All choices made by this model are " +#~ "random. The model should implement methods:" #~ msgstr "" -#~ "Представляє граючого ворожого бота. Усі " -#~ "вибори, зроблені цією моделлю, випадкові. " -#~ "Модель має реалізовувати методи:" +#~ "Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " +#~ "випадкові. Модель має реалізовувати методи:" #~ msgid "``__init__``" #~ msgstr "``__init__``" #~ msgid "" -#~ "Initialize enemy instance. Initializer should" -#~ " receive one argument of integer type" -#~ " - ``level: int``. Health points " -#~ "value should be set equal to level" -#~ " value." +#~ "Initialize enemy instance. Initializer should receive one argument of " +#~ "integer type - ``level: int``. Health points value should be set equal to " +#~ "level value." #~ msgstr "" -#~ "Ініціалізувати екземпляр противника. Ініціалізатор" -#~ " повинен отримати один аргумент цілого " -#~ "типу - ``level: int``. Значення очок " -#~ "здоров'я має бути встановлено рівним " -#~ "значенню рівня." +#~ "Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " +#~ "аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " +#~ "встановлено рівним значенню рівня." #~ msgid "``descrease_health``" #~ msgstr "``descrease_health``" @@ -2367,47 +2309,34 @@ msgstr "" #~ msgstr "Повернути випадковий вибір захисту з дійсних виборів." #~ msgid "" -#~ "This model is controlled by the " -#~ "user. It represents a playing user. " -#~ "All choices are controlled by the " -#~ "user. The model should implement " -#~ "methods:" +#~ "This model is controlled by the user. It represents a playing user. All " +#~ "choices are controlled by the user. The model should implement methods:" #~ msgstr "" -#~ "Цією моделлю керує користувач. Вона " -#~ "представляє гравця. Усі вибори контролює " -#~ "користувач. Модель має реалізовувати методи:" +#~ "Цією моделлю керує користувач. Вона представляє гравця. Усі вибори " +#~ "контролює користувач. Модель має реалізовувати методи:" #~ msgid "" -#~ "Initialize player instance. Initializer should" -#~ " receive player's name as an argument" -#~ " - ``name: str``. Health points are" -#~ " to be set from settings. Score " -#~ "points should be initialized with 0 " -#~ "(zero)." +#~ "Initialize player instance. Initializer should receive player's name as " +#~ "an argument - ``name: str``. Health points are to be set from settings. " +#~ "Score points should be initialized with 0 (zero)." #~ msgstr "" -#~ "Ініціалізувати екземпляр гравця. Ініціалізатор " -#~ "має отримати ім'я гравця як аргумент " -#~ "- ``ім'я: str``. Очки здоров'я повинні" -#~ " бути встановлені з налаштувань. Очки " -#~ "мають бути ініціалізовані 0 (нулем)." +#~ "Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця " +#~ "як аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " +#~ "налаштувань. Очки мають бути ініціалізовані 0 (нулем)." #~ msgid "``fight``" #~ msgstr "``fight``" #~ msgid "" -#~ "Static method to perform a fight. " -#~ "Takes two arguments representing attack " -#~ "and defence choices. Performs fight " -#~ "result calculation and return it back." +#~ "Static method to perform a fight. Takes two arguments representing attack " +#~ "and defence choices. Performs fight result calculation and return it back." #~ msgstr "" -#~ "Статичний метод для проведення бою. Бере" -#~ " два аргументи, що представляють атаку " -#~ "та вибір захисту. Виконує обчислення " -#~ "результату бою та повертає його назад." +#~ "Статичний метод для проведення бою. Бере два аргументи, що представляють " +#~ "атаку та вибір захисту. Виконує обчислення результату бою та повертає " +#~ "його назад." #~ msgid "``attack``" #~ msgstr "``attack``" #~ msgid "``defence``" #~ msgstr "``defence``" - From fca7dc0da932d8ae41870c1811020c634dac7a14 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 14:36:32 +0300 Subject: [PATCH 307/689] Added "decorators" document - draft Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 194 ++++++++++++++++++++++++++++++++++++++ src/basics/index.txt | 1 + src/refs.bib | 21 +++++ 3 files changed, 216 insertions(+) create mode 100644 src/basics/decorators.txt diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt new file mode 100644 index 000000000..50983ed6a --- /dev/null +++ b/src/basics/decorators.txt @@ -0,0 +1,194 @@ +.. _first-class objects: + https://dbader.org/blog/python-first-class-functions + +******************************************************************************* + Decorators +******************************************************************************* + +Decorators provide a simple syntax for calling higher-order functions +:cite:`realpython:decorators`. + +.. important:: + + There is some kind of misunderstanding in definitions. + + **Decorator** is a function returning another function, usually applied + as a function transformation using the ``@wrapper`` syntax + :cite:`docs-python:term-decorator`. + + However, that's no quit enough to describe it. The more complete + definition is: + + **Decorator** is a structural design pattern that lets you attach new + behaviors to objects by placing these objects inside special wrapper + objects that contain the behaviors :cite:`refactoring.guru:decorator`. + +Before you understand decorators, you must first understand how functions +work. + +First-class objects +=================== + +In Python functions are `first-class objects`_. Everything in Python is an +object. Functions are objects too. + +Inner functions +--------------- + +Functions can be nested. This means it is possible to define functions +inside other functions. + +.. code-block:: python + :caption: Nested functions example + + def heap_sort(origin: List[int]) -> List[int]: + """Return a sorted collection using the heap sort algorithm""" + + def heapify(_ds: List[int], _size: int, _idx: int) -> List[int]: + ... + + ... + for idx in range(size, -1, -1): + heapify(result, size, idx) + ... + +The order in which inner functions are defined no matters. The function +definition does not execute the function body; this gets executed only when +the function is called. Furthermore, the inner functions are not defined until +the parent function is called. They are locally scoped to their parent. Trying +to call ``heapify`` function outside of ``heap_sort`` will cause ``NameError`` +exception. + +Functions are objects +--------------------- + +This means functions can be passed around and used as arguments, just like any +other object (e.g. *int*, *str* etc.). + +.. code-block:: python + + from typing import Callable + + + def say_hello(name: str) -> str: + return f"Hello, {name}!" + + + def be_awesome(name: str) -> str: + return f"Yo, {name}!" + + + def greet_serhii(greeting_func: Callable) -> str: + return greeting_func("Serhii") + + + if __name__ == "__main__": + print(f"{greet_serhii(say_hello) = }") + print(f"{greet_serhii(be_awesome) = }") + +Returning functions +------------------- + +Since function can be passed as an argument, it may be returned from another +function. + +.. code-block:: python + + from typing import Callable + + + def parent(idx: int) -> Callable: + def first_child(): + return "this is the first child" + + def second_child(): + return "this is the second child" + + return second if not num % 2 else first + + + first = parent(1) + second = parent(2) + +.. note:: + + ``parent`` returns functions themselves, there are no parentheses. + +After running the code snippet above, ``first`` refers the ``first_child`` +function from the inner ``parent`` scope. From now it can be used to call +the target function it refers. + +.. code-block:: + + >>> first() + "this is the first child" + >>> second() + "this is the second child" + +Simple decorators +================= + +Now you're ready to move on and see the magical beast that is the Python +decorators. Let's start with a simple example: + +.. code-block:: python + + def decorator(func: Callable) -> Callable: + def wrapper(): + print(f"before {func.__name__} call") + func() + print(f"after {func.__name__} call") + + return wrapper # no wrapper call, return reference to wrapper function + + def say_hello(): + print("Hello!") + + say_hello_decorated = decorator(say_hello) + +Running function: + +.. code-block:: + + >>> say_hello() + Hello! + >>> say_hello_decorated() + before say_hello call + Hello! + after say_hello call + +The common way to use decorators is to replace the original function with +a decorated one: + +.. code-block:: + + >>> say_hello = decorator(say_hello) + >>> say_hello() + before say_hello call + Hello! + after say_hello call + +``say_hello`` function is the reference to the ``decorator..wrapper``, +which itself is bound to the original ``say_hello`` function. There is a +syntactic sugar to do this, called *pie-syntax*. The following example does +exact the same things as the first decorator example: + +.. code-block:: python + + def decorator(func: Callable) -> Callable: + def wrapper(): + print(f"before {func.__name__} call") + func() + print(f"after {func.__name__} call") + + return wrapper # no wrapper call, return reference to wrapper function + + + @decorator + def say_hello(): + print("Hello!") + +.. important:: + + There is no way to *undecorate* object in Python. Once something is bound + to the decorator's wrapper - it is decorated forever. diff --git a/src/basics/index.txt b/src/basics/index.txt index 468d9cc36..4d1ade7d3 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -12,5 +12,6 @@ functions modules exceptions + decorators pep8 testing diff --git a/src/refs.bib b/src/refs.bib index 943d60b67..fb499b183 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -81,3 +81,24 @@ @misc{docs-python:private-variables title = "{Python Documentation: Private Variables}", url = {https://docs.python.org/3/tutorial/classes.html?highlight=private#private-variables}, } + +@misc{realpython:decorators, + title = "{Primer on Python Decorators}", + author = "{Geir Arne Hjelle }", + url = {https://realpython.com/primer-on-python-decorators/}, +} + +@misc{docs-python:term-decorator, + title = "{Python Documentation}", + url = {https://docs.python.org/glossary.html#term-decorator}, +} + +@misc{docs-python:function-definition, + title = "{Python Documentation}", + url = {https://docs.python.org/3/reference/compound_stmts.html#function}, +} + +@misc{refactoring.guru:decorator, + title = "{Refactoring Guru: Decorator}", + url = {https://refactoring.guru/design-patterns/decorator}, +} \ No newline at end of file From 7b19a9297ef9f14c0ce88db9e6b0a7920fd6c706 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 15:24:16 +0300 Subject: [PATCH 308/689] Added multi-decorator description and examples Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 50983ed6a..617480f28 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -192,3 +192,62 @@ exact the same things as the first decorator example: There is no way to *undecorate* object in Python. Once something is bound to the decorator's wrapper - it is decorated forever. + +A decorated function still remains a **function**. So, it can be decorated +once more time again, and again, and again... + +.. code-block:: python + + from typing import Callable + + + def bread(func: Callable) -> Callable: + def wrapper(): + print("<--bread-->") + func() + print("<--bread-->") + + return wrapper + + + def vegetables(func: Callable) -> Callable: + def wrapper(): + print("~~~salad~~~") + print("***tomato***") + func() + + return wrapper + + + def cheese(func: Callable) -> Callable: + def wrapper(): + func() + print("---cheese---") + + return wrapper + + + @bread + @vegetables + @cheese + def sandwich(): + print("_sliced_meat_") + +.. code-block:: + + >>> sandwich() + <--bread--> + ~~~salad~~~ + ***tomato*** + _sliced_meat_ + ---cheese--- + <--bread--> + +.. note:: + + "Wrapper" is the alternative nickname for the Decorator pattern that + clearly expresses the main idea of the pattern. A wrapper is an object that + can be linked with some target object. The wrapper contains the same set of + methods as the target and delegates to it all requests it receives. + However, the wrapper may alter the result by doing something either before + or after it passes the request to the target. From 6e805d32afd496ffeff3478346b55fc8717e3e20 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 17:03:05 +0300 Subject: [PATCH 309/689] Added inner-wrapper/decorator with arguments Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 93 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 617480f28..601f7a0f8 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -251,3 +251,96 @@ once more time again, and again, and again... methods as the target and delegates to it all requests it receives. However, the wrapper may alter the result by doing something either before or after it passes the request to the target. + +Passing arguments to the wrapper +================================ + +Until now the examples use *simple* decorators. But what if the decorated +function gets some arguments? This will cause ``TypeError`` exception that tell +that "arguments are missed". This can be fixed with just passing arguments to +the ``wrapper`` inner function. + +.. code-block:: python + + import logging + from typing import Callable + + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger(__name__) + + + def log(func: Callable) -> Callable: + def wrapper(x, y): + logger.info("%s called", func.__name__) + return func(x, y) + + return wrapper + + + @log + def sum_numbers(x, y): + return x + y + +If case you're trying to make a generic decorator, you may pass ``*args`` and +``**kwargs`` instead of exact arguments: + +.. code-block:: python + + from typing import Callable + + + def generic_decorator(func: Callable) -> Callable: + def wrapper(*args, **kwargs): + ... # do something before + result = func(*args, **kwargs) + ... # do something after + + return result + + return wrapper + +Passing arguments to decorator +============================== + +At last it's time to know how to pass arguments to the decorator. +Here is a simple implementation of ``defer`` decorator which deferred +the function execution for some time: + +.. code-block:: python + + import time + from typing import Callable + + + def defer(seconds: int = 3) -> Callable: + def decorator(func: Callable) -> Callable: + def wrapper(*args, **kwargs): + started_at = time.perf_counter() + time.sleep(seconds) + result = func(*args, **kwargs) + completed_in = round(time.perf_counter() - started_at, 2) + print("Completed in %.2f" % completed_in) + + return result + + return wrapper + + return decorator + + + @defer() + def function_a(): + return 42 + + + @defer(10) + def function_b(): + return 24 + + +.. code-block:: + + function_a() + Completed in 3.00 + function_b() + Completed in 10.00 From 549234b02811eb45d2e334d7c730467f907aeffd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 17:51:06 +0300 Subject: [PATCH 310/689] Added class decorators: classmethod, staticmethod, property Signed-off-by: Serhii Horodilov --- src/basics/decorators.txt | 100 ++++++++++++++++++++++++++++++++++++-- src/refs.bib | 8 ++- 2 files changed, 103 insertions(+), 5 deletions(-) diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 601f7a0f8..3468a80b5 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -312,7 +312,7 @@ the function execution for some time: from typing import Callable - def defer(seconds: int = 3) -> Callable: + def slow_down(seconds: int = 3) -> Callable: def decorator(func: Callable) -> Callable: def wrapper(*args, **kwargs): started_at = time.perf_counter() @@ -328,19 +328,111 @@ the function execution for some time: return decorator - @defer() + @slow_down() def function_a(): return 42 - @defer(10) + @slow_down(10) def function_b(): return 24 - .. code-block:: function_a() Completed in 3.00 function_b() Completed in 10.00 + +Class decorators +================ + +There are some pre-defined decorators exists for usage together with classes. +They are: + +- ``classmethod`` +- ``staticmethod`` +- ``property`` + +If you develop an intuitive understanding for their differences you’ll be able to write object-oriented Python that communicates its intent more clearly and will be easier to maintain in the long run :cite:`realpython:methods-demystified`. + +Class methods +------------- + +Instead of accepting a self parameter, class methods take a ``cls`` parameter +that points to the class—and not the object instance—when the method is called. + +Because the class method only has access to this ``cls`` argument, it can't +modify object instance state. That would require access to ``self``. +However, class methods can still modify class state that applies across all +instances of the class. + +The common usage for ``classmethod`` is provide alternative initializers. + +Static methods +-------------- + +This type of method takes neither a ``self`` nor a ``cls`` parameter (but of +course it’s free to accept an arbitrary number of other parameters). + +Therefore a static method can neither modify object state nor class state. +Static methods are restricted in what data they can access - and they're +primarily a way to namespace your methods. + +It's tricky to explain ``staticmethod`` usage. Almost always you can create +a dedicated function instead of static method. But sometimes you need to +bind some logic independent from class itself or its instances to a class - +it common to encapsulate it with ``staticmethod``. + +Properties +---------- + +It's a way to bind a method name to access it as an attribute. Properties are +"read-only" by default. This means a value cannot be assigned to ``property +member``. + +Some examples +------------- + +.. code-block:: python + + import datetime + + + class Person: + """Person class implementation""" + + def __init__(self, first_name: str, last_name: str) -> None: + """Initialize instance""" + + self.first_name = first_name + self.last_name = last_name + + @classmethod + def from_fullname(cls, name: str) -> "Person": + """Return a person instance""" + + first_name, last_name = name.rsplit(" ", 1) + + return cls(first_name, last_name) + + @staticmethod + def format_date(date: datetime.date) -> str: + """Return a formatted date as string""" + + return date.strftime("%d-%m-%Y") + + @property + def fullname(self) -> str: + """Return person's fullname""" + + return " ".join([self.first_name, self.last_name]) + +.. code-block:: + + >>> sh = Person("Serhii", "Horodilov") + >>> vp = Person.from_fullname("Vladyslav Ponomaryov") + >>> sh.fullname + 'Serhii Horodilov' + >>> vp.fullname + 'Vladyslav Ponomaryov' diff --git a/src/refs.bib b/src/refs.bib index fb499b183..2887ad806 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -101,4 +101,10 @@ @misc{docs-python:function-definition @misc{refactoring.guru:decorator, title = "{Refactoring Guru: Decorator}", url = {https://refactoring.guru/design-patterns/decorator}, -} \ No newline at end of file +} + +@misc{realpython:methods-demystified, + title = "{Python's Instance, Class, and Static Methods Demystified}", + author = "{Dan Bader}", + url = {https://realpython.com/instance-class-and-static-methods-demystified/}, +} From a4c0d23ed75c721ce5a42803a10301defb168469 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 13 Apr 2023 18:21:37 +0300 Subject: [PATCH 311/689] Added "decorators" translation Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/basics.po | 473 ++++++++++++++++++++++---- src/basics/decorators.txt | 14 +- 2 files changed, 425 insertions(+), 62 deletions(-) diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index dde1e54aa..2391f5718 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 23:14+0300\n" -"PO-Revision-Date: 2023-04-10 23:14+0300\n" +"POT-Creation-Date: 2023-04-13 18:20+0300\n" +"PO-Revision-Date: 2023-04-13 18:21+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -25,6 +25,365 @@ msgstr "" msgid "Control Flow" msgstr "Керування виконанням" +#: ../../src/basics/decorators.txt:6 +msgid "Decorators" +msgstr "Декоратори" + +#: ../../src/basics/decorators.txt:8 +msgid "" +"Decorators provide a simple syntax for calling higher-order functions :cite:" +"`realpython:decorators`." +msgstr "" +"Декоратори забезпечують простий синтаксис для виклику функцій вищого " +"порядку :cite:`realpython:decorators`." + +#: ../../src/basics/decorators.txt:13 +msgid "There is some kind of misunderstanding in definitions." +msgstr "Є деяке непорозуміння у визначеннях." + +#: ../../src/basics/decorators.txt:15 +msgid "" +"**Decorator** is a function returning another function, usually applied as a " +"function transformation using the ``@wrapper`` syntax :cite:`docs-python:" +"term-decorator`." +msgstr "" +"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " +"застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" +"cite:`docs-python:term-decorator`." + +#: ../../src/basics/decorators.txt:19 +msgid "" +"However, that's no quit enough to describe it. The more complete definition " +"is:" +msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" + +#: ../../src/basics/decorators.txt:22 +msgid "" +"**Decorator** is a structural design pattern that lets you attach new " +"behaviors to objects by placing these objects inside special wrapper objects " +"that contain the behaviors :cite:`refactoring.guru:decorator`." +msgstr "" +"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " +"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " +"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." + +#: ../../src/basics/decorators.txt:26 +msgid "" +"Before you understand decorators, you must first understand how functions " +"work." +msgstr "" +"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " +"функції." + +#: ../../src/basics/decorators.txt:30 +msgid "First-class objects" +msgstr "Об'єкти першого класу" + +#: ../../src/basics/decorators.txt:32 +msgid "" +"In Python functions are `first-class objects`_. Everything in Python is an " +"object. Functions are objects too." +msgstr "" +"У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " +"Функції також є об'єктами." + +#: ../../src/basics/decorators.txt:36 +msgid "Inner functions" +msgstr "Внутрішні функції" + +#: ../../src/basics/decorators.txt:38 +msgid "" +"Functions can be nested. This means it is possible to define functions " +"inside other functions." +msgstr "" +"Функції можуть бути вкладеними. Це означає, що можна визначати функції " +"всередині інших функцій." + +#: ../../src/basics/decorators.txt:41 +msgid "Nested functions example" +msgstr "Приклад вкладених функцій" + +#: ../../src/basics/decorators.txt:55 +msgid "" +"The order in which inner functions are defined no matters. The function " +"definition does not execute the function body; this gets executed only when " +"the function is called. Furthermore, the inner functions are not defined " +"until the parent function is called. They are locally scoped to their " +"parent. Trying to call ``heapify`` function outside of ``heap_sort`` will " +"cause ``NameError`` exception." +msgstr "" +"Порядок визначення внутрішніх функцій не має значення. Визначення функції не " +"виконує тіло функції; це виконується лише під час виклику функції. Крім " +"того, внутрішні функції не визначені, доки не буде викликана батьківська " +"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " +"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " +"``NameError``." + +#: ../../src/basics/decorators.txt:63 +msgid "Functions are objects" +msgstr "Функції є об'єктами" + +#: ../../src/basics/decorators.txt:65 +msgid "" +"This means functions can be passed around and used as arguments, just like " +"any other object (e.g. *int*, *str* etc.)." +msgstr "" +"Це означає, що функції можна передавати й використовувати як аргументи, як і " +"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." + +#: ../../src/basics/decorators.txt:90 +msgid "Returning functions" +msgstr "Повернення функцій" + +#: ../../src/basics/decorators.txt:92 +msgid "" +"Since function can be passed as an argument, it may be returned from another " +"function." +msgstr "" +"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " +"функції." + +#: ../../src/basics/decorators.txt:115 +msgid "``parent`` returns functions themselves, there are no parentheses." +msgstr "``parent`` повертає самі функції, тут нема дужок." + +#: ../../src/basics/decorators.txt:117 +msgid "" +"After running the code snippet above, ``first`` refers the ``first_child`` " +"function from the inner ``parent`` scope. From now it can be used to call " +"the target function it refers." +msgstr "" +"Після виконання наведеного вище фрагмента коду ``first`` посилається на " +"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " +"можна використовувати для виклику цільової функції, на яку він посилається." + +#: ../../src/basics/decorators.txt:129 +msgid "Simple decorators" +msgstr "Прості декоратори" + +#: ../../src/basics/decorators.txt:131 +msgid "" +"Now you're ready to move on and see the magical beast that is the Python " +"decorators. Let's start with a simple example:" +msgstr "" +"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " +"Python. Почнемо з простого прикладу:" + +#: ../../src/basics/decorators.txt:149 +msgid "Running function:" +msgstr "Запуск функцій:" + +#: ../../src/basics/decorators.txt:160 +msgid "" +"The common way to use decorators is to replace the original function with a " +"decorated one:" +msgstr "" +"Поширеним способом використання декораторів є заміна оригінальної функції на " +"декоровану:" + +#: ../../src/basics/decorators.txt:171 +msgid "" +"``say_hello`` function is the reference to the ``decorator.." +"wrapper``, which itself is bound to the original ``say_hello`` function. " +"There is a syntactic sugar to do this, called *pie-syntax*. The following " +"example does exact the same things as the first decorator example:" +msgstr "" +"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " +"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " +"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " +"ті самі речі, що й перший приклад декоратора:" + +#: ../../src/basics/decorators.txt:193 +msgid "" +"There is no way to *undecorate* object in Python. Once something is bound to " +"the decorator's wrapper - it is decorated forever." +msgstr "" +"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " +"обгортки декоратора - воно прикрашене назавжди." + +#: ../../src/basics/decorators.txt:196 +msgid "" +"A decorated function still remains a **function**. So, it can be decorated " +"once more time again, and again, and again..." +msgstr "" +"Декорована функція все ще залишається **функцією**. Отже, його можна " +"прикрашати ще раз, і ще, і ще..." + +#: ../../src/basics/decorators.txt:248 +msgid "" +"\"Wrapper\" is the alternative nickname for the Decorator pattern that " +"clearly expresses the main idea of the pattern. A wrapper is an object that " +"can be linked with some target object. The wrapper contains the same set of " +"methods as the target and delegates to it all requests it receives. However, " +"the wrapper may alter the result by doing something either before or after " +"it passes the request to the target." +msgstr "" +"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " +"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " +"деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " +"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " +"результат, зробивши щось до або після того, як вона передає запит цільовому " +"об'єкту." + +#: ../../src/basics/decorators.txt:256 +msgid "Passing arguments to the wrapper" +msgstr "Передача аргументів до wrapper" + +#: ../../src/basics/decorators.txt:258 +msgid "" +"Until now the examples use *simple* decorators. But what if the decorated " +"function gets some arguments? This will cause ``TypeError`` exception that " +"tell that \"arguments are missed\". This can be fixed with just passing " +"arguments to the ``wrapper`` inner function." +msgstr "" +"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " +"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " +"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " +"аргументи внутрішній функції ``wrapper``." + +#: ../../src/basics/decorators.txt:284 +msgid "" +"If case you're trying to make a generic decorator, you may pass ``*args`` " +"and ``**kwargs`` instead of exact arguments:" +msgstr "" +"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " +"``*args`` і ``**kwargs`` замість точних аргументів:" + +#: ../../src/basics/decorators.txt:303 +msgid "Passing arguments to decorator" +msgstr "Передача аргументів декоратору" + +#: ../../src/basics/decorators.txt:305 +msgid "" +"At last it's time to know how to pass arguments to the decorator. Here is a " +"simple implementation of ``defer`` decorator which deferred the function " +"execution for some time:" +msgstr "" +"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " +"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " +"час:" + +#: ../../src/basics/decorators.txt:348 +msgid "Class decorators" +msgstr "Декоратори класів" + +#: ../../src/basics/decorators.txt:350 +msgid "" +"There are some pre-defined decorators exists for usage together with " +"classes. They are:" +msgstr "" +"Існують деякі попередньо визначені декоратори для використання разом із " +"класами. Це:" + +#: ../../src/basics/decorators.txt:353 +msgid "``classmethod``" +msgstr "``classmethod``" + +#: ../../src/basics/decorators.txt:354 +msgid "``staticmethod``" +msgstr "``staticmethod``" + +#: ../../src/basics/decorators.txt:355 +msgid "``property``" +msgstr "``property``" + +#: ../../src/basics/decorators.txt:357 +msgid "" +"If you develop an intuitive understanding for their differences you'll be " +"able to write object-oriented Python that communicates its intent more " +"clearly and will be easier to maintain in the long run :cite:`realpython:" +"methods-demystified`." +msgstr "" +"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " +"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " +"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" +"methods-demystified`." + +#: ../../src/basics/decorators.txt:363 +msgid "Class methods" +msgstr "Методи класу" + +#: ../../src/basics/decorators.txt:365 +msgid "" +"Instead of accepting a ``self`` parameter, class methods take a ``cls`` " +"parameter that points to the class — and not the object instance — when the " +"method is called." +msgstr "" +"Замість того, щоб приймати параметр self, під час виклику методу методи " +"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " +"класу." + +#: ../../src/basics/decorators.txt:369 +msgid "" +"Because the class method only has access to this ``cls`` argument, it can't " +"modify object instance state. That would require access to ``self``. " +"However, class methods can still modify class state that applies across all " +"instances of the class." +msgstr "" +"Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " +"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " +"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " +"екземплярів класу." + +#: ../../src/basics/decorators.txt:374 +msgid "" +"The common usage for ``classmethod`` is provide alternative initializers." +msgstr "" +"Загальним використанням ``методи класу`` є надання альтернативних " +"ініціалізаторів." + +#: ../../src/basics/decorators.txt:377 +msgid "Static methods" +msgstr "Статичні методи" + +#: ../../src/basics/decorators.txt:379 +msgid "" +"This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " +"course it's free to accept an arbitrary number of other parameters)." +msgstr "" +"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " +"він може приймати будь-яку кількість інших параметрів)." + +#: ../../src/basics/decorators.txt:382 +msgid "" +"Therefore a static method can neither modify object state nor class state. " +"Static methods are restricted in what data they can access - and they're " +"primarily a way to namespace your methods." +msgstr "" +"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " +"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " +"і вони, перш за все, є способом простору імен ваших методів." + +#: ../../src/basics/decorators.txt:386 +msgid "" +"It's tricky to explain ``staticmethod`` usage. Almost always you can create " +"a dedicated function instead of static method. But sometimes you need to " +"bind some logic independent from class itself or its instances to a class - " +"it common to encapsulate it with ``staticmethod``." +msgstr "" +"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " +"створити спеціальну функцію замість статичного методу. Але іноді вам " +"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " +"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." + +#: ../../src/basics/decorators.txt:392 +msgid "Properties" +msgstr "Властивості" + +#: ../../src/basics/decorators.txt:394 +msgid "" +"It's a way to bind a method name to access it as an attribute. Properties " +"are **read-only** by default. This means a value cannot be assigned to " +"``property member``." +msgstr "" +"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " +"замовчуванням властивості доступні **лише для читання**. Це означає, що " +"значення не можна призначити ``члену властивості``." + +#: ../../src/basics/decorators.txt:399 +msgid "Some examples" +msgstr "Деякі приклади" + #: ../../src/basics/exceptions.txt:6 msgid "Errors and Exceptions" msgstr "Помилки та винятки" @@ -294,7 +653,7 @@ msgid "" "exceptions raised while running the ``try``." msgstr "" "Оператор ``try`` також може використовувати ``else`` (який є " -"необов’язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " +"необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " "якщо під час виконання ``try`` не було викликано винятків." #: ../../src/basics/exceptions.txt:268 @@ -447,12 +806,12 @@ msgid "Supported operations" msgstr "Операції підтримки" #: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:199 msgid "Operation" msgstr "Операції" #: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:199 msgid "Result" msgstr "Результат" @@ -605,8 +964,8 @@ msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: ../../src/basics/stdtypes.txt:104 ../../src/basics/stdtypes.txt:177 -#: ../../src/basics/stdtypes.txt:287 ../../src/basics/stdtypes.txt:296 -#: ../../src/basics/stdtypes.txt:325 +#: ../../src/basics/stdtypes.txt:285 ../../src/basics/stdtypes.txt:294 +#: ../../src/basics/stdtypes.txt:323 msgid "Value comparisons" msgstr "Порівняння цінностей" @@ -809,7 +1168,7 @@ msgstr "" "індекс першого входження *x* у *s* на або після індексу *i* та перед " "індексом *j*" -#: ../../src/basics/stdtypes.txt:181 +#: ../../src/basics/stdtypes.txt:179 msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -821,7 +1180,7 @@ msgstr "" "типами призводить до нерівності, а впорядковане порівняння цих типів " "викликає ``TypeError``." -#: ../../src/basics/stdtypes.txt:186 +#: ../../src/basics/stdtypes.txt:184 msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " @@ -833,7 +1192,7 @@ msgstr "" "рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " "таким чином:" -#: ../../src/basics/stdtypes.txt:191 +#: ../../src/basics/stdtypes.txt:189 msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." @@ -842,7 +1201,7 @@ msgstr "" "мати однакову довжину, і кожна пара відповідних елементів повинна " "порівнюватися." -#: ../../src/basics/stdtypes.txt:193 +#: ../../src/basics/stdtypes.txt:191 msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " @@ -852,98 +1211,98 @@ msgstr "" "їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " "впорядковується коротша колекція." -#: ../../src/basics/stdtypes.txt:198 +#: ../../src/basics/stdtypes.txt:196 msgid "Mutable sequence types" msgstr "Змінні типи послідовностей" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:201 msgid "``s[i] = x``" msgstr "``s[i] = x``" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:201 msgid "item *i* of *s* is replaced by *x*" msgstr "елемент *i* з *s* замінюється на *x*" -#: ../../src/basics/stdtypes.txt:205 +#: ../../src/basics/stdtypes.txt:203 msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" -#: ../../src/basics/stdtypes.txt:205 +#: ../../src/basics/stdtypes.txt:203 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:206 msgid "``del s[i:j]``" msgstr "``del s[i:j]``" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:206 msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:208 msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:208 msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:210 msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:210 msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" -#: ../../src/basics/stdtypes.txt:214 +#: ../../src/basics/stdtypes.txt:212 msgid "``s.append(x)``" msgstr "``s.append(x)``" -#: ../../src/basics/stdtypes.txt:214 +#: ../../src/basics/stdtypes.txt:212 msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:215 msgid "``s.clear()``" msgstr "``s.clear()``" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:215 msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:217 msgid "``s.copy()``" msgstr "``s.copy()``" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:217 msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:221 +#: ../../src/basics/stdtypes.txt:219 msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" -#: ../../src/basics/stdtypes.txt:221 +#: ../../src/basics/stdtypes.txt:219 msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" -#: ../../src/basics/stdtypes.txt:224 +#: ../../src/basics/stdtypes.txt:222 msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" -#: ../../src/basics/stdtypes.txt:224 +#: ../../src/basics/stdtypes.txt:222 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" -#: ../../src/basics/stdtypes.txt:227 +#: ../../src/basics/stdtypes.txt:225 msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" -#: ../../src/basics/stdtypes.txt:227 +#: ../../src/basics/stdtypes.txt:225 msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -951,39 +1310,39 @@ msgstr "" "отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " "пропущено - використовуйте останній доступний індекс)" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:228 msgid "``s.remove(x)``" msgstr "``s.remove(x)``" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:228 msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" -#: ../../src/basics/stdtypes.txt:232 +#: ../../src/basics/stdtypes.txt:230 msgid "``s.reverse()``" msgstr "``s.reverse()``" -#: ../../src/basics/stdtypes.txt:232 +#: ../../src/basics/stdtypes.txt:230 msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" -#: ../../src/basics/stdtypes.txt:235 +#: ../../src/basics/stdtypes.txt:233 msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" -#: ../../src/basics/stdtypes.txt:236 +#: ../../src/basics/stdtypes.txt:234 msgid "new in Python version 3.3" msgstr "нове у версії Python 3.3" -#: ../../src/basics/stdtypes.txt:239 +#: ../../src/basics/stdtypes.txt:237 msgid "Text sequence type" msgstr "Тип текстової послідовності" -#: ../../src/basics/stdtypes.txt:242 +#: ../../src/basics/stdtypes.txt:240 msgid "String methods" msgstr "Рядкові методи" -#: ../../src/basics/stdtypes.txt:244 +#: ../../src/basics/stdtypes.txt:242 msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." @@ -991,7 +1350,7 @@ msgstr "" "Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " "методами." -#: ../../src/basics/stdtypes.txt:289 +#: ../../src/basics/stdtypes.txt:287 msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." @@ -999,11 +1358,11 @@ msgstr "" "Рядки порівнюються лексикографічно з використанням числових кодових точок " "Unicode своїх символів." -#: ../../src/basics/stdtypes.txt:293 +#: ../../src/basics/stdtypes.txt:291 msgid "Set types" msgstr "Типи сетів" -#: ../../src/basics/stdtypes.txt:298 +#: ../../src/basics/stdtypes.txt:296 msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -1017,22 +1376,22 @@ msgstr "" "порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " "підмножини одного іншого, ані надмножини один одного)." -#: ../../src/basics/stdtypes.txt:305 +#: ../../src/basics/stdtypes.txt:303 msgid "Mapping type" msgstr "Тип відображення" -#: ../../src/basics/stdtypes.txt:307 +#: ../../src/basics/stdtypes.txt:305 msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " "*dictionary*. In few words mappings are collections of keys and their values." msgstr "" -"Об’єкт зіставлення зіставляє хешовані значення з довільними об’єктами. " +"Об'єкт зіставлення зіставляє хешовані значення з довільними об'єктами. " "Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " "відображення, *dictionary*. Якщо кількома словами, то відображення - це " "набори ключів та їхніх значень." -#: ../../src/basics/stdtypes.txt:311 +#: ../../src/basics/stdtypes.txt:309 msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " @@ -1044,15 +1403,15 @@ msgstr "" "``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " "тієї самої словникової статті." -#: ../../src/basics/stdtypes.txt:315 +#: ../../src/basics/stdtypes.txt:313 msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" -#: ../../src/basics/stdtypes.txt:317 +#: ../../src/basics/stdtypes.txt:315 msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" -#: ../../src/basics/stdtypes.txt:318 +#: ../../src/basics/stdtypes.txt:316 msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" @@ -1060,11 +1419,11 @@ msgstr "" "Використовуйте розділений комами список пар ``key: value`` з дужками: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" -#: ../../src/basics/stdtypes.txt:320 +#: ../../src/basics/stdtypes.txt:318 msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" -#: ../../src/basics/stdtypes.txt:321 +#: ../../src/basics/stdtypes.txt:319 msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -1072,7 +1431,7 @@ msgstr "" "Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" -#: ../../src/basics/stdtypes.txt:327 +#: ../../src/basics/stdtypes.txt:325 msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." @@ -1080,7 +1439,7 @@ msgstr "" "Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " "однакові пари ключ-значення." -#: ../../src/basics/stdtypes.txt:330 +#: ../../src/basics/stdtypes.txt:328 msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 3468a80b5..04e4b2fc7 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -354,13 +354,17 @@ They are: - ``staticmethod`` - ``property`` -If you develop an intuitive understanding for their differences you’ll be able to write object-oriented Python that communicates its intent more clearly and will be easier to maintain in the long run :cite:`realpython:methods-demystified`. +If you develop an intuitive understanding for their differences you'll be able +to write object-oriented Python that communicates its intent more clearly and +will be easier to maintain in the long run +:cite:`realpython:methods-demystified`. Class methods ------------- -Instead of accepting a self parameter, class methods take a ``cls`` parameter -that points to the class—and not the object instance—when the method is called. +Instead of accepting a ``self`` parameter, class methods take a ``cls`` +parameter that points to the class — and not the object instance — when +the method is called. Because the class method only has access to this ``cls`` argument, it can't modify object instance state. That would require access to ``self``. @@ -373,7 +377,7 @@ Static methods -------------- This type of method takes neither a ``self`` nor a ``cls`` parameter (but of -course it’s free to accept an arbitrary number of other parameters). +course it's free to accept an arbitrary number of other parameters). Therefore a static method can neither modify object state nor class state. Static methods are restricted in what data they can access - and they're @@ -388,7 +392,7 @@ Properties ---------- It's a way to bind a method name to access it as an attribute. Properties are -"read-only" by default. This means a value cannot be assigned to ``property +**read-only** by default. This means a value cannot be assigned to ``property member``. Some examples From 60a52fa75c13c2fa9e5cf12250042fabb552a35c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:19:23 +0300 Subject: [PATCH 312/689] Added metadata for appendixes Signed-off-by: Serhii Horodilov --- src/appx/blog.txt | 5 +++++ src/appx/code_edit.txt | 5 ++++- src/appx/conv_store.txt | 5 +++++ src/appx/env_path.txt | 5 ++++- src/appx/precedence.txt | 8 ++++---- src/appx/printf.txt | 5 ++++- src/appx/wtk.txt | 5 +++++ 7 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/appx/blog.txt b/src/appx/blog.txt index d2c1bd5b1..406074712 100644 --- a/src/appx/blog.txt +++ b/src/appx/blog.txt @@ -1 +1,6 @@ +.. meta:: + :description: Specification for Django blog training project + :author: Serhii Horodilov + :keywords: python, django, blog, project, training + .. include:: /../blog/docs/spec.rst diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt index f3308f071..bf670b741 100644 --- a/src/appx/code_edit.txt +++ b/src/appx/code_edit.txt @@ -1,4 +1,7 @@ -.. appendix +.. meta:: + :description: Code editors and IDEs for Python + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, editor, ide ############ Code Editors diff --git a/src/appx/conv_store.txt b/src/appx/conv_store.txt index cb1d4aaa1..5ac896ec7 100644 --- a/src/appx/conv_store.txt +++ b/src/appx/conv_store.txt @@ -1 +1,6 @@ +.. meta:: + :description: Convenience store challenge + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, basics, oop, object-oriented programming + .. include:: /../problem-sets/src/conv_store/challenge.rst diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 6786d036e..94de3dc45 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -1,4 +1,7 @@ -.. appendix +.. meta:: + :description: Setting up environment variables + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: settings, environment, variables ############################### Issue - System Environment PATH diff --git a/src/appx/precedence.txt b/src/appx/precedence.txt index 5fce07b0a..80af144d1 100644 --- a/src/appx/precedence.txt +++ b/src/appx/precedence.txt @@ -1,7 +1,7 @@ -.. appendix - -.. todo: - https://docs.python.org/3/reference/expressions.html#operator-precedence +.. meta:: + :description: Operator precedence in Python + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, basics, operator, precedence ################### Operator Precedence diff --git a/src/appx/printf.txt b/src/appx/printf.txt index af9dda63b..7842edf9b 100644 --- a/src/appx/printf.txt +++ b/src/appx/printf.txt @@ -1,4 +1,7 @@ -.. appendix +.. meta:: + :description: Formatted strings usage in Python + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, string, formatting .. todo: add code examples diff --git a/src/appx/wtk.txt b/src/appx/wtk.txt index 1a55429df..ef0a62d5d 100644 --- a/src/appx/wtk.txt +++ b/src/appx/wtk.txt @@ -1 +1,6 @@ +.. meta:: + :description: Knights, thieves and wizards game project + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: python, game, oop, object-oriented programming + .. include:: /../problem-sets/src/wtk/challenge.rst From fb195fb90ba624f2c2b69a9214fe8f5aab08dff5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:27:36 +0300 Subject: [PATCH 313/689] Changed 'software list' file format to rst --- src/appx/software_list.md | 110 --------------------------------- src/appx/software_list.rst | 123 +++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 110 deletions(-) delete mode 100644 src/appx/software_list.md create mode 100644 src/appx/software_list.rst diff --git a/src/appx/software_list.md b/src/appx/software_list.md deleted file mode 100644 index 9d5d6f34a..000000000 --- a/src/appx/software_list.md +++ /dev/null @@ -1,110 +0,0 @@ -Software List -============= - -7zip ----- - -**7-Zip** is **free software** with **open source**. - -- High compression ratio in [7z format](https://7-zip.org/7z.html) with - **LZMA** and **LZMA2** compression -- Supported formats: - - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM - - Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, - GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, - SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z. -- Self-extracting capability for 7z format -- Integration with Windows Shell - -https://7-zip.org/ - -cygwin ------- - -It is a large collection of GNU and Open Source tools which provide -functionality similar to a -[Linux distribution](https://en.wikipedia.org/wiki/Linux_distribution) on -Windows and a DLL (cygwin1.dll) which provides substantial POSIX API -functionality. - -**Cygwin is not**: - -- a way to run native Linux apps on Windows. You must rebuild your application - *from source* if you want it to run on Windows. -- a way to magically make native Windows apps aware of UNIX® functionality like - `signals`, `ptys` etc. Again, you need to build your apps *from source* if - you want to take advantage of Cygwin functionality. - -https://www.cygwin.com/ - -git[^cygwin-pkg] ---- - -Git is a [free and open source](https://git-scm.com/about/free-and-open-source) -distributed version control system designed to handle everything from small to -very large projects with speed and efficiency. - -https://git-scm.com/ - -Docker ------- - -> The most-loved Tool in Stack Overflow’s 2022 Developer Survey. - -Docker helps developers bring their ideas to life by conquering the complexity -of app development. We simplify and accelerate development workflows with -an integrated dev pipeline and through the consolidation of application -components. Actively used by millions of developers around the world, -Docker Desktop and Docker Hub provide unmatched simplicity, agility and choice. - -https://www.docker.com/ - -PostgreSQL[^cygwin-pkg] ----------- - -PostgreSQL is a powerful, open source object-relational database system with -over 35 years of active development that has earned it a strong reputation for -reliability, feature robustness, and performance. - -https://www.postgresql.org/ - -psql[^cygwin-pkg] ----- - -A terminal-based front-end to PostgreSQL. It enables you to type in queries -interactively, issue them to PostgreSQL, and see the query results. -Alternatively, input can be from a file or from command line arguments. -In addition, psql provides a number of meta-commands and various shell-like -features to facilitate writing scripts and automating a wide variety of tasks. - -On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux -look for `postgresql-client` package. - -https://www.postgresql.org/docs/current/app-psql.html - -pgAdmin -------- - -pgAdmin is the most popular and feature rich Open Source administration and -development platform for PostgreSQL, the most advanced Open Source database -in the world. - -It is a PostgreSQL client (like a `psql`), but with web based GUI. - -https://pgadmin.org/ - -SQLite[^cygwin-pkg] ------- - -SQLite is a C-language library that implements a -[small](https://sqlite.org/footprint.html), -[fast](https://sqlite.org/fasterthanfs.html), -[self-contained](https://sqlite.org/selfcontained.html), -[high-reliability](https://sqlite.org/hirely.html), -[full-featured](https://sqlite.org/fullsql.html), SQL database engine. - -https://sqlite.org/ - - -[^cygwin-pkg]: available for installation as a cygwin package - diff --git a/src/appx/software_list.rst b/src/appx/software_list.rst new file mode 100644 index 000000000..35976d6ea --- /dev/null +++ b/src/appx/software_list.rst @@ -0,0 +1,123 @@ +.. meta:: + :description: Useful software list + :author: Serhii Horodilov + :keywords: software + +Software List +============= + +7zip +---- + +**7-Zip** is **free software** with **open source**. + +- High compression ratio in `7z format `__ + with **LZMA** and **LZMA2** compression +- Supported formats: + + - Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM + - Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, + FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, + RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z. + +- Self-extracting capability for 7z format +- Integration with Windows Shell + +https://7-zip.org/ + +cygwin +------ + +It is a large collection of GNU and Open Source tools which provide +functionality similar to a `Linux +distribution `__ on +Windows and a DLL (cygwin1.dll) which provides substantial POSIX API +functionality. + +**Cygwin is not**: + +- a way to run native Linux apps on Windows. You must rebuild your + application *from source* if you want it to run on Windows. +- a way to magically make native Windows apps aware of UNIX® + functionality like ``signals``, ``ptys`` etc. Again, you need to + build your apps *from source* if you want to take advantage of Cygwin + functionality. + +https://www.cygwin.com/ + +git [#cygwin]_ +-------------- + +Git is a `free and open +source `__ distributed +version control system designed to handle everything from small to very +large projects with speed and efficiency. + +https://git-scm.com/ + +Docker +------ + + The most-loved Tool in Stack Overflow’s 2022 Developer Survey. + +Docker helps developers bring their ideas to life by conquering the +complexity of app development. We simplify and accelerate development +workflows with an integrated dev pipeline and through the consolidation +of application components. Actively used by millions of developers +around the world, Docker Desktop and Docker Hub provide unmatched +simplicity, agility and choice. + +https://www.docker.com/ + +PostgreSQL [#cygwin]_ +--------------------- + +PostgreSQL is a powerful, open source object-relational database system +with over 35 years of active development that has earned it a strong +reputation for reliability, feature robustness, and performance. + +https://www.postgresql.org/ + +.. _psqlcygwin-pkg: + +psql [#cygwin]_ +--------------- + +A terminal-based front-end to PostgreSQL. It enables you to type in +queries interactively, issue them to PostgreSQL, and see the query +results. Alternatively, input can be from a file or from command line +arguments. In addition, psql provides a number of meta-commands and +various shell-like features to facilitate writing scripts and automating +a wide variety of tasks. + +On Windows it will be installed within PostgreSQL RDBMS. For macOS and +Linux look for ``postgresql-client`` package. + +https://www.postgresql.org/docs/current/app-psql.html + +pgAdmin +------- + +pgAdmin is the most popular and feature rich Open Source administration +and development platform for PostgreSQL, the most advanced Open Source +database in the world. + +It is a PostgreSQL client (like a ``psql``), but with web based GUI. + +https://pgadmin.org/ + +SQLite [#cygwin]_ +----------------- + +SQLite is a C-language library that implements a +`small `__, +`fast `__, +`self-contained `__, +`high-reliability `__, +`full-featured `__, SQL database +engine. + +https://sqlite.org/ + +.. [#cygwin] + available for installation as a cygwin package From f33ad30c0607c56238ec7ddd15b709a2a38dc2e8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:35:18 +0300 Subject: [PATCH 314/689] Added metadata for basics Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 5 +++++ src/basics/decorators.txt | 5 +++++ src/basics/exceptions.txt | 5 +++++ src/basics/functions.txt | 5 +++++ src/basics/index.txt | 5 +++++ src/basics/modules.txt | 5 +++++ src/basics/pep8.txt | 5 +++++ src/basics/stdtypes.txt | 5 +++++ src/basics/syntax.txt | 5 +++++ src/basics/testing.txt | 5 +++++ src/basics/variables.txt | 5 +++++ 11 files changed, 55 insertions(+) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 93b4e4add..5914db841 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Control flow in Python + :author: Serhii Horodilov + :keywords: python, basics, control, if, for, while, condition, loop + ******************************************************************************* Control Flow ******************************************************************************* diff --git a/src/basics/decorators.txt b/src/basics/decorators.txt index 04e4b2fc7..62dbfeeb5 100644 --- a/src/basics/decorators.txt +++ b/src/basics/decorators.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python decorators + :author: Serhii Horodilov + :keywords: python, basics, decorators + .. _first-class objects: https://dbader.org/blog/python-first-class-functions diff --git a/src/basics/exceptions.txt b/src/basics/exceptions.txt index 51aa19e33..d2ca9c37f 100644 --- a/src/basics/exceptions.txt +++ b/src/basics/exceptions.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Handling exceptions in Python + :author: Serhii Horodilov + :keywords: python, exceptions, handling, try, except, finally + .. _built-in exceptions: https://docs.python.org/library/exceptions.html#bltin-exceptions diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 36a1acce6..7200e1b0d 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python functions + :author: Serhii Horodilov + :keywords: python, basics, functions + ******************************************************************************* Functions ******************************************************************************* diff --git a/src/basics/index.txt b/src/basics/index.txt index 4d1ade7d3..5f5ee1137 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python course - Basics + :author: Serhii Horodilov + :keywords: python, basics, index + ############################################################################### Python Basics ############################################################################### diff --git a/src/basics/modules.txt b/src/basics/modules.txt index 6e757289f..8e5ab24b8 100644 --- a/src/basics/modules.txt +++ b/src/basics/modules.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Modules and imports in Python + :author: Serhii Horodilov + :keywords: python, basics, modules, import + ******************************************************************************* Pythons Modules and Imports ******************************************************************************* diff --git a/src/basics/pep8.txt b/src/basics/pep8.txt index 4f805f71b..38170170f 100644 --- a/src/basics/pep8.txt +++ b/src/basics/pep8.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: PEP-8 style guide + :author: Serhii Horodilov + :keywords: python, style, guide + ******************************************************************************* Style Guides: PEP8 ******************************************************************************* diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index ce5054a4a..1cf40f323 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python built-in types + :author: Serhii Horodilov + :keywords: python, basics + ******************************************************************************* Built-in Types ******************************************************************************* diff --git a/src/basics/syntax.txt b/src/basics/syntax.txt index 6f9f45432..503ebd54b 100644 --- a/src/basics/syntax.txt +++ b/src/basics/syntax.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Python syntax + :author: Serhii Horodilov + :keywords: python, basics, syntax + ******************************************************************************* Python Syntax ******************************************************************************* diff --git a/src/basics/testing.txt b/src/basics/testing.txt index 6507d155f..e4ea3f602 100644 --- a/src/basics/testing.txt +++ b/src/basics/testing.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Testing software in Python + :author: Serhii Horodilov + :keywords: python, testing, unittest, pytest + ******************************************************************************* Testing ******************************************************************************* diff --git a/src/basics/variables.txt b/src/basics/variables.txt index cc4525a03..96738f374 100644 --- a/src/basics/variables.txt +++ b/src/basics/variables.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Variables in programming + :author: Serhii Horodilov + :keywords: programming, basics, variables + ******************************************************************************* Variables ******************************************************************************* From b3c0b82f600d494bacd528f6278100b2d9b9c167 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:38:45 +0300 Subject: [PATCH 315/689] Added metadata for draft documents Signed-off-by: Serhii Horodilov --- src/deploy/index.txt | 5 +++++ src/django/index.txt | 5 +++++ src/flask/index.txt | 5 +++++ src/linux/index.txt | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/src/deploy/index.txt b/src/deploy/index.txt index 2bcaf44bc..740795f60 100644 --- a/src/deploy/index.txt +++ b/src/deploy/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Deploy Python application + :author: Serhii Horodilov + :keywords: python, deployment, index + ############################################################################### Application Deployment ############################################################################### diff --git a/src/django/index.txt b/src/django/index.txt index 2fe584b69..3c49e7f10 100644 --- a/src/django/index.txt +++ b/src/django/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Django web-framework + :author: Serhii Horodilov + :keywords: python, web, django, index + ############################################################################### Django Framework ############################################################################### diff --git a/src/flask/index.txt b/src/flask/index.txt index 607e139fa..5eeec5ca3 100644 --- a/src/flask/index.txt +++ b/src/flask/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Flask web-framework + :author: Serhii Horodilov + :keywords: python, web, flask, index + ############################################################################### Flask Framework ############################################################################### diff --git a/src/linux/index.txt b/src/linux/index.txt index 363585aa9..e1f6917b0 100644 --- a/src/linux/index.txt +++ b/src/linux/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Linux basics for Python developers + :author: Serhii Horodilov + :keywords: linux, basics, index + ############################################################################### Linux Basics ############################################################################### From 14c8e9b7fa2172c24203cb2aadf2c9a995303636 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:43:32 +0300 Subject: [PATCH 316/689] Added metadata for OOP Signed-off-by: Serhii Horodilov --- src/oop/index.txt | 5 +++++ src/oop/inheritance.txt | 5 +++++ src/oop/intro.txt | 5 +++++ src/oop/patterns.txt | 5 +++++ src/oop/solid.txt | 7 +++++++ 5 files changed, 27 insertions(+) diff --git a/src/oop/index.txt b/src/oop/index.txt index 2dba1e612..c0f491cae 100644 --- a/src/oop/index.txt +++ b/src/oop/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Object-oriented programming in Python + :author: Serhii Horodilov + :keywords: python, oop, object-oriented programming, index + ############################################################################### Object-Oriented Programming ############################################################################### diff --git a/src/oop/inheritance.txt b/src/oop/inheritance.txt index 30cded93f..1b90b6b18 100644 --- a/src/oop/inheritance.txt +++ b/src/oop/inheritance.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Inheritance in Python + :author: Serhii Horodilov + :keywords: python, inheritance, oop, object-oriented programming + ******************************************************************************* Inheritance ******************************************************************************* diff --git a/src/oop/intro.txt b/src/oop/intro.txt index fc2f9569e..7d065fa47 100644 --- a/src/oop/intro.txt +++ b/src/oop/intro.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Introduction to OOP + :author: Serhii Horodilov + :keywords: python, intro, introduction, oop, object-oriented programming + ******************************************************************************* Classes and Objects ******************************************************************************* diff --git a/src/oop/patterns.txt b/src/oop/patterns.txt index dddb5de33..bc2cdda15 100644 --- a/src/oop/patterns.txt +++ b/src/oop/patterns.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Design patterns + :author: Serhii Horodilov + :keywords: python, programming, design, patterns + ******************************************************************************* Design Patterns ******************************************************************************* diff --git a/src/oop/solid.txt b/src/oop/solid.txt index b616b5aae..107b3d668 100644 --- a/src/oop/solid.txt +++ b/src/oop/solid.txt @@ -1,3 +1,10 @@ +.. meta:: + :description: SOLID principles + :author: Serhii Horodilov + :keywords: python, solid, single, responsibility, open, closed, liskov, + substitution, interface, segregation, dependency, inversion, + oop, object-oriented programming + ******************************************************************************* SOLID Principles ******************************************************************************* From d2f0ab2dce16c5066aabd0c54fc1e7eec1f85900 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 01:47:48 +0300 Subject: [PATCH 317/689] Added metadata for RDBMS Signed-off-by: Serhii Horodilov --- src/rdbms/aggregation.txt | 5 +++++ src/rdbms/index.txt | 5 +++++ src/rdbms/normalization.txt | 5 +++++ src/rdbms/relations.txt | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index 8b5385edd..d61db96df 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Data aggregation + :author: Serhii Horodilov + :keywords: sql, db, database, data, aggregation, functions + ******************************************************************************* Data Aggregation ******************************************************************************* diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 337ec1331..ac43a8f50 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Relational databases + :author: Serhii Horodilov + :keywords: sql, db, database, intro, introduction, index + ############################################################################### Relational Database ############################################################################### diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 3affcaa67..059146a32 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Database normalization + :author: Serhii Horodilov + :keywords: sql, db, database, normalization + ******************************************************************************* Database Normalization ******************************************************************************* diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index 7f9a19d17..4c950c40f 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: This document describes the database relationships + :author: Serhii Horodilov + :keywords: sql, db, database, relationship + ******************************************************************************* Data Relationships ******************************************************************************* From 5b1c02e8f9c4f0ed3974b30e08444d10c5e4ff70 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 02:18:25 +0300 Subject: [PATCH 318/689] Updated translation files Signed-off-by: Serhii Horodilov --- src/_locales/ua/LC_MESSAGES/appx.po | 339 ++++++++------ src/_locales/ua/LC_MESSAGES/basics.po | 645 +++++++++++++++----------- src/_locales/ua/LC_MESSAGES/deploy.po | 38 ++ src/_locales/ua/LC_MESSAGES/django.po | 38 ++ src/_locales/ua/LC_MESSAGES/flask.po | 38 ++ src/_locales/ua/LC_MESSAGES/index.po | 34 ++ src/_locales/ua/LC_MESSAGES/linux.po | 38 ++ src/_locales/ua/LC_MESSAGES/oop.po | 163 ++++--- src/_locales/ua/LC_MESSAGES/rdbms.po | 379 ++++++++------- 9 files changed, 1083 insertions(+), 629 deletions(-) create mode 100644 src/_locales/ua/LC_MESSAGES/deploy.po create mode 100644 src/_locales/ua/LC_MESSAGES/django.po create mode 100644 src/_locales/ua/LC_MESSAGES/flask.po create mode 100644 src/_locales/ua/LC_MESSAGES/index.po create mode 100644 src/_locales/ua/LC_MESSAGES/linux.po diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/ua/LC_MESSAGES/appx.po index a0945f508..1595e554f 100644 --- a/src/_locales/ua/LC_MESSAGES/appx.po +++ b/src/_locales/ua/LC_MESSAGES/appx.po @@ -1,15 +1,17 @@ -# APPENDIXES TRANSLATION FILE. +# APPENDIXES TRANSLATION. +# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# SERHII HORODILOV , 2023. +# +# SERHII HORODILOV # msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-12 14:00+0300\n" -"PO-Revision-Date: 2023-04-12 14:22+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:03+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -21,6 +23,18 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" +#: ../../src/appx/blog.txt:-1 +msgid "Specification for Django blog training project" +msgstr "Специфікація навчального проекту блогу Django" + +#: ../../src/appx/blog.txt:-1 ../../src/appx/software_list.rst:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/appx/blog.txt:-1 +msgid "python, django, blog, project, training" +msgstr "python, django, blog, project, training" + #: ../../blog/docs/spec.rst:10 msgid "Blog Project Specification" msgstr "Специфікація Проекту Блогу" @@ -217,7 +231,7 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати `Http404` у випадку, якщо сутність " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." #: ../../blog/docs/spec.rst:116 @@ -369,8 +383,7 @@ msgstr "``confirm password``" #: ../../blog/docs/spec.rst:165 msgid "``username`` value should be validated against existing values" msgstr "" -"Значення \"ім'я користувача\" має перевірятися на відповідність існуючим " -"значенням" +"Значення ``username`` має перевірятися на відповідність існуючим значенням" #: ../../blog/docs/spec.rst:166 msgid "``password`` and ``confirm password`` values should match" @@ -537,11 +550,25 @@ msgstr "" msgid "Only authors can change their posts." msgstr "Тільки автори можуть змінювати свої повідомлення." -#: ../../src/appx/code_edit.txt:5 +#: ../../src/appx/code_edit.txt:-1 +msgid "Code editors and IDEs for Python" +msgstr "Редактори коду та IDE для Python" + +#: ../../src/appx/code_edit.txt:-1 ../../src/appx/conv_store.txt:-1 +#: ../../src/appx/env_path.txt:-1 ../../src/appx/precedence.txt:-1 +#: ../../src/appx/printf.txt:-1 ../../src/appx/wtk.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/code_edit.txt:-1 +msgid "python, editor, ide" +msgstr "python, editor, ide" + +#: ../../src/appx/code_edit.txt:8 msgid "Code Editors" msgstr "Редактори Коду" -#: ../../src/appx/code_edit.txt:7 +#: ../../src/appx/code_edit.txt:10 msgid "" "Writing Python using IDLE or the Python Shell is great for simple things, " "but those tools quickly turn larger programming projects into frustrating " @@ -555,6 +582,14 @@ msgstr "" "хорошого спеціального редактора коду робить кодування цікавим — але який з " "них найкращий для вас? :cite:`realpython:code-edit`" +#: ../../src/appx/conv_store.txt:-1 +msgid "Convenience store challenge" +msgstr "Завдання: продуктовий магазин" + +#: ../../src/appx/conv_store.txt:-1 +msgid "python, basics, oop, object-oriented programming" +msgstr "python, basics, oop, object-oriented programming" + #: ../../problem-sets/src/conv_store/challenge.rst:3 msgid "Convenience Store Challenge" msgstr "Convenience Store Challenge" @@ -825,7 +860,7 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Продукт`` має бути ініціалізований усіма необхідними даними, без значень " +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " "за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 @@ -1085,10 +1120,26 @@ msgstr "" msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." -#: ../../src/appx/env_path.txt:5 +#: ../../src/appx/env_path.txt:-1 +msgid "Setting up environment variables" +msgstr "Встановлення змінних середовища" + +#: ../../src/appx/env_path.txt:-1 +msgid "settings, environment, variables" +msgstr "settings, environment, variables" + +#: ../../src/appx/env_path.txt:8 msgid "Issue - System Environment PATH" msgstr "Проблема - System Environment PATH" +#: ../../src/appx/precedence.txt:-1 +msgid "Operator precedence in Python" +msgstr "Пріоритет операторів в Python" + +#: ../../src/appx/precedence.txt:-1 +msgid "python, basics, operator, precedence" +msgstr "python, basics, operator, precedence" + #: ../../src/appx/precedence.txt:8 msgid "Operator Precedence" msgstr "Пріоритет Операторів" @@ -1288,11 +1339,19 @@ msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." -#: ../../src/appx/printf.txt:7 +#: ../../src/appx/printf.txt:-1 +msgid "Formatted strings usage in Python" +msgstr "Використання форматованих рядків в Python" + +#: ../../src/appx/printf.txt:-1 +msgid "python, string, formatting" +msgstr "python, string, formatting" + +#: ../../src/appx/printf.txt:10 msgid "``printf-style`` String Formatting" msgstr "``printf-style`` Форматування рядків" -#: ../../src/appx/printf.txt:9 +#: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " "(modulo). This is also known as the string *formatting* or *interpolation* " @@ -1308,57 +1367,57 @@ msgstr "" "замінюються нулем або більше елементами *значень*. Якщо для *format* " "потрібен один аргумент, *values* може бути одним некортежним об’єктом." -#: ../../src/appx/printf.txt:16 +#: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" msgstr "Символи перетворення:" -#: ../../src/appx/printf.txt:19 +#: ../../src/appx/printf.txt:22 msgid "Flag" msgstr "Символ" -#: ../../src/appx/printf.txt:19 ../../src/appx/printf.txt:37 +#: ../../src/appx/printf.txt:22 ../../src/appx/printf.txt:40 msgid "Meaning" msgstr "Значення" -#: ../../src/appx/printf.txt:21 +#: ../../src/appx/printf.txt:24 msgid "``#``" msgstr "``#``" -#: ../../src/appx/printf.txt:21 +#: ../../src/appx/printf.txt:24 msgid "The value conversion will use the \"alternative form\"" msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" -#: ../../src/appx/printf.txt:23 +#: ../../src/appx/printf.txt:26 msgid "``0``" msgstr "``0``" -#: ../../src/appx/printf.txt:23 +#: ../../src/appx/printf.txt:26 msgid "The conversion will be zero padded for numeric values" msgstr "Перетворення буде доповнено нулем для числових значень" -#: ../../src/appx/printf.txt:25 +#: ../../src/appx/printf.txt:28 msgid "``'-'``" msgstr "``'-'``" -#: ../../src/appx/printf.txt:25 +#: ../../src/appx/printf.txt:28 msgid "" "The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" "Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" -#: ../../src/appx/printf.txt:28 +#: ../../src/appx/printf.txt:31 msgid "``' '``" msgstr "``' '``" -#: ../../src/appx/printf.txt:28 +#: ../../src/appx/printf.txt:31 msgid "(a space) A blank should be left before a positive number" msgstr "(пробіл) Перед додатним числом слід залишити пробіл" -#: ../../src/appx/printf.txt:30 +#: ../../src/appx/printf.txt:33 msgid "``'+'``" msgstr "``'+'``" -#: ../../src/appx/printf.txt:30 +#: ../../src/appx/printf.txt:33 msgid "" "A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " "a \"space\" flag)" @@ -1366,91 +1425,91 @@ msgstr "" "Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " "прапор \"пробіл\")" -#: ../../src/appx/printf.txt:34 +#: ../../src/appx/printf.txt:37 msgid "The conversion types are:" msgstr "Типи перетворення:" -#: ../../src/appx/printf.txt:37 +#: ../../src/appx/printf.txt:40 msgid "Conversion" msgstr "Перетворення" -#: ../../src/appx/printf.txt:39 +#: ../../src/appx/printf.txt:42 msgid "``'d'``" msgstr "``'d'``" -#: ../../src/appx/printf.txt:39 ../../src/appx/printf.txt:41 +#: ../../src/appx/printf.txt:42 ../../src/appx/printf.txt:44 msgid "Signed integer decimal" msgstr "Ціле десяткове число зі знаком" -#: ../../src/appx/printf.txt:41 +#: ../../src/appx/printf.txt:44 msgid "``'i'``" msgstr "``'i'``" -#: ../../src/appx/printf.txt:43 +#: ../../src/appx/printf.txt:46 msgid "``'o'``" msgstr "``'o'``" -#: ../../src/appx/printf.txt:43 +#: ../../src/appx/printf.txt:46 msgid "Signed octal value" msgstr "Вісімкове значення зі знаком" -#: ../../src/appx/printf.txt:45 +#: ../../src/appx/printf.txt:48 msgid "``'u'``" msgstr "``'u'``" -#: ../../src/appx/printf.txt:45 +#: ../../src/appx/printf.txt:48 msgid "Obsolete type - it is identical to ``'d'``" msgstr "Застарілий тип - ідентичний ``'d``" -#: ../../src/appx/printf.txt:47 +#: ../../src/appx/printf.txt:50 msgid "``'x'``" msgstr "``'x'``" -#: ../../src/appx/printf.txt:47 +#: ../../src/appx/printf.txt:50 msgid "Signed hexadecimal (lowercase)" msgstr "Шістнадцяткове число зі знаком (маленький регістр)" -#: ../../src/appx/printf.txt:49 +#: ../../src/appx/printf.txt:52 msgid "``'X'``" msgstr "``'X'``" -#: ../../src/appx/printf.txt:49 +#: ../../src/appx/printf.txt:52 msgid "Signed hexadecimal (uppercase)" msgstr "Шістнадцяткове число зі знаком (верхній регістр)" -#: ../../src/appx/printf.txt:51 +#: ../../src/appx/printf.txt:54 msgid "``'e'``" msgstr "``'e'``" -#: ../../src/appx/printf.txt:51 +#: ../../src/appx/printf.txt:54 msgid "Floating point exponential format (lowercase)" msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" -#: ../../src/appx/printf.txt:53 +#: ../../src/appx/printf.txt:56 msgid "``'E'``" msgstr "``'E'``" -#: ../../src/appx/printf.txt:53 +#: ../../src/appx/printf.txt:56 msgid "Floating point exponential format (uppercase)" msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" -#: ../../src/appx/printf.txt:55 +#: ../../src/appx/printf.txt:58 msgid "``'f'`` ``'F'``" msgstr "``'f'`` ``'F'``" -#: ../../src/appx/printf.txt:55 +#: ../../src/appx/printf.txt:58 msgid "Floating point decimal format" msgstr "Десятковий формат із плаваючою комою" -#: ../../src/appx/printf.txt:58 +#: ../../src/appx/printf.txt:61 msgid "``'g'``" msgstr "``'g'``" -#: ../../src/appx/printf.txt:61 +#: ../../src/appx/printf.txt:64 msgid "``'G'``" msgstr "``'G'``" -#: ../../src/appx/printf.txt:58 +#: ../../src/appx/printf.txt:61 msgid "" "Floating point format. Uses lowercase exponential format if exponent is less " "that -4 or not less than precision, decimal format otherwise." @@ -1459,77 +1518,85 @@ msgstr "" "формату, якщо показник степеня менший за -4 або не менший за точність, " "десятковий формат інакше." -#: ../../src/appx/printf.txt:63 +#: ../../src/appx/printf.txt:66 msgid "``'c'``" msgstr "``'c'``" -#: ../../src/appx/printf.txt:63 +#: ../../src/appx/printf.txt:66 msgid "Single character (accepts integer or single character string)" msgstr "Один символ (приймає ціле число або рядок з одним символом)" -#: ../../src/appx/printf.txt:65 +#: ../../src/appx/printf.txt:68 msgid "``'r'``" msgstr "``'r'``" -#: ../../src/appx/printf.txt:65 +#: ../../src/appx/printf.txt:68 msgid "Converts any Python object using ``repr()``" msgstr "Перетворює будь-який об’єкт Python за допомогою ``repr()``" -#: ../../src/appx/printf.txt:67 +#: ../../src/appx/printf.txt:70 msgid "``'s'``" msgstr "``'s'``" -#: ../../src/appx/printf.txt:67 +#: ../../src/appx/printf.txt:70 msgid "Converts any Python object using ``str()``" msgstr "Перетворює будь-який об’єкт Python за допомогою ``str()``" -#: ../../src/appx/printf.txt:69 +#: ../../src/appx/printf.txt:72 msgid "``'a'``" msgstr "``'a'``" -#: ../../src/appx/printf.txt:69 +#: ../../src/appx/printf.txt:72 msgid "Converts any Python object using ``ascii()``" msgstr "Перетворює будь-який об’єкт Python за допомогою ``ascii()``" -#: ../../src/appx/printf.txt:71 +#: ../../src/appx/printf.txt:74 msgid "``'%'``" msgstr "``'%'``" -#: ../../src/appx/printf.txt:71 +#: ../../src/appx/printf.txt:74 msgid "" "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." -#: ../../src/appx/software_list.md:1 +#: ../../src/appx/software_list.rst:-1 +msgid "Useful software list" +msgstr "Список корисного програмного забезпечення" + +#: ../../src/appx/software_list.rst:-1 +msgid "software" +msgstr "software" + +#: ../../src/appx/software_list.rst:7 msgid "Software List" msgstr "Список Програмного Забезпечення" -#: ../../src/appx/software_list.md:4 +#: ../../src/appx/software_list.rst:10 msgid "7zip" msgstr "7zip" -#: ../../src/appx/software_list.md:7 +#: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." msgstr "" "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." -#: ../../src/appx/software_list.md:9 +#: ../../src/appx/software_list.rst:14 msgid "" -"High compression ratio in [7z format](https://7-zip.org/7z.html) with " +"High compression ratio in `7z format `__ with " "**LZMA** and **LZMA2** compression" msgstr "" -"Високий ступінь стиснення у [форматі 7z](https://7-zip.org/7z.html) зі " +"Високий ступінь стиснення у `7z format `__ зі " "стисненням **LZMA** і **LZMA2**" -#: ../../src/appx/software_list.md:11 +#: ../../src/appx/software_list.rst:16 msgid "Supported formats:" msgstr "Підтримувані формати:" -#: ../../src/appx/software_list.md:12 +#: ../../src/appx/software_list.rst:18 msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" -#: ../../src/appx/software_list.md:13 +#: ../../src/appx/software_list.rst:19 msgid "" "Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " "HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " @@ -1539,39 +1606,39 @@ msgstr "" "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " "SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." -#: ../../src/appx/software_list.md:16 +#: ../../src/appx/software_list.rst:23 msgid "Self-extracting capability for 7z format" msgstr "Можливість саморозпакування для формату 7z" -#: ../../src/appx/software_list.md:17 +#: ../../src/appx/software_list.rst:24 msgid "Integration with Windows Shell" msgstr "Інтеграція з Windows Shell" -#: ../../src/appx/software_list.md:19 +#: ../../src/appx/software_list.rst:26 msgid "https://7-zip.org/" msgstr "https://7-zip.org/" -#: ../../src/appx/software_list.md:21 +#: ../../src/appx/software_list.rst:29 msgid "cygwin" msgstr "cygwin" -#: ../../src/appx/software_list.md:24 +#: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a [Linux distribution](https://en.wikipedia.org/" -"wiki/Linux_distribution) on Windows and a DLL (cygwin1.dll) which provides " -"substantial POSIX API functionality." +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до [дистрибутива Linux](https://en.wikipedia.org/" -"wiki/Linux_distribution) у Windows та DLL (cygwin1.dll), яка забезпечує " +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " "значний POSIX Функціонал API." -#: ../../src/appx/software_list.md:30 +#: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" msgstr "**Сygwin це не**:" -#: ../../src/appx/software_list.md:32 +#: ../../src/appx/software_list.rst:39 msgid "" "a way to run native Linux apps on Windows. You must rebuild your application " "*from source* if you want it to run on Windows." @@ -1579,51 +1646,51 @@ msgstr "" "спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " "програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." -#: ../../src/appx/software_list.md:34 +#: ../../src/appx/software_list.rst:41 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " -"like `signals`, `ptys` etc. Again, you need to build your apps *from source* " -"if you want to take advantage of Cygwin functionality." +"like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." msgstr "" "спосіб чарівним чином зробити рідні програми Windows відомими " "функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " "потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " "перевагами функціональності Cygwin." -#: ../../src/appx/software_list.md:38 +#: ../../src/appx/software_list.rst:46 msgid "https://www.cygwin.com/" msgstr "https://www.cygwin.com/" -#: ../../src/appx/software_list.md:40 -msgid "git[^cygwin-pkg]" -msgstr "git[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:49 +msgid "git [#cygwin]_" +msgstr "git [#cygwin]_" -#: ../../src/appx/software_list.md:43 +#: ../../src/appx/software_list.rst:51 msgid "" -"Git is a [free and open source](https://git-scm.com/about/free-and-open-" -"source) distributed version control system designed to handle everything " +"Git is a `free and open source `__ distributed version control system designed to handle everything " "from small to very large projects with speed and efficiency." msgstr "" -"Git — це [безкоштовна система з відкритим вихідним кодом](https://git-scm." -"com/about/free-and-open-source) розподілена система контролю версій, " +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " "призначена для швидкого та ефективного керування всіма проектами, від малих " "до дуже великих." -#: ../../src/appx/software_list.md:47 +#: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../../src/appx/software_list.md:49 +#: ../../src/appx/software_list.rst:59 msgid "Docker" msgstr "Docker" -#: ../../src/appx/software_list.md:52 +#: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" "Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " "рік." -#: ../../src/appx/software_list.md:54 +#: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " @@ -1639,15 +1706,15 @@ msgstr "" "Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " "вибір." -#: ../../src/appx/software_list.md:60 +#: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" msgstr "https://www.docker.com/" -#: ../../src/appx/software_list.md:62 -msgid "PostgreSQL[^cygwin-pkg]" -msgstr "PostgreSQL[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:73 +msgid "PostgreSQL [#cygwin]_" +msgstr "PostgreSQL [#cygwin]_" -#: ../../src/appx/software_list.md:65 +#: ../../src/appx/software_list.rst:75 msgid "" "PostgreSQL is a powerful, open source object-relational database system with " "over 35 years of active development that has earned it a strong reputation " @@ -1657,15 +1724,15 @@ msgstr "" "кодом, активна розробка якої триває понад 35 років, завдяки чому вона " "заслужила міцну репутацію надійності, надійності функцій і продуктивності." -#: ../../src/appx/software_list.md:69 +#: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" msgstr "https://www.postgresql.org/" -#: ../../src/appx/software_list.md:71 -msgid "psql[^cygwin-pkg]" -msgstr "psql[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:84 +msgid "psql [#cygwin]_" +msgstr "psql [#cygwin]_" -#: ../../src/appx/software_list.md:74 +#: ../../src/appx/software_list.rst:86 msgid "" "A terminal-based front-end to PostgreSQL. It enables you to type in queries " "interactively, issue them to PostgreSQL, and see the query results. " @@ -1681,23 +1748,23 @@ msgstr "" "подібних до оболонки, для полегшення написання сценаріїв і автоматизації " "різноманітних завдань." -#: ../../src/appx/software_list.md:80 +#: ../../src/appx/software_list.rst:93 msgid "" "On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for `postgresql-client` package." +"look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " -"знайдіть пакет `postgresql-client`." +"знайдіть пакет ``postgresql-client``." -#: ../../src/appx/software_list.md:83 +#: ../../src/appx/software_list.rst:96 msgid "https://www.postgresql.org/docs/current/app-psql.html" msgstr "https://www.postgresql.org/docs/current/app-psql.html" -#: ../../src/appx/software_list.md:85 +#: ../../src/appx/software_list.rst:99 msgid "pgAdmin" msgstr "pgAdmin" -#: ../../src/appx/software_list.md:88 +#: ../../src/appx/software_list.rst:101 msgid "" "pgAdmin is the most popular and feature rich Open Source administration and " "development platform for PostgreSQL, the most advanced Open Source database " @@ -1707,42 +1774,50 @@ msgstr "" "та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " "відкритим кодом у світі." -#: ../../src/appx/software_list.md:92 -msgid "It is a PostgreSQL client (like a `psql`), but with web based GUI." +#: ../../src/appx/software_list.rst:105 +msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як `psql`), але з графічним інтерфейсом на основі веб-" -"інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." -#: ../../src/appx/software_list.md:94 +#: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" msgstr "https://pgadmin.org/" -#: ../../src/appx/software_list.md:96 -msgid "SQLite[^cygwin-pkg]" -msgstr "SQLite[^cygwin-pkg]" +#: ../../src/appx/software_list.rst:110 +msgid "SQLite [#cygwin]_" +msgstr "SQLite [#cygwin]_" -#: ../../src/appx/software_list.md:99 +#: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a [small](https://sqlite.org/" -"footprint.html), [fast](https://sqlite.org/fasterthanfs.html), [self-" -"contained](https://sqlite.org/selfcontained.html), [high-reliability]" -"(https://sqlite.org/hirely.html), [full-featured](https://sqlite.org/fullsql." -"html), SQL database engine." +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує [маленьку](https://sqlite.org/" -"footprint.html), [швидку](https://sqlite.org/fasterthanfs.html), " -"[самодостатню]( https://sqlite.org/selfcontained.html), [висока надійність]" -"(https://sqlite.org/hirely.html), [повнофункціональний](https://sqlite.org/" -"fullsql.html) , двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." -#: ../../src/appx/software_list.md:106 +#: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" msgstr "https://sqlite.org/" -#: ../../src/appx/software_list.md:109 +#: ../../src/appx/software_list.rst:123 msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" +#: ../../src/appx/wtk.txt:-1 +msgid "Knights, thieves and wizards game project" +msgstr "Проект гри рицарі, злодії та чарівники" + +#: ../../src/appx/wtk.txt:-1 +msgid "python, game, oop, object-oriented programming" +msgstr "python, game, oop, object-oriented programming" + #: ../../problem-sets/src/wtk/challenge.rst:3 msgid "Wizards, Thieves and Knights" msgstr "Чарівники, Злодії та Рицарі" diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/ua/LC_MESSAGES/basics.po index 2391f5718..1782d6ae1 100644 --- a/src/_locales/ua/LC_MESSAGES/basics.po +++ b/src/_locales/ua/LC_MESSAGES/basics.po @@ -1,15 +1,17 @@ -# PYTHON/BASICS TRANSLATION +# PYTHON BASICS BLOCK TRANSLATION. +# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. +# # OLEKSANDR YEROMIN , 2023. # msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 18:20+0300\n" -"PO-Revision-Date: 2023-04-13 18:21+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:10+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -21,15 +23,40 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/basics/controlflow.txt:3 +#: ../../src/basics/controlflow.txt:-1 +msgid "Control flow in Python" +msgstr "Контроль потоку в Python" + +#: ../../src/basics/controlflow.txt:-1 ../../src/basics/decorators.txt:-1 +#: ../../src/basics/exceptions.txt:-1 ../../src/basics/functions.txt:-1 +#: ../../src/basics/index.txt:-1 ../../src/basics/modules.txt:-1 +#: ../../src/basics/pep8.txt:-1 ../../src/basics/stdtypes.txt:-1 +#: ../../src/basics/syntax.txt:-1 ../../src/basics/testing.txt:-1 +#: ../../src/basics/variables.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/controlflow.txt:-1 +msgid "python, basics, control, if, for, while, condition, loop" +msgstr "python, basics, control, if, for, while, condition, loop" + +#: ../../src/basics/controlflow.txt:8 msgid "Control Flow" msgstr "Керування виконанням" -#: ../../src/basics/decorators.txt:6 +#: ../../src/basics/decorators.txt:-1 +msgid "Python decorators" +msgstr "Декоратори в Python" + +#: ../../src/basics/decorators.txt:-1 +msgid "python, basics, decorators" +msgstr "python, basics, decorators" + +#: ../../src/basics/decorators.txt:11 msgid "Decorators" msgstr "Декоратори" -#: ../../src/basics/decorators.txt:8 +#: ../../src/basics/decorators.txt:13 msgid "" "Decorators provide a simple syntax for calling higher-order functions :cite:" "`realpython:decorators`." @@ -37,11 +64,11 @@ msgstr "" "Декоратори забезпечують простий синтаксис для виклику функцій вищого " "порядку :cite:`realpython:decorators`." -#: ../../src/basics/decorators.txt:13 +#: ../../src/basics/decorators.txt:18 msgid "There is some kind of misunderstanding in definitions." msgstr "Є деяке непорозуміння у визначеннях." -#: ../../src/basics/decorators.txt:15 +#: ../../src/basics/decorators.txt:20 msgid "" "**Decorator** is a function returning another function, usually applied as a " "function transformation using the ``@wrapper`` syntax :cite:`docs-python:" @@ -51,13 +78,13 @@ msgstr "" "застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" "cite:`docs-python:term-decorator`." -#: ../../src/basics/decorators.txt:19 +#: ../../src/basics/decorators.txt:24 msgid "" "However, that's no quit enough to describe it. The more complete definition " "is:" msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" -#: ../../src/basics/decorators.txt:22 +#: ../../src/basics/decorators.txt:27 msgid "" "**Decorator** is a structural design pattern that lets you attach new " "behaviors to objects by placing these objects inside special wrapper objects " @@ -67,7 +94,7 @@ msgstr "" "нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " "об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." -#: ../../src/basics/decorators.txt:26 +#: ../../src/basics/decorators.txt:31 msgid "" "Before you understand decorators, you must first understand how functions " "work." @@ -75,11 +102,11 @@ msgstr "" "Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " "функції." -#: ../../src/basics/decorators.txt:30 +#: ../../src/basics/decorators.txt:35 msgid "First-class objects" msgstr "Об'єкти першого класу" -#: ../../src/basics/decorators.txt:32 +#: ../../src/basics/decorators.txt:37 msgid "" "In Python functions are `first-class objects`_. Everything in Python is an " "object. Functions are objects too." @@ -87,11 +114,11 @@ msgstr "" "У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " "Функції також є об'єктами." -#: ../../src/basics/decorators.txt:36 +#: ../../src/basics/decorators.txt:41 msgid "Inner functions" msgstr "Внутрішні функції" -#: ../../src/basics/decorators.txt:38 +#: ../../src/basics/decorators.txt:43 msgid "" "Functions can be nested. This means it is possible to define functions " "inside other functions." @@ -99,11 +126,11 @@ msgstr "" "Функції можуть бути вкладеними. Це означає, що можна визначати функції " "всередині інших функцій." -#: ../../src/basics/decorators.txt:41 +#: ../../src/basics/decorators.txt:46 msgid "Nested functions example" msgstr "Приклад вкладених функцій" -#: ../../src/basics/decorators.txt:55 +#: ../../src/basics/decorators.txt:60 msgid "" "The order in which inner functions are defined no matters. The function " "definition does not execute the function body; this gets executed only when " @@ -119,11 +146,11 @@ msgstr "" "викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " "``NameError``." -#: ../../src/basics/decorators.txt:63 +#: ../../src/basics/decorators.txt:68 msgid "Functions are objects" msgstr "Функції є об'єктами" -#: ../../src/basics/decorators.txt:65 +#: ../../src/basics/decorators.txt:70 msgid "" "This means functions can be passed around and used as arguments, just like " "any other object (e.g. *int*, *str* etc.)." @@ -131,11 +158,11 @@ msgstr "" "Це означає, що функції можна передавати й використовувати як аргументи, як і " "будь-який інший об'єкт (наприклад, *int*, *str* тощо)." -#: ../../src/basics/decorators.txt:90 +#: ../../src/basics/decorators.txt:95 msgid "Returning functions" msgstr "Повернення функцій" -#: ../../src/basics/decorators.txt:92 +#: ../../src/basics/decorators.txt:97 msgid "" "Since function can be passed as an argument, it may be returned from another " "function." @@ -143,11 +170,11 @@ msgstr "" "Оскільки функцію можна передати як аргумент, її можна повернути з іншої " "функції." -#: ../../src/basics/decorators.txt:115 +#: ../../src/basics/decorators.txt:120 msgid "``parent`` returns functions themselves, there are no parentheses." msgstr "``parent`` повертає самі функції, тут нема дужок." -#: ../../src/basics/decorators.txt:117 +#: ../../src/basics/decorators.txt:122 msgid "" "After running the code snippet above, ``first`` refers the ``first_child`` " "function from the inner ``parent`` scope. From now it can be used to call " @@ -157,11 +184,11 @@ msgstr "" "функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " "можна використовувати для виклику цільової функції, на яку він посилається." -#: ../../src/basics/decorators.txt:129 +#: ../../src/basics/decorators.txt:134 msgid "Simple decorators" msgstr "Прості декоратори" -#: ../../src/basics/decorators.txt:131 +#: ../../src/basics/decorators.txt:136 msgid "" "Now you're ready to move on and see the magical beast that is the Python " "decorators. Let's start with a simple example:" @@ -169,11 +196,11 @@ msgstr "" "Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " "Python. Почнемо з простого прикладу:" -#: ../../src/basics/decorators.txt:149 +#: ../../src/basics/decorators.txt:154 msgid "Running function:" msgstr "Запуск функцій:" -#: ../../src/basics/decorators.txt:160 +#: ../../src/basics/decorators.txt:165 msgid "" "The common way to use decorators is to replace the original function with a " "decorated one:" @@ -181,7 +208,7 @@ msgstr "" "Поширеним способом використання декораторів є заміна оригінальної функції на " "декоровану:" -#: ../../src/basics/decorators.txt:171 +#: ../../src/basics/decorators.txt:176 msgid "" "``say_hello`` function is the reference to the ``decorator.." "wrapper``, which itself is bound to the original ``say_hello`` function. " @@ -193,7 +220,7 @@ msgstr "" "синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " "ті самі речі, що й перший приклад декоратора:" -#: ../../src/basics/decorators.txt:193 +#: ../../src/basics/decorators.txt:198 msgid "" "There is no way to *undecorate* object in Python. Once something is bound to " "the decorator's wrapper - it is decorated forever." @@ -201,7 +228,7 @@ msgstr "" "У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " "обгортки декоратора - воно прикрашене назавжди." -#: ../../src/basics/decorators.txt:196 +#: ../../src/basics/decorators.txt:201 msgid "" "A decorated function still remains a **function**. So, it can be decorated " "once more time again, and again, and again..." @@ -209,7 +236,7 @@ msgstr "" "Декорована функція все ще залишається **функцією**. Отже, його можна " "прикрашати ще раз, і ще, і ще..." -#: ../../src/basics/decorators.txt:248 +#: ../../src/basics/decorators.txt:253 msgid "" "\"Wrapper\" is the alternative nickname for the Decorator pattern that " "clearly expresses the main idea of the pattern. A wrapper is an object that " @@ -225,11 +252,11 @@ msgstr "" "результат, зробивши щось до або після того, як вона передає запит цільовому " "об'єкту." -#: ../../src/basics/decorators.txt:256 +#: ../../src/basics/decorators.txt:261 msgid "Passing arguments to the wrapper" msgstr "Передача аргументів до wrapper" -#: ../../src/basics/decorators.txt:258 +#: ../../src/basics/decorators.txt:263 msgid "" "Until now the examples use *simple* decorators. But what if the decorated " "function gets some arguments? This will cause ``TypeError`` exception that " @@ -241,7 +268,7 @@ msgstr "" "повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " "аргументи внутрішній функції ``wrapper``." -#: ../../src/basics/decorators.txt:284 +#: ../../src/basics/decorators.txt:289 msgid "" "If case you're trying to make a generic decorator, you may pass ``*args`` " "and ``**kwargs`` instead of exact arguments:" @@ -249,11 +276,11 @@ msgstr "" "Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " "``*args`` і ``**kwargs`` замість точних аргументів:" -#: ../../src/basics/decorators.txt:303 +#: ../../src/basics/decorators.txt:308 msgid "Passing arguments to decorator" msgstr "Передача аргументів декоратору" -#: ../../src/basics/decorators.txt:305 +#: ../../src/basics/decorators.txt:310 msgid "" "At last it's time to know how to pass arguments to the decorator. Here is a " "simple implementation of ``defer`` decorator which deferred the function " @@ -263,11 +290,11 @@ msgstr "" "реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " "час:" -#: ../../src/basics/decorators.txt:348 +#: ../../src/basics/decorators.txt:353 msgid "Class decorators" msgstr "Декоратори класів" -#: ../../src/basics/decorators.txt:350 +#: ../../src/basics/decorators.txt:355 msgid "" "There are some pre-defined decorators exists for usage together with " "classes. They are:" @@ -275,19 +302,19 @@ msgstr "" "Існують деякі попередньо визначені декоратори для використання разом із " "класами. Це:" -#: ../../src/basics/decorators.txt:353 +#: ../../src/basics/decorators.txt:358 msgid "``classmethod``" msgstr "``classmethod``" -#: ../../src/basics/decorators.txt:354 +#: ../../src/basics/decorators.txt:359 msgid "``staticmethod``" msgstr "``staticmethod``" -#: ../../src/basics/decorators.txt:355 +#: ../../src/basics/decorators.txt:360 msgid "``property``" msgstr "``property``" -#: ../../src/basics/decorators.txt:357 +#: ../../src/basics/decorators.txt:362 msgid "" "If you develop an intuitive understanding for their differences you'll be " "able to write object-oriented Python that communicates its intent more " @@ -299,11 +326,11 @@ msgstr "" "який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" "methods-demystified`." -#: ../../src/basics/decorators.txt:363 +#: ../../src/basics/decorators.txt:368 msgid "Class methods" msgstr "Методи класу" -#: ../../src/basics/decorators.txt:365 +#: ../../src/basics/decorators.txt:370 msgid "" "Instead of accepting a ``self`` parameter, class methods take a ``cls`` " "parameter that points to the class — and not the object instance — when the " @@ -313,7 +340,7 @@ msgstr "" "класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " "класу." -#: ../../src/basics/decorators.txt:369 +#: ../../src/basics/decorators.txt:374 msgid "" "Because the class method only has access to this ``cls`` argument, it can't " "modify object instance state. That would require access to ``self``. " @@ -325,18 +352,18 @@ msgstr "" "методи класу все ще можуть змінювати стан класу, який застосовується до всіх " "екземплярів класу." -#: ../../src/basics/decorators.txt:374 +#: ../../src/basics/decorators.txt:379 msgid "" "The common usage for ``classmethod`` is provide alternative initializers." msgstr "" "Загальним використанням ``методи класу`` є надання альтернативних " "ініціалізаторів." -#: ../../src/basics/decorators.txt:377 +#: ../../src/basics/decorators.txt:382 msgid "Static methods" msgstr "Статичні методи" -#: ../../src/basics/decorators.txt:379 +#: ../../src/basics/decorators.txt:384 msgid "" "This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " "course it's free to accept an arbitrary number of other parameters)." @@ -344,7 +371,7 @@ msgstr "" "Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " "він може приймати будь-яку кількість інших параметрів)." -#: ../../src/basics/decorators.txt:382 +#: ../../src/basics/decorators.txt:387 msgid "" "Therefore a static method can neither modify object state nor class state. " "Static methods are restricted in what data they can access - and they're " @@ -354,7 +381,7 @@ msgstr "" "Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " "і вони, перш за все, є способом простору імен ваших методів." -#: ../../src/basics/decorators.txt:386 +#: ../../src/basics/decorators.txt:391 msgid "" "It's tricky to explain ``staticmethod`` usage. Almost always you can create " "a dedicated function instead of static method. But sometimes you need to " @@ -366,11 +393,11 @@ msgstr "" "потрібно прив'язати до класу певну логіку, незалежну від самого класу або " "його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." -#: ../../src/basics/decorators.txt:392 +#: ../../src/basics/decorators.txt:397 msgid "Properties" msgstr "Властивості" -#: ../../src/basics/decorators.txt:394 +#: ../../src/basics/decorators.txt:399 msgid "" "It's a way to bind a method name to access it as an attribute. Properties " "are **read-only** by default. This means a value cannot be assigned to " @@ -380,15 +407,23 @@ msgstr "" "замовчуванням властивості доступні **лише для читання**. Це означає, що " "значення не можна призначити ``члену властивості``." -#: ../../src/basics/decorators.txt:399 +#: ../../src/basics/decorators.txt:404 msgid "Some examples" msgstr "Деякі приклади" -#: ../../src/basics/exceptions.txt:6 +#: ../../src/basics/exceptions.txt:-1 +msgid "Handling exceptions in Python" +msgstr "Опрацювання винятків в Python" + +#: ../../src/basics/exceptions.txt:-1 +msgid "python, exceptions, handling, try, except, finally" +msgstr "python, exceptions, handling, try, except, finally" + +#: ../../src/basics/exceptions.txt:11 msgid "Errors and Exceptions" msgstr "Помилки та винятки" -#: ../../src/basics/exceptions.txt:8 +#: ../../src/basics/exceptions.txt:13 msgid "" "There are (at least) two distinguishable kinds of errors: *syntax errors* " "and *exceptions* :cite:`docs-python:errors`." @@ -396,15 +431,15 @@ msgstr "" "Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" "cite:`docs-python:errors`." -#: ../../src/basics/exceptions.txt:12 +#: ../../src/basics/exceptions.txt:17 msgid "Syntax errors" msgstr "Синтаксичні помилки" -#: ../../src/basics/exceptions.txt:14 +#: ../../src/basics/exceptions.txt:19 msgid "Syntax errors are also known as parsing errors." msgstr "Синтаксичні помилки також відомі як помилки Python парсера." -#: ../../src/basics/exceptions.txt:24 +#: ../../src/basics/exceptions.txt:29 msgid "" "The parser repeats the offending line and displays a little \"arrow\" " "pointing at the earliest point in the line where the error was detected. The " @@ -414,11 +449,11 @@ msgstr "" "\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " "Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." -#: ../../src/basics/exceptions.txt:29 +#: ../../src/basics/exceptions.txt:34 msgid "Exceptions" msgstr "Винятки" -#: ../../src/basics/exceptions.txt:31 +#: ../../src/basics/exceptions.txt:36 msgid "" "Even if a statement or expression is syntactically correct, it may cause an " "error when an attempt is made to execute it. Errors detected during " @@ -430,18 +465,18 @@ msgstr "" "називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " "обробляти в програмах на Python." -#: ../../src/basics/exceptions.txt:36 +#: ../../src/basics/exceptions.txt:41 msgid "" "Exceptions come in different types, and the type is printed as part of the " "message." msgstr "" "Винятки бувають різних типів, і тип друкується як частина повідомлення." -#: ../../src/basics/exceptions.txt:39 +#: ../../src/basics/exceptions.txt:44 msgid "For example, the ``div`` function implemented as" msgstr "Наприклад, функція ``div``, реалізована як" -#: ../../src/basics/exceptions.txt:48 +#: ../../src/basics/exceptions.txt:53 msgid "" "may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " "parameter." @@ -449,30 +484,30 @@ msgstr "" "може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " "``y``." -#: ../../src/basics/exceptions.txt:51 +#: ../../src/basics/exceptions.txt:56 msgid "" "Standard exception names are built-in identifiers (not reserved keywords)." msgstr "" "Стандартні назви винятків є вбудованими ідентифікаторами (а не " "зарезервованими ключовими словами)." -#: ../../src/basics/exceptions.txt:53 +#: ../../src/basics/exceptions.txt:58 msgid "The list of `built-in exceptions`_" msgstr "Список `вбудованих винятків`_" -#: ../../src/basics/exceptions.txt:56 +#: ../../src/basics/exceptions.txt:61 msgid "Tracebacks" msgstr "Відстеження" -#: ../../src/basics/exceptions.txt:58 +#: ../../src/basics/exceptions.txt:63 msgid "\"File\" is replaced with a *dummy string* within the examples." msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." -#: ../../src/basics/exceptions.txt:60 +#: ../../src/basics/exceptions.txt:65 msgid "Let's assume the following modules structure:" msgstr "Припустимо наступну структуру модулів:" -#: ../../src/basics/exceptions.txt:68 +#: ../../src/basics/exceptions.txt:73 msgid "" "The **main** module imports a ``div`` function implemented above from the " "**func** module. The code in main is implemented as follows:" @@ -480,7 +515,7 @@ msgstr "" "Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " "**func**. Основний код реалізовано наступним чином:" -#: ../../src/basics/exceptions.txt:80 +#: ../../src/basics/exceptions.txt:85 msgid "" "While running the code with correct inputs it will work fine. But there are " "at two exceptions for this script." @@ -488,7 +523,7 @@ msgstr "" "Під час виконання коду з правильними введеннями він працюватиме нормально. " "Але для цього сценарію є два винятки." -#: ../../src/basics/exceptions.txt:83 +#: ../../src/basics/exceptions.txt:88 msgid "" "The first one is related on type conversion. While running the main script " "there is case of invalid input." @@ -496,7 +531,7 @@ msgstr "" "Перший пов'язаний з перетворенням типів. Під час виконання основного " "сценарію є випадок неправильного введення." -#: ../../src/basics/exceptions.txt:95 +#: ../../src/basics/exceptions.txt:100 msgid "" "Note the **traceback** indicates the module and the exact line of code that " "causes the exception." @@ -504,7 +539,7 @@ msgstr "" "Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " "викликає виняток." -#: ../../src/basics/exceptions.txt:98 +#: ../../src/basics/exceptions.txt:103 msgid "" "The second one exception occurs when a 0 is passed as the second parameter " "to ``div`` function. The traceback would look like:" @@ -512,18 +547,18 @@ msgstr "" "Другий виняток виникає, коли 0 передається як другий параметр функції " "``div``. Трасування виглядатиме так:" -#: ../../src/basics/exceptions.txt:112 +#: ../../src/basics/exceptions.txt:117 msgid "" "The traceback indicates all calls (top to bottom) that cause an exception." msgstr "" "Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " "виняток." -#: ../../src/basics/exceptions.txt:115 ../../src/basics/syntax.txt +#: ../../src/basics/exceptions.txt:120 ../../src/basics/syntax.txt msgid "Exception handling" msgstr "Обробка винятків" -#: ../../src/basics/exceptions.txt:117 +#: ../../src/basics/exceptions.txt:122 msgid "" "It is possible to write programs that handle selected exceptions. The " "``try`` statement is used to do that." @@ -531,11 +566,11 @@ msgstr "" "Можна писати програми, які оброблятимуть вибрані винятки. Для цього " "використовується інструкція ``try``." -#: ../../src/basics/exceptions.txt:120 +#: ../../src/basics/exceptions.txt:125 msgid "The try statement works as follows." msgstr "Інструкція try працює наступним чином." -#: ../../src/basics/exceptions.txt:122 +#: ../../src/basics/exceptions.txt:127 msgid "" "First, the try clause (the statement(s) between the try and except keywords) " "is executed." @@ -543,7 +578,7 @@ msgstr "" "Спочатку виконується речення try (вираз(и) між ключовими словами try і " "except)." -#: ../../src/basics/exceptions.txt:124 +#: ../../src/basics/exceptions.txt:129 msgid "" "If no exception occurs, the except clause is skipped and execution of the " "try statement is finished." @@ -551,7 +586,7 @@ msgstr "" "Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " "оператора try завершується." -#: ../../src/basics/exceptions.txt:126 +#: ../../src/basics/exceptions.txt:131 msgid "" "If an exception occurs during execution of the try clause, the rest of the " "clause is skipped. Then, if its type matches the exception named after the " @@ -563,7 +598,7 @@ msgstr "" "osim, виконується пропозиція, а потім виконання продовжується після блоку " "try/except." -#: ../../src/basics/exceptions.txt:130 +#: ../../src/basics/exceptions.txt:135 msgid "" "If an exception occurs which does not match the exception named in the " "except clause, it is passed on to outer try statements; if no handler is " @@ -575,7 +610,7 @@ msgstr "" "знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " "повідомленням, як показано вище." -#: ../../src/basics/exceptions.txt:147 +#: ../../src/basics/exceptions.txt:152 msgid "" "A try statement may have more than one except clause, to specify handlers " "for different exceptions." @@ -583,15 +618,15 @@ msgstr "" "Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " "різних винятків." -#: ../../src/basics/exceptions.txt:177 +#: ../../src/basics/exceptions.txt:182 msgid "Handling ALL exception" msgstr "Опрацювання усіх винятків" -#: ../../src/basics/exceptions.txt:179 +#: ../../src/basics/exceptions.txt:184 msgid "It's a bad practice to handle **all** exceptions." msgstr "Обробляти **всі** винятки – це погана практика." -#: ../../src/basics/exceptions.txt:181 +#: ../../src/basics/exceptions.txt:186 msgid "" "When indicating an ``except`` block without specifying an exception to catch " "it will work for any exception, that occurs in ``try`` block. The same is " @@ -603,7 +638,7 @@ msgstr "" "стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " "можливо сказати, який саме виняток стався." -#: ../../src/basics/exceptions.txt:186 +#: ../../src/basics/exceptions.txt:191 msgid "" "However, this scenario may work for logging an exception and raising it " "again to be handled on upper levels." @@ -611,7 +646,7 @@ msgstr "" "Проте, такий сценарій може працювати для логування винятків, після чого вони " "підійматься заново, щоб бути опрацьованими на вищих рівнях програми." -#: ../../src/basics/exceptions.txt:208 +#: ../../src/basics/exceptions.txt:213 msgid "" "All exceptions are inherited from ``Exception`` class, which is subclass of " "``BaseException``. So, you can never know what exactly goes wrong with your " @@ -621,11 +656,11 @@ msgstr "" "``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " "вашим кодом." -#: ../../src/basics/exceptions.txt:213 +#: ../../src/basics/exceptions.txt:218 msgid "``finally`` statement" msgstr "Вираз ``finally``" -#: ../../src/basics/exceptions.txt:215 +#: ../../src/basics/exceptions.txt:220 msgid "" "The ``try`` statement cannot be used itself. This will cause " "``SyntaxError``. Either ``except`` or ``finally`` block is required to be " @@ -634,7 +669,7 @@ msgstr "" "Оператор ``try`` не може бути використаний сам по собі. Це спричинить " "``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." -#: ../../src/basics/exceptions.txt:218 +#: ../../src/basics/exceptions.txt:223 msgid "" "While the ``except`` block tries to catch the exceptions if any, the " "``finally`` block will be always executed regardless of the exception occurs." @@ -642,11 +677,11 @@ msgstr "" "У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " "блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." -#: ../../src/basics/exceptions.txt:244 +#: ../../src/basics/exceptions.txt:249 msgid "``else`` statement" msgstr "Вираз ``else``" -#: ../../src/basics/exceptions.txt:246 +#: ../../src/basics/exceptions.txt:251 msgid "" "The ``try`` statement can also use ``else`` (which is optional). The " "statements within this block will be execute only in case there were no " @@ -656,11 +691,11 @@ msgstr "" "необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " "якщо під час виконання ``try`` не було викликано винятків." -#: ../../src/basics/exceptions.txt:268 +#: ../../src/basics/exceptions.txt:273 msgid "Raising exceptions" msgstr "Винятки: raising" -#: ../../src/basics/exceptions.txt:270 +#: ../../src/basics/exceptions.txt:275 msgid "" "The ``raise`` statement allows the programmer to force a specified exception " "to occur. The sole argument to raise indicates the exception to be raised. " @@ -676,7 +711,7 @@ msgstr "" "його підкласів). Якщо передано клас винятків, він буде неявно створений " "шляхом виклику його конструктора без аргументів." -#: ../../src/basics/exceptions.txt:282 +#: ../../src/basics/exceptions.txt:287 msgid "" "``raise`` statement itself will re-raise all the exceptions within the " "context. Also exceptions can be raised again from the ``except`` block. It's " @@ -687,11 +722,11 @@ msgstr "" "загальний шаблон для перехоплення винятку для реєстрації повідомлення про " "виняткову ситуацію і повторного його підняття." -#: ../../src/basics/exceptions.txt:295 +#: ../../src/basics/exceptions.txt:300 msgid "Creating custom exceptions" msgstr "Створення винятків" -#: ../../src/basics/exceptions.txt:297 +#: ../../src/basics/exceptions.txt:302 msgid "" "Programs may name their own exceptions by creating a new exception class. " "Exceptions should typically be derived from the Exception class, either " @@ -701,7 +736,7 @@ msgstr "" "Винятки зазвичай мають бути похідними від класу Exception, прямо чи " "опосередковано." -#: ../../src/basics/exceptions.txt:301 +#: ../../src/basics/exceptions.txt:306 msgid "" "Exception classes can be defined which do anything any other class can do, " "but are usually kept simple, often only offering a number of attributes that " @@ -712,7 +747,7 @@ msgstr "" "інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " "які дозволяють обробникам витягувати інформацію про помилку для винятку." -#: ../../src/basics/exceptions.txt:306 +#: ../../src/basics/exceptions.txt:311 msgid "" "Most exceptions are defined with names that end in \"Error\", similar to the " "naming of the standard exceptions." @@ -720,7 +755,7 @@ msgstr "" "Більшість винятків визначено з іменами, які закінчуються на \"Error\", " "подібно до назв стандартних винятків." -#: ../../src/basics/exceptions.txt:309 +#: ../../src/basics/exceptions.txt:314 msgid "" "Many standard modules define their own exceptions to report errors that may " "occur in functions they define." @@ -728,31 +763,71 @@ msgstr "" "Багато стандартних модулів визначають власні винятки, щоб повідомляти про " "помилки, які можуть виникнути у функціях, які вони визначають." -#: ../../src/basics/exceptions.txt:312 +#: ../../src/basics/exceptions.txt:317 msgid "User-defined exception" msgstr "Виняток, визначений користувачем" -#: ../../src/basics/functions.txt:3 ../../src/basics/syntax.txt +#: ../../src/basics/functions.txt:-1 +msgid "Python functions" +msgstr "Функції в Python" + +#: ../../src/basics/functions.txt:-1 +msgid "python, basics, functions" +msgstr "python, basics, functions" + +#: ../../src/basics/functions.txt:8 ../../src/basics/syntax.txt msgid "Functions" msgstr "Функції" -#: ../../src/basics/index.txt:3 +#: ../../src/basics/index.txt:-1 +msgid "Python course - Basics" +msgstr "Курс Python - Основи" + +#: ../../src/basics/index.txt:-1 +msgid "python, basics, index" +msgstr "python, basics, index" + +#: ../../src/basics/index.txt:8 msgid "Python Basics" msgstr "Основи Python" -#: ../../src/basics/modules.txt:3 +#: ../../src/basics/modules.txt:-1 +msgid "Modules and imports in Python" +msgstr "Модулі та імпорти в Pythons" + +#: ../../src/basics/modules.txt:-1 +msgid "python, basics, modules, import" +msgstr "python, basics, modules, import" + +#: ../../src/basics/modules.txt:8 msgid "Pythons Modules and Imports" msgstr "Модулі та імпорт Pythons" -#: ../../src/basics/pep8.txt:3 +#: ../../src/basics/pep8.txt:-1 +msgid "PEP-8 style guide" +msgstr "Керівництво по стилю PEP8" + +#: ../../src/basics/pep8.txt:-1 +msgid "python, style, guide" +msgstr "python, style, guide" + +#: ../../src/basics/pep8.txt:8 msgid "Style Guides: PEP8" msgstr "Керівництво по стилю: PEP8" -#: ../../src/basics/stdtypes.txt:3 +#: ../../src/basics/stdtypes.txt:-1 +msgid "Python built-in types" +msgstr "Вбудовані типи даних в Python" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "python, basics" +msgstr "python, basics" + +#: ../../src/basics/stdtypes.txt:8 msgid "Built-in Types" msgstr "Вбудовані типи" -#: ../../src/basics/stdtypes.txt:5 +#: ../../src/basics/stdtypes.txt:10 msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " "instances and exceptions :cite:`docs-python:stdtypes`. This section covers " @@ -764,11 +839,11 @@ msgstr "" "найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " "власних тем." -#: ../../src/basics/stdtypes.txt:11 +#: ../../src/basics/stdtypes.txt:16 msgid "Numeric types" msgstr "Числові типи" -#: ../../src/basics/stdtypes.txt:13 +#: ../../src/basics/stdtypes.txt:18 msgid "" "There are 3 distinct numeric types: *integers*, *floating point numbers*, " "and *complex numbers*. In addition, Booleans are a subtype of integers. " @@ -782,7 +857,7 @@ msgstr "" "через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " "кожна з яких є числом з плаваючою комою." -#: ../../src/basics/stdtypes.txt:19 +#: ../../src/basics/stdtypes.txt:24 msgid "" "Numbers are created by numeric literals or as the result of built-in " "functions and operators. Unadorned integer literals (including hex, octal " @@ -801,113 +876,113 @@ msgstr "" "до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " "з дійсною та уявною частинами." -#: ../../src/basics/stdtypes.txt:28 +#: ../../src/basics/stdtypes.txt:33 msgid "Supported operations" msgstr "Операції підтримки" -#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:199 +#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:204 msgid "Operation" msgstr "Операції" -#: ../../src/basics/stdtypes.txt:31 ../../src/basics/stdtypes.txt:149 -#: ../../src/basics/stdtypes.txt:199 +#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:204 msgid "Result" msgstr "Результат" -#: ../../src/basics/stdtypes.txt:33 +#: ../../src/basics/stdtypes.txt:38 msgid "``x + y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:33 +#: ../../src/basics/stdtypes.txt:38 msgid "sum of *x* and *y*" msgstr "сума *x* і *y*" -#: ../../src/basics/stdtypes.txt:35 +#: ../../src/basics/stdtypes.txt:40 msgid "``x - y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:35 +#: ../../src/basics/stdtypes.txt:40 msgid "difference of *x* and *y*" msgstr "різниця між *x* і *y*" -#: ../../src/basics/stdtypes.txt:37 +#: ../../src/basics/stdtypes.txt:42 msgid "``x * y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:37 +#: ../../src/basics/stdtypes.txt:42 msgid "product of *x* and *y*" msgstr "добуток *x* і *y*" -#: ../../src/basics/stdtypes.txt:39 +#: ../../src/basics/stdtypes.txt:44 msgid "``x / y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:39 +#: ../../src/basics/stdtypes.txt:44 msgid "quotient of *x* and *y*" msgstr "частка *x* і *y*" -#: ../../src/basics/stdtypes.txt:41 +#: ../../src/basics/stdtypes.txt:46 msgid "``x // y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:41 +#: ../../src/basics/stdtypes.txt:46 msgid "floored quotient of *x* and *y*" msgstr "цілочисельне ділення *x* і *y*" -#: ../../src/basics/stdtypes.txt:43 +#: ../../src/basics/stdtypes.txt:48 msgid "``x % y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:43 +#: ../../src/basics/stdtypes.txt:48 msgid "remainder of ``x / y``" msgstr "залишок від ділення``x / y``" -#: ../../src/basics/stdtypes.txt:45 +#: ../../src/basics/stdtypes.txt:50 msgid "``-x``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:45 +#: ../../src/basics/stdtypes.txt:50 msgid "*x* negated" msgstr "*x* від'ємне" -#: ../../src/basics/stdtypes.txt:47 +#: ../../src/basics/stdtypes.txt:52 msgid "``+x``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:47 +#: ../../src/basics/stdtypes.txt:52 msgid "*y* unchanged" msgstr "*y* без змін" -#: ../../src/basics/stdtypes.txt:49 +#: ../../src/basics/stdtypes.txt:54 msgid "``abs(x)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:49 +#: ../../src/basics/stdtypes.txt:54 msgid "absolute value or magnitude of *x*" msgstr "абсолютне значення або величина *x*" -#: ../../src/basics/stdtypes.txt:51 +#: ../../src/basics/stdtypes.txt:56 msgid "``int(x)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:51 +#: ../../src/basics/stdtypes.txt:56 msgid "*x* converted to integer" msgstr "*x* перетворено на ціле число" -#: ../../src/basics/stdtypes.txt:53 +#: ../../src/basics/stdtypes.txt:58 msgid "``float(x)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:53 +#: ../../src/basics/stdtypes.txt:58 msgid "*x* converted to floating point" msgstr "*x* перетворено на число з плаваючою комою" -#: ../../src/basics/stdtypes.txt:55 +#: ../../src/basics/stdtypes.txt:60 msgid "``complex(re, im)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:55 +#: ../../src/basics/stdtypes.txt:60 msgid "" "a complex number with real part *re*, imaginary part *im*. *im* defaults to " "zero." @@ -915,23 +990,23 @@ msgstr "" "комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " "замовчуванням на нуль." -#: ../../src/basics/stdtypes.txt:58 +#: ../../src/basics/stdtypes.txt:63 msgid "``divmod(x, y)``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:58 +#: ../../src/basics/stdtypes.txt:63 msgid "the pair ``(x // y, x % y)``" msgstr "об'єднує ``(x // y, x % y)``" -#: ../../src/basics/stdtypes.txt:60 +#: ../../src/basics/stdtypes.txt:65 msgid "``pow(x, y)`` ``x ** y``" msgstr "``x + y``" -#: ../../src/basics/stdtypes.txt:60 +#: ../../src/basics/stdtypes.txt:65 msgid "*x* to the power *y*" msgstr "*x* у степені *y*" -#: ../../src/basics/stdtypes.txt:64 +#: ../../src/basics/stdtypes.txt:69 msgid "" "``x // y`` also referred to as integer division. The resultant value is a " "whole integer, through the result's type is not necessarily int. The result " @@ -941,7 +1016,7 @@ msgstr "" "числом, через тип результату не обов'язково int. Результат завжди " "округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" -#: ../../src/basics/stdtypes.txt:69 +#: ../../src/basics/stdtypes.txt:74 msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " "optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive and " @@ -951,25 +1026,25 @@ msgstr "" "префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " "нескінченність." -#: ../../src/basics/stdtypes.txt:74 +#: ../../src/basics/stdtypes.txt:79 msgid "Code examples" msgstr "Приклади коду" -#: ../../src/basics/stdtypes.txt:76 +#: ../../src/basics/stdtypes.txt:81 msgid "Integer numbers" msgstr "Цілі числа" -#: ../../src/basics/stdtypes.txt:89 +#: ../../src/basics/stdtypes.txt:94 msgid "Floating point numbers" msgstr "Числа з плаваючою комою" -#: ../../src/basics/stdtypes.txt:104 ../../src/basics/stdtypes.txt:177 -#: ../../src/basics/stdtypes.txt:285 ../../src/basics/stdtypes.txt:294 -#: ../../src/basics/stdtypes.txt:323 +#: ../../src/basics/stdtypes.txt:109 ../../src/basics/stdtypes.txt:182 +#: ../../src/basics/stdtypes.txt:290 ../../src/basics/stdtypes.txt:299 +#: ../../src/basics/stdtypes.txt:328 msgid "Value comparisons" msgstr "Порівняння цінностей" -#: ../../src/basics/stdtypes.txt:106 +#: ../../src/basics/stdtypes.txt:111 msgid "" "Numbers of built-in numeric types can be compared within and across their " "types (with the restriction that complex numbers do not support order " @@ -980,7 +1055,7 @@ msgstr "" "обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " "залучених типів вони порівняються математично правильно без втрати точності." -#: ../../src/basics/stdtypes.txt:111 +#: ../../src/basics/stdtypes.txt:116 msgid "" "The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." "Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" @@ -990,11 +1065,11 @@ msgstr "" "спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " "є хибним." -#: ../../src/basics/stdtypes.txt:115 +#: ../../src/basics/stdtypes.txt:120 msgid "Sequence types" msgstr "Типи послідовностей" -#: ../../src/basics/stdtypes.txt:117 +#: ../../src/basics/stdtypes.txt:122 msgid "" "There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " "Additional sequence types tailored for processing of binary data and text " @@ -1004,11 +1079,11 @@ msgstr "" "Додаткові типи послідовностей, призначені для обробки двійкових даних і " "текстових рядків, описані у інших розділах." -#: ../../src/basics/stdtypes.txt:122 +#: ../../src/basics/stdtypes.txt:127 msgid "Lists" msgstr "Списки" -#: ../../src/basics/stdtypes.txt:124 +#: ../../src/basics/stdtypes.txt:129 msgid "" "Lists are mutable sequences, typically used to store collections of items. " "They may be constructed in several ways:" @@ -1017,31 +1092,31 @@ msgstr "" "зберігання колекцій елементів. Вони можуть бути побудовані кількома " "способами:" -#: ../../src/basics/stdtypes.txt:127 +#: ../../src/basics/stdtypes.txt:132 msgid "using a pair of square brackets to denote the empty list: ``[]``" msgstr "" "використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" -#: ../../src/basics/stdtypes.txt:128 +#: ../../src/basics/stdtypes.txt:133 msgid "" "using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" "використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " "b, c]``" -#: ../../src/basics/stdtypes.txt:129 +#: ../../src/basics/stdtypes.txt:134 msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" -#: ../../src/basics/stdtypes.txt:130 +#: ../../src/basics/stdtypes.txt:135 msgid "using the type constructor: ``list()`` or ``list(iterable)``" msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" -#: ../../src/basics/stdtypes.txt:133 +#: ../../src/basics/stdtypes.txt:138 msgid "Tuples" msgstr "Кортежі" -#: ../../src/basics/stdtypes.txt:135 +#: ../../src/basics/stdtypes.txt:140 msgid "" "Tuples are immutable sequences, typically used to store collections of data " "or for cases where an immutable sequence of data is needed (such as allowing " @@ -1053,34 +1128,34 @@ msgstr "" "послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " "``dict``). Вони можуть бути конструйовані декількома способами:" -#: ../../src/basics/stdtypes.txt:140 +#: ../../src/basics/stdtypes.txt:145 msgid "using a pair of parentheses to denote the empty tuple: ``()``" msgstr "" "використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" -#: ../../src/basics/stdtypes.txt:141 +#: ../../src/basics/stdtypes.txt:146 msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" "використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " "c)``" -#: ../../src/basics/stdtypes.txt:142 +#: ../../src/basics/stdtypes.txt:147 msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" -#: ../../src/basics/stdtypes.txt:143 +#: ../../src/basics/stdtypes.txt:148 msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" -#: ../../src/basics/stdtypes.txt:146 +#: ../../src/basics/stdtypes.txt:151 msgid "Common operations" msgstr "Загальні операції" -#: ../../src/basics/stdtypes.txt:151 +#: ../../src/basics/stdtypes.txt:156 msgid "``x in s`` ``x not in s``" msgstr "``x in s`` ``x not in s``" -#: ../../src/basics/stdtypes.txt:151 +#: ../../src/basics/stdtypes.txt:156 msgid "" "``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " "*x*" @@ -1088,35 +1163,35 @@ msgstr "" "``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " "*x*" -#: ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:159 msgid "``s + t``" msgstr "``s + t``" -#: ../../src/basics/stdtypes.txt:154 +#: ../../src/basics/stdtypes.txt:159 msgid "the concatenation of *s* and *t*" msgstr "конкатенація s і t" -#: ../../src/basics/stdtypes.txt:156 +#: ../../src/basics/stdtypes.txt:161 msgid "``s * n``" msgstr "``s * n``" -#: ../../src/basics/stdtypes.txt:156 +#: ../../src/basics/stdtypes.txt:161 msgid "equivalent to adding *s* to itself *n* times" msgstr "еквівалентно додаванню *s* до себе *n* разів" -#: ../../src/basics/stdtypes.txt:158 +#: ../../src/basics/stdtypes.txt:163 msgid "``s[i]``" msgstr "``s[i]``" -#: ../../src/basics/stdtypes.txt:158 +#: ../../src/basics/stdtypes.txt:163 msgid "*i*-th item of *s*, origin 0" msgstr "*i*-й елемент *s*, джерело 0" -#: ../../src/basics/stdtypes.txt:160 +#: ../../src/basics/stdtypes.txt:165 msgid "``s[i:j]`` ``s[i:j:k]``" msgstr "``s[i:j]`` ``s[i:j:k]``" -#: ../../src/basics/stdtypes.txt:160 +#: ../../src/basics/stdtypes.txt:165 msgid "" "slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " "be omitted." @@ -1124,43 +1199,43 @@ msgstr "" "фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " "3) можна опустити." -#: ../../src/basics/stdtypes.txt:163 +#: ../../src/basics/stdtypes.txt:168 msgid "``len(s)``" msgstr "``len(s)``" -#: ../../src/basics/stdtypes.txt:163 +#: ../../src/basics/stdtypes.txt:168 msgid "length of *s*" msgstr "довжина *s*" -#: ../../src/basics/stdtypes.txt:165 +#: ../../src/basics/stdtypes.txt:170 msgid "``min(s)``" msgstr "``min(s)``" -#: ../../src/basics/stdtypes.txt:165 +#: ../../src/basics/stdtypes.txt:170 msgid "smallest item of *s*" msgstr "найменший елемент *s*" -#: ../../src/basics/stdtypes.txt:167 +#: ../../src/basics/stdtypes.txt:172 msgid "``max(s)``" msgstr "``max(s)``" -#: ../../src/basics/stdtypes.txt:167 +#: ../../src/basics/stdtypes.txt:172 msgid "largest item of *s*" msgstr "найбільший елемент *s*" -#: ../../src/basics/stdtypes.txt:169 +#: ../../src/basics/stdtypes.txt:174 msgid "``s.count(x)``" msgstr "``s.count(x)``" -#: ../../src/basics/stdtypes.txt:169 +#: ../../src/basics/stdtypes.txt:174 msgid "total number of occurrences of *x* in *s*" msgstr "загальна кількість входжень *x* у *s*" -#: ../../src/basics/stdtypes.txt:171 +#: ../../src/basics/stdtypes.txt:176 msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -#: ../../src/basics/stdtypes.txt:171 +#: ../../src/basics/stdtypes.txt:176 msgid "" "index of the first occurrence of *x* in *s* at or after index *i* and before " "index *j*" @@ -1168,7 +1243,7 @@ msgstr "" "індекс першого входження *x* у *s* на або після індексу *i* та перед " "індексом *j*" -#: ../../src/basics/stdtypes.txt:179 +#: ../../src/basics/stdtypes.txt:184 msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -1180,7 +1255,7 @@ msgstr "" "типами призводить до нерівності, а впорядковане порівняння цих типів " "викликає ``TypeError``." -#: ../../src/basics/stdtypes.txt:184 +#: ../../src/basics/stdtypes.txt:189 msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " @@ -1192,7 +1267,7 @@ msgstr "" "рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " "таким чином:" -#: ../../src/basics/stdtypes.txt:189 +#: ../../src/basics/stdtypes.txt:194 msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." @@ -1201,7 +1276,7 @@ msgstr "" "мати однакову довжину, і кожна пара відповідних елементів повинна " "порівнюватися." -#: ../../src/basics/stdtypes.txt:191 +#: ../../src/basics/stdtypes.txt:196 msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " @@ -1211,98 +1286,98 @@ msgstr "" "їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " "впорядковується коротша колекція." -#: ../../src/basics/stdtypes.txt:196 +#: ../../src/basics/stdtypes.txt:201 msgid "Mutable sequence types" msgstr "Змінні типи послідовностей" -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:206 msgid "``s[i] = x``" msgstr "``s[i] = x``" -#: ../../src/basics/stdtypes.txt:201 +#: ../../src/basics/stdtypes.txt:206 msgid "item *i* of *s* is replaced by *x*" msgstr "елемент *i* з *s* замінюється на *x*" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:208 msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" -#: ../../src/basics/stdtypes.txt:203 +#: ../../src/basics/stdtypes.txt:208 msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" -#: ../../src/basics/stdtypes.txt:206 +#: ../../src/basics/stdtypes.txt:211 msgid "``del s[i:j]``" msgstr "``del s[i:j]``" -#: ../../src/basics/stdtypes.txt:206 +#: ../../src/basics/stdtypes.txt:211 msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:213 msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" -#: ../../src/basics/stdtypes.txt:208 +#: ../../src/basics/stdtypes.txt:213 msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:215 msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" -#: ../../src/basics/stdtypes.txt:210 +#: ../../src/basics/stdtypes.txt:215 msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:217 msgid "``s.append(x)``" msgstr "``s.append(x)``" -#: ../../src/basics/stdtypes.txt:212 +#: ../../src/basics/stdtypes.txt:217 msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" -#: ../../src/basics/stdtypes.txt:215 +#: ../../src/basics/stdtypes.txt:220 msgid "``s.clear()``" msgstr "``s.clear()``" -#: ../../src/basics/stdtypes.txt:215 +#: ../../src/basics/stdtypes.txt:220 msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:222 msgid "``s.copy()``" msgstr "``s.copy()``" -#: ../../src/basics/stdtypes.txt:217 +#: ../../src/basics/stdtypes.txt:222 msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:224 msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" -#: ../../src/basics/stdtypes.txt:219 +#: ../../src/basics/stdtypes.txt:224 msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" -#: ../../src/basics/stdtypes.txt:222 +#: ../../src/basics/stdtypes.txt:227 msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" -#: ../../src/basics/stdtypes.txt:222 +#: ../../src/basics/stdtypes.txt:227 msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" -#: ../../src/basics/stdtypes.txt:225 +#: ../../src/basics/stdtypes.txt:230 msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" -#: ../../src/basics/stdtypes.txt:225 +#: ../../src/basics/stdtypes.txt:230 msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -1310,39 +1385,39 @@ msgstr "" "отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " "пропущено - використовуйте останній доступний індекс)" -#: ../../src/basics/stdtypes.txt:228 +#: ../../src/basics/stdtypes.txt:233 msgid "``s.remove(x)``" msgstr "``s.remove(x)``" -#: ../../src/basics/stdtypes.txt:228 +#: ../../src/basics/stdtypes.txt:233 msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:235 msgid "``s.reverse()``" msgstr "``s.reverse()``" -#: ../../src/basics/stdtypes.txt:230 +#: ../../src/basics/stdtypes.txt:235 msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" -#: ../../src/basics/stdtypes.txt:233 +#: ../../src/basics/stdtypes.txt:238 msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" -#: ../../src/basics/stdtypes.txt:234 +#: ../../src/basics/stdtypes.txt:239 msgid "new in Python version 3.3" msgstr "нове у версії Python 3.3" -#: ../../src/basics/stdtypes.txt:237 +#: ../../src/basics/stdtypes.txt:242 msgid "Text sequence type" msgstr "Тип текстової послідовності" -#: ../../src/basics/stdtypes.txt:240 +#: ../../src/basics/stdtypes.txt:245 msgid "String methods" msgstr "Рядкові методи" -#: ../../src/basics/stdtypes.txt:242 +#: ../../src/basics/stdtypes.txt:247 msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." @@ -1350,7 +1425,7 @@ msgstr "" "Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " "методами." -#: ../../src/basics/stdtypes.txt:287 +#: ../../src/basics/stdtypes.txt:292 msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." @@ -1358,11 +1433,11 @@ msgstr "" "Рядки порівнюються лексикографічно з використанням числових кодових точок " "Unicode своїх символів." -#: ../../src/basics/stdtypes.txt:291 +#: ../../src/basics/stdtypes.txt:296 msgid "Set types" msgstr "Типи сетів" -#: ../../src/basics/stdtypes.txt:296 +#: ../../src/basics/stdtypes.txt:301 msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -1376,11 +1451,11 @@ msgstr "" "порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " "підмножини одного іншого, ані надмножини один одного)." -#: ../../src/basics/stdtypes.txt:303 +#: ../../src/basics/stdtypes.txt:308 msgid "Mapping type" msgstr "Тип відображення" -#: ../../src/basics/stdtypes.txt:305 +#: ../../src/basics/stdtypes.txt:310 msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " @@ -1391,7 +1466,7 @@ msgstr "" "відображення, *dictionary*. Якщо кількома словами, то відображення - це " "набори ключів та їхніх значень." -#: ../../src/basics/stdtypes.txt:309 +#: ../../src/basics/stdtypes.txt:314 msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " @@ -1403,15 +1478,15 @@ msgstr "" "``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " "тієї самої словникової статті." -#: ../../src/basics/stdtypes.txt:313 +#: ../../src/basics/stdtypes.txt:318 msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" -#: ../../src/basics/stdtypes.txt:315 +#: ../../src/basics/stdtypes.txt:320 msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" -#: ../../src/basics/stdtypes.txt:316 +#: ../../src/basics/stdtypes.txt:321 msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" @@ -1419,11 +1494,11 @@ msgstr "" "Використовуйте розділений комами список пар ``key: value`` з дужками: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" -#: ../../src/basics/stdtypes.txt:318 +#: ../../src/basics/stdtypes.txt:323 msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" -#: ../../src/basics/stdtypes.txt:319 +#: ../../src/basics/stdtypes.txt:324 msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -1431,7 +1506,7 @@ msgstr "" "Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" -#: ../../src/basics/stdtypes.txt:325 +#: ../../src/basics/stdtypes.txt:330 msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." @@ -1439,15 +1514,23 @@ msgstr "" "Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " "однакові пари ключ-значення." -#: ../../src/basics/stdtypes.txt:328 +#: ../../src/basics/stdtypes.txt:333 msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." -#: ../../src/basics/syntax.txt:3 +#: ../../src/basics/syntax.txt:-1 +msgid "Python syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:-1 +msgid "python, basics, syntax" +msgstr "python, basics, syntax" + +#: ../../src/basics/syntax.txt:8 msgid "Python Syntax" msgstr "Синтаксис Python" -#: ../../src/basics/syntax.txt:5 +#: ../../src/basics/syntax.txt:10 msgid "" "As a natural language like English or Ukrainian has its own rules to write " "down something, programming languages do. This makes them programming " @@ -1457,7 +1540,7 @@ msgstr "" "запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " "мовами програмування." -#: ../../src/basics/syntax.txt:9 +#: ../../src/basics/syntax.txt:14 msgid "" "A programming language syntax is the set of rules and principles that govern " "how code is written and structured in a given programming language. Syntax " @@ -1469,7 +1552,7 @@ msgstr "" "охоплює правила написання операторів, виразів, змінних, типів даних, " "керуючих структур та інших конструкцій, які складають мову." -#: ../../src/basics/syntax.txt:14 +#: ../../src/basics/syntax.txt:19 msgid "" "The syntax of a programming language defines how code is organized and " "interpreted by a compiler or interpreter. It defines the rules for writing " @@ -1481,7 +1564,7 @@ msgstr "" "написання дійсних операторів і виразів, які можуть бути зрозумілі та " "виконані системою виконання мови." -#: ../../src/basics/syntax.txt:19 +#: ../../src/basics/syntax.txt:24 msgid "" "A programming language's syntax is designed to be both readable and " "expressive, allowing programmers to write code that is easy to understand " @@ -1493,7 +1576,7 @@ msgstr "" "змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " "його зручність обслуговування та продуктивність." -#: ../../src/basics/syntax.txt:24 +#: ../../src/basics/syntax.txt:29 msgid "" "Different programming languages have different syntax, with some languages " "being more concise and expressive than others. While syntax is an important " @@ -1507,7 +1590,7 @@ msgstr "" "визначають її легкість у використанні, гнучкість і придатність для різних " "завдань програмування." -#: ../../src/basics/syntax.txt:30 +#: ../../src/basics/syntax.txt:35 msgid "" "In the case of Python, the language's syntax defines how code is written and " "structured in a way that is consistent, readable, and easy to understand. A " @@ -1525,7 +1608,7 @@ msgstr "" msgid "Indentation" msgstr "Відступ" -#: ../../src/basics/syntax.txt:37 +#: ../../src/basics/syntax.txt:42 msgid "" "Python uses whitespace, specifically indentation, to delimit blocks of code, " "such as loops, conditionals, and functions. This means that the indentation " @@ -1539,7 +1622,7 @@ msgstr "" msgid "Statement structure" msgstr "Структура коду" -#: ../../src/basics/syntax.txt:43 +#: ../../src/basics/syntax.txt:48 msgid "" "Python statements are typically written on one line, with the end of the " "line indicating the end of the statement. However, if a statement is too " @@ -1551,11 +1634,11 @@ msgstr "" "поміститися в один рядок, його можна продовжити в кількох рядках, " "використовуючи зворотні похилі риски." -#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:3 +#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:8 msgid "Variables" msgstr "Змінні" -#: ../../src/basics/syntax.txt:49 +#: ../../src/basics/syntax.txt:54 msgid "" "In Python, variables are created automatically when a value is assigned to " "them, and their type is inferred from the value. Variables can be assigned " @@ -1571,7 +1654,7 @@ msgstr "" msgid "Operators" msgstr "Оператори" -#: ../../src/basics/syntax.txt:55 +#: ../../src/basics/syntax.txt:60 msgid "" "Python supports a wide range of operators for performing arithmetic, " "comparison, and logical operations. These include arithmetic operators like " @@ -1587,7 +1670,7 @@ msgstr "" msgid "Control flow" msgstr "Контроль потоку" -#: ../../src/basics/syntax.txt:61 +#: ../../src/basics/syntax.txt:66 msgid "" "Python provides control flow statements like if, else, elif, for, and while " "to control the flow of execution in a program. These statements are used to " @@ -1598,7 +1681,7 @@ msgstr "" "для прийняття рішень, повторення коду або виконання дій на основі заданих " "умов." -#: ../../src/basics/syntax.txt:67 +#: ../../src/basics/syntax.txt:72 msgid "" "In Python, functions are defined using the def keyword and can take " "arguments and return values. The body of a function is defined using a block " @@ -1612,7 +1695,7 @@ msgstr "" msgid "Modules" msgstr "Модулі" -#: ../../src/basics/syntax.txt:72 +#: ../../src/basics/syntax.txt:77 msgid "" "Python has a large library of modules that provide pre-written code for a " "variety of tasks. Modules can be imported into a program using the import " @@ -1622,7 +1705,7 @@ msgstr "" "для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " "оператора імпорту." -#: ../../src/basics/syntax.txt:77 +#: ../../src/basics/syntax.txt:82 msgid "" "Python provides a way to handle errors and exceptions in a program using the " "try, except, else, and finally keywords. These statements allow a program to " @@ -1632,15 +1715,15 @@ msgstr "" "ключових слів try, except, else і finally. Ці оператори дозволяють програмі " "плавно відновлюватися після помилок і продовжувати виконання." -#: ../../src/basics/syntax.txt:81 +#: ../../src/basics/syntax.txt:86 msgid "In few words:" msgstr "У кількох словах:" -#: ../../src/basics/syntax.txt:83 +#: ../../src/basics/syntax.txt:88 msgid "Input/Output example script" msgstr "Приклад сценарію Input/Output" -#: ../../src/basics/syntax.txt:102 +#: ../../src/basics/syntax.txt:107 msgid "" "The code snippet above demonstrates some basics abilities of Python to " "gather data from the user, process it and print out back. Note the words " @@ -1656,7 +1739,7 @@ msgstr "" "необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " "інтерпретатор їх ігнорує." -#: ../../src/basics/syntax.txt:108 +#: ../../src/basics/syntax.txt:113 msgid "" "On the other hand each individual line is the instruction for the " "interpreter to perform some action, like gather inputs, do math, store data " @@ -1666,11 +1749,27 @@ msgstr "" "певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " "збереження даних у пам'яті тощо." -#: ../../src/basics/testing.txt:3 +#: ../../src/basics/testing.txt:-1 +msgid "Testing software in Python" +msgstr "Тестування в Python" + +#: ../../src/basics/testing.txt:-1 +msgid "python, testing, unittest, pytest" +msgstr "python, testing, unittest, pytest" + +#: ../../src/basics/testing.txt:8 msgid "Testing" msgstr "Тестування" -#: ../../src/basics/variables.txt:5 +#: ../../src/basics/variables.txt:-1 +msgid "Variables in programming" +msgstr "Змінні в програмуванні" + +#: ../../src/basics/variables.txt:-1 +msgid "programming, basics, variables" +msgstr "programming, basics, variables" + +#: ../../src/basics/variables.txt:10 msgid "" "In computer science a **variable** is a named storage location in memory " "that can hold a value (*data*). The value stored in a variable can be " @@ -1680,7 +1779,7 @@ msgstr "" "зберігати значення (дані). Значення, яке зберігається у змінній, може бути " "змінено або доступне програмою під час її виконання." -#: ../../src/basics/variables.txt:9 +#: ../../src/basics/variables.txt:14 msgid "" "In Python, variables are created dynamically once a value is assigned to " "them. This makes Python a dynamically typed language, which means that the " @@ -1693,7 +1792,7 @@ msgstr "" "змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " "оголошувати змінну перед її використанням, як у статично типізованих мовах." -#: ../../src/basics/variables.txt:14 +#: ../../src/basics/variables.txt:19 msgid "" "The ability to create variables dynamically and infer their data type makes " "Python code more concise and easier to read. However, it also requires " @@ -1705,7 +1804,7 @@ msgstr "" "пильної уваги до іменування та призначення змінних, щоб уникнути " "неочікуваної поведінки." -#: ../../src/basics/variables.txt:18 +#: ../../src/basics/variables.txt:23 msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " "variable, the portion on the left of the operator is a *variable name* and " @@ -1715,19 +1814,19 @@ msgstr "" "значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " "частина праворуч - це значення, яке призначається для неї." -#: ../../src/basics/variables.txt:22 +#: ../../src/basics/variables.txt:27 msgid "Variable assignment in Python" msgstr "Присвоєння змінної в Python" -#: ../../src/basics/variables.txt:29 +#: ../../src/basics/variables.txt:34 msgid "Variable assignment in Java" msgstr "Присвоєння змінної в Java" -#: ../../src/basics/variables.txt:37 +#: ../../src/basics/variables.txt:42 msgid "Naming" msgstr "Присвоєння назви" -#: ../../src/basics/variables.txt:39 +#: ../../src/basics/variables.txt:44 msgid "" "In Python there are several rules that describe how to name your variables. " "Some of these are requirements and cannot be ignored, others are rather " @@ -1738,33 +1837,33 @@ msgstr "" "них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " "обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" -#: ../../src/basics/variables.txt:44 +#: ../../src/basics/variables.txt:49 msgid "a language keyword (like ``pass``, ``def`` or ``class``)" msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" -#: ../../src/basics/variables.txt:45 +#: ../../src/basics/variables.txt:50 msgid "start with a number (e.g. ``123``, ``1_something``)" msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" -#: ../../src/basics/variables.txt:46 +#: ../../src/basics/variables.txt:51 msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" -#: ../../src/basics/variables.txt:47 +#: ../../src/basics/variables.txt:52 msgid "contain white spaces" msgstr "містити пробіли" -#: ../../src/basics/variables.txt:49 +#: ../../src/basics/variables.txt:54 msgid "Also here are some general recommendation on naming anything:" msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" -#: ../../src/basics/variables.txt:51 +#: ../../src/basics/variables.txt:56 msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" "не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " "42``)" -#: ../../src/basics/variables.txt:52 +#: ../../src/basics/variables.txt:57 msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" "зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" diff --git a/src/_locales/ua/LC_MESSAGES/deploy.po b/src/_locales/ua/LC_MESSAGES/deploy.po new file mode 100644 index 000000000..fb09a6345 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/deploy.po @@ -0,0 +1,38 @@ +# DEPLOYMENT BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:10+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/deploy/index.txt:-1 +msgid "Deploy Python application" +msgstr "Розгортання застосунків Python" + +#: ../../src/deploy/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/deploy/index.txt:-1 +msgid "python, deployment, index" +msgstr "python, deployment, index" + +#: ../../src/deploy/index.txt:8 +msgid "Application Deployment" +msgstr "Розгортання Застосунків" diff --git a/src/_locales/ua/LC_MESSAGES/django.po b/src/_locales/ua/LC_MESSAGES/django.po new file mode 100644 index 000000000..aa6f13549 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# DJANGO BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/django/index.txt:-1 +msgid "Django web-framework" +msgstr "Веб-фреймворк Django" + +#: ../../src/django/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/django/index.txt:-1 +msgid "python, web, django, index" +msgstr "python, web, django, index" + +#: ../../src/django/index.txt:8 +msgid "Django Framework" +msgstr "Фреймворк Django" diff --git a/src/_locales/ua/LC_MESSAGES/flask.po b/src/_locales/ua/LC_MESSAGES/flask.po new file mode 100644 index 000000000..230a47bff --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/flask.po @@ -0,0 +1,38 @@ +# FLASK BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/flask/index.txt:-1 +msgid "Flask web-framework" +msgstr "Веб-фреймворк Flask" + +#: ../../src/flask/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/flask/index.txt:-1 +msgid "python, web, flask, index" +msgstr "python, web, flask, index" + +#: ../../src/flask/index.txt:8 +msgid "Flask Framework" +msgstr "Фреймворк Flask" diff --git a/src/_locales/ua/LC_MESSAGES/index.po b/src/_locales/ua/LC_MESSAGES/index.po new file mode 100644 index 000000000..5303a5129 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/index.po @@ -0,0 +1,34 @@ +# PYTHON TRAINING COURSE TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/index.txt:21 +msgid "Additional materials" +msgstr "Додаткові матеріали" + +#: ../../src/index.txt:5 +msgid "PYTHON TRAINING COURSE" +msgstr "НАВЧАЛЬНИЙ КУРС PYTHON" + +#: ../../src/index.txt:35 +msgid "References" +msgstr "Посилання" diff --git a/src/_locales/ua/LC_MESSAGES/linux.po b/src/_locales/ua/LC_MESSAGES/linux.po new file mode 100644 index 000000000..f2e9099a4 --- /dev/null +++ b/src/_locales/ua/LC_MESSAGES/linux.po @@ -0,0 +1,38 @@ +# LINUX BLOCK TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:12+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/linux/index.txt:-1 +msgid "Linux basics for Python developers" +msgstr "Основи Linux для Python розробників" + +#: ../../src/linux/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/linux/index.txt:-1 +msgid "linux, basics, index" +msgstr "linux, basics, index" + +#: ../../src/linux/index.txt:8 +msgid "Linux Basics" +msgstr "Основи Linux" diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/ua/LC_MESSAGES/oop.po index 9ac869a81..63d9c41fc 100644 --- a/src/_locales/ua/LC_MESSAGES/oop.po +++ b/src/_locales/ua/LC_MESSAGES/oop.po @@ -1,14 +1,17 @@ -# OBJECT-ORIENTED PROGRAMMING TOPICS +# OBJECT-ORIENTED PROGRAMMING BLOCK TRANSLATION. # # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. +# +# SERHII HORODILOV +# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 15:34+0300\n" -"PO-Revision-Date: 2023-04-11 15:36+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:08+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,11 +23,25 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/oop/index.txt:3 +#: ../../src/oop/index.txt:-1 +msgid "Object-oriented programming in Python" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:-1 ../../src/oop/inheritance.txt:-1 +#: ../../src/oop/intro.txt:-1 ../../src/oop/patterns.txt:-1 +#: ../../src/oop/solid.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/index.txt:-1 +msgid "python, oop, object-oriented programming, index" +msgstr "python, oop, object-oriented programming, index" + +#: ../../src/oop/index.txt:8 msgid "Object-Oriented Programming" msgstr "Об'єктно-орієнтоване програмування" -#: ../../src/oop/index.txt:5 +#: ../../src/oop/index.txt:10 msgid "" "Object-oriented programming (OOP) is one of the biggest and most important " "subjects in all of programming. It is a method of structuring a program by " @@ -34,15 +51,31 @@ msgstr "" "найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " "шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." -#: ../../src/oop/inheritance.txt:3 +#: ../../src/oop/inheritance.txt:-1 +msgid "Inheritance in Python" +msgstr "Наслідування в Python" + +#: ../../src/oop/inheritance.txt:-1 +msgid "python, inheritance, oop, object-oriented programming" +msgstr "python, inheritance, oop, object-oriented programming" + +#: ../../src/oop/inheritance.txt:8 msgid "Inheritance" msgstr "Наслідування" -#: ../../src/oop/intro.txt:3 +#: ../../src/oop/intro.txt:-1 +msgid "Introduction to OOP" +msgstr "Введення в ООП" + +#: ../../src/oop/intro.txt:-1 +msgid "python, intro, introduction, oop, object-oriented programming" +msgstr "python, intro, introduction, oop, object-oriented programming" + +#: ../../src/oop/intro.txt:8 msgid "Classes and Objects" msgstr "Класи та Об'єкти" -#: ../../src/oop/intro.txt:5 +#: ../../src/oop/intro.txt:10 msgid "" "Conceptually, objects are like the components of a system. Think of a " "program as a factory assembly line of sorts. At each step of the assembly " @@ -54,7 +87,7 @@ msgstr "" "компонент обробляє певний матеріал, остаточно перетворюючи сировину на " "закінчений продукт." -#: ../../src/oop/intro.txt:10 +#: ../../src/oop/intro.txt:15 msgid "" "An object contains data, like the raw or preprocessed materials at each step " "on an assembly line, and behavior, like the action each assembly line " @@ -64,11 +97,11 @@ msgstr "" "кожному кроці складальної лінії, і поведінку, як-от дію, яку виконує кожен " "компонент складальної лінії." -#: ../../src/oop/intro.txt:15 +#: ../../src/oop/intro.txt:20 msgid "Paradigm of Object-Oriented Programming" msgstr "Парадигма Об'єктно-Орієнтованого Програмування" -#: ../../src/oop/intro.txt:17 +#: ../../src/oop/intro.txt:22 msgid "" "Object-oriented programming is a programming paradigm that provides a means " "of structuring programs so that properties and behaviors are bundled " @@ -78,7 +111,7 @@ msgstr "" "засоби структурування програм так, що властивості та поведінка об'єднуються " "в окремі **об'єкти**." -#: ../../src/oop/intro.txt:21 +#: ../../src/oop/intro.txt:26 msgid "" "For instance, an object could represent a person with **properties** like a " "name, age, and address and **behaviors** such as walking, talking, running. " @@ -91,7 +124,7 @@ msgstr "" "список одержувачів, тема , а також тіло та поведінку, як-от додавання " "вкладень і надсилання." -#: ../../src/oop/intro.txt:26 +#: ../../src/oop/intro.txt:31 msgid "" "Put another way, object-oriented programming is an approach for modeling " "concrete, real-world things, like cars, as well as relations between things, " @@ -105,11 +138,11 @@ msgstr "" "моделює сутності реального світу як програмні об'єкти, які мають деякі дані, " "пов'язані з ними та можуть виконувати певні функції." -#: ../../src/oop/intro.txt:34 +#: ../../src/oop/intro.txt:39 msgid "Object-Oriented Programming Concepts" msgstr "Концепції Об'єктно-Орієнтованого Програмування" -#: ../../src/oop/intro.txt:36 +#: ../../src/oop/intro.txt:41 msgid "" "So far, we can discuss the major concepts within the OOP paradigm. And they " "are:" @@ -119,7 +152,7 @@ msgstr "Поки що ми можемо обговорити основні ко msgid "**encapsulation**" msgstr "**інкапсуляція**" -#: ../../src/oop/intro.txt:41 +#: ../../src/oop/intro.txt:46 msgid "" "In OOP refers to the bundling of data with methods that operate that data, " "or restricting of direct access to some of an object's components." @@ -127,7 +160,7 @@ msgstr "" "В ООП означає об'єднання даних із методами, які обробляють ці дані, або " "обмеження прямого доступу до деяких компонентів об'єкта." -#: ../../src/oop/intro.txt:44 +#: ../../src/oop/intro.txt:49 msgid "" "Encapsulation mechanism is often confused with *hiding*. It's not actually " "that encapsulation does, but data hiding is available to us due to the " @@ -141,7 +174,7 @@ msgstr "" msgid "**inheritance**" msgstr "**наслідування**" -#: ../../src/oop/intro.txt:50 +#: ../../src/oop/intro.txt:55 msgid "" "It's a mechanism of basing an object or a class upon another object " "(prototype-based inheritance) or class (class-based inheritance), retaining " @@ -159,7 +192,7 @@ msgstr "" msgid "**polymorphism**" msgstr "**поліморфізм**" -#: ../../src/oop/intro.txt:58 +#: ../../src/oop/intro.txt:63 msgid "" "It's a provision of a single interface to entities of different types or the " "use of a single symbol to represent multiple different types. The concept is " @@ -175,7 +208,7 @@ msgstr "" msgid "**abstraction**" msgstr "**абстракція**" -#: ../../src/oop/intro.txt:65 +#: ../../src/oop/intro.txt:70 msgid "" "The process of removing or generalizing details or attributes in the study " "of objects or systems to focus attention on details of greater importance, " @@ -191,11 +224,11 @@ msgstr "" "неабстрактних об'єктів або систем дослідження є результатом процесу " "абстрагування." -#: ../../src/oop/intro.txt:73 +#: ../../src/oop/intro.txt:78 msgid "Define a Class in Python" msgstr "Визначення Классу в Python" -#: ../../src/oop/intro.txt:75 +#: ../../src/oop/intro.txt:80 msgid "" "Primitive data-structures - like numbers, strings, lists etc. - are designed " "to represent simple pieces of information, such as the cost of a product, " @@ -207,7 +240,7 @@ msgstr "" "назва роману чи чиїсь улюблені кольори. Що, якщо ви бажаєте представити " "складніші речі?" -#: ../../src/oop/intro.txt:80 +#: ../../src/oop/intro.txt:85 msgid "" "For example, let's say you want to track employees in an organization. You " "need to store some basic information about each employee. Let's start from a " @@ -219,7 +252,7 @@ msgstr "" "Давайте почнемо з самого початку та спробуємо представити окремого " "працівника як групу змінних:" -#: ../../src/oop/intro.txt:90 +#: ../../src/oop/intro.txt:95 msgid "" "This approach has number of issues. Once it's required to store information " "for more that one person, you are to create another set of variables: " @@ -233,11 +266,11 @@ msgstr "" "тому, що ці частини даних не мають жодного відношення одна до одної. Давайте " "спробуємо використати ``список`` для цієї мети:" -#: ../../src/oop/intro.txt:101 +#: ../../src/oop/intro.txt:106 msgid "There are number of issues with this approach as well." msgstr "З цим підходом також виникає ряд проблем." -#: ../../src/oop/intro.txt:103 +#: ../../src/oop/intro.txt:108 msgid "" "First, it can make larger code files more difficult to manage. If you " "reference ``serhii[0]`` several lines away from where ``serhii`` list is " @@ -249,7 +282,7 @@ msgstr "" "``serhii``, ви пам'ятаєте, що елемент з ``index 0`` - це ім'я \" \"особи? " "Звичайно, ви можете використовувати структуру ``dict``, але..." -#: ../../src/oop/intro.txt:108 +#: ../../src/oop/intro.txt:113 msgid "" "Second, it can introduce errors if not every person has the same number of " "properties." @@ -257,7 +290,7 @@ msgstr "" "По-друге, це може призвести до помилок, якщо не кожна особа має однакову " "кількість властивостей." -#: ../../src/oop/intro.txt:111 +#: ../../src/oop/intro.txt:116 msgid "" "A great way to make this type of code more manageable and more maintainable " "is to use **classes**." @@ -265,7 +298,7 @@ msgstr "" "Чудовий спосіб зробити цей тип коду більш керованим і придатним для " "обслуговування - це використання **класів**." -#: ../../src/oop/intro.txt:114 +#: ../../src/oop/intro.txt:119 msgid "" "All classes definitions in Python start with the keyword ``class``, which is " "followed by the name of the class and a colon. Any code that is indented " @@ -275,11 +308,11 @@ msgstr "" "яким йдуть ім'я класу та двокрапка. Будь-який код, який має відступ під " "визначенням класу, вважається частиною тіла класу." -#: ../../src/oop/intro.txt:124 +#: ../../src/oop/intro.txt:129 msgid "Classes vs Instances" msgstr "Класи та Екземпляри Класу" -#: ../../src/oop/intro.txt:126 +#: ../../src/oop/intro.txt:131 msgid "" "Classes are used to create user-defined data structures. As it was mentioned " "above OOP is about bundling data and behaviors. Classes define data " @@ -295,7 +328,7 @@ msgstr "" "називаються методами, які ідентифікують поведінку та дії, які об'єкт, " "створений з класу, може виконувати зі своїми даними." -#: ../../src/oop/intro.txt:142 +#: ../../src/oop/intro.txt:147 msgid "" "A class is a blueprint for how something should be defined. It doesn't " "actually contain any data. The person class above specifies that " @@ -307,7 +340,7 @@ msgstr "" "``last_name`` об'єднані в цей класу, але насправді він не містить імені " "людини." -#: ../../src/oop/intro.txt:147 +#: ../../src/oop/intro.txt:152 msgid "" "While classes are blueprints, an **instance** is an **object** that is built " "from a form has been filled out with information. Just like many people can " @@ -319,11 +352,11 @@ msgstr "" "ту саму форму своєю унікальною інформацією, багато екземплярів можуть бути " "створений з одного класу." -#: ../../src/oop/intro.txt:165 +#: ../../src/oop/intro.txt:170 msgid "Methods" msgstr "Методи" -#: ../../src/oop/intro.txt:167 +#: ../../src/oop/intro.txt:172 msgid "" "A function bundled within a class is called **method**. There are several " "ways to define a class method. For now it's needed to know, that each method " @@ -336,11 +369,11 @@ msgstr "" "спеціальний аргумент у першій позиції. Цей аргумент є посилання на реальний " "об'єкт. За домовленістю цей аргумент називається ``self``." -#: ../../src/oop/intro.txt:187 +#: ../../src/oop/intro.txt:192 msgid "Initializing Instance with Data" msgstr "Ініціалізація Екземпляру з Даними" -#: ../../src/oop/intro.txt:189 +#: ../../src/oop/intro.txt:194 msgid "" "There are several methods surrounded with double underscores " "(``__method__``) that are called **dunder methods** or **magic methods**. " @@ -353,7 +386,7 @@ msgstr "" "ці методи в майбутньому. Наразі можна використовувати лише один із цих " "спеціальних методів: ``__init__``. Він ініціалізує примірник певними даними." -#: ../../src/oop/intro.txt:223 +#: ../../src/oop/intro.txt:228 msgid "" "Note, this call definition has a property called ``programming_language`` " "defined outside of the ``__init__`` method. This property is shared across " @@ -363,11 +396,11 @@ msgstr "" "``programming_language``, визначену за межами методу ``__init__``. Ця " "властивість є спільною для всіх екземплярів класу." -#: ../../src/oop/intro.txt:228 +#: ../../src/oop/intro.txt:233 msgid "Some More Details on ``self``" msgstr "Дещо Більше про ``self``" -#: ../../src/oop/intro.txt:230 +#: ../../src/oop/intro.txt:235 msgid "" "``self`` is nothing except the convention. Instance methods will receive a " "pointer to the instance itself as the first argument. In two words: it is " @@ -385,11 +418,11 @@ msgstr "" "студента містить дані та методи, пов'язані з одним студентом. ``self`` є " "посиланням саме на цей об'єкт." -#: ../../src/oop/intro.txt:239 +#: ../../src/oop/intro.txt:244 msgid "Data Hiding" msgstr "Приховання Даних" -#: ../../src/oop/intro.txt:241 +#: ../../src/oop/intro.txt:246 msgid "" "Many programming languages has *access modifiers* implemented. The Python " "has also." @@ -397,7 +430,7 @@ msgstr "" "У багатьох мовах програмування реалізовані *модифікатори доступу*. Python " "також має." -#: ../../src/oop/intro.txt:247 +#: ../../src/oop/intro.txt:252 msgid "" "\"Private\" instance variables that cannot be accessed except from inside an " "object don't exist in Python :cite:`docs-python:private-variables`. It's " @@ -407,7 +440,7 @@ msgstr "" "зсередини об’єкта, не існують у Python :cite:`docs-python:private-" "variables`. Це реалізовано на рівні домовленності." -#: ../../src/oop/intro.txt:251 +#: ../../src/oop/intro.txt:256 msgid "" "A name prefixed with an underscore (e.g. ``_spam``) should be treated as a " "non-public part of the API (whether it is a function, a method or a data " @@ -419,7 +452,7 @@ msgstr "" "даних). Вони не повинні використовуватися поза межами самого класу та можуть " "бути змінені без попередження." -#: ../../src/oop/intro.txt:256 +#: ../../src/oop/intro.txt:261 msgid "" "Since there is a valid use case for class-private members (namely to avoid " "name clashes of names with names defined by subclasses), there is limited " @@ -435,15 +468,15 @@ msgstr "" "(наприклад, ``__spam``) текстово замінюється на ``_classname__spam``, де " "``_classname`` є поточною назвою класу з видаленням підкреслення на початку." -#: ../../src/oop/intro.txt:295 +#: ../../src/oop/intro.txt:300 msgid "Few Words about Inheritance" msgstr "Кілька Слів про Наслідування" -#: ../../src/oop/intro.txt:297 +#: ../../src/oop/intro.txt:302 msgid "Just in two words. This topic is discovered in the future articles." msgstr "Всього в двох словах. Ця тема розкривається в наступних статтях." -#: ../../src/oop/intro.txt:299 +#: ../../src/oop/intro.txt:304 msgid "" "You can derive your classes from a super class. Derived classes are called " "*sub classes* and the class used to inherit from is called *super class*. " @@ -455,15 +488,15 @@ msgstr "" "*суперкласом*. Іншими термінами є *дочірній* клас і *батьківський* клас, але " "вони не є поширеними ( це особиста думка автора)." -#: ../../src/oop/intro.txt:304 +#: ../../src/oop/intro.txt:309 msgid "Just put a super class in parenthesis two inherit from it:" msgstr "Просто помістіть суперклас у дужки, які успадковують від нього два:" -#: ../../src/oop/intro.txt:316 +#: ../../src/oop/intro.txt:321 msgid "Few Words about Polymorphism" msgstr "Кілька Слів про Поліморфізм" -#: ../../src/oop/intro.txt:318 +#: ../../src/oop/intro.txt:323 msgid "" "You've already use this. The most simple explanation is **addition " "operator**. For different types of data it would produce different types of " @@ -472,7 +505,7 @@ msgstr "" "Ви вже використовували це. Найпростішим поясненням є **оператор додавання**. " "Для різних типів даних він створюватиме різні типи виводу:" -#: ../../src/oop/intro.txt:326 +#: ../../src/oop/intro.txt:331 msgid "" "For example you may have various classes inherited from a base class, that " "provides a common interface, but each derived class may implement the method " @@ -482,11 +515,33 @@ msgstr "" "який забезпечує загальний інтерфейс, але кожен похідний клас може " "реалізовувати метод по-своєму." -#: ../../src/oop/patterns.txt:3 +#: ../../src/oop/patterns.txt:-1 +msgid "Design patterns" +msgstr "Патерни проектування" + +#: ../../src/oop/patterns.txt:-1 +msgid "python, programming, design, patterns" +msgstr "python, programming, design, patterns" + +#: ../../src/oop/patterns.txt:8 msgid "Design Patterns" msgstr "Патерни Проектування" -#: ../../src/oop/solid.txt:3 +#: ../../src/oop/solid.txt:-1 +msgid "SOLID principles" +msgstr "Принципи SOLID" + +#: ../../src/oop/solid.txt:-1 +msgid "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" +msgstr "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" + +#: ../../src/oop/solid.txt:10 msgid "SOLID Principles" msgstr "Принципи SOLID" diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/ua/LC_MESSAGES/rdbms.po index 481ee4f54..058d94f57 100644 --- a/src/_locales/ua/LC_MESSAGES/rdbms.po +++ b/src/_locales/ua/LC_MESSAGES/rdbms.po @@ -1,16 +1,18 @@ -# COURSE/RELATIONAL DATABASES TRANSLATION. +# RELATIONAL DATABASES TRANSLATION. +# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# Serhii Horodilov , 2023. +# +# SERHII HORODILOV # msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" -"POT-Creation-Date: 2023-04-08 19:28+0300\n" -"PO-Revision-Date: 2023-04-11 16:06+0300\n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:09+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -20,27 +22,40 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/rdbms/aggregation.txt:3 +#: ../../src/rdbms/aggregation.txt:-1 +msgid "Data aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:-1 ../../src/rdbms/index.txt:-1 +#: ../../src/rdbms/normalization.txt:-1 ../../src/rdbms/relations.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "sql, db, database, data, aggregation, functions" +msgstr "sql, db, database, data, aggregation, functions" + +#: ../../src/rdbms/aggregation.txt:8 msgid "Data Aggregation" msgstr "Агрегація даних" -#: ../../src/rdbms/aggregation.txt:5 +#: ../../src/rdbms/aggregation.txt:10 msgid "Here is some dummy data, that will be used as example in this section." msgstr "" "Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." -#: ../../src/rdbms/aggregation.txt:7 ../../src/rdbms/normalization.txt:1 +#: ../../src/rdbms/aggregation.txt:12 ../../src/rdbms/normalization.txt:1 msgid "product" msgstr "product" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:174 +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 msgid "id" msgstr "id" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:174 -#: ../../src/rdbms/relations.txt:249 ../../src/rdbms/relations.txt:278 -#: ../../src/rdbms/relations.txt:313 ../../src/rdbms/relations.txt:345 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:179 +#: ../../src/rdbms/relations.txt:254 ../../src/rdbms/relations.txt:283 +#: ../../src/rdbms/relations.txt:318 ../../src/rdbms/relations.txt:350 msgid "name" msgstr "name" @@ -48,19 +63,19 @@ msgstr "name" msgid "price" msgstr "price" -#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 #: ../../src/rdbms/products_table.csv:1 msgid "category" msgstr "category" -#: ../../src/rdbms/aggregation.txt:169 ../../src/rdbms/aggregation.txt:210 +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 #: ../../src/rdbms/products_table.csv:1 msgid "sold" msgstr "sold" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:157 -#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:176 +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 msgid "1" msgstr "1" @@ -72,7 +87,7 @@ msgstr "Samsung Galaxy" msgid "100000" msgstr "100000" -#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/aggregation.txt:181 ../../src/rdbms/products_table.csv:1 msgid "Phones" msgstr "Phones" @@ -81,8 +96,8 @@ msgid "500" msgstr "500" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:165 -#: ../../src/rdbms/relations.txt:178 +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 +#: ../../src/rdbms/relations.txt:183 msgid "2" msgstr "2" @@ -94,13 +109,13 @@ msgstr "iPhone 13 Pro" msgid "120000" msgstr "120000" -#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 #: ../../src/rdbms/products_table.csv:1 msgid "300" msgstr "300" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:180 +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 msgid "3" msgstr "3" @@ -112,7 +127,7 @@ msgstr "MacBook Pro" msgid "350000" msgstr "350000" -#: ../../src/rdbms/aggregation.txt:175 ../../src/rdbms/aggregation.txt:214 +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 #: ../../src/rdbms/products_table.csv:1 msgid "Laptops" msgstr "Laptops" @@ -122,7 +137,7 @@ msgid "100" msgstr "100" #: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:159 +#: ../../src/rdbms/relations.txt:164 msgid "4" msgstr "4" @@ -138,7 +153,7 @@ msgstr "150000" msgid "200" msgstr "200" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:161 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:166 msgid "5" msgstr "5" @@ -150,16 +165,16 @@ msgstr "HP Printer" msgid "20000" msgstr "20000" -#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/products_table.csv:1 msgid "Printers" msgstr "Printers" -#: ../../src/rdbms/aggregation.txt:172 ../../src/rdbms/aggregation.txt:176 +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/aggregation.txt:181 #: ../../src/rdbms/products_table.csv:1 msgid "800" msgstr "800" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:163 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:168 msgid "6" msgstr "6" @@ -171,17 +186,17 @@ msgstr "Dell Monitor" msgid "50000" msgstr "50000" -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 #: ../../src/rdbms/products_table.csv:1 msgid "Monitors" msgstr "Monitors" -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:213 +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 #: ../../src/rdbms/products_table.csv:1 msgid "400" msgstr "400" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:165 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:170 msgid "7" msgstr "7" @@ -193,17 +208,17 @@ msgstr "Sony Headphones" msgid "30000" msgstr "30000" -#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 #: ../../src/rdbms/products_table.csv:1 msgid "Audio" msgstr "Audio" -#: ../../src/rdbms/aggregation.txt:171 ../../src/rdbms/aggregation.txt:212 +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 #: ../../src/rdbms/products_table.csv:1 msgid "0" msgstr "0" -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:167 +#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:172 msgid "8" msgstr "8" @@ -227,7 +242,7 @@ msgstr "Xbox Series X" msgid "60000" msgstr "60000" -#: ../../src/rdbms/aggregation.txt:173 ../../src/rdbms/products_table.csv:1 +#: ../../src/rdbms/aggregation.txt:178 ../../src/rdbms/products_table.csv:1 msgid "Gaming" msgstr "Gaming" @@ -251,25 +266,25 @@ msgstr "55000" msgid "350" msgstr "350" -#: ../../src/rdbms/aggregation.txt:14 +#: ../../src/rdbms/aggregation.txt:19 msgid "The same dataset is available as:" msgstr "The same dataset is available as:" -#: ../../src/rdbms/aggregation.txt:16 +#: ../../src/rdbms/aggregation.txt:21 msgid ":download:`csv file <./products_table.csv>`" msgstr ":download:`csv file <./products_table.csv>`" -#: ../../src/rdbms/aggregation.txt:17 +#: ../../src/rdbms/aggregation.txt:22 msgid "" ":download:`postgres dump file `" msgstr "" ":download:`postgres dump file `" -#: ../../src/rdbms/aggregation.txt:20 +#: ../../src/rdbms/aggregation.txt:25 msgid "Aggregate functions" msgstr "Агрегуючі функції" -#: ../../src/rdbms/aggregation.txt:22 +#: ../../src/rdbms/aggregation.txt:27 msgid "" "*Aggregate functions* compute a single result from a set of input values. " "Various RDBMS implement various built-in aggregate functions. In this " @@ -279,11 +294,11 @@ msgstr "" "Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " "розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." -#: ../../src/rdbms/aggregation.txt:29 +#: ../../src/rdbms/aggregation.txt:34 msgid "Count" msgstr "Підрахунок" -#: ../../src/rdbms/aggregation.txt:31 +#: ../../src/rdbms/aggregation.txt:36 msgid "" "The ``count(field)`` function returns a count of the number of times that " "``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " @@ -293,11 +308,11 @@ msgstr "" "``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " "кількість рядків у групі." -#: ../../src/rdbms/aggregation.txt:47 +#: ../../src/rdbms/aggregation.txt:52 msgid "Maximum value" msgstr "Максимальне значення" -#: ../../src/rdbms/aggregation.txt:49 +#: ../../src/rdbms/aggregation.txt:54 msgid "" "The ``max()`` aggregate function returns the maximum value of all values in " "the group. The maximum value is the value that would be returned last in an " @@ -309,11 +324,11 @@ msgstr "" "ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " "і лише якщо в групі немає значень, відмінних від NULL." -#: ../../src/rdbms/aggregation.txt:66 +#: ../../src/rdbms/aggregation.txt:71 msgid "Minimum value" msgstr "Мінімальне значення" -#: ../../src/rdbms/aggregation.txt:68 +#: ../../src/rdbms/aggregation.txt:73 msgid "" "The ``min()`` aggregate function returns the minimum non-NULL value of all " "values in the group. The minimum value is the first non-NULL value that " @@ -325,11 +340,11 @@ msgstr "" "з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " "якщо в групі немає значень, відмінних від NULL." -#: ../../src/rdbms/aggregation.txt:85 +#: ../../src/rdbms/aggregation.txt:90 msgid "Average value" msgstr "Середнє значення" -#: ../../src/rdbms/aggregation.txt:87 +#: ../../src/rdbms/aggregation.txt:92 msgid "" "The ``avg()`` function returns the average value of all non-NULL inputs " "within a group. String and BLOB values that do not look like numbers are " @@ -343,11 +358,11 @@ msgstr "" "один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " "є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." -#: ../../src/rdbms/aggregation.txt:105 +#: ../../src/rdbms/aggregation.txt:110 msgid "Sum of values" msgstr "Сума значень" -#: ../../src/rdbms/aggregation.txt:107 +#: ../../src/rdbms/aggregation.txt:112 msgid "" "The ``sum()`` aggregate functions return the sum of all non-NULL values in " "the group. If there are no non-NULL input rows then function returns " @@ -356,7 +371,7 @@ msgstr "" "Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " "NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." -#: ../../src/rdbms/aggregation.txt:112 +#: ../../src/rdbms/aggregation.txt:117 msgid "" "NULL is not normally a helpful result for the sum of no rows but the SQL " "standard requires it." @@ -364,7 +379,7 @@ msgstr "" "NULL зазвичай не є корисним результатом для суми відсутності рядків, але " "стандарт SQL вимагає цього." -#: ../../src/rdbms/aggregation.txt:115 +#: ../../src/rdbms/aggregation.txt:120 msgid "" "SQLite implements ``total`` aggregate function, that is similar to ``sum``, " "but returns ``0.0`` (always floating point) if there are no non-NULL input " @@ -374,11 +389,11 @@ msgstr "" "повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " "відмінних від NULL." -#: ../../src/rdbms/aggregation.txt:130 +#: ../../src/rdbms/aggregation.txt:135 msgid "Grouping data" msgstr "Групування даних" -#: ../../src/rdbms/aggregation.txt:132 +#: ../../src/rdbms/aggregation.txt:137 msgid "" "Getting some aggregated values is not very helpful itself. Most cases " "require to group outputs in some specific manner." @@ -386,7 +401,7 @@ msgstr "" "Отримання деяких агрегованих значень не є дуже корисним саме по собі. " "Більшість випадків вимагають згрупувати виходи певним чином." -#: ../../src/rdbms/aggregation.txt:135 +#: ../../src/rdbms/aggregation.txt:140 msgid "" "For example, if the task is to count number of registered categories it is " "simple to solve as:" @@ -394,7 +409,7 @@ msgstr "" "Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " "категорій, його просто вирішити так:" -#: ../../src/rdbms/aggregation.txt:148 +#: ../../src/rdbms/aggregation.txt:153 msgid "" "But in case, the task is to count **sold** items for each category, this " "becomes impossible to solve without grouping items. ``GROUP BY`` clause " @@ -405,15 +420,15 @@ msgstr "" "``GROUP BY`` надає можливість групувати рядки на основі певного значення " "поля(ів)." -#: ../../src/rdbms/aggregation.txt:152 +#: ../../src/rdbms/aggregation.txt:157 msgid "General syntax is:" msgstr "Загальний синтаксис:" -#: ../../src/rdbms/aggregation.txt:173 +#: ../../src/rdbms/aggregation.txt:178 msgid "600" msgstr "600" -#: ../../src/rdbms/aggregation.txt:179 +#: ../../src/rdbms/aggregation.txt:184 msgid "" "If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " "clause, then each of the expressions specified as part of the GROUP BY " @@ -439,11 +454,11 @@ msgstr "" "бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " "можуть бути сукупними виразами." -#: ../../src/rdbms/aggregation.txt:192 +#: ../../src/rdbms/aggregation.txt:197 msgid "HAVING clause" msgstr "Вираз HAVING" -#: ../../src/rdbms/aggregation.txt:194 +#: ../../src/rdbms/aggregation.txt:199 msgid "" "But what, if the task is to filter categories, that have less than 500 sold " "items in it? ``WHERE`` clause will be useless, cause it's evaluated before " @@ -455,7 +470,7 @@ msgstr "" "перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " "вибрано фільтр." -#: ../../src/rdbms/aggregation.txt:217 +#: ../../src/rdbms/aggregation.txt:222 msgid "" "If a ``HAVING`` clause is specified, it is evaluated once for each group of " "rows as a boolean expression. If the result of evaluating the HAVING clause " @@ -467,7 +482,7 @@ msgstr "" "хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " "обчислюється в усіх рядках у групі." -#: ../../src/rdbms/aggregation.txt:222 +#: ../../src/rdbms/aggregation.txt:227 msgid "" "If a HAVING clause is a non-aggregate expression, it is evaluated with " "respect to an arbitrarily selected row from the group. The HAVING expression " @@ -477,11 +492,19 @@ msgstr "" "вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " "агрегатні функції, яких немає в результат." -#: ../../src/rdbms/index.txt:3 +#: ../../src/rdbms/index.txt:-1 +msgid "Relational databases" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:-1 +msgid "sql, db, database, intro, introduction, index" +msgstr "sql, db, database, intro, introduction, index" + +#: ../../src/rdbms/index.txt:8 msgid "Relational Database" msgstr "Реляційні бази даних" -#: ../../src/rdbms/index.txt:5 +#: ../../src/rdbms/index.txt:10 msgid "" ":abbr:`RDBMS (Relational Database Management System)` is a type of software " "that helps users to create, update, manage, and access relational databases. " @@ -496,7 +519,7 @@ msgstr "" "стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " "конкретний екземпляр цих даних." -#: ../../src/rdbms/index.txt:11 +#: ../../src/rdbms/index.txt:16 msgid "" "RDBMS allow users to interact with the database using :abbr:`SQL (Structured " "Query Language)`, which is a standard language for managing and manipulating " @@ -510,7 +533,7 @@ msgstr "" "різноманітність операцій з базою даних, включаючи додавання, оновлення та " "видалення даних, а також отримання даних на основі певних критеріїв." -#: ../../src/rdbms/index.txt:17 +#: ../../src/rdbms/index.txt:22 msgid "" "RDBMS also provide a range of features to ensure data integrity, such as " "enforcing data constraints, supporting transactions, and providing backup " @@ -526,11 +549,19 @@ msgstr "" "створення та модифікації таблиць і представлень, а також інструменти " "моніторингу для оптимізації продуктивності бази даних." -#: ../../src/rdbms/normalization.txt:3 +#: ../../src/rdbms/normalization.txt:-1 +msgid "Database normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "sql, db, database, normalization" +msgstr "sql, db, database, normalization" + +#: ../../src/rdbms/normalization.txt:8 msgid "Database Normalization" msgstr "Нормалізація баз даних" -#: ../../src/rdbms/normalization.txt:5 +#: ../../src/rdbms/normalization.txt:10 msgid "" "Normalization is a process of organizing data in a database so that it is " "free from redundancy and dependency. It helps to eliminate data " @@ -546,7 +577,7 @@ msgstr "" "таким чином, щоб уникнути дублювання даних, надмірності даних і " "неузгодженості даних." -#: ../../src/rdbms/normalization.txt:11 +#: ../../src/rdbms/normalization.txt:16 msgid "" "There are several normal forms, each building on the previous one, which " "guide us in the normalization process. The most commonly used normal forms " @@ -555,7 +586,7 @@ msgstr "" "Існує кілька нормальних форм, кожна з яких будується на попередній, які " "скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" -#: ../../src/rdbms/normalization.txt:14 +#: ../../src/rdbms/normalization.txt:19 msgid "" "**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " "values. There should be no repeating groups or arrays of data in a table." @@ -564,7 +595,7 @@ msgstr "" "(неподільні) значення. У таблиці не повинно бути повторюваних груп або " "масивів даних." -#: ../../src/rdbms/normalization.txt:17 +#: ../../src/rdbms/normalization.txt:22 msgid "" "**Second Normal Form (2NF)**: Each non-key column should be functionally " "dependent on the entire primary key. In other words, every column in a table " @@ -576,7 +607,7 @@ msgstr "" "таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " "інших неключових стовпців." -#: ../../src/rdbms/normalization.txt:21 +#: ../../src/rdbms/normalization.txt:26 msgid "" "**Third Normal Form (3NF)**: All non-key columns should be dependent only on " "the primary key and not on any other non-key columns. This eliminates " @@ -586,7 +617,7 @@ msgstr "" "первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " "транзитивні залежності." -#: ../../src/rdbms/normalization.txt:25 +#: ../../src/rdbms/normalization.txt:30 msgid "" "Normalization reduces data redundancy and dependency, making the database " "more efficient, flexible, and scalable. It also helps in maintaining data " @@ -598,11 +629,11 @@ msgstr "" "узгодженість і точність даних, а також гарантує належну обробку оновлень і " "видалень." -#: ../../src/rdbms/normalization.txt:31 +#: ../../src/rdbms/normalization.txt:36 msgid "First normal form (1NF)" msgstr "Перша нормальна форма (1NF)" -#: ../../src/rdbms/normalization.txt:33 +#: ../../src/rdbms/normalization.txt:38 msgid "" "It's easier to understand normalization via examples. Let's start with some " "dummy orders data." @@ -610,7 +641,7 @@ msgstr "" "Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " "про замовлення." -#: ../../src/rdbms/normalization.txt:36 +#: ../../src/rdbms/normalization.txt:41 msgid "Initial data" msgstr "Початкові дані" @@ -630,8 +661,8 @@ msgstr "quantity" msgid "total" msgstr "total" -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:180 -#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:363 +#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:185 +#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:368 msgid "John Doe" msgstr "John Doe" @@ -663,7 +694,7 @@ msgstr "Banana" msgid "25" msgstr "25" -#: ../../src/rdbms/normalization.txt:43 +#: ../../src/rdbms/normalization.txt:48 msgid "" "This table violates 1NF, since its columns contain multiple values. To bring " "this to 1NF all data within the table are to be atomic." @@ -671,7 +702,7 @@ msgstr "" "Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " "привести це до 1NF, усі дані в таблиці мають бути атомарними." -#: ../../src/rdbms/normalization.txt:46 +#: ../../src/rdbms/normalization.txt:51 msgid "1NF applied" msgstr "Застосовано 1NF" @@ -691,15 +722,15 @@ msgstr "50" msgid "150" msgstr "150" -#: ../../src/rdbms/normalization.txt:54 +#: ../../src/rdbms/normalization.txt:59 msgid "From now each peace of data is represented as atomic value." msgstr "Відтепер кожна частина даних представлена як атомарне значення." -#: ../../src/rdbms/normalization.txt:57 +#: ../../src/rdbms/normalization.txt:62 msgid "Second normal form (2NF)" msgstr "Друга нормальна форма (2NF)" -#: ../../src/rdbms/normalization.txt:59 +#: ../../src/rdbms/normalization.txt:64 msgid "" "The table above is in 1NF, but ``item price`` is dependent on the *item* " "entity itself and have low cohesion to *orders*. To bring it into 2NF a " @@ -713,7 +744,7 @@ msgstr "" "Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " "одною за допомогою зовнішнього ключа." -#: ../../src/rdbms/normalization.txt:65 ../../src/rdbms/normalization.txt:107 +#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 msgid "``order`` table" msgstr "таблиця ``order``" @@ -721,11 +752,11 @@ msgstr "таблиця ``order``" msgid "product_id" msgstr "product_id" -#: ../../src/rdbms/normalization.txt:73 +#: ../../src/rdbms/normalization.txt:78 msgid "``product`` table" msgstr "таблиця ``product``" -#: ../../src/rdbms/normalization.txt:98 +#: ../../src/rdbms/normalization.txt:103 msgid "" "``total`` field is also removed, since now it can be calculated as product " "of ``product.price`` and ``order.quantity``." @@ -733,11 +764,11 @@ msgstr "" "Поле ``total`` також видалено, оскільки тепер його можна обчислити як " "добуток ``product.price`` і ``order.quantity``." -#: ../../src/rdbms/normalization.txt:102 +#: ../../src/rdbms/normalization.txt:107 msgid "Third normal form (3NF)" msgstr "3-тя нормальна форма (3NF)" -#: ../../src/rdbms/normalization.txt:104 +#: ../../src/rdbms/normalization.txt:109 msgid "" "At last it's time to remove a transitive functional dependency. Customer's " "name is not actually dependent on a product, but on a person, who places an " @@ -751,19 +782,27 @@ msgstr "" msgid "customer_id" msgstr "customer_id" -#: ../../src/rdbms/normalization.txt:115 +#: ../../src/rdbms/normalization.txt:120 msgid "``customer`` table" msgstr "таблиця ``customer``" -#: ../../src/rdbms/relations.txt:3 +#: ../../src/rdbms/relations.txt:-1 +msgid "This document describes the database relationships" +msgstr "Цей документ описує відносини в базах даних" + +#: ../../src/rdbms/relations.txt:-1 +msgid "sql, db, database, relationship" +msgstr "sql, db, database, relationship" + +#: ../../src/rdbms/relations.txt:8 msgid "Data Relationships" msgstr "Зв'язки даних" -#: ../../src/rdbms/relations.txt:5 +#: ../../src/rdbms/relations.txt:10 msgid "It's time to talk about **data relations**." msgstr "Настав час поговорити про **відносини даних**." -#: ../../src/rdbms/relations.txt:7 +#: ../../src/rdbms/relations.txt:12 msgid "" "For example your database contains two tables: ``weather`` and ``city``. The " "diagram below demonstrates the overall data structure:" @@ -771,7 +810,7 @@ msgstr "" "Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " "Діаграма нижче демонструє загальну структуру даних:" -#: ../../src/rdbms/relations.txt:25 +#: ../../src/rdbms/relations.txt:30 msgid "" "Consider the following problem: you want to make sure no one can insert a " "record into ``weather`` without a matching entry in ``city`` table. This is " @@ -789,16 +828,16 @@ msgstr "" "потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " "і дуже незручно." -#: ../../src/rdbms/relations.txt:47 +#: ../../src/rdbms/relations.txt:52 msgid "" "This declaration creates a relationship between two (or even more) tables." msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." -#: ../../src/rdbms/relations.txt:50 +#: ../../src/rdbms/relations.txt:55 msgid "Foreign key (FK)" msgstr "Зовнішній ключ (FK)" -#: ../../src/rdbms/relations.txt:52 +#: ../../src/rdbms/relations.txt:57 msgid "" "So far, you have knowledge about **primary** keys. The **foreign** key is a " "column, that *references* some another table. In common, it's a reference to " @@ -812,14 +851,14 @@ msgstr "" "обробляє лише цілісність даних, не обов'язково, щоб значення FK було " "відмінним від NULL." -#: ../../src/rdbms/relations.txt:58 +#: ../../src/rdbms/relations.txt:63 msgid "" "The relation's properties are described by CONSTRAINTS and the database's " "structure." msgstr "" "Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." -#: ../../src/rdbms/relations.txt:61 +#: ../../src/rdbms/relations.txt:66 msgid "" "For example, modifying declaration with ``NOT NULL`` constraint grants that " "each record within a table has a matching one entity in another table." @@ -827,19 +866,19 @@ msgstr "" "Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " "запис у таблиці має відповідну сутність в іншій таблиці." -#: ../../src/rdbms/relations.txt:71 +#: ../../src/rdbms/relations.txt:76 msgid "This brings us to various relationship models." msgstr "Це підводить нас до різних моделей відносин." -#: ../../src/rdbms/relations.txt:74 +#: ../../src/rdbms/relations.txt:79 msgid "One-to-many relationship (1-to-N)" msgstr "Зв'язок один-до-багатьох (1-до-N)" -#: ../../src/rdbms/relations.txt:76 +#: ../../src/rdbms/relations.txt:81 msgid "This is the most common relationship." msgstr "Це найпоширеніший зв'язок." -#: ../../src/rdbms/relations.txt:78 +#: ../../src/rdbms/relations.txt:83 msgid "" "For the example above there are no limitations on temperature measurements " "in a specified city. So, a single city may has 0 or N related records in " @@ -849,7 +888,7 @@ msgstr "" "визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " "таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." -#: ../../src/rdbms/relations.txt:82 +#: ../../src/rdbms/relations.txt:87 msgid "" "Another example is employees and office buildings they work in. Some big " "company may have multiple offices and employee across the globe. Multiple " @@ -862,11 +901,11 @@ msgstr "" "одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " "одночасно." -#: ../../src/rdbms/relations.txt:105 +#: ../../src/rdbms/relations.txt:110 msgid "One-to-one relationship (1-to-1)" msgstr "One-to-one relationship (1-to-1)" -#: ../../src/rdbms/relations.txt:107 +#: ../../src/rdbms/relations.txt:112 msgid "" "``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " "and only one matching record. Back to the example with employees. Multiple " @@ -879,11 +918,11 @@ msgstr "" "розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " "одну робочу станцію одночасно." -#: ../../src/rdbms/relations.txt:118 +#: ../../src/rdbms/relations.txt:123 msgid "Many-to-many relationship (N-to-N)" msgstr "Зв'язок багато-до-багатьох (N-до-N)" -#: ../../src/rdbms/relations.txt:120 +#: ../../src/rdbms/relations.txt:125 msgid "" "These relationships require additional table. A good example may be a " "*project role*. There are many of them in a production team. And some " @@ -895,11 +934,11 @@ msgstr "" "призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " "також одна людина може бути розробником і тестувальником одночасно." -#: ../../src/rdbms/relations.txt:133 +#: ../../src/rdbms/relations.txt:138 msgid "Joining data" msgstr "Об'єднання даних" -#: ../../src/rdbms/relations.txt:135 +#: ../../src/rdbms/relations.txt:140 msgid "" "``JOIN`` is used to *join* data fetched from multiple related tables. To " "build a valid query you are to set the tables to join and parameter to use " @@ -909,11 +948,11 @@ msgstr "" "пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " "таблиці для об'єднання та параметр, який використовується для цієї операції." -#: ../../src/rdbms/relations.txt:139 +#: ../../src/rdbms/relations.txt:144 msgid "Common syntax is:" msgstr "Загальний синтаксис:" -#: ../../src/rdbms/relations.txt:145 +#: ../../src/rdbms/relations.txt:150 msgid "" "There are various join types available. Here are is some dummy data to " "demonstrate their purpose." @@ -921,97 +960,97 @@ msgstr "" "Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " "їх призначення." -#: ../../src/rdbms/relations.txt:148 +#: ../../src/rdbms/relations.txt:153 msgid "poem" msgstr "poem" -#: ../../src/rdbms/relations.txt:151 ../../src/rdbms/relations.txt:249 -#: ../../src/rdbms/relations.txt:278 ../../src/rdbms/relations.txt:313 -#: ../../src/rdbms/relations.txt:345 +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 +#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 +#: ../../src/rdbms/relations.txt:350 msgid "title" msgstr "title" -#: ../../src/rdbms/relations.txt:151 +#: ../../src/rdbms/relations.txt:156 msgid "author_id" msgstr "author_id" -#: ../../src/rdbms/relations.txt:153 ../../src/rdbms/relations.txt:251 -#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:315 -#: ../../src/rdbms/relations.txt:347 +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:352 msgid "On the Field of Battle" msgstr "On the Field of Battle" -#: ../../src/rdbms/relations.txt:155 ../../src/rdbms/relations.txt:253 -#: ../../src/rdbms/relations.txt:282 ../../src/rdbms/relations.txt:317 -#: ../../src/rdbms/relations.txt:349 +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:354 msgid "Moses" msgstr "Moses" -#: ../../src/rdbms/relations.txt:157 ../../src/rdbms/relations.txt:255 -#: ../../src/rdbms/relations.txt:284 ../../src/rdbms/relations.txt:319 -#: ../../src/rdbms/relations.txt:351 +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 +#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 +#: ../../src/rdbms/relations.txt:356 msgid "The Forest Song" msgstr "The Forest Song" -#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:286 -#: ../../src/rdbms/relations.txt:353 +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:358 msgid "In the Catacombs" msgstr "In the Catacombs" -#: ../../src/rdbms/relations.txt:159 ../../src/rdbms/relations.txt:163 -#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:286 -#: ../../src/rdbms/relations.txt:290 ../../src/rdbms/relations.txt:294 -#: ../../src/rdbms/relations.txt:325 ../../src/rdbms/relations.txt:353 -#: ../../src/rdbms/relations.txt:357 ../../src/rdbms/relations.txt:361 -#: ../../src/rdbms/relations.txt:363 +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 +#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 +#: ../../src/rdbms/relations.txt:368 msgid "null" msgstr "null" -#: ../../src/rdbms/relations.txt:161 ../../src/rdbms/relations.txt:257 -#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:321 -#: ../../src/rdbms/relations.txt:355 +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:360 msgid "The Singing Stones" msgstr "The Singing Stones" -#: ../../src/rdbms/relations.txt:163 ../../src/rdbms/relations.txt:290 -#: ../../src/rdbms/relations.txt:357 +#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 +#: ../../src/rdbms/relations.txt:362 msgid "Ancient Fairy Tales" msgstr "Ancient Fairy Tales" -#: ../../src/rdbms/relations.txt:165 ../../src/rdbms/relations.txt:259 -#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:323 -#: ../../src/rdbms/relations.txt:359 +#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 +#: ../../src/rdbms/relations.txt:364 msgid "My Thoughts" msgstr "My Thoughts" -#: ../../src/rdbms/relations.txt:167 ../../src/rdbms/relations.txt:294 -#: ../../src/rdbms/relations.txt:361 +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:366 msgid "To Shevchenko" msgstr "To Shevchenko" -#: ../../src/rdbms/relations.txt:171 +#: ../../src/rdbms/relations.txt:176 msgid "author" msgstr "author" -#: ../../src/rdbms/relations.txt:176 ../../src/rdbms/relations.txt:251 -#: ../../src/rdbms/relations.txt:255 ../../src/rdbms/relations.txt:257 -#: ../../src/rdbms/relations.txt:280 ../../src/rdbms/relations.txt:284 -#: ../../src/rdbms/relations.txt:288 ../../src/rdbms/relations.txt:315 -#: ../../src/rdbms/relations.txt:319 ../../src/rdbms/relations.txt:321 -#: ../../src/rdbms/relations.txt:347 ../../src/rdbms/relations.txt:351 -#: ../../src/rdbms/relations.txt:355 +#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 +#: ../../src/rdbms/relations.txt:360 msgid "Larysa Kosach" msgstr "Larysa Kosach" -#: ../../src/rdbms/relations.txt:178 ../../src/rdbms/relations.txt:253 -#: ../../src/rdbms/relations.txt:259 ../../src/rdbms/relations.txt:282 -#: ../../src/rdbms/relations.txt:292 ../../src/rdbms/relations.txt:317 -#: ../../src/rdbms/relations.txt:323 ../../src/rdbms/relations.txt:349 -#: ../../src/rdbms/relations.txt:359 +#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 +#: ../../src/rdbms/relations.txt:364 msgid "Ivan Franko" msgstr "Ivan Franko" -#: ../../src/rdbms/relations.txt:212 +#: ../../src/rdbms/relations.txt:217 msgid "Join types" msgstr "Join types" @@ -1019,7 +1058,7 @@ msgstr "Join types" msgid "Cross join" msgstr "Cross join" -#: ../../src/rdbms/relations.txt:220 +#: ../../src/rdbms/relations.txt:225 msgid "" "For every possible combination of rows from T1 and T2 (i.e., a Cartesian " "product), the joined table will contain a row consisting of all columns in " @@ -1035,7 +1074,7 @@ msgstr "" msgid "Qualified joins" msgstr "Qualified joins" -#: ../../src/rdbms/relations.txt:231 +#: ../../src/rdbms/relations.txt:236 msgid "" "The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " "the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." @@ -1043,11 +1082,11 @@ msgstr "" "Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " "типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." -#: ../../src/rdbms/relations.txt:236 +#: ../../src/rdbms/relations.txt:241 msgid "INNER JOIN" msgstr "INNER JOIN" -#: ../../src/rdbms/relations.txt:238 +#: ../../src/rdbms/relations.txt:243 msgid "" "For each row R1 of T1, the joined table has a row for each row in T2 that " "satisfies the join condition with R1." @@ -1055,15 +1094,15 @@ msgstr "" "Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " "який задовольняє умову об'єднання з R1." -#: ../../src/rdbms/relations.txt:241 +#: ../../src/rdbms/relations.txt:246 msgid "Inner join" msgstr "Inner join" -#: ../../src/rdbms/relations.txt:263 +#: ../../src/rdbms/relations.txt:268 msgid "LEFT OUTER JOIN" msgstr "LEFT OUTER JOIN" -#: ../../src/rdbms/relations.txt:265 +#: ../../src/rdbms/relations.txt:270 msgid "" "First, an inner join is performed. Then, for each row in T1 that does not " "satisfy the join condition with any row in T2, a joined row is added with " @@ -1075,15 +1114,15 @@ msgstr "" "об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " "об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." -#: ../../src/rdbms/relations.txt:270 +#: ../../src/rdbms/relations.txt:275 msgid "Left join" msgstr "Left join" -#: ../../src/rdbms/relations.txt:298 +#: ../../src/rdbms/relations.txt:303 msgid "RIGHT OUTER JOIN" msgstr "RIGHT OUTER JOIN" -#: ../../src/rdbms/relations.txt:300 +#: ../../src/rdbms/relations.txt:305 msgid "" "First, an inner join is performed. Then, for each row in T2 that does not " "satisfy the join condition with any row in T1, a joined row is added with " @@ -1096,15 +1135,15 @@ msgstr "" "лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " "в T2." -#: ../../src/rdbms/relations.txt:305 +#: ../../src/rdbms/relations.txt:310 msgid "Right join" msgstr "Right join" -#: ../../src/rdbms/relations.txt:329 +#: ../../src/rdbms/relations.txt:334 msgid "FULL OUTER JOIN" msgstr "FULL OUTER JOIN" -#: ../../src/rdbms/relations.txt:331 +#: ../../src/rdbms/relations.txt:336 msgid "" "First, an inner join is performed. Then, for each row in T1 that does not " "satisfy the join condition with any row in T2, a joined row is added with " @@ -1118,6 +1157,6 @@ msgstr "" "рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " "додається об'єднаний рядок із нульовими значеннями в стовпцях T1." -#: ../../src/rdbms/relations.txt:337 +#: ../../src/rdbms/relations.txt:342 msgid "Full join" msgstr "Full join" From 9627de44ed64e21e751de2b8e1d6a1a734cfad85 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 02:48:28 +0300 Subject: [PATCH 319/689] Change locale name - fixed #45 --- .github/workflows/deploy_pages.yml | 2 +- Makefile | 4 ++-- src/_locales/{ua => uk}/LC_MESSAGES/appx.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/basics.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/deploy.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/django.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/flask.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/index.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/linux.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/oop.po | 0 src/_locales/{ua => uk}/LC_MESSAGES/rdbms.po | 0 11 files changed, 3 insertions(+), 3 deletions(-) rename src/_locales/{ua => uk}/LC_MESSAGES/appx.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/basics.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/deploy.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/django.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/flask.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/index.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/linux.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/oop.po (100%) rename src/_locales/{ua => uk}/LC_MESSAGES/rdbms.po (100%) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 93ebaa607..22b778ab0 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -41,7 +41,7 @@ jobs: - name: Build documents run: | LANGUAGE=en make html - LANGUAGE=ua make html + LANGUAGE=uk make html - name: Setup Pages uses: actions/configure-pages@v2 - name: Upload artifact diff --git a/Makefile b/Makefile index c833158a2..efdbef95a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ SPHINX_SRC = src SPHINX_CONFIG = $(SPHINX_SRC)/conf.py # Internationalization -SPHINXINTL_LANGUAGE ?= ua +SPHINXINTL_LANGUAGE ?= uk LANGUAGE ?= en # Sphinx build directories @@ -20,7 +20,7 @@ SPHINX_BUILD = sphinx-build -q -D language=$(LANGUAGE) # Makefile targets all : clean @make LANGUAGE=en html - @make LANGUAGE=ua html + @make LANGUAGE=uk html clean : @echo "Cleaning existing builds at $(_SPHINX_OUT_BASE)" diff --git a/src/_locales/ua/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/appx.po rename to src/_locales/uk/LC_MESSAGES/appx.po diff --git a/src/_locales/ua/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/basics.po rename to src/_locales/uk/LC_MESSAGES/basics.po diff --git a/src/_locales/ua/LC_MESSAGES/deploy.po b/src/_locales/uk/LC_MESSAGES/deploy.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/deploy.po rename to src/_locales/uk/LC_MESSAGES/deploy.po diff --git a/src/_locales/ua/LC_MESSAGES/django.po b/src/_locales/uk/LC_MESSAGES/django.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/django.po rename to src/_locales/uk/LC_MESSAGES/django.po diff --git a/src/_locales/ua/LC_MESSAGES/flask.po b/src/_locales/uk/LC_MESSAGES/flask.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/flask.po rename to src/_locales/uk/LC_MESSAGES/flask.po diff --git a/src/_locales/ua/LC_MESSAGES/index.po b/src/_locales/uk/LC_MESSAGES/index.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/index.po rename to src/_locales/uk/LC_MESSAGES/index.po diff --git a/src/_locales/ua/LC_MESSAGES/linux.po b/src/_locales/uk/LC_MESSAGES/linux.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/linux.po rename to src/_locales/uk/LC_MESSAGES/linux.po diff --git a/src/_locales/ua/LC_MESSAGES/oop.po b/src/_locales/uk/LC_MESSAGES/oop.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/oop.po rename to src/_locales/uk/LC_MESSAGES/oop.po diff --git a/src/_locales/ua/LC_MESSAGES/rdbms.po b/src/_locales/uk/LC_MESSAGES/rdbms.po similarity index 100% rename from src/_locales/ua/LC_MESSAGES/rdbms.po rename to src/_locales/uk/LC_MESSAGES/rdbms.po From 0ccea144017c508cb9f98b1485375c833c618b90 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 20:50:00 +0300 Subject: [PATCH 320/689] Changed link to Ukrainian version in index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 7ce3f3ce1..7e33dcaca 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@

    Course Materials

    English version
  • - Ukrainian version + Ukrainian version
  • From 0c26cb021b3a3a2aa262f553acd172243088cbe2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 15 Apr 2023 12:30:36 +0300 Subject: [PATCH 321/689] Installed 'copybutton' extension Updated project dependencies. Fixed appendixes for PDF output. Signed-off-by: Serhii Horodilov --- poetry.lock | 47 +++++++++++++++++++++++++++++++++-------------- pyproject.toml | 1 + requirements.txt | 9 +++++---- src/conf.py | 3 +++ 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7a858d484..56e0b0c69 100644 --- a/poetry.lock +++ b/poetry.lock @@ -186,14 +186,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.1.0" +version = "6.3.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, - {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, + {file = "importlib_metadata-6.3.0-py3-none-any.whl", hash = "sha256:8f8bd2af397cf33bd344d35cfe7f489219b7d14fc79a3f854b75b8417e9226b0"}, + {file = "importlib_metadata-6.3.0.tar.gz", hash = "sha256:23c2bcae4762dfb0bbe072d358faec24957901d75b6c4ab11172c0c982532402"}, ] [package.dependencies] @@ -383,14 +383,14 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "packaging" -version = "23.0" +version = "23.1" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -431,14 +431,14 @@ pybtex = ">=0.16" [[package]] name = "pygments" -version = "2.14.0" +version = "2.15.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, + {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, ] [package.extras] @@ -518,14 +518,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "67.6.0" +version = "67.6.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.6.0-py3-none-any.whl", hash = "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2"}, - {file = "setuptools-67.6.0.tar.gz", hash = "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077"}, + {file = "setuptools-67.6.1-py3-none-any.whl", hash = "sha256:e728ca814a823bf7bf60162daf9db95b93d532948c4c0bea762ce62f60189078"}, + {file = "setuptools-67.6.1.tar.gz", hash = "sha256:257de92a9d50a60b8e22abfcbb771571fde0dbf3ec234463212027a4eeecbe9a"}, ] [package.extras] @@ -593,6 +593,25 @@ docs = ["sphinxcontrib-websupport"] lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] test = ["cython", "html5lib", "pytest (>=4.6)"] +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, + {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, +] + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] + [[package]] name = "sphinx-intl" version = "2.1.0" @@ -811,4 +830,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "1a2e7b2d16a856baa85023359e142ff950911a5a26e41614c462053ddca4a8dd" +content-hash = "76de98805112ca4ea0dbf697b2c3dd421f99252b68f71bfc69353cefe367ef2e" diff --git a/pyproject.toml b/pyproject.toml index 7fb533276..9ec47e4ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ sphinx-rtd-theme = "^1.2.0" myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" sphinxcontrib-mermaid = "^0.8.1" +sphinx-copybutton = "^0.5.2" [tool.poetry.dev-dependencies] diff --git a/requirements.txt b/requirements.txt index 1cb4a09e6..4f32b5241 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_pla docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.4 ; python_version >= "3.9" and python_version < "4" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.1.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==6.3.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" @@ -15,15 +15,16 @@ markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" -packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" +packaging==23.1 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" -pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.15.0 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" requests==2.28.2 ; python_version >= "3.9" and python_version < "4" -setuptools==67.6.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==67.6.1 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-rtd-theme==1.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" diff --git a/src/conf.py b/src/conf.py index 8155e8f22..62e443e70 100644 --- a/src/conf.py +++ b/src/conf.py @@ -26,6 +26,7 @@ "sphinxcontrib.mermaid", "sphinx_rtd_theme", "myst_parser", + "sphinx_copybutton", ] source_suffix = { ".txt": "restructuredtext", @@ -55,6 +56,7 @@ (master_doc, latex_doc, project, authors, "manual", False), ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), + ("appx/blog", "DjangoBlog.tex", project, authors, "howto", False), ] latex_appendices = [ "appx/software_list", @@ -63,5 +65,6 @@ "appx/precedence", "appx/printf", "appx/conv_store", + "appx/wtk", "appx/blog", ] From 913bd43e6d890fcee09930355a684d6b49d4d84a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 15 Apr 2023 14:28:39 +0300 Subject: [PATCH 322/689] Added node packages to project dependencies Deps: - mermaid-cli Dev. deps: - csso-cli - sass Signed-off-by: Serhii Horodilov --- .gitignore | 3 + package-lock.json | 1257 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 11 + src/conf.py | 3 + 4 files changed, 1274 insertions(+) create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index 3ce2145a2..64088ba20 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ /venv/ /env/ +# node packages +/node_modules/ + # ide configs /.vscode/ /.idea/ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..73fdf982f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1257 @@ +{ + "name": "python-course", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "python-course", + "dependencies": { + "@mermaid-js/mermaid-cli": "^10.1.0" + }, + "devDependencies": { + "csso-cli": "^4.0.2", + "sass": "^1.62.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.1.0.tgz", + "integrity": "sha512-O75bbknW9xe1KYpD0Zgjfa81oH4pjPdAPmR4miXBKTmoqPhQMzbbecCJJmJFLpa1D8UaSBr2lNgKoagXEzNT8Q==", + "dependencies": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "puppeteer": "^19.0.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^14.13 || >=16.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/puppeteer": { + "version": "19.9.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.9.0.tgz", + "integrity": "sha512-JDx8WwGlkdQYTaa3OMYDF+uFWimiwNnacg5FGEC5J6+VxDsLK30wHKU/Db2LqEhtAoIu4RwS+BRH4zRPlCsFpA==", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.4.1", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.9.0" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.1.tgz", + "integrity": "sha512-4IICvy1McAkT/HyNZHIs7sp8ngBX1dmO0TPQ+FWq9ATQMqI8p+Ulm5A3kS2wYDh5HDHHkYrrETOu6rlj64VuTw==", + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@puppeteer/browsers/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/@puppeteer/browsers/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chromium-bidi": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", + "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/clap": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/css-tree": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso-cli": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso-cli/-/csso-cli-4.0.2.tgz", + "integrity": "sha512-p/VipA45w8EmS8Lv6wGtE+UdsbFlqUBGhL9FCTGKxd5dC07mtg3BbZaMzMh0X+oIl2JUGR/mPx5YzuNnTM2a3w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "clap": "^3.1.1", + "csso": "^5.0.4", + "source-map-js": "^1.0.2" + }, + "bin": { + "csso": "bin/csso" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/mdn-data": { + "version": "2.0.28", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.9.0.tgz", + "integrity": "sha512-IJYfCE0oFpi5dTvNFqOwo8Dey6zzx7hANy7z6K2bjpCux9oPOSOIubq40awNhaHlfi8soYtgU4qabnzMXB7xBQ==", + "dependencies": { + "@puppeteer/browsers": "0.4.1", + "chromium-bidi": "0.4.6", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/sass": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz", + "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..44d87d0a8 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "python-course", + "private": true, + "dependencies": { + "@mermaid-js/mermaid-cli": "^10.1.0" + }, + "devDependencies": { + "csso-cli": "^4.0.2", + "sass": "^1.62.0" + } +} diff --git a/src/conf.py b/src/conf.py index 62e443e70..20e018eb2 100644 --- a/src/conf.py +++ b/src/conf.py @@ -41,6 +41,9 @@ bibtex_bibfiles = ["refs.bib"] bibtex_reference_style = "label" +# TODO: configure options for mermaid output for pdf +# mermaid-js/mermaid-cli is added to project's dependencies + # options for internationalization language = "en" locale_dirs = ["_locales"] From 5e32a150394c1ee16d7cd1fcf5928696ca9bddf6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 04:09:32 +0300 Subject: [PATCH 323/689] Updated submodules --- blog | 2 +- problem-sets | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blog b/blog index 111fe1623..158718694 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 111fe162309264de92ecf0cde4262ee2fcc9acf2 +Subproject commit 15871869482148ac845c412b62c518380e216c93 diff --git a/problem-sets b/problem-sets index 8864d69c0..0dffa6dcf 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 8864d69c093a8a5e4ccee1b847253342905832a0 +Subproject commit 0dffa6dcf7801dc7150c0a0496b5816f71ebff42 From 46789924ae307136083ca7e4a0579f353663c33a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 04:42:50 +0300 Subject: [PATCH 324/689] Updated "blog spec" translation Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/appx.po | 442 ++++++++++++++++------------ 1 file changed, 250 insertions(+), 192 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 1595e554f..6552c8f23 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:03+0300\n" +"POT-Creation-Date: 2023-04-21 04:34+0300\n" +"PO-Revision-Date: 2023-04-21 04:41+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -168,266 +166,272 @@ msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:56 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" - -#: ../../blog/docs/spec.rst:58 -msgid "You are to implement data models for the blog site." -msgstr "Ви повинні реалізувати моделі даних для сайту блогу." +#: ../../blog/docs/spec.rst:62 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.rst:60 -msgid "The ``auth.User`` will be used as ``user`` model." -msgstr "``auth.User`` використовуватиметься як модель ``user``." +#: ../../blog/docs/spec.rst:64 +msgid "" +"It’s time to work with data representations. You’re to add HTML template to " +"the blog site project." +msgstr "" +"Настав час попрацювати з представленнями даних. Ви повинні додати шаблон " +"HTML до проекту сайту блогу." -#: ../../blog/docs/spec.rst:62 +#: ../../blog/docs/spec.rst:67 msgid "" -"``post.slug`` value should be autogenerated when a record is created or " -"updated and follow the pattern:" +"Create \"templates\" folder in the project's root. This is the place to keep " +"your base templates. Make sure this path is included to the ``TEMPLATES`` " +"object in settings file." msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або " -"оновлення запису та слідувати шаблону:" +"Створіть папку \"templates\" в корені проекту. Це місце для зберігання ваших " +"базових шаблонів. Переконайтеся, що цей шлях включено до об'єкта " +"``TEMPLATES`` у файлі налаштувань." -#: ../../blog/docs/spec.rst:69 +#: ../../blog/docs/spec.rst:73 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value " -"should be ``True`` by default." +"There is no need to implement functional for forms for now. Just render " +"them. There is no need to pass any context to ``render`` function for now." msgstr "" -"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " -"замовчуванням це значення має бути ``True``." +"На даний момент немає необхідності впроваджувати функціонал для форм. Просто " +"візуалізуйте їх. Наразі немає потреби передавати будь-який контекст у " +"функцію ``render``." -#: ../../blog/docs/spec.rst:102 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" +#: ../../blog/docs/spec.rst:77 +msgid "**All** templates should be inherited from the base template." +msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." -#: ../../blog/docs/spec.rst:104 +#: ../../blog/docs/spec.rst:78 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project’s database." +"Each page should contain a navbar at the top. Navbar will contain permalinks " +"to the home and about pages." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " -"базі даних проекту." +"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " +"міститиме постійні посилання на домашню сторінку та сторінку про." -#: ../../blog/docs/spec.rst:107 -msgid "``/blogs/`` or ``/``: should represent a list of existing blogposts." +#: ../../blog/docs/spec.rst:80 +msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." msgstr "" -"``/blogs/`` або ``/``: має представляти список існуючих публікацій у блозі." +"Панель навігації має містити посилання на сторінки ``/register/`` і ``/login/" +"``." -#: ../../blog/docs/spec.rst:108 -msgid "``//``: should represent a single existing blogpost." -msgstr "``//``: має представляти одну наявну публікацію в блозі." +#: ../../blog/docs/spec.rst:81 +msgid "``/register/`` page should render a user registration form." +msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." -#: ../../blog/docs/spec.rst:109 -msgid "" -"``/profile//``: should contain information about user and a " -"list of posts authored by this user." -msgstr "" -"``/profile//``: має містити інформацію про користувача та " -"список публікацій, автором яких є цей користувач." +#: ../../blog/docs/spec.rst:82 +msgid "``/login/`` page should render a user authentication form." +msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." -#: ../../blog/docs/spec.rst:111 -msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." +#: ../../blog/docs/spec.rst:83 +msgid "``/create/`` page should render a form to create a new post." msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." - -#: ../../blog/docs/spec.rst:116 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" +"Сторінка ``/create/`` має відобразити форму для створення нового допису." -#: ../../blog/docs/spec.rst:118 +#: ../../blog/docs/spec.rst:84 msgid "" -"It’s time to work with data representations. You’re to add HTML template to " -"the blog site project. Keep templates together with appropriate " -"applications, we don’t need mess in project files." +"``/`` and ``/blogs/`` page should provide a list of posts. Each post should " +"contain a link to its detail view (``/``). It's ok to use static " +"content for now." msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати HTML-" -"шаблон до проекту сайту блогу. Зберігайте шаблони разом із відповідними " -"додатками, нам не потрібен безлад у файлах проекту." +"Сторінки ``/`` і ``/blogs/`` мають надавати список публікацій. Кожен допис " +"має містити посилання на його детальний перегляд (``/``). Наразі " +"можна використовувати статичний вміст." -#: ../../blog/docs/spec.rst:122 -msgid "Application-level templates should be extended from the base one." -msgstr "Шаблони прикладного рівня повинні бути розширені з базового." - -#: ../../blog/docs/spec.rst:123 +#: ../../blog/docs/spec.rst:87 msgid "" -"Each page should contain a navbar at the top. Navbar will contain permalinks " -"to the home and about pages." +"``/`` page should provide details on a single post. It's ok to " +"use static content for now." msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " -"міститиме постійні посилання на домашню сторінку та сторінку про." +"Сторінка ``/`` має надавати детальну інформацію про одну " +"публікацію. Наразі можна використовувати статичний вміст." -#: ../../blog/docs/spec.rst:125 -msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +#: ../../blog/docs/spec.rst:89 +msgid "Detail view should contain links to ``/update/`` and ``/delete/``." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." + +#: ../../blog/docs/spec.rst:90 +msgid "``/profile//`` should render an author's personal page." +msgstr "``/profile//`` має відобразити особисту сторінку автора." -#: ../../blog/docs/spec.rst:127 +#: ../../blog/docs/spec.rst:97 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:99 +msgid "You are to implement data models for the blog site." +msgstr "Ви повинні реалізувати моделі даних для сайту блогу." + +#: ../../blog/docs/spec.rst:101 +msgid "The ``auth.User`` will be used as ``user`` model." +msgstr "``auth.User`` використовуватиметься як модель ``user``." + +#: ../../blog/docs/spec.rst:103 msgid "" -"For authenticated users ``/logout/`` and ``/create/`` links should be " -"visible in navbar." +"``post.slug`` value should be autogenerated when a record is created or " +"updated and follow the pattern:" msgstr "" -"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " -"мають бути видимими на панелі навігації." +"Значення ``post.slug`` має автоматично генеруватися під час створення або " +"оновлення запису та слідувати шаблону:" -#: ../../blog/docs/spec.rst:129 +#: ../../blog/docs/spec.rst:110 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"User preferred topics should be marked with a ``notify`` flag. This value " +"should be ``True`` by default." msgstr "" -"Якщо автентифікований користувач є адміністратором або іншим, він має " -"побачити посилання на сторінку адміністратора." +"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " +"замовчуванням це значення має бути ``True``." + +#: ../../blog/docs/spec.rst:143 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" -#: ../../blog/docs/spec.rst:131 +#: ../../blog/docs/spec.rst:145 msgid "" -"Each page should contain a list of links to archive views for the last year." +"Update existing views to represent entities that are actually stored inside " +"the project’s database." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " +"базі даних проекту." -#: ../../blog/docs/spec.rst:133 +#: ../../blog/docs/spec.rst:148 msgid "" -"For the ``post_list.html`` each post entity should provide the information:" +"Application-level templates should be located within appropriate " +"applications." +msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." + +#: ../../blog/docs/spec.rst:150 +msgid "``/`` and ``/blogs/``: should represent a list of existing blogposts." msgstr "" -"Для ``post_list.html`` кожна сутність допису повинна надавати інформацію:" +"``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." + +#: ../../blog/docs/spec.rst:151 +msgid "Each post entity should provide the information about:" +msgstr "Кожен допис блогу повинен надавати інформацію про:" -#: ../../blog/docs/spec.rst:136 +#: ../../blog/docs/spec.rst:153 msgid "title (each word should be capitalized)" msgstr "назва (кожне слово має бути великим)" -#: ../../blog/docs/spec.rst:137 +#: ../../blog/docs/spec.rst:154 msgid "creation date" msgstr "дата створення" -#: ../../blog/docs/spec.rst:138 -msgid "list of related topics (first 3 topics)" -msgstr "список пов'язаних тем (перші 3 теми)" +#: ../../blog/docs/spec.rst:155 +msgid "list of related topics (first 3 topics or fewer)" +msgstr "список пов'язаних тем (перші 3 теми або менше)" -#: ../../blog/docs/spec.rst:139 +#: ../../blog/docs/spec.rst:156 msgid "trimmed content (~50 words or fewer)" msgstr "обрізаний вміст (~50 слів або менше)" -#: ../../blog/docs/spec.rst:140 +#: ../../blog/docs/spec.rst:157 msgid "number of comments" msgstr "кількість коментарів" -#: ../../blog/docs/spec.rst:142 +#: ../../blog/docs/spec.rst:159 msgid "Each post entity on a list view should be a link to corresponding post." msgstr "" "Кожна сутність публікації в поданні списку має бути посиланням на відповідну " "публікацію." -#: ../../blog/docs/spec.rst:144 -msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -msgstr "" -"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +#: ../../blog/docs/spec.rst:161 +msgid "``//``: should represent a single existing blogpost." +msgstr "``//``: має представляти одну наявну публікацію в блозі." -#: ../../blog/docs/spec.rst:145 +#: ../../blog/docs/spec.rst:162 msgid "Detail view should contain a list of post related comments." msgstr "" "Подання деталей має містити список коментарів, пов'язаних із публікацією." -#: ../../blog/docs/spec.rst:146 +#: ../../blog/docs/spec.rst:163 msgid "" -"Auth views should use ``register.html`` and ``login.html`` with " -"corresponding forms." +"``/profile//``: should contain information about user and a " +"list of posts authored by this user." msgstr "" -"Подання авторизації повинні використовувати ``register.html`` і ``login." -"html`` з відповідними формами." +"``/profile//``: має містити інформацію про користувача та " +"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.rst:149 +#: ../../blog/docs/spec.rst:165 msgid "" -"For now, it’s ok to use admin as “test user”. Authentication system will be " -"implemented in the future challenges. ``user`` object is available (by " -"default) in any template context. To test anonymous access you can use " -"``user.is_authenticated``, which returns ``False`` for non-authenticated " -"users." +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" -"Наразі можна використовувати адміністратора як «тестового користувача». " -"Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -"«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " -"Щоб перевірити анонімний доступ, ви можете використовувати ``user." -"is_authenticated``, який повертає ``False`` для неавтентифікованих " -"користувачів." +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." -#: ../../blog/docs/spec.rst:156 +#: ../../blog/docs/spec.rst:170 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:158 +#: ../../blog/docs/spec.rst:172 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:160 +#: ../../blog/docs/spec.rst:174 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:161 +#: ../../blog/docs/spec.rst:175 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:162 +#: ../../blog/docs/spec.rst:176 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:163 +#: ../../blog/docs/spec.rst:177 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:165 +#: ../../blog/docs/spec.rst:179 msgid "``username`` value should be validated against existing values" msgstr "" "Значення ``username`` має перевірятися на відповідність існуючим значенням" -#: ../../blog/docs/spec.rst:166 +#: ../../blog/docs/spec.rst:180 msgid "``password`` and ``confirm password`` values should match" msgstr "Значення ``password`` і ``confirm password`` мають збігатися" -#: ../../blog/docs/spec.rst:167 +#: ../../blog/docs/spec.rst:181 msgid "Create form for existing users login" msgstr "Створити форму для входу існуючих користувачів" -#: ../../blog/docs/spec.rst:168 +#: ../../blog/docs/spec.rst:182 msgid "Validations errors are to be rendered on the template" msgstr "Помилки перевірки мають бути відображені в шаблоні" -#: ../../blog/docs/spec.rst:171 -msgid "Challenge: Blogpost Creation and Update" -msgstr "Завдання: Створення та Оновлення Дописів" - -#: ../../blog/docs/spec.rst:173 -msgid "Create a form to work with the blogpost model." -msgstr "Створіть форму для роботи з моделлю допису." +#: ../../blog/docs/spec.rst:185 +msgid "Challenge: Authentication" +msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:174 +#: ../../blog/docs/spec.rst:187 msgid "" -"Create a form to gather a comment from a user. Form should be used within a " -"\"post detail\" view." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Створіть форму для збору коментарів від користувача. Форму слід " -"використовувати в перегляді \"подробиць публікації\"." - -#: ../../blog/docs/spec.rst:176 -msgid "Form should be used for *create* and *update* view." -msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." -#: ../../blog/docs/spec.rst:178 -msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +#: ../../blog/docs/spec.rst:189 +msgid "" +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як автора " -"публікації." +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:181 -msgid "Challenge: Authentication" -msgstr "Завдання: Автентифікація" +#: ../../blog/docs/spec.rst:191 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin page." +msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:183 +#: ../../blog/docs/spec.rst:193 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -436,12 +440,12 @@ msgid "" "error(s)." msgstr "" "``/register/``: користувачі повинні надати всю необхідну інформацію про " -"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім’я та " -"прізвище) необов’язкові. Після створення користувача вони повинні бути " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " +"прізвище) необов'язкові. Після створення користувача вони повинні бути " "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:188 +#: ../../blog/docs/spec.rst:198 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -451,7 +455,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:191 +#: ../../blog/docs/spec.rst:201 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -466,7 +470,7 @@ msgstr "" "Потім створюється допис, автором якого має бути поточний автентифікований " "користувач." -#: ../../blog/docs/spec.rst:196 +#: ../../blog/docs/spec.rst:206 msgid "" "``//comment``: Currently authenticated user should be referenced " "as a comment’s author." @@ -474,53 +478,79 @@ msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." -#: ../../blog/docs/spec.rst:198 +#: ../../blog/docs/spec.rst:208 msgid "Posts may be modified or deleted only by their authors (no exceptions)." msgstr "" "Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." -#: ../../blog/docs/spec.rst:202 +#: ../../blog/docs/spec.rst:212 +msgid "Challenge: Blogpost creation and update" +msgstr "Завдання: створення та оновлення блогу" + +#: ../../blog/docs/spec.rst:214 +msgid "Create a form to work with the blogpost model." +msgstr "Створіть форму для роботи з моделлю допису." + +#: ../../blog/docs/spec.rst:215 +msgid "" +"Create a form to gather a comment from a user. Form should be used within a " +"\"post detail\" view." +msgstr "" +"Створіть форму для збору коментарів від користувача. Форму слід " +"використовувати в перегляді \"подробиць публікації\"." + +#: ../../blog/docs/spec.rst:217 +msgid "Form should be used for *create* and *update* view." +msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." + +#: ../../blog/docs/spec.rst:219 +msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +msgstr "" +"Наразі можна використовувати *попередньо визначеного* користувача як автора " +"публікації." + +#: ../../blog/docs/spec.rst:222 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:204 +#: ../../blog/docs/spec.rst:224 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:205 +#: ../../blog/docs/spec.rst:225 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:207 +#: ../../blog/docs/spec.rst:227 msgid "It’s ok to use Django built-in views for auth." msgstr "" "Для автентифікації можна використовувати вбудовані представлення Django." -#: ../../blog/docs/spec.rst:210 +#: ../../blog/docs/spec.rst:230 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:212 +#: ../../blog/docs/spec.rst:232 msgid "Create serializers for:" msgstr "Створіть серіалізатори для:" -#: ../../blog/docs/spec.rst:214 +#: ../../blog/docs/spec.rst:234 msgid "Blogpost entity" msgstr "Об'єкт публікації в блозі" -#: ../../blog/docs/spec.rst:215 +#: ../../blog/docs/spec.rst:235 msgid "Blogpost comment" msgstr "Коментар у блозі" -#: ../../blog/docs/spec.rst:216 +#: ../../blog/docs/spec.rst:236 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:219 +#: ../../blog/docs/spec.rst:239 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:221 +#: ../../blog/docs/spec.rst:241 msgid "" "All blog-site functionality are to be reflected via REST API. It’s ok to use " "*pre-defined* user as a post’s author for now." @@ -528,25 +558,25 @@ msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " "використовувати *попередньо визначеного* користувача як автора публікації." -#: ../../blog/docs/spec.rst:225 +#: ../../blog/docs/spec.rst:245 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:227 +#: ../../blog/docs/spec.rst:247 msgid "Implement REST authentication system." msgstr "Запровадити систему автентифікації REST." -#: ../../blog/docs/spec.rst:228 +#: ../../blog/docs/spec.rst:248 msgid "Only account owner can change their account data." msgstr "" "Лише власник облікового запису може змінити дані свого облікового запису." -#: ../../blog/docs/spec.rst:229 +#: ../../blog/docs/spec.rst:249 msgid "Only authenticated users can create posts and comments." msgstr "" "Тільки автентифіковані користувачі можуть створювати дописи та коментарі." -#: ../../blog/docs/spec.rst:230 +#: ../../blog/docs/spec.rst:250 msgid "Only authors can change their posts." msgstr "Тільки автори можуть змінювати свої повідомлення." @@ -782,7 +812,7 @@ msgid "" "uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " -"вказану кількість у кошик. Аргумент ``quantity`` є необов’язковим, якщо " +"вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " "пропущено, просто використовує натомість значення ``Product.unit``." #: ../../problem-sets/src/conv_store/challenge.rst:73 @@ -1152,8 +1182,8 @@ msgid "" "precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " -"найвищого пріоритету (найбільш обов’язковий) до найнижчого пріоритету " -"(найменший обов’язковий) :cite:`docs-python:operator-precedence`. Оператори " +"найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " "в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " "направо)." @@ -1178,7 +1208,7 @@ msgid "" "Binding or parenthesized expression, list display, dictionary display, set " "display" msgstr "" -"Прив’язка або вираз у дужках, відображення списку, відображення словника, " +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " "відображення набору" #: ../../src/appx/precedence.txt:23 @@ -1328,7 +1358,7 @@ msgid "" "the power operator binds less tightly than an arithmetic or bitwise unary " "operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" -"оператор степені прив’язує менш тісно, ніж арифметичний або порозрядний " +"оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 @@ -1360,12 +1390,12 @@ msgid "" "are replaced with zero or more elements of *values*. If *format* requires a " "single argument, *values* may be a single non-tuple object." msgstr "" -"Рядкові об’єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " "модулю). Це також відоме як оператор *форматування* рядка або " "*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " "значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " "замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об’єктом." +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -1532,7 +1562,7 @@ msgstr "``'r'``" #: ../../src/appx/printf.txt:68 msgid "Converts any Python object using ``repr()``" -msgstr "Перетворює будь-який об’єкт Python за допомогою ``repr()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``repr()``" #: ../../src/appx/printf.txt:70 msgid "``'s'``" @@ -1540,7 +1570,7 @@ msgstr "``'s'``" #: ../../src/appx/printf.txt:70 msgid "Converts any Python object using ``str()``" -msgstr "Перетворює будь-який об’єкт Python за допомогою ``str()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``str()``" #: ../../src/appx/printf.txt:72 msgid "``'a'``" @@ -1548,7 +1578,7 @@ msgstr "``'a'``" #: ../../src/appx/printf.txt:72 msgid "Converts any Python object using ``ascii()``" -msgstr "Перетворює будь-який об’єкт Python за допомогою ``ascii()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``ascii()``" #: ../../src/appx/printf.txt:74 msgid "``'%'``" @@ -1720,7 +1750,7 @@ msgid "" "over 35 years of active development that has earned it a strong reputation " "for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об’єктно-реляційна база даних з відкритим вихідним " +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " "кодом, активна розробка якої триває понад 35 років, завдяки чому вона " "заслужила міцну репутацію надійності, надійності функцій і продуктивності." @@ -2082,7 +2112,7 @@ msgid "" "initial score points value and health." msgstr "" "Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров’я." +"екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.__init__:6 msgid "a player's name" @@ -2415,3 +2445,31 @@ msgstr "" #~ msgid "``defence``" #~ msgstr "``defence``" + +#~ msgid "" +#~ "Each page should contain a list of links to archive views for the last " +#~ "year." +#~ msgstr "" +#~ "Кожна сторінка має містити список посилань на перегляди архіву за " +#~ "останній рік." + +#~ msgid "" +#~ "Auth views should use ``register.html`` and ``login.html`` with " +#~ "corresponding forms." +#~ msgstr "" +#~ "Подання авторизації повинні використовувати ``register.html`` і ``login." +#~ "html`` з відповідними формами." + +#~ msgid "" +#~ "For now, it’s ok to use admin as “test user”. Authentication system will " +#~ "be implemented in the future challenges. ``user`` object is available (by " +#~ "default) in any template context. To test anonymous access you can use " +#~ "``user.is_authenticated``, which returns ``False`` for non-authenticated " +#~ "users." +#~ msgstr "" +#~ "Наразі можна використовувати адміністратора як «тестового користувача». " +#~ "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " +#~ "«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " +#~ "Щоб перевірити анонімний доступ, ви можете використовувати ``user." +#~ "is_authenticated``, який повертає ``False`` для неавтентифікованих " +#~ "користувачів." From 8292a0bbd57273d43ee0492cc67d9e9649f3356f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 05:21:59 +0300 Subject: [PATCH 325/689] Added translations for "intro" Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/intro.po | 921 +++++++++++++++++++++++++++ 1 file changed, 921 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/intro.po diff --git a/src/_locales/uk/LC_MESSAGES/intro.po b/src/_locales/uk/LC_MESSAGES/intro.po new file mode 100644 index 000000000..a94e8d8ae --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro.po @@ -0,0 +1,921 @@ +# INTRODUCTION SECTION TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training Course package. +# +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-21 04:34+0300\n" +"PO-Revision-Date: 2023-04-21 05:21+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/intro/index.txt:120 +msgid "Contents" +msgstr "Зміст" + +#: ../../src/intro/index.txt:2 +msgid "" +"There are a whole bunch of common programming tasks that are easy in Python. " +"For someone who is not yet a programmer, who wants to become a programmer, " +"for those people Python is particularly easy to get. In Python, every symbol " +"you type is essential." +msgstr "" +"Існує ціла купа звичайних програмних завдань, які легко виконати на Python. " +"Для тих, хто ще не програміст, хто хоче стати програмістом, для цих людей " +"Python особливо легко отримати. У Python кожен символ, який ви вводите, є " +"важливим." + +#: ../../src/intro/index.txt:7 +msgid "|guido| Guido van Rossum" +msgstr "|guido| Гвідо ван Россум" + +#: ../../src/intro/index.txt:172 +msgid "guido" +msgstr "guido" + +#: ../../src/intro/index.txt:11 +msgid "Introduction to Python" +msgstr "Введення в Python" + +#: ../../src/intro/index.txt:13 +msgid "" +"|python| **Python** is a high-level, interpreted scripting language. It was " +"created in the early 1990s by Guido van Rossum at Stichting Mathematisch " +"Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of " +"a language called ABC. Guido remains Python’s principal author, although it " +"includes many contributions from others." +msgstr "" +"|python| **Python** — це інтерпретована скриптова мова високого рівня. Її " +"було створено на початку 1990-х років Гвідо ван Россумом у Stichting " +"Mathematisch Centrum (CWI, див. https://www.cwi.nl/) у Нідерландах як " +"наступника мови під назвою ABC. Гвідо залишається головним автором Python, " +"хоча мова містить багато внесків від інших авторів." + +#: ../../src/intro/index.txt:129 +msgid "python" +msgstr "python" + +#: ../../src/intro/index.txt:19 +msgid "" +"Python 2.0 was released in 2000, and the 2.x versions were the prevalent " +"releases until December 2008. At that time, the development team made the " +"decision to release version 3.0, which contained a few relatively small but " +"significant changes that were not backward compatible with the 2.x versions. " +"Python 2 and 3 are very similar, and some features of Python 3 have been " +"backported to Python 2. But in general, they remain not quite compatible." +msgstr "" +"Python 2.0 був випущений у 2000 році, а версії 2.x були поширеними випусками " +"до грудня 2008 року. У той час команда розробників прийняла рішення " +"випустити версію 3.0, яка містила кілька відносно невеликих, але значних " +"змін, які не були зворотно сумісними. з версіями 2.x. Python 2 і 3 дуже " +"схожі, і деякі функції Python 3 були перенесені в Python 2. Але загалом вони " +"залишаються не зовсім сумісними." + +#: ../../src/intro/index.txt:26 +msgid "" +"Both Python 2 and 3 have continued to be maintained and developed, with " +"periodic release updates for both. However, an official End Of Life date of " +"January 1, 2020 has been established for Python 2, after which time it will " +"no longer be maintained." +msgstr "" +"І Python 2, і 3 продовжували підтримуватися та розроблятися з періодичними " +"оновленнями для обох. Однак для Python 2 було встановлено офіційну дату " +"завершення життя 1 січня 2020 року, після якої він більше не " +"підтримуватиметься." + +#: ../../src/intro/index.txt:31 +msgid "" +"Python is still maintained by a core development team at the Institute, and " +"Guido is still in charge, having been given the title of BDFL (Benevolent " +"Dictator For Life) by the Python community. The name Python, by the way, " +"derives not from the snake, but from the British comedy troupe Monty " +"Python’s Flying Circus, of which Guido was, and presumably still is, a fan. " +"It is common to find references to Monty Python sketches and movies " +"scattered throughout the Python documentation." +msgstr "" +"Python все ще підтримується основною командою розробників в Інституті, і " +"Гвідо все ще керує, отримавши звання BDFL (Доброзичливий диктатор на все " +"життя) від спільноти Python. Назва Python, до речі, походить не від імені " +"змії, а від британської комедійної трупи Monty Python’s Flying Circus, " +"шанувальником якої був і, мабуть, залишається Гвідо. Посилання на ескізи та " +"фільми Monty Python часто можна знайти в документації Python." + +#: ../../src/intro/index.txt:39 +msgid "Here are some significant facts about Python." +msgstr "Ось кілька важливих фактів про Python." + +#: ../../src/intro/index.txt:42 +msgid "Python is popular" +msgstr "Python популярний" + +#: ../../src/intro/index.txt:43 +msgid "" +"Python has been growing in popularity over the last few years. The 2018 " +"Stack Overflow Developer Survey ranked Python as the 7th most popular and " +"the number one most wanted technology of the year. By the end of Q-4 in 2022 " +"Python is the **top** language on all GitHut metrics :cite:`github:stats`." +msgstr "" +"Python набирає популярності протягом останніх кількох років. Опитування " +"розробників Stack Overflow 2018 року поставило Python на сьоме місце за " +"популярністю та на перше місце серед найпопулярніших технологій року. До " +"кінця четвертого кварталу 2022 року Python є **найпопулярнішою** мовою за " +"всіма показниками GitHut :cite:`github:stats`." + +#: ../../src/intro/index.txt:49 +msgid "" +"Here are some logos of unknown companies across the globe who uses Python:" +msgstr "" +"Ось кілька логотипів невідомих компаній по всьому світі, які використовують " +"Python:" + +#: ../../src/intro/index.txt:54 +msgid "google facebook instagram spotify quora netflix dropbox reddit" +msgstr "google facebook instagram spotify quora netflix dropbox reddit" + +#: ../../src/intro/index.txt:0 +msgid "Google" +msgstr "Google" + +#: ../../src/intro/index.txt:0 +msgid "Facebook" +msgstr "Facebook" + +#: ../../src/intro/index.txt:0 +msgid "Instagram" +msgstr "Instagram" + +#: ../../src/intro/index.txt:0 +msgid "Spotify" +msgstr "Spotify" + +#: ../../src/intro/index.txt:0 +msgid "Quora" +msgstr "Quora" + +#: ../../src/intro/index.txt:0 +msgid "Netflix" +msgstr "Netflix" + +#: ../../src/intro/index.txt:0 +msgid "Dropbox" +msgstr "Dropbox" + +#: ../../src/intro/index.txt:0 +msgid "Reddit" +msgstr "Reddit" + +#: ../../src/intro/index.txt:56 +msgid "Python is interpreted" +msgstr "Python інтерпретується" + +#: ../../src/intro/index.txt:57 +msgid "" +"Many languages are compiled, meaning the source code you create needs to be " +"translated into machine code, the language of your computer’s processor, " +"before it can be run. Programs written in an interpreted language are passed " +"straight to an interpreter that runs them directly." +msgstr "" +"Багато мов компілюється, тобто вихідний код, який ви створюєте, має бути " +"переведений у машинний код, мовою процесора вашого комп’ютера, перш ніж його " +"можна буде запустити. Програми, написані на інтерпретованій мові, " +"передаються прямо до інтерпретатора, який їх безпосередньо запускає." + +#: ../../src/intro/index.txt:62 +msgid "" +"This makes for a quicker development cycle because you just type in your " +"code and run it, without the intermediate compilation step." +msgstr "" +"Це забезпечує швидший цикл розробки, оскільки ви просто вводите код і " +"запускаєте його без проміжного етапу компіляції." + +#: ../../src/intro/index.txt:66 +msgid "Python is free" +msgstr "Python безкоштовний" + +#: ../../src/intro/index.txt:67 +msgid "" +"The Python interpreter is developed under an OSI-approved open-source " +"license, making it free to install, use, and distribute, even for commercial " +"purposes." +msgstr "" +"Інтерпретатор Python розроблено відповідно до схваленої OSI ліцензії з " +"відкритим вихідним кодом, що робить його безкоштовним для встановлення, " +"використання та розповсюдження навіть у комерційних цілях." + +#: ../../src/intro/index.txt:71 +msgid "Python is portable" +msgstr "Python портативний" + +#: ../../src/intro/index.txt:72 +msgid "" +"Because Python code is interpreted and not compiled into native machine " +"instructions, code written for one platform will work on any other platform " +"that has the Python interpreter installed. This is true of any interpreted " +"language, not just Python." +msgstr "" +"Оскільки код Python інтерпретується, а не компілюється у власні машинні " +"інструкції, код, написаний для однієї платформи, працюватиме на будь-якій " +"іншій платформі, де встановлено інтерпретатор Python. Це стосується будь-" +"якої інтерпретованої мови, а не лише Python." + +#: ../../src/intro/index.txt:78 +msgid "Python is simple" +msgstr "Python простий" + +#: ../../src/intro/index.txt:79 +msgid "" +"As programming languages go, Python is relatively uncluttered, and the " +"developers have deliberately kept it that way. A rough estimate of the " +"complexity of a language can be gleaned from the number of keywords or " +"reserved words in the language. These are words that are reserved for " +"special meaning by the compiler or interpreter because they designate " +"specific built-in functionality of the language. There are only 35 :cite:" +"`docs-python:keywords` in Python and they are:" +msgstr "" +"Що стосується мов програмування, Python є відносно незавантаженим, і " +"розробники навмисно залишили його таким. Приблизну оцінку складності мови " +"можна отримати з кількості ключових або зарезервованих слів у мові. Це " +"слова, які зарезервовані для спеціального значення компілятором або " +"інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " +"У Python лише 35 :cite:`docs-python:keywords`, і вони:" + +#: ../../src/intro/index.txt:88 +msgid "False" +msgstr "False" + +#: ../../src/intro/index.txt:88 +msgid "await" +msgstr "await" + +#: ../../src/intro/index.txt:88 +msgid "else" +msgstr "else" + +#: ../../src/intro/index.txt:88 +msgid "import" +msgstr "import" + +#: ../../src/intro/index.txt:88 +msgid "pass" +msgstr "pass" + +#: ../../src/intro/index.txt:90 +msgid "None" +msgstr "None" + +#: ../../src/intro/index.txt:90 +msgid "break" +msgstr "break" + +#: ../../src/intro/index.txt:90 +msgid "except" +msgstr "except" + +#: ../../src/intro/index.txt:90 +msgid "in" +msgstr "in" + +#: ../../src/intro/index.txt:90 +msgid "raise" +msgstr "raise" + +#: ../../src/intro/index.txt:92 +msgid "True" +msgstr "True" + +#: ../../src/intro/index.txt:92 +msgid "class" +msgstr "class" + +#: ../../src/intro/index.txt:92 +msgid "finally" +msgstr "finally" + +#: ../../src/intro/index.txt:92 +msgid "is" +msgstr "is" + +#: ../../src/intro/index.txt:92 +msgid "return" +msgstr "return" + +#: ../../src/intro/index.txt:94 +msgid "and" +msgstr "and" + +#: ../../src/intro/index.txt:94 +msgid "continue" +msgstr "continue" + +#: ../../src/intro/index.txt:94 +msgid "for" +msgstr "for" + +#: ../../src/intro/index.txt:94 +msgid "lambda" +msgstr "lambda" + +#: ../../src/intro/index.txt:94 +msgid "try" +msgstr "try" + +#: ../../src/intro/index.txt:96 +msgid "as" +msgstr "as" + +#: ../../src/intro/index.txt:96 +msgid "def" +msgstr "def" + +#: ../../src/intro/index.txt:96 +msgid "from" +msgstr "from" + +#: ../../src/intro/index.txt:96 +msgid "nonlocal" +msgstr "nonlocal" + +#: ../../src/intro/index.txt:96 +msgid "while" +msgstr "while" + +#: ../../src/intro/index.txt:98 +msgid "assert" +msgstr "assert" + +#: ../../src/intro/index.txt:98 +msgid "del" +msgstr "del" + +#: ../../src/intro/index.txt:98 +msgid "global" +msgstr "global" + +#: ../../src/intro/index.txt:98 +msgid "not" +msgstr "not" + +#: ../../src/intro/index.txt:98 +msgid "with" +msgstr "with" + +#: ../../src/intro/index.txt:100 +msgid "async" +msgstr "async" + +#: ../../src/intro/index.txt:100 +msgid "elif" +msgstr "elif" + +#: ../../src/intro/index.txt:100 +msgid "if" +msgstr "if" + +#: ../../src/intro/index.txt:100 +msgid "or" +msgstr "or" + +#: ../../src/intro/index.txt:100 +msgid "yield" +msgstr "yield" + +#: ../../src/intro/index.txt:104 +msgid "Python is general purpose" +msgstr "Python є універсальним" + +#: ../../src/intro/index.txt:105 +msgid "" +"Python is everywhere. Talking more specific common scopes for Python " +"developers are :cite:`python-usage`:" +msgstr "" +"Python всюди. Говорячи про більш конкретні загальні області для розробників " +"Python, це :cite:`python-usage`:" + +#: ../../src/intro/index.txt:108 +msgid "Web Scraping Applications" +msgstr "Програми для сканування веб-сторінок" + +#: ../../src/intro/index.txt:109 +msgid "Data Science Solutions" +msgstr "Рішення для Data Science" + +#: ../../src/intro/index.txt:110 +msgid "Machine Learning Applications" +msgstr "Програми машинного навчання" + +#: ../../src/intro/index.txt:111 +msgid "Web Development" +msgstr "Веб-розробка" + +#: ../../src/intro/index.txt:112 +msgid "Game Development" +msgstr "Розробка ігор" + +#: ../../src/intro/index.txt:113 +msgid "Scientific and Numeric Applications" +msgstr "Наукові та обчислювальні програми" + +#: ../../src/intro/index.txt:114 +msgid "Image Design and Graphic Design Applications" +msgstr "Програми для обробки зображень та графіки" + +#: ../../src/intro/index.txt:115 +msgid "Finance Fintech Platform" +msgstr "Банківські та фінансові сервіси" + +#: ../../src/intro/index.txt:116 +msgid "Language Development" +msgstr "Language Development" + +#: ../../src/intro/index.txt:117 +msgid "Operating Systems" +msgstr "Операційні системи" + +#: ../../src/intro/install.txt:3 ../../src/intro/install.txt:21 +msgid "Install Python" +msgstr "Встановлення Python" + +#: ../../src/intro/install.txt:5 +msgid "" +"The `Python wiki `_ " +"briefly describes the installation process." +msgstr "" +"`Вікі Python `_ " +"коротко описує процес встановлення." + +#: ../../src/intro/install.txt:8 +msgid "" +"To become a **true** professional, you need a special software called :abbr:" +"`IDE (Integrated Development Environment)` or at least a code editor " +"supporting syntax highlight. Refer :doc:`/appx/code_edit` for more " +"information." +msgstr "" +"Щоб стати **справжнім** професіоналом, вам потрібне спеціальне програмне " +"забезпечення під назвою :abbr:`IDE (Integrated Development Environment)` або " +"принаймні редактор коду, який підтримує підсвічування синтаксису. Зверніться " +"до :doc:`/appx/code_edit` для отримання додаткової інформації." + +#: ../../src/intro/install.txt:14 +msgid "Linux" +msgstr "Linux" + +#: ../../src/intro/install.txt:16 +msgid "" +"On most Linux distros Python comes pre-installed and/or all distro have it " +"available in their package repository (I haven't seen the one which does " +"have). The installation process depends on the distro, but here are some " +"examples how you can install it:" +msgstr "" +"У більшості дистрибутивів Linux Python постачається попередньо встановленим " +"і/або в усіх дистрибутивах він доступний у сховищі пакетів (я не бачив того, " +"у якому є). Процес встановлення залежить від дистрибутива, але ось кілька " +"прикладів того, як його можна встановити:" + +#: ../../src/intro/install.txt:37 +msgid "MacOS" +msgstr "MacOS" + +#: ../../src/intro/install.txt:39 +msgid "" +"For newer versions of MacOS Python is no longer included by default and you " +"will have to download and install it." +msgstr "" +"Для нових версій MacOS Python більше не включено за замовчуванням, і вам " +"доведеться завантажити та встановити його." + +#: ../../src/intro/install.txt:42 +msgid "The process is described at: `Using Python on a Mac`_." +msgstr "Процес описано в: `Використання Python на Mac`_." + +#: ../../src/intro/install.txt:44 +msgid "" +"Briefly, you are invited to visit `downloads`_ and download the latest " +"stable version of Python. A \"universal binary\" build of Python runs " +"natively on Mac's new Intel and legacy PPC CPUs." +msgstr "" +"Коротко, вас запрошують відвідати `завантаження`_ та завантажити останню " +"стабільну версію Python. \"Універсальна двійкова\" збірка Python працює " +"нативно на нових процесорах Intel і застарілих процесорах PPC від Mac." + +#: ../../src/intro/install.txt:48 +msgid "After the installation you would get:" +msgstr "Після встановлення ви отримаєте:" + +#: ../../src/intro/install.txt:50 +msgid "" +"`Python 3.x` folder in `Applications` folder. Standard development " +"environment (`IDLE`) and `PythonLauncher` included." +msgstr "" +"Папка `Python 3.x` в папці `Програми`. Включено стандартне середовище " +"розробки (`IDLE`) і `PythonLauncher`." + +#: ../../src/intro/install.txt:52 +msgid "" +"A framework `/Library/Frameworks/Python.framework` included libraries and " +"executables." +msgstr "" +"Фреймворк `/Library/Frameworks/Python.framework` що включає бібліотеки та " +"виконувані файли." + +#: ../../src/intro/install.txt:56 +msgid "Install from Homebrew" +msgstr "Встановити з Homebrew" + +#: ../../src/intro/install.txt:58 +msgid "" +"Python for MacOS is available via Homebrew. You are to search `formulae`_ " +"for the latest available version. In general, it's as easy as:" +msgstr "" +"Python для MacOS доступний через Homebrew. Ви повинні шукати `формули`_ для " +"останньої доступної версії. Загалом, це так само просто:" + +#: ../../src/intro/install.txt:66 +msgid "Windows" +msgstr "Windows" + +#: ../../src/intro/install.txt:68 +msgid "" +"As for MacOS, here is the official documentation: `Using Python on Windows`_." +msgstr "" +"Що стосується MacOS, ось офіційна документація: `Using Python on Windows`_." + +#: ../../src/intro/install.txt:70 +msgid "" +"For Windows' users the stable release is available from `downloads`_. Just " +"download the installer and proceed to common steps to install software." +msgstr "" +"Для користувачів Windows стабільний випуск доступний із `завантажень`_. " +"Просто завантажте програму встановлення та перейдіть до стандартних кроків " +"для встановлення програмного забезпечення." + +#: ../../src/intro/install.txt:73 +msgid "" +"It's recommended to **Add Python3.x to PATH**, this will avoid problems at " +"the beginning of your journey with Python" +msgstr "" +"Рекомендовано **Додати Python3.x до PATH**, це дозволить уникнути проблем на " +"початку вашого шляху з Python" + +#: ../../src/intro/install.txt:80 +msgid "Python installer first page" +msgstr "Перша сторінка інсталятора Python" + +#: ../../src/intro/install.txt:82 +msgid "Going on with **Install Now**:" +msgstr "Продовжуємо з **Встановити зараз**:" + +#: ../../src/intro/install.txt:84 +msgid "Python will be installed to your user directory" +msgstr "Python буде встановлено у ваш каталог користувача" + +#: ../../src/intro/install.txt:85 +msgid "" +"Python Launcher will be installed according to the option at the bottom of " +"the page" +msgstr "Python Launcher буде встановлено відповідно до опції внизу сторінки" + +#: ../../src/intro/install.txt:88 +msgid "" +"Using **Customize installation** will perform an *all-users* installation." +msgstr "" +"Використання **Налаштувати інсталяцію** виконає інсталяцію *для всіх " +"користувачів*." + +#: ../../src/intro/install.txt:91 +msgid "Removing the MAX_PATH Limitation" +msgstr "Видалення обмеження MAX_PATH" + +#: ../../src/intro/install.txt:93 +msgid "" +"Windows historically has limited path lengths to 260 characters. This meant " +"that paths longer than this would not resolve and errors would result. In " +"the latest versions of Windows, this limitation can be expanded to " +"approximately 32,000 characters. This allows the open() function, the os " +"module and most other path functionality to accept and return paths longer " +"than 260 characters." +msgstr "" +"Історично у Windows довжина шляху обмежена 260 символами. Це означало, що " +"шляхи, довші за цей, не вирішуватимуться, і спричинятимуться помилки. В " +"останніх версіях Windows це обмеження можна розширити приблизно до 32 000 " +"символів. Це дозволяє функції open(), модулю os і більшості інших функцій " +"шляху приймати та повертати шляхи, довші за 260 символів." + +#: ../../src/intro/install.txt:99 +msgid "You will need PC administrator assistance to perform this action." +msgstr "Для виконання цієї дії вам знадобиться допомога адміністратора ПК." + +#: ../../src/intro/install.txt:102 +msgid "Install from the Microsoft Store" +msgstr "Встановити з Microsoft Store" + +#: ../../src/intro/install.txt:104 +msgid "You can install from the Microsoft Store in two steps:" +msgstr "Ви можете встановити з Microsoft Store у два кроки:" + +#: ../../src/intro/install.txt:106 +msgid "" +"Open the Microsoft Store app and search for ``Python`` The result should " +"look like:" +msgstr "" +"Відкрийте програму Microsoft Store і знайдіть ``Python``. Результат має " +"виглядати так:" + +#: ../../src/intro/install.txt:112 +msgid "Microsoft Store - search results for \"Python\"" +msgstr "Microsoft Store - результати пошуку для \"Python\"" + +#: ../../src/intro/install.txt:114 +msgid "Select ``Python 3.9`` or the higher available version." +msgstr "Виберіть ``Python 3.9`` або вищу доступну версію." + +#: ../../src/intro/install.txt:116 +msgid "" +"Click **GET** and wait until the installer is downloaded. The installation " +"process should run automatically. Follow the installer's instructions." +msgstr "" +"Натисніть **GET** і дочекайтеся завантаження інсталятора. Процес " +"встановлення має запуститися автоматично. Дотримуйтесь інструкцій " +"інсталятора." + +#: ../../src/intro/install.txt:124 +msgid "Online Interpreters" +msgstr "Онлайн Інтерпретатори" + +#: ../../src/intro/install.txt:126 +msgid "" +"Installing or updating Python on your computer is the first step to becoming " +"a Python programmer :cite:`realpython:install-and-setup`." +msgstr "" +"Встановлення або оновлення Python на вашому комп’ютері – це перший крок до " +"того, щоб стати програмістом Python :cite:`realpython:install-and-setup`." + +#: ../../src/intro/install.txt:129 +msgid "" +"But if you cannot install Python at the moment for some reason, are can go " +"with online interpreters. `repl.it `_ provides the " +"ability to create and store Python scripts (they are called *repl* here) for " +"free." +msgstr "" +"Але якщо ви не можете встановити Python на даний момент з якоїсь причини, " +"можна скористатися онлайн-інтерпретаторами. `repl.it `_ " +"надає можливість безкоштовно створювати та зберігати сценарії Python (тут " +"вони називаються *repl*)." + +#: ../../src/intro/interact.txt:3 +msgid "Interacting with Python Interpreter" +msgstr "Взаємодія з інтерпретатором Python" + +#: ../../src/intro/interact.txt:5 +msgid "It’s time to write some Python code!" +msgstr "Настав час написати код на Python!" + +#: ../../src/intro/interact.txt:7 +msgid ":cite:t:`realpython:interact`" +msgstr ":cite:t:`realpython:interact`" + +#: ../../src/intro/interact.txt:9 +msgid "In short there are three major ways to do something with Python:" +msgstr "Коротше кажучи, є три основні способи зробити щось з Python:" + +#: ../../src/intro/interact.txt:11 +msgid "interactive Python console" +msgstr "інтерактивна консоль Python" + +#: ../../src/intro/interact.txt:12 +msgid "running code from file [#]_" +msgstr "запуск коду з файлу [#]_" + +#: ../../src/intro/interact.txt:13 +msgid "use online editors (like `repl.it `_)" +msgstr "" +"використовувати онлайн-редактори (наприклад, `repl.it `_)" + +#: ../../src/intro/interact.txt:16 +msgid "Using Python interpreter interactively" +msgstr "Використання інтерпретатора Python в інтерактивному режимі" + +#: ../../src/intro/interact.txt:18 +msgid "" +"Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight " +"forward way to start talking to Python. This simply means starting up the " +"interpreter and typing commands to it directly :cite:`realpython:interact`. " +"The interpreter:" +msgstr "" +"Використання середовища :abbr:`REPL (Read-Eval-Print-Loop)` є найпростішим " +"способом почати спілкування з Python. Це просто означає запуск " +"інтерпретатора та введення команд безпосередньо в нього :cite:`realpython:" +"interact`. Перекладач:" + +#: ../../src/intro/interact.txt:23 +msgid "Reads the command you enter" +msgstr "Читає введену команду" + +#: ../../src/intro/interact.txt:24 +msgid "Evaluates and executes it" +msgstr "Оцінює та виконує її" + +#: ../../src/intro/interact.txt:25 +msgid "Prints the output (if any) back to the console" +msgstr "Друкує результат (якщо є) назад на консоль" + +#: ../../src/intro/interact.txt:26 +msgid "Loops back and repeats" +msgstr "Повертається назад та повторює" + +#: ../../src/intro/interact.txt:29 +msgid "Starting the interpreter" +msgstr "Запуск інтерпретатора" + +#: ../../src/intro/interact.txt:31 +msgid "" +"In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the " +"installer placed a shortcut on the desktop to launch the Python." +msgstr "" +"У середовищі :abbr:`GUI (Graphic User Interface)`, імовірно, інсталятор " +"розмістив ярлик на робочому столі для запуску Python." + +#: ../../src/intro/interact.txt:34 +msgid "" +"For example in Windows the interpreter can be found in the **Start** menu " +"labeled **Python 3.x**:" +msgstr "" +"Наприклад, у Windows інтерпретатор можна знайти в меню **Пуск** з позначкою " +"**Python 3.x**:" + +#: ../../src/intro/interact.txt:40 +msgid "Windows start menu Python group" +msgstr "Меню Пуск Windows Група Python" + +#: ../../src/intro/interact.txt:42 +msgid "" +"In case you are getting error saying python is not installed, but you are " +"sure that the interpreter **is installed** - this means you have no Python " +"in your ``PATH``. Message may look like: ``'python' is not recognized as an " +"internal or external command`` / ``python: command not found``" +msgstr "" +"Якщо ви отримуєте повідомлення про те, що python не встановлено, але ви " +"впевнені, що інтерпретатор **встановлено**, це означає, що у вашому ``PATH`` " +"немає Python. Повідомлення може виглядати так: ``'python' не розпізнається " +"як внутрішня або зовнішня команда`` / ``python: команда не знайдена``" + +#: ../../src/intro/interact.txt:48 +msgid "Refer :doc:`/appx/env_path` for problem solution." +msgstr "Зверніться до :doc:`/appx/env_path` для вирішення проблеми." + +#: ../../src/intro/interact.txt:50 +msgid "The alternative is to launch from a terminal window:" +msgstr "Альтернативою є запуск із вікна терміналу:" + +#: ../../src/intro/interact.txt:52 +msgid "**Command Prompt** in Windows" +msgstr "**Командний рядок** у Windows" + +#: ../../src/intro/interact.txt:53 +msgid "**Terminal** both in macOS and Linux" +msgstr "**Термінал** в macOS і Linux" + +#: ../../src/intro/interact.txt:58 +msgid "Start Python via Command Prompt" +msgstr "Запуск Python через командний рядок" + +#: ../../src/intro/interact.txt:63 +msgid "Start Python via Terminal" +msgstr "Запуск Python через термінал" + +#: ../../src/intro/interact.txt:66 +msgid "Running code" +msgstr "Запускаємо код" + +#: ../../src/intro/interact.txt:68 +msgid "" +"Put the Python code in interactive console and press enter to execute it." +msgstr "" +"Помістіть код Python в інтерактивну консоль і натисніть enter, щоб виконати " +"його." + +#: ../../src/intro/interact.txt:70 +msgid "" +"Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after " +"it" +msgstr "" +"Переконайтеся, що підказка ``>>>`` відображається, а курсор знаходиться " +"після неї" + +#: ../../src/intro/interact.txt:72 +msgid "Type the command ``print(\"Hello, World!\")``" +msgstr "Введіть команду ``print(\"Hello, World!\")``" + +#: ../../src/intro/interact.txt:73 +msgid "Press enter" +msgstr "Натисніть enter" + +#: ../../src/intro/interact.txt:79 +msgid "Your session should look like:" +msgstr "Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:86 +msgid "" +"If you've seen string \"Hello, World!\" printed back, congrats - you've run " +"your first program in Python." +msgstr "" +"Якщо ви бачили рядок \"Hello, World!\" надруковано, вітаємо - ви запустили " +"свою першу програму на Python." + +#: ../../src/intro/interact.txt:94 +msgid "Exiting the interpreter" +msgstr "Вихід з інтерпретатора" + +#: ../../src/intro/interact.txt:96 +msgid "To exit the interactive console type \"exit\" and hit enter." +msgstr "Щоб вийти з інтерактивної консолі, введіть \"exit\" і натисніть Enter." + +#: ../../src/intro/interact.txt:103 +msgid "Running code from file" +msgstr "Запуск коду з файлу" + +#: ../../src/intro/interact.txt:105 +msgid "" +"A Python script is a reusable set of code. It is essentially a Python " +"program - a sequence of Python instructions - contained in a file. You can " +"run the program by specifying the name of the script file to the interpreter." +msgstr "" +"Сценарій Python — це багаторазовий набір коду. По суті, це програма на " +"Python – послідовність інструкцій Python, які містяться у файлі. Ви можете " +"запустити програму, вказавши інтерпретатору назву файлу сценарію." + +#: ../../src/intro/interact.txt:109 +msgid "" +"Python scripts are just plain text, so you can edit them with any text " +"editor. If you have a favorite programmer’s editor that operates on text " +"files, it should be fine to use. Otherwise here are some options for the " +"first time:" +msgstr "" +"Сценарії Python — це звичайний текст, тому ви можете редагувати їх у будь-" +"якому текстовому редакторі. Якщо у вас є улюблений програмістський редактор, " +"який працює з текстовими файлами, його цілком можна використовувати. Інакше " +"ось кілька варіантів для першого разу:" + +#: ../../src/intro/interact.txt:113 +msgid "Windows: |npp| `Notepad++ `_" +msgstr "Windows: |npp| `Notepad++ `_" + +#: ../../src/intro/interact.txt:148 +msgid "npp" +msgstr "npp" + +#: ../../src/intro/interact.txt:114 +msgid "Linux: |geany| `Geany `_" +msgstr "Linux: |geany| `Geany `_" + +#: ../../src/intro/interact.txt:150 +msgid "geany" +msgstr "geany" + +#: ../../src/intro/interact.txt:116 +msgid "" +"Using whatever editor create a script file called ``hello.py`` and put the " +"code in it:" +msgstr "" +"Використовуючи будь-який редактор, створіть файл сценарію під назвою ``hello." +"py`` і помістіть у нього код:" + +#: ../../src/intro/interact.txt:123 +msgid "" +"Save file keeping track on the directory you choose to save into. Now, open " +"the terminal or command prompt in this directory." +msgstr "" +"Збережіть файл, відстежуючи його в каталозі, який ви вибрали для збереження. " +"Тепер відкрийте термінал або командний рядок у цьому каталозі." + +#: ../../src/intro/interact.txt:126 +msgid "" +"In window you may open Command Prompt in the directory by typing \"cmd\" to " +"the address bar in explorer." +msgstr "" +"У вікні ви можете відкрити командний рядок у каталозі, ввівши \"cmd\" в " +"адресний рядок провідника." + +#: ../../src/intro/interact.txt:129 +msgid "In the terminal (or command prompt) type:" +msgstr "У терміналі (або командному рядку) введіть:" + +#: ../../src/intro/interact.txt:135 +msgid "" +"Python will print string \"Hello, World!\". Your session should look like:" +msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:144 +msgid "Files containing Python code are called *modules*." +msgstr "Файли, що містять код Python, називаються *модулями*." From a8c8613182581df5ae4e33689684743899004925 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 05:53:30 +0300 Subject: [PATCH 326/689] Added "under construction" notice Signed-off-by: Serhii Horodilov --- assets/img/construction.svg | 119 ++++++++++++++++++++++++++ src/_locales/uk/LC_MESSAGES/appx.po | 14 +-- src/_locales/uk/LC_MESSAGES/basics.po | 19 ++-- src/_locales/uk/LC_MESSAGES/deploy.po | 10 ++- src/_locales/uk/LC_MESSAGES/django.po | 10 ++- src/_locales/uk/LC_MESSAGES/flask.po | 10 ++- src/_locales/uk/LC_MESSAGES/linux.po | 10 ++- src/appx/code_edit.txt | 8 ++ src/appx/env_path.txt | 8 ++ src/basics/functions.txt | 8 ++ src/basics/modules.txt | 8 ++ src/basics/pep8.txt | 8 ++ src/basics/testing.txt | 8 ++ src/deploy/index.txt | 8 ++ src/django/index.txt | 8 ++ src/flask/index.txt | 8 ++ src/linux/index.txt | 8 ++ 17 files changed, 243 insertions(+), 29 deletions(-) create mode 100644 assets/img/construction.svg diff --git a/assets/img/construction.svg b/assets/img/construction.svg new file mode 100644 index 000000000..b58bb33ee --- /dev/null +++ b/assets/img/construction.svg @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 6552c8f23..827234ce8 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 04:34+0300\n" -"PO-Revision-Date: 2023-04-21 04:41+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -594,11 +594,15 @@ msgstr "Serhii Horodilov sgorodil@gmail.com" msgid "python, editor, ide" msgstr "python, editor, ide" -#: ../../src/appx/code_edit.txt:8 +#: ../../src/appx/code_edit.txt:8 ../../src/appx/env_path.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/appx/code_edit.txt:16 msgid "Code Editors" msgstr "Редактори Коду" -#: ../../src/appx/code_edit.txt:10 +#: ../../src/appx/code_edit.txt:18 msgid "" "Writing Python using IDLE or the Python Shell is great for simple things, " "but those tools quickly turn larger programming projects into frustrating " @@ -1158,7 +1162,7 @@ msgstr "Встановлення змінних середовища" msgid "settings, environment, variables" msgstr "settings, environment, variables" -#: ../../src/appx/env_path.txt:8 +#: ../../src/appx/env_path.txt:16 msgid "Issue - System Environment PATH" msgstr "Проблема - System Environment PATH" diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index 1782d6ae1..bd165e671 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # OLEKSANDR YEROMIN , 2023. -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:10+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -775,7 +773,12 @@ msgstr "Функції в Python" msgid "python, basics, functions" msgstr "python, basics, functions" -#: ../../src/basics/functions.txt:8 ../../src/basics/syntax.txt +#: ../../src/basics/functions.txt:8 ../../src/basics/modules.txt:8 +#: ../../src/basics/pep8.txt:8 ../../src/basics/testing.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/functions.txt:16 ../../src/basics/syntax.txt msgid "Functions" msgstr "Функції" @@ -799,7 +802,7 @@ msgstr "Модулі та імпорти в Pythons" msgid "python, basics, modules, import" msgstr "python, basics, modules, import" -#: ../../src/basics/modules.txt:8 +#: ../../src/basics/modules.txt:16 msgid "Pythons Modules and Imports" msgstr "Модулі та імпорт Pythons" @@ -811,7 +814,7 @@ msgstr "Керівництво по стилю PEP8" msgid "python, style, guide" msgstr "python, style, guide" -#: ../../src/basics/pep8.txt:8 +#: ../../src/basics/pep8.txt:16 msgid "Style Guides: PEP8" msgstr "Керівництво по стилю: PEP8" @@ -1757,7 +1760,7 @@ msgstr "Тестування в Python" msgid "python, testing, unittest, pytest" msgstr "python, testing, unittest, pytest" -#: ../../src/basics/testing.txt:8 +#: ../../src/basics/testing.txt:16 msgid "Testing" msgstr "Тестування" diff --git a/src/_locales/uk/LC_MESSAGES/deploy.po b/src/_locales/uk/LC_MESSAGES/deploy.po index fb09a6345..c58769a41 100644 --- a/src/_locales/uk/LC_MESSAGES/deploy.po +++ b/src/_locales/uk/LC_MESSAGES/deploy.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:10+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "python, deployment, index" msgstr "python, deployment, index" #: ../../src/deploy/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/deploy/index.txt:16 msgid "Application Deployment" msgstr "Розгортання Застосунків" diff --git a/src/_locales/uk/LC_MESSAGES/django.po b/src/_locales/uk/LC_MESSAGES/django.po index aa6f13549..27578b7b2 100644 --- a/src/_locales/uk/LC_MESSAGES/django.po +++ b/src/_locales/uk/LC_MESSAGES/django.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "python, web, django, index" msgstr "python, web, django, index" #: ../../src/django/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/django/index.txt:16 msgid "Django Framework" msgstr "Фреймворк Django" diff --git a/src/_locales/uk/LC_MESSAGES/flask.po b/src/_locales/uk/LC_MESSAGES/flask.po index 230a47bff..43db26d64 100644 --- a/src/_locales/uk/LC_MESSAGES/flask.po +++ b/src/_locales/uk/LC_MESSAGES/flask.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:11+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:51+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "python, web, flask, index" msgstr "python, web, flask, index" #: ../../src/flask/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/flask/index.txt:16 msgid "Flask Framework" msgstr "Фреймворк Flask" diff --git a/src/_locales/uk/LC_MESSAGES/linux.po b/src/_locales/uk/LC_MESSAGES/linux.po index f2e9099a4..7675956e4 100644 --- a/src/_locales/uk/LC_MESSAGES/linux.po +++ b/src/_locales/uk/LC_MESSAGES/linux.po @@ -3,15 +3,13 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:12+0300\n" +"POT-Creation-Date: 2023-04-21 05:50+0300\n" +"PO-Revision-Date: 2023-04-21 05:52+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -34,5 +32,9 @@ msgid "linux, basics, index" msgstr "linux, basics, index" #: ../../src/linux/index.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/linux/index.txt:16 msgid "Linux Basics" msgstr "Основи Linux" diff --git a/src/appx/code_edit.txt b/src/appx/code_edit.txt index bf670b741..7ee5f2619 100644 --- a/src/appx/code_edit.txt +++ b/src/appx/code_edit.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov sgorodil@gmail.com :keywords: python, editor, ide +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############ Code Editors ############ diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 94de3dc45..07e7680c1 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov sgorodil@gmail.com :keywords: settings, environment, variables +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################### Issue - System Environment PATH ############################### diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 7200e1b0d..62837cdc2 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, basics, functions +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Functions ******************************************************************************* diff --git a/src/basics/modules.txt b/src/basics/modules.txt index 8e5ab24b8..bb2091a9e 100644 --- a/src/basics/modules.txt +++ b/src/basics/modules.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, basics, modules, import +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Pythons Modules and Imports ******************************************************************************* diff --git a/src/basics/pep8.txt b/src/basics/pep8.txt index 38170170f..0a847606f 100644 --- a/src/basics/pep8.txt +++ b/src/basics/pep8.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, style, guide +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Style Guides: PEP8 ******************************************************************************* diff --git a/src/basics/testing.txt b/src/basics/testing.txt index e4ea3f602..ec4ca804a 100644 --- a/src/basics/testing.txt +++ b/src/basics/testing.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, testing, unittest, pytest +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ******************************************************************************* Testing ******************************************************************************* diff --git a/src/deploy/index.txt b/src/deploy/index.txt index 740795f60..3c4d0446f 100644 --- a/src/deploy/index.txt +++ b/src/deploy/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, deployment, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Application Deployment ############################################################################### diff --git a/src/django/index.txt b/src/django/index.txt index 3c49e7f10..ae818a672 100644 --- a/src/django/index.txt +++ b/src/django/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, web, django, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Django Framework ############################################################################### diff --git a/src/flask/index.txt b/src/flask/index.txt index 5eeec5ca3..edefc6de1 100644 --- a/src/flask/index.txt +++ b/src/flask/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: python, web, flask, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Flask Framework ############################################################################### diff --git a/src/linux/index.txt b/src/linux/index.txt index e1f6917b0..2addd6581 100644 --- a/src/linux/index.txt +++ b/src/linux/index.txt @@ -3,6 +3,14 @@ :author: Serhii Horodilov :keywords: linux, basics, index +.. todo + +.. attention:: Page is under construction + + .. figure:: /../assets/img/construction.svg + :figwidth: 250 + :align: center + ############################################################################### Linux Basics ############################################################################### From 858c5c152849b7face169638b0c07ee0c1086815 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 06:01:09 +0300 Subject: [PATCH 327/689] Fixed #66 Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/intro.po | 289 ++++++++++++++------------- src/intro/index.txt | 33 +-- 2 files changed, 172 insertions(+), 150 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/intro.po b/src/_locales/uk/LC_MESSAGES/intro.po index a94e8d8ae..8551dc512 100644 --- a/src/_locales/uk/LC_MESSAGES/intro.po +++ b/src/_locales/uk/LC_MESSAGES/intro.po @@ -1,27 +1,27 @@ # INTRODUCTION SECTION TRANSLATION. # # Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training Course package. -# -# FIRST AUTHOR , YEAR. -# +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 04:34+0300\n" -"PO-Revision-Date: 2023-04-21 05:21+0300\n" +"POT-Creation-Date: 2023-04-21 06:01+0300\n" +"PO-Revision-Date: 2023-04-21 06:02+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/intro/index.txt:120 +#: ../../src/intro/index.txt:123 msgid "Contents" msgstr "Зміст" @@ -41,7 +41,7 @@ msgstr "" msgid "|guido| Guido van Rossum" msgstr "|guido| Гвідо ван Россум" -#: ../../src/intro/index.txt:172 +#: ../../src/intro/index.txt:175 msgid "guido" msgstr "guido" @@ -63,7 +63,7 @@ msgstr "" "наступника мови під назвою ABC. Гвідо залишається головним автором Python, " "хоча мова містить багато внесків від інших авторів." -#: ../../src/intro/index.txt:129 +#: ../../src/intro/index.txt:132 msgid "python" msgstr "python" @@ -144,35 +144,35 @@ msgstr "" msgid "google facebook instagram spotify quora netflix dropbox reddit" msgstr "google facebook instagram spotify quora netflix dropbox reddit" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Google" msgstr "Google" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Facebook" msgstr "Facebook" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Instagram" msgstr "Instagram" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Spotify" msgstr "Spotify" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Quora" msgstr "Quora" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Netflix" msgstr "Netflix" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Dropbox" msgstr "Dropbox" -#: ../../src/intro/index.txt:0 +#: ../../src/intro/index.txt msgid "Reddit" msgstr "Reddit" @@ -251,151 +251,155 @@ msgstr "" "інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " "У Python лише 35 :cite:`docs-python:keywords`, і вони:" -#: ../../src/intro/index.txt:88 -msgid "False" -msgstr "False" +#: ../../src/intro/index.txt:87 +msgid "Python Keywords" +msgstr "Ключові слова Python" + +#: ../../src/intro/index.txt:91 +msgid "``False``" +msgstr "``False``" -#: ../../src/intro/index.txt:88 -msgid "await" -msgstr "await" +#: ../../src/intro/index.txt:91 +msgid "``await``" +msgstr "``await``" -#: ../../src/intro/index.txt:88 -msgid "else" -msgstr "else" +#: ../../src/intro/index.txt:91 +msgid "``else``" +msgstr "``else``" -#: ../../src/intro/index.txt:88 -msgid "import" -msgstr "import" +#: ../../src/intro/index.txt:91 +msgid "``import``" +msgstr "``import``" -#: ../../src/intro/index.txt:88 -msgid "pass" -msgstr "pass" +#: ../../src/intro/index.txt:91 +msgid "``pass``" +msgstr "``pass``" -#: ../../src/intro/index.txt:90 -msgid "None" -msgstr "None" +#: ../../src/intro/index.txt:93 +msgid "``None``" +msgstr "``None``" -#: ../../src/intro/index.txt:90 -msgid "break" -msgstr "break" +#: ../../src/intro/index.txt:93 +msgid "``break``" +msgstr "``break``" -#: ../../src/intro/index.txt:90 -msgid "except" -msgstr "except" +#: ../../src/intro/index.txt:93 +msgid "``except``" +msgstr "``except``" -#: ../../src/intro/index.txt:90 -msgid "in" -msgstr "in" +#: ../../src/intro/index.txt:93 +msgid "``in``" +msgstr "``in``" -#: ../../src/intro/index.txt:90 -msgid "raise" -msgstr "raise" +#: ../../src/intro/index.txt:93 +msgid "``raise``" +msgstr "``raise``" -#: ../../src/intro/index.txt:92 -msgid "True" -msgstr "True" +#: ../../src/intro/index.txt:95 +msgid "``True``" +msgstr "``True``" -#: ../../src/intro/index.txt:92 -msgid "class" -msgstr "class" +#: ../../src/intro/index.txt:95 +msgid "``class``" +msgstr "``class``" -#: ../../src/intro/index.txt:92 -msgid "finally" -msgstr "finally" +#: ../../src/intro/index.txt:95 +msgid "``finally``" +msgstr "``finally``" -#: ../../src/intro/index.txt:92 -msgid "is" -msgstr "is" +#: ../../src/intro/index.txt:95 +msgid "``is``" +msgstr "``is``" -#: ../../src/intro/index.txt:92 -msgid "return" -msgstr "return" +#: ../../src/intro/index.txt:95 +msgid "``return``" +msgstr "``return``" -#: ../../src/intro/index.txt:94 -msgid "and" -msgstr "and" +#: ../../src/intro/index.txt:97 +msgid "``and``" +msgstr "``and``" -#: ../../src/intro/index.txt:94 -msgid "continue" -msgstr "continue" +#: ../../src/intro/index.txt:97 +msgid "``continue``" +msgstr "``continue``" -#: ../../src/intro/index.txt:94 -msgid "for" -msgstr "for" +#: ../../src/intro/index.txt:97 +msgid "``for``" +msgstr "``for``" -#: ../../src/intro/index.txt:94 -msgid "lambda" -msgstr "lambda" +#: ../../src/intro/index.txt:97 +msgid "``lambda``" +msgstr "``lambda``" -#: ../../src/intro/index.txt:94 -msgid "try" -msgstr "try" +#: ../../src/intro/index.txt:97 +msgid "``try``" +msgstr "``try``" -#: ../../src/intro/index.txt:96 -msgid "as" -msgstr "as" +#: ../../src/intro/index.txt:99 +msgid "``as``" +msgstr "``as``" -#: ../../src/intro/index.txt:96 -msgid "def" -msgstr "def" +#: ../../src/intro/index.txt:99 +msgid "``def``" +msgstr "``def``" -#: ../../src/intro/index.txt:96 -msgid "from" -msgstr "from" +#: ../../src/intro/index.txt:99 +msgid "``from``" +msgstr "``from``" -#: ../../src/intro/index.txt:96 -msgid "nonlocal" -msgstr "nonlocal" +#: ../../src/intro/index.txt:99 +msgid "``nonlocal``" +msgstr "``nonlocal``" -#: ../../src/intro/index.txt:96 -msgid "while" -msgstr "while" +#: ../../src/intro/index.txt:99 +msgid "``while``" +msgstr "``while``" -#: ../../src/intro/index.txt:98 -msgid "assert" -msgstr "assert" +#: ../../src/intro/index.txt:101 +msgid "``assert``" +msgstr "``assert``" -#: ../../src/intro/index.txt:98 -msgid "del" -msgstr "del" +#: ../../src/intro/index.txt:101 +msgid "``del``" +msgstr "``del``" -#: ../../src/intro/index.txt:98 -msgid "global" -msgstr "global" +#: ../../src/intro/index.txt:101 +msgid "``global``" +msgstr "``global``" -#: ../../src/intro/index.txt:98 -msgid "not" -msgstr "not" +#: ../../src/intro/index.txt:101 +msgid "``not``" +msgstr "``not``" -#: ../../src/intro/index.txt:98 -msgid "with" -msgstr "with" +#: ../../src/intro/index.txt:101 +msgid "``with``" +msgstr "``with``" -#: ../../src/intro/index.txt:100 -msgid "async" -msgstr "async" +#: ../../src/intro/index.txt:103 +msgid "``async``" +msgstr "``async``" -#: ../../src/intro/index.txt:100 -msgid "elif" -msgstr "elif" +#: ../../src/intro/index.txt:103 +msgid "``elif``" +msgstr "``elif``" -#: ../../src/intro/index.txt:100 -msgid "if" -msgstr "if" +#: ../../src/intro/index.txt:103 +msgid "``if``" +msgstr "``if``" -#: ../../src/intro/index.txt:100 -msgid "or" -msgstr "or" +#: ../../src/intro/index.txt:103 +msgid "``or``" +msgstr "``or``" -#: ../../src/intro/index.txt:100 -msgid "yield" -msgstr "yield" +#: ../../src/intro/index.txt:103 +msgid "``yield``" +msgstr "``yield``" -#: ../../src/intro/index.txt:104 +#: ../../src/intro/index.txt:107 msgid "Python is general purpose" msgstr "Python є універсальним" -#: ../../src/intro/index.txt:105 +#: ../../src/intro/index.txt:108 msgid "" "Python is everywhere. Talking more specific common scopes for Python " "developers are :cite:`python-usage`:" @@ -403,43 +407,43 @@ msgstr "" "Python всюди. Говорячи про більш конкретні загальні області для розробників " "Python, це :cite:`python-usage`:" -#: ../../src/intro/index.txt:108 +#: ../../src/intro/index.txt:111 msgid "Web Scraping Applications" msgstr "Програми для сканування веб-сторінок" -#: ../../src/intro/index.txt:109 +#: ../../src/intro/index.txt:112 msgid "Data Science Solutions" msgstr "Рішення для Data Science" -#: ../../src/intro/index.txt:110 +#: ../../src/intro/index.txt:113 msgid "Machine Learning Applications" msgstr "Програми машинного навчання" -#: ../../src/intro/index.txt:111 +#: ../../src/intro/index.txt:114 msgid "Web Development" msgstr "Веб-розробка" -#: ../../src/intro/index.txt:112 +#: ../../src/intro/index.txt:115 msgid "Game Development" msgstr "Розробка ігор" -#: ../../src/intro/index.txt:113 +#: ../../src/intro/index.txt:116 msgid "Scientific and Numeric Applications" msgstr "Наукові та обчислювальні програми" -#: ../../src/intro/index.txt:114 +#: ../../src/intro/index.txt:117 msgid "Image Design and Graphic Design Applications" msgstr "Програми для обробки зображень та графіки" -#: ../../src/intro/index.txt:115 +#: ../../src/intro/index.txt:118 msgid "Finance Fintech Platform" msgstr "Банківські та фінансові сервіси" -#: ../../src/intro/index.txt:116 +#: ../../src/intro/index.txt:119 msgid "Language Development" msgstr "Language Development" -#: ../../src/intro/index.txt:117 +#: ../../src/intro/index.txt:120 msgid "Operating Systems" msgstr "Операційні системи" @@ -919,3 +923,18 @@ msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс #: ../../src/intro/interact.txt:144 msgid "Files containing Python code are called *modules*." msgstr "Файли, що містять код Python, називаються *модулями*." + +#~ msgid "in" +#~ msgstr "in" + +#~ msgid "is" +#~ msgstr "is" + +#~ msgid "as" +#~ msgstr "as" + +#~ msgid "if" +#~ msgstr "if" + +#~ msgid "or" +#~ msgstr "or" diff --git a/src/intro/index.txt b/src/intro/index.txt index 322bee8fb..b81778a4e 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -84,21 +84,24 @@ meaning by the compiler or interpreter because they designate specific built-in functionality of the language. There are only 35 :cite:`docs-python:keywords` in Python and they are: -+--------+----------+---------+----------+--------+ -| False | await | else | import | pass | -+--------+----------+---------+----------+--------+ -| None | break | except | in | raise | -+--------+----------+---------+----------+--------+ -| True | class | finally | is | return | -+--------+----------+---------+----------+--------+ -| and | continue | for | lambda | try | -+--------+----------+---------+----------+--------+ -| as | def | from | nonlocal | while | -+--------+----------+---------+----------+--------+ -| assert | del | global | not | with | -+--------+----------+---------+----------+--------+ -| async | elif | if | or | yield | -+--------+----------+---------+----------+--------+ +.. table:: Python Keywords + :align: center + + +------------+--------------+-------------+--------------+------------+ + | ``False`` | ``await`` | ``else`` | ``import`` | ``pass`` | + +------------+--------------+-------------+--------------+------------+ + | ``None`` | ``break`` | ``except`` | ``in`` | ``raise`` | + +------------+--------------+-------------+--------------+------------+ + | ``True`` | ``class`` | ``finally`` | ``is`` | ``return`` | + +------------+--------------+-------------+--------------+------------+ + | ``and`` | ``continue`` | ``for`` | ``lambda`` | ``try`` | + +------------+--------------+-------------+--------------+------------+ + | ``as`` | ``def`` | ``from`` | ``nonlocal`` | ``while`` | + +------------+--------------+-------------+--------------+------------+ + | ``assert`` | ``del`` | ``global`` | ``not`` | ``with`` | + +------------+--------------+-------------+--------------+------------+ + | ``async`` | ``elif`` | ``if`` | ``or`` | ``yield`` | + +------------+--------------+-------------+--------------+------------+ .. rubric:: Python is general purpose From 1a95617e6276b5cd0dd32cf8884c461970338968 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 06:53:11 +0300 Subject: [PATCH 328/689] Fixed "stdtypes" typos and translations Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/basics.po | 40 ++++++++++++------------ src/basics/stdtypes.txt | 44 ++++++++++++++------------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index bd165e671..e4e319374 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"POT-Creation-Date: 2023-04-21 06:44+0300\n" +"PO-Revision-Date: 2023-04-21 06:46+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -903,7 +903,7 @@ msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:40 msgid "``x - y``" -msgstr "``x + y``" +msgstr "``x - y``" #: ../../src/basics/stdtypes.txt:40 msgid "difference of *x* and *y*" @@ -911,7 +911,7 @@ msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:42 msgid "``x * y``" -msgstr "``x + y``" +msgstr "``x * y``" #: ../../src/basics/stdtypes.txt:42 msgid "product of *x* and *y*" @@ -919,7 +919,7 @@ msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:44 msgid "``x / y``" -msgstr "``x + y``" +msgstr "``x / y``" #: ../../src/basics/stdtypes.txt:44 msgid "quotient of *x* and *y*" @@ -927,7 +927,7 @@ msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:46 msgid "``x // y``" -msgstr "``x + y``" +msgstr "``x // y``" #: ../../src/basics/stdtypes.txt:46 msgid "floored quotient of *x* and *y*" @@ -935,15 +935,15 @@ msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:48 msgid "``x % y``" -msgstr "``x + y``" +msgstr "``x % y``" #: ../../src/basics/stdtypes.txt:48 msgid "remainder of ``x / y``" -msgstr "залишок від ділення``x / y``" +msgstr "залишок від ділення ``x / y``" #: ../../src/basics/stdtypes.txt:50 msgid "``-x``" -msgstr "``x + y``" +msgstr "``-x``" #: ../../src/basics/stdtypes.txt:50 msgid "*x* negated" @@ -951,7 +951,7 @@ msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:52 msgid "``+x``" -msgstr "``x + y``" +msgstr "``+x``" #: ../../src/basics/stdtypes.txt:52 msgid "*y* unchanged" @@ -959,7 +959,7 @@ msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:54 msgid "``abs(x)``" -msgstr "``x + y``" +msgstr "``abs(x)``" #: ../../src/basics/stdtypes.txt:54 msgid "absolute value or magnitude of *x*" @@ -967,7 +967,7 @@ msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:56 msgid "``int(x)``" -msgstr "``x + y``" +msgstr "``int(x)``" #: ../../src/basics/stdtypes.txt:56 msgid "*x* converted to integer" @@ -975,7 +975,7 @@ msgstr "*x* перетворено на ціле число" #: ../../src/basics/stdtypes.txt:58 msgid "``float(x)``" -msgstr "``x + y``" +msgstr "``float(x)``" #: ../../src/basics/stdtypes.txt:58 msgid "*x* converted to floating point" @@ -983,7 +983,7 @@ msgstr "*x* перетворено на число з плаваючою ком #: ../../src/basics/stdtypes.txt:60 msgid "``complex(re, im)``" -msgstr "``x + y``" +msgstr "``complex(re, im)``" #: ../../src/basics/stdtypes.txt:60 msgid "" @@ -995,7 +995,7 @@ msgstr "" #: ../../src/basics/stdtypes.txt:63 msgid "``divmod(x, y)``" -msgstr "``x + y``" +msgstr "``divmod(x, y)``" #: ../../src/basics/stdtypes.txt:63 msgid "the pair ``(x // y, x % y)``" @@ -1003,7 +1003,7 @@ msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:65 msgid "``pow(x, y)`` ``x ** y``" -msgstr "``x + y``" +msgstr "``pow(x, y)`` ``x ** y``" #: ../../src/basics/stdtypes.txt:65 msgid "*x* to the power *y*" @@ -1022,12 +1022,12 @@ msgstr "" #: ../../src/basics/stdtypes.txt:74 msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " -"optional prefix \"+\" or \"-\" for :abbr:Nan(Not a Number) and positive and " -"negative infinity." +"optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " +"and negative infinity." msgstr "" "``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " -"префіксом \"+\" або \"-\" для: abbr:Nan(не число) і позитивна і негативна " -"нескінченність." +"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " +"позитивна та негативна нескінченність." #: ../../src/basics/stdtypes.txt:79 msgid "Code examples" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 1cf40f323..06d1f9e69 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -72,7 +72,7 @@ Supported operations ``1 // 2`` is ``0`` .. note:: ``float(x)`` also accepts the strings ``"nan"`` and ``"inf"`` with - an optional prefix "+" or "-" for :abbr:Nan(Not a Number) and + an optional prefix "+" or "-" for :abbr:`NaN(Not a Number)` and positive and negative infinity. Code examples @@ -80,30 +80,32 @@ Code examples .. code-block:: python :caption: Integer numbers + :linenos: - x = 42 - y = 24 - a = int(42) - b = int(42.24) - - result = x + y # for both int operands only - result = x - y # for both int operands only - result = x * y # for both int operands only - result = x // y # for any numeric operands + >>> x = 42 + >>> y = 24 + >>> a = int(42) + >>> b = int(42.24) + >>> # result is of the integer type + >>> result_add = x + y # for both int operands only + >>> result_sub = x - y # for both int operands only + >>> result_mul = x * y # for both int operands only + >>> result_div = x // y # for any numeric operands .. code-block:: python :caption: Floating point numbers - - x = 42. - y = .24 - z = 42.24 - a = float(42) - b = float(42.24) - - result = x + y # for any float operand - result = x - y # for any float operand - result = x * y # for any float operand - result = x / y # for any numeric operands + :linenos: + + >>> x = 42. + >>> y = .24 + >>> z = 42.24 + >>> a = float(42) + >>> b = float(42.24) + >>> # result is of the float type + >>> result_add = x + y # for any float operand + >>> result_sub = x - y # for any float operand + >>> result_mul = x * y # for any float operand + >>> result_div = x / y # for any numeric operands Value comparisons ----------------- From f55c88411965c220f6b48d6444cb3c4b8148ae62 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 23:02:00 +0300 Subject: [PATCH 329/689] Updated problem-sets from remote --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index 0dffa6dcf..404c2a91f 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 0dffa6dcf7801dc7150c0a0496b5816f71ebff42 +Subproject commit 404c2a91ff45fa49d424bf5b2930e458dbab6593 From ee02857de946c31e64963ca02fb3fffaa80f5bb1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 21 Apr 2023 23:10:15 +0300 Subject: [PATCH 330/689] Updated "appx" translations Signed-off-by: Serhii Horodilov --- src/_locales/uk/LC_MESSAGES/appx.po | 291 ++++++++++------------------ 1 file changed, 97 insertions(+), 194 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 827234ce8..fad6b9da9 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"POT-Creation-Date: 2023-04-21 23:02+0300\n" +"PO-Revision-Date: 2023-04-21 23:09+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -1858,31 +1858,32 @@ msgstr "Чарівники, Злодії та Рицарі" #: ../../problem-sets/src/wtk/challenge.rst:5 msgid "" -"\"Wizards, Thieves and Knights\" (WTK) game is a \"Paper, Rock and " -"Scissors\" clone but in a fantasy setting. It comes with a simple command " -"line interface where the use must type in his or her choice. The enemy is " -"controlled by the script. The player's goal is to gain as many score points, " -"as it possible." +"\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " +"player's goal is to gain as many score points, as it possible." msgstr "" -"Гра \"Чарівники, Злодії та Рицарі» (WTK) — це клон \"Камень, ножиці, " -"бумага\", але у фентезійному сеттингу. Вона має простий інтерфейс командного " -"рядка, де користувач повинен ввести свій вибір. Ворогом керує скрипт. Мета " -"гравця - набрати якомога більше очок." +"Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." -#: ../../problem-sets/src/wtk/challenge.rst:12 +#: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" msgstr "Організація коду" -#: ../../problem-sets/src/wtk/challenge.rst:14 +#: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" msgstr "" "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" -#: ../../problem-sets/src/wtk/challenge.rst:26 +#: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" msgstr "Загальний опис ігрового процесу" -#: ../../problem-sets/src/wtk/challenge.rst:28 +#: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" "The game process is divided into rounds. Each round consists of **attack** " "and **defence** stages. Rounds are repeated, until player is defeated." @@ -1890,31 +1891,31 @@ msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." -#: ../../problem-sets/src/wtk/challenge.rst:32 +#: ../../problem-sets/src/wtk/challenge.rst:33 msgid "Fight rules" msgstr "Правила боротьби" -#: ../../problem-sets/src/wtk/challenge.rst:34 +#: ../../problem-sets/src/wtk/challenge.rst:35 msgid "It's simple..." msgstr "Це просто..." -#: ../../problem-sets/src/wtk/challenge.rst:36 +#: ../../problem-sets/src/wtk/challenge.rst:37 msgid "**Wizard** beats **Knight**" msgstr "**Чарівник** перемагає **Рицаря**" -#: ../../problem-sets/src/wtk/challenge.rst:37 +#: ../../problem-sets/src/wtk/challenge.rst:38 msgid "**Thief** beats **Wizard**" msgstr "**Злодій** перемагає **Чарівника**" -#: ../../problem-sets/src/wtk/challenge.rst:38 +#: ../../problem-sets/src/wtk/challenge.rst:39 msgid "**Knight** beats **Thief**" msgstr "**Рицар** перемагає **Злодія**" -#: ../../problem-sets/src/wtk/challenge.rst:41 +#: ../../problem-sets/src/wtk/challenge.rst:42 msgid "Attack stage" msgstr "Стадія атаки" -#: ../../problem-sets/src/wtk/challenge.rst:43 +#: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " "**knight**, enemy selects the choice for defence from the same options by " @@ -1923,35 +1924,35 @@ msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" -#: ../../problem-sets/src/wtk/challenge.rst:47 +#: ../../problem-sets/src/wtk/challenge.rst:48 msgid "enemy health is decreased" msgstr "здоров'я ворога зменшено" -#: ../../problem-sets/src/wtk/challenge.rst:48 +#: ../../problem-sets/src/wtk/challenge.rst:49 msgid "player gains score points" msgstr "гравець отримує очки" -#: ../../problem-sets/src/wtk/challenge.rst:50 +#: ../../problem-sets/src/wtk/challenge.rst:51 msgid "In case enemy is defeated:" msgstr "Якщо ворог переможений:" -#: ../../problem-sets/src/wtk/challenge.rst:52 +#: ../../problem-sets/src/wtk/challenge.rst:53 msgid "a new enemy instance is initialized using higher level" msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" -#: ../../problem-sets/src/wtk/challenge.rst:53 +#: ../../problem-sets/src/wtk/challenge.rst:54 msgid "player gains some extra score points" msgstr "гравець отримує додаткові очки" -#: ../../problem-sets/src/wtk/challenge.rst:54 +#: ../../problem-sets/src/wtk/challenge.rst:55 msgid "next defence stage is skipped, and player attacks again" msgstr "наступний етап захисту пропущено, і гравець атакує знову" -#: ../../problem-sets/src/wtk/challenge.rst:57 +#: ../../problem-sets/src/wtk/challenge.rst:58 msgid "Defence stage" msgstr "Стадія захисту" -#: ../../problem-sets/src/wtk/challenge.rst:59 +#: ../../problem-sets/src/wtk/challenge.rst:60 msgid "" "Player selects the choice to defend from **wizard**, **thief** or " "**knight**, enemy selects the choice to attack from the same options by " @@ -1960,31 +1961,31 @@ msgstr "" "Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " "обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" -#: ../../problem-sets/src/wtk/challenge.rst:63 +#: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" msgstr "здоров'я гравця знижено" -#: ../../problem-sets/src/wtk/challenge.rst:65 +#: ../../problem-sets/src/wtk/challenge.rst:66 msgid "If player is defeated:" msgstr "Якщо гравець переможений:" -#: ../../problem-sets/src/wtk/challenge.rst:67 +#: ../../problem-sets/src/wtk/challenge.rst:68 msgid "report the message about gained score points to the terminal" msgstr "повідомляти повідомлення про набрані бали на термінал" -#: ../../problem-sets/src/wtk/challenge.rst:68 +#: ../../problem-sets/src/wtk/challenge.rst:69 msgid "write down player's name and score points to \"scores.txt\" file" msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" -#: ../../problem-sets/src/wtk/challenge.rst:72 +#: ../../problem-sets/src/wtk/challenge.rst:73 msgid "Exceptions" msgstr "Винятки" -#: ../../problem-sets/src/wtk/challenge.rst:75 +#: ../../problem-sets/src/wtk/challenge.rst:76 msgid "Enemy down" msgstr "Ворога переможено" -#: ../../problem-sets/src/wtk/challenge.rst:77 +#: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" "This is an exceptional scenario when enemy is defeated. A custom exception " "``EnemyDown`` should be used to track these cases. Exception should provide " @@ -1998,11 +1999,11 @@ msgstr "" msgid "Raised when an enemy is defeated" msgstr "Виникає, коли ворог переможений" -#: ../../problem-sets/src/wtk/challenge.rst:84 +#: ../../problem-sets/src/wtk/challenge.rst:85 msgid "Game over" msgstr "Гра завершена" -#: ../../problem-sets/src/wtk/challenge.rst:86 +#: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" "This is an exceptional scenario when player is defeated. A custom exception " "``GameOver`` should be used to track these cases. Exception should provide " @@ -2016,11 +2017,11 @@ msgstr "" msgid "Raised when a player is defeated" msgstr "Виникає, коли гравця переможено" -#: ../../problem-sets/src/wtk/challenge.rst:94 +#: ../../problem-sets/src/wtk/challenge.rst:95 msgid "Models" msgstr "Моделі" -#: ../../problem-sets/src/wtk/challenge.rst:97 +#: ../../problem-sets/src/wtk/challenge.rst:98 msgid "Enemy" msgstr "Ворог" @@ -2045,6 +2046,10 @@ msgid "Initialize instance" msgstr "Ініціалізувати екземпляр" #: of wtk.models.Enemy.__init__:3 +msgid "Health value is equal to the level value." +msgstr "Значення здоров'я дорівнює значенню рівня." + +#: of wtk.models.Enemy.__init__:5 msgid "an enemy's level indicator" msgstr "індикатор рівня противника" @@ -2081,12 +2086,12 @@ msgstr "Вибори, зроблені супротивником, випадк msgid "a fight choice" msgstr "варіант для бою" -#: ../../problem-sets/src/wtk/challenge.rst:103 +#: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." msgstr "" "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." -#: ../../problem-sets/src/wtk/challenge.rst:106 +#: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" msgstr "Гравець" @@ -2223,68 +2228,80 @@ msgstr "" "Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " "перевіряється, і якщо воно недійсне, запитання повторюється." -#: ../../problem-sets/src/wtk/challenge.rst:115 +#: ../../problem-sets/src/wtk/challenge.rst:116 msgid "Settings" msgstr "Налаштування" -#: ../../problem-sets/src/wtk/challenge.rst:117 +#: ../../problem-sets/src/wtk/challenge.rst:118 msgid "Settings module contains constants values for the game." msgstr "Модуль налаштувань містить значення констант для гри." -#: ../../problem-sets/src/wtk/challenge.rst:119 +#: ../../problem-sets/src/wtk/challenge.rst:120 msgid "For example," msgstr "Наприклад," -#: ../../problem-sets/src/wtk/challenge.rst:123 -msgid "Initial health meter value for a player instance" -msgstr "Початкове значення індикатора стану здоров'я для екземпляру гравця" +#: ../../docstring of wtk.settings.INITIAL_PLAYER_HEALTH:1 +msgid "Initial player health value" +msgstr "Початкове значення здоров'я гравця" -#: ../../problem-sets/src/wtk/challenge.rst -msgid "type" -msgstr "type" +#: ../../docstring of wtk.settings.INITIAL_ENEMY_LEVEL:1 +msgid "Initial enemy level value" +msgstr "Початкове значення рівня ворога" -#: ../../problem-sets/src/wtk/challenge.rst:125 -#: ../../problem-sets/src/wtk/challenge.rst:131 -#: ../../problem-sets/src/wtk/challenge.rst:137 -#: ../../problem-sets/src/wtk/challenge.rst:143 -msgid "int" -msgstr "int" +#: ../../docstring of wtk.settings.SCORE_SUCCESS_ATTACK:1 +msgid "Score points value to assign when player's attack is successful" +msgstr "Вартість очок, які призначаються, коли атака гравця успішна" -#: ../../problem-sets/src/wtk/challenge.rst:129 -msgid "Indicates the level to initialize the first enemy instance." -msgstr "Вказує рівень для ініціалізації першого екземпляра ворога." +#: ../../docstring of wtk.settings.SCORE_ENEMY_DOWN:1 +msgid "Score points value to assign when enemy is defeated" +msgstr "Вартість очок, які призначаються, коли ворог переможений" -#: ../../problem-sets/src/wtk/challenge.rst:135 -msgid "Set the score value to assign when an attack is successful" +#: ../../problem-sets/src/wtk/challenge.rst:131 +msgid "You may also define messages with this module, for example:" msgstr "" -"Встановлює кількість балів, яку буде присвоєно, якщо атака буде успішною" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" -#: ../../problem-sets/src/wtk/challenge.rst:141 -msgid "Set the score value to assign when an enemy is defeated" -msgstr "" -"Встановлює кількість балів, яку буде присвоєно, якщо ворог зазнає поразки" +#: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 +msgid "Successful attack message" +msgstr "Повідомлення про успішну атаку" + +#: ../../docstring of wtk.settings.MSG_SUCCESS_DEFENCE:1 +msgid "Successful defence message" +msgstr "Повідомлення про успішний захист" + +#: ../../docstring of wtk.settings.MSG_FAILURE_ATTACK:1 +msgid "Failed attack message" +msgstr "Повідомлення про невдалу атаку" -#: ../../problem-sets/src/wtk/challenge.rst:147 +#: ../../docstring of wtk.settings.MSG_FAILURE_DEFENCE:1 +msgid "Failed defence message" +msgstr "Повідомлення про невдалий захист" + +#: ../../docstring of wtk.settings.MSG_DRAW:1 +msgid "Draw fight message" +msgstr "Повідомлення про нічию" + +#: ../../problem-sets/src/wtk/challenge.rst:141 msgid "Engine" msgstr "Ігровий рушій" -#: ../../problem-sets/src/wtk/challenge.rst:149 +#: ../../problem-sets/src/wtk/challenge.rst:143 msgid "Engine module should provide two functions:" msgstr "Модуль двигуна має забезпечувати дві функції:" -#: ../../problem-sets/src/wtk/challenge.rst:151 +#: ../../problem-sets/src/wtk/challenge.rst:145 msgid "``get_player_name``" msgstr "``get_player_name``" -#: ../../problem-sets/src/wtk/challenge.rst:152 +#: ../../problem-sets/src/wtk/challenge.rst:146 msgid "``play``" msgstr "``play``" -#: ../../problem-sets/src/wtk/challenge.rst:155 +#: ../../problem-sets/src/wtk/challenge.rst:149 msgid "Player name getter" msgstr "Отримання імені гравця" -#: ../../problem-sets/src/wtk/challenge.rst:157 +#: ../../problem-sets/src/wtk/challenge.rst:151 msgid "" "Asks the user to type in his or her name and return it back. Leading and " "trailing whitespaces are to be trimmed. Name should contain at least one " @@ -2309,11 +2326,11 @@ msgstr "" msgid "a player defined name" msgstr "ім'я визначене гравцем" -#: ../../problem-sets/src/wtk/challenge.rst:164 +#: ../../problem-sets/src/wtk/challenge.rst:158 msgid "Play" msgstr "Гра" -#: ../../problem-sets/src/wtk/challenge.rst:166 +#: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " "rounds inside of an endless loop stage by stage. If an enemy is defeated - a " @@ -2345,135 +2362,21 @@ msgstr "" "ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " "зупиняє виконання." -#: ../../problem-sets/src/wtk/challenge.rst:179 +#: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" msgstr "Додаткові Вдосконалення" -#: ../../problem-sets/src/wtk/challenge.rst:181 +#: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" "Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " "записів." -#: ../../problem-sets/src/wtk/challenge.rst:182 +#: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" msgstr "Створити меню гри, наприклад: ::" -#: ../../problem-sets/src/wtk/challenge.rst:188 +#: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" "Зберігайте таблицю балів у базі даних замість використання текстового файлу." - -#~ msgid "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" -#~ msgstr "" -#~ "[Starter template](https://github.com/edu-python-course/django-template)" - -#~ msgid "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" -#~ msgstr "" -#~ "[Bootstrap templates](https://github.com/edu-python-course/blog-bootstrap)" - -#~ msgid "Code notes" -#~ msgstr "Примітки до коду" - -#~ msgid "At least 50% coverage." -#~ msgstr "Хоча б 50% покриття тестами." - -#~ msgid "WARRIORS, ROBBERS AND WIZARDS GAME" -#~ msgstr "ГРА WARRIORS, ROBBERS AND WIZARDS" - -#~ msgid "**Warrior** beats **Robber**" -#~ msgstr "Воїн перемагає розбійника" - -#~ msgid "" -#~ "Represents the playing enemy-bot. All choices made by this model are " -#~ "random. The model should implement methods:" -#~ msgstr "" -#~ "Представляє граючого ворожого бота. Усі вибори, зроблені цією моделлю, " -#~ "випадкові. Модель має реалізовувати методи:" - -#~ msgid "``__init__``" -#~ msgstr "``__init__``" - -#~ msgid "" -#~ "Initialize enemy instance. Initializer should receive one argument of " -#~ "integer type - ``level: int``. Health points value should be set equal to " -#~ "level value." -#~ msgstr "" -#~ "Ініціалізувати екземпляр противника. Ініціалізатор повинен отримати один " -#~ "аргумент цілого типу - ``level: int``. Значення очок здоров'я має бути " -#~ "встановлено рівним значенню рівня." - -#~ msgid "``descrease_health``" -#~ msgstr "``descrease_health``" - -#~ msgid "``select_attack``" -#~ msgstr "``select_attack``" - -#~ msgid "``select_defence``" -#~ msgstr "``select_defence``" - -#~ msgid "Return a random defence choice from valid choices." -#~ msgstr "Повернути випадковий вибір захисту з дійсних виборів." - -#~ msgid "" -#~ "This model is controlled by the user. It represents a playing user. All " -#~ "choices are controlled by the user. The model should implement methods:" -#~ msgstr "" -#~ "Цією моделлю керує користувач. Вона представляє гравця. Усі вибори " -#~ "контролює користувач. Модель має реалізовувати методи:" - -#~ msgid "" -#~ "Initialize player instance. Initializer should receive player's name as " -#~ "an argument - ``name: str``. Health points are to be set from settings. " -#~ "Score points should be initialized with 0 (zero)." -#~ msgstr "" -#~ "Ініціалізувати екземпляр гравця. Ініціалізатор має отримати ім'я гравця " -#~ "як аргумент - ``ім'я: str``. Очки здоров'я повинні бути встановлені з " -#~ "налаштувань. Очки мають бути ініціалізовані 0 (нулем)." - -#~ msgid "``fight``" -#~ msgstr "``fight``" - -#~ msgid "" -#~ "Static method to perform a fight. Takes two arguments representing attack " -#~ "and defence choices. Performs fight result calculation and return it back." -#~ msgstr "" -#~ "Статичний метод для проведення бою. Бере два аргументи, що представляють " -#~ "атаку та вибір захисту. Виконує обчислення результату бою та повертає " -#~ "його назад." - -#~ msgid "``attack``" -#~ msgstr "``attack``" - -#~ msgid "``defence``" -#~ msgstr "``defence``" - -#~ msgid "" -#~ "Each page should contain a list of links to archive views for the last " -#~ "year." -#~ msgstr "" -#~ "Кожна сторінка має містити список посилань на перегляди архіву за " -#~ "останній рік." - -#~ msgid "" -#~ "Auth views should use ``register.html`` and ``login.html`` with " -#~ "corresponding forms." -#~ msgstr "" -#~ "Подання авторизації повинні використовувати ``register.html`` і ``login." -#~ "html`` з відповідними формами." - -#~ msgid "" -#~ "For now, it’s ok to use admin as “test user”. Authentication system will " -#~ "be implemented in the future challenges. ``user`` object is available (by " -#~ "default) in any template context. To test anonymous access you can use " -#~ "``user.is_authenticated``, which returns ``False`` for non-authenticated " -#~ "users." -#~ msgstr "" -#~ "Наразі можна використовувати адміністратора як «тестового користувача». " -#~ "Система автентифікації буде реалізована в майбутніх викликах. Об’єкт " -#~ "«користувач» доступний (за замовчуванням) у будь-якому контексті шаблону. " -#~ "Щоб перевірити анонімний доступ, ви можете використовувати ``user." -#~ "is_authenticated``, який повертає ``False`` для неавтентифікованих " -#~ "користувачів." From 734b56e87522cfdccd612dedfe91d30751f5a074 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 15:35:39 +0300 Subject: [PATCH 331/689] Added "boolean logic" document draft Signed-off-by: Serhii Horodilov --- assets/img/george_boole.jpg | Bin 0 -> 139398 bytes src/basics/bool_logic.txt | 115 ++++++++++++++++++++++++++++++++++++ src/basics/index.txt | 1 + src/refs.bib | 24 ++++++++ 4 files changed, 140 insertions(+) create mode 100644 assets/img/george_boole.jpg create mode 100644 src/basics/bool_logic.txt diff --git a/assets/img/george_boole.jpg b/assets/img/george_boole.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be533e303deb6a0dc5e88697dc75c5aaba9b9259 GIT binary patch literal 139398 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ȁaD!t0h7Cwj``qX@tz^)TcN} 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 type(True) + + >>> type(False) + + +The type ``bool`` is **built-in**, meaning it's always available in Python. +``True`` and ``False`` are keywords in Python and can't be used as +variable names. but ``bool`` type isn't and it's possible assign to the name +``bool``, however this is considered bad style. + +Boolean as numbers +------------------ + +Booleans are a subtype of **numeric** type in Python. This means they're +numbers for all intents and purposes. In other words, you can apply arithmetic +operations to Boolean, and you can also compare them to numbers. ``True`` +value is treated to be 1, and ``False`` value is treated to be 0. + +There aren't many uses of the numerical nature of Boolean values. + +Truth value testing +=================== + +Any object can be tested for truth value. By default an object considered +``True``, unless its class defines either. Here are most of built-in objects +considered ``False``: + +- constant values: ``None`` and ``False`` +- zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, + ``Fraction(0, 1)`` +- empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, + ``range(0)``. + +.. hint:: + + If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` + as ``False``. + +Boolean comparison +================== + +.. todo: not, and, or + +Comparison +========== + +There are eight comparison operations in Python. They all have the same +priority (which is higher than that of the Boolean operations). + +.. table:: Comparison operators + :align: center + + +------------+-----------------------------------+ + | Operator | Meaning | + +============+===================================+ + | ``<`` | strictly less than | + +------------+-----------------------------------+ + | ``<=`` | less than or equal | + +------------+-----------------------------------+ + | ``>`` | strictly greater than | + +------------+-----------------------------------+ + | ``>=`` | greater or equal | + +------------+-----------------------------------+ + | ``==`` | equal (aka *equality* comparison) | + +------------+-----------------------------------+ + | ``!=`` | not equal | + +------------+-----------------------------------+ + | ``is`` | object identity | + +------------+-----------------------------------+ + | ``is not`` | negated object identity | + +------------+-----------------------------------+ diff --git a/src/basics/index.txt b/src/basics/index.txt index 5f5ee1137..759b1ca6b 100644 --- a/src/basics/index.txt +++ b/src/basics/index.txt @@ -13,6 +13,7 @@ variables syntax stdtypes + bool_logic controlflow functions modules diff --git a/src/refs.bib b/src/refs.bib index 2887ad806..4cff75e68 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -108,3 +108,27 @@ @misc{realpython:methods-demystified author = "{Dan Bader}", url = {https://realpython.com/instance-class-and-static-methods-demystified/}, } + +@misc{realpython:boolean, + title = "{Python Booleans: Use Truth Values in Your Code}", + author = "{Moshe Zadka}", + url = {https://realpython.com/python-boolean/}, +} + +@misc{realpython:boolean-not, + title = "{Using the \"not\" Boolean Operator in Python}", + author = "{Leodanis Pozo Ramos}", + url = {https://realpython.com/python-not-operator/}, +} + +@misc{realpython:boolean-and, + title = "{Using the \"and\" Boolean Operator in Python}", + author = "{Leodanis Pozo Ramos}", + url = {https://realpython.com/python-and-operator/}, +} + +@misc{realpython:boolean-or, + title = "{Using the \"or\" Boolean Operator in Python}", + author = "{Leodanis Pozo Ramos}", + url = {https://realpython.com/python-or-operator/}, +} From 48abc68a603f32965daa83dad88b231cbf2d1f44 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 16:00:29 +0300 Subject: [PATCH 332/689] Added 'logical negation' (not) description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index a4c9114d5..a92d3743d 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -85,6 +85,53 @@ Boolean comparison .. todo: not, and, or +Python provides 3 logical operators: + +.. table:: + :align: center + + +----------+----------------+ + | Operator | Logic operator | + +==========+================+ + | ``not`` | Negation | + +----------+----------------+ + | ``and`` | Conjunction | + +----------+----------------+ + | ``or`` | Disjunction | + +----------+----------------+ + +With these operators, you can build expressions by connecting Boolean +expressions with each other. These operators are **keywords** of the language, +so you cannot use them as identifiers without causing a *SyntaxError*. + +Getting started with Python's ``not`` operator +---------------------------------------------- + +The ``not`` operator is the Boolean or logic operator that implements negation +in Python. It's **unary**, which means that it takes only one **operand**. +The operand can be a Boolean expression or any Python object. The task of +``not`` is to reverse the truth value of its operand. + +.. table:: not operator + :align: center + + +-----------+-------------+ + | operand | not operand | + +===========+=============+ + | ``True`` | ``False`` | + +-----------+-------------+ + | ``False`` | ``True`` | + +-----------+-------------+ + +This functionality makes it worthwhile in several situations: + + +- Checking **unmet conditions** in the context of ``if`` statements and + ``while`` loops +- **Inverting the truth value** of an object or expression +- Checking if a **value is not in a given container** +- Checking for an **object's identity** + Comparison ========== From 32e9a76e9ade3c16aa47f08e44460377819bf627 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 16:12:42 +0300 Subject: [PATCH 333/689] Added 'logical conjunction' (and) description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 41 +++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index a92d3743d..639fbd451 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -112,16 +112,16 @@ in Python. It's **unary**, which means that it takes only one **operand**. The operand can be a Boolean expression or any Python object. The task of ``not`` is to reverse the truth value of its operand. -.. table:: not operator +.. table:: not operator truth table :align: center - +-----------+-------------+ - | operand | not operand | - +===========+=============+ - | ``True`` | ``False`` | - +-----------+-------------+ - | ``False`` | ``True`` | - +-----------+-------------+ + +-------------+-----------------+ + | ``operand`` | ``not operand`` | + +=============+=================+ + | ``True`` | ``False`` | + +-------------+-----------------+ + | ``False`` | ``True`` | + +-------------+-----------------+ This functionality makes it worthwhile in several situations: @@ -132,6 +132,31 @@ This functionality makes it worthwhile in several situations: - Checking if a **value is not in a given container** - Checking for an **object's identity** +Getting started with ``and`` operator +------------------------------------- + +Python's ``and`` operator is **binary**, which means it takes two **operands**. +The operands in an ``and`` expression are commonly known as *conditions*. +The result of the operator depends on the truth values of its operands. It'll +be ``True`` if **both** are true. + +.. table:: and operator truth table + :align: center + + +---------------+---------------+-----------------------------+ + | ``operand_1`` | ``operand_2`` | ``operand_1 and operand_2`` | + +===============+===============+=============================+ + | ``True`` | ``True`` | ``True`` | + +---------------+---------------+-----------------------------+ + | ``False`` | ``False`` | ``False`` | + +---------------+---------------+-----------------------------+ + | ``True`` | ``False`` | ``False`` | + +---------------+---------------+-----------------------------+ + | ``False`` | ``True`` | ``False`` | + +---------------+---------------+-----------------------------+ + +.. todo: func_1() and func_2(); 0 and 5 + Comparison ========== From 7afb9b529b432b58f4a5329fdc29857e2f11093a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 16:47:49 +0300 Subject: [PATCH 334/689] Added 'logical disjunction' (or) description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 639fbd451..38eab9a9f 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -157,6 +157,32 @@ be ``True`` if **both** are true. .. todo: func_1() and func_2(); 0 and 5 +Getting started with ``or`` operator +------------------------------------ + +With Boolean ``or`` operator, you can connect two Boolean expressions into one +compound expression. This makes ``or`` the **binary** operator. At least one +subexpression must be ``True`` for the compound expression to be considered +``True``, and it doesn't matter which. If both subexpressions are ``False``, +then the expression is ``False``. + +.. table:: or operator truth table + :align: center + + +---------------+---------------+----------------------------+ + | ``operand_1`` | ``operand_2`` | ``operand_1 or operand_2`` | + +===============+===============+============================+ + | ``True`` | ``True`` | ``True`` | + +---------------+---------------+----------------------------+ + | ``False`` | ``False`` | ``False`` | + +---------------+---------------+----------------------------+ + | ``True`` | ``False`` | ``True`` | + +---------------+---------------+----------------------------+ + | ``False`` | ``True`` | ``True`` | + +---------------+---------------+----------------------------+ + +.. todo: default mutable value, e.g. x = x or [] + Comparison ========== From ff670ef467747fbd6c9c264c3dd98e7a94307ef2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 17:33:08 +0300 Subject: [PATCH 335/689] Extended logical 'and' and 'or' description and usage examples Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 38eab9a9f..2b15ab1df 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -155,7 +155,23 @@ be ``True`` if **both** are true. | ``False`` | ``True`` | ``False`` | +---------------+---------------+-----------------------------+ -.. todo: func_1() and func_2(); 0 and 5 +``and`` operator work's not only with operands of Boolean type. +It's behavior: + +- evaluate 1st operand; return it, if it's ``False`` and finish +- evaluate 2nd operand; return it, if it's ``False`` and finish +- return 2nd operand + +.. code-block:: python + + >>> 1 and 5 + 5 + >>> '' and None + '' + >>> 0 and True + 0 + >>> 5 and False + False Getting started with ``or`` operator ------------------------------------ @@ -181,7 +197,23 @@ then the expression is ``False``. | ``False`` | ``True`` | ``True`` | +---------------+---------------+----------------------------+ -.. todo: default mutable value, e.g. x = x or [] +``or`` operator work's not only with operands of Boolean type. +It's behavior: + +- evaluate 1st operand; return it, if it's ``True`` and finish +- evaluate 2nd operand; return it, if it's ``True`` and finish +- return 2nd operand + +.. code-block:: python + + >>> 42 or True + 42 + >>> None or [] + [] + >>> 0 or True + True + >>> [[]] or '' + [[]] Comparison ========== From e6865cd32aed557280719dc4f5313f8d756335f2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 17:40:06 +0300 Subject: [PATCH 336/689] Added todo notes to "boolean logic" doc Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 2b15ab1df..75a0b200b 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -243,3 +243,7 @@ priority (which is higher than that of the Boolean operations). +------------+-----------------------------------+ | ``is not`` | negated object identity | +------------+-----------------------------------+ + +.. todo: add examples and description(s) + +.. todo: chaining with boolean operators From f030c47bd1491258d26ab411454474773e04691d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 18:13:34 +0300 Subject: [PATCH 337/689] Added "controlflow" document - draft Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 76 ++++++++++++++++++++++++++++++++++++++ src/refs.bib | 5 +++ 2 files changed, 81 insertions(+) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 5914db841..6982ad453 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -6,3 +6,79 @@ ******************************************************************************* Control Flow ******************************************************************************* + +``if`` statement +================ + +Perhaps the most well-known statement type is ``if`` statement. For example: + +.. code-block:: python + :caption: if statement base example + + >>> x = int(input("Please enter an integer: ")) + >>> if x < 0: + ... x = 0 + ... print("Negative x changed to 0") + ... elif x == 0: + ... print("x is equal to zero") + ... elif x == 1: + ... print("x is equal to one") + ... else: + ... print("x is greater than one") + +But let's dive into ``if`` statement with more simple examples. + +How it works +------------ + +**if** statement is defined with a keyword ``if`` followed by a Boolean +expression or any object and finished with colon. The statement requires +a *body*: other statements to execute, also called an *if block*. +The body is indented at the same distance from the left (in Python we use +4 spaces to indent a single block of code). + +The body's statements will be executed only in case **if** expression is +``True``. + +.. code-block:: python + :linenos: + + from random import randint + + number: int = randint(1, 2) + + if not number % 2: # the as number % 2 == 0 + print(number, "is even") + +The ``print`` statement on line #6 will be executed only for even value of +``number`` variable. + +``else`` block +-------------- + +Since ``if`` can be used by its own, it can extend its behavior with ``else`` +block. The general syntax for ``else`` body is the same: at least one indented +statement. But ``else`` doesn't take any expression after it. This block of +code will be executed only that the ``if`` statement truth check fails. + +.. code-block:: python + :linenos: + + from random import randint + + number: int = randint(1, 2) + + if not number % 2: + print(number, "is even") + else: + print(number, "is odd") + +``elif`` block(s) +----------------- + +.. todo: provide elif examples + +Usage +----- + +.. todo: branching the code diff --git a/src/refs.bib b/src/refs.bib index 4cff75e68..6bdec017f 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -132,3 +132,8 @@ @misc{realpython:boolean-or author = "{Leodanis Pozo Ramos}", url = {https://realpython.com/python-or-operator/}, } + +@misc{docs-python:controlflow, + title = "{Python Documentation: 4. More Control Flow Tools}", + url = {https://docs.python.org/tutorial/controlflow.html}, +} From 5e4c89741180877f000cd28d4c841ac607ba1177 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 20:07:54 +0300 Subject: [PATCH 338/689] Extended else statement section Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 6982ad453..34f22a1ed 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -73,6 +73,9 @@ code will be executed only that the ``if`` statement truth check fails. else: print(number, "is odd") +You can attach **only one** else block to **if statement**. And you cannot use +``else`` statement on its own - this will cause *SyntaxError*. + ``elif`` block(s) ----------------- From 65a2c2a0a69f405224edf9ea68c51ba2f5cdc4d6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 20:23:25 +0300 Subject: [PATCH 339/689] Added usage example for `if/elif/else` statements Signed-off-by: Serhii Horodilov --- src/basics/controlflow.txt | 58 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 34f22a1ed..68f0c9a73 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -79,9 +79,63 @@ You can attach **only one** else block to **if statement**. And you cannot use ``elif`` block(s) ----------------- -.. todo: provide elif examples +``elif`` (*else if*) statement may be considered as semi-statement between +``if`` and ``else`` statements. In case your program has more than two +dedicated choices you are able to extends control flow by appending +``elif`` blocks after ``if`` statement. The syntax is pretty similar to ``if`` +statement. Each ``elif`` has its own boolean expression or an object to test +for the truth value. + +You can attach as many ``elif`` statements as it needed. But you cannot use +``elif`` without ``if`` statement. + +Python will test conditions in ``if`` and ``elif`` statements from top to +bottom. The first one, which considered to be ``True`` will be executed. +All others will be skipped. + +If there were no truth conditions ``else`` block will be executed (if exists). + +.. code-block:: python + + >>> x = int(input("Enter some integer number: ")) + >>> if not x % 5 and not x % 3: # the same as x % 5 == 0 and x % 3 == 0 + ... print(x, "is divisible by 5 and 3") + ... elif not x % 5: + ... print(x, "is divisible by 5") + ... elif not x % 3: + ... print(x, "is divisible by 3") + ... else: + ... print(x, "is not divisible by 5 or 3") + +.. note:: + + The order conditions appears matter. + The truth test goes from top to bottom and stops at first expression + which is ``True``. Usage ----- -.. todo: branching the code +``if/elif/else`` statements help you to control which portion of your code is +executed based on conditions from outer scope. + +.. code-block:: python + :linenos: + + # Ask user for input + grade = int(input("Enter your grade (0-100): ")) + + # Use if/elif/else statements to assign letter grade + if grade >= 90: + letter_grade = "A" + elif grade >= 80: + letter_grade = "B" + elif grade >= 70: + letter_grade = "C" + elif grade >= 60: + letter_grade = "D" + else: + letter_grade = "F" + + # Print the letter grade + print("Your letter grade is:", letter_grade) From b5f65d1913abde16834076e4b8ba5fdce8d7e2e8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 14 Jun 2023 02:14:47 +0300 Subject: [PATCH 340/689] Rebase 'feature/controlflow' onto 'devel' branch --- src/_locales/uk/LC_MESSAGES/basics.po | 587 +++++++++++++++++++++++++- src/basics/bool_logic.txt | 8 +- src/basics/controlflow.txt | 4 +- 3 files changed, 584 insertions(+), 15 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index e4e319374..ee091f780 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -21,19 +21,447 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.2.2\n" -#: ../../src/basics/controlflow.txt:-1 -msgid "Control flow in Python" -msgstr "Контроль потоку в Python" +#: ../../src/basics/bool_logic.txt:-1 +msgid "this document covers usage of logic and comparison operators in Python" +msgstr "" +"цей документ охоплює використання логіки та операторів порівняння в Python" -#: ../../src/basics/controlflow.txt:-1 ../../src/basics/decorators.txt:-1 -#: ../../src/basics/exceptions.txt:-1 ../../src/basics/functions.txt:-1 -#: ../../src/basics/index.txt:-1 ../../src/basics/modules.txt:-1 -#: ../../src/basics/pep8.txt:-1 ../../src/basics/stdtypes.txt:-1 -#: ../../src/basics/syntax.txt:-1 ../../src/basics/testing.txt:-1 -#: ../../src/basics/variables.txt:-1 +#: ../../src/basics/bool_logic.txt:-1 ../../src/basics/controlflow.txt:-1 +#: ../../src/basics/decorators.txt:-1 ../../src/basics/exceptions.txt:-1 +#: ../../src/basics/functions.txt:-1 ../../src/basics/index.txt:-1 +#: ../../src/basics/modules.txt:-1 ../../src/basics/pep8.txt:-1 +#: ../../src/basics/stdtypes.txt:-1 ../../src/basics/syntax.txt:-1 +#: ../../src/basics/testing.txt:-1 ../../src/basics/variables.txt:-1 msgid "Serhii Horodilov" msgstr "Serhii Horodilov" +#: ../../src/basics/bool_logic.txt:-1 +msgid "python, boolean, logic, comparison, operator" +msgstr "python, boolean, logic, comparison, operator" + +#: ../../src/basics/bool_logic.txt:14 +msgid "Boolean Logic" +msgstr "Булева Логіка" + +#: ../../src/basics/bool_logic.txt:20 +msgid "" +"`George Boole`_ put together what is now known as `Boolean algebra`_, which " +"relies on **true** and **false** values and define a set of boolean " +"operations: **not**, **and**, and **or**." +msgstr "" +"`George Boole`_ об’єднав те, що тепер відомо як `булева алгебра`_, яка " +"спирається на значення **true** і **false** і визначає набір логічних " +"операцій: **not**, **and** і **or**." + +#: ../../src/basics/bool_logic.txt:24 +msgid "" +"These Boolean values and operators are helpful in programming because they " +"help you decide the course of action in your programs." +msgstr "" +"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " +"допомагають визначити курс дій у ваших програмах." + +#: ../../src/basics/bool_logic.txt:27 +msgid "" +"The **Python boolean** type is one of Python's built-in data types. It's " +"used to represent the truth value of an expression. For example, the " +"expression ``1 < 2`` is ``True``, while the expression ``0 == 1`` is " +"``False``. Understanding how Python Boolean values behave is important to " +"programming well in Python." +msgstr "" +"Тип **Python boolean** є одним із вбудованих типів даних Python. Він " +"використовується для представлення істиності значення виразу. Наприклад, " +"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " +"того, як поводяться логічні значення Python, є важливим для якісного " +"програмування на Python." + +#: ../../src/basics/bool_logic.txt:34 +msgid "Understanding Boolean" +msgstr "Розбираємось з Логічним типом даних" + +#: ../../src/basics/bool_logic.txt:36 +msgid "The Boolean type has only two possible values:" +msgstr "Логічний тип має лише два можливих значення:" + +#: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:121 +#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:149 +#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 +#: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:195 +#: ../../src/basics/bool_logic.txt:197 +msgid "``True``" +msgstr "``True``" + +#: ../../src/basics/bool_logic.txt:39 ../../src/basics/bool_logic.txt:121 +#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:151 +#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 +#: ../../src/basics/bool_logic.txt:193 ../../src/basics/bool_logic.txt:195 +#: ../../src/basics/bool_logic.txt:197 +msgid "``False``" +msgstr "``False``" + +#: ../../src/basics/bool_logic.txt:41 +msgid "No other value will have ``bool`` as it type." +msgstr "Жодне інше значення не матиме тип ``bool``." + +#: ../../src/basics/bool_logic.txt:50 +msgid "" +"The type ``bool`` is **built-in**, meaning it's always available in Python. " +"``True`` and ``False`` are keywords in Python and can't be used as variable " +"names. but ``bool`` type isn't and it's possible assign to the name " +"``bool``, however this is considered bad style." +msgstr "" +"Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " +"і ``False`` є ключовими словами в Python і не можуть використовуватися як " +"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " +"значення, однак це вважається поганим стилем." + +#: ../../src/basics/bool_logic.txt:56 +msgid "Boolean as numbers" +msgstr "Boolean як число" + +#: ../../src/basics/bool_logic.txt:58 +msgid "" +"Booleans are a subtype of **numeric** type in Python. This means they're " +"numbers for all intents and purposes. In other words, you can apply " +"arithmetic operations to Boolean, and you can also compare them to numbers. " +"``True`` value is treated to be 1, and ``False`` value is treated to be 0." +msgstr "" +"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " +"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " +"арифметичні операції до логічних значень, а також порівнювати їх із числами. " +"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " +"0." + +#: ../../src/basics/bool_logic.txt:63 +msgid "There aren't many uses of the numerical nature of Boolean values." +msgstr "" +"Числовій природі логічних значень можна знайти не так багато застосунків." + +#: ../../src/basics/bool_logic.txt:66 +msgid "Truth value testing" +msgstr "Перевірка істинності" + +#: ../../src/basics/bool_logic.txt:68 +msgid "" +"Any object can be tested for truth value. By default an object considered " +"``True``, unless its class defines either. Here are most of built-in objects " +"considered ``False``:" +msgstr "" +"Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " +"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " +"вбудованих об'єктів, які вважаються ``False``:" + +#: ../../src/basics/bool_logic.txt:72 +msgid "constant values: ``None`` and ``False``" +msgstr "константи: ``None`` та ``False``" + +#: ../../src/basics/bool_logic.txt:73 +msgid "" +"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" +msgstr "" +"нуль будь-якого числового типу: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" + +#: ../../src/basics/bool_logic.txt:75 +msgid "" +"empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " +"``range(0)``." +msgstr "" +"порожні послідовності та колекції: ``''``, ``[]``, ``()``, ``{}``, " +"``set()``, ``range(0)``." + +#: ../../src/basics/bool_logic.txt:80 +msgid "" +"If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " +"as ``False``." +msgstr "" +"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " +"``bool`` як ``False``." + +#: ../../src/basics/bool_logic.txt:84 +msgid "Boolean comparison" +msgstr "Логічне Порівняння" + +#: ../../src/basics/bool_logic.txt:88 +msgid "Python provides 3 logical operators:" +msgstr "Python надає 3 логічних оператори:" + +#: ../../src/basics/bool_logic.txt:94 ../../src/basics/bool_logic.txt:228 +msgid "Operator" +msgstr "Оператор" + +#: ../../src/basics/bool_logic.txt:94 +msgid "Logic operator" +msgstr "Логічний оператор" + +#: ../../src/basics/bool_logic.txt:96 +msgid "``not``" +msgstr "``not``" + +#: ../../src/basics/bool_logic.txt:96 +msgid "Negation" +msgstr "Заперечення" + +#: ../../src/basics/bool_logic.txt:98 +msgid "``and``" +msgstr "``and``" + +#: ../../src/basics/bool_logic.txt:98 +msgid "Conjunction" +msgstr "Кон'юнкція" + +#: ../../src/basics/bool_logic.txt:100 +msgid "``or``" +msgstr "``or``" + +#: ../../src/basics/bool_logic.txt:100 +msgid "Disjunction" +msgstr "Диз'юнкція" + +#: ../../src/basics/bool_logic.txt:103 +msgid "" +"With these operators, you can build expressions by connecting Boolean " +"expressions with each other. These operators are **keywords** of the " +"language, so you cannot use them as identifiers without causing a " +"*SyntaxError*." +msgstr "" +"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " +"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " +"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." + +#: ../../src/basics/bool_logic.txt:108 +msgid "Getting started with ``not`` operator" +msgstr "Початок роботи з оператором ``not``" + +#: ../../src/basics/bool_logic.txt:110 +msgid "" +"The ``not`` operator is the Boolean or logic operator that implements " +"negation in Python. It's **unary**, which means that it takes only one " +"**operand**. The operand can be a Boolean expression or any Python object. " +"The task of ``not`` is to reverse the truth value of its operand." +msgstr "" +"Оператор ``not`` є логічним або логічним оператором, який реалізує " +"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " +"**операнд**. Операндом може бути логічний вираз або будь-який об’єкт Python. " +"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " +"операнда." + +#: ../../src/basics/bool_logic.txt:115 +msgid "not operator truth table" +msgstr "таблиця істинності оператора not" + +#: ../../src/basics/bool_logic.txt:119 +msgid "``operand``" +msgstr "``operand``" + +#: ../../src/basics/bool_logic.txt:119 +msgid "``not operand``" +msgstr "``not operand``" + +#: ../../src/basics/bool_logic.txt:126 +msgid "This functionality makes it worthwhile in several situations:" +msgstr "Ця функція доцільна в кількох ситуаціях:" + +#: ../../src/basics/bool_logic.txt:129 +msgid "" +"Checking **unmet conditions** in the context of ``if`` statements and " +"``while`` loops" +msgstr "" +"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " +"``while``" + +#: ../../src/basics/bool_logic.txt:131 +msgid "**Inverting the truth value** of an object or expression" +msgstr "**Інвертування значення істинності** об'єкта чи виразу" + +#: ../../src/basics/bool_logic.txt:132 +msgid "Checking if a **value is not in a given container**" +msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" + +#: ../../src/basics/bool_logic.txt:133 +msgid "Checking for an **object's identity**" +msgstr "Перевірка **ідентичності об'єкта**" + +#: ../../src/basics/bool_logic.txt:136 +msgid "Getting started with ``and`` operator" +msgstr "Початок роботи з оператором ``and``" + +#: ../../src/basics/bool_logic.txt:138 +msgid "" +"Python's ``and`` operator is **binary**, which means it takes two " +"**operands**. The operands in an ``and`` expression are commonly known as " +"*conditions*. The result of the operator depends on the truth values of its " +"operands. It'll be ``True`` if **both** are true." +msgstr "" +"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " +"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " +"Результат оператора залежить від істинних значень його операндів. Це буде " +"``True``, якщо **обидва** є істинними." + +#: ../../src/basics/bool_logic.txt:143 +msgid "and operator truth table" +msgstr "таблиця істинності оператора and" + +#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 +msgid "``operand_1``" +msgstr "``operand_1``" + +#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 +msgid "``operand_2``" +msgstr "``operand_2``" + +#: ../../src/basics/bool_logic.txt:147 +msgid "``operand_1 and operand_2``" +msgstr "``operand_1 and operand_2``" + +#: ../../src/basics/bool_logic.txt:158 +msgid "" +"``and`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``and`` працює не тільки з операндами логічного типу. Його " +"поведінка:" + +#: ../../src/basics/bool_logic.txt:161 +msgid "evaluate 1st operand; return it, if it's ``False`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:162 +msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:163 ../../src/basics/bool_logic.txt:205 +msgid "return 2nd operand" +msgstr "повернути 2-й операнд" + +#: ../../src/basics/bool_logic.txt:177 +msgid "Getting started with ``or`` operator" +msgstr "Початок роботи з оператором ``or``" + +#: ../../src/basics/bool_logic.txt:179 +msgid "" +"With Boolean ``or`` operator, you can connect two Boolean expressions into " +"one compound expression. This makes ``or`` the **binary** operator. At least " +"one subexpression must be ``True`` for the compound expression to be " +"considered ``True``, and it doesn't matter which. If both subexpressions are " +"``False``, then the expression is ``False``." +msgstr "" +"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " +"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " +"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " +"``True``, і не має значення який. Якщо обидва підвирази мають значення " +"``False``, тоді вираз є ``False``." + +#: ../../src/basics/bool_logic.txt:185 +msgid "or operator truth table" +msgstr "таблиця істинності оператора or" + +#: ../../src/basics/bool_logic.txt:189 +msgid "``operand_1 or operand_2``" +msgstr "``operand_1 or operand_2``" + +#: ../../src/basics/bool_logic.txt:200 +msgid "" +"``or`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" + +#: ../../src/basics/bool_logic.txt:203 +msgid "evaluate 1st operand; return it, if it's ``True`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:204 +msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:219 +msgid "Comparison" +msgstr "Порівняння" + +#: ../../src/basics/bool_logic.txt:221 +msgid "" +"There are eight comparison operations in Python. They all have the same " +"priority (which is higher than that of the Boolean operations)." +msgstr "" +"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " +"(вищий, ніж у логічних операцій)." + +#: ../../src/basics/bool_logic.txt:224 +msgid "Comparison operators" +msgstr "Оператори порівняння" + +#: ../../src/basics/bool_logic.txt:228 +msgid "Meaning" +msgstr "Значення" + +#: ../../src/basics/bool_logic.txt:230 +msgid "``<``" +msgstr "``<``" + +#: ../../src/basics/bool_logic.txt:230 +msgid "strictly less than" +msgstr "строго менше ніж" + +#: ../../src/basics/bool_logic.txt:232 +msgid "``<=``" +msgstr "``<=``" + +#: ../../src/basics/bool_logic.txt:232 +msgid "less than or equal" +msgstr "менше або дорівнює" + +#: ../../src/basics/bool_logic.txt:234 +msgid "``>``" +msgstr "``>``" + +#: ../../src/basics/bool_logic.txt:234 +msgid "strictly greater than" +msgstr "строго більше ніж" + +#: ../../src/basics/bool_logic.txt:236 +msgid "``>=``" +msgstr "``>=``" + +#: ../../src/basics/bool_logic.txt:236 +msgid "greater or equal" +msgstr "більше або дорівнює" + +#: ../../src/basics/bool_logic.txt:238 +msgid "``==``" +msgstr "``==``" + +#: ../../src/basics/bool_logic.txt:238 +msgid "equal (aka *equality* comparison)" +msgstr "дорівнює (також відоме як порівняння *equality*)" + +#: ../../src/basics/bool_logic.txt:240 +msgid "``!=``" +msgstr "``!=``" + +#: ../../src/basics/bool_logic.txt:240 +msgid "not equal" +msgstr "не дорівнює" + +#: ../../src/basics/bool_logic.txt:242 +msgid "``is``" +msgstr "``is``" + +#: ../../src/basics/bool_logic.txt:242 +msgid "object identity" +msgstr "ідентичність об'єкта" + +#: ../../src/basics/bool_logic.txt:244 +msgid "``is not``" +msgstr "``is not``" + +#: ../../src/basics/bool_logic.txt:244 +msgid "negated object identity" +msgstr "заперечена ідентичність об'єкта" + +#: ../../src/basics/controlflow.txt:-1 +msgid "Control flow in Python" +msgstr "Контроль потоку в Python" + #: ../../src/basics/controlflow.txt:-1 msgid "python, basics, control, if, for, while, condition, loop" msgstr "python, basics, control, if, for, while, condition, loop" @@ -42,6 +470,147 @@ msgstr "python, basics, control, if, for, while, condition, loop" msgid "Control Flow" msgstr "Керування виконанням" +#: ../../src/basics/controlflow.txt:11 +msgid "``if`` statement" +msgstr "Вираз ``if``" + +#: ../../src/basics/controlflow.txt:13 +msgid "" +"Perhaps the most well-known statement type is ``if`` statement. For example:" +msgstr "Мабуть, найвідомішим типом оператора є оператор ``if``. Наприклад:" + +#: ../../src/basics/controlflow.txt:15 +msgid "if statement base example" +msgstr "базовий приклад оператора if" + +#: ../../src/basics/controlflow.txt:29 +msgid "But let's dive into ``if`` statement with more simple examples." +msgstr "" +"Але давайте зануримося в інструкцію ``if`` з більш простими прикладами." + +#: ../../src/basics/controlflow.txt:32 +msgid "How it works" +msgstr "Як це працює" + +#: ../../src/basics/controlflow.txt:34 +msgid "" +"**if** statement is defined with a keyword ``if`` followed by a Boolean " +"expression or any object and finished with colon. The statement requires a " +"*body*: other statements to execute, also called an *if block*. The body is " +"indented at the same distance from the left (in Python we use 4 spaces to " +"indent a single block of code)." +msgstr "" +"Оператор **if** визначається ключовим словом ``if``, за яким слідує логічний " +"вираз або будь-який об'єкт і завершується двокрапкою. Оператор потребує " +"*тіло*: інші оператори для виконання, які також називають блоком *if*. Тіло " +"має відступ на однаковій відстані зліва (у Python ми використовуємо 4 " +"пробіли для відступу одного блоку коду)." + +#: ../../src/basics/controlflow.txt:40 +msgid "" +"The body's statements will be executed only in case **if** expression is " +"``True``." +msgstr "" +"Оператори тіла виконуватимуться лише у випадку, якщо вираз **if** має " +"значення ``True``." + +#: ../../src/basics/controlflow.txt:53 +msgid "" +"The ``print`` statement on line #6 will be executed only for even value of " +"``number`` variable." +msgstr "" +"Оператор ``print`` у рядку #6 буде виконано лише для парного значення " +"змінної ``number``." + +#: ../../src/basics/controlflow.txt:57 +msgid "``else`` block" +msgstr "Блок ``else``" + +#: ../../src/basics/controlflow.txt:59 +msgid "" +"``if`` can be used by its own, it can extend its behavior with ``else`` " +"block. The general syntax for ``else`` body is the same: at least one " +"indented statement. But ``else`` doesn't take any expression after it. This " +"block of code will be executed only that the ``if`` statement truth check " +"fails." +msgstr "" +"``if`` може використовуватися самостійно, він може розширити свою поведінку " +"за допомогою блоку ``else``. Загальний синтаксис для тіла ``else`` той " +"самий: принаймні один оператор із відступом. Але ``else`` не приймає жодного " +"виразу після нього. Цей блок коду буде виконано лише тоді, коли перевірка " +"істинності оператора ``if`` буде невдалою." + +#: ../../src/basics/controlflow.txt:76 +msgid "" +"You can attach **only one** else block to **if statement**. And you cannot " +"use ``else`` statement on its own - this will cause *SyntaxError*." +msgstr "" +"Ви можете приєднати **лише один** блок else до **інструкції if**. І ви не " +"можете використовувати оператор ``else`` сам по собі - це спричинить " +"*SyntaxError*." + +#: ../../src/basics/controlflow.txt:80 +msgid "``elif`` block(s)" +msgstr "Блок(и) ``elif``" + +#: ../../src/basics/controlflow.txt:82 +msgid "" +"``elif`` (*else if*) statement may be considered as semi-statement between " +"``if`` and ``else`` statements. In case your program has more than two " +"dedicated choices you are able to extends control flow by appending ``elif`` " +"blocks after ``if`` statement. The syntax is pretty similar to ``if`` " +"statement. Each ``elif`` has its own boolean expression or an object to test " +"for the truth value." +msgstr "" +"Оператор ``elif`` (*else if*) можна розглядати як напівоператор між ``if`` " +"та ``else``. Якщо у вашій програмі є більше двох виділених варіантів, ви " +"можете розширити потік керування, додавши блоки ``elif`` після оператора " +"``if``. Синтаксис дуже схожий на оператор if. Кожен ``elif`` має свій " +"власний логічний вираз або об'єкт для перевірки значення істинності." + +#: ../../src/basics/controlflow.txt:89 +msgid "" +"You can attach as many ``elif`` statements as it needed. But you cannot use " +"``elif`` without ``if`` statement." +msgstr "" +"Ви можете додати скільки завгодно операторів ``elif``. Але ви не можете " +"використовувати ``elif`` без оператора ``if``." + +#: ../../src/basics/controlflow.txt:92 +msgid "" +"Python will test conditions in ``if`` and ``elif`` statements from top to " +"bottom. The first one, which considered to be ``True`` will be executed. All " +"others will be skipped." +msgstr "" +"Python перевірить умови в операторах ``if`` та ``elif`` зверху вниз. Буде " +"виконано перший, який вважається ``True``. Усі інші будуть проігноровано." + +#: ../../src/basics/controlflow.txt:96 +msgid "" +"If there were no truth conditions ``else`` block will be executed (if " +"exists)." +msgstr "Якщо не було істиних умов, буде виконано блок ``else`` (якщо існує)." + +#: ../../src/basics/controlflow.txt:112 +msgid "" +"The order conditions appears matter. The truth test goes from top to bottom " +"and stops at first expression which is ``True``." +msgstr "" +"Порядок у якому визначено умови має значення. Перевірка істинності йде " +"зверху вниз і зупиняється на першому виразі, який є ``True``." + +#: ../../src/basics/controlflow.txt:117 +msgid "Usage" +msgstr "Використання" + +#: ../../src/basics/controlflow.txt:119 +msgid "" +"``if/elif/else`` statements help you to control which portion of your code " +"is executed based on conditions from outer scope." +msgstr "" +"Оператори ``if/elif/else`` допомагають вам контролювати, яка частина вашого " +"коду виконується на основі умов ззовні." + #: ../../src/basics/decorators.txt:-1 msgid "Python decorators" msgstr "Декоратори в Python" diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 75a0b200b..cf175ffb4 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -104,8 +104,8 @@ With these operators, you can build expressions by connecting Boolean expressions with each other. These operators are **keywords** of the language, so you cannot use them as identifiers without causing a *SyntaxError*. -Getting started with Python's ``not`` operator ----------------------------------------------- +Getting started with ``not`` operator +------------------------------------- The ``not`` operator is the Boolean or logic operator that implements negation in Python. It's **unary**, which means that it takes only one **operand**. @@ -155,7 +155,7 @@ be ``True`` if **both** are true. | ``False`` | ``True`` | ``False`` | +---------------+---------------+-----------------------------+ -``and`` operator work's not only with operands of Boolean type. +``and`` operator works not only with operands of Boolean type. It's behavior: - evaluate 1st operand; return it, if it's ``False`` and finish @@ -197,7 +197,7 @@ then the expression is ``False``. | ``False`` | ``True`` | ``True`` | +---------------+---------------+----------------------------+ -``or`` operator work's not only with operands of Boolean type. +``or`` operator works not only with operands of Boolean type. It's behavior: - evaluate 1st operand; return it, if it's ``True`` and finish diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index 68f0c9a73..d1a8a017a 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -56,8 +56,8 @@ The ``print`` statement on line #6 will be executed only for even value of ``else`` block -------------- -Since ``if`` can be used by its own, it can extend its behavior with ``else`` -block. The general syntax for ``else`` body is the same: at least one indented +``if`` can be used by its own, it can extend its behavior with ``else`` block. +The general syntax for ``else`` body is the same: at least one indented statement. But ``else`` doesn't take any expression after it. This block of code will be executed only that the ``if`` statement truth check fails. From d739c1ee9c644808a0aa5847a1cbd313fd3eeff4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 22:17:41 +0300 Subject: [PATCH 341/689] Added some more description for comparison operators Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index cf175ffb4..147111e60 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -244,6 +244,8 @@ priority (which is higher than that of the Boolean operations). | ``is not`` | negated object identity | +------------+-----------------------------------+ -.. todo: add examples and description(s) +Each of these comparison operators return a Boolean value, it's always +``True`` or ``False``. -.. todo: chaining with boolean operators +You can chain comparison operators together: ``x < y < z`` is equal to +``x < y and y < z``. From 867065abdf6f28c470610b63d4aa19a84294446a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Apr 2023 22:26:41 +0300 Subject: [PATCH 342/689] Added 'equality vs identity' description Signed-off-by: Serhii Horodilov --- src/basics/bool_logic.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 147111e60..55afd37d7 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -249,3 +249,22 @@ Each of these comparison operators return a Boolean value, it's always You can chain comparison operators together: ``x < y < z`` is equal to ``x < y and y < z``. + +Equality vs Identity +-------------------- + +It's easier to understand the difference between those by asking the question +each answers to. + +The question for ``==`` (*equality*) is: + + Is object on the left **equal** to the object on the right + +The question for ``is`` (*identity*) is: + + Is object on the left **the same** as the object on the right + +For example, if there are two cars of the same model, same color etc. in front +of you - these cars are equal, but they aren't ident to each other. But if you +are shown two pictures of the same car, you understand that the cars on those +pictures are the same object. From ff21379d8a461ef9985b9cb2627620d1eea1fe3d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 14 Jun 2023 02:15:41 +0300 Subject: [PATCH 343/689] Rebase 'feature/controlflow' onto 'devel' branch --- src/_locales/uk/LC_MESSAGES/basics.po | 60 ++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po index ee091f780..2e60e5981 100644 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ b/src/_locales/uk/LC_MESSAGES/basics.po @@ -49,7 +49,7 @@ msgid "" "relies on **true** and **false** values and define a set of boolean " "operations: **not**, **and**, and **or**." msgstr "" -"`George Boole`_ об’єднав те, що тепер відомо як `булева алгебра`_, яка " +"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " "спирається на значення **true** і **false** і визначає набір логічних " "операцій: **not**, **and** і **or**." @@ -243,7 +243,7 @@ msgid "" msgstr "" "Оператор ``not`` є логічним або логічним оператором, який реалізує " "заперечення в Python. Це **унарний**, що означає, що він приймає лише один " -"**операнд**. Операндом може бути логічний вираз або будь-який об’єкт Python. " +"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " "Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " "операнда." @@ -458,6 +458,62 @@ msgstr "``is not``" msgid "negated object identity" msgstr "заперечена ідентичність об'єкта" +#: ../../src/basics/bool_logic.txt:247 +msgid "" +"Each of these comparison operators return a Boolean value, it's always " +"``True`` or ``False``." +msgstr "" +"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " +"``True`` або ``False``." + +#: ../../src/basics/bool_logic.txt:250 +msgid "" +"You can chain comparison operators together: ``x < y < z`` is equal to ``x < " +"y and y < z``." +msgstr "" +"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " +"< z``." + +#: ../../src/basics/bool_logic.txt:254 +msgid "Equality vs Identity" +msgstr "Рівність та Ідентичність" + +#: ../../src/basics/bool_logic.txt:256 +msgid "" +"It's easier to understand the difference between those by asking the " +"question each answers to." +msgstr "" +"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " +"відповідає." + +#: ../../src/basics/bool_logic.txt:259 +msgid "The question for ``==`` (*equality*) is:" +msgstr "Питання для ``==`` (*equality*) таке:" + +#: ../../src/basics/bool_logic.txt:261 +msgid "Is object on the left **equal** to the object on the right" +msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" + +#: ../../src/basics/bool_logic.txt:263 +msgid "The question for ``is`` (*identity*) is:" +msgstr "Питання для ``is`` (*identity*) таке:" + +#: ../../src/basics/bool_logic.txt:265 +msgid "Is object on the left **the same** as the object on the right" +msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" + +#: ../../src/basics/bool_logic.txt:267 +msgid "" +"For example, if there are two cars of the same model, same color etc. in " +"front of you - these cars are equal, but they aren't ident to each other. " +"But if you are shown two pictures of the same car, you understand that the " +"cars on those pictures are the same object." +msgstr "" +"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " +"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " +"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " +"одним і тим же об'єктом." + #: ../../src/basics/controlflow.txt:-1 msgid "Control flow in Python" msgstr "Контроль потоку в Python" From 8cace9772309a86c95459d99a7a9476027488d3a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 14 Jun 2023 04:26:52 +0300 Subject: [PATCH 344/689] Changed pages deploy config to use 'devel' as source --- .github/workflows/deploy_pages.yml | 2 +- pyproject.toml | 2 +- src/conf.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 22b778ab0..fa7079687 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -5,7 +5,7 @@ on: # Runs on pushes targeting the default branch push: branches: - - gh-pages + - devel # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/pyproject.toml b/pyproject.toml index 9ec47e4ca..4b504c98d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2023.04.dev" +version = "2023.06.dev" description = "" license = "MIT" authors = [ diff --git a/src/conf.py b/src/conf.py index 20e018eb2..f66c5af26 100644 --- a/src/conf.py +++ b/src/conf.py @@ -14,7 +14,7 @@ f"{datetime.now().year}, Python training course authors and contributors" authors = "Vladyslav Ponomaryov \\and " \ "Serhii Horodilov" -version = "2023.04.dev" +version = "2023.06.dev" # general configuration master_doc = root_doc = "index" From 8d0f673c8c7fbd96d3b84dec689f7cdaebca3ac9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Jul 2023 14:40:36 +0300 Subject: [PATCH 345/689] Update submodules Reinitialized blog submodule. Update problem-sets to the latest version. --- blog | 2 +- problem-sets | 2 +- src/_locales/uk/LC_MESSAGES/appx.po | 2044 ++++++++++++++++++--------- 3 files changed, 1414 insertions(+), 634 deletions(-) diff --git a/blog b/blog index 158718694..56476e80d 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 15871869482148ac845c412b62c518380e216c93 +Subproject commit 56476e80dfb1dd21361f8756db3c940718a00e22 diff --git a/problem-sets b/problem-sets index 404c2a91f..efeafc8c8 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 404c2a91ff45fa49d424bf5b2930e458dbab6593 +Subproject commit efeafc8c8e949cbfb1ee156827b04a2d1da6573a diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index fad6b9da9..625afc07b 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 23:02+0300\n" +"POT-Creation-Date: 2023-07-14 16:00+0300\n" "PO-Revision-Date: 2023-04-21 23:09+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" "Language: uk\n" +"Language-Team: ua \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" #: ../../src/appx/blog.txt:-1 msgid "Specification for Django blog training project" @@ -39,384 +38,804 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"As a developer you were asked to create a simple blog site. The goal is to " -"create a place on the Internet where users can share their stories to public." +"The project aims to develop a robust and user-friendly web application " +"using the Django framework. The primary objective is to create a blogging" +" platform that allows users to publish and manage articles on various " +"topics. The application will provide an intuitive interface for authors " +"to compose and format their articles, while also offering a seamless " +"reading experience for visitors." msgstr "" -"Вас, як розробника, попросили створити простий сайт блогу. Мета - створити " -"місце в Інтернеті, де користувачі зможуть ділитися своїми історіями з " -"громадськістю." -#: ../../blog/docs/spec.rst:16 +#: ../../blog/docs/spec.rst:19 +msgid "**Key Features**:" +msgstr "" + +#: ../../blog/docs/spec.rst +msgid "User Registration and Authentication" +msgstr "" + +#: ../../blog/docs/spec.rst:23 msgid "" -"This document applies requirements for the entire project step-by-step. You " -"will start from creating the appropriate URL dispatcher and connecting a " -"PostgreSQL database to store the data and will finish with implementing REST " -"API for the blog." +"The application will provide user registration and authentication " +"functionality, allowing individuals to create accounts, log in, and " +"manage their profile information. This feature will enable authors to " +"have personalized accounts and maintain ownership of their published " +"articles." +msgstr "" + +#: ../../blog/docs/spec.rst +msgid "Article Management" msgstr "" -"Цей документ крок за кроком застосовує вимоги до всього проекту. Ви \" " -"\"почнете зі створення відповідного диспетчера URL-адрес і підключення до " -"бази даних PostgreSQL для зберігання даних і закінчите впровадженням REST " -"API для блог." -#: ../../blog/docs/spec.rst:21 +#: ../../blog/docs/spec.rst:31 msgid "" -"There are some boiler plates, that may be useful in your future work, but " -"you aren’t forced to use them. It’s on your choice." +"Authors will have the ability to create, edit, and delete articles within" +" the application. The system will offer a user-friendly editor. " +"Additionally, authors will be able to categorize articles by assigning " +"relevant topics to them." msgstr "" -"Існують деякі котли, які можуть бути корисними у вашій майбутній роботі, але " -"ви не змушені їх використовувати. Це на ваш вибір." -#: ../../blog/docs/spec.rst:24 -msgid "`Starter template`_" -msgstr "`Starter template`_" +#: ../../blog/docs/spec.rst +#, fuzzy +msgid "Topic Subscription" +msgstr "Опис" -#: ../../blog/docs/spec.rst:25 -msgid "`Bootstrap template`_" -msgstr "`Bootstrap template`_" +#: ../../blog/docs/spec.rst:38 +msgid "" +"The application will include a subscription feature that allows users to " +"subscribe to topics of interest. By subscribing to specific topics, users" +" will receive notifications or updates whenever new articles are " +"published in those categories. This feature will enhance user engagement " +"and ensure that readers stay informed about the topics they find most " +"valuable." +msgstr "" -#: ../../blog/docs/spec.rst:28 -msgid "Challenge: Site views" -msgstr "Завдання: Site views" +#: ../../blog/docs/spec.rst:45 +msgid "" +"Overall, the project aims to deliver an efficient blogging platform that " +"caters to both authors and readers. By providing a seamless user " +"experience and incorporating essential functionalities such as user " +"authentication, article management, and topic subscriptions, the " +"application will empower users to create, share, and explore engaging " +"content within a well-structured and organized platform." +msgstr "" -#: ../../blog/docs/spec.rst:30 +#: ../../blog/docs/spec.rst:52 msgid "" -"It’s ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." +"Here is a starter repository template, that may helps: `Starter " +"template`_." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що всі " -"маршрути доступні та надайте правильні дані. Використовуйте все, що хочете, " -"щоб повернути у відповіді HTTP." -#: ../../blog/docs/spec.rst:34 +#: ../../blog/docs/spec.rst:55 +#, fuzzy +msgid "Challenge: Functional views" +msgstr "Завдання: API views" + +#: ../../blog/docs/spec.rst:57 +#, fuzzy msgid "" -"``/blogs/``: A site’s homepage. This will contain a list of blogs available " -"via the django site." +"It's ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, доступних " -"на сайті django." +"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " +"хочете, щоб повернути у відповіді HTTP." -#: ../../blog/docs/spec.rst:36 +#: ../../blog/docs/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." +"``/about/``: надає звичайний текст для користувача, що описує функції " +"сайту django." -#: ../../blog/docs/spec.rst:38 -msgid "``/``: same as ``/blogs/``" -msgstr "``/``: те ж саме ``/blogs/``" +#: ../../blog/docs/spec.rst:63 +#, fuzzy +msgid "" +"``/``: A site's homepage. This will contain a list of blogs published via" +" the django site." +msgstr "" +"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " +"доступних на сайті django." -#: ../../blog/docs/spec.rst:39 +#: ../../blog/docs/spec.rst:65 +#, fuzzy msgid "" -"``//``: A single blog post detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single blogpost from the database." +"``/
    /``: A single article detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single article from the " +"database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. URL-адреса " -"містить динамічну частину. Це буде використано для отримання однієї " -"публікації блогу з бази даних." +"``//``: детальний перегляд окремої публікації в блозі. " +"URL-адреса містить динамічну частину. Це буде використано для отримання " +"однієї публікації блогу з бази даних." -#: ../../blog/docs/spec.rst:42 +#: ../../blog/docs/spec.rst:68 +#, fuzzy msgid "" -"``//comment/``: This view will be used to add comments to a " -"blogpost." +"``/
    /comment/``: This view will be used to add comments to a " +"article." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання " -"коментарів до публікації блогу." +"``//comment/``: це подання використовуватиметься для додавання" +" коментарів до публікації блогу." -#: ../../blog/docs/spec.rst:44 -msgid "``/create/``: A post creation form." +#: ../../blog/docs/spec.rst:70 +#, fuzzy +msgid "``/create/``: A article creation form." msgstr "``/create/``: форма створення публікації." -#: ../../blog/docs/spec.rst:45 -msgid "``//update/``: A view to update an existing post data." +#: ../../blog/docs/spec.rst:71 +#, fuzzy +msgid "``/
    /update/``: A view to update an existing article data." +msgstr "``//update/``: перегляд для оновлення наявних даних публікації." + +#: ../../blog/docs/spec.rst:72 +#, fuzzy +msgid "``/
    /delete/``: A view to confirm article deletion." +msgstr "``//delete/``: перегляд для підтвердження видалення публікації." + +#: ../../blog/docs/spec.rst:73 +msgid "``/topics/``: A list of topics available on the site." +msgstr "" + +#: ../../blog/docs/spec.rst:74 +msgid "``/topics//subscribe/``: A view to subscribe for a topic." msgstr "" -"``//update/``: перегляд для оновлення наявних даних публікації." -#: ../../blog/docs/spec.rst:46 -msgid "``//delete/``: A view to confirm post deletion." +#: ../../blog/docs/spec.rst:75 +msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." msgstr "" -"``//delete/``: перегляд для підтвердження видалення публікації." -#: ../../blog/docs/spec.rst:47 -msgid "``/profile//``: A site user’s personal page." +#: ../../blog/docs/spec.rst:76 +#, fuzzy +msgid "``/profile//``: A site user's personal page." msgstr "``/profile//``: Персональна сторінка користувача." -#: ../../blog/docs/spec.rst:48 +#: ../../blog/docs/spec.rst:77 +#, fuzzy msgid "" -"``/change_password/``: This route will be used to change users’ credential " +"``/set-password/``: This route will be used to change users' credential " "data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни облікових " -"даних користувачів." +"``/change_password/``: Ця сторінка використовуватиметься для зміни " +"облікових даних користувачів." + +#: ../../blog/docs/spec.rst:79 +#, fuzzy +msgid "``/set-userdata/``: This route will be user to change users' data." +msgstr "" +"``/change_password/``: Ця сторінка використовуватиметься для зміни " +"облікових даних користувачів." -#: ../../blog/docs/spec.rst:50 +#: ../../blog/docs/spec.rst:80 +msgid "``/deactivate/``: Account deactivation (deletion) view." +msgstr "" + +#: ../../blog/docs/spec.rst:81 msgid "``/register/``: This view contains a user registration form." msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../blog/docs/spec.rst:51 +#: ../../blog/docs/spec.rst:82 msgid "``/login/``: This view contains a login form." msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../blog/docs/spec.rst:52 +#: ../../blog/docs/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to " +"homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:62 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" +#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:258 +#, fuzzy +msgid "Optional tasks" +msgstr "Додаткові Вдосконалення" -#: ../../blog/docs/spec.rst:64 +#: ../../blog/docs/spec.rst:89 msgid "" -"It’s time to work with data representations. You’re to add HTML template to " -"the blog site project." +"``/archive///``: This view provides a list of " +"articles published on a specified month of a specified year. This view " +"should apply date validation and raise ``Http404`` for invalid paths. The" +" valid date is a year's 4-digits form followed by 1 or 2 digits " +"representing month. Month range should be limited as [1..12], leading " +"zero may be omitted. Valid URLs are:" msgstr "" -"Настав час попрацювати з представленнями даних. Ви повинні додати шаблон " -"HTML до проекту сайту блогу." -#: ../../blog/docs/spec.rst:67 +#: ../../blog/docs/spec.rst:103 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:106 msgid "" -"Create \"templates\" folder in the project's root. This is the place to keep " -"your base templates. Make sure this path is included to the ``TEMPLATES`` " -"object in settings file." +"Django admin may be used to create some dummy data. To gather access to " +"admin section you need to create a superuser. The easiest way to do that " +"is to use a django command:" msgstr "" -"Створіть папку \"templates\" в корені проекту. Це місце для зберігання ваших " -"базових шаблонів. Переконайтеся, що цей шлях включено до об'єкта " -"``TEMPLATES`` у файлі налаштувань." -#: ../../blog/docs/spec.rst:73 +#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:238 +msgid "General" +msgstr "" + +#: ../../blog/docs/spec.rst:116 +msgid "Each model will be registered for admin site." +msgstr "" + +#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 +msgid "Article topic" +msgstr "" + +#: ../../blog/docs/spec.rst:120 +msgid "This is a simple model, that contains information about topic:" +msgstr "" + +#: ../../blog/docs/spec.rst:122 +msgid "topic title (unique value, 64 characters or fewer)" +msgstr "" + +#: ../../blog/docs/spec.rst:123 +msgid "topic short description (255 characters or fewer)" +msgstr "" + +#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 +#, fuzzy +msgid "Article" +msgstr "Змінні" + +#: ../../blog/docs/spec.rst:127 +msgid "Article requires title (255 characters or fewer)." +msgstr "" + +#: ../../blog/docs/spec.rst:128 +msgid "Article requires content (at least 255 characters)." +msgstr "" + +#: ../../blog/docs/spec.rst:129 msgid "" -"There is no need to implement functional for forms for now. Just render " -"them. There is no need to pass any context to ``render`` function for now." +"Creation date should be autogenerated at article creation, and would " +"never be updated." msgstr "" -"На даний момент немає необхідності впроваджувати функціонал для форм. Просто " -"візуалізуйте їх. Наразі немає потреби передавати будь-який контекст у " -"функцію ``render``." -#: ../../blog/docs/spec.rst:77 -msgid "**All** templates should be inherited from the base template." -msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." +#: ../../blog/docs/spec.rst:131 +msgid "Updated date will be update at each article save." +msgstr "" + +#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 +msgid "Article comment" +msgstr "" + +#: ../../blog/docs/spec.rst:135 +msgid "Comment requires creation date (autogenerated)." +msgstr "" + +#: ../../blog/docs/spec.rst:136 +msgid "Comment requires message text." +msgstr "" -#: ../../blog/docs/spec.rst:78 +#: ../../blog/docs/spec.rst:139 +msgid "Relationships" +msgstr "" + +#: ../../blog/docs/spec.rst:141 msgid "" -"Each page should contain a navbar at the top. Navbar will contain permalinks " -"to the home and about pages." +"Standard Django user model **will be** used for now. To apply model " +"reference pass ``\"auth.User\"`` as related model. Users can be created " +"via admin page. You can also refer the same model as shown below:" msgstr "" -"Кожна сторінка повинна містити навігаційну панель угорі. Навігаційна панель " -"міститиме постійні посилання на домашню сторінку та сторінку про." -#: ../../blog/docs/spec.rst:80 -msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." +#: ../../blog/docs/spec.rst:154 +msgid "``article`` and ``topics`` have *many-to-many* relationship." msgstr "" -"Панель навігації має містити посилання на сторінки ``/register/`` і ``/login/" -"``." -#: ../../blog/docs/spec.rst:81 -msgid "``/register/`` page should render a user registration form." -msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." +#: ../../blog/docs/spec.rst:155 +msgid "" +"``article`` and ``user`` have *one-to-many* relationship. A article can " +"have **only one** author, but users can create as many articles as they " +"want." +msgstr "" -#: ../../blog/docs/spec.rst:82 -msgid "``/login/`` page should render a user authentication form." -msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." +#: ../../blog/docs/spec.rst:158 +msgid "" +"``article`` and ``comment`` have *one-to-many* relationship. A article " +"may be a container for many comments, but a comment is related to a " +"single article." +msgstr "" -#: ../../blog/docs/spec.rst:83 -msgid "``/create/`` page should render a form to create a new post." +#: ../../blog/docs/spec.rst:161 +msgid "" +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" +" *article - user* relationship." msgstr "" -"Сторінка ``/create/`` має відобразити форму для створення нового допису." -#: ../../blog/docs/spec.rst:84 +#: ../../blog/docs/spec.rst:163 msgid "" -"``/`` and ``/blogs/`` page should provide a list of posts. Each post should " -"contain a link to its detail view (``/``). It's ok to use static " -"content for now." +"``topic`` and ``user`` use *many-to-many* relationship. A single user can" +" prefer none or as many topics as needed and vice versa. This " +"relationship represents topics preferred by a certain blog user. Also " +"this provides an additional option to mark some of preferred topics with " +"a **notify** flag, to receive newsletters about specified topics updates." +" The difference between *prefer* and *notify* is that *preferred* topics " +"affect the articles list for a user, and *notify* is responsible for " +"newsletters for the user." +msgstr "" + +#: ../../blog/docs/spec.rst:174 +msgid "UML diagram" msgstr "" -"Сторінки ``/`` і ``/blogs/`` мають надавати список публікацій. Кожен допис " -"має містити посилання на його детальний перегляд (``/``). Наразі " -"можна використовувати статичний вміст." -#: ../../blog/docs/spec.rst:87 +#: ../../blog/docs/spec.rst:206 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" + +#: ../../blog/docs/spec.rst:208 +#, fuzzy msgid "" -"``/`` page should provide details on a single post. It's ok to " -"use static content for now." +"Update existing views to represent entities that are actually stored " +"inside the project's database." msgstr "" -"Сторінка ``/`` має надавати детальну інформацію про одну " -"публікацію. Наразі можна використовувати статичний вміст." +"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" +" в базі даних проекту." -#: ../../blog/docs/spec.rst:89 -msgid "Detail view should contain links to ``/update/`` and ``/delete/``." +#: ../../blog/docs/spec.rst:211 +#, fuzzy +msgid "``/``: should represent a list of existing articles." +msgstr "``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." + +#: ../../blog/docs/spec.rst:212 +#, fuzzy +msgid "" +"Each article entity on a list view should be a link to corresponding " +"article." msgstr "" -"Детальний перегляд має містити посилання на ``/update/`` та ``/delete/``." +"Кожна сутність публікації в поданні списку має бути посиланням на " +"відповідну публікацію." -#: ../../blog/docs/spec.rst:90 -msgid "``/profile//`` should render an author's personal page." -msgstr "``/profile//`` має відобразити особисту сторінку автора." +#: ../../blog/docs/spec.rst:214 +#, fuzzy +msgid "``/
    /``: should represent a single existing article." +msgstr "``//``: має представляти одну наявну публікацію в блозі." -#: ../../blog/docs/spec.rst:97 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" +#: ../../blog/docs/spec.rst:215 +#, fuzzy +msgid "Detail view should contain a list of article related comments." +msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." + +#: ../../blog/docs/spec.rst:216 +#, fuzzy +msgid "" +"``/profile//``: should contain information about user and a" +" list of articles authored by this user." +msgstr "" +"``/profile//``: має містити інформацію про користувача та " +"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.rst:99 -msgid "You are to implement data models for the blog site." -msgstr "Ви повинні реалізувати моделі даних для сайту блогу." +#: ../../blog/docs/spec.rst:218 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." +msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " +"сутність не вдалося отримати." -#: ../../blog/docs/spec.rst:101 -msgid "The ``auth.User`` will be used as ``user`` model." -msgstr "``auth.User`` використовуватиметься як модель ``user``." +#: ../../blog/docs/spec.rst:221 +msgid "" +"Create a service to fetch articles, ordered by a specified user " +"preferences." +msgstr "" -#: ../../blog/docs/spec.rst:103 +#: ../../blog/docs/spec.rst:224 msgid "" -"``post.slug`` value should be autogenerated when a record is created or " -"updated and follow the pattern:" +"It's common to store dedicated functions/classes that supports some " +"specific business logic in a separate module called ``services.py`` or " +"``utils.py`` within an application directory." msgstr "" -"Значення ``post.slug`` має автоматично генеруватися під час створення або " -"оновлення запису та слідувати шаблону:" -#: ../../blog/docs/spec.rst:110 +#: ../../blog/docs/spec.rst:229 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" + +#: ../../blog/docs/spec.rst:232 +#, fuzzy +msgid "Helpful link: `_Bootstrap template`_" +msgstr "`Bootstrap template`_" + +#: ../../blog/docs/spec.rst:235 +msgid "Links related to user data **may be** placeholders for now." +msgstr "" + +#: ../../blog/docs/spec.rst:239 +#, fuzzy +msgid "**All** templates should be inherited from the ``base.html`` template." +msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." + +#: ../../blog/docs/spec.rst:240 msgid "" -"User preferred topics should be marked with a ``notify`` flag. This value " -"should be ``True`` by default." +"Each page has a descriptive title HTML tag, which included ``| Blog`` " +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " +"etc." msgstr "" -"Вибрані користувачем теми мають бути позначені прапорцем ``notify``. За " -"замовчуванням це значення має бути ``True``." -#: ../../blog/docs/spec.rst:143 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" +#: ../../blog/docs/spec.rst:242 +msgid "Each page should contain a link to homepage (``/`` URL route)." +msgstr "" -#: ../../blog/docs/spec.rst:145 +#: ../../blog/docs/spec.rst:243 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project’s database." +"(*Optional*) Each page should contain an inclusion-block(s) with " +"following links:" msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються в " -"базі даних проекту." -#: ../../blog/docs/spec.rst:148 +#: ../../blog/docs/spec.rst:246 +#, fuzzy +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../blog/docs/spec.rst:247 +#, fuzzy +msgid "``/login/``: user login form" +msgstr "``/login/``: Сторінка з формою для логіна." + +#: ../../blog/docs/spec.rst:248 +#, fuzzy +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення публікації." + +#: ../../blog/docs/spec.rst:250 +msgid "" +"Each page contains a list of registered topics. Each view of this kind " +"filters only articles of a relevant topic. This should be implemented " +"with a custom template context processor." +msgstr "" + +#: ../../blog/docs/spec.rst:253 +msgid "Replace content block for *about* page with some static content." +msgstr "" + +#: ../../blog/docs/spec.rst:254 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../blog/docs/spec.rst:150 -msgid "``/`` and ``/blogs/``: should represent a list of existing blogposts." +#: ../../blog/docs/spec.rst:260 +msgid "" +"Each page should contain a list of links to archive views for the last " +"year." msgstr "" -"``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." -#: ../../blog/docs/spec.rst:151 -msgid "Each post entity should provide the information about:" -msgstr "Кожен допис блогу повинен надавати інформацію про:" +#: ../../blog/docs/spec.rst:264 +#, fuzzy +msgid "Articles list" +msgstr "Список Програмного Забезпечення" -#: ../../blog/docs/spec.rst:153 -msgid "title (each word should be capitalized)" -msgstr "назва (кожне слово має бути великим)" +#: ../../blog/docs/spec.rst:265 +msgid "Main page contains a list of published articles." +msgstr "" -#: ../../blog/docs/spec.rst:154 -msgid "creation date" +#: ../../blog/docs/spec.rst:266 +msgid "Each article entity is rendered using a custom template tag." +msgstr "" + +#: ../../blog/docs/spec.rst:267 +msgid "``article`` template tag renders information about a article object:" +msgstr "" + +#: ../../blog/docs/spec.rst:269 +msgid "article title" +msgstr "" + +#: ../../blog/docs/spec.rst:270 +msgid "article content (trimmed to ~50 characters)" +msgstr "" + +#: ../../blog/docs/spec.rst:271 +#, fuzzy +msgid "article creation date" msgstr "дата створення" -#: ../../blog/docs/spec.rst:155 -msgid "list of related topics (first 3 topics or fewer)" +#: ../../blog/docs/spec.rst:272 +#, fuzzy +msgid "related topics (3 topics or fewer)" msgstr "список пов'язаних тем (перші 3 теми або менше)" -#: ../../blog/docs/spec.rst:156 -msgid "trimmed content (~50 words or fewer)" -msgstr "обрізаний вміст (~50 слів або менше)" - -#: ../../blog/docs/spec.rst:157 -msgid "number of comments" +#: ../../blog/docs/spec.rst:273 +#, fuzzy +msgid "number of related comments" msgstr "кількість коментарів" -#: ../../blog/docs/spec.rst:159 -msgid "Each post entity on a list view should be a link to corresponding post." +#: ../../blog/docs/spec.rst:280 +msgid "Article details" msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на відповідну " -"публікацію." -#: ../../blog/docs/spec.rst:161 -msgid "``//``: should represent a single existing blogpost." -msgstr "``//``: має представляти одну наявну публікацію в блозі." +#: ../../blog/docs/spec.rst:282 +msgid "Article update and deletion views **would not** affect data for now." +msgstr "" -#: ../../blog/docs/spec.rst:162 -msgid "Detail view should contain a list of post related comments." +#: ../../blog/docs/spec.rst:284 +msgid "" +"A article detail page contains links to **update** or **delete** current " +"article." msgstr "" -"Подання деталей має містити список коментарів, пов'язаних із публікацією." -#: ../../blog/docs/spec.rst:163 +#: ../../blog/docs/spec.rst:286 +msgid "Page provides information about article:" +msgstr "" + +#: ../../blog/docs/spec.rst:288 +msgid "Article title" +msgstr "" + +#: ../../blog/docs/spec.rst:289 +#, fuzzy +msgid "Creation date" +msgstr "дата створення" + +#: ../../blog/docs/spec.rst:290 ../../blog/docs/spec.rst:297 +#, fuzzy +msgid "Author name" +msgstr "Запускає гру" + +#: ../../blog/docs/spec.rst:291 +msgid "Related topics" +msgstr "" + +#: ../../blog/docs/spec.rst:292 +msgid "Article content" +msgstr "" + +#: ../../blog/docs/spec.rst:294 +#, fuzzy +msgid "Page contains a list of related comments." +msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." + +#: ../../blog/docs/spec.rst:295 +msgid "Each comment contains:" +msgstr "" + +#: ../../blog/docs/spec.rst:298 +#, fuzzy +msgid "Comment creation time" +msgstr "дата створення" + +#: ../../blog/docs/spec.rst:299 +msgid "Comment message" +msgstr "" + +#: ../../blog/docs/spec.rst:302 +msgid "Profile page" +msgstr "" + +#: ../../blog/docs/spec.rst:303 +msgid "Author page contains information about author:" +msgstr "" + +#: ../../blog/docs/spec.rst:305 +#, fuzzy +msgid "First name" +msgstr "ім'я гравця" + +#: ../../blog/docs/spec.rst:306 +#, fuzzy +msgid "Last name" +msgstr "ім'я гравця" + +#: ../../blog/docs/spec.rst:308 +msgid "Add more information, if needed." +msgstr "" + +#: ../../blog/docs/spec.rst:310 +msgid "Author page contains a list of articles created by this author." +msgstr "" + +#: ../../blog/docs/spec.rst:311 msgid "" -"``/profile//``: should contain information about user and a " -"list of posts authored by this user." +"Author page contains buttons/links to change user data and password or " +"deactivate a user's account." +msgstr "" + +#: ../../blog/docs/spec.rst:315 +msgid "Forms" msgstr "" -"``/profile//``: має містити інформацію про користувача та " -"список публікацій, автором яких є цей користувач." -#: ../../blog/docs/spec.rst:165 +#: ../../blog/docs/spec.rst:317 msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." +"There is **no need** to add actual forms now. They will be generated by " +"Django. This section describes the final view of these pages. It's ok " +"just to create a dedicated templates for future use." msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." -#: ../../blog/docs/spec.rst:170 +#: ../../blog/docs/spec.rst:321 +#, fuzzy +msgid "" +"``/register/`` page contains a new user registration form. It should take" +" inputs from the user:" +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../blog/docs/spec.rst:324 ../../blog/docs/spec.rst:332 +#, fuzzy +msgid "username" +msgstr "``username``" + +#: ../../blog/docs/spec.rst:325 +#, fuzzy +msgid "email" +msgstr "``email``" + +#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:333 +#, fuzzy +msgid "password" +msgstr "``password``" + +#: ../../blog/docs/spec.rst:327 ../../blog/docs/spec.rst:346 +#, fuzzy +msgid "confirm password" +msgstr "``confirm password``" + +#: ../../blog/docs/spec.rst:329 +msgid "" +"``/login/`` page contains a user login form. It should take the inputs " +"from the user:" +msgstr "" + +#: ../../blog/docs/spec.rst:335 +msgid "" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a" +" article's data:" +msgstr "" + +#: ../../blog/docs/spec.rst:338 +msgid "title" +msgstr "" + +#: ../../blog/docs/spec.rst:339 +msgid "relevant topics" +msgstr "" + +#: ../../blog/docs/spec.rst:340 +msgid "content" +msgstr "" + +#: ../../blog/docs/spec.rst:342 +msgid "``/
    /delete`` page contains a simple delete confirmation form." +msgstr "" + +#: ../../blog/docs/spec.rst:343 +msgid "Change password form has two fields:" +msgstr "" + +#: ../../blog/docs/spec.rst:345 +#, fuzzy +msgid "new password" +msgstr "``password``" + +#: ../../blog/docs/spec.rst:348 +msgid "" +"Change user's data form collects all information, that can be changed, " +"e.g. ``username``, ``first name``, ``last name`` etc." +msgstr "" + +#: ../../blog/docs/spec.rst:350 +msgid "" +"User preferences page contains a list of available topics. User can mark " +"some topics as preferred. Also for preferred topics an option to " +"*subscribe* for the newsletters becomes available." +msgstr "" + +#: ../../blog/docs/spec.rst:355 +#, fuzzy +msgid "Challenge: Articles' slugs" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:358 +msgid "This is an optional challenge in addition to:" +msgstr "" + +#: ../../blog/docs/spec.rst:360 +#, fuzzy +msgid "`Challenge: Functional views`_" +msgstr "Завдання: API views" + +#: ../../blog/docs/spec.rst:361 +#, fuzzy +msgid "`Challenge: Templates`_" +msgstr "Завдання: Шаблони" + +#: ../../blog/docs/spec.rst:362 +#, fuzzy +msgid "`Challenge: Data models`_" +msgstr "Завдання: моделі даних" + +#: ../../blog/docs/spec.rst:363 +#, fuzzy +msgid "`Challenge: ORM`_" +msgstr "Завдання: ORM" + +#: ../../blog/docs/spec.rst:365 +msgid "Update ``Article`` model with ``slug`` field. The slug value is:" +msgstr "" + +#: ../../blog/docs/spec.rst:367 +msgid "required for each article" +msgstr "" + +#: ../../blog/docs/spec.rst:368 +msgid "unique for each article" +msgstr "" + +#: ../../blog/docs/spec.rst:370 +msgid "Create a data migration to provide slugs for existing articles." +msgstr "" + +#: ../../blog/docs/spec.rst:371 +msgid "" +"``slug`` should be auto-generated on article save. The pattern is " +"``article.title-article.created_date``, e.g. \"Sample article\" created " +"at \"03/24/2023\" should receive slug: ``sample-blog-" +"article-2023-03-23``." +msgstr "" + +#: ../../blog/docs/spec.rst:375 +msgid "Update detail view URL path with article slug as dynamic portion." +msgstr "" + +#: ../../blog/docs/spec.rst:378 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:172 +#: ../../blog/docs/spec.rst:380 msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:174 +#: ../../blog/docs/spec.rst:382 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:175 +#: ../../blog/docs/spec.rst:383 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:176 +#: ../../blog/docs/spec.rst:384 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:177 +#: ../../blog/docs/spec.rst:385 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:179 -msgid "``username`` value should be validated against existing values" -msgstr "" -"Значення ``username`` має перевірятися на відповідність існуючим значенням" +#: ../../blog/docs/spec.rst:387 +#, fuzzy +msgid "``username`` value should be validated against existing values." +msgstr "Значення ``username`` має перевірятися на відповідність існуючим значенням" -#: ../../blog/docs/spec.rst:180 -msgid "``password`` and ``confirm password`` values should match" +#: ../../blog/docs/spec.rst:388 +#, fuzzy +msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися" -#: ../../blog/docs/spec.rst:181 -msgid "Create form for existing users login" +#: ../../blog/docs/spec.rst:389 +#, fuzzy +msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів" -#: ../../blog/docs/spec.rst:182 -msgid "Validations errors are to be rendered on the template" +#: ../../blog/docs/spec.rst:390 +#, fuzzy +msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки мають бути відображені в шаблоні" -#: ../../blog/docs/spec.rst:185 +#: ../../blog/docs/spec.rst:393 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:187 +#: ../../blog/docs/spec.rst:395 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be " +"visible in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " +"бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:189 +#: ../../blog/docs/spec.rst:397 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -424,18 +843,19 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:191 +#: ../../blog/docs/spec.rst:399 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"If authenticated user is admin or stuff they should see a link to admin " +"page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:193 +#: ../../blog/docs/spec.rst:401 msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them:" +" desired username and email. Name data (both first and last) is optional." +" After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -445,140 +865,251 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:198 +#: ../../blog/docs/spec.rst:406 msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case " +"login is successful they should be redirected to their profile (if no " +"``?next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У " +"разі успішного входу вони повинні бути перенаправлені до свого профілю " +"(якщо немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:201 +#: ../../blog/docs/spec.rst:409 +#, fuzzy msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"post creation. Then a post is created, it should be authored by the " -"currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page." +" In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to article creation. Then a article is created, it should be " +"authored by the currently authenticated user." msgstr "" "``/create/``: лише автентифіковані користувачі повинні мати змогу " "відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до перегляду " -"входу, а після успішної автентифікації повернутися до створення публікації. " -"Потім створюється допис, автором якого має бути поточний автентифікований " -"користувач." +"запит на цей перегляд, він повинен бути спершу перенаправлений до " +"перегляду входу, а після успішної автентифікації повернутися до створення" +" публікації. Потім створюється допис, автором якого має бути поточний " +"автентифікований користувач." -#: ../../blog/docs/spec.rst:206 +#: ../../blog/docs/spec.rst:414 +#, fuzzy msgid "" -"``//comment``: Currently authenticated user should be referenced " -"as a comment’s author." +"``/
    /comment/``: Currently authenticated user should be " +"referenced as a comment's author." msgstr "" "``//comment``: як автора коментаря має бути вказано поточного " "автентифікованого користувача." -#: ../../blog/docs/spec.rst:208 -msgid "Posts may be modified or deleted only by their authors (no exceptions)." +#: ../../blog/docs/spec.rst:416 +msgid "" +"Articles may be modified or deleted only by their authors from the detail" +" article page. However, admins can still performs articles actions from " +"the admin page." msgstr "" -"Дописи можуть бути змінені або видалені лише їхніми авторами (без винятків)." -#: ../../blog/docs/spec.rst:212 -msgid "Challenge: Blogpost creation and update" -msgstr "Завдання: створення та оновлення блогу" +#: ../../blog/docs/spec.rst:419 +msgid "User related paths are restricted for non-authorized users." +msgstr "" -#: ../../blog/docs/spec.rst:214 -msgid "Create a form to work with the blogpost model." -msgstr "Створіть форму для роботи з моделлю допису." +#: ../../blog/docs/spec.rst:421 +#, fuzzy +msgid "``/set-password/``" +msgstr "``password``" -#: ../../blog/docs/spec.rst:215 +#: ../../blog/docs/spec.rst:422 +#, fuzzy +msgid "``/set-userdata/``" +msgstr "``username``" + +#: ../../blog/docs/spec.rst:424 msgid "" -"Create a form to gather a comment from a user. Form should be used within a " -"\"post detail\" view." +"``POST`` request ``/deactivate/`` should mark current authenticated user " +"as *deleted* and log them user." msgstr "" -"Створіть форму для збору коментарів від користувача. Форму слід " -"використовувати в перегляді \"подробиць публікації\"." -#: ../../blog/docs/spec.rst:217 -msgid "Form should be used for *create* and *update* view." -msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." +#: ../../blog/docs/spec.rst:427 +msgid "Optional task(s)" +msgstr "" -#: ../../blog/docs/spec.rst:219 -msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +#: ../../blog/docs/spec.rst:429 +msgid "" +"Adjust the order of article list according to authenticated user " +"preferences. For anonymous users keep default ordering." +msgstr "" + +#: ../../blog/docs/spec.rst:431 +msgid "" +"Implement account reactivation behavior. The exact workflow does not " +"mater. The sample scenario is to collect email for the user and check it " +"for existing in the database. After that create a request for admin to " +"activate an account and send a confirmation email, when all is done." +msgstr "" + +#: ../../blog/docs/spec.rst:437 +#, fuzzy +msgid "Challenge: Article related forms" +msgstr "Завдання: форми авторизації" + +#: ../../blog/docs/spec.rst:439 +msgid "" +"Implement a article form. This form will be used to create new articles " +"and to update existing ones." +msgstr "" + +#: ../../blog/docs/spec.rst:441 +msgid "Each created article should have at least one related topic." +msgstr "" + +#: ../../blog/docs/spec.rst:442 +msgid "Implement a comment form to gather a comment from a user." msgstr "" -"Наразі можна використовувати *попередньо визначеного* користувача як автора " -"публікації." -#: ../../blog/docs/spec.rst:222 +#: ../../blog/docs/spec.rst:443 +msgid "" +"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " +"moment." +msgstr "" + +#: ../../blog/docs/spec.rst:445 +msgid "Implement functionality:" +msgstr "" + +#: ../../blog/docs/spec.rst:447 +msgid "article creation" +msgstr "" + +#: ../../blog/docs/spec.rst:448 +msgid "article update" +msgstr "" + +#: ../../blog/docs/spec.rst:449 +msgid "article comment (create a related comment)" +msgstr "" + +#: ../../blog/docs/spec.rst:450 +msgid "article deletion" +msgstr "" + +#: ../../blog/docs/spec.rst:453 +msgid "" +"It's ok to use *pre-defined* author for now, or select author by random. " +"This will be fixed in the next section." +msgstr "" + +#: ../../blog/docs/spec.rst:457 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:224 +#: ../../blog/docs/spec.rst:459 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:225 +#: ../../blog/docs/spec.rst:460 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:227 -msgid "It’s ok to use Django built-in views for auth." +#: ../../blog/docs/spec.rst:463 +msgid "It's ok to use built-in Django CBV if needed." msgstr "" -"Для автентифікації можна використовувати вбудовані представлення Django." -#: ../../blog/docs/spec.rst:230 +#: ../../blog/docs/spec.rst:466 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:232 -msgid "Create serializers for:" -msgstr "Створіть серіалізатори для:" +#: ../../blog/docs/spec.rst:470 +msgid "" +"Topic serializer is for read-only purposes only. Topics can be created " +"via admin page only." +msgstr "" -#: ../../blog/docs/spec.rst:234 -msgid "Blogpost entity" -msgstr "Об'єкт публікації в блозі" +#: ../../blog/docs/spec.rst:472 +msgid "" +"Serialized data should contain all available data, e.g. ``pk``, " +"``title``, ``description``." +msgstr "" -#: ../../blog/docs/spec.rst:235 -msgid "Blogpost comment" -msgstr "Коментар у блозі" +#: ../../blog/docs/spec.rst:477 +msgid "" +"article comment serializer can perform both reading and writing " +"operations. But it can't be used to *update* or *delete* comment." +msgstr "" + +#: ../../blog/docs/spec.rst:479 +msgid "" +"Random, or pre-defined user may be used as comment's author for now. This" +" will be fixed in the future." +msgstr "" + +#: ../../blog/docs/spec.rst:484 +msgid "" +"article serializer provides full access to articles. All operations are " +"available: list, retrieve, create, update and destroy." +msgstr "" -#: ../../blog/docs/spec.rst:236 +#: ../../blog/docs/spec.rst:488 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:239 +#: ../../blog/docs/spec.rst:489 +msgid "" +"User serializer provides full access to site users data. All operations " +"are available for now: list, retrieve, create, update and destroy. This " +"behavior will be fixed in the future, to prevent unauthorized data " +"modifications." +msgstr "" + +#: ../../blog/docs/spec.rst:495 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:241 +#: ../../blog/docs/spec.rst:497 +#, fuzzy msgid "" -"All blog-site functionality are to be reflected via REST API. It’s ok to use " -"*pre-defined* user as a post’s author for now." +"All blog-site functionality are to be reflected via REST API. It's ok to " +"use *pre-defined* user as a article's author for now." msgstr "" "Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора публікації." +"використовувати *попередньо визначеного* користувача як автора " +"публікації." -#: ../../blog/docs/spec.rst:245 +#: ../../blog/docs/spec.rst:501 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:247 -msgid "Implement REST authentication system." +#: ../../blog/docs/spec.rst:503 +#, fuzzy +msgid "Implement authentication system for REST API." msgstr "Запровадити систему автентифікації REST." -#: ../../blog/docs/spec.rst:248 -msgid "Only account owner can change their account data." +#: ../../blog/docs/spec.rst:505 +msgid "For non-authenticated users it is possible to create a new account" msgstr "" -"Лише власник облікового запису може змінити дані свого облікового запису." -#: ../../blog/docs/spec.rst:249 -msgid "Only authenticated users can create posts and comments." +#: ../../blog/docs/spec.rst:506 +msgid "For non-authenticated users it is possible to obtain authentication data." msgstr "" -"Тільки автентифіковані користувачі можуть створювати дописи та коментарі." -#: ../../blog/docs/spec.rst:250 -msgid "Only authors can change their posts." -msgstr "Тільки автори можуть змінювати свої повідомлення." +#: ../../blog/docs/spec.rst:509 +msgid "" +"Access to user data is restricted. Authorized users can manipulate only " +"their own data (e.g. ``retrieve``, ``update``)." +msgstr "" + +#: ../../blog/docs/spec.rst:511 +msgid "" +"Admins can retrieve all users data (``list``), but can't change them via " +"REST API. However, it is still possible via admin page." +msgstr "" + +#: ../../blog/docs/spec.rst:513 +msgid "" +"Authorized users can ``create`` articles or ``update`` and ``delete`` " +"articles created by them." +msgstr "" + +#: ../../blog/docs/spec.rst:515 +msgid "Authorized users can add comments to a specified article." +msgstr "" #: ../../src/appx/code_edit.txt:-1 msgid "Code editors and IDEs for Python" @@ -604,17 +1135,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово " +"підходить для простих речей, але ці інструменти швидко перетворюють " +"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" +" або навіть просто хорошого спеціального редактора коду робить кодування " +"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -630,23 +1161,25 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -659,8 +1192,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -692,23 +1225,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " +"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " +"дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" +" загальної ціни на вказану кількість товару для покупки. Бажану кількість" +" буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -795,11 +1330,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." +"responsibility is to store information about the purchases and their " +"amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -811,9 +1346,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -855,8 +1390,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." +"This method adds a product instance and corresponding quantity value to " +"the cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -868,7 +1403,8 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці " +"продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -884,8 +1420,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -894,16 +1430,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -927,27 +1463,28 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -958,8 +1495,7 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" +msgid "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -968,11 +1504,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -988,27 +1524,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість *protected*, оскільки до неї не слід звертатися поза " +"екземпляром картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -1016,9 +1552,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -1026,8 +1562,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -1037,31 +1573,29 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1070,9 +1604,10 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " +"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " +": {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1084,16 +1619,17 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1101,17 +1637,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1119,19 +1655,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." +"Implement ``remove_product`` method to completely remove some product " +"from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1147,8 +1683,7 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1181,15 +1716,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " +"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " +"пріоритет зліва направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1209,11 +1744,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника," +" відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1253,8 +1788,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1359,16 +1894,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1388,18 +1923,20 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об'єктом." +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " +"(по модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" +" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " +"*format* замінюються нулем або більше елементами *значень*. Якщо для " +"*format* потрібен один аргумент, *values* може бути одним некортежним " +"об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -1435,9 +1972,11 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " +"обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -1453,11 +1992,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " +"(перевизначає прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -1545,8 +2084,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -1589,8 +2128,7 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." +msgid "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -1611,8 +2149,7 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -1632,9 +2169,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -1659,14 +2196,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " -"provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution " +"`__ on Windows and a " +"DLL (cygwin1.dll) which provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux " +"`__ у Windows та DLL " +"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -1674,11 +2211,12 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " +"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " +"Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -1702,13 +2240,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle everything " -"from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle " +"everything from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " +"версій, призначена для швидкого та ефективного керування всіма проектами," +" від малих до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -1721,24 +2259,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" +" рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " +"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " +"розробки за допомогою інтегрованого конвеєра розробників і консолідації " +"компонентів програми. Активно використовувані мільйонами розробників у " +"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " +"простоту, гнучкість і вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -1750,13 +2288,14 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " +"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" +" вона заслужила міцну репутацію надійності, надійності функцій і " +"продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -1768,24 +2307,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" +" запиту. Крім того, введення може бути з файлу або з аргументів " +"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" +" функцій, подібних до оболонки, для полегшення написання сценаріїв і " +"автоматизації різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -1800,19 +2339,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа " +"адміністрування та розробки з відкритим кодом для PostgreSQL, " +"найдосконалішої бази даних з відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" +" веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -1824,17 +2363,19 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" -"contained `__, `high-reliability " -"`__, `full-featured `__, SQL database engine." +"SQLite is a C-language library that implements a `small " +"`__, `fast " +"`__, `self-contained " +"`__, `high-reliability " +"`__, `full-featured " +"`__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " -"`самодостатню `__, `висока надійність " -"`__, `повнофункціональний `__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку " +"`__, `швидку " +"`__, `самодостатню " +"`__, `висока надійність " +"`__, `повнофункціональний " +"`__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -1860,15 +2401,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must " -"type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must" +" type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " -"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " -"більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " +"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " +"якомога більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -1876,8 +2417,7 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -1885,8 +2425,9 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." +"The game process is divided into rounds. Each round consists of " +"**attack** and **defence** stages. Rounds are repeated, until player is " +"defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -1918,8 +2459,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by" +" random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -1958,8 +2499,9 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " -"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" +" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " +"успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -1987,13 +2529,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom " +"exception ``EnemyDown`` should be used to track these cases. Exception " +"should provide the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" +" повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -2005,13 +2547,15 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." +"This is an exceptional scenario when player is defeated. A custom " +"exception ``GameOver`` should be used to track these cases. Exception " +"should provide the details on the player's instance, especially its score" +" points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати " +"бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -2059,11 +2603,11 @@ msgstr "Зменшує очоки здоров'я" #: of wtk.models.Enemy.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" @@ -2088,8 +2632,7 @@ msgstr "варіант для бою" #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -2117,11 +2660,11 @@ msgstr "очки, зароблені гравцем" #: of wtk.models.Player.__init__:3 msgid "" -"This method performs player instance initialization. It set instance name, " -"initial score points value and health." +"This method performs player instance initialization. It set instance " +"name, initial score points value and health." msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров'я." +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " +"назву екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.__init__:6 msgid "a player's name" @@ -2133,18 +2676,19 @@ msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" +"Perform attack on an enemy instance. This method takes an enemy instance " +"as an argument. After that, it takes attack choice from the player model " +"and the defence choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease enemy " +"health, assign score points etc.). Based on fight result should print out" +" a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі " +"гравця та вибір захисту з моделі противника. Після результату битви " +"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " +"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" +" \"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -2160,11 +2704,11 @@ msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``GameOver`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``GameOver``." #: of wtk.models.Player.decrease_health:6 msgid "GameOver" @@ -2176,17 +2720,17 @@ msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance" +" as an argument. After that, it takes defence choice from the player " +"model and the attack choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease player " +"health). Based on fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та " +"вибір атаки від моделі ворога. Після результату бою необхідно виконати " +"операцію обчислення (зменшити здоров'я гравця). За результатами бою " +"повинно вийти повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -2259,7 +2803,8 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, " +"наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -2320,7 +2865,8 @@ msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " +"рядком." #: of wtk.engine.get_player_name:6 msgid "a player defined name" @@ -2333,20 +2879,21 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated " +"- a new one should be initialized with level increased by 1 (one). This " +"case should be reported to the terminal. If a player is defeated - the " +"\"Game Over\" message should be reported to the terminal. " +"``KeyboardInterrupt`` should be handled as well - it's behavior is " +"similar to \"Game Over\" event, but \"game over\" message should be " +"omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " +"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " +"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " +"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " +"також слід обробити - це поведінка подібно до події \"Game Over\", але " +"повідомлення \"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -2354,13 +2901,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs the " -"game process in an endless loop. Once the player is defeated - it stops the " -"execution." +"The function initializes player and enemy instances. After that it runs " +"the game process in an endless loop. Once the player is defeated - it " +"stops the execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " -"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " -"зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" +" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" +" зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -2369,8 +2916,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" +" записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -2379,4 +2926,237 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового файлу." +"Зберігайте таблицю балів у базі даних замість використання текстового " +"файлу." + +#~ msgid "" +#~ "As a developer you were asked to" +#~ " create a simple blog site. The " +#~ "goal is to create a place on " +#~ "the Internet where users can share " +#~ "their stories to public." +#~ msgstr "" +#~ "Вас, як розробника, попросили створити " +#~ "простий сайт блогу. Мета - створити " +#~ "місце в Інтернеті, де користувачі " +#~ "зможуть ділитися своїми історіями з " +#~ "громадськістю." + +#~ msgid "" +#~ "This document applies requirements for " +#~ "the entire project step-by-step. " +#~ "You will start from creating the " +#~ "appropriate URL dispatcher and connecting " +#~ "a PostgreSQL database to store the " +#~ "data and will finish with implementing" +#~ " REST API for the blog." +#~ msgstr "" +#~ "Цей документ крок за кроком застосовує" +#~ " вимоги до всього проекту. Ви \" " +#~ "\"почнете зі створення відповідного диспетчера" +#~ " URL-адрес і підключення до бази " +#~ "даних PostgreSQL для зберігання даних і" +#~ " закінчите впровадженням REST API для " +#~ "блог." + +#~ msgid "" +#~ "There are some boiler plates, that " +#~ "may be useful in your future work," +#~ " but you aren’t forced to use " +#~ "them. It’s on your choice." +#~ msgstr "" +#~ "Існують деякі котли, які можуть бути " +#~ "корисними у вашій майбутній роботі, але" +#~ " ви не змушені їх використовувати. Це" +#~ " на ваш вибір." + +#~ msgid "`Starter template`_" +#~ msgstr "`Starter template`_" + +#~ msgid "Challenge: Site views" +#~ msgstr "Завдання: Site views" + +#~ msgid "``/``: same as ``/blogs/``" +#~ msgstr "``/``: те ж саме ``/blogs/``" + +#~ msgid "" +#~ "It’s time to work with data " +#~ "representations. You’re to add HTML " +#~ "template to the blog site project." +#~ msgstr "" +#~ "Настав час попрацювати з представленнями " +#~ "даних. Ви повинні додати шаблон HTML " +#~ "до проекту сайту блогу." + +#~ msgid "" +#~ "Create \"templates\" folder in the " +#~ "project's root. This is the place " +#~ "to keep your base templates. Make " +#~ "sure this path is included to the" +#~ " ``TEMPLATES`` object in settings file." +#~ msgstr "" +#~ "Створіть папку \"templates\" в корені " +#~ "проекту. Це місце для зберігання ваших" +#~ " базових шаблонів. Переконайтеся, що цей" +#~ " шлях включено до об'єкта ``TEMPLATES`` " +#~ "у файлі налаштувань." + +#~ msgid "" +#~ "There is no need to implement " +#~ "functional for forms for now. Just " +#~ "render them. There is no need to" +#~ " pass any context to ``render`` " +#~ "function for now." +#~ msgstr "" +#~ "На даний момент немає необхідності " +#~ "впроваджувати функціонал для форм. Просто " +#~ "візуалізуйте їх. Наразі немає потреби " +#~ "передавати будь-який контекст у функцію " +#~ "``render``." + +#~ msgid "" +#~ "Each page should contain a navbar " +#~ "at the top. Navbar will contain " +#~ "permalinks to the home and about " +#~ "pages." +#~ msgstr "" +#~ "Кожна сторінка повинна містити навігаційну " +#~ "панель угорі. Навігаційна панель міститиме " +#~ "постійні посилання на домашню сторінку " +#~ "та сторінку про." + +#~ msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." +#~ msgstr "" +#~ "Панель навігації має містити посилання " +#~ "на сторінки ``/register/`` і ``/login/``." + +#~ msgid "``/register/`` page should render a user registration form." +#~ msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." + +#~ msgid "``/login/`` page should render a user authentication form." +#~ msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." + +#~ msgid "``/create/`` page should render a form to create a new post." +#~ msgstr "" +#~ "Сторінка ``/create/`` має відобразити форму" +#~ " для створення нового допису." + +#~ msgid "" +#~ "``/`` and ``/blogs/`` page should " +#~ "provide a list of posts. Each post" +#~ " should contain a link to its " +#~ "detail view (``/``). It's ok " +#~ "to use static content for now." +#~ msgstr "" +#~ "Сторінки ``/`` і ``/blogs/`` мають " +#~ "надавати список публікацій. Кожен допис " +#~ "має містити посилання на його детальний" +#~ " перегляд (``/``). Наразі можна " +#~ "використовувати статичний вміст." + +#~ msgid "" +#~ "``/`` page should provide details" +#~ " on a single post. It's ok to" +#~ " use static content for now." +#~ msgstr "" +#~ "Сторінка ``/`` має надавати " +#~ "детальну інформацію про одну публікацію. " +#~ "Наразі можна використовувати статичний вміст." + +#~ msgid "Detail view should contain links to ``/update/`` and ``/delete/``." +#~ msgstr "" +#~ "Детальний перегляд має містити посилання " +#~ "на ``/update/`` та ``/delete/``." + +#~ msgid "``/profile//`` should render an author's personal page." +#~ msgstr "``/profile//`` має відобразити особисту сторінку автора." + +#~ msgid "You are to implement data models for the blog site." +#~ msgstr "Ви повинні реалізувати моделі даних для сайту блогу." + +#~ msgid "The ``auth.User`` will be used as ``user`` model." +#~ msgstr "``auth.User`` використовуватиметься як модель ``user``." + +#~ msgid "" +#~ "``post.slug`` value should be autogenerated" +#~ " when a record is created or " +#~ "updated and follow the pattern:" +#~ msgstr "" +#~ "Значення ``post.slug`` має автоматично " +#~ "генеруватися під час створення або " +#~ "оновлення запису та слідувати шаблону:" + +#~ msgid "" +#~ "User preferred topics should be marked" +#~ " with a ``notify`` flag. This value" +#~ " should be ``True`` by default." +#~ msgstr "" +#~ "Вибрані користувачем теми мають бути " +#~ "позначені прапорцем ``notify``. За " +#~ "замовчуванням це значення має бути " +#~ "``True``." + +#~ msgid "Each post entity should provide the information about:" +#~ msgstr "Кожен допис блогу повинен надавати інформацію про:" + +#~ msgid "title (each word should be capitalized)" +#~ msgstr "назва (кожне слово має бути великим)" + +#~ msgid "trimmed content (~50 words or fewer)" +#~ msgstr "обрізаний вміст (~50 слів або менше)" + +#~ msgid "Posts may be modified or deleted only by their authors (no exceptions)." +#~ msgstr "" +#~ "Дописи можуть бути змінені або видалені" +#~ " лише їхніми авторами (без винятків)." + +#~ msgid "Challenge: Blogpost creation and update" +#~ msgstr "Завдання: створення та оновлення блогу" + +#~ msgid "Create a form to work with the blogpost model." +#~ msgstr "Створіть форму для роботи з моделлю допису." + +#~ msgid "" +#~ "Create a form to gather a comment" +#~ " from a user. Form should be " +#~ "used within a \"post detail\" view." +#~ msgstr "" +#~ "Створіть форму для збору коментарів від" +#~ " користувача. Форму слід використовувати в" +#~ " перегляді \"подробиць публікації\"." + +#~ msgid "Form should be used for *create* and *update* view." +#~ msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." + +#~ msgid "It’s ok to use a *pre-defined* user as a post’s author for now." +#~ msgstr "" +#~ "Наразі можна використовувати *попередньо " +#~ "визначеного* користувача як автора публікації." + +#~ msgid "It’s ok to use Django built-in views for auth." +#~ msgstr "" +#~ "Для автентифікації можна використовувати " +#~ "вбудовані представлення Django." + +#~ msgid "Create serializers for:" +#~ msgstr "Створіть серіалізатори для:" + +#~ msgid "Blogpost entity" +#~ msgstr "Об'єкт публікації в блозі" + +#~ msgid "Blogpost comment" +#~ msgstr "Коментар у блозі" + +#~ msgid "Only account owner can change their account data." +#~ msgstr "" +#~ "Лише власник облікового запису може " +#~ "змінити дані свого облікового запису." + +#~ msgid "Only authenticated users can create posts and comments." +#~ msgstr "" +#~ "Тільки автентифіковані користувачі можуть " +#~ "створювати дописи та коментарі." + +#~ msgid "Only authors can change their posts." +#~ msgstr "Тільки автори можуть змінювати свої повідомлення." + From fb7a45e1764a0f98d51b3d21da258edb46d9554e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Jul 2023 17:21:46 +0300 Subject: [PATCH 346/689] Update blog specification translation --- src/_locales/uk/LC_MESSAGES/appx.po | 1765 ++++++++++++--------------- 1 file changed, 805 insertions(+), 960 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 625afc07b..dac74e3e2 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,17 +8,18 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-14 16:00+0300\n" -"PO-Revision-Date: 2023-04-21 23:09+0300\n" +"POT-Creation-Date: 2023-07-14 17:20+0300\n" +"PO-Revision-Date: 2023-07-14 17:21+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: ua \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../src/appx/blog.txt:-1 msgid "Specification for Django blog training project" @@ -38,178 +39,188 @@ msgstr "Специфікація Проекту Блогу" #: ../../blog/docs/spec.rst:12 msgid "" -"The project aims to develop a robust and user-friendly web application " -"using the Django framework. The primary objective is to create a blogging" -" platform that allows users to publish and manage articles on various " -"topics. The application will provide an intuitive interface for authors " -"to compose and format their articles, while also offering a seamless " -"reading experience for visitors." +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." msgstr "" +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." #: ../../blog/docs/spec.rst:19 -msgid "**Key Features**:" -msgstr "" +msgid "**Key Features**" +msgstr "**Основні функції**" #: ../../blog/docs/spec.rst msgid "User Registration and Authentication" -msgstr "" +msgstr "Реєстрація та Аутентифікація Користувачів" #: ../../blog/docs/spec.rst:23 msgid "" "The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and " -"manage their profile information. This feature will enable authors to " -"have personalized accounts and maintain ownership of their published " -"articles." +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." msgstr "" +"Застосунок надасть функціональність реєстрації та аутентифікації " +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." #: ../../blog/docs/spec.rst msgid "Article Management" -msgstr "" +msgstr "Керування Статтями" #: ../../blog/docs/spec.rst:31 msgid "" -"Authors will have the ability to create, edit, and delete articles within" -" the application. The system will offer a user-friendly editor. " -"Additionally, authors will be able to categorize articles by assigning " -"relevant topics to them." +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../blog/docs/spec.rst -#, fuzzy msgid "Topic Subscription" -msgstr "Опис" +msgstr "Підписка на Теми" #: ../../blog/docs/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users" -" will receive notifications or updates whenever new articles are " -"published in those categories. This feature will enhance user engagement " -"and ensure that readers stay informed about the topics they find most " -"valuable." +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../blog/docs/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user " -"experience and incorporating essential functionalities such as user " -"authentication, article management, and topic subscriptions, the " -"application will empower users to create, share, and explore engaging " -"content within a well-structured and organized platform." -msgstr "" +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." +msgstr "" +"Застосунок буде містити функцію підписки, яка дозволить користувачам " +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." #: ../../blog/docs/spec.rst:52 msgid "" -"Here is a starter repository template, that may helps: `Starter " -"template`_." +"Here is a starter repository template, that may helps: `Starter template`_." msgstr "" +"Ось шаблон стартового репозиторію, який може допомогти: Starter template_." #: ../../blog/docs/spec.rst:55 -#, fuzzy msgid "Challenge: Functional views" -msgstr "Завдання: API views" +msgstr "Виклик: Функціональні представлення" #: ../../blog/docs/spec.rst:57 -#, fuzzy msgid "" -"It's ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" -"Наразі можна не повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надайте правильні дані. Використовуйте все, що " -"хочете, щоб повернути у відповіді HTTP." +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." #: ../../blog/docs/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції " -"сайту django." +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." #: ../../blog/docs/spec.rst:63 -#, fuzzy msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via" -" the django site." +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." msgstr "" -"``/blogs/``: домашня сторінка сайту. Він міститиме список блогів, " -"доступних на сайті django." +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." #: ../../blog/docs/spec.rst:65 -#, fuzzy msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single article from the " -"database." +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." msgstr "" -"``//``: детальний перегляд окремої публікації в блозі. " -"URL-адреса містить динамічну частину. Це буде використано для отримання " -"однієї публікації блогу з бази даних." +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." #: ../../blog/docs/spec.rst:68 -#, fuzzy msgid "" -"``/
    /comment/``: This view will be used to add comments to a " -"article." +"``/
    /comment/``: This view will be used to add comments to a article." msgstr "" -"``//comment/``: це подання використовуватиметься для додавання" -" коментарів до публікації блогу." +"``/
    /comment/``: Це представлення буде використовуватися для " +"додавання коментарів до статті." #: ../../blog/docs/spec.rst:70 -#, fuzzy msgid "``/create/``: A article creation form." -msgstr "``/create/``: форма створення публікації." +msgstr "``/create/``: Форма створення статті." #: ../../blog/docs/spec.rst:71 -#, fuzzy msgid "``/
    /update/``: A view to update an existing article data." -msgstr "``//update/``: перегляд для оновлення наявних даних публікації." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." #: ../../blog/docs/spec.rst:72 -#, fuzzy msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "``//delete/``: перегляд для підтвердження видалення публікації." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." #: ../../blog/docs/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." -msgstr "" +msgstr "``/topics/``: Перелік доступних тем на сайті." #: ../../blog/docs/spec.rst:74 msgid "``/topics//subscribe/``: A view to subscribe for a topic." -msgstr "" +msgstr "``/topics//subscribe/``: Представлення для підписки на тему." #: ../../blog/docs/spec.rst:75 msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." -msgstr "" +msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." #: ../../blog/docs/spec.rst:76 -#, fuzzy msgid "``/profile//``: A site user's personal page." -msgstr "``/profile//``: Персональна сторінка користувача." +msgstr "``/profile//``: Особиста сторінка користувача сайту." #: ../../blog/docs/spec.rst:77 -#, fuzzy msgid "" -"``/set-password/``: This route will be used to change users' credential " -"data." +"``/set-password/``: This route will be used to change users' credential data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни " -"облікових даних користувачів." +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." #: ../../blog/docs/spec.rst:79 -#, fuzzy msgid "``/set-userdata/``: This route will be user to change users' data." msgstr "" -"``/change_password/``: Ця сторінка використовуватиметься для зміни " -"облікових даних користувачів." +"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " +"користувачів." #: ../../blog/docs/spec.rst:80 msgid "``/deactivate/``: Account deactivation (deletion) view." msgstr "" +"``/deactivate/``: Представлення для деактивації облікового запису " +"(видалення)." #: ../../blog/docs/spec.rst:81 msgid "``/register/``: This view contains a user registration form." @@ -221,26 +232,31 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../blog/docs/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to " -"homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." #: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:258 -#, fuzzy msgid "Optional tasks" -msgstr "Додаткові Вдосконалення" +msgstr "Додаткові завдання" #: ../../blog/docs/spec.rst:89 msgid "" -"``/archive///``: This view provides a list of " -"articles published on a specified month of a specified year. This view " -"should apply date validation and raise ``Http404`` for invalid paths. The" -" valid date is a year's 4-digits form followed by 1 or 2 digits " -"representing month. Month range should be limited as [1..12], leading " -"zero may be omitted. Valid URLs are:" -msgstr "" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" +msgstr "" +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" #: ../../blog/docs/spec.rst:103 msgid "Challenge: Data models" @@ -249,165 +265,182 @@ msgstr "Завдання: моделі даних" #: ../../blog/docs/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that " -"is to use a django command:" +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" msgstr "" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" #: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:238 msgid "General" -msgstr "" +msgstr "Основне" #: ../../blog/docs/spec.rst:116 msgid "Each model will be registered for admin site." -msgstr "" +msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 +#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:470 msgid "Article topic" -msgstr "" +msgstr "Тема статті" #: ../../blog/docs/spec.rst:120 msgid "This is a simple model, that contains information about topic:" -msgstr "" +msgstr "Ось проста модель, що містить інформацію про тему:" #: ../../blog/docs/spec.rst:122 msgid "topic title (unique value, 64 characters or fewer)" -msgstr "" +msgstr "назва теми (унікальне значення, не більше 64 символів)" #: ../../blog/docs/spec.rst:123 msgid "topic short description (255 characters or fewer)" -msgstr "" +msgstr "короткий опис теми (не більше 255 символів)" -#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 -#, fuzzy +#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:484 msgid "Article" -msgstr "Змінні" +msgstr "Стаття" #: ../../blog/docs/spec.rst:127 msgid "Article requires title (255 characters or fewer)." -msgstr "" +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." #: ../../blog/docs/spec.rst:128 msgid "Article requires content (at least 255 characters)." -msgstr "" +msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." #: ../../blog/docs/spec.rst:129 msgid "" -"Creation date should be autogenerated at article creation, and would " -"never be updated." +"Creation date should be autogenerated at article creation, and would never " +"be updated." msgstr "" +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." #: ../../blog/docs/spec.rst:131 msgid "Updated date will be update at each article save." -msgstr "" +msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 +#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:477 msgid "Article comment" -msgstr "" +msgstr "Коментар до статті" #: ../../blog/docs/spec.rst:135 msgid "Comment requires creation date (autogenerated)." -msgstr "" +msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." #: ../../blog/docs/spec.rst:136 msgid "Comment requires message text." -msgstr "" +msgstr "Коментар вимагає наявності тексту повідомлення." #: ../../blog/docs/spec.rst:139 msgid "Relationships" -msgstr "" +msgstr "Відносини" #: ../../blog/docs/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created " -"via admin page. You can also refer the same model as shown below:" +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" msgstr "" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" #: ../../blog/docs/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." -msgstr "" +msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." #: ../../blog/docs/spec.rst:155 msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can " -"have **only one** author, but users can create as many articles as they " -"want." +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." msgstr "" +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." #: ../../blog/docs/spec.rst:158 msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article " -"may be a container for many comments, but a comment is related to a " -"single article." +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." msgstr "" +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." #: ../../blog/docs/spec.rst:161 msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" -" *article - user* relationship." +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." msgstr "" +"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " +"відношення *стаття - користувач*." #: ../../blog/docs/spec.rst:163 msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can" -" prefer none or as many topics as needed and vice versa. This " -"relationship represents topics preferred by a certain blog user. Also " -"this provides an additional option to mark some of preferred topics with " -"a **notify** flag, to receive newsletters about specified topics updates." -" The difference between *prefer* and *notify* is that *preferred* topics " -"affect the articles list for a user, and *notify* is responsible for " -"newsletters for the user." -msgstr "" +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." #: ../../blog/docs/spec.rst:174 msgid "UML diagram" -msgstr "" +msgstr "UML діаграми" #: ../../blog/docs/spec.rst:206 msgid "Challenge: ORM" msgstr "Завдання: ORM" #: ../../blog/docs/spec.rst:208 -#, fuzzy msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project's database." +"Update existing views to represent entities that are actually stored inside " +"the project's database." msgstr "" -"Оновіть існуючі view, щоб представити сутності, які фактично зберігаються" -" в базі даних проекту." +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." #: ../../blog/docs/spec.rst:211 -#, fuzzy msgid "``/``: should represent a list of existing articles." -msgstr "``/`` і ``/blogs/``: мають представляти список існуючих публікацій блогу." +msgstr "``/``: повинен представляти список існуючих статей." #: ../../blog/docs/spec.rst:212 -#, fuzzy msgid "" -"Each article entity on a list view should be a link to corresponding " -"article." +"Each article entity on a list view should be a link to corresponding article." msgstr "" -"Кожна сутність публікації в поданні списку має бути посиланням на " -"відповідну публікацію." +"Кожен елемент статті у перегляді списку повинен бути посиланням на " +"відповідну статтю." #: ../../blog/docs/spec.rst:214 -#, fuzzy msgid "``/
    /``: should represent a single existing article." -msgstr "``//``: має представляти одну наявну публікацію в блозі." +msgstr "``/
    /``: повинен представляти окрему існуючу статтю." #: ../../blog/docs/spec.rst:215 -#, fuzzy msgid "Detail view should contain a list of article related comments." -msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "" +"На сторінці статті повинен бути список коментарів, пов'язаних зі статтею." #: ../../blog/docs/spec.rst:216 -#, fuzzy msgid "" -"``/profile//``: should contain information about user and a" -" list of articles authored by this user." +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." msgstr "" -"``/profile//``: має містити інформацію про користувача та " -"список публікацій, автором яких є цей користувач." +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." #: ../../blog/docs/spec.rst:218 msgid "" @@ -415,82 +448,93 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " -"сутність не вдалося отримати." +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." #: ../../blog/docs/spec.rst:221 msgid "" -"Create a service to fetch articles, ordered by a specified user " -"preferences." +"Create a service to fetch articles, ordered by a specified user preferences." msgstr "" +"Створіть сервіс для отримання статей, впорядкованих за вказаними " +"уподобаннями користувача." #: ../../blog/docs/spec.rst:224 msgid "" -"It's common to store dedicated functions/classes that supports some " -"specific business logic in a separate module called ``services.py`` or " -"``utils.py`` within an application directory." +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." msgstr "" +"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." #: ../../blog/docs/spec.rst:229 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" #: ../../blog/docs/spec.rst:232 -#, fuzzy -msgid "Helpful link: `_Bootstrap template`_" -msgstr "`Bootstrap template`_" +msgid "Helpful link: `Bootstrap template`_" +msgstr "Корисне посилання: `Bootstrap template`_" #: ../../blog/docs/spec.rst:235 msgid "Links related to user data **may be** placeholders for now." msgstr "" +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." #: ../../blog/docs/spec.rst:239 -#, fuzzy msgid "**All** templates should be inherited from the ``base.html`` template." -msgstr "**Усі** шаблони мають бути успадковані від базового шаблону." +msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." #: ../../blog/docs/spec.rst:240 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " -"etc." +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." msgstr "" +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." #: ../../blog/docs/spec.rst:242 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." #: ../../blog/docs/spec.rst:243 msgid "" -"(*Optional*) Each page should contain an inclusion-block(s) with " -"following links:" +"(*Optional*) Each page should contain an inclusion-block(s) with following " +"links:" msgstr "" +"(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " +"посиланнями:" #: ../../blog/docs/spec.rst:246 -#, fuzzy msgid "``/registration/``: new user registration form" -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." +msgstr "``/register/``: форма реєстрації нового користувача" #: ../../blog/docs/spec.rst:247 -#, fuzzy msgid "``/login/``: user login form" -msgstr "``/login/``: Сторінка з формою для логіна." +msgstr "``/login/``: форма логіна користувача" #: ../../blog/docs/spec.rst:248 -#, fuzzy msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення публікації." +msgstr "``/create/``: форма створення статті" #: ../../blog/docs/spec.rst:250 msgid "" "Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented " -"with a custom template context processor." +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." msgstr "" +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." #: ../../blog/docs/spec.rst:253 msgid "Replace content block for *about* page with some static content." msgstr "" +"Замініть блок вмісту (content block) для сторінки *about* на деякий " +"статичний вміст." #: ../../blog/docs/spec.rst:254 msgid "" @@ -500,284 +544,291 @@ msgstr "Шаблони рівня застосунків розташовува #: ../../blog/docs/spec.rst:260 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../blog/docs/spec.rst:264 -#, fuzzy msgid "Articles list" -msgstr "Список Програмного Забезпечення" +msgstr "Список статей" #: ../../blog/docs/spec.rst:265 msgid "Main page contains a list of published articles." -msgstr "" +msgstr "Головна сторінка містить список опублікованих статей." #: ../../blog/docs/spec.rst:266 msgid "Each article entity is rendered using a custom template tag." msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." #: ../../blog/docs/spec.rst:267 msgid "``article`` template tag renders information about a article object:" -msgstr "" +msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" #: ../../blog/docs/spec.rst:269 msgid "article title" -msgstr "" +msgstr "заголовок статті" #: ../../blog/docs/spec.rst:270 msgid "article content (trimmed to ~50 characters)" -msgstr "" +msgstr "зміст статті (обрізаний до ~50 символів)" #: ../../blog/docs/spec.rst:271 -#, fuzzy msgid "article creation date" -msgstr "дата створення" +msgstr "дата створення статті" #: ../../blog/docs/spec.rst:272 -#, fuzzy msgid "related topics (3 topics or fewer)" -msgstr "список пов'язаних тем (перші 3 теми або менше)" +msgstr "related topics (3 topics or fewer)" #: ../../blog/docs/spec.rst:273 -#, fuzzy msgid "number of related comments" -msgstr "кількість коментарів" +msgstr "кількість коментарів до статті" #: ../../blog/docs/spec.rst:280 msgid "Article details" -msgstr "" +msgstr "Деталі статті" #: ../../blog/docs/spec.rst:282 msgid "Article update and deletion views **would not** affect data for now." -msgstr "" +msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." #: ../../blog/docs/spec.rst:284 msgid "" "A article detail page contains links to **update** or **delete** current " "article." msgstr "" +"На сторінці деталей статті мають бути посилання на **оновлення** або " +"**видалення** поточної статті." #: ../../blog/docs/spec.rst:286 msgid "Page provides information about article:" -msgstr "" +msgstr "Сторінка надає інформацію про статтю:" #: ../../blog/docs/spec.rst:288 msgid "Article title" -msgstr "" +msgstr "Заголовок статті" #: ../../blog/docs/spec.rst:289 -#, fuzzy msgid "Creation date" -msgstr "дата створення" +msgstr "Дата створення" #: ../../blog/docs/spec.rst:290 ../../blog/docs/spec.rst:297 -#, fuzzy msgid "Author name" -msgstr "Запускає гру" +msgstr "Ім'я автора" #: ../../blog/docs/spec.rst:291 msgid "Related topics" -msgstr "" +msgstr "Пов'язані теми" #: ../../blog/docs/spec.rst:292 msgid "Article content" -msgstr "" +msgstr "Вміст статті" #: ../../blog/docs/spec.rst:294 -#, fuzzy msgid "Page contains a list of related comments." -msgstr "Подання деталей має містити список коментарів, пов'язаних із публікацією." +msgstr "Сторінка містить список пов'язаних коментарів." #: ../../blog/docs/spec.rst:295 msgid "Each comment contains:" -msgstr "" +msgstr "Кожен коментар містить:" #: ../../blog/docs/spec.rst:298 -#, fuzzy msgid "Comment creation time" -msgstr "дата створення" +msgstr "Час створення коментаря" #: ../../blog/docs/spec.rst:299 msgid "Comment message" -msgstr "" +msgstr "Текст комментаря" #: ../../blog/docs/spec.rst:302 msgid "Profile page" -msgstr "" +msgstr "Строніка профілю" #: ../../blog/docs/spec.rst:303 msgid "Author page contains information about author:" -msgstr "" +msgstr "Сторінка автора містить інформацію про автора:" #: ../../blog/docs/spec.rst:305 -#, fuzzy msgid "First name" -msgstr "ім'я гравця" +msgstr "Ім'я" #: ../../blog/docs/spec.rst:306 -#, fuzzy msgid "Last name" -msgstr "ім'я гравця" +msgstr "Прізвище" #: ../../blog/docs/spec.rst:308 msgid "Add more information, if needed." -msgstr "" +msgstr "Додайте більше інформації за бажанням." #: ../../blog/docs/spec.rst:310 msgid "Author page contains a list of articles created by this author." -msgstr "" +msgstr "Сторінка автора містить список статей, створених цим автором." #: ../../blog/docs/spec.rst:311 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." msgstr "" +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." #: ../../blog/docs/spec.rst:315 msgid "Forms" -msgstr "" +msgstr "Форми" #: ../../blog/docs/spec.rst:317 msgid "" "There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok " -"just to create a dedicated templates for future use." +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." msgstr "" +"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " +"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " +"використання достатньо створити окремі шаблони." #: ../../blog/docs/spec.rst:321 -#, fuzzy msgid "" -"``/register/`` page contains a new user registration form. It should take" -" inputs from the user:" -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" +msgstr "" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" #: ../../blog/docs/spec.rst:324 ../../blog/docs/spec.rst:332 -#, fuzzy msgid "username" -msgstr "``username``" +msgstr "username" #: ../../blog/docs/spec.rst:325 -#, fuzzy msgid "email" -msgstr "``email``" +msgstr "email" #: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:333 -#, fuzzy msgid "password" -msgstr "``password``" +msgstr "password" #: ../../blog/docs/spec.rst:327 ../../blog/docs/spec.rst:346 -#, fuzzy msgid "confirm password" -msgstr "``confirm password``" +msgstr "confirm password" #: ../../blog/docs/spec.rst:329 msgid "" -"``/login/`` page contains a user login form. It should take the inputs " -"from the user:" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" msgstr "" +"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " +"отримувати введені дані від користувача:" #: ../../blog/docs/spec.rst:335 msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a" -" article's data:" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" msgstr "" +"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " +"даних статті:" #: ../../blog/docs/spec.rst:338 msgid "title" -msgstr "" +msgstr "title" #: ../../blog/docs/spec.rst:339 msgid "relevant topics" -msgstr "" +msgstr "відповідні теми" #: ../../blog/docs/spec.rst:340 msgid "content" -msgstr "" +msgstr "content" #: ../../blog/docs/spec.rst:342 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" +"Сторінка ``/
    /delete`` містить просту форму для підтвердження " +"видалення." #: ../../blog/docs/spec.rst:343 msgid "Change password form has two fields:" -msgstr "" +msgstr "Форма зміни пароля має два поля:" #: ../../blog/docs/spec.rst:345 -#, fuzzy msgid "new password" -msgstr "``password``" +msgstr "new password" #: ../../blog/docs/spec.rst:348 msgid "" -"Change user's data form collects all information, that can be changed, " -"e.g. ``username``, ``first name``, ``last name`` etc." +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." msgstr "" +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." #: ../../blog/docs/spec.rst:350 msgid "" "User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to " -"*subscribe* for the newsletters becomes available." +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." msgstr "" +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." #: ../../blog/docs/spec.rst:355 -#, fuzzy msgid "Challenge: Articles' slugs" -msgstr "Завдання: моделі даних" +msgstr "Виклик: Slug-и статей" #: ../../blog/docs/spec.rst:358 msgid "This is an optional challenge in addition to:" -msgstr "" +msgstr "Це додатковий виклик у додаток до:" #: ../../blog/docs/spec.rst:360 -#, fuzzy msgid "`Challenge: Functional views`_" -msgstr "Завдання: API views" +msgstr "`Challenge: Functional views`_" #: ../../blog/docs/spec.rst:361 -#, fuzzy msgid "`Challenge: Templates`_" -msgstr "Завдання: Шаблони" +msgstr "`Challenge: Templates`_" #: ../../blog/docs/spec.rst:362 -#, fuzzy msgid "`Challenge: Data models`_" -msgstr "Завдання: моделі даних" +msgstr "`Challenge: Data models`_" #: ../../blog/docs/spec.rst:363 -#, fuzzy msgid "`Challenge: ORM`_" -msgstr "Завдання: ORM" +msgstr "`Challenge: ORM`_" #: ../../blog/docs/spec.rst:365 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" #: ../../blog/docs/spec.rst:367 msgid "required for each article" -msgstr "" +msgstr "обов'язкове для кожної статті" #: ../../blog/docs/spec.rst:368 msgid "unique for each article" -msgstr "" +msgstr "унікальне для кожної статті" #: ../../blog/docs/spec.rst:370 msgid "Create a data migration to provide slugs for existing articles." -msgstr "" +msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." #: ../../blog/docs/spec.rst:371 msgid "" -"``slug`` should be auto-generated on article save. The pattern is " -"``article.title-article.created_date``, e.g. \"Sample article\" created " -"at \"03/24/2023\" should receive slug: ``sample-blog-" -"article-2023-03-23``." +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." msgstr "" +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " +"отримає slug: ``sample-blog-article-2023-03-23``." #: ../../blog/docs/spec.rst:375 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" +"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " +"якою буде slug статті." #: ../../blog/docs/spec.rst:378 msgid "Challenge: Auth forms" @@ -785,7 +836,8 @@ msgstr "Завдання: форми авторизації" #: ../../blog/docs/spec.rst:380 msgid "Create form for new users registration with required fields:" -msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../blog/docs/spec.rst:382 msgid "``username``" @@ -804,24 +856,22 @@ msgid "``confirm password``" msgstr "``confirm password``" #: ../../blog/docs/spec.rst:387 -#, fuzzy msgid "``username`` value should be validated against existing values." -msgstr "Значення ``username`` має перевірятися на відповідність існуючим значенням" +msgstr "" +"Значення ``username`` повинно перевірятися на відповідність існуючим " +"значенням." #: ../../blog/docs/spec.rst:388 -#, fuzzy msgid "``password`` and ``confirm password`` values should match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися" +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." #: ../../blog/docs/spec.rst:389 -#, fuzzy msgid "Create form for existing users login." -msgstr "Створити форму для входу існуючих користувачів" +msgstr "Створити форму для входу існуючих користувачів." #: ../../blog/docs/spec.rst:390 -#, fuzzy msgid "Validations errors are to be rendered on the template." -msgstr "Помилки перевірки мають бути відображені в шаблоні" +msgstr "Помилки перевірки повинні відображатися на шаблоні." #: ../../blog/docs/spec.rst:393 msgid "Challenge: Authentication" @@ -829,11 +879,11 @@ msgstr "Завдання: Автентифікація" #: ../../blog/docs/spec.rst:395 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be " -"visible in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " -"бути видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." #: ../../blog/docs/spec.rst:397 msgid "" @@ -845,17 +895,16 @@ msgstr "" #: ../../blog/docs/spec.rst:399 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../blog/docs/spec.rst:401 msgid "" -"``/register/``: Users should provide all required information about them:" -" desired username and email. Name data (both first and last) is optional." -" After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -867,249 +916,294 @@ msgstr "" #: ../../blog/docs/spec.rst:406 msgid "" -"``/login/``: Users should provide their credentials to login. In case " -"login is successful they should be redirected to their profile (if no " -"``?next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У " -"разі успішного входу вони повинні бути перенаправлені до свого профілю " -"(якщо немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." #: ../../blog/docs/spec.rst:409 -#, fuzzy msgid "" -"``/create/``: Only authenticated users should be able to visit this page." -" In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to article creation. Then a article is created, it should be " -"authored by the currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." msgstr "" -"``/create/``: лише автентифіковані користувачі повинні мати змогу " -"відвідувати цю сторінку. Якщо анонімний користувач намагається надіслати " -"запит на цей перегляд, він повинен бути спершу перенаправлений до " -"перегляду входу, а після успішної автентифікації повернутися до створення" -" публікації. Потім створюється допис, автором якого має бути поточний " -"автентифікований користувач." +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." #: ../../blog/docs/spec.rst:414 -#, fuzzy msgid "" -"``/
    /comment/``: Currently authenticated user should be " -"referenced as a comment's author." +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." msgstr "" -"``//comment``: як автора коментаря має бути вказано поточного " -"автентифікованого користувача." +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." #: ../../blog/docs/spec.rst:416 msgid "" -"Articles may be modified or deleted only by their authors from the detail" -" article page. However, admins can still performs articles actions from " -"the admin page." +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." msgstr "" +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." #: ../../blog/docs/spec.rst:419 msgid "User related paths are restricted for non-authorized users." msgstr "" +"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " +"користувачів." #: ../../blog/docs/spec.rst:421 -#, fuzzy msgid "``/set-password/``" -msgstr "``password``" +msgstr "``/set-password/``" #: ../../blog/docs/spec.rst:422 -#, fuzzy msgid "``/set-userdata/``" -msgstr "``username``" +msgstr "``/set-userdata/``" #: ../../blog/docs/spec.rst:424 msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user " -"as *deleted* and log them user." +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." msgstr "" +"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." -#: ../../blog/docs/spec.rst:427 +#: ../../blog/docs/spec.rst:428 msgid "Optional task(s)" -msgstr "" +msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:429 +#: ../../blog/docs/spec.rst:430 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." msgstr "" +"Призначте зміну порядку списку статей відповідно до вподобань " +"аутентифікованого користувача. Для анонімних користувачів залиште типове " +"сортування за замовчуванням." -#: ../../blog/docs/spec.rst:431 +#: ../../blog/docs/spec.rst:432 msgid "" -"Implement account reactivation behavior. The exact workflow does not " -"mater. The sample scenario is to collect email for the user and check it " -"for existing in the database. After that create a request for admin to " -"activate an account and send a confirmation email, when all is done." +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." msgstr "" +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../blog/docs/spec.rst:437 -#, fuzzy +#: ../../blog/docs/spec.rst:438 msgid "Challenge: Article related forms" -msgstr "Завдання: форми авторизації" +msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../blog/docs/spec.rst:439 +#: ../../blog/docs/spec.rst:440 msgid "" -"Implement a article form. This form will be used to create new articles " -"and to update existing ones." +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." msgstr "" +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." -#: ../../blog/docs/spec.rst:441 +#: ../../blog/docs/spec.rst:442 msgid "Each created article should have at least one related topic." -msgstr "" +msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../blog/docs/spec.rst:442 +#: ../../blog/docs/spec.rst:443 msgid "Implement a comment form to gather a comment from a user." -msgstr "" +msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../blog/docs/spec.rst:443 +#: ../../blog/docs/spec.rst:444 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." msgstr "" +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." -#: ../../blog/docs/spec.rst:445 +#: ../../blog/docs/spec.rst:446 msgid "Implement functionality:" -msgstr "" +msgstr "Реалізуйте функціональність:" -#: ../../blog/docs/spec.rst:447 +#: ../../blog/docs/spec.rst:448 msgid "article creation" -msgstr "" +msgstr "створення статті" -#: ../../blog/docs/spec.rst:448 +#: ../../blog/docs/spec.rst:449 msgid "article update" -msgstr "" +msgstr "оновлення статті" -#: ../../blog/docs/spec.rst:449 +#: ../../blog/docs/spec.rst:450 msgid "article comment (create a related comment)" -msgstr "" +msgstr "коментування статті (створення коментаря)" -#: ../../blog/docs/spec.rst:450 +#: ../../blog/docs/spec.rst:451 msgid "article deletion" -msgstr "" +msgstr "видалення статті" -#: ../../blog/docs/spec.rst:453 +#: ../../blog/docs/spec.rst:454 msgid "" "It's ok to use *pre-defined* author for now, or select author by random. " "This will be fixed in the next section." msgstr "" +"Наразі можна використовувати *попередньо визначеного* автора або випадковим " +"чином вибирати автора. Це буде виправлено у наступному розділі." -#: ../../blog/docs/spec.rst:457 +#: ../../blog/docs/spec.rst:458 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:459 +#: ../../blog/docs/spec.rst:460 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:460 +#: ../../blog/docs/spec.rst:461 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:463 +#: ../../blog/docs/spec.rst:464 msgid "It's ok to use built-in Django CBV if needed." msgstr "" +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." -#: ../../blog/docs/spec.rst:466 +#: ../../blog/docs/spec.rst:467 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:470 +#: ../../blog/docs/spec.rst:471 msgid "" -"Topic serializer is for read-only purposes only. Topics can be created " -"via admin page only." +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." msgstr "" +"Серіалізатор для теми призначений лише для операцій читання (read-only). " +"Теми можна створювати лише через адміністративну сторінку." -#: ../../blog/docs/spec.rst:472 +#: ../../blog/docs/spec.rst:473 msgid "" -"Serialized data should contain all available data, e.g. ``pk``, " -"``title``, ``description``." +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." msgstr "" +"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " +"``pk``, ``title``, ``description``." -#: ../../blog/docs/spec.rst:477 +#: ../../blog/docs/spec.rst:478 msgid "" -"article comment serializer can perform both reading and writing " -"operations. But it can't be used to *update* or *delete* comment." +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." msgstr "" +"серіалізатор коментаря статті може виконувати як операції читання, так і " +"операції запису. Проте він не може використовуватися для оновлення або " +"видалення коментаря." -#: ../../blog/docs/spec.rst:479 +#: ../../blog/docs/spec.rst:480 msgid "" -"Random, or pre-defined user may be used as comment's author for now. This" -" will be fixed in the future." +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." msgstr "" +"Наразі можна використовувати випадкового або попередньо визначеного " +"користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../blog/docs/spec.rst:484 +#: ../../blog/docs/spec.rst:485 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." msgstr "" +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " +"оновлення та видалення." -#: ../../blog/docs/spec.rst:488 +#: ../../blog/docs/spec.rst:489 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:489 +#: ../../blog/docs/spec.rst:490 msgid "" -"User serializer provides full access to site users data. All operations " -"are available for now: list, retrieve, create, update and destroy. This " -"behavior will be fixed in the future, to prevent unauthorized data " -"modifications." +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." msgstr "" +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." -#: ../../blog/docs/spec.rst:495 +#: ../../blog/docs/spec.rst:496 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:497 -#, fuzzy +#: ../../blog/docs/spec.rst:498 msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to " -"use *pre-defined* user as a article's author for now." +"All blog-site functionality are to be reflected via REST API. It's ok to use " +"*pre-defined* user as a article's author for now." msgstr "" -"Усі функції сайту блогу мають відображатися через REST API. Наразі можна " -"використовувати *попередньо визначеного* користувача як автора " -"публікації." +"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " +"API. Наразі можна використовувати *попередньо визначеного* користувача як " +"автора статті." -#: ../../blog/docs/spec.rst:501 +#: ../../blog/docs/spec.rst:502 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:503 -#, fuzzy +#: ../../blog/docs/spec.rst:504 msgid "Implement authentication system for REST API." -msgstr "Запровадити систему автентифікації REST." +msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../blog/docs/spec.rst:505 +#: ../../blog/docs/spec.rst:506 msgid "For non-authenticated users it is possible to create a new account" msgstr "" +"Для неаутентифікованих користувачів можлива створення нового облікового " +"запису" -#: ../../blog/docs/spec.rst:506 -msgid "For non-authenticated users it is possible to obtain authentication data." +#: ../../blog/docs/spec.rst:507 +msgid "" +"For non-authenticated users it is possible to obtain authentication data." msgstr "" +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../blog/docs/spec.rst:509 +#: ../../blog/docs/spec.rst:510 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." msgstr "" +"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " +"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " +"``update``)." -#: ../../blog/docs/spec.rst:511 +#: ../../blog/docs/spec.rst:512 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." msgstr "" +"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " +"можуть змінювати їх через REST API. Однак це все ще можливо через " +"адміністративну сторінку." -#: ../../blog/docs/spec.rst:513 +#: ../../blog/docs/spec.rst:514 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." msgstr "" +"Авторизовані користувачі можуть ``create`` статті або ``update`` та " +"``delete`` статті, створені ними." -#: ../../blog/docs/spec.rst:515 +#: ../../blog/docs/spec.rst:516 msgid "Authorized users can add comments to a specified article." -msgstr "" +msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." #: ../../src/appx/code_edit.txt:-1 msgid "Code editors and IDEs for Python" @@ -1135,17 +1229,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово " -"підходить для простих речей, але ці інструменти швидко перетворюють " -"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" -" або навіть просто хорошого спеціального редактора коду робить кодування " -"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -1161,25 +1255,23 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -1192,8 +1284,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -1225,25 +1317,23 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " -"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " -"дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" -" загальної ціни на вказану кількість товару для покупки. Бажану кількість" -" буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -1330,11 +1420,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -1346,9 +1436,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -1390,8 +1480,8 @@ msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of msgid "" -"This method adds a product instance and corresponding quantity value to " -"the cart." +"This method adds a product instance and corresponding quantity value to the " +"cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -1403,8 +1493,7 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:8 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці " -"продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -1420,8 +1509,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -1430,16 +1519,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -1463,28 +1552,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -1495,7 +1583,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -1504,11 +1593,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -1524,27 +1613,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість *protected*, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -1552,9 +1641,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -1562,8 +1651,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -1573,29 +1662,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1604,10 +1695,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " -"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " -": {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1619,17 +1709,16 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1637,17 +1726,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1655,19 +1744,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1683,7 +1772,8 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -1716,15 +1806,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " -"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " -"пріоритет зліва направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -1744,11 +1834,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника," -" відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -1788,8 +1878,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -1894,16 +1984,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -1923,20 +2013,18 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " -"(по модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" -" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " -"*format* замінюються нулем або більше елементами *значень*. Якщо для " -"*format* потрібен один аргумент, *values* може бути одним некортежним " -"об'єктом." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -1972,11 +2060,9 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " -"обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -1992,11 +2078,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " -"(перевизначає прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -2084,8 +2170,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -2128,7 +2214,8 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -2149,7 +2236,8 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -2169,9 +2257,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -2196,14 +2284,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution " -"`__ on Windows and a " -"DLL (cygwin1.dll) which provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux " -"`__ у Windows та DLL " -"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -2211,12 +2299,11 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " -"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " -"Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -2240,13 +2327,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle " -"everything from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " -"версій, призначена для швидкого та ефективного керування всіма проектами," -" від малих до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -2259,24 +2346,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" -" рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " -"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " -"розробки за допомогою інтегрованого конвеєра розробників і консолідації " -"компонентів програми. Активно використовувані мільйонами розробників у " -"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " -"простоту, гнучкість і вибір." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -2288,14 +2375,13 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " -"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" -" вона заслужила міцну репутацію надійності, надійності функцій і " -"продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -2307,24 +2393,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" -" запиту. Крім того, введення може бути з файлу або з аргументів " -"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" -" функцій, подібних до оболонки, для полегшення написання сценаріїв і " -"автоматизації різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -2339,19 +2425,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа " -"адміністрування та розробки з відкритим кодом для PostgreSQL, " -"найдосконалішої бази даних з відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" -" веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -2363,19 +2449,17 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small " -"`__, `fast " -"`__, `self-contained " -"`__, `high-reliability " -"`__, `full-featured " -"`__, SQL database engine." +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку " -"`__, `швидку " -"`__, `самодостатню " -"`__, `висока надійність " -"`__, `повнофункціональний " -"`__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -2401,15 +2485,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must" -" type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " -"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " -"якомога більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -2417,7 +2501,8 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -2425,9 +2510,8 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of " -"**attack** and **defence** stages. Rounds are repeated, until player is " -"defeated." +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -2459,8 +2543,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by" -" random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -2499,9 +2583,8 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" -" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " -"успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -2529,13 +2612,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom " -"exception ``EnemyDown`` should be used to track these cases. Exception " -"should provide the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" -" повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -2547,15 +2630,13 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom " -"exception ``GameOver`` should be used to track these cases. Exception " -"should provide the details on the player's instance, especially its score" -" points." +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати " -"бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -2603,11 +2684,11 @@ msgstr "Зменшує очоки здоров'я" #: of wtk.models.Enemy.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" @@ -2632,7 +2713,8 @@ msgstr "варіант для бою" #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -2660,11 +2742,11 @@ msgstr "очки, зароблені гравцем" #: of wtk.models.Player.__init__:3 msgid "" -"This method performs player instance initialization. It set instance " -"name, initial score points value and health." +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " -"назву екземпляра, значення початкових балів і здоров'я." +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.__init__:6 msgid "a player's name" @@ -2676,19 +2758,18 @@ msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance " -"as an argument. After that, it takes attack choice from the player model " -"and the defence choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease enemy " -"health, assign score points etc.). Based on fight result should print out" -" a message:" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі " -"гравця та вибір захисту з моделі противника. Після результату битви " -"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " -"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" -" \"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -2704,11 +2785,11 @@ msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." #: of wtk.models.Player.decrease_health:6 msgid "GameOver" @@ -2720,17 +2801,17 @@ msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance" -" as an argument. After that, it takes defence choice from the player " -"model and the attack choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease player " -"health). Based on fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та " -"вибір атаки від моделі ворога. Після результату бою необхідно виконати " -"операцію обчислення (зменшити здоров'я гравця). За результатами бою " -"повинно вийти повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -2803,8 +2884,7 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, " -"наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -2865,8 +2945,7 @@ msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " -"рядком." +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." #: of wtk.engine.get_player_name:6 msgid "a player defined name" @@ -2879,21 +2958,20 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated " -"- a new one should be initialized with level increased by 1 (one). This " -"case should be reported to the terminal. If a player is defeated - the " -"\"Game Over\" message should be reported to the terminal. " -"``KeyboardInterrupt`` should be handled as well - it's behavior is " -"similar to \"Game Over\" event, but \"game over\" message should be " -"omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " -"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " -"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " -"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " -"також слід обробити - це поведінка подібно до події \"Game Over\", але " -"повідомлення \"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -2901,13 +2979,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs " -"the game process in an endless loop. Once the player is defeated - it " -"stops the execution." +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" -" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" -" зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -2916,8 +2994,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" -" записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -2926,237 +3004,4 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового " -"файлу." - -#~ msgid "" -#~ "As a developer you were asked to" -#~ " create a simple blog site. The " -#~ "goal is to create a place on " -#~ "the Internet where users can share " -#~ "their stories to public." -#~ msgstr "" -#~ "Вас, як розробника, попросили створити " -#~ "простий сайт блогу. Мета - створити " -#~ "місце в Інтернеті, де користувачі " -#~ "зможуть ділитися своїми історіями з " -#~ "громадськістю." - -#~ msgid "" -#~ "This document applies requirements for " -#~ "the entire project step-by-step. " -#~ "You will start from creating the " -#~ "appropriate URL dispatcher and connecting " -#~ "a PostgreSQL database to store the " -#~ "data and will finish with implementing" -#~ " REST API for the blog." -#~ msgstr "" -#~ "Цей документ крок за кроком застосовує" -#~ " вимоги до всього проекту. Ви \" " -#~ "\"почнете зі створення відповідного диспетчера" -#~ " URL-адрес і підключення до бази " -#~ "даних PostgreSQL для зберігання даних і" -#~ " закінчите впровадженням REST API для " -#~ "блог." - -#~ msgid "" -#~ "There are some boiler plates, that " -#~ "may be useful in your future work," -#~ " but you aren’t forced to use " -#~ "them. It’s on your choice." -#~ msgstr "" -#~ "Існують деякі котли, які можуть бути " -#~ "корисними у вашій майбутній роботі, але" -#~ " ви не змушені їх використовувати. Це" -#~ " на ваш вибір." - -#~ msgid "`Starter template`_" -#~ msgstr "`Starter template`_" - -#~ msgid "Challenge: Site views" -#~ msgstr "Завдання: Site views" - -#~ msgid "``/``: same as ``/blogs/``" -#~ msgstr "``/``: те ж саме ``/blogs/``" - -#~ msgid "" -#~ "It’s time to work with data " -#~ "representations. You’re to add HTML " -#~ "template to the blog site project." -#~ msgstr "" -#~ "Настав час попрацювати з представленнями " -#~ "даних. Ви повинні додати шаблон HTML " -#~ "до проекту сайту блогу." - -#~ msgid "" -#~ "Create \"templates\" folder in the " -#~ "project's root. This is the place " -#~ "to keep your base templates. Make " -#~ "sure this path is included to the" -#~ " ``TEMPLATES`` object in settings file." -#~ msgstr "" -#~ "Створіть папку \"templates\" в корені " -#~ "проекту. Це місце для зберігання ваших" -#~ " базових шаблонів. Переконайтеся, що цей" -#~ " шлях включено до об'єкта ``TEMPLATES`` " -#~ "у файлі налаштувань." - -#~ msgid "" -#~ "There is no need to implement " -#~ "functional for forms for now. Just " -#~ "render them. There is no need to" -#~ " pass any context to ``render`` " -#~ "function for now." -#~ msgstr "" -#~ "На даний момент немає необхідності " -#~ "впроваджувати функціонал для форм. Просто " -#~ "візуалізуйте їх. Наразі немає потреби " -#~ "передавати будь-який контекст у функцію " -#~ "``render``." - -#~ msgid "" -#~ "Each page should contain a navbar " -#~ "at the top. Navbar will contain " -#~ "permalinks to the home and about " -#~ "pages." -#~ msgstr "" -#~ "Кожна сторінка повинна містити навігаційну " -#~ "панель угорі. Навігаційна панель міститиме " -#~ "постійні посилання на домашню сторінку " -#~ "та сторінку про." - -#~ msgid "Navbar should contain links to ``/register/`` and ``/login/`` pages." -#~ msgstr "" -#~ "Панель навігації має містити посилання " -#~ "на сторінки ``/register/`` і ``/login/``." - -#~ msgid "``/register/`` page should render a user registration form." -#~ msgstr "Сторінка ``/register/`` має відобразити форму реєстрації користувача." - -#~ msgid "``/login/`` page should render a user authentication form." -#~ msgstr "Сторінка ``/login/`` має відображати форму автентифікації користувача." - -#~ msgid "``/create/`` page should render a form to create a new post." -#~ msgstr "" -#~ "Сторінка ``/create/`` має відобразити форму" -#~ " для створення нового допису." - -#~ msgid "" -#~ "``/`` and ``/blogs/`` page should " -#~ "provide a list of posts. Each post" -#~ " should contain a link to its " -#~ "detail view (``/``). It's ok " -#~ "to use static content for now." -#~ msgstr "" -#~ "Сторінки ``/`` і ``/blogs/`` мають " -#~ "надавати список публікацій. Кожен допис " -#~ "має містити посилання на його детальний" -#~ " перегляд (``/``). Наразі можна " -#~ "використовувати статичний вміст." - -#~ msgid "" -#~ "``/`` page should provide details" -#~ " on a single post. It's ok to" -#~ " use static content for now." -#~ msgstr "" -#~ "Сторінка ``/`` має надавати " -#~ "детальну інформацію про одну публікацію. " -#~ "Наразі можна використовувати статичний вміст." - -#~ msgid "Detail view should contain links to ``/update/`` and ``/delete/``." -#~ msgstr "" -#~ "Детальний перегляд має містити посилання " -#~ "на ``/update/`` та ``/delete/``." - -#~ msgid "``/profile//`` should render an author's personal page." -#~ msgstr "``/profile//`` має відобразити особисту сторінку автора." - -#~ msgid "You are to implement data models for the blog site." -#~ msgstr "Ви повинні реалізувати моделі даних для сайту блогу." - -#~ msgid "The ``auth.User`` will be used as ``user`` model." -#~ msgstr "``auth.User`` використовуватиметься як модель ``user``." - -#~ msgid "" -#~ "``post.slug`` value should be autogenerated" -#~ " when a record is created or " -#~ "updated and follow the pattern:" -#~ msgstr "" -#~ "Значення ``post.slug`` має автоматично " -#~ "генеруватися під час створення або " -#~ "оновлення запису та слідувати шаблону:" - -#~ msgid "" -#~ "User preferred topics should be marked" -#~ " with a ``notify`` flag. This value" -#~ " should be ``True`` by default." -#~ msgstr "" -#~ "Вибрані користувачем теми мають бути " -#~ "позначені прапорцем ``notify``. За " -#~ "замовчуванням це значення має бути " -#~ "``True``." - -#~ msgid "Each post entity should provide the information about:" -#~ msgstr "Кожен допис блогу повинен надавати інформацію про:" - -#~ msgid "title (each word should be capitalized)" -#~ msgstr "назва (кожне слово має бути великим)" - -#~ msgid "trimmed content (~50 words or fewer)" -#~ msgstr "обрізаний вміст (~50 слів або менше)" - -#~ msgid "Posts may be modified or deleted only by their authors (no exceptions)." -#~ msgstr "" -#~ "Дописи можуть бути змінені або видалені" -#~ " лише їхніми авторами (без винятків)." - -#~ msgid "Challenge: Blogpost creation and update" -#~ msgstr "Завдання: створення та оновлення блогу" - -#~ msgid "Create a form to work with the blogpost model." -#~ msgstr "Створіть форму для роботи з моделлю допису." - -#~ msgid "" -#~ "Create a form to gather a comment" -#~ " from a user. Form should be " -#~ "used within a \"post detail\" view." -#~ msgstr "" -#~ "Створіть форму для збору коментарів від" -#~ " користувача. Форму слід використовувати в" -#~ " перегляді \"подробиць публікації\"." - -#~ msgid "Form should be used for *create* and *update* view." -#~ msgstr "Форму слід використовувати для перегляду *створення* та *оновлення*." - -#~ msgid "It’s ok to use a *pre-defined* user as a post’s author for now." -#~ msgstr "" -#~ "Наразі можна використовувати *попередньо " -#~ "визначеного* користувача як автора публікації." - -#~ msgid "It’s ok to use Django built-in views for auth." -#~ msgstr "" -#~ "Для автентифікації можна використовувати " -#~ "вбудовані представлення Django." - -#~ msgid "Create serializers for:" -#~ msgstr "Створіть серіалізатори для:" - -#~ msgid "Blogpost entity" -#~ msgstr "Об'єкт публікації в блозі" - -#~ msgid "Blogpost comment" -#~ msgstr "Коментар у блозі" - -#~ msgid "Only account owner can change their account data." -#~ msgstr "" -#~ "Лише власник облікового запису може " -#~ "змінити дані свого облікового запису." - -#~ msgid "Only authenticated users can create posts and comments." -#~ msgstr "" -#~ "Тільки автентифіковані користувачі можуть " -#~ "створювати дописи та коментарі." - -#~ msgid "Only authors can change their posts." -#~ msgstr "Тільки автори можуть змінювати свої повідомлення." - +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." From cbc9495712202b841c1170f07f8dba7b490a8c14 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 14 Jul 2023 18:25:51 +0300 Subject: [PATCH 347/689] Minor fixes to documentation --- blog | 2 +- src/_locales/uk/LC_MESSAGES/appx.po | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/blog b/blog index 56476e80d..d12af7534 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit 56476e80dfb1dd21361f8756db3c940718a00e22 +Subproject commit d12af7534a24186380fa21aaa5609646db22623a diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index dac74e3e2..e472822eb 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-14 17:20+0300\n" -"PO-Revision-Date: 2023-07-14 17:21+0300\n" +"POT-Creation-Date: 2023-07-14 18:29+0300\n" +"PO-Revision-Date: 2023-07-14 18:30+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -57,7 +57,7 @@ msgstr "" msgid "**Key Features**" msgstr "**Основні функції**" -#: ../../blog/docs/spec.rst +#: ../../blog/docs/spec.rst:22 msgid "User Registration and Authentication" msgstr "Реєстрація та Аутентифікація Користувачів" @@ -74,7 +74,7 @@ msgstr "" "мати персоналізовані облікові записи та зберігати право власності на їхні " "опубліковані статті." -#: ../../blog/docs/spec.rst +#: ../../blog/docs/spec.rst:30 msgid "Article Management" msgstr "Керування Статтями" @@ -89,9 +89,9 @@ msgstr "" "рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " "категоризувати статті, присвоюючи їм відповідні теми." -#: ../../blog/docs/spec.rst -msgid "Topic Subscription" -msgstr "Підписка на Теми" +#: ../../blog/docs/spec.rst:37 +msgid "Topic Subscription:" +msgstr "Підписка на Теми:" #: ../../blog/docs/spec.rst:38 msgid "" @@ -125,7 +125,7 @@ msgstr "" msgid "" "Here is a starter repository template, that may helps: `Starter template`_." msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: Starter template_." +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." #: ../../blog/docs/spec.rst:55 msgid "Challenge: Functional views" From 9ea9613075ca06efd238367081fe5c9f170fe93a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 25 Jul 2023 23:59:31 +0300 Subject: [PATCH 348/689] Update README file Signed-off-by: Serhii Horodilov --- README.rst | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/README.rst b/README.rst index 2fc5c6d43..c98d905d3 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,17 @@ web-frameworks for Python. Getting started =============== +Getting the sources +------------------- + +Current repository is dependent on some other repos (is **multi-repo**). +You may clone it, but this would not download the source of other repos. +To get the full content, do: + +.. code-block:: shell + + git submodule update --remote + Installing dependencies ----------------------- @@ -31,3 +42,41 @@ To do the same using poetry: .. _pip: https://pip.pypa.io .. _poetry: https://python-poetry.org + +Building documentation +---------------------- + +This repository comes with *Makefile*. For now this is the easiest way to do +anything within this source code. There are several targets defined: + +- ``clean`` will clean up the documentation builds +- ``html`` will create HTML pages +- ``locales`` will create/update translations + +Just do: + +.. code-block:: shell + + make # e.g. make html + +By default all builds are done for english locale. +Define ``LANGUAGE`` environment variable to build documents for other locales. + +.. code-block:: shell + + LANGUAGE=uk make html + +Using ``make`` without arguments (targets) will clean up documentation and +build HTML pages for *en* and *uk* locales. + +.. code-block:: shell + + make + +This command is equal to: + +.. code-block:: shell + + make clean + LANGUAGE=en make html + LANGUAGE=uk make html From f4746e5e95f58cf98e88746c51b20224fc4f9392 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 00:26:59 +0300 Subject: [PATCH 349/689] Add pull requests appendix Described pull requests preparation, creation and maintain processes using GitHub. # Conflicts: # src/_locales/uk/LC_MESSAGES/appx.po # src/refs.bib --- src/_locales/uk/LC_MESSAGES/appx.po | 399 +++++++++++++++++++++++++++- src/appx/create_pr.txt | 190 +++++++++++++ src/conf.py | 3 + src/index.txt | 1 + src/refs.bib | 11 + 5 files changed, 602 insertions(+), 2 deletions(-) create mode 100644 src/appx/create_pr.txt diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index e472822eb..bd0af5a29 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -1210,8 +1210,9 @@ msgid "Code editors and IDEs for Python" msgstr "Редактори коду та IDE для Python" #: ../../src/appx/code_edit.txt:-1 ../../src/appx/conv_store.txt:-1 -#: ../../src/appx/env_path.txt:-1 ../../src/appx/precedence.txt:-1 -#: ../../src/appx/printf.txt:-1 ../../src/appx/wtk.txt:-1 +#: ../../src/appx/create_pr.txt:-1 ../../src/appx/env_path.txt:-1 +#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 +#: ../../src/appx/wtk.txt:-1 msgid "Serhii Horodilov sgorodil@gmail.com" msgstr "Serhii Horodilov sgorodil@gmail.com" @@ -1779,6 +1780,400 @@ msgstr "" msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." +#: ../../src/appx/create_pr.txt:-1 +msgid "The instructions to create a pull request via GitHub" +msgstr "Інструкції щодо створення запиту на отримання через GitHub" + +#: ../../src/appx/create_pr.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/appx/create_pr.txt:-1 +msgid "git, github, pull request, branch, merge" +msgstr "git, github, pull request, branch, merge" + +#: ../../src/appx/create_pr.txt:9 +msgid "Creating the Pull Request" +msgstr "Створення Pull Request" + +#: ../../src/appx/create_pr.txt:11 +msgid "" +"Create a pull request to propose and collaborate on changes to a repository. " +"These changes are proposed in a *branch*, which ensures that the default " +"branch only contains finished and approved work :cite:`github:creating-pr`." +msgstr "" +"Створіть запит на отримання, щоб запропонувати та співпрацювати над змінами " +"в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " +"замовчуванням містить лише готову та затверджену роботу :cite:`github:" +"creating-pr`." + +#: ../../src/appx/create_pr.txt:17 +msgid "About pull requests" +msgstr "Про pull requests" + +#: ../../src/appx/create_pr.txt:19 +msgid "" +"Pull requests let you tell others about changes you've pushed to a branch in " +"a repository on GitHub. Once a pull request is opened, you can discuss and " +"review the potential changes with collaborators and add follow-up commits " +"before your changes are merged into the base branch :cite:`github:about-pr`." +msgstr "" +"Запити на витягування дозволяють повідомляти іншим про зміни, які ви внесли " +"до гілки сховища на GitHub. Після відкриття запиту на отримання ви можете " +"обговорити та переглянути потенційні зміни зі співавторами та додати " +"подальші коміти, перш ніж ваші зміни буде об'єднано в базову гілку :cite:" +"`github:about-pr`." + +#: ../../src/appx/create_pr.txt:25 +msgid "" +"The compare and pull request pages use different methods to calculate the " +"diff for changed files:" +msgstr "" +"Сторінки порівняння та запиту на отримання використовують різні методи для " +"обчислення різниці для змінених файлів:" + +#: ../../src/appx/create_pr.txt:28 +msgid "" +"Compare pages show the diff between the tip of the head ref and the current " +"common ancestor (that is, the merge base) of the head and base ref." +msgstr "" +"Сторінки порівняння показують різницю між кінчиком головного посилання та " +"поточним спільним предком (тобто основою злиття) головного та базового " +"посилання." + +#: ../../src/appx/create_pr.txt:30 +msgid "" +"Pull request pages show the diff between the tip of the head ref and the " +"common ancestor of the head and base ref at the time when the pull request " +"was created. Consequently, the merge base used for the comparison might be " +"different." +msgstr "" +"Сторінки запиту на отримання показують різницю між кінчиком головного " +"посилання та спільним предком головного та базового посилання на момент " +"створення запиту на отримання. Отже, база злиття, яка використовується для " +"порівняння, може бути іншою." + +#: ../../src/appx/create_pr.txt:35 +msgid "" +"In *few words*: both source and target branches **should** share some " +"commit(s) in their history and the source branch **should** has commit(s) " +"missing on the target one." +msgstr "" +"У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати спільні " +"деякі коміти у своїй історії, а вихідна гілка **повинна** мати коміти, " +"відсутні в цільовій." + +#: ../../src/appx/create_pr.txt:41 +msgid "Repository content" +msgstr "Вміст репозиторію" + +#: ../../src/appx/create_pr.txt:43 +msgid "Following SHOULD be included to the repository:" +msgstr "У репозиторій СЛІД включити наступне:" + +#: ../../src/appx/create_pr.txt:45 +msgid "code base" +msgstr "кодова база" + +#: ../../src/appx/create_pr.txt:46 +msgid "project dependencies (if any)" +msgstr "залежності проекту (якщо є)" + +#: ../../src/appx/create_pr.txt:48 +msgid "Following MAY be included to the repository:" +msgstr "До репозиторію МОЖЕ бути включено:" + +#: ../../src/appx/create_pr.txt:50 +msgid "additional information (e.g. README file and other documents)" +msgstr "додаткова інформація (наприклад, файл README та інші документи)" + +#: ../../src/appx/create_pr.txt:51 +msgid "dummy data (e.g. fixtures for development and testing etc.)" +msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" + +#: ../../src/appx/create_pr.txt:53 +msgid "Following SHOULD be excluded from the repository:" +msgstr "З репозитарію СЛІД виключити:" + +#: ../../src/appx/create_pr.txt:55 +msgid "virtual environment directory" +msgstr "каталог віртуального середовища" + +#: ../../src/appx/create_pr.txt:56 +msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" +msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" + +#: ../../src/appx/create_pr.txt:57 +msgid "python byte-compiled code (``__pycache__``)" +msgstr "скомпільований код python (``__pycache__``)" + +#: ../../src/appx/create_pr.txt:58 +msgid "IDE configurations (e.g. \".vscode\", \".idea\" etc.)" +msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" + +#: ../../src/appx/create_pr.txt:59 +msgid "Desktop Services Store (\".DS_Store\")" +msgstr "Desktop Services Store (\".DS_Store\")" + +#: ../../src/appx/create_pr.txt:63 +msgid "Repository preparation" +msgstr "Підготовка репозиторію" + +#: ../../src/appx/create_pr.txt:65 +msgid "This should be done once for each repository." +msgstr "Це потрібно зробити один раз для кожного репозиторію." + +#: ../../src/appx/create_pr.txt:68 +msgid "Repository initialization" +msgstr "Ініціалізація репозиторію" + +#: ../../src/appx/create_pr.txt:70 +msgid "" +"Create README file and provide a brief description for your project " +"(optional)." +msgstr "" +"Створіть файл README та надайте короткий опис свого проекту (необов'язково)." + +#: ../../src/appx/create_pr.txt:72 +msgid "Create a virtual environment." +msgstr "Створіть віртуальне середовище." + +#: ../../src/appx/create_pr.txt:73 +msgid "Install project dependencies." +msgstr "Встановіть залежності проекту." + +#: ../../src/appx/create_pr.txt:74 +msgid "Freeze the dependencies." +msgstr "Зафіксуйте залежності." + +#: ../../src/appx/create_pr.txt:80 +msgid "" +"Create a base code modules (e.g. initialize django project and apps, or " +"create an empty python module like \"main.py\" etc.)." +msgstr "" +"Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " +"його застосунки або створіть порожній модуль python, як-от \"main.py\" тощо)." + +#: ../../src/appx/create_pr.txt:82 +msgid "" +"Create \".gitignore\" file and set up directories and files to be excluded" +msgstr "" +"Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які потрібно " +"виключити" + +#: ../../src/appx/create_pr.txt:83 +msgid "Create a fresh repository." +msgstr "Створіть нове репозиторій." + +#: ../../src/appx/create_pr.txt:89 ../../src/appx/create_pr.txt:171 +msgid "Stage and commit changes." +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/create_pr.txt:90 +msgid "Set up remote repository." +msgstr "Налаштуйте віддалений репозиторій." + +#: ../../src/appx/create_pr.txt:96 +msgid "Push your local branch to remote repo." +msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." + +#: ../../src/appx/create_pr.txt:99 +msgid "Append contributors to remote repository" +msgstr "Додати учасників до віддаленого репозиторію" + +#: ../../src/appx/create_pr.txt:101 +msgid "" +"Reviews allow collaborators to comment on the changes proposed in pull " +"requests, approve the changes, or request further changes before the pull " +"request is merged. Repository administrators can require that all pull " +"requests are approved before being merged." +msgstr "" +"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах на " +"отримання, затверджувати зміни або вимагати подальших змін перед об'єднанням " +"запиту на отримання. Адміністратори сховища можуть вимагати схвалення всіх " +"запитів на отримання перед об'єднанням." + +#: ../../src/appx/create_pr.txt:107 +msgid "" +"On `GitHub `_, navigate to the repository settings page " +"and switch to **Collaborators and teams** menu item." +msgstr "" +"На `GitHub `_ перейдіть на сторінку налаштувань " +"репозиторію та перейдіть до пункту меню **Collaborators and teams**." + +#: ../../src/appx/create_pr.txt:109 +msgid "Under **Manage access** section click ``Add people`` button." +msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." + +#: ../../src/appx/create_pr.txt:110 +msgid "In modal window start typing GitHub username." +msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." + +#: ../../src/appx/create_pr.txt:111 +msgid "Select a contributor from the dropdown menu." +msgstr "Виберіть учасника зі спадного меню." + +#: ../../src/appx/create_pr.txt:115 +msgid "Working on feature" +msgstr "Робота над завданням" + +#: ../../src/appx/create_pr.txt:117 +msgid "" +"Create a dedicated branch with some representative name (e.g. \"feature/" +"models\", \"cbv\" etc.)." +msgstr "" +"Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " +"\"feature/models\", \"cbv\" тощо)." + +#: ../../src/appx/create_pr.txt:119 +msgid "Switch to the newly created branch." +msgstr "Перейдіть до новоствореної гілки." + +#: ../../src/appx/create_pr.txt:120 +msgid "Do the work and commit changes on a feature branch." +msgstr "Виконайте роботу та зафіксуйте зміни в гілці." + +#: ../../src/appx/create_pr.txt:124 +msgid "You can create a branch and switch to it by a single command." +msgstr "" +"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " +"команди." + +#: ../../src/appx/create_pr.txt:133 +msgid "" +"While working on a *feature branch* make commits for each completed logical " +"block of code." +msgstr "" +"Під час роботи над *функціональною гілкою* робіть коміти для кожного " +"завершеного логічного блоку коду." + +#: ../../src/appx/create_pr.txt:138 +msgid "Creating the pull request" +msgstr "Створення запиту на злиття" + +#: ../../src/appx/create_pr.txt:140 +msgid "" +"Make sure your working branch is up-to-date with the default one. You can " +"pull changes for the default branch and rebase your feature branch onto it." +msgstr "" +"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " +"на неї." + +#: ../../src/appx/create_pr.txt:143 +msgid "" +"Push feature branch to the remote repository. By default the current active " +"branch is pushed to the remote repo." +msgstr "" +"Завантажте функціональну гілку до віддаленого репозиторію. За замовчуванням " +"буде завантажена активна гілка." + +#: ../../src/appx/create_pr.txt:150 +msgid "Go to your remote repository at GitHub and click **Pull requests** tab." +msgstr "" +"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку **Pull " +"requests**." + +#: ../../src/appx/create_pr.txt:151 +msgid "On **Pull requests** tab click **New** button." +msgstr "На вкладці **Pull requests** натисніть кнопку **New**." + +#: ../../src/appx/create_pr.txt:152 +msgid "" +"Select your default branch as *target* and your feature branch as *source*." +msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." + +#: ../../src/appx/create_pr.txt:153 +msgid "Provide some brief description for your pull request." +msgstr "Надайте короткий опис вашого запиту." + +#: ../../src/appx/create_pr.txt:154 +msgid "Press **Create pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/create_pr.txt:155 +msgid "" +"On the pull request page add a **reviewer** by clicking the appropriate " +"option and selecting a person from a dropdown menu." +msgstr "" +"На сторінці запиту на отримання додайте **reviewer**, натиснувши відповідну " +"опцію та вибравши особу зі спадного меню." + +#: ../../src/appx/create_pr.txt:160 +msgid "Making changes" +msgstr "Внесення змін" + +#: ../../src/appx/create_pr.txt:162 +msgid "From this moment, your pull request *is waiting* for the review." +msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." + +#: ../../src/appx/create_pr.txt:164 +msgid "" +"The reviewer will **approve** or **reject** your pull request. Optionally " +"the reviewer may provide some comments to your code; **rejected** pull " +"requests will always come with some details." +msgstr "" +"Рецензент **схвалить** або **відхилить** ваш запит на отримання. За бажанням " +"рецензент може надати деякі коментарі до вашого коду; **відхилені** запити " +"на витягування завжди надходитимуть з деякими деталями." + +#: ../../src/appx/create_pr.txt:168 +msgid "" +"In case your work is **rejected**, you are to provide fixes. To do this:" +msgstr "" +"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб зробити " +"це:" + +#: ../../src/appx/create_pr.txt:170 +msgid "Do the work in your local feature branch." +msgstr "Виконайте роботу у своїй локальній гілці." + +#: ../../src/appx/create_pr.txt:172 +msgid "Push them to remote branch." +msgstr "Надішліть їх до гілки віддаленого репозиторію." + +#: ../../src/appx/create_pr.txt:173 +msgid "Re-request review from the pull request page." +msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." + +#: ../../src/appx/create_pr.txt:175 +msgid "" +"All commits related to the source branch will be automatically appended to " +"the open pull request. The reviewer will review your updates. Repeat this " +"process until the pull request is **approved**." +msgstr "" +"Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " +"відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " +"Повторюйте цей процес, доки запит на отримання не буде **схвалено**." + +#: ../../src/appx/create_pr.txt:181 +msgid "Merging the pull request" +msgstr "Об'єднання (злиття) запиту" + +#: ../../src/appx/create_pr.txt:183 +msgid "" +"Once your pull request is **approved** - merge it. Select one of the options " +"available with your pull request; they may be:" +msgstr "" +"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один із " +"варіантів, доступних у вашому запиті на отримання; вони можуть бути:" + +#: ../../src/appx/create_pr.txt:186 +msgid "Create a merge commit" +msgstr "Create a merge commit" + +#: ../../src/appx/create_pr.txt:187 +msgid "Rebase and merge" +msgstr "Rebase and merge" + +#: ../../src/appx/create_pr.txt:188 +msgid "Squash and merge" +msgstr "Squash and merge" + +#: ../../src/appx/create_pr.txt:190 +msgid "After that the pull request is merged into your target branch." +msgstr "Після цього коміти робочої та цільової гілка об'єднується." + #: ../../src/appx/env_path.txt:-1 msgid "Setting up environment variables" msgstr "Встановлення змінних середовища" diff --git a/src/appx/create_pr.txt b/src/appx/create_pr.txt new file mode 100644 index 000000000..1b2d11736 --- /dev/null +++ b/src/appx/create_pr.txt @@ -0,0 +1,190 @@ +.. meta:: + :description: The instructions to create a pull request via GitHub + :author: Vladyslav Ponomaryov + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: git, github, pull request, branch, merge + +######################### +Creating the Pull Request +######################### + +Create a pull request to propose and collaborate on changes to a repository. +These changes are proposed in a *branch*, which ensures that the default +branch only contains finished and approved work :cite:`github:creating-pr`. + +******************* +About pull requests +******************* + +Pull requests let you tell others about changes you've pushed to a branch in +a repository on GitHub. Once a pull request is opened, you can discuss and +review the potential changes with collaborators and add follow-up commits +before your changes are merged into the base branch +:cite:`github:about-pr`. + +The compare and pull request pages use different methods to calculate the diff +for changed files: + +- Compare pages show the diff between the tip of the head ref and the current + common ancestor (that is, the merge base) of the head and base ref. +- Pull request pages show the diff between the tip of the head ref and + the common ancestor of the head and base ref at the time when the pull + request was created. + Consequently, the merge base used for the comparison might be different. + +In *few words*: both source and target branches **should** share some commit(s) +in their history and the source branch **should** has commit(s) missing on +the target one. + +****************** +Repository content +****************** + +Following SHOULD be included to the repository: + +- code base +- project dependencies (if any) + +Following MAY be included to the repository: + +- additional information (e.g. README file and other documents) +- dummy data (e.g. fixtures for development and testing etc.) + +Following SHOULD be excluded from the repository: + +- virtual environment directory +- project database (e.g. "*.sqlite3", "*.db" etc.) +- python byte-compiled code (``__pycache__``) +- IDE configurations (e.g. ".vscode", ".idea" etc.) +- Desktop Services Store (".DS_Store") + +********************** +Repository preparation +********************** + +This should be done once for each repository. + +Repository initialization +========================= + +#. Create README file and provide a brief description for your project + (optional). +#. Create a virtual environment. +#. Install project dependencies. +#. Freeze the dependencies. + + .. code-block:: shell + + pip freeze > requirements.txt + +#. Create a base code modules (e.g. initialize django project and apps, + or create an empty python module like "main.py" etc.). +#. Create ".gitignore" file and set up directories and files to be excluded +#. Create a fresh repository. + + .. code-block:: shell + + git init + +#. Stage and commit changes. +#. Set up remote repository. + + .. code-block:: shell + + git remote add origin + +#. Push your local branch to remote repo. + +Append contributors to remote repository +======================================== + +Reviews allow collaborators to comment on the changes proposed in +pull requests, approve the changes, or request further changes before +the pull request is merged. +Repository administrators can require that all pull requests are approved +before being merged. + +#. On `GitHub `_, navigate to the repository settings page + and switch to **Collaborators and teams** menu item. +#. Under **Manage access** section click ``Add people`` button. +#. In modal window start typing GitHub username. +#. Select a contributor from the dropdown menu. + +****************** +Working on feature +****************** + +#. Create a dedicated branch with some representative name + (e.g. "feature/models", "cbv" etc.). +#. Switch to the newly created branch. +#. Do the work and commit changes on a feature branch. + +.. hint:: + + You can create a branch and switch to it by a single command. + + .. code-block:: shell + + git checkout -b [] + + +.. hint:: + + While working on a *feature branch* make commits for each completed logical + block of code. + +************************* +Creating the pull request +************************* + +#. Make sure your working branch is up-to-date with the default one. + You can pull changes for the default branch and rebase your feature branch + onto it. +#. Push feature branch to the remote repository. By default the current active + branch is pushed to the remote repo. + + .. code-block:: shell + + git push -u origin [] + +#. Go to your remote repository at GitHub and click **Pull requests** tab. +#. On **Pull requests** tab click **New** button. +#. Select your default branch as *target* and your feature branch as *source*. +#. Provide some brief description for your pull request. +#. Press **Create pull request** button. +#. On the pull request page add a **reviewer** by clicking the appropriate + option and selecting a person from a dropdown menu. + +************** +Making changes +************** + +From this moment, your pull request *is waiting* for the review. + +The reviewer will **approve** or **reject** your pull request. +Optionally the reviewer may provide some comments to your code; +**rejected** pull requests will always come with some details. + +In case your work is **rejected**, you are to provide fixes. To do this: + +#. Do the work in your local feature branch. +#. Stage and commit changes. +#. Push them to remote branch. +#. Re-request review from the pull request page. + +All commits related to the source branch will be automatically appended to +the open pull request. The reviewer will review your updates. +Repeat this process until the pull request is **approved**. + +************************ +Merging the pull request +************************ + +Once your pull request is **approved** - merge it. +Select one of the options available with your pull request; they may be: + +- Create a merge commit +- Rebase and merge +- Squash and merge + +After that the pull request is merged into your target branch. diff --git a/src/conf.py b/src/conf.py index f66c5af26..08cee4cd7 100644 --- a/src/conf.py +++ b/src/conf.py @@ -60,6 +60,8 @@ ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ("appx/blog", "DjangoBlog.tex", project, authors, "howto", False), + ("appx/create_pr", "CreatingPullRequest.tex", "Creating the Pull Request", + authors, "howto", False), ] latex_appendices = [ "appx/software_list", @@ -67,6 +69,7 @@ "appx/env_path", "appx/precedence", "appx/printf", + "appx/create_pr", "appx/conv_store", "appx/wtk", "appx/blog", diff --git a/src/index.txt b/src/index.txt index 06ef56b85..377f963fe 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,6 +27,7 @@ appx/env_path appx/precedence appx/printf + appx/create_pr appx/conv_store appx/wtk appx/blog diff --git a/src/refs.bib b/src/refs.bib index 6bdec017f..bc8e7e242 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -137,3 +137,14 @@ @misc{docs-python:controlflow title = "{Python Documentation: 4. More Control Flow Tools}", url = {https://docs.python.org/tutorial/controlflow.html}, } + +@misc{github:creating-pr, + title = "{Creating a pull request}", + author = "{GitHub Docs}", + url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request}, +} + +@misc{github:about-pr, + title = "{About pull requests}", + url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, +} From 1f68960eae1491d1dd406b54ca0965544a91dc3f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 23:09:55 +0300 Subject: [PATCH 350/689] Add test sphinx builds workflow --- .github/workflows/test-build.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/test-build.yml diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml new file mode 100644 index 000000000..238ae2042 --- /dev/null +++ b/.github/workflows/test-build.yml @@ -0,0 +1,31 @@ +name: Check Sphinx Builds + +on: + # Runs on pushes targeting the default branch and changes in the Sphinx-related files + push: + branches: + - devel + paths: + - "src/**/*" + - "src/conf.py" + - "Makefile" + - "requirements.txt" + +jobs: + check-build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + - name: Setup Python + uses: actions/setup-python@v2 + - name: Install dependencies + run: | + pip install -r requirements.txt + - name: Build documents + run: | + LANGUAGE=en make html + LANGUAGE=uk make html \ No newline at end of file From 3f74f5f3fb029b702a325a81c9f5f6b50a21d7c7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 16:08:14 +0300 Subject: [PATCH 351/689] Update test build workflow for GitHub Changed trigger action to "pull_request" (was "push"). --- .github/workflows/{test-build.yml => test_build.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{test-build.yml => test_build.yml} (97%) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test_build.yml similarity index 97% rename from .github/workflows/test-build.yml rename to .github/workflows/test_build.yml index 238ae2042..10b95de56 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test_build.yml @@ -2,7 +2,7 @@ name: Check Sphinx Builds on: # Runs on pushes targeting the default branch and changes in the Sphinx-related files - push: + pull_request: branches: - devel paths: From 9b5ec4e57fb0e61d18a41874f6c17a5fdbfaa907 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 1 Aug 2023 00:18:22 +0300 Subject: [PATCH 352/689] Update blog submodule: specification updates edu-python-course/blog#74 --- blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog b/blog index d12af7534..b9a9549a2 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit d12af7534a24186380fa21aaa5609646db22623a +Subproject commit b9a9549a2de7d1d95f9174e30d8a8fe25b1ec266 From 0aa8212f7213f11bed84d08507eba60fca9eae2e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 6 Aug 2023 11:52:25 +0300 Subject: [PATCH 353/689] Update blog specification --- blog | 2 +- src/_locales/uk/LC_MESSAGES/appx.po | 297 ++++++++++++++-------------- 2 files changed, 146 insertions(+), 153 deletions(-) diff --git a/blog b/blog index b9a9549a2..b20ec0df4 160000 --- a/blog +++ b/blog @@ -1 +1 @@ -Subproject commit b9a9549a2de7d1d95f9174e30d8a8fe25b1ec266 +Subproject commit b20ec0df44f3fd0cff67dbb40cfee3a44b87c196 diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index bd0af5a29..b79ca3e82 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-14 18:29+0300\n" -"PO-Revision-Date: 2023-07-14 18:30+0300\n" +"POT-Creation-Date: 2023-08-06 11:49+0300\n" +"PO-Revision-Date: 2023-08-06 11:52+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -237,7 +237,7 @@ msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:258 +#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:257 msgid "Optional tasks" msgstr "Додаткові завдання" @@ -273,7 +273,7 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:238 +#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:237 msgid "General" msgstr "Основне" @@ -281,7 +281,7 @@ msgstr "Основне" msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:470 +#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 msgid "Article topic" msgstr "Тема статті" @@ -297,7 +297,7 @@ msgstr "назва теми (унікальне значення, не біль msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:484 +#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 msgid "Article" msgstr "Стаття" @@ -321,7 +321,7 @@ msgstr "" msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:477 +#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 msgid "Article comment" msgstr "Коментар до статті" @@ -419,22 +419,15 @@ msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." #: ../../blog/docs/spec.rst:212 -msgid "" -"Each article entity on a list view should be a link to corresponding article." -msgstr "" -"Кожен елемент статті у перегляді списку повинен бути посиланням на " -"відповідну статтю." - -#: ../../blog/docs/spec.rst:214 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../blog/docs/spec.rst:215 -msgid "Detail view should contain a list of article related comments." +#: ../../blog/docs/spec.rst:213 +msgid "Detail view should obtain a list of article related comments." msgstr "" -"На сторінці статті повинен бути список коментарів, пов'язаних зі статтею." +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../blog/docs/spec.rst:216 +#: ../../blog/docs/spec.rst:214 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -442,7 +435,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../blog/docs/spec.rst:218 +#: ../../blog/docs/spec.rst:216 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -451,14 +444,14 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../blog/docs/spec.rst:221 +#: ../../blog/docs/spec.rst:219 msgid "" "Create a service to fetch articles, ordered by a specified user preferences." msgstr "" "Створіть сервіс для отримання статей, впорядкованих за вказаними " "уподобаннями користувача." -#: ../../blog/docs/spec.rst:224 +#: ../../blog/docs/spec.rst:223 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -468,25 +461,25 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../blog/docs/spec.rst:229 +#: ../../blog/docs/spec.rst:228 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.rst:232 +#: ../../blog/docs/spec.rst:231 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../blog/docs/spec.rst:235 +#: ../../blog/docs/spec.rst:234 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../blog/docs/spec.rst:239 +#: ../../blog/docs/spec.rst:238 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../blog/docs/spec.rst:240 +#: ../../blog/docs/spec.rst:239 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -494,13 +487,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../blog/docs/spec.rst:242 +#: ../../blog/docs/spec.rst:241 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../blog/docs/spec.rst:243 +#: ../../blog/docs/spec.rst:242 msgid "" "(*Optional*) Each page should contain an inclusion-block(s) with following " "links:" @@ -508,19 +501,19 @@ msgstr "" "(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " "посиланнями:" -#: ../../blog/docs/spec.rst:246 +#: ../../blog/docs/spec.rst:245 msgid "``/registration/``: new user registration form" msgstr "``/register/``: форма реєстрації нового користувача" -#: ../../blog/docs/spec.rst:247 +#: ../../blog/docs/spec.rst:246 msgid "``/login/``: user login form" msgstr "``/login/``: форма логіна користувача" -#: ../../blog/docs/spec.rst:248 +#: ../../blog/docs/spec.rst:247 msgid "``/create/``: article creation page" msgstr "``/create/``: форма створення статті" -#: ../../blog/docs/spec.rst:250 +#: ../../blog/docs/spec.rst:249 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -530,71 +523,71 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../blog/docs/spec.rst:253 +#: ../../blog/docs/spec.rst:252 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../blog/docs/spec.rst:254 +#: ../../blog/docs/spec.rst:253 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../blog/docs/spec.rst:260 +#: ../../blog/docs/spec.rst:259 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../blog/docs/spec.rst:264 +#: ../../blog/docs/spec.rst:263 msgid "Articles list" msgstr "Список статей" -#: ../../blog/docs/spec.rst:265 +#: ../../blog/docs/spec.rst:264 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../blog/docs/spec.rst:266 +#: ../../blog/docs/spec.rst:265 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../blog/docs/spec.rst:267 +#: ../../blog/docs/spec.rst:266 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../blog/docs/spec.rst:269 +#: ../../blog/docs/spec.rst:268 msgid "article title" msgstr "заголовок статті" -#: ../../blog/docs/spec.rst:270 +#: ../../blog/docs/spec.rst:269 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../blog/docs/spec.rst:271 +#: ../../blog/docs/spec.rst:270 msgid "article creation date" msgstr "дата створення статті" -#: ../../blog/docs/spec.rst:272 +#: ../../blog/docs/spec.rst:271 msgid "related topics (3 topics or fewer)" msgstr "related topics (3 topics or fewer)" -#: ../../blog/docs/spec.rst:273 +#: ../../blog/docs/spec.rst:272 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../blog/docs/spec.rst:280 +#: ../../blog/docs/spec.rst:279 msgid "Article details" msgstr "Деталі статті" -#: ../../blog/docs/spec.rst:282 +#: ../../blog/docs/spec.rst:281 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../blog/docs/spec.rst:284 +#: ../../blog/docs/spec.rst:283 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -602,71 +595,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../blog/docs/spec.rst:286 +#: ../../blog/docs/spec.rst:285 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../blog/docs/spec.rst:288 +#: ../../blog/docs/spec.rst:287 msgid "Article title" msgstr "Заголовок статті" -#: ../../blog/docs/spec.rst:289 +#: ../../blog/docs/spec.rst:288 msgid "Creation date" msgstr "Дата створення" -#: ../../blog/docs/spec.rst:290 ../../blog/docs/spec.rst:297 +#: ../../blog/docs/spec.rst:289 ../../blog/docs/spec.rst:296 msgid "Author name" msgstr "Ім'я автора" -#: ../../blog/docs/spec.rst:291 +#: ../../blog/docs/spec.rst:290 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../blog/docs/spec.rst:292 +#: ../../blog/docs/spec.rst:291 msgid "Article content" msgstr "Вміст статті" -#: ../../blog/docs/spec.rst:294 +#: ../../blog/docs/spec.rst:293 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../blog/docs/spec.rst:295 +#: ../../blog/docs/spec.rst:294 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../blog/docs/spec.rst:298 +#: ../../blog/docs/spec.rst:297 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../blog/docs/spec.rst:299 +#: ../../blog/docs/spec.rst:298 msgid "Comment message" msgstr "Текст комментаря" -#: ../../blog/docs/spec.rst:302 +#: ../../blog/docs/spec.rst:301 msgid "Profile page" msgstr "Строніка профілю" -#: ../../blog/docs/spec.rst:303 +#: ../../blog/docs/spec.rst:302 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../blog/docs/spec.rst:305 +#: ../../blog/docs/spec.rst:304 msgid "First name" msgstr "Ім'я" -#: ../../blog/docs/spec.rst:306 +#: ../../blog/docs/spec.rst:305 msgid "Last name" msgstr "Прізвище" -#: ../../blog/docs/spec.rst:308 +#: ../../blog/docs/spec.rst:307 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../blog/docs/spec.rst:310 +#: ../../blog/docs/spec.rst:309 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../blog/docs/spec.rst:311 +#: ../../blog/docs/spec.rst:310 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -674,11 +667,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../blog/docs/spec.rst:315 +#: ../../blog/docs/spec.rst:314 msgid "Forms" msgstr "Форми" -#: ../../blog/docs/spec.rst:317 +#: ../../blog/docs/spec.rst:316 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -688,7 +681,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../blog/docs/spec.rst:321 +#: ../../blog/docs/spec.rst:320 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -696,23 +689,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:324 ../../blog/docs/spec.rst:332 +#: ../../blog/docs/spec.rst:323 ../../blog/docs/spec.rst:331 msgid "username" msgstr "username" -#: ../../blog/docs/spec.rst:325 +#: ../../blog/docs/spec.rst:324 msgid "email" msgstr "email" -#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:333 +#: ../../blog/docs/spec.rst:325 ../../blog/docs/spec.rst:332 msgid "password" msgstr "password" -#: ../../blog/docs/spec.rst:327 ../../blog/docs/spec.rst:346 +#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:345 msgid "confirm password" msgstr "confirm password" -#: ../../blog/docs/spec.rst:329 +#: ../../blog/docs/spec.rst:328 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -720,7 +713,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:335 +#: ../../blog/docs/spec.rst:334 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -728,33 +721,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../blog/docs/spec.rst:338 +#: ../../blog/docs/spec.rst:337 msgid "title" msgstr "title" -#: ../../blog/docs/spec.rst:339 +#: ../../blog/docs/spec.rst:338 msgid "relevant topics" msgstr "відповідні теми" -#: ../../blog/docs/spec.rst:340 +#: ../../blog/docs/spec.rst:339 msgid "content" msgstr "content" -#: ../../blog/docs/spec.rst:342 +#: ../../blog/docs/spec.rst:341 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../blog/docs/spec.rst:343 +#: ../../blog/docs/spec.rst:342 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../blog/docs/spec.rst:345 +#: ../../blog/docs/spec.rst:344 msgid "new password" msgstr "new password" -#: ../../blog/docs/spec.rst:348 +#: ../../blog/docs/spec.rst:347 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -762,7 +755,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../blog/docs/spec.rst:350 +#: ../../blog/docs/spec.rst:349 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -772,48 +765,48 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../blog/docs/spec.rst:355 +#: ../../blog/docs/spec.rst:354 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../blog/docs/spec.rst:358 +#: ../../blog/docs/spec.rst:357 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../blog/docs/spec.rst:360 +#: ../../blog/docs/spec.rst:359 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../blog/docs/spec.rst:361 +#: ../../blog/docs/spec.rst:360 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../blog/docs/spec.rst:362 +#: ../../blog/docs/spec.rst:361 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../blog/docs/spec.rst:363 +#: ../../blog/docs/spec.rst:362 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../blog/docs/spec.rst:365 +#: ../../blog/docs/spec.rst:364 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../blog/docs/spec.rst:367 +#: ../../blog/docs/spec.rst:366 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../blog/docs/spec.rst:368 +#: ../../blog/docs/spec.rst:367 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../blog/docs/spec.rst:370 +#: ../../blog/docs/spec.rst:369 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../blog/docs/spec.rst:371 +#: ../../blog/docs/spec.rst:370 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " @@ -824,60 +817,60 @@ msgstr "" "наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " "отримає slug: ``sample-blog-article-2023-03-23``." -#: ../../blog/docs/spec.rst:375 +#: ../../blog/docs/spec.rst:374 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../blog/docs/spec.rst:378 +#: ../../blog/docs/spec.rst:377 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:380 +#: ../../blog/docs/spec.rst:379 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:382 +#: ../../blog/docs/spec.rst:381 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:383 +#: ../../blog/docs/spec.rst:382 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:384 +#: ../../blog/docs/spec.rst:383 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:385 +#: ../../blog/docs/spec.rst:384 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:387 +#: ../../blog/docs/spec.rst:386 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../blog/docs/spec.rst:388 +#: ../../blog/docs/spec.rst:387 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../blog/docs/spec.rst:389 +#: ../../blog/docs/spec.rst:388 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../blog/docs/spec.rst:390 +#: ../../blog/docs/spec.rst:389 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../blog/docs/spec.rst:393 +#: ../../blog/docs/spec.rst:392 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:395 +#: ../../blog/docs/spec.rst:394 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -885,7 +878,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../blog/docs/spec.rst:397 +#: ../../blog/docs/spec.rst:396 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -893,14 +886,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:399 +#: ../../blog/docs/spec.rst:398 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:401 +#: ../../blog/docs/spec.rst:400 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -914,7 +907,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:406 +#: ../../blog/docs/spec.rst:405 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -924,7 +917,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:409 +#: ../../blog/docs/spec.rst:408 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -939,7 +932,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../blog/docs/spec.rst:414 +#: ../../blog/docs/spec.rst:413 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -947,7 +940,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../blog/docs/spec.rst:416 +#: ../../blog/docs/spec.rst:415 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -957,21 +950,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:419 +#: ../../blog/docs/spec.rst:418 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../blog/docs/spec.rst:421 +#: ../../blog/docs/spec.rst:420 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../blog/docs/spec.rst:422 +#: ../../blog/docs/spec.rst:421 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../blog/docs/spec.rst:424 +#: ../../blog/docs/spec.rst:423 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -980,11 +973,11 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../blog/docs/spec.rst:428 +#: ../../blog/docs/spec.rst:427 msgid "Optional task(s)" msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:430 +#: ../../blog/docs/spec.rst:429 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -993,7 +986,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../blog/docs/spec.rst:432 +#: ../../blog/docs/spec.rst:431 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -1006,11 +999,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../blog/docs/spec.rst:438 +#: ../../blog/docs/spec.rst:437 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../blog/docs/spec.rst:440 +#: ../../blog/docs/spec.rst:439 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -1018,15 +1011,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../blog/docs/spec.rst:442 +#: ../../blog/docs/spec.rst:441 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../blog/docs/spec.rst:443 +#: ../../blog/docs/spec.rst:442 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../blog/docs/spec.rst:444 +#: ../../blog/docs/spec.rst:443 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1034,27 +1027,27 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../blog/docs/spec.rst:446 +#: ../../blog/docs/spec.rst:445 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../blog/docs/spec.rst:448 +#: ../../blog/docs/spec.rst:447 msgid "article creation" msgstr "створення статті" -#: ../../blog/docs/spec.rst:449 +#: ../../blog/docs/spec.rst:448 msgid "article update" msgstr "оновлення статті" -#: ../../blog/docs/spec.rst:450 +#: ../../blog/docs/spec.rst:449 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../blog/docs/spec.rst:451 +#: ../../blog/docs/spec.rst:450 msgid "article deletion" msgstr "видалення статті" -#: ../../blog/docs/spec.rst:454 +#: ../../blog/docs/spec.rst:453 msgid "" "It's ok to use *pre-defined* author for now, or select author by random. " "This will be fixed in the next section." @@ -1062,29 +1055,29 @@ msgstr "" "Наразі можна використовувати *попередньо визначеного* автора або випадковим " "чином вибирати автора. Це буде виправлено у наступному розділі." -#: ../../blog/docs/spec.rst:458 +#: ../../blog/docs/spec.rst:457 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:460 +#: ../../blog/docs/spec.rst:459 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:461 +#: ../../blog/docs/spec.rst:460 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:464 +#: ../../blog/docs/spec.rst:463 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../blog/docs/spec.rst:467 +#: ../../blog/docs/spec.rst:466 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:471 +#: ../../blog/docs/spec.rst:470 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1092,7 +1085,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../blog/docs/spec.rst:473 +#: ../../blog/docs/spec.rst:472 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1100,7 +1093,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../blog/docs/spec.rst:478 +#: ../../blog/docs/spec.rst:477 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1109,7 +1102,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../blog/docs/spec.rst:480 +#: ../../blog/docs/spec.rst:479 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1117,7 +1110,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../blog/docs/spec.rst:485 +#: ../../blog/docs/spec.rst:484 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1126,11 +1119,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../blog/docs/spec.rst:489 +#: ../../blog/docs/spec.rst:488 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:490 +#: ../../blog/docs/spec.rst:489 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1142,11 +1135,11 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../blog/docs/spec.rst:496 +#: ../../blog/docs/spec.rst:495 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:498 +#: ../../blog/docs/spec.rst:497 msgid "" "All blog-site functionality are to be reflected via REST API. It's ok to use " "*pre-defined* user as a article's author for now." @@ -1155,27 +1148,27 @@ msgstr "" "API. Наразі можна використовувати *попередньо визначеного* користувача як " "автора статті." -#: ../../blog/docs/spec.rst:502 +#: ../../blog/docs/spec.rst:501 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:504 +#: ../../blog/docs/spec.rst:503 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../blog/docs/spec.rst:506 +#: ../../blog/docs/spec.rst:505 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../blog/docs/spec.rst:507 +#: ../../blog/docs/spec.rst:506 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../blog/docs/spec.rst:510 +#: ../../blog/docs/spec.rst:509 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1184,7 +1177,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../blog/docs/spec.rst:512 +#: ../../blog/docs/spec.rst:511 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1193,7 +1186,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:514 +#: ../../blog/docs/spec.rst:513 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1201,7 +1194,7 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../blog/docs/spec.rst:516 +#: ../../blog/docs/spec.rst:515 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." From d76efb19e80d3c204ce1bc615aac9cc7b6e429c8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 8 Aug 2023 23:00:46 +0300 Subject: [PATCH 354/689] Change blog specification project Replaced blog project submodule with a separated specification repository. There is no need to keep complete Django project here. Tasktracker may be used as a replacement (for examples and demo). --- .gitmodules | 6 +- blog | 1 - src/_locales/uk/LC_MESSAGES/appx.po | 420 ++++++++++++++-------------- src/appx/blog | 1 + src/appx/blog.txt | 6 - src/conf.py | 4 +- src/index.txt | 2 +- 7 files changed, 217 insertions(+), 223 deletions(-) delete mode 160000 blog create mode 160000 src/appx/blog delete mode 100644 src/appx/blog.txt diff --git a/.gitmodules b/.gitmodules index 9442fc6e5..57b47c5de 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "problem-sets"] path = problem-sets url = git@github.com:edu-python-course/problem-sets -[submodule "blog"] - path = blog - url = git@github.com:edu-python-course/blog +[submodule "src/appx/blog"] + path = src/appx/blog + url = git@github.com:edu-python-course/blog-spec diff --git a/blog b/blog deleted file mode 160000 index b20ec0df4..000000000 --- a/blog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b20ec0df44f3fd0cff67dbb40cfee3a44b87c196 diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index b79ca3e82..0d2fe6441 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-06 11:49+0300\n" -"PO-Revision-Date: 2023-08-06 11:52+0300\n" +"POT-Creation-Date: 2023-08-08 22:54+0300\n" +"PO-Revision-Date: 2023-08-08 22:58+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -21,23 +21,11 @@ msgstr "" "Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.3.2\n" -#: ../../src/appx/blog.txt:-1 -msgid "Specification for Django blog training project" -msgstr "Специфікація навчального проекту блогу Django" - -#: ../../src/appx/blog.txt:-1 ../../src/appx/software_list.rst:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/appx/blog.txt:-1 -msgid "python, django, blog, project, training" -msgstr "python, django, blog, project, training" - -#: ../../blog/docs/spec.rst:10 +#: ../../src/appx/blog/spec.rst:10 msgid "Blog Project Specification" msgstr "Специфікація Проекту Блогу" -#: ../../blog/docs/spec.rst:12 +#: ../../src/appx/blog/spec.rst:12 msgid "" "The project aims to develop a robust and user-friendly web application using " "the Django framework. The primary objective is to create a blogging platform " @@ -53,15 +41,15 @@ msgstr "" "форматування своїх статей, а також забезпечить безперешкодний досвід читання " "для відвідувачів." -#: ../../blog/docs/spec.rst:19 +#: ../../src/appx/blog/spec.rst:19 msgid "**Key Features**" msgstr "**Основні функції**" -#: ../../blog/docs/spec.rst:22 +#: ../../src/appx/blog/spec.rst:22 msgid "User Registration and Authentication" msgstr "Реєстрація та Аутентифікація Користувачів" -#: ../../blog/docs/spec.rst:23 +#: ../../src/appx/blog/spec.rst:23 msgid "" "The application will provide user registration and authentication " "functionality, allowing individuals to create accounts, log in, and manage " @@ -74,11 +62,11 @@ msgstr "" "мати персоналізовані облікові записи та зберігати право власності на їхні " "опубліковані статті." -#: ../../blog/docs/spec.rst:30 +#: ../../src/appx/blog/spec.rst:30 msgid "Article Management" msgstr "Керування Статтями" -#: ../../blog/docs/spec.rst:31 +#: ../../src/appx/blog/spec.rst:31 msgid "" "Authors will have the ability to create, edit, and delete articles within " "the application. The system will offer a user-friendly editor. Additionally, " @@ -89,11 +77,11 @@ msgstr "" "рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " "категоризувати статті, присвоюючи їм відповідні теми." -#: ../../blog/docs/spec.rst:37 +#: ../../src/appx/blog/spec.rst:37 msgid "Topic Subscription:" msgstr "Підписка на Теми:" -#: ../../blog/docs/spec.rst:38 +#: ../../src/appx/blog/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " "subscribe to topics of interest. By subscribing to specific topics, users " @@ -105,7 +93,7 @@ msgstr "" "рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " "категоризувати статті, присвоюючи їм відповідні теми." -#: ../../blog/docs/spec.rst:45 +#: ../../src/appx/blog/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " "caters to both authors and readers. By providing a seamless user experience " @@ -121,17 +109,17 @@ msgstr "" "залученість користувачів та забезпечить, що читачі будуть інформовані про " "найцікавіші для них теми." -#: ../../blog/docs/spec.rst:52 +#: ../../src/appx/blog/spec.rst:52 msgid "" "Here is a starter repository template, that may helps: `Starter template`_." msgstr "" "Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." -#: ../../blog/docs/spec.rst:55 +#: ../../src/appx/blog/spec.rst:55 msgid "Challenge: Functional views" msgstr "Виклик: Функціональні представлення" -#: ../../blog/docs/spec.rst:57 +#: ../../src/appx/blog/spec.rst:57 msgid "" "It's ok not to return **actual** content for now. Just ensure all the routes " "are available and provide correct data. Use anything you like to return " @@ -141,7 +129,7 @@ msgstr "" "всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " "ви хочете повернути в HTTP-відповіді." -#: ../../blog/docs/spec.rst:61 +#: ../../src/appx/blog/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." @@ -149,7 +137,7 @@ msgstr "" "``/about/``: надає звичайний текст для користувача, що описує функції сайту " "django." -#: ../../blog/docs/spec.rst:63 +#: ../../src/appx/blog/spec.rst:63 msgid "" "``/``: A site's homepage. This will contain a list of blogs published via " "the django site." @@ -157,7 +145,7 @@ msgstr "" "``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " "сайт Django." -#: ../../blog/docs/spec.rst:65 +#: ../../src/appx/blog/spec.rst:65 msgid "" "``/
    /``: A single article detail view. The URL contains dynamic part " "in it. This will be used to fetch a single article from the database." @@ -166,82 +154,82 @@ msgstr "" "частину. Вона буде використовуватися для отримання однієї статті з бази " "даних." -#: ../../blog/docs/spec.rst:68 +#: ../../src/appx/blog/spec.rst:68 msgid "" "``/
    /comment/``: This view will be used to add comments to a article." msgstr "" "``/
    /comment/``: Це представлення буде використовуватися для " "додавання коментарів до статті." -#: ../../blog/docs/spec.rst:70 +#: ../../src/appx/blog/spec.rst:70 msgid "``/create/``: A article creation form." msgstr "``/create/``: Форма створення статті." -#: ../../blog/docs/spec.rst:71 +#: ../../src/appx/blog/spec.rst:71 msgid "``/
    /update/``: A view to update an existing article data." msgstr "" "``/
    /update/``: Представлення для оновлення існуючих даних статті." -#: ../../blog/docs/spec.rst:72 +#: ../../src/appx/blog/spec.rst:72 msgid "``/
    /delete/``: A view to confirm article deletion." msgstr "" "``/
    /delete/``: Представлення для підтвердження видалення статті." -#: ../../blog/docs/spec.rst:73 +#: ../../src/appx/blog/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." msgstr "``/topics/``: Перелік доступних тем на сайті." -#: ../../blog/docs/spec.rst:74 +#: ../../src/appx/blog/spec.rst:74 msgid "``/topics//subscribe/``: A view to subscribe for a topic." msgstr "``/topics//subscribe/``: Представлення для підписки на тему." -#: ../../blog/docs/spec.rst:75 +#: ../../src/appx/blog/spec.rst:75 msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." -#: ../../blog/docs/spec.rst:76 +#: ../../src/appx/blog/spec.rst:76 msgid "``/profile//``: A site user's personal page." msgstr "``/profile//``: Особиста сторінка користувача сайту." -#: ../../blog/docs/spec.rst:77 +#: ../../src/appx/blog/spec.rst:77 msgid "" "``/set-password/``: This route will be used to change users' credential data." msgstr "" "``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " "даних користувачів." -#: ../../blog/docs/spec.rst:79 +#: ../../src/appx/blog/spec.rst:79 msgid "``/set-userdata/``: This route will be user to change users' data." msgstr "" "``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " "користувачів." -#: ../../blog/docs/spec.rst:80 +#: ../../src/appx/blog/spec.rst:80 msgid "``/deactivate/``: Account deactivation (deletion) view." msgstr "" "``/deactivate/``: Представлення для деактивації облікового запису " "(видалення)." -#: ../../blog/docs/spec.rst:81 +#: ../../src/appx/blog/spec.rst:81 msgid "``/register/``: This view contains a user registration form." msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../blog/docs/spec.rst:82 +#: ../../src/appx/blog/spec.rst:82 msgid "``/login/``: This view contains a login form." msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../blog/docs/spec.rst:83 +#: ../../src/appx/blog/spec.rst:83 msgid "" "``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../blog/docs/spec.rst:87 ../../blog/docs/spec.rst:257 +#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:257 msgid "Optional tasks" msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:89 +#: ../../src/appx/blog/spec.rst:89 msgid "" "``/archive///``: This view provides a list of articles " "published on a specified month of a specified year. This view should apply " @@ -258,11 +246,11 @@ msgstr "" "обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " "URL-адрес:" -#: ../../blog/docs/spec.rst:103 +#: ../../src/appx/blog/spec.rst:103 msgid "Challenge: Data models" msgstr "Завдання: моделі даних" -#: ../../blog/docs/spec.rst:106 +#: ../../src/appx/blog/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " "admin section you need to create a superuser. The easiest way to do that is " @@ -273,43 +261,43 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../blog/docs/spec.rst:115 ../../blog/docs/spec.rst:237 +#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:237 msgid "General" msgstr "Основне" -#: ../../blog/docs/spec.rst:116 +#: ../../src/appx/blog/spec.rst:116 msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../blog/docs/spec.rst:119 ../../blog/docs/spec.rst:469 +#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:469 msgid "Article topic" msgstr "Тема статті" -#: ../../blog/docs/spec.rst:120 +#: ../../src/appx/blog/spec.rst:120 msgid "This is a simple model, that contains information about topic:" msgstr "Ось проста модель, що містить інформацію про тему:" -#: ../../blog/docs/spec.rst:122 +#: ../../src/appx/blog/spec.rst:122 msgid "topic title (unique value, 64 characters or fewer)" msgstr "назва теми (унікальне значення, не більше 64 символів)" -#: ../../blog/docs/spec.rst:123 +#: ../../src/appx/blog/spec.rst:123 msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../blog/docs/spec.rst:126 ../../blog/docs/spec.rst:483 +#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:483 msgid "Article" msgstr "Стаття" -#: ../../blog/docs/spec.rst:127 +#: ../../src/appx/blog/spec.rst:127 msgid "Article requires title (255 characters or fewer)." msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." -#: ../../blog/docs/spec.rst:128 +#: ../../src/appx/blog/spec.rst:128 msgid "Article requires content (at least 255 characters)." msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." -#: ../../blog/docs/spec.rst:129 +#: ../../src/appx/blog/spec.rst:129 msgid "" "Creation date should be autogenerated at article creation, and would never " "be updated." @@ -317,27 +305,27 @@ msgstr "" "Дата створення буде автоматично генеруватися при створенні статті і не буде " "оновлюватися пізніше." -#: ../../blog/docs/spec.rst:131 +#: ../../src/appx/blog/spec.rst:131 msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../blog/docs/spec.rst:134 ../../blog/docs/spec.rst:476 +#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:476 msgid "Article comment" msgstr "Коментар до статті" -#: ../../blog/docs/spec.rst:135 +#: ../../src/appx/blog/spec.rst:135 msgid "Comment requires creation date (autogenerated)." msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." -#: ../../blog/docs/spec.rst:136 +#: ../../src/appx/blog/spec.rst:136 msgid "Comment requires message text." msgstr "Коментар вимагає наявності тексту повідомлення." -#: ../../blog/docs/spec.rst:139 +#: ../../src/appx/blog/spec.rst:139 msgid "Relationships" msgstr "Відносини" -#: ../../blog/docs/spec.rst:141 +#: ../../src/appx/blog/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " "reference pass ``\"auth.User\"`` as related model. Users can be created via " @@ -348,11 +336,11 @@ msgstr "" "модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " "також можете посилатися на ту саму модель, як показано нижче:" -#: ../../blog/docs/spec.rst:154 +#: ../../src/appx/blog/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." -#: ../../blog/docs/spec.rst:155 +#: ../../src/appx/blog/spec.rst:155 msgid "" "``article`` and ``user`` have *one-to-many* relationship. A article can have " "**only one** author, but users can create as many articles as they want." @@ -361,7 +349,7 @@ msgstr "" "бути **лише один** автор, але користувачі можуть створювати стільки статей, " "скільки їм потрібно." -#: ../../blog/docs/spec.rst:158 +#: ../../src/appx/blog/spec.rst:158 msgid "" "``article`` and ``comment`` have *one-to-many* relationship. A article may " "be a container for many comments, but a comment is related to a single " @@ -371,7 +359,7 @@ msgstr "" "бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " "однією статтею." -#: ../../blog/docs/spec.rst:161 +#: ../../src/appx/blog/spec.rst:161 msgid "" "``comment`` and ``user`` have *one-to-many* relationship. It's similar to " "*article - user* relationship." @@ -379,7 +367,7 @@ msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." -#: ../../blog/docs/spec.rst:163 +#: ../../src/appx/blog/spec.rst:163 msgid "" "``topic`` and ``user`` use *many-to-many* relationship. A single user can " "prefer none or as many topics as needed and vice versa. This relationship " @@ -398,15 +386,15 @@ msgstr "" "список статей для користувача, а *notify* відповідає за розсилку новин для " "користувача." -#: ../../blog/docs/spec.rst:174 +#: ../../src/appx/blog/spec.rst:174 msgid "UML diagram" msgstr "UML діаграми" -#: ../../blog/docs/spec.rst:206 +#: ../../src/appx/blog/spec.rst:206 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../blog/docs/spec.rst:208 +#: ../../src/appx/blog/spec.rst:208 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." @@ -414,20 +402,20 @@ msgstr "" "Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " "в базі даних проекту." -#: ../../blog/docs/spec.rst:211 +#: ../../src/appx/blog/spec.rst:211 msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." -#: ../../blog/docs/spec.rst:212 +#: ../../src/appx/blog/spec.rst:212 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../blog/docs/spec.rst:213 +#: ../../src/appx/blog/spec.rst:213 msgid "Detail view should obtain a list of article related comments." msgstr "" "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../blog/docs/spec.rst:214 +#: ../../src/appx/blog/spec.rst:214 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -435,7 +423,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../blog/docs/spec.rst:216 +#: ../../src/appx/blog/spec.rst:216 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -444,14 +432,14 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../blog/docs/spec.rst:219 +#: ../../src/appx/blog/spec.rst:219 msgid "" "Create a service to fetch articles, ordered by a specified user preferences." msgstr "" "Створіть сервіс для отримання статей, впорядкованих за вказаними " "уподобаннями користувача." -#: ../../blog/docs/spec.rst:223 +#: ../../src/appx/blog/spec.rst:223 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -461,25 +449,25 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../blog/docs/spec.rst:228 +#: ../../src/appx/blog/spec.rst:228 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../blog/docs/spec.rst:231 +#: ../../src/appx/blog/spec.rst:231 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../blog/docs/spec.rst:234 +#: ../../src/appx/blog/spec.rst:234 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../blog/docs/spec.rst:238 +#: ../../src/appx/blog/spec.rst:238 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../blog/docs/spec.rst:239 +#: ../../src/appx/blog/spec.rst:239 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -487,13 +475,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../blog/docs/spec.rst:241 +#: ../../src/appx/blog/spec.rst:241 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../blog/docs/spec.rst:242 +#: ../../src/appx/blog/spec.rst:242 msgid "" "(*Optional*) Each page should contain an inclusion-block(s) with following " "links:" @@ -501,19 +489,19 @@ msgstr "" "(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " "посиланнями:" -#: ../../blog/docs/spec.rst:245 +#: ../../src/appx/blog/spec.rst:245 msgid "``/registration/``: new user registration form" msgstr "``/register/``: форма реєстрації нового користувача" -#: ../../blog/docs/spec.rst:246 +#: ../../src/appx/blog/spec.rst:246 msgid "``/login/``: user login form" msgstr "``/login/``: форма логіна користувача" -#: ../../blog/docs/spec.rst:247 +#: ../../src/appx/blog/spec.rst:247 msgid "``/create/``: article creation page" msgstr "``/create/``: форма створення статті" -#: ../../blog/docs/spec.rst:249 +#: ../../src/appx/blog/spec.rst:249 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -523,71 +511,71 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../blog/docs/spec.rst:252 +#: ../../src/appx/blog/spec.rst:252 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../blog/docs/spec.rst:253 +#: ../../src/appx/blog/spec.rst:253 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../blog/docs/spec.rst:259 +#: ../../src/appx/blog/spec.rst:259 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../blog/docs/spec.rst:263 +#: ../../src/appx/blog/spec.rst:263 msgid "Articles list" msgstr "Список статей" -#: ../../blog/docs/spec.rst:264 +#: ../../src/appx/blog/spec.rst:264 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../blog/docs/spec.rst:265 +#: ../../src/appx/blog/spec.rst:265 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../blog/docs/spec.rst:266 +#: ../../src/appx/blog/spec.rst:266 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../blog/docs/spec.rst:268 +#: ../../src/appx/blog/spec.rst:268 msgid "article title" msgstr "заголовок статті" -#: ../../blog/docs/spec.rst:269 +#: ../../src/appx/blog/spec.rst:269 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../blog/docs/spec.rst:270 +#: ../../src/appx/blog/spec.rst:270 msgid "article creation date" msgstr "дата створення статті" -#: ../../blog/docs/spec.rst:271 +#: ../../src/appx/blog/spec.rst:271 msgid "related topics (3 topics or fewer)" -msgstr "related topics (3 topics or fewer)" +msgstr "пов'язані теми (3 або менше)" -#: ../../blog/docs/spec.rst:272 +#: ../../src/appx/blog/spec.rst:272 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../blog/docs/spec.rst:279 +#: ../../src/appx/blog/spec.rst:279 msgid "Article details" msgstr "Деталі статті" -#: ../../blog/docs/spec.rst:281 +#: ../../src/appx/blog/spec.rst:281 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../blog/docs/spec.rst:283 +#: ../../src/appx/blog/spec.rst:283 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -595,71 +583,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../blog/docs/spec.rst:285 +#: ../../src/appx/blog/spec.rst:285 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../blog/docs/spec.rst:287 +#: ../../src/appx/blog/spec.rst:287 msgid "Article title" msgstr "Заголовок статті" -#: ../../blog/docs/spec.rst:288 +#: ../../src/appx/blog/spec.rst:288 msgid "Creation date" msgstr "Дата створення" -#: ../../blog/docs/spec.rst:289 ../../blog/docs/spec.rst:296 +#: ../../src/appx/blog/spec.rst:289 ../../src/appx/blog/spec.rst:296 msgid "Author name" msgstr "Ім'я автора" -#: ../../blog/docs/spec.rst:290 +#: ../../src/appx/blog/spec.rst:290 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../blog/docs/spec.rst:291 +#: ../../src/appx/blog/spec.rst:291 msgid "Article content" msgstr "Вміст статті" -#: ../../blog/docs/spec.rst:293 +#: ../../src/appx/blog/spec.rst:293 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../blog/docs/spec.rst:294 +#: ../../src/appx/blog/spec.rst:294 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../blog/docs/spec.rst:297 +#: ../../src/appx/blog/spec.rst:297 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../blog/docs/spec.rst:298 +#: ../../src/appx/blog/spec.rst:298 msgid "Comment message" msgstr "Текст комментаря" -#: ../../blog/docs/spec.rst:301 +#: ../../src/appx/blog/spec.rst:301 msgid "Profile page" msgstr "Строніка профілю" -#: ../../blog/docs/spec.rst:302 +#: ../../src/appx/blog/spec.rst:302 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../blog/docs/spec.rst:304 +#: ../../src/appx/blog/spec.rst:304 msgid "First name" msgstr "Ім'я" -#: ../../blog/docs/spec.rst:305 +#: ../../src/appx/blog/spec.rst:305 msgid "Last name" msgstr "Прізвище" -#: ../../blog/docs/spec.rst:307 +#: ../../src/appx/blog/spec.rst:307 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../blog/docs/spec.rst:309 +#: ../../src/appx/blog/spec.rst:309 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../blog/docs/spec.rst:310 +#: ../../src/appx/blog/spec.rst:310 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -667,11 +655,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../blog/docs/spec.rst:314 +#: ../../src/appx/blog/spec.rst:314 msgid "Forms" msgstr "Форми" -#: ../../blog/docs/spec.rst:316 +#: ../../src/appx/blog/spec.rst:316 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -681,7 +669,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../blog/docs/spec.rst:320 +#: ../../src/appx/blog/spec.rst:320 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -689,23 +677,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:323 ../../blog/docs/spec.rst:331 +#: ../../src/appx/blog/spec.rst:323 ../../src/appx/blog/spec.rst:331 msgid "username" msgstr "username" -#: ../../blog/docs/spec.rst:324 +#: ../../src/appx/blog/spec.rst:324 msgid "email" msgstr "email" -#: ../../blog/docs/spec.rst:325 ../../blog/docs/spec.rst:332 +#: ../../src/appx/blog/spec.rst:325 ../../src/appx/blog/spec.rst:332 msgid "password" msgstr "password" -#: ../../blog/docs/spec.rst:326 ../../blog/docs/spec.rst:345 +#: ../../src/appx/blog/spec.rst:326 ../../src/appx/blog/spec.rst:345 msgid "confirm password" msgstr "confirm password" -#: ../../blog/docs/spec.rst:328 +#: ../../src/appx/blog/spec.rst:328 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -713,7 +701,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../blog/docs/spec.rst:334 +#: ../../src/appx/blog/spec.rst:334 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -721,33 +709,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../blog/docs/spec.rst:337 +#: ../../src/appx/blog/spec.rst:337 msgid "title" msgstr "title" -#: ../../blog/docs/spec.rst:338 +#: ../../src/appx/blog/spec.rst:338 msgid "relevant topics" msgstr "відповідні теми" -#: ../../blog/docs/spec.rst:339 +#: ../../src/appx/blog/spec.rst:339 msgid "content" msgstr "content" -#: ../../blog/docs/spec.rst:341 +#: ../../src/appx/blog/spec.rst:341 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../blog/docs/spec.rst:342 +#: ../../src/appx/blog/spec.rst:342 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../blog/docs/spec.rst:344 +#: ../../src/appx/blog/spec.rst:344 msgid "new password" msgstr "new password" -#: ../../blog/docs/spec.rst:347 +#: ../../src/appx/blog/spec.rst:347 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -755,7 +743,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../blog/docs/spec.rst:349 +#: ../../src/appx/blog/spec.rst:349 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -765,48 +753,48 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../blog/docs/spec.rst:354 +#: ../../src/appx/blog/spec.rst:354 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../blog/docs/spec.rst:357 +#: ../../src/appx/blog/spec.rst:357 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../blog/docs/spec.rst:359 +#: ../../src/appx/blog/spec.rst:359 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../blog/docs/spec.rst:360 +#: ../../src/appx/blog/spec.rst:360 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../blog/docs/spec.rst:361 +#: ../../src/appx/blog/spec.rst:361 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../blog/docs/spec.rst:362 +#: ../../src/appx/blog/spec.rst:362 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../blog/docs/spec.rst:364 +#: ../../src/appx/blog/spec.rst:364 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../blog/docs/spec.rst:366 +#: ../../src/appx/blog/spec.rst:366 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../blog/docs/spec.rst:367 +#: ../../src/appx/blog/spec.rst:367 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../blog/docs/spec.rst:369 +#: ../../src/appx/blog/spec.rst:369 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../blog/docs/spec.rst:370 +#: ../../src/appx/blog/spec.rst:370 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " @@ -817,60 +805,60 @@ msgstr "" "наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " "отримає slug: ``sample-blog-article-2023-03-23``." -#: ../../blog/docs/spec.rst:374 +#: ../../src/appx/blog/spec.rst:374 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../blog/docs/spec.rst:377 +#: ../../src/appx/blog/spec.rst:377 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../blog/docs/spec.rst:379 +#: ../../src/appx/blog/spec.rst:379 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../blog/docs/spec.rst:381 +#: ../../src/appx/blog/spec.rst:381 msgid "``username``" msgstr "``username``" -#: ../../blog/docs/spec.rst:382 +#: ../../src/appx/blog/spec.rst:382 msgid "``email``" msgstr "``email``" -#: ../../blog/docs/spec.rst:383 +#: ../../src/appx/blog/spec.rst:383 msgid "``password``" msgstr "``password``" -#: ../../blog/docs/spec.rst:384 +#: ../../src/appx/blog/spec.rst:384 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../blog/docs/spec.rst:386 +#: ../../src/appx/blog/spec.rst:386 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../blog/docs/spec.rst:387 +#: ../../src/appx/blog/spec.rst:387 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../blog/docs/spec.rst:388 +#: ../../src/appx/blog/spec.rst:388 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../blog/docs/spec.rst:389 +#: ../../src/appx/blog/spec.rst:389 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../blog/docs/spec.rst:392 +#: ../../src/appx/blog/spec.rst:392 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../blog/docs/spec.rst:394 +#: ../../src/appx/blog/spec.rst:394 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -878,7 +866,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../blog/docs/spec.rst:396 +#: ../../src/appx/blog/spec.rst:396 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -886,14 +874,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../blog/docs/spec.rst:398 +#: ../../src/appx/blog/spec.rst:398 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../blog/docs/spec.rst:400 +#: ../../src/appx/blog/spec.rst:400 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -907,7 +895,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../blog/docs/spec.rst:405 +#: ../../src/appx/blog/spec.rst:405 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -917,7 +905,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../blog/docs/spec.rst:408 +#: ../../src/appx/blog/spec.rst:408 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -932,7 +920,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../blog/docs/spec.rst:413 +#: ../../src/appx/blog/spec.rst:413 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -940,7 +928,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../blog/docs/spec.rst:415 +#: ../../src/appx/blog/spec.rst:415 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -950,21 +938,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:418 +#: ../../src/appx/blog/spec.rst:418 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../blog/docs/spec.rst:420 +#: ../../src/appx/blog/spec.rst:420 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../blog/docs/spec.rst:421 +#: ../../src/appx/blog/spec.rst:421 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../blog/docs/spec.rst:423 +#: ../../src/appx/blog/spec.rst:423 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -973,11 +961,11 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../blog/docs/spec.rst:427 +#: ../../src/appx/blog/spec.rst:427 msgid "Optional task(s)" msgstr "Додаткові завдання" -#: ../../blog/docs/spec.rst:429 +#: ../../src/appx/blog/spec.rst:429 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -986,7 +974,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../blog/docs/spec.rst:431 +#: ../../src/appx/blog/spec.rst:431 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -999,11 +987,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../blog/docs/spec.rst:437 +#: ../../src/appx/blog/spec.rst:437 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../blog/docs/spec.rst:439 +#: ../../src/appx/blog/spec.rst:439 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -1011,15 +999,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../blog/docs/spec.rst:441 +#: ../../src/appx/blog/spec.rst:441 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../blog/docs/spec.rst:442 +#: ../../src/appx/blog/spec.rst:442 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../blog/docs/spec.rst:443 +#: ../../src/appx/blog/spec.rst:443 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1027,27 +1015,27 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../blog/docs/spec.rst:445 +#: ../../src/appx/blog/spec.rst:445 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../blog/docs/spec.rst:447 +#: ../../src/appx/blog/spec.rst:447 msgid "article creation" msgstr "створення статті" -#: ../../blog/docs/spec.rst:448 +#: ../../src/appx/blog/spec.rst:448 msgid "article update" msgstr "оновлення статті" -#: ../../blog/docs/spec.rst:449 +#: ../../src/appx/blog/spec.rst:449 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../blog/docs/spec.rst:450 +#: ../../src/appx/blog/spec.rst:450 msgid "article deletion" msgstr "видалення статті" -#: ../../blog/docs/spec.rst:453 +#: ../../src/appx/blog/spec.rst:453 msgid "" "It's ok to use *pre-defined* author for now, or select author by random. " "This will be fixed in the next section." @@ -1055,29 +1043,29 @@ msgstr "" "Наразі можна використовувати *попередньо визначеного* автора або випадковим " "чином вибирати автора. Це буде виправлено у наступному розділі." -#: ../../blog/docs/spec.rst:457 +#: ../../src/appx/blog/spec.rst:457 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../blog/docs/spec.rst:459 +#: ../../src/appx/blog/spec.rst:459 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../blog/docs/spec.rst:460 +#: ../../src/appx/blog/spec.rst:460 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../blog/docs/spec.rst:463 +#: ../../src/appx/blog/spec.rst:463 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../blog/docs/spec.rst:466 +#: ../../src/appx/blog/spec.rst:466 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../blog/docs/spec.rst:470 +#: ../../src/appx/blog/spec.rst:470 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1085,7 +1073,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../blog/docs/spec.rst:472 +#: ../../src/appx/blog/spec.rst:472 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1093,7 +1081,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../blog/docs/spec.rst:477 +#: ../../src/appx/blog/spec.rst:477 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1102,7 +1090,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../blog/docs/spec.rst:479 +#: ../../src/appx/blog/spec.rst:479 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1110,7 +1098,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../blog/docs/spec.rst:484 +#: ../../src/appx/blog/spec.rst:484 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1119,11 +1107,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../blog/docs/spec.rst:488 +#: ../../src/appx/blog/spec.rst:488 msgid "User" msgstr "Користувач" -#: ../../blog/docs/spec.rst:489 +#: ../../src/appx/blog/spec.rst:489 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1135,11 +1123,11 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../blog/docs/spec.rst:495 +#: ../../src/appx/blog/spec.rst:495 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../blog/docs/spec.rst:497 +#: ../../src/appx/blog/spec.rst:497 msgid "" "All blog-site functionality are to be reflected via REST API. It's ok to use " "*pre-defined* user as a article's author for now." @@ -1148,27 +1136,27 @@ msgstr "" "API. Наразі можна використовувати *попередньо визначеного* користувача як " "автора статті." -#: ../../blog/docs/spec.rst:501 +#: ../../src/appx/blog/spec.rst:501 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../blog/docs/spec.rst:503 +#: ../../src/appx/blog/spec.rst:503 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../blog/docs/spec.rst:505 +#: ../../src/appx/blog/spec.rst:505 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../blog/docs/spec.rst:506 +#: ../../src/appx/blog/spec.rst:506 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../blog/docs/spec.rst:509 +#: ../../src/appx/blog/spec.rst:509 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1177,7 +1165,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../blog/docs/spec.rst:511 +#: ../../src/appx/blog/spec.rst:511 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1186,7 +1174,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../blog/docs/spec.rst:513 +#: ../../src/appx/blog/spec.rst:513 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1194,7 +1182,7 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../blog/docs/spec.rst:515 +#: ../../src/appx/blog/spec.rst:515 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." @@ -2610,6 +2598,10 @@ msgstr "Жодні аргументи не перетворюються, рез msgid "Useful software list" msgstr "Список корисного програмного забезпечення" +#: ../../src/appx/software_list.rst:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + #: ../../src/appx/software_list.rst:-1 msgid "software" msgstr "software" @@ -3393,3 +3385,9 @@ msgstr "Створити меню гри, наприклад: ::" msgid "Store score table to the database instead of using text file." msgstr "" "Зберігайте таблицю балів у базі даних замість використання текстового файлу." + +#~ msgid "Specification for Django blog training project" +#~ msgstr "Специфікація навчального проекту блогу Django" + +#~ msgid "python, django, blog, project, training" +#~ msgstr "python, django, blog, project, training" diff --git a/src/appx/blog b/src/appx/blog new file mode 160000 index 000000000..f01a7f1dd --- /dev/null +++ b/src/appx/blog @@ -0,0 +1 @@ +Subproject commit f01a7f1dd8aa293f41ca2578fd43a6346bc8ce41 diff --git a/src/appx/blog.txt b/src/appx/blog.txt deleted file mode 100644 index 406074712..000000000 --- a/src/appx/blog.txt +++ /dev/null @@ -1,6 +0,0 @@ -.. meta:: - :description: Specification for Django blog training project - :author: Serhii Horodilov - :keywords: python, django, blog, project, training - -.. include:: /../blog/docs/spec.rst diff --git a/src/conf.py b/src/conf.py index 08cee4cd7..2bc14fcd8 100644 --- a/src/conf.py +++ b/src/conf.py @@ -34,7 +34,9 @@ ".md": "markdown", } needs_sphinx = "4.0" -exclude_patterns = [] +exclude_patterns = [ + "**/README.*", +] suppress_warnings = [] # options for bibliography diff --git a/src/index.txt b/src/index.txt index 377f963fe..3409ef117 100644 --- a/src/index.txt +++ b/src/index.txt @@ -30,7 +30,7 @@ appx/create_pr appx/conv_store appx/wtk - appx/blog + appx/blog/spec .. rubric:: References From c178ed387d857cf68ba4885010445e53a5ebb33f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 8 Aug 2023 23:10:36 +0300 Subject: [PATCH 355/689] Update blog specification submodule --- src/appx/blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/appx/blog b/src/appx/blog index f01a7f1dd..07148abff 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit f01a7f1dd8aa293f41ca2578fd43a6346bc8ce41 +Subproject commit 07148abffada4810d07654a863a4e8f3a9afef80 From e4340f5d80d9ff76e2b038a3665365959d8b3be3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 9 Aug 2023 03:03:23 +0300 Subject: [PATCH 356/689] Update blog specification challenges --- .gitignore | 3 + src/_locales/uk/LC_MESSAGES/appx.po | 389 +++++++++++++++------------- src/appx/blog | 2 +- src/conf.py | 4 +- 4 files changed, 211 insertions(+), 187 deletions(-) diff --git a/.gitignore b/.gitignore index 64088ba20..18a74fbf5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ /venv/ /env/ +# python byte-compiled +__pycache__ + # node packages /node_modules/ diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 0d2fe6441..9a5505d56 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-08 22:54+0300\n" -"PO-Revision-Date: 2023-08-08 22:58+0300\n" +"POT-Creation-Date: 2023-08-09 02:13+0300\n" +"PO-Revision-Date: 2023-08-09 02:25+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -225,8 +225,9 @@ msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:257 -msgid "Optional tasks" +#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 +#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 +msgid "Optional task(s)" msgstr "Додаткові завдання" #: ../../src/appx/blog/spec.rst:89 @@ -261,7 +262,7 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:237 +#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 msgid "General" msgstr "Основне" @@ -269,7 +270,7 @@ msgstr "Основне" msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:469 +#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 msgid "Article topic" msgstr "Тема статті" @@ -285,7 +286,7 @@ msgstr "назва теми (унікальне значення, не біль msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:483 +#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 msgid "Article" msgstr "Стаття" @@ -309,7 +310,7 @@ msgstr "" msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:476 +#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 msgid "Article comment" msgstr "Коментар до статті" @@ -390,11 +391,11 @@ msgstr "" msgid "UML diagram" msgstr "UML діаграми" -#: ../../src/appx/blog/spec.rst:206 +#: ../../src/appx/blog/spec.rst:179 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../src/appx/blog/spec.rst:208 +#: ../../src/appx/blog/spec.rst:181 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." @@ -402,20 +403,20 @@ msgstr "" "Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " "в базі даних проекту." -#: ../../src/appx/blog/spec.rst:211 +#: ../../src/appx/blog/spec.rst:184 msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." -#: ../../src/appx/blog/spec.rst:212 +#: ../../src/appx/blog/spec.rst:185 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../src/appx/blog/spec.rst:213 +#: ../../src/appx/blog/spec.rst:186 msgid "Detail view should obtain a list of article related comments." msgstr "" "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../src/appx/blog/spec.rst:214 +#: ../../src/appx/blog/spec.rst:187 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -423,7 +424,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../src/appx/blog/spec.rst:216 +#: ../../src/appx/blog/spec.rst:189 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -432,14 +433,7 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../src/appx/blog/spec.rst:219 -msgid "" -"Create a service to fetch articles, ordered by a specified user preferences." -msgstr "" -"Створіть сервіс для отримання статей, впорядкованих за вказаними " -"уподобаннями користувача." - -#: ../../src/appx/blog/spec.rst:223 +#: ../../src/appx/blog/spec.rst:194 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -449,25 +443,37 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../src/appx/blog/spec.rst:228 +#: ../../src/appx/blog/spec.rst:201 +msgid "" +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." +msgstr "" +"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " +"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." + +#: ../../src/appx/blog/spec.rst:207 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../src/appx/blog/spec.rst:231 +#: ../../src/appx/blog/spec.rst:210 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../src/appx/blog/spec.rst:234 +#: ../../src/appx/blog/spec.rst:213 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../src/appx/blog/spec.rst:238 +#: ../../src/appx/blog/spec.rst:217 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../src/appx/blog/spec.rst:239 +#: ../../src/appx/blog/spec.rst:218 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -475,33 +481,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../src/appx/blog/spec.rst:241 +#: ../../src/appx/blog/spec.rst:220 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../src/appx/blog/spec.rst:242 -msgid "" -"(*Optional*) Each page should contain an inclusion-block(s) with following " -"links:" -msgstr "" -"(*Необов'язково*) Кожна сторінка повинна містити блок(и) включення з такими " -"посиланнями:" - -#: ../../src/appx/blog/spec.rst:245 -msgid "``/registration/``: new user registration form" -msgstr "``/register/``: форма реєстрації нового користувача" - -#: ../../src/appx/blog/spec.rst:246 -msgid "``/login/``: user login form" -msgstr "``/login/``: форма логіна користувача" - -#: ../../src/appx/blog/spec.rst:247 -msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення статті" - -#: ../../src/appx/blog/spec.rst:249 +#: ../../src/appx/blog/spec.rst:221 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -511,71 +497,87 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../src/appx/blog/spec.rst:252 +#: ../../src/appx/blog/spec.rst:224 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../src/appx/blog/spec.rst:253 +#: ../../src/appx/blog/spec.rst:225 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../src/appx/blog/spec.rst:259 +#: ../../src/appx/blog/spec.rst:231 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../src/appx/blog/spec.rst:263 +#: ../../src/appx/blog/spec.rst:233 +msgid "Each page should contain an inclusion-block(s) with following links:" +msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" + +#: ../../src/appx/blog/spec.rst:235 +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: форма реєстрації нового користувача" + +#: ../../src/appx/blog/spec.rst:236 +msgid "``/login/``: user login form" +msgstr "``/login/``: форма логіна користувача" + +#: ../../src/appx/blog/spec.rst:237 +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення статті" + +#: ../../src/appx/blog/spec.rst:240 msgid "Articles list" msgstr "Список статей" -#: ../../src/appx/blog/spec.rst:264 +#: ../../src/appx/blog/spec.rst:241 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../src/appx/blog/spec.rst:265 +#: ../../src/appx/blog/spec.rst:242 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../src/appx/blog/spec.rst:266 +#: ../../src/appx/blog/spec.rst:243 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../src/appx/blog/spec.rst:268 +#: ../../src/appx/blog/spec.rst:245 msgid "article title" msgstr "заголовок статті" -#: ../../src/appx/blog/spec.rst:269 +#: ../../src/appx/blog/spec.rst:246 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../src/appx/blog/spec.rst:270 +#: ../../src/appx/blog/spec.rst:247 msgid "article creation date" msgstr "дата створення статті" -#: ../../src/appx/blog/spec.rst:271 +#: ../../src/appx/blog/spec.rst:248 msgid "related topics (3 topics or fewer)" msgstr "пов'язані теми (3 або менше)" -#: ../../src/appx/blog/spec.rst:272 +#: ../../src/appx/blog/spec.rst:249 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../src/appx/blog/spec.rst:279 +#: ../../src/appx/blog/spec.rst:256 msgid "Article details" msgstr "Деталі статті" -#: ../../src/appx/blog/spec.rst:281 +#: ../../src/appx/blog/spec.rst:258 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../src/appx/blog/spec.rst:283 +#: ../../src/appx/blog/spec.rst:260 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -583,71 +585,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../src/appx/blog/spec.rst:285 +#: ../../src/appx/blog/spec.rst:262 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../src/appx/blog/spec.rst:287 +#: ../../src/appx/blog/spec.rst:264 msgid "Article title" msgstr "Заголовок статті" -#: ../../src/appx/blog/spec.rst:288 +#: ../../src/appx/blog/spec.rst:265 msgid "Creation date" msgstr "Дата створення" -#: ../../src/appx/blog/spec.rst:289 ../../src/appx/blog/spec.rst:296 +#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 msgid "Author name" msgstr "Ім'я автора" -#: ../../src/appx/blog/spec.rst:290 +#: ../../src/appx/blog/spec.rst:267 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../src/appx/blog/spec.rst:291 +#: ../../src/appx/blog/spec.rst:268 msgid "Article content" msgstr "Вміст статті" -#: ../../src/appx/blog/spec.rst:293 +#: ../../src/appx/blog/spec.rst:270 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../src/appx/blog/spec.rst:294 +#: ../../src/appx/blog/spec.rst:271 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../src/appx/blog/spec.rst:297 +#: ../../src/appx/blog/spec.rst:274 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../src/appx/blog/spec.rst:298 +#: ../../src/appx/blog/spec.rst:275 msgid "Comment message" msgstr "Текст комментаря" -#: ../../src/appx/blog/spec.rst:301 +#: ../../src/appx/blog/spec.rst:278 msgid "Profile page" msgstr "Строніка профілю" -#: ../../src/appx/blog/spec.rst:302 +#: ../../src/appx/blog/spec.rst:279 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../src/appx/blog/spec.rst:304 +#: ../../src/appx/blog/spec.rst:281 msgid "First name" msgstr "Ім'я" -#: ../../src/appx/blog/spec.rst:305 +#: ../../src/appx/blog/spec.rst:282 msgid "Last name" msgstr "Прізвище" -#: ../../src/appx/blog/spec.rst:307 +#: ../../src/appx/blog/spec.rst:284 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../src/appx/blog/spec.rst:309 +#: ../../src/appx/blog/spec.rst:286 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../src/appx/blog/spec.rst:310 +#: ../../src/appx/blog/spec.rst:287 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -655,11 +657,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../src/appx/blog/spec.rst:314 +#: ../../src/appx/blog/spec.rst:291 msgid "Forms" msgstr "Форми" -#: ../../src/appx/blog/spec.rst:316 +#: ../../src/appx/blog/spec.rst:293 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -669,7 +671,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../src/appx/blog/spec.rst:320 +#: ../../src/appx/blog/spec.rst:297 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -677,23 +679,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../src/appx/blog/spec.rst:323 ../../src/appx/blog/spec.rst:331 +#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 msgid "username" msgstr "username" -#: ../../src/appx/blog/spec.rst:324 +#: ../../src/appx/blog/spec.rst:301 msgid "email" msgstr "email" -#: ../../src/appx/blog/spec.rst:325 ../../src/appx/blog/spec.rst:332 +#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 msgid "password" msgstr "password" -#: ../../src/appx/blog/spec.rst:326 ../../src/appx/blog/spec.rst:345 +#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 msgid "confirm password" msgstr "confirm password" -#: ../../src/appx/blog/spec.rst:328 +#: ../../src/appx/blog/spec.rst:305 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -701,7 +703,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../src/appx/blog/spec.rst:334 +#: ../../src/appx/blog/spec.rst:311 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -709,33 +711,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../src/appx/blog/spec.rst:337 +#: ../../src/appx/blog/spec.rst:314 msgid "title" msgstr "title" -#: ../../src/appx/blog/spec.rst:338 +#: ../../src/appx/blog/spec.rst:315 msgid "relevant topics" msgstr "відповідні теми" -#: ../../src/appx/blog/spec.rst:339 +#: ../../src/appx/blog/spec.rst:316 msgid "content" msgstr "content" -#: ../../src/appx/blog/spec.rst:341 +#: ../../src/appx/blog/spec.rst:318 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../src/appx/blog/spec.rst:342 +#: ../../src/appx/blog/spec.rst:319 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../src/appx/blog/spec.rst:344 +#: ../../src/appx/blog/spec.rst:321 msgid "new password" msgstr "new password" -#: ../../src/appx/blog/spec.rst:347 +#: ../../src/appx/blog/spec.rst:324 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -743,7 +745,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../src/appx/blog/spec.rst:349 +#: ../../src/appx/blog/spec.rst:326 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -753,48 +755,48 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../src/appx/blog/spec.rst:354 +#: ../../src/appx/blog/spec.rst:331 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../src/appx/blog/spec.rst:357 +#: ../../src/appx/blog/spec.rst:334 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../src/appx/blog/spec.rst:359 +#: ../../src/appx/blog/spec.rst:336 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../src/appx/blog/spec.rst:360 +#: ../../src/appx/blog/spec.rst:337 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../src/appx/blog/spec.rst:361 +#: ../../src/appx/blog/spec.rst:338 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../src/appx/blog/spec.rst:362 +#: ../../src/appx/blog/spec.rst:339 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../src/appx/blog/spec.rst:364 +#: ../../src/appx/blog/spec.rst:341 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../src/appx/blog/spec.rst:366 +#: ../../src/appx/blog/spec.rst:343 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../src/appx/blog/spec.rst:367 +#: ../../src/appx/blog/spec.rst:344 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../src/appx/blog/spec.rst:369 +#: ../../src/appx/blog/spec.rst:346 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../src/appx/blog/spec.rst:370 +#: ../../src/appx/blog/spec.rst:347 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " @@ -805,60 +807,60 @@ msgstr "" "наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " "отримає slug: ``sample-blog-article-2023-03-23``." -#: ../../src/appx/blog/spec.rst:374 +#: ../../src/appx/blog/spec.rst:351 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../src/appx/blog/spec.rst:377 +#: ../../src/appx/blog/spec.rst:354 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../src/appx/blog/spec.rst:379 +#: ../../src/appx/blog/spec.rst:356 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../src/appx/blog/spec.rst:381 +#: ../../src/appx/blog/spec.rst:358 msgid "``username``" msgstr "``username``" -#: ../../src/appx/blog/spec.rst:382 +#: ../../src/appx/blog/spec.rst:359 msgid "``email``" msgstr "``email``" -#: ../../src/appx/blog/spec.rst:383 +#: ../../src/appx/blog/spec.rst:360 msgid "``password``" msgstr "``password``" -#: ../../src/appx/blog/spec.rst:384 +#: ../../src/appx/blog/spec.rst:361 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../src/appx/blog/spec.rst:386 +#: ../../src/appx/blog/spec.rst:363 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../src/appx/blog/spec.rst:387 +#: ../../src/appx/blog/spec.rst:364 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../src/appx/blog/spec.rst:388 +#: ../../src/appx/blog/spec.rst:365 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../src/appx/blog/spec.rst:389 +#: ../../src/appx/blog/spec.rst:366 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../src/appx/blog/spec.rst:392 +#: ../../src/appx/blog/spec.rst:369 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../src/appx/blog/spec.rst:394 +#: ../../src/appx/blog/spec.rst:371 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -866,7 +868,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../src/appx/blog/spec.rst:396 +#: ../../src/appx/blog/spec.rst:373 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -874,14 +876,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../src/appx/blog/spec.rst:398 +#: ../../src/appx/blog/spec.rst:375 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../src/appx/blog/spec.rst:400 +#: ../../src/appx/blog/spec.rst:377 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -895,7 +897,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../src/appx/blog/spec.rst:405 +#: ../../src/appx/blog/spec.rst:382 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -905,7 +907,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../src/appx/blog/spec.rst:408 +#: ../../src/appx/blog/spec.rst:385 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -920,7 +922,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../src/appx/blog/spec.rst:413 +#: ../../src/appx/blog/spec.rst:390 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -928,7 +930,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../src/appx/blog/spec.rst:415 +#: ../../src/appx/blog/spec.rst:392 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -938,21 +940,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:418 +#: ../../src/appx/blog/spec.rst:395 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../src/appx/blog/spec.rst:420 +#: ../../src/appx/blog/spec.rst:397 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../src/appx/blog/spec.rst:421 +#: ../../src/appx/blog/spec.rst:398 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../src/appx/blog/spec.rst:423 +#: ../../src/appx/blog/spec.rst:400 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -961,11 +963,7 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../src/appx/blog/spec.rst:427 -msgid "Optional task(s)" -msgstr "Додаткові завдання" - -#: ../../src/appx/blog/spec.rst:429 +#: ../../src/appx/blog/spec.rst:406 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -974,7 +972,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../src/appx/blog/spec.rst:431 +#: ../../src/appx/blog/spec.rst:408 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -987,11 +985,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../src/appx/blog/spec.rst:437 +#: ../../src/appx/blog/spec.rst:414 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../src/appx/blog/spec.rst:439 +#: ../../src/appx/blog/spec.rst:416 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -999,15 +997,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../src/appx/blog/spec.rst:441 +#: ../../src/appx/blog/spec.rst:418 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../src/appx/blog/spec.rst:442 +#: ../../src/appx/blog/spec.rst:419 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../src/appx/blog/spec.rst:443 +#: ../../src/appx/blog/spec.rst:420 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1015,57 +1013,65 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../src/appx/blog/spec.rst:445 +#: ../../src/appx/blog/spec.rst:422 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../src/appx/blog/spec.rst:447 +#: ../../src/appx/blog/spec.rst:424 msgid "article creation" msgstr "створення статті" -#: ../../src/appx/blog/spec.rst:448 +#: ../../src/appx/blog/spec.rst:425 msgid "article update" msgstr "оновлення статті" -#: ../../src/appx/blog/spec.rst:449 +#: ../../src/appx/blog/spec.rst:426 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../src/appx/blog/spec.rst:450 +#: ../../src/appx/blog/spec.rst:427 msgid "article deletion" msgstr "видалення статті" -#: ../../src/appx/blog/spec.rst:453 -msgid "" -"It's ok to use *pre-defined* author for now, or select author by random. " -"This will be fixed in the next section." -msgstr "" -"Наразі можна використовувати *попередньо визначеного* автора або випадковим " -"чином вибирати автора. Це буде виправлено у наступному розділі." +#: ../../src/appx/blog/spec.rst:429 +msgid "Only authenticated users can create articles." +msgstr "Лише аутентифіковані користувачі можуть створювати статі." + +#: ../../src/appx/blog/spec.rst:430 +msgid "Article can be edited only by its author." +msgstr "Стаття може редагуватись лише її автором." + +#: ../../src/appx/blog/spec.rst:431 +msgid "Article can be deleted only by its author." +msgstr "Стаття може видалятись лише її автором." + +#: ../../src/appx/blog/spec.rst:432 +msgid "Only authenticated users can comment articles." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." -#: ../../src/appx/blog/spec.rst:457 +#: ../../src/appx/blog/spec.rst:439 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../src/appx/blog/spec.rst:459 +#: ../../src/appx/blog/spec.rst:441 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../src/appx/blog/spec.rst:460 +#: ../../src/appx/blog/spec.rst:442 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../src/appx/blog/spec.rst:463 +#: ../../src/appx/blog/spec.rst:445 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../src/appx/blog/spec.rst:466 +#: ../../src/appx/blog/spec.rst:448 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../src/appx/blog/spec.rst:470 +#: ../../src/appx/blog/spec.rst:452 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1073,7 +1079,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:472 +#: ../../src/appx/blog/spec.rst:454 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1081,7 +1087,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../src/appx/blog/spec.rst:477 +#: ../../src/appx/blog/spec.rst:459 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1090,7 +1096,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../src/appx/blog/spec.rst:479 +#: ../../src/appx/blog/spec.rst:461 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1098,7 +1104,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../src/appx/blog/spec.rst:484 +#: ../../src/appx/blog/spec.rst:466 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1107,11 +1113,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../src/appx/blog/spec.rst:488 +#: ../../src/appx/blog/spec.rst:470 msgid "User" msgstr "Користувач" -#: ../../src/appx/blog/spec.rst:489 +#: ../../src/appx/blog/spec.rst:471 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1123,40 +1129,45 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../src/appx/blog/spec.rst:495 +#: ../../src/appx/blog/spec.rst:477 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../src/appx/blog/spec.rst:497 -msgid "" -"All blog-site functionality are to be reflected via REST API. It's ok to use " -"*pre-defined* user as a article's author for now." +#: ../../src/appx/blog/spec.rst:479 +msgid "All blog-site functionality are to be reflected via REST API." msgstr "" "Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API. Наразі можна використовувати *попередньо визначеного* користувача як " -"автора статті." +"API." + +#: ../../src/appx/blog/spec.rst:482 +msgid "" +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." +msgstr "" +"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " +"запиту. Це буде виправлено у наступному розділі." -#: ../../src/appx/blog/spec.rst:501 +#: ../../src/appx/blog/spec.rst:486 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../src/appx/blog/spec.rst:503 +#: ../../src/appx/blog/spec.rst:488 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../src/appx/blog/spec.rst:505 +#: ../../src/appx/blog/spec.rst:490 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../src/appx/blog/spec.rst:506 +#: ../../src/appx/blog/spec.rst:491 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../src/appx/blog/spec.rst:509 +#: ../../src/appx/blog/spec.rst:494 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1165,7 +1176,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../src/appx/blog/spec.rst:511 +#: ../../src/appx/blog/spec.rst:496 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1174,7 +1185,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:513 +#: ../../src/appx/blog/spec.rst:498 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1182,7 +1193,7 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../src/appx/blog/spec.rst:515 +#: ../../src/appx/blog/spec.rst:500 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." @@ -3391,3 +3402,13 @@ msgstr "" #~ msgid "python, django, blog, project, training" #~ msgstr "python, django, blog, project, training" + +#~ msgid "Optional tasks" +#~ msgstr "Додаткові завдання" + +#~ msgid "" +#~ "Create a service to fetch articles, ordered by a specified user " +#~ "preferences." +#~ msgstr "" +#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " +#~ "уподобаннями користувача." diff --git a/src/appx/blog b/src/appx/blog index 07148abff..af5bc281d 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit 07148abffada4810d07654a863a4e8f3a9afef80 +Subproject commit af5bc281d7d31b26972ad95c2156af464c2897d1 diff --git a/src/conf.py b/src/conf.py index 2bc14fcd8..3d52dd19f 100644 --- a/src/conf.py +++ b/src/conf.py @@ -61,7 +61,7 @@ (master_doc, latex_doc, project, authors, "manual", False), ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), - ("appx/blog", "DjangoBlog.tex", project, authors, "howto", False), + ("appx/blog/spec", "DjangoBlog.tex", project, authors, "howto", False), ("appx/create_pr", "CreatingPullRequest.tex", "Creating the Pull Request", authors, "howto", False), ] @@ -74,5 +74,5 @@ "appx/create_pr", "appx/conv_store", "appx/wtk", - "appx/blog", + "appx/blog/spec", ] From bd0578206dbca9a94dd43d1fa7932a1d216727cc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 12 Aug 2023 01:05:02 +0300 Subject: [PATCH 357/689] Update project dependencies --- poetry.lock | 488 +++++++++++++++++++++++++++------------------------- 1 file changed, 252 insertions(+), 236 deletions(-) diff --git a/poetry.lock b/poetry.lock index 56e0b0c69..0f92d9a15 100644 --- a/poetry.lock +++ b/poetry.lock @@ -26,111 +26,111 @@ files = [ [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -186,14 +186,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.3.0" +version = "6.8.0" description = "Read metadata from Python packages" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.3.0-py3-none-any.whl", hash = "sha256:8f8bd2af397cf33bd344d35cfe7f489219b7d14fc79a3f854b75b8417e9226b0"}, - {file = "importlib_metadata-6.3.0.tar.gz", hash = "sha256:23c2bcae4762dfb0bbe072d358faec24957901d75b6c4ab11172c0c982532402"}, + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] [package.dependencies] @@ -202,7 +202,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "jinja2" @@ -264,62 +264,62 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] @@ -431,14 +431,14 @@ pybtex = ">=0.16" [[package]] name = "pygments" -version = "2.15.0" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, - {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -446,71 +446,71 @@ plugins = ["importlib-metadata"] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -518,19 +518,19 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "67.6.1" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.6.1-py3-none-any.whl", hash = "sha256:e728ca814a823bf7bf60162daf9db95b93d532948c4c0bea762ce62f60189078"}, - {file = "setuptools-67.6.1.tar.gz", hash = "sha256:257de92a9d50a60b8e22abfcbb771571fde0dbf3ec234463212027a4eeecbe9a"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -559,21 +559,21 @@ files = [ [[package]] name = "sphinx" -version = "6.1.3" +version = "6.2.1" description = "Python documentation generator" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Sphinx-6.1.3.tar.gz", hash = "sha256:0dac3b698538ffef41716cf97ba26c1c7788dba73ce6f150c1ff5b4720786dd2"}, - {file = "sphinx-6.1.3-py3-none-any.whl", hash = "sha256:807d1cb3d6be87eb78a381c3e70ebd8d346b9a25f3753e9947e866b2786865fc"}, + {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, + {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18,<0.20" +docutils = ">=0.18.1,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -591,7 +591,7 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython", "html5lib", "pytest (>=4.6)"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-copybutton" @@ -635,36 +635,39 @@ test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.2.0" +version = "1.2.2" description = "Read the Docs theme for Sphinx" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.0-py2.py3-none-any.whl", hash = "sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2"}, - {file = "sphinx_rtd_theme-1.2.0.tar.gz", hash = "sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8"}, + {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, + {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, ] [package.dependencies] docutils = "<0.19" sphinx = ">=1.6,<7" -sphinxcontrib-jquery = {version = ">=2.0.0,<3.0.0 || >3.0.0", markers = "python_version > \"3\""} +sphinxcontrib-jquery = ">=4,<5" [package.extras] dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "1.0.6" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-1.0.6-py3-none-any.whl", hash = "sha256:c0578efa23cab5a2f3aaa8af5691b952433f4fdfaac255befd3452448e7ea4a4"}, + {file = "sphinxcontrib_applehelp-1.0.6.tar.gz", hash = "sha256:a59274de7a952a99af36b8a5092352d9249279c0e3280b7dceaae8e15873c942"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] @@ -690,32 +693,38 @@ Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "1.0.4" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-1.0.4-py3-none-any.whl", hash = "sha256:d4e20a17f78865d4096733989b5efa0d5e7743900e98e1f6ecd6f489380febc8"}, + {file = "sphinxcontrib_devhelp-1.0.4.tar.gz", hash = "sha256:4fd751c63dc40895ac8740948f26bf1a3c87e4e441cc008672abd1cb2bc8a3d1"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.0.3" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.0.3-py3-none-any.whl", hash = "sha256:abee4e6c5471203ad2fc40dc6a16ed99884a5d6b15a6f79c9269a7e82cf04149"}, + {file = "sphinxcontrib_htmlhelp-2.0.3.tar.gz", hash = "sha256:14358d0f88ccf58447f2b54343cdcc0012f32de2f8d27cf934fdbc0b362f9597"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] @@ -764,68 +773,75 @@ files = [ [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "1.0.5" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-1.0.5-py3-none-any.whl", hash = "sha256:962730a6ad15d21fd6760b14c9e95c00a097413595aa6ee871dd9dfa4b002a16"}, + {file = "sphinxcontrib_qthelp-1.0.5.tar.gz", hash = "sha256:d31d1a1beaf3894866bb318fb712f1edc82687f1c06235a01e5b2c50c36d5c40"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "1.1.7" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-1.1.7-py3-none-any.whl", hash = "sha256:424164fc3a8b4355a29d5ea8b7f18199022d160c8f7b96e68bb6c50217729b87"}, + {file = "sphinxcontrib_serializinghtml-1.1.7.tar.gz", hash = "sha256:ca31afee32e1508cff4034e258060ce2c81a3b1c49e77da60fdb61f0e7a73c22"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "urllib3" -version = "1.26.15" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, - {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.15.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" From 42c2aea27a5f4f3e9c923aa4f637304f91ae8949 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 23:31:31 +0300 Subject: [PATCH 358/689] Update submodules: problem-sets (2023.08.1) --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index efeafc8c8..c4326cdd5 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit efeafc8c8e949cbfb1ee156827b04a2d1da6573a +Subproject commit c4326cdd50a7bcd6452344376918256f727dcaa9 From f0dbeb4f69faf1e2c96d0bfbc1e025a24ab5b99e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 00:09:53 +0300 Subject: [PATCH 359/689] Update submodules: blog-spec --- src/appx/blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/appx/blog b/src/appx/blog index af5bc281d..5d34b3fda 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit af5bc281d7d31b26972ad95c2156af464c2897d1 +Subproject commit 5d34b3fdac1a0fceac294fc69bc50ad89b56846c From 25b796fd0470ec0e1f0f2bf8891473ad4a7234c6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 22 Aug 2023 13:47:36 +0300 Subject: [PATCH 360/689] Update README and requirements.txt --- README.rst | 6 +++++- requirements.txt | 38 +++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/README.rst b/README.rst index c98d905d3..653b86f87 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,11 @@ To get the full content, do: .. code-block:: shell - git submodule update --remote + git clone [local_repository] + # cd into cloned repo and switch to devel branch + git switch devel + # clone submodules content + git submodule update --init --recursive Installing dependencies ----------------------- diff --git a/requirements.txt b/requirements.txt index 4f32b5241..b1d5ba8be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,41 +1,41 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" -certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4" -charset-normalizer==3.1.0 ; python_version >= "3.9" and python_version < "4" -click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" +certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.2.0 ; python_version >= "3.9" and python_version < "4.0" +click==8.1.6 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" -idna==3.4 ; python_version >= "3.9" and python_version < "4" +idna==3.4 ; python_version >= "3.9" and python_version < "4.0" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.3.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==6.8.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" -markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" packaging==23.1 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" -pygments==2.15.0 ; python_version >= "3.9" and python_version < "4.0" -pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" -requests==2.28.2 ; python_version >= "3.9" and python_version < "4" -setuptools==67.6.1 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.16.1 ; python_version >= "3.9" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" +requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==68.0.0 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" -sphinx-rtd-theme==1.2.0 ; python_version >= "3.9" and python_version < "4.0" -sphinx==6.1.3 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==1.2.2 ; python_version >= "3.9" and python_version < "4.0" +sphinx==6.2.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.3 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" -urllib3==1.26.15 ; python_version >= "3.9" and python_version < "4" -zipp==3.15.0 ; python_version >= "3.9" and python_version < "3.10" +sphinxcontrib-qthelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.7 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.0.4 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.16.2 ; python_version >= "3.9" and python_version < "3.10" From 8769282cd01112c7db9d75db86b97fcf21427a47 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 22 Aug 2023 14:52:13 +0300 Subject: [PATCH 361/689] Remove "flask" part from the master document --- src/basics/bool_logic.txt | 2 -- src/basics/controlflow.txt | 2 ++ src/basics/functions.txt | 8 ++++++-- src/basics/modules.txt | 8 ++++++-- src/basics/stdtypes.txt | 5 ++++- src/flask/index.txt | 19 ------------------- src/index.txt | 1 - 7 files changed, 18 insertions(+), 27 deletions(-) delete mode 100644 src/flask/index.txt diff --git a/src/basics/bool_logic.txt b/src/basics/bool_logic.txt index 55afd37d7..51c52eeb7 100644 --- a/src/basics/bool_logic.txt +++ b/src/basics/bool_logic.txt @@ -83,8 +83,6 @@ considered ``False``: Boolean comparison ================== -.. todo: not, and, or - Python provides 3 logical operators: .. table:: diff --git a/src/basics/controlflow.txt b/src/basics/controlflow.txt index d1a8a017a..f75b9671a 100644 --- a/src/basics/controlflow.txt +++ b/src/basics/controlflow.txt @@ -7,6 +7,8 @@ Control Flow ******************************************************************************* +.. todo: split into "if" statement and loop documents + ``if`` statement ================ diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 62837cdc2..7c24b38cd 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -3,8 +3,6 @@ :author: Serhii Horodilov :keywords: python, basics, functions -.. todo - .. attention:: Page is under construction .. figure:: /../assets/img/construction.svg @@ -14,3 +12,9 @@ ******************************************************************************* Functions ******************************************************************************* + +.. todo: function definition + +.. todo: function arguments (positional and key-word) + +.. todo: default argument value diff --git a/src/basics/modules.txt b/src/basics/modules.txt index bb2091a9e..f188916a2 100644 --- a/src/basics/modules.txt +++ b/src/basics/modules.txt @@ -3,8 +3,6 @@ :author: Serhii Horodilov :keywords: python, basics, modules, import -.. todo - .. attention:: Page is under construction .. figure:: /../assets/img/construction.svg @@ -14,3 +12,9 @@ ******************************************************************************* Pythons Modules and Imports ******************************************************************************* + +.. todo: module definition + +.. todo: imports + +.. todo: if __name__ == "__main__" diff --git a/src/basics/stdtypes.txt b/src/basics/stdtypes.txt index 06d1f9e69..d5bdbbc92 100644 --- a/src/basics/stdtypes.txt +++ b/src/basics/stdtypes.txt @@ -3,6 +3,9 @@ :author: Serhii Horodilov :keywords: python, basics +.. todo + split into separate documents: numbers, booleans, sequences etc. + ******************************************************************************* Built-in Types ******************************************************************************* @@ -49,7 +52,7 @@ Supported operations +---------------------+-------------------------------------------------------+ | ``-x`` | *x* negated | +---------------------+-------------------------------------------------------+ -| ``+x`` | *y* unchanged | +| ``+x`` | *x* unchanged | +---------------------+-------------------------------------------------------+ | ``abs(x)`` | absolute value or magnitude of *x* | +---------------------+-------------------------------------------------------+ diff --git a/src/flask/index.txt b/src/flask/index.txt deleted file mode 100644 index edefc6de1..000000000 --- a/src/flask/index.txt +++ /dev/null @@ -1,19 +0,0 @@ -.. meta:: - :description: Flask web-framework - :author: Serhii Horodilov - :keywords: python, web, flask, index - -.. todo - -.. attention:: Page is under construction - - .. figure:: /../assets/img/construction.svg - :figwidth: 250 - :align: center - -############################################################################### - Flask Framework -############################################################################### - -.. toctree:: - :name: flask diff --git a/src/index.txt b/src/index.txt index 3409ef117..b4bd03256 100644 --- a/src/index.txt +++ b/src/index.txt @@ -11,7 +11,6 @@ basics/index rdbms/index oop/index - flask/index django/index linux/index deploy/index From 67eec983061bfc540303c2cacabbd441164289e1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 19:42:23 +0300 Subject: [PATCH 362/689] Add "Version Control System" part to the course materials --- src/index.txt | 1 + src/refs.bib | 9 +++++++++ src/vcs/index.txt | 11 +++++++++++ 3 files changed, 21 insertions(+) create mode 100644 src/vcs/index.txt diff --git a/src/index.txt b/src/index.txt index b4bd03256..4616f4687 100644 --- a/src/index.txt +++ b/src/index.txt @@ -10,6 +10,7 @@ intro/index basics/index rdbms/index + vcs/index oop/index django/index linux/index diff --git a/src/refs.bib b/src/refs.bib index bc8e7e242..0d37a17ea 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -148,3 +148,12 @@ @misc{github:about-pr title = "{About pull requests}", url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, } + +@book{progit, + title = {ProGit (2nd Edition)}, + author = {Scott Chacon and Ben Straub}, + year = {2014}, + publisher = {Apress}, + url = {https://git-scm.com/book/en/v2}, + note = {Online Version}, +} diff --git a/src/vcs/index.txt b/src/vcs/index.txt new file mode 100644 index 000000000..e958ffc13 --- /dev/null +++ b/src/vcs/index.txt @@ -0,0 +1,11 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git + +############################################################################### + Version Control System +############################################################################### + +.. toctree:: + :name: vcs From b838733cbd38fb5a611b0ff7f9cf5a560ee454a9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 22:29:09 +0300 Subject: [PATCH 363/689] Add Git introduction document --- assets/img/git-snapshots.svg | 320 ++++++++++++++++++++++++++++++++++ assets/img/vcs-dvcs.svg | 278 +++++++++++++++++++++++++++++ assets/mermaid/git-states.mmd | 8 + src/vcs/index.txt | 2 + src/vcs/intro.txt | 95 ++++++++++ 5 files changed, 703 insertions(+) create mode 100644 assets/img/git-snapshots.svg create mode 100644 assets/img/vcs-dvcs.svg create mode 100644 assets/mermaid/git-states.mmd create mode 100644 src/vcs/intro.txt diff --git a/assets/img/git-snapshots.svg b/assets/img/git-snapshots.svg new file mode 100644 index 000000000..1aa53b2f0 --- /dev/null +++ b/assets/img/git-snapshots.svg @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version 1 + + + + + + File A + + + + + + File B + + + + + + File C + + + + + + + + + Version 2 + + + + + + + A1 + + + + + + B + + + + + + + C1 + + + + + + + + + Version 3 + + + + + + A1 + + + + + + B + + + + + + + C2 + + + + + + + + + Version 4 + + + + + + + A2 + + + + + + + B1 + + + + + + C2 + + + + + + + + + Version 5 + + + + + + A2 + + + + + + + B2 + + + + + + + C3 + + + + + + + + + + + + + + + Checkins Over Time + + + + + + diff --git a/assets/img/vcs-dvcs.svg b/assets/img/vcs-dvcs.svg new file mode 100644 index 000000000..65bf23fb6 --- /dev/null +++ b/assets/img/vcs-dvcs.svg @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + Local Repository A + + + + + + + + + + File + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + + + + + + + Local Repository B + + + + + + + + + + File + + + + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + + + + + + + Remote Repository + + + + + + + + + + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + diff --git a/assets/mermaid/git-states.mmd b/assets/mermaid/git-states.mmd new file mode 100644 index 000000000..edf400dbb --- /dev/null +++ b/assets/mermaid/git-states.mmd @@ -0,0 +1,8 @@ +sequenceDiagram + participant Working directory + participant Stage area + participant .git directory (Repository) + + .git directory (Repository) ->> Working directory: Checkout + Working directory ->> Stage area: Stage fixes + Stage area ->> .git directory (Repository): Commit diff --git a/src/vcs/index.txt b/src/vcs/index.txt index e958ffc13..9fef64623 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -9,3 +9,5 @@ .. toctree:: :name: vcs + + intro diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt new file mode 100644 index 000000000..d09164707 --- /dev/null +++ b/src/vcs/intro.txt @@ -0,0 +1,95 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git + +******************************************************************************* + About version control (Git) +******************************************************************************* + +Version control is a system that records changes to a file or set of files over +time so that you can recall specific versions later. It allows you to revert +selected files back to a previous state, revert the entire project back to +a previous state, compare changes over time, see who last modified something +that might be causing a problem, who introduced an issue and when, and more. + +In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just +check out the latest snapshot of the files; rather, they fully mirror +the repository, including its full history. Thus, if any server dies, and +these systems were collaborating via that server, any of the client +repositories can be copied back up to the server to restore it. Every clone +is really a full backup of all the data. + +.. figure:: /../assets/img/vcs-dvcs.svg + :align: center + + Distributed version control diagram + +.. rubric:: What is Git? + +The major difference between Git and any other VCS is the way Git thinks about +its data. Conceptually, most other systems store information as a list of +file-based changes. Git doesn't think of or store its data this way. +Instead, Git thinks of its data more like a series of snapshots of a miniature +filesystem. + +This is an important distinction between Git and nearly all other VCSs. +It makes Git reconsider almost every aspect of version control that most +other systems copied from the previous generation. This makes Git more like +a mini filesystem with some incredibly powerful tools built on top of it, +rather than simply a VCS. + +.. figure:: /../assets/img/git-snapshots.svg + :align: center + + Storing data as snapshots of the project over time + +.. rubric:: Local operations + +Most operations in Git need only local files and resources to operate -- +generally no information is needed from another computer on your network. +Because you have the entire history of the project right there on your local +disk, most operations seem almost instantaneous. + +.. rubric:: Integrity + +Everything in Git is checksummed before it is stored and is then referred +to by that checksum. This means it’s impossible to change the contents of +any file or directory without Git knowing about it. + +.. rubric:: Repository files states + +Git has three main states that your files can reside in: +**modified**, **staged**, and **committed**: + +- Modified means that you have changed the file but have not committed it + to your database yet. +- Staged means that you have marked a modified file in its current version + to go into your next commit snapshot. +- Committed means that the data is safely stored in your local database. + +.. mermaid:: /../assets/mermaid/git-states.mmd + :align: center + + + +The basic Git workflow goes something like this: + +#. You modify files in your working tree. +#. You selectively stage just those changes you want to be part of your next + commit, which adds only those changes to the staging area. +#. You do a commit, which takes the files as they are in the staging area and + stores that snapshot permanently to your Git directory. + +Command line +============ + +There are a lot of different ways to use Git. There are the original +command-line tools, and there are many graphical user interfaces of varying +capabilities. For one, the command line is the only place you can run all Git +commands -- most of the GUIs implement only a partial subset of Git +functionality for simplicity. If you know how to run the command-line version, +you can probably also figure out how to run the GUI version, while the opposite +is not necessarily true. Also, while your choice of graphical client is +a matter of personal taste, all users will have the command-line tools +installed and available. From 1d86c8054068fd5b97f8d96ab8bc527bb64819ff Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 22:54:38 +0300 Subject: [PATCH 364/689] Add first-time git setup document --- src/vcs/index.txt | 1 + src/vcs/setup.txt | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/vcs/setup.txt diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 9fef64623..9848f53b1 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -11,3 +11,4 @@ :name: vcs intro + setup diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt new file mode 100644 index 000000000..c959359ce --- /dev/null +++ b/src/vcs/setup.txt @@ -0,0 +1,50 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, setup + +******************************************************************************* + Git Setup +******************************************************************************* + +Now that you have Git on your system, you’ll want to do a few things to +customize your Git environment. Git comes with a tool called ``git config`` +that lets you get and set configuration variables that control all aspects of +how Git looks and operates. These variables can be stored in three different +places: + +#. *[path]/etc/gitconfig* file: Contains values applied to every user on + the system and all their repositories. If you pass the option ``--system`` + to git config, it reads and writes from this file specifically. + Because this is a system configuration file, you would need administrative + or superuser privilege to make changes to it. +#. *~/.gitconfig* or *~/.config/git/config* file: Values specific personally + to you, the user. You can make Git read and write to this file specifically + by passing the ``--global`` option, and this affects all of + the repositories you work with on your system. +#. *config* file in the Git directory (that is, *.git/config*) of whatever + repository you’re currently using: Specific to that single repository. + You can force Git to read from and write to this file with the ``--local`` + option, but that is in fact the default. Unsurprisingly, you need to be + located somewhere in a Git repository for this option to work properly. + +Each level overrides values in the previous level, so values in *.git/config* +trump those in *[path]/etc/gitconfig*. + +You can view all of your settings and where they are coming from using: + +.. code-block:: shell + + git config --list --show-origin + +Your identity +============= + +The first thing you should do when you install Git is to set your user name +and email address. This is important because every Git commit uses this +information. + +.. code-block:: shell + + git config --global user.name "John Doe" + git config --global user.email johndoe@example.com From 512d2109c49e9d5d6a1df0e2787216a1669e362c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 23:23:15 +0300 Subject: [PATCH 365/689] Add todos to setup document --- src/vcs/setup.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index c959359ce..b2c996449 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -48,3 +48,6 @@ information. git config --global user.name "John Doe" git config --global user.email johndoe@example.com + +.. todo: + Add SSH setup From 9fad08febe0dea869a73dda9310ce70dc467d8f4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 26 Jul 2023 23:28:52 +0300 Subject: [PATCH 366/689] Add git-lifecycle mermaid diagram --- assets/mermaid/git-lifecycle.mmd | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 assets/mermaid/git-lifecycle.mmd diff --git a/assets/mermaid/git-lifecycle.mmd b/assets/mermaid/git-lifecycle.mmd new file mode 100644 index 000000000..a43c1f615 --- /dev/null +++ b/assets/mermaid/git-lifecycle.mmd @@ -0,0 +1,11 @@ +sequenceDiagram + participant Untracked + participant Unmodified + participant Modified + participant Staged + + Untracked ->> Staged: Add the file + Unmodified ->> Modified: Edit the file + Modified ->> Staged: Stage the file + Unmodified ->> Untracked: Remove the file + Staged ->> Unmodified: Commit From d95e011830a56780c89a1b394191dac150afcfa0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:37:20 +0300 Subject: [PATCH 367/689] Add gitflow diagram --- assets/mermaid/gitflow.mmd | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 assets/mermaid/gitflow.mmd diff --git a/assets/mermaid/gitflow.mmd b/assets/mermaid/gitflow.mmd new file mode 100644 index 000000000..163b34b6d --- /dev/null +++ b/assets/mermaid/gitflow.mmd @@ -0,0 +1,56 @@ +gitGraph +%% initialize repository + commit id: "Initial commit" + +%% define development branch + branch develop + commit + +%% define hotfix branch + checkout main + commit id: "Buggy commit" type: REVERSE + branch hotfix + +%% define feature branches + checkout develop + branch feature/A + branch feature/B + checkout develop + commit + branch feature/C + commit + commit + commit + +%% working with hotfix branch + checkout hotfix + commit id: "Fix bugs" + +%% merge hotfix commits into main and develop + checkout main + merge hotfix + checkout develop + merge hotfix + +%% working with feature-b branch + checkout feature/A + commit + commit + checkout develop + merge feature/A +%% work with feature-a branch + checkout feature/B + commit + checkout develop + +%% define release branch + checkout develop + branch release/v1.0 + commit id: "Work on release" tag: "v1.0" + checkout main + merge release/v1.0 + checkout develop + commit + merge release/v1.0 + commit + merge feature/B \ No newline at end of file From 75e28ebdfd10485c35ce0c13c776d657b8eced6e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:40:17 +0300 Subject: [PATCH 368/689] Minor changes to gitflow mermaid diagram --- assets/mermaid/gitflow.mmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/mermaid/gitflow.mmd b/assets/mermaid/gitflow.mmd index 163b34b6d..6287bbb6e 100644 --- a/assets/mermaid/gitflow.mmd +++ b/assets/mermaid/gitflow.mmd @@ -24,7 +24,7 @@ gitGraph %% working with hotfix branch checkout hotfix - commit id: "Fix bugs" + commit id: "Fix bugs" type:HIGHLIGHT %% merge hotfix commits into main and develop checkout main @@ -52,5 +52,7 @@ gitGraph checkout develop commit merge release/v1.0 + +%% merging previous feature branch commit merge feature/B \ No newline at end of file From 69b3c40b3522e6a0b2bf99b208a3ab6eb9ae2f62 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:44:42 +0300 Subject: [PATCH 369/689] Update bibtex references --- src/refs.bib | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/refs.bib b/src/refs.bib index 0d37a17ea..3a2f8b3c2 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -149,11 +149,17 @@ @misc{github:about-pr url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, } +@misc{github:ssh, + title = "{Generating a new SSH key and adding it to the ssh-agent}", + author = "{GitHub Docs}", + url = {https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent}, +} + @book{progit, - title = {ProGit (2nd Edition)}, - author = {Scott Chacon and Ben Straub}, - year = {2014}, - publisher = {Apress}, - url = {https://git-scm.com/book/en/v2}, - note = {Online Version}, + title = {ProGit (2nd Edition)}, + author = {Scott Chacon and Ben Straub}, + year = {2014}, + publisher = {Apress}, + url = {https://git-scm.com/book/en/v2}, + note = {Online Version}, } From 4544f844f64494b7c445ade01863f398bb6f8714 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 00:53:02 +0300 Subject: [PATCH 370/689] Add Git basics document (draft) --- src/vcs/basics.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++ src/vcs/index.txt | 1 + 2 files changed, 51 insertions(+) create mode 100644 src/vcs/basics.txt diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt new file mode 100644 index 000000000..95f03c634 --- /dev/null +++ b/src/vcs/basics.txt @@ -0,0 +1,50 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, basics + +******************************************************************************* + Git Basics +******************************************************************************* + +Getting a Git repository +======================== + +Initializing repo in an existing directory +------------------------------------------ + +.. code-block:: shell + + git init + +Cloning an existing repo +------------------------ + + +.. code-block:: shell + + git clone https://github.com/edu-python-course/edu-python-course.github.io + +That creates a directory named *edu-python-course.github.io*, initializes a +*.git* directory inside it, pulls down all the data for that repository, +and checks out a working copy of the latest version. + +.. code-block:: shell + + git clone https://github.com/edu-python-course/edu-python-course.github.io python-course + +That command does the same thing as the previous one, but the target directory +is called *python-course*. + +Git has a number of different transfer protocols you can use. The previous +example uses the ``https://`` protocol, but you may also see ``git://`` or +``user@server:path/to/repo.git``, which uses the SSH transfer protocol. + +.. todo: + Describe committing changes process + +.. todo: + Describe branching + +.. todo: + Describe merging and cherry-pick diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 9848f53b1..8eb849574 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -12,3 +12,4 @@ intro setup + basics From 936bd017ca472dfd5b5fd51ff5afc43a9cbc1a9c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 01:23:18 +0300 Subject: [PATCH 371/689] Add github document --- src/vcs/github.txt | 8 ++++++++ src/vcs/index.txt | 1 + 2 files changed, 9 insertions(+) create mode 100644 src/vcs/github.txt diff --git a/src/vcs/github.txt b/src/vcs/github.txt new file mode 100644 index 000000000..9d32362e0 --- /dev/null +++ b/src/vcs/github.txt @@ -0,0 +1,8 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, github + +******************************************************************************* + GitHub +******************************************************************************* diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 8eb849574..1e36643bb 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,3 +13,4 @@ intro setup basics + github From a9ca963a60a85f756787e45ddbf086f336a7274b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 01:44:00 +0300 Subject: [PATCH 372/689] Add GitHub account creation section, adjust todos --- src/vcs/github.txt | 17 +++++++++++++++++ src/vcs/setup.txt | 3 --- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/vcs/github.txt b/src/vcs/github.txt index 9d32362e0..2b2b23c19 100644 --- a/src/vcs/github.txt +++ b/src/vcs/github.txt @@ -3,6 +3,23 @@ :author: Serhii Horodilov :keywords: version, control, system, vcs, git, github +.. _GitHub: https://github.com + ******************************************************************************* GitHub ******************************************************************************* + +`GitHub`_ is the single largest host for Git repositories, and is the central +point of collaboration for millions of developers and projects. + + +Account setup and configuration +=============================== + +The first thing you need to do is set up a free user account. Visit `GitHub`_ +and press "Sign Up" button. The GitHub will lead you through the account +creation process. Just follow the hints and provide an email address, username +and a strong password. + +.. todo: + Describe SSH key generation and set up diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index b2c996449..c959359ce 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -48,6 +48,3 @@ information. git config --global user.name "John Doe" git config --global user.email johndoe@example.com - -.. todo: - Add SSH setup From 4cc633313cb2e753b646745dc0429862c083ba98 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 12:16:09 +0300 Subject: [PATCH 373/689] Update getting repository section --- src/vcs/basics.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 95f03c634..1973f4105 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -10,16 +10,52 @@ Getting a Git repository ======================== +You typically obtain a Git repository in one of two ways: + +#. You can take a local directory that is currently not under version control, + and turn it into a Git repository. +#. You can clone an existing Git repository from elsewhere. + +In either case, you end up with a Git repository on your local machine, +ready for work. + Initializing repo in an existing directory ------------------------------------------ +If you have a project directory that is currently not under version control and +you want to start controlling it with Git, you first need to go to that +project's directory. If you've never done this, it looks a little different +depending on which system you're running: + +.. code-block:: shell + :caption: Change directory in bash (Linux) + + cd /home/user/project + +.. code-block:: shell + :caption: Change directory in bash (MacOS) + + cd /Users/user/project + +.. code-block:: powershell + :caption: Change directory in PowerShell (Windows) + + cd C:\Users\user\project + +In the project's directory initialize a new Git repository. + .. code-block:: shell git init +This creates a new subdirectory named .git that contains all of your necessary +repository files -- a Git repository skeleton. + Cloning an existing repo ------------------------ +If you want to get a copy of an existing Git repository -- for example, +a project you'd like to contribute to -- the command you need is ``git clone``. .. code-block:: shell From a924f69f17101e6cdb0999216bba19b5d1202ca2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 14:41:53 +0300 Subject: [PATCH 374/689] Add making changes section Described status check and files staging. --- src/vcs/basics.txt | 120 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 1973f4105..535daa85a 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -76,8 +76,126 @@ Git has a number of different transfer protocols you can use. The previous example uses the ``https://`` protocol, but you may also see ``git://`` or ``user@server:path/to/repo.git``, which uses the SSH transfer protocol. +Making changes to the repo +========================== + +At this point, you should have a *bona fide* Git repository on your local +machine, and a checkout or *working copy* of all of its files in front of you. +Typically, you'll want to start making changes and committing snapshots of +those changes into your repository each time the project reaches a state you +want to record. + +Remember that each file in your working directory can be in one of two states: +**tracked** or **untracked**. + +- Tracked files are files that were in the last snapshot, as well as any + newly staged files; they can be unmodified, modified, or staged. In short, + tracked files are files that Git knows about. +- Untracked files are everything else -- any files in your working directory + that were not in your last snapshot and are not in your staging area. + Untracked basically means that Git sees a file you didn't have in + a previous snapshot (commit), and which hasn't been yet staged. + +.. mermaid:: /../assets/mermaid/git-lifecycle.mmd + :align: center + :caption: The lifecycle of the status of repo's files + +Checking out status of the file(s) +---------------------------------- + +The main tool you use to determine which files are in which state is +the ``git status`` command. + +.. code-block:: shell + + $ # check status + $ git status + On branch devel + + No commits yet + + nothing to commit (create/copy files and use "git add" to track) + + $ # add file to the repository + $ echo "# Project Title" > README.md + $ # check status once again + $ git status + On branch devel + + No commits yet + + Untracked files: + (use "git add ..." to include in what will be committed) + README.md + + nothing added to commit but untracked files present (use "git add" to track) + +Newly added *README.md* file is untracked, because it's under "Untracked files" +heading the status output. + +Tracking new files +------------------ + +In order to begin tracking a new file, you use the ``git add`` command. + +.. code-block:: shell + + $ git add README.md + $ git status + On branch devel + + No commits yet + + Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: README.md + +From now *README.md* file is **added** to the stage area and ready to be +committed (is under "Changes to be committed" heading). + +.. hint:: + You can use wildcards, to stage multiple files at once. The most common + use cases is to add **all** modified files, or files inside of a specific + directory. + + .. code-block:: shell + + git add * # stage all changes + git add . # stage all changes in current directory + git add docs # stage all changes in "docs" directory + +Staging modified files +---------------------- + +If a staged (or already committed) file has been changed, it will be moved +under "Modified" heading. These changes wouldn't be committed unless they are +staged. + +.. code-block:: shell + + $ git status + On branch devel + + No commits yet + + Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: README.md + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: README.md + +- Changes may be added to the stage area by repeating ``git add`` command. +- Changes may be discard by ``git restore `` command. This action will + restore file to its **staged** version. + +.. todo: + Ignoring files + .. todo: - Describe committing changes process + Committing changes .. todo: Describe branching From 804aaee1462ac16aa58958e2b2c6907f1a024901 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 15:04:48 +0300 Subject: [PATCH 375/689] Add git ignore section --- src/vcs/basics.txt | 82 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 535daa85a..0ad233857 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -191,8 +191,86 @@ staged. - Changes may be discard by ``git restore `` command. This action will restore file to its **staged** version. -.. todo: - Ignoring files +Ignoring files +-------------- + +Often, there is a class of files, that should not be a part of a repo. You +want these files to be prevent from being automatically added or even shown +as being untracked. These are generally files produced by loggers or a build +system, or some local settings for the project that shouldn't be shared across +other developers or maintainers. In such cases you can create a *.gitignore* +file. Here is the content of *.gitignore* used in current repository: + +:: + + # virtual environment + /.venv/ + /.env/ + /venv/ + /env/ + + # node packages + /node_modules/ + + # ide configs + /.vscode/ + /.idea/ + + # emacs cache and backup files + \#* + *~ + + # temporary files storage + /temp/ + /tmp/ + + # documentation builds + _builds/ + _build/ + builds/ + build/ + + # translation object files + *.pot + *.mo + +These lines mean: + +- Content within directories named ".venv", ".env", "venv" or "env" + will be ignored completely. +- Content within "node_modules" directory will be ignored completely. +- Any files within directories named ".vscode" or ".idea" will be ignored + completely. +- Any file with name starting with hash (#) will be ignored. +- Any file with name ending with tilda (~) will be ignored. +- Content within directories named "temp" or "tmp" will be ignored + completely. +- Content within directories named "_builds", "_build", "builds" or + "build" will be ignored completely. +- Any file with name ending with ".pot" will be ignored. +- Any file with name ending with ".mo" will be ignored. + +Setting up a *.gitignore* file for your new repository before you get going is +generally a good idea so you don't accidentally commit files that you really +don't want in your Git repository. + +The rules for the patterns you can put in the *.gitignore* file are as follows: + +- Blank lines or lines starting with # are ignored. +- Standard glob patterns work, and will be applied recursively throughout + the entire working tree. +- You can start patterns with a forward slash (/) to avoid recursive + inclusion. +- You can end patterns with a forward slash (/) to specify a directory. +- You can negate a pattern by starting it with an exclamation point (!). + +Glob patterns are like simplified regular expressions that shells use. +An asterisk (\*) matches zero or more characters; [ab] matches any character +inside the brackets (in this case a or b); a question mark (?) matches +a single character; and brackets enclosing characters separated by a hyphen +([0-9]) matches any character between them (in this case 0 through 9). +You can also use two asterisks to match nested directories; +a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. .. todo: Committing changes From e02aff80fbd4bb0ac0fade025453127e3efef603 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 15:31:25 +0300 Subject: [PATCH 376/689] Add committing changes section --- src/vcs/basics.txt | 71 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 0ad233857..cafcea58d 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -191,6 +191,74 @@ staged. - Changes may be discard by ``git restore `` command. This action will restore file to its **staged** version. +Committing changes +------------------ + +Now that the stage area is set up the way required, it's time to commit +changes. Remember that anything that is still unstaged -- any files you +have created or modified that you haven't run git add on since you edited +them -- won't go into this commit. + +The simplest way to commit is to type ``git commit``: + +.. code-block:: shell + + git commit + +Doing so launches your editor of choice. + +.. note:: + This is set by your shell’s EDITOR environment variable -- usually vim or + emacs, although you can configure it with whatever you want using + the ``git config --global core.editor`` + +Alternatively, you can type your commit message inline with the ``commit`` +command by specifying it after a ``-m`` flag, like this: + +.. code-block:: shell + + git commit -m "Add GitHub workflow to test Sphinx builds for PRs to devel" + +Although it can be amazingly useful for crafting commits exactly how you want +them, the staging area is sometimes a bit more complex than you need in your +workflow. If you want to skip the staging area, Git provides a simple shortcut. +Adding the ``-a`` option to the ``git commit`` command makes Git automatically +stage every file that is already tracked before doing the commit, letting you +skip the git add part: + +.. code-block:: shell + + $ git status + On branch devel + + No commits yet + + Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: README.md + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: README.md + + Untracked files: + (use "git add ..." to include in what will be committed) + example.json + + $ git commit -a -m "Commit tracked files" + [devel (root-commit) 7acb7a1] Commit tracked files + 1 file changed, 3 insertions(+) + create mode 100644 README.md + + $ git status + On branch devel + Untracked files: + (use "git add ..." to include in what will be committed) + example.json + + nothing added to commit but untracked files present (use "git add" to track) + Ignoring files -------------- @@ -272,9 +340,6 @@ a single character; and brackets enclosing characters separated by a hyphen You can also use two asterisks to match nested directories; a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. -.. todo: - Committing changes - .. todo: Describe branching From 5f0be839ab32109a14a21ffe9da18ef19d5af9fa Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 27 Jul 2023 16:37:49 +0300 Subject: [PATCH 377/689] Add branching and merging document --- src/vcs/basics.txt | 6 ------ src/vcs/branch.txt | 17 +++++++++++++++++ src/vcs/index.txt | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 src/vcs/branch.txt diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index cafcea58d..a4ba046fb 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -339,9 +339,3 @@ a single character; and brackets enclosing characters separated by a hyphen ([0-9]) matches any character between them (in this case 0 through 9). You can also use two asterisks to match nested directories; a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. - -.. todo: - Describe branching - -.. todo: - Describe merging and cherry-pick diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt new file mode 100644 index 000000000..ad5a4842d --- /dev/null +++ b/src/vcs/branch.txt @@ -0,0 +1,17 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, branch, merge, cherry-pick + +******************************************************************************* + Branches and Merging +******************************************************************************* + +.. todo: + Add merge section + +.. todo: + Add rebase section + +.. todo: + Describe merging and cherry-pick diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 1e36643bb..e39ae9e5d 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,4 +13,5 @@ intro setup basics + branch github From 3863a079c54483112b2ff21b37d95dde40759db5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:03:03 +0300 Subject: [PATCH 378/689] Add base branch description and diagrams --- assets/img/git-commits.svg | 109 +++++++++++++++++++++++++++++++++ assets/mermaid/git-commits.mmd | 9 +++ src/vcs/branch.txt | 23 +++++++ 3 files changed, 141 insertions(+) create mode 100644 assets/img/git-commits.svg create mode 100644 assets/mermaid/git-commits.mmd diff --git a/assets/img/git-commits.svg b/assets/img/git-commits.svg new file mode 100644 index 000000000..6f9c9917b --- /dev/null +++ b/assets/img/git-commits.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + 383a7630 + + + + + + + 1c060f79 + + + + + + + 1fe791ec + + + + + + + 01cda149 + + + + + + + testing + + + + + + + master + + + + + + + develop + + + + + + + + + + + + + + + diff --git a/assets/mermaid/git-commits.mmd b/assets/mermaid/git-commits.mmd new file mode 100644 index 000000000..a5dddb195 --- /dev/null +++ b/assets/mermaid/git-commits.mmd @@ -0,0 +1,9 @@ +gitGraph: + commit id: "Initial commit" + commit id: "383a7630" type: HIGHLIGHT + branch develop + commit id: "1fe791ec" + branch testing + commit id: "01cda149" + checkout main + commit id: "1c060f79" diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index ad5a4842d..23810dacc 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -7,6 +7,29 @@ Branches and Merging ******************************************************************************* +To really understand the way Git does branching, we need to take a step back +and examine how Git stores its data. Git doesn't store data as a series of +changesets or differences, but instead as a series of snapshots. When you make +a commit, Git stores a commit object that contains a pointer to the snapshot +of the content you staged. This object also contains the author’s name and +email address, the message that you typed, and pointers to the commit or +commits that directly came before this commit (its parent or parents): +zero parents for the initial commit, one parent for a normal commit, +and multiple parents for a commit that results from a merge of two or more +branches. + +.. figure:: /../assets/img/git-commits.svg + :align: center + +.. mermaid:: /../assets/mermaid/git-commits.mmd + :align: center + :caption: Commits tree + +A branch in Git is simply a lightweight movable pointer to one of these +commits. The default branch name in Git is master. As you start making commits, +you're given a master branch that points to the last commit you made. +Every time you commit, the master branch pointer moves forward automatically. + .. todo: Add merge section From 8e44968c0cdcdf21ed2262c35f96dbf17ffb7b64 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:12:29 +0300 Subject: [PATCH 379/689] Add git merge diagrams --- assets/mermaid/git-merge-1.mmd | 7 +++++++ assets/mermaid/git-merge-2.mmd | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100644 assets/mermaid/git-merge-1.mmd create mode 100644 assets/mermaid/git-merge-2.mmd diff --git a/assets/mermaid/git-merge-1.mmd b/assets/mermaid/git-merge-1.mmd new file mode 100644 index 000000000..0da962d84 --- /dev/null +++ b/assets/mermaid/git-merge-1.mmd @@ -0,0 +1,7 @@ +gitGraph + commit id: "Initial commit" + branch feature + commit + commit + checkout main + merge feature \ No newline at end of file diff --git a/assets/mermaid/git-merge-2.mmd b/assets/mermaid/git-merge-2.mmd new file mode 100644 index 000000000..1d263df70 --- /dev/null +++ b/assets/mermaid/git-merge-2.mmd @@ -0,0 +1,8 @@ +gitGraph + commit id: "Initial commit" + branch feature + commit + commit + checkout main + commit + merge feature id: "Merge commit" type:NORMAL \ No newline at end of file From 4465f869225e4036f9bce8e7d2e5158960e18706 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:16:39 +0300 Subject: [PATCH 380/689] Add git rebase diagrams --- assets/mermaid/git-rebase-1.mmd | 9 +++++++++ assets/mermaid/git-rebase-2.mmd | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 assets/mermaid/git-rebase-1.mmd create mode 100644 assets/mermaid/git-rebase-2.mmd diff --git a/assets/mermaid/git-rebase-1.mmd b/assets/mermaid/git-rebase-1.mmd new file mode 100644 index 000000000..de7705d30 --- /dev/null +++ b/assets/mermaid/git-rebase-1.mmd @@ -0,0 +1,9 @@ +gitGraph + commit id: "Initial commit" + branch feature + checkout main + commit + commit + checkout feature + commit + commit \ No newline at end of file diff --git a/assets/mermaid/git-rebase-2.mmd b/assets/mermaid/git-rebase-2.mmd new file mode 100644 index 000000000..afcc89f18 --- /dev/null +++ b/assets/mermaid/git-rebase-2.mmd @@ -0,0 +1,8 @@ +gitGraph + commit id: "Initial commit" + commit + commit + branch feature + checkout feature + commit + commit \ No newline at end of file From 57fb019617657482aae40cf35d5b72380e755ddc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:17:24 +0300 Subject: [PATCH 381/689] Working on merge and rebase sections --- src/vcs/branch.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 23810dacc..29089e414 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -33,8 +33,24 @@ Every time you commit, the master branch pointer moves forward automatically. .. todo: Add merge section +.. mermaid:: /../assets/mermaid/git-merge-1.mmd + :align: center + :caption: Fast-forward merge + +.. mermaid:: /../assets/mermaid/git-merge-2.mmd + :align: center + :caption: Merge commit + .. todo: Add rebase section +.. mermaid:: /../assets/mermaid/git-rebase-1.mmd + :align: center + :caption: Before rebase + +.. mermaid:: /../assets/mermaid/git-rebase-2.mmd + :align: center + :caption: After rebase + .. todo: Describe merging and cherry-pick From 470137225167f785a63a8fae299d187f215b98c3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:27:30 +0300 Subject: [PATCH 382/689] Add git cherry-pick diagram --- assets/mermaid/git-cherry-pick.mmd | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 assets/mermaid/git-cherry-pick.mmd diff --git a/assets/mermaid/git-cherry-pick.mmd b/assets/mermaid/git-cherry-pick.mmd new file mode 100644 index 000000000..29790cd8b --- /dev/null +++ b/assets/mermaid/git-cherry-pick.mmd @@ -0,0 +1,18 @@ +gitGraph + commit id: "Initial commit" + branch develop + checkout main + commit + checkout develop + commit + checkout main + commit + checkout develop + commit id: "Important commit" + checkout main + commit + checkout develop + commit + checkout main + cherry-pick id: "Important commit" + commit From f948c048007a0beb00eb3a35c3748e1f78933efd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:32:53 +0300 Subject: [PATCH 383/689] Move mermaid diagrams to a dedicated folder (git) --- .../{git-cherry-pick.mmd => git/cherry-pick.mmd} | 0 assets/mermaid/{git-commits.mmd => git/commits.mmd} | 0 assets/mermaid/{ => git}/gitflow.mmd | 0 .../mermaid/{git-lifecycle.mmd => git/lifecycle.mmd} | 0 assets/mermaid/{git-merge-1.mmd => git/merge-1.mmd} | 0 assets/mermaid/{git-merge-2.mmd => git/merge-2.mmd} | 0 assets/mermaid/{git-rebase-1.mmd => git/rebase-1.mmd} | 0 assets/mermaid/{git-rebase-2.mmd => git/rebase-2.mmd} | 0 assets/mermaid/{git-states.mmd => git/states.mmd} | 0 src/vcs/basics.txt | 2 +- src/vcs/branch.txt | 10 +++++----- src/vcs/intro.txt | 2 +- 12 files changed, 7 insertions(+), 7 deletions(-) rename assets/mermaid/{git-cherry-pick.mmd => git/cherry-pick.mmd} (100%) rename assets/mermaid/{git-commits.mmd => git/commits.mmd} (100%) rename assets/mermaid/{ => git}/gitflow.mmd (100%) rename assets/mermaid/{git-lifecycle.mmd => git/lifecycle.mmd} (100%) rename assets/mermaid/{git-merge-1.mmd => git/merge-1.mmd} (100%) rename assets/mermaid/{git-merge-2.mmd => git/merge-2.mmd} (100%) rename assets/mermaid/{git-rebase-1.mmd => git/rebase-1.mmd} (100%) rename assets/mermaid/{git-rebase-2.mmd => git/rebase-2.mmd} (100%) rename assets/mermaid/{git-states.mmd => git/states.mmd} (100%) diff --git a/assets/mermaid/git-cherry-pick.mmd b/assets/mermaid/git/cherry-pick.mmd similarity index 100% rename from assets/mermaid/git-cherry-pick.mmd rename to assets/mermaid/git/cherry-pick.mmd diff --git a/assets/mermaid/git-commits.mmd b/assets/mermaid/git/commits.mmd similarity index 100% rename from assets/mermaid/git-commits.mmd rename to assets/mermaid/git/commits.mmd diff --git a/assets/mermaid/gitflow.mmd b/assets/mermaid/git/gitflow.mmd similarity index 100% rename from assets/mermaid/gitflow.mmd rename to assets/mermaid/git/gitflow.mmd diff --git a/assets/mermaid/git-lifecycle.mmd b/assets/mermaid/git/lifecycle.mmd similarity index 100% rename from assets/mermaid/git-lifecycle.mmd rename to assets/mermaid/git/lifecycle.mmd diff --git a/assets/mermaid/git-merge-1.mmd b/assets/mermaid/git/merge-1.mmd similarity index 100% rename from assets/mermaid/git-merge-1.mmd rename to assets/mermaid/git/merge-1.mmd diff --git a/assets/mermaid/git-merge-2.mmd b/assets/mermaid/git/merge-2.mmd similarity index 100% rename from assets/mermaid/git-merge-2.mmd rename to assets/mermaid/git/merge-2.mmd diff --git a/assets/mermaid/git-rebase-1.mmd b/assets/mermaid/git/rebase-1.mmd similarity index 100% rename from assets/mermaid/git-rebase-1.mmd rename to assets/mermaid/git/rebase-1.mmd diff --git a/assets/mermaid/git-rebase-2.mmd b/assets/mermaid/git/rebase-2.mmd similarity index 100% rename from assets/mermaid/git-rebase-2.mmd rename to assets/mermaid/git/rebase-2.mmd diff --git a/assets/mermaid/git-states.mmd b/assets/mermaid/git/states.mmd similarity index 100% rename from assets/mermaid/git-states.mmd rename to assets/mermaid/git/states.mmd diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index a4ba046fb..bbb997b71 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -96,7 +96,7 @@ Remember that each file in your working directory can be in one of two states: Untracked basically means that Git sees a file you didn't have in a previous snapshot (commit), and which hasn't been yet staged. -.. mermaid:: /../assets/mermaid/git-lifecycle.mmd +.. mermaid:: /../assets/mermaid/git/lifecycle.mmd :align: center :caption: The lifecycle of the status of repo's files diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 29089e414..9929703d5 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -21,7 +21,7 @@ branches. .. figure:: /../assets/img/git-commits.svg :align: center -.. mermaid:: /../assets/mermaid/git-commits.mmd +.. mermaid:: /../assets/mermaid/git/commits.mmd :align: center :caption: Commits tree @@ -33,22 +33,22 @@ Every time you commit, the master branch pointer moves forward automatically. .. todo: Add merge section -.. mermaid:: /../assets/mermaid/git-merge-1.mmd +.. mermaid:: /../assets/mermaid/git/merge-1.mmd :align: center :caption: Fast-forward merge -.. mermaid:: /../assets/mermaid/git-merge-2.mmd +.. mermaid:: /../assets/mermaid/git/merge-2.mmd :align: center :caption: Merge commit .. todo: Add rebase section -.. mermaid:: /../assets/mermaid/git-rebase-1.mmd +.. mermaid:: /../assets/mermaid/git/rebase-1.mmd :align: center :caption: Before rebase -.. mermaid:: /../assets/mermaid/git-rebase-2.mmd +.. mermaid:: /../assets/mermaid/git/rebase-2.mmd :align: center :caption: After rebase diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt index d09164707..3a8573d25 100644 --- a/src/vcs/intro.txt +++ b/src/vcs/intro.txt @@ -68,7 +68,7 @@ Git has three main states that your files can reside in: to go into your next commit snapshot. - Committed means that the data is safely stored in your local database. -.. mermaid:: /../assets/mermaid/git-states.mmd +.. mermaid:: /../assets/mermaid/git/states.mmd :align: center From 743f50cb8d3826ee5c2f067ef4803f5a22180637 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:53:37 +0300 Subject: [PATCH 384/689] Add branching strategies and GitFlow descriptions (section) --- src/vcs/branch.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 9929703d5..20242dc4c 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -54,3 +54,49 @@ Every time you commit, the master branch pointer moves forward automatically. .. todo: Describe merging and cherry-pick + +Branching strategies +==================== + +Branching strategy in version control systems defines how branches are created, +managed, and used in a project's development process. +It helps teams collaborate effectively, isolate changes, and organize +development efforts. A good branching strategy provides clarity on how to work +with branches, minimizes conflicts, and enables a smooth and structured +development workflow. + +GitFlow is a popular branching strategy that provides a well-defined model for +managing branches in a Git repository. It was introduced by Vincent Driessen +and is based on the idea of using two main branches: "master" and "develop." + +- **Master Branch**: The "master" branch represents the stable version of +the codebase. It should always contain production-ready code and be free from +any major issues. The "master" branch is protected, and only release versions +are merged into it. + +- **Develop Branch**: The "develop" branch is where the ongoing development +and integration of features take place. It serves as the integration branch +for various feature branches and should also contain a stable version of +the code. + +- **Feature Branches**: For each new feature or bug fix, a dedicated "feature" +branch is created off the "develop" branch. These branches are short-lived and +exist only for the duration of the feature development. + +- **Release Branches**: When the development on the "develop" branch is ready +for a release, a "release" branch is created. The release branch is used +for testing, bug fixing, and preparing for deployment. + +- **Hotfix Branches**: If a critical issue is discovered in the production +version, a "hotfix" branch is created from the "master" branch. This allows +for a quick fix without affecting ongoing development on the "develop" branch. + +GitFlow provides a structured approach to managing branching in a collaborative +development environment. It ensures that the main branches remain stable, and +new features and bug fixes are integrated smoothly before being released. +This strategy is particularly useful for projects with regular releases and +a team working on multiple features concurrently. + +.. mermaid:: /../assets/mermaid/git/gitflow.mmd + :align: center + :caption: GitFlow diagram From 741e2021e21c3bceb10e3e225fe15a429630f20f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 14:54:09 +0300 Subject: [PATCH 385/689] Minor headings changes to branches document --- src/vcs/branch.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 20242dc4c..acf1e780c 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -7,6 +7,9 @@ Branches and Merging ******************************************************************************* +About branches +============== + To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. Git doesn't store data as a series of changesets or differences, but instead as a series of snapshots. When you make From 762d511854f49c425eb8d553a301097666ac5319 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 28 Jul 2023 15:13:15 +0300 Subject: [PATCH 386/689] Fix GitFlow branches list --- src/vcs/branch.txt | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index acf1e780c..1411a20bf 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -72,27 +72,24 @@ GitFlow is a popular branching strategy that provides a well-defined model for managing branches in a Git repository. It was introduced by Vincent Driessen and is based on the idea of using two main branches: "master" and "develop." -- **Master Branch**: The "master" branch represents the stable version of -the codebase. It should always contain production-ready code and be free from -any major issues. The "master" branch is protected, and only release versions -are merged into it. - -- **Develop Branch**: The "develop" branch is where the ongoing development -and integration of features take place. It serves as the integration branch -for various feature branches and should also contain a stable version of -the code. - -- **Feature Branches**: For each new feature or bug fix, a dedicated "feature" -branch is created off the "develop" branch. These branches are short-lived and -exist only for the duration of the feature development. - -- **Release Branches**: When the development on the "develop" branch is ready -for a release, a "release" branch is created. The release branch is used -for testing, bug fixing, and preparing for deployment. - -- **Hotfix Branches**: If a critical issue is discovered in the production -version, a "hotfix" branch is created from the "master" branch. This allows -for a quick fix without affecting ongoing development on the "develop" branch. +- **Master Branch**: The "master" branch represents the stable version of + the codebase. It should always contain production-ready code and be free + from any major issues. The "master" branch is protected, and only release + versions are merged into it. +- **Develop Branch**: The "develop" branch is where the ongoing development + and integration of features take place. It serves as the integration branch + for various feature branches and should also contain a stable version of + the code. +- **Feature Branches**: For each new feature or bug fix, a dedicated + "feature" branch is created off the "develop" branch. These branches are + short-lived and exist only for the duration of the feature development. +- **Release Branches**: When the development on the "develop" branch is ready + for a release, a "release" branch is created. The release branch is used + for testing, bug fixing, and preparing for deployment. +- **Hotfix Branches**: If a critical issue is discovered in the production + version, a "hotfix" branch is created from the "master" branch. This allows + for a quick fix without affecting ongoing development on the "develop" + branch. GitFlow provides a structured approach to managing branching in a collaborative development environment. It ensures that the main branches remain stable, and From 928b00184722cdcbf10753b9c35dc373b9ac4c8b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 31 Jul 2023 14:30:54 +0300 Subject: [PATCH 387/689] Update branches document --- src/vcs/branch.txt | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 1411a20bf..61570cdfa 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -21,9 +21,6 @@ zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. -.. figure:: /../assets/img/git-commits.svg - :align: center - .. mermaid:: /../assets/mermaid/git/commits.mmd :align: center :caption: Commits tree @@ -33,6 +30,28 @@ commits. The default branch name in Git is master. As you start making commits, you're given a master branch that points to the last commit you made. Every time you commit, the master branch pointer moves forward automatically. +.. figure:: /../assets/img/git-commits.svg + :align: center + +Create branches +=============== + +There are few ways to create a new branch in a Git repository. The most common +way is to use ``git branch`` command. + +.. code-block:: shell + + git branch [parent_commit] + +Pointer to a parent commit is optional. By default the parent commit is set +to the latest one available (HEAD pointer) at the moment of the branch +creation. You can also switch to the newly created branch just after its +creation using: + +.. code-block:: shell + + git checkout -b [parent_commit] + .. todo: Add merge section From 968b962189739af97bfc9aecc2e5fb169fae607b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 31 Jul 2023 14:31:08 +0300 Subject: [PATCH 388/689] Add commit document (draft) --- src/vcs/commits.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/vcs/commits.txt diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt new file mode 100644 index 000000000..2d01de180 --- /dev/null +++ b/src/vcs/commits.txt @@ -0,0 +1,17 @@ +.. meta:: + :description: Version control system + :author: Serhii Horodilov + :keywords: version, control, system, vcs, git, history, commit + +############################################################################### + Working with Commits +############################################################################### + +.. todo: + git log + +.. todo: + git checkout + +.. todo: + git tag From 0f595f2bde2ed9a0d50e973701034e066e740549 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 14:41:49 +0300 Subject: [PATCH 389/689] Fix apostrophe for VCS files --- src/vcs/basics.txt | 2 +- src/vcs/branch.txt | 2 +- src/vcs/index.txt | 1 + src/vcs/intro.txt | 2 +- src/vcs/setup.txt | 4 ++-- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index bbb997b71..4d1b56763 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -208,7 +208,7 @@ The simplest way to commit is to type ``git commit``: Doing so launches your editor of choice. .. note:: - This is set by your shell’s EDITOR environment variable -- usually vim or + This is set by your shell's EDITOR environment variable -- usually vim or emacs, although you can configure it with whatever you want using the ``git config --global core.editor`` diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 61570cdfa..5b2daa8a8 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -14,7 +14,7 @@ To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. Git doesn't store data as a series of changesets or differences, but instead as a series of snapshots. When you make a commit, Git stores a commit object that contains a pointer to the snapshot -of the content you staged. This object also contains the author’s name and +of the content you staged. This object also contains the author's name and email address, the message that you typed, and pointers to the commit or commits that directly came before this commit (its parent or parents): zero parents for the initial commit, one parent for a normal commit, diff --git a/src/vcs/index.txt b/src/vcs/index.txt index e39ae9e5d..817e702fb 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,5 +13,6 @@ intro setup basics + commits branch github diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt index 3a8573d25..42dd5d6ed 100644 --- a/src/vcs/intro.txt +++ b/src/vcs/intro.txt @@ -54,7 +54,7 @@ disk, most operations seem almost instantaneous. .. rubric:: Integrity Everything in Git is checksummed before it is stored and is then referred -to by that checksum. This means it’s impossible to change the contents of +to by that checksum. This means it's impossible to change the contents of any file or directory without Git knowing about it. .. rubric:: Repository files states diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index c959359ce..b158b6ae8 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -7,7 +7,7 @@ Git Setup ******************************************************************************* -Now that you have Git on your system, you’ll want to do a few things to +Now that you have Git on your system, you'll want to do a few things to customize your Git environment. Git comes with a tool called ``git config`` that lets you get and set configuration variables that control all aspects of how Git looks and operates. These variables can be stored in three different @@ -23,7 +23,7 @@ places: by passing the ``--global`` option, and this affects all of the repositories you work with on your system. #. *config* file in the Git directory (that is, *.git/config*) of whatever - repository you’re currently using: Specific to that single repository. + repository you're currently using: Specific to that single repository. You can force Git to read from and write to this file with the ``--local`` option, but that is in fact the default. Unsurprisingly, you need to be located somewhere in a Git repository for this option to work properly. From 9613c0da04fb2d2abe0718468aea7918e6ca4f90 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 14:42:10 +0300 Subject: [PATCH 390/689] Add translations to VSC documents --- src/_locales/uk/LC_MESSAGES/vcs.po | 981 +++++++++++++++++++++++++++++ 1 file changed, 981 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/vcs.po diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po new file mode 100644 index 000000000..8494859cb --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -0,0 +1,981 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-16 14:39+0300\n" +"PO-Revision-Date: 2023-08-16 14:45+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" + +#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 +#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 +#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 +#: ../../src/vcs/setup.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 +#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 +#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 +#: ../../src/vcs/setup.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/basics.txt:-1 +msgid "version, control, system, vcs, git, basics" +msgstr "version, control, system, vcs, git, basics" + +#: ../../src/vcs/basics.txt:8 +msgid "Git Basics" +msgstr "Основи Git" + +#: ../../src/vcs/basics.txt:11 +msgid "Getting a Git repository" +msgstr "Отримання Git-репозиторію" + +#: ../../src/vcs/basics.txt:13 +msgid "You typically obtain a Git repository in one of two ways:" +msgstr "Зазвичай ви отримуєте Git-репозиторій одним з двох способів:" + +#: ../../src/vcs/basics.txt:15 +msgid "" +"You can take a local directory that is currently not under version control, " +"and turn it into a Git repository." +msgstr "" +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " +"версій, і перетворити його на Git-репозиторій." + +#: ../../src/vcs/basics.txt:17 +msgid "You can clone an existing Git repository from elsewhere." +msgstr "Ви можете клонувати існуюче сховище Git'а з іншого місця." + +#: ../../src/vcs/basics.txt:19 +msgid "" +"In either case, you end up with a Git repository on your local machine, " +"ready for work." +msgstr "" +"У будь-якому випадку, ви отримаєте Git-репозиторій на вашій локальній " +"машині, готовий до роботи." + +#: ../../src/vcs/basics.txt:23 +msgid "Initializing repo in an existing directory" +msgstr "Ініціалізація репо в існуючому каталозі" + +#: ../../src/vcs/basics.txt:25 +msgid "" +"If you have a project directory that is currently not under version control " +"and you want to start controlling it with Git, you first need to go to that " +"project's directory. If you've never done this, it looks a little different " +"depending on which system you're running:" +msgstr "" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " +"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " +"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " +"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" + +#: ../../src/vcs/basics.txt:30 +msgid "Change directory in bash (Linux)" +msgstr "Зміна каталогу в bash (Linux)" + +#: ../../src/vcs/basics.txt:35 +msgid "Change directory in bash (MacOS)" +msgstr "Зміна каталогу в bash (MacOS)" + +#: ../../src/vcs/basics.txt:40 +msgid "Change directory in PowerShell (Windows)" +msgstr "Зміна каталогу в PowerShell (Windows)" + +#: ../../src/vcs/basics.txt:45 +msgid "In the project's directory initialize a new Git repository." +msgstr "У каталозі проекту ініціалізуйте новий Git-репозиторій." + +#: ../../src/vcs/basics.txt:51 +msgid "" +"This creates a new subdirectory named .git that contains all of your " +"necessary repository files -- a Git repository skeleton." +msgstr "" +"Це створить новий підкаталог з ім'ям .git, який міститиме всі необхідні " +"файли сховища - скелет сховища Git." + +#: ../../src/vcs/basics.txt:55 +msgid "Cloning an existing repo" +msgstr "Клонування існуючого репо" + +#: ../../src/vcs/basics.txt:57 +msgid "" +"If you want to get a copy of an existing Git repository -- for example, a " +"project you'd like to contribute to -- the command you need is ``git clone``." +msgstr "" +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " +"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." + +#: ../../src/vcs/basics.txt:64 +msgid "" +"That creates a directory named *edu-python-course.github.io*, initializes a " +"*.git* directory inside it, pulls down all the data for that repository, and " +"checks out a working copy of the latest version." +msgstr "" +"Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " +"каталог *.git* всередині нього, витягує всі дані для цього сховища і " +"перевіряє робочу копію останньої версії." + +#: ../../src/vcs/basics.txt:72 +msgid "" +"That command does the same thing as the previous one, but the target " +"directory is called *python-course*." +msgstr "" +"Ця команда робить те саме, що й попередня, але цільовий каталог називається " +"*python-course*." + +#: ../../src/vcs/basics.txt:75 +msgid "" +"Git has a number of different transfer protocols you can use. The previous " +"example uses the ``https://`` protocol, but you may also see ``git://`` or " +"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." +msgstr "" +"Git має декілька різних протоколів передачі даних, які ви можете " +"використовувати. У попередньому прикладі використовується протокол ``https://" +"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." +"git``, який використовує протокол передачі SSH." + +#: ../../src/vcs/basics.txt:80 +msgid "Making changes to the repo" +msgstr "Внесення змін до репозиторію" + +#: ../../src/vcs/basics.txt:82 +msgid "" +"At this point, you should have a *bona fide* Git repository on your local " +"machine, and a checkout or *working copy* of all of its files in front of " +"you. Typically, you'll want to start making changes and committing snapshots " +"of those changes into your repository each time the project reaches a state " +"you want to record." +msgstr "" +"На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " +"комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " +"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " +"зафіксувати." + +#: ../../src/vcs/basics.txt:88 +msgid "" +"Remember that each file in your working directory can be in one of two " +"states: **tracked** or **untracked**." +msgstr "" +"Пам'ятайте, що кожен файл у вашому робочому каталозі може перебувати в " +"одному з двох станів: **відстежується** або **невідстежується**." + +#: ../../src/vcs/basics.txt:91 +msgid "" +"Tracked files are files that were in the last snapshot, as well as any newly " +"staged files; they can be unmodified, modified, or staged. In short, tracked " +"files are files that Git knows about." +msgstr "" +"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" +"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " +"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " +"Git'у." + +#: ../../src/vcs/basics.txt:94 +msgid "" +"Untracked files are everything else -- any files in your working directory " +"that were not in your last snapshot and are not in your staging area. " +"Untracked basically means that Git sees a file you didn't have in a previous " +"snapshot (commit), and which hasn't been yet staged." +msgstr "" +"Невідстежені файли - це все інше - будь-які файли у вашому робочому " +"каталозі, яких не було у вашому останньому знімку і які не перебувають у " +"вашій області сховища. По суті, це означає, що Git бачить файл, якого не " +"було у попередньому знімку (комміті), і який ще не було покладено у сховище." + +#: ../../src/vcs/basics.txt:104 +msgid "Checking out status of the file(s)" +msgstr "Перевірка стану файлу(ів)" + +#: ../../src/vcs/basics.txt:106 +msgid "" +"The main tool you use to determine which files are in which state is the " +"``git status`` command." +msgstr "" +"Основним інструментом для визначення стану файлів є команда ``git status``." + +#: ../../src/vcs/basics.txt:133 +msgid "" +"Newly added *README.md* file is untracked, because it's under \"Untracked " +"files\" heading the status output." +msgstr "" +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " +"розділі \"Файли, що не відстежуються\" у виведенні статусу." + +#: ../../src/vcs/basics.txt:137 +msgid "Tracking new files" +msgstr "Відстеження нових файлів" + +#: ../../src/vcs/basics.txt:139 +msgid "In order to begin tracking a new file, you use the ``git add`` command." +msgstr "" +"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " +"add``." + +#: ../../src/vcs/basics.txt:153 +msgid "" +"From now *README.md* file is **added** to the stage area and ready to be " +"committed (is under \"Changes to be committed\" heading)." +msgstr "" +"Відтепер файл *README.md* **додано** до області сцени і він готовий до " +"фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." + +#: ../../src/vcs/basics.txt:157 +msgid "" +"You can use wildcards, to stage multiple files at once. The most common use " +"cases is to add **all** modified files, or files inside of a specific " +"directory." +msgstr "" +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " +"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " +"змінених файлів або файлів у певному каталозі." + +#: ../../src/vcs/basics.txt:168 +msgid "Staging modified files" +msgstr "Зберігання змінених файлів" + +#: ../../src/vcs/basics.txt:170 +msgid "" +"If a staged (or already committed) file has been changed, it will be moved " +"under \"Modified\" heading. These changes wouldn't be committed unless they " +"are staged." +msgstr "" +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " +"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " +"вони не були поетапними." + +#: ../../src/vcs/basics.txt:190 +msgid "" +"Changes may be added to the stage area by repeating ``git add`` command." +msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." + +#: ../../src/vcs/basics.txt:191 +msgid "" +"Changes may be discard by ``git restore `` command. This action will " +"restore file to its **staged** version." +msgstr "" +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " +"до його **попередньої** версії." + +#: ../../src/vcs/basics.txt:195 +msgid "Committing changes" +msgstr "Фіксація змін" + +#: ../../src/vcs/basics.txt:197 +msgid "" +"Now that the stage area is set up the way required, it's time to commit " +"changes. Remember that anything that is still unstaged -- any files you have " +"created or modified that you haven't run git add on since you edited them -- " +"won't go into this commit." +msgstr "" +"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " +"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " +"створили або змінили, але не запустили git-додаток з моменту редагування, - " +"не потраплять до цього коміту." + +#: ../../src/vcs/basics.txt:202 +msgid "The simplest way to commit is to type ``git commit``:" +msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" + +#: ../../src/vcs/basics.txt:208 +msgid "Doing so launches your editor of choice." +msgstr "Після цього запуститься обраний вами редактор." + +#: ../../src/vcs/basics.txt:211 +msgid "" +"This is set by your shell's EDITOR environment variable -- usually vim or " +"emacs, although you can configure it with whatever you want using the ``git " +"config --global core.editor``" +msgstr "" +"Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" +"global core.editor``" + +#: ../../src/vcs/basics.txt:215 +msgid "" +"Alternatively, you can type your commit message inline with the ``commit`` " +"command by specifying it after a ``-m`` flag, like this:" +msgstr "" +"Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " +"``commit``, вказавши його після прапорця ``-m``, як показано нижче:" + +#: ../../src/vcs/basics.txt:222 +msgid "" +"Although it can be amazingly useful for crafting commits exactly how you " +"want them, the staging area is sometimes a bit more complex than you need in " +"your workflow. If you want to skip the staging area, Git provides a simple " +"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " +"automatically stage every file that is already tracked before doing the " +"commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " +"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " +"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " +"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " +"commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " +"git add:" + +#: ../../src/vcs/basics.txt:263 +msgid "Ignoring files" +msgstr "Ігнорування файлів" + +#: ../../src/vcs/basics.txt:265 +msgid "" +"Often, there is a class of files, that should not be a part of a repo. You " +"want these files to be prevent from being automatically added or even shown " +"as being untracked. These are generally files produced by loggers or a build " +"system, or some local settings for the project that shouldn't be shared " +"across other developers or maintainers. In such cases you can create a *." +"gitignore* file. Here is the content of *.gitignore* used in current " +"repository:" +msgstr "" +"Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " +"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"системою збірки, або деякі локальні налаштування проекту, які не повинні " +"бути доступними для інших розробників або супровідників. У таких випадках ви " +"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"використовується у поточному сховищі:" + +#: ../../src/vcs/basics.txt:305 +msgid "These lines mean:" +msgstr "Ці рядки означають:" + +#: ../../src/vcs/basics.txt:307 +msgid "" +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " +"will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " +"повністю проігноровано." + +#: ../../src/vcs/basics.txt:309 +msgid "Content within \"node_modules\" directory will be ignored completely." +msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:310 +msgid "" +"Any files within directories named \".vscode\" or \".idea\" will be ignored " +"completely." +msgstr "" +"Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " +"повністю проігноровані." + +#: ../../src/vcs/basics.txt:312 +msgid "Any file with name starting with hash (#) will be ignored." +msgstr "" +"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." + +#: ../../src/vcs/basics.txt:313 +msgid "Any file with name ending with tilda (~) will be ignored." +msgstr "" +"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." + +#: ../../src/vcs/basics.txt:314 +msgid "" +"Content within directories named \"temp\" or \"tmp\" will be ignored " +"completely." +msgstr "" +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:316 +msgid "" +"Content within directories named \"_builds\", \"_build\", \"builds\" or " +"\"build\" will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " +"буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:318 +msgid "Any file with name ending with \".pot\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." + +#: ../../src/vcs/basics.txt:319 +msgid "Any file with name ending with \".mo\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." + +#: ../../src/vcs/basics.txt:321 +msgid "" +"Setting up a *.gitignore* file for your new repository before you get going " +"is generally a good idea so you don't accidentally commit files that you " +"really don't want in your Git repository." +msgstr "" +"Створення файлу *.gitignore* для вашого нового сховища перед початком " +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " +"вам насправді не потрібні у вашому Git-репозиторії." + +#: ../../src/vcs/basics.txt:325 +msgid "" +"The rules for the patterns you can put in the *.gitignore* file are as " +"follows:" +msgstr "" +"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" + +#: ../../src/vcs/basics.txt:327 +msgid "Blank lines or lines starting with # are ignored." +msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." + +#: ../../src/vcs/basics.txt:328 +msgid "" +"Standard glob patterns work, and will be applied recursively throughout the " +"entire working tree." +msgstr "" +"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " +"по всьому робочому дереву." + +#: ../../src/vcs/basics.txt:330 +msgid "" +"You can start patterns with a forward slash (/) to avoid recursive inclusion." +msgstr "" +"Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " +"похилої риски (/)." + +#: ../../src/vcs/basics.txt:332 +msgid "You can end patterns with a forward slash (/) to specify a directory." +msgstr "" +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." + +#: ../../src/vcs/basics.txt:333 +msgid "You can negate a pattern by starting it with an exclamation point (!)." +msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." + +#: ../../src/vcs/basics.txt:335 +msgid "" +"Glob patterns are like simplified regular expressions that shells use. An " +"asterisk (\\*) matches zero or more characters; [ab] matches any character " +"inside the brackets (in this case a or b); a question mark (?) matches a " +"single character; and brackets enclosing characters separated by a hyphen " +"([0-9]) matches any character between them (in this case 0 through 9). You " +"can also use two asterisks to match nested directories; a/\\*\\*/z would " +"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " +"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " +"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " +"(?) відповідає одному символу; а дужки, що містять символи, розділені " +"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " +"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " +"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." + +#: ../../src/vcs/branch.txt:-1 +msgid "version, control, system, vcs, git, branch, merge, cherry-pick" +msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" + +#: ../../src/vcs/branch.txt:8 +msgid "Branches and Merging" +msgstr "Гілки та злиття" + +#: ../../src/vcs/branch.txt:11 +msgid "About branches" +msgstr "Про гілки" + +#: ../../src/vcs/branch.txt:13 +msgid "" +"To really understand the way Git does branching, we need to take a step back " +"and examine how Git stores its data. Git doesn't store data as a series of " +"changesets or differences, but instead as a series of snapshots. When you " +"make a commit, Git stores a commit object that contains a pointer to the " +"snapshot of the content you staged. This object also contains the author's " +"name and email address, the message that you typed, and pointers to the " +"commit or commits that directly came before this commit (its parent or " +"parents): zero parents for the initial commit, one parent for a normal " +"commit, and multiple parents for a commit that results from a merge of two " +"or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " +"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " +"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " +"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " +"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " +"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " +"на комміт або комміти, які безпосередньо передували цьому комміту (його " +"батька або батьків): нульовий батько для початкового комміту, один батько " +"для звичайного комміту і кілька батьків для комміту, який є результатом " +"злиття двох або більше гілок." + +#: ../../src/vcs/branch.txt:28 +msgid "" +"A branch in Git is simply a lightweight movable pointer to one of these " +"commits. The default branch name in Git is master. As you start making " +"commits, you're given a master branch that points to the last commit you " +"made. Every time you commit, the master branch pointer moves forward " +"automatically." +msgstr "" +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " +"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " +"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " +"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " +"пересувається вперед." + +#: ../../src/vcs/branch.txt:37 +msgid "Create branches" +msgstr "Створення гілок" + +#: ../../src/vcs/branch.txt:39 +msgid "" +"There are few ways to create a new branch in a Git repository. The most " +"common way is to use ``git branch`` command." +msgstr "" +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " +"них - використання команди ``git branch``." + +#: ../../src/vcs/branch.txt:46 +msgid "" +"Pointer to a parent commit is optional. By default the parent commit is set " +"to the latest one available (HEAD pointer) at the moment of the branch " +"creation. You can also switch to the newly created branch just after its " +"creation using:" +msgstr "" +"Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " +"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " +"на момент створення гілки. Ви також можете переключитися на новостворену " +"гілку одразу після її створення за допомогою:" + +#: ../../src/vcs/branch.txt:81 +msgid "Branching strategies" +msgstr "Стратегії розгалуження" + +#: ../../src/vcs/branch.txt:83 +msgid "" +"Branching strategy in version control systems defines how branches are " +"created, managed, and used in a project's development process. It helps " +"teams collaborate effectively, isolate changes, and organize development " +"efforts. A good branching strategy provides clarity on how to work with " +"branches, minimizes conflicts, and enables a smooth and structured " +"development workflow." +msgstr "" +"Стратегія розгалуження в системах контролю версій визначає, як створюються, " +"управляються та використовуються гілки в процесі розробки проекту. Вона " +"допомагає командам ефективно співпрацювати, ізолювати зміни та " +"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " +"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " +"структурований робочий процес розробки." + +#: ../../src/vcs/branch.txt:90 +msgid "" +"GitFlow is a popular branching strategy that provides a well-defined model " +"for managing branches in a Git repository. It was introduced by Vincent " +"Driessen and is based on the idea of using two main branches: \"master\" and " +"\"develop.\"" +msgstr "" +"GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " +"модель для управління гілками в Git-репозиторії. Вона була представлена " +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " +"основних гілок: \"master\" і \"develop\"." + +#: ../../src/vcs/branch.txt:94 +msgid "" +"**Master Branch**: The \"master\" branch represents the stable version of " +"the codebase. It should always contain production-ready code and be free " +"from any major issues. The \"master\" branch is protected, and only release " +"versions are merged into it." +msgstr "" +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " +"бази. Вона завжди повинна містити готовий до використання код і не містити " +"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " +"релізні версії." + +#: ../../src/vcs/branch.txt:98 +msgid "" +"**Develop Branch**: The \"develop\" branch is where the ongoing development " +"and integration of features take place. It serves as the integration branch " +"for various feature branches and should also contain a stable version of the " +"code." +msgstr "" +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " +"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " +"функціональних гілок, а також повинна містити стабільну версію коду." + +#: ../../src/vcs/branch.txt:102 +msgid "" +"**Feature Branches**: For each new feature or bug fix, a dedicated " +"\"feature\" branch is created off the \"develop\" branch. These branches are " +"short-lived and exist only for the duration of the feature development." +msgstr "" +"**Вітки функцій**: Для кожної нової функції або виправлення помилки " +"створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " +"недовговічні і існують лише на час розробки функції." + +#: ../../src/vcs/branch.txt:105 +msgid "" +"**Release Branches**: When the development on the \"develop\" branch is " +"ready for a release, a \"release\" branch is created. The release branch is " +"used for testing, bug fixing, and preparing for deployment." +msgstr "" +"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " +"створюється гілка \"release\". Релізна гілка використовується для " +"тестування, виправлення помилок і підготовки до розгортання." + +#: ../../src/vcs/branch.txt:108 +msgid "" +"**Hotfix Branches**: If a critical issue is discovered in the production " +"version, a \"hotfix\" branch is created from the \"master\" branch. This " +"allows for a quick fix without affecting ongoing development on the " +"\"develop\" branch." +msgstr "" +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " +"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " +"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." + +#: ../../src/vcs/branch.txt:113 +msgid "" +"GitFlow provides a structured approach to managing branching in a " +"collaborative development environment. It ensures that the main branches " +"remain stable, and new features and bug fixes are integrated smoothly before " +"being released. This strategy is particularly useful for projects with " +"regular releases and a team working on multiple features concurrently." +msgstr "" +"GitFlow забезпечує структурований підхід до управління розгалуженням у " +"середовищі спільної розробки. Він гарантує, що основні гілки залишаються " +"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " +"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " +"і командою, яка працює над декількома функціями одночасно." + +#: ../../src/vcs/commits.txt:-1 +msgid "version, control, system, vcs, git, history, commit" +msgstr "version, control, system, vcs, git, history, commit" + +#: ../../src/vcs/commits.txt:8 +msgid "Working with Commits" +msgstr "Робота з коммітами" + +#: ../../src/vcs/github.txt:-1 +msgid "version, control, system, vcs, git, github" +msgstr "version, control, system, vcs, git, github" + +#: ../../src/vcs/github.txt:10 +msgid "GitHub" +msgstr "GitHub" + +#: ../../src/vcs/github.txt:12 +msgid "" +"`GitHub`_ is the single largest host for Git repositories, and is the " +"central point of collaboration for millions of developers and projects." +msgstr "" +"`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " +"точкою співпраці для мільйонів розробників і проектів." + +#: ../../src/vcs/github.txt:17 +msgid "Account setup and configuration" +msgstr "Налаштування та конфігурація акаунта" + +#: ../../src/vcs/github.txt:19 +msgid "" +"The first thing you need to do is set up a free user account. Visit " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " +"account creation process. Just follow the hints and provide an email " +"address, username and a strong password." +msgstr "" +"Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " +"GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " +"та надійний пароль." + +#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 +msgid "version, control, system, vcs, git" +msgstr "version, control, system, vcs, git" + +#: ../../src/vcs/index.txt:8 +msgid "Version Control System" +msgstr "Система контролю версій" + +#: ../../src/vcs/intro.txt:8 +msgid "About version control (Git)" +msgstr "Про контроль версій (Git)" + +#: ../../src/vcs/intro.txt:10 +msgid "" +"Version control is a system that records changes to a file or set of files " +"over time so that you can recall specific versions later. It allows you to " +"revert selected files back to a previous state, revert the entire project " +"back to a previous state, compare changes over time, see who last modified " +"something that might be causing a problem, who introduced an issue and when, " +"and more." +msgstr "" +"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " +"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " +"повернути вибрані файли до попереднього стану, повернути весь проект до " +"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " +"щось, що може спричинити проблему, хто і коли створив проблему, тощо." + +#: ../../src/vcs/intro.txt:16 +msgid "" +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " +"check out the latest snapshot of the files; rather, they fully mirror the " +"repository, including its full history. Thus, if any server dies, and these " +"systems were collaborating via that server, any of the client repositories " +"can be copied back up to the server to restore it. Every clone is really a " +"full backup of all the data." +msgstr "" +"У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " +"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " +"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " +"ладу, а ці системи працювали через нього, будь-який з клієнтських " +"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " +"клон - це фактично повна резервна копія всіх даних." + +#: ../../src/vcs/intro.txt:26 +msgid "Distributed version control diagram" +msgstr "Розподілена схема управління версіями" + +#: ../../src/vcs/intro.txt:29 +msgid "What is Git?" +msgstr "Що таке Git?" + +#: ../../src/vcs/intro.txt:30 +msgid "" +"The major difference between Git and any other VCS is the way Git thinks " +"about its data. Conceptually, most other systems store information as a list " +"of file-based changes. Git doesn't think of or store its data this way. " +"Instead, Git thinks of its data more like a series of snapshots of a " +"miniature filesystem." +msgstr "" +"Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " +"Git'ом мислить про свої дані. Концептуально, більшість інших систем " +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " +"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " +"серію знімків мініатюрної файлової системи." + +#: ../../src/vcs/intro.txt:36 +msgid "" +"This is an important distinction between Git and nearly all other VCSs. It " +"makes Git reconsider almost every aspect of version control that most other " +"systems copied from the previous generation. This makes Git more like a mini " +"filesystem with some incredibly powerful tools built on top of it, rather " +"than simply a VCS." +msgstr "" +"Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " +"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " +"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " +"міні-файлову систему з деякими неймовірно потужними інструментами, " +"побудованими поверх неї, ніж на звичайну VCS." + +#: ../../src/vcs/intro.txt:45 +msgid "Storing data as snapshots of the project over time" +msgstr "Зберігання даних у вигляді знімків проекту з плином часу" + +#: ../../src/vcs/intro.txt:48 +msgid "Local operations" +msgstr "Локальні операції" + +#: ../../src/vcs/intro.txt:49 +msgid "" +"Most operations in Git need only local files and resources to operate -- " +"generally no information is needed from another computer on your network. " +"Because you have the entire history of the project right there on your local " +"disk, most operations seem almost instantaneous." +msgstr "" +"Для виконання більшості операцій у Git'і потрібні лише локальні файли та " +"ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " +"мережі. Оскільки вся історія проекту зберігається на вашому локальному " +"диску, більшість операцій виконуються майже миттєво." + +#: ../../src/vcs/intro.txt:55 +msgid "Integrity" +msgstr "Цілісність" + +#: ../../src/vcs/intro.txt:56 +msgid "" +"Everything in Git is checksummed before it is stored and is then referred to " +"by that checksum. This means it's impossible to change the contents of any " +"file or directory without Git knowing about it." +msgstr "" +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " +"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " +"каталогу без відома Git'а." + +#: ../../src/vcs/intro.txt:61 +msgid "Repository files states" +msgstr "Стани файлів сховища" + +#: ../../src/vcs/intro.txt:62 +msgid "" +"Git has three main states that your files can reside in: **modified**, " +"**staged**, and **committed**:" +msgstr "" +"Git має три основні стани, в яких можуть перебувати ваші файли: " +"**модифіковані**, **на стадії розробки** та **зафіксовані**:" + +#: ../../src/vcs/intro.txt:65 +msgid "" +"Modified means that you have changed the file but have not committed it to " +"your database yet." +msgstr "" +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " +"даних." + +#: ../../src/vcs/intro.txt:67 +msgid "" +"Staged means that you have marked a modified file in its current version to " +"go into your next commit snapshot." +msgstr "" +"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " +"він потрапив до наступного знімка фіксації." + +#: ../../src/vcs/intro.txt:69 +msgid "Committed means that the data is safely stored in your local database." +msgstr "" +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." + +#: ../../src/vcs/intro.txt:76 +msgid "The basic Git workflow goes something like this:" +msgstr "Базовий робочий процес Git'а виглядає приблизно так:" + +#: ../../src/vcs/intro.txt:78 +msgid "You modify files in your working tree." +msgstr "Ви змінюєте файли у вашому робочому дереві." + +#: ../../src/vcs/intro.txt:79 +msgid "" +"You selectively stage just those changes you want to be part of your next " +"commit, which adds only those changes to the staging area." +msgstr "" +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " +"коміт, що додає тільки ці зміни в область стабілізації." + +#: ../../src/vcs/intro.txt:81 +msgid "" +"You do a commit, which takes the files as they are in the staging area and " +"stores that snapshot permanently to your Git directory." +msgstr "" +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " +"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." + +#: ../../src/vcs/intro.txt:85 +msgid "Command line" +msgstr "Командний рядок" + +#: ../../src/vcs/intro.txt:87 +msgid "" +"There are a lot of different ways to use Git. There are the original command-" +"line tools, and there are many graphical user interfaces of varying " +"capabilities. For one, the command line is the only place you can run all " +"Git commands -- most of the GUIs implement only a partial subset of Git " +"functionality for simplicity. If you know how to run the command-line " +"version, you can probably also figure out how to run the GUI version, while " +"the opposite is not necessarily true. Also, while your choice of graphical " +"client is a matter of personal taste, all users will have the command-line " +"tools installed and available." +msgstr "" +"Існує багато різних способів використання Git'у. Існують оригінальні " +"інструменти командного рядка, а також багато графічних інтерфейсів " +"користувача з різними можливостями. З одного боку, командний рядок є єдиним " +"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " +"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " +"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " +"ймовірно, також зможете з'ясувати, як запустити версію з графічним " +"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " +"графічного клієнта є справою особистого смаку, всі користувачі матимуть " +"встановлені та доступні інструменти командного рядка." + +#: ../../src/vcs/setup.txt:-1 +msgid "version, control, system, vcs, git, setup" +msgstr "version, control, system, vcs, git, setup" + +#: ../../src/vcs/setup.txt:8 +msgid "Git Setup" +msgstr "Налаштування Git'а" + +#: ../../src/vcs/setup.txt:10 +msgid "" +"Now that you have Git on your system, you'll want to do a few things to " +"customize your Git environment. Git comes with a tool called ``git config`` " +"that lets you get and set configuration variables that control all aspects " +"of how Git looks and operates. These variables can be stored in three " +"different places:" +msgstr "" +"Тепер, коли у вашій системі встановлено Git, ви захочете зробити кілька " +"речей, щоб налаштувати середовище Git'а. Git постачається з інструментом під " +"назвою ``git config``, який дозволяє вам отримувати та встановлювати " +"конфігураційні змінні, що контролюють всі аспекти вигляду та роботи Git'у. " +"Ці змінні можна зберігати у трьох різних місцях:" + +#: ../../src/vcs/setup.txt:16 +msgid "" +"*[path]/etc/gitconfig* file: Contains values applied to every user on the " +"system and all their repositories. If you pass the option ``--system`` to " +"git config, it reads and writes from this file specifically. Because this is " +"a system configuration file, you would need administrative or superuser " +"privilege to make changes to it." +msgstr "" +"Файл *[path]/etc/gitconfig*: Містить значення, що застосовуються до кожного " +"користувача у системі та всіх його сховищ. Якщо ви передасте git config " +"параметр ``--system``, він буде читати і писати саме з цього файлу. Оскільки " +"це файл конфігурації системи, вам знадобляться адміністративні привілеї або " +"привілеї суперкористувача, щоб вносити до нього зміни." + +#: ../../src/vcs/setup.txt:21 +msgid "" +"*~/.gitconfig* or *~/.config/git/config* file: Values specific personally to " +"you, the user. You can make Git read and write to this file specifically by " +"passing the ``--global`` option, and this affects all of the repositories " +"you work with on your system." +msgstr "" +"*~/.gitconfig* або *~/.config/git/config* файл: Значення, характерні " +"особисто для вас, користувача. Ви можете змусити Git'а читати і писати до " +"цього файлу спеціально, передавши опцію ``--global``, і це вплине на всі " +"сховища, з якими ви працюєте у вашій системі." + +#: ../../src/vcs/setup.txt:25 +msgid "" +"*config* file in the Git directory (that is, *.git/config*) of whatever " +"repository you're currently using: Specific to that single repository. You " +"can force Git to read from and write to this file with the ``--local`` " +"option, but that is in fact the default. Unsurprisingly, you need to be " +"located somewhere in a Git repository for this option to work properly." +msgstr "" +"файл *config* у каталозі Git (тобто *.git/config*) того сховища, яке ви " +"зараз використовуєте: Специфічний для цього окремого сховища. Ви можете " +"змусити Git'а читати з цього файлу і писати до нього за допомогою опції ``--" +"local``, але за замовчуванням так і є. Не дивно, що для правильної роботи " +"цієї опції вам потрібно знаходитися десь у сховищі Git'а." + +#: ../../src/vcs/setup.txt:31 +msgid "" +"Each level overrides values in the previous level, so values in *.git/" +"config* trump those in *[path]/etc/gitconfig*." +msgstr "" +"Кожен рівень перевизначає значення попереднього рівня, тому значення у *.git/" +"config* мають перевагу над значеннями у *[path]/etc/gitconfig*." + +#: ../../src/vcs/setup.txt:34 +msgid "You can view all of your settings and where they are coming from using:" +msgstr "" +"Ви можете переглянути всі свої налаштування і те, звідки вони надходять, " +"використовуючи:" + +#: ../../src/vcs/setup.txt:41 +msgid "Your identity" +msgstr "Ваша особистість" + +#: ../../src/vcs/setup.txt:43 +msgid "" +"The first thing you should do when you install Git is to set your user name " +"and email address. This is important because every Git commit uses this " +"information." +msgstr "" +"Перше, що вам слід зробити під час встановлення Git'у, це вказати своє ім'я " +"користувача та адресу електронної пошти. Це важливо, оскільки кожна фіксація " +"Git'а використовує цю інформацію." From f0d41a3f121b8724f684bee3fe1c0ea4b8904ede Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 15:26:39 +0300 Subject: [PATCH 391/689] Update gitflow diagram --- assets/mermaid/git/gitflow.mmd | 3 --- 1 file changed, 3 deletions(-) diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd index 6287bbb6e..4e4eab73a 100644 --- a/assets/mermaid/git/gitflow.mmd +++ b/assets/mermaid/git/gitflow.mmd @@ -19,8 +19,6 @@ gitGraph commit branch feature/C commit - commit - commit %% working with hotfix branch checkout hotfix @@ -35,7 +33,6 @@ gitGraph %% working with feature-b branch checkout feature/A commit - commit checkout develop merge feature/A %% work with feature-a branch From ed4f0c2307994dc0b60ca8d00faeff7cc5924476 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 16:32:02 +0300 Subject: [PATCH 392/689] Add commit history section (git log) --- src/vcs/commits.txt | 235 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 231 insertions(+), 4 deletions(-) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index 2d01de180..3f6bc6d82 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -7,11 +7,238 @@ Working with Commits ############################################################################### -.. todo: - git log +Viewing the commit history +========================== + +After you have created several commits, or if you have cloned a repository with +an existing commit history, you'll probably want to look back to see what has +happened. The most basic and powerful tool to do this is the git log command. + +.. code-block:: shell + + $ git log + co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + commit 895dc24343fbbe25c3c94b25091ac64ac8aea53d + Author: Serhii Horodilov + Date: Wed Aug 16 14:42:10 2023 +0300 + + Add translations to VSC documents + +By default, with no arguments, ``git log`` lists the commits made in that +repository in reverse chronological order; that is, the most recent commits +show up first. As you can see, this command lists each commit with its SHA-1 +checksum, the author's name and email, the date written, and the commit +message. + +One of the more helpful options is ``-p`` or ``--patch``, which shows the +difference (the *patch* output) introduced in each commit. You can also +limit the number of log entries displayed, such as using ``-`` to +show only desired number of latest entries. + +.. code-block:: shell + + $ git log -p -1 + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd + index 6287bbb..4e4eab7 100644 + --- a/assets/mermaid/git/gitflow.mmd + +++ b/assets/mermaid/git/gitflow.mmd + @@ -19,8 +19,6 @@ gitGraph + commit + branch feature/C + commit + - commit + - commit + + %% working with hotfix branch + checkout hotfix + @@ -35,7 +33,6 @@ gitGraph + %% working with feature-b branch + checkout feature/A + commit + - commit + checkout develop + merge feature/A + %% work with feature-a branch + +This option display the same information but with a diff directly following +each entry. This is very helpful for code review or to quickly browse what +happened during a series of commits that a collaborator has added. You can also +use a series of summarizing options with ``git log``. + +If you want to see some abbreviated stats for each commit, you can use the +``--stat`` option: + +.. code-block:: shell + + $ git log -1 --stat + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + assets/mermaid/git/gitflow.mmd | 3 --- + 1 file changed, 3 deletions(-) + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + src/_locales/uk/LC_MESSAGES/vcs.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Another really useful option is ``--pretty``. This option changes the log +output to formats other that the default. A few prebuilt option values are +available for you to use. The ``oneline`` value for this option prints each +commit on a single line, which is useful if you're look a lot of commits. +In addition, the ``short``, ``full``, and ``fuller`` values show the output +in roughly the same format but with less or more information. + +.. code-block:: shell + + $ git log --pretty=oneline + 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram + 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 fixup! Add translations to VSC documents + 895dc24343fbbe25c3c94b25091ac64ac8aea53d Add translations to VSC documents + 30cb1a2db3d62210010b05df634e1ec87e5ef748 Fix apostrophe for VCS files + 79427a88defef82bc92482cfaf7da5fba3260f5e Add commit document (draft) + 0786a699e6901a6c968090422b3cec789402ad21 Update branches document + 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list + +.. code-block:: shell + + $ git log -10 --pretty=format:"%h - %an - %ad" + 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 + 1e131a0 - Serhii Horodilov - Wed Aug 16 14:46:39 2023 +0300 + 895dc24 - Serhii Horodilov - Wed Aug 16 14:42:10 2023 +0300 + 30cb1a2 - Serhii Horodilov - Wed Aug 16 14:41:49 2023 +0300 + 79427a8 - Serhii Horodilov - Mon Jul 31 14:31:08 2023 +0300 + 0786a69 - Serhii Horodilov - Mon Jul 31 14:30:54 2023 +0300 + 7471053 - Serhii Horodilov - Fri Jul 28 15:13:15 2023 +0300 + be60eb3 - Serhii Horodilov - Fri Jul 28 14:54:09 2023 +0300 + 24972b1 - Serhii Horodilov - Fri Jul 28 14:53:37 2023 +0300 + 4a9cfe4 - Serhii Horodilov - Fri Jul 28 14:32:53 2023 +0300 + ++-----------+---------------------------------------------------+ +| Specifier | Description of Output | ++===========+===================================================+ +| %H | Commit hash | ++-----------+---------------------------------------------------+ +| %h | Abbreviated commit hash | ++-----------+---------------------------------------------------+ +| %T | Tree hash | ++-----------+---------------------------------------------------+ +| %t | Abbreviated tree hash | ++-----------+---------------------------------------------------+ +| %P | Parent hashes | ++-----------+---------------------------------------------------+ +| %p | Abbreviated parent hashes | ++-----------+---------------------------------------------------+ +| %an | Author name | ++-----------+---------------------------------------------------+ +| %ae | Author email | ++-----------+---------------------------------------------------+ +| %ad | Author date (format respects the --date=option) | ++-----------+---------------------------------------------------+ +| %ar | Author date, relative | ++-----------+---------------------------------------------------+ +| %cn | Committer name | ++-----------+---------------------------------------------------+ +| %ce | Committer email | ++-----------+---------------------------------------------------+ +| %cd | Committer date | ++-----------+---------------------------------------------------+ +| %cr | Committer date, relative | ++-----------+---------------------------------------------------+ +| %s | Subject | ++-----------+---------------------------------------------------+ + +The ``oneline`` and ``format`` option values are particularly useful with +another ``log`` option called ``--graph``. This option adds a nice little +ASCII graph showing your branch and merge history: + +.. code-block:: shell + + $ git log --pretty=format:"%h %s" --graph + * f9b988f Created base documentation structure + * 3fabf55 Started global course updated + * 06662ae Merge pull request #13 from edu-python-course/master + |\ + | * 3579eea Update to suite edu-python-course/blog#74 + |/ + * 3fb7725 Merge remote-tracking branch 'origin/master' + |\ + | * 181b66d Merge remote-tracking branch 'origin/master' + | |\ + | * | 52e0ef8 add lesson21 hw + * | | 830a246 fix lesson32 hw + | |/ + |/| + * | 59697e9 fix lesson2 typos + * | a6f77db fix lesson2 typos + * | 213b220 fix lesson2 typos + * | 9b69f5f fix lesson2 typos + * | 6a0b9c8 fix lesson2 typos + |/ + * bda497f add lesson2 + +There are many more output-formatting options to ``git log``. Common options to +``git log`` are: + ++-------------------+---------------------------------------------------------+ +| Option | Description | ++===================+=========================================================+ +| -p | Show the patch introduced with each commit. | ++-------------------+---------------------------------------------------------+ +| --stat | Show statistics for files modified in each commit. | ++-------------------+---------------------------------------------------------+ +| --shortstat | Display only the changed/insertions/deletions line | +| | from the --stat command. | ++-------------------+---------------------------------------------------------+ +| --name-only | Show the list of files modified after the commit | +| | information. | ++-------------------+---------------------------------------------------------+ +| --name-status | Show the list of files affected with | +| | added/modified/deleted information as well. | ++-------------------+---------------------------------------------------------+ +| --abbrev-commit | Show only the first few characters of the SHA-1 | +| | checksum instead of all 40. | ++-------------------+---------------------------------------------------------+ +| --relative-date | Display the date in a relative format (for example, | +| | "2 weeks ago") instead of using the full date format. | ++-------------------+---------------------------------------------------------+ +| --graph | Display an ASCII graph of the branch and merge history | +| | beside the log output. | ++-------------------+---------------------------------------------------------+ +| --pretty | Show commits in an alternate format. Option values | +| | include oneline, short, full, fuller, and format (where | +| | you specify your own format). | ++-------------------+---------------------------------------------------------+ +| --oneline | Shorthand for --pretty=oneline --abbrev-commit used | +| | together. | ++-------------------+---------------------------------------------------------+ .. todo: - git checkout +git checkout .. todo: - git tag +git tag From 10a9b8bf5b86a89fb1729da11b31a23b0a81a0b2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 17:16:20 +0300 Subject: [PATCH 393/689] Finish git log section --- src/vcs/commits.txt | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index 3f6bc6d82..e178731cb 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -237,6 +237,52 @@ There are many more output-formatting options to ``git log``. Common options to | | together. | +-------------------+---------------------------------------------------------+ +Limiting log output +------------------- + +In addition to output-formatting options, ``git log`` takes a number of useful +limiting options; that is options that let you show only a subset of commits. +You've seen one such option already -- the ``-`` (e.g. ``-2`` or +``-10``) option, which displays only the given number of latest commits. + +.. code-block:: shell + + $ git log -5 --oneline + db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) + df9d599 Add commit history section (git log) + 8b755eb (origin/feature/vcs) Update gitflow diagram + 1e131a0 fixup! Add translations to VSC documents + 895dc24 Add translations to VSC documents + +However, the time-limiting options such as ``--since`` and ``--until`` are very +useful. For example, the command to get the list of commits made in the last +two weeks: + +.. code-block:: shell + + $ git log --since=2.weeks + +This command works with lots of formats - you can specify a specific date like +``"2022-02-24"``, or relative date such as ``"2 years 1 days 3 minutes ago"``. + +The last really useful option to pass to ``git log`` as a filter is a path. If +you specify a directory or file name, you can limit the log output to commits +that introduced a change to those files. This is always the last option and +is generally preceded by double dashes (``--``) to separate the paths from +the options: + +.. code-block:: shell + + $ git log --oneline -- src/vcs/basics.txt + 30cb1a2 Fix apostrophe for VCS files + 4a9cfe4 Move mermaid diagrams to a dedicated folder (git) + 80a1ab3 Add branching and merging document + 3978779 Add committing changes section + a40712a Add git ignore section + e92b12f Add making changes section + c23f8ff Update getting repository section + 582569d Add Git basics document (draft) + .. todo: git checkout From dc63c8500f93d7aee9935245cb51e8da8c3c07e0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 17:59:06 +0300 Subject: [PATCH 394/689] Add undoing things with git sections --- src/vcs/commits.txt | 119 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 2 deletions(-) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index e178731cb..c22661cfa 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -283,8 +283,123 @@ the options: c23f8ff Update getting repository section 582569d Add Git basics document (draft) +Undoing things +============== + +At any stage, you may want to undo something. + +One of the common undos takes place when you commit too early and possibly +forget to add some files, or you mess up your commit message. If you want +to redo that commit, make the additional changes you forgot, stage them, +and commit again using the ``--amend`` option: + +.. code-block:: shell + + $ git commit --amend + +E.g. + +.. code-block:: shell + + $ git commit -m "Initial commit" + $ git add forgotten_file + $ git commit --amend + +Unstaging a staged file +----------------------- + +The next two sections demonstrate how to work with your staging area and +working directory changes. The nice part is that the command you use to +determine the state of those two areas also reminds you how to undo changes +to them. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + modified: CONTRIBUTING.md + $ git reset HEAD CONTRIBUTING.md + Unstaged changes after reset: + M CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + modified: CONTRIBUTING.md + +Unmodifiyng a modified file +--------------------------- + +What if you realize that you don't want to keep your changes to some file? +You can easily unmodify it -- **revert** it back to what it looked like when +you last committed. ``git status`` also tells you how to do that: + +:: + + (use "git checkout -- ..." to discard changes in working directory) + +It tells you pretty explicitly how to discard the changes you've make. + +.. code-block:: shell + + $ git checkout -- CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + +Undoing things with git restore +------------------------------- + +.. versionadded:: 2.23.0 + ``git restore`` is basically an alternative to ``git reset``, from + Git version 2.23.0 onwards, Git will use ``git restore`` instead of + ``git reset`` for many undo operations. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + Changes to be committed: + (use "git restore --staged ..." to unstage) + modified: CONTRIBUTING.md + renamed: README.md -> README + $ git restore --staged CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: CONTRIBUTING.md + $ git restore CONTRIBUTING.md + $ git status + On branch master + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + +.. important:: + It’s important to understand that git restore is a dangerous + command. Any local changes you made to that file are gone -- Git just + replaced that file with the last staged or committed version. Don't ever + use this command unless you absolutely know that you don’t want those + unsaved local changes. + .. todo: -git checkout + git checkout .. todo: -git tag + git tag From 61411680cc2f45b42ae0475add8406745415501e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 18:32:27 +0300 Subject: [PATCH 395/689] Fix code-block outputs --- src/vcs/commits.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt index c22661cfa..5c14529fb 100644 --- a/src/vcs/commits.txt +++ b/src/vcs/commits.txt @@ -318,6 +318,7 @@ to them. $ git add * $ git status On branch master + Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README @@ -327,9 +328,11 @@ to them. M CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README + Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) @@ -353,6 +356,7 @@ It tells you pretty explicitly how to discard the changes you've make. $ git checkout -- CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git reset HEAD ..." to unstage) renamed: README.md -> README @@ -370,6 +374,7 @@ Undoing things with git restore $ git add * $ git status On branch master + Changes to be committed: (use "git restore --staged ..." to unstage) modified: CONTRIBUTING.md @@ -377,9 +382,11 @@ Undoing things with git restore $ git restore --staged CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git restore --staged ..." to unstage) renamed: README.md -> README + Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) @@ -387,6 +394,7 @@ Undoing things with git restore $ git restore CONTRIBUTING.md $ git status On branch master + Changes to be committed: (use "git restore --staged ..." to unstage) renamed: README.md -> README From 436a62bd30f37380cca1dc2918efd126dbb184ee Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 18:45:23 +0300 Subject: [PATCH 396/689] Move commits.txt content to "basics" document --- src/vcs/basics.txt | 399 ++++++++++++++++++++++++++++++++++++++++++ src/vcs/commits.txt | 413 -------------------------------------------- src/vcs/index.txt | 1 - 3 files changed, 399 insertions(+), 414 deletions(-) delete mode 100644 src/vcs/commits.txt diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 4d1b56763..99bf22729 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -339,3 +339,402 @@ a single character; and brackets enclosing characters separated by a hyphen ([0-9]) matches any character between them (in this case 0 through 9). You can also use two asterisks to match nested directories; a/\*\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on. + +Viewing the commit history +========================== + +After you have created several commits, or if you have cloned a repository with +an existing commit history, you'll probably want to look back to see what has +happened. The most basic and powerful tool to do this is the git log command. + +.. code-block:: shell + + $ git log + co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + commit 895dc24343fbbe25c3c94b25091ac64ac8aea53d + Author: Serhii Horodilov + Date: Wed Aug 16 14:42:10 2023 +0300 + + Add translations to VSC documents + +By default, with no arguments, ``git log`` lists the commits made in that +repository in reverse chronological order; that is, the most recent commits +show up first. As you can see, this command lists each commit with its SHA-1 +checksum, the author's name and email, the date written, and the commit +message. + +One of the more helpful options is ``-p`` or ``--patch``, which shows the +difference (the *patch* output) introduced in each commit. You can also +limit the number of log entries displayed, such as using ``-`` to +show only desired number of latest entries. + +.. code-block:: shell + + $ git log -p -1 + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd + index 6287bbb..4e4eab7 100644 + --- a/assets/mermaid/git/gitflow.mmd + +++ b/assets/mermaid/git/gitflow.mmd + @@ -19,8 +19,6 @@ gitGraph + commit + branch feature/C + commit + - commit + - commit + + %% working with hotfix branch + checkout hotfix + @@ -35,7 +33,6 @@ gitGraph + %% working with feature-b branch + checkout feature/A + commit + - commit + checkout develop + merge feature/A + %% work with feature-a branch + +This option display the same information but with a diff directly following +each entry. This is very helpful for code review or to quickly browse what +happened during a series of commits that a collaborator has added. You can also +use a series of summarizing options with ``git log``. + +If you want to see some abbreviated stats for each commit, you can use the +``--stat`` option: + +.. code-block:: shell + + $ git log -1 --stat + commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) + Author: Serhii Horodilov + Date: Wed Aug 16 15:26:39 2023 +0300 + + Update gitflow diagram + + assets/mermaid/git/gitflow.mmd | 3 --- + 1 file changed, 3 deletions(-) + + commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 + Author: Serhii Horodilov + Date: Wed Aug 16 14:46:39 2023 +0300 + + fixup! Add translations to VSC documents + + src/_locales/uk/LC_MESSAGES/vcs.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Another really useful option is ``--pretty``. This option changes the log +output to formats other that the default. A few prebuilt option values are +available for you to use. The ``oneline`` value for this option prints each +commit on a single line, which is useful if you're look a lot of commits. +In addition, the ``short``, ``full``, and ``fuller`` values show the output +in roughly the same format but with less or more information. + +.. code-block:: shell + + $ git log --pretty=oneline + 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram + 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 fixup! Add translations to VSC documents + 895dc24343fbbe25c3c94b25091ac64ac8aea53d Add translations to VSC documents + 30cb1a2db3d62210010b05df634e1ec87e5ef748 Fix apostrophe for VCS files + 79427a88defef82bc92482cfaf7da5fba3260f5e Add commit document (draft) + 0786a699e6901a6c968090422b3cec789402ad21 Update branches document + 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list + +.. code-block:: shell + + $ git log -10 --pretty=format:"%h - %an - %ad" + 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 + 1e131a0 - Serhii Horodilov - Wed Aug 16 14:46:39 2023 +0300 + 895dc24 - Serhii Horodilov - Wed Aug 16 14:42:10 2023 +0300 + 30cb1a2 - Serhii Horodilov - Wed Aug 16 14:41:49 2023 +0300 + 79427a8 - Serhii Horodilov - Mon Jul 31 14:31:08 2023 +0300 + 0786a69 - Serhii Horodilov - Mon Jul 31 14:30:54 2023 +0300 + 7471053 - Serhii Horodilov - Fri Jul 28 15:13:15 2023 +0300 + be60eb3 - Serhii Horodilov - Fri Jul 28 14:54:09 2023 +0300 + 24972b1 - Serhii Horodilov - Fri Jul 28 14:53:37 2023 +0300 + 4a9cfe4 - Serhii Horodilov - Fri Jul 28 14:32:53 2023 +0300 + ++-----------+---------------------------------------------------+ +| Specifier | Description of Output | ++===========+===================================================+ +| %H | Commit hash | ++-----------+---------------------------------------------------+ +| %h | Abbreviated commit hash | ++-----------+---------------------------------------------------+ +| %T | Tree hash | ++-----------+---------------------------------------------------+ +| %t | Abbreviated tree hash | ++-----------+---------------------------------------------------+ +| %P | Parent hashes | ++-----------+---------------------------------------------------+ +| %p | Abbreviated parent hashes | ++-----------+---------------------------------------------------+ +| %an | Author name | ++-----------+---------------------------------------------------+ +| %ae | Author email | ++-----------+---------------------------------------------------+ +| %ad | Author date (format respects the --date=option) | ++-----------+---------------------------------------------------+ +| %ar | Author date, relative | ++-----------+---------------------------------------------------+ +| %cn | Committer name | ++-----------+---------------------------------------------------+ +| %ce | Committer email | ++-----------+---------------------------------------------------+ +| %cd | Committer date | ++-----------+---------------------------------------------------+ +| %cr | Committer date, relative | ++-----------+---------------------------------------------------+ +| %s | Subject | ++-----------+---------------------------------------------------+ + +The ``oneline`` and ``format`` option values are particularly useful with +another ``log`` option called ``--graph``. This option adds a nice little +ASCII graph showing your branch and merge history: + +.. code-block:: shell + + $ git log --pretty=format:"%h %s" --graph + * f9b988f Created base documentation structure + * 3fabf55 Started global course updated + * 06662ae Merge pull request #13 from edu-python-course/master + |\ + | * 3579eea Update to suite edu-python-course/blog#74 + |/ + * 3fb7725 Merge remote-tracking branch 'origin/master' + |\ + | * 181b66d Merge remote-tracking branch 'origin/master' + | |\ + | * | 52e0ef8 add lesson21 hw + * | | 830a246 fix lesson32 hw + | |/ + |/| + * | 59697e9 fix lesson2 typos + * | a6f77db fix lesson2 typos + * | 213b220 fix lesson2 typos + * | 9b69f5f fix lesson2 typos + * | 6a0b9c8 fix lesson2 typos + |/ + * bda497f add lesson2 + +There are many more output-formatting options to ``git log``. Common options to +``git log`` are: + ++-------------------+---------------------------------------------------------+ +| Option | Description | ++===================+=========================================================+ +| -p | Show the patch introduced with each commit. | ++-------------------+---------------------------------------------------------+ +| --stat | Show statistics for files modified in each commit. | ++-------------------+---------------------------------------------------------+ +| --shortstat | Display only the changed/insertions/deletions line | +| | from the --stat command. | ++-------------------+---------------------------------------------------------+ +| --name-only | Show the list of files modified after the commit | +| | information. | ++-------------------+---------------------------------------------------------+ +| --name-status | Show the list of files affected with | +| | added/modified/deleted information as well. | ++-------------------+---------------------------------------------------------+ +| --abbrev-commit | Show only the first few characters of the SHA-1 | +| | checksum instead of all 40. | ++-------------------+---------------------------------------------------------+ +| --relative-date | Display the date in a relative format (for example, | +| | "2 weeks ago") instead of using the full date format. | ++-------------------+---------------------------------------------------------+ +| --graph | Display an ASCII graph of the branch and merge history | +| | beside the log output. | ++-------------------+---------------------------------------------------------+ +| --pretty | Show commits in an alternate format. Option values | +| | include oneline, short, full, fuller, and format (where | +| | you specify your own format). | ++-------------------+---------------------------------------------------------+ +| --oneline | Shorthand for --pretty=oneline --abbrev-commit used | +| | together. | ++-------------------+---------------------------------------------------------+ + +Limiting log output +------------------- + +In addition to output-formatting options, ``git log`` takes a number of useful +limiting options; that is options that let you show only a subset of commits. +You've seen one such option already -- the ``-`` (e.g. ``-2`` or +``-10``) option, which displays only the given number of latest commits. + +.. code-block:: shell + + $ git log -5 --oneline + db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) + df9d599 Add commit history section (git log) + 8b755eb (origin/feature/vcs) Update gitflow diagram + 1e131a0 fixup! Add translations to VSC documents + 895dc24 Add translations to VSC documents + +However, the time-limiting options such as ``--since`` and ``--until`` are very +useful. For example, the command to get the list of commits made in the last +two weeks: + +.. code-block:: shell + + $ git log --since=2.weeks + +This command works with lots of formats - you can specify a specific date like +``"2022-02-24"``, or relative date such as ``"2 years 1 days 3 minutes ago"``. + +The last really useful option to pass to ``git log`` as a filter is a path. If +you specify a directory or file name, you can limit the log output to commits +that introduced a change to those files. This is always the last option and +is generally preceded by double dashes (``--``) to separate the paths from +the options: + +.. code-block:: shell + + $ git log --oneline -- src/vcs/basics.txt + 30cb1a2 Fix apostrophe for VCS files + 4a9cfe4 Move mermaid diagrams to a dedicated folder (git) + 80a1ab3 Add branching and merging document + 3978779 Add committing changes section + a40712a Add git ignore section + e92b12f Add making changes section + c23f8ff Update getting repository section + 582569d Add Git basics document (draft) + +Undoing things +============== + +At any stage, you may want to undo something. + +One of the common undos takes place when you commit too early and possibly +forget to add some files, or you mess up your commit message. If you want +to redo that commit, make the additional changes you forgot, stage them, +and commit again using the ``--amend`` option: + +.. code-block:: shell + + $ git commit --amend + +E.g. + +.. code-block:: shell + + $ git commit -m "Initial commit" + $ git add forgotten_file + $ git commit --amend + +Unstaging a staged file +----------------------- + +The next two sections demonstrate how to work with your staging area and +working directory changes. The nice part is that the command you use to +determine the state of those two areas also reminds you how to undo changes +to them. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + modified: CONTRIBUTING.md + $ git reset HEAD CONTRIBUTING.md + Unstaged changes after reset: + M CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + modified: CONTRIBUTING.md + +Unmodifiyng a modified file +--------------------------- + +What if you realize that you don't want to keep your changes to some file? +You can easily unmodify it -- **revert** it back to what it looked like when +you last committed. ``git status`` also tells you how to do that: + +:: + + (use "git checkout -- ..." to discard changes in working directory) + +It tells you pretty explicitly how to discard the changes you've make. + +.. code-block:: shell + + $ git checkout -- CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git reset HEAD ..." to unstage) + renamed: README.md -> README + +Undoing things with git restore +------------------------------- + +.. versionadded:: 2.23.0 + ``git restore`` is basically an alternative to ``git reset``, from + Git version 2.23.0 onwards, Git will use ``git restore`` instead of + ``git reset`` for many undo operations. + +.. code-block:: shell + + $ git add * + $ git status + On branch master + + Changes to be committed: + (use "git restore --staged ..." to unstage) + modified: CONTRIBUTING.md + renamed: README.md -> README + $ git restore --staged CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: CONTRIBUTING.md + $ git restore CONTRIBUTING.md + $ git status + On branch master + + Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + +.. important:: + It’s important to understand that git restore is a dangerous + command. Any local changes you made to that file are gone -- Git just + replaced that file with the last staged or committed version. Don't ever + use this command unless you absolutely know that you don’t want those + unsaved local changes. diff --git a/src/vcs/commits.txt b/src/vcs/commits.txt deleted file mode 100644 index 5c14529fb..000000000 --- a/src/vcs/commits.txt +++ /dev/null @@ -1,413 +0,0 @@ -.. meta:: - :description: Version control system - :author: Serhii Horodilov - :keywords: version, control, system, vcs, git, history, commit - -############################################################################### - Working with Commits -############################################################################### - -Viewing the commit history -========================== - -After you have created several commits, or if you have cloned a repository with -an existing commit history, you'll probably want to look back to see what has -happened. The most basic and powerful tool to do this is the git log command. - -.. code-block:: shell - - $ git log - co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) - Author: Serhii Horodilov - Date: Wed Aug 16 15:26:39 2023 +0300 - - Update gitflow diagram - - commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 - Author: Serhii Horodilov - Date: Wed Aug 16 14:46:39 2023 +0300 - - fixup! Add translations to VSC documents - - commit 895dc24343fbbe25c3c94b25091ac64ac8aea53d - Author: Serhii Horodilov - Date: Wed Aug 16 14:42:10 2023 +0300 - - Add translations to VSC documents - -By default, with no arguments, ``git log`` lists the commits made in that -repository in reverse chronological order; that is, the most recent commits -show up first. As you can see, this command lists each commit with its SHA-1 -checksum, the author's name and email, the date written, and the commit -message. - -One of the more helpful options is ``-p`` or ``--patch``, which shows the -difference (the *patch* output) introduced in each commit. You can also -limit the number of log entries displayed, such as using ``-`` to -show only desired number of latest entries. - -.. code-block:: shell - - $ git log -p -1 - commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) - Author: Serhii Horodilov - Date: Wed Aug 16 15:26:39 2023 +0300 - - Update gitflow diagram - - diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd - index 6287bbb..4e4eab7 100644 - --- a/assets/mermaid/git/gitflow.mmd - +++ b/assets/mermaid/git/gitflow.mmd - @@ -19,8 +19,6 @@ gitGraph - commit - branch feature/C - commit - - commit - - commit - - %% working with hotfix branch - checkout hotfix - @@ -35,7 +33,6 @@ gitGraph - %% working with feature-b branch - checkout feature/A - commit - - commit - checkout develop - merge feature/A - %% work with feature-a branch - -This option display the same information but with a diff directly following -each entry. This is very helpful for code review or to quickly browse what -happened during a series of commits that a collaborator has added. You can also -use a series of summarizing options with ``git log``. - -If you want to see some abbreviated stats for each commit, you can use the -``--stat`` option: - -.. code-block:: shell - - $ git log -1 --stat - commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) - Author: Serhii Horodilov - Date: Wed Aug 16 15:26:39 2023 +0300 - - Update gitflow diagram - - assets/mermaid/git/gitflow.mmd | 3 --- - 1 file changed, 3 deletions(-) - - commit 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 - Author: Serhii Horodilov - Date: Wed Aug 16 14:46:39 2023 +0300 - - fixup! Add translations to VSC documents - - src/_locales/uk/LC_MESSAGES/vcs.po | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -Another really useful option is ``--pretty``. This option changes the log -output to formats other that the default. A few prebuilt option values are -available for you to use. The ``oneline`` value for this option prints each -commit on a single line, which is useful if you're look a lot of commits. -In addition, the ``short``, ``full``, and ``fuller`` values show the output -in roughly the same format but with less or more information. - -.. code-block:: shell - - $ git log --pretty=oneline - 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram - 1e131a0c9faee2a22ea2bae8f31f8c7ee04fefc5 fixup! Add translations to VSC documents - 895dc24343fbbe25c3c94b25091ac64ac8aea53d Add translations to VSC documents - 30cb1a2db3d62210010b05df634e1ec87e5ef748 Fix apostrophe for VCS files - 79427a88defef82bc92482cfaf7da5fba3260f5e Add commit document (draft) - 0786a699e6901a6c968090422b3cec789402ad21 Update branches document - 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list - -.. code-block:: shell - - $ git log -10 --pretty=format:"%h - %an - %ad" - 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 - 1e131a0 - Serhii Horodilov - Wed Aug 16 14:46:39 2023 +0300 - 895dc24 - Serhii Horodilov - Wed Aug 16 14:42:10 2023 +0300 - 30cb1a2 - Serhii Horodilov - Wed Aug 16 14:41:49 2023 +0300 - 79427a8 - Serhii Horodilov - Mon Jul 31 14:31:08 2023 +0300 - 0786a69 - Serhii Horodilov - Mon Jul 31 14:30:54 2023 +0300 - 7471053 - Serhii Horodilov - Fri Jul 28 15:13:15 2023 +0300 - be60eb3 - Serhii Horodilov - Fri Jul 28 14:54:09 2023 +0300 - 24972b1 - Serhii Horodilov - Fri Jul 28 14:53:37 2023 +0300 - 4a9cfe4 - Serhii Horodilov - Fri Jul 28 14:32:53 2023 +0300 - -+-----------+---------------------------------------------------+ -| Specifier | Description of Output | -+===========+===================================================+ -| %H | Commit hash | -+-----------+---------------------------------------------------+ -| %h | Abbreviated commit hash | -+-----------+---------------------------------------------------+ -| %T | Tree hash | -+-----------+---------------------------------------------------+ -| %t | Abbreviated tree hash | -+-----------+---------------------------------------------------+ -| %P | Parent hashes | -+-----------+---------------------------------------------------+ -| %p | Abbreviated parent hashes | -+-----------+---------------------------------------------------+ -| %an | Author name | -+-----------+---------------------------------------------------+ -| %ae | Author email | -+-----------+---------------------------------------------------+ -| %ad | Author date (format respects the --date=option) | -+-----------+---------------------------------------------------+ -| %ar | Author date, relative | -+-----------+---------------------------------------------------+ -| %cn | Committer name | -+-----------+---------------------------------------------------+ -| %ce | Committer email | -+-----------+---------------------------------------------------+ -| %cd | Committer date | -+-----------+---------------------------------------------------+ -| %cr | Committer date, relative | -+-----------+---------------------------------------------------+ -| %s | Subject | -+-----------+---------------------------------------------------+ - -The ``oneline`` and ``format`` option values are particularly useful with -another ``log`` option called ``--graph``. This option adds a nice little -ASCII graph showing your branch and merge history: - -.. code-block:: shell - - $ git log --pretty=format:"%h %s" --graph - * f9b988f Created base documentation structure - * 3fabf55 Started global course updated - * 06662ae Merge pull request #13 from edu-python-course/master - |\ - | * 3579eea Update to suite edu-python-course/blog#74 - |/ - * 3fb7725 Merge remote-tracking branch 'origin/master' - |\ - | * 181b66d Merge remote-tracking branch 'origin/master' - | |\ - | * | 52e0ef8 add lesson21 hw - * | | 830a246 fix lesson32 hw - | |/ - |/| - * | 59697e9 fix lesson2 typos - * | a6f77db fix lesson2 typos - * | 213b220 fix lesson2 typos - * | 9b69f5f fix lesson2 typos - * | 6a0b9c8 fix lesson2 typos - |/ - * bda497f add lesson2 - -There are many more output-formatting options to ``git log``. Common options to -``git log`` are: - -+-------------------+---------------------------------------------------------+ -| Option | Description | -+===================+=========================================================+ -| -p | Show the patch introduced with each commit. | -+-------------------+---------------------------------------------------------+ -| --stat | Show statistics for files modified in each commit. | -+-------------------+---------------------------------------------------------+ -| --shortstat | Display only the changed/insertions/deletions line | -| | from the --stat command. | -+-------------------+---------------------------------------------------------+ -| --name-only | Show the list of files modified after the commit | -| | information. | -+-------------------+---------------------------------------------------------+ -| --name-status | Show the list of files affected with | -| | added/modified/deleted information as well. | -+-------------------+---------------------------------------------------------+ -| --abbrev-commit | Show only the first few characters of the SHA-1 | -| | checksum instead of all 40. | -+-------------------+---------------------------------------------------------+ -| --relative-date | Display the date in a relative format (for example, | -| | "2 weeks ago") instead of using the full date format. | -+-------------------+---------------------------------------------------------+ -| --graph | Display an ASCII graph of the branch and merge history | -| | beside the log output. | -+-------------------+---------------------------------------------------------+ -| --pretty | Show commits in an alternate format. Option values | -| | include oneline, short, full, fuller, and format (where | -| | you specify your own format). | -+-------------------+---------------------------------------------------------+ -| --oneline | Shorthand for --pretty=oneline --abbrev-commit used | -| | together. | -+-------------------+---------------------------------------------------------+ - -Limiting log output -------------------- - -In addition to output-formatting options, ``git log`` takes a number of useful -limiting options; that is options that let you show only a subset of commits. -You've seen one such option already -- the ``-`` (e.g. ``-2`` or -``-10``) option, which displays only the given number of latest commits. - -.. code-block:: shell - - $ git log -5 --oneline - db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) - df9d599 Add commit history section (git log) - 8b755eb (origin/feature/vcs) Update gitflow diagram - 1e131a0 fixup! Add translations to VSC documents - 895dc24 Add translations to VSC documents - -However, the time-limiting options such as ``--since`` and ``--until`` are very -useful. For example, the command to get the list of commits made in the last -two weeks: - -.. code-block:: shell - - $ git log --since=2.weeks - -This command works with lots of formats - you can specify a specific date like -``"2022-02-24"``, or relative date such as ``"2 years 1 days 3 minutes ago"``. - -The last really useful option to pass to ``git log`` as a filter is a path. If -you specify a directory or file name, you can limit the log output to commits -that introduced a change to those files. This is always the last option and -is generally preceded by double dashes (``--``) to separate the paths from -the options: - -.. code-block:: shell - - $ git log --oneline -- src/vcs/basics.txt - 30cb1a2 Fix apostrophe for VCS files - 4a9cfe4 Move mermaid diagrams to a dedicated folder (git) - 80a1ab3 Add branching and merging document - 3978779 Add committing changes section - a40712a Add git ignore section - e92b12f Add making changes section - c23f8ff Update getting repository section - 582569d Add Git basics document (draft) - -Undoing things -============== - -At any stage, you may want to undo something. - -One of the common undos takes place when you commit too early and possibly -forget to add some files, or you mess up your commit message. If you want -to redo that commit, make the additional changes you forgot, stage them, -and commit again using the ``--amend`` option: - -.. code-block:: shell - - $ git commit --amend - -E.g. - -.. code-block:: shell - - $ git commit -m "Initial commit" - $ git add forgotten_file - $ git commit --amend - -Unstaging a staged file ------------------------ - -The next two sections demonstrate how to work with your staging area and -working directory changes. The nice part is that the command you use to -determine the state of those two areas also reminds you how to undo changes -to them. - -.. code-block:: shell - - $ git add * - $ git status - On branch master - - Changes to be committed: - (use "git reset HEAD ..." to unstage) - renamed: README.md -> README - modified: CONTRIBUTING.md - $ git reset HEAD CONTRIBUTING.md - Unstaged changes after reset: - M CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git reset HEAD ..." to unstage) - renamed: README.md -> README - - Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git checkout -- ..." to discard changes in working directory) - modified: CONTRIBUTING.md - -Unmodifiyng a modified file ---------------------------- - -What if you realize that you don't want to keep your changes to some file? -You can easily unmodify it -- **revert** it back to what it looked like when -you last committed. ``git status`` also tells you how to do that: - -:: - - (use "git checkout -- ..." to discard changes in working directory) - -It tells you pretty explicitly how to discard the changes you've make. - -.. code-block:: shell - - $ git checkout -- CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git reset HEAD ..." to unstage) - renamed: README.md -> README - -Undoing things with git restore -------------------------------- - -.. versionadded:: 2.23.0 - ``git restore`` is basically an alternative to ``git reset``, from - Git version 2.23.0 onwards, Git will use ``git restore`` instead of - ``git reset`` for many undo operations. - -.. code-block:: shell - - $ git add * - $ git status - On branch master - - Changes to be committed: - (use "git restore --staged ..." to unstage) - modified: CONTRIBUTING.md - renamed: README.md -> README - $ git restore --staged CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git restore --staged ..." to unstage) - renamed: README.md -> README - - Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git restore ..." to discard changes in working directory) - modified: CONTRIBUTING.md - $ git restore CONTRIBUTING.md - $ git status - On branch master - - Changes to be committed: - (use "git restore --staged ..." to unstage) - renamed: README.md -> README - -.. important:: - It’s important to understand that git restore is a dangerous - command. Any local changes you made to that file are gone -- Git just - replaced that file with the last staged or committed version. Don't ever - use this command unless you absolutely know that you don’t want those - unsaved local changes. - -.. todo: - git checkout - -.. todo: - git tag diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 817e702fb..e39ae9e5d 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,6 +13,5 @@ intro setup basics - commits branch github From 4491d4403c5f4888d3585f4f068795fbede7175b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 19:24:46 +0300 Subject: [PATCH 397/689] Add tagging section --- src/vcs/index.txt | 1 + src/vcs/tagging.txt | 155 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/vcs/tagging.txt diff --git a/src/vcs/index.txt b/src/vcs/index.txt index e39ae9e5d..d197519b1 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -13,5 +13,6 @@ intro setup basics + tagging branch github diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt new file mode 100644 index 000000000..1b21fc4c8 --- /dev/null +++ b/src/vcs/tagging.txt @@ -0,0 +1,155 @@ + +############################################################################### + Tagging +############################################################################### + +Like most VCSs, Git has the ability to tag specific points in a repository's +history as being important. Typically, people use this functionality to mark +release points (``v1.0``, ``v2.0`` and so on). + +Listing tags +============ + +Listing the existing tags in Git is straightforward. Just type ``git tag`` +(with optional ``-l`` or ``--list``). + +.. code-block:: shell + + $ git tag + v1.0 + v2.0 + +This command lists the tags in alphabetical order, the order in which they are +displayed has no real importance. You can also search for tags that match +a particular pattern. The Git source repo, for instance contains more than +500 tags. If you're interested only in looking at the 1.8.4 series, you can +run this: + +.. code-block:: shell + + $ git tag -l "1.8.5*" + v1.8.5 + v1.8.5-rc0 + v1.8.5-rc1 + v1.8.5-rc2 + v1.8.5-rc3 + +Creating tags +============= + +Git supports two types of tags: *lightweight* and *annotated*. + +A lightweight tag is very much like a branch that doesn't change -- it's just +a pointer to a specific commit. + +Annotated tags, however, are stored as full objects in the Git database. +They're checksummed; contain the tagger name, email, and date; have a tagging +message; and can be signed and verified with GBU Privacy Guard (GPG). It's +generally recommended that you create annotated tags so you can have all this +information; but if you want a temporary tag or for some reason don't want to +keep the other information, lightweight tags are available too. + +.. rubric:: Annotated tags + +Creating an annotated tag in Git is simple. The easiest way is to specify +``-a`` when you run the ``tag`` command: + +.. code-block:: shell + + $ git tag -a VCS -m "Version Control System - tags" + $ git tag + VCS + $ git show VCS + tag VCS + Tagger: Serhii Horodilov + Date: Wed Aug 16 19:04:24 2023 +0300 + + Version Control System - tags + +.. rubric:: Lightweight tags + +Another way to tag commits is with a lightweight tag. this is basically +the commit checksum stored in a file -- no other information is kept. To +create a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` +options, just provide a tag name: + +.. code-block:: shell + + $ git tag tagging + $ git tag + VCS + tagging + $ git show tagging + commit 21ae739f891c6ee6a77d8986402cb1e69a9b6a88 (HEAD -> feature/vcs, tag: tagging, tag: VCS) + Author: Serhii Horodilov + Date: Wed Aug 16 18:45:23 2023 +0300 + + Move commits.txt content to "basics" document + +.. rubric:: Tagging later + +You can also tag commits after you're moved past them. + +.. code-block:: shell + + $ git log --pretty=format:%h -3 + 21ae739 + ea4ac00 + df216cf + $ git tag v1.4 ea4ac00 + $ git show v1.4 + commit ea4ac002604ca897ba05c846d63af1618c123b6f (tag: v1.4) + Author: Serhii Horodilov + Date: Wed Aug 16 18:32:27 2023 +0300 + + Fix code-block outputs + +Deleting tags +============= + +To delete a tag on your local repository, you can use ``git tag -d ``. + +.. code-block:: shell + + $ git tag -d VCS + Deleted tag 'VCS' (was eef3831) + +Checking out tags +================= + +If you want to view the versions of files a tag is pointing to, you can do +a ``git checkout`` of that tag, although this puts your repository in +"detached HEAD" state, which has some ill side effects: + +.. code-block:: shell + + $ git checkout VCS + Note: switching to 'vcs'. + + You are in 'detached HEAD' state. You can look around, make experimental + changes and commit them, and you can discard any commits you make in this + state without impacting any branches by switching back to a branch. + + If you want to create a new branch to retain commits you create, you may + do so (now or later) by using -c with the switch command. Example: + + git switch -c + + Or undo this operation with: + + git switch - + + Turn off this advice by setting config variable advice.detachedHead to false + + HEAD is now at 60565a1 Fix GitFlow branches list + +In “detached HEAD” state, if you make changes and then create a commit, the tag +will stay the same, but your new commit won’t belong to any branch and will be +unreachable, except by the exact commit hash. Thus, if you need to make changes +-- say you’re fixing a bug on an older version, for instance -- you will +generally want to create a branch: + +.. code-block:: shell + + $ git checkout -b vcs-tag-branch VCS + Switched to a new branch 'vcs-tag-branch' From 90ed82a525d960bc3fae229a7c7d54c24bc303f3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 19:42:14 +0300 Subject: [PATCH 398/689] Update branches document: switching branches --- src/vcs/branch.txt | 77 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 5b2daa8a8..04556bac4 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -52,27 +52,72 @@ creation using: git checkout -b [parent_commit] -.. todo: - Add merge section +Switching branches +================== -.. mermaid:: /../assets/mermaid/git/merge-1.mmd - :align: center - :caption: Fast-forward merge +To switch to an existing branch, you run the ``git checkout`` command. -.. mermaid:: /../assets/mermaid/git/merge-2.mmd - :align: center - :caption: Merge commit +.. code-block:: shell -.. todo: - Add rebase section + $ git branch + devel + feature/contributing + feature/legacy + feature/lib-ms + feature/libms + feature/pdf-builder + * feature/vcs + master + + $ git checkout devel + Switched to branch 'devel' + Your branch is up to date with 'origin/devel'. + +Basic branching +=============== -.. mermaid:: /../assets/mermaid/git/rebase-1.mmd - :align: center - :caption: Before rebase +First, let's say you're working on your project and have a couple of commits +already on the ``master`` branch. You've decided that you're going to work on +issue #53 in whatever issue-tracking system your company uses. To create a new +branch and switch to it at the same time, you can run the ``git checkout`` +command with the ``-b`` switch: -.. mermaid:: /../assets/mermaid/git/rebase-2.mmd - :align: center - :caption: After rebase +.. code-block:: shell + + $ git checkout -b feature/issue53 + Switched to a new branch "feature/issue53" + +This is shorthand for: + +.. code-block:: shell + + $ git branch feature/issue53 + $ git checkout feature/issue53 + +In deed this creates a new branch pointer, aimed to the latest commit present +on ``master`` branch. + +.. todo: + Add merge section +.. + .. mermaid:: /../assets/mermaid/git/merge-1.mmd + :align: center + :caption: Fast-forward merge +.. + .. mermaid:: /../assets/mermaid/git/merge-2.mmd + :align: center + :caption: Merge commit + +.. todo: + Add rebase section +.. + .. mermaid:: /../assets/mermaid/git/rebase-1.mmd + :align: center + :caption: Before rebase +.. + .. mermaid:: /../assets/mermaid/git/rebase-2.mmd + :align: center + :caption: After rebase .. todo: Describe merging and cherry-pick From 413beaa42a22a252cc6691f562a8b94808c3657a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 20:32:32 +0300 Subject: [PATCH 399/689] Change mermaid diagrams: default branch renamed to "master" --- assets/mermaid/git/cherry-pick.mmd | 9 +++++---- assets/mermaid/git/commits.mmd | 3 ++- assets/mermaid/git/gitflow.mmd | 7 ++++--- assets/mermaid/git/merge-1.mmd | 3 ++- assets/mermaid/git/merge-2.mmd | 3 ++- assets/mermaid/git/rebase-1.mmd | 3 ++- assets/mermaid/git/rebase-2.mmd | 1 + 7 files changed, 18 insertions(+), 11 deletions(-) diff --git a/assets/mermaid/git/cherry-pick.mmd b/assets/mermaid/git/cherry-pick.mmd index 29790cd8b..683c2fdf9 100644 --- a/assets/mermaid/git/cherry-pick.mmd +++ b/assets/mermaid/git/cherry-pick.mmd @@ -1,18 +1,19 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch develop - checkout main + checkout master commit checkout develop commit - checkout main + checkout master commit checkout develop commit id: "Important commit" - checkout main + checkout master commit checkout develop commit - checkout main + checkout master cherry-pick id: "Important commit" commit diff --git a/assets/mermaid/git/commits.mmd b/assets/mermaid/git/commits.mmd index a5dddb195..66263b0f9 100644 --- a/assets/mermaid/git/commits.mmd +++ b/assets/mermaid/git/commits.mmd @@ -1,3 +1,4 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph: commit id: "Initial commit" commit id: "383a7630" type: HIGHLIGHT @@ -5,5 +6,5 @@ gitGraph: commit id: "1fe791ec" branch testing commit id: "01cda149" - checkout main + checkout master commit id: "1c060f79" diff --git a/assets/mermaid/git/gitflow.mmd b/assets/mermaid/git/gitflow.mmd index 4e4eab73a..2cfcb61ca 100644 --- a/assets/mermaid/git/gitflow.mmd +++ b/assets/mermaid/git/gitflow.mmd @@ -1,3 +1,4 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph %% initialize repository commit id: "Initial commit" @@ -7,7 +8,7 @@ gitGraph commit %% define hotfix branch - checkout main + checkout master commit id: "Buggy commit" type: REVERSE branch hotfix @@ -25,7 +26,7 @@ gitGraph commit id: "Fix bugs" type:HIGHLIGHT %% merge hotfix commits into main and develop - checkout main + checkout master merge hotfix checkout develop merge hotfix @@ -44,7 +45,7 @@ gitGraph checkout develop branch release/v1.0 commit id: "Work on release" tag: "v1.0" - checkout main + checkout master merge release/v1.0 checkout develop commit diff --git a/assets/mermaid/git/merge-1.mmd b/assets/mermaid/git/merge-1.mmd index 0da962d84..b0f07ec49 100644 --- a/assets/mermaid/git/merge-1.mmd +++ b/assets/mermaid/git/merge-1.mmd @@ -1,7 +1,8 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch feature commit commit - checkout main + checkout master merge feature \ No newline at end of file diff --git a/assets/mermaid/git/merge-2.mmd b/assets/mermaid/git/merge-2.mmd index 1d263df70..c4cf6c110 100644 --- a/assets/mermaid/git/merge-2.mmd +++ b/assets/mermaid/git/merge-2.mmd @@ -1,8 +1,9 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch feature commit commit - checkout main + checkout master commit merge feature id: "Merge commit" type:NORMAL \ No newline at end of file diff --git a/assets/mermaid/git/rebase-1.mmd b/assets/mermaid/git/rebase-1.mmd index de7705d30..f843759d0 100644 --- a/assets/mermaid/git/rebase-1.mmd +++ b/assets/mermaid/git/rebase-1.mmd @@ -1,7 +1,8 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" branch feature - checkout main + checkout master commit commit checkout feature diff --git a/assets/mermaid/git/rebase-2.mmd b/assets/mermaid/git/rebase-2.mmd index afcc89f18..20378057f 100644 --- a/assets/mermaid/git/rebase-2.mmd +++ b/assets/mermaid/git/rebase-2.mmd @@ -1,3 +1,4 @@ +%%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" commit From ee54b2dae6bfca645996945e3432b6001a7e7811 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 21:26:15 +0300 Subject: [PATCH 400/689] Add basic merging section --- assets/mermaid/git/merge-1.mmd | 4 +- assets/mermaid/git/merge-2.mmd | 10 ++++- src/vcs/branch.txt | 78 ++++++++++++++++++++++++++++------ 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/assets/mermaid/git/merge-1.mmd b/assets/mermaid/git/merge-1.mmd index b0f07ec49..2a3260d0f 100644 --- a/assets/mermaid/git/merge-1.mmd +++ b/assets/mermaid/git/merge-1.mmd @@ -1,8 +1,8 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - branch feature + branch feature/issue53 commit commit checkout master - merge feature \ No newline at end of file + merge feature/issue53 diff --git a/assets/mermaid/git/merge-2.mmd b/assets/mermaid/git/merge-2.mmd index c4cf6c110..c2b7acb5a 100644 --- a/assets/mermaid/git/merge-2.mmd +++ b/assets/mermaid/git/merge-2.mmd @@ -1,9 +1,15 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - branch feature + branch feature/issue53 + branch feature/issue54 + checkout feature/issue53 commit commit checkout master + merge feature/issue53 + checkout feature/issue54 commit - merge feature id: "Merge commit" type:NORMAL \ No newline at end of file + checkout master + commit + merge feature/issue54 type:NORMAL id: "merge commit" \ No newline at end of file diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 04556bac4..a2970fe81 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -73,8 +73,8 @@ To switch to an existing branch, you run the ``git checkout`` command. Switched to branch 'devel' Your branch is up to date with 'origin/devel'. -Basic branching -=============== +Basic branching and merging +=========================== First, let's say you're working on your project and have a couple of commits already on the ``master`` branch. You've decided that you're going to work on @@ -95,18 +95,70 @@ This is shorthand for: $ git checkout feature/issue53 In deed this creates a new branch pointer, aimed to the latest commit present -on ``master`` branch. +on ``master`` branch. But, from now your branch is ``feature/issue53``. So, +doing commits moves the feature branch pointer forward, because you have it +checkout out (that is, your ``HEAD`` is pointing to it). -.. todo: - Add merge section -.. - .. mermaid:: /../assets/mermaid/git/merge-1.mmd - :align: center - :caption: Fast-forward merge -.. - .. mermaid:: /../assets/mermaid/git/merge-2.mmd - :align: center - :caption: Merge commit +Now, lets assume the "issue53" is fixed, and you need to bring commits from +the ``feature/issue53`` branch back to ``master``. + +Merging branches +---------------- + +You need to switch back to ``master`` branch and use ``git merge`` command, to +merge changes (commits) from the source branch into target. + +.. code-block:: shell + + $ git checkout master + $ git merge feature/issue53 + Updating f42c576..3a0874c + Fast-forward + index.html | 2 ++ + 1 file changed, 2 insertions(+) + +You'll notice phrase "fast-forward" in that merge. Because the commit pointed +to by the branch ``feature/issue53`` you merged in was directly ahead of the +last commit on ``master`` branch, Git simply moves the pointer forward. + +Changes from ``feature/issue53`` are now in the snapshot of the commit pointed +to by the ``master`` branch. + +.. mermaid:: /../assets/mermaid/git/merge-1.mmd + :align: center + :caption: Fast-forward merge + +Now, lets assume another developer started working on ``feature/issue54`` at +the same time. And there are few commits on this feature branch. Suppose, +the developer decided that work on **issue54** is finished and they want to +merge their feature branch into ``master``. + +.. code-block:: shell + + $ git branch + master + * feature/issue54 + $ git checkout master + $ git merge feature/issue54 + Merge made by the 'recursive' strategy. + index.html | 1 + + 1 file changed, 1 insertion(+) + +This looks a bit different than the ``feature/issue53`` merge. In this case, +development history has diverged from some older point. Because the commit +on the branch you're on isn't a direct ancestor of the branch you're merging +in, Git has to do some work. In this case, Git does a simple three-way merge, +using two snapshots pointed to by the branch tips and the common ancestor of +the two. + +Instead of just moving the branch pointer forward, Git creates a new snapshot +that results from this three-way merge and automatically creates a new commit +that points to it. This is referred to as a *merge commit*, and is a special in +that it has more than one parent. + +.. mermaid:: /../assets/mermaid/git/merge-2.mmd + :align: center + :caption: Merge commit .. todo: Add rebase section From 000bbbccc57c3f87dcde3fd3359994850f00fd96 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 21:43:31 +0300 Subject: [PATCH 401/689] Add merge conflicts section --- src/vcs/branch.txt | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index a2970fe81..94642eeed 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -160,6 +160,76 @@ that it has more than one parent. :align: center :caption: Merge commit +Merge conflicts +=============== + +Occasionally, the merge process doesn't go smoothly. If the same part of +the same file is changed differently in the two branches you're merging, Git +won't be able to merge them cleanly. + +.. code-block:: shell + + $ git merge vcs + Auto-merging branches.txt + CONFLICT (content): Merge conflict in branches.txt + Automatic merge failed; fix conflicts and then commit the result + +Git hasn't automatically created a new merge commit. It has paused the process +while you resolve the conflict. If you want to see which files are unmerged at +any point after a merge conflict, you can run ``git status``: + +.. code-block:: shell + + $ git status + On branch master + + You have unmerged paths. + (fix conflicts and run "git commit") + + Unmerged paths: + (use "git add ..." to mark resolution) + + both modified: branches.txt + + no changes added to commit (use "git add" and/or "git commit -a") + +Anything that has merge conflicts and hasn't been resolved is listed as +unmerged. Git adds standard conflict-resolution markers to the files that +have conflicts, so you can open them manually and resolve those conflicts. +Your file contains a section that looks something like this: + +:: + + <<<<<<< HEAD:branches.txt + Anything that has merge conflicts and has not been resolved is listed as + ======= + Anything that has merge conflicts + and hasn't been resolved is listed as + + >>>>>>> vcs:branches.txt + +This means the version in ``HEAD`` (your ``master`` branch, because that was +what you had checked out when you ran merge command) is the top part of that +block (everything above the "======="), while the version in ``vcs`` branch +looks like everything in the bottom part. In order to resolve the conflict, +you have to either choose one side or the other or merge the contents yourself. + +When conflicts are resolved, you can run ``git status`` command again: + +.. code-block:: shell + + $ git status + On branch master + + All conflicts fixed but you are still merging. + (use "git commit" to conclude merge) + + Changes to be committed: + modified: branches.txt + +If you're happy with that, and you verify that everything that had conflicts +has been staged, you can run ``git commit`` for finalize the merge commit. + .. todo: Add rebase section .. From ddafcbee2ed0496f5dbef6eb476722181767cc0a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 21:50:19 +0300 Subject: [PATCH 402/689] Start working on branch management section --- src/vcs/branch.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 94642eeed..775f39d78 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -244,6 +244,37 @@ has been staged, you can run ``git commit`` for finalize the merge commit. .. todo: Describe merging and cherry-pick +Branch management +================= + +The ``git branch`` command does more that create and delete branches. If you +run it with no arguments, you get a simple listing of your current branches: + +:: + + $ git branch + devel + feature/contributing + feature/legacy + feature/lib-ms + feature/libms + feature/pdf-builder + * feature/vcs + master + +To see all the branches that contain work you haven't yet merged in, use +``--no-merged`` option: + +:: + + $ git branch --no-merged + feature/contributing + feature/lib-ms + feature/libms + +Branches listed in the output has work, that isn't merged to current branch. +So, deleting them via ``git branch -d`` will fail. + Branching strategies ==================== From 632b6fb1bb6ffccf9563a03919f361483ae92195 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:08:04 +0300 Subject: [PATCH 403/689] Add rebase section --- assets/mermaid/git/rebase-1.mmd | 7 ++--- assets/mermaid/git/rebase-2.mmd | 7 ++--- src/vcs/branch.txt | 49 ++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/assets/mermaid/git/rebase-1.mmd b/assets/mermaid/git/rebase-1.mmd index f843759d0..f5476ddc2 100644 --- a/assets/mermaid/git/rebase-1.mmd +++ b/assets/mermaid/git/rebase-1.mmd @@ -3,8 +3,7 @@ gitGraph commit id: "Initial commit" branch feature checkout master - commit - commit + commit id: "Second commit" checkout feature - commit - commit \ No newline at end of file + commit id: "1st commit on feature" + commit id: "2nd commit on feature" \ No newline at end of file diff --git a/assets/mermaid/git/rebase-2.mmd b/assets/mermaid/git/rebase-2.mmd index 20378057f..5103a9f3d 100644 --- a/assets/mermaid/git/rebase-2.mmd +++ b/assets/mermaid/git/rebase-2.mmd @@ -1,9 +1,8 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - commit - commit + commit id: "Second commit" branch feature checkout feature - commit - commit \ No newline at end of file + commit id: "1st commit on feature" + commit id: "2nd commit on feature" \ No newline at end of file diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 775f39d78..b9ca74f82 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -230,16 +230,45 @@ When conflicts are resolved, you can run ``git status`` command again: If you're happy with that, and you verify that everything that had conflicts has been staged, you can run ``git commit`` for finalize the merge commit. -.. todo: - Add rebase section -.. - .. mermaid:: /../assets/mermaid/git/rebase-1.mmd - :align: center - :caption: Before rebase -.. - .. mermaid:: /../assets/mermaid/git/rebase-2.mmd - :align: center - :caption: After rebase +Rebasing +======== + +In Git, there two main ways to integrate changes from one branch into another: +the ``merge`` and the ``rebase``. + +Earlier, there was an example of diverged work and commits made on two +different branches. + +.. mermaid:: /../assets/mermaid/git/rebase-1.mmd + :align: center + :caption: Before rebase + +The easiest way to integrate the branches, as we've already covered, is +the ``merge`` command. It performs a three-way merge between the two latest +branch snapshots, and the most recent common ancestor of the two, creating +a new snapshot (and commit). + +However, there is another way: you can take the patch of the change that was +introduced in ``master`` and reapply it on top of ``feature``. In Git, this is +called *rebasing*. With ``rebase`` command, you can take all the changes that +were committed on one branch and replay them on a different branch. + +:: + + $ git checkout feature + $ git rebase master + First, rewinding head to replay your work on top of it... + Applying: added staged command + +This operation works by going to the common ancestor of the two branches, +getting the diff introduced by each commit of the branch you're on, saving +those diffs to temporary files, resetting the current branch to the same +commit as the branch you are rebasing onto, and finally applying each change +in turn. + +.. mermaid:: /../assets/mermaid/git/rebase-2.mmd + :align: center + :caption: After rebase .. todo: Describe merging and cherry-pick From 2d6300ff0b258446b2e5ff93cc9657f7f903b4d6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:09:52 +0300 Subject: [PATCH 404/689] Update branch document structure --- src/vcs/branch.txt | 69 +++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index b9ca74f82..0c24a7c9f 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -33,8 +33,40 @@ Every time you commit, the master branch pointer moves forward automatically. .. figure:: /../assets/img/git-commits.svg :align: center + +Branch management +================= + +The ``git branch`` command does more that create and delete branches. If you +run it with no arguments, you get a simple listing of your current branches: + +:: + + $ git branch + devel + feature/contributing + feature/legacy + feature/lib-ms + feature/libms + feature/pdf-builder + * feature/vcs + master + +To see all the branches that contain work you haven't yet merged in, use +``--no-merged`` option: + +:: + + $ git branch --no-merged + feature/contributing + feature/lib-ms + feature/libms + +Branches listed in the output has work, that isn't merged to current branch. +So, deleting them via ``git branch -d`` will fail. + Create branches -=============== +--------------- There are few ways to create a new branch in a Git repository. The most common way is to use ``git branch`` command. @@ -53,7 +85,7 @@ creation using: git checkout -b [parent_commit] Switching branches -================== +------------------ To switch to an existing branch, you run the ``git checkout`` command. @@ -161,7 +193,7 @@ that it has more than one parent. :caption: Merge commit Merge conflicts -=============== +--------------- Occasionally, the merge process doesn't go smoothly. If the same part of the same file is changed differently in the two branches you're merging, Git @@ -273,37 +305,6 @@ in turn. .. todo: Describe merging and cherry-pick -Branch management -================= - -The ``git branch`` command does more that create and delete branches. If you -run it with no arguments, you get a simple listing of your current branches: - -:: - - $ git branch - devel - feature/contributing - feature/legacy - feature/lib-ms - feature/libms - feature/pdf-builder - * feature/vcs - master - -To see all the branches that contain work you haven't yet merged in, use -``--no-merged`` option: - -:: - - $ git branch --no-merged - feature/contributing - feature/lib-ms - feature/libms - -Branches listed in the output has work, that isn't merged to current branch. -So, deleting them via ``git branch -d`` will fail. - Branching strategies ==================== From f4bf28bfdcc9b0b6b5ddcb02c7030e43f8d5742a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:13:10 +0300 Subject: [PATCH 405/689] Change code blocks --- src/vcs/basics.txt | 44 ++++++++++++++++++++++---------------------- src/vcs/branch.txt | 20 ++++++++++---------- src/vcs/setup.txt | 4 ++-- src/vcs/tagging.txt | 16 ++++++++-------- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 99bf22729..ee767d7af 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -44,7 +44,7 @@ depending on which system you're running: In the project's directory initialize a new Git repository. -.. code-block:: shell +:: git init @@ -106,7 +106,7 @@ Checking out status of the file(s) The main tool you use to determine which files are in which state is the ``git status`` command. -.. code-block:: shell +:: $ # check status $ git status @@ -138,7 +138,7 @@ Tracking new files In order to begin tracking a new file, you use the ``git add`` command. -.. code-block:: shell +:: $ git add README.md $ git status @@ -158,7 +158,7 @@ committed (is under "Changes to be committed" heading). use cases is to add **all** modified files, or files inside of a specific directory. - .. code-block:: shell + :: git add * # stage all changes git add . # stage all changes in current directory @@ -171,7 +171,7 @@ If a staged (or already committed) file has been changed, it will be moved under "Modified" heading. These changes wouldn't be committed unless they are staged. -.. code-block:: shell +:: $ git status On branch devel @@ -201,7 +201,7 @@ them -- won't go into this commit. The simplest way to commit is to type ``git commit``: -.. code-block:: shell +:: git commit @@ -215,7 +215,7 @@ Doing so launches your editor of choice. Alternatively, you can type your commit message inline with the ``commit`` command by specifying it after a ``-m`` flag, like this: -.. code-block:: shell +:: git commit -m "Add GitHub workflow to test Sphinx builds for PRs to devel" @@ -226,7 +226,7 @@ Adding the ``-a`` option to the ``git commit`` command makes Git automatically stage every file that is already tracked before doing the commit, letting you skip the git add part: -.. code-block:: shell +:: $ git status On branch devel @@ -347,7 +347,7 @@ After you have created several commits, or if you have cloned a repository with an existing commit history, you'll probably want to look back to see what has happened. The most basic and powerful tool to do this is the git log command. -.. code-block:: shell +:: $ git log co mmit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) @@ -379,7 +379,7 @@ difference (the *patch* output) introduced in each commit. You can also limit the number of log entries displayed, such as using ``-`` to show only desired number of latest entries. -.. code-block:: shell +:: $ git log -p -1 commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) @@ -418,7 +418,7 @@ use a series of summarizing options with ``git log``. If you want to see some abbreviated stats for each commit, you can use the ``--stat`` option: -.. code-block:: shell +:: $ git log -1 --stat commit 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) @@ -446,7 +446,7 @@ commit on a single line, which is useful if you're look a lot of commits. In addition, the ``short``, ``full``, and ``fuller`` values show the output in roughly the same format but with less or more information. -.. code-block:: shell +:: $ git log --pretty=oneline 8b755eb400a1db7f88ca2058094321dcefea7f9c (HEAD -> feature/vcs, origin/feature/vcs) Update gitflow diagram @@ -457,7 +457,7 @@ in roughly the same format but with less or more information. 0786a699e6901a6c968090422b3cec789402ad21 Update branches document 74710531809a9cbbdec1979ef8ae775a034c2027 Fixed GitFlow branches list -.. code-block:: shell +:: $ git log -10 --pretty=format:"%h - %an - %ad" 8b755eb - Serhii Horodilov - Wed Aug 16 15:26:39 2023 +0300 @@ -509,7 +509,7 @@ The ``oneline`` and ``format`` option values are particularly useful with another ``log`` option called ``--graph``. This option adds a nice little ASCII graph showing your branch and merge history: -.. code-block:: shell +:: $ git log --pretty=format:"%h %s" --graph * f9b988f Created base documentation structure @@ -578,7 +578,7 @@ limiting options; that is options that let you show only a subset of commits. You've seen one such option already -- the ``-`` (e.g. ``-2`` or ``-10``) option, which displays only the given number of latest commits. -.. code-block:: shell +:: $ git log -5 --oneline db87ca0 (HEAD -> feature/vcs) fixup! Add commit history section (git log) @@ -591,7 +591,7 @@ However, the time-limiting options such as ``--since`` and ``--until`` are very useful. For example, the command to get the list of commits made in the last two weeks: -.. code-block:: shell +:: $ git log --since=2.weeks @@ -604,7 +604,7 @@ that introduced a change to those files. This is always the last option and is generally preceded by double dashes (``--``) to separate the paths from the options: -.. code-block:: shell +:: $ git log --oneline -- src/vcs/basics.txt 30cb1a2 Fix apostrophe for VCS files @@ -626,13 +626,13 @@ forget to add some files, or you mess up your commit message. If you want to redo that commit, make the additional changes you forgot, stage them, and commit again using the ``--amend`` option: -.. code-block:: shell +:: $ git commit --amend E.g. -.. code-block:: shell +:: $ git commit -m "Initial commit" $ git add forgotten_file @@ -646,7 +646,7 @@ working directory changes. The nice part is that the command you use to determine the state of those two areas also reminds you how to undo changes to them. -.. code-block:: shell +:: $ git add * $ git status @@ -684,7 +684,7 @@ you last committed. ``git status`` also tells you how to do that: It tells you pretty explicitly how to discard the changes you've make. -.. code-block:: shell +:: $ git checkout -- CONTRIBUTING.md $ git status @@ -702,7 +702,7 @@ Undoing things with git restore Git version 2.23.0 onwards, Git will use ``git restore`` instead of ``git reset`` for many undo operations. -.. code-block:: shell +:: $ git add * $ git status diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 0c24a7c9f..3b7f5cf57 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -71,7 +71,7 @@ Create branches There are few ways to create a new branch in a Git repository. The most common way is to use ``git branch`` command. -.. code-block:: shell +:: git branch [parent_commit] @@ -80,7 +80,7 @@ to the latest one available (HEAD pointer) at the moment of the branch creation. You can also switch to the newly created branch just after its creation using: -.. code-block:: shell +:: git checkout -b [parent_commit] @@ -89,7 +89,7 @@ Switching branches To switch to an existing branch, you run the ``git checkout`` command. -.. code-block:: shell +:: $ git branch devel @@ -114,14 +114,14 @@ issue #53 in whatever issue-tracking system your company uses. To create a new branch and switch to it at the same time, you can run the ``git checkout`` command with the ``-b`` switch: -.. code-block:: shell +:: $ git checkout -b feature/issue53 Switched to a new branch "feature/issue53" This is shorthand for: -.. code-block:: shell +:: $ git branch feature/issue53 $ git checkout feature/issue53 @@ -140,7 +140,7 @@ Merging branches You need to switch back to ``master`` branch and use ``git merge`` command, to merge changes (commits) from the source branch into target. -.. code-block:: shell +:: $ git checkout master $ git merge feature/issue53 @@ -165,7 +165,7 @@ the same time. And there are few commits on this feature branch. Suppose, the developer decided that work on **issue54** is finished and they want to merge their feature branch into ``master``. -.. code-block:: shell +:: $ git branch master @@ -199,7 +199,7 @@ Occasionally, the merge process doesn't go smoothly. If the same part of the same file is changed differently in the two branches you're merging, Git won't be able to merge them cleanly. -.. code-block:: shell +:: $ git merge vcs Auto-merging branches.txt @@ -210,7 +210,7 @@ Git hasn't automatically created a new merge commit. It has paused the process while you resolve the conflict. If you want to see which files are unmerged at any point after a merge conflict, you can run ``git status``: -.. code-block:: shell +:: $ git status On branch master @@ -248,7 +248,7 @@ you have to either choose one side or the other or merge the contents yourself. When conflicts are resolved, you can run ``git status`` command again: -.. code-block:: shell +:: $ git status On branch master diff --git a/src/vcs/setup.txt b/src/vcs/setup.txt index b158b6ae8..dc0f45d1c 100644 --- a/src/vcs/setup.txt +++ b/src/vcs/setup.txt @@ -33,7 +33,7 @@ trump those in *[path]/etc/gitconfig*. You can view all of your settings and where they are coming from using: -.. code-block:: shell +:: git config --list --show-origin @@ -44,7 +44,7 @@ The first thing you should do when you install Git is to set your user name and email address. This is important because every Git commit uses this information. -.. code-block:: shell +:: git config --global user.name "John Doe" git config --global user.email johndoe@example.com diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt index 1b21fc4c8..f3253d95b 100644 --- a/src/vcs/tagging.txt +++ b/src/vcs/tagging.txt @@ -13,7 +13,7 @@ Listing tags Listing the existing tags in Git is straightforward. Just type ``git tag`` (with optional ``-l`` or ``--list``). -.. code-block:: shell +:: $ git tag v1.0 @@ -25,7 +25,7 @@ a particular pattern. The Git source repo, for instance contains more than 500 tags. If you're interested only in looking at the 1.8.4 series, you can run this: -.. code-block:: shell +:: $ git tag -l "1.8.5*" v1.8.5 @@ -54,7 +54,7 @@ keep the other information, lightweight tags are available too. Creating an annotated tag in Git is simple. The easiest way is to specify ``-a`` when you run the ``tag`` command: -.. code-block:: shell +:: $ git tag -a VCS -m "Version Control System - tags" $ git tag @@ -73,7 +73,7 @@ the commit checksum stored in a file -- no other information is kept. To create a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` options, just provide a tag name: -.. code-block:: shell +:: $ git tag tagging $ git tag @@ -90,7 +90,7 @@ options, just provide a tag name: You can also tag commits after you're moved past them. -.. code-block:: shell +:: $ git log --pretty=format:%h -3 21ae739 @@ -109,7 +109,7 @@ Deleting tags To delete a tag on your local repository, you can use ``git tag -d ``. -.. code-block:: shell +:: $ git tag -d VCS Deleted tag 'VCS' (was eef3831) @@ -121,7 +121,7 @@ If you want to view the versions of files a tag is pointing to, you can do a ``git checkout`` of that tag, although this puts your repository in "detached HEAD" state, which has some ill side effects: -.. code-block:: shell +:: $ git checkout VCS Note: switching to 'vcs'. @@ -149,7 +149,7 @@ unreachable, except by the exact commit hash. Thus, if you need to make changes -- say you’re fixing a bug on an older version, for instance -- you will generally want to create a branch: -.. code-block:: shell +:: $ git checkout -b vcs-tag-branch VCS Switched to a new branch 'vcs-tag-branch' From 2f74e8b6328c5c186b31c839a7b073e3eef4d9dd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 16 Aug 2023 22:36:58 +0300 Subject: [PATCH 406/689] Update VCS part translations --- src/_locales/uk/LC_MESSAGES/vcs.po | 950 ++++++++++++++++++++++++++++- src/vcs/basics.txt | 3 +- src/vcs/tagging.txt | 2 +- 3 files changed, 925 insertions(+), 30 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 8494859cb..45992f85a 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-16 14:39+0300\n" -"PO-Revision-Date: 2023-08-16 14:45+0300\n" +"POT-Creation-Date: 2023-08-16 22:36+0300\n" +"PO-Revision-Date: 2023-08-16 22:36+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -22,16 +22,14 @@ msgstr "" "X-Generator: Poedit 3.3.2\n" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 -#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 -#: ../../src/vcs/setup.txt:-1 +#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 +#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 msgid "Version control system" msgstr "Система контролю версій" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/commits.txt:-1 ../../src/vcs/github.txt:-1 -#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 -#: ../../src/vcs/setup.txt:-1 +#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 +#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 msgid "Serhii Horodilov" msgstr "Serhii Horodilov" @@ -478,6 +476,484 @@ msgstr "" "від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " "каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +#: ../../src/vcs/basics.txt:344 +msgid "Viewing the commit history" +msgstr "Перегляд історії коммітів" + +#: ../../src/vcs/basics.txt:346 +msgid "" +"After you have created several commits, or if you have cloned a repository " +"with an existing commit history, you'll probably want to look back to see " +"what has happened. The most basic and powerful tool to do this is the ``git " +"log`` command." +msgstr "" +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " +"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " +"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " +"команда ``git log``." + +#: ../../src/vcs/basics.txt:372 +msgid "" +"By default, with no arguments, ``git log`` lists the commits made in that " +"repository in reverse chronological order; that is, the most recent commits " +"show up first. As you can see, this command lists each commit with its SHA-1 " +"checksum, the author's name and email, the date written, and the commit " +"message." +msgstr "" +"За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " +"зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " +"найновіші комміти показуються першими. Як ви можете бачити, ця команда " +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " +"адресою автора, датою створення та повідомленням про внесення." + +#: ../../src/vcs/basics.txt:378 +msgid "" +"One of the more helpful options is ``-p`` or ``--patch``, which shows the " +"difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to " +"show only desired number of latest entries." +msgstr "" +"Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " +"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" +"``, щоб показати лише потрібну кількість останніх записів." + +#: ../../src/vcs/basics.txt:414 +msgid "" +"This option display the same information but with a diff directly following " +"each entry. This is very helpful for code review or to quickly browse what " +"happened during a series of commits that a collaborator has added. You can " +"also use a series of summarizing options with ``git log``." +msgstr "" +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " +"кожного запису. Це дуже корисно для перегляду коду або для швидкого " +"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " +"також можете скористатися низкою параметрів підсумовування за допомогою " +"``git log``." + +#: ../../src/vcs/basics.txt:419 +msgid "" +"If you want to see some abbreviated stats for each commit, you can use the " +"``--stat`` option:" +msgstr "" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " +"скористатися опцією ``--stat``:" + +#: ../../src/vcs/basics.txt:443 +msgid "" +"Another really useful option is ``--pretty``. This option changes the log " +"output to formats other that the default. A few prebuilt option values are " +"available for you to use. The ``oneline`` value for this option prints each " +"commit on a single line, which is useful if you're look a lot of commits. In " +"addition, the ``short``, ``full``, and ``fuller`` values show the output in " +"roughly the same format but with less or more information." +msgstr "" +"Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " +"формат виведення журналу на формат, відмінний від стандартного. Ви можете " +"скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " +"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " +"форматі, але з меншою або більшою кількістю інформації." + +#: ../../src/vcs/basics.txt:476 +msgid "Specifier" +msgstr "Специфікатор" + +#: ../../src/vcs/basics.txt:476 +msgid "Description of Output" +msgstr "Опис Результатів" + +#: ../../src/vcs/basics.txt:478 +msgid "%H" +msgstr "%H" + +#: ../../src/vcs/basics.txt:478 +msgid "Commit hash" +msgstr "Хеш комміту" + +#: ../../src/vcs/basics.txt:480 +msgid "%h" +msgstr "%h" + +#: ../../src/vcs/basics.txt:480 +msgid "Abbreviated commit hash" +msgstr "Скорочений хеш коміту" + +#: ../../src/vcs/basics.txt:482 +msgid "%T" +msgstr "%T" + +#: ../../src/vcs/basics.txt:482 +msgid "Tree hash" +msgstr "Дерево хешу" + +#: ../../src/vcs/basics.txt:484 +msgid "%t" +msgstr "%t" + +#: ../../src/vcs/basics.txt:484 +msgid "Abbreviated tree hash" +msgstr "Скорочений хеш дерева" + +#: ../../src/vcs/basics.txt:486 +msgid "%P" +msgstr "%P" + +#: ../../src/vcs/basics.txt:486 +msgid "Parent hashes" +msgstr "Батьківські хеші" + +#: ../../src/vcs/basics.txt:488 +msgid "%p" +msgstr "%p" + +#: ../../src/vcs/basics.txt:488 +msgid "Abbreviated parent hashes" +msgstr "Скорочені батьківські хеші" + +#: ../../src/vcs/basics.txt:490 +msgid "%an" +msgstr "%an" + +#: ../../src/vcs/basics.txt:490 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/vcs/basics.txt:492 +msgid "%ae" +msgstr "%ae" + +#: ../../src/vcs/basics.txt:492 +msgid "Author email" +msgstr "Електронна пошта автора" + +#: ../../src/vcs/basics.txt:494 +msgid "%ad" +msgstr "%ad" + +#: ../../src/vcs/basics.txt:494 +msgid "Author date (format respects the --date=option)" +msgstr "Дата автора (формат відповідає параметру --date=option)" + +#: ../../src/vcs/basics.txt:496 +msgid "%ar" +msgstr "%ar" + +#: ../../src/vcs/basics.txt:496 +msgid "Author date, relative" +msgstr "Дата автора, відносна" + +#: ../../src/vcs/basics.txt:498 +#, python-format +msgid "%cn" +msgstr "%cn" + +#: ../../src/vcs/basics.txt:498 +msgid "Committer name" +msgstr "Ім'я коммітера" + +#: ../../src/vcs/basics.txt:500 +#, python-format +msgid "%ce" +msgstr "%ce" + +#: ../../src/vcs/basics.txt:500 +msgid "Committer email" +msgstr "Електронна пошта коммітера" + +#: ../../src/vcs/basics.txt:502 +#, python-format +msgid "%cd" +msgstr "%cd" + +#: ../../src/vcs/basics.txt:502 +msgid "Committer date" +msgstr "Дата коммітера" + +#: ../../src/vcs/basics.txt:504 +#, python-format +msgid "%cr" +msgstr "%cr" + +#: ../../src/vcs/basics.txt:504 +msgid "Committer date, relative" +msgstr "Дата коммітера, відносна" + +#: ../../src/vcs/basics.txt:506 +#, python-format +msgid "%s" +msgstr "%s" + +#: ../../src/vcs/basics.txt:506 +msgid "Subject" +msgstr "Тема" + +#: ../../src/vcs/basics.txt:509 +msgid "" +"The ``oneline`` and ``format`` option values are particularly useful with " +"another ``log`` option called ``--graph``. This option adds a nice little " +"ASCII graph showing your branch and merge history:" +msgstr "" +"Значення параметрів ``online`` і ``format`` особливо корисні з іншим " +"параметром ``log``, який називається ``--graph``. Цей параметр додає " +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " +"злиття:" + +#: ../../src/vcs/basics.txt:538 +msgid "" +"There are many more output-formatting options to ``git log``. Common options " +"to ``git log`` are:" +msgstr "" +"Існує набагато більше варіантів форматування виводу для ``git log``. " +"Загальними параметрами ``git log`` є наступні:" + +#: ../../src/vcs/basics.txt:542 +msgid "Option" +msgstr "Опція" + +#: ../../src/vcs/basics.txt:542 +msgid "Description" +msgstr "Опис" + +#: ../../src/vcs/basics.txt:544 +msgid "-p" +msgstr "-p" + +#: ../../src/vcs/basics.txt:544 +msgid "Show the patch introduced with each commit." +msgstr "Показувати виправлення, внесені з кожним коммітом." + +#: ../../src/vcs/basics.txt:546 +msgid "--stat" +msgstr "--stat" + +#: ../../src/vcs/basics.txt:546 +msgid "Show statistics for files modified in each commit." +msgstr "Показувати статистику для файлів, змінених у кожному коміті." + +#: ../../src/vcs/basics.txt:548 +msgid "--shortstat" +msgstr "--shortstat" + +#: ../../src/vcs/basics.txt:548 +msgid "" +"Display only the changed/insertions/deletions line from the --stat command." +msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." + +#: ../../src/vcs/basics.txt:551 +msgid "--name-only" +msgstr "--name-only" + +#: ../../src/vcs/basics.txt:551 +msgid "Show the list of files modified after the commit information." +msgstr "Показати список файлів, змінених після фіксації інформації." + +#: ../../src/vcs/basics.txt:554 +msgid "--name-status" +msgstr "--name-status" + +#: ../../src/vcs/basics.txt:554 +msgid "" +"Show the list of files affected with added/modified/deleted information as " +"well." +msgstr "" +"Також покажіть список файлів, яких торкнулася додана/змінена/видалена " +"інформація." + +#: ../../src/vcs/basics.txt:557 +msgid "--abbrev-commit" +msgstr "--abbrev-commit" + +#: ../../src/vcs/basics.txt:557 +msgid "" +"Show only the first few characters of the SHA-1 checksum instead of all 40." +msgstr "" +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." + +#: ../../src/vcs/basics.txt:560 +msgid "--relative-date" +msgstr "--relative-date" + +#: ../../src/vcs/basics.txt:560 +msgid "" +"Display the date in a relative format (for example, \"2 weeks ago\") instead " +"of using the full date format." +msgstr "" +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " +"повного формату дати." + +#: ../../src/vcs/basics.txt:563 +msgid "--graph" +msgstr "--graph" + +#: ../../src/vcs/basics.txt:563 +msgid "" +"Display an ASCII graph of the branch and merge history beside the log output." +msgstr "" +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." + +#: ../../src/vcs/basics.txt:566 +msgid "--pretty" +msgstr "--pretty" + +#: ../../src/vcs/basics.txt:566 +msgid "" +"Show commits in an alternate format. Option values include oneline, short, " +"full, fuller, and format (where you specify your own format)." +msgstr "" +"Показувати комміти в альтернативному форматі. Значення опції включають: " +"online, short, full, fuller і format (де ви можете вказати свій власний " +"формат)." + +#: ../../src/vcs/basics.txt:570 +msgid "--oneline" +msgstr "--oneline" + +#: ../../src/vcs/basics.txt:570 +msgid "Shorthand for --pretty=oneline --abbrev-commit used together." +msgstr "" +"Скорочення для --pretty=online --abbrev-commit, що використовується разом." + +#: ../../src/vcs/basics.txt:575 +msgid "Limiting log output" +msgstr "Обмеження виводу журналу" + +#: ../../src/vcs/basics.txt:577 +msgid "" +"In addition to output-formatting options, ``git log`` takes a number of " +"useful limiting options; that is options that let you show only a subset of " +"commits. You've seen one such option already -- the ``-`` (e.g. " +"``-2`` or ``-10``) option, which displays only the given number of latest " +"commits." +msgstr "" +"На додаток до параметрів форматування виводу, ``git log`` приймає ряд " +"корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" +"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"кількість останніх коммітів." + +#: ../../src/vcs/basics.txt:591 +msgid "" +"However, the time-limiting options such as ``--since`` and ``--until`` are " +"very useful. For example, the command to get the list of commits made in the " +"last two weeks:" +msgstr "" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" +"until``. Наприклад, команда для отримання списку коммітів, зроблених за " +"останні два тижні:" + +#: ../../src/vcs/basics.txt:599 +msgid "" +"This command works with lots of formats - you can specify a specific date " +"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"minutes ago\"``." +msgstr "" +"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " +"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " +"день 3 хвилини тому\"``." + +#: ../../src/vcs/basics.txt:602 +msgid "" +"The last really useful option to pass to ``git log`` as a filter is a path. " +"If you specify a directory or file name, you can limit the log output to " +"commits that introduced a change to those files. This is always the last " +"option and is generally preceded by double dashes (``--``) to separate the " +"paths from the options:" +msgstr "" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " +"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " +"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " +"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " +"щоб відокремити шлях від параметрів:" + +#: ../../src/vcs/basics.txt:621 +msgid "Undoing things" +msgstr "Виправлення помилок" + +#: ../../src/vcs/basics.txt:623 +msgid "At any stage, you may want to undo something." +msgstr "На будь-якому етапі ви можете захотіти щось виправити." + +#: ../../src/vcs/basics.txt:625 +msgid "" +"One of the common undos takes place when you commit too early and possibly " +"forget to add some files, or you mess up your commit message. If you want to " +"redo that commit, make the additional changes you forgot, stage them, and " +"commit again using the ``--amend`` option:" +msgstr "" +"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " +"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " +"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " +"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " +"використовуючи опцію ``--amend``:" + +#: ../../src/vcs/basics.txt:634 +msgid "E.g." +msgstr "Наприклад." + +#: ../../src/vcs/basics.txt:643 +msgid "Unstaging a staged file" +msgstr "Скасування додавання файла до індексу" + +#: ../../src/vcs/basics.txt:645 +msgid "" +"The next two sections demonstrate how to work with your staging area and " +"working directory changes. The nice part is that the command you use to " +"determine the state of those two areas also reminds you how to undo changes " +"to them." +msgstr "" +"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " +"збірці та робочому каталозі. Приємним моментом є те, що команда, за " +"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " +"те, як скасувати внесені до них зміни." + +#: ../../src/vcs/basics.txt:676 +msgid "Unmodifiyng a modified file" +msgstr "Скасування модифікації зміненого файлу" + +#: ../../src/vcs/basics.txt:678 +msgid "" +"What if you realize that you don't want to keep your changes to some file? " +"You can easily unmodify it -- **revert** it back to what it looked like when " +"you last committed. ``git status`` also tells you how to do that:" +msgstr "" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " +"Ви можете легко скасувати зміни - **повернути** його до того, як він " +"виглядав під час останнього компонування. ``git status`` також покаже вам, " +"як це зробити:" + +#: ../../src/vcs/basics.txt:686 +msgid "It tells you pretty explicitly how to discard the changes you've make." +msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." + +#: ../../src/vcs/basics.txt:699 +msgid "Undoing things with git restore" +msgstr "Скасування змін за допомогою git restore" + +#: ../../src/vcs/basics.txt:701 +msgid "" +"``git restore`` is basically an alternative to ``git reset``, from Git " +"version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " +"reset`` for many undo operations." +msgstr "" +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " +"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " +"операцій скасування." + +#: ../../src/vcs/basics.txt:737 +msgid "" +"It’s important to understand that git restore is a dangerous command. " +"Any local changes you made to that file are gone -- Git just replaced that " +"file with the last staged or committed version. Don't ever use this command " +"unless you absolutely know that you don’t want those unsaved local changes." +msgstr "" +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " +"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " +"замінить цей файл на останню версію, що перебуває у стадії виконання або " +"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " +"вам не потрібні ці незбережені локальні зміни." + #: ../../src/vcs/branch.txt:-1 msgid "version, control, system, vcs, git, branch, merge, cherry-pick" msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" @@ -528,11 +1004,40 @@ msgstr "" "Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " "пересувається вперед." -#: ../../src/vcs/branch.txt:37 +#: ../../src/vcs/branch.txt:38 +msgid "Branch management" +msgstr "Управління гілками" + +#: ../../src/vcs/branch.txt:40 +msgid "" +"The ``git branch`` command does more that create and delete branches. If you " +"run it with no arguments, you get a simple listing of your current branches:" +msgstr "" +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " +"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"поточних гілок:" + +#: ../../src/vcs/branch.txt:55 +msgid "" +"To see all the branches that contain work you haven't yet merged in, use ``--" +"no-merged`` option:" +msgstr "" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " +"використовуйте опцію ``--no-merged``:" + +#: ../../src/vcs/branch.txt:65 +msgid "" +"Branches listed in the output has work, that isn't merged to current branch. " +"So, deleting them via ``git branch -d`` will fail." +msgstr "" +"У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " +"гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." + +#: ../../src/vcs/branch.txt:69 msgid "Create branches" msgstr "Створення гілок" -#: ../../src/vcs/branch.txt:39 +#: ../../src/vcs/branch.txt:71 msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." @@ -540,7 +1045,7 @@ msgstr "" "Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " "них - використання команди ``git branch``." -#: ../../src/vcs/branch.txt:46 +#: ../../src/vcs/branch.txt:78 msgid "" "Pointer to a parent commit is optional. By default the parent commit is set " "to the latest one available (HEAD pointer) at the moment of the branch " @@ -552,11 +1057,256 @@ msgstr "" "на момент створення гілки. Ви також можете переключитися на новостворену " "гілку одразу після її створення за допомогою:" -#: ../../src/vcs/branch.txt:81 +#: ../../src/vcs/branch.txt:88 +msgid "Switching branches" +msgstr "Перемикання гілок" + +#: ../../src/vcs/branch.txt:90 +msgid "To switch to an existing branch, you run the ``git checkout`` command." +msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." + +#: ../../src/vcs/branch.txt:109 +msgid "Basic branching and merging" +msgstr "To switch to an existing branch, you run the ``git checkout`` command" + +#: ../../src/vcs/branch.txt:111 +msgid "" +"First, let's say you're working on your project and have a couple of commits " +"already on the ``master`` branch. You've decided that you're going to work " +"on issue #53 in whatever issue-tracking system your company uses. To create " +"a new branch and switch to it at the same time, you can run the ``git " +"checkout`` command with the ``-b`` switch:" +msgstr "" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " +"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " +"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " +"створити нову гілку і одночасно переключитися на неї, ви можете виконати " +"команду ``git checkout`` з ключем ``-b``:" + +#: ../../src/vcs/branch.txt:122 +msgid "This is shorthand for:" +msgstr "Це скорочено означає:" + +#: ../../src/vcs/branch.txt:129 +msgid "" +"In deed this creates a new branch pointer, aimed to the latest commit " +"present on ``master`` branch. But, from now your branch is ``feature/" +"issue53``. So, doing commits moves the feature branch pointer forward, " +"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +msgstr "" +"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " +"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" +"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " +"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." + +#: ../../src/vcs/branch.txt:134 +msgid "" +"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " +"from the ``feature/issue53`` branch back to ``master``." +msgstr "" +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " +"з гілки ``feature/issue53`` назад до ``master``." + +#: ../../src/vcs/branch.txt:138 +msgid "Merging branches" +msgstr "Злиття гілок" + +#: ../../src/vcs/branch.txt:140 +msgid "" +"You need to switch back to ``master`` branch and use ``git merge`` command, " +"to merge changes (commits) from the source branch into target." +msgstr "" +"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " +"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." + +#: ../../src/vcs/branch.txt:152 +msgid "" +"You'll notice phrase \"fast-forward\" in that merge. Because the commit " +"pointed to by the branch ``feature/issue53`` you merged in was directly " +"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"forward." +msgstr "" +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " +"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " +"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " +"вказівник вперед." + +#: ../../src/vcs/branch.txt:156 +msgid "" +"Changes from ``feature/issue53`` are now in the snapshot of the commit " +"pointed to by the ``master`` branch." +msgstr "" +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"гілка ``master``." + +#: ../../src/vcs/branch.txt:163 +msgid "" +"Now, lets assume another developer started working on ``feature/issue54`` at " +"the same time. And there are few commits on this feature branch. Suppose, " +"the developer decided that work on **issue54** is finished and they want to " +"merge their feature branch into ``master``." +msgstr "" +"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " +"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " +"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " +"з ``master``." + +#: ../../src/vcs/branch.txt:179 +msgid "" +"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"development history has diverged from some older point. Because the commit " +"on the branch you're on isn't a direct ancestor of the branch you're merging " +"in, Git has to do some work. In this case, Git does a simple three-way " +"merge, using two snapshots pointed to by the branch tips and the common " +"ancestor of the two." +msgstr "" +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " +"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " +"просте тристороннє злиття, використовуючи два знімки, на які вказують " +"кінчики гілок, і їхнього спільного предка." + +#: ../../src/vcs/branch.txt:186 +msgid "" +"Instead of just moving the branch pointer forward, Git creates a new " +"snapshot that results from this three-way merge and automatically creates a " +"new commit that points to it. This is referred to as a *merge commit*, and " +"is a special in that it has more than one parent." +msgstr "" +"Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " +"новий знімок, який є результатом цього тристороннього злиття, і автоматично " +"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " +"і він особливий тим, що має більше одного батька." + +#: ../../src/vcs/branch.txt:196 +msgid "Merge conflicts" +msgstr "Конфлікти об'єднання" + +#: ../../src/vcs/branch.txt:198 +msgid "" +"Occasionally, the merge process doesn't go smoothly. If the same part of the " +"same file is changed differently in the two branches you're merging, Git " +"won't be able to merge them cleanly." +msgstr "" +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " +"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " +"Git не зможе об'єднати їх чисто." + +#: ../../src/vcs/branch.txt:209 +msgid "" +"Git hasn't automatically created a new merge commit. It has paused the " +"process while you resolve the conflict. If you want to see which files are " +"unmerged at any point after a merge conflict, you can run ``git status``:" +msgstr "" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " +"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " +"після конфлікту злиття, ви можете запустити ``git status``:" + +#: ../../src/vcs/branch.txt:228 +msgid "" +"Anything that has merge conflicts and hasn't been resolved is listed as " +"unmerged. Git adds standard conflict-resolution markers to the files that " +"have conflicts, so you can open them manually and resolve those conflicts. " +"Your file contains a section that looks something like this:" +msgstr "" +"Все, що має конфлікти злиття, які не було вирішено, позначається як не " +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " +"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " +"Ваш файл містить розділ, який виглядає приблизно так:" + +#: ../../src/vcs/branch.txt:243 +msgid "" +"This means the version in ``HEAD`` (your ``master`` branch, because that was " +"what you had checked out when you ran merge command) is the top part of that " +"block (everything above the \"=======\"), while the version in ``vcs`` " +"branch looks like everything in the bottom part. In order to resolve the " +"conflict, you have to either choose one side or the other or merge the " +"contents yourself." +msgstr "" +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " +"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " +"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " +"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " +"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." + +#: ../../src/vcs/branch.txt:249 +msgid "When conflicts are resolved, you can run ``git status`` command again:" +msgstr "" +"Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " +"status``:" + +#: ../../src/vcs/branch.txt:262 +msgid "" +"If you're happy with that, and you verify that everything that had conflicts " +"has been staged, you can run ``git commit`` for finalize the merge commit." +msgstr "" +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " +"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " +"злиття." + +#: ../../src/vcs/branch.txt:266 +msgid "Rebasing" +msgstr "Перебазування" + +#: ../../src/vcs/branch.txt:268 +msgid "" +"In Git, there two main ways to integrate changes from one branch into " +"another: the ``merge`` and the ``rebase``." +msgstr "" +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " +"\"злиття\" і \"перебазування\"." + +#: ../../src/vcs/branch.txt:271 +msgid "" +"Earlier, there was an example of diverged work and commits made on two " +"different branches." +msgstr "" +"Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " +"зроблених на двох різних гілках." + +#: ../../src/vcs/branch.txt:278 +msgid "" +"The easiest way to integrate the branches, as we've already covered, is the " +"``merge`` command. It performs a three-way merge between the two latest " +"branch snapshots, and the most recent common ancestor of the two, creating a " +"new snapshot (and commit)." +msgstr "" +"Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " +"``merge``. Вона виконує тристороннє злиття між двома останніми знімками " +"гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." + +#: ../../src/vcs/branch.txt:283 +msgid "" +"However, there is another way: you can take the patch of the change that was " +"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " +"is called *rebasing*. With ``rebase`` command, you can take all the changes " +"that were committed on one branch and replay them on a different branch." +msgstr "" +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " +"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " +"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " +"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." + +#: ../../src/vcs/branch.txt:295 +msgid "" +"This operation works by going to the common ancestor of the two branches, " +"getting the diff introduced by each commit of the branch you're on, saving " +"those diffs to temporary files, resetting the current branch to the same " +"commit as the branch you are rebasing onto, and finally applying each change " +"in turn." +msgstr "" +"Ця операція виконується шляхом переходу до спільного предка двох гілок, " +"отримання відмінностей, внесених кожним коммітом гілки, на якій ви " +"перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " +"нарешті, застосування кожної зміни по черзі." + +#: ../../src/vcs/branch.txt:309 msgid "Branching strategies" msgstr "Стратегії розгалуження" -#: ../../src/vcs/branch.txt:83 +#: ../../src/vcs/branch.txt:311 msgid "" "Branching strategy in version control systems defines how branches are " "created, managed, and used in a project's development process. It helps " @@ -572,7 +1322,7 @@ msgstr "" "чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " "структурований робочий процес розробки." -#: ../../src/vcs/branch.txt:90 +#: ../../src/vcs/branch.txt:318 msgid "" "GitFlow is a popular branching strategy that provides a well-defined model " "for managing branches in a Git repository. It was introduced by Vincent " @@ -584,7 +1334,7 @@ msgstr "" "Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " "основних гілок: \"master\" і \"develop\"." -#: ../../src/vcs/branch.txt:94 +#: ../../src/vcs/branch.txt:322 msgid "" "**Master Branch**: The \"master\" branch represents the stable version of " "the codebase. It should always contain production-ready code and be free " @@ -596,7 +1346,7 @@ msgstr "" "жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " "релізні версії." -#: ../../src/vcs/branch.txt:98 +#: ../../src/vcs/branch.txt:326 msgid "" "**Develop Branch**: The \"develop\" branch is where the ongoing development " "and integration of features take place. It serves as the integration branch " @@ -607,7 +1357,7 @@ msgstr "" "розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " "функціональних гілок, а також повинна містити стабільну версію коду." -#: ../../src/vcs/branch.txt:102 +#: ../../src/vcs/branch.txt:330 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " "\"feature\" branch is created off the \"develop\" branch. These branches are " @@ -617,7 +1367,7 @@ msgstr "" "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " "недовговічні і існують лише на час розробки функції." -#: ../../src/vcs/branch.txt:105 +#: ../../src/vcs/branch.txt:333 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " "ready for a release, a \"release\" branch is created. The release branch is " @@ -627,7 +1377,7 @@ msgstr "" "створюється гілка \"release\". Релізна гілка використовується для " "тестування, виправлення помилок і підготовки до розгортання." -#: ../../src/vcs/branch.txt:108 +#: ../../src/vcs/branch.txt:336 msgid "" "**Hotfix Branches**: If a critical issue is discovered in the production " "version, a \"hotfix\" branch is created from the \"master\" branch. This " @@ -638,7 +1388,7 @@ msgstr "" "на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " "виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." -#: ../../src/vcs/branch.txt:113 +#: ../../src/vcs/branch.txt:341 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " @@ -652,14 +1402,6 @@ msgstr "" "випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " "і командою, яка працює над декількома функціями одночасно." -#: ../../src/vcs/commits.txt:-1 -msgid "version, control, system, vcs, git, history, commit" -msgstr "version, control, system, vcs, git, history, commit" - -#: ../../src/vcs/commits.txt:8 -msgid "Working with Commits" -msgstr "Робота з коммітами" - #: ../../src/vcs/github.txt:-1 msgid "version, control, system, vcs, git, github" msgstr "version, control, system, vcs, git, github" @@ -979,3 +1721,155 @@ msgstr "" "Перше, що вам слід зробити під час встановлення Git'у, це вказати своє ім'я " "користувача та адресу електронної пошти. Це важливо, оскільки кожна фіксація " "Git'а використовує цю інформацію." + +#: ../../src/vcs/tagging.txt:4 +msgid "Tagging" +msgstr "Тегування" + +#: ../../src/vcs/tagging.txt:6 +msgid "" +"Like most VCSs, Git has the ability to tag specific points in a repository's " +"history as being important. Typically, people use this functionality to mark " +"release points (``v1.0``, ``v2.0`` and so on)." +msgstr "" +"Як і більшість VCS, Git має можливість позначати певні моменти в історії " +"сховища як важливі. Зазвичай люди використовують цю функцію для позначення " +"точок релізу (``v1.0``, ``v2.0`` і так далі)." + +#: ../../src/vcs/tagging.txt:11 +msgid "Listing tags" +msgstr "Перелік тегів" + +#: ../../src/vcs/tagging.txt:13 +msgid "" +"Listing the existing tags in Git is straightforward. Just type ``git tag`` " +"(with optional ``-l`` or ``--list``)." +msgstr "" +"Перерахувати існуючі теги у Git'і дуже просто. Просто введіть ``git tag`` (з " +"необов'язковим ``-l`` або ``--list``)." + +#: ../../src/vcs/tagging.txt:22 +msgid "" +"This command lists the tags in alphabetical order, the order in which they " +"are displayed has no real importance. You can also search for tags that " +"match a particular pattern. The Git source repo, for instance contains more " +"than 500 tags. If you're interested only in looking at the 1.8.4 series, you " +"can run this:" +msgstr "" +"Ця команда перелічує мітки в алфавітному порядку, порядок їх відображення не " +"має особливого значення. Ви також можете шукати теги, які відповідають " +"певному шаблону. Наприклад, сховище коду Git містить понад 500 тегів. Якщо " +"вас цікавить лише серія 1.8.4, ви можете виконати цю команду:" + +#: ../../src/vcs/tagging.txt:38 +msgid "Creating tags" +msgstr "Створення тегів" + +#: ../../src/vcs/tagging.txt:40 +msgid "Git supports two types of tags: *lightweight* and *annotated*." +msgstr "Git підтримує два типи тегів: *легкі* та *анотовані*." + +#: ../../src/vcs/tagging.txt:42 +msgid "" +"A lightweight tag is very much like a branch that doesn't change -- it's " +"just a pointer to a specific commit." +msgstr "" +"Полегшений тег дуже схожий на гілку, яка не змінюється -- це просто " +"вказівник на конкретний комміт." + +#: ../../src/vcs/tagging.txt:45 +msgid "" +"Annotated tags, however, are stored as full objects in the Git database. " +"They're checksummed; contain the tagger name, email, and date; have a " +"tagging message; and can be signed and verified with GBU Privacy Guard " +"(GPG). It's generally recommended that you create annotated tags so you can " +"have all this information; but if you want a temporary tag or for some " +"reason don't want to keep the other information, lightweight tags are " +"available too." +msgstr "" +"Анотовані мітки, однак, зберігаються як повноцінні об'єкти в базі даних Git. " +"Вони мають контрольну суму, містять ім'я тегувальника, електронну пошту та " +"дату, мають повідомлення про тегування, а також можуть бути підписані та " +"перевірені за допомогою GBU Privacy Guard (GPG). Зазвичай рекомендується " +"створювати анотовані мітки, щоб мати всю цю інформацію; але якщо вам " +"потрібна тимчасова мітка або з якихось причин ви не хочете зберігати іншу " +"інформацію, доступні також полегшені мітки." + +#: ../../src/vcs/tagging.txt:53 +msgid "Annotated tags" +msgstr "Анотовані теги" + +#: ../../src/vcs/tagging.txt:54 +msgid "" +"Creating an annotated tag in Git is simple. The easiest way is to specify ``-" +"a`` when you run the ``tag`` command:" +msgstr "" +"Створити анотовану мітку в Git'і дуже просто. Найпростіший спосіб - вказати " +"``-a`` при виконанні команди ``tag``:" + +#: ../../src/vcs/tagging.txt:70 +msgid "Lightweight tags" +msgstr "Легкі мітки" + +#: ../../src/vcs/tagging.txt:71 +msgid "" +"Another way to tag commits is with a lightweight tag. this is basically the " +"commit checksum stored in a file -- no other information is kept. To create " +"a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` " +"options, just provide a tag name:" +msgstr "" +"Інший спосіб позначення коммітів - використання полегшених тегів. Це, по " +"суті, контрольна сума комміту, яка зберігається у файлі - ніяка інша " +"інформація не зберігається. Щоб створити полегшену мітку, не вказуйте жодної " +"з опцій ``-a``, ``-s`` або ``-m``, просто вкажіть назву мітки:" + +#: ../../src/vcs/tagging.txt:90 +msgid "Tagging later" +msgstr "Відмітити пізніше" + +#: ../../src/vcs/tagging.txt:91 +msgid "You can also tag commits after you're moved past them." +msgstr "Ви також можете позначати коміти після того, як ви пройшли повз них." + +#: ../../src/vcs/tagging.txt:108 +msgid "Deleting tags" +msgstr "Видалення тегів" + +#: ../../src/vcs/tagging.txt:110 +msgid "" +"To delete a tag on your local repository, you can use ``git tag -d " +"``." +msgstr "" +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " +"tag -d ``." + +#: ../../src/vcs/tagging.txt:118 +msgid "Checking out tags" +msgstr "Перевірка тегів" + +#: ../../src/vcs/tagging.txt:120 +msgid "" +"If you want to view the versions of files a tag is pointing to, you can do a " +"``git checkout`` of that tag, although this puts your repository in " +"\"detached HEAD\" state, which has some ill side effects:" +msgstr "" +"Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " +"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" + +#: ../../src/vcs/tagging.txt:146 +msgid "" +"In \"detached HEAD\" state, if you make changes and then create a commit, " +"the tag will stay the same, but your new commit won’t belong to any branch " +"and will be unreachable, except by the exact commit hash. Thus, if you need " +"to make changes -- say you’re fixing a bug on an older version, for instance " +"-- you will generally want to create a branch:" +msgstr "" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " +"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " +"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " +"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " +"як правило, краще створити гілку:" + +#~ msgid "version, control, system, vcs, git, history, commit" +#~ msgstr "version, control, system, vcs, git, history, commit" diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index ee767d7af..1c93d8ec4 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -345,7 +345,8 @@ Viewing the commit history After you have created several commits, or if you have cloned a repository with an existing commit history, you'll probably want to look back to see what has -happened. The most basic and powerful tool to do this is the git log command. +happened. The most basic and powerful tool to do this is the ``git log`` +command. :: diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt index f3253d95b..9eca03a2a 100644 --- a/src/vcs/tagging.txt +++ b/src/vcs/tagging.txt @@ -143,7 +143,7 @@ a ``git checkout`` of that tag, although this puts your repository in HEAD is now at 60565a1 Fix GitFlow branches list -In “detached HEAD” state, if you make changes and then create a commit, the tag +In "detached HEAD" state, if you make changes and then create a commit, the tag will stay the same, but your new commit won’t belong to any branch and will be unreachable, except by the exact commit hash. Thus, if you need to make changes -- say you’re fixing a bug on an older version, for instance -- you will From c902f080f501d001fff38fc0d56b76e65fc2d244 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:34:20 +0300 Subject: [PATCH 407/689] Add cherry-pick section --- src/vcs/branch.txt | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 3b7f5cf57..199b60944 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -302,8 +302,32 @@ in turn. :align: center :caption: After rebase -.. todo: - Describe merging and cherry-pick +.. note:: + Other maintainers prefer to rebase (or cherry-pick) contributed work on + top of their ``master`` branch, rather then merging it in, to keep + a mostly linear history. + +Cherry-picking +============== + +The other way to move introduced work from one branch to another is to +*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. +It takes the patch that was introduced in a commit and tries to reapply +it on the branch you're currently on. This is useful if you have a number +of commits on a topic branch and you want to integrate only one of them, +or if you only have one commit on a topic branch and you'd prefer to +cherry-pick it rather than run rebase. + +.. mermaid:: /../assets/mermaid/git/cherry-pick.mmd + :align: center + :caption: Cherry-pick a commit + +:: + + $ git cherry-pick e43a6 + [master 0288270] Important commit + Date: Thu Aug 17 20:30:05 2023 +0300 + 3 files changed, 17 insertions(+), 3 deletions(-) Branching strategies ==================== From da176fb414e40eb616d28dc025f73a6fc2c74883 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:39:45 +0300 Subject: [PATCH 408/689] Add remote document --- src/vcs/index.txt | 1 + src/vcs/remotes.txt | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 src/vcs/remotes.txt diff --git a/src/vcs/index.txt b/src/vcs/index.txt index d197519b1..4b4ab1217 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -15,4 +15,5 @@ basics tagging branch + remotes github diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt new file mode 100644 index 000000000..4a8bb3076 --- /dev/null +++ b/src/vcs/remotes.txt @@ -0,0 +1,3 @@ +############################################################################### + Remotes +############################################################################### From 3d8c4fa14f443d860aa13995ebeb0b6a463cdf22 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:43:25 +0300 Subject: [PATCH 409/689] Change headers in VCS documentation --- src/vcs/remotes.txt | 4 ++-- src/vcs/tagging.txt | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt index 4a8bb3076..980850800 100644 --- a/src/vcs/remotes.txt +++ b/src/vcs/remotes.txt @@ -1,3 +1,3 @@ -############################################################################### +******************************************************************************* Remotes -############################################################################### +******************************************************************************* diff --git a/src/vcs/tagging.txt b/src/vcs/tagging.txt index 9eca03a2a..b52529859 100644 --- a/src/vcs/tagging.txt +++ b/src/vcs/tagging.txt @@ -1,7 +1,6 @@ - -############################################################################### +******************************************************************************* Tagging -############################################################################### +******************************************************************************* Like most VCSs, Git has the ability to tag specific points in a repository's history as being important. Typically, people use this functionality to mark From 018b58603507d3698b4f6672e95c6546f06e3ebf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 20:59:29 +0300 Subject: [PATCH 410/689] Update GitHub document with 2FA note (GitHub official) --- src/vcs/github.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/vcs/github.txt b/src/vcs/github.txt index 2b2b23c19..f5067bffe 100644 --- a/src/vcs/github.txt +++ b/src/vcs/github.txt @@ -12,7 +12,6 @@ `GitHub`_ is the single largest host for Git repositories, and is the central point of collaboration for millions of developers and projects. - Account setup and configuration =============================== @@ -21,5 +20,16 @@ and press "Sign Up" button. The GitHub will lead you through the account creation process. Just follow the hints and provide an email address, username and a strong password. +About authentication to GitHub +------------------------------ + +.. note:: + Starting in March 2023 and through the end of 2023, GitHub gradually began + to require all users who contribute code on GitHub to enable two-factor + authentication (2FA). + +Connect with SSH +================ + .. todo: - Describe SSH key generation and set up + From b651fb677edfdaccfb2d78f7aa2d893a4b9c38b3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 17 Aug 2023 22:37:26 +0300 Subject: [PATCH 411/689] Add SSH keys setup section for GitHub document --- src/vcs/github.txt | 104 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/vcs/github.txt b/src/vcs/github.txt index f5067bffe..6ed39d2c3 100644 --- a/src/vcs/github.txt +++ b/src/vcs/github.txt @@ -31,5 +31,109 @@ About authentication to GitHub Connect with SSH ================ +You can access and write data in repositories on GitHub using +:abbr:`SSH (Secure Shell Protocol)`. When you connect to via SSH, you +authenticate using a private key file on your local machine. + +Generating a new SSH key +------------------------ + +You can generate a new SSH key on your local machine. After you do that, +you can add the **public** key to your account on GitHub to enable +authentication for Git operations over SSH. + +#. Open terminal (git-bash will suite for Windows users) +#. Run command: + + :: + + ssh-keygen -t ed25519 -C "your@email.com" + + .. note:: + If you are using a legacy system that doesn't support the **Ed25519** + algorithm, use: + + :: + + ssh-keygen -t rsa -b 4096 -C "your@email.com" + + When you're prompted to "Enter a file in which to save the key", you can + press **Enter** to accept the default file location. + + :: + + $ Enter a file in which to save the key (~/.ssh/id_ALGORITHM):[Press enter] + + Type a secure passphrase, if you want -- this is an extra layer of + security. + + :: + + $ Enter passphrase (empty for no passphrase): [Type a passphrase] + $ Enter same passphrase again: [Type passphrase again] + + This will create a new SSH key, using the provided email as label. + +Navigate to ssh key location -- ".ssh" folder at your homedir by default and +ensure there are two files generated: + +- **id_ALGORITHM** (e.g. "id_rsa", "id_ed252519" etc.) +- **id_ALGORITHM.pub** (e.g. "id_rsa.pub", "id_ed25519.pub" etc.) + +.. important:: + The private key (the one without ".pub") should be kept secure and private. + You should never share this. + + The public key is what you add to servers or services to which you want + to authenticate using your private key. + +Adding your SSH key to the ssh-agent and GitHub +----------------------------------------------- + +Before adding a new SSH key to the ssh-agent to manage your keys, you should +have checked for existing SSH keys and generated SSH keys. + +#. Ensure the ssh-agent is running. You can use the "Auto-launching" or + start it manually: + + :: + + $ eval "$(ssh-agent -s)" + > Agent pid 12345 + +#. Add you SSH private key to the ssh-agent. + + :: + + ssh-add ~/.ssh/id_ALGORITHM + +#. Add the SSH public key to your account on GitHub. + Copy the SSH public key to your clipboard. + + :: + + clip < ~/.ssh/id_ALGORITHM.pub + + Alternatively, if ``clip`` isn't working, just type public key content + to the terminal using ``cat``, + + :: + + cat ~/.ssh/id_ALGORITHM.pub + + or simply navigate to the file and open it with any text editor. + At the end, you need to copy public key content. + +#. On GitHub, in the upper-right corner of any page, click your profile photo, + then click **Settings**. +#. In the "Access" section of the sidebar, click + **SSH and GPG keys** and press **New SSH key** button. +#. In the "Title" field, add a descriptive label for the new key. +#. Select the type of key -- "Authentication key". +#. In the "Key" field, paste your public key. +#. Click **Add SSH key**. +#. If prompted, confirm access to your account on GitHub. + .. todo: + GNU Privacy Guard From db26dc2d592c93a949e1221ca9d09966d13a6024 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 19 Aug 2023 11:40:14 +0300 Subject: [PATCH 412/689] Add remotes document --- src/vcs/remotes.txt | 158 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt index 980850800..85b3aa554 100644 --- a/src/vcs/remotes.txt +++ b/src/vcs/remotes.txt @@ -1,3 +1,161 @@ ******************************************************************************* Remotes ******************************************************************************* + +To be able to collaborate on any Git project, you need to know how to manage +your remote repositories. Remote repositories are versions of your project +that are hosted on the Internet or network somewhere. You can have several of +them, each of which generally is either read-only or read/write for you. +Managing remotes includes knowing how to add remote repositories, remove +remote repositories that are no longer valid, manage various branches and +define them as being tracked or not, and more. + +.. + .. note:: + It is entirely possible that you can be working with a "remote" + repository that is, in fact, on the same host you are. + The word "remote" does not necessary imply that repository is somewhere + else on the network or Internet, only that it is elsewhere. + +Showing your remote +=================== + +To see which remote servers you have configured, you can run the ``git remote`` +command. It lists the shortnames of each remote handle you're specified. If +you've cloned your repository, you should at least see ``origin`` - that is +default name Git gives to the server you clone from: + +:: + + $ git remote + origin + upstream + + $ git remote -v + origin git@github.com:edu-python-course/edu-python-course.github.io (fetch) + origin git@github.com:edu-python-course/edu-python-course.github.io (push) + upstream git@github.com:PonomaryovVladyslav/PythonCources.git (fetch) + upstream git@github.com:PonomaryovVladyslav/PythonCources.git (push) + + +This means we can pull contributions from any of these users pretty easily. +We may additionally have permission to push to one or more of these. + +Adding remote repositories +========================== + +To add a new remote Git repository as a shortname you can reference easily, run +``git remote add ``: + +:: + + $ git remote + origin + upstream + $ git remote add personal https://github.com/shorodilov/python-course + $ git remote + origin + upstream + personal + +Now you can use the string "personal" on the command line in lieu of the whole +URL. ``master`` branch of "https://github.com/shorodilov/python-course" is now +accessible as ``personal/master``, while shortname to the same branch in origin +will be -- ``origin/master``. + +Fetching and pulling from remotes +================================= + +To get data from remote project, you can run ``git fetch`` command. +The command goes out to that remote project and pulls down all the information +from that remote project that you don't have yet. After you do this, you should +have references to all the branches from that remote, which you can merge in or +inspect at any time. + +:: + + $ git fetch + +If your current branch is set up to track a remote branch, you can use +``git pull`` command to automatically fetch and then merge that remote branch +into your current branch. By default, the ``git clone`` command automatically +sets up your local ``master`` branch to track the remote ``master`` branch +(or whatever default remote branch). + +.. versionadded:: 2.27 + From Git version 2.27 onward, ``git pull`` will give a warning if the + ``pull.rebase`` variable is not set. Git will keep warning you until + you set the variable. + + If you want the default behavior of Git (fast-forward if possible, else + create a merge commit): ``git config --global pull.rebase "false"``. + + If you want to rebase when pulling: + ``git config --global pull.rebase "true"``. + +Pushing to remotes +================== + +When you have your project at a point that you want to share, you have to push +it upstream. The command for this is simple: ``git push ``. + +:: + + $ git push origin master + +This command works only if you cloned from a server to which you have write +access and if nobody has pushed in the meantime. If you and someone else clone +at the same time and they push upstream and then you push upstream, you push +will rightly be rejected. You'll have to fetch their work first and incorporate +it into yours before you'll be allowed to push. + +Inspecting a remote +=================== + +If you want to see more information about a particular remote, you can use the +``git remote show Date: Sat, 19 Aug 2023 11:46:20 +0300 Subject: [PATCH 413/689] Add pushing a new branch to remote section --- src/vcs/remotes.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/vcs/remotes.txt b/src/vcs/remotes.txt index 85b3aa554..94c7c7ce9 100644 --- a/src/vcs/remotes.txt +++ b/src/vcs/remotes.txt @@ -109,6 +109,15 @@ at the same time and they push upstream and then you push upstream, you push will rightly be rejected. You'll have to fetch their work first and incorporate it into yours before you'll be allowed to push. +Pushing a new branch to remote +------------------------------ + +In case you have created a local branch for some specific needs and you want +to share this branch, you need to set up track for this branch. This can be +done by using: ``git push --set-upstream origin ``. This will +create a new remote branch and set up track to your current local branch. +There is a shortcut for this command: ``git push -u origin ``. + Inspecting a remote =================== From 17fdc7d88db4e93aa2490abf37f38a209ca24358 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 19 Aug 2023 11:59:30 +0300 Subject: [PATCH 414/689] Update translations for VCS --- src/_locales/uk/LC_MESSAGES/vcs.po | 504 +++++++++++++++++++++++++++-- 1 file changed, 471 insertions(+), 33 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 45992f85a..903e01250 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-16 22:36+0300\n" -"PO-Revision-Date: 2023-08-16 22:36+0300\n" +"POT-Creation-Date: 2023-08-19 11:46+0300\n" +"PO-Revision-Date: 2023-08-19 11:59+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -1302,11 +1302,44 @@ msgstr "" "поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " "нарешті, застосування кожної зміни по черзі." -#: ../../src/vcs/branch.txt:309 +#: ../../src/vcs/branch.txt:306 +msgid "" +"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " +"of their ``master`` branch, rather then merging it in, to keep a mostly " +"linear history." +msgstr "" +"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " +"об'єднувати їх, щоб зберегти переважно лінійну історію." + +#: ../../src/vcs/branch.txt:311 +msgid "Cherry-picking" +msgstr "Cherry-picking" + +#: ../../src/vcs/branch.txt:313 +msgid "" +"The other way to move introduced work from one branch to another is to " +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " +"takes the patch that was introduced in a commit and tries to reapply it on " +"the branch you're currently on. This is useful if you have a number of " +"commits on a topic branch and you want to integrate only one of them, or if " +"you only have one commit on a topic branch and you'd prefer to cherry-pick " +"it rather than run rebase." +msgstr "" +"Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " +"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " +"відновлення бази для одного коміту. Він бере патч, який було внесено в " +"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " +"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " +"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " +"rebase." + +#: ../../src/vcs/branch.txt:333 msgid "Branching strategies" msgstr "Стратегії розгалуження" -#: ../../src/vcs/branch.txt:311 +#: ../../src/vcs/branch.txt:335 msgid "" "Branching strategy in version control systems defines how branches are " "created, managed, and used in a project's development process. It helps " @@ -1322,7 +1355,7 @@ msgstr "" "чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " "структурований робочий процес розробки." -#: ../../src/vcs/branch.txt:318 +#: ../../src/vcs/branch.txt:342 msgid "" "GitFlow is a popular branching strategy that provides a well-defined model " "for managing branches in a Git repository. It was introduced by Vincent " @@ -1334,7 +1367,7 @@ msgstr "" "Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " "основних гілок: \"master\" і \"develop\"." -#: ../../src/vcs/branch.txt:322 +#: ../../src/vcs/branch.txt:346 msgid "" "**Master Branch**: The \"master\" branch represents the stable version of " "the codebase. It should always contain production-ready code and be free " @@ -1346,7 +1379,7 @@ msgstr "" "жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " "релізні версії." -#: ../../src/vcs/branch.txt:326 +#: ../../src/vcs/branch.txt:350 msgid "" "**Develop Branch**: The \"develop\" branch is where the ongoing development " "and integration of features take place. It serves as the integration branch " @@ -1357,7 +1390,7 @@ msgstr "" "розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " "функціональних гілок, а також повинна містити стабільну версію коду." -#: ../../src/vcs/branch.txt:330 +#: ../../src/vcs/branch.txt:354 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " "\"feature\" branch is created off the \"develop\" branch. These branches are " @@ -1367,7 +1400,7 @@ msgstr "" "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " "недовговічні і існують лише на час розробки функції." -#: ../../src/vcs/branch.txt:333 +#: ../../src/vcs/branch.txt:357 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " "ready for a release, a \"release\" branch is created. The release branch is " @@ -1377,7 +1410,7 @@ msgstr "" "створюється гілка \"release\". Релізна гілка використовується для " "тестування, виправлення помилок і підготовки до розгортання." -#: ../../src/vcs/branch.txt:336 +#: ../../src/vcs/branch.txt:360 msgid "" "**Hotfix Branches**: If a critical issue is discovered in the production " "version, a \"hotfix\" branch is created from the \"master\" branch. This " @@ -1388,7 +1421,7 @@ msgstr "" "на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " "виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." -#: ../../src/vcs/branch.txt:341 +#: ../../src/vcs/branch.txt:365 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " @@ -1418,11 +1451,11 @@ msgstr "" "`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " "точкою співпраці для мільйонів розробників і проектів." -#: ../../src/vcs/github.txt:17 +#: ../../src/vcs/github.txt:16 msgid "Account setup and configuration" msgstr "Налаштування та конфігурація акаунта" -#: ../../src/vcs/github.txt:19 +#: ../../src/vcs/github.txt:18 msgid "" "The first thing you need to do is set up a free user account. Visit " "`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " @@ -1435,6 +1468,204 @@ msgstr "" "дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " "та надійний пароль." +#: ../../src/vcs/github.txt:24 +msgid "About authentication to GitHub" +msgstr "Про автентифікацію на GitHub" + +#: ../../src/vcs/github.txt:27 +msgid "" +"Starting in March 2023 and through the end of 2023, GitHub gradually began " +"to require all users who contribute code on GitHub to enable two-factor " +"authentication (2FA)." +msgstr "" +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " +"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " +"двофакторну автентифікацію (2FA)." + +#: ../../src/vcs/github.txt:32 +msgid "Connect with SSH" +msgstr "Підключення за допомогою SSH" + +#: ../../src/vcs/github.txt:34 +msgid "" +"You can access and write data in repositories on GitHub using :abbr:`SSH " +"(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " +"using a private key file on your local machine." +msgstr "" +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " +"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " +"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " +"комп'ютері." + +#: ../../src/vcs/github.txt:39 +msgid "Generating a new SSH key" +msgstr "Генерація нового SSH-ключа" + +#: ../../src/vcs/github.txt:41 +msgid "" +"You can generate a new SSH key on your local machine. After you do that, you " +"can add the **public** key to your account on GitHub to enable " +"authentication for Git operations over SSH." +msgstr "" +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " +"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " +"увімкнути автентифікацію для операцій з Git'ом через SSH." + +#: ../../src/vcs/github.txt:45 +msgid "Open terminal (git-bash will suite for Windows users)" +msgstr "Відкритий термінал (для користувачів Windows підійде git-bash)" + +#: ../../src/vcs/github.txt:46 +msgid "Run command:" +msgstr "Виконати команду:" + +#: ../../src/vcs/github.txt:53 +msgid "" +"If you are using a legacy system that doesn't support the **Ed25519** " +"algorithm, use:" +msgstr "" +"Якщо ви використовуєте застарілу систему, яка не підтримує алгоритм " +"**Ed25519**, використовуйте його:" + +#: ../../src/vcs/github.txt:60 +msgid "" +"When you're prompted to \"Enter a file in which to save the key\", you can " +"press **Enter** to accept the default file location." +msgstr "" +"Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " +"натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." + +#: ../../src/vcs/github.txt:67 +msgid "" +"Type a secure passphrase, if you want -- this is an extra layer of security." +msgstr "" +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." + +#: ../../src/vcs/github.txt:75 +msgid "This will create a new SSH key, using the provided email as label." +msgstr "" +"Буде створено новий SSH-ключ, з використанням наданої адреси електронної " +"пошти як мітки." + +#: ../../src/vcs/github.txt:77 +msgid "" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " +"and ensure there are two files generated:" +msgstr "" +"Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " +"каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" + +#: ../../src/vcs/github.txt:80 +msgid "**id_ALGORITHM** (e.g. \"id_rsa\", \"id_ed252519\" etc.)" +msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощо)." + +#: ../../src/vcs/github.txt:81 +msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" +msgstr "" +"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." + +#: ../../src/vcs/github.txt:84 +msgid "" +"The private key (the one without \".pub\") should be kept secure and " +"private. You should never share this." +msgstr "" +"Закритий ключ (той, що без \".pub\") слід зберігати в безпеці і не " +"розголошувати. Ви ніколи не повинні ділитися ним." + +#: ../../src/vcs/github.txt:87 +msgid "" +"The public key is what you add to servers or services to which you want to " +"authenticate using your private key." +msgstr "" +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " +"хочете пройти автентифікацію за допомогою вашого закритого ключа." + +#: ../../src/vcs/github.txt:91 +msgid "Adding your SSH key to the ssh-agent and GitHub" +msgstr "Додавання SSH-ключа до ssh-агента та GitHub" + +#: ../../src/vcs/github.txt:93 +msgid "" +"Before adding a new SSH key to the ssh-agent to manage your keys, you should " +"have checked for existing SSH keys and generated SSH keys." +msgstr "" +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " +"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." + +#: ../../src/vcs/github.txt:96 +msgid "" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " +"it manually:" +msgstr "" +"Переконайтеся, що ssh-агент запущено. Ви можете скористатися " +"\"Автозапуском\" або запустити його вручну:" + +#: ../../src/vcs/github.txt:104 +msgid "Add you SSH private key to the ssh-agent." +msgstr "Додайте ваш приватний ключ SSH до ssh-агента." + +#: ../../src/vcs/github.txt:110 +msgid "" +"Add the SSH public key to your account on GitHub. Copy the SSH public key to " +"your clipboard." +msgstr "" +"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " +"відкритий ключ SSH до буфера обміну." + +#: ../../src/vcs/github.txt:117 +msgid "" +"Alternatively, if ``clip`` isn't working, just type public key content to " +"the terminal using ``cat``," +msgstr "" +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " +"терміналі за допомогою ``cat``," + +#: ../../src/vcs/github.txt:124 +msgid "" +"or simply navigate to the file and open it with any text editor. At the end, " +"you need to copy public key content." +msgstr "" +"або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " +"текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." + +#: ../../src/vcs/github.txt:127 +msgid "" +"On GitHub, in the upper-right corner of any page, click your profile photo, " +"then click **Settings**." +msgstr "" +"На GitHub у правому верхньому куті будь-якої сторінки натисніть на " +"фотографію свого профілю, а потім натисніть **Налаштування**." + +#: ../../src/vcs/github.txt:129 +msgid "" +"In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " +"press **New SSH key** button." +msgstr "" +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " +"кнопку **Новий ключ SSH**." + +#: ../../src/vcs/github.txt:131 +msgid "In the \"Title\" field, add a descriptive label for the new key." +msgstr "У полі \"Назва\" додайте описову мітку для нового ключа." + +#: ../../src/vcs/github.txt:132 +msgid "Select the type of key -- \"Authentication key\"." +msgstr "Виберіть тип ключа - \"Ключ автентифікації\"." + +#: ../../src/vcs/github.txt:133 +msgid "In the \"Key\" field, paste your public key." +msgstr "У полі \"Ключ\" вставте ваш відкритий ключ." + +#: ../../src/vcs/github.txt:134 +msgid "Click **Add SSH key**." +msgstr "Натисніть **Додати SSH-ключ**." + +#: ../../src/vcs/github.txt:135 +msgid "If prompted, confirm access to your account on GitHub." +msgstr "" +"Якщо з'явиться відповідний запит, підтвердіть доступ до свого облікового " +"запису на GitHub." + #: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 msgid "version, control, system, vcs, git" msgstr "version, control, system, vcs, git" @@ -1632,6 +1863,213 @@ msgstr "" "графічного клієнта є справою особистого смаку, всі користувачі матимуть " "встановлені та доступні інструменти командного рядка." +#: ../../src/vcs/remotes.txt:3 +msgid "Remotes" +msgstr "Віддалені репозиторії" + +#: ../../src/vcs/remotes.txt:5 +msgid "" +"To be able to collaborate on any Git project, you need to know how to manage " +"your remote repositories. Remote repositories are versions of your project " +"that are hosted on the Internet or network somewhere. You can have several " +"of them, each of which generally is either read-only or read/write for you. " +"Managing remotes includes knowing how to add remote repositories, remove " +"remote repositories that are no longer valid, manage various branches and " +"define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " +"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " +"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " +"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " +"або читання/запису. Керування віддаленими сховищами включає в себе вміння " +"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " +"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " +"чи ні, і багато іншого." + +#: ../../src/vcs/remotes.txt:21 +msgid "Showing your remote" +msgstr "Перелік віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:23 +msgid "" +"To see which remote servers you have configured, you can run the ``git " +"remote`` command. It lists the shortnames of each remote handle you're " +"specified. If you've cloned your repository, you should at least see " +"``origin`` - that is default name Git gives to the server you clone from:" +msgstr "" +"Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " +"команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " +"віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " +"з якого ви клонуєте:" + +#: ../../src/vcs/remotes.txt:41 +msgid "" +"This means we can pull contributions from any of these users pretty easily. " +"We may additionally have permission to push to one or more of these." +msgstr "" +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " +"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " +"або декількох з них." + +#: ../../src/vcs/remotes.txt:45 +msgid "Adding remote repositories" +msgstr "Додавання віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:47 +msgid "" +"To add a new remote Git repository as a shortname you can reference easily, " +"run ``git remote add ``:" +msgstr "" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " +"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" + +#: ../../src/vcs/remotes.txt:61 +msgid "" +"Now you can use the string \"personal\" on the command line in lieu of the " +"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" +"course\" is now accessible as ``personal/master``, while shortname to the " +"same branch in origin will be -- ``origin/master``." +msgstr "" +"Тепер ви можете використовувати рядок \"personal\" в командному рядку " +"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" +"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " +"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." + +#: ../../src/vcs/remotes.txt:67 +msgid "Fetching and pulling from remotes" +msgstr "Отримання та витягування з віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:69 +msgid "" +"To get data from remote project, you can run ``git fetch`` command. The " +"command goes out to that remote project and pulls down all the information " +"from that remote project that you don't have yet. After you do this, you " +"should have references to all the branches from that remote, which you can " +"merge in or inspect at any time." +msgstr "" +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " +"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " +"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " +"переглянути у будь-який час." + +#: ../../src/vcs/remotes.txt:79 +msgid "" +"If your current branch is set up to track a remote branch, you can use ``git " +"pull`` command to automatically fetch and then merge that remote branch into " +"your current branch. By default, the ``git clone`` command automatically " +"sets up your local ``master`` branch to track the remote ``master`` branch " +"(or whatever default remote branch)." +msgstr "" +"Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " +"можете скористатися командою ``git pull`` для автоматичного отримання і " +"подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " +"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " +"іншої віддаленої гілки за замовчуванням)." + +#: ../../src/vcs/remotes.txt:85 +msgid "" +"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." +"rebase`` variable is not set. Git will keep warning you until you set the " +"variable." +msgstr "" +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " +"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " +"доки ви не встановите змінну." + +#: ../../src/vcs/remotes.txt:90 +msgid "" +"If you want the default behavior of Git (fast-forward if possible, else " +"create a merge commit): ``git config --global pull.rebase \"false\"``." +msgstr "" +"Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " +"pull.rebase \"false\"``." + +#: ../../src/vcs/remotes.txt:93 +msgid "" +"If you want to rebase when pulling: ``git config --global pull.rebase " +"\"true\"``." +msgstr "" +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." +"rebase \"true\"``." + +#: ../../src/vcs/remotes.txt:97 +msgid "Pushing to remotes" +msgstr "Відправка до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:99 +msgid "" +"When you have your project at a point that you want to share, you have to " +"push it upstream. The command for this is simple: ``git push " +"``." +msgstr "" +"Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " +"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " +"push <віддалений> <гілка>``." + +#: ../../src/vcs/remotes.txt:106 +msgid "" +"This command works only if you cloned from a server to which you have write " +"access and if nobody has pushed in the meantime. If you and someone else " +"clone at the same time and they push upstream and then you push upstream, " +"you push will rightly be rejected. You'll have to fetch their work first and " +"incorporate it into yours before you'll be allowed to push." +msgstr "" +"Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " +"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " +"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " +"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." + +#: ../../src/vcs/remotes.txt:113 +msgid "Pushing a new branch to remote" +msgstr "Переміщення нової гілки до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:115 +msgid "" +"In case you have created a local branch for some specific needs and you want " +"to share this branch, you need to set up track for this branch. This can be " +"done by using: ``git push --set-upstream origin ``. This will " +"create a new remote branch and set up track to your current local branch. " +"There is a shortcut for this command: ``git push -u origin ``." +msgstr "" +"Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " +"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " +"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " +"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " +"<віддалена_гілка>``." + +#: ../../src/vcs/remotes.txt:122 +msgid "Inspecting a remote" +msgstr "Перевірка віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:124 +msgid "" +"If you want to see more information about a particular remote, you can use " +"the ``git remote show ``." @@ -1843,11 +2281,11 @@ msgstr "" "Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " "tag -d ``." -#: ../../src/vcs/tagging.txt:118 +#: ../../src/vcs/tagging.txt:117 msgid "Checking out tags" msgstr "Перевірка тегів" -#: ../../src/vcs/tagging.txt:120 +#: ../../src/vcs/tagging.txt:119 msgid "" "If you want to view the versions of files a tag is pointing to, you can do a " "``git checkout`` of that tag, although this puts your repository in " @@ -1857,7 +2295,7 @@ msgstr "" "виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " "\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" -#: ../../src/vcs/tagging.txt:146 +#: ../../src/vcs/tagging.txt:145 msgid "" "In \"detached HEAD\" state, if you make changes and then create a commit, " "the tag will stay the same, but your new commit won’t belong to any branch " From a44c7de92111e630537729766a54643f9a3b818a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 19 Aug 2023 12:19:03 +0300 Subject: [PATCH 415/689] Fix translations --- src/_locales/uk/LC_MESSAGES/vcs.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 903e01250..37257b7c3 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-19 11:46+0300\n" -"PO-Revision-Date: 2023-08-19 11:59+0300\n" +"PO-Revision-Date: 2023-08-19 12:18+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -1067,7 +1067,7 @@ msgstr "Щоб перейти до існуючої гілки, виконайт #: ../../src/vcs/branch.txt:109 msgid "Basic branching and merging" -msgstr "To switch to an existing branch, you run the ``git checkout`` command" +msgstr "Основи розгалуження та злиття" #: ../../src/vcs/branch.txt:111 msgid "" From 1b64ff78e77dc9aec288199d97c64b8ad80ef36c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Aug 2023 21:24:32 +0300 Subject: [PATCH 416/689] Add a short introduction to VCS part (index) --- src/vcs/index.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 4b4ab1217..0f0675aef 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -7,6 +7,22 @@ Version Control System ############################################################################### +:abbr:`VCS (Version Control Systems)` play an integral role in modern software +development. They allow multiple developers to work on a project simultaneously +without overwriting each other's changes. VCSs track the history of changes +to the source code, making it possible to revert to previous states, compare +versions, and more. + +Among the VCSs available, Git stands out as one of the most popular and +powerful tools. It's used by small projects and large-scale software alike, +owing to its flexibility, distributed nature, and efficient handling of +codebase versions. + +In this part, you'll learn about the fundamentals of version control, how to +set up your environment for Git, dive into the basics of commits, branches, and +merges, understand the significance of tags, and finally, explore how to +collaborate using remote repositories and platforms like GitHub. + .. toctree:: :name: vcs From 78713332a7a8712ff8ca75d71f7d9764a2ce3353 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 31 Aug 2023 22:29:22 +0300 Subject: [PATCH 417/689] Add pull request document --- src/refs.bib | 19 +++++++---- src/vcs/pr.txt | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 src/vcs/pr.txt diff --git a/src/refs.bib b/src/refs.bib index 3a2f8b3c2..4e4b61640 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -138,20 +138,27 @@ @misc{docs-python:controlflow url = {https://docs.python.org/tutorial/controlflow.html}, } -@misc{github:creating-pr, - title = "{Creating a pull request}", - author = "{GitHub Docs}", +@misc{github:create-pr, + title = {Creating a pull request}, + author = {GitHub Docs}, url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request}, } @misc{github:about-pr, - title = "{About pull requests}", + title = {About pull requests}, + author = {GitHub Docs}, url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests}, } +@misc{github:compare-pr, + title = {About comparing branches in pull request}, + author = {GitHub Docs}, + url = {https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests}, +} + @misc{github:ssh, - title = "{Generating a new SSH key and adding it to the ssh-agent}", - author = "{GitHub Docs}", + title = {Generating a new SSH key and adding it to the ssh-agent}, + author = {GitHub Docs}, url = {https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent}, } diff --git a/src/vcs/pr.txt b/src/vcs/pr.txt new file mode 100644 index 000000000..72b9ea32e --- /dev/null +++ b/src/vcs/pr.txt @@ -0,0 +1,86 @@ +.. meta:: + :description: Version Control System - Pull Requests + :author: Serhii Horodilov + :author: Vladyslav Ponomaryov + :keywords: version, control, system, vcs, git, pull request, merge + +******************************************************************************* + Pull Request +******************************************************************************* + +Pull request let you tell others about changes you've pushed to a branch in +a repository on GitHub. Once a pull request is opened, you can discuss and +review the potential changes with collaborators and add follow-up commits +before your changes are merged into the base branch:cite:`github:about-pr`. + +Draft pull requests +------------------- + +Draft pull requests are available in public repositories on GitHub. +When you create a pull request, you can choose to a create a pull request that +is ready for review or a draft pull request. Draft pull requests cannot be +merged. When you're ready to get feedback on your pull request, you can mark +your draft pull request as ready for review. + +Difference between commits on compare and pull request pages +------------------------------------------------------------ + +The compare and pull request pages use different methods to calculate the diff +for changed files: + +- Compare pages show the diff between the tip of the head ref and the current + common ancestor (that is, the merge base) of the head and base ref. +- Pull request pages show the diff between the tip of the head ref and + the common ancestor of the head and base ref at the time when the pull + request was created. + Consequently, the merge base used for the comparison might be different. + +About comparing branches +======================== + +Pull requests display diffs to compare the changes you made in your topic +branch against the base branch that you want to merge your changes into. + +Rather that viewing the commits themselves, you can view the proposed changes +as they'll appear in the files once the pull request is merged. The files +appear in alphabetical order within the Files changed tab. Additions to +the files appear in green and are prefaced by a ``+`` sign while content that +has been removed appears in red and is prefaced by a ``-`` sign +:cite:`github:compare-pr`. + +Creating a pull request +======================= + +Create a pull request to propose and collaborate on changes to a repository. +These changes are proposed in a *branch*, which ensures that the default +branch only contains finished and approved work:cite:`github:create-pr`. + +About branches +-------------- + +Use a branch to isolate development work without affecting other branches in +the repository. Each repository has one default branch, and can have multiple +other branches. You can merge a branch into another branch using a pull +request. + +Branches allow you to develop features, fix bugs, or safely experiment with +new ideas in a contained area of your repository. + +You always create a branch from an existing branch. Typically, you might create +a new branch from the default branch of your repository. + +Creating a pull request +----------------------- + +#. On GitHub, navigate to the main page of the repository. +#. Switch to "Pull requests" tab. +#. Press "New pull request" button. +#. Select base and source branches. +#. Press "Create pull request" button. +#. Provide a meaningful title and description. +#. Draft or create a pull request. + + * To create pull request that is ready for review, click + **Create Pull Request**. + * To create a draft pull request, use the drop-down and select + **Create Draft Pull Request**, then click **Draft Pull Request**. From be632041120bb62c05e5720e1a0639deb387603c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 31 Aug 2023 22:43:48 +0300 Subject: [PATCH 418/689] Create a draft for "Create a pull request" how-to appx document Co-authored-by: Vladyslav Ponomaryov <57481900+PonomaryovVladyslav@users.noreply.github.com> --- src/appx/create_pr.txt | 200 +++-------------------------------------- 1 file changed, 14 insertions(+), 186 deletions(-) diff --git a/src/appx/create_pr.txt b/src/appx/create_pr.txt index 1b2d11736..24fe0854a 100644 --- a/src/appx/create_pr.txt +++ b/src/appx/create_pr.txt @@ -2,189 +2,17 @@ :description: The instructions to create a pull request via GitHub :author: Vladyslav Ponomaryov :author: Serhii Horodilov sgorodil@gmail.com - :keywords: git, github, pull request, branch, merge - -######################### -Creating the Pull Request -######################### - -Create a pull request to propose and collaborate on changes to a repository. -These changes are proposed in a *branch*, which ensures that the default -branch only contains finished and approved work :cite:`github:creating-pr`. - -******************* -About pull requests -******************* - -Pull requests let you tell others about changes you've pushed to a branch in -a repository on GitHub. Once a pull request is opened, you can discuss and -review the potential changes with collaborators and add follow-up commits -before your changes are merged into the base branch -:cite:`github:about-pr`. - -The compare and pull request pages use different methods to calculate the diff -for changed files: - -- Compare pages show the diff between the tip of the head ref and the current - common ancestor (that is, the merge base) of the head and base ref. -- Pull request pages show the diff between the tip of the head ref and - the common ancestor of the head and base ref at the time when the pull - request was created. - Consequently, the merge base used for the comparison might be different. - -In *few words*: both source and target branches **should** share some commit(s) -in their history and the source branch **should** has commit(s) missing on -the target one. - -****************** -Repository content -****************** - -Following SHOULD be included to the repository: - -- code base -- project dependencies (if any) - -Following MAY be included to the repository: - -- additional information (e.g. README file and other documents) -- dummy data (e.g. fixtures for development and testing etc.) - -Following SHOULD be excluded from the repository: - -- virtual environment directory -- project database (e.g. "*.sqlite3", "*.db" etc.) -- python byte-compiled code (``__pycache__``) -- IDE configurations (e.g. ".vscode", ".idea" etc.) -- Desktop Services Store (".DS_Store") - -********************** -Repository preparation -********************** - -This should be done once for each repository. - -Repository initialization -========================= - -#. Create README file and provide a brief description for your project - (optional). -#. Create a virtual environment. -#. Install project dependencies. -#. Freeze the dependencies. - - .. code-block:: shell - - pip freeze > requirements.txt - -#. Create a base code modules (e.g. initialize django project and apps, - or create an empty python module like "main.py" etc.). -#. Create ".gitignore" file and set up directories and files to be excluded -#. Create a fresh repository. - - .. code-block:: shell - - git init - -#. Stage and commit changes. -#. Set up remote repository. - - .. code-block:: shell - - git remote add origin - -#. Push your local branch to remote repo. - -Append contributors to remote repository -======================================== - -Reviews allow collaborators to comment on the changes proposed in -pull requests, approve the changes, or request further changes before -the pull request is merged. -Repository administrators can require that all pull requests are approved -before being merged. - -#. On `GitHub `_, navigate to the repository settings page - and switch to **Collaborators and teams** menu item. -#. Under **Manage access** section click ``Add people`` button. -#. In modal window start typing GitHub username. -#. Select a contributor from the dropdown menu. - -****************** -Working on feature -****************** - -#. Create a dedicated branch with some representative name - (e.g. "feature/models", "cbv" etc.). -#. Switch to the newly created branch. -#. Do the work and commit changes on a feature branch. - -.. hint:: - - You can create a branch and switch to it by a single command. - - .. code-block:: shell - - git checkout -b [] - - -.. hint:: - - While working on a *feature branch* make commits for each completed logical - block of code. - -************************* -Creating the pull request -************************* - -#. Make sure your working branch is up-to-date with the default one. - You can pull changes for the default branch and rebase your feature branch - onto it. -#. Push feature branch to the remote repository. By default the current active - branch is pushed to the remote repo. - - .. code-block:: shell - - git push -u origin [] - -#. Go to your remote repository at GitHub and click **Pull requests** tab. -#. On **Pull requests** tab click **New** button. -#. Select your default branch as *target* and your feature branch as *source*. -#. Provide some brief description for your pull request. -#. Press **Create pull request** button. -#. On the pull request page add a **reviewer** by clicking the appropriate - option and selecting a person from a dropdown menu. - -************** -Making changes -************** - -From this moment, your pull request *is waiting* for the review. - -The reviewer will **approve** or **reject** your pull request. -Optionally the reviewer may provide some comments to your code; -**rejected** pull requests will always come with some details. - -In case your work is **rejected**, you are to provide fixes. To do this: - -#. Do the work in your local feature branch. -#. Stage and commit changes. -#. Push them to remote branch. -#. Re-request review from the pull request page. - -All commits related to the source branch will be automatically appended to -the open pull request. The reviewer will review your updates. -Repeat this process until the pull request is **approved**. - -************************ -Merging the pull request -************************ - -Once your pull request is **approved** - merge it. -Select one of the options available with your pull request; they may be: - -- Create a merge commit -- Rebase and merge -- Squash and merge - -After that the pull request is merged into your target branch. + :keywords: git, github, pull request, review, merge, howto + +##################### +Create a Pull Request +##################### + +.. todo + # Как сдавать домашки + ## Что должно быть в репозитории?? + ### Что за файл requirements.txt? Зачем он нужен? + ## Чего не должно быть в репозитории?? + ## Как создать проект и репозиторий корректно + ## Как делать домашку + ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? From 699d8c325e6c2369f6c59b048c7c857962a41f7b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 10:24:29 +0300 Subject: [PATCH 419/689] Update "Assignments" appendix Renamed appendix document to "assignments". Add repository content section. Add repository initialization section (including Django projects). Add requirements description section. Co-authored-by: Vladyslav Ponomaryov <57481900+PonomaryovVladyslav@users.noreply.github.com> --- src/appx/assignments.txt | 131 +++++++++++++++++++++++++++++++++++++++ src/appx/create_pr.txt | 18 ------ src/conf.py | 4 +- src/index.txt | 2 +- 4 files changed, 134 insertions(+), 21 deletions(-) create mode 100644 src/appx/assignments.txt delete mode 100644 src/appx/create_pr.txt diff --git a/src/appx/assignments.txt b/src/appx/assignments.txt new file mode 100644 index 000000000..0b4fa9cda --- /dev/null +++ b/src/appx/assignments.txt @@ -0,0 +1,131 @@ +.. meta:: + :description: How-to handle in assignments via GitHub pull request(s) + :author: Vladyslav Ponomaryov + :author: Serhii Horodilov sgorodil@gmail.com + :keywords: git, github, pull request, review, merge, howto + +############################### +Handing in Homework Assignments +############################### + +.. todo + # Как сдавать домашки + ## Как делать домашку + ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? + +****************************** +Repository content description +****************************** + +What to include +=============== + +- Code base +- Project dependencies (if applicable) +- *(Optional)* Additional project information: + README, CONTRIBUTING, LICENSE etc. + +.. hint:: + Always start new repository from creating ``README`` and ``.gitignore`` + files. + +What to exclude +=============== + +- Virtual environment, typically ``venv`` or ``env`` folder +- Byte compiled Python code (``__pycache__``) +- IDEA configurations, typically ``.vscode`` or ``.idea`` folder +- Database files, like ``db.sqlite3`` +- Other stuff not related to the assignment directly + +.. hint:: + Set up **.gitignore** to exclude all name patterns from appending + to the stage area. Common content of this file may look like: + + :: + + /venv/ + /env/ + __pycache__/ + +************************* +Repository initialization +************************* + +#. Create and activate virtual environment. +#. Create common repository files: + + - README + - .gitignore + - requirements.txt *(if applicable)* + +#. *(Optional)* create a code base draft. This can be an empty module + like **main.py** or an empty :ref:`Django project `. +#. Initialize a new repository using ``git init`` command. +#. Set up **.gitignore** name patterns. +#. Stage your changes. +#. Commit your changes. +#. Set up remote repository. +#. Push changes from local branch to remote. + +.. _django_init: + +Initializing new Django project +=============================== + +Base Django project may be added to the repository with the first commit. +Initialize Django project in current repository root to avoid directories +nesting. + +.. code-block:: shell + + $ django-admin startproject . + +.. important:: + Do not forget to create **requirements.txt**. + +After that, you may proceed with "staging" and "commit" steps. + +**************************** +Sharing project dependencies +**************************** + +The **requirements.txt** file is a plain text file that lists all the Python +packages required for a specific project. This file is used to specify +dependencies in a version-controlled and easily shareable manner. It allows +for a consistent environment across different team members' local setups. + +Where to place "requirements.txt" file +====================================== + +The **requirements.txt** file is generally placed in the root directory of +the project. + +Creating "requirements.txt" file +================================ + +To generate file use ``pip freeze`` command and place its output to a file: + +.. code-block:: shell + + $ pip freeze > requirements.txt + +This will create **requirements.txt** file. Its content may look like: + +:: + + asgiref==3.6.0 + Django==4.1.5 + psycopg2==2.9.5 + sqlparse==0.4.3 + tzdata==2022.7 + +Installing dependencies from "requirements.txt" file +==================================================== + +Another team member may easily install all the requirements for the project +by using ``pip install`` command: + +.. code-block:: shell + + $ pip install -r requirements.txt diff --git a/src/appx/create_pr.txt b/src/appx/create_pr.txt deleted file mode 100644 index 24fe0854a..000000000 --- a/src/appx/create_pr.txt +++ /dev/null @@ -1,18 +0,0 @@ -.. meta:: - :description: The instructions to create a pull request via GitHub - :author: Vladyslav Ponomaryov - :author: Serhii Horodilov sgorodil@gmail.com - :keywords: git, github, pull request, review, merge, howto - -##################### -Create a Pull Request -##################### - -.. todo - # Как сдавать домашки - ## Что должно быть в репозитории?? - ### Что за файл requirements.txt? Зачем он нужен? - ## Чего не должно быть в репозитории?? - ## Как создать проект и репозиторий корректно - ## Как делать домашку - ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? diff --git a/src/conf.py b/src/conf.py index 3d52dd19f..e6b3d8b2c 100644 --- a/src/conf.py +++ b/src/conf.py @@ -62,7 +62,7 @@ ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ("appx/blog/spec", "DjangoBlog.tex", project, authors, "howto", False), - ("appx/create_pr", "CreatingPullRequest.tex", "Creating the Pull Request", + ("appx/assignments", "CreatingPullRequest.tex", "Creating the Pull Request", authors, "howto", False), ] latex_appendices = [ @@ -71,7 +71,7 @@ "appx/env_path", "appx/precedence", "appx/printf", - "appx/create_pr", + "appx/assignments", "appx/conv_store", "appx/wtk", "appx/blog/spec", diff --git a/src/index.txt b/src/index.txt index 4616f4687..05fa4dd23 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,7 +27,7 @@ appx/env_path appx/precedence appx/printf - appx/create_pr + appx/assignments appx/conv_store appx/wtk appx/blog/spec From ce8270aacef29c559838923a9be0e0053c0edc48 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 11:22:09 +0300 Subject: [PATCH 420/689] Update "Assignments" appendix Describe pull requests creation. Describe review process. Co-authored-by: Vladyslav Ponomaryov <57481900+PonomaryovVladyslav@users.noreply.github.com> --- src/appx/assignments.txt | 92 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 5 deletions(-) diff --git a/src/appx/assignments.txt b/src/appx/assignments.txt index 0b4fa9cda..2617d1727 100644 --- a/src/appx/assignments.txt +++ b/src/appx/assignments.txt @@ -8,11 +8,6 @@ Handing in Homework Assignments ############################### -.. todo - # Как сдавать домашки - ## Как делать домашку - ## Что делать если я уже внёс файлы __pycache__ или .idea на гит? - ****************************** Repository content description ****************************** @@ -129,3 +124,90 @@ by using ``pip install`` command: .. code-block:: shell $ pip install -r requirements.txt + +************************************ +Dealing with home tasks (challenges) +************************************ + +#. Create a new topic branch +#. Switch to a topic branch +#. Do the work and commit changes + +.. hint:: + You can create a new branch and immediately switch to it: + + .. code-block:: shell + + git checkout -b + +Creating a pull request +======================= + +#. Make sure your working branch is up-to-date with the default one. + You can pull changes for the default branch and rebase your feature + branch onto it. +#. Push feature branch to the remote repository. By default, the current + active branch is pushed via ``git push`` command. You may need to + set upstream branch if it isn't yet. + + .. code-block:: shell + + git push -u origin + +#. Navigate to your remote repository homepage on GitHub and switch to + **Pull requests** tab. +#. Click **New pull request** button. +#. Select your default branch as *target* and your feature branch as + *source*. +#. Click **Create pull request** button. +#. Provide meaningful title and a brief description for your pull request. +#. Submit pull request creation. +#. *(Optional)* Select reviewer(s) in **Reviewers** section. +#. Wait until your pull request is reviewed. + +Set up reviewers +================ + +You may share a link to pull request to a reviewer directly, but it's better +to set reviewer(s) on the pull request's page. +Before you can select reviewers, you need to add them as project contributors. + +Append collaborators +-------------------- + +Reviews allow collaborators to comment on the changes proposed in pull +requests, approve the changes, or request further changes before the pull +request is merged. Repository administrators can require that pull requests +are approved before being merged. + +#. Navigate to your repository homepage on GitHub and switch to **Settings** + tab. +#. Select **Collaborators and teams** menu item. +#. Under **Manage access** section click **Add people** button. +#. In modal window start typing GitHub username. +#. Select a contributor from the dropdown menu. + +This will send a *contributing request* to a specified user. + +Merging changes +=============== + +In case your pull request is **approved** - merge it to the trunk branch. +Select one of the options available: + +- Create a merge commit +- Rebase and merge +- Squash and merge + +**Create a merge commit** suits in most of the cases. + +Making changes +============== + +In case your pull request is **rejected** or has comments - you may need to +provide some fixes. + +#. Do the work in your local topic branch +#. Push these changes to remote +#. Re-request review (if applicable) +#. Wait until review is done From cb5c0a5b83e2e0bfd01744671bdf1b3db7d91999 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 11:44:00 +0300 Subject: [PATCH 421/689] Add pull request document to VCS toctree --- src/vcs/index.txt | 1 + src/vcs/{pr.txt => pullrequest.txt} | 0 2 files changed, 1 insertion(+) rename src/vcs/{pr.txt => pullrequest.txt} (100%) diff --git a/src/vcs/index.txt b/src/vcs/index.txt index 0f0675aef..d52522ad2 100644 --- a/src/vcs/index.txt +++ b/src/vcs/index.txt @@ -33,3 +33,4 @@ collaborate using remote repositories and platforms like GitHub. branch remotes github + pullrequest diff --git a/src/vcs/pr.txt b/src/vcs/pullrequest.txt similarity index 100% rename from src/vcs/pr.txt rename to src/vcs/pullrequest.txt From 3343cf75adee6d7bd2c278d7f093009e0a51a4ca Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Sep 2023 11:45:15 +0300 Subject: [PATCH 422/689] Update VCS and APPX .po files (no translations) --- src/_locales/uk/LC_MESSAGES/appx.po | 2462 +++++++++++++++------------ src/_locales/uk/LC_MESSAGES/vcs.po | 1881 +++++++++++--------- 2 files changed, 2435 insertions(+), 1908 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index 9a5505d56..a257456cd 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,18 +8,443 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-09 02:13+0300\n" +"POT-Creation-Date: 2023-09-01 11:37+0300\n" "PO-Revision-Date: 2023-08-09 02:25+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" "Language: uk\n" +"Language-Team: ua \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" + +#: ../../src/appx/assignments.txt:-1 +msgid "How-to handle in assignments via GitHub pull request(s)" +msgstr "" + +#: ../../src/appx/assignments.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/appx/assignments.txt:-1 ../../src/appx/code_edit.txt:-1 +#: ../../src/appx/conv_store.txt:-1 ../../src/appx/env_path.txt:-1 +#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 +#: ../../src/appx/wtk.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/assignments.txt:-1 +#, fuzzy +msgid "git, github, pull request, review, merge, howto" +msgstr "git, github, pull request, branch, merge" + +#: ../../src/appx/assignments.txt:9 +msgid "Handing in Homework Assignments" +msgstr "" + +#: ../../src/appx/assignments.txt:13 +#, fuzzy +msgid "Repository content description" +msgstr "Вміст репозиторію" + +#: ../../src/appx/assignments.txt:16 +msgid "What to include" +msgstr "" + +#: ../../src/appx/assignments.txt:18 +#, fuzzy +msgid "Code base" +msgstr "кодова база" + +#: ../../src/appx/assignments.txt:19 +#, fuzzy +msgid "Project dependencies (if applicable)" +msgstr "залежності проекту (якщо є)" + +#: ../../src/appx/assignments.txt:20 +msgid "" +"*(Optional)* Additional project information: README, CONTRIBUTING, " +"LICENSE etc." +msgstr "" + +#: ../../src/appx/assignments.txt:24 +msgid "" +"Always start new repository from creating ``README`` and ``.gitignore`` " +"files." +msgstr "" + +#: ../../src/appx/assignments.txt:28 +msgid "What to exclude" +msgstr "" + +#: ../../src/appx/assignments.txt:30 +msgid "Virtual environment, typically ``venv`` or ``env`` folder" +msgstr "" + +#: ../../src/appx/assignments.txt:31 +#, fuzzy +msgid "Byte compiled Python code (``__pycache__``)" +msgstr "скомпільований код python (``__pycache__``)" + +#: ../../src/appx/assignments.txt:32 +#, fuzzy +msgid "IDEA configurations, typically ``.vscode`` or ``.idea`` folder" +msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" + +#: ../../src/appx/assignments.txt:33 +msgid "Database files, like ``db.sqlite3``" +msgstr "" + +#: ../../src/appx/assignments.txt:34 +msgid "Other stuff not related to the assignment directly" +msgstr "" + +#: ../../src/appx/assignments.txt:37 +msgid "" +"Set up **.gitignore** to exclude all name patterns from appending to the " +"stage area. Common content of this file may look like:" +msgstr "" + +#: ../../src/appx/assignments.txt:48 +msgid "Repository initialization" +msgstr "Ініціалізація репозиторію" + +#: ../../src/appx/assignments.txt:50 +#, fuzzy +msgid "Create and activate virtual environment." +msgstr "Створіть віртуальне середовище." + +#: ../../src/appx/assignments.txt:51 +#, fuzzy +msgid "Create common repository files:" +msgstr "Створіть нове репозиторій." + +#: ../../src/appx/assignments.txt:53 +msgid "README" +msgstr "" + +#: ../../src/appx/assignments.txt:54 +msgid ".gitignore" +msgstr "" + +#: ../../src/appx/assignments.txt:55 +msgid "requirements.txt *(if applicable)*" +msgstr "" + +#: ../../src/appx/assignments.txt:57 +msgid "" +"*(Optional)* create a code base draft. This can be an empty module like " +"**main.py** or an empty :ref:`Django project `." +msgstr "" + +#: ../../src/appx/assignments.txt:59 +msgid "Initialize a new repository using ``git init`` command." +msgstr "" + +#: ../../src/appx/assignments.txt:60 +msgid "Set up **.gitignore** name patterns." +msgstr "" + +#: ../../src/appx/assignments.txt:61 +#, fuzzy +msgid "Stage your changes." +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/assignments.txt:62 +#, fuzzy +msgid "Commit your changes." +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/assignments.txt:63 +msgid "Set up remote repository." +msgstr "Налаштуйте віддалений репозиторій." + +#: ../../src/appx/assignments.txt:64 +#, fuzzy +msgid "Push changes from local branch to remote." +msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." + +#: ../../src/appx/assignments.txt:69 +msgid "Initializing new Django project" +msgstr "" + +#: ../../src/appx/assignments.txt:71 +msgid "" +"Base Django project may be added to the repository with the first commit." +" Initialize Django project in current repository root to avoid " +"directories nesting." +msgstr "" + +#: ../../src/appx/assignments.txt:80 +msgid "Do not forget to create **requirements.txt**." +msgstr "" + +#: ../../src/appx/assignments.txt:82 +msgid "After that, you may proceed with \"staging\" and \"commit\" steps." +msgstr "" + +#: ../../src/appx/assignments.txt:86 +#, fuzzy +msgid "Sharing project dependencies" +msgstr "Встановіть залежності проекту." + +#: ../../src/appx/assignments.txt:88 +msgid "" +"The **requirements.txt** file is a plain text file that lists all the " +"Python packages required for a specific project. This file is used to " +"specify dependencies in a version-controlled and easily shareable manner." +" It allows for a consistent environment across different team members' " +"local setups." +msgstr "" + +#: ../../src/appx/assignments.txt:94 +msgid "Where to place \"requirements.txt\" file" +msgstr "" + +#: ../../src/appx/assignments.txt:96 +msgid "" +"The **requirements.txt** file is generally placed in the root directory " +"of the project." +msgstr "" + +#: ../../src/appx/assignments.txt:100 +msgid "Creating \"requirements.txt\" file" +msgstr "" + +#: ../../src/appx/assignments.txt:102 +msgid "" +"To generate file use ``pip freeze`` command and place its output to a " +"file:" +msgstr "" + +#: ../../src/appx/assignments.txt:108 +msgid "This will create **requirements.txt** file. Its content may look like:" +msgstr "" + +#: ../../src/appx/assignments.txt:119 +msgid "Installing dependencies from \"requirements.txt\" file" +msgstr "" + +#: ../../src/appx/assignments.txt:121 +msgid "" +"Another team member may easily install all the requirements for the " +"project by using ``pip install`` command:" +msgstr "" + +#: ../../src/appx/assignments.txt:130 +msgid "Dealing with home tasks (challenges)" +msgstr "" + +#: ../../src/appx/assignments.txt:132 +msgid "Create a new topic branch" +msgstr "" + +#: ../../src/appx/assignments.txt:133 +#, fuzzy +msgid "Switch to a topic branch" +msgstr "Перейдіть до новоствореної гілки." + +#: ../../src/appx/assignments.txt:134 +#, fuzzy +msgid "Do the work and commit changes" +msgstr "Зробіть фіксацію змін (stage + commit)." + +#: ../../src/appx/assignments.txt:137 +#, fuzzy +msgid "You can create a new branch and immediately switch to it:" +msgstr "" +"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " +"команди." + +#: ../../src/appx/assignments.txt:144 +#, fuzzy +msgid "Creating a pull request" +msgstr "Створення запиту на злиття" + +#: ../../src/appx/assignments.txt:146 +msgid "" +"Make sure your working branch is up-to-date with the default one. You can" +" pull changes for the default branch and rebase your feature branch onto " +"it." +msgstr "" +"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку " +"функції на неї." + +#: ../../src/appx/assignments.txt:149 +#, fuzzy +msgid "" +"Push feature branch to the remote repository. By default, the current " +"active branch is pushed via ``git push`` command. You may need to set " +"upstream branch if it isn't yet." +msgstr "" +"Завантажте функціональну гілку до віддаленого репозиторію. За " +"замовчуванням буде завантажена активна гілка." + +#: ../../src/appx/assignments.txt:157 +#, fuzzy +msgid "" +"Navigate to your remote repository homepage on GitHub and switch to " +"**Pull requests** tab." +msgstr "" +"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " +"**Pull requests**." + +#: ../../src/appx/assignments.txt:159 +#, fuzzy +msgid "Click **New pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/assignments.txt:160 +msgid "" +"Select your default branch as *target* and your feature branch as " +"*source*." +msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." + +#: ../../src/appx/assignments.txt:162 +#, fuzzy +msgid "Click **Create pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/assignments.txt:163 +#, fuzzy +msgid "Provide meaningful title and a brief description for your pull request." +msgstr "Надайте короткий опис вашого запиту." + +#: ../../src/appx/assignments.txt:164 +#, fuzzy +msgid "Submit pull request creation." +msgstr "Про pull requests" + +#: ../../src/appx/assignments.txt:165 +msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." +msgstr "" + +#: ../../src/appx/assignments.txt:166 +#, fuzzy +msgid "Wait until your pull request is reviewed." +msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." + +#: ../../src/appx/assignments.txt:169 +msgid "Set up reviewers" +msgstr "" + +#: ../../src/appx/assignments.txt:171 +msgid "" +"You may share a link to pull request to a reviewer directly, but it's " +"better to set reviewer(s) on the pull request's page. Before you can " +"select reviewers, you need to add them as project contributors." +msgstr "" + +#: ../../src/appx/assignments.txt:176 +msgid "Append collaborators" +msgstr "" + +#: ../../src/appx/assignments.txt:178 +#, fuzzy +msgid "" +"Reviews allow collaborators to comment on the changes proposed in pull " +"requests, approve the changes, or request further changes before the pull" +" request is merged. Repository administrators can require that pull " +"requests are approved before being merged." +msgstr "" +"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах " +"на отримання, затверджувати зміни або вимагати подальших змін перед " +"об'єднанням запиту на отримання. Адміністратори сховища можуть вимагати " +"схвалення всіх запитів на отримання перед об'єднанням." + +#: ../../src/appx/assignments.txt:183 +#, fuzzy +msgid "" +"Navigate to your repository homepage on GitHub and switch to **Settings**" +" tab." +msgstr "" +"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " +"**Pull requests**." + +#: ../../src/appx/assignments.txt:185 +msgid "Select **Collaborators and teams** menu item." +msgstr "" + +#: ../../src/appx/assignments.txt:186 +#, fuzzy +msgid "Under **Manage access** section click **Add people** button." +msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." + +#: ../../src/appx/assignments.txt:187 +msgid "In modal window start typing GitHub username." +msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." + +#: ../../src/appx/assignments.txt:188 +msgid "Select a contributor from the dropdown menu." +msgstr "Виберіть учасника зі спадного меню." + +#: ../../src/appx/assignments.txt:190 +msgid "This will send a *contributing request* to a specified user." +msgstr "" + +#: ../../src/appx/assignments.txt:193 +#, fuzzy +msgid "Merging changes" +msgstr "Внесення змін" + +#: ../../src/appx/assignments.txt:195 +#, fuzzy +msgid "" +"In case your pull request is **approved** - merge it to the trunk branch." +" Select one of the options available:" +msgstr "" +"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один " +"із варіантів, доступних у вашому запиті на отримання; вони можуть бути:" + +#: ../../src/appx/assignments.txt:198 +msgid "Create a merge commit" +msgstr "Create a merge commit" + +#: ../../src/appx/assignments.txt:199 +msgid "Rebase and merge" +msgstr "Rebase and merge" + +#: ../../src/appx/assignments.txt:200 +msgid "Squash and merge" +msgstr "Squash and merge" + +#: ../../src/appx/assignments.txt:202 +msgid "**Create a merge commit** suits in most of the cases." +msgstr "" + +#: ../../src/appx/assignments.txt:205 +msgid "Making changes" +msgstr "Внесення змін" + +#: ../../src/appx/assignments.txt:207 +#, fuzzy +msgid "" +"In case your pull request is **rejected** or has comments - you may need " +"to provide some fixes." +msgstr "" +"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб " +"зробити це:" + +#: ../../src/appx/assignments.txt:210 +#, fuzzy +msgid "Do the work in your local topic branch" +msgstr "Виконайте роботу у своїй локальній гілці." + +#: ../../src/appx/assignments.txt:211 +#, fuzzy +msgid "Push these changes to remote" +msgstr "Надішліть їх до гілки віддаленого репозиторію." + +#: ../../src/appx/assignments.txt:212 +msgid "Re-request review (if applicable)" +msgstr "" + +#: ../../src/appx/assignments.txt:213 +msgid "Wait until review is done" +msgstr "" #: ../../src/appx/blog/spec.rst:10 msgid "Blog Project Specification" @@ -27,19 +452,19 @@ msgstr "Специфікація Проекту Блогу" #: ../../src/appx/blog/spec.rst:12 msgid "" -"The project aims to develop a robust and user-friendly web application using " -"the Django framework. The primary objective is to create a blogging platform " -"that allows users to publish and manage articles on various topics. The " -"application will provide an intuitive interface for authors to compose and " -"format their articles, while also offering a seamless reading experience for " -"visitors." +"The project aims to develop a robust and user-friendly web application " +"using the Django framework. The primary objective is to create a blogging" +" platform that allows users to publish and manage articles on various " +"topics. The application will provide an intuitive interface for authors " +"to compose and format their articles, while also offering a seamless " +"reading experience for visitors." msgstr "" -"Проект має на меті розробку міцного та зручного у використанні веб-додатка " -"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " -"для блогів, яка дозволить користувачам публікувати та керувати статтями на " -"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " -"форматування своїх статей, а також забезпечить безперешкодний досвід читання " -"для відвідувачів." +"Проект має на меті розробку міцного та зручного у використанні " +"веб-додатка за допомогою фреймворку Django. Основна мета полягає у " +"створенні платформи для блогів, яка дозволить користувачам публікувати та" +" керувати статтями на різні теми. Додаток надасть інтуїтивний інтерфейс " +"авторам для створення та форматування своїх статей, а також забезпечить " +"безперешкодний досвід читання для відвідувачів." #: ../../src/appx/blog/spec.rst:19 msgid "**Key Features**" @@ -52,15 +477,16 @@ msgstr "Реєстрація та Аутентифікація Користув #: ../../src/appx/blog/spec.rst:23 msgid "" "The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and manage " -"their profile information. This feature will enable authors to have " -"personalized accounts and maintain ownership of their published articles." +"functionality, allowing individuals to create accounts, log in, and " +"manage their profile information. This feature will enable authors to " +"have personalized accounts and maintain ownership of their published " +"articles." msgstr "" "Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " -"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " -"мати персоналізовані облікові записи та зберігати право власності на їхні " -"опубліковані статті." +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити" +" в систему та керувати інформацією свого профілю. Ця функція дозволить " +"авторам мати персоналізовані облікові записи та зберігати право власності" +" на їхні опубліковані статті." #: ../../src/appx/blog/spec.rst:30 msgid "Article Management" @@ -68,14 +494,14 @@ msgstr "Керування Статтями" #: ../../src/appx/blog/spec.rst:31 msgid "" -"Authors will have the ability to create, edit, and delete articles within " -"the application. The system will offer a user-friendly editor. Additionally, " -"authors will be able to categorize articles by assigning relevant topics to " -"them." +"Authors will have the ability to create, edit, and delete articles within" +" the application. The system will offer a user-friendly editor. " +"Additionally, authors will be able to categorize articles by assigning " +"relevant topics to them." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори " +"зможуть категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:37 msgid "Topic Subscription:" @@ -84,36 +510,39 @@ msgstr "Підписка на Теми:" #: ../../src/appx/blog/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users " -"will receive notifications or updates whenever new articles are published in " -"those categories. This feature will enhance user engagement and ensure that " -"readers stay informed about the topics they find most valuable." +"subscribe to topics of interest. By subscribing to specific topics, users" +" will receive notifications or updates whenever new articles are " +"published in those categories. This feature will enhance user engagement " +"and ensure that readers stay informed about the topics they find most " +"valuable." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори " +"зможуть категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user experience " -"and incorporating essential functionalities such as user authentication, " -"article management, and topic subscriptions, the application will empower " -"users to create, share, and explore engaging content within a well-" -"structured and organized platform." +"caters to both authors and readers. By providing a seamless user " +"experience and incorporating essential functionalities such as user " +"authentication, article management, and topic subscriptions, the " +"application will empower users to create, share, and explore engaging " +"content within a well-structured and organized platform." msgstr "" "Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " -"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " -"категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про " -"найцікавіші для них теми." +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, " +"користувачі отримуватимуть повідомлення або оновлення кожного разу, коли " +"в цих категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про" +" найцікавіші для них теми." #: ../../src/appx/blog/spec.rst:52 msgid "" -"Here is a starter repository template, that may helps: `Starter template`_." +"Here is a starter repository template, that may helps: `Starter " +"template`_." msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." +"Ось шаблон стартового репозиторію, який може допомогти: `Starter " +"template`_." #: ../../src/appx/blog/spec.rst:55 msgid "Challenge: Functional views" @@ -121,42 +550,44 @@ msgstr "Виклик: Функціональні представлення" #: ../../src/appx/blog/spec.rst:57 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the " +"routes are available and provide correct data. Use anything you like to " +"return within HTTP response." msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " -"ви хочете повернути в HTTP-відповіді." +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, " +"що всі маршрути доступні та надають правильні дані. Використовуйте " +"будь-що, що ви хочете повернути в HTTP-відповіді." #: ../../src/appx/blog/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." +"``/about/``: надає звичайний текст для користувача, що описує функції " +"сайту django." #: ../../src/appx/blog/spec.rst:63 msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via " -"the django site." +"``/``: A site's homepage. This will contain a list of blogs published via" +" the django site." msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " -"сайт Django." +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих " +"через сайт Django." #: ../../src/appx/blog/spec.rst:65 msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic part " -"in it. This will be used to fetch a single article from the database." +"``/
    /``: A single article detail view. The URL contains dynamic " +"part in it. This will be used to fetch a single article from the " +"database." msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " -"частину. Вона буде використовуватися для отримання однієї статті з бази " -"даних." +"``/
    /``: Представлення деталей однієї статті. URL містить " +"динамічну частину. Вона буде використовуватися для отримання однієї " +"статті з бази даних." #: ../../src/appx/blog/spec.rst:68 msgid "" -"``/
    /comment/``: This view will be used to add comments to a article." +"``/
    /comment/``: This view will be used to add comments to a " +"article." msgstr "" "``/
    /comment/``: Це представлення буде використовуватися для " "додавання коментарів до статті." @@ -167,13 +598,11 @@ msgstr "``/create/``: Форма створення статті." #: ../../src/appx/blog/spec.rst:71 msgid "``/
    /update/``: A view to update an existing article data." -msgstr "" -"``/
    /update/``: Представлення для оновлення існуючих даних статті." +msgstr "``/
    /update/``: Представлення для оновлення існуючих даних статті." #: ../../src/appx/blog/spec.rst:72 msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "" -"``/
    /delete/``: Представлення для підтвердження видалення статті." +msgstr "``/
    /delete/``: Представлення для підтвердження видалення статті." #: ../../src/appx/blog/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." @@ -193,10 +622,11 @@ msgstr "``/profile//``: Особиста сторінка кори #: ../../src/appx/blog/spec.rst:77 msgid "" -"``/set-password/``: This route will be used to change users' credential data." +"``/set-password/``: This route will be used to change users' credential " +"data." msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " -"даних користувачів." +"``/set-password/``: Цей маршрут буде використовуватися для зміни " +"облікових даних користувачів." #: ../../src/appx/blog/spec.rst:79 msgid "``/set-userdata/``: This route will be user to change users' data." @@ -220,7 +650,8 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../src/appx/blog/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." +"``/logout/``: Logout page. This view should redirect user back to " +"homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -232,20 +663,20 @@ msgstr "Додаткові завдання" #: ../../src/appx/blog/spec.rst:89 msgid "" -"``/archive///``: This view provides a list of articles " -"published on a specified month of a specified year. This view should apply " -"date validation and raise ``Http404`` for invalid paths. The valid date is a " -"year's 4-digits form followed by 1 or 2 digits representing month. Month " -"range should be limited as [1..12], leading zero may be omitted. Valid URLs " -"are:" +"``/archive///``: This view provides a list of " +"articles published on a specified month of a specified year. This view " +"should apply date validation and raise ``Http404`` for invalid paths. The" +" valid date is a year's 4-digits form followed by 1 or 2 digits " +"representing month. Month range should be limited as [1..12], leading " +"zero may be omitted. Valid URLs are:" msgstr "" -"``/archive///``: Це представлення надає список статей, " -"опублікованих у певному місяці певного року. Це представлення повинно " -"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"``/archive///``: Це представлення надає список " +"статей, опублікованих у певному місяці певного року. Це представлення " +"повинно застосовувати перевірку дати та викидати помилку ``Http404`` для " "неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " -"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " -"URL-адрес:" +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен " +"бути обмежений [1..12], ведучий нуль може бути пропущений. Приклади " +"правильних URL-адрес:" #: ../../src/appx/blog/spec.rst:103 msgid "Challenge: Data models" @@ -254,13 +685,13 @@ msgstr "Завдання: моделі даних" #: ../../src/appx/blog/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that is " -"to use a django command:" +"admin section you need to create a superuser. The easiest way to do that " +"is to use a django command:" msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " -"отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " -"Django:" +"Для створення деяких фіктивних даних можна використовувати Django Admin. " +"Щоб отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати " +"команду Django:" #: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 msgid "General" @@ -300,11 +731,11 @@ msgstr "Стаття вимагає наявності змісту (прина #: ../../src/appx/blog/spec.rst:129 msgid "" -"Creation date should be autogenerated at article creation, and would never " -"be updated." +"Creation date should be autogenerated at article creation, and would " +"never be updated." msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не буде " -"оновлюватися пізніше." +"Дата створення буде автоматично генеруватися при створенні статті і не " +"буде оновлюватися пізніше." #: ../../src/appx/blog/spec.rst:131 msgid "Updated date will be update at each article save." @@ -329,13 +760,14 @@ msgstr "Відносини" #: ../../src/appx/blog/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created via " -"admin page. You can also refer the same model as shown below:" +"reference pass ``\"auth.User\"`` as related model. Users can be created " +"via admin page. You can also refer the same model as shown below:" msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. Для " -"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " -"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " -"також можете посилатися на ту саму модель, як показано нижче:" +"Стандартна модель користувача Django **буде** використовуватися наразі. " +"Для застосування посилання на модель передайте ``\"auth.User\"`` як " +"пов'язану модель. Користувачі можуть бути створені через адміністративну " +"сторінку. Ви також можете посилатися на ту саму модель, як показано " +"нижче:" #: ../../src/appx/blog/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." @@ -343,49 +775,51 @@ msgstr "``article`` та ``topics`` мають *багато-до-багатьо #: ../../src/appx/blog/spec.rst:155 msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can have " -"**only one** author, but users can create as many articles as they want." +"``article`` and ``user`` have *one-to-many* relationship. A article can " +"have **only one** author, but users can create as many articles as they " +"want." msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " -"бути **лише один** автор, але користувачі можуть створювати стільки статей, " -"скільки їм потрібно." +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті " +"може бути **лише один** автор, але користувачі можуть створювати стільки " +"статей, скільки їм потрібно." #: ../../src/appx/blog/spec.rst:158 msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article may " -"be a container for many comments, but a comment is related to a single " -"article." +"``article`` and ``comment`` have *one-to-many* relationship. A article " +"may be a container for many comments, but a comment is related to a " +"single article." msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " -"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " -"однією статтею." +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття " +"може бути контейнером для багатьох коментарів, але коментар пов'язаний " +"лише з однією статтею." #: ../../src/appx/blog/spec.rst:161 msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " -"*article - user* relationship." +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" +" *article - user* relationship." msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." #: ../../src/appx/blog/spec.rst:163 msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can " -"prefer none or as many topics as needed and vice versa. This relationship " -"represents topics preferred by a certain blog user. Also this provides an " -"additional option to mark some of preferred topics with a **notify** flag, " -"to receive newsletters about specified topics updates. The difference " -"between *prefer* and *notify* is that *preferred* topics affect the articles " -"list for a user, and *notify* is responsible for newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " -"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " -"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " -"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " -"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " -"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " -"список статей для користувача, а *notify* відповідає за розсилку новин для " -"користувача." +"``topic`` and ``user`` use *many-to-many* relationship. A single user can" +" prefer none or as many topics as needed and vice versa. This " +"relationship represents topics preferred by a certain blog user. Also " +"this provides an additional option to mark some of preferred topics with " +"a **notify** flag, to receive newsletters about specified topics updates." +" The difference between *prefer* and *notify* is that *preferred* topics " +"affect the articles list for a user, and *notify* is responsible for " +"newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. " +"Один користувач може вибрати будь-яку кількість тем, і навпаки. Це " +"відношення представляє теми, які вибрані певним користувачем блогу. Крім " +"того, це надає додаткову опцію позначити деякі з вибраних тем прапорцем " +"**notify**, щоб отримувати розсилки про оновлення зазначених тем. " +"Відмінність між *prefer* (вибір) та *notify* (сповіщення) полягає в тому," +" що *prefer* впливає на список статей для користувача, а *notify* " +"відповідає за розсилку новин для користувача." #: ../../src/appx/blog/spec.rst:174 msgid "UML diagram" @@ -397,11 +831,11 @@ msgstr "Завдання: ORM" #: ../../src/appx/blog/spec.rst:181 msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project's database." +"Update existing views to represent entities that are actually stored " +"inside the project's database." msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." +"Оновіть існуючі подання, щоб представити сутності, які фактично " +"зберігаються в базі даних проекту." #: ../../src/appx/blog/spec.rst:184 msgid "``/``: should represent a list of existing articles." @@ -413,16 +847,15 @@ msgstr "``/
    /``: повинен представляти окрему і #: ../../src/appx/blog/spec.rst:186 msgid "Detail view should obtain a list of article related comments." -msgstr "" -"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." +msgstr "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." #: ../../src/appx/blog/spec.rst:187 msgid "" -"``/profile//``: should contain information about user and a " -"list of articles authored by this user." +"``/profile//``: should contain information about user and a" +" list of articles authored by this user." msgstr "" -"``/profile//``: повинен містити інформацію про користувача та " -"список статей, написаних цим користувачем." +"``/profile//``: повинен містити інформацію про користувача " +"та список статей, написаних цим користувачем." #: ../../src/appx/blog/spec.rst:189 msgid "" @@ -430,30 +863,30 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " +"сутність не вдалося отримати." #: ../../src/appx/blog/spec.rst:194 msgid "" -"It's common to store dedicated functions/classes that supports some specific " -"business logic in a separate module called ``services.py`` or ``utils.py`` " -"within an application directory." +"It's common to store dedicated functions/classes that supports some " +"specific business logic in a separate module called ``services.py`` or " +"``utils.py`` within an application directory." msgstr "" "Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." -"py`` всередині директорії додатку." +"розумно зберігати в окремому модулі з назвою ``services.py`` або " +"``utils.py`` всередині директорії додатку." #: ../../src/appx/blog/spec.rst:201 msgid "" -"Create a service to fetch articles, ordered by a specified user preferences. " -"This means, topics preferred by a user affects articles orders. Queryset " -"should be ordered in way, to have articles with most corresponding topics at " -"the begging." +"Create a service to fetch articles, ordered by a specified user " +"preferences. This means, topics preferred by a user affects articles " +"orders. Queryset should be ordered in way, to have articles with most " +"corresponding topics at the begging." msgstr "" "Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " "згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " -"початку видачі." +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона" +" до початку видачі." #: ../../src/appx/blog/spec.rst:207 msgid "Challenge: Templates" @@ -466,8 +899,8 @@ msgstr "Корисне посилання: `Bootstrap template`_" #: ../../src/appx/blog/spec.rst:213 msgid "Links related to user data **may be** placeholders for now." msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " -"наразі." +"Посилання, що стосуються даних користувача, **можуть бути** " +"плейсхолдерами наразі." #: ../../src/appx/blog/spec.rst:217 msgid "**All** templates should be inherited from the ``base.html`` template." @@ -476,26 +909,29 @@ msgstr "**Усі** шаблони повинні успадковувати ``ba #: ../../src/appx/blog/spec.rst:218 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " +"etc." msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " -"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| " +"Blog``, наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | " +"Blog\" і т.д." #: ../../src/appx/blog/spec.rst:220 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" -"``)." +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL " +"``/``)." #: ../../src/appx/blog/spec.rst:221 msgid "" "Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented with a " -"custom template context processor." +"filters only articles of a relevant topic. This should be implemented " +"with a custom template context processor." msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " -"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " -"власного обробника контексту шаблону (template context processor)." +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення " +"цього типу фільтрує лише статті відповідної теми. Це слід реалізувати за " +"допомогою власного обробника контексту шаблону (template context " +"processor)." #: ../../src/appx/blog/spec.rst:224 msgid "Replace content block for *about* page with some static content." @@ -511,10 +947,11 @@ msgstr "Шаблони рівня застосунків розташовува #: ../../src/appx/blog/spec.rst:231 msgid "" -"Each page should contain a list of links to archive views for the last year." +"Each page should contain a list of links to archive views for the last " +"year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." +"Кожна сторінка має містити список посилань на перегляди архіву за " +"останній рік." #: ../../src/appx/blog/spec.rst:233 msgid "Each page should contain an inclusion-block(s) with following links:" @@ -542,8 +979,7 @@ msgstr "Головна сторінка містить список опублі #: ../../src/appx/blog/spec.rst:242 msgid "Each article entity is rendered using a custom template tag." -msgstr "" -"Кожен елемент статті відображається за допомогою власного шаблонного тегу." +msgstr "Кожен елемент статті відображається за допомогою власного шаблонного тегу." #: ../../src/appx/blog/spec.rst:243 msgid "``article`` template tag renders information about a article object:" @@ -654,8 +1090,8 @@ msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " -"деактивації облікового запису користувача." +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля " +"або деактивації облікового запису користувача." #: ../../src/appx/blog/spec.rst:291 msgid "Forms" @@ -664,8 +1100,8 @@ msgstr "Форми" #: ../../src/appx/blog/spec.rst:293 msgid "" "There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok just " -"to create a dedicated templates for future use." +"Django. This section describes the final view of these pages. It's ok " +"just to create a dedicated templates for future use." msgstr "" "Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " @@ -673,11 +1109,11 @@ msgstr "" #: ../../src/appx/blog/spec.rst:297 msgid "" -"``/register/`` page contains a new user registration form. It should take " -"inputs from the user:" +"``/register/`` page contains a new user registration form. It should take" +" inputs from the user:" msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " -"повинна отримувати введені дані від користувача:" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона" +" повинна отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 msgid "username" @@ -697,16 +1133,16 @@ msgstr "confirm password" #: ../../src/appx/blog/spec.rst:305 msgid "" -"``/login/`` page contains a user login form. It should take the inputs from " -"the user:" +"``/login/`` page contains a user login form. It should take the inputs " +"from the user:" msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:311 msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a " -"article's data:" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a" +" article's data:" msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" @@ -739,21 +1175,22 @@ msgstr "new password" #: ../../src/appx/blog/spec.rst:324 msgid "" -"Change user's data form collects all information, that can be changed, e.g. " -"``username``, ``first name``, ``last name`` etc." +"Change user's data form collects all information, that can be changed, " +"e.g. ``username``, ``first name``, ``last name`` etc." msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " -"наприклад, ``username``, ``first name``, ``last name`` та інше." +"Форма зміни даних користувача збирає всю інформацію, яка може бути " +"змінена, наприклад, ``username``, ``first name``, ``last name`` та інше." #: ../../src/appx/blog/spec.rst:326 msgid "" "User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to *subscribe* " -"for the newsletters becomes available." +"some topics as preferred. Also for preferred topics an option to " +"*subscribe* for the newsletters becomes available." msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач " -"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " -"тем стає доступною опція *підписки* на розсилку новинних листів." +"Сторінка налаштувань користувача містить список доступних тем. Користувач" +" може відмітити деякі теми як пріоритетні (переваги). Також для " +"пріоритетних тем стає доступною опція *підписки* на розсилку новинних " +"листів." #: ../../src/appx/blog/spec.rst:331 msgid "Challenge: Articles' slugs" @@ -781,8 +1218,7 @@ msgstr "`Challenge: ORM`_" #: ../../src/appx/blog/spec.rst:341 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "" -"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" +msgstr "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" #: ../../src/appx/blog/spec.rst:343 msgid "required for each article" @@ -798,14 +1234,16 @@ msgstr "Створіть міграцію даних для надання slug- #: ../../src/appx/blog/spec.rst:347 msgid "" -"``slug`` should be auto-generated on article save. The pattern is ``article." -"title-article.created_date``, e.g. \"Sample article\" created at " -"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." +"``slug`` should be auto-generated on article save. The pattern is " +"``article.title-article.created_date``, e.g. \"Sample article\" created " +"at \"03/24/2023\" should receive slug: ``sample-blog-" +"article-2023-03-23``." msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " -"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " -"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " -"отримає slug: ``sample-blog-article-2023-03-23``." +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. " +"Шаблон для генерації поля ``slug``: " +"``назва-статті-дата-створення-статті``, наприклад, стаття з назвою " +"\"Прикладна стаття\", створена \"24/03/2023\", отримає slug: ``sample-" +"blog-article-2023-03-23``." #: ../../src/appx/blog/spec.rst:351 msgid "Update detail view URL path with article slug as dynamic portion." @@ -819,8 +1257,7 @@ msgstr "Завдання: форми авторизації" #: ../../src/appx/blog/spec.rst:356 msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../src/appx/blog/spec.rst:358 msgid "``username``" @@ -862,11 +1299,11 @@ msgstr "Завдання: Автентифікація" #: ../../src/appx/blog/spec.rst:371 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be " +"visible in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " +"бути видимими на панелі навігації." #: ../../src/appx/blog/spec.rst:373 msgid "" @@ -878,16 +1315,17 @@ msgstr "" #: ../../src/appx/blog/spec.rst:375 msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." +"If authenticated user is admin or stuff they should see a link to admin " +"page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../src/appx/blog/spec.rst:377 msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them:" +" desired username and email. Name data (both first and last) is optional." +" After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -899,46 +1337,46 @@ msgstr "" #: ../../src/appx/blog/spec.rst:382 msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case " +"login is successful they should be redirected to their profile (if no " +"``?next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У " +"разі успішного входу вони повинні бути перенаправлені до свого профілю " +"(якщо немає рядка запиту ``?next=url``)." #: ../../src/appx/blog/spec.rst:385 msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"article creation. Then a article is created, it should be authored by the " -"currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page." +" In case anonymous user is trying to request this view they should be " +"redirected to the login view first, and after successful authentication " +"get back to article creation. Then a article is created, it should be " +"authored by the currently authenticated user." msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " -"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " -"представлення, його повинно перенаправити спочатку на сторінку входу, а " -"після успішної аутентифікації повернути на сторінку створення статті. При " -"створенні статті вона повинна мати автором поточного аутентифікованого " -"користувача." +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до " +"цієї сторінки. Якщо анонімний користувач намагається отримати доступ до " +"цього представлення, його повинно перенаправити спочатку на сторінку " +"входу, а після успішної аутентифікації повернути на сторінку створення " +"статті. При створенні статті вона повинна мати автором поточного " +"аутентифікованого користувача." #: ../../src/appx/blog/spec.rst:390 msgid "" -"``/
    /comment/``: Currently authenticated user should be referenced " -"as a comment's author." +"``/
    /comment/``: Currently authenticated user should be " +"referenced as a comment's author." msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " -"повинна бути зазначена його ідентифікація як автора." +"``/
    /comment/``: У коментарі поточного аутентифікованого " +"користувача повинна бути зазначена його ідентифікація як автора." #: ../../src/appx/blog/spec.rst:392 msgid "" -"Articles may be modified or deleted only by their authors from the detail " -"article page. However, admins can still performs articles actions from the " -"admin page." +"Articles may be modified or deleted only by their authors from the detail" +" article page. However, admins can still performs articles actions from " +"the admin page." msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " -"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " -"адміністративну сторінку." +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей" +" статті. Однак адміністратори все ще можуть виконувати дії зі статтями " +"через адміністративну сторінку." #: ../../src/appx/blog/spec.rst:395 msgid "User related paths are restricted for non-authorized users." @@ -956,12 +1394,12 @@ msgstr "``/set-userdata/``" #: ../../src/appx/blog/spec.rst:400 msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user as " -"*deleted* and log them user." +"``POST`` request ``/deactivate/`` should mark current authenticated user " +"as *deleted* and log them user." msgstr "" "Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для цього " -"користувача." +"аутентифікованого користувача як *видаленого* і виходити з системи для " +"цього користувача." #: ../../src/appx/blog/spec.rst:406 msgid "" @@ -974,16 +1412,17 @@ msgstr "" #: ../../src/appx/blog/spec.rst:408 msgid "" -"Implement account reactivation behavior. The exact workflow does not mater. " -"The sample scenario is to collect email for the user and check it for " -"existing in the database. After that create a request for admin to activate " -"an account and send a confirmation email, when all is done." +"Implement account reactivation behavior. The exact workflow does not " +"mater. The sample scenario is to collect email for the user and check it " +"for existing in the database. After that create a request for admin to " +"activate an account and send a confirmation email, when all is done." msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " -"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " -"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " -"цього створіть запит для адміністратора на активацію облікового запису та " -"надішліть підтверджувальний лист електронною поштою, коли все буде готово." +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок " +"дій не має значення. Один зі зразків сценаріїв може полягати у зборі " +"електронної пошти користувача та перевірки наявності цієї адреси в базі " +"даних. Після цього створіть запит для адміністратора на активацію " +"облікового запису та надішліть підтверджувальний лист електронною поштою," +" коли все буде готово." #: ../../src/appx/blog/spec.rst:414 msgid "Challenge: Article related forms" @@ -991,11 +1430,11 @@ msgstr "Виклик: Форми пов'язані зі статтями" #: ../../src/appx/blog/spec.rst:416 msgid "" -"Implement a article form. This form will be used to create new articles and " -"to update existing ones." +"Implement a article form. This form will be used to create new articles " +"and to update existing ones." msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " -"статей та оновлення існуючих." +"Реалізуйте форму статті. Ця форма буде використовуватися для створення " +"нових статей та оновлення існуючих." #: ../../src/appx/blog/spec.rst:418 msgid "Each created article should have at least one related topic." @@ -1010,8 +1449,8 @@ msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" -"``." +"З даного моменту дозволені лише запити типу ``POST`` до " +"``/
    /comment/``." #: ../../src/appx/blog/spec.rst:422 msgid "Implement functionality:" @@ -1064,8 +1503,8 @@ msgstr "Існуюча функціональність не повинна бу #: ../../src/appx/blog/spec.rst:445 msgid "It's ok to use built-in Django CBV if needed." msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " -"(CBV)." +"Якщо потрібно, можна використовувати вбудовані класи відображення у " +"Django (CBV)." #: ../../src/appx/blog/spec.rst:448 msgid "Challenge: Serializers" @@ -1073,24 +1512,24 @@ msgstr "Завдання: Серіалізатори" #: ../../src/appx/blog/spec.rst:452 msgid "" -"Topic serializer is for read-only purposes only. Topics can be created via " -"admin page only." +"Topic serializer is for read-only purposes only. Topics can be created " +"via admin page only." msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." #: ../../src/appx/blog/spec.rst:454 msgid "" -"Serialized data should contain all available data, e.g. ``pk``, ``title``, " -"``description``." +"Serialized data should contain all available data, e.g. ``pk``, " +"``title``, ``description``." msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." #: ../../src/appx/blog/spec.rst:459 msgid "" -"article comment serializer can perform both reading and writing operations. " -"But it can't be used to *update* or *delete* comment." +"article comment serializer can perform both reading and writing " +"operations. But it can't be used to *update* or *delete* comment." msgstr "" "серіалізатор коментаря статті може виконувати як операції читання, так і " "операції запису. Проте він не може використовуватися для оновлення або " @@ -1098,8 +1537,8 @@ msgstr "" #: ../../src/appx/blog/spec.rst:461 msgid "" -"Random, or pre-defined user may be used as comment's author for now. This " -"will be fixed in the future." +"Random, or pre-defined user may be used as comment's author for now. This" +" will be fixed in the future." msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." @@ -1109,8 +1548,8 @@ msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " -"отримання списку, отримання окремої статті, створення нової статті, " +"серіалізатор статей надає повний доступ до статей. Доступні всі операції:" +" отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." #: ../../src/appx/blog/spec.rst:470 @@ -1119,15 +1558,16 @@ msgstr "Користувач" #: ../../src/appx/blog/spec.rst:471 msgid "" -"User serializer provides full access to site users data. All operations are " -"available for now: list, retrieve, create, update and destroy. This behavior " -"will be fixed in the future, to prevent unauthorized data modifications." +"User serializer provides full access to site users data. All operations " +"are available for now: list, retrieve, create, update and destroy. This " +"behavior will be fixed in the future, to prevent unauthorized data " +"modifications." msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " -"Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та видалення. " -"Однак, ця поведінка буде виправлена у майбутньому для запобігання " -"несанкціонованим змінам даних." +"Серіалізатор користувача надає повний доступ до даних користувачів сайту." +" Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та " +"видалення. Однак, ця поведінка буде виправлена у майбутньому для " +"запобігання несанкціонованим змінам даних." #: ../../src/appx/blog/spec.rst:477 msgid "Challenge: API views" @@ -1136,13 +1576,13 @@ msgstr "Завдання: API views" #: ../../src/appx/blog/spec.rst:479 msgid "All blog-site functionality are to be reflected via REST API." msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API." +"Вся функціональність блог-сайту повинна бути відображена за допомогою " +"REST API." #: ../../src/appx/blog/spec.rst:482 msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This will " -"be fixed in the next challenge." +"It's ok to pass *pre-defined* user as argument in request's body. This " +"will be fixed in the next challenge." msgstr "" "Наразі дозволяється передавати *наперед визначеного* користувача у тілі " "запиту. Це буде виправлено у наступному розділі." @@ -1162,10 +1602,10 @@ msgstr "" "запису" #: ../../src/appx/blog/spec.rst:491 -msgid "" -"For non-authenticated users it is possible to obtain authentication data." +msgid "For non-authenticated users it is possible to obtain authentication data." msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." +"Для неаутентифікованих користувачів можлива отримання даних " +"аутентифікації." #: ../../src/appx/blog/spec.rst:494 msgid "" @@ -1201,13 +1641,6 @@ msgstr "Авторизовані користувачі можуть додав msgid "Code editors and IDEs for Python" msgstr "Редактори коду та IDE для Python" -#: ../../src/appx/code_edit.txt:-1 ../../src/appx/conv_store.txt:-1 -#: ../../src/appx/create_pr.txt:-1 ../../src/appx/env_path.txt:-1 -#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 -#: ../../src/appx/wtk.txt:-1 -msgid "Serhii Horodilov sgorodil@gmail.com" -msgstr "Serhii Horodilov sgorodil@gmail.com" - #: ../../src/appx/code_edit.txt:-1 msgid "python, editor, ide" msgstr "python, editor, ide" @@ -1222,17 +1655,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" +"Writing Python using IDLE or the Python Shell is great for simple things," +" but those tools quickly turn larger programming projects into " +"frustrating pits of despair. Using an IDE, or even just a good dedicated " +"code editor, makes coding fun — but which one is best for you? " +":cite:`realpython:code-edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово " +"підходить для простих речей, але ці інструменти швидко перетворюють " +"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" +" або навіть просто хорошого спеціального редактора коду робить кодування " +"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -1248,23 +1681,25 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." +"The local store is struggling with their payment registry system. The " +"owner asked you to take a look at it and to propose some ideas about the " +"upgrade. While looking on a wooden frames with rows of beads you think " +"that this will be a challenging task to bring a modern approach into this" +" place and reorganize the processes. Fortunately, you are a Python " +"developer who knows how to work with various data incomes and outcomes. " +"After some time the scope of works and timelines were discussed and wrote" +" some notes to split the entire project into individual pieces to " +"implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " +"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " +"буде складним завданням застосувати сучасний підхід до цього місця та " +"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " +"працювати з різними доходами та результатами даних. Через деякий час " +"обговорювалися обсяги робіт і часові рамки та були написані деякі " +"примітки, щоб розділити весь проект на окремі частини для поетапної " +"реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -1277,8 +1712,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." +"with. At stage one the main goal is to implement data models - classes to" +" work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -1310,23 +1745,25 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " +"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " +"``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " +"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " +"дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a " +"total price for a specified quantity of a product to purchase. Desired " +"quantity will be passed as an optional argument of a numeric type " +"(``int`` or ``float``). In case quantity argument is omitted - just use " +"``unit`` attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" +" загальної ціни на вказану кількість товару для покупки. Бажану кількість" +" буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -1339,46 +1776,38 @@ msgstr "Пояснення коду" msgid "Product model implementation" msgstr "Реалізація моделі товару" -#: conv_store.models.Product:3 of -msgid "Instances of this class represent a product available for purchase." -msgstr "Цей клас представляє товари, які можна придбати в магазині." - #: conv_store.models.Product conv_store.models.ShoppingCart of wtk.models.Enemy #: wtk.models.Player msgid "Variables" msgstr "Змінні" -#: conv_store.models.Product:5 of +#: conv_store.models.Product:3 of msgid "the name of a product" msgstr "назва товару" -#: conv_store.models.Product:7 of +#: conv_store.models.Product:5 of msgid "the price for a single product unit" msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" -#: conv_store.models.Product:9 of +#: conv_store.models.Product:7 of msgid "the size of a single product unit" msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" +#: conv_store.models.Product:10 of +msgid "Instances of this class represent a product available for purchase." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + #: conv_store.models.Product.get_total:1 of msgid "Return the total price for a specified amount of a product" msgstr "Повертає загальну ціну за вказану кількість товару" -#: conv_store.models.Product.get_total:3 of -msgid "" -"If the quantity argument is omitted, unit attribute value should be used " -"instead." -msgstr "" -"Якщо аргумент кількості пропущено, замість нього слід використовувати " -"значення атрибута одиниці." - #: conv_store.models.Product.get_total #: conv_store.models.ShoppingCart.add_product of wtk.models.Enemy.__init__ #: wtk.models.Player.__init__ msgid "Parameters" msgstr "Параметри" -#: conv_store.models.Product.get_total:6 of +#: conv_store.models.Product.get_total:3 of msgid "a quantity to purchase, defaults to None" msgstr "кількість для покупки, за замовчуванням None" @@ -1389,7 +1818,7 @@ msgstr "кількість для покупки, за замовчування msgid "Returns" msgstr "Повертає" -#: conv_store.models.Product.get_total:9 of +#: conv_store.models.Product.get_total:6 of msgid "total price for a specified amount of a product" msgstr "вартість вказаної кількості товару" @@ -1398,6 +1827,14 @@ msgstr "вартість вказаної кількості товару" msgid "Return type" msgstr "Тип повернення" +#: conv_store.models.Product.get_total:9 of +msgid "" +"If the quantity argument is omitted, unit attribute value should be used " +"instead." +msgstr "" +"Якщо аргумент кількості пропущено, замість нього слід використовувати " +"значення атрибута одиниці." + #: ../../problem-sets/src/conv_store/challenge.rst:51 #: ../../problem-sets/src/conv_store/challenge.rst:82 #: ../../problem-sets/src/conv_store/challenge.rst:126 @@ -1413,11 +1850,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." +"responsibility is to store information about the purchases and their " +"amount (quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна " +"відповідальність - зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -1429,9 +1866,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a " +"specified quantity into a cart. ``quantity`` argument is optional, if " +"omitted just uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -1450,43 +1887,44 @@ msgid "Shopping cart model implementation" msgstr "Реалізація моделі кошика" #: conv_store.models.ShoppingCart:3 of -msgid "" -"In general shopping cart is a container for products. Instances of this " -"class handle product and corresponding quantity for each item inside a " -"shopping cart instance." -msgstr "" -"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " -"класу обробляють продукт і відповідну кількість для кожного товару в " -"екземплярі кошика для покупок." - -#: conv_store.models.ShoppingCart:7 of msgid "product appended to the shopping cart instance" msgstr "товар, доданий до екземпляра кошика" -#: conv_store.models.ShoppingCart:9 of +#: conv_store.models.ShoppingCart:5 of msgid "corresponding quantities for each product in cart" msgstr "відповідна кількість для товару у кошику" +#: conv_store.models.ShoppingCart:8 of +msgid "" +"In general shopping cart is a container for products. Instances of this " +"class handle product and corresponding quantity for each item inside a " +"shopping cart instance." +msgstr "" +"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " +"класу обробляють продукт і відповідну кількість для кожного товару в " +"екземплярі кошика для покупок." + #: conv_store.models.ShoppingCart.add_product:1 of msgid "Add product to the shopping cart" msgstr "Додає товар до кошика" #: conv_store.models.ShoppingCart.add_product:3 of -msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." -msgstr "" -"Цей метод додає екземпляр продукту та відповідне значення кількості до " -"кошика." - -#: conv_store.models.ShoppingCart.add_product:6 of msgid "a product instance to add to cart" msgstr "екземпляр товару, щоб додати до кошика" -#: conv_store.models.ShoppingCart.add_product:8 of +#: conv_store.models.ShoppingCart.add_product:5 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці " +"продукту." + +#: conv_store.models.ShoppingCart.add_product:9 of +msgid "" +"This method adds a product instance and corresponding quantity value to " +"the cart." +msgstr "" +"Цей метод додає екземпляр продукту та відповідне значення кількості до " +"кошика." #: conv_store.models.ShoppingCart.get_total:1 of msgid "Return the total price for all the product in the cart" @@ -1502,8 +1940,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to" +" get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -1512,16 +1950,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без " +"значень за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities " +"between different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" +" між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -1545,27 +1983,28 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to " +"its ``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має " +"дорівнювати значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." +"While casting shopping cart instance to ``float`` type it should be equal" +" to its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він " +"має дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if " +"at least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " +"його ``True``, якщо принаймні один продукт приєднаний до поточного " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -1576,8 +2015,7 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" +msgid "consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -1586,11 +2024,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing " +"the shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання " +"картки покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -1606,27 +2044,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and " +"credit card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " +"але їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " +"this property *protected*, since it should not be accessed outside the " +"card instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" +" властивість *protected*, оскільки до неї не слід звертатися поза " +"екземпляром картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." +"arguments and return a value of a boolean type. This is an abstract class" +" for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -1634,9 +2072,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " +"a ``ShoppingCart`` object and returns nothing. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -1644,8 +2082,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances " +"of this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -1655,31 +2093,29 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "The instances of this class are created with ``security_code`` argument." +msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." +"``is_valid`` method should ask a customer for a security code and check " +"it against the stored value. In case codes are equal payment considered " +"to be valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " +"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" +" printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку " +"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " +"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" +" кошику : {float total}\" слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -1688,9 +2124,10 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку " +"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " +"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " +": {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -1702,16 +2139,17 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." +"Implement ``len(cart_obj)`` and make it return the number of products in " +"the cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" +" у кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " +"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " +"float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -1719,17 +2157,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance" +" and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into" +" a cart and this product already is present there, do not it for the " +"second time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -1737,19 +2175,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." +"Implement ``remove_product`` method to completely remove some product " +"from the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" +" з кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity " +"is equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " +"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -1765,407 +2203,12 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." msgstr "Залежності проекту потрібно оновити." -#: ../../src/appx/create_pr.txt:-1 -msgid "The instructions to create a pull request via GitHub" -msgstr "Інструкції щодо створення запиту на отримання через GitHub" - -#: ../../src/appx/create_pr.txt:-1 -msgid "Vladyslav Ponomaryov" -msgstr "Vladyslav Ponomaryov" - -#: ../../src/appx/create_pr.txt:-1 -msgid "git, github, pull request, branch, merge" -msgstr "git, github, pull request, branch, merge" - -#: ../../src/appx/create_pr.txt:9 -msgid "Creating the Pull Request" -msgstr "Створення Pull Request" - -#: ../../src/appx/create_pr.txt:11 -msgid "" -"Create a pull request to propose and collaborate on changes to a repository. " -"These changes are proposed in a *branch*, which ensures that the default " -"branch only contains finished and approved work :cite:`github:creating-pr`." -msgstr "" -"Створіть запит на отримання, щоб запропонувати та співпрацювати над змінами " -"в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " -"замовчуванням містить лише готову та затверджену роботу :cite:`github:" -"creating-pr`." - -#: ../../src/appx/create_pr.txt:17 -msgid "About pull requests" -msgstr "Про pull requests" - -#: ../../src/appx/create_pr.txt:19 -msgid "" -"Pull requests let you tell others about changes you've pushed to a branch in " -"a repository on GitHub. Once a pull request is opened, you can discuss and " -"review the potential changes with collaborators and add follow-up commits " -"before your changes are merged into the base branch :cite:`github:about-pr`." -msgstr "" -"Запити на витягування дозволяють повідомляти іншим про зміни, які ви внесли " -"до гілки сховища на GitHub. Після відкриття запиту на отримання ви можете " -"обговорити та переглянути потенційні зміни зі співавторами та додати " -"подальші коміти, перш ніж ваші зміни буде об'єднано в базову гілку :cite:" -"`github:about-pr`." - -#: ../../src/appx/create_pr.txt:25 -msgid "" -"The compare and pull request pages use different methods to calculate the " -"diff for changed files:" -msgstr "" -"Сторінки порівняння та запиту на отримання використовують різні методи для " -"обчислення різниці для змінених файлів:" - -#: ../../src/appx/create_pr.txt:28 -msgid "" -"Compare pages show the diff between the tip of the head ref and the current " -"common ancestor (that is, the merge base) of the head and base ref." -msgstr "" -"Сторінки порівняння показують різницю між кінчиком головного посилання та " -"поточним спільним предком (тобто основою злиття) головного та базового " -"посилання." - -#: ../../src/appx/create_pr.txt:30 -msgid "" -"Pull request pages show the diff between the tip of the head ref and the " -"common ancestor of the head and base ref at the time when the pull request " -"was created. Consequently, the merge base used for the comparison might be " -"different." -msgstr "" -"Сторінки запиту на отримання показують різницю між кінчиком головного " -"посилання та спільним предком головного та базового посилання на момент " -"створення запиту на отримання. Отже, база злиття, яка використовується для " -"порівняння, може бути іншою." - -#: ../../src/appx/create_pr.txt:35 -msgid "" -"In *few words*: both source and target branches **should** share some " -"commit(s) in their history and the source branch **should** has commit(s) " -"missing on the target one." -msgstr "" -"У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати спільні " -"деякі коміти у своїй історії, а вихідна гілка **повинна** мати коміти, " -"відсутні в цільовій." - -#: ../../src/appx/create_pr.txt:41 -msgid "Repository content" -msgstr "Вміст репозиторію" - -#: ../../src/appx/create_pr.txt:43 -msgid "Following SHOULD be included to the repository:" -msgstr "У репозиторій СЛІД включити наступне:" - -#: ../../src/appx/create_pr.txt:45 -msgid "code base" -msgstr "кодова база" - -#: ../../src/appx/create_pr.txt:46 -msgid "project dependencies (if any)" -msgstr "залежності проекту (якщо є)" - -#: ../../src/appx/create_pr.txt:48 -msgid "Following MAY be included to the repository:" -msgstr "До репозиторію МОЖЕ бути включено:" - -#: ../../src/appx/create_pr.txt:50 -msgid "additional information (e.g. README file and other documents)" -msgstr "додаткова інформація (наприклад, файл README та інші документи)" - -#: ../../src/appx/create_pr.txt:51 -msgid "dummy data (e.g. fixtures for development and testing etc.)" -msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" - -#: ../../src/appx/create_pr.txt:53 -msgid "Following SHOULD be excluded from the repository:" -msgstr "З репозитарію СЛІД виключити:" - -#: ../../src/appx/create_pr.txt:55 -msgid "virtual environment directory" -msgstr "каталог віртуального середовища" - -#: ../../src/appx/create_pr.txt:56 -msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" -msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" - -#: ../../src/appx/create_pr.txt:57 -msgid "python byte-compiled code (``__pycache__``)" -msgstr "скомпільований код python (``__pycache__``)" - -#: ../../src/appx/create_pr.txt:58 -msgid "IDE configurations (e.g. \".vscode\", \".idea\" etc.)" -msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" - -#: ../../src/appx/create_pr.txt:59 -msgid "Desktop Services Store (\".DS_Store\")" -msgstr "Desktop Services Store (\".DS_Store\")" - -#: ../../src/appx/create_pr.txt:63 -msgid "Repository preparation" -msgstr "Підготовка репозиторію" - -#: ../../src/appx/create_pr.txt:65 -msgid "This should be done once for each repository." -msgstr "Це потрібно зробити один раз для кожного репозиторію." - -#: ../../src/appx/create_pr.txt:68 -msgid "Repository initialization" -msgstr "Ініціалізація репозиторію" - -#: ../../src/appx/create_pr.txt:70 -msgid "" -"Create README file and provide a brief description for your project " -"(optional)." -msgstr "" -"Створіть файл README та надайте короткий опис свого проекту (необов'язково)." - -#: ../../src/appx/create_pr.txt:72 -msgid "Create a virtual environment." -msgstr "Створіть віртуальне середовище." - -#: ../../src/appx/create_pr.txt:73 -msgid "Install project dependencies." -msgstr "Встановіть залежності проекту." - -#: ../../src/appx/create_pr.txt:74 -msgid "Freeze the dependencies." -msgstr "Зафіксуйте залежності." - -#: ../../src/appx/create_pr.txt:80 -msgid "" -"Create a base code modules (e.g. initialize django project and apps, or " -"create an empty python module like \"main.py\" etc.)." -msgstr "" -"Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " -"його застосунки або створіть порожній модуль python, як-от \"main.py\" тощо)." - -#: ../../src/appx/create_pr.txt:82 -msgid "" -"Create \".gitignore\" file and set up directories and files to be excluded" -msgstr "" -"Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які потрібно " -"виключити" - -#: ../../src/appx/create_pr.txt:83 -msgid "Create a fresh repository." -msgstr "Створіть нове репозиторій." - -#: ../../src/appx/create_pr.txt:89 ../../src/appx/create_pr.txt:171 -msgid "Stage and commit changes." -msgstr "Зробіть фіксацію змін (stage + commit)." - -#: ../../src/appx/create_pr.txt:90 -msgid "Set up remote repository." -msgstr "Налаштуйте віддалений репозиторій." - -#: ../../src/appx/create_pr.txt:96 -msgid "Push your local branch to remote repo." -msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." - -#: ../../src/appx/create_pr.txt:99 -msgid "Append contributors to remote repository" -msgstr "Додати учасників до віддаленого репозиторію" - -#: ../../src/appx/create_pr.txt:101 -msgid "" -"Reviews allow collaborators to comment on the changes proposed in pull " -"requests, approve the changes, or request further changes before the pull " -"request is merged. Repository administrators can require that all pull " -"requests are approved before being merged." -msgstr "" -"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах на " -"отримання, затверджувати зміни або вимагати подальших змін перед об'єднанням " -"запиту на отримання. Адміністратори сховища можуть вимагати схвалення всіх " -"запитів на отримання перед об'єднанням." - -#: ../../src/appx/create_pr.txt:107 -msgid "" -"On `GitHub `_, navigate to the repository settings page " -"and switch to **Collaborators and teams** menu item." -msgstr "" -"На `GitHub `_ перейдіть на сторінку налаштувань " -"репозиторію та перейдіть до пункту меню **Collaborators and teams**." - -#: ../../src/appx/create_pr.txt:109 -msgid "Under **Manage access** section click ``Add people`` button." -msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." - -#: ../../src/appx/create_pr.txt:110 -msgid "In modal window start typing GitHub username." -msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." - -#: ../../src/appx/create_pr.txt:111 -msgid "Select a contributor from the dropdown menu." -msgstr "Виберіть учасника зі спадного меню." - -#: ../../src/appx/create_pr.txt:115 -msgid "Working on feature" -msgstr "Робота над завданням" - -#: ../../src/appx/create_pr.txt:117 -msgid "" -"Create a dedicated branch with some representative name (e.g. \"feature/" -"models\", \"cbv\" etc.)." -msgstr "" -"Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " -"\"feature/models\", \"cbv\" тощо)." - -#: ../../src/appx/create_pr.txt:119 -msgid "Switch to the newly created branch." -msgstr "Перейдіть до новоствореної гілки." - -#: ../../src/appx/create_pr.txt:120 -msgid "Do the work and commit changes on a feature branch." -msgstr "Виконайте роботу та зафіксуйте зміни в гілці." - -#: ../../src/appx/create_pr.txt:124 -msgid "You can create a branch and switch to it by a single command." -msgstr "" -"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " -"команди." - -#: ../../src/appx/create_pr.txt:133 -msgid "" -"While working on a *feature branch* make commits for each completed logical " -"block of code." -msgstr "" -"Під час роботи над *функціональною гілкою* робіть коміти для кожного " -"завершеного логічного блоку коду." - -#: ../../src/appx/create_pr.txt:138 -msgid "Creating the pull request" -msgstr "Створення запиту на злиття" - -#: ../../src/appx/create_pr.txt:140 -msgid "" -"Make sure your working branch is up-to-date with the default one. You can " -"pull changes for the default branch and rebase your feature branch onto it." -msgstr "" -"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " -"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " -"на неї." - -#: ../../src/appx/create_pr.txt:143 -msgid "" -"Push feature branch to the remote repository. By default the current active " -"branch is pushed to the remote repo." -msgstr "" -"Завантажте функціональну гілку до віддаленого репозиторію. За замовчуванням " -"буде завантажена активна гілка." - -#: ../../src/appx/create_pr.txt:150 -msgid "Go to your remote repository at GitHub and click **Pull requests** tab." -msgstr "" -"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку **Pull " -"requests**." - -#: ../../src/appx/create_pr.txt:151 -msgid "On **Pull requests** tab click **New** button." -msgstr "На вкладці **Pull requests** натисніть кнопку **New**." - -#: ../../src/appx/create_pr.txt:152 -msgid "" -"Select your default branch as *target* and your feature branch as *source*." -msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." - -#: ../../src/appx/create_pr.txt:153 -msgid "Provide some brief description for your pull request." -msgstr "Надайте короткий опис вашого запиту." - -#: ../../src/appx/create_pr.txt:154 -msgid "Press **Create pull request** button." -msgstr "Натисніть кнопку **Create pull request**." - -#: ../../src/appx/create_pr.txt:155 -msgid "" -"On the pull request page add a **reviewer** by clicking the appropriate " -"option and selecting a person from a dropdown menu." -msgstr "" -"На сторінці запиту на отримання додайте **reviewer**, натиснувши відповідну " -"опцію та вибравши особу зі спадного меню." - -#: ../../src/appx/create_pr.txt:160 -msgid "Making changes" -msgstr "Внесення змін" - -#: ../../src/appx/create_pr.txt:162 -msgid "From this moment, your pull request *is waiting* for the review." -msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." - -#: ../../src/appx/create_pr.txt:164 -msgid "" -"The reviewer will **approve** or **reject** your pull request. Optionally " -"the reviewer may provide some comments to your code; **rejected** pull " -"requests will always come with some details." -msgstr "" -"Рецензент **схвалить** або **відхилить** ваш запит на отримання. За бажанням " -"рецензент може надати деякі коментарі до вашого коду; **відхилені** запити " -"на витягування завжди надходитимуть з деякими деталями." - -#: ../../src/appx/create_pr.txt:168 -msgid "" -"In case your work is **rejected**, you are to provide fixes. To do this:" -msgstr "" -"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб зробити " -"це:" - -#: ../../src/appx/create_pr.txt:170 -msgid "Do the work in your local feature branch." -msgstr "Виконайте роботу у своїй локальній гілці." - -#: ../../src/appx/create_pr.txt:172 -msgid "Push them to remote branch." -msgstr "Надішліть їх до гілки віддаленого репозиторію." - -#: ../../src/appx/create_pr.txt:173 -msgid "Re-request review from the pull request page." -msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." - -#: ../../src/appx/create_pr.txt:175 -msgid "" -"All commits related to the source branch will be automatically appended to " -"the open pull request. The reviewer will review your updates. Repeat this " -"process until the pull request is **approved**." -msgstr "" -"Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " -"відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " -"Повторюйте цей процес, доки запит на отримання не буде **схвалено**." - -#: ../../src/appx/create_pr.txt:181 -msgid "Merging the pull request" -msgstr "Об'єднання (злиття) запиту" - -#: ../../src/appx/create_pr.txt:183 -msgid "" -"Once your pull request is **approved** - merge it. Select one of the options " -"available with your pull request; they may be:" -msgstr "" -"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один із " -"варіантів, доступних у вашому запиті на отримання; вони можуть бути:" - -#: ../../src/appx/create_pr.txt:186 -msgid "Create a merge commit" -msgstr "Create a merge commit" - -#: ../../src/appx/create_pr.txt:187 -msgid "Rebase and merge" -msgstr "Rebase and merge" - -#: ../../src/appx/create_pr.txt:188 -msgid "Squash and merge" -msgstr "Squash and merge" - -#: ../../src/appx/create_pr.txt:190 -msgid "After that the pull request is merged into your target branch." -msgstr "Після цього коміти робочої та цільової гілка об'єднується." - #: ../../src/appx/env_path.txt:-1 msgid "Setting up environment variables" msgstr "Встановлення змінних середовища" @@ -2193,15 +2236,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) " +":cite:`docs-python:operator-precedence`. Operators in the same cell have " +"the same precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " +"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " +"пріоритет зліва направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -2221,11 +2264,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" +"Binding or parenthesized expression, list display, dictionary display, " +"set display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника," +" відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -2265,8 +2308,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" +"Multiplication, matrix multiplication, division, floor division, " +"remainder [#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -2371,16 +2414,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary" +" operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." +"the ``%`` operator is also used for string formatting; the same " +"precedence applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -2400,18 +2443,20 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об'єктом." +"(modulo). This is also known as the string *formatting* or " +"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " +"``format % values`` (where *format* is a string), ``%`` conversion " +"specifications in *format* are replaced with zero or more elements of " +"*values*. If *format* requires a single argument, *values* may be a " +"single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " +"(по модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" +" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " +"*format* замінюються нулем або більше елементами *значень*. Якщо для " +"*format* потрібен один аргумент, *values* може бути одним некортежним " +"об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -2447,9 +2492,11 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" +"The converted value is left adjusted (override the ``'0'`` if both are " +"given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " +"обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -2465,11 +2512,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion " +"(overrides a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " +"(перевизначає прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -2557,8 +2604,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is " +"less that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -2601,8 +2648,7 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." +msgid "No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -2627,8 +2673,7 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -2648,9 +2693,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -2675,14 +2720,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " -"provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution " +"`__ on Windows and a " +"DLL (cygwin1.dll) which provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux " +"`__ у Windows та DLL " +"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -2690,11 +2735,12 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your " +"application *from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " +"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " +"Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -2718,13 +2764,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle everything " -"from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle " +"everything from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " +"версій, призначена для швидкого та ефективного керування всіма проектами," +" від малих до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -2737,24 +2783,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" +" рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." +"workflows with an integrated dev pipeline and through the consolidation " +"of application components. Actively used by millions of developers around" +" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " +"agility and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " +"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " +"розробки за допомогою інтегрованого конвеєра розробників і консолідації " +"компонентів програми. Активно використовувані мільйонами розробників у " +"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " +"простоту, гнучкість і вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -2766,13 +2812,14 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system " +"with over 35 years of active development that has earned it a strong " +"reputation for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " +"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" +" вона заслужила міцну репутацію надійності, надійності функцій і " +"продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -2784,24 +2831,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in " +"queries interactively, issue them to PostgreSQL, and see the query " +"results. Alternatively, input can be from a file or from command line " +"arguments. In addition, psql provides a number of meta-commands and " +"various shell-like features to facilitate writing scripts and automating " +"a wide variety of tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" +" запиту. Крім того, введення може бути з файлу або з аргументів " +"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" +" функцій, подібних до оболонки, для полегшення написання сценаріїв і " +"автоматизації різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " +"Linux look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -2816,19 +2863,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." +"pgAdmin is the most popular and feature rich Open Source administration " +"and development platform for PostgreSQL, the most advanced Open Source " +"database in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа " +"адміністрування та розробки з відкритим кодом для PostgreSQL, " +"найдосконалішої бази даних з відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" +" веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -2840,17 +2887,19 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" -"contained `__, `high-reliability " -"`__, `full-featured `__, SQL database engine." +"SQLite is a C-language library that implements a `small " +"`__, `fast " +"`__, `self-contained " +"`__, `high-reliability " +"`__, `full-featured " +"`__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " -"`самодостатню `__, `висока надійність " -"`__, `повнофункціональний `__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку " +"`__, `швидку " +"`__, `самодостатню " +"`__, `висока надійність " +"`__, `повнофункціональний " +"`__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -2876,15 +2925,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must " -"type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must" +" type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " -"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " -"більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " +"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " +"якомога більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -2892,8 +2941,7 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -2901,8 +2949,9 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." +"The game process is divided into rounds. Each round consists of " +"**attack** and **defence** stages. Rounds are repeated, until player is " +"defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -2934,8 +2983,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by" +" random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -2974,8 +3023,9 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " -"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" +" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " +"успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -3003,13 +3053,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom " +"exception ``EnemyDown`` should be used to track these cases. Exception " +"should provide the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" +" повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -3021,13 +3071,15 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." +"This is an exceptional scenario when player is defeated. A custom " +"exception ``GameOver`` should be used to track these cases. Exception " +"should provide the details on the player's instance, especially its score" +" points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати " +"бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -3046,66 +3098,65 @@ msgid "Enemy model" msgstr "Модель супротивника" #: of wtk.models.Enemy:3 -msgid "Represents the playing enemy-bot." -msgstr "Представляє граючого ворога-бота." - -#: of wtk.models.Enemy:5 msgid "enemy's level value" msgstr "значення рівня противника" -#: of wtk.models.Enemy:7 +#: of wtk.models.Enemy:5 msgid "enemy's instance health points" msgstr "очки здоров'я ворога" +#: of wtk.models.Enemy:8 +msgid "Represents the playing enemy-bot." +msgstr "Представляє граючого ворога-бота." + #: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 msgid "Initialize instance" msgstr "Ініціалізувати екземпляр" #: of wtk.models.Enemy.__init__:3 -msgid "Health value is equal to the level value." -msgstr "Значення здоров'я дорівнює значенню рівня." - -#: of wtk.models.Enemy.__init__:5 msgid "an enemy's level indicator" msgstr "індикатор рівня противника" +#: of wtk.models.Enemy.__init__:6 +msgid "Health value is equal to the level value." +msgstr "Значення здоров'я дорівнює значенню рівня." + #: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 msgid "Decrease health points" msgstr "Зменшує очоки здоров'я" -#: of wtk.models.Enemy.decrease_health:3 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``EnemyDown`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``EnemyDown``." - #: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health msgid "raise" msgstr "raise" -#: of wtk.models.Enemy.decrease_health:6 +#: of wtk.models.Enemy.decrease_health:3 msgid "EnemyDown" msgstr "EnemyDown" +#: of wtk.models.Enemy.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``EnemyDown`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``EnemyDown``." + #: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 msgid "Return a random fight choice" msgstr "Повертає випадковий варіант для бою" #: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 -msgid "Choices made by an enemy are random." -msgstr "Вибори, зроблені супротивником, випадкові." - -#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 -#: wtk.models.Player.select_attack:7 wtk.models.Player.select_defence:7 +#: wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 msgid "a fight choice" msgstr "варіант для бою" +#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 +msgid "Choices made by an enemy are random." +msgstr "Вибори, зроблені супротивником, випадкові." + #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -3116,51 +3167,52 @@ msgid "Player model" msgstr "Модель гравця" #: of wtk.models.Player:3 -msgid "This model is controlled by the player." -msgstr "Ця модель керується гравцем." - -#: of wtk.models.Player:5 msgid "player's name" msgstr "ім'я гравця" -#: of wtk.models.Player:7 +#: of wtk.models.Player:5 msgid "player's instance health points" msgstr "очки здоров'я гравця" -#: of wtk.models.Player:9 +#: of wtk.models.Player:7 msgid "player's instance gained score points" msgstr "очки, зароблені гравцем" -#: of wtk.models.Player.__init__:3 -msgid "" -"This method performs player instance initialization. It set instance name, " -"initial score points value and health." -msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров'я." +#: of wtk.models.Player:10 +msgid "This model is controlled by the player." +msgstr "Ця модель керується гравцем." -#: of wtk.models.Player.__init__:6 +#: of wtk.models.Player.__init__:3 msgid "a player's name" msgstr "ім'я гравця" +#: of wtk.models.Player.__init__:6 +msgid "" +"This method performs player instance initialization. It set instance " +"name, initial score points value and health." +msgstr "" +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " +"назву екземпляра, значення початкових балів і здоров'я." + #: of wtk.models.Player.attack:1 msgid "Attack an enemy" msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" +"Perform attack on an enemy instance. This method takes an enemy instance " +"as an argument. After that, it takes attack choice from the player model " +"and the defence choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease enemy " +"health, assign score points etc.). Based on fight result should print out" +" a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі " +"гравця та вибір захисту з моделі противника. Після результату битви " +"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " +"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" +" \"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -3175,34 +3227,34 @@ msgid "\"IT'S A DRAW!\"" msgstr "\"IT'S A DRAW!\"" #: of wtk.models.Player.decrease_health:3 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``GameOver`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``GameOver``." - -#: of wtk.models.Player.decrease_health:6 msgid "GameOver" msgstr "GameOver" +#: of wtk.models.Player.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less " +"than 1 (one) an ``GameOver`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше" +" 1 (одного), виникає виняток ``GameOver``." + #: of wtk.models.Player.defence:1 msgid "Defend from an enemy's attack" msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance" +" as an argument. After that, it takes defence choice from the player " +"model and the attack choice from an enemy model. After fight result " +"calculation required operation are to be performed (decrease player " +"health). Based on fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та " +"вибір атаки від моделі ворога. Після результату бою необхідно виконати " +"операцію обчислення (зменшити здоров'я гравця). За результатами бою " +"повинно вийти повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -3236,7 +3288,7 @@ msgstr "**рицар** перемагає **злодія**" msgid "Return fight choice from the user's prompt" msgstr "Повертає варіант для поєдинку з вводу користувача" -#: of wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 +#: of wtk.models.Player.select_attack:5 wtk.models.Player.select_defence:5 msgid "" "The player is asked to make their decision for the upcoming fight. The " "chosen value is validated and if it is invalid the question is repeated." @@ -3275,7 +3327,8 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, " +"наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -3332,15 +3385,16 @@ msgid "Return a player's name from the user prompt" msgstr "Повертає ім'я гравця з вводу користувача" #: of wtk.engine.get_player_name:3 +msgid "a player defined name" +msgstr "ім'я визначене гравцем" + +#: of wtk.engine.get_player_name:5 msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." - -#: of wtk.engine.get_player_name:6 -msgid "a player defined name" -msgstr "ім'я визначене гравцем" +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " +"рядком." #: ../../problem-sets/src/wtk/challenge.rst:158 msgid "Play" @@ -3349,20 +3403,21 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated " +"- a new one should be initialized with level increased by 1 (one). This " +"case should be reported to the terminal. If a player is defeated - the " +"\"Game Over\" message should be reported to the terminal. " +"``KeyboardInterrupt`` should be handled as well - it's behavior is " +"similar to \"Game Over\" event, but \"game over\" message should be " +"omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " +"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " +"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " +"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " +"також слід обробити - це поведінка подібно до події \"Game Over\", але " +"повідомлення \"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -3370,13 +3425,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs the " -"game process in an endless loop. Once the player is defeated - it stops the " -"execution." +"The function initializes player and enemy instances. After that it runs " +"the game process in an endless loop. Once the player is defeated - it " +"stops the execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " -"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " -"зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" +" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" +" зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -3385,8 +3440,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" +" записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -3395,7 +3450,8 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового файлу." +"Зберігайте таблицю балів у базі даних замість використання текстового " +"файлу." #~ msgid "Specification for Django blog training project" #~ msgstr "Специфікація навчального проекту блогу Django" @@ -3407,8 +3463,254 @@ msgstr "" #~ msgstr "Додаткові завдання" #~ msgid "" -#~ "Create a service to fetch articles, ordered by a specified user " -#~ "preferences." +#~ "Create a service to fetch articles, " +#~ "ordered by a specified user preferences." +#~ msgstr "" +#~ "Створіть сервіс для отримання статей, " +#~ "впорядкованих за вказаними уподобаннями " +#~ "користувача." + +#~ msgid "The instructions to create a pull request via GitHub" +#~ msgstr "Інструкції щодо створення запиту на отримання через GitHub" + +#~ msgid "Creating the Pull Request" +#~ msgstr "Створення Pull Request" + +#~ msgid "" +#~ "Create a pull request to propose " +#~ "and collaborate on changes to a " +#~ "repository. These changes are proposed " +#~ "in a *branch*, which ensures that " +#~ "the default branch only contains " +#~ "finished and approved work :cite:`github" +#~ ":creating-pr`." +#~ msgstr "" +#~ "Створіть запит на отримання, щоб " +#~ "запропонувати та співпрацювати над змінами " +#~ "в сховищі. Ці зміни пропонуються у " +#~ "*гілці*, що гарантує, що гілка за " +#~ "замовчуванням містить лише готову та " +#~ "затверджену роботу :cite:`github:creating-pr`." + +#~ msgid "" +#~ "Pull requests let you tell others " +#~ "about changes you've pushed to a " +#~ "branch in a repository on GitHub. " +#~ "Once a pull request is opened, you" +#~ " can discuss and review the potential" +#~ " changes with collaborators and add " +#~ "follow-up commits before your changes " +#~ "are merged into the base branch " +#~ ":cite:`github:about-pr`." +#~ msgstr "" +#~ "Запити на витягування дозволяють повідомляти" +#~ " іншим про зміни, які ви внесли " +#~ "до гілки сховища на GitHub. Після " +#~ "відкриття запиту на отримання ви можете" +#~ " обговорити та переглянути потенційні зміни" +#~ " зі співавторами та додати подальші " +#~ "коміти, перш ніж ваші зміни буде " +#~ "об'єднано в базову гілку :cite:`github" +#~ ":about-pr`." + +#~ msgid "" +#~ "The compare and pull request pages " +#~ "use different methods to calculate the" +#~ " diff for changed files:" +#~ msgstr "" +#~ "Сторінки порівняння та запиту на " +#~ "отримання використовують різні методи для " +#~ "обчислення різниці для змінених файлів:" + +#~ msgid "" +#~ "Compare pages show the diff between " +#~ "the tip of the head ref and " +#~ "the current common ancestor (that is," +#~ " the merge base) of the head " +#~ "and base ref." +#~ msgstr "" +#~ "Сторінки порівняння показують різницю між " +#~ "кінчиком головного посилання та поточним " +#~ "спільним предком (тобто основою злиття) " +#~ "головного та базового посилання." + +#~ msgid "" +#~ "Pull request pages show the diff " +#~ "between the tip of the head ref" +#~ " and the common ancestor of the " +#~ "head and base ref at the time " +#~ "when the pull request was created. " +#~ "Consequently, the merge base used for" +#~ " the comparison might be different." +#~ msgstr "" +#~ "Сторінки запиту на отримання показують " +#~ "різницю між кінчиком головного посилання " +#~ "та спільним предком головного та " +#~ "базового посилання на момент створення " +#~ "запиту на отримання. Отже, база злиття," +#~ " яка використовується для порівняння, може" +#~ " бути іншою." + +#~ msgid "" +#~ "In *few words*: both source and " +#~ "target branches **should** share some " +#~ "commit(s) in their history and the " +#~ "source branch **should** has commit(s) " +#~ "missing on the target one." +#~ msgstr "" +#~ "У *кількох словах*: як вихідна, так " +#~ "і цільова гілки **повинні** мати спільні" +#~ " деякі коміти у своїй історії, а " +#~ "вихідна гілка **повинна** мати коміти, " +#~ "відсутні в цільовій." + +#~ msgid "Following SHOULD be included to the repository:" +#~ msgstr "У репозиторій СЛІД включити наступне:" + +#~ msgid "Following MAY be included to the repository:" +#~ msgstr "До репозиторію МОЖЕ бути включено:" + +#~ msgid "additional information (e.g. README file and other documents)" +#~ msgstr "додаткова інформація (наприклад, файл README та інші документи)" + +#~ msgid "dummy data (e.g. fixtures for development and testing etc.)" +#~ msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" + +#~ msgid "Following SHOULD be excluded from the repository:" +#~ msgstr "З репозитарію СЛІД виключити:" + +#~ msgid "virtual environment directory" +#~ msgstr "каталог віртуального середовища" + +#~ msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" +#~ msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" + +#~ msgid "Desktop Services Store (\".DS_Store\")" +#~ msgstr "Desktop Services Store (\".DS_Store\")" + +#~ msgid "Repository preparation" +#~ msgstr "Підготовка репозиторію" + +#~ msgid "This should be done once for each repository." +#~ msgstr "Це потрібно зробити один раз для кожного репозиторію." + +#~ msgid "" +#~ "Create README file and provide a " +#~ "brief description for your project " +#~ "(optional)." #~ msgstr "" -#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " -#~ "уподобаннями користувача." +#~ "Створіть файл README та надайте короткий" +#~ " опис свого проекту (необов'язково)." + +#~ msgid "Freeze the dependencies." +#~ msgstr "Зафіксуйте залежності." + +#~ msgid "" +#~ "Create a base code modules (e.g. " +#~ "initialize django project and apps, or" +#~ " create an empty python module like" +#~ " \"main.py\" etc.)." +#~ msgstr "" +#~ "Створіть модулі базового коду (наприклад, " +#~ "ініціалізуйте проект django та його " +#~ "застосунки або створіть порожній модуль " +#~ "python, як-от \"main.py\" тощо)." + +#~ msgid "" +#~ "Create \".gitignore\" file and set up" +#~ " directories and files to be excluded" +#~ msgstr "" +#~ "Створіть файл \".gitignore\" та налаштуйте " +#~ "каталоги та файли, які потрібно " +#~ "виключити" + +#~ msgid "Append contributors to remote repository" +#~ msgstr "Додати учасників до віддаленого репозиторію" + +#~ msgid "" +#~ "On `GitHub `_, navigate to" +#~ " the repository settings page and " +#~ "switch to **Collaborators and teams** " +#~ "menu item." +#~ msgstr "" +#~ "На `GitHub `_ перейдіть на" +#~ " сторінку налаштувань репозиторію та " +#~ "перейдіть до пункту меню **Collaborators " +#~ "and teams**." + +#~ msgid "Working on feature" +#~ msgstr "Робота над завданням" + +#~ msgid "" +#~ "Create a dedicated branch with some " +#~ "representative name (e.g. \"feature/models\", " +#~ "\"cbv\" etc.)." +#~ msgstr "" +#~ "Створіть спеціальну гілку з певною " +#~ "репрезентативною назвою (наприклад, " +#~ "\"feature/models\", \"cbv\" тощо)." + +#~ msgid "Do the work and commit changes on a feature branch." +#~ msgstr "Виконайте роботу та зафіксуйте зміни в гілці." + +#~ msgid "" +#~ "While working on a *feature branch* " +#~ "make commits for each completed logical" +#~ " block of code." +#~ msgstr "" +#~ "Під час роботи над *функціональною " +#~ "гілкою* робіть коміти для кожного " +#~ "завершеного логічного блоку коду." + +#~ msgid "On **Pull requests** tab click **New** button." +#~ msgstr "На вкладці **Pull requests** натисніть кнопку **New**." + +#~ msgid "" +#~ "On the pull request page add a " +#~ "**reviewer** by clicking the appropriate " +#~ "option and selecting a person from " +#~ "a dropdown menu." +#~ msgstr "" +#~ "На сторінці запиту на отримання додайте" +#~ " **reviewer**, натиснувши відповідну опцію " +#~ "та вибравши особу зі спадного меню." + +#~ msgid "" +#~ "The reviewer will **approve** or " +#~ "**reject** your pull request. Optionally " +#~ "the reviewer may provide some comments" +#~ " to your code; **rejected** pull " +#~ "requests will always come with some " +#~ "details." +#~ msgstr "" +#~ "Рецензент **схвалить** або **відхилить** ваш" +#~ " запит на отримання. За бажанням " +#~ "рецензент може надати деякі коментарі до" +#~ " вашого коду; **відхилені** запити на " +#~ "витягування завжди надходитимуть з деякими " +#~ "деталями." + +#~ msgid "Re-request review from the pull request page." +#~ msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." + +#~ msgid "" +#~ "All commits related to the source " +#~ "branch will be automatically appended to" +#~ " the open pull request. The reviewer" +#~ " will review your updates. Repeat " +#~ "this process until the pull request " +#~ "is **approved**." +#~ msgstr "" +#~ "Усі коміти, пов'язані з вихідною гілкою," +#~ " будуть автоматично додані до відкритого" +#~ " запиту на отримання. Рецензент перевірить" +#~ " ваші оновлення. Повторюйте цей процес, " +#~ "доки запит на отримання не буде " +#~ "**схвалено**." + +#~ msgid "Merging the pull request" +#~ msgstr "Об'єднання (злиття) запиту" + +#~ msgid "After that the pull request is merged into your target branch." +#~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." + diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 37257b7c3..9b0b2278e 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-19 11:46+0300\n" +"POT-Creation-Date: 2023-09-01 11:38+0300\n" "PO-Revision-Date: 2023-08-19 12:18+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: uk \n" "Language: uk\n" +"Language-Team: uk \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 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" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 #: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 @@ -29,7 +28,8 @@ msgstr "Система контролю версій" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 #: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 -#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 +#: ../../src/vcs/intro.txt:-1 ../../src/vcs/pullrequest.txt:-1 +#: ../../src/vcs/setup.txt:-1 msgid "Serhii Horodilov" msgstr "Serhii Horodilov" @@ -51,11 +51,11 @@ msgstr "Зазвичай ви отримуєте Git-репозиторій од #: ../../src/vcs/basics.txt:15 msgid "" -"You can take a local directory that is currently not under version control, " -"and turn it into a Git repository." +"You can take a local directory that is currently not under version " +"control, and turn it into a Git repository." msgstr "" -"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " -"версій, і перетворити його на Git-репозиторій." +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем" +" версій, і перетворити його на Git-репозиторій." #: ../../src/vcs/basics.txt:17 msgid "You can clone an existing Git repository from elsewhere." @@ -75,15 +75,16 @@ msgstr "Ініціалізація репо в існуючому каталоз #: ../../src/vcs/basics.txt:25 msgid "" -"If you have a project directory that is currently not under version control " -"and you want to start controlling it with Git, you first need to go to that " -"project's directory. If you've never done this, it looks a little different " -"depending on which system you're running:" +"If you have a project directory that is currently not under version " +"control and you want to start controlling it with Git, you first need to " +"go to that project's directory. If you've never done this, it looks a " +"little different depending on which system you're running:" msgstr "" -"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " -"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " -"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " -"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем " +"версій, і ви хочете почати контролювати його за допомогою Git'а, спершу " +"вам потрібно перейти до каталогу цього проекту. Якщо ви ніколи цього не " +"робили, це виглядає трохи інакше, залежно від того, якою системою ви " +"користуєтеся:" #: ../../src/vcs/basics.txt:30 msgid "Change directory in bash (Linux)" @@ -115,17 +116,19 @@ msgstr "Клонування існуючого репо" #: ../../src/vcs/basics.txt:57 msgid "" -"If you want to get a copy of an existing Git repository -- for example, a " -"project you'd like to contribute to -- the command you need is ``git clone``." +"If you want to get a copy of an existing Git repository -- for example, a" +" project you'd like to contribute to -- the command you need is ``git " +"clone``." msgstr "" -"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " -"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, " +"проекту, до якого ви хочете долучитися, - вам потрібна команда ``git " +"clone``." #: ../../src/vcs/basics.txt:64 msgid "" -"That creates a directory named *edu-python-course.github.io*, initializes a " -"*.git* directory inside it, pulls down all the data for that repository, and " -"checks out a working copy of the latest version." +"That creates a directory named *edu-python-course.github.io*, initializes" +" a *.git* directory inside it, pulls down all the data for that " +"repository, and checks out a working copy of the latest version." msgstr "" "Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " "каталог *.git* всередині нього, витягує всі дані для цього сховища і " @@ -136,19 +139,21 @@ msgid "" "That command does the same thing as the previous one, but the target " "directory is called *python-course*." msgstr "" -"Ця команда робить те саме, що й попередня, але цільовий каталог називається " -"*python-course*." +"Ця команда робить те саме, що й попередня, але цільовий каталог " +"називається *python-course*." #: ../../src/vcs/basics.txt:75 msgid "" -"Git has a number of different transfer protocols you can use. The previous " -"example uses the ``https://`` protocol, but you may also see ``git://`` or " -"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." +"Git has a number of different transfer protocols you can use. The " +"previous example uses the ``https://`` protocol, but you may also see " +"``git://`` or ``user@server:path/to/repo.git``, which uses the SSH " +"transfer protocol." msgstr "" "Git має декілька різних протоколів передачі даних, які ви можете " -"використовувати. У попередньому прикладі використовується протокол ``https://" -"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." -"git``, який використовує протокол передачі SSH." +"використовувати. У попередньому прикладі використовується протокол " +"``https://``, але ви також можете побачити ``git://`` або " +"``user@server:path/to/repo.git``, який використовує протокол передачі " +"SSH." #: ../../src/vcs/basics.txt:80 msgid "Making changes to the repo" @@ -156,17 +161,17 @@ msgstr "Внесення змін до репозиторію" #: ../../src/vcs/basics.txt:82 msgid "" -"At this point, you should have a *bona fide* Git repository on your local " -"machine, and a checkout or *working copy* of all of its files in front of " -"you. Typically, you'll want to start making changes and committing snapshots " -"of those changes into your repository each time the project reaches a state " -"you want to record." +"At this point, you should have a *bona fide* Git repository on your local" +" machine, and a checkout or *working copy* of all of its files in front " +"of you. Typically, you'll want to start making changes and committing " +"snapshots of those changes into your repository each time the project " +"reaches a state you want to record." msgstr "" "На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " "комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " -"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " -"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " -"зафіксувати." +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих " +"змін у вашому сховищі кожного разу, коли проект досягне стану, який ви " +"хочете зафіксувати." #: ../../src/vcs/basics.txt:88 msgid "" @@ -178,26 +183,27 @@ msgstr "" #: ../../src/vcs/basics.txt:91 msgid "" -"Tracked files are files that were in the last snapshot, as well as any newly " -"staged files; they can be unmodified, modified, or staged. In short, tracked " -"files are files that Git knows about." +"Tracked files are files that were in the last snapshot, as well as any " +"newly staged files; they can be unmodified, modified, or staged. In " +"short, tracked files are files that Git knows about." msgstr "" -"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" -"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " -"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " -"Git'у." +"Відстежувані файли - це файли, які були в останньому знімку, а також " +"будь-які нещодавно покладені файли; вони можуть бути незміненими, " +"зміненими або покладеними. Коротше кажучи, відстежувані файли - це файли," +" про які відомо Git'у." #: ../../src/vcs/basics.txt:94 msgid "" -"Untracked files are everything else -- any files in your working directory " -"that were not in your last snapshot and are not in your staging area. " -"Untracked basically means that Git sees a file you didn't have in a previous " -"snapshot (commit), and which hasn't been yet staged." +"Untracked files are everything else -- any files in your working " +"directory that were not in your last snapshot and are not in your staging" +" area. Untracked basically means that Git sees a file you didn't have in " +"a previous snapshot (commit), and which hasn't been yet staged." msgstr "" "Невідстежені файли - це все інше - будь-які файли у вашому робочому " "каталозі, яких не було у вашому останньому знімку і які не перебувають у " "вашій області сховища. По суті, це означає, що Git бачить файл, якого не " -"було у попередньому знімку (комміті), і який ще не було покладено у сховище." +"було у попередньому знімку (комміті), і який ще не було покладено у " +"сховище." #: ../../src/vcs/basics.txt:104 msgid "Checking out status of the file(s)" @@ -208,15 +214,16 @@ msgid "" "The main tool you use to determine which files are in which state is the " "``git status`` command." msgstr "" -"Основним інструментом для визначення стану файлів є команда ``git status``." +"Основним інструментом для визначення стану файлів є команда ``git " +"status``." #: ../../src/vcs/basics.txt:133 msgid "" -"Newly added *README.md* file is untracked, because it's under \"Untracked " -"files\" heading the status output." +"Newly added *README.md* file is untracked, because it's under \"Untracked" +" files\" heading the status output." msgstr "" -"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " -"розділі \"Файли, що не відстежуються\" у виведенні статусу." +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться" +" у розділі \"Файли, що не відстежуються\" у виведенні статусу." #: ../../src/vcs/basics.txt:137 msgid "Tracking new files" @@ -225,8 +232,8 @@ msgstr "Відстеження нових файлів" #: ../../src/vcs/basics.txt:139 msgid "In order to begin tracking a new file, you use the ``git add`` command." msgstr "" -"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " -"add``." +"Для того, щоб почати відстеження нового файлу, скористайтеся командою " +"``git add``." #: ../../src/vcs/basics.txt:153 msgid "" @@ -238,13 +245,13 @@ msgstr "" #: ../../src/vcs/basics.txt:157 msgid "" -"You can use wildcards, to stage multiple files at once. The most common use " -"cases is to add **all** modified files, or files inside of a specific " -"directory." +"You can use wildcards, to stage multiple files at once. The most common " +"use cases is to add **all** modified files, or files inside of a specific" +" directory." msgstr "" -"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " -"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " -"змінених файлів або файлів у певному каталозі." +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до " +"кількох файлів одночасно. Найпоширенішим випадком використання є " +"додавання **усіх** змінених файлів або файлів у певному каталозі." #: ../../src/vcs/basics.txt:168 msgid "Staging modified files" @@ -252,26 +259,25 @@ msgstr "Зберігання змінених файлів" #: ../../src/vcs/basics.txt:170 msgid "" -"If a staged (or already committed) file has been changed, it will be moved " -"under \"Modified\" heading. These changes wouldn't be committed unless they " -"are staged." +"If a staged (or already committed) file has been changed, it will be " +"moved under \"Modified\" heading. These changes wouldn't be committed " +"unless they are staged." msgstr "" -"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " -"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " -"вони не були поетапними." +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, " +"його буде переміщено у рубрику \"Змінено\". Ці зміни не будуть " +"зафіксовані, якщо вони не були поетапними." #: ../../src/vcs/basics.txt:190 -msgid "" -"Changes may be added to the stage area by repeating ``git add`` command." +msgid "Changes may be added to the stage area by repeating ``git add`` command." msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." #: ../../src/vcs/basics.txt:191 msgid "" -"Changes may be discard by ``git restore `` command. This action will " -"restore file to its **staged** version." +"Changes may be discard by ``git restore `` command. This action " +"will restore file to its **staged** version." msgstr "" -"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " -"до його **попередньої** версії." +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить " +"файл до його **попередньої** версії." #: ../../src/vcs/basics.txt:195 msgid "Committing changes" @@ -280,14 +286,14 @@ msgstr "Фіксація змін" #: ../../src/vcs/basics.txt:197 msgid "" "Now that the stage area is set up the way required, it's time to commit " -"changes. Remember that anything that is still unstaged -- any files you have " -"created or modified that you haven't run git add on since you edited them -- " -"won't go into this commit." +"changes. Remember that anything that is still unstaged -- any files you " +"have created or modified that you haven't run git add on since you edited" +" them -- won't go into this commit." msgstr "" -"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " -"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " -"створили або змінили, але не запустили git-додаток з моменту редагування, - " -"не потраплять до цього коміту." +"Тепер, коли область змін налаштована належним чином, настав час " +"зафіксувати зміни. Пам'ятайте, що все, що ще не є стадією - будь-які " +"файли, які ви створили або змінили, але не запустили git-додаток з " +"моменту редагування, - не потраплять до цього коміту." #: ../../src/vcs/basics.txt:202 msgid "The simplest way to commit is to type ``git commit``:" @@ -299,18 +305,18 @@ msgstr "Після цього запуститься обраний вами р #: ../../src/vcs/basics.txt:211 msgid "" -"This is set by your shell's EDITOR environment variable -- usually vim or " -"emacs, although you can configure it with whatever you want using the ``git " -"config --global core.editor``" +"This is set by your shell's EDITOR environment variable -- usually vim or" +" emacs, although you can configure it with whatever you want using the " +"``git config --global core.editor``" msgstr "" "Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " -"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" -"global core.editor``" +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git " +"config --global core.editor``" #: ../../src/vcs/basics.txt:215 msgid "" -"Alternatively, you can type your commit message inline with the ``commit`` " -"command by specifying it after a ``-m`` flag, like this:" +"Alternatively, you can type your commit message inline with the " +"``commit`` command by specifying it after a ``-m`` flag, like this:" msgstr "" "Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " "``commit``, вказавши його після прапорця ``-m``, як показано нижче:" @@ -318,19 +324,19 @@ msgstr "" #: ../../src/vcs/basics.txt:222 msgid "" "Although it can be amazingly useful for crafting commits exactly how you " -"want them, the staging area is sometimes a bit more complex than you need in " -"your workflow. If you want to skip the staging area, Git provides a simple " -"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " -"automatically stage every file that is already tracked before doing the " -"commit, letting you skip the git add part:" -msgstr "" -"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " -"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " -"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " -"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " -"commit`` змушує Git автоматично стадіювати кожен файл, який вже " -"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " -"git add:" +"want them, the staging area is sometimes a bit more complex than you need" +" in your workflow. If you want to skip the staging area, Git provides a " +"simple shortcut. Adding the ``-a`` option to the ``git commit`` command " +"makes Git automatically stage every file that is already tracked before " +"doing the commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так," +" як вам потрібно, область підготовки іноді буває трохи складнішою, ніж " +"вам потрібно у вашому робочому процесі. Якщо ви хочете пропустити область" +" підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди " +"``git commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити " +"частину git add:" #: ../../src/vcs/basics.txt:263 msgid "Ignoring files" @@ -338,20 +344,20 @@ msgstr "Ігнорування файлів" #: ../../src/vcs/basics.txt:265 msgid "" -"Often, there is a class of files, that should not be a part of a repo. You " -"want these files to be prevent from being automatically added or even shown " -"as being untracked. These are generally files produced by loggers or a build " -"system, or some local settings for the project that shouldn't be shared " -"across other developers or maintainers. In such cases you can create a *." -"gitignore* file. Here is the content of *.gitignore* used in current " -"repository:" +"Often, there is a class of files, that should not be a part of a repo. " +"You want these files to be prevent from being automatically added or even" +" shown as being untracked. These are generally files produced by loggers " +"or a build system, or some local settings for the project that shouldn't " +"be shared across other developers or maintainers. In such cases you can " +"create a *.gitignore* file. Here is the content of *.gitignore* used in " +"current repository:" msgstr "" "Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " -"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " -"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як" +" такі, що не відстежуються. Зазвичай це файли, створені логгерами або " "системою збірки, або деякі локальні налаштування проекту, які не повинні " -"бути доступними для інших розробників або супровідників. У таких випадках ви " -"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"бути доступними для інших розробників або супровідників. У таких випадках" +" ви можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " "використовується у поточному сховищі:" #: ../../src/vcs/basics.txt:305 @@ -360,8 +366,8 @@ msgstr "Ці рядки означають:" #: ../../src/vcs/basics.txt:307 msgid "" -"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " -"will be ignored completely." +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\"" +" will be ignored completely." msgstr "" "Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " "повністю проігноровано." @@ -372,63 +378,59 @@ msgstr "Вміст каталогу \"node_modules\" буде повністю #: ../../src/vcs/basics.txt:310 msgid "" -"Any files within directories named \".vscode\" or \".idea\" will be ignored " -"completely." +"Any files within directories named \".vscode\" or \".idea\" will be " +"ignored completely." msgstr "" "Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " "повністю проігноровані." #: ../../src/vcs/basics.txt:312 msgid "Any file with name starting with hash (#) will be ignored." -msgstr "" -"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." +msgstr "Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." #: ../../src/vcs/basics.txt:313 msgid "Any file with name ending with tilda (~) will be ignored." -msgstr "" -"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." +msgstr "Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." #: ../../src/vcs/basics.txt:314 msgid "" "Content within directories named \"temp\" or \"tmp\" will be ignored " "completely." msgstr "" -"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю " +"проігноровано." #: ../../src/vcs/basics.txt:316 msgid "" "Content within directories named \"_builds\", \"_build\", \"builds\" or " "\"build\" will be ignored completely." msgstr "" -"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " -"буде повністю проігноровано." +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або " +"\"build\" буде повністю проігноровано." #: ../../src/vcs/basics.txt:318 msgid "Any file with name ending with \".pot\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." +msgstr "Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." #: ../../src/vcs/basics.txt:319 msgid "Any file with name ending with \".mo\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." +msgstr "Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." #: ../../src/vcs/basics.txt:321 msgid "" -"Setting up a *.gitignore* file for your new repository before you get going " -"is generally a good idea so you don't accidentally commit files that you " -"really don't want in your Git repository." +"Setting up a *.gitignore* file for your new repository before you get " +"going is generally a good idea so you don't accidentally commit files " +"that you really don't want in your Git repository." msgstr "" "Створення файлу *.gitignore* для вашого нового сховища перед початком " -"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " -"вам насправді не потрібні у вашому Git-репозиторії." +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, " +"які вам насправді не потрібні у вашому Git-репозиторії." #: ../../src/vcs/basics.txt:325 msgid "" "The rules for the patterns you can put in the *.gitignore* file are as " "follows:" -msgstr "" -"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" +msgstr "Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" #: ../../src/vcs/basics.txt:327 msgid "Blank lines or lines starting with # are ignored." @@ -436,15 +438,16 @@ msgstr "Порожні рядки або рядки, що починаються #: ../../src/vcs/basics.txt:328 msgid "" -"Standard glob patterns work, and will be applied recursively throughout the " -"entire working tree." +"Standard glob patterns work, and will be applied recursively throughout " +"the entire working tree." msgstr "" -"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " -"по всьому робочому дереву." +"Працюють стандартні шаблони глобусів, які будуть застосовуватися " +"рекурсивно по всьому робочому дереву." #: ../../src/vcs/basics.txt:330 msgid "" -"You can start patterns with a forward slash (/) to avoid recursive inclusion." +"You can start patterns with a forward slash (/) to avoid recursive " +"inclusion." msgstr "" "Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " "похилої риски (/)." @@ -452,7 +455,8 @@ msgstr "" #: ../../src/vcs/basics.txt:332 msgid "You can end patterns with a forward slash (/) to specify a directory." msgstr "" -"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати " +"каталог." #: ../../src/vcs/basics.txt:333 msgid "You can negate a pattern by starting it with an exclamation point (!)." @@ -460,21 +464,22 @@ msgstr "Ви можете заперечити шаблон, почавши йо #: ../../src/vcs/basics.txt:335 msgid "" -"Glob patterns are like simplified regular expressions that shells use. An " -"asterisk (\\*) matches zero or more characters; [ab] matches any character " -"inside the brackets (in this case a or b); a question mark (?) matches a " -"single character; and brackets enclosing characters separated by a hyphen " -"([0-9]) matches any character between them (in this case 0 through 9). You " -"can also use two asterisks to match nested directories; a/\\*\\*/z would " -"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." -msgstr "" -"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " -"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " -"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " -"(?) відповідає одному символу; а дужки, що містять символи, розділені " -"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " -"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " -"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +"Glob patterns are like simplified regular expressions that shells use. An" +" asterisk (\\*) matches zero or more characters; [ab] matches any " +"character inside the brackets (in this case a or b); a question mark (?) " +"matches a single character; and brackets enclosing characters separated " +"by a hyphen ([0-9]) matches any character between them (in this case 0 " +"through 9). You can also use two asterisks to match nested directories; " +"a/\\*\\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Шаблони глобусів подібні до спрощених регулярних виразів, які " +"використовують оболонки. Зірочка (\\*) відповідає нулю або більше " +"символів; [ab] відповідає будь-якому символу всередині дужок (у цьому " +"випадку a або b); знак питання (?) відповідає одному символу; а дужки, що" +" містять символи, розділені дефісом ([0-9]), відповідають будь-якому " +"символу між ними (у цьому випадку від 0 до 9). Ви також можете " +"використовувати дві зірочки для вкладених каталогів; a/\\*\\*/z буде " +"відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." #: ../../src/vcs/basics.txt:344 msgid "Viewing the commit history" @@ -482,79 +487,81 @@ msgstr "Перегляд історії коммітів" #: ../../src/vcs/basics.txt:346 msgid "" -"After you have created several commits, or if you have cloned a repository " -"with an existing commit history, you'll probably want to look back to see " -"what has happened. The most basic and powerful tool to do this is the ``git " -"log`` command." +"After you have created several commits, or if you have cloned a " +"repository with an existing commit history, you'll probably want to look " +"back to see what has happened. The most basic and powerful tool to do " +"this is the ``git log`` command." msgstr "" -"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " -"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " -"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " -"команда ``git log``." +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище" +" з існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, " +"щоб побачити, що сталося. Найпростішим і найпотужнішим інструментом для " +"цього є команда ``git log``." #: ../../src/vcs/basics.txt:372 msgid "" -"By default, with no arguments, ``git log`` lists the commits made in that " -"repository in reverse chronological order; that is, the most recent commits " -"show up first. As you can see, this command lists each commit with its SHA-1 " -"checksum, the author's name and email, the date written, and the commit " -"message." +"By default, with no arguments, ``git log`` lists the commits made in that" +" repository in reverse chronological order; that is, the most recent " +"commits show up first. As you can see, this command lists each commit " +"with its SHA-1 checksum, the author's name and email, the date written, " +"and the commit message." msgstr "" "За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " "зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " "найновіші комміти показуються першими. Як ви можете бачити, ця команда " -"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " -"адресою автора, датою створення та повідомленням про внесення." +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та " +"електронною адресою автора, датою створення та повідомленням про " +"внесення." #: ../../src/vcs/basics.txt:378 msgid "" -"One of the more helpful options is ``-p`` or ``--patch``, which shows the " -"difference (the *patch* output) introduced in each commit. You can also " -"limit the number of log entries displayed, such as using ``-`` to " -"show only desired number of latest entries." +"One of the more helpful options is ``-p`` or ``--patch``, which shows the" +" difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to" +" show only desired number of latest entries." msgstr "" "Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " -"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " -"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" -"``, щоб показати лише потрібну кількість останніх записів." +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також " +"можете обмежити кількість відображуваних записів, наприклад, за допомогою" +" ``-``, щоб показати лише потрібну кількість останніх записів." #: ../../src/vcs/basics.txt:414 msgid "" -"This option display the same information but with a diff directly following " -"each entry. This is very helpful for code review or to quickly browse what " -"happened during a series of commits that a collaborator has added. You can " -"also use a series of summarizing options with ``git log``." +"This option display the same information but with a diff directly " +"following each entry. This is very helpful for code review or to quickly " +"browse what happened during a series of commits that a collaborator has " +"added. You can also use a series of summarizing options with ``git log``." msgstr "" -"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " -"кожного запису. Це дуже корисно для перегляду коду або для швидкого " -"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " -"також можете скористатися низкою параметрів підсумовування за допомогою " -"``git log``." +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо " +"після кожного запису. Це дуже корисно для перегляду коду або для швидкого" +" перегляду того, що сталося під час серії коммітів, доданих співавторами." +" Ви також можете скористатися низкою параметрів підсумовування за " +"допомогою ``git log``." #: ../../src/vcs/basics.txt:419 msgid "" -"If you want to see some abbreviated stats for each commit, you can use the " -"``--stat`` option:" +"If you want to see some abbreviated stats for each commit, you can use " +"the ``--stat`` option:" msgstr "" -"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " -"скористатися опцією ``--stat``:" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви " +"можете скористатися опцією ``--stat``:" #: ../../src/vcs/basics.txt:443 msgid "" -"Another really useful option is ``--pretty``. This option changes the log " -"output to formats other that the default. A few prebuilt option values are " -"available for you to use. The ``oneline`` value for this option prints each " -"commit on a single line, which is useful if you're look a lot of commits. In " -"addition, the ``short``, ``full``, and ``fuller`` values show the output in " -"roughly the same format but with less or more information." +"Another really useful option is ``--pretty``. This option changes the log" +" output to formats other that the default. A few prebuilt option values " +"are available for you to use. The ``oneline`` value for this option " +"prints each commit on a single line, which is useful if you're look a lot" +" of commits. In addition, the ``short``, ``full``, and ``fuller`` values " +"show the output in roughly the same format but with less or more " +"information." msgstr "" "Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " -"формат виведення журналу на формат, відмінний від стандартного. Ви можете " -"скористатися кількома готовими значеннями цього параметра. Значення " -"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " -"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " -"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " -"форматі, але з меншою або більшою кількістю інформації." +"формат виведення журналу на формат, відмінний від стандартного. Ви можете" +" скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, " +"що є корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно " +"однаковому форматі, але з меншою або більшою кількістю інформації." #: ../../src/vcs/basics.txt:476 msgid "Specifier" @@ -691,19 +698,19 @@ msgstr "Тема" #: ../../src/vcs/basics.txt:509 msgid "" -"The ``oneline`` and ``format`` option values are particularly useful with " -"another ``log`` option called ``--graph``. This option adds a nice little " -"ASCII graph showing your branch and merge history:" +"The ``oneline`` and ``format`` option values are particularly useful with" +" another ``log`` option called ``--graph``. This option adds a nice " +"little ASCII graph showing your branch and merge history:" msgstr "" "Значення параметрів ``online`` і ``format`` особливо корисні з іншим " "параметром ``log``, який називається ``--graph``. Цей параметр додає " -"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " -"злиття:" +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок" +" і злиття:" #: ../../src/vcs/basics.txt:538 msgid "" -"There are many more output-formatting options to ``git log``. Common options " -"to ``git log`` are:" +"There are many more output-formatting options to ``git log``. Common " +"options to ``git log`` are:" msgstr "" "Існує набагато більше варіантів форматування виводу для ``git log``. " "Загальними параметрами ``git log`` є наступні:" @@ -738,7 +745,8 @@ msgstr "--shortstat" #: ../../src/vcs/basics.txt:548 msgid "" -"Display only the changed/insertions/deletions line from the --stat command." +"Display only the changed/insertions/deletions line from the --stat " +"command." msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." #: ../../src/vcs/basics.txt:551 @@ -755,8 +763,8 @@ msgstr "--name-status" #: ../../src/vcs/basics.txt:554 msgid "" -"Show the list of files affected with added/modified/deleted information as " -"well." +"Show the list of files affected with added/modified/deleted information " +"as well." msgstr "" "Також покажіть список файлів, яких торкнулася додана/змінена/видалена " "інформація." @@ -767,9 +775,11 @@ msgstr "--abbrev-commit" #: ../../src/vcs/basics.txt:557 msgid "" -"Show only the first few characters of the SHA-1 checksum instead of all 40." +"Show only the first few characters of the SHA-1 checksum instead of all " +"40." msgstr "" -"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх" +" 40." #: ../../src/vcs/basics.txt:560 msgid "--relative-date" @@ -777,11 +787,11 @@ msgstr "--relative-date" #: ../../src/vcs/basics.txt:560 msgid "" -"Display the date in a relative format (for example, \"2 weeks ago\") instead " -"of using the full date format." +"Display the date in a relative format (for example, \"2 weeks ago\") " +"instead of using the full date format." msgstr "" -"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " -"повного формату дати." +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") " +"замість повного формату дати." #: ../../src/vcs/basics.txt:563 msgid "--graph" @@ -789,9 +799,11 @@ msgstr "--graph" #: ../../src/vcs/basics.txt:563 msgid "" -"Display an ASCII graph of the branch and merge history beside the log output." +"Display an ASCII graph of the branch and merge history beside the log " +"output." msgstr "" -"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням " +"журналу." #: ../../src/vcs/basics.txt:566 msgid "--pretty" @@ -799,8 +811,8 @@ msgstr "--pretty" #: ../../src/vcs/basics.txt:566 msgid "" -"Show commits in an alternate format. Option values include oneline, short, " -"full, fuller, and format (where you specify your own format)." +"Show commits in an alternate format. Option values include oneline, " +"short, full, fuller, and format (where you specify your own format)." msgstr "" "Показувати комміти в альтернативному форматі. Значення опції включають: " "online, short, full, fuller і format (де ви можете вказати свій власний " @@ -812,8 +824,7 @@ msgstr "--oneline" #: ../../src/vcs/basics.txt:570 msgid "Shorthand for --pretty=oneline --abbrev-commit used together." -msgstr "" -"Скорочення для --pretty=online --abbrev-commit, що використовується разом." +msgstr "Скорочення для --pretty=online --abbrev-commit, що використовується разом." #: ../../src/vcs/basics.txt:575 msgid "Limiting log output" @@ -822,50 +833,50 @@ msgstr "Обмеження виводу журналу" #: ../../src/vcs/basics.txt:577 msgid "" "In addition to output-formatting options, ``git log`` takes a number of " -"useful limiting options; that is options that let you show only a subset of " -"commits. You've seen one such option already -- the ``-`` (e.g. " -"``-2`` or ``-10``) option, which displays only the given number of latest " -"commits." +"useful limiting options; that is options that let you show only a subset " +"of commits. You've seen one such option already -- the ``-`` " +"(e.g. ``-2`` or ``-10``) option, which displays only the given number of " +"latest commits." msgstr "" "На додаток до параметрів форматування виводу, ``git log`` приймає ряд " "корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " -"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" -"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - " +"``-<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " "кількість останніх коммітів." #: ../../src/vcs/basics.txt:591 msgid "" -"However, the time-limiting options such as ``--since`` and ``--until`` are " -"very useful. For example, the command to get the list of commits made in the " -"last two weeks:" +"However, the time-limiting options such as ``--since`` and ``--until`` " +"are very useful. For example, the command to get the list of commits made" +" in the last two weeks:" msgstr "" -"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" -"until``. Наприклад, команда для отримання списку коммітів, зроблених за " -"останні два тижні:" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і " +"``--until``. Наприклад, команда для отримання списку коммітів, зроблених " +"за останні два тижні:" #: ../../src/vcs/basics.txt:599 msgid "" -"This command works with lots of formats - you can specify a specific date " -"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"This command works with lots of formats - you can specify a specific date" +" like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " "minutes ago\"``." msgstr "" -"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " -"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " -"день 3 хвилини тому\"``." +"Ця команда працює з багатьма форматами - ви можете вказати конкретну " +"дату, наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 " +"роки 1 день 3 хвилини тому\"``." #: ../../src/vcs/basics.txt:602 msgid "" -"The last really useful option to pass to ``git log`` as a filter is a path. " -"If you specify a directory or file name, you can limit the log output to " -"commits that introduced a change to those files. This is always the last " -"option and is generally preceded by double dashes (``--``) to separate the " -"paths from the options:" +"The last really useful option to pass to ``git log`` as a filter is a " +"path. If you specify a directory or file name, you can limit the log " +"output to commits that introduced a change to those files. This is always" +" the last option and is generally preceded by double dashes (``--``) to " +"separate the paths from the options:" msgstr "" -"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " -"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " -"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " -"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " -"щоб відокремити шлях від параметрів:" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як " +"фільтр, є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете " +"обмежити виведення журналу лише тими комітами, які внесли зміни до цих " +"файлів. Це завжди останній параметр, і йому зазвичай передують подвійні " +"тире (``--``), щоб відокремити шлях від параметрів:" #: ../../src/vcs/basics.txt:621 msgid "Undoing things" @@ -877,16 +888,16 @@ msgstr "На будь-якому етапі ви можете захотіти #: ../../src/vcs/basics.txt:625 msgid "" -"One of the common undos takes place when you commit too early and possibly " -"forget to add some files, or you mess up your commit message. If you want to " -"redo that commit, make the additional changes you forgot, stage them, and " -"commit again using the ``--amend`` option:" +"One of the common undos takes place when you commit too early and " +"possibly forget to add some files, or you mess up your commit message. If" +" you want to redo that commit, make the additional changes you forgot, " +"stage them, and commit again using the ``--amend`` option:" msgstr "" -"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " -"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " -"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " -"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " -"використовуючи опцію ``--amend``:" +"Одне з найпоширеніших випадків скасування відбувається, коли ви " +"коммітуєте занадто рано і, можливо, забуваєте додати деякі файли, або ви " +"псуєте своє повідомлення про коммітування. Якщо ви хочете повторити " +"фіксацію, внесіть додаткові зміни, про які ви забули, збережіть їх і " +"зафіксуйте ще раз, використовуючи опцію ``--amend``:" #: ../../src/vcs/basics.txt:634 msgid "E.g." @@ -900,13 +911,13 @@ msgstr "Скасування додавання файла до індексу" msgid "" "The next two sections demonstrate how to work with your staging area and " "working directory changes. The nice part is that the command you use to " -"determine the state of those two areas also reminds you how to undo changes " -"to them." +"determine the state of those two areas also reminds you how to undo " +"changes to them." msgstr "" -"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " -"збірці та робочому каталозі. Приємним моментом є те, що команда, за " -"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " -"те, як скасувати внесені до них зміни." +"У наступних двох розділах продемонстровано, як працювати зі змінами у " +"вашій збірці та робочому каталозі. Приємним моментом є те, що команда, за" +" допомогою якої ви визначаєте стан цих двох областей, також нагадує вам " +"про те, як скасувати внесені до них зміни." #: ../../src/vcs/basics.txt:676 msgid "Unmodifiyng a modified file" @@ -914,14 +925,15 @@ msgstr "Скасування модифікації зміненого файл #: ../../src/vcs/basics.txt:678 msgid "" -"What if you realize that you don't want to keep your changes to some file? " -"You can easily unmodify it -- **revert** it back to what it looked like when " -"you last committed. ``git status`` also tells you how to do that:" +"What if you realize that you don't want to keep your changes to some " +"file? You can easily unmodify it -- **revert** it back to what it looked " +"like when you last committed. ``git status`` also tells you how to do " +"that:" msgstr "" -"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " -"Ви можете легко скасувати зміни - **повернути** його до того, як він " -"виглядав під час останнього компонування. ``git status`` також покаже вам, " -"як це зробити:" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь " +"файлі? Ви можете легко скасувати зміни - **повернути** його до того, як " +"він виглядав під час останнього компонування. ``git status`` також покаже" +" вам, як це зробити:" #: ../../src/vcs/basics.txt:686 msgid "It tells you pretty explicitly how to discard the changes you've make." @@ -937,22 +949,23 @@ msgid "" "version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " "reset`` for many undo operations." msgstr "" -"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " -"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " -"операцій скасування." +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0," +" Git використовуватиме ``git restore`` замість ``git reset`` для багатьох" +" операцій скасування." #: ../../src/vcs/basics.txt:737 msgid "" -"It’s important to understand that git restore is a dangerous command. " -"Any local changes you made to that file are gone -- Git just replaced that " -"file with the last staged or committed version. Don't ever use this command " -"unless you absolutely know that you don’t want those unsaved local changes." +"It’s important to understand that git restore is a dangerous " +"command. Any local changes you made to that file are gone -- Git just " +"replaced that file with the last staged or committed version. Don't ever " +"use this command unless you absolutely know that you don’t want those " +"unsaved local changes." msgstr "" -"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " -"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " -"замінить цей файл на останню версію, що перебуває у стадії виконання або " -"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " -"вам не потрібні ці незбережені локальні зміни." +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. " +"Усі локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git " +"просто замінить цей файл на останню версію, що перебуває у стадії " +"виконання або фіксації. Ніколи не використовуйте цю команду, якщо ви " +"точно не знаєте, що вам не потрібні ці незбережені локальні зміни." #: ../../src/vcs/branch.txt:-1 msgid "version, control, system, vcs, git, branch, merge, cherry-pick" @@ -962,33 +975,33 @@ msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" msgid "Branches and Merging" msgstr "Гілки та злиття" -#: ../../src/vcs/branch.txt:11 +#: ../../src/vcs/branch.txt:11 ../../src/vcs/pullrequest.txt:59 msgid "About branches" msgstr "Про гілки" #: ../../src/vcs/branch.txt:13 msgid "" -"To really understand the way Git does branching, we need to take a step back " -"and examine how Git stores its data. Git doesn't store data as a series of " -"changesets or differences, but instead as a series of snapshots. When you " -"make a commit, Git stores a commit object that contains a pointer to the " -"snapshot of the content you staged. This object also contains the author's " -"name and email address, the message that you typed, and pointers to the " -"commit or commits that directly came before this commit (its parent or " -"parents): zero parents for the initial commit, one parent for a normal " -"commit, and multiple parents for a commit that results from a merge of two " -"or more branches." -msgstr "" -"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " -"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " -"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " -"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " -"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " -"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " -"на комміт або комміти, які безпосередньо передували цьому комміту (його " -"батька або батьків): нульовий батько для початкового комміту, один батько " -"для звичайного комміту і кілька батьків для комміту, який є результатом " -"злиття двох або більше гілок." +"To really understand the way Git does branching, we need to take a step " +"back and examine how Git stores its data. Git doesn't store data as a " +"series of changesets or differences, but instead as a series of " +"snapshots. When you make a commit, Git stores a commit object that " +"contains a pointer to the snapshot of the content you staged. This object" +" also contains the author's name and email address, the message that you " +"typed, and pointers to the commit or commits that directly came before " +"this commit (its parent or parents): zero parents for the initial commit," +" one parent for a normal commit, and multiple parents for a commit that " +"results from a merge of two or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам " +"потрібно зробити крок назад і розглянути, як Git зберігає свої дані. Git " +"зберігає дані не у вигляді серії наборів змін або відмінностей, а у " +"вигляді серії знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, " +"який містить вказівник на створений вами знімок вмісту. Цей об'єкт також " +"містить ім'я та адресу електронної пошти автора, повідомлення, яке ви " +"набрали, і вказівники на комміт або комміти, які безпосередньо передували" +" цьому комміту (його батька або батьків): нульовий батько для початкового" +" комміту, один батько для звичайного комміту і кілька батьків для " +"комміту, який є результатом злиття двох або більше гілок." #: ../../src/vcs/branch.txt:28 msgid "" @@ -998,11 +1011,11 @@ msgid "" "made. Every time you commit, the master branch pointer moves forward " "automatically." msgstr "" -"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " -"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " -"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " -"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " -"пересувається вперед." +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих " +"коммітів. Стандартна назва гілки у Git'і - master. Коли ви починаєте " +"робити комміти, ви отримуєте головну гілку, яка вказує на останній " +"зроблений вами комміт. Кожного разу, коли ви робите комміт, вказівник " +"головної гілки автоматично пересувається вперед." #: ../../src/vcs/branch.txt:38 msgid "Branch management" @@ -1010,25 +1023,26 @@ msgstr "Управління гілками" #: ../../src/vcs/branch.txt:40 msgid "" -"The ``git branch`` command does more that create and delete branches. If you " -"run it with no arguments, you get a simple listing of your current branches:" +"The ``git branch`` command does more that create and delete branches. If " +"you run it with no arguments, you get a simple listing of your current " +"branches:" msgstr "" -"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " -"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки." +" Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " "поточних гілок:" #: ../../src/vcs/branch.txt:55 msgid "" -"To see all the branches that contain work you haven't yet merged in, use ``--" -"no-merged`` option:" +"To see all the branches that contain work you haven't yet merged in, use " +"``--no-merged`` option:" msgstr "" -"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " -"використовуйте опцію ``--no-merged``:" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися," +" використовуйте опцію ``--no-merged``:" #: ../../src/vcs/branch.txt:65 msgid "" -"Branches listed in the output has work, that isn't merged to current branch. " -"So, deleting them via ``git branch -d`` will fail." +"Branches listed in the output has work, that isn't merged to current " +"branch. So, deleting them via ``git branch -d`` will fail." msgstr "" "У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " "гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." @@ -1042,20 +1056,20 @@ msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." msgstr "" -"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " -"них - використання команди ``git branch``." +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший" +" з них - використання команди ``git branch``." #: ../../src/vcs/branch.txt:78 msgid "" -"Pointer to a parent commit is optional. By default the parent commit is set " -"to the latest one available (HEAD pointer) at the moment of the branch " -"creation. You can also switch to the newly created branch just after its " -"creation using:" +"Pointer to a parent commit is optional. By default the parent commit is " +"set to the latest one available (HEAD pointer) at the moment of the " +"branch creation. You can also switch to the newly created branch just " +"after its creation using:" msgstr "" "Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " -"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " -"на момент створення гілки. Ви також можете переключитися на новостворену " -"гілку одразу після її створення за допомогою:" +"батьківський коміт встановлюється на найновіший доступний (вказівник " +"HEAD) на момент створення гілки. Ви також можете переключитися на " +"новостворену гілку одразу після її створення за допомогою:" #: ../../src/vcs/branch.txt:88 msgid "Switching branches" @@ -1071,17 +1085,17 @@ msgstr "Основи розгалуження та злиття" #: ../../src/vcs/branch.txt:111 msgid "" -"First, let's say you're working on your project and have a couple of commits " -"already on the ``master`` branch. You've decided that you're going to work " -"on issue #53 in whatever issue-tracking system your company uses. To create " -"a new branch and switch to it at the same time, you can run the ``git " -"checkout`` command with the ``-b`` switch:" +"First, let's say you're working on your project and have a couple of " +"commits already on the ``master`` branch. You've decided that you're " +"going to work on issue #53 in whatever issue-tracking system your company" +" uses. To create a new branch and switch to it at the same time, you can " +"run the ``git checkout`` command with the ``-b`` switch:" msgstr "" -"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " -"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " -"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " -"створити нову гілку і одночасно переключитися на неї, ви можете виконати " -"команду ``git checkout`` з ключем ``-b``:" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте " +"кілька комітів на гілці ``master``. Ви вирішили, що будете працювати над " +"issue #53 в будь-якій системі відстеження проблем, яку використовує ваша " +"компанія. Щоб створити нову гілку і одночасно переключитися на неї, ви " +"можете виконати команду ``git checkout`` з ключем ``-b``:" #: ../../src/vcs/branch.txt:122 msgid "This is shorthand for:" @@ -1090,22 +1104,24 @@ msgstr "Це скорочено означає:" #: ../../src/vcs/branch.txt:129 msgid "" "In deed this creates a new branch pointer, aimed to the latest commit " -"present on ``master`` branch. But, from now your branch is ``feature/" -"issue53``. So, doing commits moves the feature branch pointer forward, " -"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +"present on ``master`` branch. But, from now your branch is " +"``feature/issue53``. So, doing commits moves the feature branch pointer " +"forward, because you have it checkout out (that is, your ``HEAD`` is " +"pointing to it)." msgstr "" -"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " -"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" -"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " -"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." +"Насправді це створить новий покажчик гілки, спрямований на останню " +"фіксацію, наявну у гілці ``master``. Але відтепер ваша гілка називається " +"``feature/issue53``. Отже, виконання коммітів пересуває вказівник гілки " +"feature вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на " +"неї)." #: ../../src/vcs/branch.txt:134 msgid "" "Now, lets assume the \"issue53\" is fixed, and you need to bring commits " "from the ``feature/issue53`` branch back to ``master``." msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " -"з гілки ``feature/issue53`` назад до ``master``." +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести " +"коміти з гілки ``feature/issue53`` назад до ``master``." #: ../../src/vcs/branch.txt:138 msgid "Merging branches" @@ -1113,71 +1129,71 @@ msgstr "Злиття гілок" #: ../../src/vcs/branch.txt:140 msgid "" -"You need to switch back to ``master`` branch and use ``git merge`` command, " -"to merge changes (commits) from the source branch into target." +"You need to switch back to ``master`` branch and use ``git merge`` " +"command, to merge changes (commits) from the source branch into target." msgstr "" -"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " -"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." +"Вам потрібно повернутися до гілки ``master`` і скористатися командою " +"``git merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." #: ../../src/vcs/branch.txt:152 msgid "" "You'll notice phrase \"fast-forward\" in that merge. Because the commit " "pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the pointer " -"forward." +"ahead of the last commit on ``master`` branch, Git simply moves the " +"pointer forward." msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " -"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " -"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " -"вказівник вперед." +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки " +"коміт, на який вказує гілка ``feature/issue53``, до якої ви приєдналися, " +"був безпосередньо перед останнім комітом у гілці ``master``, Git просто " +"пересуне вказівник вперед." #: ../../src/vcs/branch.txt:156 msgid "" "Changes from ``feature/issue53`` are now in the snapshot of the commit " "pointed to by the ``master`` branch." msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " -"гілка ``master``." +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який " +"вказує гілка ``master``." #: ../../src/vcs/branch.txt:163 msgid "" -"Now, lets assume another developer started working on ``feature/issue54`` at " -"the same time. And there are few commits on this feature branch. Suppose, " -"the developer decided that work on **issue54** is finished and they want to " -"merge their feature branch into ``master``." +"Now, lets assume another developer started working on ``feature/issue54``" +" at the same time. And there are few commits on this feature branch. " +"Suppose, the developer decided that work on **issue54** is finished and " +"they want to merge their feature branch into ``master``." msgstr "" -"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " -"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " -"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " -"з ``master``." +"Тепер припустимо, що інший розробник почав працювати над " +"``feature/issue54`` в той самий час. І у цій гілці мало комітів. " +"Припустимо, що розробник вирішив, що робота над **issue54** завершена і " +"він хоче об'єднати свою гілку з ``master``." #: ../../src/vcs/branch.txt:179 msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this case, " -"development history has diverged from some older point. Because the commit " -"on the branch you're on isn't a direct ancestor of the branch you're merging " -"in, Git has to do some work. In this case, Git does a simple three-way " -"merge, using two snapshots pointed to by the branch tips and the common " -"ancestor of the two." +"This looks a bit different than the ``feature/issue53`` merge. In this " +"case, development history has diverged from some older point. Because the" +" commit on the branch you're on isn't a direct ancestor of the branch " +"you're merging in, Git has to do some work. In this case, Git does a " +"simple three-way merge, using two snapshots pointed to by the branch tips" +" and the common ancestor of the two." msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " -"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " -"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " -"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " -"просте тристороннє злиття, використовуючи два знімки, на які вказують " -"кінчики гілок, і їхнього спільного предка." +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку" +" історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви " +"виконуєте злиття, Git'у доведеться виконати деяку роботу. У цьому випадку" +" Git виконує просте тристороннє злиття, використовуючи два знімки, на які" +" вказують кінчики гілок, і їхнього спільного предка." #: ../../src/vcs/branch.txt:186 msgid "" "Instead of just moving the branch pointer forward, Git creates a new " -"snapshot that results from this three-way merge and automatically creates a " -"new commit that points to it. This is referred to as a *merge commit*, and " -"is a special in that it has more than one parent." +"snapshot that results from this three-way merge and automatically creates" +" a new commit that points to it. This is referred to as a *merge commit*," +" and is a special in that it has more than one parent." msgstr "" "Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " -"новий знімок, який є результатом цього тристороннього злиття, і автоматично " -"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " -"і він особливий тим, що має більше одного батька." +"новий знімок, який є результатом цього тристороннього злиття, і " +"автоматично створює новий коміт, який вказує на нього. Це називається " +"*коммітом злиття*, і він особливий тим, що має більше одного батька." #: ../../src/vcs/branch.txt:196 msgid "Merge conflicts" @@ -1185,50 +1201,52 @@ msgstr "Конфлікти об'єднання" #: ../../src/vcs/branch.txt:198 msgid "" -"Occasionally, the merge process doesn't go smoothly. If the same part of the " -"same file is changed differently in the two branches you're merging, Git " -"won't be able to merge them cleanly." +"Occasionally, the merge process doesn't go smoothly. If the same part of " +"the same file is changed differently in the two branches you're merging, " +"Git won't be able to merge them cleanly." msgstr "" -"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " -"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " -"Git не зможе об'єднати їх чисто." +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, " +"які ви об'єднуєте, однакова частина одного і того ж файлу змінена " +"по-різному, Git не зможе об'єднати їх чисто." #: ../../src/vcs/branch.txt:209 msgid "" "Git hasn't automatically created a new merge commit. It has paused the " -"process while you resolve the conflict. If you want to see which files are " -"unmerged at any point after a merge conflict, you can run ``git status``:" +"process while you resolve the conflict. If you want to see which files " +"are unmerged at any point after a merge conflict, you can run ``git " +"status``:" msgstr "" -"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " -"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " -"після конфлікту злиття, ви можете запустити ``git status``:" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, " +"поки ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було " +"від'єднано після конфлікту злиття, ви можете запустити ``git status``:" #: ../../src/vcs/branch.txt:228 msgid "" "Anything that has merge conflicts and hasn't been resolved is listed as " -"unmerged. Git adds standard conflict-resolution markers to the files that " -"have conflicts, so you can open them manually and resolve those conflicts. " -"Your file contains a section that looks something like this:" +"unmerged. Git adds standard conflict-resolution markers to the files that" +" have conflicts, so you can open them manually and resolve those " +"conflicts. Your file contains a section that looks something like this:" msgstr "" "Все, що має конфлікти злиття, які не було вирішено, позначається як не " -"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " -"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " -"Ваш файл містить розділ, який виглядає приблизно так:" +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, " +"які мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці " +"конфлікти. Ваш файл містить розділ, який виглядає приблизно так:" #: ../../src/vcs/branch.txt:243 msgid "" -"This means the version in ``HEAD`` (your ``master`` branch, because that was " -"what you had checked out when you ran merge command) is the top part of that " -"block (everything above the \"=======\"), while the version in ``vcs`` " -"branch looks like everything in the bottom part. In order to resolve the " -"conflict, you have to either choose one side or the other or merge the " -"contents yourself." +"This means the version in ``HEAD`` (your ``master`` branch, because that " +"was what you had checked out when you ran merge command) is the top part " +"of that block (everything above the \"=======\"), while the version in " +"``vcs`` branch looks like everything in the bottom part. In order to " +"resolve the conflict, you have to either choose one side or the other or " +"merge the contents yourself." msgstr "" -"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " -"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " -"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " -"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " -"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що " +"саме її ви перевірили, коли виконували команду merge) - це верхня частина" +" блоку (все, що вище \"=======\"), тоді як версія у гілці ``vcs`` " +"виглядає як все, що знаходиться у нижній частині. Для того, щоб вирішити " +"конфлікт, вам доведеться або стати на чийсь бік, або об'єднати вміст " +"самостійно." #: ../../src/vcs/branch.txt:249 msgid "When conflicts are resolved, you can run ``git status`` command again:" @@ -1238,12 +1256,13 @@ msgstr "" #: ../../src/vcs/branch.txt:262 msgid "" -"If you're happy with that, and you verify that everything that had conflicts " -"has been staged, you can run ``git commit`` for finalize the merge commit." +"If you're happy with that, and you verify that everything that had " +"conflicts has been staged, you can run ``git commit`` for finalize the " +"merge commit." msgstr "" -"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " -"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " -"злиття." +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало " +"конфлікти, було усунуто, ви можете запустити ``git commit`` для " +"остаточного завершення злиття." #: ../../src/vcs/branch.txt:266 msgid "Rebasing" @@ -1254,8 +1273,8 @@ msgid "" "In Git, there two main ways to integrate changes from one branch into " "another: the ``merge`` and the ``rebase``." msgstr "" -"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " -"\"злиття\" і \"перебазування\"." +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу:" +" \"злиття\" і \"перебазування\"." #: ../../src/vcs/branch.txt:271 msgid "" @@ -1267,10 +1286,10 @@ msgstr "" #: ../../src/vcs/branch.txt:278 msgid "" -"The easiest way to integrate the branches, as we've already covered, is the " -"``merge`` command. It performs a three-way merge between the two latest " -"branch snapshots, and the most recent common ancestor of the two, creating a " -"new snapshot (and commit)." +"The easiest way to integrate the branches, as we've already covered, is " +"the ``merge`` command. It performs a three-way merge between the two " +"latest branch snapshots, and the most recent common ancestor of the two, " +"creating a new snapshot (and commit)." msgstr "" "Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " "``merge``. Вона виконує тристороннє злиття між двома останніми знімками " @@ -1278,39 +1297,41 @@ msgstr "" #: ../../src/vcs/branch.txt:283 msgid "" -"However, there is another way: you can take the patch of the change that was " -"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " -"is called *rebasing*. With ``rebase`` command, you can take all the changes " -"that were committed on one branch and replay them on a different branch." +"However, there is another way: you can take the patch of the change that " +"was introduced in ``master`` and reapply it on top of ``feature``. In " +"Git, this is called *rebasing*. With ``rebase`` command, you can take all" +" the changes that were committed on one branch and replay them on a " +"different branch." msgstr "" -"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " -"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " -"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " -"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено" +" до ``master``, і повторно застосувати його поверх ``feature``. У Git'і " +"це називається *rebasing*. За допомогою команди ``rebase`` ви можете " +"взяти всі зміни, які були зафіксовані на одній гілці, і відтворити їх на " +"іншій гілці." #: ../../src/vcs/branch.txt:295 msgid "" -"This operation works by going to the common ancestor of the two branches, " -"getting the diff introduced by each commit of the branch you're on, saving " -"those diffs to temporary files, resetting the current branch to the same " -"commit as the branch you are rebasing onto, and finally applying each change " -"in turn." +"This operation works by going to the common ancestor of the two branches," +" getting the diff introduced by each commit of the branch you're on, " +"saving those diffs to temporary files, resetting the current branch to " +"the same commit as the branch you are rebasing onto, and finally applying" +" each change in turn." msgstr "" "Ця операція виконується шляхом переходу до спільного предка двох гілок, " "отримання відмінностей, внесених кожним коммітом гілки, на якій ви " "перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " -"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " -"нарешті, застосування кожної зміни по черзі." +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і," +" нарешті, застосування кожної зміни по черзі." #: ../../src/vcs/branch.txt:306 msgid "" -"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " -"of their ``master`` branch, rather then merging it in, to keep a mostly " -"linear history." +"Other maintainers prefer to rebase (or cherry-pick) contributed work on " +"top of their ``master`` branch, rather then merging it in, to keep a " +"mostly linear history." msgstr "" "Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " -"об'єднувати їх, щоб зберегти переважно лінійну історію." +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, " +"щоб об'єднувати їх, щоб зберегти переважно лінійну історію." #: ../../src/vcs/branch.txt:311 msgid "Cherry-picking" @@ -1319,21 +1340,21 @@ msgstr "Cherry-picking" #: ../../src/vcs/branch.txt:313 msgid "" "The other way to move introduced work from one branch to another is to " -"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " -"takes the patch that was introduced in a commit and tries to reapply it on " -"the branch you're currently on. This is useful if you have a number of " -"commits on a topic branch and you want to integrate only one of them, or if " -"you only have one commit on a topic branch and you'd prefer to cherry-pick " -"it rather than run rebase." +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. " +"It takes the patch that was introduced in a commit and tries to reapply " +"it on the branch you're currently on. This is useful if you have a number" +" of commits on a topic branch and you want to integrate only one of them," +" or if you only have one commit on a topic branch and you'd prefer to " +"cherry-pick it rather than run rebase." msgstr "" "Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " "\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " "відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " -"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " -"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " -"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " -"rebase." +"комміті, і намагається повторно застосувати його на гілці, на якій ви " +"зараз перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці " +"теми і хочете інтегрувати лише один з них, або якщо ви маєте лише один " +"комміт у гілці теми і вважаєте за краще вибрати його замість того, щоб " +"запускати rebase." #: ../../src/vcs/branch.txt:333 msgid "Branching strategies" @@ -1348,53 +1369,55 @@ msgid "" "branches, minimizes conflicts, and enables a smooth and structured " "development workflow." msgstr "" -"Стратегія розгалуження в системах контролю версій визначає, як створюються, " -"управляються та використовуються гілки в процесі розробки проекту. Вона " -"допомагає командам ефективно співпрацювати, ізолювати зміни та " -"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " -"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " -"структурований робочий процес розробки." +"Стратегія розгалуження в системах контролю версій визначає, як " +"створюються, управляються та використовуються гілки в процесі розробки " +"проекту. Вона допомагає командам ефективно співпрацювати, ізолювати зміни" +" та організовувати зусилля з розробки. Хороша стратегія розгалуження " +"забезпечує чіткість у роботі з гілками, мінімізує конфлікти та уможливлює" +" плавний і структурований робочий процес розробки." #: ../../src/vcs/branch.txt:342 msgid "" -"GitFlow is a popular branching strategy that provides a well-defined model " -"for managing branches in a Git repository. It was introduced by Vincent " -"Driessen and is based on the idea of using two main branches: \"master\" and " -"\"develop.\"" +"GitFlow is a popular branching strategy that provides a well-defined " +"model for managing branches in a Git repository. It was introduced by " +"Vincent Driessen and is based on the idea of using two main branches: " +"\"master\" and \"develop.\"" msgstr "" "GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " "модель для управління гілками в Git-репозиторії. Вона була представлена " -"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " -"основних гілок: \"master\" і \"develop\"." +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання " +"двох основних гілок: \"master\" і \"develop\"." #: ../../src/vcs/branch.txt:346 msgid "" -"**Master Branch**: The \"master\" branch represents the stable version of " -"the codebase. It should always contain production-ready code and be free " -"from any major issues. The \"master\" branch is protected, and only release " -"versions are merged into it." +"**Master Branch**: The \"master\" branch represents the stable version of" +" the codebase. It should always contain production-ready code and be free" +" from any major issues. The \"master\" branch is protected, and only " +"release versions are merged into it." msgstr "" -"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " -"бази. Вона завжди повинна містити готовий до використання код і не містити " -"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " -"релізні версії." +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової" +" бази. Вона завжди повинна містити готовий до використання код і не " +"містити жодних серйозних проблем. Майстер-гілка захищена, і в неї " +"зливаються тільки релізні версії." #: ../../src/vcs/branch.txt:350 msgid "" -"**Develop Branch**: The \"develop\" branch is where the ongoing development " -"and integration of features take place. It serves as the integration branch " -"for various feature branches and should also contain a stable version of the " -"code." +"**Develop Branch**: The \"develop\" branch is where the ongoing " +"development and integration of features take place. It serves as the " +"integration branch for various feature branches and should also contain a" +" stable version of the code." msgstr "" -"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " -"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " -"функціональних гілок, а також повинна містити стабільну версію коду." +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається " +"постійна розробка та інтеграція функцій. Вона слугує інтеграційною гілкою" +" для різних функціональних гілок, а також повинна містити стабільну " +"версію коду." #: ../../src/vcs/branch.txt:354 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " -"\"feature\" branch is created off the \"develop\" branch. These branches are " -"short-lived and exist only for the duration of the feature development." +"\"feature\" branch is created off the \"develop\" branch. These branches " +"are short-lived and exist only for the duration of the feature " +"development." msgstr "" "**Вітки функцій**: Для кожної нової функції або виправлення помилки " "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " @@ -1403,8 +1426,8 @@ msgstr "" #: ../../src/vcs/branch.txt:357 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " -"ready for a release, a \"release\" branch is created. The release branch is " -"used for testing, bug fixing, and preparing for deployment." +"ready for a release, a \"release\" branch is created. The release branch " +"is used for testing, bug fixing, and preparing for deployment." msgstr "" "**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " "створюється гілка \"release\". Релізна гілка використовується для " @@ -1417,23 +1440,25 @@ msgid "" "allows for a quick fix without affecting ongoing development on the " "\"develop\" branch." msgstr "" -"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " -"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " -"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну " +"проблему, на основі основної гілки створюється гілка \"hotfix\". Це " +"дозволяє швидко виправити проблему, не впливаючи на поточну розробку на " +"гілці \"develop\"." #: ../../src/vcs/branch.txt:365 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " -"remain stable, and new features and bug fixes are integrated smoothly before " -"being released. This strategy is particularly useful for projects with " -"regular releases and a team working on multiple features concurrently." +"remain stable, and new features and bug fixes are integrated smoothly " +"before being released. This strategy is particularly useful for projects " +"with regular releases and a team working on multiple features " +"concurrently." msgstr "" "GitFlow забезпечує структурований підхід до управління розгалуженням у " "середовищі спільної розробки. Він гарантує, що основні гілки залишаються " -"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " -"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " -"і командою, яка працює над декількома функціями одночасно." +"стабільними, а нові функції та виправлення помилок плавно інтегруються " +"перед випуском. Ця стратегія особливо корисна для проектів з регулярними " +"випусками і командою, яка працює над декількома функціями одночасно." #: ../../src/vcs/github.txt:-1 msgid "version, control, system, vcs, git, github" @@ -1458,15 +1483,15 @@ msgstr "Налаштування та конфігурація акаунта" #: ../../src/vcs/github.txt:18 msgid "" "The first thing you need to do is set up a free user account. Visit " -"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " -"account creation process. Just follow the hints and provide an email " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through " +"the account creation process. Just follow the hints and provide an email " "address, username and a strong password." msgstr "" "Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " -"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " -"GitHub проведе вас через процес створення облікового запису. Просто " -"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " -"та надійний пароль." +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\"." +" GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я " +"користувача та надійний пароль." #: ../../src/vcs/github.txt:24 msgid "About authentication to GitHub" @@ -1474,13 +1499,13 @@ msgstr "Про автентифікацію на GitHub" #: ../../src/vcs/github.txt:27 msgid "" -"Starting in March 2023 and through the end of 2023, GitHub gradually began " -"to require all users who contribute code on GitHub to enable two-factor " -"authentication (2FA)." +"Starting in March 2023 and through the end of 2023, GitHub gradually " +"began to require all users who contribute code on GitHub to enable two-" +"factor authentication (2FA)." msgstr "" -"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " -"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " -"двофакторну автентифікацію (2FA)." +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово " +"почав вимагати від усіх користувачів, які публікують код на GitHub, " +"увімкнути двофакторну автентифікацію (2FA)." #: ../../src/vcs/github.txt:32 msgid "Connect with SSH" @@ -1492,10 +1517,10 @@ msgid "" "(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " "using a private key file on your local machine." msgstr "" -"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " -"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " -"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " -"комп'ютері." +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх " +"за допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH " +"ви автентифікуєтесь за допомогою файлу приватного ключа на вашому " +"локальному комп'ютері." #: ../../src/vcs/github.txt:39 msgid "Generating a new SSH key" @@ -1503,13 +1528,13 @@ msgstr "Генерація нового SSH-ключа" #: ../../src/vcs/github.txt:41 msgid "" -"You can generate a new SSH key on your local machine. After you do that, you " -"can add the **public** key to your account on GitHub to enable " +"You can generate a new SSH key on your local machine. After you do that, " +"you can add the **public** key to your account on GitHub to enable " "authentication for Git operations over SSH." msgstr "" -"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " -"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " -"увімкнути автентифікацію для операцій з Git'ом через SSH." +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після " +"цього ви можете додати **public** ключ до свого облікового запису на " +"GitHub, щоб увімкнути автентифікацію для операцій з Git'ом через SSH." #: ../../src/vcs/github.txt:45 msgid "Open terminal (git-bash will suite for Windows users)" @@ -1529,17 +1554,19 @@ msgstr "" #: ../../src/vcs/github.txt:60 msgid "" -"When you're prompted to \"Enter a file in which to save the key\", you can " -"press **Enter** to accept the default file location." +"When you're prompted to \"Enter a file in which to save the key\", you " +"can press **Enter** to accept the default file location." msgstr "" "Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " "натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." #: ../../src/vcs/github.txt:67 msgid "" -"Type a secure passphrase, if you want -- this is an extra layer of security." +"Type a secure passphrase, if you want -- this is an extra layer of " +"security." msgstr "" -"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень " +"безпеки." #: ../../src/vcs/github.txt:75 msgid "This will create a new SSH key, using the provided email as label." @@ -1549,8 +1576,8 @@ msgstr "" #: ../../src/vcs/github.txt:77 msgid "" -"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " -"and ensure there are two files generated:" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by " +"default and ensure there are two files generated:" msgstr "" "Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " "каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" @@ -1561,8 +1588,7 @@ msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощ #: ../../src/vcs/github.txt:81 msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" -msgstr "" -"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." +msgstr "**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." #: ../../src/vcs/github.txt:84 msgid "" @@ -1574,11 +1600,11 @@ msgstr "" #: ../../src/vcs/github.txt:87 msgid "" -"The public key is what you add to servers or services to which you want to " -"authenticate using your private key." +"The public key is what you add to servers or services to which you want " +"to authenticate using your private key." msgstr "" -"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " -"хочете пройти автентифікацію за допомогою вашого закритого ключа." +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких " +"ви хочете пройти автентифікацію за допомогою вашого закритого ключа." #: ../../src/vcs/github.txt:91 msgid "Adding your SSH key to the ssh-agent and GitHub" @@ -1586,16 +1612,16 @@ msgstr "Додавання SSH-ключа до ssh-агента та GitHub" #: ../../src/vcs/github.txt:93 msgid "" -"Before adding a new SSH key to the ssh-agent to manage your keys, you should " -"have checked for existing SSH keys and generated SSH keys." +"Before adding a new SSH key to the ssh-agent to manage your keys, you " +"should have checked for existing SSH keys and generated SSH keys." msgstr "" -"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " -"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам" +" слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." #: ../../src/vcs/github.txt:96 msgid "" -"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " -"it manually:" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or " +"start it manually:" msgstr "" "Переконайтеся, що ssh-агент запущено. Ви можете скористатися " "\"Автозапуском\" або запустити його вручну:" @@ -1606,32 +1632,32 @@ msgstr "Додайте ваш приватний ключ SSH до ssh-аген #: ../../src/vcs/github.txt:110 msgid "" -"Add the SSH public key to your account on GitHub. Copy the SSH public key to " -"your clipboard." +"Add the SSH public key to your account on GitHub. Copy the SSH public key" +" to your clipboard." msgstr "" -"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " -"відкритий ключ SSH до буфера обміну." +"Додайте публічний ключ SSH до свого облікового запису на GitHub. " +"Скопіюйте відкритий ключ SSH до буфера обміну." #: ../../src/vcs/github.txt:117 msgid "" -"Alternatively, if ``clip`` isn't working, just type public key content to " -"the terminal using ``cat``," +"Alternatively, if ``clip`` isn't working, just type public key content to" +" the terminal using ``cat``," msgstr "" -"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " -"терміналі за допомогою ``cat``," +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа" +" у терміналі за допомогою ``cat``," #: ../../src/vcs/github.txt:124 msgid "" -"or simply navigate to the file and open it with any text editor. At the end, " -"you need to copy public key content." +"or simply navigate to the file and open it with any text editor. At the " +"end, you need to copy public key content." msgstr "" "або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " "текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." #: ../../src/vcs/github.txt:127 msgid "" -"On GitHub, in the upper-right corner of any page, click your profile photo, " -"then click **Settings**." +"On GitHub, in the upper-right corner of any page, click your profile " +"photo, then click **Settings**." msgstr "" "На GitHub у правому верхньому куті будь-якої сторінки натисніть на " "фотографію свого профілю, а потім натисніть **Налаштування**." @@ -1641,8 +1667,8 @@ msgid "" "In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " "press **New SSH key** button." msgstr "" -"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " -"кнопку **Новий ключ SSH**." +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і " +"натисніть кнопку **Новий ключ SSH**." #: ../../src/vcs/github.txt:131 msgid "In the \"Title\" field, add a descriptive label for the new key." @@ -1674,40 +1700,67 @@ msgstr "version, control, system, vcs, git" msgid "Version Control System" msgstr "Система контролю версій" +#: ../../src/vcs/index.txt:10 +msgid "" +":abbr:`VCS (Version Control Systems)` play an integral role in modern " +"software development. They allow multiple developers to work on a project" +" simultaneously without overwriting each other's changes. VCSs track the " +"history of changes to the source code, making it possible to revert to " +"previous states, compare versions, and more." +msgstr "" + +#: ../../src/vcs/index.txt:16 +msgid "" +"Among the VCSs available, Git stands out as one of the most popular and " +"powerful tools. It's used by small projects and large-scale software " +"alike, owing to its flexibility, distributed nature, and efficient " +"handling of codebase versions." +msgstr "" + +#: ../../src/vcs/index.txt:21 +msgid "" +"In this part, you'll learn about the fundamentals of version control, how" +" to set up your environment for Git, dive into the basics of commits, " +"branches, and merges, understand the significance of tags, and finally, " +"explore how to collaborate using remote repositories and platforms like " +"GitHub." +msgstr "" + #: ../../src/vcs/intro.txt:8 msgid "About version control (Git)" msgstr "Про контроль версій (Git)" #: ../../src/vcs/intro.txt:10 msgid "" -"Version control is a system that records changes to a file or set of files " -"over time so that you can recall specific versions later. It allows you to " -"revert selected files back to a previous state, revert the entire project " -"back to a previous state, compare changes over time, see who last modified " -"something that might be causing a problem, who introduced an issue and when, " -"and more." +"Version control is a system that records changes to a file or set of " +"files over time so that you can recall specific versions later. It allows" +" you to revert selected files back to a previous state, revert the entire" +" project back to a previous state, compare changes over time, see who " +"last modified something that might be causing a problem, who introduced " +"an issue and when, and more." msgstr "" -"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " -"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " -"повернути вибрані файли до попереднього стану, повернути весь проект до " -"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " -"щось, що може спричинити проблему, хто і коли створив проблему, тощо." +"Контроль версій - це система, яка реєструє зміни у файлі або наборі " +"файлів з плином часу, щоб ви могли пізніше згадати конкретні версії. Він " +"дозволяє повернути вибрані файли до попереднього стану, повернути весь " +"проект до попереднього стану, порівняти зміни в часі, побачити, хто " +"востаннє змінював щось, що може спричинити проблему, хто і коли створив " +"проблему, тощо." #: ../../src/vcs/intro.txt:16 msgid "" -"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " -"check out the latest snapshot of the files; rather, they fully mirror the " -"repository, including its full history. Thus, if any server dies, and these " -"systems were collaborating via that server, any of the client repositories " -"can be copied back up to the server to restore it. Every clone is really a " -"full backup of all the data." +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't " +"just check out the latest snapshot of the files; rather, they fully " +"mirror the repository, including its full history. Thus, if any server " +"dies, and these systems were collaborating via that server, any of the " +"client repositories can be copied back up to the server to restore it. " +"Every clone is really a full backup of all the data." msgstr "" "У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " -"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " -"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " -"ладу, а ці системи працювали через нього, будь-який з клієнтських " -"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " -"клон - це фактично повна резервна копія всіх даних." +"перевіряють останній знімок файлів, а повністю дзеркально копіюють " +"сховище, включно з його повною історією. Таким чином, якщо якийсь сервер " +"вийде з ладу, а ці системи працювали через нього, будь-який з клієнтських" +" репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. " +"Кожен клон - це фактично повна резервна копія всіх даних." #: ../../src/vcs/intro.txt:26 msgid "Distributed version control diagram" @@ -1720,30 +1773,30 @@ msgstr "Що таке Git?" #: ../../src/vcs/intro.txt:30 msgid "" "The major difference between Git and any other VCS is the way Git thinks " -"about its data. Conceptually, most other systems store information as a list " -"of file-based changes. Git doesn't think of or store its data this way. " -"Instead, Git thinks of its data more like a series of snapshots of a " -"miniature filesystem." +"about its data. Conceptually, most other systems store information as a " +"list of file-based changes. Git doesn't think of or store its data this " +"way. Instead, Git thinks of its data more like a series of snapshots of a" +" miniature filesystem." msgstr "" "Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " "Git'ом мислить про свої дані. Концептуально, більшість інших систем " -"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " -"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " -"серію знімків мініатюрної файлової системи." +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про " +"свої дані і не зберігає їх таким чином. Натомість, Git думає про свої " +"дані як про серію знімків мініатюрної файлової системи." #: ../../src/vcs/intro.txt:36 msgid "" -"This is an important distinction between Git and nearly all other VCSs. It " -"makes Git reconsider almost every aspect of version control that most other " -"systems copied from the previous generation. This makes Git more like a mini " -"filesystem with some incredibly powerful tools built on top of it, rather " -"than simply a VCS." +"This is an important distinction between Git and nearly all other VCSs. " +"It makes Git reconsider almost every aspect of version control that most " +"other systems copied from the previous generation. This makes Git more " +"like a mini filesystem with some incredibly powerful tools built on top " +"of it, rather than simply a VCS." msgstr "" "Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " -"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " -"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " -"міні-файлову систему з деякими неймовірно потужними інструментами, " -"побудованими поверх неї, ніж на звичайну VCS." +"Git'а переосмислити майже кожен аспект контролю версій, який більшість " +"інших систем скопіювали з попереднього покоління. Це робить Git більше " +"схожим на міні-файлову систему з деякими неймовірно потужними " +"інструментами, побудованими поверх неї, ніж на звичайну VCS." #: ../../src/vcs/intro.txt:45 msgid "Storing data as snapshots of the project over time" @@ -1756,9 +1809,9 @@ msgstr "Локальні операції" #: ../../src/vcs/intro.txt:49 msgid "" "Most operations in Git need only local files and resources to operate -- " -"generally no information is needed from another computer on your network. " -"Because you have the entire history of the project right there on your local " -"disk, most operations seem almost instantaneous." +"generally no information is needed from another computer on your network." +" Because you have the entire history of the project right there on your " +"local disk, most operations seem almost instantaneous." msgstr "" "Для виконання більшості операцій у Git'і потрібні лише локальні файли та " "ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " @@ -1771,13 +1824,13 @@ msgstr "Цілісність" #: ../../src/vcs/intro.txt:56 msgid "" -"Everything in Git is checksummed before it is stored and is then referred to " -"by that checksum. This means it's impossible to change the contents of any " -"file or directory without Git knowing about it." +"Everything in Git is checksummed before it is stored and is then referred" +" to by that checksum. This means it's impossible to change the contents " +"of any file or directory without Git knowing about it." msgstr "" -"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " -"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " -"каталогу без відома Git'а." +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на " +"цю контрольну суму. Це означає, що неможливо змінити вміст будь-якого " +"файлу або каталогу без відома Git'а." #: ../../src/vcs/intro.txt:61 msgid "Repository files states" @@ -1793,24 +1846,25 @@ msgstr "" #: ../../src/vcs/intro.txt:65 msgid "" -"Modified means that you have changed the file but have not committed it to " -"your database yet." +"Modified means that you have changed the file but have not committed it " +"to your database yet." msgstr "" -"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " -"даних." +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій " +"базі даних." #: ../../src/vcs/intro.txt:67 msgid "" -"Staged means that you have marked a modified file in its current version to " -"go into your next commit snapshot." +"Staged means that you have marked a modified file in its current version " +"to go into your next commit snapshot." msgstr "" -"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " -"він потрапив до наступного знімка фіксації." +"Поетапний означає, що ви позначили змінений файл у його поточній версії, " +"щоб він потрапив до наступного знімка фіксації." #: ../../src/vcs/intro.txt:69 msgid "Committed means that the data is safely stored in your local database." msgstr "" -"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі " +"даних." #: ../../src/vcs/intro.txt:76 msgid "The basic Git workflow goes something like this:" @@ -1822,19 +1876,20 @@ msgstr "Ви змінюєте файли у вашому робочому дер #: ../../src/vcs/intro.txt:79 msgid "" -"You selectively stage just those changes you want to be part of your next " -"commit, which adds only those changes to the staging area." +"You selectively stage just those changes you want to be part of your next" +" commit, which adds only those changes to the staging area." msgstr "" -"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " -"коміт, що додає тільки ці зміни в область стабілізації." +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в " +"наступний коміт, що додає тільки ці зміни в область стабілізації." #: ../../src/vcs/intro.txt:81 msgid "" -"You do a commit, which takes the files as they are in the staging area and " -"stores that snapshot permanently to your Git directory." +"You do a commit, which takes the files as they are in the staging area " +"and stores that snapshot permanently to your Git directory." msgstr "" -"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " -"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони " +"знаходяться в області підготовки, і зберігає цей знімок назавжди у вашому" +" каталозі Git'а." #: ../../src/vcs/intro.txt:85 msgid "Command line" @@ -1842,26 +1897,186 @@ msgstr "Командний рядок" #: ../../src/vcs/intro.txt:87 msgid "" -"There are a lot of different ways to use Git. There are the original command-" -"line tools, and there are many graphical user interfaces of varying " -"capabilities. For one, the command line is the only place you can run all " -"Git commands -- most of the GUIs implement only a partial subset of Git " -"functionality for simplicity. If you know how to run the command-line " -"version, you can probably also figure out how to run the GUI version, while " -"the opposite is not necessarily true. Also, while your choice of graphical " -"client is a matter of personal taste, all users will have the command-line " -"tools installed and available." +"There are a lot of different ways to use Git. There are the original " +"command-line tools, and there are many graphical user interfaces of " +"varying capabilities. For one, the command line is the only place you can" +" run all Git commands -- most of the GUIs implement only a partial subset" +" of Git functionality for simplicity. If you know how to run the command-" +"line version, you can probably also figure out how to run the GUI " +"version, while the opposite is not necessarily true. Also, while your " +"choice of graphical client is a matter of personal taste, all users will " +"have the command-line tools installed and available." msgstr "" "Існує багато різних способів використання Git'у. Існують оригінальні " "інструменти командного рядка, а також багато графічних інтерфейсів " -"користувача з різними можливостями. З одного боку, командний рядок є єдиним " -"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " -"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " -"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " -"ймовірно, також зможете з'ясувати, як запустити версію з графічним " -"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " -"графічного клієнта є справою особистого смаку, всі користувачі матимуть " -"встановлені та доступні інструменти командного рядка." +"користувача з різними можливостями. З одного боку, командний рядок є " +"єдиним місцем, де ви можете виконувати всі команди Git'а - більшість " +"графічних інтерфейсів реалізують лише часткову підмножину " +"функціональності Git'а для спрощення. Якщо ви знаєте, як запустити версію" +" з командного рядка, ви, ймовірно, також зможете з'ясувати, як запустити " +"версію з графічним інтерфейсом, хоча зворотне не обов'язково вірно. Крім " +"того, хоча ваш вибір графічного клієнта є справою особистого смаку, всі " +"користувачі матимуть встановлені та доступні інструменти командного " +"рядка." + +#: ../../src/vcs/pullrequest.txt:-1 +#, fuzzy +msgid "Version Control System - Pull Requests" +msgstr "Система контролю версій" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:-1 +#, fuzzy +msgid "version, control, system, vcs, git, pull request, merge" +msgstr "version, control, system, vcs, git, setup" + +#: ../../src/vcs/pullrequest.txt:9 +msgid "Pull Request" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:11 +msgid "" +"Pull request let you tell others about changes you've pushed to a branch " +"in a repository on GitHub. Once a pull request is opened, you can discuss" +" and review the potential changes with collaborators and add follow-up " +"commits before your changes are merged into the base branch:cite:`github" +":about-pr`." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:17 +msgid "Draft pull requests" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:19 +msgid "" +"Draft pull requests are available in public repositories on GitHub. When " +"you create a pull request, you can choose to a create a pull request that" +" is ready for review or a draft pull request. Draft pull requests cannot " +"be merged. When you're ready to get feedback on your pull request, you " +"can mark your draft pull request as ready for review." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:26 +msgid "Difference between commits on compare and pull request pages" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:28 +msgid "" +"The compare and pull request pages use different methods to calculate the" +" diff for changed files:" +msgstr "" + +#: ../../src/vcs/pullrequest.txt:31 +msgid "" +"Compare pages show the diff between the tip of the head ref and the " +"current common ancestor (that is, the merge base) of the head and base " +"ref." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:33 +msgid "" +"Pull request pages show the diff between the tip of the head ref and the " +"common ancestor of the head and base ref at the time when the pull " +"request was created. Consequently, the merge base used for the comparison" +" might be different." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:39 +#, fuzzy +msgid "About comparing branches" +msgstr "Про гілки" + +#: ../../src/vcs/pullrequest.txt:41 +msgid "" +"Pull requests display diffs to compare the changes you made in your topic" +" branch against the base branch that you want to merge your changes into." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:44 +msgid "" +"Rather that viewing the commits themselves, you can view the proposed " +"changes as they'll appear in the files once the pull request is merged. " +"The files appear in alphabetical order within the Files changed tab. " +"Additions to the files appear in green and are prefaced by a ``+`` sign " +"while content that has been removed appears in red and is prefaced by a " +"``-`` sign :cite:`github:compare-pr`." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 +#, fuzzy +msgid "Creating a pull request" +msgstr "Отримання та витягування з віддаленого репозиторію" + +#: ../../src/vcs/pullrequest.txt:54 +msgid "" +"Create a pull request to propose and collaborate on changes to a " +"repository. These changes are proposed in a *branch*, which ensures that " +"the default branch only contains finished and approved work:cite:`github" +":create-pr`." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:61 +msgid "" +"Use a branch to isolate development work without affecting other branches" +" in the repository. Each repository has one default branch, and can have " +"multiple other branches. You can merge a branch into another branch using" +" a pull request." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:66 +msgid "" +"Branches allow you to develop features, fix bugs, or safely experiment " +"with new ideas in a contained area of your repository." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:69 +msgid "" +"You always create a branch from an existing branch. Typically, you might " +"create a new branch from the default branch of your repository." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:75 +msgid "On GitHub, navigate to the main page of the repository." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:76 +msgid "Switch to \"Pull requests\" tab." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:77 +msgid "Press \"New pull request\" button." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:78 +msgid "Select base and source branches." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:79 +msgid "Press \"Create pull request\" button." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:80 +msgid "Provide a meaningful title and description." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:81 +msgid "Draft or create a pull request." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:83 +msgid "" +"To create pull request that is ready for review, click **Create Pull " +"Request**." +msgstr "" + +#: ../../src/vcs/pullrequest.txt:85 +msgid "" +"To create a draft pull request, use the drop-down and select **Create " +"Draft Pull Request**, then click **Draft Pull Request**." +msgstr "" #: ../../src/vcs/remotes.txt:3 msgid "Remotes" @@ -1869,22 +2084,22 @@ msgstr "Віддалені репозиторії" #: ../../src/vcs/remotes.txt:5 msgid "" -"To be able to collaborate on any Git project, you need to know how to manage " -"your remote repositories. Remote repositories are versions of your project " -"that are hosted on the Internet or network somewhere. You can have several " -"of them, each of which generally is either read-only or read/write for you. " -"Managing remotes includes knowing how to add remote repositories, remove " -"remote repositories that are no longer valid, manage various branches and " -"define them as being tracked or not, and more." -msgstr "" -"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " -"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " -"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " -"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " -"або читання/запису. Керування віддаленими сховищами включає в себе вміння " -"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " -"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " -"чи ні, і багато іншого." +"To be able to collaborate on any Git project, you need to know how to " +"manage your remote repositories. Remote repositories are versions of your" +" project that are hosted on the Internet or network somewhere. You can " +"have several of them, each of which generally is either read-only or " +"read/write for you. Managing remotes includes knowing how to add remote " +"repositories, remove remote repositories that are no longer valid, manage" +" various branches and define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам " +"потрібно знати, як керувати вашими віддаленими сховищами. Віддалені " +"сховища - це версії вашого проекту, розміщені десь в інтернеті або " +"мережі. Ви можете мати декілька таких сховищ, кожне з яких, як правило, " +"доступне лише для читання або читання/запису. Керування віддаленими " +"сховищами включає в себе вміння додавати віддалені сховища, видаляти " +"віддалені сховища, які більше не є дійсними, керувати різними гілками і " +"визначати їх як такі, що відстежуються чи ні, і багато іншого." #: ../../src/vcs/remotes.txt:21 msgid "Showing your remote" @@ -1900,17 +2115,18 @@ msgstr "" "Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " "команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " "віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " -"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " -"з якого ви клонуєте:" +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає " +"серверу, з якого ви клонуєте:" #: ../../src/vcs/remotes.txt:41 msgid "" -"This means we can pull contributions from any of these users pretty easily. " -"We may additionally have permission to push to one or more of these." +"This means we can pull contributions from any of these users pretty " +"easily. We may additionally have permission to push to one or more of " +"these." msgstr "" -"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " -"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " -"або декількох з них." +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з " +"цих користувачів. Крім того, ми можемо мати дозвіл на проштовхування до " +"одного або декількох з них." #: ../../src/vcs/remotes.txt:45 msgid "Adding remote repositories" @@ -1918,23 +2134,25 @@ msgstr "Додавання віддалених репозиторіїв" #: ../../src/vcs/remotes.txt:47 msgid "" -"To add a new remote Git repository as a shortname you can reference easily, " -"run ``git remote add ``:" +"To add a new remote Git repository as a shortname you can reference " +"easily, run ``git remote add ``:" msgstr "" -"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " -"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, " +"на яке можна легко посилатися, виконайте ``git remote add <назва> " +"<адреса>``:" #: ../../src/vcs/remotes.txt:61 msgid "" -"Now you can use the string \"personal\" on the command line in lieu of the " -"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" -"course\" is now accessible as ``personal/master``, while shortname to the " -"same branch in origin will be -- ``origin/master``." +"Now you can use the string \"personal\" on the command line in lieu of " +"the whole URL. ``master`` branch of \"https://github.com/shorodilov" +"/python-course\" is now accessible as ``personal/master``, while " +"shortname to the same branch in origin will be -- ``origin/master``." msgstr "" "Тепер ви можете використовувати рядок \"personal\" в командному рядку " -"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" -"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " -"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." +"замість повної URL-адреси. Гілка ``master`` в " +"\"https://github.com/shorodilov/python-course\" тепер доступна як " +"``personal/master``, тоді як скорочена назва тієї ж гілки в origin буде " +"-- ``origin/master``." #: ../../src/vcs/remotes.txt:67 msgid "Fetching and pulling from remotes" @@ -1943,41 +2161,41 @@ msgstr "Отримання та витягування з віддаленого #: ../../src/vcs/remotes.txt:69 msgid "" "To get data from remote project, you can run ``git fetch`` command. The " -"command goes out to that remote project and pulls down all the information " -"from that remote project that you don't have yet. After you do this, you " -"should have references to all the branches from that remote, which you can " -"merge in or inspect at any time." +"command goes out to that remote project and pulls down all the " +"information from that remote project that you don't have yet. After you " +"do this, you should have references to all the branches from that remote," +" which you can merge in or inspect at any time." msgstr "" -"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " -"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " -"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " -"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " -"переглянути у будь-який час." +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git" +" fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете " +"посилання на всі гілки з цього віддаленого проекту, які ви можете " +"об'єднати або переглянути у будь-який час." #: ../../src/vcs/remotes.txt:79 msgid "" -"If your current branch is set up to track a remote branch, you can use ``git " -"pull`` command to automatically fetch and then merge that remote branch into " -"your current branch. By default, the ``git clone`` command automatically " -"sets up your local ``master`` branch to track the remote ``master`` branch " -"(or whatever default remote branch)." +"If your current branch is set up to track a remote branch, you can use " +"``git pull`` command to automatically fetch and then merge that remote " +"branch into your current branch. By default, the ``git clone`` command " +"automatically sets up your local ``master`` branch to track the remote " +"``master`` branch (or whatever default remote branch)." msgstr "" "Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " "можете скористатися командою ``git pull`` для автоматичного отримання і " "подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " -"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " -"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " -"іншої віддаленої гілки за замовчуванням)." +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну" +" гілку ``master`` на відстеження віддаленої гілки ``master`` (або " +"будь-якої іншої віддаленої гілки за замовчуванням)." #: ../../src/vcs/remotes.txt:85 msgid "" -"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." -"rebase`` variable is not set. Git will keep warning you until you set the " -"variable." +"From Git version 2.27 onward, ``git pull`` will give a warning if the " +"``pull.rebase`` variable is not set. Git will keep warning you until you " +"set the variable." msgstr "" -"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " -"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " -"доки ви не встановите змінну." +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо " +"змінну ``pull.rebase`` не встановлено. Git продовжуватиме видавати " +"попередження, доки ви не встановите змінну." #: ../../src/vcs/remotes.txt:90 msgid "" @@ -1985,16 +2203,16 @@ msgid "" "create a merge commit): ``git config --global pull.rebase \"false\"``." msgstr "" "Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " -"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " -"pull.rebase \"false\"``." +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config " +"--global pull.rebase \"false\"``." #: ../../src/vcs/remotes.txt:93 msgid "" "If you want to rebase when pulling: ``git config --global pull.rebase " "\"true\"``." msgstr "" -"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." -"rebase \"true\"``." +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global " +"pull.rebase \"true\"``." #: ../../src/vcs/remotes.txt:97 msgid "Pushing to remotes" @@ -2002,27 +2220,29 @@ msgstr "Відправка до віддаленого репозиторію" #: ../../src/vcs/remotes.txt:99 msgid "" -"When you have your project at a point that you want to share, you have to " -"push it upstream. The command for this is simple: ``git push " +"When you have your project at a point that you want to share, you have to" +" push it upstream. The command for this is simple: ``git push " "``." msgstr "" "Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " -"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " -"push <віддалений> <гілка>``." +"потрібно перемістити його вгору за течією. Команда для цього проста: " +"``git push <віддалений> <гілка>``." #: ../../src/vcs/remotes.txt:106 msgid "" -"This command works only if you cloned from a server to which you have write " -"access and if nobody has pushed in the meantime. If you and someone else " -"clone at the same time and they push upstream and then you push upstream, " -"you push will rightly be rejected. You'll have to fetch their work first and " -"incorporate it into yours before you'll be allowed to push." +"This command works only if you cloned from a server to which you have " +"write access and if nobody has pushed in the meantime. If you and someone" +" else clone at the same time and they push upstream and then you push " +"upstream, you push will rightly be rejected. You'll have to fetch their " +"work first and incorporate it into yours before you'll be allowed to " +"push." msgstr "" "Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " -"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " -"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " -"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " -"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви " +"клонуєте одночасно з кимось іншим, і він зробить поштовх вище за течією, " +"а потім ви, ваш поштовх буде справедливо відхилено. Вам доведеться " +"спочатку отримати їхню роботу і включити її до своєї, перш ніж вам " +"дозволять проштовхувати." #: ../../src/vcs/remotes.txt:113 msgid "Pushing a new branch to remote" @@ -2030,18 +2250,19 @@ msgstr "Переміщення нової гілки до віддаленого #: ../../src/vcs/remotes.txt:115 msgid "" -"In case you have created a local branch for some specific needs and you want " -"to share this branch, you need to set up track for this branch. This can be " -"done by using: ``git push --set-upstream origin ``. This will " -"create a new remote branch and set up track to your current local branch. " -"There is a shortcut for this command: ``git push -u origin ``." +"In case you have created a local branch for some specific needs and you " +"want to share this branch, you need to set up track for this branch. This" +" can be done by using: ``git push --set-upstream origin " +"``. This will create a new remote branch and set up track " +"to your current local branch. There is a shortcut for this command: ``git" +" push -u origin ``." msgstr "" "Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " -"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " -"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " -"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " -"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " -"<віддалена_гілка>``." +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це " +"можна зробити за допомогою ``git push --set-upstream origin " +"<віддалена_гілка>``. Це створить нову віддалену гілку і налаштує трек до " +"вашої поточної локальної гілки. Для цієї команди існує комбінація клавіш:" +" ``git push -u origin <віддалена_гілка>``." #: ../../src/vcs/remotes.txt:122 msgid "Inspecting a remote" @@ -2049,8 +2270,8 @@ msgstr "Перевірка віддаленого репозиторію" #: ../../src/vcs/remotes.txt:124 msgid "" -"If you want to see more information about a particular remote, you can use " -"the ``git remote show ``." msgstr "" -"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " -"tag -d ``." +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися " +"``git tag -d ``." #: ../../src/vcs/tagging.txt:117 msgid "Checking out tags" @@ -2287,27 +2511,28 @@ msgstr "Перевірка тегів" #: ../../src/vcs/tagging.txt:119 msgid "" -"If you want to view the versions of files a tag is pointing to, you can do a " -"``git checkout`` of that tag, although this puts your repository in " +"If you want to view the versions of files a tag is pointing to, you can " +"do a ``git checkout`` of that tag, although this puts your repository in " "\"detached HEAD\" state, which has some ill side effects:" msgstr "" "Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " -"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " -"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у " +"стан \"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" #: ../../src/vcs/tagging.txt:145 msgid "" -"In \"detached HEAD\" state, if you make changes and then create a commit, " -"the tag will stay the same, but your new commit won’t belong to any branch " -"and will be unreachable, except by the exact commit hash. Thus, if you need " -"to make changes -- say you’re fixing a bug on an older version, for instance " -"-- you will generally want to create a branch:" +"In \"detached HEAD\" state, if you make changes and then create a commit," +" the tag will stay the same, but your new commit won’t belong to any " +"branch and will be unreachable, except by the exact commit hash. Thus, if" +" you need to make changes -- say you’re fixing a bug on an older version," +" for instance -- you will generally want to create a branch:" msgstr "" -"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " -"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " -"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " -"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " -"як правило, краще створити гілку:" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт," +" тег залишиться незмінним, але ваш новий коміт не належатиме до жодної " +"гілки і буде недоступним, окрім як за точним хешем коміту. Таким чином, " +"якщо вам потрібно внести зміни - скажімо, ви виправляєте ваду у старій " +"версії - вам, як правило, краще створити гілку:" #~ msgid "version, control, system, vcs, git, history, commit" #~ msgstr "version, control, system, vcs, git, history, commit" + From bde723850d22685f1a5286578a3620eac2ed08c5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Sep 2023 16:28:44 +0300 Subject: [PATCH 423/689] Resolve #117 --- src/_locales/uk/LC_MESSAGES/appx.po | 1727 ++++++++++++------------ src/_locales/uk/LC_MESSAGES/vcs.po | 1873 ++++++++++++++------------- src/appx/assignments.txt | 4 +- 3 files changed, 1757 insertions(+), 1847 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index a257456cd..ff3df8153 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -8,21 +8,22 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-01 11:37+0300\n" -"PO-Revision-Date: 2023-08-09 02:25+0300\n" +"POT-Creation-Date: 2023-09-04 14:27+0100\n" +"PO-Revision-Date: 2023-09-04 16:28+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: ua \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../src/appx/assignments.txt:-1 msgid "How-to handle in assignments via GitHub pull request(s)" -msgstr "" +msgstr "Як працювати з призначеннями через GitHub pull request(и)" #: ../../src/appx/assignments.txt:-1 msgid "Vladyslav Ponomaryov" @@ -36,340 +37,335 @@ msgid "Serhii Horodilov sgorodil@gmail.com" msgstr "Serhii Horodilov sgorodil@gmail.com" #: ../../src/appx/assignments.txt:-1 -#, fuzzy msgid "git, github, pull request, review, merge, howto" -msgstr "git, github, pull request, branch, merge" +msgstr "git, github, pull request, review, merge, howto" #: ../../src/appx/assignments.txt:9 msgid "Handing in Homework Assignments" -msgstr "" +msgstr "Здача домашніх завдань" #: ../../src/appx/assignments.txt:13 -#, fuzzy msgid "Repository content description" -msgstr "Вміст репозиторію" +msgstr "Опис вмісту репозиторію" #: ../../src/appx/assignments.txt:16 msgid "What to include" -msgstr "" +msgstr "Що потрібно включити" #: ../../src/appx/assignments.txt:18 -#, fuzzy msgid "Code base" -msgstr "кодова база" +msgstr "Кодова база" #: ../../src/appx/assignments.txt:19 -#, fuzzy msgid "Project dependencies (if applicable)" -msgstr "залежності проекту (якщо є)" +msgstr "Залежності проекту (якщо застосовно)" #: ../../src/appx/assignments.txt:20 msgid "" -"*(Optional)* Additional project information: README, CONTRIBUTING, " -"LICENSE etc." +"*(Optional)* Additional project information: README, CONTRIBUTING, LICENSE " +"etc." msgstr "" +"*(Додаткова)* інформація про проєкт: README, CONTRIBUTING, LICENSE тощо." #: ../../src/appx/assignments.txt:24 msgid "" "Always start new repository from creating ``README`` and ``.gitignore`` " "files." msgstr "" +"Завжди починайте новий репозиторій зі створення файлів ``README`` та ``." +"gitignore``." #: ../../src/appx/assignments.txt:28 msgid "What to exclude" -msgstr "" +msgstr "Що потрібно виключити" #: ../../src/appx/assignments.txt:30 msgid "Virtual environment, typically ``venv`` or ``env`` folder" -msgstr "" +msgstr "Віртуальне середовище, зазвичай папка ``venv`` або ``env``" #: ../../src/appx/assignments.txt:31 -#, fuzzy msgid "Byte compiled Python code (``__pycache__``)" -msgstr "скомпільований код python (``__pycache__``)" +msgstr "Байтовий скомпільований код Python (``__pycache__``)" #: ../../src/appx/assignments.txt:32 -#, fuzzy -msgid "IDEA configurations, typically ``.vscode`` or ``.idea`` folder" -msgstr "Конфігурації IDE (наприклад, \".vscode\", \".idea\" тощо)" +msgid "IDE configurations, typically ``.vscode`` or ``.idea`` folder" +msgstr "Конфігурації IDE, зазвичай папка ``.vscode`` або ``.idea``" #: ../../src/appx/assignments.txt:33 msgid "Database files, like ``db.sqlite3``" -msgstr "" +msgstr "Файли баз даних, такі як ``db.sqlite3``" #: ../../src/appx/assignments.txt:34 msgid "Other stuff not related to the assignment directly" -msgstr "" +msgstr "Інші речі, не пов'язані з завданням безпосередньо" #: ../../src/appx/assignments.txt:37 msgid "" "Set up **.gitignore** to exclude all name patterns from appending to the " "stage area. Common content of this file may look like:" msgstr "" +"Налаштуйте **.gitignore**, щоб виключити всі шаблони назв з додавання до " +"області сцени. Типовий вміст цього файлу може виглядати так:" #: ../../src/appx/assignments.txt:48 msgid "Repository initialization" msgstr "Ініціалізація репозиторію" #: ../../src/appx/assignments.txt:50 -#, fuzzy msgid "Create and activate virtual environment." -msgstr "Створіть віртуальне середовище." +msgstr "Створіть та активуйте віртуальне середовище." #: ../../src/appx/assignments.txt:51 -#, fuzzy msgid "Create common repository files:" -msgstr "Створіть нове репозиторій." +msgstr "Створіть загальні файли репозиторію:" #: ../../src/appx/assignments.txt:53 msgid "README" -msgstr "" +msgstr "README" #: ../../src/appx/assignments.txt:54 msgid ".gitignore" -msgstr "" +msgstr ".gitignore" #: ../../src/appx/assignments.txt:55 msgid "requirements.txt *(if applicable)*" -msgstr "" +msgstr "requirements.txt *(якщо застосовно)*" #: ../../src/appx/assignments.txt:57 msgid "" -"*(Optional)* create a code base draft. This can be an empty module like " +"*(Optional)* Create a code base draft. This can be an empty module like " "**main.py** or an empty :ref:`Django project `." msgstr "" +"*(Додатково)* Створіть чорновий варіант кодової бази. Це може бути порожній " +"модуль типу **main.py** або порожній :ref:`проект Django `." #: ../../src/appx/assignments.txt:59 msgid "Initialize a new repository using ``git init`` command." -msgstr "" +msgstr "Ініціалізуйте новий репозиторій за допомогою команди ``git init``." #: ../../src/appx/assignments.txt:60 msgid "Set up **.gitignore** name patterns." -msgstr "" +msgstr "Налаштуйте шаблони імен **.gitignore**." #: ../../src/appx/assignments.txt:61 -#, fuzzy msgid "Stage your changes." -msgstr "Зробіть фіксацію змін (stage + commit)." +msgstr "Додайте зміни до stage-простору." #: ../../src/appx/assignments.txt:62 -#, fuzzy msgid "Commit your changes." -msgstr "Зробіть фіксацію змін (stage + commit)." +msgstr "Зафіксуйте зміни." #: ../../src/appx/assignments.txt:63 msgid "Set up remote repository." msgstr "Налаштуйте віддалений репозиторій." #: ../../src/appx/assignments.txt:64 -#, fuzzy msgid "Push changes from local branch to remote." -msgstr "Перенесіть свою локальну гілку до віддаленого репозиторію." +msgstr "Перенесіть зміни з локальної гілки на віддалену." #: ../../src/appx/assignments.txt:69 msgid "Initializing new Django project" -msgstr "" +msgstr "Ініціалізація нового проекту Django" #: ../../src/appx/assignments.txt:71 msgid "" -"Base Django project may be added to the repository with the first commit." -" Initialize Django project in current repository root to avoid " -"directories nesting." +"Base Django project may be added to the repository with the first commit. " +"Initialize Django project in current repository root to avoid directories " +"nesting." msgstr "" +"Базовий проект Django може бути доданий до сховища з першим коммітом. " +"Ініціалізуйте проект Django у корені поточного сховища, щоб уникнути " +"вкладеності каталогів." #: ../../src/appx/assignments.txt:80 msgid "Do not forget to create **requirements.txt**." -msgstr "" +msgstr "Не забудьте створити **requirements.txt**." #: ../../src/appx/assignments.txt:82 msgid "After that, you may proceed with \"staging\" and \"commit\" steps." -msgstr "" +msgstr "Після цього ви можете перейти до етапів \"stage\" та \"commit\"." #: ../../src/appx/assignments.txt:86 -#, fuzzy msgid "Sharing project dependencies" -msgstr "Встановіть залежності проекту." +msgstr "Спільний доступ до залежностей проекту" #: ../../src/appx/assignments.txt:88 msgid "" -"The **requirements.txt** file is a plain text file that lists all the " -"Python packages required for a specific project. This file is used to " -"specify dependencies in a version-controlled and easily shareable manner." -" It allows for a consistent environment across different team members' " -"local setups." +"The **requirements.txt** file is a plain text file that lists all the Python " +"packages required for a specific project. This file is used to specify " +"dependencies in a version-controlled and easily shareable manner. It allows " +"for a consistent environment across different team members' local setups." msgstr "" +"Файл **requirements.txt** -- це звичайний текстовий файл, який містить " +"список усіх пакунків Python, необхідних для конкретного проекту. Цей файл " +"використовується для вказівки залежностей у спосіб, що дозволяє контролювати " +"версії та легко ділитися ними. Це дозволяє забезпечити узгодженість " +"середовища в локальних налаштуваннях різних членів команди." #: ../../src/appx/assignments.txt:94 msgid "Where to place \"requirements.txt\" file" -msgstr "" +msgstr "Де розмістити файл \"requirements.txt\"" #: ../../src/appx/assignments.txt:96 msgid "" -"The **requirements.txt** file is generally placed in the root directory " -"of the project." +"The **requirements.txt** file is generally placed in the root directory of " +"the project." msgstr "" +"Файл **requirements.txt** зазвичай розміщується у кореневому каталозі " +"проекту." #: ../../src/appx/assignments.txt:100 msgid "Creating \"requirements.txt\" file" -msgstr "" +msgstr "Створення файлу \"requirements.txt\"" #: ../../src/appx/assignments.txt:102 msgid "" -"To generate file use ``pip freeze`` command and place its output to a " -"file:" +"To generate file use ``pip freeze`` command and place its output to a file:" msgstr "" +"Щоб згенерувати файл, скористайтеся командою ``pip freeze`` і помістіть його " +"вивід у файл:" #: ../../src/appx/assignments.txt:108 msgid "This will create **requirements.txt** file. Its content may look like:" msgstr "" +"В результаті буде створено файл **requirements.txt**. Його вміст може мати " +"вигляд:" #: ../../src/appx/assignments.txt:119 msgid "Installing dependencies from \"requirements.txt\" file" -msgstr "" +msgstr "Встановлення залежностей з файлу \"requirements.txt\"" #: ../../src/appx/assignments.txt:121 msgid "" -"Another team member may easily install all the requirements for the " -"project by using ``pip install`` command:" +"Another team member may easily install all the requirements for the project " +"by using ``pip install`` command:" msgstr "" +"Інший член команди може легко встановити всі вимоги до проекту за допомогою " +"команди ``pip install``:" #: ../../src/appx/assignments.txt:130 msgid "Dealing with home tasks (challenges)" -msgstr "" +msgstr "Вирішення домашніх завдань (викликів)" #: ../../src/appx/assignments.txt:132 msgid "Create a new topic branch" -msgstr "" +msgstr "Створити нову гілку завдання" #: ../../src/appx/assignments.txt:133 -#, fuzzy msgid "Switch to a topic branch" -msgstr "Перейдіть до новоствореної гілки." +msgstr "Перейдіть до гілки завдання" #: ../../src/appx/assignments.txt:134 -#, fuzzy msgid "Do the work and commit changes" -msgstr "Зробіть фіксацію змін (stage + commit)." +msgstr "Виконайте роботу та зафіксуйте зміни" #: ../../src/appx/assignments.txt:137 -#, fuzzy msgid "You can create a new branch and immediately switch to it:" -msgstr "" -"Ви можете створити нову гілку та перемкнутись на неї за допомогою однієї " -"команди." +msgstr "Ви можете створити нову гілку і одразу перейти до неї:" #: ../../src/appx/assignments.txt:144 -#, fuzzy msgid "Creating a pull request" msgstr "Створення запиту на злиття" #: ../../src/appx/assignments.txt:146 msgid "" -"Make sure your working branch is up-to-date with the default one. You can" -" pull changes for the default branch and rebase your feature branch onto " -"it." +"Make sure your working branch is up-to-date with the default one. You can " +"pull changes for the default branch and rebase your feature branch onto it." msgstr "" "Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " -"отримати зміни для гілки за замовчуванням і перебазувати свою гілку " -"функції на неї." +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " +"на неї." #: ../../src/appx/assignments.txt:149 -#, fuzzy msgid "" -"Push feature branch to the remote repository. By default, the current " -"active branch is pushed via ``git push`` command. You may need to set " -"upstream branch if it isn't yet." +"Push feature branch to the remote repository. By default, the current active " +"branch is pushed via ``git push`` command. You may need to set upstream " +"branch if it isn't yet." msgstr "" -"Завантажте функціональну гілку до віддаленого репозиторію. За " -"замовчуванням буде завантажена активна гілка." +"Перенести гілку функції до віддаленого сховища. За замовчуванням, поточна " +"активна гілка виштовхується командою ``git push``. Можливо, вам доведеться " +"створити нову гілку, якщо вона ще не створена." #: ../../src/appx/assignments.txt:157 -#, fuzzy msgid "" -"Navigate to your remote repository homepage on GitHub and switch to " -"**Pull requests** tab." +"Navigate to your remote repository homepage on GitHub and switch to **Pull " +"requests** tab." msgstr "" -"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " -"**Pull requests**." +"Перейдіть на головну сторінку вашого віддаленого сховища на GitHub і " +"перейдіть на вкладку **Pull requests**." #: ../../src/appx/assignments.txt:159 -#, fuzzy msgid "Click **New pull request** button." -msgstr "Натисніть кнопку **Create pull request**." +msgstr "Натисніть кнопку **New pull request**." #: ../../src/appx/assignments.txt:160 msgid "" -"Select your default branch as *target* and your feature branch as " -"*source*." +"Select your default branch as *target* and your feature branch as *source*." msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." #: ../../src/appx/assignments.txt:162 -#, fuzzy msgid "Click **Create pull request** button." msgstr "Натисніть кнопку **Create pull request**." #: ../../src/appx/assignments.txt:163 -#, fuzzy msgid "Provide meaningful title and a brief description for your pull request." -msgstr "Надайте короткий опис вашого запиту." +msgstr "Надайте змістовну назву та короткий опис вашого запиту." #: ../../src/appx/assignments.txt:164 -#, fuzzy msgid "Submit pull request creation." -msgstr "Про pull requests" +msgstr "Підтвердіть створення запиту." #: ../../src/appx/assignments.txt:165 msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." -msgstr "" +msgstr "*(Необов'язково)* Виберіть рецензента(ів) у розділі **Reviewers**." #: ../../src/appx/assignments.txt:166 -#, fuzzy msgid "Wait until your pull request is reviewed." -msgstr "З цього моменту ваш пул-запит *очікує* на розгляд." +msgstr "Зачекайте, поки ваш запит буде розглянуто." #: ../../src/appx/assignments.txt:169 msgid "Set up reviewers" -msgstr "" +msgstr "Налаштування рецензентів" #: ../../src/appx/assignments.txt:171 msgid "" -"You may share a link to pull request to a reviewer directly, but it's " -"better to set reviewer(s) on the pull request's page. Before you can " -"select reviewers, you need to add them as project contributors." +"You may share a link to pull request to a reviewer directly, but it's better " +"to set reviewer(s) on the pull request's page. Before you can select " +"reviewers, you need to add them as project contributors." msgstr "" +"Ви можете надіслати посилання на запит безпосередньо рецензенту, але краще " +"вказати рецензента(ів) на сторінці запиту. Перш ніж ви зможете вибрати " +"рецензентів, вам потрібно додати їх як учасників проекту." #: ../../src/appx/assignments.txt:176 msgid "Append collaborators" -msgstr "" +msgstr "Додавання співавторів" #: ../../src/appx/assignments.txt:178 -#, fuzzy msgid "" "Reviews allow collaborators to comment on the changes proposed in pull " -"requests, approve the changes, or request further changes before the pull" -" request is merged. Repository administrators can require that pull " -"requests are approved before being merged." +"requests, approve the changes, or request further changes before the pull " +"request is merged. Repository administrators can require that pull requests " +"are approved before being merged." msgstr "" -"Рев'ю дозволяють співавторам коментувати зміни, запропоновані в запитах " -"на отримання, затверджувати зміни або вимагати подальших змін перед " -"об'єднанням запиту на отримання. Адміністратори сховища можуть вимагати " -"схвалення всіх запитів на отримання перед об'єднанням." +"Рецензії дозволяють учасникам коментувати зміни, запропоновані у запитах, " +"затверджувати їх або вимагати подальших змін до того, як запит буде " +"об'єднано. Адміністратори сховища можуть вимагати, щоб запити на вилучення " +"були затверджені перед об'єднанням." #: ../../src/appx/assignments.txt:183 -#, fuzzy msgid "" -"Navigate to your repository homepage on GitHub and switch to **Settings**" -" tab." +"Navigate to your repository homepage on GitHub and switch to **Settings** " +"tab." msgstr "" -"Перейдіть до свого віддаленого сховища на GitHub і натисніть вкладку " -"**Pull requests**." +"Перейдіть на головну сторінку вашого сховища на GitHub і перейдіть на " +"вкладку **Налаштування**." #: ../../src/appx/assignments.txt:185 msgid "Select **Collaborators and teams** menu item." -msgstr "" +msgstr "Виберіть пункт меню **Collaborators and teams**." #: ../../src/appx/assignments.txt:186 -#, fuzzy msgid "Under **Manage access** section click **Add people** button." msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." @@ -383,21 +379,19 @@ msgstr "Виберіть учасника зі спадного меню." #: ../../src/appx/assignments.txt:190 msgid "This will send a *contributing request* to a specified user." -msgstr "" +msgstr "Це надішле *запит* вказаному користувачеві." #: ../../src/appx/assignments.txt:193 -#, fuzzy msgid "Merging changes" -msgstr "Внесення змін" +msgstr "Об'єднання змін" #: ../../src/appx/assignments.txt:195 -#, fuzzy msgid "" -"In case your pull request is **approved** - merge it to the trunk branch." -" Select one of the options available:" +"In case your pull request is **approved** - merge it to the trunk branch. " +"Select one of the options available:" msgstr "" -"Коли ваш запит на отримання **схвалено**, об'єднайте його. Виберіть один " -"із варіантів, доступних у вашому запиті на отримання; вони можуть бути:" +"Якщо ваш pull request буде **схвалено** - об'єднайте його в основну гілку. " +"Виберіть один з доступних варіантів:" #: ../../src/appx/assignments.txt:198 msgid "Create a merge commit" @@ -413,38 +407,35 @@ msgstr "Squash and merge" #: ../../src/appx/assignments.txt:202 msgid "**Create a merge commit** suits in most of the cases." -msgstr "" +msgstr "**Create a merge commit** підходить у більшості випадків." #: ../../src/appx/assignments.txt:205 msgid "Making changes" msgstr "Внесення змін" #: ../../src/appx/assignments.txt:207 -#, fuzzy msgid "" -"In case your pull request is **rejected** or has comments - you may need " -"to provide some fixes." +"In case your pull request is **rejected** or has comments - you may need to " +"provide some fixes." msgstr "" -"Якщо вашу роботу **відхилено**, ви повинні надати виправлення. Щоб " -"зробити це:" +"Якщо ваш pull request буде **відхилено** або він матиме зауваження - вам " +"може знадобитися надати деякі виправлення." #: ../../src/appx/assignments.txt:210 -#, fuzzy msgid "Do the work in your local topic branch" -msgstr "Виконайте роботу у своїй локальній гілці." +msgstr "Виконайте роботу у вашій місцевій тематичній гілці" #: ../../src/appx/assignments.txt:211 -#, fuzzy msgid "Push these changes to remote" -msgstr "Надішліть їх до гілки віддаленого репозиторію." +msgstr "Надішліть їх до гілки віддаленого репозиторію" #: ../../src/appx/assignments.txt:212 msgid "Re-request review (if applicable)" -msgstr "" +msgstr "Зробіть повторний запит на перегляд (за необхідності)" #: ../../src/appx/assignments.txt:213 msgid "Wait until review is done" -msgstr "" +msgstr "Дочекайтеся завершення перевірки" #: ../../src/appx/blog/spec.rst:10 msgid "Blog Project Specification" @@ -452,19 +443,19 @@ msgstr "Специфікація Проекту Блогу" #: ../../src/appx/blog/spec.rst:12 msgid "" -"The project aims to develop a robust and user-friendly web application " -"using the Django framework. The primary objective is to create a blogging" -" platform that allows users to publish and manage articles on various " -"topics. The application will provide an intuitive interface for authors " -"to compose and format their articles, while also offering a seamless " -"reading experience for visitors." +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." msgstr "" -"Проект має на меті розробку міцного та зручного у використанні " -"веб-додатка за допомогою фреймворку Django. Основна мета полягає у " -"створенні платформи для блогів, яка дозволить користувачам публікувати та" -" керувати статтями на різні теми. Додаток надасть інтуїтивний інтерфейс " -"авторам для створення та форматування своїх статей, а також забезпечить " -"безперешкодний досвід читання для відвідувачів." +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." #: ../../src/appx/blog/spec.rst:19 msgid "**Key Features**" @@ -477,16 +468,15 @@ msgstr "Реєстрація та Аутентифікація Користув #: ../../src/appx/blog/spec.rst:23 msgid "" "The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and " -"manage their profile information. This feature will enable authors to " -"have personalized accounts and maintain ownership of their published " -"articles." +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." msgstr "" "Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити" -" в систему та керувати інформацією свого профілю. Ця функція дозволить " -"авторам мати персоналізовані облікові записи та зберігати право власності" -" на їхні опубліковані статті." +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." #: ../../src/appx/blog/spec.rst:30 msgid "Article Management" @@ -494,14 +484,14 @@ msgstr "Керування Статтями" #: ../../src/appx/blog/spec.rst:31 msgid "" -"Authors will have the ability to create, edit, and delete articles within" -" the application. The system will offer a user-friendly editor. " -"Additionally, authors will be able to categorize articles by assigning " -"relevant topics to them." +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори " -"зможуть категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:37 msgid "Topic Subscription:" @@ -510,39 +500,36 @@ msgstr "Підписка на Теми:" #: ../../src/appx/blog/spec.rst:38 msgid "" "The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users" -" will receive notifications or updates whenever new articles are " -"published in those categories. This feature will enhance user engagement " -"and ensure that readers stay informed about the topics they find most " -"valuable." +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." msgstr "" "Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори " -"зможуть категоризувати статті, присвоюючи їм відповідні теми." +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." #: ../../src/appx/blog/spec.rst:45 msgid "" "Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user " -"experience and incorporating essential functionalities such as user " -"authentication, article management, and topic subscriptions, the " -"application will empower users to create, share, and explore engaging " -"content within a well-structured and organized platform." +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." msgstr "" "Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, " -"користувачі отримуватимуть повідомлення або оновлення кожного разу, коли " -"в цих категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про" -" найцікавіші для них теми." +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." #: ../../src/appx/blog/spec.rst:52 msgid "" -"Here is a starter repository template, that may helps: `Starter " -"template`_." +"Here is a starter repository template, that may helps: `Starter template`_." msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter " -"template`_." +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." #: ../../src/appx/blog/spec.rst:55 msgid "Challenge: Functional views" @@ -550,44 +537,42 @@ msgstr "Виклик: Функціональні представлення" #: ../../src/appx/blog/spec.rst:57 msgid "" -"It's ok not to return **actual** content for now. Just ensure all the " -"routes are available and provide correct data. Use anything you like to " -"return within HTTP response." +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, " -"що всі маршрути доступні та надають правильні дані. Використовуйте " -"будь-що, що ви хочете повернути в HTTP-відповіді." +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." #: ../../src/appx/blog/spec.rst:61 msgid "" "``/about/``: Provides a regular text for a user, describing the " "functionalities of the django site." msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції " -"сайту django." +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." #: ../../src/appx/blog/spec.rst:63 msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via" -" the django site." +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих " -"через сайт Django." +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." #: ../../src/appx/blog/spec.rst:65 msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic " -"part in it. This will be used to fetch a single article from the " -"database." +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить " -"динамічну частину. Вона буде використовуватися для отримання однієї " -"статті з бази даних." +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." #: ../../src/appx/blog/spec.rst:68 msgid "" -"``/
    /comment/``: This view will be used to add comments to a " -"article." +"``/
    /comment/``: This view will be used to add comments to a article." msgstr "" "``/
    /comment/``: Це представлення буде використовуватися для " "додавання коментарів до статті." @@ -598,11 +583,13 @@ msgstr "``/create/``: Форма створення статті." #: ../../src/appx/blog/spec.rst:71 msgid "``/
    /update/``: A view to update an existing article data." -msgstr "``/
    /update/``: Представлення для оновлення існуючих даних статті." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." #: ../../src/appx/blog/spec.rst:72 msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "``/
    /delete/``: Представлення для підтвердження видалення статті." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." #: ../../src/appx/blog/spec.rst:73 msgid "``/topics/``: A list of topics available on the site." @@ -622,11 +609,10 @@ msgstr "``/profile//``: Особиста сторінка кори #: ../../src/appx/blog/spec.rst:77 msgid "" -"``/set-password/``: This route will be used to change users' credential " -"data." +"``/set-password/``: This route will be used to change users' credential data." msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни " -"облікових даних користувачів." +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." #: ../../src/appx/blog/spec.rst:79 msgid "``/set-userdata/``: This route will be user to change users' data." @@ -650,8 +636,7 @@ msgstr "``/login/``: Сторінка з формою для логіна." #: ../../src/appx/blog/spec.rst:83 msgid "" -"``/logout/``: Logout page. This view should redirect user back to " -"homepage." +"``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." @@ -663,20 +648,20 @@ msgstr "Додаткові завдання" #: ../../src/appx/blog/spec.rst:89 msgid "" -"``/archive///``: This view provides a list of " -"articles published on a specified month of a specified year. This view " -"should apply date validation and raise ``Http404`` for invalid paths. The" -" valid date is a year's 4-digits form followed by 1 or 2 digits " -"representing month. Month range should be limited as [1..12], leading " -"zero may be omitted. Valid URLs are:" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" msgstr "" -"``/archive///``: Це представлення надає список " -"статей, опублікованих у певному місяці певного року. Це представлення " -"повинно застосовувати перевірку дати та викидати помилку ``Http404`` для " +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " "неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен " -"бути обмежений [1..12], ведучий нуль може бути пропущений. Приклади " -"правильних URL-адрес:" +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" #: ../../src/appx/blog/spec.rst:103 msgid "Challenge: Data models" @@ -685,13 +670,13 @@ msgstr "Завдання: моделі даних" #: ../../src/appx/blog/spec.rst:106 msgid "" "Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that " -"is to use a django command:" +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. " -"Щоб отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати " -"команду Django:" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" #: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 msgid "General" @@ -731,11 +716,11 @@ msgstr "Стаття вимагає наявності змісту (прина #: ../../src/appx/blog/spec.rst:129 msgid "" -"Creation date should be autogenerated at article creation, and would " -"never be updated." +"Creation date should be autogenerated at article creation, and would never " +"be updated." msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не " -"буде оновлюватися пізніше." +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." #: ../../src/appx/blog/spec.rst:131 msgid "Updated date will be update at each article save." @@ -760,14 +745,13 @@ msgstr "Відносини" #: ../../src/appx/blog/spec.rst:141 msgid "" "Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created " -"via admin page. You can also refer the same model as shown below:" +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. " -"Для застосування посилання на модель передайте ``\"auth.User\"`` як " -"пов'язану модель. Користувачі можуть бути створені через адміністративну " -"сторінку. Ви також можете посилатися на ту саму модель, як показано " -"нижче:" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" #: ../../src/appx/blog/spec.rst:154 msgid "``article`` and ``topics`` have *many-to-many* relationship." @@ -775,51 +759,49 @@ msgstr "``article`` та ``topics`` мають *багато-до-багатьо #: ../../src/appx/blog/spec.rst:155 msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can " -"have **only one** author, but users can create as many articles as they " -"want." +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті " -"може бути **лише один** автор, але користувачі можуть створювати стільки " -"статей, скільки їм потрібно." +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." #: ../../src/appx/blog/spec.rst:158 msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article " -"may be a container for many comments, but a comment is related to a " -"single article." +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття " -"може бути контейнером для багатьох коментарів, але коментар пов'язаний " -"лише з однією статтею." +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." #: ../../src/appx/blog/spec.rst:161 msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to" -" *article - user* relationship." +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." #: ../../src/appx/blog/spec.rst:163 msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can" -" prefer none or as many topics as needed and vice versa. This " -"relationship represents topics preferred by a certain blog user. Also " -"this provides an additional option to mark some of preferred topics with " -"a **notify** flag, to receive newsletters about specified topics updates." -" The difference between *prefer* and *notify* is that *preferred* topics " -"affect the articles list for a user, and *notify* is responsible for " -"newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. " -"Один користувач може вибрати будь-яку кількість тем, і навпаки. Це " -"відношення представляє теми, які вибрані певним користувачем блогу. Крім " -"того, це надає додаткову опцію позначити деякі з вибраних тем прапорцем " -"**notify**, щоб отримувати розсилки про оновлення зазначених тем. " -"Відмінність між *prefer* (вибір) та *notify* (сповіщення) полягає в тому," -" що *prefer* впливає на список статей для користувача, а *notify* " -"відповідає за розсилку новин для користувача." +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." #: ../../src/appx/blog/spec.rst:174 msgid "UML diagram" @@ -831,11 +813,11 @@ msgstr "Завдання: ORM" #: ../../src/appx/blog/spec.rst:181 msgid "" -"Update existing views to represent entities that are actually stored " -"inside the project's database." +"Update existing views to represent entities that are actually stored inside " +"the project's database." msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично " -"зберігаються в базі даних проекту." +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." #: ../../src/appx/blog/spec.rst:184 msgid "``/``: should represent a list of existing articles." @@ -847,15 +829,16 @@ msgstr "``/
    /``: повинен представляти окрему і #: ../../src/appx/blog/spec.rst:186 msgid "Detail view should obtain a list of article related comments." -msgstr "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." +msgstr "" +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." #: ../../src/appx/blog/spec.rst:187 msgid "" -"``/profile//``: should contain information about user and a" -" list of articles authored by this user." +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." msgstr "" -"``/profile//``: повинен містити інформацію про користувача " -"та список статей, написаних цим користувачем." +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." #: ../../src/appx/blog/spec.rst:189 msgid "" @@ -863,30 +846,30 @@ msgid "" "*profile*) should raise ``Http404`` in case entity could not be fetched." msgstr "" "Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо " -"сутність не вдалося отримати." +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." #: ../../src/appx/blog/spec.rst:194 msgid "" -"It's common to store dedicated functions/classes that supports some " -"specific business logic in a separate module called ``services.py`` or " -"``utils.py`` within an application directory." +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." msgstr "" "Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або " -"``utils.py`` всередині директорії додатку." +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." #: ../../src/appx/blog/spec.rst:201 msgid "" -"Create a service to fetch articles, ordered by a specified user " -"preferences. This means, topics preferred by a user affects articles " -"orders. Queryset should be ordered in way, to have articles with most " -"corresponding topics at the begging." +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." msgstr "" "Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " "згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона" -" до початку видачі." +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." #: ../../src/appx/blog/spec.rst:207 msgid "Challenge: Templates" @@ -899,8 +882,8 @@ msgstr "Корисне посилання: `Bootstrap template`_" #: ../../src/appx/blog/spec.rst:213 msgid "Links related to user data **may be** placeholders for now." msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** " -"плейсхолдерами наразі." +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." #: ../../src/appx/blog/spec.rst:217 msgid "**All** templates should be inherited from the ``base.html`` template." @@ -909,29 +892,26 @@ msgstr "**Усі** шаблони повинні успадковувати ``ba #: ../../src/appx/blog/spec.rst:218 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" " -"etc." +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| " -"Blog``, наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | " -"Blog\" і т.д." +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." #: ../../src/appx/blog/spec.rst:220 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL " -"``/``)." +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." #: ../../src/appx/blog/spec.rst:221 msgid "" "Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented " -"with a custom template context processor." +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення " -"цього типу фільтрує лише статті відповідної теми. Це слід реалізувати за " -"допомогою власного обробника контексту шаблону (template context " -"processor)." +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." #: ../../src/appx/blog/spec.rst:224 msgid "Replace content block for *about* page with some static content." @@ -947,11 +927,10 @@ msgstr "Шаблони рівня застосунків розташовува #: ../../src/appx/blog/spec.rst:231 msgid "" -"Each page should contain a list of links to archive views for the last " -"year." +"Each page should contain a list of links to archive views for the last year." msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за " -"останній рік." +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." #: ../../src/appx/blog/spec.rst:233 msgid "Each page should contain an inclusion-block(s) with following links:" @@ -979,7 +958,8 @@ msgstr "Головна сторінка містить список опублі #: ../../src/appx/blog/spec.rst:242 msgid "Each article entity is rendered using a custom template tag." -msgstr "Кожен елемент статті відображається за допомогою власного шаблонного тегу." +msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." #: ../../src/appx/blog/spec.rst:243 msgid "``article`` template tag renders information about a article object:" @@ -1090,8 +1070,8 @@ msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля " -"або деактивації облікового запису користувача." +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." #: ../../src/appx/blog/spec.rst:291 msgid "Forms" @@ -1100,8 +1080,8 @@ msgstr "Форми" #: ../../src/appx/blog/spec.rst:293 msgid "" "There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok " -"just to create a dedicated templates for future use." +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." msgstr "" "Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " @@ -1109,11 +1089,11 @@ msgstr "" #: ../../src/appx/blog/spec.rst:297 msgid "" -"``/register/`` page contains a new user registration form. It should take" -" inputs from the user:" +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона" -" повинна отримувати введені дані від користувача:" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 msgid "username" @@ -1133,16 +1113,16 @@ msgstr "confirm password" #: ../../src/appx/blog/spec.rst:305 msgid "" -"``/login/`` page contains a user login form. It should take the inputs " -"from the user:" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:311 msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a" -" article's data:" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" @@ -1175,22 +1155,21 @@ msgstr "new password" #: ../../src/appx/blog/spec.rst:324 msgid "" -"Change user's data form collects all information, that can be changed, " -"e.g. ``username``, ``first name``, ``last name`` etc." +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути " -"змінена, наприклад, ``username``, ``first name``, ``last name`` та інше." +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." #: ../../src/appx/blog/spec.rst:326 msgid "" "User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to " -"*subscribe* for the newsletters becomes available." +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач" -" може відмітити деякі теми як пріоритетні (переваги). Також для " -"пріоритетних тем стає доступною опція *підписки* на розсилку новинних " -"листів." +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." #: ../../src/appx/blog/spec.rst:331 msgid "Challenge: Articles' slugs" @@ -1218,7 +1197,8 @@ msgstr "`Challenge: ORM`_" #: ../../src/appx/blog/spec.rst:341 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" +msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" #: ../../src/appx/blog/spec.rst:343 msgid "required for each article" @@ -1234,16 +1214,14 @@ msgstr "Створіть міграцію даних для надання slug- #: ../../src/appx/blog/spec.rst:347 msgid "" -"``slug`` should be auto-generated on article save. The pattern is " -"``article.title-article.created_date``, e.g. \"Sample article\" created " -"at \"03/24/2023\" should receive slug: ``sample-blog-" -"article-2023-03-23``." +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. " -"Шаблон для генерації поля ``slug``: " -"``назва-статті-дата-створення-статті``, наприклад, стаття з назвою " -"\"Прикладна стаття\", створена \"24/03/2023\", отримає slug: ``sample-" -"blog-article-2023-03-23``." +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " +"отримає slug: ``sample-blog-article-2023-03-23``." #: ../../src/appx/blog/spec.rst:351 msgid "Update detail view URL path with article slug as dynamic portion." @@ -1257,7 +1235,8 @@ msgstr "Завдання: форми авторизації" #: ../../src/appx/blog/spec.rst:356 msgid "Create form for new users registration with required fields:" -msgstr "Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" #: ../../src/appx/blog/spec.rst:358 msgid "``username``" @@ -1299,11 +1278,11 @@ msgstr "Завдання: Автентифікація" #: ../../src/appx/blog/spec.rst:371 msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be " -"visible in navbar." +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають " -"бути видимими на панелі навігації." +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." #: ../../src/appx/blog/spec.rst:373 msgid "" @@ -1315,17 +1294,16 @@ msgstr "" #: ../../src/appx/blog/spec.rst:375 msgid "" -"If authenticated user is admin or stuff they should see a link to admin " -"page." +"If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." #: ../../src/appx/blog/spec.rst:377 msgid "" -"``/register/``: Users should provide all required information about them:" -" desired username and email. Name data (both first and last) is optional." -" After user creation they should be redirected to login page to perform " +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " "authentication process. Invalid form should provide information about " "error(s)." msgstr "" @@ -1337,46 +1315,46 @@ msgstr "" #: ../../src/appx/blog/spec.rst:382 msgid "" -"``/login/``: Users should provide their credentials to login. In case " -"login is successful they should be redirected to their profile (if no " -"``?next=url`` query string available)." +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У " -"разі успішного входу вони повинні бути перенаправлені до свого профілю " -"(якщо немає рядка запиту ``?next=url``)." +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." #: ../../src/appx/blog/spec.rst:385 msgid "" -"``/create/``: Only authenticated users should be able to visit this page." -" In case anonymous user is trying to request this view they should be " -"redirected to the login view first, and after successful authentication " -"get back to article creation. Then a article is created, it should be " -"authored by the currently authenticated user." +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до " -"цієї сторінки. Якщо анонімний користувач намагається отримати доступ до " -"цього представлення, його повинно перенаправити спочатку на сторінку " -"входу, а після успішної аутентифікації повернути на сторінку створення " -"статті. При створенні статті вона повинна мати автором поточного " -"аутентифікованого користувача." +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." #: ../../src/appx/blog/spec.rst:390 msgid "" -"``/
    /comment/``: Currently authenticated user should be " -"referenced as a comment's author." +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого " -"користувача повинна бути зазначена його ідентифікація як автора." +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." #: ../../src/appx/blog/spec.rst:392 msgid "" -"Articles may be modified or deleted only by their authors from the detail" -" article page. However, admins can still performs articles actions from " -"the admin page." +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей" -" статті. Однак адміністратори все ще можуть виконувати дії зі статтями " -"через адміністративну сторінку." +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." #: ../../src/appx/blog/spec.rst:395 msgid "User related paths are restricted for non-authorized users." @@ -1394,12 +1372,12 @@ msgstr "``/set-userdata/``" #: ../../src/appx/blog/spec.rst:400 msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user " -"as *deleted* and log them user." +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." msgstr "" "Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для " -"цього користувача." +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." #: ../../src/appx/blog/spec.rst:406 msgid "" @@ -1412,17 +1390,16 @@ msgstr "" #: ../../src/appx/blog/spec.rst:408 msgid "" -"Implement account reactivation behavior. The exact workflow does not " -"mater. The sample scenario is to collect email for the user and check it " -"for existing in the database. After that create a request for admin to " -"activate an account and send a confirmation email, when all is done." +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок " -"дій не має значення. Один зі зразків сценаріїв може полягати у зборі " -"електронної пошти користувача та перевірки наявності цієї адреси в базі " -"даних. Після цього створіть запит для адміністратора на активацію " -"облікового запису та надішліть підтверджувальний лист електронною поштою," -" коли все буде готово." +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." #: ../../src/appx/blog/spec.rst:414 msgid "Challenge: Article related forms" @@ -1430,11 +1407,11 @@ msgstr "Виклик: Форми пов'язані зі статтями" #: ../../src/appx/blog/spec.rst:416 msgid "" -"Implement a article form. This form will be used to create new articles " -"and to update existing ones." +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення " -"нових статей та оновлення існуючих." +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." #: ../../src/appx/blog/spec.rst:418 msgid "Each created article should have at least one related topic." @@ -1449,8 +1426,8 @@ msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до " -"``/
    /comment/``." +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." #: ../../src/appx/blog/spec.rst:422 msgid "Implement functionality:" @@ -1503,8 +1480,8 @@ msgstr "Існуюча функціональність не повинна бу #: ../../src/appx/blog/spec.rst:445 msgid "It's ok to use built-in Django CBV if needed." msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у " -"Django (CBV)." +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." #: ../../src/appx/blog/spec.rst:448 msgid "Challenge: Serializers" @@ -1512,24 +1489,24 @@ msgstr "Завдання: Серіалізатори" #: ../../src/appx/blog/spec.rst:452 msgid "" -"Topic serializer is for read-only purposes only. Topics can be created " -"via admin page only." +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." #: ../../src/appx/blog/spec.rst:454 msgid "" -"Serialized data should contain all available data, e.g. ``pk``, " -"``title``, ``description``." +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." #: ../../src/appx/blog/spec.rst:459 msgid "" -"article comment serializer can perform both reading and writing " -"operations. But it can't be used to *update* or *delete* comment." +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." msgstr "" "серіалізатор коментаря статті може виконувати як операції читання, так і " "операції запису. Проте він не може використовуватися для оновлення або " @@ -1537,8 +1514,8 @@ msgstr "" #: ../../src/appx/blog/spec.rst:461 msgid "" -"Random, or pre-defined user may be used as comment's author for now. This" -" will be fixed in the future." +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." @@ -1548,8 +1525,8 @@ msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції:" -" отримання списку, отримання окремої статті, створення нової статті, " +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." #: ../../src/appx/blog/spec.rst:470 @@ -1558,16 +1535,15 @@ msgstr "Користувач" #: ../../src/appx/blog/spec.rst:471 msgid "" -"User serializer provides full access to site users data. All operations " -"are available for now: list, retrieve, create, update and destroy. This " -"behavior will be fixed in the future, to prevent unauthorized data " -"modifications." +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту." -" Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та " -"видалення. Однак, ця поведінка буде виправлена у майбутньому для " -"запобігання несанкціонованим змінам даних." +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." #: ../../src/appx/blog/spec.rst:477 msgid "Challenge: API views" @@ -1576,13 +1552,13 @@ msgstr "Завдання: API views" #: ../../src/appx/blog/spec.rst:479 msgid "All blog-site functionality are to be reflected via REST API." msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою " -"REST API." +"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " +"API." #: ../../src/appx/blog/spec.rst:482 msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This " -"will be fixed in the next challenge." +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." msgstr "" "Наразі дозволяється передавати *наперед визначеного* користувача у тілі " "запиту. Це буде виправлено у наступному розділі." @@ -1602,10 +1578,10 @@ msgstr "" "запису" #: ../../src/appx/blog/spec.rst:491 -msgid "For non-authenticated users it is possible to obtain authentication data." +msgid "" +"For non-authenticated users it is possible to obtain authentication data." msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних " -"аутентифікації." +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." #: ../../src/appx/blog/spec.rst:494 msgid "" @@ -1655,17 +1631,17 @@ msgstr "Редактори Коду" #: ../../src/appx/code_edit.txt:18 msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things," -" but those tools quickly turn larger programming projects into " -"frustrating pits of despair. Using an IDE, or even just a good dedicated " -"code editor, makes coding fun — but which one is best for you? " -":cite:`realpython:code-edit`" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово " -"підходить для простих речей, але ці інструменти швидко перетворюють " -"великі проекти програмування на розчаровуючу яму відчаю. Використання IDE" -" або навіть просто хорошого спеціального редактора коду робить кодування " -"цікавим — але який з них найкращий для вас? :cite:`realpython:code-edit`" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" #: ../../src/appx/conv_store.txt:-1 msgid "Convenience store challenge" @@ -1681,25 +1657,23 @@ msgstr "Convenience Store Challenge" #: ../../problem-sets/src/conv_store/challenge.rst:5 msgid "" -"The local store is struggling with their payment registry system. The " -"owner asked you to take a look at it and to propose some ideas about the " -"upgrade. While looking on a wooden frames with rows of beads you think " -"that this will be a challenging task to bring a modern approach into this" -" place and reorganize the processes. Fortunately, you are a Python " -"developer who knows how to work with various data incomes and outcomes. " -"After some time the scope of works and timelines were discussed and wrote" -" some notes to split the entire project into individual pieces to " -"implement step-by-step." +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." msgstr "" "Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо " -"оновлення. Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це " -"буде складним завданням застосувати сучасний підхід до цього місця та " -"реорганізувати процеси. На щастя, ви розробник Python, який знає, як " -"працювати з різними доходами та результатами даних. Через деякий час " -"обговорювалися обсяги робіт і часові рамки та були написані деякі " -"примітки, щоб розділити весь проект на окремі частини для поетапної " -"реалізації." +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." #: ../../problem-sets/src/conv_store/challenge.rst:14 msgid "Your notes are here," @@ -1712,8 +1686,8 @@ msgstr "Товари та кошик" #: ../../problem-sets/src/conv_store/challenge.rst:20 msgid "" "It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to" -" work around data in the future." +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." msgstr "" "Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " "першому етапі головною метою є впровадження моделей даних - класів для " @@ -1745,25 +1719,23 @@ msgstr "``unit`` - розмір одиниці окремого товару (п #: ../../problem-sets/src/conv_store/challenge.rst:35 msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` " -"will store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to " -"``0.1``." +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що " -"``name`` зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` " -"дорівнює ``0,1``." +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." #: ../../problem-sets/src/conv_store/challenge.rst:39 msgid "" -"``Product`` class should implement ``get_total`` method to calculate a " -"total price for a specified quantity of a product to purchase. Desired " -"quantity will be passed as an optional argument of a numeric type " -"(``int`` or ``float``). In case quantity argument is omitted - just use " -"``unit`` attribute value instead." +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення" -" загальної ціни на вказану кількість товару для покупки. Бажану кількість" -" буде передано як необов'язковий аргумент числового типу (``int`` або " +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " "``float``). Якщо аргумент кількості пропущено, просто використовуйте " "значення атрибута ``unit``." @@ -1850,11 +1822,11 @@ msgstr "Кошик для покупок" #: ../../problem-sets/src/conv_store/challenge.rst:65 msgid "" "This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their " -"amount (quantities)." +"responsibility is to store information about the purchases and their amount " +"(quantities)." msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна " -"відповідальність - зберігати інформацію про покупки та їх кількість." +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." #: ../../problem-sets/src/conv_store/challenge.rst:68 msgid "" @@ -1866,9 +1838,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:70 msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a " -"specified quantity into a cart. ``quantity`` argument is optional, if " -"omitted just uses ``Product.unit`` value instead." +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." msgstr "" "``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " "вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " @@ -1915,13 +1887,12 @@ msgstr "екземпляр товару, щоб додати до кошика" #: conv_store.models.ShoppingCart.add_product:5 of msgid "a quantity of a product to add. Defaults to the product unit value." msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці " -"продукту." +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." #: conv_store.models.ShoppingCart.add_product:9 of msgid "" -"This method adds a product instance and corresponding quantity value to " -"the cart." +"This method adds a product instance and corresponding quantity value to the " +"cart." msgstr "" "Цей метод додає екземпляр продукту та відповідне значення кількості до " "кошика." @@ -1940,8 +1911,8 @@ msgstr "Ініціалізація, представлення та привед #: ../../problem-sets/src/conv_store/challenge.rst:99 msgid "" -"It's difficult to set properties one-by-one, also it's not informative to" -" get default objects string representations. It's time to fix this." +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." msgstr "" "Важко встановлювати властивості одну за одною, також " "неінформативноотримувати представлення рядків об'єктів за замовчуванням. " @@ -1950,16 +1921,16 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:102 msgid "``Product`` should be initialized with all required data, no defaults." msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без " -"значень за замовчуванням." +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." #: ../../problem-sets/src/conv_store/challenge.rst:103 msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities " -"between different carts." +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість" -" між різними візками." +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." #: ../../problem-sets/src/conv_store/challenge.rst:105 msgid "Provide a human readable representations. For example:" @@ -1983,28 +1954,27 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:112 msgid "" -"While casting product instance to ``float`` type it should be equal to " -"its ``price`` attribute value." +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має " -"дорівнювати значенню його атрибута ``price``." +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." #: ../../problem-sets/src/conv_store/challenge.rst:114 msgid "" -"While casting shopping cart instance to ``float`` type it should be equal" -" to its total price value." +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він " -"має дорівнювати загальному значенню ціни." +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." #: ../../problem-sets/src/conv_store/challenge.rst:116 msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if " -"at least one product is attach to current cart." +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте " -"його ``True``, якщо принаймні один продукт приєднаний до поточного " -"кошика." +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." #: ../../problem-sets/src/conv_store/challenge.rst:119 msgid "Implement equality operator support for your objects:" @@ -2015,7 +1985,8 @@ msgid "consider products equal if all their properties are the same" msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" #: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "consider carts equal if products and corresponding quantities are the same" +msgid "" +"consider carts equal if products and corresponding quantities are the same" msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" #: ../../problem-sets/src/conv_store/challenge.rst:148 @@ -2024,11 +1995,11 @@ msgstr "Опрацювання платежів" #: ../../problem-sets/src/conv_store/challenge.rst:150 msgid "" -"The owner asked you to implement a flexible payment system. Purchasing " -"the shopping card consists of several steps:" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання " -"картки покупок складається з кількох кроків:" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" #: ../../problem-sets/src/conv_store/challenge.rst:153 msgid "cart validation - it should not be empty or already purchased" @@ -2044,27 +2015,27 @@ msgstr "купівля кошика" #: ../../problem-sets/src/conv_store/challenge.rst:157 msgid "" -"For now there are two payment types available in the store: cash and " -"credit card, but they maybe extended at any time." +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, " -"але їх можна продовжити в будь-який час." +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." #: ../../problem-sets/src/conv_store/challenge.rst:160 msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make " -"this property *protected*, since it should not be accessed outside the " -"card instance." +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю" -" властивість *protected*, оскільки до неї не слід звертатися поза " -"екземпляром картки." +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." #: ../../problem-sets/src/conv_store/challenge.rst:163 msgid "" "Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class" -" for the future usage." +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." msgstr "" "Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " "аргументів і повертає значення логічного типу. Це абстрактний клас для " @@ -2072,9 +2043,9 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:166 msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes " -"a ``ShoppingCart`` object and returns nothing. This is an abstract class " -"for the future usage." +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." msgstr "" "Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " "об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " @@ -2082,8 +2053,8 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:169 msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances " -"of this class are considered to be always valid." +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." msgstr "" "Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " "цього класу вважаються завжди дійсними." @@ -2093,29 +2064,31 @@ msgid "Inherit ``CodeValidator`` from the base validator." msgstr "Успадкувати ``CodeValidator`` від основного валідатора." #: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "The instances of this class are created with ``security_code`` argument." -msgstr "Екземпляри цього класу створено за допомогою аргументу ``security_code``." +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." #: ../../problem-sets/src/conv_store/challenge.rst:174 msgid "" -"``is_valid`` method should ask a customer for a security code and check " -"it against the stored value. In case codes are equal payment considered " -"to be valid." +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його " -"зі збереженим значенням. Якщо коди однакові, оплата вважається дійсною." +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." #: ../../problem-sets/src/conv_store/challenge.rst:178 msgid "" "Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " "``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be" -" printed out." +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку " -"``CashValidator`` і ``PaymentProcessor``. Під час купівлі в кошику " -"з'являються повідомлення \"Обробка готівкового платежу...\" і \"Рахунок у" -" кошику : {float total}\" слід роздрукувати." +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." #: ../../problem-sets/src/conv_store/challenge.rst:183 msgid "" @@ -2124,10 +2097,9 @@ msgid "" "\"Processing card payment...\" and \"Security code: {code}\" should be " "printed out." msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку " -"``CodeValidator`` і ``PaymentProcessor``. Під час купівлі кошику слід " -"роздрукувати повідомлення \"Обробка платежу карткою...\" і \"Код безпеки " -": {code}\"." +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." #: ../../problem-sets/src/conv_store/challenge.rst:203 msgid "More Enhancements for Shopping Carts" @@ -2139,17 +2111,16 @@ msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейн #: ../../problem-sets/src/conv_store/challenge.rst:207 msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in " -"the cart." +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів" -" у кошику." +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." #: ../../problem-sets/src/conv_store/challenge.rst:209 msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product " -"and corresponding quantity (type hint: ``Tuple[Product, Union[int, " -"float]]``)." +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." msgstr "" "Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " "товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " @@ -2157,17 +2128,17 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:213 msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance" -" and corresponding quantity for each iteration." +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." msgstr "" "Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " "примірник продукту та відповідну кількість для кожної ітерації." #: ../../problem-sets/src/conv_store/challenge.rst:215 msgid "" -"Avoid products duplication. In case someone tries to put the product into" -" a cart and this product already is present there, do not it for the " -"second time - adjust corresponding quantity value instead." +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." msgstr "" "Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " "кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " @@ -2175,19 +2146,19 @@ msgstr "" #: ../../problem-sets/src/conv_store/challenge.rst:218 msgid "" -"Implement ``remove_product`` method to completely remove some product " -"from the cart." +"Implement ``remove_product`` method to completely remove some product from " +"the cart." msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти" -" з кошика." +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." #: ../../problem-sets/src/conv_store/challenge.rst:220 msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity " -"is equal to 0 (zero) or less - remove product from the cart." +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо " -"кількість дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." #: ../../problem-sets/src/conv_store/challenge.rst:249 msgid "Testing Software" @@ -2203,7 +2174,8 @@ msgstr "Тести мають бути розташовані всередині #: ../../problem-sets/src/conv_store/challenge.rst:254 msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." #: ../../problem-sets/src/conv_store/challenge.rst:255 msgid "Project dependencies are to be updated." @@ -2236,15 +2208,15 @@ msgstr "Пріоритет Операторів" #: ../../src/appx/precedence.txt:10 msgid "" "The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) " -":cite:`docs-python:operator-precedence`. Operators in the same cell have " -"the same precedence (use left-to-right precedence)." +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." msgstr "" "У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " "найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. " -"Оператори в одній клітинці мають однаковий пріоритет (використовуйте " -"пріоритет зліва направо)." +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." #: ../../src/appx/precedence.txt:16 msgid "Operator" @@ -2264,11 +2236,11 @@ msgstr "" #: ../../src/appx/precedence.txt:18 msgid "" -"Binding or parenthesized expression, list display, dictionary display, " -"set display" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника," -" відображення набору" +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" #: ../../src/appx/precedence.txt:23 msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" @@ -2308,8 +2280,8 @@ msgstr "``*``, ``@``, ``/``, ``//``, ``%``" #: ../../src/appx/precedence.txt:34 msgid "" -"Multiplication, matrix multiplication, division, floor division, " -"remainder [#]_" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" #: ../../src/appx/precedence.txt:37 @@ -2414,16 +2386,16 @@ msgstr "Оперетор присвоєння" #: ../../src/appx/precedence.txt:65 msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary" -" operator on its right (``2 ** -1`` is ``0.5``)." +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." msgstr "" "оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " "унарний оператор праворуч (``2 ** -1`` це ``0,5``)." #: ../../src/appx/precedence.txt:67 msgid "" -"the ``%`` operator is also used for string formatting; the same " -"precedence applies." +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." msgstr "" "оператор ``%`` також використовується для форматування рядків; " "застосовується той самий пріоритет." @@ -2443,20 +2415,18 @@ msgstr "``printf-style`` Форматування рядків" #: ../../src/appx/printf.txt:12 msgid "" "String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or " -"*interpolation* operator :cite:`docs-python:printf-formatting`. Given " -"``format % values`` (where *format* is a string), ``%`` conversion " -"specifications in *format* are replaced with zero or more elements of " -"*values*. If *format* requires a single argument, *values* may be a " -"single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` " -"(по модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат" -" % значень`` (де *format* є рядком), ``%`` специфікації перетворення у " -"*format* замінюються нулем або більше елементами *значень*. Якщо для " -"*format* потрібен один аргумент, *values* може бути одним некортежним " -"об'єктом." +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." #: ../../src/appx/printf.txt:19 msgid "The conversion flag characters are:" @@ -2492,11 +2462,9 @@ msgstr "``'-'``" #: ../../src/appx/printf.txt:28 msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are " -"given)" +"The converted value is left adjusted (override the ``'0'`` if both are given)" msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано " -"обидва)" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" #: ../../src/appx/printf.txt:31 msgid "``' '``" @@ -2512,11 +2480,11 @@ msgstr "``'+'``" #: ../../src/appx/printf.txt:33 msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion " -"(overrides a \"space\" flag)" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню " -"(перевизначає прапор \"пробіл\")" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" #: ../../src/appx/printf.txt:37 msgid "The conversion types are:" @@ -2604,8 +2572,8 @@ msgstr "``'G'``" #: ../../src/appx/printf.txt:61 msgid "" -"Floating point format. Uses lowercase exponential format if exponent is " -"less that -4 or not less than precision, decimal format otherwise." +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." msgstr "" "Формат з плаваючою комою. Використовує нижній регістр експоненціального " "формату, якщо показник степеня менший за -4 або не менший за точність, " @@ -2648,7 +2616,8 @@ msgid "``'%'``" msgstr "``'%'``" #: ../../src/appx/printf.txt:74 -msgid "No arguments is converted, results in a ``'%'`` character in the result." +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." #: ../../src/appx/software_list.rst:-1 @@ -2673,7 +2642,8 @@ msgstr "7zip" #: ../../src/appx/software_list.rst:12 msgid "**7-Zip** is **free software** with **open source**." -msgstr "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." #: ../../src/appx/software_list.rst:14 msgid "" @@ -2693,9 +2663,9 @@ msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, #: ../../src/appx/software_list.rst:19 msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." msgstr "" "Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " @@ -2720,14 +2690,14 @@ msgstr "cygwin" #: ../../src/appx/software_list.rst:31 msgid "" "It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution " -"`__ on Windows and a " -"DLL (cygwin1.dll) which provides substantial POSIX API functionality." +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." msgstr "" "Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux " -"`__ у Windows та DLL " -"(cygwin1.dll), яка забезпечує значний POSIX Функціонал API." +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." #: ../../src/appx/software_list.rst:37 msgid "**Cygwin is not**:" @@ -2735,12 +2705,11 @@ msgstr "**Сygwin це не**:" #: ../../src/appx/software_list.rst:39 msgid "" -"a way to run native Linux apps on Windows. You must rebuild your " -"application *from source* if you want it to run on Windows." +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати " -"свою програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в " -"Windows." +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." #: ../../src/appx/software_list.rst:41 msgid "" @@ -2764,13 +2733,13 @@ msgstr "git [#cygwin]_" #: ../../src/appx/software_list.rst:51 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle " -"everything from small to very large projects with speed and efficiency." +"source>`__ distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю " -"версій, призначена для швидкого та ефективного керування всіма проектами," -" від малих до дуже великих." +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." #: ../../src/appx/software_list.rst:56 msgid "https://git-scm.com/" @@ -2783,24 +2752,24 @@ msgstr "Docker" #: ../../src/appx/software_list.rst:61 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022" -" рік." +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." #: ../../src/appx/software_list.rst:63 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation " -"of application components. Actively used by millions of developers around" -" the world, Docker Desktop and Docker Hub provide unmatched simplicity, " -"agility and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи " -"складність розробки програм. Ми спрощуємо та прискорюємо робочі процеси " -"розробки за допомогою інтегрованого конвеєра розробників і консолідації " -"компонентів програми. Активно використовувані мільйонами розробників у " -"всьому світі Docker Desktop і Docker Hub забезпечують неперевершену " -"простоту, гнучкість і вибір." +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." #: ../../src/appx/software_list.rst:70 msgid "https://www.docker.com/" @@ -2812,14 +2781,13 @@ msgstr "PostgreSQL [#cygwin]_" #: ../../src/appx/software_list.rst:75 msgid "" -"PostgreSQL is a powerful, open source object-relational database system " -"with over 35 years of active development that has earned it a strong " -"reputation for reliability, feature robustness, and performance." +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим " -"вихідним кодом, активна розробка якої триває понад 35 років, завдяки чому" -" вона заслужила міцну репутацію надійності, надійності функцій і " -"продуктивності." +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." #: ../../src/appx/software_list.rst:79 msgid "https://www.postgresql.org/" @@ -2831,24 +2799,24 @@ msgstr "psql [#cygwin]_" #: ../../src/appx/software_list.rst:86 msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in " -"queries interactively, issue them to PostgreSQL, and see the query " -"results. Alternatively, input can be from a file or from command line " -"arguments. In addition, psql provides a number of meta-commands and " -"various shell-like features to facilitate writing scripts and automating " -"a wide variety of tasks." +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." msgstr "" "Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати" -" запиту. Крім того, введення може бути з файлу або з аргументів " -"командного рядка. Крім того, psql надає низку мета-команд і різноманітних" -" функцій, подібних до оболонки, для полегшення написання сценаріїв і " -"автоматизації різноманітних завдань." +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." #: ../../src/appx/software_list.rst:93 msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and " -"Linux look for ``postgresql-client`` package." +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for ``postgresql-client`` package." msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." @@ -2863,19 +2831,19 @@ msgstr "pgAdmin" #: ../../src/appx/software_list.rst:101 msgid "" -"pgAdmin is the most popular and feature rich Open Source administration " -"and development platform for PostgreSQL, the most advanced Open Source " -"database in the world." +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа " -"адміністрування та розробки з відкритим кодом для PostgreSQL, " -"найдосконалішої бази даних з відкритим кодом у світі." +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." #: ../../src/appx/software_list.rst:105 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі" -" веб-інтерфейсу." +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." #: ../../src/appx/software_list.rst:107 msgid "https://pgadmin.org/" @@ -2887,19 +2855,17 @@ msgstr "SQLite [#cygwin]_" #: ../../src/appx/software_list.rst:112 msgid "" -"SQLite is a C-language library that implements a `small " -"`__, `fast " -"`__, `self-contained " -"`__, `high-reliability " -"`__, `full-featured " -"`__, SQL database engine." +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку " -"`__, `швидку " -"`__, `самодостатню " -"`__, `висока надійність " -"`__, `повнофункціональний " -"`__, двигун бази даних SQL." +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." #: ../../src/appx/software_list.rst:120 msgid "https://sqlite.org/" @@ -2925,15 +2891,15 @@ msgstr "Чарівники, Злодії та Рицарі" msgid "" "\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must" -" type in his or her choice. The enemy is controlled by the script. The " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " "player's goal is to gain as many score points, as it possible." msgstr "" "Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " "Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач " -"повинен ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати " -"якомога більше очок." +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." #: ../../problem-sets/src/wtk/challenge.rst:13 msgid "Code organization" @@ -2941,7 +2907,8 @@ msgstr "Організація коду" #: ../../problem-sets/src/wtk/challenge.rst:15 msgid "Use separate modules to maintain your code base. For example:" -msgstr "Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" #: ../../problem-sets/src/wtk/challenge.rst:27 msgid "General playground description" @@ -2949,9 +2916,8 @@ msgstr "Загальний опис ігрового процесу" #: ../../problem-sets/src/wtk/challenge.rst:29 msgid "" -"The game process is divided into rounds. Each round consists of " -"**attack** and **defence** stages. Rounds are repeated, until player is " -"defeated." +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." msgstr "" "Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " "захисту. Раунди повторюються, поки гравець не буде переможений." @@ -2983,8 +2949,8 @@ msgstr "Стадія атаки" #: ../../problem-sets/src/wtk/challenge.rst:44 msgid "" "Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by" -" random. If the attack is successful:" +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" msgstr "" "Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " "обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" @@ -3023,9 +2989,8 @@ msgid "" "**knight**, enemy selects the choice to attack from the same options by " "random. If the attack is successful:" msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог" -" обирає для атаки з тих же варіантів випадковим чином. Якщо атака " -"успішна:" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" #: ../../problem-sets/src/wtk/challenge.rst:64 msgid "player health is decreased" @@ -3053,13 +3018,13 @@ msgstr "Ворога переможено" #: ../../problem-sets/src/wtk/challenge.rst:78 msgid "" -"This is an exceptional scenario when enemy is defeated. A custom " -"exception ``EnemyDown`` should be used to track these cases. Exception " -"should provide the details on the enemy's instance, especially its level." +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." msgstr "" "Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток" -" повинен надавати деталі про екземпляр ворога, особливо його рівень." +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." #: of wtk.exceptions.EnemyDown:1 msgid "Raised when an enemy is defeated" @@ -3071,15 +3036,13 @@ msgstr "Гра завершена" #: ../../problem-sets/src/wtk/challenge.rst:87 msgid "" -"This is an exceptional scenario when player is defeated. A custom " -"exception ``GameOver`` should be used to track these cases. Exception " -"should provide the details on the player's instance, especially its score" -" points." +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." msgstr "" "Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " "випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати " -"бали." +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." #: of wtk.exceptions.GameOver:1 msgid "Raised when a player is defeated" @@ -3135,11 +3098,11 @@ msgstr "EnemyDown" #: of wtk.models.Enemy.decrease_health:5 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``EnemyDown`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``EnemyDown``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." #: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 msgid "Return a random fight choice" @@ -3156,7 +3119,8 @@ msgstr "Вибори, зроблені супротивником, випадк #: ../../problem-sets/src/wtk/challenge.rst:104 msgid "You are free to implement other methods you like, if needed." -msgstr "Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." #: ../../problem-sets/src/wtk/challenge.rst:107 msgid "Player" @@ -3188,11 +3152,11 @@ msgstr "ім'я гравця" #: of wtk.models.Player.__init__:6 msgid "" -"This method performs player instance initialization. It set instance " -"name, initial score points value and health." +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює " -"назву екземпляра, значення початкових балів і здоров'я." +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров'я." #: of wtk.models.Player.attack:1 msgid "Attack an enemy" @@ -3200,19 +3164,18 @@ msgstr "Атакує ворога" #: of wtk.models.Player.attack:3 msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance " -"as an argument. After that, it takes attack choice from the player model " -"and the defence choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease enemy " -"health, assign score points etc.). Based on fight result should print out" -" a message:" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" msgstr "" "Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі " -"гравця та вибір захисту з моделі противника. Після результату битви " -"потрібно виконати обчислення, необхідні операції (зменшити здоров'я " -"ворога, призначити очки тощо). На основі результату бою має видрукувати\"" -" \"повідомлення:" +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" #: of wtk.models.Player.attack:10 msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" @@ -3232,11 +3195,11 @@ msgstr "GameOver" #: of wtk.models.Player.decrease_health:5 msgid "" -"This method decreases the health meter value. When it comes to be less " -"than 1 (one) an ``GameOver`` exception is raised." +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше" -" 1 (одного), виникає виняток ``GameOver``." +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." #: of wtk.models.Player.defence:1 msgid "Defend from an enemy's attack" @@ -3244,17 +3207,17 @@ msgstr "Захист від атаки супротивника" #: of wtk.models.Player.defence:3 msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance" -" as an argument. After that, it takes defence choice from the player " -"model and the attack choice from an enemy model. After fight result " -"calculation required operation are to be performed (decrease player " -"health). Based on fight result should print out a message:" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" msgstr "" "Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та " -"вибір атаки від моделі ворога. Після результату бою необхідно виконати " -"операцію обчислення (зменшити здоров'я гравця). За результатами бою " -"повинно вийти повідомлення:" +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" #: of wtk.models.Player.defence:10 msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" @@ -3327,8 +3290,7 @@ msgstr "Вартість очок, які призначаються, коли #: ../../problem-sets/src/wtk/challenge.rst:131 msgid "You may also define messages with this module, for example:" msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, " -"наприклад:" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" #: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 msgid "Successful attack message" @@ -3393,8 +3355,7 @@ msgid "" "A validation process is performed as well. The player name cannot be an " "empty string." msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім " -"рядком." +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." #: ../../problem-sets/src/wtk/challenge.rst:158 msgid "Play" @@ -3403,21 +3364,20 @@ msgstr "Гра" #: ../../problem-sets/src/wtk/challenge.rst:160 msgid "" "This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated " -"- a new one should be initialized with level increased by 1 (one). This " -"case should be reported to the terminal. If a player is defeated - the " -"\"Game Over\" message should be reported to the terminal. " -"``KeyboardInterrupt`` should be handled as well - it's behavior is " -"similar to \"Game Over\" event, but \"game over\" message should be " -"omitted." +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." msgstr "" "Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового " -"слід ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок " -"слід повідомити на термінал. Якщо гравець зазнає поразки - повідомлення " -"\"Game Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` " -"також слід обробити - це поведінка подібно до події \"Game Over\", але " -"повідомлення \"Game Over\" має бути пропущено." +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." #: of wtk.engine.play:1 msgid "Run the game" @@ -3425,13 +3385,13 @@ msgstr "Запускає гру" #: of wtk.engine.play:3 msgid "" -"The function initializes player and enemy instances. After that it runs " -"the game process in an endless loop. Once the player is defeated - it " -"stops the execution." +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає" -" ігровий процес у нескінченному циклі. Як тільки гравець переможений - це" -" зупиняє виконання." +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." #: ../../problem-sets/src/wtk/challenge.rst:173 msgid "Optional Enhancements" @@ -3440,8 +3400,8 @@ msgstr "Додаткові Вдосконалення" #: ../../problem-sets/src/wtk/challenge.rst:175 msgid "Add scores processor to show top-10 scores from a record table." msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці" -" записів." +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." #: ../../problem-sets/src/wtk/challenge.rst:176 msgid "Create game menu, for example: ::" @@ -3450,8 +3410,7 @@ msgstr "Створити меню гри, наприклад: ::" #: ../../problem-sets/src/wtk/challenge.rst:182 msgid "Store score table to the database instead of using text file." msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового " -"файлу." +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." #~ msgid "Specification for Django blog training project" #~ msgstr "Специфікація навчального проекту блогу Django" @@ -3463,12 +3422,11 @@ msgstr "" #~ msgstr "Додаткові завдання" #~ msgid "" -#~ "Create a service to fetch articles, " -#~ "ordered by a specified user preferences." +#~ "Create a service to fetch articles, ordered by a specified user " +#~ "preferences." #~ msgstr "" -#~ "Створіть сервіс для отримання статей, " -#~ "впорядкованих за вказаними уподобаннями " -#~ "користувача." +#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " +#~ "уподобаннями користувача." #~ msgid "The instructions to create a pull request via GitHub" #~ msgstr "Інструкції щодо створення запиту на отримання через GitHub" @@ -3477,92 +3435,64 @@ msgstr "" #~ msgstr "Створення Pull Request" #~ msgid "" -#~ "Create a pull request to propose " -#~ "and collaborate on changes to a " -#~ "repository. These changes are proposed " -#~ "in a *branch*, which ensures that " -#~ "the default branch only contains " -#~ "finished and approved work :cite:`github" -#~ ":creating-pr`." +#~ "Create a pull request to propose and collaborate on changes to a " +#~ "repository. These changes are proposed in a *branch*, which ensures that " +#~ "the default branch only contains finished and approved work :cite:`github:" +#~ "creating-pr`." #~ msgstr "" -#~ "Створіть запит на отримання, щоб " -#~ "запропонувати та співпрацювати над змінами " -#~ "в сховищі. Ці зміни пропонуються у " -#~ "*гілці*, що гарантує, що гілка за " -#~ "замовчуванням містить лише готову та " -#~ "затверджену роботу :cite:`github:creating-pr`." +#~ "Створіть запит на отримання, щоб запропонувати та співпрацювати над " +#~ "змінами в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка " +#~ "за замовчуванням містить лише готову та затверджену роботу :cite:`github:" +#~ "creating-pr`." #~ msgid "" -#~ "Pull requests let you tell others " -#~ "about changes you've pushed to a " -#~ "branch in a repository on GitHub. " -#~ "Once a pull request is opened, you" -#~ " can discuss and review the potential" -#~ " changes with collaborators and add " -#~ "follow-up commits before your changes " -#~ "are merged into the base branch " -#~ ":cite:`github:about-pr`." +#~ "Pull requests let you tell others about changes you've pushed to a branch " +#~ "in a repository on GitHub. Once a pull request is opened, you can discuss " +#~ "and review the potential changes with collaborators and add follow-up " +#~ "commits before your changes are merged into the base branch :cite:`github:" +#~ "about-pr`." #~ msgstr "" -#~ "Запити на витягування дозволяють повідомляти" -#~ " іншим про зміни, які ви внесли " -#~ "до гілки сховища на GitHub. Після " -#~ "відкриття запиту на отримання ви можете" -#~ " обговорити та переглянути потенційні зміни" -#~ " зі співавторами та додати подальші " -#~ "коміти, перш ніж ваші зміни буде " -#~ "об'єднано в базову гілку :cite:`github" -#~ ":about-pr`." +#~ "Запити на витягування дозволяють повідомляти іншим про зміни, які ви " +#~ "внесли до гілки сховища на GitHub. Після відкриття запиту на отримання ви " +#~ "можете обговорити та переглянути потенційні зміни зі співавторами та " +#~ "додати подальші коміти, перш ніж ваші зміни буде об'єднано в базову " +#~ "гілку :cite:`github:about-pr`." #~ msgid "" -#~ "The compare and pull request pages " -#~ "use different methods to calculate the" -#~ " diff for changed files:" +#~ "The compare and pull request pages use different methods to calculate the " +#~ "diff for changed files:" #~ msgstr "" -#~ "Сторінки порівняння та запиту на " -#~ "отримання використовують різні методи для " -#~ "обчислення різниці для змінених файлів:" +#~ "Сторінки порівняння та запиту на отримання використовують різні методи " +#~ "для обчислення різниці для змінених файлів:" #~ msgid "" -#~ "Compare pages show the diff between " -#~ "the tip of the head ref and " -#~ "the current common ancestor (that is," -#~ " the merge base) of the head " -#~ "and base ref." +#~ "Compare pages show the diff between the tip of the head ref and the " +#~ "current common ancestor (that is, the merge base) of the head and base " +#~ "ref." #~ msgstr "" -#~ "Сторінки порівняння показують різницю між " -#~ "кінчиком головного посилання та поточним " -#~ "спільним предком (тобто основою злиття) " -#~ "головного та базового посилання." +#~ "Сторінки порівняння показують різницю між кінчиком головного посилання та " +#~ "поточним спільним предком (тобто основою злиття) головного та базового " +#~ "посилання." #~ msgid "" -#~ "Pull request pages show the diff " -#~ "between the tip of the head ref" -#~ " and the common ancestor of the " -#~ "head and base ref at the time " -#~ "when the pull request was created. " -#~ "Consequently, the merge base used for" -#~ " the comparison might be different." +#~ "Pull request pages show the diff between the tip of the head ref and the " +#~ "common ancestor of the head and base ref at the time when the pull " +#~ "request was created. Consequently, the merge base used for the comparison " +#~ "might be different." #~ msgstr "" -#~ "Сторінки запиту на отримання показують " -#~ "різницю між кінчиком головного посилання " -#~ "та спільним предком головного та " -#~ "базового посилання на момент створення " -#~ "запиту на отримання. Отже, база злиття," -#~ " яка використовується для порівняння, може" -#~ " бути іншою." +#~ "Сторінки запиту на отримання показують різницю між кінчиком головного " +#~ "посилання та спільним предком головного та базового посилання на момент " +#~ "створення запиту на отримання. Отже, база злиття, яка використовується " +#~ "для порівняння, може бути іншою." #~ msgid "" -#~ "In *few words*: both source and " -#~ "target branches **should** share some " -#~ "commit(s) in their history and the " -#~ "source branch **should** has commit(s) " +#~ "In *few words*: both source and target branches **should** share some " +#~ "commit(s) in their history and the source branch **should** has commit(s) " #~ "missing on the target one." #~ msgstr "" -#~ "У *кількох словах*: як вихідна, так " -#~ "і цільова гілки **повинні** мати спільні" -#~ " деякі коміти у своїй історії, а " -#~ "вихідна гілка **повинна** мати коміти, " -#~ "відсутні в цільовій." +#~ "У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати " +#~ "спільні деякі коміти у своїй історії, а вихідна гілка **повинна** мати " +#~ "коміти, відсутні в цільовій." #~ msgid "Following SHOULD be included to the repository:" #~ msgstr "У репозиторій СЛІД включити наступне:" @@ -3595,122 +3525,93 @@ msgstr "" #~ msgstr "Це потрібно зробити один раз для кожного репозиторію." #~ msgid "" -#~ "Create README file and provide a " -#~ "brief description for your project " +#~ "Create README file and provide a brief description for your project " #~ "(optional)." #~ msgstr "" -#~ "Створіть файл README та надайте короткий" -#~ " опис свого проекту (необов'язково)." +#~ "Створіть файл README та надайте короткий опис свого проекту " +#~ "(необов'язково)." #~ msgid "Freeze the dependencies." #~ msgstr "Зафіксуйте залежності." #~ msgid "" -#~ "Create a base code modules (e.g. " -#~ "initialize django project and apps, or" -#~ " create an empty python module like" -#~ " \"main.py\" etc.)." +#~ "Create a base code modules (e.g. initialize django project and apps, or " +#~ "create an empty python module like \"main.py\" etc.)." #~ msgstr "" -#~ "Створіть модулі базового коду (наприклад, " -#~ "ініціалізуйте проект django та його " -#~ "застосунки або створіть порожній модуль " -#~ "python, як-от \"main.py\" тощо)." +#~ "Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " +#~ "його застосунки або створіть порожній модуль python, як-от \"main.py\" " +#~ "тощо)." #~ msgid "" -#~ "Create \".gitignore\" file and set up" -#~ " directories and files to be excluded" +#~ "Create \".gitignore\" file and set up directories and files to be excluded" #~ msgstr "" -#~ "Створіть файл \".gitignore\" та налаштуйте " -#~ "каталоги та файли, які потрібно " -#~ "виключити" +#~ "Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які " +#~ "потрібно виключити" #~ msgid "Append contributors to remote repository" #~ msgstr "Додати учасників до віддаленого репозиторію" #~ msgid "" -#~ "On `GitHub `_, navigate to" -#~ " the repository settings page and " -#~ "switch to **Collaborators and teams** " -#~ "menu item." +#~ "On `GitHub `_, navigate to the repository settings " +#~ "page and switch to **Collaborators and teams** menu item." #~ msgstr "" -#~ "На `GitHub `_ перейдіть на" -#~ " сторінку налаштувань репозиторію та " -#~ "перейдіть до пункту меню **Collaborators " -#~ "and teams**." +#~ "На `GitHub `_ перейдіть на сторінку налаштувань " +#~ "репозиторію та перейдіть до пункту меню **Collaborators and teams**." #~ msgid "Working on feature" #~ msgstr "Робота над завданням" #~ msgid "" -#~ "Create a dedicated branch with some " -#~ "representative name (e.g. \"feature/models\", " -#~ "\"cbv\" etc.)." +#~ "Create a dedicated branch with some representative name (e.g. \"feature/" +#~ "models\", \"cbv\" etc.)." #~ msgstr "" -#~ "Створіть спеціальну гілку з певною " -#~ "репрезентативною назвою (наприклад, " +#~ "Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " #~ "\"feature/models\", \"cbv\" тощо)." #~ msgid "Do the work and commit changes on a feature branch." #~ msgstr "Виконайте роботу та зафіксуйте зміни в гілці." #~ msgid "" -#~ "While working on a *feature branch* " -#~ "make commits for each completed logical" -#~ " block of code." +#~ "While working on a *feature branch* make commits for each completed " +#~ "logical block of code." #~ msgstr "" -#~ "Під час роботи над *функціональною " -#~ "гілкою* робіть коміти для кожного " +#~ "Під час роботи над *функціональною гілкою* робіть коміти для кожного " #~ "завершеного логічного блоку коду." #~ msgid "On **Pull requests** tab click **New** button." #~ msgstr "На вкладці **Pull requests** натисніть кнопку **New**." #~ msgid "" -#~ "On the pull request page add a " -#~ "**reviewer** by clicking the appropriate " -#~ "option and selecting a person from " -#~ "a dropdown menu." +#~ "On the pull request page add a **reviewer** by clicking the appropriate " +#~ "option and selecting a person from a dropdown menu." #~ msgstr "" -#~ "На сторінці запиту на отримання додайте" -#~ " **reviewer**, натиснувши відповідну опцію " -#~ "та вибравши особу зі спадного меню." +#~ "На сторінці запиту на отримання додайте **reviewer**, натиснувши " +#~ "відповідну опцію та вибравши особу зі спадного меню." #~ msgid "" -#~ "The reviewer will **approve** or " -#~ "**reject** your pull request. Optionally " -#~ "the reviewer may provide some comments" -#~ " to your code; **rejected** pull " -#~ "requests will always come with some " -#~ "details." +#~ "The reviewer will **approve** or **reject** your pull request. Optionally " +#~ "the reviewer may provide some comments to your code; **rejected** pull " +#~ "requests will always come with some details." #~ msgstr "" -#~ "Рецензент **схвалить** або **відхилить** ваш" -#~ " запит на отримання. За бажанням " -#~ "рецензент може надати деякі коментарі до" -#~ " вашого коду; **відхилені** запити на " -#~ "витягування завжди надходитимуть з деякими " +#~ "Рецензент **схвалить** або **відхилить** ваш запит на отримання. За " +#~ "бажанням рецензент може надати деякі коментарі до вашого коду; " +#~ "**відхилені** запити на витягування завжди надходитимуть з деякими " #~ "деталями." #~ msgid "Re-request review from the pull request page." #~ msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." #~ msgid "" -#~ "All commits related to the source " -#~ "branch will be automatically appended to" -#~ " the open pull request. The reviewer" -#~ " will review your updates. Repeat " -#~ "this process until the pull request " -#~ "is **approved**." +#~ "All commits related to the source branch will be automatically appended " +#~ "to the open pull request. The reviewer will review your updates. Repeat " +#~ "this process until the pull request is **approved**." #~ msgstr "" -#~ "Усі коміти, пов'язані з вихідною гілкою," -#~ " будуть автоматично додані до відкритого" -#~ " запиту на отримання. Рецензент перевірить" -#~ " ваші оновлення. Повторюйте цей процес, " -#~ "доки запит на отримання не буде " -#~ "**схвалено**." +#~ "Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " +#~ "відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " +#~ "Повторюйте цей процес, доки запит на отримання не буде **схвалено**." #~ msgid "Merging the pull request" #~ msgstr "Об'єднання (злиття) запиту" #~ msgid "After that the pull request is merged into your target branch." #~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." - diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index 9b0b2278e..b3d55a860 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -9,16 +9,17 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-01 11:38+0300\n" -"PO-Revision-Date: 2023-08-19 12:18+0300\n" +"PO-Revision-Date: 2023-09-04 16:12+0300\n" "Last-Translator: Serhii Horodilov \n" -"Language: uk\n" "Language-Team: uk \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 #: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 @@ -51,11 +52,11 @@ msgstr "Зазвичай ви отримуєте Git-репозиторій од #: ../../src/vcs/basics.txt:15 msgid "" -"You can take a local directory that is currently not under version " -"control, and turn it into a Git repository." +"You can take a local directory that is currently not under version control, " +"and turn it into a Git repository." msgstr "" -"Ви можете взяти локальний каталог, який наразі не перебуває під контролем" -" версій, і перетворити його на Git-репозиторій." +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " +"версій, і перетворити його на Git-репозиторій." #: ../../src/vcs/basics.txt:17 msgid "You can clone an existing Git repository from elsewhere." @@ -75,16 +76,15 @@ msgstr "Ініціалізація репо в існуючому каталоз #: ../../src/vcs/basics.txt:25 msgid "" -"If you have a project directory that is currently not under version " -"control and you want to start controlling it with Git, you first need to " -"go to that project's directory. If you've never done this, it looks a " -"little different depending on which system you're running:" +"If you have a project directory that is currently not under version control " +"and you want to start controlling it with Git, you first need to go to that " +"project's directory. If you've never done this, it looks a little different " +"depending on which system you're running:" msgstr "" -"Якщо у вас є каталог проекту, який наразі не перебуває під контролем " -"версій, і ви хочете почати контролювати його за допомогою Git'а, спершу " -"вам потрібно перейти до каталогу цього проекту. Якщо ви ніколи цього не " -"робили, це виглядає трохи інакше, залежно від того, якою системою ви " -"користуєтеся:" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " +"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " +"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " +"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" #: ../../src/vcs/basics.txt:30 msgid "Change directory in bash (Linux)" @@ -116,19 +116,17 @@ msgstr "Клонування існуючого репо" #: ../../src/vcs/basics.txt:57 msgid "" -"If you want to get a copy of an existing Git repository -- for example, a" -" project you'd like to contribute to -- the command you need is ``git " -"clone``." +"If you want to get a copy of an existing Git repository -- for example, a " +"project you'd like to contribute to -- the command you need is ``git clone``." msgstr "" -"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, " -"проекту, до якого ви хочете долучитися, - вам потрібна команда ``git " -"clone``." +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " +"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." #: ../../src/vcs/basics.txt:64 msgid "" -"That creates a directory named *edu-python-course.github.io*, initializes" -" a *.git* directory inside it, pulls down all the data for that " -"repository, and checks out a working copy of the latest version." +"That creates a directory named *edu-python-course.github.io*, initializes a " +"*.git* directory inside it, pulls down all the data for that repository, and " +"checks out a working copy of the latest version." msgstr "" "Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " "каталог *.git* всередині нього, витягує всі дані для цього сховища і " @@ -139,21 +137,19 @@ msgid "" "That command does the same thing as the previous one, but the target " "directory is called *python-course*." msgstr "" -"Ця команда робить те саме, що й попередня, але цільовий каталог " -"називається *python-course*." +"Ця команда робить те саме, що й попередня, але цільовий каталог називається " +"*python-course*." #: ../../src/vcs/basics.txt:75 msgid "" -"Git has a number of different transfer protocols you can use. The " -"previous example uses the ``https://`` protocol, but you may also see " -"``git://`` or ``user@server:path/to/repo.git``, which uses the SSH " -"transfer protocol." +"Git has a number of different transfer protocols you can use. The previous " +"example uses the ``https://`` protocol, but you may also see ``git://`` or " +"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." msgstr "" "Git має декілька різних протоколів передачі даних, які ви можете " -"використовувати. У попередньому прикладі використовується протокол " -"``https://``, але ви також можете побачити ``git://`` або " -"``user@server:path/to/repo.git``, який використовує протокол передачі " -"SSH." +"використовувати. У попередньому прикладі використовується протокол ``https://" +"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." +"git``, який використовує протокол передачі SSH." #: ../../src/vcs/basics.txt:80 msgid "Making changes to the repo" @@ -161,17 +157,17 @@ msgstr "Внесення змін до репозиторію" #: ../../src/vcs/basics.txt:82 msgid "" -"At this point, you should have a *bona fide* Git repository on your local" -" machine, and a checkout or *working copy* of all of its files in front " -"of you. Typically, you'll want to start making changes and committing " -"snapshots of those changes into your repository each time the project " -"reaches a state you want to record." +"At this point, you should have a *bona fide* Git repository on your local " +"machine, and a checkout or *working copy* of all of its files in front of " +"you. Typically, you'll want to start making changes and committing snapshots " +"of those changes into your repository each time the project reaches a state " +"you want to record." msgstr "" "На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " "комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " -"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих " -"змін у вашому сховищі кожного разу, коли проект досягне стану, який ви " -"хочете зафіксувати." +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " +"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " +"зафіксувати." #: ../../src/vcs/basics.txt:88 msgid "" @@ -183,27 +179,26 @@ msgstr "" #: ../../src/vcs/basics.txt:91 msgid "" -"Tracked files are files that were in the last snapshot, as well as any " -"newly staged files; they can be unmodified, modified, or staged. In " -"short, tracked files are files that Git knows about." +"Tracked files are files that were in the last snapshot, as well as any newly " +"staged files; they can be unmodified, modified, or staged. In short, tracked " +"files are files that Git knows about." msgstr "" -"Відстежувані файли - це файли, які були в останньому знімку, а також " -"будь-які нещодавно покладені файли; вони можуть бути незміненими, " -"зміненими або покладеними. Коротше кажучи, відстежувані файли - це файли," -" про які відомо Git'у." +"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" +"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " +"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " +"Git'у." #: ../../src/vcs/basics.txt:94 msgid "" -"Untracked files are everything else -- any files in your working " -"directory that were not in your last snapshot and are not in your staging" -" area. Untracked basically means that Git sees a file you didn't have in " -"a previous snapshot (commit), and which hasn't been yet staged." +"Untracked files are everything else -- any files in your working directory " +"that were not in your last snapshot and are not in your staging area. " +"Untracked basically means that Git sees a file you didn't have in a previous " +"snapshot (commit), and which hasn't been yet staged." msgstr "" "Невідстежені файли - це все інше - будь-які файли у вашому робочому " "каталозі, яких не було у вашому останньому знімку і які не перебувають у " "вашій області сховища. По суті, це означає, що Git бачить файл, якого не " -"було у попередньому знімку (комміті), і який ще не було покладено у " -"сховище." +"було у попередньому знімку (комміті), і який ще не було покладено у сховище." #: ../../src/vcs/basics.txt:104 msgid "Checking out status of the file(s)" @@ -214,16 +209,15 @@ msgid "" "The main tool you use to determine which files are in which state is the " "``git status`` command." msgstr "" -"Основним інструментом для визначення стану файлів є команда ``git " -"status``." +"Основним інструментом для визначення стану файлів є команда ``git status``." #: ../../src/vcs/basics.txt:133 msgid "" -"Newly added *README.md* file is untracked, because it's under \"Untracked" -" files\" heading the status output." +"Newly added *README.md* file is untracked, because it's under \"Untracked " +"files\" heading the status output." msgstr "" -"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться" -" у розділі \"Файли, що не відстежуються\" у виведенні статусу." +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " +"розділі \"Файли, що не відстежуються\" у виведенні статусу." #: ../../src/vcs/basics.txt:137 msgid "Tracking new files" @@ -232,8 +226,8 @@ msgstr "Відстеження нових файлів" #: ../../src/vcs/basics.txt:139 msgid "In order to begin tracking a new file, you use the ``git add`` command." msgstr "" -"Для того, щоб почати відстеження нового файлу, скористайтеся командою " -"``git add``." +"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " +"add``." #: ../../src/vcs/basics.txt:153 msgid "" @@ -245,13 +239,13 @@ msgstr "" #: ../../src/vcs/basics.txt:157 msgid "" -"You can use wildcards, to stage multiple files at once. The most common " -"use cases is to add **all** modified files, or files inside of a specific" -" directory." +"You can use wildcards, to stage multiple files at once. The most common use " +"cases is to add **all** modified files, or files inside of a specific " +"directory." msgstr "" -"Ви можете використовувати підстановочні знаки, щоб вносити зміни до " -"кількох файлів одночасно. Найпоширенішим випадком використання є " -"додавання **усіх** змінених файлів або файлів у певному каталозі." +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " +"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " +"змінених файлів або файлів у певному каталозі." #: ../../src/vcs/basics.txt:168 msgid "Staging modified files" @@ -259,25 +253,26 @@ msgstr "Зберігання змінених файлів" #: ../../src/vcs/basics.txt:170 msgid "" -"If a staged (or already committed) file has been changed, it will be " -"moved under \"Modified\" heading. These changes wouldn't be committed " -"unless they are staged." +"If a staged (or already committed) file has been changed, it will be moved " +"under \"Modified\" heading. These changes wouldn't be committed unless they " +"are staged." msgstr "" -"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, " -"його буде переміщено у рубрику \"Змінено\". Ці зміни не будуть " -"зафіксовані, якщо вони не були поетапними." +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " +"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " +"вони не були поетапними." #: ../../src/vcs/basics.txt:190 -msgid "Changes may be added to the stage area by repeating ``git add`` command." +msgid "" +"Changes may be added to the stage area by repeating ``git add`` command." msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." #: ../../src/vcs/basics.txt:191 msgid "" -"Changes may be discard by ``git restore `` command. This action " -"will restore file to its **staged** version." +"Changes may be discard by ``git restore `` command. This action will " +"restore file to its **staged** version." msgstr "" -"Зміни можна відкинути командою ``git restore ``. Ця дія відновить " -"файл до його **попередньої** версії." +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " +"до його **попередньої** версії." #: ../../src/vcs/basics.txt:195 msgid "Committing changes" @@ -286,14 +281,14 @@ msgstr "Фіксація змін" #: ../../src/vcs/basics.txt:197 msgid "" "Now that the stage area is set up the way required, it's time to commit " -"changes. Remember that anything that is still unstaged -- any files you " -"have created or modified that you haven't run git add on since you edited" -" them -- won't go into this commit." +"changes. Remember that anything that is still unstaged -- any files you have " +"created or modified that you haven't run git add on since you edited them -- " +"won't go into this commit." msgstr "" -"Тепер, коли область змін налаштована належним чином, настав час " -"зафіксувати зміни. Пам'ятайте, що все, що ще не є стадією - будь-які " -"файли, які ви створили або змінили, але не запустили git-додаток з " -"моменту редагування, - не потраплять до цього коміту." +"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " +"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " +"створили або змінили, але не запустили git-додаток з моменту редагування, - " +"не потраплять до цього коміту." #: ../../src/vcs/basics.txt:202 msgid "The simplest way to commit is to type ``git commit``:" @@ -305,18 +300,18 @@ msgstr "Після цього запуститься обраний вами р #: ../../src/vcs/basics.txt:211 msgid "" -"This is set by your shell's EDITOR environment variable -- usually vim or" -" emacs, although you can configure it with whatever you want using the " -"``git config --global core.editor``" +"This is set by your shell's EDITOR environment variable -- usually vim or " +"emacs, although you can configure it with whatever you want using the ``git " +"config --global core.editor``" msgstr "" "Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " -"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git " -"config --global core.editor``" +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" +"global core.editor``" #: ../../src/vcs/basics.txt:215 msgid "" -"Alternatively, you can type your commit message inline with the " -"``commit`` command by specifying it after a ``-m`` flag, like this:" +"Alternatively, you can type your commit message inline with the ``commit`` " +"command by specifying it after a ``-m`` flag, like this:" msgstr "" "Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " "``commit``, вказавши його після прапорця ``-m``, як показано нижче:" @@ -324,19 +319,19 @@ msgstr "" #: ../../src/vcs/basics.txt:222 msgid "" "Although it can be amazingly useful for crafting commits exactly how you " -"want them, the staging area is sometimes a bit more complex than you need" -" in your workflow. If you want to skip the staging area, Git provides a " -"simple shortcut. Adding the ``-a`` option to the ``git commit`` command " -"makes Git automatically stage every file that is already tracked before " -"doing the commit, letting you skip the git add part:" -msgstr "" -"Хоча вона може бути надзвичайно корисною для створення коммітів саме так," -" як вам потрібно, область підготовки іноді буває трохи складнішою, ніж " -"вам потрібно у вашому робочому процесі. Якщо ви хочете пропустити область" -" підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди " -"``git commit`` змушує Git автоматично стадіювати кожен файл, який вже " -"відстежується, перед виконанням комміту, дозволяючи вам пропустити " -"частину git add:" +"want them, the staging area is sometimes a bit more complex than you need in " +"your workflow. If you want to skip the staging area, Git provides a simple " +"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " +"automatically stage every file that is already tracked before doing the " +"commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " +"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " +"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " +"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " +"commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " +"git add:" #: ../../src/vcs/basics.txt:263 msgid "Ignoring files" @@ -344,20 +339,20 @@ msgstr "Ігнорування файлів" #: ../../src/vcs/basics.txt:265 msgid "" -"Often, there is a class of files, that should not be a part of a repo. " -"You want these files to be prevent from being automatically added or even" -" shown as being untracked. These are generally files produced by loggers " -"or a build system, or some local settings for the project that shouldn't " -"be shared across other developers or maintainers. In such cases you can " -"create a *.gitignore* file. Here is the content of *.gitignore* used in " -"current repository:" +"Often, there is a class of files, that should not be a part of a repo. You " +"want these files to be prevent from being automatically added or even shown " +"as being untracked. These are generally files produced by loggers or a build " +"system, or some local settings for the project that shouldn't be shared " +"across other developers or maintainers. In such cases you can create a *." +"gitignore* file. Here is the content of *.gitignore* used in current " +"repository:" msgstr "" "Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " -"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як" -" такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " +"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " "системою збірки, або деякі локальні налаштування проекту, які не повинні " -"бути доступними для інших розробників або супровідників. У таких випадках" -" ви можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"бути доступними для інших розробників або супровідників. У таких випадках ви " +"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " "використовується у поточному сховищі:" #: ../../src/vcs/basics.txt:305 @@ -366,8 +361,8 @@ msgstr "Ці рядки означають:" #: ../../src/vcs/basics.txt:307 msgid "" -"Content within directories named \".venv\", \".env\", \"venv\" or \"env\"" -" will be ignored completely." +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " +"will be ignored completely." msgstr "" "Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " "повністю проігноровано." @@ -378,59 +373,63 @@ msgstr "Вміст каталогу \"node_modules\" буде повністю #: ../../src/vcs/basics.txt:310 msgid "" -"Any files within directories named \".vscode\" or \".idea\" will be " -"ignored completely." +"Any files within directories named \".vscode\" or \".idea\" will be ignored " +"completely." msgstr "" "Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " "повністю проігноровані." #: ../../src/vcs/basics.txt:312 msgid "Any file with name starting with hash (#) will be ignored." -msgstr "Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." +msgstr "" +"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." #: ../../src/vcs/basics.txt:313 msgid "Any file with name ending with tilda (~) will be ignored." -msgstr "Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." +msgstr "" +"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." #: ../../src/vcs/basics.txt:314 msgid "" "Content within directories named \"temp\" or \"tmp\" will be ignored " "completely." msgstr "" -"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю " -"проігноровано." +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." #: ../../src/vcs/basics.txt:316 msgid "" "Content within directories named \"_builds\", \"_build\", \"builds\" or " "\"build\" will be ignored completely." msgstr "" -"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або " -"\"build\" буде повністю проігноровано." +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " +"буде повністю проігноровано." #: ../../src/vcs/basics.txt:318 msgid "Any file with name ending with \".pot\" will be ignored." -msgstr "Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." #: ../../src/vcs/basics.txt:319 msgid "Any file with name ending with \".mo\" will be ignored." -msgstr "Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." #: ../../src/vcs/basics.txt:321 msgid "" -"Setting up a *.gitignore* file for your new repository before you get " -"going is generally a good idea so you don't accidentally commit files " -"that you really don't want in your Git repository." +"Setting up a *.gitignore* file for your new repository before you get going " +"is generally a good idea so you don't accidentally commit files that you " +"really don't want in your Git repository." msgstr "" "Створення файлу *.gitignore* для вашого нового сховища перед початком " -"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, " -"які вам насправді не потрібні у вашому Git-репозиторії." +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " +"вам насправді не потрібні у вашому Git-репозиторії." #: ../../src/vcs/basics.txt:325 msgid "" "The rules for the patterns you can put in the *.gitignore* file are as " "follows:" -msgstr "Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" +msgstr "" +"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" #: ../../src/vcs/basics.txt:327 msgid "Blank lines or lines starting with # are ignored." @@ -438,16 +437,15 @@ msgstr "Порожні рядки або рядки, що починаються #: ../../src/vcs/basics.txt:328 msgid "" -"Standard glob patterns work, and will be applied recursively throughout " -"the entire working tree." +"Standard glob patterns work, and will be applied recursively throughout the " +"entire working tree." msgstr "" -"Працюють стандартні шаблони глобусів, які будуть застосовуватися " -"рекурсивно по всьому робочому дереву." +"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " +"по всьому робочому дереву." #: ../../src/vcs/basics.txt:330 msgid "" -"You can start patterns with a forward slash (/) to avoid recursive " -"inclusion." +"You can start patterns with a forward slash (/) to avoid recursive inclusion." msgstr "" "Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " "похилої риски (/)." @@ -455,8 +453,7 @@ msgstr "" #: ../../src/vcs/basics.txt:332 msgid "You can end patterns with a forward slash (/) to specify a directory." msgstr "" -"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати " -"каталог." +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." #: ../../src/vcs/basics.txt:333 msgid "You can negate a pattern by starting it with an exclamation point (!)." @@ -464,22 +461,21 @@ msgstr "Ви можете заперечити шаблон, почавши йо #: ../../src/vcs/basics.txt:335 msgid "" -"Glob patterns are like simplified regular expressions that shells use. An" -" asterisk (\\*) matches zero or more characters; [ab] matches any " -"character inside the brackets (in this case a or b); a question mark (?) " -"matches a single character; and brackets enclosing characters separated " -"by a hyphen ([0-9]) matches any character between them (in this case 0 " -"through 9). You can also use two asterisks to match nested directories; " -"a/\\*\\*/z would match *a/z*, *a/b/z*, *a/b/c/z*, and so on." -msgstr "" -"Шаблони глобусів подібні до спрощених регулярних виразів, які " -"використовують оболонки. Зірочка (\\*) відповідає нулю або більше " -"символів; [ab] відповідає будь-якому символу всередині дужок (у цьому " -"випадку a або b); знак питання (?) відповідає одному символу; а дужки, що" -" містять символи, розділені дефісом ([0-9]), відповідають будь-якому " -"символу між ними (у цьому випадку від 0 до 9). Ви також можете " -"використовувати дві зірочки для вкладених каталогів; a/\\*\\*/z буде " -"відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +"Glob patterns are like simplified regular expressions that shells use. An " +"asterisk (\\*) matches zero or more characters; [ab] matches any character " +"inside the brackets (in this case a or b); a question mark (?) matches a " +"single character; and brackets enclosing characters separated by a hyphen " +"([0-9]) matches any character between them (in this case 0 through 9). You " +"can also use two asterisks to match nested directories; a/\\*\\*/z would " +"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " +"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " +"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " +"(?) відповідає одному символу; а дужки, що містять символи, розділені " +"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " +"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " +"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." #: ../../src/vcs/basics.txt:344 msgid "Viewing the commit history" @@ -487,81 +483,79 @@ msgstr "Перегляд історії коммітів" #: ../../src/vcs/basics.txt:346 msgid "" -"After you have created several commits, or if you have cloned a " -"repository with an existing commit history, you'll probably want to look " -"back to see what has happened. The most basic and powerful tool to do " -"this is the ``git log`` command." +"After you have created several commits, or if you have cloned a repository " +"with an existing commit history, you'll probably want to look back to see " +"what has happened. The most basic and powerful tool to do this is the ``git " +"log`` command." msgstr "" -"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище" -" з існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, " -"щоб побачити, що сталося. Найпростішим і найпотужнішим інструментом для " -"цього є команда ``git log``." +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " +"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " +"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " +"команда ``git log``." #: ../../src/vcs/basics.txt:372 msgid "" -"By default, with no arguments, ``git log`` lists the commits made in that" -" repository in reverse chronological order; that is, the most recent " -"commits show up first. As you can see, this command lists each commit " -"with its SHA-1 checksum, the author's name and email, the date written, " -"and the commit message." +"By default, with no arguments, ``git log`` lists the commits made in that " +"repository in reverse chronological order; that is, the most recent commits " +"show up first. As you can see, this command lists each commit with its SHA-1 " +"checksum, the author's name and email, the date written, and the commit " +"message." msgstr "" "За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " "зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " "найновіші комміти показуються першими. Як ви можете бачити, ця команда " -"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та " -"електронною адресою автора, датою створення та повідомленням про " -"внесення." +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " +"адресою автора, датою створення та повідомленням про внесення." #: ../../src/vcs/basics.txt:378 msgid "" -"One of the more helpful options is ``-p`` or ``--patch``, which shows the" -" difference (the *patch* output) introduced in each commit. You can also " -"limit the number of log entries displayed, such as using ``-`` to" -" show only desired number of latest entries." +"One of the more helpful options is ``-p`` or ``--patch``, which shows the " +"difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to " +"show only desired number of latest entries." msgstr "" "Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " -"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також " -"можете обмежити кількість відображуваних записів, наприклад, за допомогою" -" ``-``, щоб показати лише потрібну кількість останніх записів." +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " +"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" +"``, щоб показати лише потрібну кількість останніх записів." #: ../../src/vcs/basics.txt:414 msgid "" -"This option display the same information but with a diff directly " -"following each entry. This is very helpful for code review or to quickly " -"browse what happened during a series of commits that a collaborator has " -"added. You can also use a series of summarizing options with ``git log``." +"This option display the same information but with a diff directly following " +"each entry. This is very helpful for code review or to quickly browse what " +"happened during a series of commits that a collaborator has added. You can " +"also use a series of summarizing options with ``git log``." msgstr "" -"Цей параметр показує ту саму інформацію, але з різницею безпосередньо " -"після кожного запису. Це дуже корисно для перегляду коду або для швидкого" -" перегляду того, що сталося під час серії коммітів, доданих співавторами." -" Ви також можете скористатися низкою параметрів підсумовування за " -"допомогою ``git log``." +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " +"кожного запису. Це дуже корисно для перегляду коду або для швидкого " +"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " +"також можете скористатися низкою параметрів підсумовування за допомогою " +"``git log``." #: ../../src/vcs/basics.txt:419 msgid "" -"If you want to see some abbreviated stats for each commit, you can use " -"the ``--stat`` option:" +"If you want to see some abbreviated stats for each commit, you can use the " +"``--stat`` option:" msgstr "" -"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви " -"можете скористатися опцією ``--stat``:" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " +"скористатися опцією ``--stat``:" #: ../../src/vcs/basics.txt:443 msgid "" -"Another really useful option is ``--pretty``. This option changes the log" -" output to formats other that the default. A few prebuilt option values " -"are available for you to use. The ``oneline`` value for this option " -"prints each commit on a single line, which is useful if you're look a lot" -" of commits. In addition, the ``short``, ``full``, and ``fuller`` values " -"show the output in roughly the same format but with less or more " -"information." +"Another really useful option is ``--pretty``. This option changes the log " +"output to formats other that the default. A few prebuilt option values are " +"available for you to use. The ``oneline`` value for this option prints each " +"commit on a single line, which is useful if you're look a lot of commits. In " +"addition, the ``short``, ``full``, and ``fuller`` values show the output in " +"roughly the same format but with less or more information." msgstr "" "Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " -"формат виведення журналу на формат, відмінний від стандартного. Ви можете" -" скористатися кількома готовими значеннями цього параметра. Значення " -"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, " -"що є корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " -"``short``, ``full`` і ``fuller`` показують виведення у приблизно " -"однаковому форматі, але з меншою або більшою кількістю інформації." +"формат виведення журналу на формат, відмінний від стандартного. Ви можете " +"скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " +"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " +"форматі, але з меншою або більшою кількістю інформації." #: ../../src/vcs/basics.txt:476 msgid "Specifier" @@ -698,19 +692,19 @@ msgstr "Тема" #: ../../src/vcs/basics.txt:509 msgid "" -"The ``oneline`` and ``format`` option values are particularly useful with" -" another ``log`` option called ``--graph``. This option adds a nice " -"little ASCII graph showing your branch and merge history:" +"The ``oneline`` and ``format`` option values are particularly useful with " +"another ``log`` option called ``--graph``. This option adds a nice little " +"ASCII graph showing your branch and merge history:" msgstr "" "Значення параметрів ``online`` і ``format`` особливо корисні з іншим " "параметром ``log``, який називається ``--graph``. Цей параметр додає " -"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок" -" і злиття:" +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " +"злиття:" #: ../../src/vcs/basics.txt:538 msgid "" -"There are many more output-formatting options to ``git log``. Common " -"options to ``git log`` are:" +"There are many more output-formatting options to ``git log``. Common options " +"to ``git log`` are:" msgstr "" "Існує набагато більше варіантів форматування виводу для ``git log``. " "Загальними параметрами ``git log`` є наступні:" @@ -745,8 +739,7 @@ msgstr "--shortstat" #: ../../src/vcs/basics.txt:548 msgid "" -"Display only the changed/insertions/deletions line from the --stat " -"command." +"Display only the changed/insertions/deletions line from the --stat command." msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." #: ../../src/vcs/basics.txt:551 @@ -763,8 +756,8 @@ msgstr "--name-status" #: ../../src/vcs/basics.txt:554 msgid "" -"Show the list of files affected with added/modified/deleted information " -"as well." +"Show the list of files affected with added/modified/deleted information as " +"well." msgstr "" "Також покажіть список файлів, яких торкнулася додана/змінена/видалена " "інформація." @@ -775,11 +768,9 @@ msgstr "--abbrev-commit" #: ../../src/vcs/basics.txt:557 msgid "" -"Show only the first few characters of the SHA-1 checksum instead of all " -"40." +"Show only the first few characters of the SHA-1 checksum instead of all 40." msgstr "" -"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх" -" 40." +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." #: ../../src/vcs/basics.txt:560 msgid "--relative-date" @@ -787,11 +778,11 @@ msgstr "--relative-date" #: ../../src/vcs/basics.txt:560 msgid "" -"Display the date in a relative format (for example, \"2 weeks ago\") " -"instead of using the full date format." +"Display the date in a relative format (for example, \"2 weeks ago\") instead " +"of using the full date format." msgstr "" -"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") " -"замість повного формату дати." +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " +"повного формату дати." #: ../../src/vcs/basics.txt:563 msgid "--graph" @@ -799,11 +790,9 @@ msgstr "--graph" #: ../../src/vcs/basics.txt:563 msgid "" -"Display an ASCII graph of the branch and merge history beside the log " -"output." +"Display an ASCII graph of the branch and merge history beside the log output." msgstr "" -"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням " -"журналу." +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." #: ../../src/vcs/basics.txt:566 msgid "--pretty" @@ -811,8 +800,8 @@ msgstr "--pretty" #: ../../src/vcs/basics.txt:566 msgid "" -"Show commits in an alternate format. Option values include oneline, " -"short, full, fuller, and format (where you specify your own format)." +"Show commits in an alternate format. Option values include oneline, short, " +"full, fuller, and format (where you specify your own format)." msgstr "" "Показувати комміти в альтернативному форматі. Значення опції включають: " "online, short, full, fuller і format (де ви можете вказати свій власний " @@ -824,7 +813,8 @@ msgstr "--oneline" #: ../../src/vcs/basics.txt:570 msgid "Shorthand for --pretty=oneline --abbrev-commit used together." -msgstr "Скорочення для --pretty=online --abbrev-commit, що використовується разом." +msgstr "" +"Скорочення для --pretty=online --abbrev-commit, що використовується разом." #: ../../src/vcs/basics.txt:575 msgid "Limiting log output" @@ -833,50 +823,50 @@ msgstr "Обмеження виводу журналу" #: ../../src/vcs/basics.txt:577 msgid "" "In addition to output-formatting options, ``git log`` takes a number of " -"useful limiting options; that is options that let you show only a subset " -"of commits. You've seen one such option already -- the ``-`` " -"(e.g. ``-2`` or ``-10``) option, which displays only the given number of " -"latest commits." +"useful limiting options; that is options that let you show only a subset of " +"commits. You've seen one such option already -- the ``-`` (e.g. " +"``-2`` or ``-10``) option, which displays only the given number of latest " +"commits." msgstr "" "На додаток до параметрів форматування виводу, ``git log`` приймає ряд " "корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " -"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - " -"``-<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" +"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " "кількість останніх коммітів." #: ../../src/vcs/basics.txt:591 msgid "" -"However, the time-limiting options such as ``--since`` and ``--until`` " -"are very useful. For example, the command to get the list of commits made" -" in the last two weeks:" +"However, the time-limiting options such as ``--since`` and ``--until`` are " +"very useful. For example, the command to get the list of commits made in the " +"last two weeks:" msgstr "" -"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і " -"``--until``. Наприклад, команда для отримання списку коммітів, зроблених " -"за останні два тижні:" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" +"until``. Наприклад, команда для отримання списку коммітів, зроблених за " +"останні два тижні:" #: ../../src/vcs/basics.txt:599 msgid "" -"This command works with lots of formats - you can specify a specific date" -" like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"This command works with lots of formats - you can specify a specific date " +"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " "minutes ago\"``." msgstr "" -"Ця команда працює з багатьма форматами - ви можете вказати конкретну " -"дату, наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 " -"роки 1 день 3 хвилини тому\"``." +"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " +"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " +"день 3 хвилини тому\"``." #: ../../src/vcs/basics.txt:602 msgid "" -"The last really useful option to pass to ``git log`` as a filter is a " -"path. If you specify a directory or file name, you can limit the log " -"output to commits that introduced a change to those files. This is always" -" the last option and is generally preceded by double dashes (``--``) to " -"separate the paths from the options:" +"The last really useful option to pass to ``git log`` as a filter is a path. " +"If you specify a directory or file name, you can limit the log output to " +"commits that introduced a change to those files. This is always the last " +"option and is generally preceded by double dashes (``--``) to separate the " +"paths from the options:" msgstr "" -"Останньою дійсно корисною опцією, яку можна передати ``git log`` як " -"фільтр, є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете " -"обмежити виведення журналу лише тими комітами, які внесли зміни до цих " -"файлів. Це завжди останній параметр, і йому зазвичай передують подвійні " -"тире (``--``), щоб відокремити шлях від параметрів:" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " +"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " +"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " +"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " +"щоб відокремити шлях від параметрів:" #: ../../src/vcs/basics.txt:621 msgid "Undoing things" @@ -888,16 +878,16 @@ msgstr "На будь-якому етапі ви можете захотіти #: ../../src/vcs/basics.txt:625 msgid "" -"One of the common undos takes place when you commit too early and " -"possibly forget to add some files, or you mess up your commit message. If" -" you want to redo that commit, make the additional changes you forgot, " -"stage them, and commit again using the ``--amend`` option:" +"One of the common undos takes place when you commit too early and possibly " +"forget to add some files, or you mess up your commit message. If you want to " +"redo that commit, make the additional changes you forgot, stage them, and " +"commit again using the ``--amend`` option:" msgstr "" -"Одне з найпоширеніших випадків скасування відбувається, коли ви " -"коммітуєте занадто рано і, можливо, забуваєте додати деякі файли, або ви " -"псуєте своє повідомлення про коммітування. Якщо ви хочете повторити " -"фіксацію, внесіть додаткові зміни, про які ви забули, збережіть їх і " -"зафіксуйте ще раз, використовуючи опцію ``--amend``:" +"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " +"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " +"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " +"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " +"використовуючи опцію ``--amend``:" #: ../../src/vcs/basics.txt:634 msgid "E.g." @@ -911,13 +901,13 @@ msgstr "Скасування додавання файла до індексу" msgid "" "The next two sections demonstrate how to work with your staging area and " "working directory changes. The nice part is that the command you use to " -"determine the state of those two areas also reminds you how to undo " -"changes to them." +"determine the state of those two areas also reminds you how to undo changes " +"to them." msgstr "" -"У наступних двох розділах продемонстровано, як працювати зі змінами у " -"вашій збірці та робочому каталозі. Приємним моментом є те, що команда, за" -" допомогою якої ви визначаєте стан цих двох областей, також нагадує вам " -"про те, як скасувати внесені до них зміни." +"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " +"збірці та робочому каталозі. Приємним моментом є те, що команда, за " +"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " +"те, як скасувати внесені до них зміни." #: ../../src/vcs/basics.txt:676 msgid "Unmodifiyng a modified file" @@ -925,15 +915,14 @@ msgstr "Скасування модифікації зміненого файл #: ../../src/vcs/basics.txt:678 msgid "" -"What if you realize that you don't want to keep your changes to some " -"file? You can easily unmodify it -- **revert** it back to what it looked " -"like when you last committed. ``git status`` also tells you how to do " -"that:" +"What if you realize that you don't want to keep your changes to some file? " +"You can easily unmodify it -- **revert** it back to what it looked like when " +"you last committed. ``git status`` also tells you how to do that:" msgstr "" -"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь " -"файлі? Ви можете легко скасувати зміни - **повернути** його до того, як " -"він виглядав під час останнього компонування. ``git status`` також покаже" -" вам, як це зробити:" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " +"Ви можете легко скасувати зміни - **повернути** його до того, як він " +"виглядав під час останнього компонування. ``git status`` також покаже вам, " +"як це зробити:" #: ../../src/vcs/basics.txt:686 msgid "It tells you pretty explicitly how to discard the changes you've make." @@ -949,23 +938,22 @@ msgid "" "version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " "reset`` for many undo operations." msgstr "" -"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0," -" Git використовуватиме ``git restore`` замість ``git reset`` для багатьох" -" операцій скасування." +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " +"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " +"операцій скасування." #: ../../src/vcs/basics.txt:737 msgid "" -"It’s important to understand that git restore is a dangerous " -"command. Any local changes you made to that file are gone -- Git just " -"replaced that file with the last staged or committed version. Don't ever " -"use this command unless you absolutely know that you don’t want those " -"unsaved local changes." +"It’s important to understand that git restore is a dangerous command. " +"Any local changes you made to that file are gone -- Git just replaced that " +"file with the last staged or committed version. Don't ever use this command " +"unless you absolutely know that you don’t want those unsaved local changes." msgstr "" -"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. " -"Усі локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git " -"просто замінить цей файл на останню версію, що перебуває у стадії " -"виконання або фіксації. Ніколи не використовуйте цю команду, якщо ви " -"точно не знаєте, що вам не потрібні ці незбережені локальні зміни." +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " +"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " +"замінить цей файл на останню версію, що перебуває у стадії виконання або " +"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " +"вам не потрібні ці незбережені локальні зміни." #: ../../src/vcs/branch.txt:-1 msgid "version, control, system, vcs, git, branch, merge, cherry-pick" @@ -981,27 +969,27 @@ msgstr "Про гілки" #: ../../src/vcs/branch.txt:13 msgid "" -"To really understand the way Git does branching, we need to take a step " -"back and examine how Git stores its data. Git doesn't store data as a " -"series of changesets or differences, but instead as a series of " -"snapshots. When you make a commit, Git stores a commit object that " -"contains a pointer to the snapshot of the content you staged. This object" -" also contains the author's name and email address, the message that you " -"typed, and pointers to the commit or commits that directly came before " -"this commit (its parent or parents): zero parents for the initial commit," -" one parent for a normal commit, and multiple parents for a commit that " -"results from a merge of two or more branches." -msgstr "" -"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам " -"потрібно зробити крок назад і розглянути, як Git зберігає свої дані. Git " -"зберігає дані не у вигляді серії наборів змін або відмінностей, а у " -"вигляді серії знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, " -"який містить вказівник на створений вами знімок вмісту. Цей об'єкт також " -"містить ім'я та адресу електронної пошти автора, повідомлення, яке ви " -"набрали, і вказівники на комміт або комміти, які безпосередньо передували" -" цьому комміту (його батька або батьків): нульовий батько для початкового" -" комміту, один батько для звичайного комміту і кілька батьків для " -"комміту, який є результатом злиття двох або більше гілок." +"To really understand the way Git does branching, we need to take a step back " +"and examine how Git stores its data. Git doesn't store data as a series of " +"changesets or differences, but instead as a series of snapshots. When you " +"make a commit, Git stores a commit object that contains a pointer to the " +"snapshot of the content you staged. This object also contains the author's " +"name and email address, the message that you typed, and pointers to the " +"commit or commits that directly came before this commit (its parent or " +"parents): zero parents for the initial commit, one parent for a normal " +"commit, and multiple parents for a commit that results from a merge of two " +"or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " +"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " +"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " +"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " +"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " +"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " +"на комміт або комміти, які безпосередньо передували цьому комміту (його " +"батька або батьків): нульовий батько для початкового комміту, один батько " +"для звичайного комміту і кілька батьків для комміту, який є результатом " +"злиття двох або більше гілок." #: ../../src/vcs/branch.txt:28 msgid "" @@ -1011,11 +999,11 @@ msgid "" "made. Every time you commit, the master branch pointer moves forward " "automatically." msgstr "" -"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих " -"коммітів. Стандартна назва гілки у Git'і - master. Коли ви починаєте " -"робити комміти, ви отримуєте головну гілку, яка вказує на останній " -"зроблений вами комміт. Кожного разу, коли ви робите комміт, вказівник " -"головної гілки автоматично пересувається вперед." +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " +"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " +"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " +"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " +"пересувається вперед." #: ../../src/vcs/branch.txt:38 msgid "Branch management" @@ -1023,26 +1011,25 @@ msgstr "Управління гілками" #: ../../src/vcs/branch.txt:40 msgid "" -"The ``git branch`` command does more that create and delete branches. If " -"you run it with no arguments, you get a simple listing of your current " -"branches:" +"The ``git branch`` command does more that create and delete branches. If you " +"run it with no arguments, you get a simple listing of your current branches:" msgstr "" -"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки." -" Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " +"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " "поточних гілок:" #: ../../src/vcs/branch.txt:55 msgid "" -"To see all the branches that contain work you haven't yet merged in, use " -"``--no-merged`` option:" +"To see all the branches that contain work you haven't yet merged in, use ``--" +"no-merged`` option:" msgstr "" -"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися," -" використовуйте опцію ``--no-merged``:" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " +"використовуйте опцію ``--no-merged``:" #: ../../src/vcs/branch.txt:65 msgid "" -"Branches listed in the output has work, that isn't merged to current " -"branch. So, deleting them via ``git branch -d`` will fail." +"Branches listed in the output has work, that isn't merged to current branch. " +"So, deleting them via ``git branch -d`` will fail." msgstr "" "У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " "гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." @@ -1056,20 +1043,20 @@ msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." msgstr "" -"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший" -" з них - використання команди ``git branch``." +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " +"них - використання команди ``git branch``." #: ../../src/vcs/branch.txt:78 msgid "" -"Pointer to a parent commit is optional. By default the parent commit is " -"set to the latest one available (HEAD pointer) at the moment of the " -"branch creation. You can also switch to the newly created branch just " -"after its creation using:" +"Pointer to a parent commit is optional. By default the parent commit is set " +"to the latest one available (HEAD pointer) at the moment of the branch " +"creation. You can also switch to the newly created branch just after its " +"creation using:" msgstr "" "Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " -"батьківський коміт встановлюється на найновіший доступний (вказівник " -"HEAD) на момент створення гілки. Ви також можете переключитися на " -"новостворену гілку одразу після її створення за допомогою:" +"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " +"на момент створення гілки. Ви також можете переключитися на новостворену " +"гілку одразу після її створення за допомогою:" #: ../../src/vcs/branch.txt:88 msgid "Switching branches" @@ -1085,17 +1072,17 @@ msgstr "Основи розгалуження та злиття" #: ../../src/vcs/branch.txt:111 msgid "" -"First, let's say you're working on your project and have a couple of " -"commits already on the ``master`` branch. You've decided that you're " -"going to work on issue #53 in whatever issue-tracking system your company" -" uses. To create a new branch and switch to it at the same time, you can " -"run the ``git checkout`` command with the ``-b`` switch:" +"First, let's say you're working on your project and have a couple of commits " +"already on the ``master`` branch. You've decided that you're going to work " +"on issue #53 in whatever issue-tracking system your company uses. To create " +"a new branch and switch to it at the same time, you can run the ``git " +"checkout`` command with the ``-b`` switch:" msgstr "" -"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте " -"кілька комітів на гілці ``master``. Ви вирішили, що будете працювати над " -"issue #53 в будь-якій системі відстеження проблем, яку використовує ваша " -"компанія. Щоб створити нову гілку і одночасно переключитися на неї, ви " -"можете виконати команду ``git checkout`` з ключем ``-b``:" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " +"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " +"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " +"створити нову гілку і одночасно переключитися на неї, ви можете виконати " +"команду ``git checkout`` з ключем ``-b``:" #: ../../src/vcs/branch.txt:122 msgid "This is shorthand for:" @@ -1104,24 +1091,22 @@ msgstr "Це скорочено означає:" #: ../../src/vcs/branch.txt:129 msgid "" "In deed this creates a new branch pointer, aimed to the latest commit " -"present on ``master`` branch. But, from now your branch is " -"``feature/issue53``. So, doing commits moves the feature branch pointer " -"forward, because you have it checkout out (that is, your ``HEAD`` is " -"pointing to it)." +"present on ``master`` branch. But, from now your branch is ``feature/" +"issue53``. So, doing commits moves the feature branch pointer forward, " +"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." msgstr "" -"Насправді це створить новий покажчик гілки, спрямований на останню " -"фіксацію, наявну у гілці ``master``. Але відтепер ваша гілка називається " -"``feature/issue53``. Отже, виконання коммітів пересуває вказівник гілки " -"feature вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на " -"неї)." +"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " +"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" +"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " +"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." #: ../../src/vcs/branch.txt:134 msgid "" "Now, lets assume the \"issue53\" is fixed, and you need to bring commits " "from the ``feature/issue53`` branch back to ``master``." msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести " -"коміти з гілки ``feature/issue53`` назад до ``master``." +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " +"з гілки ``feature/issue53`` назад до ``master``." #: ../../src/vcs/branch.txt:138 msgid "Merging branches" @@ -1129,71 +1114,71 @@ msgstr "Злиття гілок" #: ../../src/vcs/branch.txt:140 msgid "" -"You need to switch back to ``master`` branch and use ``git merge`` " -"command, to merge changes (commits) from the source branch into target." +"You need to switch back to ``master`` branch and use ``git merge`` command, " +"to merge changes (commits) from the source branch into target." msgstr "" -"Вам потрібно повернутися до гілки ``master`` і скористатися командою " -"``git merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." +"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " +"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." #: ../../src/vcs/branch.txt:152 msgid "" "You'll notice phrase \"fast-forward\" in that merge. Because the commit " "pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the " -"pointer forward." +"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"forward." msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки " -"коміт, на який вказує гілка ``feature/issue53``, до якої ви приєдналися, " -"був безпосередньо перед останнім комітом у гілці ``master``, Git просто " -"пересуне вказівник вперед." +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " +"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " +"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " +"вказівник вперед." #: ../../src/vcs/branch.txt:156 msgid "" "Changes from ``feature/issue53`` are now in the snapshot of the commit " "pointed to by the ``master`` branch." msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який " -"вказує гілка ``master``." +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"гілка ``master``." #: ../../src/vcs/branch.txt:163 msgid "" -"Now, lets assume another developer started working on ``feature/issue54``" -" at the same time. And there are few commits on this feature branch. " -"Suppose, the developer decided that work on **issue54** is finished and " -"they want to merge their feature branch into ``master``." +"Now, lets assume another developer started working on ``feature/issue54`` at " +"the same time. And there are few commits on this feature branch. Suppose, " +"the developer decided that work on **issue54** is finished and they want to " +"merge their feature branch into ``master``." msgstr "" -"Тепер припустимо, що інший розробник почав працювати над " -"``feature/issue54`` в той самий час. І у цій гілці мало комітів. " -"Припустимо, що розробник вирішив, що робота над **issue54** завершена і " -"він хоче об'єднати свою гілку з ``master``." +"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " +"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " +"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " +"з ``master``." #: ../../src/vcs/branch.txt:179 msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this " -"case, development history has diverged from some older point. Because the" -" commit on the branch you're on isn't a direct ancestor of the branch " -"you're merging in, Git has to do some work. In this case, Git does a " -"simple three-way merge, using two snapshots pointed to by the branch tips" -" and the common ancestor of the two." +"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"development history has diverged from some older point. Because the commit " +"on the branch you're on isn't a direct ancestor of the branch you're merging " +"in, Git has to do some work. In this case, Git does a simple three-way " +"merge, using two snapshots pointed to by the branch tips and the common " +"ancestor of the two." msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку" -" історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " -"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви " -"виконуєте злиття, Git'у доведеться виконати деяку роботу. У цьому випадку" -" Git виконує просте тристороннє злиття, використовуючи два знімки, на які" -" вказують кінчики гілок, і їхнього спільного предка." +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " +"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " +"просте тристороннє злиття, використовуючи два знімки, на які вказують " +"кінчики гілок, і їхнього спільного предка." #: ../../src/vcs/branch.txt:186 msgid "" "Instead of just moving the branch pointer forward, Git creates a new " -"snapshot that results from this three-way merge and automatically creates" -" a new commit that points to it. This is referred to as a *merge commit*," -" and is a special in that it has more than one parent." +"snapshot that results from this three-way merge and automatically creates a " +"new commit that points to it. This is referred to as a *merge commit*, and " +"is a special in that it has more than one parent." msgstr "" "Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " -"новий знімок, який є результатом цього тристороннього злиття, і " -"автоматично створює новий коміт, який вказує на нього. Це називається " -"*коммітом злиття*, і він особливий тим, що має більше одного батька." +"новий знімок, який є результатом цього тристороннього злиття, і автоматично " +"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " +"і він особливий тим, що має більше одного батька." #: ../../src/vcs/branch.txt:196 msgid "Merge conflicts" @@ -1201,52 +1186,50 @@ msgstr "Конфлікти об'єднання" #: ../../src/vcs/branch.txt:198 msgid "" -"Occasionally, the merge process doesn't go smoothly. If the same part of " -"the same file is changed differently in the two branches you're merging, " -"Git won't be able to merge them cleanly." +"Occasionally, the merge process doesn't go smoothly. If the same part of the " +"same file is changed differently in the two branches you're merging, Git " +"won't be able to merge them cleanly." msgstr "" -"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, " -"які ви об'єднуєте, однакова частина одного і того ж файлу змінена " -"по-різному, Git не зможе об'єднати їх чисто." +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " +"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " +"Git не зможе об'єднати їх чисто." #: ../../src/vcs/branch.txt:209 msgid "" "Git hasn't automatically created a new merge commit. It has paused the " -"process while you resolve the conflict. If you want to see which files " -"are unmerged at any point after a merge conflict, you can run ``git " -"status``:" +"process while you resolve the conflict. If you want to see which files are " +"unmerged at any point after a merge conflict, you can run ``git status``:" msgstr "" -"Git не створив автоматично новий коміт злиття. Він призупинив процес, " -"поки ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було " -"від'єднано після конфлікту злиття, ви можете запустити ``git status``:" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " +"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " +"після конфлікту злиття, ви можете запустити ``git status``:" #: ../../src/vcs/branch.txt:228 msgid "" "Anything that has merge conflicts and hasn't been resolved is listed as " -"unmerged. Git adds standard conflict-resolution markers to the files that" -" have conflicts, so you can open them manually and resolve those " -"conflicts. Your file contains a section that looks something like this:" +"unmerged. Git adds standard conflict-resolution markers to the files that " +"have conflicts, so you can open them manually and resolve those conflicts. " +"Your file contains a section that looks something like this:" msgstr "" "Все, що має конфлікти злиття, які не було вирішено, позначається як не " -"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, " -"які мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці " -"конфлікти. Ваш файл містить розділ, який виглядає приблизно так:" +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " +"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " +"Ваш файл містить розділ, який виглядає приблизно так:" #: ../../src/vcs/branch.txt:243 msgid "" -"This means the version in ``HEAD`` (your ``master`` branch, because that " -"was what you had checked out when you ran merge command) is the top part " -"of that block (everything above the \"=======\"), while the version in " -"``vcs`` branch looks like everything in the bottom part. In order to " -"resolve the conflict, you have to either choose one side or the other or " -"merge the contents yourself." +"This means the version in ``HEAD`` (your ``master`` branch, because that was " +"what you had checked out when you ran merge command) is the top part of that " +"block (everything above the \"=======\"), while the version in ``vcs`` " +"branch looks like everything in the bottom part. In order to resolve the " +"conflict, you have to either choose one side or the other or merge the " +"contents yourself." msgstr "" -"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що " -"саме її ви перевірили, коли виконували команду merge) - це верхня частина" -" блоку (все, що вище \"=======\"), тоді як версія у гілці ``vcs`` " -"виглядає як все, що знаходиться у нижній частині. Для того, щоб вирішити " -"конфлікт, вам доведеться або стати на чийсь бік, або об'єднати вміст " -"самостійно." +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " +"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " +"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " +"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " +"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." #: ../../src/vcs/branch.txt:249 msgid "When conflicts are resolved, you can run ``git status`` command again:" @@ -1256,13 +1239,12 @@ msgstr "" #: ../../src/vcs/branch.txt:262 msgid "" -"If you're happy with that, and you verify that everything that had " -"conflicts has been staged, you can run ``git commit`` for finalize the " -"merge commit." +"If you're happy with that, and you verify that everything that had conflicts " +"has been staged, you can run ``git commit`` for finalize the merge commit." msgstr "" -"Якщо вас все влаштовує, і ви переконалися, що все, що викликало " -"конфлікти, було усунуто, ви можете запустити ``git commit`` для " -"остаточного завершення злиття." +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " +"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " +"злиття." #: ../../src/vcs/branch.txt:266 msgid "Rebasing" @@ -1273,8 +1255,8 @@ msgid "" "In Git, there two main ways to integrate changes from one branch into " "another: the ``merge`` and the ``rebase``." msgstr "" -"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу:" -" \"злиття\" і \"перебазування\"." +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " +"\"злиття\" і \"перебазування\"." #: ../../src/vcs/branch.txt:271 msgid "" @@ -1286,10 +1268,10 @@ msgstr "" #: ../../src/vcs/branch.txt:278 msgid "" -"The easiest way to integrate the branches, as we've already covered, is " -"the ``merge`` command. It performs a three-way merge between the two " -"latest branch snapshots, and the most recent common ancestor of the two, " -"creating a new snapshot (and commit)." +"The easiest way to integrate the branches, as we've already covered, is the " +"``merge`` command. It performs a three-way merge between the two latest " +"branch snapshots, and the most recent common ancestor of the two, creating a " +"new snapshot (and commit)." msgstr "" "Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " "``merge``. Вона виконує тристороннє злиття між двома останніми знімками " @@ -1297,41 +1279,39 @@ msgstr "" #: ../../src/vcs/branch.txt:283 msgid "" -"However, there is another way: you can take the patch of the change that " -"was introduced in ``master`` and reapply it on top of ``feature``. In " -"Git, this is called *rebasing*. With ``rebase`` command, you can take all" -" the changes that were committed on one branch and replay them on a " -"different branch." +"However, there is another way: you can take the patch of the change that was " +"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " +"is called *rebasing*. With ``rebase`` command, you can take all the changes " +"that were committed on one branch and replay them on a different branch." msgstr "" -"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено" -" до ``master``, і повторно застосувати його поверх ``feature``. У Git'і " -"це називається *rebasing*. За допомогою команди ``rebase`` ви можете " -"взяти всі зміни, які були зафіксовані на одній гілці, і відтворити їх на " -"іншій гілці." +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " +"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " +"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " +"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." #: ../../src/vcs/branch.txt:295 msgid "" -"This operation works by going to the common ancestor of the two branches," -" getting the diff introduced by each commit of the branch you're on, " -"saving those diffs to temporary files, resetting the current branch to " -"the same commit as the branch you are rebasing onto, and finally applying" -" each change in turn." +"This operation works by going to the common ancestor of the two branches, " +"getting the diff introduced by each commit of the branch you're on, saving " +"those diffs to temporary files, resetting the current branch to the same " +"commit as the branch you are rebasing onto, and finally applying each change " +"in turn." msgstr "" "Ця операція виконується шляхом переходу до спільного предка двох гілок, " "отримання відмінностей, внесених кожним коммітом гілки, на якій ви " "перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " -"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і," -" нарешті, застосування кожної зміни по черзі." +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " +"нарешті, застосування кожної зміни по черзі." #: ../../src/vcs/branch.txt:306 msgid "" -"Other maintainers prefer to rebase (or cherry-pick) contributed work on " -"top of their ``master`` branch, rather then merging it in, to keep a " -"mostly linear history." +"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " +"of their ``master`` branch, rather then merging it in, to keep a mostly " +"linear history." msgstr "" "Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, " -"щоб об'єднувати їх, щоб зберегти переважно лінійну історію." +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " +"об'єднувати їх, щоб зберегти переважно лінійну історію." #: ../../src/vcs/branch.txt:311 msgid "Cherry-picking" @@ -1340,21 +1320,21 @@ msgstr "Cherry-picking" #: ../../src/vcs/branch.txt:313 msgid "" "The other way to move introduced work from one branch to another is to " -"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. " -"It takes the patch that was introduced in a commit and tries to reapply " -"it on the branch you're currently on. This is useful if you have a number" -" of commits on a topic branch and you want to integrate only one of them," -" or if you only have one commit on a topic branch and you'd prefer to " -"cherry-pick it rather than run rebase." +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " +"takes the patch that was introduced in a commit and tries to reapply it on " +"the branch you're currently on. This is useful if you have a number of " +"commits on a topic branch and you want to integrate only one of them, or if " +"you only have one commit on a topic branch and you'd prefer to cherry-pick " +"it rather than run rebase." msgstr "" "Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " "\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " "відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви " -"зараз перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці " -"теми і хочете інтегрувати лише один з них, або якщо ви маєте лише один " -"комміт у гілці теми і вважаєте за краще вибрати його замість того, щоб " -"запускати rebase." +"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " +"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " +"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " +"rebase." #: ../../src/vcs/branch.txt:333 msgid "Branching strategies" @@ -1369,55 +1349,53 @@ msgid "" "branches, minimizes conflicts, and enables a smooth and structured " "development workflow." msgstr "" -"Стратегія розгалуження в системах контролю версій визначає, як " -"створюються, управляються та використовуються гілки в процесі розробки " -"проекту. Вона допомагає командам ефективно співпрацювати, ізолювати зміни" -" та організовувати зусилля з розробки. Хороша стратегія розгалуження " -"забезпечує чіткість у роботі з гілками, мінімізує конфлікти та уможливлює" -" плавний і структурований робочий процес розробки." +"Стратегія розгалуження в системах контролю версій визначає, як створюються, " +"управляються та використовуються гілки в процесі розробки проекту. Вона " +"допомагає командам ефективно співпрацювати, ізолювати зміни та " +"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " +"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " +"структурований робочий процес розробки." #: ../../src/vcs/branch.txt:342 msgid "" -"GitFlow is a popular branching strategy that provides a well-defined " -"model for managing branches in a Git repository. It was introduced by " -"Vincent Driessen and is based on the idea of using two main branches: " -"\"master\" and \"develop.\"" +"GitFlow is a popular branching strategy that provides a well-defined model " +"for managing branches in a Git repository. It was introduced by Vincent " +"Driessen and is based on the idea of using two main branches: \"master\" and " +"\"develop.\"" msgstr "" "GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " "модель для управління гілками в Git-репозиторії. Вона була представлена " -"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання " -"двох основних гілок: \"master\" і \"develop\"." +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " +"основних гілок: \"master\" і \"develop\"." #: ../../src/vcs/branch.txt:346 msgid "" -"**Master Branch**: The \"master\" branch represents the stable version of" -" the codebase. It should always contain production-ready code and be free" -" from any major issues. The \"master\" branch is protected, and only " -"release versions are merged into it." +"**Master Branch**: The \"master\" branch represents the stable version of " +"the codebase. It should always contain production-ready code and be free " +"from any major issues. The \"master\" branch is protected, and only release " +"versions are merged into it." msgstr "" -"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової" -" бази. Вона завжди повинна містити готовий до використання код і не " -"містити жодних серйозних проблем. Майстер-гілка захищена, і в неї " -"зливаються тільки релізні версії." +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " +"бази. Вона завжди повинна містити готовий до використання код і не містити " +"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " +"релізні версії." #: ../../src/vcs/branch.txt:350 msgid "" -"**Develop Branch**: The \"develop\" branch is where the ongoing " -"development and integration of features take place. It serves as the " -"integration branch for various feature branches and should also contain a" -" stable version of the code." +"**Develop Branch**: The \"develop\" branch is where the ongoing development " +"and integration of features take place. It serves as the integration branch " +"for various feature branches and should also contain a stable version of the " +"code." msgstr "" -"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається " -"постійна розробка та інтеграція функцій. Вона слугує інтеграційною гілкою" -" для різних функціональних гілок, а також повинна містити стабільну " -"версію коду." +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " +"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " +"функціональних гілок, а також повинна містити стабільну версію коду." #: ../../src/vcs/branch.txt:354 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " -"\"feature\" branch is created off the \"develop\" branch. These branches " -"are short-lived and exist only for the duration of the feature " -"development." +"\"feature\" branch is created off the \"develop\" branch. These branches are " +"short-lived and exist only for the duration of the feature development." msgstr "" "**Вітки функцій**: Для кожної нової функції або виправлення помилки " "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " @@ -1426,8 +1404,8 @@ msgstr "" #: ../../src/vcs/branch.txt:357 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " -"ready for a release, a \"release\" branch is created. The release branch " -"is used for testing, bug fixing, and preparing for deployment." +"ready for a release, a \"release\" branch is created. The release branch is " +"used for testing, bug fixing, and preparing for deployment." msgstr "" "**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " "створюється гілка \"release\". Релізна гілка використовується для " @@ -1440,25 +1418,23 @@ msgid "" "allows for a quick fix without affecting ongoing development on the " "\"develop\" branch." msgstr "" -"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну " -"проблему, на основі основної гілки створюється гілка \"hotfix\". Це " -"дозволяє швидко виправити проблему, не впливаючи на поточну розробку на " -"гілці \"develop\"." +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " +"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " +"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." #: ../../src/vcs/branch.txt:365 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " -"remain stable, and new features and bug fixes are integrated smoothly " -"before being released. This strategy is particularly useful for projects " -"with regular releases and a team working on multiple features " -"concurrently." +"remain stable, and new features and bug fixes are integrated smoothly before " +"being released. This strategy is particularly useful for projects with " +"regular releases and a team working on multiple features concurrently." msgstr "" "GitFlow забезпечує структурований підхід до управління розгалуженням у " "середовищі спільної розробки. Він гарантує, що основні гілки залишаються " -"стабільними, а нові функції та виправлення помилок плавно інтегруються " -"перед випуском. Ця стратегія особливо корисна для проектів з регулярними " -"випусками і командою, яка працює над декількома функціями одночасно." +"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " +"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " +"і командою, яка працює над декількома функціями одночасно." #: ../../src/vcs/github.txt:-1 msgid "version, control, system, vcs, git, github" @@ -1483,15 +1459,15 @@ msgstr "Налаштування та конфігурація акаунта" #: ../../src/vcs/github.txt:18 msgid "" "The first thing you need to do is set up a free user account. Visit " -"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through " -"the account creation process. Just follow the hints and provide an email " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " +"account creation process. Just follow the hints and provide an email " "address, username and a strong password." msgstr "" "Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " -"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\"." -" GitHub проведе вас через процес створення облікового запису. Просто " -"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я " -"користувача та надійний пароль." +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " +"GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " +"та надійний пароль." #: ../../src/vcs/github.txt:24 msgid "About authentication to GitHub" @@ -1499,13 +1475,13 @@ msgstr "Про автентифікацію на GitHub" #: ../../src/vcs/github.txt:27 msgid "" -"Starting in March 2023 and through the end of 2023, GitHub gradually " -"began to require all users who contribute code on GitHub to enable two-" -"factor authentication (2FA)." +"Starting in March 2023 and through the end of 2023, GitHub gradually began " +"to require all users who contribute code on GitHub to enable two-factor " +"authentication (2FA)." msgstr "" -"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово " -"почав вимагати від усіх користувачів, які публікують код на GitHub, " -"увімкнути двофакторну автентифікацію (2FA)." +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " +"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " +"двофакторну автентифікацію (2FA)." #: ../../src/vcs/github.txt:32 msgid "Connect with SSH" @@ -1517,10 +1493,10 @@ msgid "" "(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " "using a private key file on your local machine." msgstr "" -"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх " -"за допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH " -"ви автентифікуєтесь за допомогою файлу приватного ключа на вашому " -"локальному комп'ютері." +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " +"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " +"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " +"комп'ютері." #: ../../src/vcs/github.txt:39 msgid "Generating a new SSH key" @@ -1528,13 +1504,13 @@ msgstr "Генерація нового SSH-ключа" #: ../../src/vcs/github.txt:41 msgid "" -"You can generate a new SSH key on your local machine. After you do that, " -"you can add the **public** key to your account on GitHub to enable " +"You can generate a new SSH key on your local machine. After you do that, you " +"can add the **public** key to your account on GitHub to enable " "authentication for Git operations over SSH." msgstr "" -"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після " -"цього ви можете додати **public** ключ до свого облікового запису на " -"GitHub, щоб увімкнути автентифікацію для операцій з Git'ом через SSH." +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " +"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " +"увімкнути автентифікацію для операцій з Git'ом через SSH." #: ../../src/vcs/github.txt:45 msgid "Open terminal (git-bash will suite for Windows users)" @@ -1554,19 +1530,17 @@ msgstr "" #: ../../src/vcs/github.txt:60 msgid "" -"When you're prompted to \"Enter a file in which to save the key\", you " -"can press **Enter** to accept the default file location." +"When you're prompted to \"Enter a file in which to save the key\", you can " +"press **Enter** to accept the default file location." msgstr "" "Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " "натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." #: ../../src/vcs/github.txt:67 msgid "" -"Type a secure passphrase, if you want -- this is an extra layer of " -"security." +"Type a secure passphrase, if you want -- this is an extra layer of security." msgstr "" -"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень " -"безпеки." +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." #: ../../src/vcs/github.txt:75 msgid "This will create a new SSH key, using the provided email as label." @@ -1576,8 +1550,8 @@ msgstr "" #: ../../src/vcs/github.txt:77 msgid "" -"Navigate to ssh key location -- \".ssh\" folder at your homedir by " -"default and ensure there are two files generated:" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " +"and ensure there are two files generated:" msgstr "" "Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " "каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" @@ -1588,7 +1562,8 @@ msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощ #: ../../src/vcs/github.txt:81 msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" -msgstr "**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." +msgstr "" +"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." #: ../../src/vcs/github.txt:84 msgid "" @@ -1600,11 +1575,11 @@ msgstr "" #: ../../src/vcs/github.txt:87 msgid "" -"The public key is what you add to servers or services to which you want " -"to authenticate using your private key." +"The public key is what you add to servers or services to which you want to " +"authenticate using your private key." msgstr "" -"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких " -"ви хочете пройти автентифікацію за допомогою вашого закритого ключа." +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " +"хочете пройти автентифікацію за допомогою вашого закритого ключа." #: ../../src/vcs/github.txt:91 msgid "Adding your SSH key to the ssh-agent and GitHub" @@ -1612,16 +1587,16 @@ msgstr "Додавання SSH-ключа до ssh-агента та GitHub" #: ../../src/vcs/github.txt:93 msgid "" -"Before adding a new SSH key to the ssh-agent to manage your keys, you " -"should have checked for existing SSH keys and generated SSH keys." +"Before adding a new SSH key to the ssh-agent to manage your keys, you should " +"have checked for existing SSH keys and generated SSH keys." msgstr "" -"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам" -" слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " +"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." #: ../../src/vcs/github.txt:96 msgid "" -"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or " -"start it manually:" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " +"it manually:" msgstr "" "Переконайтеся, що ssh-агент запущено. Ви можете скористатися " "\"Автозапуском\" або запустити його вручну:" @@ -1632,32 +1607,32 @@ msgstr "Додайте ваш приватний ключ SSH до ssh-аген #: ../../src/vcs/github.txt:110 msgid "" -"Add the SSH public key to your account on GitHub. Copy the SSH public key" -" to your clipboard." +"Add the SSH public key to your account on GitHub. Copy the SSH public key to " +"your clipboard." msgstr "" -"Додайте публічний ключ SSH до свого облікового запису на GitHub. " -"Скопіюйте відкритий ключ SSH до буфера обміну." +"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " +"відкритий ключ SSH до буфера обміну." #: ../../src/vcs/github.txt:117 msgid "" -"Alternatively, if ``clip`` isn't working, just type public key content to" -" the terminal using ``cat``," +"Alternatively, if ``clip`` isn't working, just type public key content to " +"the terminal using ``cat``," msgstr "" -"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа" -" у терміналі за допомогою ``cat``," +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " +"терміналі за допомогою ``cat``," #: ../../src/vcs/github.txt:124 msgid "" -"or simply navigate to the file and open it with any text editor. At the " -"end, you need to copy public key content." +"or simply navigate to the file and open it with any text editor. At the end, " +"you need to copy public key content." msgstr "" "або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " "текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." #: ../../src/vcs/github.txt:127 msgid "" -"On GitHub, in the upper-right corner of any page, click your profile " -"photo, then click **Settings**." +"On GitHub, in the upper-right corner of any page, click your profile photo, " +"then click **Settings**." msgstr "" "На GitHub у правому верхньому куті будь-якої сторінки натисніть на " "фотографію свого профілю, а потім натисніть **Налаштування**." @@ -1667,8 +1642,8 @@ msgid "" "In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " "press **New SSH key** button." msgstr "" -"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і " -"натисніть кнопку **Новий ключ SSH**." +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " +"кнопку **Новий ключ SSH**." #: ../../src/vcs/github.txt:131 msgid "In the \"Title\" field, add a descriptive label for the new key." @@ -1703,28 +1678,40 @@ msgstr "Система контролю версій" #: ../../src/vcs/index.txt:10 msgid "" ":abbr:`VCS (Version Control Systems)` play an integral role in modern " -"software development. They allow multiple developers to work on a project" -" simultaneously without overwriting each other's changes. VCSs track the " +"software development. They allow multiple developers to work on a project " +"simultaneously without overwriting each other's changes. VCSs track the " "history of changes to the source code, making it possible to revert to " "previous states, compare versions, and more." msgstr "" +":abbr:`VCS (Version Control Systems)` відіграють невід'ємну роль у сучасній " +"розробці програмного забезпечення. Вони дозволяють декільком розробникам " +"працювати над проектом одночасно, не перезаписуючи зміни один одного. VCS " +"відстежують історію змін у вихідному коді, дозволяючи повертатися до " +"попередніх станів, порівнювати версії тощо." #: ../../src/vcs/index.txt:16 msgid "" "Among the VCSs available, Git stands out as one of the most popular and " -"powerful tools. It's used by small projects and large-scale software " -"alike, owing to its flexibility, distributed nature, and efficient " -"handling of codebase versions." +"powerful tools. It's used by small projects and large-scale software alike, " +"owing to its flexibility, distributed nature, and efficient handling of " +"codebase versions." msgstr "" +"Серед наявних VCS Git є одним з найпопулярніших і найпотужніших " +"інструментів. Його використовують як у невеликих проектах, так і у великому " +"програмному забезпеченні, завдяки його гнучкості, розподіленості та " +"ефективній роботі з версіями кодової бази." #: ../../src/vcs/index.txt:21 msgid "" -"In this part, you'll learn about the fundamentals of version control, how" -" to set up your environment for Git, dive into the basics of commits, " -"branches, and merges, understand the significance of tags, and finally, " -"explore how to collaborate using remote repositories and platforms like " -"GitHub." +"In this part, you'll learn about the fundamentals of version control, how to " +"set up your environment for Git, dive into the basics of commits, branches, " +"and merges, understand the significance of tags, and finally, explore how to " +"collaborate using remote repositories and platforms like GitHub." msgstr "" +"У цій частині ви дізнаєтеся про основи управління версіями, як налаштувати " +"середовище для Git'а, зануритеся в основи коммітів, гілок і злиття, " +"зрозумієте значення тегів і, нарешті, вивчите, як співпрацювати за допомогою " +"віддалених репозиторіїв і платформ на кшталт GitHub." #: ../../src/vcs/intro.txt:8 msgid "About version control (Git)" @@ -1732,35 +1719,34 @@ msgstr "Про контроль версій (Git)" #: ../../src/vcs/intro.txt:10 msgid "" -"Version control is a system that records changes to a file or set of " -"files over time so that you can recall specific versions later. It allows" -" you to revert selected files back to a previous state, revert the entire" -" project back to a previous state, compare changes over time, see who " -"last modified something that might be causing a problem, who introduced " -"an issue and when, and more." +"Version control is a system that records changes to a file or set of files " +"over time so that you can recall specific versions later. It allows you to " +"revert selected files back to a previous state, revert the entire project " +"back to a previous state, compare changes over time, see who last modified " +"something that might be causing a problem, who introduced an issue and when, " +"and more." msgstr "" -"Контроль версій - це система, яка реєструє зміни у файлі або наборі " -"файлів з плином часу, щоб ви могли пізніше згадати конкретні версії. Він " -"дозволяє повернути вибрані файли до попереднього стану, повернути весь " -"проект до попереднього стану, порівняти зміни в часі, побачити, хто " -"востаннє змінював щось, що може спричинити проблему, хто і коли створив " -"проблему, тощо." +"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " +"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " +"повернути вибрані файли до попереднього стану, повернути весь проект до " +"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " +"щось, що може спричинити проблему, хто і коли створив проблему, тощо." #: ../../src/vcs/intro.txt:16 msgid "" -"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't " -"just check out the latest snapshot of the files; rather, they fully " -"mirror the repository, including its full history. Thus, if any server " -"dies, and these systems were collaborating via that server, any of the " -"client repositories can be copied back up to the server to restore it. " -"Every clone is really a full backup of all the data." +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " +"check out the latest snapshot of the files; rather, they fully mirror the " +"repository, including its full history. Thus, if any server dies, and these " +"systems were collaborating via that server, any of the client repositories " +"can be copied back up to the server to restore it. Every clone is really a " +"full backup of all the data." msgstr "" "У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " -"перевіряють останній знімок файлів, а повністю дзеркально копіюють " -"сховище, включно з його повною історією. Таким чином, якщо якийсь сервер " -"вийде з ладу, а ці системи працювали через нього, будь-який з клієнтських" -" репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. " -"Кожен клон - це фактично повна резервна копія всіх даних." +"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " +"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " +"ладу, а ці системи працювали через нього, будь-який з клієнтських " +"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " +"клон - це фактично повна резервна копія всіх даних." #: ../../src/vcs/intro.txt:26 msgid "Distributed version control diagram" @@ -1773,30 +1759,30 @@ msgstr "Що таке Git?" #: ../../src/vcs/intro.txt:30 msgid "" "The major difference between Git and any other VCS is the way Git thinks " -"about its data. Conceptually, most other systems store information as a " -"list of file-based changes. Git doesn't think of or store its data this " -"way. Instead, Git thinks of its data more like a series of snapshots of a" -" miniature filesystem." +"about its data. Conceptually, most other systems store information as a list " +"of file-based changes. Git doesn't think of or store its data this way. " +"Instead, Git thinks of its data more like a series of snapshots of a " +"miniature filesystem." msgstr "" "Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " "Git'ом мислить про свої дані. Концептуально, більшість інших систем " -"зберігають інформацію у вигляді списку змін у файлах. Git не думає про " -"свої дані і не зберігає їх таким чином. Натомість, Git думає про свої " -"дані як про серію знімків мініатюрної файлової системи." +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " +"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " +"серію знімків мініатюрної файлової системи." #: ../../src/vcs/intro.txt:36 msgid "" -"This is an important distinction between Git and nearly all other VCSs. " -"It makes Git reconsider almost every aspect of version control that most " -"other systems copied from the previous generation. This makes Git more " -"like a mini filesystem with some incredibly powerful tools built on top " -"of it, rather than simply a VCS." +"This is an important distinction between Git and nearly all other VCSs. It " +"makes Git reconsider almost every aspect of version control that most other " +"systems copied from the previous generation. This makes Git more like a mini " +"filesystem with some incredibly powerful tools built on top of it, rather " +"than simply a VCS." msgstr "" "Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " -"Git'а переосмислити майже кожен аспект контролю версій, який більшість " -"інших систем скопіювали з попереднього покоління. Це робить Git більше " -"схожим на міні-файлову систему з деякими неймовірно потужними " -"інструментами, побудованими поверх неї, ніж на звичайну VCS." +"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " +"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " +"міні-файлову систему з деякими неймовірно потужними інструментами, " +"побудованими поверх неї, ніж на звичайну VCS." #: ../../src/vcs/intro.txt:45 msgid "Storing data as snapshots of the project over time" @@ -1809,9 +1795,9 @@ msgstr "Локальні операції" #: ../../src/vcs/intro.txt:49 msgid "" "Most operations in Git need only local files and resources to operate -- " -"generally no information is needed from another computer on your network." -" Because you have the entire history of the project right there on your " -"local disk, most operations seem almost instantaneous." +"generally no information is needed from another computer on your network. " +"Because you have the entire history of the project right there on your local " +"disk, most operations seem almost instantaneous." msgstr "" "Для виконання більшості операцій у Git'і потрібні лише локальні файли та " "ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " @@ -1824,13 +1810,13 @@ msgstr "Цілісність" #: ../../src/vcs/intro.txt:56 msgid "" -"Everything in Git is checksummed before it is stored and is then referred" -" to by that checksum. This means it's impossible to change the contents " -"of any file or directory without Git knowing about it." +"Everything in Git is checksummed before it is stored and is then referred to " +"by that checksum. This means it's impossible to change the contents of any " +"file or directory without Git knowing about it." msgstr "" -"Усе в Git'і має контрольну суму перед збереженням і потім посилається на " -"цю контрольну суму. Це означає, що неможливо змінити вміст будь-якого " -"файлу або каталогу без відома Git'а." +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " +"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " +"каталогу без відома Git'а." #: ../../src/vcs/intro.txt:61 msgid "Repository files states" @@ -1846,25 +1832,24 @@ msgstr "" #: ../../src/vcs/intro.txt:65 msgid "" -"Modified means that you have changed the file but have not committed it " -"to your database yet." +"Modified means that you have changed the file but have not committed it to " +"your database yet." msgstr "" -"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій " -"базі даних." +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " +"даних." #: ../../src/vcs/intro.txt:67 msgid "" -"Staged means that you have marked a modified file in its current version " -"to go into your next commit snapshot." +"Staged means that you have marked a modified file in its current version to " +"go into your next commit snapshot." msgstr "" -"Поетапний означає, що ви позначили змінений файл у його поточній версії, " -"щоб він потрапив до наступного знімка фіксації." +"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " +"він потрапив до наступного знімка фіксації." #: ../../src/vcs/intro.txt:69 msgid "Committed means that the data is safely stored in your local database." msgstr "" -"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі " -"даних." +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." #: ../../src/vcs/intro.txt:76 msgid "The basic Git workflow goes something like this:" @@ -1876,20 +1861,19 @@ msgstr "Ви змінюєте файли у вашому робочому дер #: ../../src/vcs/intro.txt:79 msgid "" -"You selectively stage just those changes you want to be part of your next" -" commit, which adds only those changes to the staging area." +"You selectively stage just those changes you want to be part of your next " +"commit, which adds only those changes to the staging area." msgstr "" -"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в " -"наступний коміт, що додає тільки ці зміни в область стабілізації." +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " +"коміт, що додає тільки ці зміни в область стабілізації." #: ../../src/vcs/intro.txt:81 msgid "" -"You do a commit, which takes the files as they are in the staging area " -"and stores that snapshot permanently to your Git directory." +"You do a commit, which takes the files as they are in the staging area and " +"stores that snapshot permanently to your Git directory." msgstr "" -"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони " -"знаходяться в області підготовки, і зберігає цей знімок назавжди у вашому" -" каталозі Git'а." +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " +"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." #: ../../src/vcs/intro.txt:85 msgid "Command line" @@ -1897,186 +1881,221 @@ msgstr "Командний рядок" #: ../../src/vcs/intro.txt:87 msgid "" -"There are a lot of different ways to use Git. There are the original " -"command-line tools, and there are many graphical user interfaces of " -"varying capabilities. For one, the command line is the only place you can" -" run all Git commands -- most of the GUIs implement only a partial subset" -" of Git functionality for simplicity. If you know how to run the command-" -"line version, you can probably also figure out how to run the GUI " -"version, while the opposite is not necessarily true. Also, while your " -"choice of graphical client is a matter of personal taste, all users will " -"have the command-line tools installed and available." +"There are a lot of different ways to use Git. There are the original command-" +"line tools, and there are many graphical user interfaces of varying " +"capabilities. For one, the command line is the only place you can run all " +"Git commands -- most of the GUIs implement only a partial subset of Git " +"functionality for simplicity. If you know how to run the command-line " +"version, you can probably also figure out how to run the GUI version, while " +"the opposite is not necessarily true. Also, while your choice of graphical " +"client is a matter of personal taste, all users will have the command-line " +"tools installed and available." msgstr "" "Існує багато різних способів використання Git'у. Існують оригінальні " "інструменти командного рядка, а також багато графічних інтерфейсів " -"користувача з різними можливостями. З одного боку, командний рядок є " -"єдиним місцем, де ви можете виконувати всі команди Git'а - більшість " -"графічних інтерфейсів реалізують лише часткову підмножину " -"функціональності Git'а для спрощення. Якщо ви знаєте, як запустити версію" -" з командного рядка, ви, ймовірно, також зможете з'ясувати, як запустити " -"версію з графічним інтерфейсом, хоча зворотне не обов'язково вірно. Крім " -"того, хоча ваш вибір графічного клієнта є справою особистого смаку, всі " -"користувачі матимуть встановлені та доступні інструменти командного " -"рядка." +"користувача з різними можливостями. З одного боку, командний рядок є єдиним " +"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " +"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " +"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " +"ймовірно, також зможете з'ясувати, як запустити версію з графічним " +"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " +"графічного клієнта є справою особистого смаку, всі користувачі матимуть " +"встановлені та доступні інструменти командного рядка." #: ../../src/vcs/pullrequest.txt:-1 -#, fuzzy msgid "Version Control System - Pull Requests" -msgstr "Система контролю версій" +msgstr "Система контролю версій - Запити на Злиття (Pull Requests)" #: ../../src/vcs/pullrequest.txt:-1 msgid "Vladyslav Ponomaryov" -msgstr "" +msgstr "Vladyslav Ponomaryov" #: ../../src/vcs/pullrequest.txt:-1 -#, fuzzy msgid "version, control, system, vcs, git, pull request, merge" -msgstr "version, control, system, vcs, git, setup" +msgstr "version, control, system, vcs, git, pull request, merge" #: ../../src/vcs/pullrequest.txt:9 msgid "Pull Request" -msgstr "" +msgstr "Запит на Злиття (Pull Request)" #: ../../src/vcs/pullrequest.txt:11 msgid "" -"Pull request let you tell others about changes you've pushed to a branch " -"in a repository on GitHub. Once a pull request is opened, you can discuss" -" and review the potential changes with collaborators and add follow-up " -"commits before your changes are merged into the base branch:cite:`github" -":about-pr`." +"Pull request let you tell others about changes you've pushed to a branch in " +"a repository on GitHub. Once a pull request is opened, you can discuss and " +"review the potential changes with collaborators and add follow-up commits " +"before your changes are merged into the base branch:cite:`github:about-pr`." msgstr "" +"Pull-запит дозволяє вам повідомити інших про зміни, які ви перенесли до " +"гілки в репозиторії на GitHub. Після того, як запит відкрито, ви можете " +"обговорити і переглянути потенційні зміни з колегами і додати подальші " +"коміти, перш ніж ваші зміни будуть злиті в базову гілку branch:cite:`github:" +"about-pr`." #: ../../src/vcs/pullrequest.txt:17 msgid "Draft pull requests" -msgstr "" +msgstr "Чернетки pull requests" #: ../../src/vcs/pullrequest.txt:19 msgid "" -"Draft pull requests are available in public repositories on GitHub. When " -"you create a pull request, you can choose to a create a pull request that" -" is ready for review or a draft pull request. Draft pull requests cannot " -"be merged. When you're ready to get feedback on your pull request, you " -"can mark your draft pull request as ready for review." +"Draft pull requests are available in public repositories on GitHub. When you " +"create a pull request, you can choose to a create a pull request that is " +"ready for review or a draft pull request. Draft pull requests cannot be " +"merged. When you're ready to get feedback on your pull request, you can mark " +"your draft pull request as ready for review." msgstr "" +"Чернетки pull-запитів доступні в публічних репозиторіях на GitHub. Коли ви " +"створюєте пул-запит, ви можете вибрати між створенням готового до розгляду " +"пул-запиту та чернетки пул-запиту. Чернетки пул-запитів не можна " +"об'єднувати. Коли ви будете готові отримати відгук на свій запит, ви можете " +"позначити свій чернетковий запит як готовий до розгляду." #: ../../src/vcs/pullrequest.txt:26 msgid "Difference between commits on compare and pull request pages" -msgstr "" +msgstr "Різниця між коммітами на сторінках порівняння та pull-запитів" #: ../../src/vcs/pullrequest.txt:28 msgid "" -"The compare and pull request pages use different methods to calculate the" -" diff for changed files:" +"The compare and pull request pages use different methods to calculate the " +"diff for changed files:" msgstr "" +"Сторінки запитів порівняння і витягування використовують різні методи для " +"обчислення різниці для змінених файлів:" #: ../../src/vcs/pullrequest.txt:31 msgid "" -"Compare pages show the diff between the tip of the head ref and the " -"current common ancestor (that is, the merge base) of the head and base " -"ref." +"Compare pages show the diff between the tip of the head ref and the current " +"common ancestor (that is, the merge base) of the head and base ref." msgstr "" +"На сторінках порівняння показано різницю між кінчиком головного референта і " +"поточним спільним предком (тобто, основою злиття) головного і основного " +"референта." #: ../../src/vcs/pullrequest.txt:33 msgid "" "Pull request pages show the diff between the tip of the head ref and the " -"common ancestor of the head and base ref at the time when the pull " -"request was created. Consequently, the merge base used for the comparison" -" might be different." +"common ancestor of the head and base ref at the time when the pull request " +"was created. Consequently, the merge base used for the comparison might be " +"different." msgstr "" +"Сторінки запитів на злиття показують різницю між вершиною головного рефа і " +"спільним предком головного і базового рефів на момент створення запиту на " +"злиття. Отже, база злиття, яка використовується для порівняння, може " +"відрізнятися." #: ../../src/vcs/pullrequest.txt:39 -#, fuzzy msgid "About comparing branches" -msgstr "Про гілки" +msgstr "Про порівняння гілок" #: ../../src/vcs/pullrequest.txt:41 msgid "" -"Pull requests display diffs to compare the changes you made in your topic" -" branch against the base branch that you want to merge your changes into." +"Pull requests display diffs to compare the changes you made in your topic " +"branch against the base branch that you want to merge your changes into." msgstr "" +"Витягніть запити на відображення відмінностей, щоб порівняти зміни, зроблені " +"у вашій гілці теми, з базовою гілкою, до якої ви хочете об'єднати ваші зміни." #: ../../src/vcs/pullrequest.txt:44 msgid "" "Rather that viewing the commits themselves, you can view the proposed " -"changes as they'll appear in the files once the pull request is merged. " -"The files appear in alphabetical order within the Files changed tab. " -"Additions to the files appear in green and are prefaced by a ``+`` sign " -"while content that has been removed appears in red and is prefaced by a " -"``-`` sign :cite:`github:compare-pr`." -msgstr "" +"changes as they'll appear in the files once the pull request is merged. The " +"files appear in alphabetical order within the Files changed tab. Additions " +"to the files appear in green and are prefaced by a ``+`` sign while content " +"that has been removed appears in red and is prefaced by a ``-`` sign :cite:" +"`github:compare-pr`." +msgstr "" +"Замість того, щоб переглядати самі комміти, ви можете переглянути " +"запропоновані зміни, які з'являться у файлах після об'єднання запиту на " +"витягування. Файли відображаються в алфавітному порядку на вкладці Змінені " +"файли. Доповнення до файлів відображаються зеленим кольором зі знаком ``+``, " +"тоді як вміст, який було вилучено, відображається червоним кольором зі " +"знаком ``-`` :cite:`github:compare-pr`." #: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 -#, fuzzy msgid "Creating a pull request" -msgstr "Отримання та витягування з віддаленого репозиторію" +msgstr "Створення pull-запиту" #: ../../src/vcs/pullrequest.txt:54 msgid "" -"Create a pull request to propose and collaborate on changes to a " -"repository. These changes are proposed in a *branch*, which ensures that " -"the default branch only contains finished and approved work:cite:`github" -":create-pr`." +"Create a pull request to propose and collaborate on changes to a repository. " +"These changes are proposed in a *branch*, which ensures that the default " +"branch only contains finished and approved work:cite:`github:create-pr`." msgstr "" +"Створіть pull request, щоб пропонувати зміни до сховища та співпрацювати над " +"ними. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " +"замовчуванням містить лише завершені та затверджені роботи:cite:`github:" +"create-pr`." #: ../../src/vcs/pullrequest.txt:61 msgid "" -"Use a branch to isolate development work without affecting other branches" -" in the repository. Each repository has one default branch, and can have " -"multiple other branches. You can merge a branch into another branch using" -" a pull request." +"Use a branch to isolate development work without affecting other branches in " +"the repository. Each repository has one default branch, and can have " +"multiple other branches. You can merge a branch into another branch using a " +"pull request." msgstr "" +"Використовуйте гілку, щоб ізолювати роботу над розробкою, не впливаючи на " +"інші гілки у сховищі. Кожне сховище має одну гілку за замовчуванням і може " +"мати декілька інших гілок. Ви можете об'єднати гілку з іншою гілкою за " +"допомогою pull-запиту." #: ../../src/vcs/pullrequest.txt:66 msgid "" -"Branches allow you to develop features, fix bugs, or safely experiment " -"with new ideas in a contained area of your repository." +"Branches allow you to develop features, fix bugs, or safely experiment with " +"new ideas in a contained area of your repository." msgstr "" +"Гілки дозволяють розробляти функції, виправляти помилки або безпечно " +"експериментувати з новими ідеями в обмеженій області вашого сховища." #: ../../src/vcs/pullrequest.txt:69 msgid "" "You always create a branch from an existing branch. Typically, you might " "create a new branch from the default branch of your repository." msgstr "" +"Ви завжди створюєте гілку з існуючої гілки. Зазвичай, ви можете створити " +"нову гілку з гілки за замовчуванням вашого сховища." #: ../../src/vcs/pullrequest.txt:75 msgid "On GitHub, navigate to the main page of the repository." -msgstr "" +msgstr "На GitHub перейдіть на головну сторінку репозиторію." #: ../../src/vcs/pullrequest.txt:76 msgid "Switch to \"Pull requests\" tab." -msgstr "" +msgstr "Перейдіть на вкладку \"Pull requests\"." #: ../../src/vcs/pullrequest.txt:77 msgid "Press \"New pull request\" button." -msgstr "" +msgstr "Натисніть кнопку \"New pull request\"." #: ../../src/vcs/pullrequest.txt:78 msgid "Select base and source branches." -msgstr "" +msgstr "Виберіть базову і вихідну гілки." #: ../../src/vcs/pullrequest.txt:79 msgid "Press \"Create pull request\" button." -msgstr "" +msgstr "Натисніть кнопку \"Create pull request\"." #: ../../src/vcs/pullrequest.txt:80 msgid "Provide a meaningful title and description." -msgstr "" +msgstr "Надайте змістовну назву та опис." #: ../../src/vcs/pullrequest.txt:81 msgid "Draft or create a pull request." -msgstr "" +msgstr "Створіть pull request або його чорнетку" #: ../../src/vcs/pullrequest.txt:83 msgid "" "To create pull request that is ready for review, click **Create Pull " "Request**." msgstr "" +"Щоб створити запит, готовий до перегляду, натисніть **Create Pull Request**." #: ../../src/vcs/pullrequest.txt:85 msgid "" -"To create a draft pull request, use the drop-down and select **Create " -"Draft Pull Request**, then click **Draft Pull Request**." +"To create a draft pull request, use the drop-down and select **Create Draft " +"Pull Request**, then click **Draft Pull Request**." msgstr "" +"Щоб створити чернетку запиту на вилучення, скористайтеся випадаючим списком " +"і виберіть **Create Draft Pull Request**, а потім натисніть **Draft Pull " +"Request**." #: ../../src/vcs/remotes.txt:3 msgid "Remotes" @@ -2084,22 +2103,22 @@ msgstr "Віддалені репозиторії" #: ../../src/vcs/remotes.txt:5 msgid "" -"To be able to collaborate on any Git project, you need to know how to " -"manage your remote repositories. Remote repositories are versions of your" -" project that are hosted on the Internet or network somewhere. You can " -"have several of them, each of which generally is either read-only or " -"read/write for you. Managing remotes includes knowing how to add remote " -"repositories, remove remote repositories that are no longer valid, manage" -" various branches and define them as being tracked or not, and more." -msgstr "" -"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам " -"потрібно знати, як керувати вашими віддаленими сховищами. Віддалені " -"сховища - це версії вашого проекту, розміщені десь в інтернеті або " -"мережі. Ви можете мати декілька таких сховищ, кожне з яких, як правило, " -"доступне лише для читання або читання/запису. Керування віддаленими " -"сховищами включає в себе вміння додавати віддалені сховища, видаляти " -"віддалені сховища, які більше не є дійсними, керувати різними гілками і " -"визначати їх як такі, що відстежуються чи ні, і багато іншого." +"To be able to collaborate on any Git project, you need to know how to manage " +"your remote repositories. Remote repositories are versions of your project " +"that are hosted on the Internet or network somewhere. You can have several " +"of them, each of which generally is either read-only or read/write for you. " +"Managing remotes includes knowing how to add remote repositories, remove " +"remote repositories that are no longer valid, manage various branches and " +"define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " +"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " +"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " +"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " +"або читання/запису. Керування віддаленими сховищами включає в себе вміння " +"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " +"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " +"чи ні, і багато іншого." #: ../../src/vcs/remotes.txt:21 msgid "Showing your remote" @@ -2115,18 +2134,17 @@ msgstr "" "Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " "команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " "віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " -"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає " -"серверу, з якого ви клонуєте:" +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " +"з якого ви клонуєте:" #: ../../src/vcs/remotes.txt:41 msgid "" -"This means we can pull contributions from any of these users pretty " -"easily. We may additionally have permission to push to one or more of " -"these." +"This means we can pull contributions from any of these users pretty easily. " +"We may additionally have permission to push to one or more of these." msgstr "" -"Це означає, що ми можемо досить легко отримувати внески від будь-якого з " -"цих користувачів. Крім того, ми можемо мати дозвіл на проштовхування до " -"одного або декількох з них." +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " +"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " +"або декількох з них." #: ../../src/vcs/remotes.txt:45 msgid "Adding remote repositories" @@ -2134,25 +2152,23 @@ msgstr "Додавання віддалених репозиторіїв" #: ../../src/vcs/remotes.txt:47 msgid "" -"To add a new remote Git repository as a shortname you can reference " -"easily, run ``git remote add ``:" +"To add a new remote Git repository as a shortname you can reference easily, " +"run ``git remote add ``:" msgstr "" -"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, " -"на яке можна легко посилатися, виконайте ``git remote add <назва> " -"<адреса>``:" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " +"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" #: ../../src/vcs/remotes.txt:61 msgid "" -"Now you can use the string \"personal\" on the command line in lieu of " -"the whole URL. ``master`` branch of \"https://github.com/shorodilov" -"/python-course\" is now accessible as ``personal/master``, while " -"shortname to the same branch in origin will be -- ``origin/master``." +"Now you can use the string \"personal\" on the command line in lieu of the " +"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" +"course\" is now accessible as ``personal/master``, while shortname to the " +"same branch in origin will be -- ``origin/master``." msgstr "" "Тепер ви можете використовувати рядок \"personal\" в командному рядку " -"замість повної URL-адреси. Гілка ``master`` в " -"\"https://github.com/shorodilov/python-course\" тепер доступна як " -"``personal/master``, тоді як скорочена назва тієї ж гілки в origin буде " -"-- ``origin/master``." +"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" +"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " +"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." #: ../../src/vcs/remotes.txt:67 msgid "Fetching and pulling from remotes" @@ -2161,41 +2177,41 @@ msgstr "Отримання та витягування з віддаленого #: ../../src/vcs/remotes.txt:69 msgid "" "To get data from remote project, you can run ``git fetch`` command. The " -"command goes out to that remote project and pulls down all the " -"information from that remote project that you don't have yet. After you " -"do this, you should have references to all the branches from that remote," -" which you can merge in or inspect at any time." +"command goes out to that remote project and pulls down all the information " +"from that remote project that you don't have yet. After you do this, you " +"should have references to all the branches from that remote, which you can " +"merge in or inspect at any time." msgstr "" -"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git" -" fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " -"інформацію з нього, якої ви ще не маєте. Після цього ви матимете " -"посилання на всі гілки з цього віддаленого проекту, які ви можете " -"об'єднати або переглянути у будь-який час." +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " +"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " +"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " +"переглянути у будь-який час." #: ../../src/vcs/remotes.txt:79 msgid "" -"If your current branch is set up to track a remote branch, you can use " -"``git pull`` command to automatically fetch and then merge that remote " -"branch into your current branch. By default, the ``git clone`` command " -"automatically sets up your local ``master`` branch to track the remote " -"``master`` branch (or whatever default remote branch)." +"If your current branch is set up to track a remote branch, you can use ``git " +"pull`` command to automatically fetch and then merge that remote branch into " +"your current branch. By default, the ``git clone`` command automatically " +"sets up your local ``master`` branch to track the remote ``master`` branch " +"(or whatever default remote branch)." msgstr "" "Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " "можете скористатися командою ``git pull`` для автоматичного отримання і " "подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " -"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну" -" гілку ``master`` на відстеження віддаленої гілки ``master`` (або " -"будь-якої іншої віддаленої гілки за замовчуванням)." +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " +"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " +"іншої віддаленої гілки за замовчуванням)." #: ../../src/vcs/remotes.txt:85 msgid "" -"From Git version 2.27 onward, ``git pull`` will give a warning if the " -"``pull.rebase`` variable is not set. Git will keep warning you until you " -"set the variable." +"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." +"rebase`` variable is not set. Git will keep warning you until you set the " +"variable." msgstr "" -"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо " -"змінну ``pull.rebase`` не встановлено. Git продовжуватиме видавати " -"попередження, доки ви не встановите змінну." +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " +"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " +"доки ви не встановите змінну." #: ../../src/vcs/remotes.txt:90 msgid "" @@ -2203,16 +2219,16 @@ msgid "" "create a merge commit): ``git config --global pull.rebase \"false\"``." msgstr "" "Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " -"вперед, якщо можливо, інакше створіть комміт злиття): ``git config " -"--global pull.rebase \"false\"``." +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " +"pull.rebase \"false\"``." #: ../../src/vcs/remotes.txt:93 msgid "" "If you want to rebase when pulling: ``git config --global pull.rebase " "\"true\"``." msgstr "" -"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global " -"pull.rebase \"true\"``." +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." +"rebase \"true\"``." #: ../../src/vcs/remotes.txt:97 msgid "Pushing to remotes" @@ -2220,29 +2236,27 @@ msgstr "Відправка до віддаленого репозиторію" #: ../../src/vcs/remotes.txt:99 msgid "" -"When you have your project at a point that you want to share, you have to" -" push it upstream. The command for this is simple: ``git push " +"When you have your project at a point that you want to share, you have to " +"push it upstream. The command for this is simple: ``git push " "``." msgstr "" "Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " -"потрібно перемістити його вгору за течією. Команда для цього проста: " -"``git push <віддалений> <гілка>``." +"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " +"push <віддалений> <гілка>``." #: ../../src/vcs/remotes.txt:106 msgid "" -"This command works only if you cloned from a server to which you have " -"write access and if nobody has pushed in the meantime. If you and someone" -" else clone at the same time and they push upstream and then you push " -"upstream, you push will rightly be rejected. You'll have to fetch their " -"work first and incorporate it into yours before you'll be allowed to " -"push." +"This command works only if you cloned from a server to which you have write " +"access and if nobody has pushed in the meantime. If you and someone else " +"clone at the same time and they push upstream and then you push upstream, " +"you push will rightly be rejected. You'll have to fetch their work first and " +"incorporate it into yours before you'll be allowed to push." msgstr "" "Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " -"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви " -"клонуєте одночасно з кимось іншим, і він зробить поштовх вище за течією, " -"а потім ви, ваш поштовх буде справедливо відхилено. Вам доведеться " -"спочатку отримати їхню роботу і включити її до своєї, перш ніж вам " -"дозволять проштовхувати." +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " +"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " +"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " +"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." #: ../../src/vcs/remotes.txt:113 msgid "Pushing a new branch to remote" @@ -2250,19 +2264,18 @@ msgstr "Переміщення нової гілки до віддаленого #: ../../src/vcs/remotes.txt:115 msgid "" -"In case you have created a local branch for some specific needs and you " -"want to share this branch, you need to set up track for this branch. This" -" can be done by using: ``git push --set-upstream origin " -"``. This will create a new remote branch and set up track " -"to your current local branch. There is a shortcut for this command: ``git" -" push -u origin ``." +"In case you have created a local branch for some specific needs and you want " +"to share this branch, you need to set up track for this branch. This can be " +"done by using: ``git push --set-upstream origin ``. This will " +"create a new remote branch and set up track to your current local branch. " +"There is a shortcut for this command: ``git push -u origin ``." msgstr "" "Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " -"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це " -"можна зробити за допомогою ``git push --set-upstream origin " -"<віддалена_гілка>``. Це створить нову віддалену гілку і налаштує трек до " -"вашої поточної локальної гілки. Для цієї команди існує комбінація клавіш:" -" ``git push -u origin <віддалена_гілка>``." +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " +"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " +"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " +"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " +"<віддалена_гілка>``." #: ../../src/vcs/remotes.txt:122 msgid "Inspecting a remote" @@ -2270,8 +2283,8 @@ msgstr "Перевірка віддаленого репозиторію" #: ../../src/vcs/remotes.txt:124 msgid "" -"If you want to see more information about a particular remote, you can " -"use the ``git remote show ``." msgstr "" -"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися " -"``git tag -d ``." +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " +"tag -d ``." #: ../../src/vcs/tagging.txt:117 msgid "Checking out tags" @@ -2511,28 +2521,27 @@ msgstr "Перевірка тегів" #: ../../src/vcs/tagging.txt:119 msgid "" -"If you want to view the versions of files a tag is pointing to, you can " -"do a ``git checkout`` of that tag, although this puts your repository in " +"If you want to view the versions of files a tag is pointing to, you can do a " +"``git checkout`` of that tag, although this puts your repository in " "\"detached HEAD\" state, which has some ill side effects:" msgstr "" "Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " -"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у " -"стан \"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " +"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" #: ../../src/vcs/tagging.txt:145 msgid "" -"In \"detached HEAD\" state, if you make changes and then create a commit," -" the tag will stay the same, but your new commit won’t belong to any " -"branch and will be unreachable, except by the exact commit hash. Thus, if" -" you need to make changes -- say you’re fixing a bug on an older version," -" for instance -- you will generally want to create a branch:" +"In \"detached HEAD\" state, if you make changes and then create a commit, " +"the tag will stay the same, but your new commit won’t belong to any branch " +"and will be unreachable, except by the exact commit hash. Thus, if you need " +"to make changes -- say you’re fixing a bug on an older version, for instance " +"-- you will generally want to create a branch:" msgstr "" -"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт," -" тег залишиться незмінним, але ваш новий коміт не належатиме до жодної " -"гілки і буде недоступним, окрім як за точним хешем коміту. Таким чином, " -"якщо вам потрібно внести зміни - скажімо, ви виправляєте ваду у старій " -"версії - вам, як правило, краще створити гілку:" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " +"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " +"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " +"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " +"як правило, краще створити гілку:" #~ msgid "version, control, system, vcs, git, history, commit" #~ msgstr "version, control, system, vcs, git, history, commit" - diff --git a/src/appx/assignments.txt b/src/appx/assignments.txt index 2617d1727..715232126 100644 --- a/src/appx/assignments.txt +++ b/src/appx/assignments.txt @@ -29,7 +29,7 @@ What to exclude - Virtual environment, typically ``venv`` or ``env`` folder - Byte compiled Python code (``__pycache__``) -- IDEA configurations, typically ``.vscode`` or ``.idea`` folder +- IDE configurations, typically ``.vscode`` or ``.idea`` folder - Database files, like ``db.sqlite3`` - Other stuff not related to the assignment directly @@ -54,7 +54,7 @@ Repository initialization - .gitignore - requirements.txt *(if applicable)* -#. *(Optional)* create a code base draft. This can be an empty module +#. *(Optional)* Create a code base draft. This can be an empty module like **main.py** or an empty :ref:`Django project `. #. Initialize a new repository using ``git init`` command. #. Set up **.gitignore** name patterns. From cf57b619c4ea67cd50cbbbe3fd2ac8c3e9bb9871 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Sep 2023 11:23:00 +0300 Subject: [PATCH 424/689] Minor updates to VCS translations --- src/_locales/uk/LC_MESSAGES/vcs.po | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po index b3d55a860..6357ee984 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ b/src/_locales/uk/LC_MESSAGES/vcs.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-01 11:38+0300\n" -"PO-Revision-Date: 2023-09-04 16:12+0300\n" +"PO-Revision-Date: 2023-09-05 11:15+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -440,7 +440,7 @@ msgid "" "Standard glob patterns work, and will be applied recursively throughout the " "entire working tree." msgstr "" -"Працюють стандартні шаблони глобусів, які будуть застосовуватися рекурсивно " +"Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " "по всьому робочому дереву." #: ../../src/vcs/basics.txt:330 @@ -469,13 +469,14 @@ msgid "" "can also use two asterisks to match nested directories; a/\\*\\*/z would " "match *a/z*, *a/b/z*, *a/b/c/z*, and so on." msgstr "" -"Шаблони глобусів подібні до спрощених регулярних виразів, які використовують " -"оболонки. Зірочка (\\*) відповідає нулю або більше символів; [ab] відповідає " -"будь-якому символу всередині дужок (у цьому випадку a або b); знак питання " -"(?) відповідає одному символу; а дужки, що містять символи, розділені " -"дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому випадку " -"від 0 до 9). Ви також можете використовувати дві зірочки для вкладених " -"каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і так далі." +"Глобальні шаблони подібні до спрощених регулярних виразів, які " +"використовують оболонки. Зірочка (\\*) відповідає нулю або більше символів; " +"[ab] відповідає будь-якому символу всередині дужок (у цьому випадку a або " +"b); знак питання (?) відповідає одному символу; а дужки, що містять символи, " +"розділені дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому " +"випадку від 0 до 9). Ви також можете використовувати дві зірочки для " +"вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " +"так далі." #: ../../src/vcs/basics.txt:344 msgid "Viewing the commit history" @@ -2079,7 +2080,7 @@ msgstr "Надайте змістовну назву та опис." #: ../../src/vcs/pullrequest.txt:81 msgid "Draft or create a pull request." -msgstr "Створіть pull request або його чорнетку" +msgstr "Створіть pull request або його чорнетку." #: ../../src/vcs/pullrequest.txt:83 msgid "" From 571d1f6673e04865a1553602b725900809be6c31 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Sep 2023 11:34:11 +0300 Subject: [PATCH 425/689] Update project version and dependencies --- poetry.lock | 66 +++++++++++++++++++++++++------------------------- pyproject.toml | 4 +-- src/conf.py | 2 +- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0f92d9a15..831985408 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,14 +123,14 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -415,18 +415,18 @@ test = ["pytest"] [[package]] name = "pybtex-docutils" -version = "1.0.2" +version = "1.0.3" description = "A docutils backend for pybtex." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016"}, - {file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239"}, + {file = "pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b"}, + {file = "pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9"}, ] [package.dependencies] -docutils = ">=0.8" +docutils = ">=0.14" pybtex = ">=0.16" [[package]] @@ -518,19 +518,19 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.0.0" +version = "68.1.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, + {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -635,19 +635,19 @@ test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.2.2" +version = "1.3.0" description = "Read the Docs theme for Sphinx" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, - {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, + {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, + {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, ] [package.dependencies] docutils = "<0.19" -sphinx = ">=1.6,<7" +sphinx = ">=1.6,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -655,14 +655,14 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.6" +version = "1.0.7" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_applehelp-1.0.6-py3-none-any.whl", hash = "sha256:c0578efa23cab5a2f3aaa8af5691b952433f4fdfaac255befd3452448e7ea4a4"}, - {file = "sphinxcontrib_applehelp-1.0.6.tar.gz", hash = "sha256:a59274de7a952a99af36b8a5092352d9249279c0e3280b7dceaae8e15873c942"}, + {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, + {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, ] [package.dependencies] @@ -693,14 +693,14 @@ Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.4" +version = "1.0.5" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_devhelp-1.0.4-py3-none-any.whl", hash = "sha256:d4e20a17f78865d4096733989b5efa0d5e7743900e98e1f6ecd6f489380febc8"}, - {file = "sphinxcontrib_devhelp-1.0.4.tar.gz", hash = "sha256:4fd751c63dc40895ac8740948f26bf1a3c87e4e441cc008672abd1cb2bc8a3d1"}, + {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, + {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, ] [package.dependencies] @@ -712,14 +712,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.3" +version = "2.0.4" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_htmlhelp-2.0.3-py3-none-any.whl", hash = "sha256:abee4e6c5471203ad2fc40dc6a16ed99884a5d6b15a6f79c9269a7e82cf04149"}, - {file = "sphinxcontrib_htmlhelp-2.0.3.tar.gz", hash = "sha256:14358d0f88ccf58447f2b54343cdcc0012f32de2f8d27cf934fdbc0b362f9597"}, + {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, + {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, ] [package.dependencies] @@ -773,14 +773,14 @@ files = [ [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.5" +version = "1.0.6" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_qthelp-1.0.5-py3-none-any.whl", hash = "sha256:962730a6ad15d21fd6760b14c9e95c00a097413595aa6ee871dd9dfa4b002a16"}, - {file = "sphinxcontrib_qthelp-1.0.5.tar.gz", hash = "sha256:d31d1a1beaf3894866bb318fb712f1edc82687f1c06235a01e5b2c50c36d5c40"}, + {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, + {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, ] [package.dependencies] @@ -792,14 +792,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.7" +version = "1.1.9" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_serializinghtml-1.1.7-py3-none-any.whl", hash = "sha256:424164fc3a8b4355a29d5ea8b7f18199022d160c8f7b96e68bb6c50217729b87"}, - {file = "sphinxcontrib_serializinghtml-1.1.7.tar.gz", hash = "sha256:ca31afee32e1508cff4034e258060ce2c81a3b1c49e77da60fdb61f0e7a73c22"}, + {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, + {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index 4b504c98d..f61e6365c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "python-course" -version = "2023.06.dev" -description = "" +version = "2023.09.dev" +description = "Python training course materials" license = "MIT" authors = [ "Vladyslav Ponomaryov", diff --git a/src/conf.py b/src/conf.py index e6b3d8b2c..b8346255f 100644 --- a/src/conf.py +++ b/src/conf.py @@ -14,7 +14,7 @@ f"{datetime.now().year}, Python training course authors and contributors" authors = "Vladyslav Ponomaryov \\and " \ "Serhii Horodilov" -version = "2023.06.dev" +version = "2023.09.dev" # general configuration master_doc = root_doc = "index" From 683c3934d0d933d56c8577c594c1e0a82c2dd390 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 14 Sep 2023 15:51:08 +0300 Subject: [PATCH 426/689] Rebased 'feature/libms' onto 'devel' Conflicts: - src/_locales/uk/LC_MESSAGES/appx.po --- src/_locales/uk/LC_MESSAGES/oop.po | 2 +- src/appx/blog | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/oop.po b/src/_locales/uk/LC_MESSAGES/oop.po index 63d9c41fc..261c9d6b7 100644 --- a/src/_locales/uk/LC_MESSAGES/oop.po +++ b/src/_locales/uk/LC_MESSAGES/oop.po @@ -1,4 +1,4 @@ -# OBJECT-ORIENTED PROGRAMMING BLOCK TRANSLATION. +# OBJECT-ORIENTED PROGRAMMING TOPICS # # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training diff --git a/src/appx/blog b/src/appx/blog index 5d34b3fda..dfb023629 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit 5d34b3fdac1a0fceac294fc69bc50ad89b56846c +Subproject commit dfb023629d04fe427e9e00642f852b403b9b70f3 From 53bb7848dde0fd8cd2576a85f5b8b3acae86c005 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 14 Sep 2023 15:59:46 +0300 Subject: [PATCH 427/689] Add LibMS submodule Conflicts: - src/_locales/uk/LC_MESSAGES/appx.po --- .gitmodules | 3 + src/_locales/uk/LC_MESSAGES/appx.po | 1012 ++++++++++++++++++++++++++- src/appx/libms | 1 + 3 files changed, 1014 insertions(+), 2 deletions(-) create mode 160000 src/appx/libms diff --git a/.gitmodules b/.gitmodules index 57b47c5de..00959c024 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "src/appx/blog"] path = src/appx/blog url = git@github.com:edu-python-course/blog-spec +[submodule "src/appx/libms"] + path = src/appx/libms + url = git@github.com:edu-python-course/libms-spec.git diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index ff3df8153..d50027e42 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -738,7 +738,7 @@ msgstr "Коментар вимагає наявності дати створе msgid "Comment requires message text." msgstr "Коментар вимагає наявності тексту повідомлення." -#: ../../src/appx/blog/spec.rst:139 +#: ../../src/appx/blog/spec.rst:139 ../../src/appx/libms/spec.rst:220 msgid "Relationships" msgstr "Відносини" @@ -1096,6 +1096,7 @@ msgstr "" "повинна отримувати введені дані від користувача:" #: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 +#: ../../src/appx/libms/spec.rst:296 msgid "username" msgstr "username" @@ -1104,10 +1105,12 @@ msgid "email" msgstr "email" #: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 +#: ../../src/appx/libms/spec.rst:299 msgid "password" msgstr "password" #: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 +#: ../../src/appx/libms/spec.rst:300 msgid "confirm password" msgstr "confirm password" @@ -1127,7 +1130,7 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../src/appx/blog/spec.rst:314 +#: ../../src/appx/blog/spec.rst:314 ../../src/appx/libms/spec.rst:347 msgid "title" msgstr "title" @@ -2193,6 +2196,1011 @@ msgstr "settings, environment, variables" msgid "Issue - System Environment PATH" msgstr "Проблема - System Environment PATH" +#: ../../src/appx/libms/spec.rst:3 +msgid "Library Management System - Specification" +msgstr "" + +#: ../../src/appx/libms/spec.rst:5 +msgid "" +"The Library Management System is a Django-based web application that offers " +"a digital platform for managing and interacting with a library's collection. " +"It streamlines the processes of book lending, returns, and inventory " +"management, while ensuring easy access for users and librarians alike. " +"Through this system, users can search for available books, place borrowing " +"requests, and manage their borrowed items. Librarians, on the other hand, " +"oversee the addition, update, and removal of book records, and can approve " +"or decline borrowing requests. The system also supports diverse user roles, " +"from regular members to staff and administrators, each with distinct " +"capabilities." +msgstr "" + +#: ../../src/appx/libms/spec.rst:15 +msgid "" +"A well-structured user interface ensures that all functionalities are easily " +"accessible, making the library management process seamless and efficient. " +"This project aims to merge traditional library functions with modern " +"technological innovations, promoting efficiency and an enhanced user " +"experience." +msgstr "" + +#: ../../src/appx/libms/spec.rst:22 +msgid "User roles" +msgstr "" + +#: ../../src/appx/libms/spec.rst:25 +msgid "" +"It is essential for developers to consider security aspects when " +"implementing these roles to ensure that users cannot perform actions outside " +"their designated role's scope." +msgstr "" + +#: ../../src/appx/libms/spec.rst:30 +#, fuzzy +msgid "Admins" +msgstr "pgAdmin" + +#: ../../src/appx/libms/spec.rst:32 +msgid "" +"Superusers have full control over the entire system. They can access and " +"manage all functionalities provided by the Django admin site." +msgstr "" + +#: ../../src/appx/libms/spec.rst:35 +msgid "Admins can create, modify, or delete any record within the application." +msgstr "" + +#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 +#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 +msgid "Capabilities" +msgstr "" + +#: ../../src/appx/libms/spec.rst:39 +msgid "Access Django admin site" +msgstr "" + +#: ../../src/appx/libms/spec.rst:42 +msgid "Librarians" +msgstr "" + +#: ../../src/appx/libms/spec.rst:44 +msgid "" +"Staff personnel are in charge of day-to-day operations within the library. " +"They can add new books to the library's collection, manage existing books' " +"details, and accept or decline borrow requests from regular users." +msgstr "" + +#: ../../src/appx/libms/spec.rst:50 +msgid "Management of the library catalogue" +msgstr "" + +#: ../../src/appx/libms/spec.rst:52 +msgid "Add, modify or delete authors" +msgstr "" + +#: ../../src/appx/libms/spec.rst:53 +msgid "Add, modify or delete genres" +msgstr "" + +#: ../../src/appx/libms/spec.rst:54 +msgid "Add, modify or delete books' details" +msgstr "" + +#: ../../src/appx/libms/spec.rst:56 +msgid "Review borrow requests from regular users" +msgstr "" + +#: ../../src/appx/libms/spec.rst:57 +msgid "Accept or decline borrow requests" +msgstr "" + +#: ../../src/appx/libms/spec.rst:58 +msgid "Register returned books and update their status" +msgstr "" + +#: ../../src/appx/libms/spec.rst:61 +msgid "Regular" +msgstr "" + +#: ../../src/appx/libms/spec.rst:63 +msgid "" +"Regular registered users are the members of the library. They can search " +"books, request to borrow them, and are responsible for returning borrowed " +"books on time." +msgstr "" + +#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 +msgid "Browse the books' catalogue" +msgstr "" + +#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 +msgid "View details of a book" +msgstr "" + +#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 +msgid "Search books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:72 +msgid "Request to borrow available books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:73 +msgid "Check due date for returned books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:74 +msgid "Return borrowed books" +msgstr "" + +#: ../../src/appx/libms/spec.rst:77 +msgid "Anonymous" +msgstr "" + +#: ../../src/appx/libms/spec.rst:79 +msgid "Anonymous users are visitors who haven't logged into the system." +msgstr "" + +#: ../../src/appx/libms/spec.rst:86 +msgid "Access to the registration or login pages" +msgstr "" + +#: ../../problem-sets/src/wtk/challenge.rst:95 ../../src/appx/libms/spec.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../src/appx/libms/spec.rst:93 +#, fuzzy +msgid "Author model" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:95 +msgid "" +"The ``Author`` model captures the details of the person, or group " +"responsible for creating the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 +#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 +#, fuzzy +msgid "Attributes" +msgstr "Змінні" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Name" +msgstr "username" + +#: ../../src/appx/libms/spec.rst:102 +msgid "The full name of the author. This should be limited to 255 characters." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Bio" +msgstr "" + +#: ../../src/appx/libms/spec.rst:105 +msgid "A brief biography or description of the author." +msgstr "" + +#: ../../src/appx/libms/spec.rst:108 +#, fuzzy +msgid "Genre model" +msgstr "Модель супротивника" + +#: ../../src/appx/libms/spec.rst:110 +msgid "" +"The ``Genre`` model represents the category or type of content a book " +"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " +"etc. Since a book can belong to more than one category at a time, it is " +"implemented as a dedicated model." +msgstr "" + +#: ../../src/appx/libms/spec.rst:118 +#, fuzzy +msgid "The name of the genre." +msgstr "назва товару" + +#: ../../src/appx/libms/spec.rst:121 +#, fuzzy +msgid "Book model" +msgstr "Моделі" + +#: ../../src/appx/libms/spec.rst:123 +msgid "" +"The ``Book`` model represents a physical book in the library's collection. " +"Each book record captures essential bibliographic information, as well as " +"details related to its current status in the library (e.g. available, " +"borrowed etc.)." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Title" +msgstr "title" + +#: ../../src/appx/libms/spec.rst:131 +#, fuzzy +msgid "The name or title of the book (255 characters or fewer)." +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." + +#: ../../src/appx/libms/spec.rst +msgid "Summary" +msgstr "" + +#: ../../src/appx/libms/spec.rst:134 +msgid "A brief description or synopsis of the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "ISBN" +msgstr "" + +#: ../../src/appx/libms/spec.rst:137 +msgid "International Standard Book Number, a unique identifier for books." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Available" +msgstr "Змінні" + +#: ../../src/appx/libms/spec.rst:140 +msgid "" +"Current available status of the book. Either ``True`` or ``False``. Books " +"are available by default." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Published date" +msgstr "" + +#: ../../src/appx/libms/spec.rst:144 +msgid "The date when the book was published." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Publisher" +msgstr "Користувач" + +#: ../../src/appx/libms/spec.rst:147 +msgid "" +"The entity or company responsible for the production and distribution of the " +"book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Genre(s)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:151 +msgid "" +"The category or type of content the book falls under (e.g., Fiction, Non-" +"Fiction, Science)." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Author(s)" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:156 +msgid "" +"The name of the person or group responsible for creating the content of the " +"book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Borrower" +msgstr "" + +#: ../../src/appx/libms/spec.rst:160 +msgid "The user who has currently borrowed the book, if applicable." +msgstr "" + +#: ../../src/appx/libms/spec.rst:163 +msgid "Borrow request model" +msgstr "" + +#: ../../src/appx/libms/spec.rst:165 +msgid "" +"The ``BorrowRequest`` model captures the intent of a user to borrow a " +"specific book. It tracks the status of the request, whether it's pending, " +"approved, declined, or completed." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Book" +msgstr "" + +#: ../../src/appx/libms/spec.rst:173 +msgid "A reference to a book to be borrowed." +msgstr "" + +#: ../../src/appx/libms/spec.rst:176 +msgid "A reference to a user who wants to borrow a book." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Status" +msgstr "" + +#: ../../src/appx/libms/spec.rst:179 +msgid "The current status of the request." +msgstr "" + +#: ../../src/appx/libms/spec.rst:181 +#, fuzzy +msgid "pending" +msgstr "Значення" + +#: ../../src/appx/libms/spec.rst:182 +msgid "approved" +msgstr "" + +#: ../../src/appx/libms/spec.rst:183 +msgid "collected" +msgstr "" + +#: ../../src/appx/libms/spec.rst:184 +msgid "complete" +msgstr "" + +#: ../../src/appx/libms/spec.rst:185 +msgid "declined" +msgstr "" + +#: ../../src/appx/libms/spec.rst:187 +msgid "" +"The status constants should be encapsulated within the ``BorrowRequest`` " +"model." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Overdue" +msgstr "" + +#: ../../src/appx/libms/spec.rst:202 +msgid "A flag indicating if a borrow request was overdue." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Request date" +msgstr "Дата створення" + +#: ../../src/appx/libms/spec.rst:205 +msgid "The date the borrow request was made. This is required." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Approval date" +msgstr "" + +#: ../../src/appx/libms/spec.rst:208 +msgid "The date the request was approved, if applicable. Optional." +msgstr "" + +#: ../../src/appx/libms/spec.rst +msgid "Due date" +msgstr "" + +#: ../../src/appx/libms/spec.rst:211 +msgid "" +"The date by which the book should be returned. Optional, should only be set " +"if the request if approved." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Complete date" +msgstr "Дата створення" + +#: ../../src/appx/libms/spec.rst:215 +msgid "" +"The date the book was returned and the borrowing request was completed. " +"Optional, should only be set if the request has reached the \"Complete\" " +"status." +msgstr "" + +#: ../../src/appx/libms/spec.rst:228 +msgid "Book to author" +msgstr "" + +#: ../../src/appx/libms/spec.rst:230 +msgid "" +"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " +"can have **one or more** ``authors``. This establishes a **many-to-many** " +"relationship between the two entities." +msgstr "" + +#: ../../src/appx/libms/spec.rst:235 +msgid "Book to genre" +msgstr "" + +#: ../../src/appx/libms/spec.rst:237 +msgid "" +"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " +"However a ``Book`` might not belong to any genre. This relationship between " +"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " +"possibility of zero genres for a book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:243 +msgid "Book to borrow request" +msgstr "" + +#: ../../src/appx/libms/spec.rst:245 +msgid "" +"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " +"relationship." +msgstr "" + +#: ../../src/appx/libms/spec.rst:250 +msgid "User to borrow request" +msgstr "" + +#: ../../src/appx/libms/spec.rst:252 +msgid "" +"Each ``User`` can make multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers to only one book, forming a **many-to-one** " +"relationship." +msgstr "" + +#: ../../src/appx/libms/spec.rst:256 +msgid "User to book (as a borrower)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:258 +msgid "" +"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " +"``Book`` can be borrowed by one user only. This forms a **one-to-one** " +"relationship." +msgstr "" + +#: ../../src/appx/libms/spec.rst:264 +#, fuzzy +msgid "Views and templates" +msgstr "Завдання: Шаблони" + +#: ../../src/appx/libms/spec.rst:267 +msgid "Admin site" +msgstr "" + +#: ../../src/appx/libms/spec.rst:269 +msgid "" +"Admin site provides the full control over the entire system. Only admins are " +"permitted to use admin site. Librarians should use their dedicated views to " +"perform operations, except special cases." +msgstr "" + +#: ../../src/appx/libms/spec.rst:275 +#, fuzzy +msgid "Authentication" +msgstr "Завдання: Автентифікація" + +#: ../../src/appx/libms/spec.rst:278 +msgid "Login" +msgstr "" + +#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 +#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 +#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:494 +#: ../../src/appx/libms/spec.rst:511 +msgid "Template" +msgstr "" + +#: ../../src/appx/libms/spec.rst:282 +msgid "" +"A form with fields for entering a username and a password, and a submit " +"button." +msgstr "" + +#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 +#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 +#: ../../src/appx/libms/spec.rst:389 ../../src/appx/libms/spec.rst:475 +#: ../../src/appx/libms/spec.rst:498 +msgid "View logic" +msgstr "" + +#: ../../src/appx/libms/spec.rst:286 +msgid "" +"Validate entered credentials and authenticate the user. In case of incorrect " +"credentials, display an error message." +msgstr "" + +#: ../../src/appx/libms/spec.rst:290 +#, fuzzy +msgid "Registration" +msgstr "Опис" + +#: ../../src/appx/libms/spec.rst:294 +#, fuzzy +msgid "A form for new user registration. **Required** fields are:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" + +#: ../../src/appx/libms/spec.rst:297 +#, fuzzy +msgid "first name" +msgstr "Ім'я" + +#: ../../src/appx/libms/spec.rst:298 +#, fuzzy +msgid "last name" +msgstr "Прізвище" + +#: ../../src/appx/libms/spec.rst:304 +msgid "Upon submission, the view should validate the provided data:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:306 +msgid "Check if username is already taken." +msgstr "" + +#: ../../src/appx/libms/spec.rst:307 +#, fuzzy +msgid "Ensure that password and confirm password fields match." +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." + +#: ../../src/appx/libms/spec.rst:308 +msgid "" +"Save the user's data if all validations pass. Otherwise, display appropriate " +"error messages." +msgstr "" + +#: ../../src/appx/libms/spec.rst:311 +msgid "" +"When saving passwords in the database, always store them in a hashed format, " +"never in plain text." +msgstr "" + +#: ../../src/appx/libms/spec.rst:315 +msgid "" +"Django's built-in ``User`` model and authentication system handle password " +"hashing by default, which is a big plus." +msgstr "" + +#: ../../src/appx/libms/spec.rst:319 +msgid "Borrowing History" +msgstr "" + +#: ../../src/appx/libms/spec.rst:321 +msgid "This view is available only for authenticated users." +msgstr "" + +#: ../../src/appx/libms/spec.rst:325 +msgid "" +"Users can see the list of **all** their borrows requests, regardless of " +"approve/decline status." +msgstr "" + +#: ../../src/appx/libms/spec.rst:330 +#, fuzzy +msgid "Authenticated users can see only their own borrow requests." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." + +#: ../../src/appx/libms/spec.rst:331 +msgid "" +"Librarians and admins can access borrows requests list for any user, " +"registered in the library system." +msgstr "" + +#: ../../src/appx/libms/spec.rst:335 +msgid "Library collection" +msgstr "" + +#: ../../src/appx/libms/spec.rst:337 +msgid "" +"These views are generally available for all (including anonymous) users. The " +"functionality for authenticated users include books borrowing." +msgstr "" + +#: ../../src/appx/libms/spec.rst:341 +msgid "Books list" +msgstr "" + +#: ../../src/appx/libms/spec.rst:345 +msgid "A list (or table) of books. Each book entry should provide information:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:348 +#, fuzzy +msgid "author(s)" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:349 +msgid "summary (truncated if too long, 30 words or fewer)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:350 +msgid "availability status (either **Available** or **Unavailable**)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:354 +#, fuzzy +msgid "Querying the data" +msgstr "купівля кошика" + +#: ../../src/appx/libms/spec.rst:356 +msgid "Fetch **all** books from the database" +msgstr "" + +#: ../../src/appx/libms/spec.rst:358 +msgid "Checking availability status (visual mark)" +msgstr "" + +#: ../../src/appx/libms/spec.rst:360 +msgid "" +"For each book, determine its availability status. Check ``Book.available`` " +"flag." +msgstr "" + +#: ../../src/appx/libms/spec.rst:364 +msgid "" +"A user can still create a borrowing request, regardless of the book " +"availability status. This is only the visual mark." +msgstr "" + +#: ../../src/appx/libms/spec.rst:368 +msgid "Detail view" +msgstr "" + +#: ../../src/appx/libms/spec.rst:372 +msgid "" +"The detailed view of a specific book, presenting comprehensive information:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:374 +msgid "**Title**: Display the book's title prominently." +msgstr "" + +#: ../../src/appx/libms/spec.rst:375 +msgid "**Genre(s)**: List all associated genres (if any)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:376 +msgid "**Author(s)**: List all associated authors." +msgstr "" + +#: ../../src/appx/libms/spec.rst:377 +msgid "**ISBN**: The International Standard Book Number." +msgstr "" + +#: ../../src/appx/libms/spec.rst:378 +msgid "**Published Date**: When the book was published." +msgstr "" + +#: ../../src/appx/libms/spec.rst:379 +msgid "" +"**Publisher**: The name of the entity or company responsible for publishing" +msgstr "" + +#: ../../src/appx/libms/spec.rst:380 +msgid "**Summary**: A full summary or description of the book. the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:382 +msgid "" +"**Action Buttons** (For authenticated users only): - **Borrow Request " +"Button**: If the user has no associated borrow request" +msgstr "" + +#: ../../src/appx/libms/spec.rst:384 +msgid "they can create a new one." +msgstr "" + +#: ../../src/appx/libms/spec.rst:385 +msgid "" +"**Gather Book Button**: If the user's borrow request for this book has been " +"approved, allow the user to confirm they've picked up the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:390 +msgid "**Fetching Book Details**:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:392 +msgid "" +"Use the book's identifier (usually a primary key) to fetch its details from " +"the database." +msgstr "" + +#: ../../src/appx/libms/spec.rst:395 +#, fuzzy +msgid "**Checking User Authentication**:" +msgstr "Завдання: Автентифікація" + +#: ../../src/appx/libms/spec.rst:397 +msgid "" +"Determine if a user is authenticated. If they are, display the appropriate " +"action buttons based on the book's availability status and any existing " +"borrow requests by the user." +msgstr "" + +#: ../../src/appx/libms/spec.rst:401 +msgid "**Handling Borrow Requests**:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:403 +msgid "If an authenticated user clicks on the \"Borrow Request\" button:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:405 +msgid "" +"Create a new borrow request in the ``BorrowRequest`` model with status " +"\"pending\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:407 +msgid "Update the book's status to \"Awaiting approval\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:408 +msgid "" +"Redirect the user to a confirmation page or display a message indicating the " +"request has been made." +msgstr "" + +#: ../../src/appx/libms/spec.rst:411 +msgid "**Handling Book Gathering**:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:413 +msgid "" +"If an authenticated user has an approved borrow request and clicks the " +"\"Gather Book\" button:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:416 +msgid "Update the book's status to \"Borrowed\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:417 +msgid "Update the borrow request's status to \"complete\"." +msgstr "" + +#: ../../src/appx/libms/spec.rst:418 +msgid "" +"Redirect the user to a confirmation page or display a message indicating " +"they've picked up the book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:422 +msgid "" +"Always ensure the user's actions are authenticated and authorized. This " +"prevents unauthorized borrow requests or gathering of books. Also, consider " +"adding error handling to manage cases where the book's details cannot be " +"fetched or any other unexpected issues." +msgstr "" + +#: ../../src/appx/libms/spec.rst:428 +#, fuzzy +msgid "Books management" +msgstr "Керування Статтями" + +#: ../../src/appx/libms/spec.rst:430 +msgid "These views are available only for staff (librarians and admins)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:433 +msgid "Authors and genres management" +msgstr "" + +#: ../../src/appx/libms/spec.rst:435 +msgid "" +"Only librarians and admins can add, modify or delete authors and genres. No " +"additional views for CRUD operations required (except admin site). " +"Librarians are allowed to access authors and genres via admin site. Only " +"admins can remove authors or genres." +msgstr "" + +#: ../../src/appx/libms/spec.rst:441 +#, fuzzy +msgid "Book creation and update" +msgstr "Дата створення" + +#: ../../src/appx/libms/spec.rst:443 +msgid "" +"The template should comprise a form with fields corresponding to the book's " +"attributes. Here are the essential elements for the form:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:447 ../../src/appx/libms/spec.rst:462 +msgid "A text input field." +msgstr "" + +#: ../../src/appx/libms/spec.rst:450 +#, fuzzy +msgid "A textarea for a brief description or synopsis." +msgstr "Надайте короткий опис вашого запиту." + +#: ../../src/appx/libms/spec.rst:453 +msgid "A text input field for the book's International Standard Book Number." +msgstr "" + +#: ../../src/appx/libms/spec.rst:456 +msgid "A checkbox indicating if a book is available. Defaults to ``True``." +msgstr "" + +#: ../../src/appx/libms/spec.rst:459 +msgid "A date input field." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Genres" +msgstr "Основне" + +#: ../../src/appx/libms/spec.rst:465 +msgid "" +"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " +"fetch available genres from the database and allow users to select zero or " +"more genres." +msgstr "" + +#: ../../src/appx/libms/spec.rst +#, fuzzy +msgid "Authors" +msgstr "Ім'я автора" + +#: ../../src/appx/libms/spec.rst:470 +msgid "" +"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " +"fetch available authors from the database and allow users to select one or " +"more authors." +msgstr "" + +#: ../../src/appx/libms/spec.rst:476 +msgid "" +"If it's an *update* action, pre-populate the form fields with the existing " +"details of the book fetched from the database." +msgstr "" + +#: ../../src/appx/libms/spec.rst:478 +msgid "For *creation*, provide an empty form for the librarian to fill in." +msgstr "" + +#: ../../src/appx/libms/spec.rst:479 +msgid "Ensure the published date is logical (e.g. not a future date)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:480 +msgid "Validate required inputs, according to general ``Book`` model rules." +msgstr "" + +#: ../../src/appx/libms/spec.rst:481 +msgid "" +"If validations pass: save changes to the database; otherwise, provide " +"helpful error messages." +msgstr "" + +#: ../../src/appx/libms/spec.rst:485 +msgid "" +"You MAY provide a mechanism (like modal or a quick entry form) to add a new " +"genre or author without leaving the book form page." +msgstr "" + +#: ../../src/appx/libms/spec.rst:489 +#, fuzzy +msgid "Book deletion" +msgstr "видалення статті" + +#: ../../src/appx/libms/spec.rst:491 +msgid "" +"Only librarians and administrators are permitted to perform this action." +msgstr "" + +#: ../../src/appx/libms/spec.rst:495 +msgid "A confirm delete form with **Submit** and **Cancel** buttons." +msgstr "" + +#: ../../src/appx/libms/spec.rst:499 +msgid "Authorize user before deleting performing deletion." +msgstr "" + +#: ../../src/appx/libms/spec.rst:500 +msgid "" +"If a form is submitted, a book should be removed from the library collection." +msgstr "" + +#: ../../src/appx/libms/spec.rst:502 +msgid "" +"If deletion is canceled view should redirect back to book detail view page." +msgstr "" + +#: ../../src/appx/libms/spec.rst:505 +#, fuzzy +msgid "Borrow requests" +msgstr "Про pull requests" + +#: ../../src/appx/libms/spec.rst:507 +msgid "" +"This view facilitates the management of borrowing requests for librarians " +"and admins, aiding in their prompt handling." +msgstr "" + +#: ../../src/appx/libms/spec.rst:512 +msgid "" +"Present a table showcasing the list of borrow requests. Each row embodies a " +"borrow request and encompasses:" +msgstr "" + +#: ../../src/appx/libms/spec.rst:515 +msgid "**Book Title**: Title of the requested book." +msgstr "" + +#: ../../src/appx/libms/spec.rst:516 +msgid "**User**: Identifier of the user who initiated the request." +msgstr "" + +#: ../../src/appx/libms/spec.rst:517 +msgid "**Request Date**: Date of the request's inception." +msgstr "" + +#: ../../src/appx/libms/spec.rst:518 +msgid "" +"**Due Date**: - Input field for librarians to set upon approval for new " +"requests. - For approved ones, display the librarian-set date." +msgstr "" + +#: ../../src/appx/libms/spec.rst:521 +msgid "" +"**Status**: Present state of the request (New, Approved, Completed, " +"Declined)." +msgstr "" + +#: ../../src/appx/libms/spec.rst:523 +msgid "" +"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " +"and freezes the due date." +msgstr "" + +#: ../../src/appx/libms/spec.rst:525 +msgid "" +"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " +"and can prompt for a decline reason." +msgstr "" + +#: ../../src/appx/libms/spec.rst:527 +msgid "" +"**Complete Button**: Displayed for approved requests. Marks the request as " +"completed." +msgstr "" + +#: ../../src/appx/libms/spec.rst:531 +msgid "View Logic" +msgstr "" + +#: ../../src/appx/libms/spec.rst:532 +msgid "" +"**Approve Borrow Request**: - Validate book availability. - Modify book " +"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " +"Define the return due date as per librarian. - Inform the user about the " +"approval and due date." +msgstr "" + +#: ../../src/appx/libms/spec.rst:539 +msgid "" +"**Decline Borrow Request**: - Change borrow request status to " +"\"Declined\". - Optionally, procure decline reason from librarian. - " +"Notify user regarding the declination." +msgstr "" + +#: ../../src/appx/libms/spec.rst:544 +msgid "" +"**Complete Borrow Request**: - Ensure book's return. - Update book " +"status to \"Available\". - Toggle borrow request status to \"Completed\". " +"- If needed, record any notes or damages during return." +msgstr "" + +#: ../../src/appx/libms/spec.rst:551 +msgid "" +"Implementing reminders for near-due borrow requests can function as an alert " +"system for both the librarian and the user." +msgstr "" + #: ../../src/appx/precedence.txt:-1 msgid "Operator precedence in Python" msgstr "Пріоритет операторів в Python" diff --git a/src/appx/libms b/src/appx/libms new file mode 160000 index 000000000..e578b8339 --- /dev/null +++ b/src/appx/libms @@ -0,0 +1 @@ +Subproject commit e578b83395481f5a5904064f2bdb879b1bcc185b From 2610cde8ed7770e870bf0e008c6cc8a73fb9602e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 15 Aug 2023 15:46:13 +0300 Subject: [PATCH 428/689] Add link to "libms" in "appx" toc-section --- src/index.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.txt b/src/index.txt index 05fa4dd23..b1de255e3 100644 --- a/src/index.txt +++ b/src/index.txt @@ -31,6 +31,7 @@ appx/conv_store appx/wtk appx/blog/spec + appx/libms/spec .. rubric:: References From b03ae129de67b7554c129ddf9ab4fa1e63db5558 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 14 Sep 2023 16:07:43 +0300 Subject: [PATCH 429/689] Add translation for LibMS specification Conflicts: - src/_locales/uk/LC_MESSAGES/appx.po --- src/_locales/uk/LC_MESSAGES/appx.po | 605 +++++++++++++++++----------- src/appx/libms | 2 +- 2 files changed, 376 insertions(+), 231 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po index d50027e42..5af39ec36 100644 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ b/src/_locales/uk/LC_MESSAGES/appx.po @@ -2198,7 +2198,7 @@ msgstr "Проблема - System Environment PATH" #: ../../src/appx/libms/spec.rst:3 msgid "Library Management System - Specification" -msgstr "" +msgstr "Система Керування Бібліотекою - Специфікація" #: ../../src/appx/libms/spec.rst:5 msgid "" @@ -2213,6 +2213,16 @@ msgid "" "from regular members to staff and administrators, each with distinct " "capabilities." msgstr "" +"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " +"пропонує цифрову платформу для управління та взаємодії з колекцією " +"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " +"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " +"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " +"книги, робити запити на позику та керувати позиченими предметами. " +"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " +"записів книг та можуть схвалювати або відхиляти запити на позику. Система " +"також підтримує різноманітні ролі користувачів, від звичайних членів до " +"персоналу та адміністраторів, кожен з яких має відмінні можливості." #: ../../src/appx/libms/spec.rst:15 msgid "" @@ -2222,10 +2232,15 @@ msgid "" "technological innovations, promoting efficiency and an enhanced user " "experience." msgstr "" +"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " +"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " +"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " +"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " +"покращенню користувацького досвіду." #: ../../src/appx/libms/spec.rst:22 msgid "User roles" -msgstr "" +msgstr "Ролі користувачів" #: ../../src/appx/libms/spec.rst:25 msgid "" @@ -2233,34 +2248,41 @@ msgid "" "implementing these roles to ensure that users cannot perform actions outside " "their designated role's scope." msgstr "" +"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " +"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " +"рамки призначеної їм ролі." #: ../../src/appx/libms/spec.rst:30 -#, fuzzy msgid "Admins" -msgstr "pgAdmin" +msgstr "Адміністратори" #: ../../src/appx/libms/spec.rst:32 msgid "" "Superusers have full control over the entire system. They can access and " "manage all functionalities provided by the Django admin site." msgstr "" +"Адміністратори мають повний контроль над усією системою. Вони можуть " +"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " +"керувати ними." #: ../../src/appx/libms/spec.rst:35 msgid "Admins can create, modify, or delete any record within the application." msgstr "" +"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " +"додатку." #: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 #: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 msgid "Capabilities" -msgstr "" +msgstr "Можливості" #: ../../src/appx/libms/spec.rst:39 msgid "Access Django admin site" -msgstr "" +msgstr "Доступ до адміністративного сайту Django" #: ../../src/appx/libms/spec.rst:42 msgid "Librarians" -msgstr "" +msgstr "Бібліотекарі" #: ../../src/appx/libms/spec.rst:44 msgid "" @@ -2268,38 +2290,42 @@ msgid "" "They can add new books to the library's collection, manage existing books' " "details, and accept or decline borrow requests from regular users." msgstr "" +"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " +"можуть додавати нові книги до бібліотечної колекції, керувати даними про " +"наявні книги, а також приймати або відхиляти запити від постійних " +"користувачів." #: ../../src/appx/libms/spec.rst:50 msgid "Management of the library catalogue" -msgstr "" +msgstr "Управління бібліотечним каталогом" #: ../../src/appx/libms/spec.rst:52 msgid "Add, modify or delete authors" -msgstr "" +msgstr "Додавати, змінювати або видаляти авторів" #: ../../src/appx/libms/spec.rst:53 msgid "Add, modify or delete genres" -msgstr "" +msgstr "Додавати, змінювати або видаляти жанри" #: ../../src/appx/libms/spec.rst:54 msgid "Add, modify or delete books' details" -msgstr "" +msgstr "Додавати, змінювати або видаляти дані про книги" #: ../../src/appx/libms/spec.rst:56 msgid "Review borrow requests from regular users" -msgstr "" +msgstr "Переглядати запити на позичення від користувачів" #: ../../src/appx/libms/spec.rst:57 msgid "Accept or decline borrow requests" -msgstr "" +msgstr "Приймати або відхиляти запити на позичення" #: ../../src/appx/libms/spec.rst:58 msgid "Register returned books and update their status" -msgstr "" +msgstr "Реєструвати повернені книги та оновлювати їх статус" #: ../../src/appx/libms/spec.rst:61 msgid "Regular" -msgstr "" +msgstr "Звичайний" #: ../../src/appx/libms/spec.rst:63 msgid "" @@ -2307,85 +2333,86 @@ msgid "" "books, request to borrow them, and are responsible for returning borrowed " "books on time." msgstr "" +"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " +"книги, запитувати їх, а також несуть відповідальність за своєчасне " +"повернення позичених книг." #: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 msgid "Browse the books' catalogue" -msgstr "" +msgstr "Переглядати каталог книг" #: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 msgid "View details of a book" -msgstr "" +msgstr "Переглядати деталі книги" #: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 msgid "Search books" -msgstr "" +msgstr "Шукати книги" #: ../../src/appx/libms/spec.rst:72 msgid "Request to borrow available books" -msgstr "" +msgstr "Робити запит на позичення доступних книжок" #: ../../src/appx/libms/spec.rst:73 msgid "Check due date for returned books" -msgstr "" +msgstr "Перевіряти термін повернення запозичених книжок" #: ../../src/appx/libms/spec.rst:74 msgid "Return borrowed books" -msgstr "" +msgstr "Повертати запозичені книги" #: ../../src/appx/libms/spec.rst:77 msgid "Anonymous" -msgstr "" +msgstr "Анонімні" #: ../../src/appx/libms/spec.rst:79 msgid "Anonymous users are visitors who haven't logged into the system." -msgstr "" +msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." #: ../../src/appx/libms/spec.rst:86 msgid "Access to the registration or login pages" -msgstr "" +msgstr "Доступ до сторінок реєстрації або входу" #: ../../problem-sets/src/wtk/challenge.rst:95 ../../src/appx/libms/spec.rst:90 msgid "Models" msgstr "Моделі" #: ../../src/appx/libms/spec.rst:93 -#, fuzzy msgid "Author model" -msgstr "Ім'я автора" +msgstr "Модель авторів" #: ../../src/appx/libms/spec.rst:95 msgid "" "The ``Author`` model captures the details of the person, or group " "responsible for creating the book." msgstr "" +"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " +"за створення книги." #: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 #: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 -#, fuzzy msgid "Attributes" -msgstr "Змінні" +msgstr "Атрибути" #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Name" -msgstr "username" +msgstr "Name" #: ../../src/appx/libms/spec.rst:102 msgid "The full name of the author. This should be limited to 255 characters." -msgstr "" +msgstr "Повне ім'я автора. Не більше 255 символів." #: ../../src/appx/libms/spec.rst msgid "Bio" -msgstr "" +msgstr "Bio" #: ../../src/appx/libms/spec.rst:105 msgid "A brief biography or description of the author." -msgstr "" +msgstr "Коротка біографія або опис автора." #: ../../src/appx/libms/spec.rst:108 -#, fuzzy msgid "Genre model" -msgstr "Модель супротивника" +msgstr "Модель жанра" #: ../../src/appx/libms/spec.rst:110 msgid "" @@ -2394,16 +2421,18 @@ msgid "" "etc. Since a book can belong to more than one category at a time, it is " "implemented as a dedicated model." msgstr "" +"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " +"книга, наприклад, \"Художня література\", \"Нехудожня література\", " +"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " +"категорій одночасно, вона реалізована як окрема модель." #: ../../src/appx/libms/spec.rst:118 -#, fuzzy msgid "The name of the genre." -msgstr "назва товару" +msgstr "Назва жанру." #: ../../src/appx/libms/spec.rst:121 -#, fuzzy msgid "Book model" -msgstr "Моделі" +msgstr "Модель книги" #: ../../src/appx/libms/spec.rst:123 msgid "" @@ -2412,95 +2441,101 @@ msgid "" "details related to its current status in the library (e.g. available, " "borrowed etc.)." msgstr "" +"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " +"запис про книгу містить основну бібліографічну інформацію, а також деталі, " +"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " +"тощо)." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Title" -msgstr "title" +msgstr "Title" #: ../../src/appx/libms/spec.rst:131 -#, fuzzy msgid "The name or title of the book (255 characters or fewer)." -msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." +msgstr "Назва книги (255 символів або менше)." #: ../../src/appx/libms/spec.rst msgid "Summary" -msgstr "" +msgstr "Summary" #: ../../src/appx/libms/spec.rst:134 msgid "A brief description or synopsis of the book." -msgstr "" +msgstr "Короткий опис або синопсис книги." #: ../../src/appx/libms/spec.rst msgid "ISBN" -msgstr "" +msgstr "ISBN" #: ../../src/appx/libms/spec.rst:137 msgid "International Standard Book Number, a unique identifier for books." msgstr "" +"International Standard Book Number, унікальний ідентифікатор для книг.." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Available" -msgstr "Змінні" +msgstr "Available" #: ../../src/appx/libms/spec.rst:140 msgid "" "Current available status of the book. Either ``True`` or ``False``. Books " "are available by default." msgstr "" +"Поточний статус доступності книги. Або ``True``, або ``False``. За " +"замовчуванням книги доступні." #: ../../src/appx/libms/spec.rst msgid "Published date" -msgstr "" +msgstr "Published date" #: ../../src/appx/libms/spec.rst:144 msgid "The date when the book was published." -msgstr "" +msgstr "Дата, коли книга була опублікована." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Publisher" -msgstr "Користувач" +msgstr "Publisher" #: ../../src/appx/libms/spec.rst:147 msgid "" "The entity or company responsible for the production and distribution of the " "book." msgstr "" +"Організація або компанія, відповідальна за виробництво та розповсюдження " +"книги." #: ../../src/appx/libms/spec.rst msgid "Genre(s)" -msgstr "" +msgstr "Genre(s)" #: ../../src/appx/libms/spec.rst:151 msgid "" "The category or type of content the book falls under (e.g., Fiction, Non-" "Fiction, Science)." msgstr "" +"Категорія або тип контенту, до якого належить книга (наприклад, художня " +"література, нон-фікшн, наукова література)." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Author(s)" -msgstr "Ім'я автора" +msgstr "Author(s)" #: ../../src/appx/libms/spec.rst:156 msgid "" "The name of the person or group responsible for creating the content of the " "book." -msgstr "" +msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." #: ../../src/appx/libms/spec.rst msgid "Borrower" -msgstr "" +msgstr "Borrower" #: ../../src/appx/libms/spec.rst:160 msgid "The user who has currently borrowed the book, if applicable." -msgstr "" +msgstr "Користувач, який наразі позичив книгу, якщо це можливо." #: ../../src/appx/libms/spec.rst:163 msgid "Borrow request model" -msgstr "" +msgstr "Модель запиту на позику" #: ../../src/appx/libms/spec.rst:165 msgid "" @@ -2508,93 +2543,95 @@ msgid "" "specific book. It tracks the status of the request, whether it's pending, " "approved, declined, or completed." msgstr "" +"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " +"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." #: ../../src/appx/libms/spec.rst msgid "Book" -msgstr "" +msgstr "Book" #: ../../src/appx/libms/spec.rst:173 msgid "A reference to a book to be borrowed." -msgstr "" +msgstr "Посилання на книгу, яку потрібно взяти." #: ../../src/appx/libms/spec.rst:176 msgid "A reference to a user who wants to borrow a book." -msgstr "" +msgstr "Посилання на користувача, який хоче взяти книгу." #: ../../src/appx/libms/spec.rst msgid "Status" -msgstr "" +msgstr "Status" #: ../../src/appx/libms/spec.rst:179 msgid "The current status of the request." -msgstr "" +msgstr "Поточний статус заявки." #: ../../src/appx/libms/spec.rst:181 -#, fuzzy msgid "pending" -msgstr "Значення" +msgstr "pending" #: ../../src/appx/libms/spec.rst:182 msgid "approved" -msgstr "" +msgstr "approved" #: ../../src/appx/libms/spec.rst:183 msgid "collected" -msgstr "" +msgstr "collected" #: ../../src/appx/libms/spec.rst:184 msgid "complete" -msgstr "" +msgstr "complete" #: ../../src/appx/libms/spec.rst:185 msgid "declined" -msgstr "" +msgstr "declined" #: ../../src/appx/libms/spec.rst:187 msgid "" "The status constants should be encapsulated within the ``BorrowRequest`` " "model." msgstr "" +"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." #: ../../src/appx/libms/spec.rst msgid "Overdue" -msgstr "" +msgstr "Overdue" #: ../../src/appx/libms/spec.rst:202 msgid "A flag indicating if a borrow request was overdue." -msgstr "" +msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Request date" -msgstr "Дата створення" +msgstr "Request date" #: ../../src/appx/libms/spec.rst:205 msgid "The date the borrow request was made. This is required." -msgstr "" +msgstr "Дата подання запиту на позику. Це обов'язкова інформація." #: ../../src/appx/libms/spec.rst msgid "Approval date" -msgstr "" +msgstr "Approval date" #: ../../src/appx/libms/spec.rst:208 msgid "The date the request was approved, if applicable. Optional." -msgstr "" +msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." #: ../../src/appx/libms/spec.rst msgid "Due date" -msgstr "" +msgstr "Due date" #: ../../src/appx/libms/spec.rst:211 msgid "" "The date by which the book should be returned. Optional, should only be set " "if the request if approved." msgstr "" +"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " +"у разі схвалення запиту." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Complete date" -msgstr "Дата створення" +msgstr "Complete date" #: ../../src/appx/libms/spec.rst:215 msgid "" @@ -2602,10 +2639,12 @@ msgid "" "Optional, should only be set if the request has reached the \"Complete\" " "status." msgstr "" +"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " +"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." #: ../../src/appx/libms/spec.rst:228 msgid "Book to author" -msgstr "" +msgstr "Книга до автору" #: ../../src/appx/libms/spec.rst:230 msgid "" @@ -2613,10 +2652,13 @@ msgid "" "can have **one or more** ``authors``. This establishes a **many-to-many** " "relationship between the two entities." msgstr "" +"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " +"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " +"**багато-до-багатьох** між цими двома сутностями." #: ../../src/appx/libms/spec.rst:235 msgid "Book to genre" -msgstr "" +msgstr "Книга до жанру" #: ../../src/appx/libms/spec.rst:237 msgid "" @@ -2625,10 +2667,14 @@ msgid "" "``Genre`` and ``Book`` is still considered **many-to-many**, but with the " "possibility of zero genres for a book." msgstr "" +"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " +"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " +"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " +"можливістю нульових жанрів для книги." #: ../../src/appx/libms/spec.rst:243 msgid "Book to borrow request" -msgstr "" +msgstr "Книга до запиту на позику" #: ../../src/appx/libms/spec.rst:245 msgid "" @@ -2636,10 +2682,13 @@ msgid "" "``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " "relationship." msgstr "" +"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " +"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " +"зв'язок **багато-до-одного**." #: ../../src/appx/libms/spec.rst:250 msgid "User to borrow request" -msgstr "" +msgstr "Користувач до запиту на позику" #: ../../src/appx/libms/spec.rst:252 msgid "" @@ -2647,10 +2696,13 @@ msgid "" "``BorrowRequest`` refers to only one book, forming a **many-to-one** " "relationship." msgstr "" +"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " +"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " +"``багато до однієї``." #: ../../src/appx/libms/spec.rst:256 msgid "User to book (as a borrower)" -msgstr "" +msgstr "Користувач до книги (як запозичувач)" #: ../../src/appx/libms/spec.rst:258 msgid "" @@ -2658,15 +2710,17 @@ msgid "" "``Book`` can be borrowed by one user only. This forms a **one-to-one** " "relationship." msgstr "" +"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " +"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " +"відносини \"один до одного\"." #: ../../src/appx/libms/spec.rst:264 -#, fuzzy msgid "Views and templates" -msgstr "Завдання: Шаблони" +msgstr "Подання та шаблони" #: ../../src/appx/libms/spec.rst:267 msgid "Admin site" -msgstr "" +msgstr "Адмін-сайт" #: ../../src/appx/libms/spec.rst:269 msgid "" @@ -2674,532 +2728,620 @@ msgid "" "permitted to use admin site. Librarians should use their dedicated views to " "perform operations, except special cases." msgstr "" +"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " +"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " +"повинні використовувати свої виділені подання для виконання операцій, за " +"винятком особливих випадків." #: ../../src/appx/libms/spec.rst:275 -#, fuzzy msgid "Authentication" -msgstr "Завдання: Автентифікація" +msgstr "Автентифікація" #: ../../src/appx/libms/spec.rst:278 msgid "Login" -msgstr "" +msgstr "Логін" #: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 #: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 -#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:494 -#: ../../src/appx/libms/spec.rst:511 +#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 +#: ../../src/appx/libms/spec.rst:512 msgid "Template" -msgstr "" +msgstr "Template" #: ../../src/appx/libms/spec.rst:282 msgid "" "A form with fields for entering a username and a password, and a submit " "button." msgstr "" +"Форма з полями для введення імені користувача та пароля, а також кнопкою " +"\"Надіслати\"." #: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 #: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 -#: ../../src/appx/libms/spec.rst:389 ../../src/appx/libms/spec.rst:475 -#: ../../src/appx/libms/spec.rst:498 +#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 +#: ../../src/appx/libms/spec.rst:499 msgid "View logic" -msgstr "" +msgstr "View logic" #: ../../src/appx/libms/spec.rst:286 msgid "" "Validate entered credentials and authenticate the user. In case of incorrect " "credentials, display an error message." msgstr "" +"Перевірити введені облікові дані та автентифікувати користувача. У разі " +"неправильних облікових даних вивести повідомлення про помилку." #: ../../src/appx/libms/spec.rst:290 -#, fuzzy msgid "Registration" -msgstr "Опис" +msgstr "Реєстрація" #: ../../src/appx/libms/spec.rst:294 -#, fuzzy msgid "A form for new user registration. **Required** fields are:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" +msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" #: ../../src/appx/libms/spec.rst:297 -#, fuzzy msgid "first name" -msgstr "Ім'я" +msgstr "first name" #: ../../src/appx/libms/spec.rst:298 -#, fuzzy msgid "last name" -msgstr "Прізвище" +msgstr "last name" #: ../../src/appx/libms/spec.rst:304 msgid "Upon submission, the view should validate the provided data:" -msgstr "" +msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" #: ../../src/appx/libms/spec.rst:306 msgid "Check if username is already taken." -msgstr "" +msgstr "Перевірте, чи не зайнято вже ім'я користувача." #: ../../src/appx/libms/spec.rst:307 -#, fuzzy msgid "Ensure that password and confirm password fields match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися." +msgstr "" +"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." #: ../../src/appx/libms/spec.rst:308 msgid "" "Save the user's data if all validations pass. Otherwise, display appropriate " "error messages." msgstr "" +"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " +"відобразити відповідні повідомлення про помилки." #: ../../src/appx/libms/spec.rst:311 msgid "" "When saving passwords in the database, always store them in a hashed format, " "never in plain text." msgstr "" +"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " +"не у вигляді простого тексту." #: ../../src/appx/libms/spec.rst:315 msgid "" "Django's built-in ``User`` model and authentication system handle password " "hashing by default, which is a big plus." msgstr "" +"Вбудована в Django модель ``User`` та система автентифікації за " +"замовчуванням обробляє хешування паролів, що є великим плюсом." #: ../../src/appx/libms/spec.rst:319 msgid "Borrowing History" -msgstr "" +msgstr "Історія запозичень" #: ../../src/appx/libms/spec.rst:321 msgid "This view is available only for authenticated users." -msgstr "" +msgstr "Це подання доступне лише для авторизованих користувачів." #: ../../src/appx/libms/spec.rst:325 msgid "" "Users can see the list of **all** their borrows requests, regardless of " "approve/decline status." msgstr "" +"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " +"від статусу схвалення/відхилення." #: ../../src/appx/libms/spec.rst:330 -#, fuzzy msgid "Authenticated users can see only their own borrow requests." -msgstr "Лише аутентифіковані користувачі можуть коментувати статті." +msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." #: ../../src/appx/libms/spec.rst:331 msgid "" "Librarians and admins can access borrows requests list for any user, " "registered in the library system." msgstr "" +"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " +"будь-якого користувача, зареєстрованого в бібліотечній системі." #: ../../src/appx/libms/spec.rst:335 msgid "Library collection" -msgstr "" +msgstr "Бібліотечний фонд" #: ../../src/appx/libms/spec.rst:337 msgid "" "These views are generally available for all (including anonymous) users. The " "functionality for authenticated users include books borrowing." msgstr "" +"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " +"користувачів. Функціонал для аутентифікованих користувачів включає в себе " +"можливість позичати книги." #: ../../src/appx/libms/spec.rst:341 msgid "Books list" -msgstr "" +msgstr "Список літератури" #: ../../src/appx/libms/spec.rst:345 msgid "A list (or table) of books. Each book entry should provide information:" msgstr "" +"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " +"книгу:" #: ../../src/appx/libms/spec.rst:348 -#, fuzzy msgid "author(s)" -msgstr "Ім'я автора" +msgstr "автор(и)" #: ../../src/appx/libms/spec.rst:349 msgid "summary (truncated if too long, 30 words or fewer)" -msgstr "" +msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" #: ../../src/appx/libms/spec.rst:350 msgid "availability status (either **Available** or **Unavailable**)" -msgstr "" +msgstr "статус доступності (**Доступний** або **Не доступний**)" #: ../../src/appx/libms/spec.rst:354 -#, fuzzy msgid "Querying the data" -msgstr "купівля кошика" +msgstr "Запит даних" #: ../../src/appx/libms/spec.rst:356 msgid "Fetch **all** books from the database" -msgstr "" +msgstr "Отримати **усі** книги з бази даних" #: ../../src/appx/libms/spec.rst:358 msgid "Checking availability status (visual mark)" -msgstr "" +msgstr "Перевірка статусу доступності (візуальна позначка)" #: ../../src/appx/libms/spec.rst:360 msgid "" "For each book, determine its availability status. Check ``Book.available`` " "flag." msgstr "" +"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." +"available``." #: ../../src/appx/libms/spec.rst:364 msgid "" "A user can still create a borrowing request, regardless of the book " "availability status. This is only the visual mark." msgstr "" +"Користувач все одно може створити запит на позику, незалежно від статусу " +"доступності книги. Це лише візуальна позначка." #: ../../src/appx/libms/spec.rst:368 msgid "Detail view" -msgstr "" +msgstr "Детальний перегляд" #: ../../src/appx/libms/spec.rst:372 msgid "" "The detailed view of a specific book, presenting comprehensive information:" -msgstr "" +msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" #: ../../src/appx/libms/spec.rst:374 msgid "**Title**: Display the book's title prominently." -msgstr "" +msgstr "**Назва**: Покажіть назву книги на видному місці." #: ../../src/appx/libms/spec.rst:375 msgid "**Genre(s)**: List all associated genres (if any)." -msgstr "" +msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." #: ../../src/appx/libms/spec.rst:376 msgid "**Author(s)**: List all associated authors." -msgstr "" +msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." #: ../../src/appx/libms/spec.rst:377 msgid "**ISBN**: The International Standard Book Number." -msgstr "" +msgstr "**ISBN**: Міжнародний стандартний номер книги." #: ../../src/appx/libms/spec.rst:378 msgid "**Published Date**: When the book was published." -msgstr "" +msgstr "**Дата публікації**: Коли вийшла друком книга." #: ../../src/appx/libms/spec.rst:379 msgid "" "**Publisher**: The name of the entity or company responsible for publishing" msgstr "" +"**Видавець**: Назва організації або компанії, відповідальної за публікацію" #: ../../src/appx/libms/spec.rst:380 msgid "**Summary**: A full summary or description of the book. the book." -msgstr "" +msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." #: ../../src/appx/libms/spec.rst:382 -msgid "" -"**Action Buttons** (For authenticated users only): - **Borrow Request " -"Button**: If the user has no associated borrow request" -msgstr "" +msgid "**Action Buttons** (For authenticated users only):" +msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" #: ../../src/appx/libms/spec.rst:384 -msgid "they can create a new one." +msgid "" +"**Borrow Request Button**: If the user has no associated borrow request they " +"can create a new one." msgstr "" +"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " +"позику, він може створити новий." -#: ../../src/appx/libms/spec.rst:385 +#: ../../src/appx/libms/spec.rst:386 msgid "" "**Gather Book Button**: If the user's borrow request for this book has been " "approved, allow the user to confirm they've picked up the book." msgstr "" +"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " +"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." -#: ../../src/appx/libms/spec.rst:390 +#: ../../src/appx/libms/spec.rst:391 msgid "**Fetching Book Details**:" -msgstr "" +msgstr "**Доступ до деталей книги**:" -#: ../../src/appx/libms/spec.rst:392 +#: ../../src/appx/libms/spec.rst:393 msgid "" "Use the book's identifier (usually a primary key) to fetch its details from " "the database." msgstr "" +"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " +"інформацію про неї з бази даних." -#: ../../src/appx/libms/spec.rst:395 -#, fuzzy +#: ../../src/appx/libms/spec.rst:396 msgid "**Checking User Authentication**:" -msgstr "Завдання: Автентифікація" +msgstr "**Перевірка автентичності користувача**:" -#: ../../src/appx/libms/spec.rst:397 +#: ../../src/appx/libms/spec.rst:398 msgid "" "Determine if a user is authenticated. If they are, display the appropriate " "action buttons based on the book's availability status and any existing " "borrow requests by the user." msgstr "" +"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " +"кнопки дій на основі статусу доступності книги та наявних запитів " +"користувача на позику." -#: ../../src/appx/libms/spec.rst:401 +#: ../../src/appx/libms/spec.rst:402 msgid "**Handling Borrow Requests**:" -msgstr "" +msgstr "**Обробка запитів на позику**:" -#: ../../src/appx/libms/spec.rst:403 +#: ../../src/appx/libms/spec.rst:404 msgid "If an authenticated user clicks on the \"Borrow Request\" button:" -msgstr "" +msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" -#: ../../src/appx/libms/spec.rst:405 +#: ../../src/appx/libms/spec.rst:406 msgid "" "Create a new borrow request in the ``BorrowRequest`` model with status " "\"pending\"." msgstr "" +"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " +"розгляді\"." -#: ../../src/appx/libms/spec.rst:407 +#: ../../src/appx/libms/spec.rst:408 msgid "Update the book's status to \"Awaiting approval\"." -msgstr "" +msgstr "Оновіть статус книги на \"Очікує затвердження\"." -#: ../../src/appx/libms/spec.rst:408 +#: ../../src/appx/libms/spec.rst:409 msgid "" "Redirect the user to a confirmation page or display a message indicating the " "request has been made." msgstr "" +"Перенаправлення користувача на сторінку підтвердження або відображення " +"повідомлення про те, що запит було зроблено." -#: ../../src/appx/libms/spec.rst:411 +#: ../../src/appx/libms/spec.rst:412 msgid "**Handling Book Gathering**:" -msgstr "" +msgstr "**Опрацювання Позики Книги**:" -#: ../../src/appx/libms/spec.rst:413 +#: ../../src/appx/libms/spec.rst:414 msgid "" "If an authenticated user has an approved borrow request and clicks the " "\"Gather Book\" button:" msgstr "" +"Якщо авторизований користувач має схвалений запит на позику і натискає " +"кнопку \"Зібрати книгу\":" -#: ../../src/appx/libms/spec.rst:416 +#: ../../src/appx/libms/spec.rst:417 msgid "Update the book's status to \"Borrowed\"." -msgstr "" +msgstr "Оновіть статус книги на \"Позичена\"." -#: ../../src/appx/libms/spec.rst:417 +#: ../../src/appx/libms/spec.rst:418 msgid "Update the borrow request's status to \"complete\"." -msgstr "" +msgstr "Оновіть статус запиту на позику до \"завершено\"." -#: ../../src/appx/libms/spec.rst:418 +#: ../../src/appx/libms/spec.rst:419 msgid "" "Redirect the user to a confirmation page or display a message indicating " "they've picked up the book." msgstr "" +"Перенаправляйте користувача на сторінку підтвердження або показуйте " +"повідомлення про те, що він забрав книгу." -#: ../../src/appx/libms/spec.rst:422 +#: ../../src/appx/libms/spec.rst:423 msgid "" "Always ensure the user's actions are authenticated and authorized. This " "prevents unauthorized borrow requests or gathering of books. Also, consider " "adding error handling to manage cases where the book's details cannot be " "fetched or any other unexpected issues." msgstr "" +"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " +"Це запобігає несанкціонованим запитам на позику або збору книг. Також " +"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " +"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." -#: ../../src/appx/libms/spec.rst:428 -#, fuzzy +#: ../../src/appx/libms/spec.rst:429 msgid "Books management" -msgstr "Керування Статтями" +msgstr "Управління книгами" -#: ../../src/appx/libms/spec.rst:430 +#: ../../src/appx/libms/spec.rst:431 msgid "These views are available only for staff (librarians and admins)." msgstr "" +"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." -#: ../../src/appx/libms/spec.rst:433 +#: ../../src/appx/libms/spec.rst:434 msgid "Authors and genres management" -msgstr "" +msgstr "Управління авторами та жанрами" -#: ../../src/appx/libms/spec.rst:435 +#: ../../src/appx/libms/spec.rst:436 msgid "" "Only librarians and admins can add, modify or delete authors and genres. No " "additional views for CRUD operations required (except admin site). " "Librarians are allowed to access authors and genres via admin site. Only " "admins can remove authors or genres." msgstr "" +"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " +"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " +"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " +"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " +"жанри." -#: ../../src/appx/libms/spec.rst:441 -#, fuzzy +#: ../../src/appx/libms/spec.rst:442 msgid "Book creation and update" -msgstr "Дата створення" +msgstr "Створення та оновлення книг" -#: ../../src/appx/libms/spec.rst:443 +#: ../../src/appx/libms/spec.rst:444 msgid "" "The template should comprise a form with fields corresponding to the book's " "attributes. Here are the essential elements for the form:" msgstr "" +"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " +"основні елементи форми:" -#: ../../src/appx/libms/spec.rst:447 ../../src/appx/libms/spec.rst:462 +#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 msgid "A text input field." -msgstr "" +msgstr "Поле для введення тексту." -#: ../../src/appx/libms/spec.rst:450 -#, fuzzy +#: ../../src/appx/libms/spec.rst:451 msgid "A textarea for a brief description or synopsis." -msgstr "Надайте короткий опис вашого запиту." +msgstr "Текстова область для короткого опису або синопсису." -#: ../../src/appx/libms/spec.rst:453 +#: ../../src/appx/libms/spec.rst:454 msgid "A text input field for the book's International Standard Book Number." -msgstr "" +msgstr "Поле для введення міжнародного стандартного номера книги." -#: ../../src/appx/libms/spec.rst:456 +#: ../../src/appx/libms/spec.rst:457 msgid "A checkbox indicating if a book is available. Defaults to ``True``." msgstr "" +"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." -#: ../../src/appx/libms/spec.rst:459 +#: ../../src/appx/libms/spec.rst:460 msgid "A date input field." -msgstr "" +msgstr "Поле для введення дати." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Genres" -msgstr "Основне" +msgstr "Жанри" -#: ../../src/appx/libms/spec.rst:465 +#: ../../src/appx/libms/spec.rst:466 msgid "" "A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " "fetch available genres from the database and allow users to select zero or " "more genres." msgstr "" +"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " +"користувачам вибирати нуль або більше жанрів." #: ../../src/appx/libms/spec.rst -#, fuzzy msgid "Authors" -msgstr "Ім'я автора" +msgstr "Автори" -#: ../../src/appx/libms/spec.rst:470 +#: ../../src/appx/libms/spec.rst:471 msgid "" "A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " "fetch available authors from the database and allow users to select one or " "more authors." msgstr "" +"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " +"користувачам вибирати одного або декількох авторів." -#: ../../src/appx/libms/spec.rst:476 +#: ../../src/appx/libms/spec.rst:477 msgid "" "If it's an *update* action, pre-populate the form fields with the existing " "details of the book fetched from the database." msgstr "" +"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " +"книги, отриманими з бази даних." -#: ../../src/appx/libms/spec.rst:478 +#: ../../src/appx/libms/spec.rst:479 msgid "For *creation*, provide an empty form for the librarian to fill in." -msgstr "" +msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." -#: ../../src/appx/libms/spec.rst:479 +#: ../../src/appx/libms/spec.rst:480 msgid "Ensure the published date is logical (e.g. not a future date)." msgstr "" +"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " +"майбутнього)." -#: ../../src/appx/libms/spec.rst:480 +#: ../../src/appx/libms/spec.rst:481 msgid "Validate required inputs, according to general ``Book`` model rules." msgstr "" +"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " +"``Book``." -#: ../../src/appx/libms/spec.rst:481 +#: ../../src/appx/libms/spec.rst:482 msgid "" "If validations pass: save changes to the database; otherwise, provide " "helpful error messages." msgstr "" +"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " +"випадку надайте корисні повідомлення про помилки." -#: ../../src/appx/libms/spec.rst:485 +#: ../../src/appx/libms/spec.rst:486 msgid "" "You MAY provide a mechanism (like modal or a quick entry form) to add a new " "genre or author without leaving the book form page." msgstr "" +"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " +"введення) для додавання нового жанру або автора, не виходячи зі сторінки " +"форми книги." -#: ../../src/appx/libms/spec.rst:489 -#, fuzzy +#: ../../src/appx/libms/spec.rst:490 msgid "Book deletion" -msgstr "видалення статті" +msgstr "Видалення книги" -#: ../../src/appx/libms/spec.rst:491 +#: ../../src/appx/libms/spec.rst:492 msgid "" "Only librarians and administrators are permitted to perform this action." -msgstr "" +msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." -#: ../../src/appx/libms/spec.rst:495 +#: ../../src/appx/libms/spec.rst:496 msgid "A confirm delete form with **Submit** and **Cancel** buttons." -msgstr "" +msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." -#: ../../src/appx/libms/spec.rst:499 +#: ../../src/appx/libms/spec.rst:500 msgid "Authorize user before deleting performing deletion." -msgstr "" +msgstr "Авторизуйте користувача перед виконанням видалення." -#: ../../src/appx/libms/spec.rst:500 +#: ../../src/appx/libms/spec.rst:501 msgid "" "If a form is submitted, a book should be removed from the library collection." -msgstr "" +msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." -#: ../../src/appx/libms/spec.rst:502 +#: ../../src/appx/libms/spec.rst:503 msgid "" "If deletion is canceled view should redirect back to book detail view page." msgstr "" +"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " +"сторінку детального перегляду книги." -#: ../../src/appx/libms/spec.rst:505 -#, fuzzy +#: ../../src/appx/libms/spec.rst:506 msgid "Borrow requests" -msgstr "Про pull requests" +msgstr "Запити на позики" -#: ../../src/appx/libms/spec.rst:507 +#: ../../src/appx/libms/spec.rst:508 msgid "" "This view facilitates the management of borrowing requests for librarians " "and admins, aiding in their prompt handling." msgstr "" +"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " +"позики, допомагаючи оперативно їх обробляти." -#: ../../src/appx/libms/spec.rst:512 +#: ../../src/appx/libms/spec.rst:513 msgid "" "Present a table showcasing the list of borrow requests. Each row embodies a " "borrow request and encompasses:" msgstr "" +"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " +"відображає один запит на позику і включає в себе всі запити:" -#: ../../src/appx/libms/spec.rst:515 +#: ../../src/appx/libms/spec.rst:516 msgid "**Book Title**: Title of the requested book." -msgstr "" +msgstr "**Назва книги**: Назва запитуваної книги." -#: ../../src/appx/libms/spec.rst:516 +#: ../../src/appx/libms/spec.rst:517 msgid "**User**: Identifier of the user who initiated the request." -msgstr "" +msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." -#: ../../src/appx/libms/spec.rst:517 +#: ../../src/appx/libms/spec.rst:518 msgid "**Request Date**: Date of the request's inception." -msgstr "" +msgstr "**Дата запиту**: Дата створення запиту." -#: ../../src/appx/libms/spec.rst:518 +#: ../../src/appx/libms/spec.rst:519 msgid "" "**Due Date**: - Input field for librarians to set upon approval for new " "requests. - For approved ones, display the librarian-set date." msgstr "" +"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " +"нових запитів. - Для затверджених запитів відображатиметься дата, " +"встановлена бібліотекарем." -#: ../../src/appx/libms/spec.rst:521 +#: ../../src/appx/libms/spec.rst:522 msgid "" "**Status**: Present state of the request (New, Approved, Completed, " "Declined)." msgstr "" +"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " +"Відхилений)." -#: ../../src/appx/libms/spec.rst:523 +#: ../../src/appx/libms/spec.rst:524 msgid "" "**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " "and freezes the due date." msgstr "" +"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " +"статус на \"Затверджено\" і заморожує дату виконання." -#: ../../src/appx/libms/spec.rst:525 +#: ../../src/appx/libms/spec.rst:526 msgid "" "**Decline Button**: Appears for new requests. Sets status to \"Declined\" " "and can prompt for a decline reason." msgstr "" +"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " +"\"Відхилено\" і може запитувати причину відхилення." -#: ../../src/appx/libms/spec.rst:527 +#: ../../src/appx/libms/spec.rst:528 msgid "" "**Complete Button**: Displayed for approved requests. Marks the request as " "completed." msgstr "" +"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " +"запит як завершений." -#: ../../src/appx/libms/spec.rst:531 +#: ../../src/appx/libms/spec.rst:532 msgid "View Logic" -msgstr "" +msgstr "View Logic" -#: ../../src/appx/libms/spec.rst:532 +#: ../../src/appx/libms/spec.rst:533 msgid "" "**Approve Borrow Request**: - Validate book availability. - Modify book " "status to \"Borrowed\". - Switch borrow request to \"Approved\". - " "Define the return due date as per librarian. - Inform the user about the " "approval and due date." msgstr "" +"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " +"статус книги на \"Позичена\". - Переключіть запит на позику на " +"\"Затверджено\". - Визначте дату повернення відповідно до побажань " +"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." -#: ../../src/appx/libms/spec.rst:539 +#: ../../src/appx/libms/spec.rst:540 msgid "" "**Decline Borrow Request**: - Change borrow request status to " "\"Declined\". - Optionally, procure decline reason from librarian. - " "Notify user regarding the declination." msgstr "" +"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " +"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " +"користувача про відхилення." -#: ../../src/appx/libms/spec.rst:544 +#: ../../src/appx/libms/spec.rst:545 msgid "" "**Complete Borrow Request**: - Ensure book's return. - Update book " "status to \"Available\". - Toggle borrow request status to \"Completed\". " "- If needed, record any notes or damages during return." msgstr "" +"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " +"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " +"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " +"під час повернення." -#: ../../src/appx/libms/spec.rst:551 +#: ../../src/appx/libms/spec.rst:552 msgid "" "Implementing reminders for near-due borrow requests can function as an alert " "system for both the librarian and the user." msgstr "" +"Впровадження нагадувань про прострочені запити може функціонувати як система " +"оповіщення як для бібліотекаря, так і для користувача." #: ../../src/appx/precedence.txt:-1 msgid "Operator precedence in Python" @@ -4623,3 +4765,6 @@ msgstr "" #~ msgid "After that the pull request is merged into your target branch." #~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." + +#~ msgid "they can create a new one." +#~ msgstr "вони можуть створити новий." diff --git a/src/appx/libms b/src/appx/libms index e578b8339..30ed5703a 160000 --- a/src/appx/libms +++ b/src/appx/libms @@ -1 +1 @@ -Subproject commit e578b83395481f5a5904064f2bdb879b1bcc185b +Subproject commit 30ed5703a87f968891b1016c4be28d65098767f8 From cfbf15a8cdf405cdd2ff1d87a7b8aa5d36d86fe4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 13:40:48 +0300 Subject: [PATCH 430/689] Update submodules --- problem-sets | 2 +- src/appx/libms | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/problem-sets b/problem-sets index c4326cdd5..b2f2737e8 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit c4326cdd50a7bcd6452344376918256f727dcaa9 +Subproject commit b2f2737e8fbcce616ec3b22d325c20ca317dfff1 diff --git a/src/appx/libms b/src/appx/libms index 30ed5703a..a7b79a2c2 160000 --- a/src/appx/libms +++ b/src/appx/libms @@ -1 +1 @@ -Subproject commit 30ed5703a87f968891b1016c4be28d65098767f8 +Subproject commit a7b79a2c262c0506f6577e1230c01264d1777060 From 6237ffa6238cb263fd8010b16f1155693a5dd417 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 13:42:17 +0300 Subject: [PATCH 431/689] Update project dependencies --- poetry.lock | 206 ++++++++++++++++++++++++++--------------------- requirements.txt | 28 +++---- src/appx/blog | 2 +- 3 files changed, 127 insertions(+), 109 deletions(-) diff --git a/poetry.lock b/poetry.lock index 831985408..33f88c984 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,16 +14,19 @@ files = [ [[package]] name = "babel" -version = "2.12.1" +version = "2.13.0" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, + {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, ] +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "certifi" version = "2023.7.22" @@ -38,87 +41,102 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] @@ -383,14 +401,14 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -518,20 +536,20 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.1.2" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, - {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -811,14 +829,14 @@ test = ["pytest"] [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.6" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, + {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, ] [package.extras] @@ -829,18 +847,18 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] diff --git a/requirements.txt b/requirements.txt index b1d5ba8be..b37881a85 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" +babel==2.13.0 ; python_version >= "3.9" and python_version < "4.0" certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" -charset-normalizer==3.2.0 ; python_version >= "3.9" and python_version < "4.0" -click==8.1.6 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "4.0" +click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.4 ; python_version >= "3.9" and python_version < "4.0" @@ -15,27 +15,27 @@ markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" -packaging==23.1 ; python_version >= "3.9" and python_version < "4.0" -pybtex-docutils==1.0.2 ; python_version >= "3.9" and python_version < "4.0" +packaging==23.2 ; python_version >= "3.9" and python_version < "4.0" +pybtex-docutils==1.0.3 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" pygments==2.16.1 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" -setuptools==68.0.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==68.2.2 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" -sphinx-rtd-theme==1.2.2 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==1.3.0 ; python_version >= "3.9" and python_version < "4.0" sphinx==6.2.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.7 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.3 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.4 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-qthelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-serializinghtml==1.1.7 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.0.4 ; python_version >= "3.9" and python_version < "4.0" -zipp==3.16.2 ; python_version >= "3.9" and python_version < "3.10" +sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.0.6 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/src/appx/blog b/src/appx/blog index dfb023629..5c5d0bc65 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit dfb023629d04fe427e9e00642f852b403b9b70f3 +Subproject commit 5c5d0bc65ed259be549bff3d5e86ca9c07ca198e From 7fb012872e2bd57f9098b1041cb10c8a811d9644 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 19:48:53 +0300 Subject: [PATCH 432/689] Disable gettext compact option --- src/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/conf.py b/src/conf.py index b8346255f..7c7886f51 100644 --- a/src/conf.py +++ b/src/conf.py @@ -47,6 +47,7 @@ # mermaid-js/mermaid-cli is added to project's dependencies # options for internationalization +gettext_compact = False language = "en" locale_dirs = ["_locales"] From fc326425dc4b1c25d99b9ccd1d6849fe6af74789 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 20:19:59 +0300 Subject: [PATCH 433/689] Update PO translations --- src/_locales/uk/LC_MESSAGES/appx.po | 4770 ----------------- .../uk/LC_MESSAGES/appx/assignments.po | 433 ++ src/_locales/uk/LC_MESSAGES/appx/blog/spec.po | 1196 +++++ src/_locales/uk/LC_MESSAGES/appx/code_edit.po | 54 + .../uk/LC_MESSAGES/appx/conv_store.po | 558 ++ src/_locales/uk/LC_MESSAGES/appx/env_path.po | 40 + .../uk/LC_MESSAGES/appx/libms/spec.po | 1187 ++++ .../uk/LC_MESSAGES/appx/precedence.po | 231 + src/_locales/uk/LC_MESSAGES/appx/printf.po | 244 + .../uk/LC_MESSAGES/appx/software_list.po | 275 + src/_locales/uk/LC_MESSAGES/appx/wtk.po | 575 ++ src/_locales/uk/LC_MESSAGES/basics.po | 2816 ---------- .../uk/LC_MESSAGES/basics/bool_logic.po | 508 ++ .../uk/LC_MESSAGES/basics/controlflow.po | 177 + .../uk/LC_MESSAGES/basics/decorators.po | 391 ++ .../uk/LC_MESSAGES/basics/exceptions.po | 380 ++ .../uk/LC_MESSAGES/basics/functions.po | 40 + src/_locales/uk/LC_MESSAGES/basics/index.po | 36 + src/_locales/uk/LC_MESSAGES/basics/modules.po | 40 + src/_locales/uk/LC_MESSAGES/basics/pep8.po | 40 + .../uk/LC_MESSAGES/basics/stdtypes.po | 728 +++ src/_locales/uk/LC_MESSAGES/basics/syntax.po | 263 + src/_locales/uk/LC_MESSAGES/basics/testing.po | 40 + .../uk/LC_MESSAGES/basics/variables.po | 135 + .../{deploy.po => deploy/index.po} | 6 +- .../{django.po => django/index.po} | 6 +- src/_locales/uk/LC_MESSAGES/flask.po | 40 - src/_locales/uk/LC_MESSAGES/index.po | 34 - src/_locales/uk/LC_MESSAGES/intro.po | 940 ---- src/_locales/uk/LC_MESSAGES/intro/index.po | 446 ++ src/_locales/uk/LC_MESSAGES/intro/install.po | 250 + src/_locales/uk/LC_MESSAGES/intro/interact.po | 267 + .../LC_MESSAGES/{linux.po => linux/index.po} | 6 +- src/_locales/uk/LC_MESSAGES/oop/index.po | 46 + .../uk/LC_MESSAGES/oop/inheritance.po | 36 + .../uk/LC_MESSAGES/{oop.po => oop/intro.po} | 110 +- src/_locales/uk/LC_MESSAGES/oop/patterns.po | 36 + src/_locales/uk/LC_MESSAGES/oop/solid.po | 42 + src/_locales/uk/LC_MESSAGES/rdbms.po | 1162 ---- .../uk/LC_MESSAGES/rdbms/aggregation.po | 479 ++ src/_locales/uk/LC_MESSAGES/rdbms/index.po | 80 + .../uk/LC_MESSAGES/rdbms/normalization.po | 295 + .../uk/LC_MESSAGES/rdbms/relations.po | 447 ++ src/_locales/uk/LC_MESSAGES/vcs.po | 2548 --------- src/_locales/uk/LC_MESSAGES/vcs/basics.po | 950 ++++ src/_locales/uk/LC_MESSAGES/vcs/branch.po | 509 ++ src/_locales/uk/LC_MESSAGES/vcs/github.po | 259 + src/_locales/uk/LC_MESSAGES/vcs/index.po | 74 + src/_locales/uk/LC_MESSAGES/vcs/intro.po | 221 + .../uk/LC_MESSAGES/vcs/pullrequest.po | 223 + src/_locales/uk/LC_MESSAGES/vcs/remotes.po | 227 + src/_locales/uk/LC_MESSAGES/vcs/setup.po | 118 + src/_locales/uk/LC_MESSAGES/vcs/tagging.po | 169 + 53 files changed, 12759 insertions(+), 12424 deletions(-) delete mode 100644 src/_locales/uk/LC_MESSAGES/appx.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/assignments.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/blog/spec.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/code_edit.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/conv_store.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/env_path.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/libms/spec.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/precedence.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/printf.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/software_list.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/wtk.po delete mode 100644 src/_locales/uk/LC_MESSAGES/basics.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/bool_logic.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/controlflow.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/decorators.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/exceptions.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/functions.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/modules.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/pep8.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/stdtypes.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/syntax.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/testing.po create mode 100644 src/_locales/uk/LC_MESSAGES/basics/variables.po rename src/_locales/uk/LC_MESSAGES/{deploy.po => deploy/index.po} (91%) rename src/_locales/uk/LC_MESSAGES/{django.po => django/index.po} (91%) delete mode 100644 src/_locales/uk/LC_MESSAGES/flask.po delete mode 100644 src/_locales/uk/LC_MESSAGES/index.po delete mode 100644 src/_locales/uk/LC_MESSAGES/intro.po create mode 100644 src/_locales/uk/LC_MESSAGES/intro/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/intro/install.po create mode 100644 src/_locales/uk/LC_MESSAGES/intro/interact.po rename src/_locales/uk/LC_MESSAGES/{linux.po => linux/index.po} (91%) create mode 100644 src/_locales/uk/LC_MESSAGES/oop/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/oop/inheritance.po rename src/_locales/uk/LC_MESSAGES/{oop.po => oop/intro.po} (85%) create mode 100644 src/_locales/uk/LC_MESSAGES/oop/patterns.po create mode 100644 src/_locales/uk/LC_MESSAGES/oop/solid.po delete mode 100644 src/_locales/uk/LC_MESSAGES/rdbms.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/normalization.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/relations.po delete mode 100644 src/_locales/uk/LC_MESSAGES/vcs.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/basics.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/branch.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/github.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/intro.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/remotes.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/setup.po create mode 100644 src/_locales/uk/LC_MESSAGES/vcs/tagging.po diff --git a/src/_locales/uk/LC_MESSAGES/appx.po b/src/_locales/uk/LC_MESSAGES/appx.po deleted file mode 100644 index 5af39ec36..000000000 --- a/src/_locales/uk/LC_MESSAGES/appx.po +++ /dev/null @@ -1,4770 +0,0 @@ -# APPENDIXES TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# SERHII HORODILOV -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-04 14:27+0100\n" -"PO-Revision-Date: 2023-09-04 16:28+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" - -#: ../../src/appx/assignments.txt:-1 -msgid "How-to handle in assignments via GitHub pull request(s)" -msgstr "Як працювати з призначеннями через GitHub pull request(и)" - -#: ../../src/appx/assignments.txt:-1 -msgid "Vladyslav Ponomaryov" -msgstr "Vladyslav Ponomaryov" - -#: ../../src/appx/assignments.txt:-1 ../../src/appx/code_edit.txt:-1 -#: ../../src/appx/conv_store.txt:-1 ../../src/appx/env_path.txt:-1 -#: ../../src/appx/precedence.txt:-1 ../../src/appx/printf.txt:-1 -#: ../../src/appx/wtk.txt:-1 -msgid "Serhii Horodilov sgorodil@gmail.com" -msgstr "Serhii Horodilov sgorodil@gmail.com" - -#: ../../src/appx/assignments.txt:-1 -msgid "git, github, pull request, review, merge, howto" -msgstr "git, github, pull request, review, merge, howto" - -#: ../../src/appx/assignments.txt:9 -msgid "Handing in Homework Assignments" -msgstr "Здача домашніх завдань" - -#: ../../src/appx/assignments.txt:13 -msgid "Repository content description" -msgstr "Опис вмісту репозиторію" - -#: ../../src/appx/assignments.txt:16 -msgid "What to include" -msgstr "Що потрібно включити" - -#: ../../src/appx/assignments.txt:18 -msgid "Code base" -msgstr "Кодова база" - -#: ../../src/appx/assignments.txt:19 -msgid "Project dependencies (if applicable)" -msgstr "Залежності проекту (якщо застосовно)" - -#: ../../src/appx/assignments.txt:20 -msgid "" -"*(Optional)* Additional project information: README, CONTRIBUTING, LICENSE " -"etc." -msgstr "" -"*(Додаткова)* інформація про проєкт: README, CONTRIBUTING, LICENSE тощо." - -#: ../../src/appx/assignments.txt:24 -msgid "" -"Always start new repository from creating ``README`` and ``.gitignore`` " -"files." -msgstr "" -"Завжди починайте новий репозиторій зі створення файлів ``README`` та ``." -"gitignore``." - -#: ../../src/appx/assignments.txt:28 -msgid "What to exclude" -msgstr "Що потрібно виключити" - -#: ../../src/appx/assignments.txt:30 -msgid "Virtual environment, typically ``venv`` or ``env`` folder" -msgstr "Віртуальне середовище, зазвичай папка ``venv`` або ``env``" - -#: ../../src/appx/assignments.txt:31 -msgid "Byte compiled Python code (``__pycache__``)" -msgstr "Байтовий скомпільований код Python (``__pycache__``)" - -#: ../../src/appx/assignments.txt:32 -msgid "IDE configurations, typically ``.vscode`` or ``.idea`` folder" -msgstr "Конфігурації IDE, зазвичай папка ``.vscode`` або ``.idea``" - -#: ../../src/appx/assignments.txt:33 -msgid "Database files, like ``db.sqlite3``" -msgstr "Файли баз даних, такі як ``db.sqlite3``" - -#: ../../src/appx/assignments.txt:34 -msgid "Other stuff not related to the assignment directly" -msgstr "Інші речі, не пов'язані з завданням безпосередньо" - -#: ../../src/appx/assignments.txt:37 -msgid "" -"Set up **.gitignore** to exclude all name patterns from appending to the " -"stage area. Common content of this file may look like:" -msgstr "" -"Налаштуйте **.gitignore**, щоб виключити всі шаблони назв з додавання до " -"області сцени. Типовий вміст цього файлу може виглядати так:" - -#: ../../src/appx/assignments.txt:48 -msgid "Repository initialization" -msgstr "Ініціалізація репозиторію" - -#: ../../src/appx/assignments.txt:50 -msgid "Create and activate virtual environment." -msgstr "Створіть та активуйте віртуальне середовище." - -#: ../../src/appx/assignments.txt:51 -msgid "Create common repository files:" -msgstr "Створіть загальні файли репозиторію:" - -#: ../../src/appx/assignments.txt:53 -msgid "README" -msgstr "README" - -#: ../../src/appx/assignments.txt:54 -msgid ".gitignore" -msgstr ".gitignore" - -#: ../../src/appx/assignments.txt:55 -msgid "requirements.txt *(if applicable)*" -msgstr "requirements.txt *(якщо застосовно)*" - -#: ../../src/appx/assignments.txt:57 -msgid "" -"*(Optional)* Create a code base draft. This can be an empty module like " -"**main.py** or an empty :ref:`Django project `." -msgstr "" -"*(Додатково)* Створіть чорновий варіант кодової бази. Це може бути порожній " -"модуль типу **main.py** або порожній :ref:`проект Django `." - -#: ../../src/appx/assignments.txt:59 -msgid "Initialize a new repository using ``git init`` command." -msgstr "Ініціалізуйте новий репозиторій за допомогою команди ``git init``." - -#: ../../src/appx/assignments.txt:60 -msgid "Set up **.gitignore** name patterns." -msgstr "Налаштуйте шаблони імен **.gitignore**." - -#: ../../src/appx/assignments.txt:61 -msgid "Stage your changes." -msgstr "Додайте зміни до stage-простору." - -#: ../../src/appx/assignments.txt:62 -msgid "Commit your changes." -msgstr "Зафіксуйте зміни." - -#: ../../src/appx/assignments.txt:63 -msgid "Set up remote repository." -msgstr "Налаштуйте віддалений репозиторій." - -#: ../../src/appx/assignments.txt:64 -msgid "Push changes from local branch to remote." -msgstr "Перенесіть зміни з локальної гілки на віддалену." - -#: ../../src/appx/assignments.txt:69 -msgid "Initializing new Django project" -msgstr "Ініціалізація нового проекту Django" - -#: ../../src/appx/assignments.txt:71 -msgid "" -"Base Django project may be added to the repository with the first commit. " -"Initialize Django project in current repository root to avoid directories " -"nesting." -msgstr "" -"Базовий проект Django може бути доданий до сховища з першим коммітом. " -"Ініціалізуйте проект Django у корені поточного сховища, щоб уникнути " -"вкладеності каталогів." - -#: ../../src/appx/assignments.txt:80 -msgid "Do not forget to create **requirements.txt**." -msgstr "Не забудьте створити **requirements.txt**." - -#: ../../src/appx/assignments.txt:82 -msgid "After that, you may proceed with \"staging\" and \"commit\" steps." -msgstr "Після цього ви можете перейти до етапів \"stage\" та \"commit\"." - -#: ../../src/appx/assignments.txt:86 -msgid "Sharing project dependencies" -msgstr "Спільний доступ до залежностей проекту" - -#: ../../src/appx/assignments.txt:88 -msgid "" -"The **requirements.txt** file is a plain text file that lists all the Python " -"packages required for a specific project. This file is used to specify " -"dependencies in a version-controlled and easily shareable manner. It allows " -"for a consistent environment across different team members' local setups." -msgstr "" -"Файл **requirements.txt** -- це звичайний текстовий файл, який містить " -"список усіх пакунків Python, необхідних для конкретного проекту. Цей файл " -"використовується для вказівки залежностей у спосіб, що дозволяє контролювати " -"версії та легко ділитися ними. Це дозволяє забезпечити узгодженість " -"середовища в локальних налаштуваннях різних членів команди." - -#: ../../src/appx/assignments.txt:94 -msgid "Where to place \"requirements.txt\" file" -msgstr "Де розмістити файл \"requirements.txt\"" - -#: ../../src/appx/assignments.txt:96 -msgid "" -"The **requirements.txt** file is generally placed in the root directory of " -"the project." -msgstr "" -"Файл **requirements.txt** зазвичай розміщується у кореневому каталозі " -"проекту." - -#: ../../src/appx/assignments.txt:100 -msgid "Creating \"requirements.txt\" file" -msgstr "Створення файлу \"requirements.txt\"" - -#: ../../src/appx/assignments.txt:102 -msgid "" -"To generate file use ``pip freeze`` command and place its output to a file:" -msgstr "" -"Щоб згенерувати файл, скористайтеся командою ``pip freeze`` і помістіть його " -"вивід у файл:" - -#: ../../src/appx/assignments.txt:108 -msgid "This will create **requirements.txt** file. Its content may look like:" -msgstr "" -"В результаті буде створено файл **requirements.txt**. Його вміст може мати " -"вигляд:" - -#: ../../src/appx/assignments.txt:119 -msgid "Installing dependencies from \"requirements.txt\" file" -msgstr "Встановлення залежностей з файлу \"requirements.txt\"" - -#: ../../src/appx/assignments.txt:121 -msgid "" -"Another team member may easily install all the requirements for the project " -"by using ``pip install`` command:" -msgstr "" -"Інший член команди може легко встановити всі вимоги до проекту за допомогою " -"команди ``pip install``:" - -#: ../../src/appx/assignments.txt:130 -msgid "Dealing with home tasks (challenges)" -msgstr "Вирішення домашніх завдань (викликів)" - -#: ../../src/appx/assignments.txt:132 -msgid "Create a new topic branch" -msgstr "Створити нову гілку завдання" - -#: ../../src/appx/assignments.txt:133 -msgid "Switch to a topic branch" -msgstr "Перейдіть до гілки завдання" - -#: ../../src/appx/assignments.txt:134 -msgid "Do the work and commit changes" -msgstr "Виконайте роботу та зафіксуйте зміни" - -#: ../../src/appx/assignments.txt:137 -msgid "You can create a new branch and immediately switch to it:" -msgstr "Ви можете створити нову гілку і одразу перейти до неї:" - -#: ../../src/appx/assignments.txt:144 -msgid "Creating a pull request" -msgstr "Створення запиту на злиття" - -#: ../../src/appx/assignments.txt:146 -msgid "" -"Make sure your working branch is up-to-date with the default one. You can " -"pull changes for the default branch and rebase your feature branch onto it." -msgstr "" -"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " -"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " -"на неї." - -#: ../../src/appx/assignments.txt:149 -msgid "" -"Push feature branch to the remote repository. By default, the current active " -"branch is pushed via ``git push`` command. You may need to set upstream " -"branch if it isn't yet." -msgstr "" -"Перенести гілку функції до віддаленого сховища. За замовчуванням, поточна " -"активна гілка виштовхується командою ``git push``. Можливо, вам доведеться " -"створити нову гілку, якщо вона ще не створена." - -#: ../../src/appx/assignments.txt:157 -msgid "" -"Navigate to your remote repository homepage on GitHub and switch to **Pull " -"requests** tab." -msgstr "" -"Перейдіть на головну сторінку вашого віддаленого сховища на GitHub і " -"перейдіть на вкладку **Pull requests**." - -#: ../../src/appx/assignments.txt:159 -msgid "Click **New pull request** button." -msgstr "Натисніть кнопку **New pull request**." - -#: ../../src/appx/assignments.txt:160 -msgid "" -"Select your default branch as *target* and your feature branch as *source*." -msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." - -#: ../../src/appx/assignments.txt:162 -msgid "Click **Create pull request** button." -msgstr "Натисніть кнопку **Create pull request**." - -#: ../../src/appx/assignments.txt:163 -msgid "Provide meaningful title and a brief description for your pull request." -msgstr "Надайте змістовну назву та короткий опис вашого запиту." - -#: ../../src/appx/assignments.txt:164 -msgid "Submit pull request creation." -msgstr "Підтвердіть створення запиту." - -#: ../../src/appx/assignments.txt:165 -msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." -msgstr "*(Необов'язково)* Виберіть рецензента(ів) у розділі **Reviewers**." - -#: ../../src/appx/assignments.txt:166 -msgid "Wait until your pull request is reviewed." -msgstr "Зачекайте, поки ваш запит буде розглянуто." - -#: ../../src/appx/assignments.txt:169 -msgid "Set up reviewers" -msgstr "Налаштування рецензентів" - -#: ../../src/appx/assignments.txt:171 -msgid "" -"You may share a link to pull request to a reviewer directly, but it's better " -"to set reviewer(s) on the pull request's page. Before you can select " -"reviewers, you need to add them as project contributors." -msgstr "" -"Ви можете надіслати посилання на запит безпосередньо рецензенту, але краще " -"вказати рецензента(ів) на сторінці запиту. Перш ніж ви зможете вибрати " -"рецензентів, вам потрібно додати їх як учасників проекту." - -#: ../../src/appx/assignments.txt:176 -msgid "Append collaborators" -msgstr "Додавання співавторів" - -#: ../../src/appx/assignments.txt:178 -msgid "" -"Reviews allow collaborators to comment on the changes proposed in pull " -"requests, approve the changes, or request further changes before the pull " -"request is merged. Repository administrators can require that pull requests " -"are approved before being merged." -msgstr "" -"Рецензії дозволяють учасникам коментувати зміни, запропоновані у запитах, " -"затверджувати їх або вимагати подальших змін до того, як запит буде " -"об'єднано. Адміністратори сховища можуть вимагати, щоб запити на вилучення " -"були затверджені перед об'єднанням." - -#: ../../src/appx/assignments.txt:183 -msgid "" -"Navigate to your repository homepage on GitHub and switch to **Settings** " -"tab." -msgstr "" -"Перейдіть на головну сторінку вашого сховища на GitHub і перейдіть на " -"вкладку **Налаштування**." - -#: ../../src/appx/assignments.txt:185 -msgid "Select **Collaborators and teams** menu item." -msgstr "Виберіть пункт меню **Collaborators and teams**." - -#: ../../src/appx/assignments.txt:186 -msgid "Under **Manage access** section click **Add people** button." -msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." - -#: ../../src/appx/assignments.txt:187 -msgid "In modal window start typing GitHub username." -msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." - -#: ../../src/appx/assignments.txt:188 -msgid "Select a contributor from the dropdown menu." -msgstr "Виберіть учасника зі спадного меню." - -#: ../../src/appx/assignments.txt:190 -msgid "This will send a *contributing request* to a specified user." -msgstr "Це надішле *запит* вказаному користувачеві." - -#: ../../src/appx/assignments.txt:193 -msgid "Merging changes" -msgstr "Об'єднання змін" - -#: ../../src/appx/assignments.txt:195 -msgid "" -"In case your pull request is **approved** - merge it to the trunk branch. " -"Select one of the options available:" -msgstr "" -"Якщо ваш pull request буде **схвалено** - об'єднайте його в основну гілку. " -"Виберіть один з доступних варіантів:" - -#: ../../src/appx/assignments.txt:198 -msgid "Create a merge commit" -msgstr "Create a merge commit" - -#: ../../src/appx/assignments.txt:199 -msgid "Rebase and merge" -msgstr "Rebase and merge" - -#: ../../src/appx/assignments.txt:200 -msgid "Squash and merge" -msgstr "Squash and merge" - -#: ../../src/appx/assignments.txt:202 -msgid "**Create a merge commit** suits in most of the cases." -msgstr "**Create a merge commit** підходить у більшості випадків." - -#: ../../src/appx/assignments.txt:205 -msgid "Making changes" -msgstr "Внесення змін" - -#: ../../src/appx/assignments.txt:207 -msgid "" -"In case your pull request is **rejected** or has comments - you may need to " -"provide some fixes." -msgstr "" -"Якщо ваш pull request буде **відхилено** або він матиме зауваження - вам " -"може знадобитися надати деякі виправлення." - -#: ../../src/appx/assignments.txt:210 -msgid "Do the work in your local topic branch" -msgstr "Виконайте роботу у вашій місцевій тематичній гілці" - -#: ../../src/appx/assignments.txt:211 -msgid "Push these changes to remote" -msgstr "Надішліть їх до гілки віддаленого репозиторію" - -#: ../../src/appx/assignments.txt:212 -msgid "Re-request review (if applicable)" -msgstr "Зробіть повторний запит на перегляд (за необхідності)" - -#: ../../src/appx/assignments.txt:213 -msgid "Wait until review is done" -msgstr "Дочекайтеся завершення перевірки" - -#: ../../src/appx/blog/spec.rst:10 -msgid "Blog Project Specification" -msgstr "Специфікація Проекту Блогу" - -#: ../../src/appx/blog/spec.rst:12 -msgid "" -"The project aims to develop a robust and user-friendly web application using " -"the Django framework. The primary objective is to create a blogging platform " -"that allows users to publish and manage articles on various topics. The " -"application will provide an intuitive interface for authors to compose and " -"format their articles, while also offering a seamless reading experience for " -"visitors." -msgstr "" -"Проект має на меті розробку міцного та зручного у використанні веб-додатка " -"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " -"для блогів, яка дозволить користувачам публікувати та керувати статтями на " -"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " -"форматування своїх статей, а також забезпечить безперешкодний досвід читання " -"для відвідувачів." - -#: ../../src/appx/blog/spec.rst:19 -msgid "**Key Features**" -msgstr "**Основні функції**" - -#: ../../src/appx/blog/spec.rst:22 -msgid "User Registration and Authentication" -msgstr "Реєстрація та Аутентифікація Користувачів" - -#: ../../src/appx/blog/spec.rst:23 -msgid "" -"The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and manage " -"their profile information. This feature will enable authors to have " -"personalized accounts and maintain ownership of their published articles." -msgstr "" -"Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " -"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " -"мати персоналізовані облікові записи та зберігати право власності на їхні " -"опубліковані статті." - -#: ../../src/appx/blog/spec.rst:30 -msgid "Article Management" -msgstr "Керування Статтями" - -#: ../../src/appx/blog/spec.rst:31 -msgid "" -"Authors will have the ability to create, edit, and delete articles within " -"the application. The system will offer a user-friendly editor. Additionally, " -"authors will be able to categorize articles by assigning relevant topics to " -"them." -msgstr "" -"Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." - -#: ../../src/appx/blog/spec.rst:37 -msgid "Topic Subscription:" -msgstr "Підписка на Теми:" - -#: ../../src/appx/blog/spec.rst:38 -msgid "" -"The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users " -"will receive notifications or updates whenever new articles are published in " -"those categories. This feature will enhance user engagement and ensure that " -"readers stay informed about the topics they find most valuable." -msgstr "" -"Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." - -#: ../../src/appx/blog/spec.rst:45 -msgid "" -"Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user experience " -"and incorporating essential functionalities such as user authentication, " -"article management, and topic subscriptions, the application will empower " -"users to create, share, and explore engaging content within a well-" -"structured and organized platform." -msgstr "" -"Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " -"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " -"категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про " -"найцікавіші для них теми." - -#: ../../src/appx/blog/spec.rst:52 -msgid "" -"Here is a starter repository template, that may helps: `Starter template`_." -msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." - -#: ../../src/appx/blog/spec.rst:55 -msgid "Challenge: Functional views" -msgstr "Виклик: Функціональні представлення" - -#: ../../src/appx/blog/spec.rst:57 -msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." -msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " -"ви хочете повернути в HTTP-відповіді." - -#: ../../src/appx/blog/spec.rst:61 -msgid "" -"``/about/``: Provides a regular text for a user, describing the " -"functionalities of the django site." -msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." - -#: ../../src/appx/blog/spec.rst:63 -msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via " -"the django site." -msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " -"сайт Django." - -#: ../../src/appx/blog/spec.rst:65 -msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic part " -"in it. This will be used to fetch a single article from the database." -msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " -"частину. Вона буде використовуватися для отримання однієї статті з бази " -"даних." - -#: ../../src/appx/blog/spec.rst:68 -msgid "" -"``/
    /comment/``: This view will be used to add comments to a article." -msgstr "" -"``/
    /comment/``: Це представлення буде використовуватися для " -"додавання коментарів до статті." - -#: ../../src/appx/blog/spec.rst:70 -msgid "``/create/``: A article creation form." -msgstr "``/create/``: Форма створення статті." - -#: ../../src/appx/blog/spec.rst:71 -msgid "``/
    /update/``: A view to update an existing article data." -msgstr "" -"``/
    /update/``: Представлення для оновлення існуючих даних статті." - -#: ../../src/appx/blog/spec.rst:72 -msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "" -"``/
    /delete/``: Представлення для підтвердження видалення статті." - -#: ../../src/appx/blog/spec.rst:73 -msgid "``/topics/``: A list of topics available on the site." -msgstr "``/topics/``: Перелік доступних тем на сайті." - -#: ../../src/appx/blog/spec.rst:74 -msgid "``/topics//subscribe/``: A view to subscribe for a topic." -msgstr "``/topics//subscribe/``: Представлення для підписки на тему." - -#: ../../src/appx/blog/spec.rst:75 -msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." -msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." - -#: ../../src/appx/blog/spec.rst:76 -msgid "``/profile//``: A site user's personal page." -msgstr "``/profile//``: Особиста сторінка користувача сайту." - -#: ../../src/appx/blog/spec.rst:77 -msgid "" -"``/set-password/``: This route will be used to change users' credential data." -msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " -"даних користувачів." - -#: ../../src/appx/blog/spec.rst:79 -msgid "``/set-userdata/``: This route will be user to change users' data." -msgstr "" -"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " -"користувачів." - -#: ../../src/appx/blog/spec.rst:80 -msgid "``/deactivate/``: Account deactivation (deletion) view." -msgstr "" -"``/deactivate/``: Представлення для деактивації облікового запису " -"(видалення)." - -#: ../../src/appx/blog/spec.rst:81 -msgid "``/register/``: This view contains a user registration form." -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." - -#: ../../src/appx/blog/spec.rst:82 -msgid "``/login/``: This view contains a login form." -msgstr "``/login/``: Сторінка з формою для логіна." - -#: ../../src/appx/blog/spec.rst:83 -msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." -msgstr "" -"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " -"сторінку.." - -#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 -#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 -msgid "Optional task(s)" -msgstr "Додаткові завдання" - -#: ../../src/appx/blog/spec.rst:89 -msgid "" -"``/archive///``: This view provides a list of articles " -"published on a specified month of a specified year. This view should apply " -"date validation and raise ``Http404`` for invalid paths. The valid date is a " -"year's 4-digits form followed by 1 or 2 digits representing month. Month " -"range should be limited as [1..12], leading zero may be omitted. Valid URLs " -"are:" -msgstr "" -"``/archive///``: Це представлення надає список статей, " -"опублікованих у певному місяці певного року. Це представлення повинно " -"застосовувати перевірку дати та викидати помилку ``Http404`` для " -"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " -"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " -"URL-адрес:" - -#: ../../src/appx/blog/spec.rst:103 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" - -#: ../../src/appx/blog/spec.rst:106 -msgid "" -"Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that is " -"to use a django command:" -msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " -"отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " -"Django:" - -#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 -msgid "General" -msgstr "Основне" - -#: ../../src/appx/blog/spec.rst:116 -msgid "Each model will be registered for admin site." -msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." - -#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 -msgid "Article topic" -msgstr "Тема статті" - -#: ../../src/appx/blog/spec.rst:120 -msgid "This is a simple model, that contains information about topic:" -msgstr "Ось проста модель, що містить інформацію про тему:" - -#: ../../src/appx/blog/spec.rst:122 -msgid "topic title (unique value, 64 characters or fewer)" -msgstr "назва теми (унікальне значення, не більше 64 символів)" - -#: ../../src/appx/blog/spec.rst:123 -msgid "topic short description (255 characters or fewer)" -msgstr "короткий опис теми (не більше 255 символів)" - -#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 -msgid "Article" -msgstr "Стаття" - -#: ../../src/appx/blog/spec.rst:127 -msgid "Article requires title (255 characters or fewer)." -msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." - -#: ../../src/appx/blog/spec.rst:128 -msgid "Article requires content (at least 255 characters)." -msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." - -#: ../../src/appx/blog/spec.rst:129 -msgid "" -"Creation date should be autogenerated at article creation, and would never " -"be updated." -msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не буде " -"оновлюватися пізніше." - -#: ../../src/appx/blog/spec.rst:131 -msgid "Updated date will be update at each article save." -msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." - -#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 -msgid "Article comment" -msgstr "Коментар до статті" - -#: ../../src/appx/blog/spec.rst:135 -msgid "Comment requires creation date (autogenerated)." -msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." - -#: ../../src/appx/blog/spec.rst:136 -msgid "Comment requires message text." -msgstr "Коментар вимагає наявності тексту повідомлення." - -#: ../../src/appx/blog/spec.rst:139 ../../src/appx/libms/spec.rst:220 -msgid "Relationships" -msgstr "Відносини" - -#: ../../src/appx/blog/spec.rst:141 -msgid "" -"Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created via " -"admin page. You can also refer the same model as shown below:" -msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. Для " -"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " -"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " -"також можете посилатися на ту саму модель, як показано нижче:" - -#: ../../src/appx/blog/spec.rst:154 -msgid "``article`` and ``topics`` have *many-to-many* relationship." -msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." - -#: ../../src/appx/blog/spec.rst:155 -msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can have " -"**only one** author, but users can create as many articles as they want." -msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " -"бути **лише один** автор, але користувачі можуть створювати стільки статей, " -"скільки їм потрібно." - -#: ../../src/appx/blog/spec.rst:158 -msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article may " -"be a container for many comments, but a comment is related to a single " -"article." -msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " -"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " -"однією статтею." - -#: ../../src/appx/blog/spec.rst:161 -msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " -"*article - user* relationship." -msgstr "" -"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " -"відношення *стаття - користувач*." - -#: ../../src/appx/blog/spec.rst:163 -msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can " -"prefer none or as many topics as needed and vice versa. This relationship " -"represents topics preferred by a certain blog user. Also this provides an " -"additional option to mark some of preferred topics with a **notify** flag, " -"to receive newsletters about specified topics updates. The difference " -"between *prefer* and *notify* is that *preferred* topics affect the articles " -"list for a user, and *notify* is responsible for newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " -"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " -"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " -"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " -"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " -"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " -"список статей для користувача, а *notify* відповідає за розсилку новин для " -"користувача." - -#: ../../src/appx/blog/spec.rst:174 -msgid "UML diagram" -msgstr "UML діаграми" - -#: ../../src/appx/blog/spec.rst:179 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" - -#: ../../src/appx/blog/spec.rst:181 -msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project's database." -msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." - -#: ../../src/appx/blog/spec.rst:184 -msgid "``/``: should represent a list of existing articles." -msgstr "``/``: повинен представляти список існуючих статей." - -#: ../../src/appx/blog/spec.rst:185 -msgid "``/
    /``: should represent a single existing article." -msgstr "``/
    /``: повинен представляти окрему існуючу статтю." - -#: ../../src/appx/blog/spec.rst:186 -msgid "Detail view should obtain a list of article related comments." -msgstr "" -"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." - -#: ../../src/appx/blog/spec.rst:187 -msgid "" -"``/profile//``: should contain information about user and a " -"list of articles authored by this user." -msgstr "" -"``/profile//``: повинен містити інформацію про користувача та " -"список статей, написаних цим користувачем." - -#: ../../src/appx/blog/spec.rst:189 -msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." -msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." - -#: ../../src/appx/blog/spec.rst:194 -msgid "" -"It's common to store dedicated functions/classes that supports some specific " -"business logic in a separate module called ``services.py`` or ``utils.py`` " -"within an application directory." -msgstr "" -"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." -"py`` всередині директорії додатку." - -#: ../../src/appx/blog/spec.rst:201 -msgid "" -"Create a service to fetch articles, ordered by a specified user preferences. " -"This means, topics preferred by a user affects articles orders. Queryset " -"should be ordered in way, to have articles with most corresponding topics at " -"the begging." -msgstr "" -"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " -"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " -"початку видачі." - -#: ../../src/appx/blog/spec.rst:207 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" - -#: ../../src/appx/blog/spec.rst:210 -msgid "Helpful link: `Bootstrap template`_" -msgstr "Корисне посилання: `Bootstrap template`_" - -#: ../../src/appx/blog/spec.rst:213 -msgid "Links related to user data **may be** placeholders for now." -msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " -"наразі." - -#: ../../src/appx/blog/spec.rst:217 -msgid "**All** templates should be inherited from the ``base.html`` template." -msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." - -#: ../../src/appx/blog/spec.rst:218 -msgid "" -"Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." -msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " -"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." - -#: ../../src/appx/blog/spec.rst:220 -msgid "Each page should contain a link to homepage (``/`` URL route)." -msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" -"``)." - -#: ../../src/appx/blog/spec.rst:221 -msgid "" -"Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented with a " -"custom template context processor." -msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " -"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " -"власного обробника контексту шаблону (template context processor)." - -#: ../../src/appx/blog/spec.rst:224 -msgid "Replace content block for *about* page with some static content." -msgstr "" -"Замініть блок вмісту (content block) для сторінки *about* на деякий " -"статичний вміст." - -#: ../../src/appx/blog/spec.rst:225 -msgid "" -"Application-level templates should be located within appropriate " -"applications." -msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." - -#: ../../src/appx/blog/spec.rst:231 -msgid "" -"Each page should contain a list of links to archive views for the last year." -msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." - -#: ../../src/appx/blog/spec.rst:233 -msgid "Each page should contain an inclusion-block(s) with following links:" -msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" - -#: ../../src/appx/blog/spec.rst:235 -msgid "``/registration/``: new user registration form" -msgstr "``/register/``: форма реєстрації нового користувача" - -#: ../../src/appx/blog/spec.rst:236 -msgid "``/login/``: user login form" -msgstr "``/login/``: форма логіна користувача" - -#: ../../src/appx/blog/spec.rst:237 -msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення статті" - -#: ../../src/appx/blog/spec.rst:240 -msgid "Articles list" -msgstr "Список статей" - -#: ../../src/appx/blog/spec.rst:241 -msgid "Main page contains a list of published articles." -msgstr "Головна сторінка містить список опублікованих статей." - -#: ../../src/appx/blog/spec.rst:242 -msgid "Each article entity is rendered using a custom template tag." -msgstr "" -"Кожен елемент статті відображається за допомогою власного шаблонного тегу." - -#: ../../src/appx/blog/spec.rst:243 -msgid "``article`` template tag renders information about a article object:" -msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" - -#: ../../src/appx/blog/spec.rst:245 -msgid "article title" -msgstr "заголовок статті" - -#: ../../src/appx/blog/spec.rst:246 -msgid "article content (trimmed to ~50 characters)" -msgstr "зміст статті (обрізаний до ~50 символів)" - -#: ../../src/appx/blog/spec.rst:247 -msgid "article creation date" -msgstr "дата створення статті" - -#: ../../src/appx/blog/spec.rst:248 -msgid "related topics (3 topics or fewer)" -msgstr "пов'язані теми (3 або менше)" - -#: ../../src/appx/blog/spec.rst:249 -msgid "number of related comments" -msgstr "кількість коментарів до статті" - -#: ../../src/appx/blog/spec.rst:256 -msgid "Article details" -msgstr "Деталі статті" - -#: ../../src/appx/blog/spec.rst:258 -msgid "Article update and deletion views **would not** affect data for now." -msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." - -#: ../../src/appx/blog/spec.rst:260 -msgid "" -"A article detail page contains links to **update** or **delete** current " -"article." -msgstr "" -"На сторінці деталей статті мають бути посилання на **оновлення** або " -"**видалення** поточної статті." - -#: ../../src/appx/blog/spec.rst:262 -msgid "Page provides information about article:" -msgstr "Сторінка надає інформацію про статтю:" - -#: ../../src/appx/blog/spec.rst:264 -msgid "Article title" -msgstr "Заголовок статті" - -#: ../../src/appx/blog/spec.rst:265 -msgid "Creation date" -msgstr "Дата створення" - -#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 -msgid "Author name" -msgstr "Ім'я автора" - -#: ../../src/appx/blog/spec.rst:267 -msgid "Related topics" -msgstr "Пов'язані теми" - -#: ../../src/appx/blog/spec.rst:268 -msgid "Article content" -msgstr "Вміст статті" - -#: ../../src/appx/blog/spec.rst:270 -msgid "Page contains a list of related comments." -msgstr "Сторінка містить список пов'язаних коментарів." - -#: ../../src/appx/blog/spec.rst:271 -msgid "Each comment contains:" -msgstr "Кожен коментар містить:" - -#: ../../src/appx/blog/spec.rst:274 -msgid "Comment creation time" -msgstr "Час створення коментаря" - -#: ../../src/appx/blog/spec.rst:275 -msgid "Comment message" -msgstr "Текст комментаря" - -#: ../../src/appx/blog/spec.rst:278 -msgid "Profile page" -msgstr "Строніка профілю" - -#: ../../src/appx/blog/spec.rst:279 -msgid "Author page contains information about author:" -msgstr "Сторінка автора містить інформацію про автора:" - -#: ../../src/appx/blog/spec.rst:281 -msgid "First name" -msgstr "Ім'я" - -#: ../../src/appx/blog/spec.rst:282 -msgid "Last name" -msgstr "Прізвище" - -#: ../../src/appx/blog/spec.rst:284 -msgid "Add more information, if needed." -msgstr "Додайте більше інформації за бажанням." - -#: ../../src/appx/blog/spec.rst:286 -msgid "Author page contains a list of articles created by this author." -msgstr "Сторінка автора містить список статей, створених цим автором." - -#: ../../src/appx/blog/spec.rst:287 -msgid "" -"Author page contains buttons/links to change user data and password or " -"deactivate a user's account." -msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " -"деактивації облікового запису користувача." - -#: ../../src/appx/blog/spec.rst:291 -msgid "Forms" -msgstr "Форми" - -#: ../../src/appx/blog/spec.rst:293 -msgid "" -"There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok just " -"to create a dedicated templates for future use." -msgstr "" -"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " -"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " -"використання достатньо створити окремі шаблони." - -#: ../../src/appx/blog/spec.rst:297 -msgid "" -"``/register/`` page contains a new user registration form. It should take " -"inputs from the user:" -msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " -"повинна отримувати введені дані від користувача:" - -#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 -#: ../../src/appx/libms/spec.rst:296 -msgid "username" -msgstr "username" - -#: ../../src/appx/blog/spec.rst:301 -msgid "email" -msgstr "email" - -#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 -#: ../../src/appx/libms/spec.rst:299 -msgid "password" -msgstr "password" - -#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 -#: ../../src/appx/libms/spec.rst:300 -msgid "confirm password" -msgstr "confirm password" - -#: ../../src/appx/blog/spec.rst:305 -msgid "" -"``/login/`` page contains a user login form. It should take the inputs from " -"the user:" -msgstr "" -"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " -"отримувати введені дані від користувача:" - -#: ../../src/appx/blog/spec.rst:311 -msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a " -"article's data:" -msgstr "" -"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " -"даних статті:" - -#: ../../src/appx/blog/spec.rst:314 ../../src/appx/libms/spec.rst:347 -msgid "title" -msgstr "title" - -#: ../../src/appx/blog/spec.rst:315 -msgid "relevant topics" -msgstr "відповідні теми" - -#: ../../src/appx/blog/spec.rst:316 -msgid "content" -msgstr "content" - -#: ../../src/appx/blog/spec.rst:318 -msgid "``/
    /delete`` page contains a simple delete confirmation form." -msgstr "" -"Сторінка ``/
    /delete`` містить просту форму для підтвердження " -"видалення." - -#: ../../src/appx/blog/spec.rst:319 -msgid "Change password form has two fields:" -msgstr "Форма зміни пароля має два поля:" - -#: ../../src/appx/blog/spec.rst:321 -msgid "new password" -msgstr "new password" - -#: ../../src/appx/blog/spec.rst:324 -msgid "" -"Change user's data form collects all information, that can be changed, e.g. " -"``username``, ``first name``, ``last name`` etc." -msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " -"наприклад, ``username``, ``first name``, ``last name`` та інше." - -#: ../../src/appx/blog/spec.rst:326 -msgid "" -"User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to *subscribe* " -"for the newsletters becomes available." -msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач " -"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " -"тем стає доступною опція *підписки* на розсилку новинних листів." - -#: ../../src/appx/blog/spec.rst:331 -msgid "Challenge: Articles' slugs" -msgstr "Виклик: Slug-и статей" - -#: ../../src/appx/blog/spec.rst:334 -msgid "This is an optional challenge in addition to:" -msgstr "Це додатковий виклик у додаток до:" - -#: ../../src/appx/blog/spec.rst:336 -msgid "`Challenge: Functional views`_" -msgstr "`Challenge: Functional views`_" - -#: ../../src/appx/blog/spec.rst:337 -msgid "`Challenge: Templates`_" -msgstr "`Challenge: Templates`_" - -#: ../../src/appx/blog/spec.rst:338 -msgid "`Challenge: Data models`_" -msgstr "`Challenge: Data models`_" - -#: ../../src/appx/blog/spec.rst:339 -msgid "`Challenge: ORM`_" -msgstr "`Challenge: ORM`_" - -#: ../../src/appx/blog/spec.rst:341 -msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "" -"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" - -#: ../../src/appx/blog/spec.rst:343 -msgid "required for each article" -msgstr "обов'язкове для кожної статті" - -#: ../../src/appx/blog/spec.rst:344 -msgid "unique for each article" -msgstr "унікальне для кожної статті" - -#: ../../src/appx/blog/spec.rst:346 -msgid "Create a data migration to provide slugs for existing articles." -msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." - -#: ../../src/appx/blog/spec.rst:347 -msgid "" -"``slug`` should be auto-generated on article save. The pattern is ``article." -"title-article.created_date``, e.g. \"Sample article\" created at " -"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." -msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " -"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " -"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " -"отримає slug: ``sample-blog-article-2023-03-23``." - -#: ../../src/appx/blog/spec.rst:351 -msgid "Update detail view URL path with article slug as dynamic portion." -msgstr "" -"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " -"якою буде slug статті." - -#: ../../src/appx/blog/spec.rst:354 -msgid "Challenge: Auth forms" -msgstr "Завдання: форми авторизації" - -#: ../../src/appx/blog/spec.rst:356 -msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" - -#: ../../src/appx/blog/spec.rst:358 -msgid "``username``" -msgstr "``username``" - -#: ../../src/appx/blog/spec.rst:359 -msgid "``email``" -msgstr "``email``" - -#: ../../src/appx/blog/spec.rst:360 -msgid "``password``" -msgstr "``password``" - -#: ../../src/appx/blog/spec.rst:361 -msgid "``confirm password``" -msgstr "``confirm password``" - -#: ../../src/appx/blog/spec.rst:363 -msgid "``username`` value should be validated against existing values." -msgstr "" -"Значення ``username`` повинно перевірятися на відповідність існуючим " -"значенням." - -#: ../../src/appx/blog/spec.rst:364 -msgid "``password`` and ``confirm password`` values should match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися." - -#: ../../src/appx/blog/spec.rst:365 -msgid "Create form for existing users login." -msgstr "Створити форму для входу існуючих користувачів." - -#: ../../src/appx/blog/spec.rst:366 -msgid "Validations errors are to be rendered on the template." -msgstr "Помилки перевірки повинні відображатися на шаблоні." - -#: ../../src/appx/blog/spec.rst:369 -msgid "Challenge: Authentication" -msgstr "Завдання: Автентифікація" - -#: ../../src/appx/blog/spec.rst:371 -msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." -msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." - -#: ../../src/appx/blog/spec.rst:373 -msgid "" -"For authenticated users ``/logout/`` and ``/create/`` links should be " -"visible in navbar." -msgstr "" -"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " -"мають бути видимими на панелі навігації." - -#: ../../src/appx/blog/spec.rst:375 -msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." -msgstr "" -"Якщо автентифікований користувач є адміністратором або іншим, він має " -"побачити посилання на сторінку адміністратора." - -#: ../../src/appx/blog/spec.rst:377 -msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " -"authentication process. Invalid form should provide information about " -"error(s)." -msgstr "" -"``/register/``: користувачі повинні надати всю необхідну інформацію про " -"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " -"прізвище) необов'язкові. Після створення користувача вони повинні бути " -"перенаправлені на сторінку входу для виконання процесу автентифікації. " -"Недійсна форма повинна надавати інформацію про помилку(и)." - -#: ../../src/appx/blog/spec.rst:382 -msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." -msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." - -#: ../../src/appx/blog/spec.rst:385 -msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"article creation. Then a article is created, it should be authored by the " -"currently authenticated user." -msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " -"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " -"представлення, його повинно перенаправити спочатку на сторінку входу, а " -"після успішної аутентифікації повернути на сторінку створення статті. При " -"створенні статті вона повинна мати автором поточного аутентифікованого " -"користувача." - -#: ../../src/appx/blog/spec.rst:390 -msgid "" -"``/
    /comment/``: Currently authenticated user should be referenced " -"as a comment's author." -msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " -"повинна бути зазначена його ідентифікація як автора." - -#: ../../src/appx/blog/spec.rst:392 -msgid "" -"Articles may be modified or deleted only by their authors from the detail " -"article page. However, admins can still performs articles actions from the " -"admin page." -msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " -"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " -"адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:395 -msgid "User related paths are restricted for non-authorized users." -msgstr "" -"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " -"користувачів." - -#: ../../src/appx/blog/spec.rst:397 -msgid "``/set-password/``" -msgstr "``/set-password/``" - -#: ../../src/appx/blog/spec.rst:398 -msgid "``/set-userdata/``" -msgstr "``/set-userdata/``" - -#: ../../src/appx/blog/spec.rst:400 -msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user as " -"*deleted* and log them user." -msgstr "" -"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для цього " -"користувача." - -#: ../../src/appx/blog/spec.rst:406 -msgid "" -"Adjust the order of article list according to authenticated user " -"preferences. For anonymous users keep default ordering." -msgstr "" -"Призначте зміну порядку списку статей відповідно до вподобань " -"аутентифікованого користувача. Для анонімних користувачів залиште типове " -"сортування за замовчуванням." - -#: ../../src/appx/blog/spec.rst:408 -msgid "" -"Implement account reactivation behavior. The exact workflow does not mater. " -"The sample scenario is to collect email for the user and check it for " -"existing in the database. After that create a request for admin to activate " -"an account and send a confirmation email, when all is done." -msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " -"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " -"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " -"цього створіть запит для адміністратора на активацію облікового запису та " -"надішліть підтверджувальний лист електронною поштою, коли все буде готово." - -#: ../../src/appx/blog/spec.rst:414 -msgid "Challenge: Article related forms" -msgstr "Виклик: Форми пов'язані зі статтями" - -#: ../../src/appx/blog/spec.rst:416 -msgid "" -"Implement a article form. This form will be used to create new articles and " -"to update existing ones." -msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " -"статей та оновлення існуючих." - -#: ../../src/appx/blog/spec.rst:418 -msgid "Each created article should have at least one related topic." -msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." - -#: ../../src/appx/blog/spec.rst:419 -msgid "Implement a comment form to gather a comment from a user." -msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." - -#: ../../src/appx/blog/spec.rst:420 -msgid "" -"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " -"moment." -msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" -"``." - -#: ../../src/appx/blog/spec.rst:422 -msgid "Implement functionality:" -msgstr "Реалізуйте функціональність:" - -#: ../../src/appx/blog/spec.rst:424 -msgid "article creation" -msgstr "створення статті" - -#: ../../src/appx/blog/spec.rst:425 -msgid "article update" -msgstr "оновлення статті" - -#: ../../src/appx/blog/spec.rst:426 -msgid "article comment (create a related comment)" -msgstr "коментування статті (створення коментаря)" - -#: ../../src/appx/blog/spec.rst:427 -msgid "article deletion" -msgstr "видалення статті" - -#: ../../src/appx/blog/spec.rst:429 -msgid "Only authenticated users can create articles." -msgstr "Лише аутентифіковані користувачі можуть створювати статі." - -#: ../../src/appx/blog/spec.rst:430 -msgid "Article can be edited only by its author." -msgstr "Стаття може редагуватись лише її автором." - -#: ../../src/appx/blog/spec.rst:431 -msgid "Article can be deleted only by its author." -msgstr "Стаття може видалятись лише її автором." - -#: ../../src/appx/blog/spec.rst:432 -msgid "Only authenticated users can comment articles." -msgstr "Лише аутентифіковані користувачі можуть коментувати статті." - -#: ../../src/appx/blog/spec.rst:439 -msgid "Challenge: Class-Based Views" -msgstr "Завдання: Class-Based Views" - -#: ../../src/appx/blog/spec.rst:441 -msgid "Replace **all** existing views via ``CBV``." -msgstr "Замінити **всі** існуючі перегляди через ``CBV``." - -#: ../../src/appx/blog/spec.rst:442 -msgid "Existing functionality should not be corrupted." -msgstr "Існуюча функціональність не повинна бути пошкоджена." - -#: ../../src/appx/blog/spec.rst:445 -msgid "It's ok to use built-in Django CBV if needed." -msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " -"(CBV)." - -#: ../../src/appx/blog/spec.rst:448 -msgid "Challenge: Serializers" -msgstr "Завдання: Серіалізатори" - -#: ../../src/appx/blog/spec.rst:452 -msgid "" -"Topic serializer is for read-only purposes only. Topics can be created via " -"admin page only." -msgstr "" -"Серіалізатор для теми призначений лише для операцій читання (read-only). " -"Теми можна створювати лише через адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:454 -msgid "" -"Serialized data should contain all available data, e.g. ``pk``, ``title``, " -"``description``." -msgstr "" -"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " -"``pk``, ``title``, ``description``." - -#: ../../src/appx/blog/spec.rst:459 -msgid "" -"article comment serializer can perform both reading and writing operations. " -"But it can't be used to *update* or *delete* comment." -msgstr "" -"серіалізатор коментаря статті може виконувати як операції читання, так і " -"операції запису. Проте він не може використовуватися для оновлення або " -"видалення коментаря." - -#: ../../src/appx/blog/spec.rst:461 -msgid "" -"Random, or pre-defined user may be used as comment's author for now. This " -"will be fixed in the future." -msgstr "" -"Наразі можна використовувати випадкового або попередньо визначеного " -"користувача як автора коментаря. Це буде виправлено у майбутньому." - -#: ../../src/appx/blog/spec.rst:466 -msgid "" -"article serializer provides full access to articles. All operations are " -"available: list, retrieve, create, update and destroy." -msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " -"отримання списку, отримання окремої статті, створення нової статті, " -"оновлення та видалення." - -#: ../../src/appx/blog/spec.rst:470 -msgid "User" -msgstr "Користувач" - -#: ../../src/appx/blog/spec.rst:471 -msgid "" -"User serializer provides full access to site users data. All operations are " -"available for now: list, retrieve, create, update and destroy. This behavior " -"will be fixed in the future, to prevent unauthorized data modifications." -msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " -"Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та видалення. " -"Однак, ця поведінка буде виправлена у майбутньому для запобігання " -"несанкціонованим змінам даних." - -#: ../../src/appx/blog/spec.rst:477 -msgid "Challenge: API views" -msgstr "Завдання: API views" - -#: ../../src/appx/blog/spec.rst:479 -msgid "All blog-site functionality are to be reflected via REST API." -msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API." - -#: ../../src/appx/blog/spec.rst:482 -msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This will " -"be fixed in the next challenge." -msgstr "" -"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " -"запиту. Це буде виправлено у наступному розділі." - -#: ../../src/appx/blog/spec.rst:486 -msgid "Challenge: Authentication and Permissions" -msgstr "Завдання: Автентифікація та Дозволи" - -#: ../../src/appx/blog/spec.rst:488 -msgid "Implement authentication system for REST API." -msgstr "Реалізуйте систему аутентифікації для REST API." - -#: ../../src/appx/blog/spec.rst:490 -msgid "For non-authenticated users it is possible to create a new account" -msgstr "" -"Для неаутентифікованих користувачів можлива створення нового облікового " -"запису" - -#: ../../src/appx/blog/spec.rst:491 -msgid "" -"For non-authenticated users it is possible to obtain authentication data." -msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." - -#: ../../src/appx/blog/spec.rst:494 -msgid "" -"Access to user data is restricted. Authorized users can manipulate only " -"their own data (e.g. ``retrieve``, ``update``)." -msgstr "" -"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " -"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " -"``update``)." - -#: ../../src/appx/blog/spec.rst:496 -msgid "" -"Admins can retrieve all users data (``list``), but can't change them via " -"REST API. However, it is still possible via admin page." -msgstr "" -"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " -"можуть змінювати їх через REST API. Однак це все ще можливо через " -"адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:498 -msgid "" -"Authorized users can ``create`` articles or ``update`` and ``delete`` " -"articles created by them." -msgstr "" -"Авторизовані користувачі можуть ``create`` статті або ``update`` та " -"``delete`` статті, створені ними." - -#: ../../src/appx/blog/spec.rst:500 -msgid "Authorized users can add comments to a specified article." -msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." - -#: ../../src/appx/code_edit.txt:-1 -msgid "Code editors and IDEs for Python" -msgstr "Редактори коду та IDE для Python" - -#: ../../src/appx/code_edit.txt:-1 -msgid "python, editor, ide" -msgstr "python, editor, ide" - -#: ../../src/appx/code_edit.txt:8 ../../src/appx/env_path.txt:8 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/appx/code_edit.txt:16 -msgid "Code Editors" -msgstr "Редактори Коду" - -#: ../../src/appx/code_edit.txt:18 -msgid "" -"Writing Python using IDLE or the Python Shell is great for simple things, " -"but those tools quickly turn larger programming projects into frustrating " -"pits of despair. Using an IDE, or even just a good dedicated code editor, " -"makes coding fun — but which one is best for you? :cite:`realpython:code-" -"edit`" -msgstr "" -"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " -"для простих речей, але ці інструменти швидко перетворюють великі проекти " -"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " -"хорошого спеціального редактора коду робить кодування цікавим — але який з " -"них найкращий для вас? :cite:`realpython:code-edit`" - -#: ../../src/appx/conv_store.txt:-1 -msgid "Convenience store challenge" -msgstr "Завдання: продуктовий магазин" - -#: ../../src/appx/conv_store.txt:-1 -msgid "python, basics, oop, object-oriented programming" -msgstr "python, basics, oop, object-oriented programming" - -#: ../../problem-sets/src/conv_store/challenge.rst:3 -msgid "Convenience Store Challenge" -msgstr "Convenience Store Challenge" - -#: ../../problem-sets/src/conv_store/challenge.rst:5 -msgid "" -"The local store is struggling with their payment registry system. The owner " -"asked you to take a look at it and to propose some ideas about the upgrade. " -"While looking on a wooden frames with rows of beads you think that this will " -"be a challenging task to bring a modern approach into this place and " -"reorganize the processes. Fortunately, you are a Python developer who knows " -"how to work with various data incomes and outcomes. After some time the " -"scope of works and timelines were discussed and wrote some notes to split " -"the entire project into individual pieces to implement step-by-step." -msgstr "" -"Місцевий магазин має проблеми з системою реєстрації платежів. Власник " -"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " -"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " -"завданням застосувати сучасний підхід до цього місця та реорганізувати " -"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " -"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " -"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " -"окремі частини для поетапної реалізації." - -#: ../../problem-sets/src/conv_store/challenge.rst:14 -msgid "Your notes are here," -msgstr "Ваші нотатки ось," - -#: ../../problem-sets/src/conv_store/challenge.rst:18 -msgid "Products and Carts" -msgstr "Товари та кошик" - -#: ../../problem-sets/src/conv_store/challenge.rst:20 -msgid "" -"It's a good idea to start with basics - the objects you're going to work " -"with. At stage one the main goal is to implement data models - classes to " -"work around data in the future." -msgstr "" -"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " -"першому етапі головною метою є впровадження моделей даних - класів для " -"роботи з даними в майбутньому." - -#: ../../problem-sets/src/conv_store/challenge.rst:25 -msgid "Product" -msgstr "Товар" - -#: ../../problem-sets/src/conv_store/challenge.rst:27 -msgid "This class represents goods available to purchase in the store." -msgstr "Цей клас представляє товари, які можна придбати в магазині." - -#: ../../problem-sets/src/conv_store/challenge.rst:29 -msgid "Each product instance should have next attributes:" -msgstr "Кожен екземпляр продукту повинен мати такі атрибути:" - -#: ../../problem-sets/src/conv_store/challenge.rst:31 -msgid "``name`` - a product title (e.g. \"apple\", \"juice\")" -msgstr "``name`` - назва товару (прик. \"apple\", \"juice\")" - -#: ../../problem-sets/src/conv_store/challenge.rst:32 -msgid "``price`` - a price for a single product unit (e.g. 3655, 500, 12999)" -msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" - -#: ../../problem-sets/src/conv_store/challenge.rst:33 -msgid "``unit`` - a size of a single product's unit (e.g. 1, 0.500, 12)" -msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" - -#: ../../problem-sets/src/conv_store/challenge.rst:35 -msgid "" -"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " -"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." -msgstr "" -"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " -"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." - -#: ../../problem-sets/src/conv_store/challenge.rst:39 -msgid "" -"``Product`` class should implement ``get_total`` method to calculate a total " -"price for a specified quantity of a product to purchase. Desired quantity " -"will be passed as an optional argument of a numeric type (``int`` or " -"``float``). In case quantity argument is omitted - just use ``unit`` " -"attribute value instead." -msgstr "" -"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " -"загальної ціни на вказану кількість товару для покупки. Бажану кількість " -"буде передано як необов'язковий аргумент числового типу (``int`` або " -"``float``). Якщо аргумент кількості пропущено, просто використовуйте " -"значення атрибута ``unit``." - -#: ../../problem-sets/src/conv_store/challenge.rst:46 -#: ../../problem-sets/src/conv_store/challenge.rst:77 -msgid "Code explanation" -msgstr "Пояснення коду" - -#: conv_store.models.Product:1 of -msgid "Product model implementation" -msgstr "Реалізація моделі товару" - -#: conv_store.models.Product conv_store.models.ShoppingCart of wtk.models.Enemy -#: wtk.models.Player -msgid "Variables" -msgstr "Змінні" - -#: conv_store.models.Product:3 of -msgid "the name of a product" -msgstr "назва товару" - -#: conv_store.models.Product:5 of -msgid "the price for a single product unit" -msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" - -#: conv_store.models.Product:7 of -msgid "the size of a single product unit" -msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" - -#: conv_store.models.Product:10 of -msgid "Instances of this class represent a product available for purchase." -msgstr "Цей клас представляє товари, які можна придбати в магазині." - -#: conv_store.models.Product.get_total:1 of -msgid "Return the total price for a specified amount of a product" -msgstr "Повертає загальну ціну за вказану кількість товару" - -#: conv_store.models.Product.get_total -#: conv_store.models.ShoppingCart.add_product of wtk.models.Enemy.__init__ -#: wtk.models.Player.__init__ -msgid "Parameters" -msgstr "Параметри" - -#: conv_store.models.Product.get_total:3 of -msgid "a quantity to purchase, defaults to None" -msgstr "кількість для покупки, за замовчуванням None" - -#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total -#: of wtk.engine.get_player_name wtk.models.Enemy.select_attack -#: wtk.models.Enemy.select_defence wtk.models.Player.select_attack -#: wtk.models.Player.select_defence -msgid "Returns" -msgstr "Повертає" - -#: conv_store.models.Product.get_total:6 of -msgid "total price for a specified amount of a product" -msgstr "вартість вказаної кількості товару" - -#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total -#: of -msgid "Return type" -msgstr "Тип повернення" - -#: conv_store.models.Product.get_total:9 of -msgid "" -"If the quantity argument is omitted, unit attribute value should be used " -"instead." -msgstr "" -"Якщо аргумент кількості пропущено, замість нього слід використовувати " -"значення атрибута одиниці." - -#: ../../problem-sets/src/conv_store/challenge.rst:51 -#: ../../problem-sets/src/conv_store/challenge.rst:82 -#: ../../problem-sets/src/conv_store/challenge.rst:126 -#: ../../problem-sets/src/conv_store/challenge.rst:189 -#: ../../problem-sets/src/conv_store/challenge.rst:224 -msgid "Test cases" -msgstr "Тестові приклади" - -#: ../../problem-sets/src/conv_store/challenge.rst:63 -msgid "Shopping Cart" -msgstr "Кошик для покупок" - -#: ../../problem-sets/src/conv_store/challenge.rst:65 -msgid "" -"This class represents the container for the products. It's main " -"responsibility is to store information about the purchases and their amount " -"(quantities)." -msgstr "" -"Цей клас представляє контейнер для продуктів. Його основна відповідальність " -"- зберігати інформацію про покупки та їх кількість." - -#: ../../problem-sets/src/conv_store/challenge.rst:68 -msgid "" -"Each cart instance should store data about ``Product`` objects in it and " -"corresponding quantity value for each individual product." -msgstr "" -"Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " -"ньому та відповідне значення кількості для кожного окремого продукту." - -#: ../../problem-sets/src/conv_store/challenge.rst:70 -msgid "" -"``ShoppingCart`` should implement ``add_product`` method to put a specified " -"quantity into a cart. ``quantity`` argument is optional, if omitted just " -"uses ``Product.unit`` value instead." -msgstr "" -"``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " -"вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " -"пропущено, просто використовує натомість значення ``Product.unit``." - -#: ../../problem-sets/src/conv_store/challenge.rst:73 -msgid "" -"``ShoppingCart`` should implement ``get_total`` method to calculate the " -"total price for the entire cart contents." -msgstr "" -"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " -"загальної ціни всього вмісту кошика." - -#: conv_store.models.ShoppingCart:1 of -msgid "Shopping cart model implementation" -msgstr "Реалізація моделі кошика" - -#: conv_store.models.ShoppingCart:3 of -msgid "product appended to the shopping cart instance" -msgstr "товар, доданий до екземпляра кошика" - -#: conv_store.models.ShoppingCart:5 of -msgid "corresponding quantities for each product in cart" -msgstr "відповідна кількість для товару у кошику" - -#: conv_store.models.ShoppingCart:8 of -msgid "" -"In general shopping cart is a container for products. Instances of this " -"class handle product and corresponding quantity for each item inside a " -"shopping cart instance." -msgstr "" -"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " -"класу обробляють продукт і відповідну кількість для кожного товару в " -"екземплярі кошика для покупок." - -#: conv_store.models.ShoppingCart.add_product:1 of -msgid "Add product to the shopping cart" -msgstr "Додає товар до кошика" - -#: conv_store.models.ShoppingCart.add_product:3 of -msgid "a product instance to add to cart" -msgstr "екземпляр товару, щоб додати до кошика" - -#: conv_store.models.ShoppingCart.add_product:5 of -msgid "a quantity of a product to add. Defaults to the product unit value." -msgstr "" -"кількість продукту для додавання. За замовчуванням значення одиниці продукту." - -#: conv_store.models.ShoppingCart.add_product:9 of -msgid "" -"This method adds a product instance and corresponding quantity value to the " -"cart." -msgstr "" -"Цей метод додає екземпляр продукту та відповідне значення кількості до " -"кошика." - -#: conv_store.models.ShoppingCart.get_total:1 of -msgid "Return the total price for all the product in the cart" -msgstr "Повертає загальну вартість усіх товарів у кошику" - -#: conv_store.models.ShoppingCart.get_total:3 of -msgid "total cart price" -msgstr "загальна вартість кошика" - -#: ../../problem-sets/src/conv_store/challenge.rst:97 -msgid "Initialization, Representation and Type Casting" -msgstr "Ініціалізація, представлення та приведення типів" - -#: ../../problem-sets/src/conv_store/challenge.rst:99 -msgid "" -"It's difficult to set properties one-by-one, also it's not informative to " -"get default objects string representations. It's time to fix this." -msgstr "" -"Важко встановлювати властивості одну за одною, також " -"неінформативноотримувати представлення рядків об'єктів за замовчуванням. " -"Настав час це виправити." - -#: ../../problem-sets/src/conv_store/challenge.rst:102 -msgid "``Product`` should be initialized with all required data, no defaults." -msgstr "" -"``Product`` має бути ініціалізований усіма необхідними даними, без значень " -"за замовчуванням." - -#: ../../problem-sets/src/conv_store/challenge.rst:103 -msgid "" -"Apply ``ShoppingCart.__init__`` to separate products and quantities between " -"different carts." -msgstr "" -"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " -"між різними візками." - -#: ../../problem-sets/src/conv_store/challenge.rst:105 -msgid "Provide a human readable representations. For example:" -msgstr "Надайте представлення, зрозумілі людині. Наприклад:" - -#: ../../problem-sets/src/conv_store/challenge.rst:107 -msgid "``Product('juice', 35.66, 1)``" -msgstr "``Product('juice', 35.66, 1)``" - -#: ../../problem-sets/src/conv_store/challenge.rst:108 -msgid "````" -msgstr "````" - -#: ../../problem-sets/src/conv_store/challenge.rst:110 -msgid "" -"While casting product instance to ``str`` type it should be equal to its " -"``name`` attribute value." -msgstr "" -"Під час приведення екземпляра продукту до типу ``str`` він повинен " -"дорівнювати значенню атрибута ``name``." - -#: ../../problem-sets/src/conv_store/challenge.rst:112 -msgid "" -"While casting product instance to ``float`` type it should be equal to its " -"``price`` attribute value." -msgstr "" -"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " -"значенню його атрибута ``price``." - -#: ../../problem-sets/src/conv_store/challenge.rst:114 -msgid "" -"While casting shopping cart instance to ``float`` type it should be equal to " -"its total price value." -msgstr "" -"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " -"дорівнювати загальному значенню ціни." - -#: ../../problem-sets/src/conv_store/challenge.rst:116 -msgid "" -"While casting shopping cart instance to ``bool`` consider it ``True`` if at " -"least one product is attach to current cart." -msgstr "" -"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " -"``True``, якщо принаймні один продукт приєднаний до поточного кошика." - -#: ../../problem-sets/src/conv_store/challenge.rst:119 -msgid "Implement equality operator support for your objects:" -msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" - -#: ../../problem-sets/src/conv_store/challenge.rst:121 -msgid "consider products equal if all their properties are the same" -msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" - -#: ../../problem-sets/src/conv_store/challenge.rst:122 -msgid "" -"consider carts equal if products and corresponding quantities are the same" -msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" - -#: ../../problem-sets/src/conv_store/challenge.rst:148 -msgid "Payment Processors" -msgstr "Опрацювання платежів" - -#: ../../problem-sets/src/conv_store/challenge.rst:150 -msgid "" -"The owner asked you to implement a flexible payment system. Purchasing the " -"shopping card consists of several steps:" -msgstr "" -"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " -"покупок складається з кількох кроків:" - -#: ../../problem-sets/src/conv_store/challenge.rst:153 -msgid "cart validation - it should not be empty or already purchased" -msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" - -#: ../../problem-sets/src/conv_store/challenge.rst:154 -msgid "payment validation - various payment types requires various validations" -msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" - -#: ../../problem-sets/src/conv_store/challenge.rst:155 -msgid "purchasing the cart" -msgstr "купівля кошика" - -#: ../../problem-sets/src/conv_store/challenge.rst:157 -msgid "" -"For now there are two payment types available in the store: cash and credit " -"card, but they maybe extended at any time." -msgstr "" -"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " -"їх можна продовжити в будь-який час." - -#: ../../problem-sets/src/conv_store/challenge.rst:160 -msgid "" -"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " -"property *protected*, since it should not be accessed outside the card " -"instance." -msgstr "" -"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " -"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " -"картки." - -#: ../../problem-sets/src/conv_store/challenge.rst:163 -msgid "" -"Implement ``PaymentValidator`` class with ``is_valid`` that takes no " -"arguments and return a value of a boolean type. This is an abstract class " -"for the future usage." -msgstr "" -"Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " -"аргументів і повертає значення логічного типу. Це абстрактний клас для " -"майбутнього використання." - -#: ../../problem-sets/src/conv_store/challenge.rst:166 -msgid "" -"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " -"``ShoppingCart`` object and returns nothing. This is an abstract class for " -"the future usage." -msgstr "" -"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " -"об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " -"майбутнього використання." - -#: ../../problem-sets/src/conv_store/challenge.rst:169 -msgid "" -"Inherit ``CashPaymentValidator`` from the base validator. The instances of " -"this class are considered to be always valid." -msgstr "" -"Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " -"цього класу вважаються завжди дійсними." - -#: ../../problem-sets/src/conv_store/challenge.rst:171 -msgid "Inherit ``CodeValidator`` from the base validator." -msgstr "Успадкувати ``CodeValidator`` від основного валідатора." - -#: ../../problem-sets/src/conv_store/challenge.rst:173 -msgid "" -"The instances of this class are created with ``security_code`` argument." -msgstr "" -"Екземпляри цього класу створено за допомогою аргументу ``security_code``." - -#: ../../problem-sets/src/conv_store/challenge.rst:174 -msgid "" -"``is_valid`` method should ask a customer for a security code and check it " -"against the stored value. In case codes are equal payment considered to be " -"valid." -msgstr "" -"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " -"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." - -#: ../../problem-sets/src/conv_store/challenge.rst:178 -msgid "" -"Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " -"``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " -"printed out." -msgstr "" -"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " -"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " -"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " -"слід роздрукувати." - -#: ../../problem-sets/src/conv_store/challenge.rst:183 -msgid "" -"Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " -"``PaymentProcessor`` behaviors. While purchasing the cart the messages " -"\"Processing card payment...\" and \"Security code: {code}\" should be " -"printed out." -msgstr "" -"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " -"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " -"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." - -#: ../../problem-sets/src/conv_store/challenge.rst:203 -msgid "More Enhancements for Shopping Carts" -msgstr "Більше покращень для кошиків для покупок" - -#: ../../problem-sets/src/conv_store/challenge.rst:205 -msgid "Make your ``ShoppingCart`` an actual container" -msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" - -#: ../../problem-sets/src/conv_store/challenge.rst:207 -msgid "" -"Implement ``len(cart_obj)`` and make it return the number of products in the " -"cart." -msgstr "" -"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " -"кошику." - -#: ../../problem-sets/src/conv_store/challenge.rst:209 -msgid "" -"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " -"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." -msgstr "" -"Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " -"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " -"float]]``)." - -#: ../../problem-sets/src/conv_store/challenge.rst:213 -msgid "" -"Make your ``ShoppingCart`` iterable - let it provide the product instance " -"and corresponding quantity for each iteration." -msgstr "" -"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " -"примірник продукту та відповідну кількість для кожної ітерації." - -#: ../../problem-sets/src/conv_store/challenge.rst:215 -msgid "" -"Avoid products duplication. In case someone tries to put the product into a " -"cart and this product already is present there, do not it for the second " -"time - adjust corresponding quantity value instead." -msgstr "" -"Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " -"кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " -"натомість відповідне значення кількості." - -#: ../../problem-sets/src/conv_store/challenge.rst:218 -msgid "" -"Implement ``remove_product`` method to completely remove some product from " -"the cart." -msgstr "" -"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " -"кошика." - -#: ../../problem-sets/src/conv_store/challenge.rst:220 -msgid "" -"Implement ``sub_product`` to decrease some product quantity. If quantity is " -"equal to 0 (zero) or less - remove product from the cart." -msgstr "" -"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " -"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." - -#: ../../problem-sets/src/conv_store/challenge.rst:249 -msgid "Testing Software" -msgstr "Тестування програмного забезпечення" - -#: ../../problem-sets/src/conv_store/challenge.rst:251 -msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." -msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." - -#: ../../problem-sets/src/conv_store/challenge.rst:253 -msgid "Tests should be located inside of \"tests\" directory." -msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." - -#: ../../problem-sets/src/conv_store/challenge.rst:254 -msgid "``pytest`` and ``coverage`` libraries will be used for testing." -msgstr "" -"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." - -#: ../../problem-sets/src/conv_store/challenge.rst:255 -msgid "Project dependencies are to be updated." -msgstr "Залежності проекту потрібно оновити." - -#: ../../src/appx/env_path.txt:-1 -msgid "Setting up environment variables" -msgstr "Встановлення змінних середовища" - -#: ../../src/appx/env_path.txt:-1 -msgid "settings, environment, variables" -msgstr "settings, environment, variables" - -#: ../../src/appx/env_path.txt:16 -msgid "Issue - System Environment PATH" -msgstr "Проблема - System Environment PATH" - -#: ../../src/appx/libms/spec.rst:3 -msgid "Library Management System - Specification" -msgstr "Система Керування Бібліотекою - Специфікація" - -#: ../../src/appx/libms/spec.rst:5 -msgid "" -"The Library Management System is a Django-based web application that offers " -"a digital platform for managing and interacting with a library's collection. " -"It streamlines the processes of book lending, returns, and inventory " -"management, while ensuring easy access for users and librarians alike. " -"Through this system, users can search for available books, place borrowing " -"requests, and manage their borrowed items. Librarians, on the other hand, " -"oversee the addition, update, and removal of book records, and can approve " -"or decline borrowing requests. The system also supports diverse user roles, " -"from regular members to staff and administrators, each with distinct " -"capabilities." -msgstr "" -"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " -"пропонує цифрову платформу для управління та взаємодії з колекцією " -"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " -"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " -"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " -"книги, робити запити на позику та керувати позиченими предметами. " -"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " -"записів книг та можуть схвалювати або відхиляти запити на позику. Система " -"також підтримує різноманітні ролі користувачів, від звичайних членів до " -"персоналу та адміністраторів, кожен з яких має відмінні можливості." - -#: ../../src/appx/libms/spec.rst:15 -msgid "" -"A well-structured user interface ensures that all functionalities are easily " -"accessible, making the library management process seamless and efficient. " -"This project aims to merge traditional library functions with modern " -"technological innovations, promoting efficiency and an enhanced user " -"experience." -msgstr "" -"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " -"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " -"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " -"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " -"покращенню користувацького досвіду." - -#: ../../src/appx/libms/spec.rst:22 -msgid "User roles" -msgstr "Ролі користувачів" - -#: ../../src/appx/libms/spec.rst:25 -msgid "" -"It is essential for developers to consider security aspects when " -"implementing these roles to ensure that users cannot perform actions outside " -"their designated role's scope." -msgstr "" -"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " -"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " -"рамки призначеної їм ролі." - -#: ../../src/appx/libms/spec.rst:30 -msgid "Admins" -msgstr "Адміністратори" - -#: ../../src/appx/libms/spec.rst:32 -msgid "" -"Superusers have full control over the entire system. They can access and " -"manage all functionalities provided by the Django admin site." -msgstr "" -"Адміністратори мають повний контроль над усією системою. Вони можуть " -"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " -"керувати ними." - -#: ../../src/appx/libms/spec.rst:35 -msgid "Admins can create, modify, or delete any record within the application." -msgstr "" -"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " -"додатку." - -#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 -#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 -msgid "Capabilities" -msgstr "Можливості" - -#: ../../src/appx/libms/spec.rst:39 -msgid "Access Django admin site" -msgstr "Доступ до адміністративного сайту Django" - -#: ../../src/appx/libms/spec.rst:42 -msgid "Librarians" -msgstr "Бібліотекарі" - -#: ../../src/appx/libms/spec.rst:44 -msgid "" -"Staff personnel are in charge of day-to-day operations within the library. " -"They can add new books to the library's collection, manage existing books' " -"details, and accept or decline borrow requests from regular users." -msgstr "" -"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " -"можуть додавати нові книги до бібліотечної колекції, керувати даними про " -"наявні книги, а також приймати або відхиляти запити від постійних " -"користувачів." - -#: ../../src/appx/libms/spec.rst:50 -msgid "Management of the library catalogue" -msgstr "Управління бібліотечним каталогом" - -#: ../../src/appx/libms/spec.rst:52 -msgid "Add, modify or delete authors" -msgstr "Додавати, змінювати або видаляти авторів" - -#: ../../src/appx/libms/spec.rst:53 -msgid "Add, modify or delete genres" -msgstr "Додавати, змінювати або видаляти жанри" - -#: ../../src/appx/libms/spec.rst:54 -msgid "Add, modify or delete books' details" -msgstr "Додавати, змінювати або видаляти дані про книги" - -#: ../../src/appx/libms/spec.rst:56 -msgid "Review borrow requests from regular users" -msgstr "Переглядати запити на позичення від користувачів" - -#: ../../src/appx/libms/spec.rst:57 -msgid "Accept or decline borrow requests" -msgstr "Приймати або відхиляти запити на позичення" - -#: ../../src/appx/libms/spec.rst:58 -msgid "Register returned books and update their status" -msgstr "Реєструвати повернені книги та оновлювати їх статус" - -#: ../../src/appx/libms/spec.rst:61 -msgid "Regular" -msgstr "Звичайний" - -#: ../../src/appx/libms/spec.rst:63 -msgid "" -"Regular registered users are the members of the library. They can search " -"books, request to borrow them, and are responsible for returning borrowed " -"books on time." -msgstr "" -"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " -"книги, запитувати їх, а також несуть відповідальність за своєчасне " -"повернення позичених книг." - -#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 -msgid "Browse the books' catalogue" -msgstr "Переглядати каталог книг" - -#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 -msgid "View details of a book" -msgstr "Переглядати деталі книги" - -#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 -msgid "Search books" -msgstr "Шукати книги" - -#: ../../src/appx/libms/spec.rst:72 -msgid "Request to borrow available books" -msgstr "Робити запит на позичення доступних книжок" - -#: ../../src/appx/libms/spec.rst:73 -msgid "Check due date for returned books" -msgstr "Перевіряти термін повернення запозичених книжок" - -#: ../../src/appx/libms/spec.rst:74 -msgid "Return borrowed books" -msgstr "Повертати запозичені книги" - -#: ../../src/appx/libms/spec.rst:77 -msgid "Anonymous" -msgstr "Анонімні" - -#: ../../src/appx/libms/spec.rst:79 -msgid "Anonymous users are visitors who haven't logged into the system." -msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." - -#: ../../src/appx/libms/spec.rst:86 -msgid "Access to the registration or login pages" -msgstr "Доступ до сторінок реєстрації або входу" - -#: ../../problem-sets/src/wtk/challenge.rst:95 ../../src/appx/libms/spec.rst:90 -msgid "Models" -msgstr "Моделі" - -#: ../../src/appx/libms/spec.rst:93 -msgid "Author model" -msgstr "Модель авторів" - -#: ../../src/appx/libms/spec.rst:95 -msgid "" -"The ``Author`` model captures the details of the person, or group " -"responsible for creating the book." -msgstr "" -"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " -"за створення книги." - -#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 -#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 -msgid "Attributes" -msgstr "Атрибути" - -#: ../../src/appx/libms/spec.rst -msgid "Name" -msgstr "Name" - -#: ../../src/appx/libms/spec.rst:102 -msgid "The full name of the author. This should be limited to 255 characters." -msgstr "Повне ім'я автора. Не більше 255 символів." - -#: ../../src/appx/libms/spec.rst -msgid "Bio" -msgstr "Bio" - -#: ../../src/appx/libms/spec.rst:105 -msgid "A brief biography or description of the author." -msgstr "Коротка біографія або опис автора." - -#: ../../src/appx/libms/spec.rst:108 -msgid "Genre model" -msgstr "Модель жанра" - -#: ../../src/appx/libms/spec.rst:110 -msgid "" -"The ``Genre`` model represents the category or type of content a book " -"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " -"etc. Since a book can belong to more than one category at a time, it is " -"implemented as a dedicated model." -msgstr "" -"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " -"книга, наприклад, \"Художня література\", \"Нехудожня література\", " -"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " -"категорій одночасно, вона реалізована як окрема модель." - -#: ../../src/appx/libms/spec.rst:118 -msgid "The name of the genre." -msgstr "Назва жанру." - -#: ../../src/appx/libms/spec.rst:121 -msgid "Book model" -msgstr "Модель книги" - -#: ../../src/appx/libms/spec.rst:123 -msgid "" -"The ``Book`` model represents a physical book in the library's collection. " -"Each book record captures essential bibliographic information, as well as " -"details related to its current status in the library (e.g. available, " -"borrowed etc.)." -msgstr "" -"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " -"запис про книгу містить основну бібліографічну інформацію, а також деталі, " -"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " -"тощо)." - -#: ../../src/appx/libms/spec.rst -msgid "Title" -msgstr "Title" - -#: ../../src/appx/libms/spec.rst:131 -msgid "The name or title of the book (255 characters or fewer)." -msgstr "Назва книги (255 символів або менше)." - -#: ../../src/appx/libms/spec.rst -msgid "Summary" -msgstr "Summary" - -#: ../../src/appx/libms/spec.rst:134 -msgid "A brief description or synopsis of the book." -msgstr "Короткий опис або синопсис книги." - -#: ../../src/appx/libms/spec.rst -msgid "ISBN" -msgstr "ISBN" - -#: ../../src/appx/libms/spec.rst:137 -msgid "International Standard Book Number, a unique identifier for books." -msgstr "" -"International Standard Book Number, унікальний ідентифікатор для книг.." - -#: ../../src/appx/libms/spec.rst -msgid "Available" -msgstr "Available" - -#: ../../src/appx/libms/spec.rst:140 -msgid "" -"Current available status of the book. Either ``True`` or ``False``. Books " -"are available by default." -msgstr "" -"Поточний статус доступності книги. Або ``True``, або ``False``. За " -"замовчуванням книги доступні." - -#: ../../src/appx/libms/spec.rst -msgid "Published date" -msgstr "Published date" - -#: ../../src/appx/libms/spec.rst:144 -msgid "The date when the book was published." -msgstr "Дата, коли книга була опублікована." - -#: ../../src/appx/libms/spec.rst -msgid "Publisher" -msgstr "Publisher" - -#: ../../src/appx/libms/spec.rst:147 -msgid "" -"The entity or company responsible for the production and distribution of the " -"book." -msgstr "" -"Організація або компанія, відповідальна за виробництво та розповсюдження " -"книги." - -#: ../../src/appx/libms/spec.rst -msgid "Genre(s)" -msgstr "Genre(s)" - -#: ../../src/appx/libms/spec.rst:151 -msgid "" -"The category or type of content the book falls under (e.g., Fiction, Non-" -"Fiction, Science)." -msgstr "" -"Категорія або тип контенту, до якого належить книга (наприклад, художня " -"література, нон-фікшн, наукова література)." - -#: ../../src/appx/libms/spec.rst -msgid "Author(s)" -msgstr "Author(s)" - -#: ../../src/appx/libms/spec.rst:156 -msgid "" -"The name of the person or group responsible for creating the content of the " -"book." -msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." - -#: ../../src/appx/libms/spec.rst -msgid "Borrower" -msgstr "Borrower" - -#: ../../src/appx/libms/spec.rst:160 -msgid "The user who has currently borrowed the book, if applicable." -msgstr "Користувач, який наразі позичив книгу, якщо це можливо." - -#: ../../src/appx/libms/spec.rst:163 -msgid "Borrow request model" -msgstr "Модель запиту на позику" - -#: ../../src/appx/libms/spec.rst:165 -msgid "" -"The ``BorrowRequest`` model captures the intent of a user to borrow a " -"specific book. It tracks the status of the request, whether it's pending, " -"approved, declined, or completed." -msgstr "" -"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " -"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." - -#: ../../src/appx/libms/spec.rst -msgid "Book" -msgstr "Book" - -#: ../../src/appx/libms/spec.rst:173 -msgid "A reference to a book to be borrowed." -msgstr "Посилання на книгу, яку потрібно взяти." - -#: ../../src/appx/libms/spec.rst:176 -msgid "A reference to a user who wants to borrow a book." -msgstr "Посилання на користувача, який хоче взяти книгу." - -#: ../../src/appx/libms/spec.rst -msgid "Status" -msgstr "Status" - -#: ../../src/appx/libms/spec.rst:179 -msgid "The current status of the request." -msgstr "Поточний статус заявки." - -#: ../../src/appx/libms/spec.rst:181 -msgid "pending" -msgstr "pending" - -#: ../../src/appx/libms/spec.rst:182 -msgid "approved" -msgstr "approved" - -#: ../../src/appx/libms/spec.rst:183 -msgid "collected" -msgstr "collected" - -#: ../../src/appx/libms/spec.rst:184 -msgid "complete" -msgstr "complete" - -#: ../../src/appx/libms/spec.rst:185 -msgid "declined" -msgstr "declined" - -#: ../../src/appx/libms/spec.rst:187 -msgid "" -"The status constants should be encapsulated within the ``BorrowRequest`` " -"model." -msgstr "" -"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." - -#: ../../src/appx/libms/spec.rst -msgid "Overdue" -msgstr "Overdue" - -#: ../../src/appx/libms/spec.rst:202 -msgid "A flag indicating if a borrow request was overdue." -msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." - -#: ../../src/appx/libms/spec.rst -msgid "Request date" -msgstr "Request date" - -#: ../../src/appx/libms/spec.rst:205 -msgid "The date the borrow request was made. This is required." -msgstr "Дата подання запиту на позику. Це обов'язкова інформація." - -#: ../../src/appx/libms/spec.rst -msgid "Approval date" -msgstr "Approval date" - -#: ../../src/appx/libms/spec.rst:208 -msgid "The date the request was approved, if applicable. Optional." -msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." - -#: ../../src/appx/libms/spec.rst -msgid "Due date" -msgstr "Due date" - -#: ../../src/appx/libms/spec.rst:211 -msgid "" -"The date by which the book should be returned. Optional, should only be set " -"if the request if approved." -msgstr "" -"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " -"у разі схвалення запиту." - -#: ../../src/appx/libms/spec.rst -msgid "Complete date" -msgstr "Complete date" - -#: ../../src/appx/libms/spec.rst:215 -msgid "" -"The date the book was returned and the borrowing request was completed. " -"Optional, should only be set if the request has reached the \"Complete\" " -"status." -msgstr "" -"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " -"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." - -#: ../../src/appx/libms/spec.rst:228 -msgid "Book to author" -msgstr "Книга до автору" - -#: ../../src/appx/libms/spec.rst:230 -msgid "" -"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " -"can have **one or more** ``authors``. This establishes a **many-to-many** " -"relationship between the two entities." -msgstr "" -"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " -"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " -"**багато-до-багатьох** між цими двома сутностями." - -#: ../../src/appx/libms/spec.rst:235 -msgid "Book to genre" -msgstr "Книга до жанру" - -#: ../../src/appx/libms/spec.rst:237 -msgid "" -"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " -"However a ``Book`` might not belong to any genre. This relationship between " -"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " -"possibility of zero genres for a book." -msgstr "" -"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " -"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " -"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " -"можливістю нульових жанрів для книги." - -#: ../../src/appx/libms/spec.rst:243 -msgid "Book to borrow request" -msgstr "Книга до запиту на позику" - -#: ../../src/appx/libms/spec.rst:245 -msgid "" -"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " -"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " -"relationship." -msgstr "" -"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " -"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " -"зв'язок **багато-до-одного**." - -#: ../../src/appx/libms/spec.rst:250 -msgid "User to borrow request" -msgstr "Користувач до запиту на позику" - -#: ../../src/appx/libms/spec.rst:252 -msgid "" -"Each ``User`` can make multiple ``BorrowRequests``, but each " -"``BorrowRequest`` refers to only one book, forming a **many-to-one** " -"relationship." -msgstr "" -"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " -"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " -"``багато до однієї``." - -#: ../../src/appx/libms/spec.rst:256 -msgid "User to book (as a borrower)" -msgstr "Користувач до книги (як запозичувач)" - -#: ../../src/appx/libms/spec.rst:258 -msgid "" -"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " -"``Book`` can be borrowed by one user only. This forms a **one-to-one** " -"relationship." -msgstr "" -"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " -"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " -"відносини \"один до одного\"." - -#: ../../src/appx/libms/spec.rst:264 -msgid "Views and templates" -msgstr "Подання та шаблони" - -#: ../../src/appx/libms/spec.rst:267 -msgid "Admin site" -msgstr "Адмін-сайт" - -#: ../../src/appx/libms/spec.rst:269 -msgid "" -"Admin site provides the full control over the entire system. Only admins are " -"permitted to use admin site. Librarians should use their dedicated views to " -"perform operations, except special cases." -msgstr "" -"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " -"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " -"повинні використовувати свої виділені подання для виконання операцій, за " -"винятком особливих випадків." - -#: ../../src/appx/libms/spec.rst:275 -msgid "Authentication" -msgstr "Автентифікація" - -#: ../../src/appx/libms/spec.rst:278 -msgid "Login" -msgstr "Логін" - -#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 -#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 -#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 -#: ../../src/appx/libms/spec.rst:512 -msgid "Template" -msgstr "Template" - -#: ../../src/appx/libms/spec.rst:282 -msgid "" -"A form with fields for entering a username and a password, and a submit " -"button." -msgstr "" -"Форма з полями для введення імені користувача та пароля, а також кнопкою " -"\"Надіслати\"." - -#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 -#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 -#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 -#: ../../src/appx/libms/spec.rst:499 -msgid "View logic" -msgstr "View logic" - -#: ../../src/appx/libms/spec.rst:286 -msgid "" -"Validate entered credentials and authenticate the user. In case of incorrect " -"credentials, display an error message." -msgstr "" -"Перевірити введені облікові дані та автентифікувати користувача. У разі " -"неправильних облікових даних вивести повідомлення про помилку." - -#: ../../src/appx/libms/spec.rst:290 -msgid "Registration" -msgstr "Реєстрація" - -#: ../../src/appx/libms/spec.rst:294 -msgid "A form for new user registration. **Required** fields are:" -msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" - -#: ../../src/appx/libms/spec.rst:297 -msgid "first name" -msgstr "first name" - -#: ../../src/appx/libms/spec.rst:298 -msgid "last name" -msgstr "last name" - -#: ../../src/appx/libms/spec.rst:304 -msgid "Upon submission, the view should validate the provided data:" -msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" - -#: ../../src/appx/libms/spec.rst:306 -msgid "Check if username is already taken." -msgstr "Перевірте, чи не зайнято вже ім'я користувача." - -#: ../../src/appx/libms/spec.rst:307 -msgid "Ensure that password and confirm password fields match." -msgstr "" -"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." - -#: ../../src/appx/libms/spec.rst:308 -msgid "" -"Save the user's data if all validations pass. Otherwise, display appropriate " -"error messages." -msgstr "" -"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " -"відобразити відповідні повідомлення про помилки." - -#: ../../src/appx/libms/spec.rst:311 -msgid "" -"When saving passwords in the database, always store them in a hashed format, " -"never in plain text." -msgstr "" -"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " -"не у вигляді простого тексту." - -#: ../../src/appx/libms/spec.rst:315 -msgid "" -"Django's built-in ``User`` model and authentication system handle password " -"hashing by default, which is a big plus." -msgstr "" -"Вбудована в Django модель ``User`` та система автентифікації за " -"замовчуванням обробляє хешування паролів, що є великим плюсом." - -#: ../../src/appx/libms/spec.rst:319 -msgid "Borrowing History" -msgstr "Історія запозичень" - -#: ../../src/appx/libms/spec.rst:321 -msgid "This view is available only for authenticated users." -msgstr "Це подання доступне лише для авторизованих користувачів." - -#: ../../src/appx/libms/spec.rst:325 -msgid "" -"Users can see the list of **all** their borrows requests, regardless of " -"approve/decline status." -msgstr "" -"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " -"від статусу схвалення/відхилення." - -#: ../../src/appx/libms/spec.rst:330 -msgid "Authenticated users can see only their own borrow requests." -msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." - -#: ../../src/appx/libms/spec.rst:331 -msgid "" -"Librarians and admins can access borrows requests list for any user, " -"registered in the library system." -msgstr "" -"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " -"будь-якого користувача, зареєстрованого в бібліотечній системі." - -#: ../../src/appx/libms/spec.rst:335 -msgid "Library collection" -msgstr "Бібліотечний фонд" - -#: ../../src/appx/libms/spec.rst:337 -msgid "" -"These views are generally available for all (including anonymous) users. The " -"functionality for authenticated users include books borrowing." -msgstr "" -"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " -"користувачів. Функціонал для аутентифікованих користувачів включає в себе " -"можливість позичати книги." - -#: ../../src/appx/libms/spec.rst:341 -msgid "Books list" -msgstr "Список літератури" - -#: ../../src/appx/libms/spec.rst:345 -msgid "A list (or table) of books. Each book entry should provide information:" -msgstr "" -"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " -"книгу:" - -#: ../../src/appx/libms/spec.rst:348 -msgid "author(s)" -msgstr "автор(и)" - -#: ../../src/appx/libms/spec.rst:349 -msgid "summary (truncated if too long, 30 words or fewer)" -msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" - -#: ../../src/appx/libms/spec.rst:350 -msgid "availability status (either **Available** or **Unavailable**)" -msgstr "статус доступності (**Доступний** або **Не доступний**)" - -#: ../../src/appx/libms/spec.rst:354 -msgid "Querying the data" -msgstr "Запит даних" - -#: ../../src/appx/libms/spec.rst:356 -msgid "Fetch **all** books from the database" -msgstr "Отримати **усі** книги з бази даних" - -#: ../../src/appx/libms/spec.rst:358 -msgid "Checking availability status (visual mark)" -msgstr "Перевірка статусу доступності (візуальна позначка)" - -#: ../../src/appx/libms/spec.rst:360 -msgid "" -"For each book, determine its availability status. Check ``Book.available`` " -"flag." -msgstr "" -"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." -"available``." - -#: ../../src/appx/libms/spec.rst:364 -msgid "" -"A user can still create a borrowing request, regardless of the book " -"availability status. This is only the visual mark." -msgstr "" -"Користувач все одно може створити запит на позику, незалежно від статусу " -"доступності книги. Це лише візуальна позначка." - -#: ../../src/appx/libms/spec.rst:368 -msgid "Detail view" -msgstr "Детальний перегляд" - -#: ../../src/appx/libms/spec.rst:372 -msgid "" -"The detailed view of a specific book, presenting comprehensive information:" -msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" - -#: ../../src/appx/libms/spec.rst:374 -msgid "**Title**: Display the book's title prominently." -msgstr "**Назва**: Покажіть назву книги на видному місці." - -#: ../../src/appx/libms/spec.rst:375 -msgid "**Genre(s)**: List all associated genres (if any)." -msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." - -#: ../../src/appx/libms/spec.rst:376 -msgid "**Author(s)**: List all associated authors." -msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." - -#: ../../src/appx/libms/spec.rst:377 -msgid "**ISBN**: The International Standard Book Number." -msgstr "**ISBN**: Міжнародний стандартний номер книги." - -#: ../../src/appx/libms/spec.rst:378 -msgid "**Published Date**: When the book was published." -msgstr "**Дата публікації**: Коли вийшла друком книга." - -#: ../../src/appx/libms/spec.rst:379 -msgid "" -"**Publisher**: The name of the entity or company responsible for publishing" -msgstr "" -"**Видавець**: Назва організації або компанії, відповідальної за публікацію" - -#: ../../src/appx/libms/spec.rst:380 -msgid "**Summary**: A full summary or description of the book. the book." -msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." - -#: ../../src/appx/libms/spec.rst:382 -msgid "**Action Buttons** (For authenticated users only):" -msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" - -#: ../../src/appx/libms/spec.rst:384 -msgid "" -"**Borrow Request Button**: If the user has no associated borrow request they " -"can create a new one." -msgstr "" -"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " -"позику, він може створити новий." - -#: ../../src/appx/libms/spec.rst:386 -msgid "" -"**Gather Book Button**: If the user's borrow request for this book has been " -"approved, allow the user to confirm they've picked up the book." -msgstr "" -"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " -"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." - -#: ../../src/appx/libms/spec.rst:391 -msgid "**Fetching Book Details**:" -msgstr "**Доступ до деталей книги**:" - -#: ../../src/appx/libms/spec.rst:393 -msgid "" -"Use the book's identifier (usually a primary key) to fetch its details from " -"the database." -msgstr "" -"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " -"інформацію про неї з бази даних." - -#: ../../src/appx/libms/spec.rst:396 -msgid "**Checking User Authentication**:" -msgstr "**Перевірка автентичності користувача**:" - -#: ../../src/appx/libms/spec.rst:398 -msgid "" -"Determine if a user is authenticated. If they are, display the appropriate " -"action buttons based on the book's availability status and any existing " -"borrow requests by the user." -msgstr "" -"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " -"кнопки дій на основі статусу доступності книги та наявних запитів " -"користувача на позику." - -#: ../../src/appx/libms/spec.rst:402 -msgid "**Handling Borrow Requests**:" -msgstr "**Обробка запитів на позику**:" - -#: ../../src/appx/libms/spec.rst:404 -msgid "If an authenticated user clicks on the \"Borrow Request\" button:" -msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" - -#: ../../src/appx/libms/spec.rst:406 -msgid "" -"Create a new borrow request in the ``BorrowRequest`` model with status " -"\"pending\"." -msgstr "" -"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " -"розгляді\"." - -#: ../../src/appx/libms/spec.rst:408 -msgid "Update the book's status to \"Awaiting approval\"." -msgstr "Оновіть статус книги на \"Очікує затвердження\"." - -#: ../../src/appx/libms/spec.rst:409 -msgid "" -"Redirect the user to a confirmation page or display a message indicating the " -"request has been made." -msgstr "" -"Перенаправлення користувача на сторінку підтвердження або відображення " -"повідомлення про те, що запит було зроблено." - -#: ../../src/appx/libms/spec.rst:412 -msgid "**Handling Book Gathering**:" -msgstr "**Опрацювання Позики Книги**:" - -#: ../../src/appx/libms/spec.rst:414 -msgid "" -"If an authenticated user has an approved borrow request and clicks the " -"\"Gather Book\" button:" -msgstr "" -"Якщо авторизований користувач має схвалений запит на позику і натискає " -"кнопку \"Зібрати книгу\":" - -#: ../../src/appx/libms/spec.rst:417 -msgid "Update the book's status to \"Borrowed\"." -msgstr "Оновіть статус книги на \"Позичена\"." - -#: ../../src/appx/libms/spec.rst:418 -msgid "Update the borrow request's status to \"complete\"." -msgstr "Оновіть статус запиту на позику до \"завершено\"." - -#: ../../src/appx/libms/spec.rst:419 -msgid "" -"Redirect the user to a confirmation page or display a message indicating " -"they've picked up the book." -msgstr "" -"Перенаправляйте користувача на сторінку підтвердження або показуйте " -"повідомлення про те, що він забрав книгу." - -#: ../../src/appx/libms/spec.rst:423 -msgid "" -"Always ensure the user's actions are authenticated and authorized. This " -"prevents unauthorized borrow requests or gathering of books. Also, consider " -"adding error handling to manage cases where the book's details cannot be " -"fetched or any other unexpected issues." -msgstr "" -"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " -"Це запобігає несанкціонованим запитам на позику або збору книг. Також " -"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " -"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." - -#: ../../src/appx/libms/spec.rst:429 -msgid "Books management" -msgstr "Управління книгами" - -#: ../../src/appx/libms/spec.rst:431 -msgid "These views are available only for staff (librarians and admins)." -msgstr "" -"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." - -#: ../../src/appx/libms/spec.rst:434 -msgid "Authors and genres management" -msgstr "Управління авторами та жанрами" - -#: ../../src/appx/libms/spec.rst:436 -msgid "" -"Only librarians and admins can add, modify or delete authors and genres. No " -"additional views for CRUD operations required (except admin site). " -"Librarians are allowed to access authors and genres via admin site. Only " -"admins can remove authors or genres." -msgstr "" -"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " -"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " -"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " -"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " -"жанри." - -#: ../../src/appx/libms/spec.rst:442 -msgid "Book creation and update" -msgstr "Створення та оновлення книг" - -#: ../../src/appx/libms/spec.rst:444 -msgid "" -"The template should comprise a form with fields corresponding to the book's " -"attributes. Here are the essential elements for the form:" -msgstr "" -"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " -"основні елементи форми:" - -#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 -msgid "A text input field." -msgstr "Поле для введення тексту." - -#: ../../src/appx/libms/spec.rst:451 -msgid "A textarea for a brief description or synopsis." -msgstr "Текстова область для короткого опису або синопсису." - -#: ../../src/appx/libms/spec.rst:454 -msgid "A text input field for the book's International Standard Book Number." -msgstr "Поле для введення міжнародного стандартного номера книги." - -#: ../../src/appx/libms/spec.rst:457 -msgid "A checkbox indicating if a book is available. Defaults to ``True``." -msgstr "" -"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." - -#: ../../src/appx/libms/spec.rst:460 -msgid "A date input field." -msgstr "Поле для введення дати." - -#: ../../src/appx/libms/spec.rst -msgid "Genres" -msgstr "Жанри" - -#: ../../src/appx/libms/spec.rst:466 -msgid "" -"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " -"fetch available genres from the database and allow users to select zero or " -"more genres." -msgstr "" -"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " -"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " -"користувачам вибирати нуль або більше жанрів." - -#: ../../src/appx/libms/spec.rst -msgid "Authors" -msgstr "Автори" - -#: ../../src/appx/libms/spec.rst:471 -msgid "" -"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " -"fetch available authors from the database and allow users to select one or " -"more authors." -msgstr "" -"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " -"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " -"користувачам вибирати одного або декількох авторів." - -#: ../../src/appx/libms/spec.rst:477 -msgid "" -"If it's an *update* action, pre-populate the form fields with the existing " -"details of the book fetched from the database." -msgstr "" -"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " -"книги, отриманими з бази даних." - -#: ../../src/appx/libms/spec.rst:479 -msgid "For *creation*, provide an empty form for the librarian to fill in." -msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." - -#: ../../src/appx/libms/spec.rst:480 -msgid "Ensure the published date is logical (e.g. not a future date)." -msgstr "" -"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " -"майбутнього)." - -#: ../../src/appx/libms/spec.rst:481 -msgid "Validate required inputs, according to general ``Book`` model rules." -msgstr "" -"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " -"``Book``." - -#: ../../src/appx/libms/spec.rst:482 -msgid "" -"If validations pass: save changes to the database; otherwise, provide " -"helpful error messages." -msgstr "" -"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " -"випадку надайте корисні повідомлення про помилки." - -#: ../../src/appx/libms/spec.rst:486 -msgid "" -"You MAY provide a mechanism (like modal or a quick entry form) to add a new " -"genre or author without leaving the book form page." -msgstr "" -"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " -"введення) для додавання нового жанру або автора, не виходячи зі сторінки " -"форми книги." - -#: ../../src/appx/libms/spec.rst:490 -msgid "Book deletion" -msgstr "Видалення книги" - -#: ../../src/appx/libms/spec.rst:492 -msgid "" -"Only librarians and administrators are permitted to perform this action." -msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." - -#: ../../src/appx/libms/spec.rst:496 -msgid "A confirm delete form with **Submit** and **Cancel** buttons." -msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." - -#: ../../src/appx/libms/spec.rst:500 -msgid "Authorize user before deleting performing deletion." -msgstr "Авторизуйте користувача перед виконанням видалення." - -#: ../../src/appx/libms/spec.rst:501 -msgid "" -"If a form is submitted, a book should be removed from the library collection." -msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." - -#: ../../src/appx/libms/spec.rst:503 -msgid "" -"If deletion is canceled view should redirect back to book detail view page." -msgstr "" -"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " -"сторінку детального перегляду книги." - -#: ../../src/appx/libms/spec.rst:506 -msgid "Borrow requests" -msgstr "Запити на позики" - -#: ../../src/appx/libms/spec.rst:508 -msgid "" -"This view facilitates the management of borrowing requests for librarians " -"and admins, aiding in their prompt handling." -msgstr "" -"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " -"позики, допомагаючи оперативно їх обробляти." - -#: ../../src/appx/libms/spec.rst:513 -msgid "" -"Present a table showcasing the list of borrow requests. Each row embodies a " -"borrow request and encompasses:" -msgstr "" -"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " -"відображає один запит на позику і включає в себе всі запити:" - -#: ../../src/appx/libms/spec.rst:516 -msgid "**Book Title**: Title of the requested book." -msgstr "**Назва книги**: Назва запитуваної книги." - -#: ../../src/appx/libms/spec.rst:517 -msgid "**User**: Identifier of the user who initiated the request." -msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." - -#: ../../src/appx/libms/spec.rst:518 -msgid "**Request Date**: Date of the request's inception." -msgstr "**Дата запиту**: Дата створення запиту." - -#: ../../src/appx/libms/spec.rst:519 -msgid "" -"**Due Date**: - Input field for librarians to set upon approval for new " -"requests. - For approved ones, display the librarian-set date." -msgstr "" -"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " -"нових запитів. - Для затверджених запитів відображатиметься дата, " -"встановлена бібліотекарем." - -#: ../../src/appx/libms/spec.rst:522 -msgid "" -"**Status**: Present state of the request (New, Approved, Completed, " -"Declined)." -msgstr "" -"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " -"Відхилений)." - -#: ../../src/appx/libms/spec.rst:524 -msgid "" -"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " -"and freezes the due date." -msgstr "" -"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " -"статус на \"Затверджено\" і заморожує дату виконання." - -#: ../../src/appx/libms/spec.rst:526 -msgid "" -"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " -"and can prompt for a decline reason." -msgstr "" -"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " -"\"Відхилено\" і може запитувати причину відхилення." - -#: ../../src/appx/libms/spec.rst:528 -msgid "" -"**Complete Button**: Displayed for approved requests. Marks the request as " -"completed." -msgstr "" -"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " -"запит як завершений." - -#: ../../src/appx/libms/spec.rst:532 -msgid "View Logic" -msgstr "View Logic" - -#: ../../src/appx/libms/spec.rst:533 -msgid "" -"**Approve Borrow Request**: - Validate book availability. - Modify book " -"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " -"Define the return due date as per librarian. - Inform the user about the " -"approval and due date." -msgstr "" -"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " -"статус книги на \"Позичена\". - Переключіть запит на позику на " -"\"Затверджено\". - Визначте дату повернення відповідно до побажань " -"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." - -#: ../../src/appx/libms/spec.rst:540 -msgid "" -"**Decline Borrow Request**: - Change borrow request status to " -"\"Declined\". - Optionally, procure decline reason from librarian. - " -"Notify user regarding the declination." -msgstr "" -"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " -"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " -"користувача про відхилення." - -#: ../../src/appx/libms/spec.rst:545 -msgid "" -"**Complete Borrow Request**: - Ensure book's return. - Update book " -"status to \"Available\". - Toggle borrow request status to \"Completed\". " -"- If needed, record any notes or damages during return." -msgstr "" -"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " -"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " -"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " -"під час повернення." - -#: ../../src/appx/libms/spec.rst:552 -msgid "" -"Implementing reminders for near-due borrow requests can function as an alert " -"system for both the librarian and the user." -msgstr "" -"Впровадження нагадувань про прострочені запити може функціонувати як система " -"оповіщення як для бібліотекаря, так і для користувача." - -#: ../../src/appx/precedence.txt:-1 -msgid "Operator precedence in Python" -msgstr "Пріоритет операторів в Python" - -#: ../../src/appx/precedence.txt:-1 -msgid "python, basics, operator, precedence" -msgstr "python, basics, operator, precedence" - -#: ../../src/appx/precedence.txt:8 -msgid "Operator Precedence" -msgstr "Пріоритет Операторів" - -#: ../../src/appx/precedence.txt:10 -msgid "" -"The following table summarizes the operator precedence in Python, from " -"highest precedence (most binding) to lowest precedence (least binding) :cite:" -"`docs-python:operator-precedence`. Operators in the same cell have the same " -"precedence (use left-to-right precedence)." -msgstr "" -"У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " -"найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " -"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " -"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " -"направо)." - -#: ../../src/appx/precedence.txt:16 -msgid "Operator" -msgstr "Оператор" - -#: ../../src/appx/precedence.txt:16 -msgid "Description" -msgstr "Опис" - -#: ../../src/appx/precedence.txt:18 -msgid "" -"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " -"``{expressions...}``" -msgstr "" -"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " -"``{expressions...}``" - -#: ../../src/appx/precedence.txt:18 -msgid "" -"Binding or parenthesized expression, list display, dictionary display, set " -"display" -msgstr "" -"Прив'язка або вираз у дужках, відображення списку, відображення словника, " -"відображення набору" - -#: ../../src/appx/precedence.txt:23 -msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" -msgstr "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" - -#: ../../src/appx/precedence.txt:23 -msgid "Subscription, slicing, call, attribute reference" -msgstr "Підписка, нарізка, виклик, посилання на атрибути" - -#: ../../src/appx/precedence.txt:28 -msgid "``await x``" -msgstr "``await x``" - -#: ../../src/appx/precedence.txt:28 -msgid "Await expression" -msgstr "Вираз Await" - -#: ../../src/appx/precedence.txt:30 -msgid "``**``" -msgstr "``**``" - -#: ../../src/appx/precedence.txt:30 -msgid "Exponentiation [#]_" -msgstr "Піднесення до степеня [#]_" - -#: ../../src/appx/precedence.txt:32 -msgid "``+x``, ``-x``, ``~x``" -msgstr "``+x``, ``-x``, ``~x``" - -#: ../../src/appx/precedence.txt:32 -msgid "Positive, negative, bitwise NOT" -msgstr "Позитивне, негативне, побітове НІ" - -#: ../../src/appx/precedence.txt:34 -msgid "``*``, ``@``, ``/``, ``//``, ``%``" -msgstr "``*``, ``@``, ``/``, ``//``, ``%``" - -#: ../../src/appx/precedence.txt:34 -msgid "" -"Multiplication, matrix multiplication, division, floor division, remainder " -"[#]_" -msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" - -#: ../../src/appx/precedence.txt:37 -msgid "``+``, ``-``" -msgstr "``+``, ``-``" - -#: ../../src/appx/precedence.txt:37 -msgid "Addition and subtraction" -msgstr "Додавання і віднімання" - -#: ../../src/appx/precedence.txt:39 -msgid "``<<``, ``>>``" -msgstr "``<<``, ``>>``" - -#: ../../src/appx/precedence.txt:39 -msgid "Shifts" -msgstr "Зсуви" - -#: ../../src/appx/precedence.txt:41 -msgid "``&``" -msgstr "``&``" - -#: ../../src/appx/precedence.txt:41 -msgid "Bitwise AND" -msgstr "Побітове І" - -#: ../../src/appx/precedence.txt:43 -msgid "``^``" -msgstr "``^``" - -#: ../../src/appx/precedence.txt:43 -msgid "Bitwise XOR" -msgstr "Побітове XOR" - -#: ../../src/appx/precedence.txt:45 -msgid "``|``" -msgstr "``|``" - -#: ../../src/appx/precedence.txt:45 -msgid "Bitwise OR" -msgstr "Порозрядне АБО" - -#: ../../src/appx/precedence.txt:47 -msgid "" -"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " -"``==``, ``!=``" -msgstr "" -"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " -"``==``, ``!=``" - -#: ../../src/appx/precedence.txt:47 -msgid "Comparisons, including membership tests and identity tests" -msgstr "Порівняння, включаючи тести на приналежність і тести на ідентифікацію" - -#: ../../src/appx/precedence.txt:52 -msgid "``not x``" -msgstr "``not x``" - -#: ../../src/appx/precedence.txt:52 -msgid "Boolean NOT" -msgstr "Логічне НІ" - -#: ../../src/appx/precedence.txt:54 -msgid "``and``" -msgstr "``and``" - -#: ../../src/appx/precedence.txt:54 -msgid "Boolean AND" -msgstr "Логічне І" - -#: ../../src/appx/precedence.txt:56 -msgid "``or``" -msgstr "``or``" - -#: ../../src/appx/precedence.txt:56 -msgid "Boolean OR" -msgstr "Логічне АБО" - -#: ../../src/appx/precedence.txt:58 -msgid "``if - else``" -msgstr "``if - else``" - -#: ../../src/appx/precedence.txt:58 -msgid "Conditional expression (ternary ``if``)" -msgstr "Умовний вираз (трійковий ``if``)" - -#: ../../src/appx/precedence.txt:60 -msgid "``lambda``" -msgstr "``lambda``" - -#: ../../src/appx/precedence.txt:60 -msgid "Lambda expression" -msgstr "Lambda вирази" - -#: ../../src/appx/precedence.txt:62 -msgid "``=``, ``:=``" -msgstr "``=``, ``:=``" - -#: ../../src/appx/precedence.txt:62 -msgid "Assignment expression" -msgstr "Оперетор присвоєння" - -#: ../../src/appx/precedence.txt:65 -msgid "" -"the power operator binds less tightly than an arithmetic or bitwise unary " -"operator on its right (``2 ** -1`` is ``0.5``)." -msgstr "" -"оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " -"унарний оператор праворуч (``2 ** -1`` це ``0,5``)." - -#: ../../src/appx/precedence.txt:67 -msgid "" -"the ``%`` operator is also used for string formatting; the same precedence " -"applies." -msgstr "" -"оператор ``%`` також використовується для форматування рядків; " -"застосовується той самий пріоритет." - -#: ../../src/appx/printf.txt:-1 -msgid "Formatted strings usage in Python" -msgstr "Використання форматованих рядків в Python" - -#: ../../src/appx/printf.txt:-1 -msgid "python, string, formatting" -msgstr "python, string, formatting" - -#: ../../src/appx/printf.txt:10 -msgid "``printf-style`` String Formatting" -msgstr "``printf-style`` Форматування рядків" - -#: ../../src/appx/printf.txt:12 -msgid "" -"String objects have one unique built-in operation: the ``%`` operator " -"(modulo). This is also known as the string *formatting* or *interpolation* " -"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " -"(where *format* is a string), ``%`` conversion specifications in *format* " -"are replaced with zero or more elements of *values*. If *format* requires a " -"single argument, *values* may be a single non-tuple object." -msgstr "" -"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " -"модулю). Це також відоме як оператор *форматування* рядка або " -"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " -"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " -"замінюються нулем або більше елементами *значень*. Якщо для *format* " -"потрібен один аргумент, *values* може бути одним некортежним об'єктом." - -#: ../../src/appx/printf.txt:19 -msgid "The conversion flag characters are:" -msgstr "Символи перетворення:" - -#: ../../src/appx/printf.txt:22 -msgid "Flag" -msgstr "Символ" - -#: ../../src/appx/printf.txt:22 ../../src/appx/printf.txt:40 -msgid "Meaning" -msgstr "Значення" - -#: ../../src/appx/printf.txt:24 -msgid "``#``" -msgstr "``#``" - -#: ../../src/appx/printf.txt:24 -msgid "The value conversion will use the \"alternative form\"" -msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" - -#: ../../src/appx/printf.txt:26 -msgid "``0``" -msgstr "``0``" - -#: ../../src/appx/printf.txt:26 -msgid "The conversion will be zero padded for numeric values" -msgstr "Перетворення буде доповнено нулем для числових значень" - -#: ../../src/appx/printf.txt:28 -msgid "``'-'``" -msgstr "``'-'``" - -#: ../../src/appx/printf.txt:28 -msgid "" -"The converted value is left adjusted (override the ``'0'`` if both are given)" -msgstr "" -"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" - -#: ../../src/appx/printf.txt:31 -msgid "``' '``" -msgstr "``' '``" - -#: ../../src/appx/printf.txt:31 -msgid "(a space) A blank should be left before a positive number" -msgstr "(пробіл) Перед додатним числом слід залишити пробіл" - -#: ../../src/appx/printf.txt:33 -msgid "``'+'``" -msgstr "``'+'``" - -#: ../../src/appx/printf.txt:33 -msgid "" -"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " -"a \"space\" flag)" -msgstr "" -"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " -"прапор \"пробіл\")" - -#: ../../src/appx/printf.txt:37 -msgid "The conversion types are:" -msgstr "Типи перетворення:" - -#: ../../src/appx/printf.txt:40 -msgid "Conversion" -msgstr "Перетворення" - -#: ../../src/appx/printf.txt:42 -msgid "``'d'``" -msgstr "``'d'``" - -#: ../../src/appx/printf.txt:42 ../../src/appx/printf.txt:44 -msgid "Signed integer decimal" -msgstr "Ціле десяткове число зі знаком" - -#: ../../src/appx/printf.txt:44 -msgid "``'i'``" -msgstr "``'i'``" - -#: ../../src/appx/printf.txt:46 -msgid "``'o'``" -msgstr "``'o'``" - -#: ../../src/appx/printf.txt:46 -msgid "Signed octal value" -msgstr "Вісімкове значення зі знаком" - -#: ../../src/appx/printf.txt:48 -msgid "``'u'``" -msgstr "``'u'``" - -#: ../../src/appx/printf.txt:48 -msgid "Obsolete type - it is identical to ``'d'``" -msgstr "Застарілий тип - ідентичний ``'d``" - -#: ../../src/appx/printf.txt:50 -msgid "``'x'``" -msgstr "``'x'``" - -#: ../../src/appx/printf.txt:50 -msgid "Signed hexadecimal (lowercase)" -msgstr "Шістнадцяткове число зі знаком (маленький регістр)" - -#: ../../src/appx/printf.txt:52 -msgid "``'X'``" -msgstr "``'X'``" - -#: ../../src/appx/printf.txt:52 -msgid "Signed hexadecimal (uppercase)" -msgstr "Шістнадцяткове число зі знаком (верхній регістр)" - -#: ../../src/appx/printf.txt:54 -msgid "``'e'``" -msgstr "``'e'``" - -#: ../../src/appx/printf.txt:54 -msgid "Floating point exponential format (lowercase)" -msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" - -#: ../../src/appx/printf.txt:56 -msgid "``'E'``" -msgstr "``'E'``" - -#: ../../src/appx/printf.txt:56 -msgid "Floating point exponential format (uppercase)" -msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" - -#: ../../src/appx/printf.txt:58 -msgid "``'f'`` ``'F'``" -msgstr "``'f'`` ``'F'``" - -#: ../../src/appx/printf.txt:58 -msgid "Floating point decimal format" -msgstr "Десятковий формат із плаваючою комою" - -#: ../../src/appx/printf.txt:61 -msgid "``'g'``" -msgstr "``'g'``" - -#: ../../src/appx/printf.txt:64 -msgid "``'G'``" -msgstr "``'G'``" - -#: ../../src/appx/printf.txt:61 -msgid "" -"Floating point format. Uses lowercase exponential format if exponent is less " -"that -4 or not less than precision, decimal format otherwise." -msgstr "" -"Формат з плаваючою комою. Використовує нижній регістр експоненціального " -"формату, якщо показник степеня менший за -4 або не менший за точність, " -"десятковий формат інакше." - -#: ../../src/appx/printf.txt:66 -msgid "``'c'``" -msgstr "``'c'``" - -#: ../../src/appx/printf.txt:66 -msgid "Single character (accepts integer or single character string)" -msgstr "Один символ (приймає ціле число або рядок з одним символом)" - -#: ../../src/appx/printf.txt:68 -msgid "``'r'``" -msgstr "``'r'``" - -#: ../../src/appx/printf.txt:68 -msgid "Converts any Python object using ``repr()``" -msgstr "Перетворює будь-який об'єкт Python за допомогою ``repr()``" - -#: ../../src/appx/printf.txt:70 -msgid "``'s'``" -msgstr "``'s'``" - -#: ../../src/appx/printf.txt:70 -msgid "Converts any Python object using ``str()``" -msgstr "Перетворює будь-який об'єкт Python за допомогою ``str()``" - -#: ../../src/appx/printf.txt:72 -msgid "``'a'``" -msgstr "``'a'``" - -#: ../../src/appx/printf.txt:72 -msgid "Converts any Python object using ``ascii()``" -msgstr "Перетворює будь-який об'єкт Python за допомогою ``ascii()``" - -#: ../../src/appx/printf.txt:74 -msgid "``'%'``" -msgstr "``'%'``" - -#: ../../src/appx/printf.txt:74 -msgid "" -"No arguments is converted, results in a ``'%'`` character in the result." -msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." - -#: ../../src/appx/software_list.rst:-1 -msgid "Useful software list" -msgstr "Список корисного програмного забезпечення" - -#: ../../src/appx/software_list.rst:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/appx/software_list.rst:-1 -msgid "software" -msgstr "software" - -#: ../../src/appx/software_list.rst:7 -msgid "Software List" -msgstr "Список Програмного Забезпечення" - -#: ../../src/appx/software_list.rst:10 -msgid "7zip" -msgstr "7zip" - -#: ../../src/appx/software_list.rst:12 -msgid "**7-Zip** is **free software** with **open source**." -msgstr "" -"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." - -#: ../../src/appx/software_list.rst:14 -msgid "" -"High compression ratio in `7z format `__ with " -"**LZMA** and **LZMA2** compression" -msgstr "" -"Високий ступінь стиснення у `7z format `__ зі " -"стисненням **LZMA** і **LZMA2**" - -#: ../../src/appx/software_list.rst:16 -msgid "Supported formats:" -msgstr "Підтримувані формати:" - -#: ../../src/appx/software_list.rst:18 -msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" -msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" - -#: ../../src/appx/software_list.rst:19 -msgid "" -"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " -"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " -"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." -msgstr "" -"Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " -"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " -"SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." - -#: ../../src/appx/software_list.rst:23 -msgid "Self-extracting capability for 7z format" -msgstr "Можливість саморозпакування для формату 7z" - -#: ../../src/appx/software_list.rst:24 -msgid "Integration with Windows Shell" -msgstr "Інтеграція з Windows Shell" - -#: ../../src/appx/software_list.rst:26 -msgid "https://7-zip.org/" -msgstr "https://7-zip.org/" - -#: ../../src/appx/software_list.rst:29 -msgid "cygwin" -msgstr "cygwin" - -#: ../../src/appx/software_list.rst:31 -msgid "" -"It is a large collection of GNU and Open Source tools which provide " -"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " -"provides substantial POSIX API functionality." -msgstr "" -"Це велика колекція інструментів GNU та Open Source, які забезпечують " -"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " -"значний POSIX Функціонал API." - -#: ../../src/appx/software_list.rst:37 -msgid "**Cygwin is not**:" -msgstr "**Сygwin це не**:" - -#: ../../src/appx/software_list.rst:39 -msgid "" -"a way to run native Linux apps on Windows. You must rebuild your application " -"*from source* if you want it to run on Windows." -msgstr "" -"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " -"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." - -#: ../../src/appx/software_list.rst:41 -msgid "" -"a way to magically make native Windows apps aware of UNIX® functionality " -"like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " -"source* if you want to take advantage of Cygwin functionality." -msgstr "" -"спосіб чарівним чином зробити рідні програми Windows відомими " -"функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " -"потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " -"перевагами функціональності Cygwin." - -#: ../../src/appx/software_list.rst:46 -msgid "https://www.cygwin.com/" -msgstr "https://www.cygwin.com/" - -#: ../../src/appx/software_list.rst:49 -msgid "git [#cygwin]_" -msgstr "git [#cygwin]_" - -#: ../../src/appx/software_list.rst:51 -msgid "" -"Git is a `free and open source `__ distributed version control system designed to handle everything " -"from small to very large projects with speed and efficiency." -msgstr "" -"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " -"призначена для швидкого та ефективного керування всіма проектами, від малих " -"до дуже великих." - -#: ../../src/appx/software_list.rst:56 -msgid "https://git-scm.com/" -msgstr "https://git-scm.com/" - -#: ../../src/appx/software_list.rst:59 -msgid "Docker" -msgstr "Docker" - -#: ../../src/appx/software_list.rst:61 -msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." -msgstr "" -"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " -"рік." - -#: ../../src/appx/software_list.rst:63 -msgid "" -"Docker helps developers bring their ideas to life by conquering the " -"complexity of app development. We simplify and accelerate development " -"workflows with an integrated dev pipeline and through the consolidation of " -"application components. Actively used by millions of developers around the " -"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " -"and choice." -msgstr "" -"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " -"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " -"допомогою інтегрованого конвеєра розробників і консолідації компонентів " -"програми. Активно використовувані мільйонами розробників у всьому світі " -"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " -"вибір." - -#: ../../src/appx/software_list.rst:70 -msgid "https://www.docker.com/" -msgstr "https://www.docker.com/" - -#: ../../src/appx/software_list.rst:73 -msgid "PostgreSQL [#cygwin]_" -msgstr "PostgreSQL [#cygwin]_" - -#: ../../src/appx/software_list.rst:75 -msgid "" -"PostgreSQL is a powerful, open source object-relational database system with " -"over 35 years of active development that has earned it a strong reputation " -"for reliability, feature robustness, and performance." -msgstr "" -"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " -"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " -"заслужила міцну репутацію надійності, надійності функцій і продуктивності." - -#: ../../src/appx/software_list.rst:79 -msgid "https://www.postgresql.org/" -msgstr "https://www.postgresql.org/" - -#: ../../src/appx/software_list.rst:84 -msgid "psql [#cygwin]_" -msgstr "psql [#cygwin]_" - -#: ../../src/appx/software_list.rst:86 -msgid "" -"A terminal-based front-end to PostgreSQL. It enables you to type in queries " -"interactively, issue them to PostgreSQL, and see the query results. " -"Alternatively, input can be from a file or from command line arguments. In " -"addition, psql provides a number of meta-commands and various shell-like " -"features to facilitate writing scripts and automating a wide variety of " -"tasks." -msgstr "" -"Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " -"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " -"запиту. Крім того, введення може бути з файлу або з аргументів командного " -"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " -"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " -"різноманітних завдань." - -#: ../../src/appx/software_list.rst:93 -msgid "" -"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " -"look for ``postgresql-client`` package." -msgstr "" -"У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " -"знайдіть пакет ``postgresql-client``." - -#: ../../src/appx/software_list.rst:96 -msgid "https://www.postgresql.org/docs/current/app-psql.html" -msgstr "https://www.postgresql.org/docs/current/app-psql.html" - -#: ../../src/appx/software_list.rst:99 -msgid "pgAdmin" -msgstr "pgAdmin" - -#: ../../src/appx/software_list.rst:101 -msgid "" -"pgAdmin is the most popular and feature rich Open Source administration and " -"development platform for PostgreSQL, the most advanced Open Source database " -"in the world." -msgstr "" -"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " -"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " -"відкритим кодом у світі." - -#: ../../src/appx/software_list.rst:105 -msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." -msgstr "" -"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " -"веб-інтерфейсу." - -#: ../../src/appx/software_list.rst:107 -msgid "https://pgadmin.org/" -msgstr "https://pgadmin.org/" - -#: ../../src/appx/software_list.rst:110 -msgid "SQLite [#cygwin]_" -msgstr "SQLite [#cygwin]_" - -#: ../../src/appx/software_list.rst:112 -msgid "" -"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" -"contained `__, `high-reliability " -"`__, `full-featured `__, SQL database engine." -msgstr "" -"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " -"`самодостатню `__, `висока надійність " -"`__, `повнофункціональний `__, двигун бази даних SQL." - -#: ../../src/appx/software_list.rst:120 -msgid "https://sqlite.org/" -msgstr "https://sqlite.org/" - -#: ../../src/appx/software_list.rst:123 -msgid "available for installation as a cygwin package" -msgstr "доступно для встановлення як пакет cygwin" - -#: ../../src/appx/wtk.txt:-1 -msgid "Knights, thieves and wizards game project" -msgstr "Проект гри рицарі, злодії та чарівники" - -#: ../../src/appx/wtk.txt:-1 -msgid "python, game, oop, object-oriented programming" -msgstr "python, game, oop, object-oriented programming" - -#: ../../problem-sets/src/wtk/challenge.rst:3 -msgid "Wizards, Thieves and Knights" -msgstr "Чарівники, Злодії та Рицарі" - -#: ../../problem-sets/src/wtk/challenge.rst:5 -msgid "" -"\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " -"Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " -"setting. It comes with a simple command line interface where the use must " -"type in his or her choice. The enemy is controlled by the script. The " -"player's goal is to gain as many score points, as it possible." -msgstr "" -"Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " -"Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " -"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " -"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " -"більше очок." - -#: ../../problem-sets/src/wtk/challenge.rst:13 -msgid "Code organization" -msgstr "Організація коду" - -#: ../../problem-sets/src/wtk/challenge.rst:15 -msgid "Use separate modules to maintain your code base. For example:" -msgstr "" -"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" - -#: ../../problem-sets/src/wtk/challenge.rst:27 -msgid "General playground description" -msgstr "Загальний опис ігрового процесу" - -#: ../../problem-sets/src/wtk/challenge.rst:29 -msgid "" -"The game process is divided into rounds. Each round consists of **attack** " -"and **defence** stages. Rounds are repeated, until player is defeated." -msgstr "" -"Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " -"захисту. Раунди повторюються, поки гравець не буде переможений." - -#: ../../problem-sets/src/wtk/challenge.rst:33 -msgid "Fight rules" -msgstr "Правила боротьби" - -#: ../../problem-sets/src/wtk/challenge.rst:35 -msgid "It's simple..." -msgstr "Це просто..." - -#: ../../problem-sets/src/wtk/challenge.rst:37 -msgid "**Wizard** beats **Knight**" -msgstr "**Чарівник** перемагає **Рицаря**" - -#: ../../problem-sets/src/wtk/challenge.rst:38 -msgid "**Thief** beats **Wizard**" -msgstr "**Злодій** перемагає **Чарівника**" - -#: ../../problem-sets/src/wtk/challenge.rst:39 -msgid "**Knight** beats **Thief**" -msgstr "**Рицар** перемагає **Злодія**" - -#: ../../problem-sets/src/wtk/challenge.rst:42 -msgid "Attack stage" -msgstr "Стадія атаки" - -#: ../../problem-sets/src/wtk/challenge.rst:44 -msgid "" -"Player selects the choice to attack from **wizard**, **thief** or " -"**knight**, enemy selects the choice for defence from the same options by " -"random. If the attack is successful:" -msgstr "" -"Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " -"обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" - -#: ../../problem-sets/src/wtk/challenge.rst:48 -msgid "enemy health is decreased" -msgstr "здоров'я ворога зменшено" - -#: ../../problem-sets/src/wtk/challenge.rst:49 -msgid "player gains score points" -msgstr "гравець отримує очки" - -#: ../../problem-sets/src/wtk/challenge.rst:51 -msgid "In case enemy is defeated:" -msgstr "Якщо ворог переможений:" - -#: ../../problem-sets/src/wtk/challenge.rst:53 -msgid "a new enemy instance is initialized using higher level" -msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" - -#: ../../problem-sets/src/wtk/challenge.rst:54 -msgid "player gains some extra score points" -msgstr "гравець отримує додаткові очки" - -#: ../../problem-sets/src/wtk/challenge.rst:55 -msgid "next defence stage is skipped, and player attacks again" -msgstr "наступний етап захисту пропущено, і гравець атакує знову" - -#: ../../problem-sets/src/wtk/challenge.rst:58 -msgid "Defence stage" -msgstr "Стадія захисту" - -#: ../../problem-sets/src/wtk/challenge.rst:60 -msgid "" -"Player selects the choice to defend from **wizard**, **thief** or " -"**knight**, enemy selects the choice to attack from the same options by " -"random. If the attack is successful:" -msgstr "" -"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " -"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" - -#: ../../problem-sets/src/wtk/challenge.rst:64 -msgid "player health is decreased" -msgstr "здоров'я гравця знижено" - -#: ../../problem-sets/src/wtk/challenge.rst:66 -msgid "If player is defeated:" -msgstr "Якщо гравець переможений:" - -#: ../../problem-sets/src/wtk/challenge.rst:68 -msgid "report the message about gained score points to the terminal" -msgstr "повідомляти повідомлення про набрані бали на термінал" - -#: ../../problem-sets/src/wtk/challenge.rst:69 -msgid "write down player's name and score points to \"scores.txt\" file" -msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" - -#: ../../problem-sets/src/wtk/challenge.rst:73 -msgid "Exceptions" -msgstr "Винятки" - -#: ../../problem-sets/src/wtk/challenge.rst:76 -msgid "Enemy down" -msgstr "Ворога переможено" - -#: ../../problem-sets/src/wtk/challenge.rst:78 -msgid "" -"This is an exceptional scenario when enemy is defeated. A custom exception " -"``EnemyDown`` should be used to track these cases. Exception should provide " -"the details on the enemy's instance, especially its level." -msgstr "" -"Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " -"повинен надавати деталі про екземпляр ворога, особливо його рівень." - -#: of wtk.exceptions.EnemyDown:1 -msgid "Raised when an enemy is defeated" -msgstr "Виникає, коли ворог переможений" - -#: ../../problem-sets/src/wtk/challenge.rst:85 -msgid "Game over" -msgstr "Гра завершена" - -#: ../../problem-sets/src/wtk/challenge.rst:87 -msgid "" -"This is an exceptional scenario when player is defeated. A custom exception " -"``GameOver`` should be used to track these cases. Exception should provide " -"the details on the player's instance, especially its score points." -msgstr "" -"Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " -"випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " -"повинен надавати деталі про екземпляр гравця, особливо його результати бали." - -#: of wtk.exceptions.GameOver:1 -msgid "Raised when a player is defeated" -msgstr "Виникає, коли гравця переможено" - -#: ../../problem-sets/src/wtk/challenge.rst:95 -msgid "Models" -msgstr "Моделі" - -#: ../../problem-sets/src/wtk/challenge.rst:98 -msgid "Enemy" -msgstr "Ворог" - -#: of wtk.models.Enemy:1 -msgid "Enemy model" -msgstr "Модель супротивника" - -#: of wtk.models.Enemy:3 -msgid "enemy's level value" -msgstr "значення рівня противника" - -#: of wtk.models.Enemy:5 -msgid "enemy's instance health points" -msgstr "очки здоров'я ворога" - -#: of wtk.models.Enemy:8 -msgid "Represents the playing enemy-bot." -msgstr "Представляє граючого ворога-бота." - -#: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 -msgid "Initialize instance" -msgstr "Ініціалізувати екземпляр" - -#: of wtk.models.Enemy.__init__:3 -msgid "an enemy's level indicator" -msgstr "індикатор рівня противника" - -#: of wtk.models.Enemy.__init__:6 -msgid "Health value is equal to the level value." -msgstr "Значення здоров'я дорівнює значенню рівня." - -#: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 -msgid "Decrease health points" -msgstr "Зменшує очоки здоров'я" - -#: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health -msgid "raise" -msgstr "raise" - -#: of wtk.models.Enemy.decrease_health:3 -msgid "EnemyDown" -msgstr "EnemyDown" - -#: of wtk.models.Enemy.decrease_health:5 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``EnemyDown`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``EnemyDown``." - -#: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 -msgid "Return a random fight choice" -msgstr "Повертає випадковий варіант для бою" - -#: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 -#: wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 -msgid "a fight choice" -msgstr "варіант для бою" - -#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 -msgid "Choices made by an enemy are random." -msgstr "Вибори, зроблені супротивником, випадкові." - -#: ../../problem-sets/src/wtk/challenge.rst:104 -msgid "You are free to implement other methods you like, if needed." -msgstr "" -"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." - -#: ../../problem-sets/src/wtk/challenge.rst:107 -msgid "Player" -msgstr "Гравець" - -#: of wtk.models.Player:1 -msgid "Player model" -msgstr "Модель гравця" - -#: of wtk.models.Player:3 -msgid "player's name" -msgstr "ім'я гравця" - -#: of wtk.models.Player:5 -msgid "player's instance health points" -msgstr "очки здоров'я гравця" - -#: of wtk.models.Player:7 -msgid "player's instance gained score points" -msgstr "очки, зароблені гравцем" - -#: of wtk.models.Player:10 -msgid "This model is controlled by the player." -msgstr "Ця модель керується гравцем." - -#: of wtk.models.Player.__init__:3 -msgid "a player's name" -msgstr "ім'я гравця" - -#: of wtk.models.Player.__init__:6 -msgid "" -"This method performs player instance initialization. It set instance name, " -"initial score points value and health." -msgstr "" -"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " -"екземпляра, значення початкових балів і здоров'я." - -#: of wtk.models.Player.attack:1 -msgid "Attack an enemy" -msgstr "Атакує ворога" - -#: of wtk.models.Player.attack:3 -msgid "" -"Perform attack on an enemy instance. This method takes an enemy instance as " -"an argument. After that, it takes attack choice from the player model and " -"the defence choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease enemy health, assign score " -"points etc.). Based on fight result should print out a message:" -msgstr "" -"Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " -"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " -"та вибір захисту з моделі противника. Після результату битви потрібно " -"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " -"призначити очки тощо). На основі результату бою має видрукувати\" " -"\"повідомлення:" - -#: of wtk.models.Player.attack:10 -msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" -msgstr "\"YOUR ATTACK IS SUCCESSFUL!\"" - -#: of wtk.models.Player.attack:11 -msgid "\"YOUR ATTACK IS FAILED!\"" -msgstr "\"YOUR ATTACK IS FAILED!\"" - -#: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 -msgid "\"IT'S A DRAW!\"" -msgstr "\"IT'S A DRAW!\"" - -#: of wtk.models.Player.decrease_health:3 -msgid "GameOver" -msgstr "GameOver" - -#: of wtk.models.Player.decrease_health:5 -msgid "" -"This method decreases the health meter value. When it comes to be less than " -"1 (one) an ``GameOver`` exception is raised." -msgstr "" -"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " -"(одного), виникає виняток ``GameOver``." - -#: of wtk.models.Player.defence:1 -msgid "Defend from an enemy's attack" -msgstr "Захист від атаки супротивника" - -#: of wtk.models.Player.defence:3 -msgid "" -"Perform defence from an enemy attack. This method takes an enemy instance as " -"an argument. After that, it takes defence choice from the player model and " -"the attack choice from an enemy model. After fight result calculation " -"required operation are to be performed (decrease player health). Based on " -"fight result should print out a message:" -msgstr "" -"Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " -"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " -"атаки від моделі ворога. Після результату бою необхідно виконати операцію " -"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " -"повідомлення:" - -#: of wtk.models.Player.defence:10 -msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" -msgstr "\"YOUR DEFENCE IS SUCCESSFUL!\"" - -#: of wtk.models.Player.defence:11 -msgid "\"YOUR DEFENCE IS FAILED!\"" -msgstr "\"YOUR DEFENCE IS FAILED!\"" - -#: of wtk.models.Player.fight:1 -msgid "Fight result calculation interface" -msgstr "Інтерфейс для вирахування результатів двобою" - -#: of wtk.models.Player.fight:3 -msgid "The method calculates the fight result based on the game rules:" -msgstr "Метод розраховує результат бою за правилами гри:" - -#: of wtk.models.Player.fight:5 -msgid "**wizard** beats **knight**" -msgstr "**чарівник** перемагає **рицаря**" - -#: of wtk.models.Player.fight:6 -msgid "**thief** beats **wizard**" -msgstr "**злодій** перемагає **чарівника**" - -#: of wtk.models.Player.fight:7 -msgid "**knight** beats **thief**" -msgstr "**рицар** перемагає **злодія**" - -#: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 -msgid "Return fight choice from the user's prompt" -msgstr "Повертає варіант для поєдинку з вводу користувача" - -#: of wtk.models.Player.select_attack:5 wtk.models.Player.select_defence:5 -msgid "" -"The player is asked to make their decision for the upcoming fight. The " -"chosen value is validated and if it is invalid the question is repeated." -msgstr "" -"Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " -"перевіряється, і якщо воно недійсне, запитання повторюється." - -#: ../../problem-sets/src/wtk/challenge.rst:116 -msgid "Settings" -msgstr "Налаштування" - -#: ../../problem-sets/src/wtk/challenge.rst:118 -msgid "Settings module contains constants values for the game." -msgstr "Модуль налаштувань містить значення констант для гри." - -#: ../../problem-sets/src/wtk/challenge.rst:120 -msgid "For example," -msgstr "Наприклад," - -#: ../../docstring of wtk.settings.INITIAL_PLAYER_HEALTH:1 -msgid "Initial player health value" -msgstr "Початкове значення здоров'я гравця" - -#: ../../docstring of wtk.settings.INITIAL_ENEMY_LEVEL:1 -msgid "Initial enemy level value" -msgstr "Початкове значення рівня ворога" - -#: ../../docstring of wtk.settings.SCORE_SUCCESS_ATTACK:1 -msgid "Score points value to assign when player's attack is successful" -msgstr "Вартість очок, які призначаються, коли атака гравця успішна" - -#: ../../docstring of wtk.settings.SCORE_ENEMY_DOWN:1 -msgid "Score points value to assign when enemy is defeated" -msgstr "Вартість очок, які призначаються, коли ворог переможений" - -#: ../../problem-sets/src/wtk/challenge.rst:131 -msgid "You may also define messages with this module, for example:" -msgstr "" -"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" - -#: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 -msgid "Successful attack message" -msgstr "Повідомлення про успішну атаку" - -#: ../../docstring of wtk.settings.MSG_SUCCESS_DEFENCE:1 -msgid "Successful defence message" -msgstr "Повідомлення про успішний захист" - -#: ../../docstring of wtk.settings.MSG_FAILURE_ATTACK:1 -msgid "Failed attack message" -msgstr "Повідомлення про невдалу атаку" - -#: ../../docstring of wtk.settings.MSG_FAILURE_DEFENCE:1 -msgid "Failed defence message" -msgstr "Повідомлення про невдалий захист" - -#: ../../docstring of wtk.settings.MSG_DRAW:1 -msgid "Draw fight message" -msgstr "Повідомлення про нічию" - -#: ../../problem-sets/src/wtk/challenge.rst:141 -msgid "Engine" -msgstr "Ігровий рушій" - -#: ../../problem-sets/src/wtk/challenge.rst:143 -msgid "Engine module should provide two functions:" -msgstr "Модуль двигуна має забезпечувати дві функції:" - -#: ../../problem-sets/src/wtk/challenge.rst:145 -msgid "``get_player_name``" -msgstr "``get_player_name``" - -#: ../../problem-sets/src/wtk/challenge.rst:146 -msgid "``play``" -msgstr "``play``" - -#: ../../problem-sets/src/wtk/challenge.rst:149 -msgid "Player name getter" -msgstr "Отримання імені гравця" - -#: ../../problem-sets/src/wtk/challenge.rst:151 -msgid "" -"Asks the user to type in his or her name and return it back. Leading and " -"trailing whitespaces are to be trimmed. Name should contain at least one " -"character." -msgstr "" -"Просить користувача ввести своє ім'я та повернути його назад. Пробіли на " -"початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " -"символ." - -#: of wtk.engine.get_player_name:1 -msgid "Return a player's name from the user prompt" -msgstr "Повертає ім'я гравця з вводу користувача" - -#: of wtk.engine.get_player_name:3 -msgid "a player defined name" -msgstr "ім'я визначене гравцем" - -#: of wtk.engine.get_player_name:5 -msgid "" -"A validation process is performed as well. The player name cannot be an " -"empty string." -msgstr "" -"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." - -#: ../../problem-sets/src/wtk/challenge.rst:158 -msgid "Play" -msgstr "Гра" - -#: ../../problem-sets/src/wtk/challenge.rst:160 -msgid "" -"This function initializes player and enemy instance. It processes game " -"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " -"new one should be initialized with level increased by 1 (one). This case " -"should be reported to the terminal. If a player is defeated - the \"Game " -"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " -"should be handled as well - it's behavior is similar to \"Game Over\" event, " -"but \"game over\" message should be omitted." -msgstr "" -"Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " -"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " -"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " -"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " -"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " -"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " -"\"Game Over\" має бути пропущено." - -#: of wtk.engine.play:1 -msgid "Run the game" -msgstr "Запускає гру" - -#: of wtk.engine.play:3 -msgid "" -"The function initializes player and enemy instances. After that it runs the " -"game process in an endless loop. Once the player is defeated - it stops the " -"execution." -msgstr "" -"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " -"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " -"зупиняє виконання." - -#: ../../problem-sets/src/wtk/challenge.rst:173 -msgid "Optional Enhancements" -msgstr "Додаткові Вдосконалення" - -#: ../../problem-sets/src/wtk/challenge.rst:175 -msgid "Add scores processor to show top-10 scores from a record table." -msgstr "" -"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " -"записів." - -#: ../../problem-sets/src/wtk/challenge.rst:176 -msgid "Create game menu, for example: ::" -msgstr "Створити меню гри, наприклад: ::" - -#: ../../problem-sets/src/wtk/challenge.rst:182 -msgid "Store score table to the database instead of using text file." -msgstr "" -"Зберігайте таблицю балів у базі даних замість використання текстового файлу." - -#~ msgid "Specification for Django blog training project" -#~ msgstr "Специфікація навчального проекту блогу Django" - -#~ msgid "python, django, blog, project, training" -#~ msgstr "python, django, blog, project, training" - -#~ msgid "Optional tasks" -#~ msgstr "Додаткові завдання" - -#~ msgid "" -#~ "Create a service to fetch articles, ordered by a specified user " -#~ "preferences." -#~ msgstr "" -#~ "Створіть сервіс для отримання статей, впорядкованих за вказаними " -#~ "уподобаннями користувача." - -#~ msgid "The instructions to create a pull request via GitHub" -#~ msgstr "Інструкції щодо створення запиту на отримання через GitHub" - -#~ msgid "Creating the Pull Request" -#~ msgstr "Створення Pull Request" - -#~ msgid "" -#~ "Create a pull request to propose and collaborate on changes to a " -#~ "repository. These changes are proposed in a *branch*, which ensures that " -#~ "the default branch only contains finished and approved work :cite:`github:" -#~ "creating-pr`." -#~ msgstr "" -#~ "Створіть запит на отримання, щоб запропонувати та співпрацювати над " -#~ "змінами в сховищі. Ці зміни пропонуються у *гілці*, що гарантує, що гілка " -#~ "за замовчуванням містить лише готову та затверджену роботу :cite:`github:" -#~ "creating-pr`." - -#~ msgid "" -#~ "Pull requests let you tell others about changes you've pushed to a branch " -#~ "in a repository on GitHub. Once a pull request is opened, you can discuss " -#~ "and review the potential changes with collaborators and add follow-up " -#~ "commits before your changes are merged into the base branch :cite:`github:" -#~ "about-pr`." -#~ msgstr "" -#~ "Запити на витягування дозволяють повідомляти іншим про зміни, які ви " -#~ "внесли до гілки сховища на GitHub. Після відкриття запиту на отримання ви " -#~ "можете обговорити та переглянути потенційні зміни зі співавторами та " -#~ "додати подальші коміти, перш ніж ваші зміни буде об'єднано в базову " -#~ "гілку :cite:`github:about-pr`." - -#~ msgid "" -#~ "The compare and pull request pages use different methods to calculate the " -#~ "diff for changed files:" -#~ msgstr "" -#~ "Сторінки порівняння та запиту на отримання використовують різні методи " -#~ "для обчислення різниці для змінених файлів:" - -#~ msgid "" -#~ "Compare pages show the diff between the tip of the head ref and the " -#~ "current common ancestor (that is, the merge base) of the head and base " -#~ "ref." -#~ msgstr "" -#~ "Сторінки порівняння показують різницю між кінчиком головного посилання та " -#~ "поточним спільним предком (тобто основою злиття) головного та базового " -#~ "посилання." - -#~ msgid "" -#~ "Pull request pages show the diff between the tip of the head ref and the " -#~ "common ancestor of the head and base ref at the time when the pull " -#~ "request was created. Consequently, the merge base used for the comparison " -#~ "might be different." -#~ msgstr "" -#~ "Сторінки запиту на отримання показують різницю між кінчиком головного " -#~ "посилання та спільним предком головного та базового посилання на момент " -#~ "створення запиту на отримання. Отже, база злиття, яка використовується " -#~ "для порівняння, може бути іншою." - -#~ msgid "" -#~ "In *few words*: both source and target branches **should** share some " -#~ "commit(s) in their history and the source branch **should** has commit(s) " -#~ "missing on the target one." -#~ msgstr "" -#~ "У *кількох словах*: як вихідна, так і цільова гілки **повинні** мати " -#~ "спільні деякі коміти у своїй історії, а вихідна гілка **повинна** мати " -#~ "коміти, відсутні в цільовій." - -#~ msgid "Following SHOULD be included to the repository:" -#~ msgstr "У репозиторій СЛІД включити наступне:" - -#~ msgid "Following MAY be included to the repository:" -#~ msgstr "До репозиторію МОЖЕ бути включено:" - -#~ msgid "additional information (e.g. README file and other documents)" -#~ msgstr "додаткова інформація (наприклад, файл README та інші документи)" - -#~ msgid "dummy data (e.g. fixtures for development and testing etc.)" -#~ msgstr "фіктивні дані (наприклад, приклади для розробки та тестування тощо)" - -#~ msgid "Following SHOULD be excluded from the repository:" -#~ msgstr "З репозитарію СЛІД виключити:" - -#~ msgid "virtual environment directory" -#~ msgstr "каталог віртуального середовища" - -#~ msgid "project database (e.g. \"*.sqlite3\", \"*.db\" etc.)" -#~ msgstr "база даних проекту (наприклад, \"*.sqlite3\", \"*.db\" тощо)" - -#~ msgid "Desktop Services Store (\".DS_Store\")" -#~ msgstr "Desktop Services Store (\".DS_Store\")" - -#~ msgid "Repository preparation" -#~ msgstr "Підготовка репозиторію" - -#~ msgid "This should be done once for each repository." -#~ msgstr "Це потрібно зробити один раз для кожного репозиторію." - -#~ msgid "" -#~ "Create README file and provide a brief description for your project " -#~ "(optional)." -#~ msgstr "" -#~ "Створіть файл README та надайте короткий опис свого проекту " -#~ "(необов'язково)." - -#~ msgid "Freeze the dependencies." -#~ msgstr "Зафіксуйте залежності." - -#~ msgid "" -#~ "Create a base code modules (e.g. initialize django project and apps, or " -#~ "create an empty python module like \"main.py\" etc.)." -#~ msgstr "" -#~ "Створіть модулі базового коду (наприклад, ініціалізуйте проект django та " -#~ "його застосунки або створіть порожній модуль python, як-от \"main.py\" " -#~ "тощо)." - -#~ msgid "" -#~ "Create \".gitignore\" file and set up directories and files to be excluded" -#~ msgstr "" -#~ "Створіть файл \".gitignore\" та налаштуйте каталоги та файли, які " -#~ "потрібно виключити" - -#~ msgid "Append contributors to remote repository" -#~ msgstr "Додати учасників до віддаленого репозиторію" - -#~ msgid "" -#~ "On `GitHub `_, navigate to the repository settings " -#~ "page and switch to **Collaborators and teams** menu item." -#~ msgstr "" -#~ "На `GitHub `_ перейдіть на сторінку налаштувань " -#~ "репозиторію та перейдіть до пункту меню **Collaborators and teams**." - -#~ msgid "Working on feature" -#~ msgstr "Робота над завданням" - -#~ msgid "" -#~ "Create a dedicated branch with some representative name (e.g. \"feature/" -#~ "models\", \"cbv\" etc.)." -#~ msgstr "" -#~ "Створіть спеціальну гілку з певною репрезентативною назвою (наприклад, " -#~ "\"feature/models\", \"cbv\" тощо)." - -#~ msgid "Do the work and commit changes on a feature branch." -#~ msgstr "Виконайте роботу та зафіксуйте зміни в гілці." - -#~ msgid "" -#~ "While working on a *feature branch* make commits for each completed " -#~ "logical block of code." -#~ msgstr "" -#~ "Під час роботи над *функціональною гілкою* робіть коміти для кожного " -#~ "завершеного логічного блоку коду." - -#~ msgid "On **Pull requests** tab click **New** button." -#~ msgstr "На вкладці **Pull requests** натисніть кнопку **New**." - -#~ msgid "" -#~ "On the pull request page add a **reviewer** by clicking the appropriate " -#~ "option and selecting a person from a dropdown menu." -#~ msgstr "" -#~ "На сторінці запиту на отримання додайте **reviewer**, натиснувши " -#~ "відповідну опцію та вибравши особу зі спадного меню." - -#~ msgid "" -#~ "The reviewer will **approve** or **reject** your pull request. Optionally " -#~ "the reviewer may provide some comments to your code; **rejected** pull " -#~ "requests will always come with some details." -#~ msgstr "" -#~ "Рецензент **схвалить** або **відхилить** ваш запит на отримання. За " -#~ "бажанням рецензент може надати деякі коментарі до вашого коду; " -#~ "**відхилені** запити на витягування завжди надходитимуть з деякими " -#~ "деталями." - -#~ msgid "Re-request review from the pull request page." -#~ msgstr "Надішліть повторний запит на перегляд зі сторінки запиту." - -#~ msgid "" -#~ "All commits related to the source branch will be automatically appended " -#~ "to the open pull request. The reviewer will review your updates. Repeat " -#~ "this process until the pull request is **approved**." -#~ msgstr "" -#~ "Усі коміти, пов'язані з вихідною гілкою, будуть автоматично додані до " -#~ "відкритого запиту на отримання. Рецензент перевірить ваші оновлення. " -#~ "Повторюйте цей процес, доки запит на отримання не буде **схвалено**." - -#~ msgid "Merging the pull request" -#~ msgstr "Об'єднання (злиття) запиту" - -#~ msgid "After that the pull request is merged into your target branch." -#~ msgstr "Після цього коміти робочої та цільової гілка об'єднується." - -#~ msgid "they can create a new one." -#~ msgstr "вони можуть створити новий." diff --git a/src/_locales/uk/LC_MESSAGES/appx/assignments.po b/src/_locales/uk/LC_MESSAGES/appx/assignments.po new file mode 100644 index 000000000..a9c6abeb4 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/assignments.po @@ -0,0 +1,433 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:03+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/assignments.txt:-1 +msgid "How-to handle in assignments via GitHub pull request(s)" +msgstr "Як працювати з призначеннями через GitHub pull request(и)" + +#: ../../src/appx/assignments.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/appx/assignments.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/assignments.txt:-1 +msgid "git, github, pull request, review, merge, howto" +msgstr "git, github, pull request, review, merge, howto" + +#: ../../src/appx/assignments.txt:9 +msgid "Handing in Homework Assignments" +msgstr "Здача домашніх завдань" + +#: ../../src/appx/assignments.txt:13 +msgid "Repository content description" +msgstr "Опис вмісту репозиторію" + +#: ../../src/appx/assignments.txt:16 +msgid "What to include" +msgstr "Що потрібно включити" + +#: ../../src/appx/assignments.txt:18 +msgid "Code base" +msgstr "Кодова база" + +#: ../../src/appx/assignments.txt:19 +msgid "Project dependencies (if applicable)" +msgstr "Залежності проекту (якщо застосовно)" + +#: ../../src/appx/assignments.txt:20 +msgid "" +"*(Optional)* Additional project information: README, CONTRIBUTING, LICENSE " +"etc." +msgstr "" +"*(Додаткова)* інформація про проєкт: README, CONTRIBUTING, LICENSE тощо." + +#: ../../src/appx/assignments.txt:24 +msgid "" +"Always start new repository from creating ``README`` and ``.gitignore`` " +"files." +msgstr "" +"Завжди починайте новий репозиторій зі створення файлів ``README`` та ``." +"gitignore``." + +#: ../../src/appx/assignments.txt:28 +msgid "What to exclude" +msgstr "Що потрібно виключити" + +#: ../../src/appx/assignments.txt:30 +msgid "Virtual environment, typically ``venv`` or ``env`` folder" +msgstr "Віртуальне середовище, зазвичай папка ``venv`` або ``env``" + +#: ../../src/appx/assignments.txt:31 +msgid "Byte compiled Python code (``__pycache__``)" +msgstr "Байтовий скомпільований код Python (``__pycache__``)" + +#: ../../src/appx/assignments.txt:32 +msgid "IDE configurations, typically ``.vscode`` or ``.idea`` folder" +msgstr "Конфігурації IDE, зазвичай папка ``.vscode`` або ``.idea``" + +#: ../../src/appx/assignments.txt:33 +msgid "Database files, like ``db.sqlite3``" +msgstr "Файли баз даних, такі як ``db.sqlite3``" + +#: ../../src/appx/assignments.txt:34 +msgid "Other stuff not related to the assignment directly" +msgstr "Інші речі, не пов'язані з завданням безпосередньо" + +#: ../../src/appx/assignments.txt:37 +msgid "" +"Set up **.gitignore** to exclude all name patterns from appending to the " +"stage area. Common content of this file may look like:" +msgstr "" +"Налаштуйте **.gitignore**, щоб виключити всі шаблони назв з додавання до " +"області сцени. Типовий вміст цього файлу може виглядати так:" + +#: ../../src/appx/assignments.txt:48 +msgid "Repository initialization" +msgstr "Ініціалізація репозиторію" + +#: ../../src/appx/assignments.txt:50 +msgid "Create and activate virtual environment." +msgstr "Створіть та активуйте віртуальне середовище." + +#: ../../src/appx/assignments.txt:51 +msgid "Create common repository files:" +msgstr "Створіть загальні файли репозиторію:" + +#: ../../src/appx/assignments.txt:53 +msgid "README" +msgstr "README" + +#: ../../src/appx/assignments.txt:54 +msgid ".gitignore" +msgstr ".gitignore" + +#: ../../src/appx/assignments.txt:55 +msgid "requirements.txt *(if applicable)*" +msgstr "requirements.txt *(якщо застосовно)*" + +#: ../../src/appx/assignments.txt:57 +msgid "" +"*(Optional)* Create a code base draft. This can be an empty module like " +"**main.py** or an empty :ref:`Django project `." +msgstr "" +"*(Додатково)* Створіть чорновий варіант кодової бази. Це може бути порожній " +"модуль типу **main.py** або порожній :ref:`проект Django `." + +#: ../../src/appx/assignments.txt:59 +msgid "Initialize a new repository using ``git init`` command." +msgstr "Ініціалізуйте новий репозиторій за допомогою команди ``git init``." + +#: ../../src/appx/assignments.txt:60 +msgid "Set up **.gitignore** name patterns." +msgstr "Налаштуйте шаблони імен **.gitignore**." + +#: ../../src/appx/assignments.txt:61 +msgid "Stage your changes." +msgstr "Додайте зміни до stage-простору." + +#: ../../src/appx/assignments.txt:62 +msgid "Commit your changes." +msgstr "Зафіксуйте зміни." + +#: ../../src/appx/assignments.txt:63 +msgid "Set up remote repository." +msgstr "Налаштуйте віддалений репозиторій." + +#: ../../src/appx/assignments.txt:64 +msgid "Push changes from local branch to remote." +msgstr "Перенесіть зміни з локальної гілки на віддалену." + +#: ../../src/appx/assignments.txt:69 +msgid "Initializing new Django project" +msgstr "Ініціалізація нового проекту Django" + +#: ../../src/appx/assignments.txt:71 +msgid "" +"Base Django project may be added to the repository with the first commit. " +"Initialize Django project in current repository root to avoid directories " +"nesting." +msgstr "" +"Базовий проект Django може бути доданий до сховища з першим коммітом. " +"Ініціалізуйте проект Django у корені поточного сховища, щоб уникнути " +"вкладеності каталогів." + +#: ../../src/appx/assignments.txt:80 +msgid "Do not forget to create **requirements.txt**." +msgstr "Не забудьте створити **requirements.txt**." + +#: ../../src/appx/assignments.txt:82 +msgid "After that, you may proceed with \"staging\" and \"commit\" steps." +msgstr "Після цього ви можете перейти до етапів \"stage\" та \"commit\"." + +#: ../../src/appx/assignments.txt:86 +msgid "Sharing project dependencies" +msgstr "Спільний доступ до залежностей проекту" + +#: ../../src/appx/assignments.txt:88 +msgid "" +"The **requirements.txt** file is a plain text file that lists all the Python " +"packages required for a specific project. This file is used to specify " +"dependencies in a version-controlled and easily shareable manner. It allows " +"for a consistent environment across different team members' local setups." +msgstr "" +"Файл **requirements.txt** -- це звичайний текстовий файл, який містить " +"список усіх пакунків Python, необхідних для конкретного проекту. Цей файл " +"використовується для вказівки залежностей у спосіб, що дозволяє контролювати " +"версії та легко ділитися ними. Це дозволяє забезпечити узгодженість " +"середовища в локальних налаштуваннях різних членів команди." + +#: ../../src/appx/assignments.txt:94 +msgid "Where to place \"requirements.txt\" file" +msgstr "Де розмістити файл \"requirements.txt\"" + +#: ../../src/appx/assignments.txt:96 +msgid "" +"The **requirements.txt** file is generally placed in the root directory of " +"the project." +msgstr "" +"Файл **requirements.txt** зазвичай розміщується у кореневому каталозі " +"проекту." + +#: ../../src/appx/assignments.txt:100 +msgid "Creating \"requirements.txt\" file" +msgstr "Створення файлу \"requirements.txt\"" + +#: ../../src/appx/assignments.txt:102 +msgid "" +"To generate file use ``pip freeze`` command and place its output to a file:" +msgstr "" +"Щоб згенерувати файл, скористайтеся командою ``pip freeze`` і помістіть його " +"вивід у файл:" + +#: ../../src/appx/assignments.txt:108 +msgid "This will create **requirements.txt** file. Its content may look like:" +msgstr "" +"В результаті буде створено файл **requirements.txt**. Його вміст може мати " +"вигляд:" + +#: ../../src/appx/assignments.txt:119 +msgid "Installing dependencies from \"requirements.txt\" file" +msgstr "Встановлення залежностей з файлу \"requirements.txt\"" + +#: ../../src/appx/assignments.txt:121 +msgid "" +"Another team member may easily install all the requirements for the project " +"by using ``pip install`` command:" +msgstr "" +"Інший член команди може легко встановити всі вимоги до проекту за допомогою " +"команди ``pip install``:" + +#: ../../src/appx/assignments.txt:130 +msgid "Dealing with home tasks (challenges)" +msgstr "Вирішення домашніх завдань (викликів)" + +#: ../../src/appx/assignments.txt:132 +msgid "Create a new topic branch" +msgstr "Створити нову гілку завдання" + +#: ../../src/appx/assignments.txt:133 +msgid "Switch to a topic branch" +msgstr "Перейдіть до гілки завдання" + +#: ../../src/appx/assignments.txt:134 +msgid "Do the work and commit changes" +msgstr "Виконайте роботу та зафіксуйте зміни" + +#: ../../src/appx/assignments.txt:137 +msgid "You can create a new branch and immediately switch to it:" +msgstr "Ви можете створити нову гілку і одразу перейти до неї:" + +#: ../../src/appx/assignments.txt:144 +msgid "Creating a pull request" +msgstr "Створення запиту на злиття" + +#: ../../src/appx/assignments.txt:146 +msgid "" +"Make sure your working branch is up-to-date with the default one. You can " +"pull changes for the default branch and rebase your feature branch onto it." +msgstr "" +"Переконайтеся, що ваша робоча гілка оновлена ​​до стандартної. Ви можете " +"отримати зміни для гілки за замовчуванням і перебазувати свою гілку функції " +"на неї." + +#: ../../src/appx/assignments.txt:149 +msgid "" +"Push feature branch to the remote repository. By default, the current active " +"branch is pushed via ``git push`` command. You may need to set upstream " +"branch if it isn't yet." +msgstr "" +"Перенести гілку функції до віддаленого сховища. За замовчуванням, поточна " +"активна гілка виштовхується командою ``git push``. Можливо, вам доведеться " +"створити нову гілку, якщо вона ще не створена." + +#: ../../src/appx/assignments.txt:157 +msgid "" +"Navigate to your remote repository homepage on GitHub and switch to **Pull " +"requests** tab." +msgstr "" +"Перейдіть на головну сторінку вашого віддаленого сховища на GitHub і " +"перейдіть на вкладку **Pull requests**." + +#: ../../src/appx/assignments.txt:159 +msgid "Click **New pull request** button." +msgstr "Натисніть кнопку **New pull request**." + +#: ../../src/appx/assignments.txt:160 +msgid "" +"Select your default branch as *target* and your feature branch as *source*." +msgstr "Виберіть гілку за умовчанням як *ціль*, а робочу гілку як *джерело*." + +#: ../../src/appx/assignments.txt:162 +msgid "Click **Create pull request** button." +msgstr "Натисніть кнопку **Create pull request**." + +#: ../../src/appx/assignments.txt:163 +msgid "Provide meaningful title and a brief description for your pull request." +msgstr "Надайте змістовну назву та короткий опис вашого запиту." + +#: ../../src/appx/assignments.txt:164 +msgid "Submit pull request creation." +msgstr "Підтвердіть створення запиту." + +#: ../../src/appx/assignments.txt:165 +msgid "*(Optional)* Select reviewer(s) in **Reviewers** section." +msgstr "*(Необов'язково)* Виберіть рецензента(ів) у розділі **Reviewers**." + +#: ../../src/appx/assignments.txt:166 +msgid "Wait until your pull request is reviewed." +msgstr "Зачекайте, поки ваш запит буде розглянуто." + +#: ../../src/appx/assignments.txt:169 +msgid "Set up reviewers" +msgstr "Налаштування рецензентів" + +#: ../../src/appx/assignments.txt:171 +msgid "" +"You may share a link to pull request to a reviewer directly, but it's better " +"to set reviewer(s) on the pull request's page. Before you can select " +"reviewers, you need to add them as project contributors." +msgstr "" +"Ви можете надіслати посилання на запит безпосередньо рецензенту, але краще " +"вказати рецензента(ів) на сторінці запиту. Перш ніж ви зможете вибрати " +"рецензентів, вам потрібно додати їх як учасників проекту." + +#: ../../src/appx/assignments.txt:176 +msgid "Append collaborators" +msgstr "Додавання співавторів" + +#: ../../src/appx/assignments.txt:178 +msgid "" +"Reviews allow collaborators to comment on the changes proposed in pull " +"requests, approve the changes, or request further changes before the pull " +"request is merged. Repository administrators can require that pull requests " +"are approved before being merged." +msgstr "" +"Рецензії дозволяють учасникам коментувати зміни, запропоновані у запитах, " +"затверджувати їх або вимагати подальших змін до того, як запит буде " +"об'єднано. Адміністратори сховища можуть вимагати, щоб запити на вилучення " +"були затверджені перед об'єднанням." + +#: ../../src/appx/assignments.txt:183 +msgid "" +"Navigate to your repository homepage on GitHub and switch to **Settings** " +"tab." +msgstr "" +"Перейдіть на головну сторінку вашого сховища на GitHub і перейдіть на " +"вкладку **Налаштування**." + +#: ../../src/appx/assignments.txt:185 +msgid "Select **Collaborators and teams** menu item." +msgstr "Виберіть пункт меню **Collaborators and teams**." + +#: ../../src/appx/assignments.txt:186 +msgid "Under **Manage access** section click **Add people** button." +msgstr "У розділі **Manage access** натисніть кнопку ``Add people``." + +#: ../../src/appx/assignments.txt:187 +msgid "In modal window start typing GitHub username." +msgstr "У модальному вікні почніть вводити ім'я користувача GitHub." + +#: ../../src/appx/assignments.txt:188 +msgid "Select a contributor from the dropdown menu." +msgstr "Виберіть учасника зі спадного меню." + +#: ../../src/appx/assignments.txt:190 +msgid "This will send a *contributing request* to a specified user." +msgstr "Це надішле *запит* вказаному користувачеві." + +#: ../../src/appx/assignments.txt:193 +msgid "Merging changes" +msgstr "Об'єднання змін" + +#: ../../src/appx/assignments.txt:195 +msgid "" +"In case your pull request is **approved** - merge it to the trunk branch. " +"Select one of the options available:" +msgstr "" +"Якщо ваш pull request буде **схвалено** - об'єднайте його в основну гілку. " +"Виберіть один з доступних варіантів:" + +#: ../../src/appx/assignments.txt:198 +msgid "Create a merge commit" +msgstr "Create a merge commit" + +#: ../../src/appx/assignments.txt:199 +msgid "Rebase and merge" +msgstr "Rebase and merge" + +#: ../../src/appx/assignments.txt:200 +msgid "Squash and merge" +msgstr "Squash and merge" + +#: ../../src/appx/assignments.txt:202 +msgid "**Create a merge commit** suits in most of the cases." +msgstr "**Create a merge commit** підходить у більшості випадків." + +#: ../../src/appx/assignments.txt:205 +msgid "Making changes" +msgstr "Внесення змін" + +#: ../../src/appx/assignments.txt:207 +msgid "" +"In case your pull request is **rejected** or has comments - you may need to " +"provide some fixes." +msgstr "" +"Якщо ваш pull request буде **відхилено** або він матиме зауваження - вам " +"може знадобитися надати деякі виправлення." + +#: ../../src/appx/assignments.txt:210 +msgid "Do the work in your local topic branch" +msgstr "Виконайте роботу у вашій місцевій тематичній гілці" + +#: ../../src/appx/assignments.txt:211 +msgid "Push these changes to remote" +msgstr "Надішліть їх до гілки віддаленого репозиторію" + +#: ../../src/appx/assignments.txt:212 +msgid "Re-request review (if applicable)" +msgstr "Зробіть повторний запит на перегляд (за необхідності)" + +#: ../../src/appx/assignments.txt:213 +msgid "Wait until review is done" +msgstr "Дочекайтеся завершення перевірки" diff --git a/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po new file mode 100644 index 000000000..fb01b5440 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po @@ -0,0 +1,1196 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:05+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/blog/spec.rst:10 +msgid "Blog Site" +msgstr "" + +#: ../../src/appx/blog/spec.rst:12 +msgid "" +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." +msgstr "" +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." + +#: ../../src/appx/blog/spec.rst:19 +msgid "**Key Features**" +msgstr "**Основні функції**" + +#: ../../src/appx/blog/spec.rst:22 +msgid "User Registration and Authentication" +msgstr "Реєстрація та Аутентифікація Користувачів" + +#: ../../src/appx/blog/spec.rst:23 +msgid "" +"The application will provide user registration and authentication " +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." +msgstr "" +"Застосунок надасть функціональність реєстрації та аутентифікації " +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." + +#: ../../src/appx/blog/spec.rst:30 +msgid "Article Management" +msgstr "Керування Статтями" + +#: ../../src/appx/blog/spec.rst:31 +msgid "" +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." +msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." + +#: ../../src/appx/blog/spec.rst:37 +msgid "Topic Subscription:" +msgstr "Підписка на Теми:" + +#: ../../src/appx/blog/spec.rst:38 +msgid "" +"The application will include a subscription feature that allows users to " +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." +msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." + +#: ../../src/appx/blog/spec.rst:45 +msgid "" +"Overall, the project aims to deliver an efficient blogging platform that " +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." +msgstr "" +"Застосунок буде містити функцію підписки, яка дозволить користувачам " +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." + +#: ../../src/appx/blog/spec.rst:52 +msgid "" +"Here is a starter repository template, that may helps: `Starter template`_." +msgstr "" +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." + +#: ../../src/appx/blog/spec.rst:55 +msgid "Challenge: Functional views" +msgstr "Виклик: Функціональні представлення" + +#: ../../src/appx/blog/spec.rst:57 +msgid "" +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." +msgstr "" +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." + +#: ../../src/appx/blog/spec.rst:61 +msgid "" +"``/about/``: Provides a regular text for a user, describing the " +"functionalities of the django site." +msgstr "" +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." + +#: ../../src/appx/blog/spec.rst:63 +msgid "" +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." +msgstr "" +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." + +#: ../../src/appx/blog/spec.rst:65 +msgid "" +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." +msgstr "" +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." + +#: ../../src/appx/blog/spec.rst:68 +msgid "" +"``/
    /comment/``: This view will be used to add comments to a article." +msgstr "" +"``/
    /comment/``: Це представлення буде використовуватися для " +"додавання коментарів до статті." + +#: ../../src/appx/blog/spec.rst:70 +msgid "``/create/``: A article creation form." +msgstr "``/create/``: Форма створення статті." + +#: ../../src/appx/blog/spec.rst:71 +msgid "``/
    /update/``: A view to update an existing article data." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." + +#: ../../src/appx/blog/spec.rst:72 +msgid "``/
    /delete/``: A view to confirm article deletion." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." + +#: ../../src/appx/blog/spec.rst:73 +msgid "``/topics/``: A list of topics available on the site." +msgstr "``/topics/``: Перелік доступних тем на сайті." + +#: ../../src/appx/blog/spec.rst:74 +msgid "``/topics//subscribe/``: A view to subscribe for a topic." +msgstr "``/topics//subscribe/``: Представлення для підписки на тему." + +#: ../../src/appx/blog/spec.rst:75 +msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." +msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." + +#: ../../src/appx/blog/spec.rst:76 +msgid "``/profile//``: A site user's personal page." +msgstr "``/profile//``: Особиста сторінка користувача сайту." + +#: ../../src/appx/blog/spec.rst:77 +msgid "" +"``/set-password/``: This route will be used to change users' credential data." +msgstr "" +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." + +#: ../../src/appx/blog/spec.rst:79 +msgid "``/set-userdata/``: This route will be user to change users' data." +msgstr "" +"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " +"користувачів." + +#: ../../src/appx/blog/spec.rst:80 +msgid "``/deactivate/``: Account deactivation (deletion) view." +msgstr "" +"``/deactivate/``: Представлення для деактивації облікового запису " +"(видалення)." + +#: ../../src/appx/blog/spec.rst:81 +msgid "``/register/``: This view contains a user registration form." +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../src/appx/blog/spec.rst:82 +msgid "``/login/``: This view contains a login form." +msgstr "``/login/``: Сторінка з формою для логіна." + +#: ../../src/appx/blog/spec.rst:83 +msgid "" +"``/logout/``: Logout page. This view should redirect user back to homepage." +msgstr "" +"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " +"сторінку.." + +#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 +#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 +msgid "Optional task(s)" +msgstr "Додаткові завдання" + +#: ../../src/appx/blog/spec.rst:89 +msgid "" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" +msgstr "" +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" + +#: ../../src/appx/blog/spec.rst:103 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../src/appx/blog/spec.rst:106 +msgid "" +"Django admin may be used to create some dummy data. To gather access to " +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" +msgstr "" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" + +#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 +msgid "General" +msgstr "Основне" + +#: ../../src/appx/blog/spec.rst:116 +msgid "Each model will be registered for admin site." +msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." + +#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 +msgid "Article topic" +msgstr "Тема статті" + +#: ../../src/appx/blog/spec.rst:120 +msgid "This is a simple model, that contains information about topic:" +msgstr "Ось проста модель, що містить інформацію про тему:" + +#: ../../src/appx/blog/spec.rst:122 +msgid "topic title (unique value, 64 characters or fewer)" +msgstr "назва теми (унікальне значення, не більше 64 символів)" + +#: ../../src/appx/blog/spec.rst:123 +msgid "topic short description (255 characters or fewer)" +msgstr "короткий опис теми (не більше 255 символів)" + +#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 +msgid "Article" +msgstr "Стаття" + +#: ../../src/appx/blog/spec.rst:127 +msgid "Article requires title (255 characters or fewer)." +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." + +#: ../../src/appx/blog/spec.rst:128 +msgid "Article requires content (at least 255 characters)." +msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." + +#: ../../src/appx/blog/spec.rst:129 +msgid "" +"Creation date should be autogenerated at article creation, and would never " +"be updated." +msgstr "" +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." + +#: ../../src/appx/blog/spec.rst:131 +msgid "Updated date will be update at each article save." +msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." + +#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 +msgid "Article comment" +msgstr "Коментар до статті" + +#: ../../src/appx/blog/spec.rst:135 +msgid "Comment requires creation date (autogenerated)." +msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." + +#: ../../src/appx/blog/spec.rst:136 +msgid "Comment requires message text." +msgstr "Коментар вимагає наявності тексту повідомлення." + +#: ../../src/appx/blog/spec.rst:139 +msgid "Relationships" +msgstr "Відносини" + +#: ../../src/appx/blog/spec.rst:141 +msgid "" +"Standard Django user model **will be** used for now. To apply model " +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" +msgstr "" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" + +#: ../../src/appx/blog/spec.rst:154 +msgid "``article`` and ``topics`` have *many-to-many* relationship." +msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." + +#: ../../src/appx/blog/spec.rst:155 +msgid "" +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." +msgstr "" +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." + +#: ../../src/appx/blog/spec.rst:158 +msgid "" +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." +msgstr "" +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." + +#: ../../src/appx/blog/spec.rst:161 +msgid "" +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." +msgstr "" +"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " +"відношення *стаття - користувач*." + +#: ../../src/appx/blog/spec.rst:163 +msgid "" +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." + +#: ../../src/appx/blog/spec.rst:174 +msgid "UML diagram" +msgstr "UML діаграми" + +#: ../../src/appx/blog/spec.rst:179 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" + +#: ../../src/appx/blog/spec.rst:181 +msgid "" +"Update existing views to represent entities that are actually stored inside " +"the project's database." +msgstr "" +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." + +#: ../../src/appx/blog/spec.rst:184 +msgid "``/``: should represent a list of existing articles." +msgstr "``/``: повинен представляти список існуючих статей." + +#: ../../src/appx/blog/spec.rst:185 +msgid "``/
    /``: should represent a single existing article." +msgstr "``/
    /``: повинен представляти окрему існуючу статтю." + +#: ../../src/appx/blog/spec.rst:186 +msgid "Detail view should obtain a list of article related comments." +msgstr "" +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." + +#: ../../src/appx/blog/spec.rst:187 +msgid "" +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." +msgstr "" +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." + +#: ../../src/appx/blog/spec.rst:189 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." +msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." + +#: ../../src/appx/blog/spec.rst:194 +msgid "" +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." +msgstr "" +"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." + +#: ../../src/appx/blog/spec.rst:201 +msgid "" +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." +msgstr "" +"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " +"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." + +#: ../../src/appx/blog/spec.rst:207 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" + +#: ../../src/appx/blog/spec.rst:210 +msgid "Helpful link: `Bootstrap template`_" +msgstr "Корисне посилання: `Bootstrap template`_" + +#: ../../src/appx/blog/spec.rst:213 +msgid "Links related to user data **may be** placeholders for now." +msgstr "" +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." + +#: ../../src/appx/blog/spec.rst:217 +msgid "**All** templates should be inherited from the ``base.html`` template." +msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." + +#: ../../src/appx/blog/spec.rst:218 +msgid "" +"Each page has a descriptive title HTML tag, which included ``| Blog`` " +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." +msgstr "" +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." + +#: ../../src/appx/blog/spec.rst:220 +msgid "Each page should contain a link to homepage (``/`` URL route)." +msgstr "" +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." + +#: ../../src/appx/blog/spec.rst:221 +msgid "" +"Each page contains a list of registered topics. Each view of this kind " +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." +msgstr "" +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." + +#: ../../src/appx/blog/spec.rst:224 +msgid "Replace content block for *about* page with some static content." +msgstr "" +"Замініть блок вмісту (content block) для сторінки *about* на деякий " +"статичний вміст." + +#: ../../src/appx/blog/spec.rst:225 +msgid "" +"Application-level templates should be located within appropriate " +"applications." +msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." + +#: ../../src/appx/blog/spec.rst:231 +msgid "" +"Each page should contain a list of links to archive views for the last year." +msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." + +#: ../../src/appx/blog/spec.rst:233 +msgid "Each page should contain an inclusion-block(s) with following links:" +msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" + +#: ../../src/appx/blog/spec.rst:235 +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: форма реєстрації нового користувача" + +#: ../../src/appx/blog/spec.rst:236 +msgid "``/login/``: user login form" +msgstr "``/login/``: форма логіна користувача" + +#: ../../src/appx/blog/spec.rst:237 +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення статті" + +#: ../../src/appx/blog/spec.rst:240 +msgid "Articles list" +msgstr "Список статей" + +#: ../../src/appx/blog/spec.rst:241 +msgid "Main page contains a list of published articles." +msgstr "Головна сторінка містить список опублікованих статей." + +#: ../../src/appx/blog/spec.rst:242 +msgid "Each article entity is rendered using a custom template tag." +msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." + +#: ../../src/appx/blog/spec.rst:243 +msgid "``article`` template tag renders information about a article object:" +msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" + +#: ../../src/appx/blog/spec.rst:245 +msgid "article title" +msgstr "заголовок статті" + +#: ../../src/appx/blog/spec.rst:246 +msgid "article content (trimmed to ~50 characters)" +msgstr "зміст статті (обрізаний до ~50 символів)" + +#: ../../src/appx/blog/spec.rst:247 +msgid "article creation date" +msgstr "дата створення статті" + +#: ../../src/appx/blog/spec.rst:248 +msgid "related topics (3 topics or fewer)" +msgstr "пов'язані теми (3 або менше)" + +#: ../../src/appx/blog/spec.rst:249 +msgid "number of related comments" +msgstr "кількість коментарів до статті" + +#: ../../src/appx/blog/spec.rst:256 +msgid "Article details" +msgstr "Деталі статті" + +#: ../../src/appx/blog/spec.rst:258 +msgid "Article update and deletion views **would not** affect data for now." +msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." + +#: ../../src/appx/blog/spec.rst:260 +msgid "" +"A article detail page contains links to **update** or **delete** current " +"article." +msgstr "" +"На сторінці деталей статті мають бути посилання на **оновлення** або " +"**видалення** поточної статті." + +#: ../../src/appx/blog/spec.rst:262 +msgid "Page provides information about article:" +msgstr "Сторінка надає інформацію про статтю:" + +#: ../../src/appx/blog/spec.rst:264 +msgid "Article title" +msgstr "Заголовок статті" + +#: ../../src/appx/blog/spec.rst:265 +msgid "Creation date" +msgstr "Дата створення" + +#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/appx/blog/spec.rst:267 +msgid "Related topics" +msgstr "Пов'язані теми" + +#: ../../src/appx/blog/spec.rst:268 +msgid "Article content" +msgstr "Вміст статті" + +#: ../../src/appx/blog/spec.rst:270 +msgid "Page contains a list of related comments." +msgstr "Сторінка містить список пов'язаних коментарів." + +#: ../../src/appx/blog/spec.rst:271 +msgid "Each comment contains:" +msgstr "Кожен коментар містить:" + +#: ../../src/appx/blog/spec.rst:274 +msgid "Comment creation time" +msgstr "Час створення коментаря" + +#: ../../src/appx/blog/spec.rst:275 +msgid "Comment message" +msgstr "Текст комментаря" + +#: ../../src/appx/blog/spec.rst:278 +msgid "Profile page" +msgstr "Строніка профілю" + +#: ../../src/appx/blog/spec.rst:279 +msgid "Author page contains information about author:" +msgstr "Сторінка автора містить інформацію про автора:" + +#: ../../src/appx/blog/spec.rst:281 +msgid "First name" +msgstr "Ім'я" + +#: ../../src/appx/blog/spec.rst:282 +msgid "Last name" +msgstr "Прізвище" + +#: ../../src/appx/blog/spec.rst:284 +msgid "Add more information, if needed." +msgstr "Додайте більше інформації за бажанням." + +#: ../../src/appx/blog/spec.rst:286 +msgid "Author page contains a list of articles created by this author." +msgstr "Сторінка автора містить список статей, створених цим автором." + +#: ../../src/appx/blog/spec.rst:287 +msgid "" +"Author page contains buttons/links to change user data and password or " +"deactivate a user's account." +msgstr "" +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." + +#: ../../src/appx/blog/spec.rst:291 +msgid "Forms" +msgstr "Форми" + +#: ../../src/appx/blog/spec.rst:293 +msgid "" +"There is **no need** to add actual forms now. They will be generated by " +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." +msgstr "" +"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " +"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " +"використання достатньо створити окремі шаблони." + +#: ../../src/appx/blog/spec.rst:297 +msgid "" +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" +msgstr "" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" + +#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 +msgid "username" +msgstr "username" + +#: ../../src/appx/blog/spec.rst:301 +msgid "email" +msgstr "email" + +#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 +msgid "password" +msgstr "password" + +#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 +msgid "confirm password" +msgstr "confirm password" + +#: ../../src/appx/blog/spec.rst:305 +msgid "" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" +msgstr "" +"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " +"отримувати введені дані від користувача:" + +#: ../../src/appx/blog/spec.rst:311 +msgid "" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" +msgstr "" +"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " +"даних статті:" + +#: ../../src/appx/blog/spec.rst:314 +msgid "title" +msgstr "title" + +#: ../../src/appx/blog/spec.rst:315 +msgid "relevant topics" +msgstr "відповідні теми" + +#: ../../src/appx/blog/spec.rst:316 +msgid "content" +msgstr "content" + +#: ../../src/appx/blog/spec.rst:318 +msgid "``/
    /delete`` page contains a simple delete confirmation form." +msgstr "" +"Сторінка ``/
    /delete`` містить просту форму для підтвердження " +"видалення." + +#: ../../src/appx/blog/spec.rst:319 +msgid "Change password form has two fields:" +msgstr "Форма зміни пароля має два поля:" + +#: ../../src/appx/blog/spec.rst:321 +msgid "new password" +msgstr "new password" + +#: ../../src/appx/blog/spec.rst:324 +msgid "" +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." +msgstr "" +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." + +#: ../../src/appx/blog/spec.rst:326 +msgid "" +"User preferences page contains a list of available topics. User can mark " +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." +msgstr "" +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." + +#: ../../src/appx/blog/spec.rst:331 +msgid "Challenge: Articles' slugs" +msgstr "Виклик: Slug-и статей" + +#: ../../src/appx/blog/spec.rst:334 +msgid "This is an optional challenge in addition to:" +msgstr "Це додатковий виклик у додаток до:" + +#: ../../src/appx/blog/spec.rst:336 +msgid "`Challenge: Functional views`_" +msgstr "`Challenge: Functional views`_" + +#: ../../src/appx/blog/spec.rst:337 +msgid "`Challenge: Templates`_" +msgstr "`Challenge: Templates`_" + +#: ../../src/appx/blog/spec.rst:338 +msgid "`Challenge: Data models`_" +msgstr "`Challenge: Data models`_" + +#: ../../src/appx/blog/spec.rst:339 +msgid "`Challenge: ORM`_" +msgstr "`Challenge: ORM`_" + +#: ../../src/appx/blog/spec.rst:341 +msgid "Update ``Article`` model with ``slug`` field. The slug value is:" +msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" + +#: ../../src/appx/blog/spec.rst:343 +msgid "required for each article" +msgstr "обов'язкове для кожної статті" + +#: ../../src/appx/blog/spec.rst:344 +msgid "unique for each article" +msgstr "унікальне для кожної статті" + +#: ../../src/appx/blog/spec.rst:346 +msgid "Create a data migration to provide slugs for existing articles." +msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." + +#: ../../src/appx/blog/spec.rst:347 +msgid "" +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." +msgstr "" +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " +"отримає slug: ``sample-blog-article-2023-03-23``." + +#: ../../src/appx/blog/spec.rst:351 +msgid "Update detail view URL path with article slug as dynamic portion." +msgstr "" +"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " +"якою буде slug статті." + +#: ../../src/appx/blog/spec.rst:354 +msgid "Challenge: Auth forms" +msgstr "Завдання: форми авторизації" + +#: ../../src/appx/blog/spec.rst:356 +msgid "Create form for new users registration with required fields:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" + +#: ../../src/appx/blog/spec.rst:358 +msgid "``username``" +msgstr "``username``" + +#: ../../src/appx/blog/spec.rst:359 +msgid "``email``" +msgstr "``email``" + +#: ../../src/appx/blog/spec.rst:360 +msgid "``password``" +msgstr "``password``" + +#: ../../src/appx/blog/spec.rst:361 +msgid "``confirm password``" +msgstr "``confirm password``" + +#: ../../src/appx/blog/spec.rst:363 +msgid "``username`` value should be validated against existing values." +msgstr "" +"Значення ``username`` повинно перевірятися на відповідність існуючим " +"значенням." + +#: ../../src/appx/blog/spec.rst:364 +msgid "``password`` and ``confirm password`` values should match." +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." + +#: ../../src/appx/blog/spec.rst:365 +msgid "Create form for existing users login." +msgstr "Створити форму для входу існуючих користувачів." + +#: ../../src/appx/blog/spec.rst:366 +msgid "Validations errors are to be rendered on the template." +msgstr "Помилки перевірки повинні відображатися на шаблоні." + +#: ../../src/appx/blog/spec.rst:369 +msgid "Challenge: Authentication" +msgstr "Завдання: Автентифікація" + +#: ../../src/appx/blog/spec.rst:371 +msgid "" +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." +msgstr "" +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." + +#: ../../src/appx/blog/spec.rst:373 +msgid "" +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." +msgstr "" +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." + +#: ../../src/appx/blog/spec.rst:375 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin page." +msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." + +#: ../../src/appx/blog/spec.rst:377 +msgid "" +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " +"authentication process. Invalid form should provide information about " +"error(s)." +msgstr "" +"``/register/``: користувачі повинні надати всю необхідну інформацію про " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " +"прізвище) необов'язкові. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процесу автентифікації. " +"Недійсна форма повинна надавати інформацію про помилку(и)." + +#: ../../src/appx/blog/spec.rst:382 +msgid "" +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." +msgstr "" +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." + +#: ../../src/appx/blog/spec.rst:385 +msgid "" +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." +msgstr "" +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." + +#: ../../src/appx/blog/spec.rst:390 +msgid "" +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." +msgstr "" +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." + +#: ../../src/appx/blog/spec.rst:392 +msgid "" +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." +msgstr "" +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." + +#: ../../src/appx/blog/spec.rst:395 +msgid "User related paths are restricted for non-authorized users." +msgstr "" +"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " +"користувачів." + +#: ../../src/appx/blog/spec.rst:397 +msgid "``/set-password/``" +msgstr "``/set-password/``" + +#: ../../src/appx/blog/spec.rst:398 +msgid "``/set-userdata/``" +msgstr "``/set-userdata/``" + +#: ../../src/appx/blog/spec.rst:400 +msgid "" +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." +msgstr "" +"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." + +#: ../../src/appx/blog/spec.rst:406 +msgid "" +"Adjust the order of article list according to authenticated user " +"preferences. For anonymous users keep default ordering." +msgstr "" +"Призначте зміну порядку списку статей відповідно до вподобань " +"аутентифікованого користувача. Для анонімних користувачів залиште типове " +"сортування за замовчуванням." + +#: ../../src/appx/blog/spec.rst:408 +msgid "" +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." +msgstr "" +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." + +#: ../../src/appx/blog/spec.rst:414 +msgid "Challenge: Article related forms" +msgstr "Виклик: Форми пов'язані зі статтями" + +#: ../../src/appx/blog/spec.rst:416 +msgid "" +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." +msgstr "" +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." + +#: ../../src/appx/blog/spec.rst:418 +msgid "Each created article should have at least one related topic." +msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." + +#: ../../src/appx/blog/spec.rst:419 +msgid "Implement a comment form to gather a comment from a user." +msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." + +#: ../../src/appx/blog/spec.rst:420 +msgid "" +"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " +"moment." +msgstr "" +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." + +#: ../../src/appx/blog/spec.rst:422 +msgid "Implement functionality:" +msgstr "Реалізуйте функціональність:" + +#: ../../src/appx/blog/spec.rst:424 +msgid "article creation" +msgstr "створення статті" + +#: ../../src/appx/blog/spec.rst:425 +msgid "article update" +msgstr "оновлення статті" + +#: ../../src/appx/blog/spec.rst:426 +msgid "article comment (create a related comment)" +msgstr "коментування статті (створення коментаря)" + +#: ../../src/appx/blog/spec.rst:427 +msgid "article deletion" +msgstr "видалення статті" + +#: ../../src/appx/blog/spec.rst:429 +msgid "Only authenticated users can create articles." +msgstr "Лише аутентифіковані користувачі можуть створювати статі." + +#: ../../src/appx/blog/spec.rst:430 +msgid "Article can be edited only by its author." +msgstr "Стаття може редагуватись лише її автором." + +#: ../../src/appx/blog/spec.rst:431 +msgid "Article can be deleted only by its author." +msgstr "Стаття може видалятись лише її автором." + +#: ../../src/appx/blog/spec.rst:432 +msgid "Only authenticated users can comment articles." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." + +#: ../../src/appx/blog/spec.rst:439 +msgid "Challenge: Class-Based Views" +msgstr "Завдання: Class-Based Views" + +#: ../../src/appx/blog/spec.rst:441 +msgid "Replace **all** existing views via ``CBV``." +msgstr "Замінити **всі** існуючі перегляди через ``CBV``." + +#: ../../src/appx/blog/spec.rst:442 +msgid "Existing functionality should not be corrupted." +msgstr "Існуюча функціональність не повинна бути пошкоджена." + +#: ../../src/appx/blog/spec.rst:445 +msgid "It's ok to use built-in Django CBV if needed." +msgstr "" +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." + +#: ../../src/appx/blog/spec.rst:448 +msgid "Challenge: Serializers" +msgstr "Завдання: Серіалізатори" + +#: ../../src/appx/blog/spec.rst:452 +msgid "" +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." +msgstr "" +"Серіалізатор для теми призначений лише для операцій читання (read-only). " +"Теми можна створювати лише через адміністративну сторінку." + +#: ../../src/appx/blog/spec.rst:454 +msgid "" +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." +msgstr "" +"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " +"``pk``, ``title``, ``description``." + +#: ../../src/appx/blog/spec.rst:459 +msgid "" +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." +msgstr "" +"серіалізатор коментаря статті може виконувати як операції читання, так і " +"операції запису. Проте він не може використовуватися для оновлення або " +"видалення коментаря." + +#: ../../src/appx/blog/spec.rst:461 +msgid "" +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." +msgstr "" +"Наразі можна використовувати випадкового або попередньо визначеного " +"користувача як автора коментаря. Це буде виправлено у майбутньому." + +#: ../../src/appx/blog/spec.rst:466 +msgid "" +"article serializer provides full access to articles. All operations are " +"available: list, retrieve, create, update and destroy." +msgstr "" +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " +"оновлення та видалення." + +#: ../../src/appx/blog/spec.rst:470 +msgid "User" +msgstr "Користувач" + +#: ../../src/appx/blog/spec.rst:471 +msgid "" +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." +msgstr "" +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." + +#: ../../src/appx/blog/spec.rst:477 +msgid "Challenge: API views" +msgstr "Завдання: API views" + +#: ../../src/appx/blog/spec.rst:479 +msgid "All blog-site functionality are to be reflected via REST API." +msgstr "" +"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " +"API." + +#: ../../src/appx/blog/spec.rst:482 +msgid "" +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." +msgstr "" +"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " +"запиту. Це буде виправлено у наступному розділі." + +#: ../../src/appx/blog/spec.rst:486 +msgid "Challenge: Authentication and Permissions" +msgstr "Завдання: Автентифікація та Дозволи" + +#: ../../src/appx/blog/spec.rst:488 +msgid "Implement authentication system for REST API." +msgstr "Реалізуйте систему аутентифікації для REST API." + +#: ../../src/appx/blog/spec.rst:490 +msgid "For non-authenticated users it is possible to create a new account" +msgstr "" +"Для неаутентифікованих користувачів можлива створення нового облікового " +"запису" + +#: ../../src/appx/blog/spec.rst:491 +msgid "" +"For non-authenticated users it is possible to obtain authentication data." +msgstr "" +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." + +#: ../../src/appx/blog/spec.rst:494 +msgid "" +"Access to user data is restricted. Authorized users can manipulate only " +"their own data (e.g. ``retrieve``, ``update``)." +msgstr "" +"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " +"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " +"``update``)." + +#: ../../src/appx/blog/spec.rst:496 +msgid "" +"Admins can retrieve all users data (``list``), but can't change them via " +"REST API. However, it is still possible via admin page." +msgstr "" +"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " +"можуть змінювати їх через REST API. Однак це все ще можливо через " +"адміністративну сторінку." + +#: ../../src/appx/blog/spec.rst:498 +msgid "" +"Authorized users can ``create`` articles or ``update`` and ``delete`` " +"articles created by them." +msgstr "" +"Авторизовані користувачі можуть ``create`` статті або ``update`` та " +"``delete`` статті, створені ними." + +#: ../../src/appx/blog/spec.rst:500 +msgid "Authorized users can add comments to a specified article." +msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." diff --git a/src/_locales/uk/LC_MESSAGES/appx/code_edit.po b/src/_locales/uk/LC_MESSAGES/appx/code_edit.po new file mode 100644 index 000000000..a7d577e57 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/code_edit.po @@ -0,0 +1,54 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:03+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/code_edit.txt:-1 +msgid "Code editors and IDEs for Python" +msgstr "Редактори коду та IDE для Python" + +#: ../../src/appx/code_edit.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/code_edit.txt:-1 +msgid "python, editor, ide" +msgstr "python, editor, ide" + +#: ../../src/appx/code_edit.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/appx/code_edit.txt:16 +msgid "Code Editors" +msgstr "Редактори Коду" + +#: ../../src/appx/code_edit.txt:18 +msgid "" +"Writing Python using IDLE or the Python Shell is great for simple things, " +"but those tools quickly turn larger programming projects into frustrating " +"pits of despair. Using an IDE, or even just a good dedicated code editor, " +"makes coding fun — but which one is best for you? :cite:`realpython:code-" +"edit`" +msgstr "" +"Написання на Python за допомогою IDLE або оболонки Python чудово підходить " +"для простих речей, але ці інструменти швидко перетворюють великі проекти " +"програмування на розчаровуючу яму відчаю. Використання IDE або навіть просто " +"хорошого спеціального редактора коду робить кодування цікавим — але який з " +"них найкращий для вас? :cite:`realpython:code-edit`" diff --git a/src/_locales/uk/LC_MESSAGES/appx/conv_store.po b/src/_locales/uk/LC_MESSAGES/appx/conv_store.po new file mode 100644 index 000000000..d402ef2d2 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/conv_store.po @@ -0,0 +1,558 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/conv_store.txt:-1 +msgid "Convenience store challenge" +msgstr "Завдання: продуктовий магазин" + +#: ../../src/appx/conv_store.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/conv_store.txt:-1 +msgid "python, basics, oop, object-oriented programming" +msgstr "python, basics, oop, object-oriented programming" + +#: ../../problem-sets/src/conv_store/challenge.rst:3 +msgid "Convenience Store Challenge" +msgstr "Convenience Store Challenge" + +#: ../../problem-sets/src/conv_store/challenge.rst:5 +msgid "" +"The local store is struggling with their payment registry system. The owner " +"asked you to take a look at it and to propose some ideas about the upgrade. " +"While looking on a wooden frames with rows of beads you think that this will " +"be a challenging task to bring a modern approach into this place and " +"reorganize the processes. Fortunately, you are a Python developer who knows " +"how to work with various data incomes and outcomes. After some time the " +"scope of works and timelines were discussed and wrote some notes to split " +"the entire project into individual pieces to implement step-by-step." +msgstr "" +"Місцевий магазин має проблеми з системою реєстрації платежів. Власник " +"попросив вас поглянути на нього та запропонувати деякі ідеї щодо оновлення. " +"Дивлячись на дерев'яні рами з рядами намистин, ви думаєте, це буде складним " +"завданням застосувати сучасний підхід до цього місця та реорганізувати " +"процеси. На щастя, ви розробник Python, який знає, як працювати з різними " +"доходами та результатами даних. Через деякий час обговорювалися обсяги робіт " +"і часові рамки та були написані деякі примітки, щоб розділити весь проект на " +"окремі частини для поетапної реалізації." + +#: ../../problem-sets/src/conv_store/challenge.rst:14 +msgid "Your notes are here," +msgstr "Ваші нотатки ось," + +#: ../../problem-sets/src/conv_store/challenge.rst:18 +msgid "Products and Carts" +msgstr "Товари та кошик" + +#: ../../problem-sets/src/conv_store/challenge.rst:20 +msgid "" +"It's a good idea to start with basics - the objects you're going to work " +"with. At stage one the main goal is to implement data models - classes to " +"work around data in the future." +msgstr "" +"Бажано почати з основ - об'єктів, з якими ви збираєтеся працювати. На " +"першому етапі головною метою є впровадження моделей даних - класів для " +"роботи з даними в майбутньому." + +#: ../../problem-sets/src/conv_store/challenge.rst:25 +msgid "Product" +msgstr "Товар" + +#: ../../problem-sets/src/conv_store/challenge.rst:27 +msgid "This class represents goods available to purchase in the store." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: ../../problem-sets/src/conv_store/challenge.rst:29 +msgid "Each product instance should have next attributes:" +msgstr "Кожен екземпляр продукту повинен мати такі атрибути:" + +#: ../../problem-sets/src/conv_store/challenge.rst:31 +msgid "``name`` - a product title (e.g. \"apple\", \"juice\")" +msgstr "``name`` - назва товару (прик. \"apple\", \"juice\")" + +#: ../../problem-sets/src/conv_store/challenge.rst:32 +msgid "``price`` - a price for a single product unit (e.g. 3655, 500, 12999)" +msgstr "``price`` - ціна за одну одиницю товару (прик. 3655, 500, 12999)" + +#: ../../problem-sets/src/conv_store/challenge.rst:33 +msgid "``unit`` - a size of a single product's unit (e.g. 1, 0.500, 12)" +msgstr "``unit`` - розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: ../../problem-sets/src/conv_store/challenge.rst:35 +msgid "" +"For example: **apple** costs 1059 for each 0.1 kg. This means ``name`` will " +"store ``\"apple\"``, ``price`` is ``1059`` and ``unit`` is equal to ``0.1``." +msgstr "" +"Наприклад: **яблуко** коштує 1059 за кожні 0,1 кг. Це означає, що ``name`` " +"зберігає ``\"apple\"``, ``price`` є ``1059`` і `` unit`` дорівнює ``0,1``." + +#: ../../problem-sets/src/conv_store/challenge.rst:39 +msgid "" +"``Product`` class should implement ``get_total`` method to calculate a total " +"price for a specified quantity of a product to purchase. Desired quantity " +"will be passed as an optional argument of a numeric type (``int`` or " +"``float``). In case quantity argument is omitted - just use ``unit`` " +"attribute value instead." +msgstr "" +"Клас ``Product`` повинен реалізовувати метод ``get_total`` для обчислення " +"загальної ціни на вказану кількість товару для покупки. Бажану кількість " +"буде передано як необов'язковий аргумент числового типу (``int`` або " +"``float``). Якщо аргумент кількості пропущено, просто використовуйте " +"значення атрибута ``unit``." + +#: ../../problem-sets/src/conv_store/challenge.rst:46 +#: ../../problem-sets/src/conv_store/challenge.rst:77 +msgid "Code explanation" +msgstr "Пояснення коду" + +#: conv_store.models.Product:1 of +msgid "Product model implementation" +msgstr "Реалізація моделі товару" + +#: conv_store.models.Product conv_store.models.ShoppingCart of +msgid "Variables" +msgstr "Змінні" + +#: conv_store.models.Product:3 of +msgid "the name of a product" +msgstr "назва товару" + +#: conv_store.models.Product:5 of +msgid "the price for a single product unit" +msgstr "вартість однієї одиниці товару (прик. 3655, 500, 12999)" + +#: conv_store.models.Product:7 of +msgid "the size of a single product unit" +msgstr "розмір одиниці окремого товару (прик. 1, 0.500, 12)" + +#: conv_store.models.Product:10 of +msgid "Instances of this class represent a product available for purchase." +msgstr "Цей клас представляє товари, які можна придбати в магазині." + +#: conv_store.models.Product.get_total:1 of +msgid "Return the total price for a specified amount of a product" +msgstr "Повертає загальну ціну за вказану кількість товару" + +#: conv_store.models.Product.get_total +#: conv_store.models.ShoppingCart.add_product of +msgid "Parameters" +msgstr "Параметри" + +#: conv_store.models.Product.get_total:3 of +msgid "a quantity to purchase, defaults to None" +msgstr "кількість для покупки, за замовчуванням None" + +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of +msgid "Returns" +msgstr "Повертає" + +#: conv_store.models.Product.get_total:6 of +msgid "total price for a specified amount of a product" +msgstr "вартість вказаної кількості товару" + +#: conv_store.models.Product.get_total conv_store.models.ShoppingCart.get_total +#: of +msgid "Return type" +msgstr "Тип повернення" + +#: conv_store.models.Product.get_total:9 of +msgid "" +"If the quantity argument is omitted, unit attribute value should be used " +"instead." +msgstr "" +"Якщо аргумент кількості пропущено, замість нього слід використовувати " +"значення атрибута одиниці." + +#: ../../problem-sets/src/conv_store/challenge.rst:51 +#: ../../problem-sets/src/conv_store/challenge.rst:82 +#: ../../problem-sets/src/conv_store/challenge.rst:126 +#: ../../problem-sets/src/conv_store/challenge.rst:189 +#: ../../problem-sets/src/conv_store/challenge.rst:224 +msgid "Test cases" +msgstr "Тестові приклади" + +#: ../../problem-sets/src/conv_store/challenge.rst:63 +msgid "Shopping Cart" +msgstr "Кошик для покупок" + +#: ../../problem-sets/src/conv_store/challenge.rst:65 +msgid "" +"This class represents the container for the products. It's main " +"responsibility is to store information about the purchases and their amount " +"(quantities)." +msgstr "" +"Цей клас представляє контейнер для продуктів. Його основна відповідальність " +"- зберігати інформацію про покупки та їх кількість." + +#: ../../problem-sets/src/conv_store/challenge.rst:68 +msgid "" +"Each cart instance should store data about ``Product`` objects in it and " +"corresponding quantity value for each individual product." +msgstr "" +"Кожен екземпляр кошика повинен зберігати дані про об'єкти ``Продукт`` у " +"ньому та відповідне значення кількості для кожного окремого продукту." + +#: ../../problem-sets/src/conv_store/challenge.rst:70 +msgid "" +"``ShoppingCart`` should implement ``add_product`` method to put a specified " +"quantity into a cart. ``quantity`` argument is optional, if omitted just " +"uses ``Product.unit`` value instead." +msgstr "" +"``ShoppingCart`` має реалізувати метод ``add_product``, щоб помістити " +"вказану кількість у кошик. Аргумент ``quantity`` є необов'язковим, якщо " +"пропущено, просто використовує натомість значення ``Product.unit``." + +#: ../../problem-sets/src/conv_store/challenge.rst:73 +msgid "" +"``ShoppingCart`` should implement ``get_total`` method to calculate the " +"total price for the entire cart contents." +msgstr "" +"``ShoppingCart`` має застосувати метод ``get_total`` для обчислення " +"загальної ціни всього вмісту кошика." + +#: conv_store.models.ShoppingCart:1 of +msgid "Shopping cart model implementation" +msgstr "Реалізація моделі кошика" + +#: conv_store.models.ShoppingCart:3 of +msgid "product appended to the shopping cart instance" +msgstr "товар, доданий до екземпляра кошика" + +#: conv_store.models.ShoppingCart:5 of +msgid "corresponding quantities for each product in cart" +msgstr "відповідна кількість для товару у кошику" + +#: conv_store.models.ShoppingCart:8 of +msgid "" +"In general shopping cart is a container for products. Instances of this " +"class handle product and corresponding quantity for each item inside a " +"shopping cart instance." +msgstr "" +"Загалом кошик для покупок – це контейнер для продуктів. Екземпляри цього " +"класу обробляють продукт і відповідну кількість для кожного товару в " +"екземплярі кошика для покупок." + +#: conv_store.models.ShoppingCart.add_product:1 of +msgid "Add product to the shopping cart" +msgstr "Додає товар до кошика" + +#: conv_store.models.ShoppingCart.add_product:3 of +msgid "a product instance to add to cart" +msgstr "екземпляр товару, щоб додати до кошика" + +#: conv_store.models.ShoppingCart.add_product:5 of +msgid "a quantity of a product to add. Defaults to the product unit value." +msgstr "" +"кількість продукту для додавання. За замовчуванням значення одиниці продукту." + +#: conv_store.models.ShoppingCart.add_product:9 of +msgid "" +"This method adds a product instance and corresponding quantity value to the " +"cart." +msgstr "" +"Цей метод додає екземпляр продукту та відповідне значення кількості до " +"кошика." + +#: conv_store.models.ShoppingCart.get_total:1 of +msgid "Return the total price for all the product in the cart" +msgstr "Повертає загальну вартість усіх товарів у кошику" + +#: conv_store.models.ShoppingCart.get_total:3 of +msgid "total cart price" +msgstr "загальна вартість кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:97 +msgid "Initialization, Representation and Type Casting" +msgstr "Ініціалізація, представлення та приведення типів" + +#: ../../problem-sets/src/conv_store/challenge.rst:99 +msgid "" +"It's difficult to set properties one-by-one, also it's not informative to " +"get default objects string representations. It's time to fix this." +msgstr "" +"Важко встановлювати властивості одну за одною, також " +"неінформативноотримувати представлення рядків об'єктів за замовчуванням. " +"Настав час це виправити." + +#: ../../problem-sets/src/conv_store/challenge.rst:102 +msgid "``Product`` should be initialized with all required data, no defaults." +msgstr "" +"``Product`` має бути ініціалізований усіма необхідними даними, без значень " +"за замовчуванням." + +#: ../../problem-sets/src/conv_store/challenge.rst:103 +msgid "" +"Apply ``ShoppingCart.__init__`` to separate products and quantities between " +"different carts." +msgstr "" +"Застосуйте ``ShoppingCart.__init__``, щоб розділити продукти та кількість " +"між різними візками." + +#: ../../problem-sets/src/conv_store/challenge.rst:105 +msgid "Provide a human readable representations. For example:" +msgstr "Надайте представлення, зрозумілі людині. Наприклад:" + +#: ../../problem-sets/src/conv_store/challenge.rst:107 +msgid "``Product('juice', 35.66, 1)``" +msgstr "``Product('juice', 35.66, 1)``" + +#: ../../problem-sets/src/conv_store/challenge.rst:108 +msgid "````" +msgstr "````" + +#: ../../problem-sets/src/conv_store/challenge.rst:110 +msgid "" +"While casting product instance to ``str`` type it should be equal to its " +"``name`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``str`` він повинен " +"дорівнювати значенню атрибута ``name``." + +#: ../../problem-sets/src/conv_store/challenge.rst:112 +msgid "" +"While casting product instance to ``float`` type it should be equal to its " +"``price`` attribute value." +msgstr "" +"Під час приведення екземпляра продукту до типу ``float`` він має дорівнювати " +"значенню його атрибута ``price``." + +#: ../../problem-sets/src/conv_store/challenge.rst:114 +msgid "" +"While casting shopping cart instance to ``float`` type it should be equal to " +"its total price value." +msgstr "" +"Під час приведення екземпляра кошика для покупок до типу ``float`` він має " +"дорівнювати загальному значенню ціни." + +#: ../../problem-sets/src/conv_store/challenge.rst:116 +msgid "" +"While casting shopping cart instance to ``bool`` consider it ``True`` if at " +"least one product is attach to current cart." +msgstr "" +"Під час трансляції екземпляра кошика для покупок до ``bool`` вважайте його " +"``True``, якщо принаймні один продукт приєднаний до поточного кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:119 +msgid "Implement equality operator support for your objects:" +msgstr "Запровадити підтримку оператора рівності для ваших об'єктів:" + +#: ../../problem-sets/src/conv_store/challenge.rst:121 +msgid "consider products equal if all their properties are the same" +msgstr "вважати продукти рівними, якщо всі їхні властивості однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:122 +msgid "" +"consider carts equal if products and corresponding quantities are the same" +msgstr "вважати кошики рівними, якщо продукти та відповідна кількість однакові" + +#: ../../problem-sets/src/conv_store/challenge.rst:148 +msgid "Payment Processors" +msgstr "Опрацювання платежів" + +#: ../../problem-sets/src/conv_store/challenge.rst:150 +msgid "" +"The owner asked you to implement a flexible payment system. Purchasing the " +"shopping card consists of several steps:" +msgstr "" +"Власник попросив вас запровадити гнучку платіжну систему. Придбання картки " +"покупок складається з кількох кроків:" + +#: ../../problem-sets/src/conv_store/challenge.rst:153 +msgid "cart validation - it should not be empty or already purchased" +msgstr "перевірка кошика - він не повинен бути порожнім або вже придбаним" + +#: ../../problem-sets/src/conv_store/challenge.rst:154 +msgid "payment validation - various payment types requires various validations" +msgstr "підтвердження платежу - різні типи платежу вимагають різних перевірок" + +#: ../../problem-sets/src/conv_store/challenge.rst:155 +msgid "purchasing the cart" +msgstr "купівля кошика" + +#: ../../problem-sets/src/conv_store/challenge.rst:157 +msgid "" +"For now there are two payment types available in the store: cash and credit " +"card, but they maybe extended at any time." +msgstr "" +"Наразі в магазині доступні два типи оплати: готівка та кредитна картка, але " +"їх можна продовжити в будь-який час." + +#: ../../problem-sets/src/conv_store/challenge.rst:160 +msgid "" +"Update the ``ShoppingCart`` class to handle ``purchased`` state. Make this " +"property *protected*, since it should not be accessed outside the card " +"instance." +msgstr "" +"Оновіть клас ``ShoppingCart`` для обробки стану ``purchased``. Зробіть цю " +"властивість *protected*, оскільки до неї не слід звертатися поза екземпляром " +"картки." + +#: ../../problem-sets/src/conv_store/challenge.rst:163 +msgid "" +"Implement ``PaymentValidator`` class with ``is_valid`` that takes no " +"arguments and return a value of a boolean type. This is an abstract class " +"for the future usage." +msgstr "" +"Реалізуйте клас ``PaymentValidator`` з ``is_valid``, який не приймає " +"аргументів і повертає значення логічного типу. Це абстрактний клас для " +"майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:166 +msgid "" +"Implement ``PaymentProcessor`` class with ``purchase`` method that takes a " +"``ShoppingCart`` object and returns nothing. This is an abstract class for " +"the future usage." +msgstr "" +"Реалізуйте клас ``PaymentProcessor`` з методом ``purchase``, який бере " +"об'єкт ``ShoppingCart`` і нічого не повертає. Це абстрактний клас для " +"майбутнього використання." + +#: ../../problem-sets/src/conv_store/challenge.rst:169 +msgid "" +"Inherit ``CashPaymentValidator`` from the base validator. The instances of " +"this class are considered to be always valid." +msgstr "" +"Успадкувати ``CashPaymentValidator`` від базового валідатора. Екземпляри " +"цього класу вважаються завжди дійсними." + +#: ../../problem-sets/src/conv_store/challenge.rst:171 +msgid "Inherit ``CodeValidator`` from the base validator." +msgstr "Успадкувати ``CodeValidator`` від основного валідатора." + +#: ../../problem-sets/src/conv_store/challenge.rst:173 +msgid "" +"The instances of this class are created with ``security_code`` argument." +msgstr "" +"Екземпляри цього класу створено за допомогою аргументу ``security_code``." + +#: ../../problem-sets/src/conv_store/challenge.rst:174 +msgid "" +"``is_valid`` method should ask a customer for a security code and check it " +"against the stored value. In case codes are equal payment considered to be " +"valid." +msgstr "" +"Метод ``is_valid`` має запитати у клієнта код безпеки та перевірити його зі " +"збереженим значенням. Якщо коди однакові, оплата вважається дійсною." + +#: ../../problem-sets/src/conv_store/challenge.rst:178 +msgid "" +"Create ``CashPaymentProcessor`` that combines ``CashValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing cash payment...\" and \"Cart bill: {float total}\" should be " +"printed out." +msgstr "" +"Створіть ``CashPaymentProcessor``, який поєднує поведінку ``CashValidator`` " +"і ``PaymentProcessor``. Під час купівлі в кошику з'являються повідомлення " +"\"Обробка готівкового платежу...\" і \"Рахунок у кошику : {float total}\" " +"слід роздрукувати." + +#: ../../problem-sets/src/conv_store/challenge.rst:183 +msgid "" +"Create ``CardPaymentProcessor`` that combines ``CodeValidator`` and " +"``PaymentProcessor`` behaviors. While purchasing the cart the messages " +"\"Processing card payment...\" and \"Security code: {code}\" should be " +"printed out." +msgstr "" +"Створіть ``CardPaymentProcessor``, який поєднує поведінку ``CodeValidator`` " +"і ``PaymentProcessor``. Під час купівлі кошику слід роздрукувати " +"повідомлення \"Обробка платежу карткою...\" і \"Код безпеки : {code}\"." + +#: ../../problem-sets/src/conv_store/challenge.rst:203 +msgid "More Enhancements for Shopping Carts" +msgstr "Більше покращень для кошиків для покупок" + +#: ../../problem-sets/src/conv_store/challenge.rst:205 +msgid "Make your ``ShoppingCart`` an actual container" +msgstr "Зробіть ваш ``ShoppingCart`` справжнім контейнером" + +#: ../../problem-sets/src/conv_store/challenge.rst:207 +msgid "" +"Implement ``len(cart_obj)`` and make it return the number of products in the " +"cart." +msgstr "" +"Реалізуйте ``len(cart_obj)`` і змусьте його повертати кількість продуктів у " +"кошику." + +#: ../../problem-sets/src/conv_store/challenge.rst:209 +msgid "" +"Implement ``cart[...]`` behavior to take a ``tuple`` containing product and " +"corresponding quantity (type hint: ``Tuple[Product, Union[int, float]]``)." +msgstr "" +"Реалізуйте поведінку ``cart[...]``, щоб повертати ``tuple``, що містить " +"товар та відповідну кількість (type hint: ``Tuple[Product, Union[int, " +"float]]``)." + +#: ../../problem-sets/src/conv_store/challenge.rst:213 +msgid "" +"Make your ``ShoppingCart`` iterable - let it provide the product instance " +"and corresponding quantity for each iteration." +msgstr "" +"Зробіть ваш ``ShoppingCart`` повторюваним - дозвольте йому надавати " +"примірник продукту та відповідну кількість для кожної ітерації." + +#: ../../problem-sets/src/conv_store/challenge.rst:215 +msgid "" +"Avoid products duplication. In case someone tries to put the product into a " +"cart and this product already is present there, do not it for the second " +"time - adjust corresponding quantity value instead." +msgstr "" +"Уникайте дублювання продуктів. Якщо хтось намагається покласти продукт у " +"кошик, і цей продукт уже там присутній, не робіть цього вдруге - змініть " +"натомість відповідне значення кількості." + +#: ../../problem-sets/src/conv_store/challenge.rst:218 +msgid "" +"Implement ``remove_product`` method to completely remove some product from " +"the cart." +msgstr "" +"Застосуйте метод ``remove_product``, щоб повністю видалити деякі продукти з " +"кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:220 +msgid "" +"Implement ``sub_product`` to decrease some product quantity. If quantity is " +"equal to 0 (zero) or less - remove product from the cart." +msgstr "" +"Застосуйте ``sub_product``, щоб зменшити кількість продукту. Якщо кількість " +"дорівнює 0 (нуль) або менше - вилучіть продукт із кошика." + +#: ../../problem-sets/src/conv_store/challenge.rst:249 +msgid "Testing Software" +msgstr "Тестування програмного забезпечення" + +#: ../../problem-sets/src/conv_store/challenge.rst:251 +msgid "Add autotests for ``ShoppingCart`` and ``Product`` models." +msgstr "Додати автотести для моделей ``ShoppingCart`` і ``Product``." + +#: ../../problem-sets/src/conv_store/challenge.rst:253 +msgid "Tests should be located inside of \"tests\" directory." +msgstr "Тести мають бути розташовані всередині каталогу \"tests\"." + +#: ../../problem-sets/src/conv_store/challenge.rst:254 +msgid "``pytest`` and ``coverage`` libraries will be used for testing." +msgstr "" +"Для тестування використовуватимуться бібліотеки ``pytest`` і ``coverage``." + +#: ../../problem-sets/src/conv_store/challenge.rst:255 +msgid "Project dependencies are to be updated." +msgstr "Залежності проекту потрібно оновити." diff --git a/src/_locales/uk/LC_MESSAGES/appx/env_path.po b/src/_locales/uk/LC_MESSAGES/appx/env_path.po new file mode 100644 index 000000000..1a071966c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/env_path.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/env_path.txt:-1 +msgid "Setting up environment variables" +msgstr "Встановлення змінних середовища" + +#: ../../src/appx/env_path.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/env_path.txt:-1 +msgid "settings, environment, variables" +msgstr "settings, environment, variables" + +#: ../../src/appx/env_path.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/appx/env_path.txt:16 +msgid "Issue - System Environment PATH" +msgstr "Проблема - System Environment PATH" diff --git a/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po b/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po new file mode 100644 index 000000000..e131f1d55 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po @@ -0,0 +1,1187 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:06+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/libms/spec.rst:3 +msgid "Library Management System" +msgstr "Система Керування Бібліотекою" + +#: ../../src/appx/libms/spec.rst:5 +msgid "" +"The Library Management System is a Django-based web application that offers " +"a digital platform for managing and interacting with a library's collection. " +"It streamlines the processes of book lending, returns, and inventory " +"management, while ensuring easy access for users and librarians alike. " +"Through this system, users can search for available books, place borrowing " +"requests, and manage their borrowed items. Librarians, on the other hand, " +"oversee the addition, update, and removal of book records, and can approve " +"or decline borrowing requests. The system also supports diverse user roles, " +"from regular members to staff and administrators, each with distinct " +"capabilities." +msgstr "" +"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " +"пропонує цифрову платформу для управління та взаємодії з колекцією " +"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " +"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " +"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " +"книги, робити запити на позику та керувати позиченими предметами. " +"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " +"записів книг та можуть схвалювати або відхиляти запити на позику. Система " +"також підтримує різноманітні ролі користувачів, від звичайних членів до " +"персоналу та адміністраторів, кожен з яких має відмінні можливості." + +#: ../../src/appx/libms/spec.rst:15 +msgid "" +"A well-structured user interface ensures that all functionalities are easily " +"accessible, making the library management process seamless and efficient. " +"This project aims to merge traditional library functions with modern " +"technological innovations, promoting efficiency and an enhanced user " +"experience." +msgstr "" +"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " +"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " +"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " +"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " +"покращенню користувацького досвіду." + +#: ../../src/appx/libms/spec.rst:22 +msgid "User roles" +msgstr "Ролі користувачів" + +#: ../../src/appx/libms/spec.rst:25 +msgid "" +"It is essential for developers to consider security aspects when " +"implementing these roles to ensure that users cannot perform actions outside " +"their designated role's scope." +msgstr "" +"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " +"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " +"рамки призначеної їм ролі." + +#: ../../src/appx/libms/spec.rst:30 +msgid "Admins" +msgstr "Адміністратори" + +#: ../../src/appx/libms/spec.rst:32 +msgid "" +"Superusers have full control over the entire system. They can access and " +"manage all functionalities provided by the Django admin site." +msgstr "" +"Адміністратори мають повний контроль над усією системою. Вони можуть " +"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " +"керувати ними." + +#: ../../src/appx/libms/spec.rst:35 +msgid "Admins can create, modify, or delete any record within the application." +msgstr "" +"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " +"додатку." + +#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 +#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 +msgid "Capabilities" +msgstr "Можливості" + +#: ../../src/appx/libms/spec.rst:39 +msgid "Access Django admin site" +msgstr "Доступ до адміністративного сайту Django" + +#: ../../src/appx/libms/spec.rst:42 +msgid "Librarians" +msgstr "Бібліотекарі" + +#: ../../src/appx/libms/spec.rst:44 +msgid "" +"Staff personnel are in charge of day-to-day operations within the library. " +"They can add new books to the library's collection, manage existing books' " +"details, and accept or decline borrow requests from regular users." +msgstr "" +"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " +"можуть додавати нові книги до бібліотечної колекції, керувати даними про " +"наявні книги, а також приймати або відхиляти запити від постійних " +"користувачів." + +#: ../../src/appx/libms/spec.rst:50 +msgid "Management of the library catalogue" +msgstr "Управління бібліотечним каталогом" + +#: ../../src/appx/libms/spec.rst:52 +msgid "Add, modify or delete authors" +msgstr "Додавати, змінювати або видаляти авторів" + +#: ../../src/appx/libms/spec.rst:53 +msgid "Add, modify or delete genres" +msgstr "Додавати, змінювати або видаляти жанри" + +#: ../../src/appx/libms/spec.rst:54 +msgid "Add, modify or delete books' details" +msgstr "Додавати, змінювати або видаляти дані про книги" + +#: ../../src/appx/libms/spec.rst:56 +msgid "Review borrow requests from regular users" +msgstr "Переглядати запити на позичення від користувачів" + +#: ../../src/appx/libms/spec.rst:57 +msgid "Accept or decline borrow requests" +msgstr "Приймати або відхиляти запити на позичення" + +#: ../../src/appx/libms/spec.rst:58 +msgid "Register returned books and update their status" +msgstr "Реєструвати повернені книги та оновлювати їх статус" + +#: ../../src/appx/libms/spec.rst:61 +msgid "Regular" +msgstr "Звичайний" + +#: ../../src/appx/libms/spec.rst:63 +msgid "" +"Regular registered users are the members of the library. They can search " +"books, request to borrow them, and are responsible for returning borrowed " +"books on time." +msgstr "" +"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " +"книги, запитувати їх, а також несуть відповідальність за своєчасне " +"повернення позичених книг." + +#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 +msgid "Browse the books' catalogue" +msgstr "Переглядати каталог книг" + +#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 +msgid "View details of a book" +msgstr "Переглядати деталі книги" + +#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 +msgid "Search books" +msgstr "Шукати книги" + +#: ../../src/appx/libms/spec.rst:72 +msgid "Request to borrow available books" +msgstr "Робити запит на позичення доступних книжок" + +#: ../../src/appx/libms/spec.rst:73 +msgid "Check due date for returned books" +msgstr "Перевіряти термін повернення запозичених книжок" + +#: ../../src/appx/libms/spec.rst:74 +msgid "Return borrowed books" +msgstr "Повертати запозичені книги" + +#: ../../src/appx/libms/spec.rst:77 +msgid "Anonymous" +msgstr "Анонімні" + +#: ../../src/appx/libms/spec.rst:79 +msgid "Anonymous users are visitors who haven't logged into the system." +msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." + +#: ../../src/appx/libms/spec.rst:86 +msgid "Access to the registration or login pages" +msgstr "Доступ до сторінок реєстрації або входу" + +#: ../../src/appx/libms/spec.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../src/appx/libms/spec.rst:93 +msgid "Author model" +msgstr "Модель авторів" + +#: ../../src/appx/libms/spec.rst:95 +msgid "" +"The ``Author`` model captures the details of the person, or group " +"responsible for creating the book." +msgstr "" +"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " +"за створення книги." + +#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 +#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 +msgid "Attributes" +msgstr "Атрибути" + +#: ../../src/appx/libms/spec.rst +msgid "Name" +msgstr "Name" + +#: ../../src/appx/libms/spec.rst:102 +msgid "The full name of the author. This should be limited to 255 characters." +msgstr "Повне ім'я автора. Не більше 255 символів." + +#: ../../src/appx/libms/spec.rst +msgid "Bio" +msgstr "Bio" + +#: ../../src/appx/libms/spec.rst:105 +msgid "A brief biography or description of the author." +msgstr "Коротка біографія або опис автора." + +#: ../../src/appx/libms/spec.rst:108 +msgid "Genre model" +msgstr "Модель жанра" + +#: ../../src/appx/libms/spec.rst:110 +msgid "" +"The ``Genre`` model represents the category or type of content a book " +"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " +"etc. Since a book can belong to more than one category at a time, it is " +"implemented as a dedicated model." +msgstr "" +"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " +"книга, наприклад, \"Художня література\", \"Нехудожня література\", " +"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " +"категорій одночасно, вона реалізована як окрема модель." + +#: ../../src/appx/libms/spec.rst:118 +msgid "The name of the genre." +msgstr "Назва жанру." + +#: ../../src/appx/libms/spec.rst:121 +msgid "Book model" +msgstr "Модель книги" + +#: ../../src/appx/libms/spec.rst:123 +msgid "" +"The ``Book`` model represents a physical book in the library's collection. " +"Each book record captures essential bibliographic information, as well as " +"details related to its current status in the library (e.g. available, " +"borrowed etc.)." +msgstr "" +"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " +"запис про книгу містить основну бібліографічну інформацію, а також деталі, " +"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " +"тощо)." + +#: ../../src/appx/libms/spec.rst +msgid "Title" +msgstr "Title" + +#: ../../src/appx/libms/spec.rst:131 +msgid "The name or title of the book (255 characters or fewer)." +msgstr "Назва книги (255 символів або менше)." + +#: ../../src/appx/libms/spec.rst +msgid "Summary" +msgstr "Summary" + +#: ../../src/appx/libms/spec.rst:134 +msgid "A brief description or synopsis of the book." +msgstr "Короткий опис або синопсис книги." + +#: ../../src/appx/libms/spec.rst +msgid "ISBN" +msgstr "ISBN" + +#: ../../src/appx/libms/spec.rst:137 +msgid "International Standard Book Number, a unique identifier for books." +msgstr "" +"International Standard Book Number, унікальний ідентифікатор для книг.." + +#: ../../src/appx/libms/spec.rst +msgid "Available" +msgstr "Available" + +#: ../../src/appx/libms/spec.rst:140 +msgid "" +"Current available status of the book. Either ``True`` or ``False``. Books " +"are available by default." +msgstr "" +"Поточний статус доступності книги. Або ``True``, або ``False``. За " +"замовчуванням книги доступні." + +#: ../../src/appx/libms/spec.rst +msgid "Published date" +msgstr "Published date" + +#: ../../src/appx/libms/spec.rst:144 +msgid "The date when the book was published." +msgstr "Дата, коли книга була опублікована." + +#: ../../src/appx/libms/spec.rst +msgid "Publisher" +msgstr "Publisher" + +#: ../../src/appx/libms/spec.rst:147 +msgid "" +"The entity or company responsible for the production and distribution of the " +"book." +msgstr "" +"Організація або компанія, відповідальна за виробництво та розповсюдження " +"книги." + +#: ../../src/appx/libms/spec.rst +msgid "Genre(s)" +msgstr "Genre(s)" + +#: ../../src/appx/libms/spec.rst:151 +msgid "" +"The category or type of content the book falls under (e.g., Fiction, Non-" +"Fiction, Science)." +msgstr "" +"Категорія або тип контенту, до якого належить книга (наприклад, художня " +"література, нон-фікшн, наукова література)." + +#: ../../src/appx/libms/spec.rst +msgid "Author(s)" +msgstr "Author(s)" + +#: ../../src/appx/libms/spec.rst:156 +msgid "" +"The name of the person or group responsible for creating the content of the " +"book." +msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." + +#: ../../src/appx/libms/spec.rst +msgid "Borrower" +msgstr "Borrower" + +#: ../../src/appx/libms/spec.rst:160 +msgid "The user who has currently borrowed the book, if applicable." +msgstr "Користувач, який наразі позичив книгу, якщо це можливо." + +#: ../../src/appx/libms/spec.rst:163 +msgid "Borrow request model" +msgstr "Модель запиту на позику" + +#: ../../src/appx/libms/spec.rst:165 +msgid "" +"The ``BorrowRequest`` model captures the intent of a user to borrow a " +"specific book. It tracks the status of the request, whether it's pending, " +"approved, declined, or completed." +msgstr "" +"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " +"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." + +#: ../../src/appx/libms/spec.rst +msgid "Book" +msgstr "Book" + +#: ../../src/appx/libms/spec.rst:173 +msgid "A reference to a book to be borrowed." +msgstr "Посилання на книгу, яку потрібно взяти." + +#: ../../src/appx/libms/spec.rst:176 +msgid "A reference to a user who wants to borrow a book." +msgstr "Посилання на користувача, який хоче взяти книгу." + +#: ../../src/appx/libms/spec.rst +msgid "Status" +msgstr "Status" + +#: ../../src/appx/libms/spec.rst:179 +msgid "The current status of the request." +msgstr "Поточний статус заявки." + +#: ../../src/appx/libms/spec.rst:181 +msgid "pending" +msgstr "pending" + +#: ../../src/appx/libms/spec.rst:182 +msgid "approved" +msgstr "approved" + +#: ../../src/appx/libms/spec.rst:183 +msgid "collected" +msgstr "collected" + +#: ../../src/appx/libms/spec.rst:184 +msgid "complete" +msgstr "complete" + +#: ../../src/appx/libms/spec.rst:185 +msgid "declined" +msgstr "declined" + +#: ../../src/appx/libms/spec.rst:187 +msgid "" +"The status constants should be encapsulated within the ``BorrowRequest`` " +"model." +msgstr "" +"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." + +#: ../../src/appx/libms/spec.rst +msgid "Overdue" +msgstr "Overdue" + +#: ../../src/appx/libms/spec.rst:202 +msgid "A flag indicating if a borrow request was overdue." +msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." + +#: ../../src/appx/libms/spec.rst +msgid "Request date" +msgstr "Request date" + +#: ../../src/appx/libms/spec.rst:205 +msgid "The date the borrow request was made. This is required." +msgstr "Дата подання запиту на позику. Це обов'язкова інформація." + +#: ../../src/appx/libms/spec.rst +msgid "Approval date" +msgstr "Approval date" + +#: ../../src/appx/libms/spec.rst:208 +msgid "The date the request was approved, if applicable. Optional." +msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." + +#: ../../src/appx/libms/spec.rst +msgid "Due date" +msgstr "Due date" + +#: ../../src/appx/libms/spec.rst:211 +msgid "" +"The date by which the book should be returned. Optional, should only be set " +"if the request if approved." +msgstr "" +"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " +"у разі схвалення запиту." + +#: ../../src/appx/libms/spec.rst +msgid "Complete date" +msgstr "Complete date" + +#: ../../src/appx/libms/spec.rst:215 +msgid "" +"The date the book was returned and the borrowing request was completed. " +"Optional, should only be set if the request has reached the \"Complete\" " +"status." +msgstr "" +"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " +"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." + +#: ../../src/appx/libms/spec.rst:220 +msgid "Relationships" +msgstr "Відносини" + +#: ../../src/appx/libms/spec.rst:228 +msgid "Book to author" +msgstr "Книга до автору" + +#: ../../src/appx/libms/spec.rst:230 +msgid "" +"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " +"can have **one or more** ``authors``. This establishes a **many-to-many** " +"relationship between the two entities." +msgstr "" +"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " +"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " +"**багато-до-багатьох** між цими двома сутностями." + +#: ../../src/appx/libms/spec.rst:235 +msgid "Book to genre" +msgstr "Книга до жанру" + +#: ../../src/appx/libms/spec.rst:237 +msgid "" +"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " +"However a ``Book`` might not belong to any genre. This relationship between " +"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " +"possibility of zero genres for a book." +msgstr "" +"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " +"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " +"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " +"можливістю нульових жанрів для книги." + +#: ../../src/appx/libms/spec.rst:243 +msgid "Book to borrow request" +msgstr "Книга до запиту на позику" + +#: ../../src/appx/libms/spec.rst:245 +msgid "" +"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " +"relationship." +msgstr "" +"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " +"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " +"зв'язок **багато-до-одного**." + +#: ../../src/appx/libms/spec.rst:250 +msgid "User to borrow request" +msgstr "Користувач до запиту на позику" + +#: ../../src/appx/libms/spec.rst:252 +msgid "" +"Each ``User`` can make multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers to only one book, forming a **many-to-one** " +"relationship." +msgstr "" +"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " +"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " +"``багато до однієї``." + +#: ../../src/appx/libms/spec.rst:256 +msgid "User to book (as a borrower)" +msgstr "Користувач до книги (як запозичувач)" + +#: ../../src/appx/libms/spec.rst:258 +msgid "" +"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " +"``Book`` can be borrowed by one user only. This forms a **one-to-one** " +"relationship." +msgstr "" +"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " +"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " +"відносини \"один до одного\"." + +#: ../../src/appx/libms/spec.rst:264 +msgid "Views and templates" +msgstr "Подання та шаблони" + +#: ../../src/appx/libms/spec.rst:267 +msgid "Admin site" +msgstr "Адмін-сайт" + +#: ../../src/appx/libms/spec.rst:269 +msgid "" +"Admin site provides the full control over the entire system. Only admins are " +"permitted to use admin site. Librarians should use their dedicated views to " +"perform operations, except special cases." +msgstr "" +"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " +"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " +"повинні використовувати свої виділені подання для виконання операцій, за " +"винятком особливих випадків." + +#: ../../src/appx/libms/spec.rst:275 +msgid "Authentication" +msgstr "Автентифікація" + +#: ../../src/appx/libms/spec.rst:278 +msgid "Login" +msgstr "Логін" + +#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 +#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 +#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 +#: ../../src/appx/libms/spec.rst:512 +msgid "Template" +msgstr "Template" + +#: ../../src/appx/libms/spec.rst:282 +msgid "" +"A form with fields for entering a username and a password, and a submit " +"button." +msgstr "" +"Форма з полями для введення імені користувача та пароля, а також кнопкою " +"\"Надіслати\"." + +#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 +#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 +#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 +#: ../../src/appx/libms/spec.rst:499 +msgid "View logic" +msgstr "View logic" + +#: ../../src/appx/libms/spec.rst:286 +msgid "" +"Validate entered credentials and authenticate the user. In case of incorrect " +"credentials, display an error message." +msgstr "" +"Перевірити введені облікові дані та автентифікувати користувача. У разі " +"неправильних облікових даних вивести повідомлення про помилку." + +#: ../../src/appx/libms/spec.rst:290 +msgid "Registration" +msgstr "Реєстрація" + +#: ../../src/appx/libms/spec.rst:294 +msgid "A form for new user registration. **Required** fields are:" +msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" + +#: ../../src/appx/libms/spec.rst:296 +msgid "username" +msgstr "username" + +#: ../../src/appx/libms/spec.rst:297 +msgid "first name" +msgstr "first name" + +#: ../../src/appx/libms/spec.rst:298 +msgid "last name" +msgstr "last name" + +#: ../../src/appx/libms/spec.rst:299 +msgid "password" +msgstr "password" + +#: ../../src/appx/libms/spec.rst:300 +msgid "confirm password" +msgstr "confirm password" + +#: ../../src/appx/libms/spec.rst:304 +msgid "Upon submission, the view should validate the provided data:" +msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" + +#: ../../src/appx/libms/spec.rst:306 +msgid "Check if username is already taken." +msgstr "Перевірте, чи не зайнято вже ім'я користувача." + +#: ../../src/appx/libms/spec.rst:307 +msgid "Ensure that password and confirm password fields match." +msgstr "" +"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." + +#: ../../src/appx/libms/spec.rst:308 +msgid "" +"Save the user's data if all validations pass. Otherwise, display appropriate " +"error messages." +msgstr "" +"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " +"відобразити відповідні повідомлення про помилки." + +#: ../../src/appx/libms/spec.rst:311 +msgid "" +"When saving passwords in the database, always store them in a hashed format, " +"never in plain text." +msgstr "" +"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " +"не у вигляді простого тексту." + +#: ../../src/appx/libms/spec.rst:315 +msgid "" +"Django's built-in ``User`` model and authentication system handle password " +"hashing by default, which is a big plus." +msgstr "" +"Вбудована в Django модель ``User`` та система автентифікації за " +"замовчуванням обробляє хешування паролів, що є великим плюсом." + +#: ../../src/appx/libms/spec.rst:319 +msgid "Borrowing History" +msgstr "Історія запозичень" + +#: ../../src/appx/libms/spec.rst:321 +msgid "This view is available only for authenticated users." +msgstr "Це подання доступне лише для авторизованих користувачів." + +#: ../../src/appx/libms/spec.rst:325 +msgid "" +"Users can see the list of **all** their borrows requests, regardless of " +"approve/decline status." +msgstr "" +"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " +"від статусу схвалення/відхилення." + +#: ../../src/appx/libms/spec.rst:330 +msgid "Authenticated users can see only their own borrow requests." +msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." + +#: ../../src/appx/libms/spec.rst:331 +msgid "" +"Librarians and admins can access borrows requests list for any user, " +"registered in the library system." +msgstr "" +"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " +"будь-якого користувача, зареєстрованого в бібліотечній системі." + +#: ../../src/appx/libms/spec.rst:335 +msgid "Library collection" +msgstr "Бібліотечний фонд" + +#: ../../src/appx/libms/spec.rst:337 +msgid "" +"These views are generally available for all (including anonymous) users. The " +"functionality for authenticated users include books borrowing." +msgstr "" +"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " +"користувачів. Функціонал для аутентифікованих користувачів включає в себе " +"можливість позичати книги." + +#: ../../src/appx/libms/spec.rst:341 +msgid "Books list" +msgstr "Список літератури" + +#: ../../src/appx/libms/spec.rst:345 +msgid "A list (or table) of books. Each book entry should provide information:" +msgstr "" +"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " +"книгу:" + +#: ../../src/appx/libms/spec.rst:347 +msgid "title" +msgstr "title" + +#: ../../src/appx/libms/spec.rst:348 +msgid "author(s)" +msgstr "автор(и)" + +#: ../../src/appx/libms/spec.rst:349 +msgid "summary (truncated if too long, 30 words or fewer)" +msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" + +#: ../../src/appx/libms/spec.rst:350 +msgid "availability status (either **Available** or **Unavailable**)" +msgstr "статус доступності (**Доступний** або **Не доступний**)" + +#: ../../src/appx/libms/spec.rst:354 +msgid "Querying the data" +msgstr "Запит даних" + +#: ../../src/appx/libms/spec.rst:356 +msgid "Fetch **all** books from the database" +msgstr "Отримати **усі** книги з бази даних" + +#: ../../src/appx/libms/spec.rst:358 +msgid "Checking availability status (visual mark)" +msgstr "Перевірка статусу доступності (візуальна позначка)" + +#: ../../src/appx/libms/spec.rst:360 +msgid "" +"For each book, determine its availability status. Check ``Book.available`` " +"flag." +msgstr "" +"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." +"available``." + +#: ../../src/appx/libms/spec.rst:364 +msgid "" +"A user can still create a borrowing request, regardless of the book " +"availability status. This is only the visual mark." +msgstr "" +"Користувач все одно може створити запит на позику, незалежно від статусу " +"доступності книги. Це лише візуальна позначка." + +#: ../../src/appx/libms/spec.rst:368 +msgid "Detail view" +msgstr "Детальний перегляд" + +#: ../../src/appx/libms/spec.rst:372 +msgid "" +"The detailed view of a specific book, presenting comprehensive information:" +msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" + +#: ../../src/appx/libms/spec.rst:374 +msgid "**Title**: Display the book's title prominently." +msgstr "**Назва**: Покажіть назву книги на видному місці." + +#: ../../src/appx/libms/spec.rst:375 +msgid "**Genre(s)**: List all associated genres (if any)." +msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." + +#: ../../src/appx/libms/spec.rst:376 +msgid "**Author(s)**: List all associated authors." +msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." + +#: ../../src/appx/libms/spec.rst:377 +msgid "**ISBN**: The International Standard Book Number." +msgstr "**ISBN**: Міжнародний стандартний номер книги." + +#: ../../src/appx/libms/spec.rst:378 +msgid "**Published Date**: When the book was published." +msgstr "**Дата публікації**: Коли вийшла друком книга." + +#: ../../src/appx/libms/spec.rst:379 +msgid "" +"**Publisher**: The name of the entity or company responsible for publishing" +msgstr "" +"**Видавець**: Назва організації або компанії, відповідальної за публікацію" + +#: ../../src/appx/libms/spec.rst:380 +msgid "**Summary**: A full summary or description of the book. the book." +msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." + +#: ../../src/appx/libms/spec.rst:382 +msgid "**Action Buttons** (For authenticated users only):" +msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" + +#: ../../src/appx/libms/spec.rst:384 +msgid "" +"**Borrow Request Button**: If the user has no associated borrow request they " +"can create a new one." +msgstr "" +"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " +"позику, він може створити новий." + +#: ../../src/appx/libms/spec.rst:386 +msgid "" +"**Gather Book Button**: If the user's borrow request for this book has been " +"approved, allow the user to confirm they've picked up the book." +msgstr "" +"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " +"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." + +#: ../../src/appx/libms/spec.rst:391 +msgid "**Fetching Book Details**:" +msgstr "**Доступ до деталей книги**:" + +#: ../../src/appx/libms/spec.rst:393 +msgid "" +"Use the book's identifier (usually a primary key) to fetch its details from " +"the database." +msgstr "" +"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " +"інформацію про неї з бази даних." + +#: ../../src/appx/libms/spec.rst:396 +msgid "**Checking User Authentication**:" +msgstr "**Перевірка автентичності користувача**:" + +#: ../../src/appx/libms/spec.rst:398 +msgid "" +"Determine if a user is authenticated. If they are, display the appropriate " +"action buttons based on the book's availability status and any existing " +"borrow requests by the user." +msgstr "" +"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " +"кнопки дій на основі статусу доступності книги та наявних запитів " +"користувача на позику." + +#: ../../src/appx/libms/spec.rst:402 +msgid "**Handling Borrow Requests**:" +msgstr "**Обробка запитів на позику**:" + +#: ../../src/appx/libms/spec.rst:404 +msgid "If an authenticated user clicks on the \"Borrow Request\" button:" +msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" + +#: ../../src/appx/libms/spec.rst:406 +msgid "" +"Create a new borrow request in the ``BorrowRequest`` model with status " +"\"pending\"." +msgstr "" +"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " +"розгляді\"." + +#: ../../src/appx/libms/spec.rst:408 +msgid "Update the book's status to \"Awaiting approval\"." +msgstr "Оновіть статус книги на \"Очікує затвердження\"." + +#: ../../src/appx/libms/spec.rst:409 +msgid "" +"Redirect the user to a confirmation page or display a message indicating the " +"request has been made." +msgstr "" +"Перенаправлення користувача на сторінку підтвердження або відображення " +"повідомлення про те, що запит було зроблено." + +#: ../../src/appx/libms/spec.rst:412 +msgid "**Handling Book Gathering**:" +msgstr "**Опрацювання Позики Книги**:" + +#: ../../src/appx/libms/spec.rst:414 +msgid "" +"If an authenticated user has an approved borrow request and clicks the " +"\"Gather Book\" button:" +msgstr "" +"Якщо авторизований користувач має схвалений запит на позику і натискає " +"кнопку \"Зібрати книгу\":" + +#: ../../src/appx/libms/spec.rst:417 +msgid "Update the book's status to \"Borrowed\"." +msgstr "Оновіть статус книги на \"Позичена\"." + +#: ../../src/appx/libms/spec.rst:418 +msgid "Update the borrow request's status to \"complete\"." +msgstr "Оновіть статус запиту на позику до \"завершено\"." + +#: ../../src/appx/libms/spec.rst:419 +msgid "" +"Redirect the user to a confirmation page or display a message indicating " +"they've picked up the book." +msgstr "" +"Перенаправляйте користувача на сторінку підтвердження або показуйте " +"повідомлення про те, що він забрав книгу." + +#: ../../src/appx/libms/spec.rst:423 +msgid "" +"Always ensure the user's actions are authenticated and authorized. This " +"prevents unauthorized borrow requests or gathering of books. Also, consider " +"adding error handling to manage cases where the book's details cannot be " +"fetched or any other unexpected issues." +msgstr "" +"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " +"Це запобігає несанкціонованим запитам на позику або збору книг. Також " +"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " +"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." + +#: ../../src/appx/libms/spec.rst:429 +msgid "Books management" +msgstr "Управління книгами" + +#: ../../src/appx/libms/spec.rst:431 +msgid "These views are available only for staff (librarians and admins)." +msgstr "" +"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." + +#: ../../src/appx/libms/spec.rst:434 +msgid "Authors and genres management" +msgstr "Управління авторами та жанрами" + +#: ../../src/appx/libms/spec.rst:436 +msgid "" +"Only librarians and admins can add, modify or delete authors and genres. No " +"additional views for CRUD operations required (except admin site). " +"Librarians are allowed to access authors and genres via admin site. Only " +"admins can remove authors or genres." +msgstr "" +"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " +"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " +"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " +"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " +"жанри." + +#: ../../src/appx/libms/spec.rst:442 +msgid "Book creation and update" +msgstr "Створення та оновлення книг" + +#: ../../src/appx/libms/spec.rst:444 +msgid "" +"The template should comprise a form with fields corresponding to the book's " +"attributes. Here are the essential elements for the form:" +msgstr "" +"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " +"основні елементи форми:" + +#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 +msgid "A text input field." +msgstr "Поле для введення тексту." + +#: ../../src/appx/libms/spec.rst:451 +msgid "A textarea for a brief description or synopsis." +msgstr "Текстова область для короткого опису або синопсису." + +#: ../../src/appx/libms/spec.rst:454 +msgid "A text input field for the book's International Standard Book Number." +msgstr "Поле для введення міжнародного стандартного номера книги." + +#: ../../src/appx/libms/spec.rst:457 +msgid "A checkbox indicating if a book is available. Defaults to ``True``." +msgstr "" +"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." + +#: ../../src/appx/libms/spec.rst:460 +msgid "A date input field." +msgstr "Поле для введення дати." + +#: ../../src/appx/libms/spec.rst +msgid "Genres" +msgstr "Жанри" + +#: ../../src/appx/libms/spec.rst:466 +msgid "" +"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " +"fetch available genres from the database and allow users to select zero or " +"more genres." +msgstr "" +"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " +"користувачам вибирати нуль або більше жанрів." + +#: ../../src/appx/libms/spec.rst +msgid "Authors" +msgstr "Автори" + +#: ../../src/appx/libms/spec.rst:471 +msgid "" +"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " +"fetch available authors from the database and allow users to select one or " +"more authors." +msgstr "" +"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " +"користувачам вибирати одного або декількох авторів." + +#: ../../src/appx/libms/spec.rst:477 +msgid "" +"If it's an *update* action, pre-populate the form fields with the existing " +"details of the book fetched from the database." +msgstr "" +"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " +"книги, отриманими з бази даних." + +#: ../../src/appx/libms/spec.rst:479 +msgid "For *creation*, provide an empty form for the librarian to fill in." +msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." + +#: ../../src/appx/libms/spec.rst:480 +msgid "Ensure the published date is logical (e.g. not a future date)." +msgstr "" +"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " +"майбутнього)." + +#: ../../src/appx/libms/spec.rst:481 +msgid "Validate required inputs, according to general ``Book`` model rules." +msgstr "" +"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " +"``Book``." + +#: ../../src/appx/libms/spec.rst:482 +msgid "" +"If validations pass: save changes to the database; otherwise, provide " +"helpful error messages." +msgstr "" +"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " +"випадку надайте корисні повідомлення про помилки." + +#: ../../src/appx/libms/spec.rst:486 +msgid "" +"You MAY provide a mechanism (like modal or a quick entry form) to add a new " +"genre or author without leaving the book form page." +msgstr "" +"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " +"введення) для додавання нового жанру або автора, не виходячи зі сторінки " +"форми книги." + +#: ../../src/appx/libms/spec.rst:490 +msgid "Book deletion" +msgstr "Видалення книги" + +#: ../../src/appx/libms/spec.rst:492 +msgid "" +"Only librarians and administrators are permitted to perform this action." +msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." + +#: ../../src/appx/libms/spec.rst:496 +msgid "A confirm delete form with **Submit** and **Cancel** buttons." +msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." + +#: ../../src/appx/libms/spec.rst:500 +msgid "Authorize user before deleting performing deletion." +msgstr "Авторизуйте користувача перед виконанням видалення." + +#: ../../src/appx/libms/spec.rst:501 +msgid "" +"If a form is submitted, a book should be removed from the library collection." +msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." + +#: ../../src/appx/libms/spec.rst:503 +msgid "" +"If deletion is canceled view should redirect back to book detail view page." +msgstr "" +"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " +"сторінку детального перегляду книги." + +#: ../../src/appx/libms/spec.rst:506 +msgid "Borrow requests" +msgstr "Запити на позики" + +#: ../../src/appx/libms/spec.rst:508 +msgid "" +"This view facilitates the management of borrowing requests for librarians " +"and admins, aiding in their prompt handling." +msgstr "" +"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " +"позики, допомагаючи оперативно їх обробляти." + +#: ../../src/appx/libms/spec.rst:513 +msgid "" +"Present a table showcasing the list of borrow requests. Each row embodies a " +"borrow request and encompasses:" +msgstr "" +"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " +"відображає один запит на позику і включає в себе всі запити:" + +#: ../../src/appx/libms/spec.rst:516 +msgid "**Book Title**: Title of the requested book." +msgstr "**Назва книги**: Назва запитуваної книги." + +#: ../../src/appx/libms/spec.rst:517 +msgid "**User**: Identifier of the user who initiated the request." +msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." + +#: ../../src/appx/libms/spec.rst:518 +msgid "**Request Date**: Date of the request's inception." +msgstr "**Дата запиту**: Дата створення запиту." + +#: ../../src/appx/libms/spec.rst:519 +msgid "" +"**Due Date**: - Input field for librarians to set upon approval for new " +"requests. - For approved ones, display the librarian-set date." +msgstr "" +"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " +"нових запитів. - Для затверджених запитів відображатиметься дата, " +"встановлена бібліотекарем." + +#: ../../src/appx/libms/spec.rst:522 +msgid "" +"**Status**: Present state of the request (New, Approved, Completed, " +"Declined)." +msgstr "" +"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " +"Відхилений)." + +#: ../../src/appx/libms/spec.rst:524 +msgid "" +"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " +"and freezes the due date." +msgstr "" +"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " +"статус на \"Затверджено\" і заморожує дату виконання." + +#: ../../src/appx/libms/spec.rst:526 +msgid "" +"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " +"and can prompt for a decline reason." +msgstr "" +"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " +"\"Відхилено\" і може запитувати причину відхилення." + +#: ../../src/appx/libms/spec.rst:528 +msgid "" +"**Complete Button**: Displayed for approved requests. Marks the request as " +"completed." +msgstr "" +"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " +"запит як завершений." + +#: ../../src/appx/libms/spec.rst:532 +msgid "View Logic" +msgstr "View Logic" + +#: ../../src/appx/libms/spec.rst:533 +msgid "" +"**Approve Borrow Request**: - Validate book availability. - Modify book " +"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " +"Define the return due date as per librarian. - Inform the user about the " +"approval and due date." +msgstr "" +"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " +"статус книги на \"Позичена\". - Переключіть запит на позику на " +"\"Затверджено\". - Визначте дату повернення відповідно до побажань " +"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." + +#: ../../src/appx/libms/spec.rst:540 +msgid "" +"**Decline Borrow Request**: - Change borrow request status to " +"\"Declined\". - Optionally, procure decline reason from librarian. - " +"Notify user regarding the declination." +msgstr "" +"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " +"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " +"користувача про відхилення." + +#: ../../src/appx/libms/spec.rst:545 +msgid "" +"**Complete Borrow Request**: - Ensure book's return. - Update book " +"status to \"Available\". - Toggle borrow request status to \"Completed\". " +"- If needed, record any notes or damages during return." +msgstr "" +"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " +"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " +"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " +"під час повернення." + +#: ../../src/appx/libms/spec.rst:552 +msgid "" +"Implementing reminders for near-due borrow requests can function as an alert " +"system for both the librarian and the user." +msgstr "" +"Впровадження нагадувань про прострочені запити може функціонувати як система " +"оповіщення як для бібліотекаря, так і для користувача." diff --git a/src/_locales/uk/LC_MESSAGES/appx/precedence.po b/src/_locales/uk/LC_MESSAGES/appx/precedence.po new file mode 100644 index 000000000..e94075d6c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/precedence.po @@ -0,0 +1,231 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/precedence.txt:-1 +msgid "Operator precedence in Python" +msgstr "Пріоритет операторів в Python" + +#: ../../src/appx/precedence.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/precedence.txt:-1 +msgid "python, basics, operator, precedence" +msgstr "python, basics, operator, precedence" + +#: ../../src/appx/precedence.txt:8 +msgid "Operator Precedence" +msgstr "Пріоритет Операторів" + +#: ../../src/appx/precedence.txt:10 +msgid "" +"The following table summarizes the operator precedence in Python, from " +"highest precedence (most binding) to lowest precedence (least binding) :cite:" +"`docs-python:operator-precedence`. Operators in the same cell have the same " +"precedence (use left-to-right precedence)." +msgstr "" +"У наведеній нижче таблиці підсумовано пріоритет операторів у Python від " +"найвищого пріоритету (найбільш обов'язковий) до найнижчого пріоритету " +"(найменший обов'язковий) :cite:`docs-python:operator-precedence`. Оператори " +"в одній клітинці мають однаковий пріоритет (використовуйте пріоритет зліва " +"направо)." + +#: ../../src/appx/precedence.txt:16 +msgid "Operator" +msgstr "Оператор" + +#: ../../src/appx/precedence.txt:16 +msgid "Description" +msgstr "Опис" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" +msgstr "" +"``(expressions...)``, ``[expressions...]``, ``{key: value...}``, " +"``{expressions...}``" + +#: ../../src/appx/precedence.txt:18 +msgid "" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" +msgstr "" +"Прив'язка або вираз у дужках, відображення списку, відображення словника, " +"відображення набору" + +#: ../../src/appx/precedence.txt:23 +msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" +msgstr "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" + +#: ../../src/appx/precedence.txt:23 +msgid "Subscription, slicing, call, attribute reference" +msgstr "Підписка, нарізка, виклик, посилання на атрибути" + +#: ../../src/appx/precedence.txt:28 +msgid "``await x``" +msgstr "``await x``" + +#: ../../src/appx/precedence.txt:28 +msgid "Await expression" +msgstr "Вираз Await" + +#: ../../src/appx/precedence.txt:30 +msgid "``**``" +msgstr "``**``" + +#: ../../src/appx/precedence.txt:30 +msgid "Exponentiation [#]_" +msgstr "Піднесення до степеня [#]_" + +#: ../../src/appx/precedence.txt:32 +msgid "``+x``, ``-x``, ``~x``" +msgstr "``+x``, ``-x``, ``~x``" + +#: ../../src/appx/precedence.txt:32 +msgid "Positive, negative, bitwise NOT" +msgstr "Позитивне, негативне, побітове НІ" + +#: ../../src/appx/precedence.txt:34 +msgid "``*``, ``@``, ``/``, ``//``, ``%``" +msgstr "``*``, ``@``, ``/``, ``//``, ``%``" + +#: ../../src/appx/precedence.txt:34 +msgid "" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" +msgstr "Множення, матричне множення, ділення, поверхове ділення, залишок [#]_" + +#: ../../src/appx/precedence.txt:37 +msgid "``+``, ``-``" +msgstr "``+``, ``-``" + +#: ../../src/appx/precedence.txt:37 +msgid "Addition and subtraction" +msgstr "Додавання і віднімання" + +#: ../../src/appx/precedence.txt:39 +msgid "``<<``, ``>>``" +msgstr "``<<``, ``>>``" + +#: ../../src/appx/precedence.txt:39 +msgid "Shifts" +msgstr "Зсуви" + +#: ../../src/appx/precedence.txt:41 +msgid "``&``" +msgstr "``&``" + +#: ../../src/appx/precedence.txt:41 +msgid "Bitwise AND" +msgstr "Побітове І" + +#: ../../src/appx/precedence.txt:43 +msgid "``^``" +msgstr "``^``" + +#: ../../src/appx/precedence.txt:43 +msgid "Bitwise XOR" +msgstr "Побітове XOR" + +#: ../../src/appx/precedence.txt:45 +msgid "``|``" +msgstr "``|``" + +#: ../../src/appx/precedence.txt:45 +msgid "Bitwise OR" +msgstr "Порозрядне АБО" + +#: ../../src/appx/precedence.txt:47 +msgid "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" +msgstr "" +"``in``, ``not in``, ``is``, ``is not``, ``<``, ``<=``, ``>``, ``>=``, " +"``==``, ``!=``" + +#: ../../src/appx/precedence.txt:47 +msgid "Comparisons, including membership tests and identity tests" +msgstr "Порівняння, включаючи тести на приналежність і тести на ідентифікацію" + +#: ../../src/appx/precedence.txt:52 +msgid "``not x``" +msgstr "``not x``" + +#: ../../src/appx/precedence.txt:52 +msgid "Boolean NOT" +msgstr "Логічне НІ" + +#: ../../src/appx/precedence.txt:54 +msgid "``and``" +msgstr "``and``" + +#: ../../src/appx/precedence.txt:54 +msgid "Boolean AND" +msgstr "Логічне І" + +#: ../../src/appx/precedence.txt:56 +msgid "``or``" +msgstr "``or``" + +#: ../../src/appx/precedence.txt:56 +msgid "Boolean OR" +msgstr "Логічне АБО" + +#: ../../src/appx/precedence.txt:58 +msgid "``if - else``" +msgstr "``if - else``" + +#: ../../src/appx/precedence.txt:58 +msgid "Conditional expression (ternary ``if``)" +msgstr "Умовний вираз (трійковий ``if``)" + +#: ../../src/appx/precedence.txt:60 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/appx/precedence.txt:60 +msgid "Lambda expression" +msgstr "Lambda вирази" + +#: ../../src/appx/precedence.txt:62 +msgid "``=``, ``:=``" +msgstr "``=``, ``:=``" + +#: ../../src/appx/precedence.txt:62 +msgid "Assignment expression" +msgstr "Оперетор присвоєння" + +#: ../../src/appx/precedence.txt:65 +msgid "" +"the power operator binds less tightly than an arithmetic or bitwise unary " +"operator on its right (``2 ** -1`` is ``0.5``)." +msgstr "" +"оператор степені прив'язує менш тісно, ніж арифметичний або порозрядний " +"унарний оператор праворуч (``2 ** -1`` це ``0,5``)." + +#: ../../src/appx/precedence.txt:67 +msgid "" +"the ``%`` operator is also used for string formatting; the same precedence " +"applies." +msgstr "" +"оператор ``%`` також використовується для форматування рядків; " +"застосовується той самий пріоритет." diff --git a/src/_locales/uk/LC_MESSAGES/appx/printf.po b/src/_locales/uk/LC_MESSAGES/appx/printf.po new file mode 100644 index 000000000..5476a9142 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/printf.po @@ -0,0 +1,244 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/printf.txt:-1 +msgid "Formatted strings usage in Python" +msgstr "Використання форматованих рядків в Python" + +#: ../../src/appx/printf.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/printf.txt:-1 +msgid "python, string, formatting" +msgstr "python, string, formatting" + +#: ../../src/appx/printf.txt:10 +msgid "``printf-style`` String Formatting" +msgstr "``printf-style`` Форматування рядків" + +#: ../../src/appx/printf.txt:12 +msgid "" +"String objects have one unique built-in operation: the ``%`` operator " +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator :cite:`docs-python:printf-formatting`. Given ``format % values`` " +"(where *format* is a string), ``%`` conversion specifications in *format* " +"are replaced with zero or more elements of *values*. If *format* requires a " +"single argument, *values* may be a single non-tuple object." +msgstr "" +"Рядкові об'єкти мають одну унікальну вбудовану операцію: оператор ``%`` (по " +"модулю). Це також відоме як оператор *форматування* рядка або " +"*інтерполяції* :cite:`docs-python:printf-formatting`. Враховуючи ``формат % " +"значень`` (де *format* є рядком), ``%`` специфікації перетворення у *format* " +"замінюються нулем або більше елементами *значень*. Якщо для *format* " +"потрібен один аргумент, *values* може бути одним некортежним об'єктом." + +#: ../../src/appx/printf.txt:19 +msgid "The conversion flag characters are:" +msgstr "Символи перетворення:" + +#: ../../src/appx/printf.txt:22 +msgid "Flag" +msgstr "Символ" + +#: ../../src/appx/printf.txt:22 ../../src/appx/printf.txt:40 +msgid "Meaning" +msgstr "Значення" + +#: ../../src/appx/printf.txt:24 +msgid "``#``" +msgstr "``#``" + +#: ../../src/appx/printf.txt:24 +msgid "The value conversion will use the \"alternative form\"" +msgstr "Перетворення значень використовуватиме \"альтернативну форму\"" + +#: ../../src/appx/printf.txt:26 +msgid "``0``" +msgstr "``0``" + +#: ../../src/appx/printf.txt:26 +msgid "The conversion will be zero padded for numeric values" +msgstr "Перетворення буде доповнено нулем для числових значень" + +#: ../../src/appx/printf.txt:28 +msgid "``'-'``" +msgstr "``'-'``" + +#: ../../src/appx/printf.txt:28 +msgid "" +"The converted value is left adjusted (override the ``'0'`` if both are given)" +msgstr "" +"Перетворене значення коригується зліва (замініть ``'0'``, якщо надано обидва)" + +#: ../../src/appx/printf.txt:31 +msgid "``' '``" +msgstr "``' '``" + +#: ../../src/appx/printf.txt:31 +msgid "(a space) A blank should be left before a positive number" +msgstr "(пробіл) Перед додатним числом слід залишити пробіл" + +#: ../../src/appx/printf.txt:33 +msgid "``'+'``" +msgstr "``'+'``" + +#: ../../src/appx/printf.txt:33 +msgid "" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides " +"a \"space\" flag)" +msgstr "" +"Символ знака (``'+'`` або ``'-'``) передуватиме перетворенню (перевизначає " +"прапор \"пробіл\")" + +#: ../../src/appx/printf.txt:37 +msgid "The conversion types are:" +msgstr "Типи перетворення:" + +#: ../../src/appx/printf.txt:40 +msgid "Conversion" +msgstr "Перетворення" + +#: ../../src/appx/printf.txt:42 +msgid "``'d'``" +msgstr "``'d'``" + +#: ../../src/appx/printf.txt:42 ../../src/appx/printf.txt:44 +msgid "Signed integer decimal" +msgstr "Ціле десяткове число зі знаком" + +#: ../../src/appx/printf.txt:44 +msgid "``'i'``" +msgstr "``'i'``" + +#: ../../src/appx/printf.txt:46 +msgid "``'o'``" +msgstr "``'o'``" + +#: ../../src/appx/printf.txt:46 +msgid "Signed octal value" +msgstr "Вісімкове значення зі знаком" + +#: ../../src/appx/printf.txt:48 +msgid "``'u'``" +msgstr "``'u'``" + +#: ../../src/appx/printf.txt:48 +msgid "Obsolete type - it is identical to ``'d'``" +msgstr "Застарілий тип - ідентичний ``'d``" + +#: ../../src/appx/printf.txt:50 +msgid "``'x'``" +msgstr "``'x'``" + +#: ../../src/appx/printf.txt:50 +msgid "Signed hexadecimal (lowercase)" +msgstr "Шістнадцяткове число зі знаком (маленький регістр)" + +#: ../../src/appx/printf.txt:52 +msgid "``'X'``" +msgstr "``'X'``" + +#: ../../src/appx/printf.txt:52 +msgid "Signed hexadecimal (uppercase)" +msgstr "Шістнадцяткове число зі знаком (верхній регістр)" + +#: ../../src/appx/printf.txt:54 +msgid "``'e'``" +msgstr "``'e'``" + +#: ../../src/appx/printf.txt:54 +msgid "Floating point exponential format (lowercase)" +msgstr "Експоненціальний формат із плаваючою комою (нижній регістр)" + +#: ../../src/appx/printf.txt:56 +msgid "``'E'``" +msgstr "``'E'``" + +#: ../../src/appx/printf.txt:56 +msgid "Floating point exponential format (uppercase)" +msgstr "Експоненціальний формат із плаваючою комою (верхній регістр)" + +#: ../../src/appx/printf.txt:58 +msgid "``'f'`` ``'F'``" +msgstr "``'f'`` ``'F'``" + +#: ../../src/appx/printf.txt:58 +msgid "Floating point decimal format" +msgstr "Десятковий формат із плаваючою комою" + +#: ../../src/appx/printf.txt:61 +msgid "``'g'``" +msgstr "``'g'``" + +#: ../../src/appx/printf.txt:64 +msgid "``'G'``" +msgstr "``'G'``" + +#: ../../src/appx/printf.txt:61 +msgid "" +"Floating point format. Uses lowercase exponential format if exponent is less " +"that -4 or not less than precision, decimal format otherwise." +msgstr "" +"Формат з плаваючою комою. Використовує нижній регістр експоненціального " +"формату, якщо показник степеня менший за -4 або не менший за точність, " +"десятковий формат інакше." + +#: ../../src/appx/printf.txt:66 +msgid "``'c'``" +msgstr "``'c'``" + +#: ../../src/appx/printf.txt:66 +msgid "Single character (accepts integer or single character string)" +msgstr "Один символ (приймає ціле число або рядок з одним символом)" + +#: ../../src/appx/printf.txt:68 +msgid "``'r'``" +msgstr "``'r'``" + +#: ../../src/appx/printf.txt:68 +msgid "Converts any Python object using ``repr()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``repr()``" + +#: ../../src/appx/printf.txt:70 +msgid "``'s'``" +msgstr "``'s'``" + +#: ../../src/appx/printf.txt:70 +msgid "Converts any Python object using ``str()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``str()``" + +#: ../../src/appx/printf.txt:72 +msgid "``'a'``" +msgstr "``'a'``" + +#: ../../src/appx/printf.txt:72 +msgid "Converts any Python object using ``ascii()``" +msgstr "Перетворює будь-який об'єкт Python за допомогою ``ascii()``" + +#: ../../src/appx/printf.txt:74 +msgid "``'%'``" +msgstr "``'%'``" + +#: ../../src/appx/printf.txt:74 +msgid "" +"No arguments is converted, results in a ``'%'`` character in the result." +msgstr "Жодні аргументи не перетворюються, результатом є символ ``'%'``." diff --git a/src/_locales/uk/LC_MESSAGES/appx/software_list.po b/src/_locales/uk/LC_MESSAGES/appx/software_list.po new file mode 100644 index 000000000..e4a941241 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/software_list.po @@ -0,0 +1,275 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/software_list.rst:-1 +msgid "Useful software list" +msgstr "Список корисного програмного забезпечення" + +#: ../../src/appx/software_list.rst:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/appx/software_list.rst:-1 +msgid "software" +msgstr "software" + +#: ../../src/appx/software_list.rst:7 +msgid "Software List" +msgstr "Список Програмного Забезпечення" + +#: ../../src/appx/software_list.rst:10 +msgid "7zip" +msgstr "7zip" + +#: ../../src/appx/software_list.rst:12 +msgid "**7-Zip** is **free software** with **open source**." +msgstr "" +"**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." + +#: ../../src/appx/software_list.rst:14 +msgid "" +"High compression ratio in `7z format `__ with " +"**LZMA** and **LZMA2** compression" +msgstr "" +"Високий ступінь стиснення у `7z format `__ зі " +"стисненням **LZMA** і **LZMA2**" + +#: ../../src/appx/software_list.rst:16 +msgid "Supported formats:" +msgstr "Підтримувані формати:" + +#: ../../src/appx/software_list.rst:18 +msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" +msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" + +#: ../../src/appx/software_list.rst:19 +msgid "" +"Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " +"HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " +"UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR and Z." +msgstr "" +"Лише розпакування: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, " +"GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " +"SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." + +#: ../../src/appx/software_list.rst:23 +msgid "Self-extracting capability for 7z format" +msgstr "Можливість саморозпакування для формату 7z" + +#: ../../src/appx/software_list.rst:24 +msgid "Integration with Windows Shell" +msgstr "Інтеграція з Windows Shell" + +#: ../../src/appx/software_list.rst:26 +msgid "https://7-zip.org/" +msgstr "https://7-zip.org/" + +#: ../../src/appx/software_list.rst:29 +msgid "cygwin" +msgstr "cygwin" + +#: ../../src/appx/software_list.rst:31 +msgid "" +"It is a large collection of GNU and Open Source tools which provide " +"functionality similar to a `Linux distribution `__ on Windows and a DLL (cygwin1.dll) which " +"provides substantial POSIX API functionality." +msgstr "" +"Це велика колекція інструментів GNU та Open Source, які забезпечують " +"функціональність, подібну до `дистрибутива Linux `__ у Windows та DLL (cygwin1.dll), яка забезпечує " +"значний POSIX Функціонал API." + +#: ../../src/appx/software_list.rst:37 +msgid "**Cygwin is not**:" +msgstr "**Сygwin це не**:" + +#: ../../src/appx/software_list.rst:39 +msgid "" +"a way to run native Linux apps on Windows. You must rebuild your application " +"*from source* if you want it to run on Windows." +msgstr "" +"спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " +"програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." + +#: ../../src/appx/software_list.rst:41 +msgid "" +"a way to magically make native Windows apps aware of UNIX® functionality " +"like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " +"source* if you want to take advantage of Cygwin functionality." +msgstr "" +"спосіб чарівним чином зробити рідні програми Windows відомими " +"функціональності UNIX®, як-от `signals`, `ptys` тощо. Знову ж таки, вам " +"потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " +"перевагами функціональності Cygwin." + +#: ../../src/appx/software_list.rst:46 +msgid "https://www.cygwin.com/" +msgstr "https://www.cygwin.com/" + +#: ../../src/appx/software_list.rst:49 +msgid "git [#cygwin]_" +msgstr "git [#cygwin]_" + +#: ../../src/appx/software_list.rst:51 +msgid "" +"Git is a `free and open source `__ distributed version control system designed to handle everything " +"from small to very large projects with speed and efficiency." +msgstr "" +"Git — це `безкоштовна система з відкритим вихідним кодом `__ розподілена система контролю версій, " +"призначена для швидкого та ефективного керування всіма проектами, від малих " +"до дуже великих." + +#: ../../src/appx/software_list.rst:56 +msgid "https://git-scm.com/" +msgstr "https://git-scm.com/" + +#: ../../src/appx/software_list.rst:59 +msgid "Docker" +msgstr "Docker" + +#: ../../src/appx/software_list.rst:61 +msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." +msgstr "" +"Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " +"рік." + +#: ../../src/appx/software_list.rst:63 +msgid "" +"Docker helps developers bring their ideas to life by conquering the " +"complexity of app development. We simplify and accelerate development " +"workflows with an integrated dev pipeline and through the consolidation of " +"application components. Actively used by millions of developers around the " +"world, Docker Desktop and Docker Hub provide unmatched simplicity, agility " +"and choice." +msgstr "" +"Docker допомагає розробникам втілювати свої ідеї в життя, долаючи складність " +"розробки програм. Ми спрощуємо та прискорюємо робочі процеси розробки за " +"допомогою інтегрованого конвеєра розробників і консолідації компонентів " +"програми. Активно використовувані мільйонами розробників у всьому світі " +"Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " +"вибір." + +#: ../../src/appx/software_list.rst:70 +msgid "https://www.docker.com/" +msgstr "https://www.docker.com/" + +#: ../../src/appx/software_list.rst:73 +msgid "PostgreSQL [#cygwin]_" +msgstr "PostgreSQL [#cygwin]_" + +#: ../../src/appx/software_list.rst:75 +msgid "" +"PostgreSQL is a powerful, open source object-relational database system with " +"over 35 years of active development that has earned it a strong reputation " +"for reliability, feature robustness, and performance." +msgstr "" +"PostgreSQL — це потужна об'єктно-реляційна база даних з відкритим вихідним " +"кодом, активна розробка якої триває понад 35 років, завдяки чому вона " +"заслужила міцну репутацію надійності, надійності функцій і продуктивності." + +#: ../../src/appx/software_list.rst:79 +msgid "https://www.postgresql.org/" +msgstr "https://www.postgresql.org/" + +#: ../../src/appx/software_list.rst:84 +msgid "psql [#cygwin]_" +msgstr "psql [#cygwin]_" + +#: ../../src/appx/software_list.rst:86 +msgid "" +"A terminal-based front-end to PostgreSQL. It enables you to type in queries " +"interactively, issue them to PostgreSQL, and see the query results. " +"Alternatively, input can be from a file or from command line arguments. In " +"addition, psql provides a number of meta-commands and various shell-like " +"features to facilitate writing scripts and automating a wide variety of " +"tasks." +msgstr "" +"Термінальний інтерфейс для PostgreSQL. Це дозволяє вводити запити в " +"інтерактивному режимі, надсилати їх у PostgreSQL і переглядати результати " +"запиту. Крім того, введення може бути з файлу або з аргументів командного " +"рядка. Крім того, psql надає низку мета-команд і різноманітних функцій, " +"подібних до оболонки, для полегшення написання сценаріїв і автоматизації " +"різноманітних завдань." + +#: ../../src/appx/software_list.rst:93 +msgid "" +"On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " +"look for ``postgresql-client`` package." +msgstr "" +"У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " +"знайдіть пакет ``postgresql-client``." + +#: ../../src/appx/software_list.rst:96 +msgid "https://www.postgresql.org/docs/current/app-psql.html" +msgstr "https://www.postgresql.org/docs/current/app-psql.html" + +#: ../../src/appx/software_list.rst:99 +msgid "pgAdmin" +msgstr "pgAdmin" + +#: ../../src/appx/software_list.rst:101 +msgid "" +"pgAdmin is the most popular and feature rich Open Source administration and " +"development platform for PostgreSQL, the most advanced Open Source database " +"in the world." +msgstr "" +"pgAdmin — це найпопулярніша та багатофункціональна платформа адміністрування " +"та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " +"відкритим кодом у світі." + +#: ../../src/appx/software_list.rst:105 +msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." +msgstr "" +"Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " +"веб-інтерфейсу." + +#: ../../src/appx/software_list.rst:107 +msgid "https://pgadmin.org/" +msgstr "https://pgadmin.org/" + +#: ../../src/appx/software_list.rst:110 +msgid "SQLite [#cygwin]_" +msgstr "SQLite [#cygwin]_" + +#: ../../src/appx/software_list.rst:112 +msgid "" +"SQLite is a C-language library that implements a `small `__, `fast `__, `self-" +"contained `__, `high-reliability " +"`__, `full-featured `__, SQL database engine." +msgstr "" +"SQLite — це бібліотека мовою C, яка реалізує `маленьку `__, `швидку `__, " +"`самодостатню `__, `висока надійність " +"`__, `повнофункціональний `__, двигун бази даних SQL." + +#: ../../src/appx/software_list.rst:120 +msgid "https://sqlite.org/" +msgstr "https://sqlite.org/" + +#: ../../src/appx/software_list.rst:123 +msgid "available for installation as a cygwin package" +msgstr "доступно для встановлення як пакет cygwin" diff --git a/src/_locales/uk/LC_MESSAGES/appx/wtk.po b/src/_locales/uk/LC_MESSAGES/appx/wtk.po new file mode 100644 index 000000000..036e269b7 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/wtk.po @@ -0,0 +1,575 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:01+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/wtk.txt:-1 +msgid "Knights, thieves and wizards game project" +msgstr "Проект гри рицарі, злодії та чарівники" + +#: ../../src/appx/wtk.txt:-1 +msgid "Serhii Horodilov sgorodil@gmail.com" +msgstr "Serhii Horodilov sgorodil@gmail.com" + +#: ../../src/appx/wtk.txt:-1 +msgid "python, game, oop, object-oriented programming" +msgstr "python, game, oop, object-oriented programming" + +#: ../../problem-sets/src/wtk/challenge.rst:3 +msgid "Wizards, Thieves and Knights" +msgstr "Чарівники, Злодії та Рицарі" + +#: ../../problem-sets/src/wtk/challenge.rst:5 +msgid "" +"\"Wizards, Thieves and Knights\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) game is a \"Paper, Rock and Scissors\" clone but in a fantasy " +"setting. It comes with a simple command line interface where the use must " +"type in his or her choice. The enemy is controlled by the script. The " +"player's goal is to gain as many score points, as it possible." +msgstr "" +"Гра \"Чарівники, Злодії та Рицарі\" (:abbr:`WTK (Wizards, Thieves and " +"Knights)`) — це клон \"Камень, ножиці, бумага\", але у фентезійному " +"сеттингу. Вона має простий інтерфейс командного рядка, де користувач повинен " +"ввести свій вибір. Ворогом керує скрипт. Мета гравця - набрати якомога " +"більше очок." + +#: ../../problem-sets/src/wtk/challenge.rst:13 +msgid "Code organization" +msgstr "Організація коду" + +#: ../../problem-sets/src/wtk/challenge.rst:15 +msgid "Use separate modules to maintain your code base. For example:" +msgstr "" +"Використовуйте окремі модулі для підтримки вашої кодової бази. Наприклад:" + +#: ../../problem-sets/src/wtk/challenge.rst:27 +msgid "General playground description" +msgstr "Загальний опис ігрового процесу" + +#: ../../problem-sets/src/wtk/challenge.rst:29 +msgid "" +"The game process is divided into rounds. Each round consists of **attack** " +"and **defence** stages. Rounds are repeated, until player is defeated." +msgstr "" +"Процес гри поділено на раунди. Кожен раунд складається з етапів атаки та " +"захисту. Раунди повторюються, поки гравець не буде переможений." + +#: ../../problem-sets/src/wtk/challenge.rst:33 +msgid "Fight rules" +msgstr "Правила боротьби" + +#: ../../problem-sets/src/wtk/challenge.rst:35 +msgid "It's simple..." +msgstr "Це просто..." + +#: ../../problem-sets/src/wtk/challenge.rst:37 +msgid "**Wizard** beats **Knight**" +msgstr "**Чарівник** перемагає **Рицаря**" + +#: ../../problem-sets/src/wtk/challenge.rst:38 +msgid "**Thief** beats **Wizard**" +msgstr "**Злодій** перемагає **Чарівника**" + +#: ../../problem-sets/src/wtk/challenge.rst:39 +msgid "**Knight** beats **Thief**" +msgstr "**Рицар** перемагає **Злодія**" + +#: ../../problem-sets/src/wtk/challenge.rst:42 +msgid "Attack stage" +msgstr "Стадія атаки" + +#: ../../problem-sets/src/wtk/challenge.rst:44 +msgid "" +"Player selects the choice to attack from **wizard**, **thief** or " +"**knight**, enemy selects the choice for defence from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець обирає для атаки **чарівника**, **злодія** або **лицаря**, ворог " +"обирає захист з тих самих варіантів випадковим чином. Якщо атака успішна:" + +#: ../../problem-sets/src/wtk/challenge.rst:48 +msgid "enemy health is decreased" +msgstr "здоров'я ворога зменшено" + +#: ../../problem-sets/src/wtk/challenge.rst:49 +msgid "player gains score points" +msgstr "гравець отримує очки" + +#: ../../problem-sets/src/wtk/challenge.rst:51 +msgid "In case enemy is defeated:" +msgstr "Якщо ворог переможений:" + +#: ../../problem-sets/src/wtk/challenge.rst:53 +msgid "a new enemy instance is initialized using higher level" +msgstr "новий екземпляр ворога ініціалізовано з використанням вищого рівня" + +#: ../../problem-sets/src/wtk/challenge.rst:54 +msgid "player gains some extra score points" +msgstr "гравець отримує додаткові очки" + +#: ../../problem-sets/src/wtk/challenge.rst:55 +msgid "next defence stage is skipped, and player attacks again" +msgstr "наступний етап захисту пропущено, і гравець атакує знову" + +#: ../../problem-sets/src/wtk/challenge.rst:58 +msgid "Defence stage" +msgstr "Стадія захисту" + +#: ../../problem-sets/src/wtk/challenge.rst:60 +msgid "" +"Player selects the choice to defend from **wizard**, **thief** or " +"**knight**, enemy selects the choice to attack from the same options by " +"random. If the attack is successful:" +msgstr "" +"Гравець вибір для захисту **чарівника**, **злодія** або **рицаря**, ворог " +"обирає для атаки з тих же варіантів випадковим чином. Якщо атака успішна:" + +#: ../../problem-sets/src/wtk/challenge.rst:64 +msgid "player health is decreased" +msgstr "здоров'я гравця знижено" + +#: ../../problem-sets/src/wtk/challenge.rst:66 +msgid "If player is defeated:" +msgstr "Якщо гравець переможений:" + +#: ../../problem-sets/src/wtk/challenge.rst:68 +msgid "report the message about gained score points to the terminal" +msgstr "повідомляти повідомлення про набрані бали на термінал" + +#: ../../problem-sets/src/wtk/challenge.rst:69 +msgid "write down player's name and score points to \"scores.txt\" file" +msgstr "запишіть ім'я гравця та наберіть очки до файлу \"scores.txt\"" + +#: ../../problem-sets/src/wtk/challenge.rst:73 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../problem-sets/src/wtk/challenge.rst:76 +msgid "Enemy down" +msgstr "Ворога переможено" + +#: ../../problem-sets/src/wtk/challenge.rst:78 +msgid "" +"This is an exceptional scenario when enemy is defeated. A custom exception " +"``EnemyDown`` should be used to track these cases. Exception should provide " +"the details on the enemy's instance, especially its level." +msgstr "" +"Це винятковий сценарій, коли ворог зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати налаштований виняток ``EnemyDown``. Виняток " +"повинен надавати деталі про екземпляр ворога, особливо його рівень." + +#: of wtk.exceptions.EnemyDown:1 +msgid "Raised when an enemy is defeated" +msgstr "Виникає, коли ворог переможений" + +#: ../../problem-sets/src/wtk/challenge.rst:85 +msgid "Game over" +msgstr "Гра завершена" + +#: ../../problem-sets/src/wtk/challenge.rst:87 +msgid "" +"This is an exceptional scenario when player is defeated. A custom exception " +"``GameOver`` should be used to track these cases. Exception should provide " +"the details on the player's instance, especially its score points." +msgstr "" +"Це винятковий сценарій, коли гравець зазнає поразки. Щоб відстежувати ці " +"випадки, слід використовувати спеціальний виняток ``GameOver``. Виняток " +"повинен надавати деталі про екземпляр гравця, особливо його результати бали." + +#: of wtk.exceptions.GameOver:1 +msgid "Raised when a player is defeated" +msgstr "Виникає, коли гравця переможено" + +#: ../../problem-sets/src/wtk/challenge.rst:95 +msgid "Models" +msgstr "Моделі" + +#: ../../problem-sets/src/wtk/challenge.rst:98 +msgid "Enemy" +msgstr "Ворог" + +#: of wtk.models.Enemy:1 +msgid "Enemy model" +msgstr "Модель супротивника" + +#: of wtk.models.Enemy wtk.models.Player +msgid "Variables" +msgstr "Змінні" + +#: of wtk.models.Enemy:3 +msgid "enemy's level value" +msgstr "значення рівня противника" + +#: of wtk.models.Enemy:5 +msgid "enemy's instance health points" +msgstr "очки здоров'я ворога" + +#: of wtk.models.Enemy:8 +msgid "Represents the playing enemy-bot." +msgstr "Представляє граючого ворога-бота." + +#: of wtk.models.Enemy.__init__:1 wtk.models.Player.__init__:1 +msgid "Initialize instance" +msgstr "Ініціалізувати екземпляр" + +#: of wtk.models.Enemy.__init__ wtk.models.Player.__init__ +msgid "Parameters" +msgstr "Параметри" + +#: of wtk.models.Enemy.__init__:3 +msgid "an enemy's level indicator" +msgstr "індикатор рівня противника" + +#: of wtk.models.Enemy.__init__:6 +msgid "Health value is equal to the level value." +msgstr "Значення здоров'я дорівнює значенню рівня." + +#: of wtk.models.Enemy.decrease_health:1 wtk.models.Player.decrease_health:1 +msgid "Decrease health points" +msgstr "Зменшує очоки здоров'я" + +#: of wtk.models.Enemy.decrease_health wtk.models.Player.decrease_health +msgid "raise" +msgstr "raise" + +#: of wtk.models.Enemy.decrease_health:3 +msgid "EnemyDown" +msgstr "EnemyDown" + +#: of wtk.models.Enemy.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``EnemyDown`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``EnemyDown``." + +#: of wtk.models.Enemy.select_attack:1 wtk.models.Enemy.select_defence:1 +msgid "Return a random fight choice" +msgstr "Повертає випадковий варіант для бою" + +#: of wtk.engine.get_player_name wtk.models.Enemy.select_attack +#: wtk.models.Enemy.select_defence wtk.models.Player.select_attack +#: wtk.models.Player.select_defence +msgid "Returns" +msgstr "Повертає" + +#: of wtk.models.Enemy.select_attack:3 wtk.models.Enemy.select_defence:3 +#: wtk.models.Player.select_attack:3 wtk.models.Player.select_defence:3 +msgid "a fight choice" +msgstr "варіант для бою" + +#: of wtk.models.Enemy.select_attack:5 wtk.models.Enemy.select_defence:5 +msgid "Choices made by an enemy are random." +msgstr "Вибори, зроблені супротивником, випадкові." + +#: ../../problem-sets/src/wtk/challenge.rst:104 +msgid "You are free to implement other methods you like, if needed." +msgstr "" +"Ви можете використовувати інші методи, які вам подобаються, якщо потрібно." + +#: ../../problem-sets/src/wtk/challenge.rst:107 +msgid "Player" +msgstr "Гравець" + +#: of wtk.models.Player:1 +msgid "Player model" +msgstr "Модель гравця" + +#: of wtk.models.Player:3 +msgid "player's name" +msgstr "ім'я гравця" + +#: of wtk.models.Player:5 +msgid "player's instance health points" +msgstr "очки здоров'я гравця" + +#: of wtk.models.Player:7 +msgid "player's instance gained score points" +msgstr "очки, зароблені гравцем" + +#: of wtk.models.Player:10 +msgid "This model is controlled by the player." +msgstr "Ця модель керується гравцем." + +#: of wtk.models.Player.__init__:3 +msgid "a player's name" +msgstr "ім'я гравця" + +#: of wtk.models.Player.__init__:6 +msgid "" +"This method performs player instance initialization. It set instance name, " +"initial score points value and health." +msgstr "" +"Цей метод виконує ініціалізацію примірника програвача. Він встановлює назву " +"екземпляра, значення початкових балів і здоров'я." + +#: of wtk.models.Player.attack:1 +msgid "Attack an enemy" +msgstr "Атакує ворога" + +#: of wtk.models.Player.attack:3 +msgid "" +"Perform attack on an enemy instance. This method takes an enemy instance as " +"an argument. After that, it takes attack choice from the player model and " +"the defence choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease enemy health, assign score " +"points etc.). Based on fight result should print out a message:" +msgstr "" +"Виконати атаку на екземпляр противника. Цей метод приймає екземпляр " +"противника як аргумент. Після цього він приймає вибір атаки з моделі гравця " +"та вибір захисту з моделі противника. Після результату битви потрібно " +"виконати обчислення, необхідні операції (зменшити здоров'я ворога, " +"призначити очки тощо). На основі результату бою має видрукувати\" " +"\"повідомлення:" + +#: of wtk.models.Player.attack:10 +msgid "\"YOUR ATTACK IS SUCCESSFUL!\"" +msgstr "\"YOUR ATTACK IS SUCCESSFUL!\"" + +#: of wtk.models.Player.attack:11 +msgid "\"YOUR ATTACK IS FAILED!\"" +msgstr "\"YOUR ATTACK IS FAILED!\"" + +#: of wtk.models.Player.attack:12 wtk.models.Player.defence:12 +msgid "\"IT'S A DRAW!\"" +msgstr "\"IT'S A DRAW!\"" + +#: of wtk.models.Player.decrease_health:3 +msgid "GameOver" +msgstr "GameOver" + +#: of wtk.models.Player.decrease_health:5 +msgid "" +"This method decreases the health meter value. When it comes to be less than " +"1 (one) an ``GameOver`` exception is raised." +msgstr "" +"Цей метод зменшує значення індикатора працездатності. Коли значення менше 1 " +"(одного), виникає виняток ``GameOver``." + +#: of wtk.models.Player.defence:1 +msgid "Defend from an enemy's attack" +msgstr "Захист від атаки супротивника" + +#: of wtk.models.Player.defence:3 +msgid "" +"Perform defence from an enemy attack. This method takes an enemy instance as " +"an argument. After that, it takes defence choice from the player model and " +"the attack choice from an enemy model. After fight result calculation " +"required operation are to be performed (decrease player health). Based on " +"fight result should print out a message:" +msgstr "" +"Виконайте захист від атаки ворога. Цей метод приймає екземпляр ворога як " +"аргумент. Після цього він приймає вибір захисту від моделі гравця та вибір " +"атаки від моделі ворога. Після результату бою необхідно виконати операцію " +"обчислення (зменшити здоров'я гравця). За результатами бою повинно вийти " +"повідомлення:" + +#: of wtk.models.Player.defence:10 +msgid "\"YOUR DEFENCE IS SUCCESSFUL!\"" +msgstr "\"YOUR DEFENCE IS SUCCESSFUL!\"" + +#: of wtk.models.Player.defence:11 +msgid "\"YOUR DEFENCE IS FAILED!\"" +msgstr "\"YOUR DEFENCE IS FAILED!\"" + +#: of wtk.models.Player.fight:1 +msgid "Fight result calculation interface" +msgstr "Інтерфейс для вирахування результатів двобою" + +#: of wtk.models.Player.fight:3 +msgid "The method calculates the fight result based on the game rules:" +msgstr "Метод розраховує результат бою за правилами гри:" + +#: of wtk.models.Player.fight:5 +msgid "**wizard** beats **knight**" +msgstr "**чарівник** перемагає **рицаря**" + +#: of wtk.models.Player.fight:6 +msgid "**thief** beats **wizard**" +msgstr "**злодій** перемагає **чарівника**" + +#: of wtk.models.Player.fight:7 +msgid "**knight** beats **thief**" +msgstr "**рицар** перемагає **злодія**" + +#: of wtk.models.Player.select_attack:1 wtk.models.Player.select_defence:1 +msgid "Return fight choice from the user's prompt" +msgstr "Повертає варіант для поєдинку з вводу користувача" + +#: of wtk.models.Player.select_attack:5 wtk.models.Player.select_defence:5 +msgid "" +"The player is asked to make their decision for the upcoming fight. The " +"chosen value is validated and if it is invalid the question is repeated." +msgstr "" +"Гравця просять прийняти рішення щодо майбутнього бою. Вибране значення " +"перевіряється, і якщо воно недійсне, запитання повторюється." + +#: ../../problem-sets/src/wtk/challenge.rst:116 +msgid "Settings" +msgstr "Налаштування" + +#: ../../problem-sets/src/wtk/challenge.rst:118 +msgid "Settings module contains constants values for the game." +msgstr "Модуль налаштувань містить значення констант для гри." + +#: ../../problem-sets/src/wtk/challenge.rst:120 +msgid "For example," +msgstr "Наприклад," + +#: ../../docstring of wtk.settings.INITIAL_PLAYER_HEALTH:1 +msgid "Initial player health value" +msgstr "Початкове значення здоров'я гравця" + +#: ../../docstring of wtk.settings.INITIAL_ENEMY_LEVEL:1 +msgid "Initial enemy level value" +msgstr "Початкове значення рівня ворога" + +#: ../../docstring of wtk.settings.SCORE_SUCCESS_ATTACK:1 +msgid "Score points value to assign when player's attack is successful" +msgstr "Вартість очок, які призначаються, коли атака гравця успішна" + +#: ../../docstring of wtk.settings.SCORE_ENEMY_DOWN:1 +msgid "Score points value to assign when enemy is defeated" +msgstr "Вартість очок, які призначаються, коли ворог переможений" + +#: ../../problem-sets/src/wtk/challenge.rst:131 +msgid "You may also define messages with this module, for example:" +msgstr "" +"Ви також можете визначити повідомлення за допомогою цього модуля, наприклад:" + +#: ../../docstring of wtk.settings.MSG_SUCCESS_ATTACK:1 +msgid "Successful attack message" +msgstr "Повідомлення про успішну атаку" + +#: ../../docstring of wtk.settings.MSG_SUCCESS_DEFENCE:1 +msgid "Successful defence message" +msgstr "Повідомлення про успішний захист" + +#: ../../docstring of wtk.settings.MSG_FAILURE_ATTACK:1 +msgid "Failed attack message" +msgstr "Повідомлення про невдалу атаку" + +#: ../../docstring of wtk.settings.MSG_FAILURE_DEFENCE:1 +msgid "Failed defence message" +msgstr "Повідомлення про невдалий захист" + +#: ../../docstring of wtk.settings.MSG_DRAW:1 +msgid "Draw fight message" +msgstr "Повідомлення про нічию" + +#: ../../problem-sets/src/wtk/challenge.rst:141 +msgid "Engine" +msgstr "Ігровий рушій" + +#: ../../problem-sets/src/wtk/challenge.rst:143 +msgid "Engine module should provide two functions:" +msgstr "Модуль двигуна має забезпечувати дві функції:" + +#: ../../problem-sets/src/wtk/challenge.rst:145 +msgid "``get_player_name``" +msgstr "``get_player_name``" + +#: ../../problem-sets/src/wtk/challenge.rst:146 +msgid "``play``" +msgstr "``play``" + +#: ../../problem-sets/src/wtk/challenge.rst:149 +msgid "Player name getter" +msgstr "Отримання імені гравця" + +#: ../../problem-sets/src/wtk/challenge.rst:151 +msgid "" +"Asks the user to type in his or her name and return it back. Leading and " +"trailing whitespaces are to be trimmed. Name should contain at least one " +"character." +msgstr "" +"Просить користувача ввести своє ім'я та повернути його назад. Пробіли на " +"початку та в кінці мають бути вирізані. Ім'я має містити принаймні один " +"символ." + +#: of wtk.engine.get_player_name:1 +msgid "Return a player's name from the user prompt" +msgstr "Повертає ім'я гравця з вводу користувача" + +#: of wtk.engine.get_player_name:3 +msgid "a player defined name" +msgstr "ім'я визначене гравцем" + +#: of wtk.engine.get_player_name:5 +msgid "" +"A validation process is performed as well. The player name cannot be an " +"empty string." +msgstr "" +"Також виконується процес перевірки. Ім'я гравця не може бути порожнім рядком." + +#: ../../problem-sets/src/wtk/challenge.rst:158 +msgid "Play" +msgstr "Гра" + +#: ../../problem-sets/src/wtk/challenge.rst:160 +msgid "" +"This function initializes player and enemy instance. It processes game " +"rounds inside of an endless loop stage by stage. If an enemy is defeated - a " +"new one should be initialized with level increased by 1 (one). This case " +"should be reported to the terminal. If a player is defeated - the \"Game " +"Over\" message should be reported to the terminal. ``KeyboardInterrupt`` " +"should be handled as well - it's behavior is similar to \"Game Over\" event, " +"but \"game over\" message should be omitted." +msgstr "" +"Ця функція ініціалізує екземпляр гравця та ворога. Вона обробляє ігрові " +"раунди в нескінченному циклі поетапно. Якщо ворога переможено - нового слід " +"ініціалізувати з рівнем, збільшеним на 1 (один). Про цей випадок слід " +"повідомити на термінал. Якщо гравець зазнає поразки - повідомлення \"Game " +"Over\" має бути повідомлено на термінал. ``KeyboardInterrupt`` також слід " +"обробити - це поведінка подібно до події \"Game Over\", але повідомлення " +"\"Game Over\" має бути пропущено." + +#: of wtk.engine.play:1 +msgid "Run the game" +msgstr "Запускає гру" + +#: of wtk.engine.play:3 +msgid "" +"The function initializes player and enemy instances. After that it runs the " +"game process in an endless loop. Once the player is defeated - it stops the " +"execution." +msgstr "" +"Функція ініціалізує екземпляри гравця та ворога. Після цього він запускає " +"ігровий процес у нескінченному циклі. Як тільки гравець переможений - це " +"зупиняє виконання." + +#: ../../problem-sets/src/wtk/challenge.rst:173 +msgid "Optional Enhancements" +msgstr "Додаткові Вдосконалення" + +#: ../../problem-sets/src/wtk/challenge.rst:175 +msgid "Add scores processor to show top-10 scores from a record table." +msgstr "" +"Додайте процесор оцінок, щоб показати 10 найкращих результатів із таблиці " +"записів." + +#: ../../problem-sets/src/wtk/challenge.rst:176 +msgid "Create game menu, for example: ::" +msgstr "Створити меню гри, наприклад: ::" + +#: ../../problem-sets/src/wtk/challenge.rst:182 +msgid "Store score table to the database instead of using text file." +msgstr "" +"Зберігайте таблицю балів у базі даних замість використання текстового файлу." diff --git a/src/_locales/uk/LC_MESSAGES/basics.po b/src/_locales/uk/LC_MESSAGES/basics.po deleted file mode 100644 index 2e60e5981..000000000 --- a/src/_locales/uk/LC_MESSAGES/basics.po +++ /dev/null @@ -1,2816 +0,0 @@ -# PYTHON BASICS BLOCK TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# OLEKSANDR YEROMIN , 2023. -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 06:44+0300\n" -"PO-Revision-Date: 2023-04-21 06:46+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/basics/bool_logic.txt:-1 -msgid "this document covers usage of logic and comparison operators in Python" -msgstr "" -"цей документ охоплює використання логіки та операторів порівняння в Python" - -#: ../../src/basics/bool_logic.txt:-1 ../../src/basics/controlflow.txt:-1 -#: ../../src/basics/decorators.txt:-1 ../../src/basics/exceptions.txt:-1 -#: ../../src/basics/functions.txt:-1 ../../src/basics/index.txt:-1 -#: ../../src/basics/modules.txt:-1 ../../src/basics/pep8.txt:-1 -#: ../../src/basics/stdtypes.txt:-1 ../../src/basics/syntax.txt:-1 -#: ../../src/basics/testing.txt:-1 ../../src/basics/variables.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/basics/bool_logic.txt:-1 -msgid "python, boolean, logic, comparison, operator" -msgstr "python, boolean, logic, comparison, operator" - -#: ../../src/basics/bool_logic.txt:14 -msgid "Boolean Logic" -msgstr "Булева Логіка" - -#: ../../src/basics/bool_logic.txt:20 -msgid "" -"`George Boole`_ put together what is now known as `Boolean algebra`_, which " -"relies on **true** and **false** values and define a set of boolean " -"operations: **not**, **and**, and **or**." -msgstr "" -"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " -"спирається на значення **true** і **false** і визначає набір логічних " -"операцій: **not**, **and** і **or**." - -#: ../../src/basics/bool_logic.txt:24 -msgid "" -"These Boolean values and operators are helpful in programming because they " -"help you decide the course of action in your programs." -msgstr "" -"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " -"допомагають визначити курс дій у ваших програмах." - -#: ../../src/basics/bool_logic.txt:27 -msgid "" -"The **Python boolean** type is one of Python's built-in data types. It's " -"used to represent the truth value of an expression. For example, the " -"expression ``1 < 2`` is ``True``, while the expression ``0 == 1`` is " -"``False``. Understanding how Python Boolean values behave is important to " -"programming well in Python." -msgstr "" -"Тип **Python boolean** є одним із вбудованих типів даних Python. Він " -"використовується для представлення істиності значення виразу. Наприклад, " -"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " -"того, як поводяться логічні значення Python, є важливим для якісного " -"програмування на Python." - -#: ../../src/basics/bool_logic.txt:34 -msgid "Understanding Boolean" -msgstr "Розбираємось з Логічним типом даних" - -#: ../../src/basics/bool_logic.txt:36 -msgid "The Boolean type has only two possible values:" -msgstr "Логічний тип має лише два можливих значення:" - -#: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:121 -#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:149 -#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 -#: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:195 -#: ../../src/basics/bool_logic.txt:197 -msgid "``True``" -msgstr "``True``" - -#: ../../src/basics/bool_logic.txt:39 ../../src/basics/bool_logic.txt:121 -#: ../../src/basics/bool_logic.txt:123 ../../src/basics/bool_logic.txt:151 -#: ../../src/basics/bool_logic.txt:153 ../../src/basics/bool_logic.txt:155 -#: ../../src/basics/bool_logic.txt:193 ../../src/basics/bool_logic.txt:195 -#: ../../src/basics/bool_logic.txt:197 -msgid "``False``" -msgstr "``False``" - -#: ../../src/basics/bool_logic.txt:41 -msgid "No other value will have ``bool`` as it type." -msgstr "Жодне інше значення не матиме тип ``bool``." - -#: ../../src/basics/bool_logic.txt:50 -msgid "" -"The type ``bool`` is **built-in**, meaning it's always available in Python. " -"``True`` and ``False`` are keywords in Python and can't be used as variable " -"names. but ``bool`` type isn't and it's possible assign to the name " -"``bool``, however this is considered bad style." -msgstr "" -"Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " -"і ``False`` є ключовими словами в Python і не можуть використовуватися як " -"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " -"значення, однак це вважається поганим стилем." - -#: ../../src/basics/bool_logic.txt:56 -msgid "Boolean as numbers" -msgstr "Boolean як число" - -#: ../../src/basics/bool_logic.txt:58 -msgid "" -"Booleans are a subtype of **numeric** type in Python. This means they're " -"numbers for all intents and purposes. In other words, you can apply " -"arithmetic operations to Boolean, and you can also compare them to numbers. " -"``True`` value is treated to be 1, and ``False`` value is treated to be 0." -msgstr "" -"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " -"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " -"арифметичні операції до логічних значень, а також порівнювати їх із числами. " -"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " -"0." - -#: ../../src/basics/bool_logic.txt:63 -msgid "There aren't many uses of the numerical nature of Boolean values." -msgstr "" -"Числовій природі логічних значень можна знайти не так багато застосунків." - -#: ../../src/basics/bool_logic.txt:66 -msgid "Truth value testing" -msgstr "Перевірка істинності" - -#: ../../src/basics/bool_logic.txt:68 -msgid "" -"Any object can be tested for truth value. By default an object considered " -"``True``, unless its class defines either. Here are most of built-in objects " -"considered ``False``:" -msgstr "" -"Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " -"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " -"вбудованих об'єктів, які вважаються ``False``:" - -#: ../../src/basics/bool_logic.txt:72 -msgid "constant values: ``None`` and ``False``" -msgstr "константи: ``None`` та ``False``" - -#: ../../src/basics/bool_logic.txt:73 -msgid "" -"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " -"``Fraction(0, 1)``" -msgstr "" -"нуль будь-якого числового типу: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " -"``Fraction(0, 1)``" - -#: ../../src/basics/bool_logic.txt:75 -msgid "" -"empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " -"``range(0)``." -msgstr "" -"порожні послідовності та колекції: ``''``, ``[]``, ``()``, ``{}``, " -"``set()``, ``range(0)``." - -#: ../../src/basics/bool_logic.txt:80 -msgid "" -"If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " -"as ``False``." -msgstr "" -"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " -"``bool`` як ``False``." - -#: ../../src/basics/bool_logic.txt:84 -msgid "Boolean comparison" -msgstr "Логічне Порівняння" - -#: ../../src/basics/bool_logic.txt:88 -msgid "Python provides 3 logical operators:" -msgstr "Python надає 3 логічних оператори:" - -#: ../../src/basics/bool_logic.txt:94 ../../src/basics/bool_logic.txt:228 -msgid "Operator" -msgstr "Оператор" - -#: ../../src/basics/bool_logic.txt:94 -msgid "Logic operator" -msgstr "Логічний оператор" - -#: ../../src/basics/bool_logic.txt:96 -msgid "``not``" -msgstr "``not``" - -#: ../../src/basics/bool_logic.txt:96 -msgid "Negation" -msgstr "Заперечення" - -#: ../../src/basics/bool_logic.txt:98 -msgid "``and``" -msgstr "``and``" - -#: ../../src/basics/bool_logic.txt:98 -msgid "Conjunction" -msgstr "Кон'юнкція" - -#: ../../src/basics/bool_logic.txt:100 -msgid "``or``" -msgstr "``or``" - -#: ../../src/basics/bool_logic.txt:100 -msgid "Disjunction" -msgstr "Диз'юнкція" - -#: ../../src/basics/bool_logic.txt:103 -msgid "" -"With these operators, you can build expressions by connecting Boolean " -"expressions with each other. These operators are **keywords** of the " -"language, so you cannot use them as identifiers without causing a " -"*SyntaxError*." -msgstr "" -"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " -"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " -"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." - -#: ../../src/basics/bool_logic.txt:108 -msgid "Getting started with ``not`` operator" -msgstr "Початок роботи з оператором ``not``" - -#: ../../src/basics/bool_logic.txt:110 -msgid "" -"The ``not`` operator is the Boolean or logic operator that implements " -"negation in Python. It's **unary**, which means that it takes only one " -"**operand**. The operand can be a Boolean expression or any Python object. " -"The task of ``not`` is to reverse the truth value of its operand." -msgstr "" -"Оператор ``not`` є логічним або логічним оператором, який реалізує " -"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " -"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " -"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " -"операнда." - -#: ../../src/basics/bool_logic.txt:115 -msgid "not operator truth table" -msgstr "таблиця істинності оператора not" - -#: ../../src/basics/bool_logic.txt:119 -msgid "``operand``" -msgstr "``operand``" - -#: ../../src/basics/bool_logic.txt:119 -msgid "``not operand``" -msgstr "``not operand``" - -#: ../../src/basics/bool_logic.txt:126 -msgid "This functionality makes it worthwhile in several situations:" -msgstr "Ця функція доцільна в кількох ситуаціях:" - -#: ../../src/basics/bool_logic.txt:129 -msgid "" -"Checking **unmet conditions** in the context of ``if`` statements and " -"``while`` loops" -msgstr "" -"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " -"``while``" - -#: ../../src/basics/bool_logic.txt:131 -msgid "**Inverting the truth value** of an object or expression" -msgstr "**Інвертування значення істинності** об'єкта чи виразу" - -#: ../../src/basics/bool_logic.txt:132 -msgid "Checking if a **value is not in a given container**" -msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" - -#: ../../src/basics/bool_logic.txt:133 -msgid "Checking for an **object's identity**" -msgstr "Перевірка **ідентичності об'єкта**" - -#: ../../src/basics/bool_logic.txt:136 -msgid "Getting started with ``and`` operator" -msgstr "Початок роботи з оператором ``and``" - -#: ../../src/basics/bool_logic.txt:138 -msgid "" -"Python's ``and`` operator is **binary**, which means it takes two " -"**operands**. The operands in an ``and`` expression are commonly known as " -"*conditions*. The result of the operator depends on the truth values of its " -"operands. It'll be ``True`` if **both** are true." -msgstr "" -"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " -"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " -"Результат оператора залежить від істинних значень його операндів. Це буде " -"``True``, якщо **обидва** є істинними." - -#: ../../src/basics/bool_logic.txt:143 -msgid "and operator truth table" -msgstr "таблиця істинності оператора and" - -#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 -msgid "``operand_1``" -msgstr "``operand_1``" - -#: ../../src/basics/bool_logic.txt:147 ../../src/basics/bool_logic.txt:189 -msgid "``operand_2``" -msgstr "``operand_2``" - -#: ../../src/basics/bool_logic.txt:147 -msgid "``operand_1 and operand_2``" -msgstr "``operand_1 and operand_2``" - -#: ../../src/basics/bool_logic.txt:158 -msgid "" -"``and`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``and`` працює не тільки з операндами логічного типу. Його " -"поведінка:" - -#: ../../src/basics/bool_logic.txt:161 -msgid "evaluate 1st operand; return it, if it's ``False`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" - -#: ../../src/basics/bool_logic.txt:162 -msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" - -#: ../../src/basics/bool_logic.txt:163 ../../src/basics/bool_logic.txt:205 -msgid "return 2nd operand" -msgstr "повернути 2-й операнд" - -#: ../../src/basics/bool_logic.txt:177 -msgid "Getting started with ``or`` operator" -msgstr "Початок роботи з оператором ``or``" - -#: ../../src/basics/bool_logic.txt:179 -msgid "" -"With Boolean ``or`` operator, you can connect two Boolean expressions into " -"one compound expression. This makes ``or`` the **binary** operator. At least " -"one subexpression must be ``True`` for the compound expression to be " -"considered ``True``, and it doesn't matter which. If both subexpressions are " -"``False``, then the expression is ``False``." -msgstr "" -"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " -"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " -"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " -"``True``, і не має значення який. Якщо обидва підвирази мають значення " -"``False``, тоді вираз є ``False``." - -#: ../../src/basics/bool_logic.txt:185 -msgid "or operator truth table" -msgstr "таблиця істинності оператора or" - -#: ../../src/basics/bool_logic.txt:189 -msgid "``operand_1 or operand_2``" -msgstr "``operand_1 or operand_2``" - -#: ../../src/basics/bool_logic.txt:200 -msgid "" -"``or`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" - -#: ../../src/basics/bool_logic.txt:203 -msgid "evaluate 1st operand; return it, if it's ``True`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" - -#: ../../src/basics/bool_logic.txt:204 -msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" - -#: ../../src/basics/bool_logic.txt:219 -msgid "Comparison" -msgstr "Порівняння" - -#: ../../src/basics/bool_logic.txt:221 -msgid "" -"There are eight comparison operations in Python. They all have the same " -"priority (which is higher than that of the Boolean operations)." -msgstr "" -"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " -"(вищий, ніж у логічних операцій)." - -#: ../../src/basics/bool_logic.txt:224 -msgid "Comparison operators" -msgstr "Оператори порівняння" - -#: ../../src/basics/bool_logic.txt:228 -msgid "Meaning" -msgstr "Значення" - -#: ../../src/basics/bool_logic.txt:230 -msgid "``<``" -msgstr "``<``" - -#: ../../src/basics/bool_logic.txt:230 -msgid "strictly less than" -msgstr "строго менше ніж" - -#: ../../src/basics/bool_logic.txt:232 -msgid "``<=``" -msgstr "``<=``" - -#: ../../src/basics/bool_logic.txt:232 -msgid "less than or equal" -msgstr "менше або дорівнює" - -#: ../../src/basics/bool_logic.txt:234 -msgid "``>``" -msgstr "``>``" - -#: ../../src/basics/bool_logic.txt:234 -msgid "strictly greater than" -msgstr "строго більше ніж" - -#: ../../src/basics/bool_logic.txt:236 -msgid "``>=``" -msgstr "``>=``" - -#: ../../src/basics/bool_logic.txt:236 -msgid "greater or equal" -msgstr "більше або дорівнює" - -#: ../../src/basics/bool_logic.txt:238 -msgid "``==``" -msgstr "``==``" - -#: ../../src/basics/bool_logic.txt:238 -msgid "equal (aka *equality* comparison)" -msgstr "дорівнює (також відоме як порівняння *equality*)" - -#: ../../src/basics/bool_logic.txt:240 -msgid "``!=``" -msgstr "``!=``" - -#: ../../src/basics/bool_logic.txt:240 -msgid "not equal" -msgstr "не дорівнює" - -#: ../../src/basics/bool_logic.txt:242 -msgid "``is``" -msgstr "``is``" - -#: ../../src/basics/bool_logic.txt:242 -msgid "object identity" -msgstr "ідентичність об'єкта" - -#: ../../src/basics/bool_logic.txt:244 -msgid "``is not``" -msgstr "``is not``" - -#: ../../src/basics/bool_logic.txt:244 -msgid "negated object identity" -msgstr "заперечена ідентичність об'єкта" - -#: ../../src/basics/bool_logic.txt:247 -msgid "" -"Each of these comparison operators return a Boolean value, it's always " -"``True`` or ``False``." -msgstr "" -"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " -"``True`` або ``False``." - -#: ../../src/basics/bool_logic.txt:250 -msgid "" -"You can chain comparison operators together: ``x < y < z`` is equal to ``x < " -"y and y < z``." -msgstr "" -"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " -"< z``." - -#: ../../src/basics/bool_logic.txt:254 -msgid "Equality vs Identity" -msgstr "Рівність та Ідентичність" - -#: ../../src/basics/bool_logic.txt:256 -msgid "" -"It's easier to understand the difference between those by asking the " -"question each answers to." -msgstr "" -"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " -"відповідає." - -#: ../../src/basics/bool_logic.txt:259 -msgid "The question for ``==`` (*equality*) is:" -msgstr "Питання для ``==`` (*equality*) таке:" - -#: ../../src/basics/bool_logic.txt:261 -msgid "Is object on the left **equal** to the object on the right" -msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" - -#: ../../src/basics/bool_logic.txt:263 -msgid "The question for ``is`` (*identity*) is:" -msgstr "Питання для ``is`` (*identity*) таке:" - -#: ../../src/basics/bool_logic.txt:265 -msgid "Is object on the left **the same** as the object on the right" -msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" - -#: ../../src/basics/bool_logic.txt:267 -msgid "" -"For example, if there are two cars of the same model, same color etc. in " -"front of you - these cars are equal, but they aren't ident to each other. " -"But if you are shown two pictures of the same car, you understand that the " -"cars on those pictures are the same object." -msgstr "" -"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " -"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " -"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " -"одним і тим же об'єктом." - -#: ../../src/basics/controlflow.txt:-1 -msgid "Control flow in Python" -msgstr "Контроль потоку в Python" - -#: ../../src/basics/controlflow.txt:-1 -msgid "python, basics, control, if, for, while, condition, loop" -msgstr "python, basics, control, if, for, while, condition, loop" - -#: ../../src/basics/controlflow.txt:8 -msgid "Control Flow" -msgstr "Керування виконанням" - -#: ../../src/basics/controlflow.txt:11 -msgid "``if`` statement" -msgstr "Вираз ``if``" - -#: ../../src/basics/controlflow.txt:13 -msgid "" -"Perhaps the most well-known statement type is ``if`` statement. For example:" -msgstr "Мабуть, найвідомішим типом оператора є оператор ``if``. Наприклад:" - -#: ../../src/basics/controlflow.txt:15 -msgid "if statement base example" -msgstr "базовий приклад оператора if" - -#: ../../src/basics/controlflow.txt:29 -msgid "But let's dive into ``if`` statement with more simple examples." -msgstr "" -"Але давайте зануримося в інструкцію ``if`` з більш простими прикладами." - -#: ../../src/basics/controlflow.txt:32 -msgid "How it works" -msgstr "Як це працює" - -#: ../../src/basics/controlflow.txt:34 -msgid "" -"**if** statement is defined with a keyword ``if`` followed by a Boolean " -"expression or any object and finished with colon. The statement requires a " -"*body*: other statements to execute, also called an *if block*. The body is " -"indented at the same distance from the left (in Python we use 4 spaces to " -"indent a single block of code)." -msgstr "" -"Оператор **if** визначається ключовим словом ``if``, за яким слідує логічний " -"вираз або будь-який об'єкт і завершується двокрапкою. Оператор потребує " -"*тіло*: інші оператори для виконання, які також називають блоком *if*. Тіло " -"має відступ на однаковій відстані зліва (у Python ми використовуємо 4 " -"пробіли для відступу одного блоку коду)." - -#: ../../src/basics/controlflow.txt:40 -msgid "" -"The body's statements will be executed only in case **if** expression is " -"``True``." -msgstr "" -"Оператори тіла виконуватимуться лише у випадку, якщо вираз **if** має " -"значення ``True``." - -#: ../../src/basics/controlflow.txt:53 -msgid "" -"The ``print`` statement on line #6 will be executed only for even value of " -"``number`` variable." -msgstr "" -"Оператор ``print`` у рядку #6 буде виконано лише для парного значення " -"змінної ``number``." - -#: ../../src/basics/controlflow.txt:57 -msgid "``else`` block" -msgstr "Блок ``else``" - -#: ../../src/basics/controlflow.txt:59 -msgid "" -"``if`` can be used by its own, it can extend its behavior with ``else`` " -"block. The general syntax for ``else`` body is the same: at least one " -"indented statement. But ``else`` doesn't take any expression after it. This " -"block of code will be executed only that the ``if`` statement truth check " -"fails." -msgstr "" -"``if`` може використовуватися самостійно, він може розширити свою поведінку " -"за допомогою блоку ``else``. Загальний синтаксис для тіла ``else`` той " -"самий: принаймні один оператор із відступом. Але ``else`` не приймає жодного " -"виразу після нього. Цей блок коду буде виконано лише тоді, коли перевірка " -"істинності оператора ``if`` буде невдалою." - -#: ../../src/basics/controlflow.txt:76 -msgid "" -"You can attach **only one** else block to **if statement**. And you cannot " -"use ``else`` statement on its own - this will cause *SyntaxError*." -msgstr "" -"Ви можете приєднати **лише один** блок else до **інструкції if**. І ви не " -"можете використовувати оператор ``else`` сам по собі - це спричинить " -"*SyntaxError*." - -#: ../../src/basics/controlflow.txt:80 -msgid "``elif`` block(s)" -msgstr "Блок(и) ``elif``" - -#: ../../src/basics/controlflow.txt:82 -msgid "" -"``elif`` (*else if*) statement may be considered as semi-statement between " -"``if`` and ``else`` statements. In case your program has more than two " -"dedicated choices you are able to extends control flow by appending ``elif`` " -"blocks after ``if`` statement. The syntax is pretty similar to ``if`` " -"statement. Each ``elif`` has its own boolean expression or an object to test " -"for the truth value." -msgstr "" -"Оператор ``elif`` (*else if*) можна розглядати як напівоператор між ``if`` " -"та ``else``. Якщо у вашій програмі є більше двох виділених варіантів, ви " -"можете розширити потік керування, додавши блоки ``elif`` після оператора " -"``if``. Синтаксис дуже схожий на оператор if. Кожен ``elif`` має свій " -"власний логічний вираз або об'єкт для перевірки значення істинності." - -#: ../../src/basics/controlflow.txt:89 -msgid "" -"You can attach as many ``elif`` statements as it needed. But you cannot use " -"``elif`` without ``if`` statement." -msgstr "" -"Ви можете додати скільки завгодно операторів ``elif``. Але ви не можете " -"використовувати ``elif`` без оператора ``if``." - -#: ../../src/basics/controlflow.txt:92 -msgid "" -"Python will test conditions in ``if`` and ``elif`` statements from top to " -"bottom. The first one, which considered to be ``True`` will be executed. All " -"others will be skipped." -msgstr "" -"Python перевірить умови в операторах ``if`` та ``elif`` зверху вниз. Буде " -"виконано перший, який вважається ``True``. Усі інші будуть проігноровано." - -#: ../../src/basics/controlflow.txt:96 -msgid "" -"If there were no truth conditions ``else`` block will be executed (if " -"exists)." -msgstr "Якщо не було істиних умов, буде виконано блок ``else`` (якщо існує)." - -#: ../../src/basics/controlflow.txt:112 -msgid "" -"The order conditions appears matter. The truth test goes from top to bottom " -"and stops at first expression which is ``True``." -msgstr "" -"Порядок у якому визначено умови має значення. Перевірка істинності йде " -"зверху вниз і зупиняється на першому виразі, який є ``True``." - -#: ../../src/basics/controlflow.txt:117 -msgid "Usage" -msgstr "Використання" - -#: ../../src/basics/controlflow.txt:119 -msgid "" -"``if/elif/else`` statements help you to control which portion of your code " -"is executed based on conditions from outer scope." -msgstr "" -"Оператори ``if/elif/else`` допомагають вам контролювати, яка частина вашого " -"коду виконується на основі умов ззовні." - -#: ../../src/basics/decorators.txt:-1 -msgid "Python decorators" -msgstr "Декоратори в Python" - -#: ../../src/basics/decorators.txt:-1 -msgid "python, basics, decorators" -msgstr "python, basics, decorators" - -#: ../../src/basics/decorators.txt:11 -msgid "Decorators" -msgstr "Декоратори" - -#: ../../src/basics/decorators.txt:13 -msgid "" -"Decorators provide a simple syntax for calling higher-order functions :cite:" -"`realpython:decorators`." -msgstr "" -"Декоратори забезпечують простий синтаксис для виклику функцій вищого " -"порядку :cite:`realpython:decorators`." - -#: ../../src/basics/decorators.txt:18 -msgid "There is some kind of misunderstanding in definitions." -msgstr "Є деяке непорозуміння у визначеннях." - -#: ../../src/basics/decorators.txt:20 -msgid "" -"**Decorator** is a function returning another function, usually applied as a " -"function transformation using the ``@wrapper`` syntax :cite:`docs-python:" -"term-decorator`." -msgstr "" -"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " -"застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" -"cite:`docs-python:term-decorator`." - -#: ../../src/basics/decorators.txt:24 -msgid "" -"However, that's no quit enough to describe it. The more complete definition " -"is:" -msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" - -#: ../../src/basics/decorators.txt:27 -msgid "" -"**Decorator** is a structural design pattern that lets you attach new " -"behaviors to objects by placing these objects inside special wrapper objects " -"that contain the behaviors :cite:`refactoring.guru:decorator`." -msgstr "" -"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " -"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " -"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." - -#: ../../src/basics/decorators.txt:31 -msgid "" -"Before you understand decorators, you must first understand how functions " -"work." -msgstr "" -"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " -"функції." - -#: ../../src/basics/decorators.txt:35 -msgid "First-class objects" -msgstr "Об'єкти першого класу" - -#: ../../src/basics/decorators.txt:37 -msgid "" -"In Python functions are `first-class objects`_. Everything in Python is an " -"object. Functions are objects too." -msgstr "" -"У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " -"Функції також є об'єктами." - -#: ../../src/basics/decorators.txt:41 -msgid "Inner functions" -msgstr "Внутрішні функції" - -#: ../../src/basics/decorators.txt:43 -msgid "" -"Functions can be nested. This means it is possible to define functions " -"inside other functions." -msgstr "" -"Функції можуть бути вкладеними. Це означає, що можна визначати функції " -"всередині інших функцій." - -#: ../../src/basics/decorators.txt:46 -msgid "Nested functions example" -msgstr "Приклад вкладених функцій" - -#: ../../src/basics/decorators.txt:60 -msgid "" -"The order in which inner functions are defined no matters. The function " -"definition does not execute the function body; this gets executed only when " -"the function is called. Furthermore, the inner functions are not defined " -"until the parent function is called. They are locally scoped to their " -"parent. Trying to call ``heapify`` function outside of ``heap_sort`` will " -"cause ``NameError`` exception." -msgstr "" -"Порядок визначення внутрішніх функцій не має значення. Визначення функції не " -"виконує тіло функції; це виконується лише під час виклику функції. Крім " -"того, внутрішні функції не визначені, доки не буде викликана батьківська " -"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " -"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " -"``NameError``." - -#: ../../src/basics/decorators.txt:68 -msgid "Functions are objects" -msgstr "Функції є об'єктами" - -#: ../../src/basics/decorators.txt:70 -msgid "" -"This means functions can be passed around and used as arguments, just like " -"any other object (e.g. *int*, *str* etc.)." -msgstr "" -"Це означає, що функції можна передавати й використовувати як аргументи, як і " -"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." - -#: ../../src/basics/decorators.txt:95 -msgid "Returning functions" -msgstr "Повернення функцій" - -#: ../../src/basics/decorators.txt:97 -msgid "" -"Since function can be passed as an argument, it may be returned from another " -"function." -msgstr "" -"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " -"функції." - -#: ../../src/basics/decorators.txt:120 -msgid "``parent`` returns functions themselves, there are no parentheses." -msgstr "``parent`` повертає самі функції, тут нема дужок." - -#: ../../src/basics/decorators.txt:122 -msgid "" -"After running the code snippet above, ``first`` refers the ``first_child`` " -"function from the inner ``parent`` scope. From now it can be used to call " -"the target function it refers." -msgstr "" -"Після виконання наведеного вище фрагмента коду ``first`` посилається на " -"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " -"можна використовувати для виклику цільової функції, на яку він посилається." - -#: ../../src/basics/decorators.txt:134 -msgid "Simple decorators" -msgstr "Прості декоратори" - -#: ../../src/basics/decorators.txt:136 -msgid "" -"Now you're ready to move on and see the magical beast that is the Python " -"decorators. Let's start with a simple example:" -msgstr "" -"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " -"Python. Почнемо з простого прикладу:" - -#: ../../src/basics/decorators.txt:154 -msgid "Running function:" -msgstr "Запуск функцій:" - -#: ../../src/basics/decorators.txt:165 -msgid "" -"The common way to use decorators is to replace the original function with a " -"decorated one:" -msgstr "" -"Поширеним способом використання декораторів є заміна оригінальної функції на " -"декоровану:" - -#: ../../src/basics/decorators.txt:176 -msgid "" -"``say_hello`` function is the reference to the ``decorator.." -"wrapper``, which itself is bound to the original ``say_hello`` function. " -"There is a syntactic sugar to do this, called *pie-syntax*. The following " -"example does exact the same things as the first decorator example:" -msgstr "" -"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " -"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " -"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " -"ті самі речі, що й перший приклад декоратора:" - -#: ../../src/basics/decorators.txt:198 -msgid "" -"There is no way to *undecorate* object in Python. Once something is bound to " -"the decorator's wrapper - it is decorated forever." -msgstr "" -"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " -"обгортки декоратора - воно прикрашене назавжди." - -#: ../../src/basics/decorators.txt:201 -msgid "" -"A decorated function still remains a **function**. So, it can be decorated " -"once more time again, and again, and again..." -msgstr "" -"Декорована функція все ще залишається **функцією**. Отже, його можна " -"прикрашати ще раз, і ще, і ще..." - -#: ../../src/basics/decorators.txt:253 -msgid "" -"\"Wrapper\" is the alternative nickname for the Decorator pattern that " -"clearly expresses the main idea of the pattern. A wrapper is an object that " -"can be linked with some target object. The wrapper contains the same set of " -"methods as the target and delegates to it all requests it receives. However, " -"the wrapper may alter the result by doing something either before or after " -"it passes the request to the target." -msgstr "" -"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " -"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " -"деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " -"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " -"результат, зробивши щось до або після того, як вона передає запит цільовому " -"об'єкту." - -#: ../../src/basics/decorators.txt:261 -msgid "Passing arguments to the wrapper" -msgstr "Передача аргументів до wrapper" - -#: ../../src/basics/decorators.txt:263 -msgid "" -"Until now the examples use *simple* decorators. But what if the decorated " -"function gets some arguments? This will cause ``TypeError`` exception that " -"tell that \"arguments are missed\". This can be fixed with just passing " -"arguments to the ``wrapper`` inner function." -msgstr "" -"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " -"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " -"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " -"аргументи внутрішній функції ``wrapper``." - -#: ../../src/basics/decorators.txt:289 -msgid "" -"If case you're trying to make a generic decorator, you may pass ``*args`` " -"and ``**kwargs`` instead of exact arguments:" -msgstr "" -"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " -"``*args`` і ``**kwargs`` замість точних аргументів:" - -#: ../../src/basics/decorators.txt:308 -msgid "Passing arguments to decorator" -msgstr "Передача аргументів декоратору" - -#: ../../src/basics/decorators.txt:310 -msgid "" -"At last it's time to know how to pass arguments to the decorator. Here is a " -"simple implementation of ``defer`` decorator which deferred the function " -"execution for some time:" -msgstr "" -"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " -"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " -"час:" - -#: ../../src/basics/decorators.txt:353 -msgid "Class decorators" -msgstr "Декоратори класів" - -#: ../../src/basics/decorators.txt:355 -msgid "" -"There are some pre-defined decorators exists for usage together with " -"classes. They are:" -msgstr "" -"Існують деякі попередньо визначені декоратори для використання разом із " -"класами. Це:" - -#: ../../src/basics/decorators.txt:358 -msgid "``classmethod``" -msgstr "``classmethod``" - -#: ../../src/basics/decorators.txt:359 -msgid "``staticmethod``" -msgstr "``staticmethod``" - -#: ../../src/basics/decorators.txt:360 -msgid "``property``" -msgstr "``property``" - -#: ../../src/basics/decorators.txt:362 -msgid "" -"If you develop an intuitive understanding for their differences you'll be " -"able to write object-oriented Python that communicates its intent more " -"clearly and will be easier to maintain in the long run :cite:`realpython:" -"methods-demystified`." -msgstr "" -"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " -"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " -"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" -"methods-demystified`." - -#: ../../src/basics/decorators.txt:368 -msgid "Class methods" -msgstr "Методи класу" - -#: ../../src/basics/decorators.txt:370 -msgid "" -"Instead of accepting a ``self`` parameter, class methods take a ``cls`` " -"parameter that points to the class — and not the object instance — when the " -"method is called." -msgstr "" -"Замість того, щоб приймати параметр self, під час виклику методу методи " -"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " -"класу." - -#: ../../src/basics/decorators.txt:374 -msgid "" -"Because the class method only has access to this ``cls`` argument, it can't " -"modify object instance state. That would require access to ``self``. " -"However, class methods can still modify class state that applies across all " -"instances of the class." -msgstr "" -"Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " -"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " -"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " -"екземплярів класу." - -#: ../../src/basics/decorators.txt:379 -msgid "" -"The common usage for ``classmethod`` is provide alternative initializers." -msgstr "" -"Загальним використанням ``методи класу`` є надання альтернативних " -"ініціалізаторів." - -#: ../../src/basics/decorators.txt:382 -msgid "Static methods" -msgstr "Статичні методи" - -#: ../../src/basics/decorators.txt:384 -msgid "" -"This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " -"course it's free to accept an arbitrary number of other parameters)." -msgstr "" -"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " -"він може приймати будь-яку кількість інших параметрів)." - -#: ../../src/basics/decorators.txt:387 -msgid "" -"Therefore a static method can neither modify object state nor class state. " -"Static methods are restricted in what data they can access - and they're " -"primarily a way to namespace your methods." -msgstr "" -"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " -"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " -"і вони, перш за все, є способом простору імен ваших методів." - -#: ../../src/basics/decorators.txt:391 -msgid "" -"It's tricky to explain ``staticmethod`` usage. Almost always you can create " -"a dedicated function instead of static method. But sometimes you need to " -"bind some logic independent from class itself or its instances to a class - " -"it common to encapsulate it with ``staticmethod``." -msgstr "" -"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " -"створити спеціальну функцію замість статичного методу. Але іноді вам " -"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " -"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." - -#: ../../src/basics/decorators.txt:397 -msgid "Properties" -msgstr "Властивості" - -#: ../../src/basics/decorators.txt:399 -msgid "" -"It's a way to bind a method name to access it as an attribute. Properties " -"are **read-only** by default. This means a value cannot be assigned to " -"``property member``." -msgstr "" -"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " -"замовчуванням властивості доступні **лише для читання**. Це означає, що " -"значення не можна призначити ``члену властивості``." - -#: ../../src/basics/decorators.txt:404 -msgid "Some examples" -msgstr "Деякі приклади" - -#: ../../src/basics/exceptions.txt:-1 -msgid "Handling exceptions in Python" -msgstr "Опрацювання винятків в Python" - -#: ../../src/basics/exceptions.txt:-1 -msgid "python, exceptions, handling, try, except, finally" -msgstr "python, exceptions, handling, try, except, finally" - -#: ../../src/basics/exceptions.txt:11 -msgid "Errors and Exceptions" -msgstr "Помилки та винятки" - -#: ../../src/basics/exceptions.txt:13 -msgid "" -"There are (at least) two distinguishable kinds of errors: *syntax errors* " -"and *exceptions* :cite:`docs-python:errors`." -msgstr "" -"Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" -"cite:`docs-python:errors`." - -#: ../../src/basics/exceptions.txt:17 -msgid "Syntax errors" -msgstr "Синтаксичні помилки" - -#: ../../src/basics/exceptions.txt:19 -msgid "Syntax errors are also known as parsing errors." -msgstr "Синтаксичні помилки також відомі як помилки Python парсера." - -#: ../../src/basics/exceptions.txt:29 -msgid "" -"The parser repeats the offending line and displays a little \"arrow\" " -"pointing at the earliest point in the line where the error was detected. The " -"error is caused by (or at least detected at) the token preceding the arrow." -msgstr "" -"Синтаксичний аналізатор повторює неправильний рядок і відображає маленьку " -"\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " -"Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." - -#: ../../src/basics/exceptions.txt:34 -msgid "Exceptions" -msgstr "Винятки" - -#: ../../src/basics/exceptions.txt:36 -msgid "" -"Even if a statement or expression is syntactically correct, it may cause an " -"error when an attempt is made to execute it. Errors detected during " -"execution are called exceptions and are not unconditionally fatal: you will " -"soon learn how to handle them in Python programs." -msgstr "" -"Навіть якщо оператор або вираз синтаксично правильний, це може спричинити " -"помилку під час спроби його виконання. Помилки, виявлені під час виконання, " -"називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " -"обробляти в програмах на Python." - -#: ../../src/basics/exceptions.txt:41 -msgid "" -"Exceptions come in different types, and the type is printed as part of the " -"message." -msgstr "" -"Винятки бувають різних типів, і тип друкується як частина повідомлення." - -#: ../../src/basics/exceptions.txt:44 -msgid "For example, the ``div`` function implemented as" -msgstr "Наприклад, функція ``div``, реалізована як" - -#: ../../src/basics/exceptions.txt:53 -msgid "" -"may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " -"parameter." -msgstr "" -"може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " -"``y``." - -#: ../../src/basics/exceptions.txt:56 -msgid "" -"Standard exception names are built-in identifiers (not reserved keywords)." -msgstr "" -"Стандартні назви винятків є вбудованими ідентифікаторами (а не " -"зарезервованими ключовими словами)." - -#: ../../src/basics/exceptions.txt:58 -msgid "The list of `built-in exceptions`_" -msgstr "Список `вбудованих винятків`_" - -#: ../../src/basics/exceptions.txt:61 -msgid "Tracebacks" -msgstr "Відстеження" - -#: ../../src/basics/exceptions.txt:63 -msgid "\"File\" is replaced with a *dummy string* within the examples." -msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." - -#: ../../src/basics/exceptions.txt:65 -msgid "Let's assume the following modules structure:" -msgstr "Припустимо наступну структуру модулів:" - -#: ../../src/basics/exceptions.txt:73 -msgid "" -"The **main** module imports a ``div`` function implemented above from the " -"**func** module. The code in main is implemented as follows:" -msgstr "" -"Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " -"**func**. Основний код реалізовано наступним чином:" - -#: ../../src/basics/exceptions.txt:85 -msgid "" -"While running the code with correct inputs it will work fine. But there are " -"at two exceptions for this script." -msgstr "" -"Під час виконання коду з правильними введеннями він працюватиме нормально. " -"Але для цього сценарію є два винятки." - -#: ../../src/basics/exceptions.txt:88 -msgid "" -"The first one is related on type conversion. While running the main script " -"there is case of invalid input." -msgstr "" -"Перший пов'язаний з перетворенням типів. Під час виконання основного " -"сценарію є випадок неправильного введення." - -#: ../../src/basics/exceptions.txt:100 -msgid "" -"Note the **traceback** indicates the module and the exact line of code that " -"causes the exception." -msgstr "" -"Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " -"викликає виняток." - -#: ../../src/basics/exceptions.txt:103 -msgid "" -"The second one exception occurs when a 0 is passed as the second parameter " -"to ``div`` function. The traceback would look like:" -msgstr "" -"Другий виняток виникає, коли 0 передається як другий параметр функції " -"``div``. Трасування виглядатиме так:" - -#: ../../src/basics/exceptions.txt:117 -msgid "" -"The traceback indicates all calls (top to bottom) that cause an exception." -msgstr "" -"Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " -"виняток." - -#: ../../src/basics/exceptions.txt:120 ../../src/basics/syntax.txt -msgid "Exception handling" -msgstr "Обробка винятків" - -#: ../../src/basics/exceptions.txt:122 -msgid "" -"It is possible to write programs that handle selected exceptions. The " -"``try`` statement is used to do that." -msgstr "" -"Можна писати програми, які оброблятимуть вибрані винятки. Для цього " -"використовується інструкція ``try``." - -#: ../../src/basics/exceptions.txt:125 -msgid "The try statement works as follows." -msgstr "Інструкція try працює наступним чином." - -#: ../../src/basics/exceptions.txt:127 -msgid "" -"First, the try clause (the statement(s) between the try and except keywords) " -"is executed." -msgstr "" -"Спочатку виконується речення try (вираз(и) між ключовими словами try і " -"except)." - -#: ../../src/basics/exceptions.txt:129 -msgid "" -"If no exception occurs, the except clause is skipped and execution of the " -"try statement is finished." -msgstr "" -"Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " -"оператора try завершується." - -#: ../../src/basics/exceptions.txt:131 -msgid "" -"If an exception occurs during execution of the try clause, the rest of the " -"clause is skipped. Then, if its type matches the exception named after the " -"except keyword, the except clause is executed, and then execution continues " -"after the try/except block." -msgstr "" -"Якщо під час виконання try виникає виняток, решта пропозиції пропускається. " -"Потім, якщо його тип збігається з винятком, названим за ключовим словом " -"osim, виконується пропозиція, а потім виконання продовжується після блоку " -"try/except." - -#: ../../src/basics/exceptions.txt:135 -msgid "" -"If an exception occurs which does not match the exception named in the " -"except clause, it is passed on to outer try statements; if no handler is " -"found, it is an unhandled exception and execution stops with a message as " -"shown above." -msgstr "" -"Якщо виникає виняток, який не збігається з винятком, названим у реченні " -"винятку, він передається зовнішнім операторам try; якщо обробник не " -"знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " -"повідомленням, як показано вище." - -#: ../../src/basics/exceptions.txt:152 -msgid "" -"A try statement may have more than one except clause, to specify handlers " -"for different exceptions." -msgstr "" -"Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " -"різних винятків." - -#: ../../src/basics/exceptions.txt:182 -msgid "Handling ALL exception" -msgstr "Опрацювання усіх винятків" - -#: ../../src/basics/exceptions.txt:184 -msgid "It's a bad practice to handle **all** exceptions." -msgstr "Обробляти **всі** винятки – це погана практика." - -#: ../../src/basics/exceptions.txt:186 -msgid "" -"When indicating an ``except`` block without specifying an exception to catch " -"it will work for any exception, that occurs in ``try`` block. The same is " -"relevant for handling ``BaseException`` and ``Exception``. But you can never " -"say what exact goes wrong." -msgstr "" -"Якщо вказати блок ``except`` без визначення винятку для перехоплення, він " -"працюватиме для будь-якого винятку, який виникає в блоці ``try``. Те саме " -"стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " -"можливо сказати, який саме виняток стався." - -#: ../../src/basics/exceptions.txt:191 -msgid "" -"However, this scenario may work for logging an exception and raising it " -"again to be handled on upper levels." -msgstr "" -"Проте, такий сценарій може працювати для логування винятків, після чого вони " -"підійматься заново, щоб бути опрацьованими на вищих рівнях програми." - -#: ../../src/basics/exceptions.txt:213 -msgid "" -"All exceptions are inherited from ``Exception`` class, which is subclass of " -"``BaseException``. So, you can never know what exactly goes wrong with your " -"code." -msgstr "" -"Усі винятки успадковуються від класу ``Exception``, який є підкласом " -"``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " -"вашим кодом." - -#: ../../src/basics/exceptions.txt:218 -msgid "``finally`` statement" -msgstr "Вираз ``finally``" - -#: ../../src/basics/exceptions.txt:220 -msgid "" -"The ``try`` statement cannot be used itself. This will cause " -"``SyntaxError``. Either ``except`` or ``finally`` block is required to be " -"included." -msgstr "" -"Оператор ``try`` не може бути використаний сам по собі. Це спричинить " -"``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." - -#: ../../src/basics/exceptions.txt:223 -msgid "" -"While the ``except`` block tries to catch the exceptions if any, the " -"``finally`` block will be always executed regardless of the exception occurs." -msgstr "" -"У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " -"блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." - -#: ../../src/basics/exceptions.txt:249 -msgid "``else`` statement" -msgstr "Вираз ``else``" - -#: ../../src/basics/exceptions.txt:251 -msgid "" -"The ``try`` statement can also use ``else`` (which is optional). The " -"statements within this block will be execute only in case there were no " -"exceptions raised while running the ``try``." -msgstr "" -"Оператор ``try`` також може використовувати ``else`` (який є " -"необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " -"якщо під час виконання ``try`` не було викликано винятків." - -#: ../../src/basics/exceptions.txt:273 -msgid "Raising exceptions" -msgstr "Винятки: raising" - -#: ../../src/basics/exceptions.txt:275 -msgid "" -"The ``raise`` statement allows the programmer to force a specified exception " -"to occur. The sole argument to raise indicates the exception to be raised. " -"This must be either an exception instance or an exception class (a class " -"that derives from ``BaseException``, such as ``Exception`` or one of its " -"subclasses). If an exception class is passed, it will be implicitly " -"instantiated by calling its constructor with no arguments." -msgstr "" -"Інструкція ``raise`` дозволяє програмісту примусово викликати певний " -"виняток. Єдиний аргумент, який потрібно викликати, вказує на виняток, який " -"потрібно викликати. Це має бути екземпляр винятку або клас винятку (клас, " -"який походить від ``BaseException``, наприклад ``Exception`` або один із " -"його підкласів). Якщо передано клас винятків, він буде неявно створений " -"шляхом виклику його конструктора без аргументів." - -#: ../../src/basics/exceptions.txt:287 -msgid "" -"``raise`` statement itself will re-raise all the exceptions within the " -"context. Also exceptions can be raised again from the ``except`` block. It's " -"a common pattern to catch the exception for loggers and when re-raise it." -msgstr "" -"Сам оператор ``raise`` повторно викличе всі винятки в контексті опрацювання. " -"Крім того, винятки можуть бути викликані знову з блоку ``except``. Це " -"загальний шаблон для перехоплення винятку для реєстрації повідомлення про " -"виняткову ситуацію і повторного його підняття." - -#: ../../src/basics/exceptions.txt:300 -msgid "Creating custom exceptions" -msgstr "Створення винятків" - -#: ../../src/basics/exceptions.txt:302 -msgid "" -"Programs may name their own exceptions by creating a new exception class. " -"Exceptions should typically be derived from the Exception class, either " -"directly or indirectly." -msgstr "" -"Програми можуть називати власні винятки, створюючи новий клас винятків. " -"Винятки зазвичай мають бути похідними від класу Exception, прямо чи " -"опосередковано." - -#: ../../src/basics/exceptions.txt:306 -msgid "" -"Exception classes can be defined which do anything any other class can do, " -"but are usually kept simple, often only offering a number of attributes that " -"allow information about the error to be extracted by handlers for the " -"exception." -msgstr "" -"Можна визначити класи винятків, які роблять усе, що може зробити будь-який " -"інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " -"які дозволяють обробникам витягувати інформацію про помилку для винятку." - -#: ../../src/basics/exceptions.txt:311 -msgid "" -"Most exceptions are defined with names that end in \"Error\", similar to the " -"naming of the standard exceptions." -msgstr "" -"Більшість винятків визначено з іменами, які закінчуються на \"Error\", " -"подібно до назв стандартних винятків." - -#: ../../src/basics/exceptions.txt:314 -msgid "" -"Many standard modules define their own exceptions to report errors that may " -"occur in functions they define." -msgstr "" -"Багато стандартних модулів визначають власні винятки, щоб повідомляти про " -"помилки, які можуть виникнути у функціях, які вони визначають." - -#: ../../src/basics/exceptions.txt:317 -msgid "User-defined exception" -msgstr "Виняток, визначений користувачем" - -#: ../../src/basics/functions.txt:-1 -msgid "Python functions" -msgstr "Функції в Python" - -#: ../../src/basics/functions.txt:-1 -msgid "python, basics, functions" -msgstr "python, basics, functions" - -#: ../../src/basics/functions.txt:8 ../../src/basics/modules.txt:8 -#: ../../src/basics/pep8.txt:8 ../../src/basics/testing.txt:8 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/basics/functions.txt:16 ../../src/basics/syntax.txt -msgid "Functions" -msgstr "Функції" - -#: ../../src/basics/index.txt:-1 -msgid "Python course - Basics" -msgstr "Курс Python - Основи" - -#: ../../src/basics/index.txt:-1 -msgid "python, basics, index" -msgstr "python, basics, index" - -#: ../../src/basics/index.txt:8 -msgid "Python Basics" -msgstr "Основи Python" - -#: ../../src/basics/modules.txt:-1 -msgid "Modules and imports in Python" -msgstr "Модулі та імпорти в Pythons" - -#: ../../src/basics/modules.txt:-1 -msgid "python, basics, modules, import" -msgstr "python, basics, modules, import" - -#: ../../src/basics/modules.txt:16 -msgid "Pythons Modules and Imports" -msgstr "Модулі та імпорт Pythons" - -#: ../../src/basics/pep8.txt:-1 -msgid "PEP-8 style guide" -msgstr "Керівництво по стилю PEP8" - -#: ../../src/basics/pep8.txt:-1 -msgid "python, style, guide" -msgstr "python, style, guide" - -#: ../../src/basics/pep8.txt:16 -msgid "Style Guides: PEP8" -msgstr "Керівництво по стилю: PEP8" - -#: ../../src/basics/stdtypes.txt:-1 -msgid "Python built-in types" -msgstr "Вбудовані типи даних в Python" - -#: ../../src/basics/stdtypes.txt:-1 -msgid "python, basics" -msgstr "python, basics" - -#: ../../src/basics/stdtypes.txt:8 -msgid "Built-in Types" -msgstr "Вбудовані типи" - -#: ../../src/basics/stdtypes.txt:10 -msgid "" -"The principal built-in types are numerics, sequences, mappings, classes, " -"instances and exceptions :cite:`docs-python:stdtypes`. This section covers " -"only the most base of them. Others will be discussed in the future within " -"their own topics." -msgstr "" -"Основними вбудованими типами є числа, послідовності, відображення, класи, " -"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " -"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " -"власних тем." - -#: ../../src/basics/stdtypes.txt:16 -msgid "Numeric types" -msgstr "Числові типи" - -#: ../../src/basics/stdtypes.txt:18 -msgid "" -"There are 3 distinct numeric types: *integers*, *floating point numbers*, " -"and *complex numbers*. In addition, Booleans are a subtype of integers. " -"Integers have unlimited precision. Floating point numbers are usually " -"implemented using ``double`` in C. Complex numbers have a real and imaginary " -"part, which are each a floating point number." -msgstr "" -"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " -"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " -"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " -"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " -"кожна з яких є числом з плаваючою комою." - -#: ../../src/basics/stdtypes.txt:24 -msgid "" -"Numbers are created by numeric literals or as the result of built-in " -"functions and operators. Unadorned integer literals (including hex, octal " -"and binary numbers) yield integers. Numeric literals containing a decimal " -"point or an exponent sign yield floating point numbers. Appending ``j`` or " -"``J`` to a numeric literal yields an imaginary number (a complex number with " -"a zero real part) which you can add to an integer or float to get a complex " -"number with real and imaginary parts." -msgstr "" -"Числа створюються за допомогою числових літералів або як результат " -"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " -"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " -"літерали, що містять десяткову кому або знак експоненти, дають числа з " -"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " -"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " -"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " -"з дійсною та уявною частинами." - -#: ../../src/basics/stdtypes.txt:33 -msgid "Supported operations" -msgstr "Операції підтримки" - -#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 -#: ../../src/basics/stdtypes.txt:204 -msgid "Operation" -msgstr "Операції" - -#: ../../src/basics/stdtypes.txt:36 ../../src/basics/stdtypes.txt:154 -#: ../../src/basics/stdtypes.txt:204 -msgid "Result" -msgstr "Результат" - -#: ../../src/basics/stdtypes.txt:38 -msgid "``x + y``" -msgstr "``x + y``" - -#: ../../src/basics/stdtypes.txt:38 -msgid "sum of *x* and *y*" -msgstr "сума *x* і *y*" - -#: ../../src/basics/stdtypes.txt:40 -msgid "``x - y``" -msgstr "``x - y``" - -#: ../../src/basics/stdtypes.txt:40 -msgid "difference of *x* and *y*" -msgstr "різниця між *x* і *y*" - -#: ../../src/basics/stdtypes.txt:42 -msgid "``x * y``" -msgstr "``x * y``" - -#: ../../src/basics/stdtypes.txt:42 -msgid "product of *x* and *y*" -msgstr "добуток *x* і *y*" - -#: ../../src/basics/stdtypes.txt:44 -msgid "``x / y``" -msgstr "``x / y``" - -#: ../../src/basics/stdtypes.txt:44 -msgid "quotient of *x* and *y*" -msgstr "частка *x* і *y*" - -#: ../../src/basics/stdtypes.txt:46 -msgid "``x // y``" -msgstr "``x // y``" - -#: ../../src/basics/stdtypes.txt:46 -msgid "floored quotient of *x* and *y*" -msgstr "цілочисельне ділення *x* і *y*" - -#: ../../src/basics/stdtypes.txt:48 -msgid "``x % y``" -msgstr "``x % y``" - -#: ../../src/basics/stdtypes.txt:48 -msgid "remainder of ``x / y``" -msgstr "залишок від ділення ``x / y``" - -#: ../../src/basics/stdtypes.txt:50 -msgid "``-x``" -msgstr "``-x``" - -#: ../../src/basics/stdtypes.txt:50 -msgid "*x* negated" -msgstr "*x* від'ємне" - -#: ../../src/basics/stdtypes.txt:52 -msgid "``+x``" -msgstr "``+x``" - -#: ../../src/basics/stdtypes.txt:52 -msgid "*y* unchanged" -msgstr "*y* без змін" - -#: ../../src/basics/stdtypes.txt:54 -msgid "``abs(x)``" -msgstr "``abs(x)``" - -#: ../../src/basics/stdtypes.txt:54 -msgid "absolute value or magnitude of *x*" -msgstr "абсолютне значення або величина *x*" - -#: ../../src/basics/stdtypes.txt:56 -msgid "``int(x)``" -msgstr "``int(x)``" - -#: ../../src/basics/stdtypes.txt:56 -msgid "*x* converted to integer" -msgstr "*x* перетворено на ціле число" - -#: ../../src/basics/stdtypes.txt:58 -msgid "``float(x)``" -msgstr "``float(x)``" - -#: ../../src/basics/stdtypes.txt:58 -msgid "*x* converted to floating point" -msgstr "*x* перетворено на число з плаваючою комою" - -#: ../../src/basics/stdtypes.txt:60 -msgid "``complex(re, im)``" -msgstr "``complex(re, im)``" - -#: ../../src/basics/stdtypes.txt:60 -msgid "" -"a complex number with real part *re*, imaginary part *im*. *im* defaults to " -"zero." -msgstr "" -"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " -"замовчуванням на нуль." - -#: ../../src/basics/stdtypes.txt:63 -msgid "``divmod(x, y)``" -msgstr "``divmod(x, y)``" - -#: ../../src/basics/stdtypes.txt:63 -msgid "the pair ``(x // y, x % y)``" -msgstr "об'єднує ``(x // y, x % y)``" - -#: ../../src/basics/stdtypes.txt:65 -msgid "``pow(x, y)`` ``x ** y``" -msgstr "``pow(x, y)`` ``x ** y``" - -#: ../../src/basics/stdtypes.txt:65 -msgid "*x* to the power *y*" -msgstr "*x* у степені *y*" - -#: ../../src/basics/stdtypes.txt:69 -msgid "" -"``x // y`` also referred to as integer division. The resultant value is a " -"whole integer, through the result's type is not necessarily int. The result " -"is always rounded towards minus infinity: ``1 // 2`` is ``0``" -msgstr "" -"``x // y`` також називають цілим діленням. Результуюче значення є цілим " -"числом, через тип результату не обов'язково int. Результат завжди " -"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" - -#: ../../src/basics/stdtypes.txt:74 -msgid "" -"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " -"optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " -"and negative infinity." -msgstr "" -"``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " -"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " -"позитивна та негативна нескінченність." - -#: ../../src/basics/stdtypes.txt:79 -msgid "Code examples" -msgstr "Приклади коду" - -#: ../../src/basics/stdtypes.txt:81 -msgid "Integer numbers" -msgstr "Цілі числа" - -#: ../../src/basics/stdtypes.txt:94 -msgid "Floating point numbers" -msgstr "Числа з плаваючою комою" - -#: ../../src/basics/stdtypes.txt:109 ../../src/basics/stdtypes.txt:182 -#: ../../src/basics/stdtypes.txt:290 ../../src/basics/stdtypes.txt:299 -#: ../../src/basics/stdtypes.txt:328 -msgid "Value comparisons" -msgstr "Порівняння цінностей" - -#: ../../src/basics/stdtypes.txt:111 -msgid "" -"Numbers of built-in numeric types can be compared within and across their " -"types (with the restriction that complex numbers do not support order " -"comparison). Within the limits of the types involved, they compare " -"mathematically correct without loss of precision." -msgstr "" -"Числа вбудованих числових типів можна порівнювати всередині та між типами (з " -"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " -"залучених типів вони порівняються математично правильно без втрати точності." - -#: ../../src/basics/stdtypes.txt:116 -msgid "" -"The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." -"Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" -"number value is false." -msgstr "" -"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " -"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " -"є хибним." - -#: ../../src/basics/stdtypes.txt:120 -msgid "Sequence types" -msgstr "Типи послідовностей" - -#: ../../src/basics/stdtypes.txt:122 -msgid "" -"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " -"Additional sequence types tailored for processing of binary data and text " -"strings are described in dedicated sections." -msgstr "" -"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " -"Додаткові типи послідовностей, призначені для обробки двійкових даних і " -"текстових рядків, описані у інших розділах." - -#: ../../src/basics/stdtypes.txt:127 -msgid "Lists" -msgstr "Списки" - -#: ../../src/basics/stdtypes.txt:129 -msgid "" -"Lists are mutable sequences, typically used to store collections of items. " -"They may be constructed in several ways:" -msgstr "" -"Списки - це змінні послідовності, які зазвичай використовуються для " -"зберігання колекцій елементів. Вони можуть бути побудовані кількома " -"способами:" - -#: ../../src/basics/stdtypes.txt:132 -msgid "using a pair of square brackets to denote the empty list: ``[]``" -msgstr "" -"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" - -#: ../../src/basics/stdtypes.txt:133 -msgid "" -"using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" -msgstr "" -"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " -"b, c]``" - -#: ../../src/basics/stdtypes.txt:134 -msgid "using a list comprehension: ``[x for x in iterable]``" -msgstr "використовуючи генератори списків: ``[x for x in iterable]``" - -#: ../../src/basics/stdtypes.txt:135 -msgid "using the type constructor: ``list()`` or ``list(iterable)``" -msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" - -#: ../../src/basics/stdtypes.txt:138 -msgid "Tuples" -msgstr "Кортежі" - -#: ../../src/basics/stdtypes.txt:140 -msgid "" -"Tuples are immutable sequences, typically used to store collections of data " -"or for cases where an immutable sequence of data is needed (such as allowing " -"storage in a ``set`` or ``dict`` instances). They may be constructed in a " -"number of ways:" -msgstr "" -"Кортежі - це незмінні послідовності, які зазвичай використовуються для " -"зберігання колекцій даних або для випадків, коли потрібна незмінна " -"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " -"``dict``). Вони можуть бути конструйовані декількома способами:" - -#: ../../src/basics/stdtypes.txt:145 -msgid "using a pair of parentheses to denote the empty tuple: ``()``" -msgstr "" -"використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" - -#: ../../src/basics/stdtypes.txt:146 -msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" -msgstr "" -"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " -"c)``" - -#: ../../src/basics/stdtypes.txt:147 -msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" -msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" - -#: ../../src/basics/stdtypes.txt:148 -msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" -msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" - -#: ../../src/basics/stdtypes.txt:151 -msgid "Common operations" -msgstr "Загальні операції" - -#: ../../src/basics/stdtypes.txt:156 -msgid "``x in s`` ``x not in s``" -msgstr "``x in s`` ``x not in s``" - -#: ../../src/basics/stdtypes.txt:156 -msgid "" -"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " -"*x*" -msgstr "" -"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " -"*x*" - -#: ../../src/basics/stdtypes.txt:159 -msgid "``s + t``" -msgstr "``s + t``" - -#: ../../src/basics/stdtypes.txt:159 -msgid "the concatenation of *s* and *t*" -msgstr "конкатенація s і t" - -#: ../../src/basics/stdtypes.txt:161 -msgid "``s * n``" -msgstr "``s * n``" - -#: ../../src/basics/stdtypes.txt:161 -msgid "equivalent to adding *s* to itself *n* times" -msgstr "еквівалентно додаванню *s* до себе *n* разів" - -#: ../../src/basics/stdtypes.txt:163 -msgid "``s[i]``" -msgstr "``s[i]``" - -#: ../../src/basics/stdtypes.txt:163 -msgid "*i*-th item of *s*, origin 0" -msgstr "*i*-й елемент *s*, джерело 0" - -#: ../../src/basics/stdtypes.txt:165 -msgid "``s[i:j]`` ``s[i:j:k]``" -msgstr "``s[i:j]`` ``s[i:j:k]``" - -#: ../../src/basics/stdtypes.txt:165 -msgid "" -"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " -"be omitted." -msgstr "" -"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " -"3) можна опустити." - -#: ../../src/basics/stdtypes.txt:168 -msgid "``len(s)``" -msgstr "``len(s)``" - -#: ../../src/basics/stdtypes.txt:168 -msgid "length of *s*" -msgstr "довжина *s*" - -#: ../../src/basics/stdtypes.txt:170 -msgid "``min(s)``" -msgstr "``min(s)``" - -#: ../../src/basics/stdtypes.txt:170 -msgid "smallest item of *s*" -msgstr "найменший елемент *s*" - -#: ../../src/basics/stdtypes.txt:172 -msgid "``max(s)``" -msgstr "``max(s)``" - -#: ../../src/basics/stdtypes.txt:172 -msgid "largest item of *s*" -msgstr "найбільший елемент *s*" - -#: ../../src/basics/stdtypes.txt:174 -msgid "``s.count(x)``" -msgstr "``s.count(x)``" - -#: ../../src/basics/stdtypes.txt:174 -msgid "total number of occurrences of *x* in *s*" -msgstr "загальна кількість входжень *x* у *s*" - -#: ../../src/basics/stdtypes.txt:176 -msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" -msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" - -#: ../../src/basics/stdtypes.txt:176 -msgid "" -"index of the first occurrence of *x* in *s* at or after index *i* and before " -"index *j*" -msgstr "" -"індекс першого входження *x* у *s* на або після індексу *i* та перед " -"індексом *j*" - -#: ../../src/basics/stdtypes.txt:184 -msgid "" -"Sequences can be compared only within each of their types, with the " -"restriction that ranges do not support order comparison. Equality comparison " -"across these types results in inequality, and ordering comparison across " -"these types raises ``TypeError``." -msgstr "" -"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " -"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " -"типами призводить до нерівності, а впорядковане порівняння цих типів " -"викликає ``TypeError``." - -#: ../../src/basics/stdtypes.txt:189 -msgid "" -"Sequences compare lexicographically using comparison of corresponding " -"elements. The built-in containers typically assume identical objects are " -"equal to themselves. Lexicographical comparison between built-in collections " -"works as follows:" -msgstr "" -"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " -"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " -"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " -"таким чином:" - -#: ../../src/basics/stdtypes.txt:194 -msgid "" -"For two collections to compare equal, they must be of the same type, have " -"the same length, and each pair of corresponding elements must compare equal." -msgstr "" -"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " -"мати однакову довжину, і кожна пара відповідних елементів повинна " -"порівнюватися." - -#: ../../src/basics/stdtypes.txt:196 -msgid "" -"Collections that supports order comparison are ordered the same as their " -"first unequal elements. If corresponding element does not exist, the shorter " -"collection is ordered first." -msgstr "" -"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " -"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " -"впорядковується коротша колекція." - -#: ../../src/basics/stdtypes.txt:201 -msgid "Mutable sequence types" -msgstr "Змінні типи послідовностей" - -#: ../../src/basics/stdtypes.txt:206 -msgid "``s[i] = x``" -msgstr "``s[i] = x``" - -#: ../../src/basics/stdtypes.txt:206 -msgid "item *i* of *s* is replaced by *x*" -msgstr "елемент *i* з *s* замінюється на *x*" - -#: ../../src/basics/stdtypes.txt:208 -msgid "``s[i:j] = t``" -msgstr "``s[i:j] = t``" - -#: ../../src/basics/stdtypes.txt:208 -msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" -msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" - -#: ../../src/basics/stdtypes.txt:211 -msgid "``del s[i:j]``" -msgstr "``del s[i:j]``" - -#: ../../src/basics/stdtypes.txt:211 -msgid "same as ``s[i:j] = []``" -msgstr "те саме, що ``s[i:j] = []``" - -#: ../../src/basics/stdtypes.txt:213 -msgid "``s[i:j:k] = t``" -msgstr "``s[i:j:k] = t``" - -#: ../../src/basics/stdtypes.txt:213 -msgid "the elements of *s* are replaced by those of *t* [#]_" -msgstr "елементи *s* замінюються елементами *t* [#]_" - -#: ../../src/basics/stdtypes.txt:215 -msgid "``del s[i:j:k]``" -msgstr "``del s[i:j:k]``" - -#: ../../src/basics/stdtypes.txt:215 -msgid "removes the elements of ``s[i:j:k]`` from the list" -msgstr "видаляє елементи ``s[i:j:k]`` зі списку" - -#: ../../src/basics/stdtypes.txt:217 -msgid "``s.append(x)``" -msgstr "``s.append(x)``" - -#: ../../src/basics/stdtypes.txt:217 -msgid "" -"appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " -"[x]``" -msgstr "" -"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" - -#: ../../src/basics/stdtypes.txt:220 -msgid "``s.clear()``" -msgstr "``s.clear()``" - -#: ../../src/basics/stdtypes.txt:220 -msgid "removes all items from *s* (``del s[:]``) [#py33]_" -msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" - -#: ../../src/basics/stdtypes.txt:222 -msgid "``s.copy()``" -msgstr "``s.copy()``" - -#: ../../src/basics/stdtypes.txt:222 -msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" -msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" - -#: ../../src/basics/stdtypes.txt:224 -msgid "``s.extend(t)`` ``s += t``" -msgstr "``s.extend(t)`` ``s += t``" - -#: ../../src/basics/stdtypes.txt:224 -msgid "extends *s* with the contents of *t*" -msgstr "розширює *s* вмістом *t*" - -#: ../../src/basics/stdtypes.txt:227 -msgid "``s.insert(i, x)``" -msgstr "``s.insert(i, x)``" - -#: ../../src/basics/stdtypes.txt:227 -msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" -msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" - -#: ../../src/basics/stdtypes.txt:230 -msgid "``s.pop()``, ``s.pop(i)``" -msgstr "``s.pop()``, ``s.pop(i)``" - -#: ../../src/basics/stdtypes.txt:230 -msgid "" -"retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " -"use the last one available index)" -msgstr "" -"отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " -"пропущено - використовуйте останній доступний індекс)" - -#: ../../src/basics/stdtypes.txt:233 -msgid "``s.remove(x)``" -msgstr "``s.remove(x)``" - -#: ../../src/basics/stdtypes.txt:233 -msgid "remove the first item that is equal to *x* from *s*" -msgstr "видалити перший елемент, який дорівнює *x*, із *s*" - -#: ../../src/basics/stdtypes.txt:235 -msgid "``s.reverse()``" -msgstr "``s.reverse()``" - -#: ../../src/basics/stdtypes.txt:235 -msgid "reverses the items of *s* in place" -msgstr "перевертає елементи *s* на місце" - -#: ../../src/basics/stdtypes.txt:238 -msgid "*t* must have the same length as the slice it is replacing" -msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" - -#: ../../src/basics/stdtypes.txt:239 -msgid "new in Python version 3.3" -msgstr "нове у версії Python 3.3" - -#: ../../src/basics/stdtypes.txt:242 -msgid "Text sequence type" -msgstr "Тип текстової послідовності" - -#: ../../src/basics/stdtypes.txt:245 -msgid "String methods" -msgstr "Рядкові методи" - -#: ../../src/basics/stdtypes.txt:247 -msgid "" -"Strings implement all of the common sequence operations, along with the " -"additional methods." -msgstr "" -"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " -"методами." - -#: ../../src/basics/stdtypes.txt:292 -msgid "" -"Strings compare lexicographically using the numerical Unicode code points of " -"their characters." -msgstr "" -"Рядки порівнюються лексикографічно з використанням числових кодових точок " -"Unicode своїх символів." - -#: ../../src/basics/stdtypes.txt:296 -msgid "Set types" -msgstr "Типи сетів" - -#: ../../src/basics/stdtypes.txt:301 -msgid "" -"Sets (instances of ``set`` or ``frozenset``) can be compared within and " -"across their types. They define order comparison operators to mean subset " -"and superset tests. Those relations do not define total ordering (e.g. two " -"sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " -"nor supersets of one another)." -msgstr "" -"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " -"між типами. Вони визначають оператори порівняння порядку, щоб проходити " -"тести підмножини та надмножини. Ці відношення не визначають загального " -"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " -"підмножини одного іншого, ані надмножини один одного)." - -#: ../../src/basics/stdtypes.txt:308 -msgid "Mapping type" -msgstr "Тип відображення" - -#: ../../src/basics/stdtypes.txt:310 -msgid "" -"A mapping object maps hashable values to arbitrary objects. Mappings are " -"mutable objects. There is currently ony one standard mapping type, the " -"*dictionary*. In few words mappings are collections of keys and their values." -msgstr "" -"Об'єкт зіставлення зіставляє хешовані значення з довільними об'єктами. " -"Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " -"відображення, *dictionary*. Якщо кількома словами, то відображення - це " -"набори ключів та їхніх значень." - -#: ../../src/basics/stdtypes.txt:314 -msgid "" -"A dictionary's keys are almost arbitrary values. Values that are not " -"hashable may not be used as keys. Values that compare equal (such as ``1``, " -"``1.0`` and ``True``) can be used interchangeably to index the same " -"dictionary entry." -msgstr "" -"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " -"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " -"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " -"тієї самої словникової статті." - -#: ../../src/basics/stdtypes.txt:318 -msgid "Dictionaries can be created by several means:" -msgstr "Словники можна створювати кількома способами:" - -#: ../../src/basics/stdtypes.txt:320 -msgid "Use braces to denote the empty dictionary: ``{}``" -msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" - -#: ../../src/basics/stdtypes.txt:321 -msgid "" -"Use a comma-separated list of ``key: value`` pairs with braces: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" -msgstr "" -"Використовуйте розділений комами список пар ``key: value`` з дужками: " -"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" - -#: ../../src/basics/stdtypes.txt:323 -msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" -msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" - -#: ../../src/basics/stdtypes.txt:324 -msgid "" -"Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " -"``dict(key=100)``" -msgstr "" -"Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " -"``dict(key=100)``" - -#: ../../src/basics/stdtypes.txt:330 -msgid "" -"Instances of ``dict`` compare equal if and only if they have equal key-value " -"pairs." -msgstr "" -"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " -"однакові пари ключ-значення." - -#: ../../src/basics/stdtypes.txt:333 -msgid "Order comparisons raise ``TypeError``." -msgstr "Порівняння порядку викликає ``TypeError``." - -#: ../../src/basics/syntax.txt:-1 -msgid "Python syntax" -msgstr "Синтаксис Python" - -#: ../../src/basics/syntax.txt:-1 -msgid "python, basics, syntax" -msgstr "python, basics, syntax" - -#: ../../src/basics/syntax.txt:8 -msgid "Python Syntax" -msgstr "Синтаксис Python" - -#: ../../src/basics/syntax.txt:10 -msgid "" -"As a natural language like English or Ukrainian has its own rules to write " -"down something, programming languages do. This makes them programming " -"**languages**." -msgstr "" -"Оскільки природна мова, як-от англійська чи українська, має власні правила " -"запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " -"мовами програмування." - -#: ../../src/basics/syntax.txt:14 -msgid "" -"A programming language syntax is the set of rules and principles that govern " -"how code is written and structured in a given programming language. Syntax " -"encompasses the rules for writing statements, expressions, variables, data " -"types, control structures, and other constructs that make up the language." -msgstr "" -"Синтаксис мови програмування - це набір правил і принципів, які регулюють " -"написання та структурування коду даною мовою програмування. Синтаксис " -"охоплює правила написання операторів, виразів, змінних, типів даних, " -"керуючих структур та інших конструкцій, які складають мову." - -#: ../../src/basics/syntax.txt:19 -msgid "" -"The syntax of a programming language defines how code is organized and " -"interpreted by a compiler or interpreter. It defines the rules for writing " -"valid statements and expressions that can be understood and executed by the " -"language's runtime system." -msgstr "" -"Синтаксис мови програмування визначає, як код організовується та " -"інтерпретується компілятором або інтерпретатором. Він визначає правила " -"написання дійсних операторів і виразів, які можуть бути зрозумілі та " -"виконані системою виконання мови." - -#: ../../src/basics/syntax.txt:24 -msgid "" -"A programming language's syntax is designed to be both readable and " -"expressive, allowing programmers to write code that is easy to understand " -"and modify. Syntax often influences the style and structure of code, as well " -"as its maintainability and performance." -msgstr "" -"Синтаксис мови програмування розроблено таким чином, щоб він був читабельним " -"і виразним, дозволяючи програмістам писати код, який легко зрозуміти та " -"змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " -"його зручність обслуговування та продуктивність." - -#: ../../src/basics/syntax.txt:29 -msgid "" -"Different programming languages have different syntax, with some languages " -"being more concise and expressive than others. While syntax is an important " -"aspect of a programming language, it is only one of several factors that " -"determine its ease of use, flexibility, and suitability for different " -"programming tasks." -msgstr "" -"Різні мови програмування мають різний синтаксис, при цьому деякі мови є " -"більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " -"аспектом мови програмування, він є лише одним із кількох факторів, які " -"визначають її легкість у використанні, гнучкість і придатність для різних " -"завдань програмування." - -#: ../../src/basics/syntax.txt:35 -msgid "" -"In the case of Python, the language's syntax defines how code is written and " -"structured in a way that is consistent, readable, and easy to understand. A " -"general overview is provided below, no need to dive deep in this now. All of " -"the following is to be discussed during the course. So, some of the key " -"aspects of Python's syntax include:" -msgstr "" -"У випадку Python синтаксис мови визначає, як код буде написаний і " -"структурований таким чином, щоб він був послідовним, читабельним і легким " -"для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " -"занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " -"курсу. Отже, деякі з ключових аспектів синтаксису Python включають:" - -#: ../../src/basics/syntax.txt -msgid "Indentation" -msgstr "Відступ" - -#: ../../src/basics/syntax.txt:42 -msgid "" -"Python uses whitespace, specifically indentation, to delimit blocks of code, " -"such as loops, conditionals, and functions. This means that the indentation " -"level of a line determines which block of code it belongs to." -msgstr "" -"Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " -"таких як цикли, умови та функції. Це означає, що рівень відступу рядка " -"визначає, до якого блоку коду він належить." - -#: ../../src/basics/syntax.txt -msgid "Statement structure" -msgstr "Структура коду" - -#: ../../src/basics/syntax.txt:48 -msgid "" -"Python statements are typically written on one line, with the end of the " -"line indicating the end of the statement. However, if a statement is too " -"long to fit on one line, it can be continued across multiple lines using " -"backslashes." -msgstr "" -"Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " -"вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " -"поміститися в один рядок, його можна продовжити в кількох рядках, " -"використовуючи зворотні похилі риски." - -#: ../../src/basics/syntax.txt ../../src/basics/variables.txt:8 -msgid "Variables" -msgstr "Змінні" - -#: ../../src/basics/syntax.txt:54 -msgid "" -"In Python, variables are created automatically when a value is assigned to " -"them, and their type is inferred from the value. Variables can be assigned " -"values of different types, including integers, floats, strings, and more " -"complex data structures like lists and dictionaries." -msgstr "" -"У Python змінні створюються автоматично, якщо їм присвоюється значення, і " -"їхній тип визначається на основі значення. Змінним можна присвоювати " -"значення різних типів, включаючи цілі числа, числа з плаваючою комою, рядки " -"та складніші структури даних, такі як списки та словники." - -#: ../../src/basics/syntax.txt -msgid "Operators" -msgstr "Оператори" - -#: ../../src/basics/syntax.txt:60 -msgid "" -"Python supports a wide range of operators for performing arithmetic, " -"comparison, and logical operations. These include arithmetic operators like " -"``+``, ``-``, ``*``, and ``/``, as well as comparison operators like ``<``, " -"``>``, ``==``, and ``!=``." -msgstr "" -"Python підтримує широкий спектр операторів для виконання арифметичних, " -"порівнянь і логічних операцій. До них належать арифметичні оператори, такі " -"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як " -"``<`` , ``>``, ``==`` і ``!=``." - -#: ../../src/basics/syntax.txt -msgid "Control flow" -msgstr "Контроль потоку" - -#: ../../src/basics/syntax.txt:66 -msgid "" -"Python provides control flow statements like if, else, elif, for, and while " -"to control the flow of execution in a program. These statements are used to " -"make decisions, repeat code, or perform actions based on conditions." -msgstr "" -"Python надає оператори потоку керування, як-от if, else, elif, for та while, " -"для керування потоком виконання в програмі. Ці оператори використовуються " -"для прийняття рішень, повторення коду або виконання дій на основі заданих " -"умов." - -#: ../../src/basics/syntax.txt:72 -msgid "" -"In Python, functions are defined using the def keyword and can take " -"arguments and return values. The body of a function is defined using a block " -"of indented code." -msgstr "" -"У Python функції визначаються за допомогою ключового слова def і можуть " -"отримувати аргументи та повертати значення. Тіло функції визначається за " -"допомогою блоку коду з відступами." - -#: ../../src/basics/syntax.txt -msgid "Modules" -msgstr "Модулі" - -#: ../../src/basics/syntax.txt:77 -msgid "" -"Python has a large library of modules that provide pre-written code for a " -"variety of tasks. Modules can be imported into a program using the import " -"statement." -msgstr "" -"Python має велику бібліотеку модулів, які містять попередньо написаний код " -"для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " -"оператора імпорту." - -#: ../../src/basics/syntax.txt:82 -msgid "" -"Python provides a way to handle errors and exceptions in a program using the " -"try, except, else, and finally keywords. These statements allow a program to " -"gracefully recover from errors and continue executing." -msgstr "" -"Python надає спосіб обробки помилок і винятків у програмі за допомогою " -"ключових слів try, except, else і finally. Ці оператори дозволяють програмі " -"плавно відновлюватися після помилок і продовжувати виконання." - -#: ../../src/basics/syntax.txt:86 -msgid "In few words:" -msgstr "У кількох словах:" - -#: ../../src/basics/syntax.txt:88 -msgid "Input/Output example script" -msgstr "Приклад сценарію Input/Output" - -#: ../../src/basics/syntax.txt:107 -msgid "" -"The code snippet above demonstrates some basics abilities of Python to " -"gather data from the user, process it and print out back. Note the words " -"starting with a # (hash) symbol. This is a comment. Any sequence of " -"characters after the hash and till the line end are considered to be a " -"comment. These are for those people, who see the code and they are ignored " -"by the interpreter." -msgstr "" -"Наведений вище фрагмент коду демонструє деякі основні можливості Python " -"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть увагу " -"на слова, що починаються символом #(решітка). Це коментар. Будь-яка " -"послідовність символів після хеша і до кінця рядка вважається коментарем. Це " -"необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " -"інтерпретатор їх ігнорує." - -#: ../../src/basics/syntax.txt:113 -msgid "" -"On the other hand each individual line is the instruction for the " -"interpreter to perform some action, like gather inputs, do math, store data " -"in memory etc." -msgstr "" -"З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " -"певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " -"збереження даних у пам'яті тощо." - -#: ../../src/basics/testing.txt:-1 -msgid "Testing software in Python" -msgstr "Тестування в Python" - -#: ../../src/basics/testing.txt:-1 -msgid "python, testing, unittest, pytest" -msgstr "python, testing, unittest, pytest" - -#: ../../src/basics/testing.txt:16 -msgid "Testing" -msgstr "Тестування" - -#: ../../src/basics/variables.txt:-1 -msgid "Variables in programming" -msgstr "Змінні в програмуванні" - -#: ../../src/basics/variables.txt:-1 -msgid "programming, basics, variables" -msgstr "programming, basics, variables" - -#: ../../src/basics/variables.txt:10 -msgid "" -"In computer science a **variable** is a named storage location in memory " -"that can hold a value (*data*). The value stored in a variable can be " -"changed or accessed by the program during its execution." -msgstr "" -"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " -"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " -"змінено або доступне програмою під час її виконання." - -#: ../../src/basics/variables.txt:14 -msgid "" -"In Python, variables are created dynamically once a value is assigned to " -"them. This makes Python a dynamically typed language, which means that the " -"data type of a variable is inferred from the value assigned to it. So, you " -"do not need to declare a variable before using it, as in statically typed " -"languages." -msgstr "" -"У Python змінні створюються динамічно після присвоєння їм значення. Це " -"робить Python динамічно типізованою мовою, а це означає, що тип даних " -"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " -"оголошувати змінну перед її використанням, як у статично типізованих мовах." - -#: ../../src/basics/variables.txt:19 -msgid "" -"The ability to create variables dynamically and infer their data type makes " -"Python code more concise and easier to read. However, it also requires " -"careful attention to variable naming and assignment to avoid unexpected " -"behavior." -msgstr "" -"Можливість динамічно створювати змінні та виводити їхні типи даних робить " -"код Python більш лаконічним і легшим для читання. Однак це також вимагає " -"пильної уваги до іменування та призначення змінних, щоб уникнути " -"неочікуваної поведінки." - -#: ../../src/basics/variables.txt:23 -msgid "" -"In Python ``=`` (assignment operator) is used to set a value to some " -"variable, the portion on the left of the operator is a *variable name* and " -"the portion on the right is a *value* to assign to a variable." -msgstr "" -"У Python ``=`` (оператор присвоєння) використовується для встановлення " -"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " -"частина праворуч - це значення, яке призначається для неї." - -#: ../../src/basics/variables.txt:27 -msgid "Variable assignment in Python" -msgstr "Присвоєння змінної в Python" - -#: ../../src/basics/variables.txt:34 -msgid "Variable assignment in Java" -msgstr "Присвоєння змінної в Java" - -#: ../../src/basics/variables.txt:42 -msgid "Naming" -msgstr "Присвоєння назви" - -#: ../../src/basics/variables.txt:44 -msgid "" -"In Python there are several rules that describe how to name your variables. " -"Some of these are requirements and cannot be ignored, others are rather " -"recommended than required and can be omitted. For now note, that a variable " -"name **cannot**:" -msgstr "" -"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " -"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " -"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" - -#: ../../src/basics/variables.txt:49 -msgid "a language keyword (like ``pass``, ``def`` or ``class``)" -msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" - -#: ../../src/basics/variables.txt:50 -msgid "start with a number (e.g. ``123``, ``1_something``)" -msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" - -#: ../../src/basics/variables.txt:51 -msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" -msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" - -#: ../../src/basics/variables.txt:52 -msgid "contain white spaces" -msgstr "містити пробіли" - -#: ../../src/basics/variables.txt:54 -msgid "Also here are some general recommendation on naming anything:" -msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" - -#: ../../src/basics/variables.txt:56 -msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" -msgstr "" -"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " -"42``)" - -#: ../../src/basics/variables.txt:57 -msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" -msgstr "" -"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" - -#~ msgid "Data Types" -#~ msgstr "Типи Даних" - -#~ msgid "" -#~ "Data may represent different things and require various operations " -#~ "available. In programming data types is an important concept. For example " -#~ "**1984** may be a number (``1984``), a text (``\"1984\"``) or event a " -#~ "date. The data type describes the operations, that are allowed for the " -#~ "data, like additions for numbers or concatenation for text (e.g. ``1 + 2 -" -#~ "> 3``, ``\"1\" + \"3\" -> \"13\"``)." -#~ msgstr "" -#~ "Дані можуть представляти різні речі та вимагати різноманітних " -#~ "доступнихоперацій. У програмуванні типи даних є важливою концепцією. " -#~ "Наприклад, **1984** може бути числом (``1984``), текстом (``\"1984\"`` ) " -#~ "або подією чи датою. Тип даних описує можливі операції, дозволені для " -#~ "даних, як-от додавання чисел або конкатенація для тексту (наприклад, ``1 " -#~ "+ 2 -> 3``, ``\"1\" + \"3 \" -> \"13\"``)." - -#~ msgid "" -#~ "Python uses dynamic typing. This means as a developer you should not " -#~ "declare a variable with its data type - the interpreter will do this for " -#~ "you. Other popular language using dynamic typing are JavaScript and PHP. " -#~ "Setting variables in Python is as easy as:" -#~ msgstr "" -#~ "Python використовує динамічну типізацію. Це означає, що ви, як розробник, " -#~ "не повинні оголошувати змінну з її типом даних - інтерпретатор зробить це " -#~ "за вас. Іншими популярними мовами, які використовують динамічну " -#~ "типізацію, є JavaScript і PHP. Налаштування змінних у Python доволі " -#~ "просто, як: " - -#~ msgid "Built-In Data Types" -#~ msgstr "Вбудовані типи даних" - -#~ msgid "Python has the following data types built-in:" -#~ msgstr "Python має такі вбудовані типи даних:" - -#~ msgid "Integers (``int``)" -#~ msgstr "Цілі числа (``int``)" - -#~ msgid "Floating-point numbers (``float``)" -#~ msgstr "Числа з плаваючою крапкою (``float``)" - -#~ msgid "Complex numbers (``complex``)" -#~ msgstr "Комплексні числа (``complex``)" - -#~ msgid "Booleans (``bool``)" -#~ msgstr "Логічні значення (``bool``)" - -#~ msgid "Strings (``str``)" -#~ msgstr "Рядки (``str``)" - -#~ msgid "Bytes (``bytes``)" -#~ msgstr "Байти (``bytes``)" - -#~ msgid "Byte arrays (``bytearray``)" -#~ msgstr "Масиви байтів (``bytearray``)" - -#~ msgid "Lists (``list``)" -#~ msgstr "Списки (``list``)" - -#~ msgid "Tuples (``tuple``)" -#~ msgstr "Кортежі (``tuple``)" - -#~ msgid "Sets (``set``)" -#~ msgstr "Cети (``set``)" - -#~ msgid "Frozen sets (``frozenset``)" -#~ msgstr "Заморожені сети (``frozenset``)" - -#~ msgid "Dictionaries (``dict``)" -#~ msgstr "Словники (``dict``)" - -#~ msgid "None (``NoneType``)" -#~ msgstr "Жодного (``NoneType``)" - -#~ msgid "" -#~ "Any one can use them without additional imports or packages installations." -#~ msgstr "" -#~ "Будь-хто може використовувати їх без додаткового імпорту чи встановлення " -#~ "пакетів. " - -#~ msgid "Text" -#~ msgstr "Текстові дані" - -#~ msgid "" -#~ "Text data are stored as strings (``str`` data type) in Python. Any " -#~ "sequence of letters, digits, punctuation marks and whitespace characters " -#~ "enclosed with quotes is considered to be a string literal. Both single " -#~ "quotes (``'``) and double quotes (``\"``) can be used interchangeably to " -#~ "create a string in Python." -#~ msgstr "" -#~ "Текстові дані зберігаються як рядки (тип даних ``str``) у Python. Будь-" -#~ "яка послідовність літер, цифр, знаків пунктуації та пробілів, взята в " -#~ "лапки, вважається рядковим літералом. Обидві одинарні лапки (``'``) або " -#~ "подвійні лапки (``\"``) можна взаємозамінно використовувати для створення " -#~ "рядків." - -#~ msgid "Escaping" -#~ msgstr "Екранування" - -#~ msgid "" -#~ "In programming this is a process of using a special character to indicate " -#~ "that the following character(s) should be treated differently from their " -#~ "literal meaning. The common usage is to include a special character(s) " -#~ "within strings. A **backslash** character is used to *escape* the " -#~ "following one." -#~ msgstr "" -#~ "У програмуванні це процес використання спеціального символу, щоб вказати, " -#~ "що наступний(і) символ(и) слід розглядати інакше, ніж їхнє буквальне " -#~ "значення. Загальне використання полягає в тому, щоб включити " -#~ "спеціальний(і) символ(и) в рядки. Символ **backslash** використовується " -#~ "для екранування наступного. " - -#~ msgid "Example of Escaping in Python" -#~ msgstr "Приклади Екранування в Python" - -#~ msgid "Single quotes or double quotes" -#~ msgstr "Одинарні або подвійні лапки" - -#~ msgid "" -#~ "Don't care. Use any quote mark you like. A *string* is a sequence of " -#~ "characters after the opening quote and till the closing one. You may use " -#~ "double quotes in case a single quote is a part of the text (e.g. ``\"It's " -#~ "a Serhii's document\"``) and vise versa (e.g. ``'The name of the ship was " -#~ "a \"Billy of Tea\"'``). It's a good practice not to mess single and " -#~ "double quotes within one project. Just keep using a chosen one character " -#~ "for all strings." -#~ msgstr "" -#~ "Неважливо які лапки ви використовуйте. Рядок - це послідовність символів " -#~ "після початкової лапки та до кінцевої. Ви можете використовувати подвійні " -#~ "лапки, якщо одинарна лапка є частиною тексту (наприклад, ``\"Це документ " -#~ "Сергія\"``) і навпаки (наприклад ``'Назва корабля була \"Billy of " -#~ "Tea\"'``). Рекомендується не плутати одинарні та подвійні лапки в одному " -#~ "проекті. Просто продовжуйте використовувати один вибраний символ для всіх " -#~ "рядків. " - -#~ msgid "Multiline strings" -#~ msgstr "Багатострічкові рядки" - -#~ msgid "" -#~ "You can assign a multiline string by using triple quotes: Both single " -#~ "quote and double quote characters are available." -#~ msgstr "" -#~ "Ви можете призначити багаторядковий рядок, використовуючи потрійні лапки: " -#~ "в середині них доступні як одинарні, так і подвійні лапки. " - -#~ msgid "" -#~ "The same syntax is used to create docstring, which are a special case of " -#~ "string usage. We will look on these in the future." -#~ msgstr "" -#~ "Такий самий синтаксис використовується для створення рядка документації, " -#~ "який є окремим випадком використання рядка. Ми розглянемо це в " -#~ "майбутньому. " - -#~ msgid "This subsection describes only the most common operations." -#~ msgstr "У цьому розділі описано лише найпоширеніші операції. " - -#~ msgid "Concatenation" -#~ msgstr "Конкатинація" - -#~ msgid "" -#~ "The ``+`` operator is used to concatenate (join) two or more strings." -#~ msgstr "" -#~ "Оператор ``+`` використовується для конкатенації (об'єднання) двох або " -#~ "більше рядків. " - -#~ msgid "" -#~ "On the other hand the ``join`` method concatenates a collection of " -#~ "strings, which may be more efficient than using ``+``." -#~ msgstr "" -#~ "З іншого боку, метод ``join`` об'єднує колекцію рядків, що може бути " -#~ "ефективнішим, ніж використання ``+``. " - -#~ msgid "Repetition" -#~ msgstr "Повторення" - -#~ msgid "" -#~ "The ``*`` operator is used to repeat a string a specified number of " -#~ "times. Only multipliers of the ``int`` type are allowed." -#~ msgstr "" -#~ "Оператор ``*`` використовується для повторення рядка вказану кількість " -#~ "разів. Дозволені операції лише з множниками типу ``int``. " - -#~ msgid "Length" -#~ msgstr "Довжина" - -#~ msgid "The ``len`` function is used to find the length of a string." -#~ msgstr "Функція ``len`` використовується для визначення довжини рядка." - -#~ msgid "Case conversion" -#~ msgstr "Перетворення регістру" - -#~ msgid "" -#~ "The ``lower``, ``upper``, ``capitalize`` and ``title`` methods perform " -#~ "actions on case." -#~ msgstr "" -#~ "Методи ``lower``, ``upper``, ``capitalize`` і ``title`` виконують дії з " -#~ "зміною регістра. " - -#~ msgid "``lower`` creates a new string with all lower-case characters." -#~ msgstr "``lower`` створює новий рядок з усіма символами нижнього регістру." - -#~ msgid "``upper`` creates a new string with all upper-case characters." -#~ msgstr "``upper`` створює новий рядок з усіма символами верхнього регістру." - -#~ msgid "" -#~ "``capitalize`` creates a new string with the upper-case 1st character." -#~ msgstr "" -#~ "``capitalize`` створює новий рядок із першим символом у верхньому " -#~ "регістрі. " - -#~ msgid "``title`` will make all characters after whitespace upper case." -#~ msgstr "``title`` зробить усі символи після пробілів верхнім регістром." - -#~ msgid "Stripping" -#~ msgstr "Зачистка" - -#~ msgid "" -#~ "The ``strip``, ``lstrip`` and ``rstrip`` methods are used to remove " -#~ "leading and/or trailing whitespace characters." -#~ msgstr "" -#~ "Методи ``strip``, ``lstrip`` і ``rstrip`` використовуються для видалення " -#~ "початкових і/або кінцевих пробільних символів. " - -#~ msgid "Strings are subscriptable" -#~ msgstr "Рядки можна підписувати" - -#~ msgid "``str`` is not the only one subscriptable data type in Python." -#~ msgstr "``str`` - це не єдиний тип даних, який можна підписувати в Python." - -#~ msgid "" -#~ "This means you can access individual characters or slices within a string " -#~ "using indexes. A string is a *sequence* of characters and each character " -#~ "within a string has its own position - an *index*. Indexing starts at 0, " -#~ "so the first character in a string is at index 0, the second one is at " -#~ "index 1, and so on. Negative indexing is also possible, with -1 " -#~ "representing the last character in a string, -2 representing the second-" -#~ "to-last character, and so on. Use square brackets (``[]``) to access the " -#~ "index." -#~ msgstr "" -#~ "Це означає, що ви можете отримати доступ до окремих символів або " -#~ "фрагментів у рядку за допомогою індексів. Рядок — це послідовність " -#~ "символів, і кожен символ у рядку має власну позицію — індекс. Індексація " -#~ "починається з 0, отже, перший символ у рядку має індекс 0, другий - " -#~ "індекс 1 і так далі. Також можливе від'ємне індексування, коли -1 " -#~ "представляє останній символ у рядку, а -2 представляє передостанній " -#~ "символ і так далі. Використовуйте квадратні дужки (``[]``), щоб отримати " -#~ "доступ до індексу. " - -#~ msgid "" -#~ "You can also *slice* strings, this means to get a subsequence of " -#~ "characters. The slice syntax consists of 3 digits:" -#~ msgstr "" -#~ "Ви також можете *розрізати* рядки, тобто отримати підпослідовність " -#~ "символів. Синтаксис фрагмента складається з 3 цифр: " - -#~ msgid "" -#~ "the first one represent the index to start (inclusive), defaults to 0" -#~ msgstr "" -#~ "Перший представляє початковий індекс (включно), за замовчанням дорівнює " -#~ "0. " - -#~ msgid "" -#~ "the second one represent the index to stop (non-inclusive), defaults to " -#~ "the length of the sequence" -#~ msgstr "" -#~ "Другий представляє індекс для зупинки (не включно), за замовчуванням " -#~ "довжина послідовності. " - -#~ msgid "the third one represents a step, defaults to 1" -#~ msgstr "Третій представляє крок, за замовчуванням 1." - -#~ msgid "" -#~ "These numbers are separated within colon (``:``) and enclosed within " -#~ "square brackets. Any slice digit may be omitted." -#~ msgstr "" -#~ "Ці числа розділені двокрапкою (``:``) і взяті в квадратні дужки. Будь-яка " -#~ "цифра зрізу може бути упущена. " - -#~ msgid "Sequence slicing" -#~ msgstr "Нарізка послідовності" - -#~ msgid "Strings are iterable" -#~ msgstr "Рядки можна повторювати" - -#~ msgid "" -#~ "Since strings are arrays, we can loop through the characters in a string " -#~ "with a ``for`` loop:" -#~ msgstr "" -#~ "Оскільки рядки є масивами, ми можемо прокручувати символи в рядку за " -#~ "допомогою циклу ``for``: " - -#~ msgid "Strings are immutable" -#~ msgstr "Рядки незмінні" - -#~ msgid "" -#~ "This means, you cannot change an individual character within a string." -#~ msgstr "Це означає, що ви не можете змінити окремий символ у рядку." - -#~ msgid "Integers" -#~ msgstr "Цілі числа" - -#~ msgid "" -#~ "``int``, or integer, is a whole number, positive or negative, without " -#~ "decimals." -#~ msgstr "" -#~ "``int``, тобто ціле число, може бути додатнім або від'ємним, без " -#~ "десяткових знаків. " - -#~ msgid "Floats" -#~ msgstr "Числа з плаваючою комою" - -#~ msgid "" -#~ "``float``, or floating point number, is a number, positive or negative, " -#~ "containing one or more decimals." -#~ msgstr "" -#~ "``float``, або число з плаваючою комою, - це число, додатне чи від’ємне, " -#~ "що містить один або більше десяткових знаків. " diff --git a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po new file mode 100644 index 000000000..87a1dff07 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po @@ -0,0 +1,508 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/bool_logic.txt:-1 +msgid "this document covers usage of logic and comparison operators in Python" +msgstr "" +"цей документ охоплює використання логіки та операторів порівняння в Python" + +#: ../../src/basics/bool_logic.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/bool_logic.txt:-1 +msgid "python, boolean, logic, comparison, operator" +msgstr "python, boolean, logic, comparison, operator" + +#: ../../src/basics/bool_logic.txt:14 +msgid "Boolean Logic" +msgstr "Булева Логіка" + +#: ../../src/basics/bool_logic.txt:20 +msgid "" +"`George Boole`_ put together what is now known as `Boolean algebra`_, which " +"relies on **true** and **false** values and define a set of boolean " +"operations: **not**, **and**, and **or**." +msgstr "" +"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " +"спирається на значення **true** і **false** і визначає набір логічних " +"операцій: **not**, **and** і **or**." + +#: ../../src/basics/bool_logic.txt:24 +msgid "" +"These Boolean values and operators are helpful in programming because they " +"help you decide the course of action in your programs." +msgstr "" +"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " +"допомагають визначити курс дій у ваших програмах." + +#: ../../src/basics/bool_logic.txt:27 +msgid "" +"The **Python boolean** type is one of Python's built-in data types. It's " +"used to represent the truth value of an expression. For example, the " +"expression ``1 < 2`` is ``True``, while the expression ``0 == 1`` is " +"``False``. Understanding how Python Boolean values behave is important to " +"programming well in Python." +msgstr "" +"Тип **Python boolean** є одним із вбудованих типів даних Python. Він " +"використовується для представлення істиності значення виразу. Наприклад, " +"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " +"того, як поводяться логічні значення Python, є важливим для якісного " +"програмування на Python." + +#: ../../src/basics/bool_logic.txt:34 +msgid "Understanding Boolean" +msgstr "Розбираємось з Логічним типом даних" + +#: ../../src/basics/bool_logic.txt:36 +msgid "The Boolean type has only two possible values:" +msgstr "Логічний тип має лише два можливих значення:" + +#: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:119 +#: ../../src/basics/bool_logic.txt:121 ../../src/basics/bool_logic.txt:147 +#: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 +#: ../../src/basics/bool_logic.txt:189 ../../src/basics/bool_logic.txt:193 +#: ../../src/basics/bool_logic.txt:195 +msgid "``True``" +msgstr "``True``" + +#: ../../src/basics/bool_logic.txt:39 ../../src/basics/bool_logic.txt:119 +#: ../../src/basics/bool_logic.txt:121 ../../src/basics/bool_logic.txt:149 +#: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 +#: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:193 +#: ../../src/basics/bool_logic.txt:195 +msgid "``False``" +msgstr "``False``" + +#: ../../src/basics/bool_logic.txt:41 +msgid "No other value will have ``bool`` as it type." +msgstr "Жодне інше значення не матиме тип ``bool``." + +#: ../../src/basics/bool_logic.txt:50 +msgid "" +"The type ``bool`` is **built-in**, meaning it's always available in Python. " +"``True`` and ``False`` are keywords in Python and can't be used as variable " +"names. but ``bool`` type isn't and it's possible assign to the name " +"``bool``, however this is considered bad style." +msgstr "" +"Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " +"і ``False`` є ключовими словами в Python і не можуть використовуватися як " +"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " +"значення, однак це вважається поганим стилем." + +#: ../../src/basics/bool_logic.txt:56 +msgid "Boolean as numbers" +msgstr "Boolean як число" + +#: ../../src/basics/bool_logic.txt:58 +msgid "" +"Booleans are a subtype of **numeric** type in Python. This means they're " +"numbers for all intents and purposes. In other words, you can apply " +"arithmetic operations to Boolean, and you can also compare them to numbers. " +"``True`` value is treated to be 1, and ``False`` value is treated to be 0." +msgstr "" +"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " +"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " +"арифметичні операції до логічних значень, а також порівнювати їх із числами. " +"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " +"0." + +#: ../../src/basics/bool_logic.txt:63 +msgid "There aren't many uses of the numerical nature of Boolean values." +msgstr "" +"Числовій природі логічних значень можна знайти не так багато застосунків." + +#: ../../src/basics/bool_logic.txt:66 +msgid "Truth value testing" +msgstr "Перевірка істинності" + +#: ../../src/basics/bool_logic.txt:68 +msgid "" +"Any object can be tested for truth value. By default an object considered " +"``True``, unless its class defines either. Here are most of built-in objects " +"considered ``False``:" +msgstr "" +"Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " +"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " +"вбудованих об'єктів, які вважаються ``False``:" + +#: ../../src/basics/bool_logic.txt:72 +msgid "constant values: ``None`` and ``False``" +msgstr "константи: ``None`` та ``False``" + +#: ../../src/basics/bool_logic.txt:73 +msgid "" +"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" +msgstr "" +"нуль будь-якого числового типу: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" + +#: ../../src/basics/bool_logic.txt:75 +msgid "" +"empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " +"``range(0)``." +msgstr "" +"порожні послідовності та колекції: ``''``, ``[]``, ``()``, ``{}``, " +"``set()``, ``range(0)``." + +#: ../../src/basics/bool_logic.txt:80 +msgid "" +"If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " +"as ``False``." +msgstr "" +"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " +"``bool`` як ``False``." + +#: ../../src/basics/bool_logic.txt:84 +msgid "Boolean comparison" +msgstr "Логічне Порівняння" + +#: ../../src/basics/bool_logic.txt:86 +msgid "Python provides 3 logical operators:" +msgstr "Python надає 3 логічних оператори:" + +#: ../../src/basics/bool_logic.txt:92 ../../src/basics/bool_logic.txt:226 +msgid "Operator" +msgstr "Оператор" + +#: ../../src/basics/bool_logic.txt:92 +msgid "Logic operator" +msgstr "Логічний оператор" + +#: ../../src/basics/bool_logic.txt:94 +msgid "``not``" +msgstr "``not``" + +#: ../../src/basics/bool_logic.txt:94 +msgid "Negation" +msgstr "Заперечення" + +#: ../../src/basics/bool_logic.txt:96 +msgid "``and``" +msgstr "``and``" + +#: ../../src/basics/bool_logic.txt:96 +msgid "Conjunction" +msgstr "Кон'юнкція" + +#: ../../src/basics/bool_logic.txt:98 +msgid "``or``" +msgstr "``or``" + +#: ../../src/basics/bool_logic.txt:98 +msgid "Disjunction" +msgstr "Диз'юнкція" + +#: ../../src/basics/bool_logic.txt:101 +msgid "" +"With these operators, you can build expressions by connecting Boolean " +"expressions with each other. These operators are **keywords** of the " +"language, so you cannot use them as identifiers without causing a " +"*SyntaxError*." +msgstr "" +"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " +"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " +"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." + +#: ../../src/basics/bool_logic.txt:106 +msgid "Getting started with ``not`` operator" +msgstr "Початок роботи з оператором ``not``" + +#: ../../src/basics/bool_logic.txt:108 +msgid "" +"The ``not`` operator is the Boolean or logic operator that implements " +"negation in Python. It's **unary**, which means that it takes only one " +"**operand**. The operand can be a Boolean expression or any Python object. " +"The task of ``not`` is to reverse the truth value of its operand." +msgstr "" +"Оператор ``not`` є логічним або логічним оператором, який реалізує " +"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " +"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " +"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " +"операнда." + +#: ../../src/basics/bool_logic.txt:113 +msgid "not operator truth table" +msgstr "таблиця істинності оператора not" + +#: ../../src/basics/bool_logic.txt:117 +msgid "``operand``" +msgstr "``operand``" + +#: ../../src/basics/bool_logic.txt:117 +msgid "``not operand``" +msgstr "``not operand``" + +#: ../../src/basics/bool_logic.txt:124 +msgid "This functionality makes it worthwhile in several situations:" +msgstr "Ця функція доцільна в кількох ситуаціях:" + +#: ../../src/basics/bool_logic.txt:127 +msgid "" +"Checking **unmet conditions** in the context of ``if`` statements and " +"``while`` loops" +msgstr "" +"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " +"``while``" + +#: ../../src/basics/bool_logic.txt:129 +msgid "**Inverting the truth value** of an object or expression" +msgstr "**Інвертування значення істинності** об'єкта чи виразу" + +#: ../../src/basics/bool_logic.txt:130 +msgid "Checking if a **value is not in a given container**" +msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" + +#: ../../src/basics/bool_logic.txt:131 +msgid "Checking for an **object's identity**" +msgstr "Перевірка **ідентичності об'єкта**" + +#: ../../src/basics/bool_logic.txt:134 +msgid "Getting started with ``and`` operator" +msgstr "Початок роботи з оператором ``and``" + +#: ../../src/basics/bool_logic.txt:136 +msgid "" +"Python's ``and`` operator is **binary**, which means it takes two " +"**operands**. The operands in an ``and`` expression are commonly known as " +"*conditions*. The result of the operator depends on the truth values of its " +"operands. It'll be ``True`` if **both** are true." +msgstr "" +"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " +"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " +"Результат оператора залежить від істинних значень його операндів. Це буде " +"``True``, якщо **обидва** є істинними." + +#: ../../src/basics/bool_logic.txt:141 +msgid "and operator truth table" +msgstr "таблиця істинності оператора and" + +#: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +msgid "``operand_1``" +msgstr "``operand_1``" + +#: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +msgid "``operand_2``" +msgstr "``operand_2``" + +#: ../../src/basics/bool_logic.txt:145 +msgid "``operand_1 and operand_2``" +msgstr "``operand_1 and operand_2``" + +#: ../../src/basics/bool_logic.txt:156 +msgid "" +"``and`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``and`` працює не тільки з операндами логічного типу. Його " +"поведінка:" + +#: ../../src/basics/bool_logic.txt:159 +msgid "evaluate 1st operand; return it, if it's ``False`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:160 +msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" + +#: ../../src/basics/bool_logic.txt:161 ../../src/basics/bool_logic.txt:203 +msgid "return 2nd operand" +msgstr "повернути 2-й операнд" + +#: ../../src/basics/bool_logic.txt:175 +msgid "Getting started with ``or`` operator" +msgstr "Початок роботи з оператором ``or``" + +#: ../../src/basics/bool_logic.txt:177 +msgid "" +"With Boolean ``or`` operator, you can connect two Boolean expressions into " +"one compound expression. This makes ``or`` the **binary** operator. At least " +"one subexpression must be ``True`` for the compound expression to be " +"considered ``True``, and it doesn't matter which. If both subexpressions are " +"``False``, then the expression is ``False``." +msgstr "" +"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " +"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " +"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " +"``True``, і не має значення який. Якщо обидва підвирази мають значення " +"``False``, тоді вираз є ``False``." + +#: ../../src/basics/bool_logic.txt:183 +msgid "or operator truth table" +msgstr "таблиця істинності оператора or" + +#: ../../src/basics/bool_logic.txt:187 +msgid "``operand_1 or operand_2``" +msgstr "``operand_1 or operand_2``" + +#: ../../src/basics/bool_logic.txt:198 +msgid "" +"``or`` operator works not only with operands of Boolean type. It's behavior:" +msgstr "" +"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" + +#: ../../src/basics/bool_logic.txt:201 +msgid "evaluate 1st operand; return it, if it's ``True`` and finish" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:202 +msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" + +#: ../../src/basics/bool_logic.txt:217 +msgid "Comparison" +msgstr "Порівняння" + +#: ../../src/basics/bool_logic.txt:219 +msgid "" +"There are eight comparison operations in Python. They all have the same " +"priority (which is higher than that of the Boolean operations)." +msgstr "" +"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " +"(вищий, ніж у логічних операцій)." + +#: ../../src/basics/bool_logic.txt:222 +msgid "Comparison operators" +msgstr "Оператори порівняння" + +#: ../../src/basics/bool_logic.txt:226 +msgid "Meaning" +msgstr "Значення" + +#: ../../src/basics/bool_logic.txt:228 +msgid "``<``" +msgstr "``<``" + +#: ../../src/basics/bool_logic.txt:228 +msgid "strictly less than" +msgstr "строго менше ніж" + +#: ../../src/basics/bool_logic.txt:230 +msgid "``<=``" +msgstr "``<=``" + +#: ../../src/basics/bool_logic.txt:230 +msgid "less than or equal" +msgstr "менше або дорівнює" + +#: ../../src/basics/bool_logic.txt:232 +msgid "``>``" +msgstr "``>``" + +#: ../../src/basics/bool_logic.txt:232 +msgid "strictly greater than" +msgstr "строго більше ніж" + +#: ../../src/basics/bool_logic.txt:234 +msgid "``>=``" +msgstr "``>=``" + +#: ../../src/basics/bool_logic.txt:234 +msgid "greater or equal" +msgstr "більше або дорівнює" + +#: ../../src/basics/bool_logic.txt:236 +msgid "``==``" +msgstr "``==``" + +#: ../../src/basics/bool_logic.txt:236 +msgid "equal (aka *equality* comparison)" +msgstr "дорівнює (також відоме як порівняння *equality*)" + +#: ../../src/basics/bool_logic.txt:238 +msgid "``!=``" +msgstr "``!=``" + +#: ../../src/basics/bool_logic.txt:238 +msgid "not equal" +msgstr "не дорівнює" + +#: ../../src/basics/bool_logic.txt:240 +msgid "``is``" +msgstr "``is``" + +#: ../../src/basics/bool_logic.txt:240 +msgid "object identity" +msgstr "ідентичність об'єкта" + +#: ../../src/basics/bool_logic.txt:242 +msgid "``is not``" +msgstr "``is not``" + +#: ../../src/basics/bool_logic.txt:242 +msgid "negated object identity" +msgstr "заперечена ідентичність об'єкта" + +#: ../../src/basics/bool_logic.txt:245 +msgid "" +"Each of these comparison operators return a Boolean value, it's always " +"``True`` or ``False``." +msgstr "" +"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " +"``True`` або ``False``." + +#: ../../src/basics/bool_logic.txt:248 +msgid "" +"You can chain comparison operators together: ``x < y < z`` is equal to ``x < " +"y and y < z``." +msgstr "" +"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " +"< z``." + +#: ../../src/basics/bool_logic.txt:252 +msgid "Equality vs Identity" +msgstr "Рівність та Ідентичність" + +#: ../../src/basics/bool_logic.txt:254 +msgid "" +"It's easier to understand the difference between those by asking the " +"question each answers to." +msgstr "" +"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " +"відповідає." + +#: ../../src/basics/bool_logic.txt:257 +msgid "The question for ``==`` (*equality*) is:" +msgstr "Питання для ``==`` (*equality*) таке:" + +#: ../../src/basics/bool_logic.txt:259 +msgid "Is object on the left **equal** to the object on the right" +msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" + +#: ../../src/basics/bool_logic.txt:261 +msgid "The question for ``is`` (*identity*) is:" +msgstr "Питання для ``is`` (*identity*) таке:" + +#: ../../src/basics/bool_logic.txt:263 +msgid "Is object on the left **the same** as the object on the right" +msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" + +#: ../../src/basics/bool_logic.txt:265 +msgid "" +"For example, if there are two cars of the same model, same color etc. in " +"front of you - these cars are equal, but they aren't ident to each other. " +"But if you are shown two pictures of the same car, you understand that the " +"cars on those pictures are the same object." +msgstr "" +"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " +"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " +"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " +"одним і тим же об'єктом." diff --git a/src/_locales/uk/LC_MESSAGES/basics/controlflow.po b/src/_locales/uk/LC_MESSAGES/basics/controlflow.po new file mode 100644 index 000000000..14e3f63dd --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/controlflow.po @@ -0,0 +1,177 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/controlflow.txt:-1 +msgid "Control flow in Python" +msgstr "Контроль потоку в Python" + +#: ../../src/basics/controlflow.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/controlflow.txt:-1 +msgid "python, basics, control, if, for, while, condition, loop" +msgstr "python, basics, control, if, for, while, condition, loop" + +#: ../../src/basics/controlflow.txt:8 +msgid "Control Flow" +msgstr "Керування виконанням" + +#: ../../src/basics/controlflow.txt:13 +msgid "``if`` statement" +msgstr "Вираз ``if``" + +#: ../../src/basics/controlflow.txt:15 +msgid "" +"Perhaps the most well-known statement type is ``if`` statement. For example:" +msgstr "Мабуть, найвідомішим типом оператора є оператор ``if``. Наприклад:" + +#: ../../src/basics/controlflow.txt:17 +msgid "if statement base example" +msgstr "базовий приклад оператора if" + +#: ../../src/basics/controlflow.txt:31 +msgid "But let's dive into ``if`` statement with more simple examples." +msgstr "" +"Але давайте зануримося в інструкцію ``if`` з більш простими прикладами." + +#: ../../src/basics/controlflow.txt:34 +msgid "How it works" +msgstr "Як це працює" + +#: ../../src/basics/controlflow.txt:36 +msgid "" +"**if** statement is defined with a keyword ``if`` followed by a Boolean " +"expression or any object and finished with colon. The statement requires a " +"*body*: other statements to execute, also called an *if block*. The body is " +"indented at the same distance from the left (in Python we use 4 spaces to " +"indent a single block of code)." +msgstr "" +"Оператор **if** визначається ключовим словом ``if``, за яким слідує логічний " +"вираз або будь-який об'єкт і завершується двокрапкою. Оператор потребує " +"*тіло*: інші оператори для виконання, які також називають блоком *if*. Тіло " +"має відступ на однаковій відстані зліва (у Python ми використовуємо 4 " +"пробіли для відступу одного блоку коду)." + +#: ../../src/basics/controlflow.txt:42 +msgid "" +"The body's statements will be executed only in case **if** expression is " +"``True``." +msgstr "" +"Оператори тіла виконуватимуться лише у випадку, якщо вираз **if** має " +"значення ``True``." + +#: ../../src/basics/controlflow.txt:55 +msgid "" +"The ``print`` statement on line #6 will be executed only for even value of " +"``number`` variable." +msgstr "" +"Оператор ``print`` у рядку #6 буде виконано лише для парного значення " +"змінної ``number``." + +#: ../../src/basics/controlflow.txt:59 +msgid "``else`` block" +msgstr "Блок ``else``" + +#: ../../src/basics/controlflow.txt:61 +msgid "" +"``if`` can be used by its own, it can extend its behavior with ``else`` " +"block. The general syntax for ``else`` body is the same: at least one " +"indented statement. But ``else`` doesn't take any expression after it. This " +"block of code will be executed only that the ``if`` statement truth check " +"fails." +msgstr "" +"``if`` може використовуватися самостійно, він може розширити свою поведінку " +"за допомогою блоку ``else``. Загальний синтаксис для тіла ``else`` той " +"самий: принаймні один оператор із відступом. Але ``else`` не приймає жодного " +"виразу після нього. Цей блок коду буде виконано лише тоді, коли перевірка " +"істинності оператора ``if`` буде невдалою." + +#: ../../src/basics/controlflow.txt:78 +msgid "" +"You can attach **only one** else block to **if statement**. And you cannot " +"use ``else`` statement on its own - this will cause *SyntaxError*." +msgstr "" +"Ви можете приєднати **лише один** блок else до **інструкції if**. І ви не " +"можете використовувати оператор ``else`` сам по собі - це спричинить " +"*SyntaxError*." + +#: ../../src/basics/controlflow.txt:82 +msgid "``elif`` block(s)" +msgstr "Блок(и) ``elif``" + +#: ../../src/basics/controlflow.txt:84 +msgid "" +"``elif`` (*else if*) statement may be considered as semi-statement between " +"``if`` and ``else`` statements. In case your program has more than two " +"dedicated choices you are able to extends control flow by appending ``elif`` " +"blocks after ``if`` statement. The syntax is pretty similar to ``if`` " +"statement. Each ``elif`` has its own boolean expression or an object to test " +"for the truth value." +msgstr "" +"Оператор ``elif`` (*else if*) можна розглядати як напівоператор між ``if`` " +"та ``else``. Якщо у вашій програмі є більше двох виділених варіантів, ви " +"можете розширити потік керування, додавши блоки ``elif`` після оператора " +"``if``. Синтаксис дуже схожий на оператор if. Кожен ``elif`` має свій " +"власний логічний вираз або об'єкт для перевірки значення істинності." + +#: ../../src/basics/controlflow.txt:91 +msgid "" +"You can attach as many ``elif`` statements as it needed. But you cannot use " +"``elif`` without ``if`` statement." +msgstr "" +"Ви можете додати скільки завгодно операторів ``elif``. Але ви не можете " +"використовувати ``elif`` без оператора ``if``." + +#: ../../src/basics/controlflow.txt:94 +msgid "" +"Python will test conditions in ``if`` and ``elif`` statements from top to " +"bottom. The first one, which considered to be ``True`` will be executed. All " +"others will be skipped." +msgstr "" +"Python перевірить умови в операторах ``if`` та ``elif`` зверху вниз. Буде " +"виконано перший, який вважається ``True``. Усі інші будуть проігноровано." + +#: ../../src/basics/controlflow.txt:98 +msgid "" +"If there were no truth conditions ``else`` block will be executed (if " +"exists)." +msgstr "Якщо не було істиних умов, буде виконано блок ``else`` (якщо існує)." + +#: ../../src/basics/controlflow.txt:114 +msgid "" +"The order conditions appears matter. The truth test goes from top to bottom " +"and stops at first expression which is ``True``." +msgstr "" +"Порядок у якому визначено умови має значення. Перевірка істинності йде " +"зверху вниз і зупиняється на першому виразі, який є ``True``." + +#: ../../src/basics/controlflow.txt:119 +msgid "Usage" +msgstr "Використання" + +#: ../../src/basics/controlflow.txt:121 +msgid "" +"``if/elif/else`` statements help you to control which portion of your code " +"is executed based on conditions from outer scope." +msgstr "" +"Оператори ``if/elif/else`` допомагають вам контролювати, яка частина вашого " +"коду виконується на основі умов ззовні." diff --git a/src/_locales/uk/LC_MESSAGES/basics/decorators.po b/src/_locales/uk/LC_MESSAGES/basics/decorators.po new file mode 100644 index 000000000..4fa2fd4d8 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/decorators.po @@ -0,0 +1,391 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/decorators.txt:-1 +msgid "Python decorators" +msgstr "Декоратори в Python" + +#: ../../src/basics/decorators.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/decorators.txt:-1 +msgid "python, basics, decorators" +msgstr "python, basics, decorators" + +#: ../../src/basics/decorators.txt:11 +msgid "Decorators" +msgstr "Декоратори" + +#: ../../src/basics/decorators.txt:13 +msgid "" +"Decorators provide a simple syntax for calling higher-order functions :cite:" +"`realpython:decorators`." +msgstr "" +"Декоратори забезпечують простий синтаксис для виклику функцій вищого " +"порядку :cite:`realpython:decorators`." + +#: ../../src/basics/decorators.txt:18 +msgid "There is some kind of misunderstanding in definitions." +msgstr "Є деяке непорозуміння у визначеннях." + +#: ../../src/basics/decorators.txt:20 +msgid "" +"**Decorator** is a function returning another function, usually applied as a " +"function transformation using the ``@wrapper`` syntax :cite:`docs-python:" +"term-decorator`." +msgstr "" +"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " +"застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" +"cite:`docs-python:term-decorator`." + +#: ../../src/basics/decorators.txt:24 +msgid "" +"However, that's no quit enough to describe it. The more complete definition " +"is:" +msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" + +#: ../../src/basics/decorators.txt:27 +msgid "" +"**Decorator** is a structural design pattern that lets you attach new " +"behaviors to objects by placing these objects inside special wrapper objects " +"that contain the behaviors :cite:`refactoring.guru:decorator`." +msgstr "" +"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " +"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " +"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." + +#: ../../src/basics/decorators.txt:31 +msgid "" +"Before you understand decorators, you must first understand how functions " +"work." +msgstr "" +"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " +"функції." + +#: ../../src/basics/decorators.txt:35 +msgid "First-class objects" +msgstr "Об'єкти першого класу" + +#: ../../src/basics/decorators.txt:37 +msgid "" +"In Python functions are `first-class objects`_. Everything in Python is an " +"object. Functions are objects too." +msgstr "" +"У Python функції є `об'єктами першого класу`_. Усе в Python є об'єктом. " +"Функції також є об'єктами." + +#: ../../src/basics/decorators.txt:41 +msgid "Inner functions" +msgstr "Внутрішні функції" + +#: ../../src/basics/decorators.txt:43 +msgid "" +"Functions can be nested. This means it is possible to define functions " +"inside other functions." +msgstr "" +"Функції можуть бути вкладеними. Це означає, що можна визначати функції " +"всередині інших функцій." + +#: ../../src/basics/decorators.txt:46 +msgid "Nested functions example" +msgstr "Приклад вкладених функцій" + +#: ../../src/basics/decorators.txt:60 +msgid "" +"The order in which inner functions are defined no matters. The function " +"definition does not execute the function body; this gets executed only when " +"the function is called. Furthermore, the inner functions are not defined " +"until the parent function is called. They are locally scoped to their " +"parent. Trying to call ``heapify`` function outside of ``heap_sort`` will " +"cause ``NameError`` exception." +msgstr "" +"Порядок визначення внутрішніх функцій не має значення. Визначення функції не " +"виконує тіло функції; це виконується лише під час виклику функції. Крім " +"того, внутрішні функції не визначені, доки не буде викликана батьківська " +"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " +"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " +"``NameError``." + +#: ../../src/basics/decorators.txt:68 +msgid "Functions are objects" +msgstr "Функції є об'єктами" + +#: ../../src/basics/decorators.txt:70 +msgid "" +"This means functions can be passed around and used as arguments, just like " +"any other object (e.g. *int*, *str* etc.)." +msgstr "" +"Це означає, що функції можна передавати й використовувати як аргументи, як і " +"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." + +#: ../../src/basics/decorators.txt:95 +msgid "Returning functions" +msgstr "Повернення функцій" + +#: ../../src/basics/decorators.txt:97 +msgid "" +"Since function can be passed as an argument, it may be returned from another " +"function." +msgstr "" +"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " +"функції." + +#: ../../src/basics/decorators.txt:120 +msgid "``parent`` returns functions themselves, there are no parentheses." +msgstr "``parent`` повертає самі функції, тут нема дужок." + +#: ../../src/basics/decorators.txt:122 +msgid "" +"After running the code snippet above, ``first`` refers the ``first_child`` " +"function from the inner ``parent`` scope. From now it can be used to call " +"the target function it refers." +msgstr "" +"Після виконання наведеного вище фрагмента коду ``first`` посилається на " +"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " +"можна використовувати для виклику цільової функції, на яку він посилається." + +#: ../../src/basics/decorators.txt:134 +msgid "Simple decorators" +msgstr "Прості декоратори" + +#: ../../src/basics/decorators.txt:136 +msgid "" +"Now you're ready to move on and see the magical beast that is the Python " +"decorators. Let's start with a simple example:" +msgstr "" +"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " +"Python. Почнемо з простого прикладу:" + +#: ../../src/basics/decorators.txt:154 +msgid "Running function:" +msgstr "Запуск функцій:" + +#: ../../src/basics/decorators.txt:165 +msgid "" +"The common way to use decorators is to replace the original function with a " +"decorated one:" +msgstr "" +"Поширеним способом використання декораторів є заміна оригінальної функції на " +"декоровану:" + +#: ../../src/basics/decorators.txt:176 +msgid "" +"``say_hello`` function is the reference to the ``decorator.." +"wrapper``, which itself is bound to the original ``say_hello`` function. " +"There is a syntactic sugar to do this, called *pie-syntax*. The following " +"example does exact the same things as the first decorator example:" +msgstr "" +"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " +"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " +"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " +"ті самі речі, що й перший приклад декоратора:" + +#: ../../src/basics/decorators.txt:198 +msgid "" +"There is no way to *undecorate* object in Python. Once something is bound to " +"the decorator's wrapper - it is decorated forever." +msgstr "" +"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " +"обгортки декоратора - воно прикрашене назавжди." + +#: ../../src/basics/decorators.txt:201 +msgid "" +"A decorated function still remains a **function**. So, it can be decorated " +"once more time again, and again, and again..." +msgstr "" +"Декорована функція все ще залишається **функцією**. Отже, його можна " +"прикрашати ще раз, і ще, і ще..." + +#: ../../src/basics/decorators.txt:253 +msgid "" +"\"Wrapper\" is the alternative nickname for the Decorator pattern that " +"clearly expresses the main idea of the pattern. A wrapper is an object that " +"can be linked with some target object. The wrapper contains the same set of " +"methods as the target and delegates to it all requests it receives. However, " +"the wrapper may alter the result by doing something either before or after " +"it passes the request to the target." +msgstr "" +"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " +"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " +"деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " +"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " +"результат, зробивши щось до або після того, як вона передає запит цільовому " +"об'єкту." + +#: ../../src/basics/decorators.txt:261 +msgid "Passing arguments to the wrapper" +msgstr "Передача аргументів до wrapper" + +#: ../../src/basics/decorators.txt:263 +msgid "" +"Until now the examples use *simple* decorators. But what if the decorated " +"function gets some arguments? This will cause ``TypeError`` exception that " +"tell that \"arguments are missed\". This can be fixed with just passing " +"arguments to the ``wrapper`` inner function." +msgstr "" +"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " +"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " +"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " +"аргументи внутрішній функції ``wrapper``." + +#: ../../src/basics/decorators.txt:289 +msgid "" +"If case you're trying to make a generic decorator, you may pass ``*args`` " +"and ``**kwargs`` instead of exact arguments:" +msgstr "" +"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " +"``*args`` і ``**kwargs`` замість точних аргументів:" + +#: ../../src/basics/decorators.txt:308 +msgid "Passing arguments to decorator" +msgstr "Передача аргументів декоратору" + +#: ../../src/basics/decorators.txt:310 +msgid "" +"At last it's time to know how to pass arguments to the decorator. Here is a " +"simple implementation of ``defer`` decorator which deferred the function " +"execution for some time:" +msgstr "" +"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " +"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " +"час:" + +#: ../../src/basics/decorators.txt:353 +msgid "Class decorators" +msgstr "Декоратори класів" + +#: ../../src/basics/decorators.txt:355 +msgid "" +"There are some pre-defined decorators exists for usage together with " +"classes. They are:" +msgstr "" +"Існують деякі попередньо визначені декоратори для використання разом із " +"класами. Це:" + +#: ../../src/basics/decorators.txt:358 +msgid "``classmethod``" +msgstr "``classmethod``" + +#: ../../src/basics/decorators.txt:359 +msgid "``staticmethod``" +msgstr "``staticmethod``" + +#: ../../src/basics/decorators.txt:360 +msgid "``property``" +msgstr "``property``" + +#: ../../src/basics/decorators.txt:362 +msgid "" +"If you develop an intuitive understanding for their differences you'll be " +"able to write object-oriented Python that communicates its intent more " +"clearly and will be easier to maintain in the long run :cite:`realpython:" +"methods-demystified`." +msgstr "" +"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " +"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " +"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" +"methods-demystified`." + +#: ../../src/basics/decorators.txt:368 +msgid "Class methods" +msgstr "Методи класу" + +#: ../../src/basics/decorators.txt:370 +msgid "" +"Instead of accepting a ``self`` parameter, class methods take a ``cls`` " +"parameter that points to the class — and not the object instance — when the " +"method is called." +msgstr "" +"Замість того, щоб приймати параметр self, під час виклику методу методи " +"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " +"класу." + +#: ../../src/basics/decorators.txt:374 +msgid "" +"Because the class method only has access to this ``cls`` argument, it can't " +"modify object instance state. That would require access to ``self``. " +"However, class methods can still modify class state that applies across all " +"instances of the class." +msgstr "" +"Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " +"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " +"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " +"екземплярів класу." + +#: ../../src/basics/decorators.txt:379 +msgid "" +"The common usage for ``classmethod`` is provide alternative initializers." +msgstr "" +"Загальним використанням ``методи класу`` є надання альтернативних " +"ініціалізаторів." + +#: ../../src/basics/decorators.txt:382 +msgid "Static methods" +msgstr "Статичні методи" + +#: ../../src/basics/decorators.txt:384 +msgid "" +"This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " +"course it's free to accept an arbitrary number of other parameters)." +msgstr "" +"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " +"він може приймати будь-яку кількість інших параметрів)." + +#: ../../src/basics/decorators.txt:387 +msgid "" +"Therefore a static method can neither modify object state nor class state. " +"Static methods are restricted in what data they can access - and they're " +"primarily a way to namespace your methods." +msgstr "" +"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " +"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " +"і вони, перш за все, є способом простору імен ваших методів." + +#: ../../src/basics/decorators.txt:391 +msgid "" +"It's tricky to explain ``staticmethod`` usage. Almost always you can create " +"a dedicated function instead of static method. But sometimes you need to " +"bind some logic independent from class itself or its instances to a class - " +"it common to encapsulate it with ``staticmethod``." +msgstr "" +"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " +"створити спеціальну функцію замість статичного методу. Але іноді вам " +"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " +"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." + +#: ../../src/basics/decorators.txt:397 +msgid "Properties" +msgstr "Властивості" + +#: ../../src/basics/decorators.txt:399 +msgid "" +"It's a way to bind a method name to access it as an attribute. Properties " +"are **read-only** by default. This means a value cannot be assigned to " +"``property member``." +msgstr "" +"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " +"замовчуванням властивості доступні **лише для читання**. Це означає, що " +"значення не можна призначити ``члену властивості``." + +#: ../../src/basics/decorators.txt:404 +msgid "Some examples" +msgstr "Деякі приклади" diff --git a/src/_locales/uk/LC_MESSAGES/basics/exceptions.po b/src/_locales/uk/LC_MESSAGES/basics/exceptions.po new file mode 100644 index 000000000..7a9c165bc --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/exceptions.po @@ -0,0 +1,380 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/exceptions.txt:-1 +msgid "Handling exceptions in Python" +msgstr "Опрацювання винятків в Python" + +#: ../../src/basics/exceptions.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/exceptions.txt:-1 +msgid "python, exceptions, handling, try, except, finally" +msgstr "python, exceptions, handling, try, except, finally" + +#: ../../src/basics/exceptions.txt:11 +msgid "Errors and Exceptions" +msgstr "Помилки та винятки" + +#: ../../src/basics/exceptions.txt:13 +msgid "" +"There are (at least) two distinguishable kinds of errors: *syntax errors* " +"and *exceptions* :cite:`docs-python:errors`." +msgstr "" +"Існує (принаймні) два типи помилок: *синтаксичні помилки* та *виключення* :" +"cite:`docs-python:errors`." + +#: ../../src/basics/exceptions.txt:17 +msgid "Syntax errors" +msgstr "Синтаксичні помилки" + +#: ../../src/basics/exceptions.txt:19 +msgid "Syntax errors are also known as parsing errors." +msgstr "Синтаксичні помилки також відомі як помилки Python парсера." + +#: ../../src/basics/exceptions.txt:29 +msgid "" +"The parser repeats the offending line and displays a little \"arrow\" " +"pointing at the earliest point in the line where the error was detected. The " +"error is caused by (or at least detected at) the token preceding the arrow." +msgstr "" +"Синтаксичний аналізатор повторює неправильний рядок і відображає маленьку " +"\"стрілку\", яка вказує на найперший символ рядка, де було виявлено помилку. " +"Помилка спричинена (або принаймні виявлена) символом(а) перед стрілкою." + +#: ../../src/basics/exceptions.txt:34 +msgid "Exceptions" +msgstr "Винятки" + +#: ../../src/basics/exceptions.txt:36 +msgid "" +"Even if a statement or expression is syntactically correct, it may cause an " +"error when an attempt is made to execute it. Errors detected during " +"execution are called exceptions and are not unconditionally fatal: you will " +"soon learn how to handle them in Python programs." +msgstr "" +"Навіть якщо оператор або вираз синтаксично правильний, це може спричинити " +"помилку під час спроби його виконання. Помилки, виявлені під час виконання, " +"називаються винятками і не є фатальними: незабаром ви дізнаєтеся, як їх " +"обробляти в програмах на Python." + +#: ../../src/basics/exceptions.txt:41 +msgid "" +"Exceptions come in different types, and the type is printed as part of the " +"message." +msgstr "" +"Винятки бувають різних типів, і тип друкується як частина повідомлення." + +#: ../../src/basics/exceptions.txt:44 +msgid "For example, the ``div`` function implemented as" +msgstr "Наприклад, функція ``div``, реалізована як" + +#: ../../src/basics/exceptions.txt:53 +msgid "" +"may cause a ``ZeroDivisionError`` exception in case 0 is passed as ``y`` " +"parameter." +msgstr "" +"може викликати виняток ``ZeroDivisionError``, якщо 0 передається як параметр " +"``y``." + +#: ../../src/basics/exceptions.txt:56 +msgid "" +"Standard exception names are built-in identifiers (not reserved keywords)." +msgstr "" +"Стандартні назви винятків є вбудованими ідентифікаторами (а не " +"зарезервованими ключовими словами)." + +#: ../../src/basics/exceptions.txt:58 +msgid "The list of `built-in exceptions`_" +msgstr "Список `вбудованих винятків`_" + +#: ../../src/basics/exceptions.txt:61 +msgid "Tracebacks" +msgstr "Відстеження" + +#: ../../src/basics/exceptions.txt:63 +msgid "\"File\" is replaced with a *dummy string* within the examples." +msgstr "У наведених прикладах \"Файл\" замінено на *фіктивний рядок*." + +#: ../../src/basics/exceptions.txt:65 +msgid "Let's assume the following modules structure:" +msgstr "Припустимо наступну структуру модулів:" + +#: ../../src/basics/exceptions.txt:73 +msgid "" +"The **main** module imports a ``div`` function implemented above from the " +"**func** module. The code in main is implemented as follows:" +msgstr "" +"Модуль **main** імпортує функцію ``div``, реалізовану вище, з модуля " +"**func**. Основний код реалізовано наступним чином:" + +#: ../../src/basics/exceptions.txt:85 +msgid "" +"While running the code with correct inputs it will work fine. But there are " +"at two exceptions for this script." +msgstr "" +"Під час виконання коду з правильними введеннями він працюватиме нормально. " +"Але для цього сценарію є два винятки." + +#: ../../src/basics/exceptions.txt:88 +msgid "" +"The first one is related on type conversion. While running the main script " +"there is case of invalid input." +msgstr "" +"Перший пов'язаний з перетворенням типів. Під час виконання основного " +"сценарію є випадок неправильного введення." + +#: ../../src/basics/exceptions.txt:100 +msgid "" +"Note the **traceback** indicates the module and the exact line of code that " +"causes the exception." +msgstr "" +"Зауважте, що **traceback** вказує на модуль і точний рядок коду, який " +"викликає виняток." + +#: ../../src/basics/exceptions.txt:103 +msgid "" +"The second one exception occurs when a 0 is passed as the second parameter " +"to ``div`` function. The traceback would look like:" +msgstr "" +"Другий виняток виникає, коли 0 передається як другий параметр функції " +"``div``. Трасування виглядатиме так:" + +#: ../../src/basics/exceptions.txt:117 +msgid "" +"The traceback indicates all calls (top to bottom) that cause an exception." +msgstr "" +"Зворотне відстеження вказує на всі виклики (зверху вниз), які викликають " +"виняток." + +#: ../../src/basics/exceptions.txt:120 +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/exceptions.txt:122 +msgid "" +"It is possible to write programs that handle selected exceptions. The " +"``try`` statement is used to do that." +msgstr "" +"Можна писати програми, які оброблятимуть вибрані винятки. Для цього " +"використовується інструкція ``try``." + +#: ../../src/basics/exceptions.txt:125 +msgid "The try statement works as follows." +msgstr "Інструкція try працює наступним чином." + +#: ../../src/basics/exceptions.txt:127 +msgid "" +"First, the try clause (the statement(s) between the try and except keywords) " +"is executed." +msgstr "" +"Спочатку виконується речення try (вираз(и) між ключовими словами try і " +"except)." + +#: ../../src/basics/exceptions.txt:129 +msgid "" +"If no exception occurs, the except clause is skipped and execution of the " +"try statement is finished." +msgstr "" +"Якщо винятків не відбувається, пропозиція винятку пропускається, і виконання " +"оператора try завершується." + +#: ../../src/basics/exceptions.txt:131 +msgid "" +"If an exception occurs during execution of the try clause, the rest of the " +"clause is skipped. Then, if its type matches the exception named after the " +"except keyword, the except clause is executed, and then execution continues " +"after the try/except block." +msgstr "" +"Якщо під час виконання try виникає виняток, решта пропозиції пропускається. " +"Потім, якщо його тип збігається з винятком, названим за ключовим словом " +"osim, виконується пропозиція, а потім виконання продовжується після блоку " +"try/except." + +#: ../../src/basics/exceptions.txt:135 +msgid "" +"If an exception occurs which does not match the exception named in the " +"except clause, it is passed on to outer try statements; if no handler is " +"found, it is an unhandled exception and execution stops with a message as " +"shown above." +msgstr "" +"Якщо виникає виняток, який не збігається з винятком, названим у реченні " +"винятку, він передається зовнішнім операторам try; якщо обробник не " +"знайдено, це необроблена виняткова ситуація, і виконання зупиняється з " +"повідомленням, як показано вище." + +#: ../../src/basics/exceptions.txt:152 +msgid "" +"A try statement may have more than one except clause, to specify handlers " +"for different exceptions." +msgstr "" +"Інструкція try може мати більше однієї пропозиції, щоб вказати обробники для " +"різних винятків." + +#: ../../src/basics/exceptions.txt:182 +msgid "Handling ALL exception" +msgstr "Опрацювання усіх винятків" + +#: ../../src/basics/exceptions.txt:184 +msgid "It's a bad practice to handle **all** exceptions." +msgstr "Обробляти **всі** винятки – це погана практика." + +#: ../../src/basics/exceptions.txt:186 +msgid "" +"When indicating an ``except`` block without specifying an exception to catch " +"it will work for any exception, that occurs in ``try`` block. The same is " +"relevant for handling ``BaseException`` and ``Exception``. But you can never " +"say what exact goes wrong." +msgstr "" +"Якщо вказати блок ``except`` без визначення винятку для перехоплення, він " +"працюватиме для будь-якого винятку, який виникає в блоці ``try``. Те саме " +"стосується обробки ``BaseException`` і ``Exception``. Проте ніколи не " +"можливо сказати, який саме виняток стався." + +#: ../../src/basics/exceptions.txt:191 +msgid "" +"However, this scenario may work for logging an exception and raising it " +"again to be handled on upper levels." +msgstr "" +"Проте, такий сценарій може працювати для логування винятків, після чого вони " +"підійматься заново, щоб бути опрацьованими на вищих рівнях програми." + +#: ../../src/basics/exceptions.txt:213 +msgid "" +"All exceptions are inherited from ``Exception`` class, which is subclass of " +"``BaseException``. So, you can never know what exactly goes wrong with your " +"code." +msgstr "" +"Усі винятки успадковуються від класу ``Exception``, який є підкласом " +"``BaseException``. Отже, ви ніколи не можете знати, що саме пішло не так із " +"вашим кодом." + +#: ../../src/basics/exceptions.txt:218 +msgid "``finally`` statement" +msgstr "Вираз ``finally``" + +#: ../../src/basics/exceptions.txt:220 +msgid "" +"The ``try`` statement cannot be used itself. This will cause " +"``SyntaxError``. Either ``except`` or ``finally`` block is required to be " +"included." +msgstr "" +"Оператор ``try`` не може бути використаний сам по собі. Це спричинить " +"``SyntaxError``. Необхідно включити блок ``except`` або ``finally``." + +#: ../../src/basics/exceptions.txt:223 +msgid "" +"While the ``except`` block tries to catch the exceptions if any, the " +"``finally`` block will be always executed regardless of the exception occurs." +msgstr "" +"У той час як блок ``except`` намагається перехопити винятки, якщо такі є, " +"блок ``finally`` завжди виконуватиметься незалежно від виникнення винятку." + +#: ../../src/basics/exceptions.txt:249 +msgid "``else`` statement" +msgstr "Вираз ``else``" + +#: ../../src/basics/exceptions.txt:251 +msgid "" +"The ``try`` statement can also use ``else`` (which is optional). The " +"statements within this block will be execute only in case there were no " +"exceptions raised while running the ``try``." +msgstr "" +"Оператор ``try`` також може використовувати ``else`` (який є " +"необов'язковим). Інструкції в цьому блоці виконуватимуться лише у випадку, " +"якщо під час виконання ``try`` не було викликано винятків." + +#: ../../src/basics/exceptions.txt:273 +msgid "Raising exceptions" +msgstr "Винятки: raising" + +#: ../../src/basics/exceptions.txt:275 +msgid "" +"The ``raise`` statement allows the programmer to force a specified exception " +"to occur. The sole argument to raise indicates the exception to be raised. " +"This must be either an exception instance or an exception class (a class " +"that derives from ``BaseException``, such as ``Exception`` or one of its " +"subclasses). If an exception class is passed, it will be implicitly " +"instantiated by calling its constructor with no arguments." +msgstr "" +"Інструкція ``raise`` дозволяє програмісту примусово викликати певний " +"виняток. Єдиний аргумент, який потрібно викликати, вказує на виняток, який " +"потрібно викликати. Це має бути екземпляр винятку або клас винятку (клас, " +"який походить від ``BaseException``, наприклад ``Exception`` або один із " +"його підкласів). Якщо передано клас винятків, він буде неявно створений " +"шляхом виклику його конструктора без аргументів." + +#: ../../src/basics/exceptions.txt:287 +msgid "" +"``raise`` statement itself will re-raise all the exceptions within the " +"context. Also exceptions can be raised again from the ``except`` block. It's " +"a common pattern to catch the exception for loggers and when re-raise it." +msgstr "" +"Сам оператор ``raise`` повторно викличе всі винятки в контексті опрацювання. " +"Крім того, винятки можуть бути викликані знову з блоку ``except``. Це " +"загальний шаблон для перехоплення винятку для реєстрації повідомлення про " +"виняткову ситуацію і повторного його підняття." + +#: ../../src/basics/exceptions.txt:300 +msgid "Creating custom exceptions" +msgstr "Створення винятків" + +#: ../../src/basics/exceptions.txt:302 +msgid "" +"Programs may name their own exceptions by creating a new exception class. " +"Exceptions should typically be derived from the Exception class, either " +"directly or indirectly." +msgstr "" +"Програми можуть називати власні винятки, створюючи новий клас винятків. " +"Винятки зазвичай мають бути похідними від класу Exception, прямо чи " +"опосередковано." + +#: ../../src/basics/exceptions.txt:306 +msgid "" +"Exception classes can be defined which do anything any other class can do, " +"but are usually kept simple, often only offering a number of attributes that " +"allow information about the error to be extracted by handlers for the " +"exception." +msgstr "" +"Можна визначити класи винятків, які роблять усе, що може зробити будь-який " +"інший клас, але зазвичай вони прості, часто пропонують лише ряд атрибутів, " +"які дозволяють обробникам витягувати інформацію про помилку для винятку." + +#: ../../src/basics/exceptions.txt:311 +msgid "" +"Most exceptions are defined with names that end in \"Error\", similar to the " +"naming of the standard exceptions." +msgstr "" +"Більшість винятків визначено з іменами, які закінчуються на \"Error\", " +"подібно до назв стандартних винятків." + +#: ../../src/basics/exceptions.txt:314 +msgid "" +"Many standard modules define their own exceptions to report errors that may " +"occur in functions they define." +msgstr "" +"Багато стандартних модулів визначають власні винятки, щоб повідомляти про " +"помилки, які можуть виникнути у функціях, які вони визначають." + +#: ../../src/basics/exceptions.txt:317 +msgid "User-defined exception" +msgstr "Виняток, визначений користувачем" diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po new file mode 100644 index 000000000..61e7878af --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/functions.txt:-1 +msgid "Python functions" +msgstr "Функції в Python" + +#: ../../src/basics/functions.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/functions.txt:-1 +msgid "python, basics, functions" +msgstr "python, basics, functions" + +#: ../../src/basics/functions.txt:6 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/functions.txt:14 +msgid "Functions" +msgstr "Функції" diff --git a/src/_locales/uk/LC_MESSAGES/basics/index.po b/src/_locales/uk/LC_MESSAGES/basics/index.po new file mode 100644 index 000000000..6775d1adb --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/index.po @@ -0,0 +1,36 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/index.txt:-1 +msgid "Python course - Basics" +msgstr "Курс Python - Основи" + +#: ../../src/basics/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/index.txt:-1 +msgid "python, basics, index" +msgstr "python, basics, index" + +#: ../../src/basics/index.txt:8 +msgid "Python Basics" +msgstr "Основи Python" diff --git a/src/_locales/uk/LC_MESSAGES/basics/modules.po b/src/_locales/uk/LC_MESSAGES/basics/modules.po new file mode 100644 index 000000000..01c1fb384 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/modules.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/modules.txt:-1 +msgid "Modules and imports in Python" +msgstr "Модулі та імпорти в Pythons" + +#: ../../src/basics/modules.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/modules.txt:-1 +msgid "python, basics, modules, import" +msgstr "python, basics, modules, import" + +#: ../../src/basics/modules.txt:6 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/modules.txt:14 +msgid "Pythons Modules and Imports" +msgstr "Модулі та імпорт Pythons" diff --git a/src/_locales/uk/LC_MESSAGES/basics/pep8.po b/src/_locales/uk/LC_MESSAGES/basics/pep8.po new file mode 100644 index 000000000..737ef49d8 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/pep8.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/pep8.txt:-1 +msgid "PEP-8 style guide" +msgstr "Керівництво по стилю PEP8" + +#: ../../src/basics/pep8.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/pep8.txt:-1 +msgid "python, style, guide" +msgstr "python, style, guide" + +#: ../../src/basics/pep8.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/pep8.txt:16 +msgid "Style Guides: PEP8" +msgstr "Керівництво по стилю: PEP8" diff --git a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po new file mode 100644 index 000000000..01cdf3130 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po @@ -0,0 +1,728 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "Python built-in types" +msgstr "Вбудовані типи даних в Python" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/stdtypes.txt:-1 +msgid "python, basics" +msgstr "python, basics" + +#: ../../src/basics/stdtypes.txt:11 +msgid "Built-in Types" +msgstr "Вбудовані типи" + +#: ../../src/basics/stdtypes.txt:13 +msgid "" +"The principal built-in types are numerics, sequences, mappings, classes, " +"instances and exceptions :cite:`docs-python:stdtypes`. This section covers " +"only the most base of them. Others will be discussed in the future within " +"their own topics." +msgstr "" +"Основними вбудованими типами є числа, послідовності, відображення, класи, " +"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " +"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " +"власних тем." + +#: ../../src/basics/stdtypes.txt:19 +msgid "Numeric types" +msgstr "Числові типи" + +#: ../../src/basics/stdtypes.txt:21 +msgid "" +"There are 3 distinct numeric types: *integers*, *floating point numbers*, " +"and *complex numbers*. In addition, Booleans are a subtype of integers. " +"Integers have unlimited precision. Floating point numbers are usually " +"implemented using ``double`` in C. Complex numbers have a real and imaginary " +"part, which are each a floating point number." +msgstr "" +"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " +"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " +"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " +"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " +"кожна з яких є числом з плаваючою комою." + +#: ../../src/basics/stdtypes.txt:27 +msgid "" +"Numbers are created by numeric literals or as the result of built-in " +"functions and operators. Unadorned integer literals (including hex, octal " +"and binary numbers) yield integers. Numeric literals containing a decimal " +"point or an exponent sign yield floating point numbers. Appending ``j`` or " +"``J`` to a numeric literal yields an imaginary number (a complex number with " +"a zero real part) which you can add to an integer or float to get a complex " +"number with real and imaginary parts." +msgstr "" +"Числа створюються за допомогою числових літералів або як результат " +"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " +"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " +"літерали, що містять десяткову кому або знак експоненти, дають числа з " +"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " +"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " +"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " +"з дійсною та уявною частинами." + +#: ../../src/basics/stdtypes.txt:36 +msgid "Supported operations" +msgstr "Операції підтримки" + +#: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 +#: ../../src/basics/stdtypes.txt:209 +msgid "Operation" +msgstr "Операції" + +#: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 +#: ../../src/basics/stdtypes.txt:209 +msgid "Result" +msgstr "Результат" + +#: ../../src/basics/stdtypes.txt:41 +msgid "``x + y``" +msgstr "``x + y``" + +#: ../../src/basics/stdtypes.txt:41 +msgid "sum of *x* and *y*" +msgstr "сума *x* і *y*" + +#: ../../src/basics/stdtypes.txt:43 +msgid "``x - y``" +msgstr "``x - y``" + +#: ../../src/basics/stdtypes.txt:43 +msgid "difference of *x* and *y*" +msgstr "різниця між *x* і *y*" + +#: ../../src/basics/stdtypes.txt:45 +msgid "``x * y``" +msgstr "``x * y``" + +#: ../../src/basics/stdtypes.txt:45 +msgid "product of *x* and *y*" +msgstr "добуток *x* і *y*" + +#: ../../src/basics/stdtypes.txt:47 +msgid "``x / y``" +msgstr "``x / y``" + +#: ../../src/basics/stdtypes.txt:47 +msgid "quotient of *x* and *y*" +msgstr "частка *x* і *y*" + +#: ../../src/basics/stdtypes.txt:49 +msgid "``x // y``" +msgstr "``x // y``" + +#: ../../src/basics/stdtypes.txt:49 +msgid "floored quotient of *x* and *y*" +msgstr "цілочисельне ділення *x* і *y*" + +#: ../../src/basics/stdtypes.txt:51 +msgid "``x % y``" +msgstr "``x % y``" + +#: ../../src/basics/stdtypes.txt:51 +msgid "remainder of ``x / y``" +msgstr "залишок від ділення ``x / y``" + +#: ../../src/basics/stdtypes.txt:53 +msgid "``-x``" +msgstr "``-x``" + +#: ../../src/basics/stdtypes.txt:53 +msgid "*x* negated" +msgstr "*x* від'ємне" + +#: ../../src/basics/stdtypes.txt:55 +msgid "``+x``" +msgstr "``+x``" + +#: ../../src/basics/stdtypes.txt:55 +#, fuzzy +msgid "*x* unchanged" +msgstr "*y* без змін" + +#: ../../src/basics/stdtypes.txt:57 +msgid "``abs(x)``" +msgstr "``abs(x)``" + +#: ../../src/basics/stdtypes.txt:57 +msgid "absolute value or magnitude of *x*" +msgstr "абсолютне значення або величина *x*" + +#: ../../src/basics/stdtypes.txt:59 +msgid "``int(x)``" +msgstr "``int(x)``" + +#: ../../src/basics/stdtypes.txt:59 +msgid "*x* converted to integer" +msgstr "*x* перетворено на ціле число" + +#: ../../src/basics/stdtypes.txt:61 +msgid "``float(x)``" +msgstr "``float(x)``" + +#: ../../src/basics/stdtypes.txt:61 +msgid "*x* converted to floating point" +msgstr "*x* перетворено на число з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:63 +msgid "``complex(re, im)``" +msgstr "``complex(re, im)``" + +#: ../../src/basics/stdtypes.txt:63 +msgid "" +"a complex number with real part *re*, imaginary part *im*. *im* defaults to " +"zero." +msgstr "" +"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " +"замовчуванням на нуль." + +#: ../../src/basics/stdtypes.txt:66 +msgid "``divmod(x, y)``" +msgstr "``divmod(x, y)``" + +#: ../../src/basics/stdtypes.txt:66 +msgid "the pair ``(x // y, x % y)``" +msgstr "об'єднує ``(x // y, x % y)``" + +#: ../../src/basics/stdtypes.txt:68 +msgid "``pow(x, y)`` ``x ** y``" +msgstr "``pow(x, y)`` ``x ** y``" + +#: ../../src/basics/stdtypes.txt:68 +msgid "*x* to the power *y*" +msgstr "*x* у степені *y*" + +#: ../../src/basics/stdtypes.txt:72 +msgid "" +"``x // y`` also referred to as integer division. The resultant value is a " +"whole integer, through the result's type is not necessarily int. The result " +"is always rounded towards minus infinity: ``1 // 2`` is ``0``" +msgstr "" +"``x // y`` також називають цілим діленням. Результуюче значення є цілим " +"числом, через тип результату не обов'язково int. Результат завжди " +"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" + +#: ../../src/basics/stdtypes.txt:77 +msgid "" +"``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " +"optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " +"and negative infinity." +msgstr "" +"``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " +"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " +"позитивна та негативна нескінченність." + +#: ../../src/basics/stdtypes.txt:82 +msgid "Code examples" +msgstr "Приклади коду" + +#: ../../src/basics/stdtypes.txt:84 +msgid "Integer numbers" +msgstr "Цілі числа" + +#: ../../src/basics/stdtypes.txt:98 +msgid "Floating point numbers" +msgstr "Числа з плаваючою комою" + +#: ../../src/basics/stdtypes.txt:114 ../../src/basics/stdtypes.txt:187 +#: ../../src/basics/stdtypes.txt:295 ../../src/basics/stdtypes.txt:304 +#: ../../src/basics/stdtypes.txt:333 +msgid "Value comparisons" +msgstr "Порівняння цінностей" + +#: ../../src/basics/stdtypes.txt:116 +msgid "" +"Numbers of built-in numeric types can be compared within and across their " +"types (with the restriction that complex numbers do not support order " +"comparison). Within the limits of the types involved, they compare " +"mathematically correct without loss of precision." +msgstr "" +"Числа вбудованих числових типів можна порівнювати всередині та між типами (з " +"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " +"залучених типів вони порівняються математично правильно без втрати точності." + +#: ../../src/basics/stdtypes.txt:121 +msgid "" +"The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." +"Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" +"number value is false." +msgstr "" +"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " +"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " +"є хибним." + +#: ../../src/basics/stdtypes.txt:125 +msgid "Sequence types" +msgstr "Типи послідовностей" + +#: ../../src/basics/stdtypes.txt:127 +msgid "" +"There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " +"Additional sequence types tailored for processing of binary data and text " +"strings are described in dedicated sections." +msgstr "" +"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " +"Додаткові типи послідовностей, призначені для обробки двійкових даних і " +"текстових рядків, описані у інших розділах." + +#: ../../src/basics/stdtypes.txt:132 +msgid "Lists" +msgstr "Списки" + +#: ../../src/basics/stdtypes.txt:134 +msgid "" +"Lists are mutable sequences, typically used to store collections of items. " +"They may be constructed in several ways:" +msgstr "" +"Списки - це змінні послідовності, які зазвичай використовуються для " +"зберігання колекцій елементів. Вони можуть бути побудовані кількома " +"способами:" + +#: ../../src/basics/stdtypes.txt:137 +msgid "using a pair of square brackets to denote the empty list: ``[]``" +msgstr "" +"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" + +#: ../../src/basics/stdtypes.txt:138 +msgid "" +"using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" +msgstr "" +"використовуючи квадратні дужки, розділяючи елементи комами: ``[a]``, ``[a, " +"b, c]``" + +#: ../../src/basics/stdtypes.txt:139 +msgid "using a list comprehension: ``[x for x in iterable]``" +msgstr "використовуючи генератори списків: ``[x for x in iterable]``" + +#: ../../src/basics/stdtypes.txt:140 +msgid "using the type constructor: ``list()`` or ``list(iterable)``" +msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" + +#: ../../src/basics/stdtypes.txt:143 +msgid "Tuples" +msgstr "Кортежі" + +#: ../../src/basics/stdtypes.txt:145 +msgid "" +"Tuples are immutable sequences, typically used to store collections of data " +"or for cases where an immutable sequence of data is needed (such as allowing " +"storage in a ``set`` or ``dict`` instances). They may be constructed in a " +"number of ways:" +msgstr "" +"Кортежі - це незмінні послідовності, які зазвичай використовуються для " +"зберігання колекцій даних або для випадків, коли потрібна незмінна " +"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " +"``dict``). Вони можуть бути конструйовані декількома способами:" + +#: ../../src/basics/stdtypes.txt:150 +msgid "using a pair of parentheses to denote the empty tuple: ``()``" +msgstr "" +"використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" + +#: ../../src/basics/stdtypes.txt:151 +msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" +msgstr "" +"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " +"c)``" + +#: ../../src/basics/stdtypes.txt:152 +msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" +msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" + +#: ../../src/basics/stdtypes.txt:153 +msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" +msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" + +#: ../../src/basics/stdtypes.txt:156 +msgid "Common operations" +msgstr "Загальні операції" + +#: ../../src/basics/stdtypes.txt:161 +msgid "``x in s`` ``x not in s``" +msgstr "``x in s`` ``x not in s``" + +#: ../../src/basics/stdtypes.txt:161 +msgid "" +"``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " +"*x*" +msgstr "" +"``True``, якщо елемент *s* дорівнює *x* ``False``, якщо елемент *s* дорівнює " +"*x*" + +#: ../../src/basics/stdtypes.txt:164 +msgid "``s + t``" +msgstr "``s + t``" + +#: ../../src/basics/stdtypes.txt:164 +msgid "the concatenation of *s* and *t*" +msgstr "конкатенація s і t" + +#: ../../src/basics/stdtypes.txt:166 +msgid "``s * n``" +msgstr "``s * n``" + +#: ../../src/basics/stdtypes.txt:166 +msgid "equivalent to adding *s* to itself *n* times" +msgstr "еквівалентно додаванню *s* до себе *n* разів" + +#: ../../src/basics/stdtypes.txt:168 +msgid "``s[i]``" +msgstr "``s[i]``" + +#: ../../src/basics/stdtypes.txt:168 +msgid "*i*-th item of *s*, origin 0" +msgstr "*i*-й елемент *s*, джерело 0" + +#: ../../src/basics/stdtypes.txt:170 +msgid "``s[i:j]`` ``s[i:j:k]``" +msgstr "``s[i:j]`` ``s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:170 +msgid "" +"slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " +"be omitted." +msgstr "" +"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " +"3) можна опустити." + +#: ../../src/basics/stdtypes.txt:173 +msgid "``len(s)``" +msgstr "``len(s)``" + +#: ../../src/basics/stdtypes.txt:173 +msgid "length of *s*" +msgstr "довжина *s*" + +#: ../../src/basics/stdtypes.txt:175 +msgid "``min(s)``" +msgstr "``min(s)``" + +#: ../../src/basics/stdtypes.txt:175 +msgid "smallest item of *s*" +msgstr "найменший елемент *s*" + +#: ../../src/basics/stdtypes.txt:177 +msgid "``max(s)``" +msgstr "``max(s)``" + +#: ../../src/basics/stdtypes.txt:177 +msgid "largest item of *s*" +msgstr "найбільший елемент *s*" + +#: ../../src/basics/stdtypes.txt:179 +msgid "``s.count(x)``" +msgstr "``s.count(x)``" + +#: ../../src/basics/stdtypes.txt:179 +msgid "total number of occurrences of *x* in *s*" +msgstr "загальна кількість входжень *x* у *s*" + +#: ../../src/basics/stdtypes.txt:181 +msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" +msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" + +#: ../../src/basics/stdtypes.txt:181 +msgid "" +"index of the first occurrence of *x* in *s* at or after index *i* and before " +"index *j*" +msgstr "" +"індекс першого входження *x* у *s* на або після індексу *i* та перед " +"індексом *j*" + +#: ../../src/basics/stdtypes.txt:189 +msgid "" +"Sequences can be compared only within each of their types, with the " +"restriction that ranges do not support order comparison. Equality comparison " +"across these types results in inequality, and ordering comparison across " +"these types raises ``TypeError``." +msgstr "" +"Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " +"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " +"типами призводить до нерівності, а впорядковане порівняння цих типів " +"викликає ``TypeError``." + +#: ../../src/basics/stdtypes.txt:194 +msgid "" +"Sequences compare lexicographically using comparison of corresponding " +"elements. The built-in containers typically assume identical objects are " +"equal to themselves. Lexicographical comparison between built-in collections " +"works as follows:" +msgstr "" +"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " +"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " +"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " +"таким чином:" + +#: ../../src/basics/stdtypes.txt:199 +msgid "" +"For two collections to compare equal, they must be of the same type, have " +"the same length, and each pair of corresponding elements must compare equal." +msgstr "" +"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " +"мати однакову довжину, і кожна пара відповідних елементів повинна " +"порівнюватися." + +#: ../../src/basics/stdtypes.txt:201 +msgid "" +"Collections that supports order comparison are ordered the same as their " +"first unequal elements. If corresponding element does not exist, the shorter " +"collection is ordered first." +msgstr "" +"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " +"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"впорядковується коротша колекція." + +#: ../../src/basics/stdtypes.txt:206 +msgid "Mutable sequence types" +msgstr "Змінні типи послідовностей" + +#: ../../src/basics/stdtypes.txt:211 +msgid "``s[i] = x``" +msgstr "``s[i] = x``" + +#: ../../src/basics/stdtypes.txt:211 +msgid "item *i* of *s* is replaced by *x*" +msgstr "елемент *i* з *s* замінюється на *x*" + +#: ../../src/basics/stdtypes.txt:213 +msgid "``s[i:j] = t``" +msgstr "``s[i:j] = t``" + +#: ../../src/basics/stdtypes.txt:213 +msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" +msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" + +#: ../../src/basics/stdtypes.txt:216 +msgid "``del s[i:j]``" +msgstr "``del s[i:j]``" + +#: ../../src/basics/stdtypes.txt:216 +msgid "same as ``s[i:j] = []``" +msgstr "те саме, що ``s[i:j] = []``" + +#: ../../src/basics/stdtypes.txt:218 +msgid "``s[i:j:k] = t``" +msgstr "``s[i:j:k] = t``" + +#: ../../src/basics/stdtypes.txt:218 +msgid "the elements of *s* are replaced by those of *t* [#]_" +msgstr "елементи *s* замінюються елементами *t* [#]_" + +#: ../../src/basics/stdtypes.txt:220 +msgid "``del s[i:j:k]``" +msgstr "``del s[i:j:k]``" + +#: ../../src/basics/stdtypes.txt:220 +msgid "removes the elements of ``s[i:j:k]`` from the list" +msgstr "видаляє елементи ``s[i:j:k]`` зі списку" + +#: ../../src/basics/stdtypes.txt:222 +msgid "``s.append(x)``" +msgstr "``s.append(x)``" + +#: ../../src/basics/stdtypes.txt:222 +msgid "" +"appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " +"[x]``" +msgstr "" +"додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" + +#: ../../src/basics/stdtypes.txt:225 +msgid "``s.clear()``" +msgstr "``s.clear()``" + +#: ../../src/basics/stdtypes.txt:225 +msgid "removes all items from *s* (``del s[:]``) [#py33]_" +msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" + +#: ../../src/basics/stdtypes.txt:227 +msgid "``s.copy()``" +msgstr "``s.copy()``" + +#: ../../src/basics/stdtypes.txt:227 +msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" +msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" + +#: ../../src/basics/stdtypes.txt:229 +msgid "``s.extend(t)`` ``s += t``" +msgstr "``s.extend(t)`` ``s += t``" + +#: ../../src/basics/stdtypes.txt:229 +msgid "extends *s* with the contents of *t*" +msgstr "розширює *s* вмістом *t*" + +#: ../../src/basics/stdtypes.txt:232 +msgid "``s.insert(i, x)``" +msgstr "``s.insert(i, x)``" + +#: ../../src/basics/stdtypes.txt:232 +msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" +msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" + +#: ../../src/basics/stdtypes.txt:235 +msgid "``s.pop()``, ``s.pop(i)``" +msgstr "``s.pop()``, ``s.pop(i)``" + +#: ../../src/basics/stdtypes.txt:235 +msgid "" +"retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " +"use the last one available index)" +msgstr "" +"отримує елемент за адресою *i*, а також видаляє його з *s* (якщо *i* " +"пропущено - використовуйте останній доступний індекс)" + +#: ../../src/basics/stdtypes.txt:238 +msgid "``s.remove(x)``" +msgstr "``s.remove(x)``" + +#: ../../src/basics/stdtypes.txt:238 +msgid "remove the first item that is equal to *x* from *s*" +msgstr "видалити перший елемент, який дорівнює *x*, із *s*" + +#: ../../src/basics/stdtypes.txt:240 +msgid "``s.reverse()``" +msgstr "``s.reverse()``" + +#: ../../src/basics/stdtypes.txt:240 +msgid "reverses the items of *s* in place" +msgstr "перевертає елементи *s* на місце" + +#: ../../src/basics/stdtypes.txt:243 +msgid "*t* must have the same length as the slice it is replacing" +msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" + +#: ../../src/basics/stdtypes.txt:244 +msgid "new in Python version 3.3" +msgstr "нове у версії Python 3.3" + +#: ../../src/basics/stdtypes.txt:247 +msgid "Text sequence type" +msgstr "Тип текстової послідовності" + +#: ../../src/basics/stdtypes.txt:250 +msgid "String methods" +msgstr "Рядкові методи" + +#: ../../src/basics/stdtypes.txt:252 +msgid "" +"Strings implement all of the common sequence operations, along with the " +"additional methods." +msgstr "" +"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " +"методами." + +#: ../../src/basics/stdtypes.txt:297 +msgid "" +"Strings compare lexicographically using the numerical Unicode code points of " +"their characters." +msgstr "" +"Рядки порівнюються лексикографічно з використанням числових кодових точок " +"Unicode своїх символів." + +#: ../../src/basics/stdtypes.txt:301 +msgid "Set types" +msgstr "Типи сетів" + +#: ../../src/basics/stdtypes.txt:306 +msgid "" +"Sets (instances of ``set`` or ``frozenset``) can be compared within and " +"across their types. They define order comparison operators to mean subset " +"and superset tests. Those relations do not define total ordering (e.g. two " +"sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " +"nor supersets of one another)." +msgstr "" +"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " +"між типами. Вони визначають оператори порівняння порядку, щоб проходити " +"тести підмножини та надмножини. Ці відношення не визначають загального " +"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " +"підмножини одного іншого, ані надмножини один одного)." + +#: ../../src/basics/stdtypes.txt:313 +msgid "Mapping type" +msgstr "Тип відображення" + +#: ../../src/basics/stdtypes.txt:315 +msgid "" +"A mapping object maps hashable values to arbitrary objects. Mappings are " +"mutable objects. There is currently ony one standard mapping type, the " +"*dictionary*. In few words mappings are collections of keys and their values." +msgstr "" +"Об'єкт зіставлення зіставляє хешовані значення з довільними об'єктами. " +"Відображення є змінними об'єктами. Наразі існує лише один стандартний тип " +"відображення, *dictionary*. Якщо кількома словами, то відображення - це " +"набори ключів та їхніх значень." + +#: ../../src/basics/stdtypes.txt:319 +msgid "" +"A dictionary's keys are almost arbitrary values. Values that are not " +"hashable may not be used as keys. Values that compare equal (such as ``1``, " +"``1.0`` and ``True``) can be used interchangeably to index the same " +"dictionary entry." +msgstr "" +"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " +"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " +"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " +"тієї самої словникової статті." + +#: ../../src/basics/stdtypes.txt:323 +msgid "Dictionaries can be created by several means:" +msgstr "Словники можна створювати кількома способами:" + +#: ../../src/basics/stdtypes.txt:325 +msgid "Use braces to denote the empty dictionary: ``{}``" +msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" + +#: ../../src/basics/stdtypes.txt:326 +msgid "" +"Use a comma-separated list of ``key: value`` pairs with braces: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" +msgstr "" +"Використовуйте розділений комами список пар ``key: value`` з дужками: " +"``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" + +#: ../../src/basics/stdtypes.txt:328 +msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" +msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" + +#: ../../src/basics/stdtypes.txt:329 +msgid "" +"Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)``" +msgstr "" +"Використовуйте конструктор типу: ``dict()``, ``dict([('key', 100)])``, " +"``dict(key=100)``" + +#: ../../src/basics/stdtypes.txt:335 +msgid "" +"Instances of ``dict`` compare equal if and only if they have equal key-value " +"pairs." +msgstr "" +"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " +"однакові пари ключ-значення." + +#: ../../src/basics/stdtypes.txt:338 +msgid "Order comparisons raise ``TypeError``." +msgstr "Порівняння порядку викликає ``TypeError``." diff --git a/src/_locales/uk/LC_MESSAGES/basics/syntax.po b/src/_locales/uk/LC_MESSAGES/basics/syntax.po new file mode 100644 index 000000000..1342ff13f --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/syntax.po @@ -0,0 +1,263 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/syntax.txt:-1 +msgid "Python syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/syntax.txt:-1 +msgid "python, basics, syntax" +msgstr "python, basics, syntax" + +#: ../../src/basics/syntax.txt:8 +msgid "Python Syntax" +msgstr "Синтаксис Python" + +#: ../../src/basics/syntax.txt:10 +msgid "" +"As a natural language like English or Ukrainian has its own rules to write " +"down something, programming languages do. This makes them programming " +"**languages**." +msgstr "" +"Оскільки природна мова, як-от англійська чи українська, має власні правила " +"запису чогось, так і мови програмування роблять схожі речі. Це і робить їх " +"мовами програмування." + +#: ../../src/basics/syntax.txt:14 +msgid "" +"A programming language syntax is the set of rules and principles that govern " +"how code is written and structured in a given programming language. Syntax " +"encompasses the rules for writing statements, expressions, variables, data " +"types, control structures, and other constructs that make up the language." +msgstr "" +"Синтаксис мови програмування - це набір правил і принципів, які регулюють " +"написання та структурування коду даною мовою програмування. Синтаксис " +"охоплює правила написання операторів, виразів, змінних, типів даних, " +"керуючих структур та інших конструкцій, які складають мову." + +#: ../../src/basics/syntax.txt:19 +msgid "" +"The syntax of a programming language defines how code is organized and " +"interpreted by a compiler or interpreter. It defines the rules for writing " +"valid statements and expressions that can be understood and executed by the " +"language's runtime system." +msgstr "" +"Синтаксис мови програмування визначає, як код організовується та " +"інтерпретується компілятором або інтерпретатором. Він визначає правила " +"написання дійсних операторів і виразів, які можуть бути зрозумілі та " +"виконані системою виконання мови." + +#: ../../src/basics/syntax.txt:24 +msgid "" +"A programming language's syntax is designed to be both readable and " +"expressive, allowing programmers to write code that is easy to understand " +"and modify. Syntax often influences the style and structure of code, as well " +"as its maintainability and performance." +msgstr "" +"Синтаксис мови програмування розроблено таким чином, щоб він був читабельним " +"і виразним, дозволяючи програмістам писати код, який легко зрозуміти та " +"змінювати. Синтаксис часто впливає на стиль і структуру коду, а також на " +"його зручність обслуговування та продуктивність." + +#: ../../src/basics/syntax.txt:29 +msgid "" +"Different programming languages have different syntax, with some languages " +"being more concise and expressive than others. While syntax is an important " +"aspect of a programming language, it is only one of several factors that " +"determine its ease of use, flexibility, and suitability for different " +"programming tasks." +msgstr "" +"Різні мови програмування мають різний синтаксис, при цьому деякі мови є " +"більш лаконічними та виразнішими, ніж інші. Хоча синтаксис є важливим " +"аспектом мови програмування, він є лише одним із кількох факторів, які " +"визначають її легкість у використанні, гнучкість і придатність для різних " +"завдань програмування." + +#: ../../src/basics/syntax.txt:35 +msgid "" +"In the case of Python, the language's syntax defines how code is written and " +"structured in a way that is consistent, readable, and easy to understand. A " +"general overview is provided below, no need to dive deep in this now. All of " +"the following is to be discussed during the course. So, some of the key " +"aspects of Python's syntax include:" +msgstr "" +"У випадку Python синтаксис мови визначає, як код буде написаний і " +"структурований таким чином, щоб він був послідовним, читабельним і легким " +"для розуміння. Нижче наведено загальний огляд, немає потреби глибоко " +"занурюватися в це зараз. Усе наведене нижче має бути обговорено під час " +"курсу. Отже, деякі з ключових аспектів синтаксису Python включають:" + +#: ../../src/basics/syntax.txt +msgid "Indentation" +msgstr "Відступ" + +#: ../../src/basics/syntax.txt:42 +msgid "" +"Python uses whitespace, specifically indentation, to delimit blocks of code, " +"such as loops, conditionals, and functions. This means that the indentation " +"level of a line determines which block of code it belongs to." +msgstr "" +"Python використовує пробіли, зокрема відступи, для розмежування блоків коду, " +"таких як цикли, умови та функції. Це означає, що рівень відступу рядка " +"визначає, до якого блоку коду він належить." + +#: ../../src/basics/syntax.txt +msgid "Statement structure" +msgstr "Структура коду" + +#: ../../src/basics/syntax.txt:48 +msgid "" +"Python statements are typically written on one line, with the end of the " +"line indicating the end of the statement. However, if a statement is too " +"long to fit on one line, it can be continued across multiple lines using " +"backslashes." +msgstr "" +"Інструкції Python зазвичай пишуться в один рядок, причому кінець рядка " +"вказує на кінець інструкції. Проте, якщо оператор занадто довгий, щоб " +"поміститися в один рядок, його можна продовжити в кількох рядках, " +"використовуючи зворотні похилі риски." + +#: ../../src/basics/syntax.txt +msgid "Variables" +msgstr "Змінні" + +#: ../../src/basics/syntax.txt:54 +msgid "" +"In Python, variables are created automatically when a value is assigned to " +"them, and their type is inferred from the value. Variables can be assigned " +"values of different types, including integers, floats, strings, and more " +"complex data structures like lists and dictionaries." +msgstr "" +"У Python змінні створюються автоматично, якщо їм присвоюється значення, і " +"їхній тип визначається на основі значення. Змінним можна присвоювати " +"значення різних типів, включаючи цілі числа, числа з плаваючою комою, рядки " +"та складніші структури даних, такі як списки та словники." + +#: ../../src/basics/syntax.txt +msgid "Operators" +msgstr "Оператори" + +#: ../../src/basics/syntax.txt:60 +msgid "" +"Python supports a wide range of operators for performing arithmetic, " +"comparison, and logical operations. These include arithmetic operators like " +"``+``, ``-``, ``*``, and ``/``, as well as comparison operators like ``<``, " +"``>``, ``==``, and ``!=``." +msgstr "" +"Python підтримує широкий спектр операторів для виконання арифметичних, " +"порівнянь і логічних операцій. До них належать арифметичні оператори, такі " +"як ``+``, ``-``, ``*`` і ``/``, а також оператори порівняння, такі як " +"``<`` , ``>``, ``==`` і ``!=``." + +#: ../../src/basics/syntax.txt +msgid "Control flow" +msgstr "Контроль потоку" + +#: ../../src/basics/syntax.txt:66 +msgid "" +"Python provides control flow statements like if, else, elif, for, and while " +"to control the flow of execution in a program. These statements are used to " +"make decisions, repeat code, or perform actions based on conditions." +msgstr "" +"Python надає оператори потоку керування, як-от if, else, elif, for та while, " +"для керування потоком виконання в програмі. Ці оператори використовуються " +"для прийняття рішень, повторення коду або виконання дій на основі заданих " +"умов." + +#: ../../src/basics/syntax.txt +msgid "Functions" +msgstr "Функції" + +#: ../../src/basics/syntax.txt:72 +msgid "" +"In Python, functions are defined using the def keyword and can take " +"arguments and return values. The body of a function is defined using a block " +"of indented code." +msgstr "" +"У Python функції визначаються за допомогою ключового слова def і можуть " +"отримувати аргументи та повертати значення. Тіло функції визначається за " +"допомогою блоку коду з відступами." + +#: ../../src/basics/syntax.txt +msgid "Modules" +msgstr "Модулі" + +#: ../../src/basics/syntax.txt:77 +msgid "" +"Python has a large library of modules that provide pre-written code for a " +"variety of tasks. Modules can be imported into a program using the import " +"statement." +msgstr "" +"Python має велику бібліотеку модулів, які містять попередньо написаний код " +"для різноманітних завдань. Модулі можна імпортувати в програму за допомогою " +"оператора імпорту." + +#: ../../src/basics/syntax.txt +msgid "Exception handling" +msgstr "Обробка винятків" + +#: ../../src/basics/syntax.txt:82 +msgid "" +"Python provides a way to handle errors and exceptions in a program using the " +"try, except, else, and finally keywords. These statements allow a program to " +"gracefully recover from errors and continue executing." +msgstr "" +"Python надає спосіб обробки помилок і винятків у програмі за допомогою " +"ключових слів try, except, else і finally. Ці оператори дозволяють програмі " +"плавно відновлюватися після помилок і продовжувати виконання." + +#: ../../src/basics/syntax.txt:86 +msgid "In few words:" +msgstr "У кількох словах:" + +#: ../../src/basics/syntax.txt:88 +msgid "Input/Output example script" +msgstr "Приклад сценарію Input/Output" + +#: ../../src/basics/syntax.txt:107 +msgid "" +"The code snippet above demonstrates some basics abilities of Python to " +"gather data from the user, process it and print out back. Note the words " +"starting with a # (hash) symbol. This is a comment. Any sequence of " +"characters after the hash and till the line end are considered to be a " +"comment. These are for those people, who see the code and they are ignored " +"by the interpreter." +msgstr "" +"Наведений вище фрагмент коду демонструє деякі основні можливості Python " +"збирати дані від користувача, обробляти їх і друкувати назад. Зверніть увагу " +"на слова, що починаються символом #(решітка). Це коментар. Будь-яка " +"послідовність символів після хеша і до кінця рядка вважається коментарем. Це " +"необхідно, щоб люди які бачать код могли його зрозуміти, при цьому " +"інтерпретатор їх ігнорує." + +#: ../../src/basics/syntax.txt:113 +msgid "" +"On the other hand each individual line is the instruction for the " +"interpreter to perform some action, like gather inputs, do math, store data " +"in memory etc." +msgstr "" +"З іншого боку, кожен окремий рядок є вказівкою для інтерпретатора виконати " +"певну дію, як-от збір вхідних даних, виконання математичних розрахунків, " +"збереження даних у пам'яті тощо." diff --git a/src/_locales/uk/LC_MESSAGES/basics/testing.po b/src/_locales/uk/LC_MESSAGES/basics/testing.po new file mode 100644 index 000000000..a90022728 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/testing.po @@ -0,0 +1,40 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:07+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/testing.txt:-1 +msgid "Testing software in Python" +msgstr "Тестування в Python" + +#: ../../src/basics/testing.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/testing.txt:-1 +msgid "python, testing, unittest, pytest" +msgstr "python, testing, unittest, pytest" + +#: ../../src/basics/testing.txt:8 +msgid "Page is under construction" +msgstr "Сторінка в розробці" + +#: ../../src/basics/testing.txt:16 +msgid "Testing" +msgstr "Тестування" diff --git a/src/_locales/uk/LC_MESSAGES/basics/variables.po b/src/_locales/uk/LC_MESSAGES/basics/variables.po new file mode 100644 index 000000000..36c224c23 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/basics/variables.po @@ -0,0 +1,135 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# OLEKSANDR YEROMIN , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:07+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/basics/variables.txt:-1 +msgid "Variables in programming" +msgstr "Змінні в програмуванні" + +#: ../../src/basics/variables.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/basics/variables.txt:-1 +msgid "programming, basics, variables" +msgstr "programming, basics, variables" + +#: ../../src/basics/variables.txt:8 +msgid "Variables" +msgstr "Змінні" + +#: ../../src/basics/variables.txt:10 +msgid "" +"In computer science a **variable** is a named storage location in memory " +"that can hold a value (*data*). The value stored in a variable can be " +"changed or accessed by the program during its execution." +msgstr "" +"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " +"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " +"змінено або доступне програмою під час її виконання." + +#: ../../src/basics/variables.txt:14 +msgid "" +"In Python, variables are created dynamically once a value is assigned to " +"them. This makes Python a dynamically typed language, which means that the " +"data type of a variable is inferred from the value assigned to it. So, you " +"do not need to declare a variable before using it, as in statically typed " +"languages." +msgstr "" +"У Python змінні створюються динамічно після присвоєння їм значення. Це " +"робить Python динамічно типізованою мовою, а це означає, що тип даних " +"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " +"оголошувати змінну перед її використанням, як у статично типізованих мовах." + +#: ../../src/basics/variables.txt:19 +msgid "" +"The ability to create variables dynamically and infer their data type makes " +"Python code more concise and easier to read. However, it also requires " +"careful attention to variable naming and assignment to avoid unexpected " +"behavior." +msgstr "" +"Можливість динамічно створювати змінні та виводити їхні типи даних робить " +"код Python більш лаконічним і легшим для читання. Однак це також вимагає " +"пильної уваги до іменування та призначення змінних, щоб уникнути " +"неочікуваної поведінки." + +#: ../../src/basics/variables.txt:23 +msgid "" +"In Python ``=`` (assignment operator) is used to set a value to some " +"variable, the portion on the left of the operator is a *variable name* and " +"the portion on the right is a *value* to assign to a variable." +msgstr "" +"У Python ``=`` (оператор присвоєння) використовується для встановлення " +"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " +"частина праворуч - це значення, яке призначається для неї." + +#: ../../src/basics/variables.txt:27 +msgid "Variable assignment in Python" +msgstr "Присвоєння змінної в Python" + +#: ../../src/basics/variables.txt:34 +msgid "Variable assignment in Java" +msgstr "Присвоєння змінної в Java" + +#: ../../src/basics/variables.txt:42 +msgid "Naming" +msgstr "Присвоєння назви" + +#: ../../src/basics/variables.txt:44 +msgid "" +"In Python there are several rules that describe how to name your variables. " +"Some of these are requirements and cannot be ignored, others are rather " +"recommended than required and can be omitted. For now note, that a variable " +"name **cannot**:" +msgstr "" +"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " +"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " +"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" + +#: ../../src/basics/variables.txt:49 +msgid "a language keyword (like ``pass``, ``def`` or ``class``)" +msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" + +#: ../../src/basics/variables.txt:50 +msgid "start with a number (e.g. ``123``, ``1_something``)" +msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" + +#: ../../src/basics/variables.txt:51 +msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" +msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" + +#: ../../src/basics/variables.txt:52 +msgid "contain white spaces" +msgstr "містити пробіли" + +#: ../../src/basics/variables.txt:54 +msgid "Also here are some general recommendation on naming anything:" +msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" + +#: ../../src/basics/variables.txt:56 +msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" +msgstr "" +"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " +"42``)" + +#: ../../src/basics/variables.txt:57 +msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" +msgstr "" +"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" diff --git a/src/_locales/uk/LC_MESSAGES/deploy.po b/src/_locales/uk/LC_MESSAGES/deploy/index.po similarity index 91% rename from src/_locales/uk/LC_MESSAGES/deploy.po rename to src/_locales/uk/LC_MESSAGES/deploy/index.po index c58769a41..a54aa873e 100644 --- a/src/_locales/uk/LC_MESSAGES/deploy.po +++ b/src/_locales/uk/LC_MESSAGES/deploy/index.po @@ -1,5 +1,3 @@ -# DEPLOYMENT BLOCK TRANSLATION. -# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. @@ -9,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"PO-Revision-Date: 2023-10-05 20:11+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -17,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" #: ../../src/deploy/index.txt:-1 msgid "Deploy Python application" diff --git a/src/_locales/uk/LC_MESSAGES/django.po b/src/_locales/uk/LC_MESSAGES/django/index.po similarity index 91% rename from src/_locales/uk/LC_MESSAGES/django.po rename to src/_locales/uk/LC_MESSAGES/django/index.po index 27578b7b2..3d1c09e26 100644 --- a/src/_locales/uk/LC_MESSAGES/django.po +++ b/src/_locales/uk/LC_MESSAGES/django/index.po @@ -1,5 +1,3 @@ -# DJANGO BLOCK TRANSLATION. -# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. @@ -9,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" +"PO-Revision-Date: 2023-10-05 20:11+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -17,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" #: ../../src/django/index.txt:-1 msgid "Django web-framework" diff --git a/src/_locales/uk/LC_MESSAGES/flask.po b/src/_locales/uk/LC_MESSAGES/flask.po deleted file mode 100644 index 43db26d64..000000000 --- a/src/_locales/uk/LC_MESSAGES/flask.po +++ /dev/null @@ -1,40 +0,0 @@ -# FLASK BLOCK TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# SERHII HORODILOV -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.04.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:51+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/flask/index.txt:-1 -msgid "Flask web-framework" -msgstr "Веб-фреймворк Flask" - -#: ../../src/flask/index.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/flask/index.txt:-1 -msgid "python, web, flask, index" -msgstr "python, web, flask, index" - -#: ../../src/flask/index.txt:8 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/flask/index.txt:16 -msgid "Flask Framework" -msgstr "Фреймворк Flask" diff --git a/src/_locales/uk/LC_MESSAGES/index.po b/src/_locales/uk/LC_MESSAGES/index.po deleted file mode 100644 index 5303a5129..000000000 --- a/src/_locales/uk/LC_MESSAGES/index.po +++ /dev/null @@ -1,34 +0,0 @@ -# PYTHON TRAINING COURSE TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# -# SERHII HORODILOV -# -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.04.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:09+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/index.txt:21 -msgid "Additional materials" -msgstr "Додаткові матеріали" - -#: ../../src/index.txt:5 -msgid "PYTHON TRAINING COURSE" -msgstr "НАВЧАЛЬНИЙ КУРС PYTHON" - -#: ../../src/index.txt:35 -msgid "References" -msgstr "Посилання" diff --git a/src/_locales/uk/LC_MESSAGES/intro.po b/src/_locales/uk/LC_MESSAGES/intro.po deleted file mode 100644 index 8551dc512..000000000 --- a/src/_locales/uk/LC_MESSAGES/intro.po +++ /dev/null @@ -1,940 +0,0 @@ -# INTRODUCTION SECTION TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# FIRST AUTHOR , 2023. -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.04.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-21 06:01+0300\n" -"PO-Revision-Date: 2023-04-21 06:02+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/intro/index.txt:123 -msgid "Contents" -msgstr "Зміст" - -#: ../../src/intro/index.txt:2 -msgid "" -"There are a whole bunch of common programming tasks that are easy in Python. " -"For someone who is not yet a programmer, who wants to become a programmer, " -"for those people Python is particularly easy to get. In Python, every symbol " -"you type is essential." -msgstr "" -"Існує ціла купа звичайних програмних завдань, які легко виконати на Python. " -"Для тих, хто ще не програміст, хто хоче стати програмістом, для цих людей " -"Python особливо легко отримати. У Python кожен символ, який ви вводите, є " -"важливим." - -#: ../../src/intro/index.txt:7 -msgid "|guido| Guido van Rossum" -msgstr "|guido| Гвідо ван Россум" - -#: ../../src/intro/index.txt:175 -msgid "guido" -msgstr "guido" - -#: ../../src/intro/index.txt:11 -msgid "Introduction to Python" -msgstr "Введення в Python" - -#: ../../src/intro/index.txt:13 -msgid "" -"|python| **Python** is a high-level, interpreted scripting language. It was " -"created in the early 1990s by Guido van Rossum at Stichting Mathematisch " -"Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of " -"a language called ABC. Guido remains Python’s principal author, although it " -"includes many contributions from others." -msgstr "" -"|python| **Python** — це інтерпретована скриптова мова високого рівня. Її " -"було створено на початку 1990-х років Гвідо ван Россумом у Stichting " -"Mathematisch Centrum (CWI, див. https://www.cwi.nl/) у Нідерландах як " -"наступника мови під назвою ABC. Гвідо залишається головним автором Python, " -"хоча мова містить багато внесків від інших авторів." - -#: ../../src/intro/index.txt:132 -msgid "python" -msgstr "python" - -#: ../../src/intro/index.txt:19 -msgid "" -"Python 2.0 was released in 2000, and the 2.x versions were the prevalent " -"releases until December 2008. At that time, the development team made the " -"decision to release version 3.0, which contained a few relatively small but " -"significant changes that were not backward compatible with the 2.x versions. " -"Python 2 and 3 are very similar, and some features of Python 3 have been " -"backported to Python 2. But in general, they remain not quite compatible." -msgstr "" -"Python 2.0 був випущений у 2000 році, а версії 2.x були поширеними випусками " -"до грудня 2008 року. У той час команда розробників прийняла рішення " -"випустити версію 3.0, яка містила кілька відносно невеликих, але значних " -"змін, які не були зворотно сумісними. з версіями 2.x. Python 2 і 3 дуже " -"схожі, і деякі функції Python 3 були перенесені в Python 2. Але загалом вони " -"залишаються не зовсім сумісними." - -#: ../../src/intro/index.txt:26 -msgid "" -"Both Python 2 and 3 have continued to be maintained and developed, with " -"periodic release updates for both. However, an official End Of Life date of " -"January 1, 2020 has been established for Python 2, after which time it will " -"no longer be maintained." -msgstr "" -"І Python 2, і 3 продовжували підтримуватися та розроблятися з періодичними " -"оновленнями для обох. Однак для Python 2 було встановлено офіційну дату " -"завершення життя 1 січня 2020 року, після якої він більше не " -"підтримуватиметься." - -#: ../../src/intro/index.txt:31 -msgid "" -"Python is still maintained by a core development team at the Institute, and " -"Guido is still in charge, having been given the title of BDFL (Benevolent " -"Dictator For Life) by the Python community. The name Python, by the way, " -"derives not from the snake, but from the British comedy troupe Monty " -"Python’s Flying Circus, of which Guido was, and presumably still is, a fan. " -"It is common to find references to Monty Python sketches and movies " -"scattered throughout the Python documentation." -msgstr "" -"Python все ще підтримується основною командою розробників в Інституті, і " -"Гвідо все ще керує, отримавши звання BDFL (Доброзичливий диктатор на все " -"життя) від спільноти Python. Назва Python, до речі, походить не від імені " -"змії, а від британської комедійної трупи Monty Python’s Flying Circus, " -"шанувальником якої був і, мабуть, залишається Гвідо. Посилання на ескізи та " -"фільми Monty Python часто можна знайти в документації Python." - -#: ../../src/intro/index.txt:39 -msgid "Here are some significant facts about Python." -msgstr "Ось кілька важливих фактів про Python." - -#: ../../src/intro/index.txt:42 -msgid "Python is popular" -msgstr "Python популярний" - -#: ../../src/intro/index.txt:43 -msgid "" -"Python has been growing in popularity over the last few years. The 2018 " -"Stack Overflow Developer Survey ranked Python as the 7th most popular and " -"the number one most wanted technology of the year. By the end of Q-4 in 2022 " -"Python is the **top** language on all GitHut metrics :cite:`github:stats`." -msgstr "" -"Python набирає популярності протягом останніх кількох років. Опитування " -"розробників Stack Overflow 2018 року поставило Python на сьоме місце за " -"популярністю та на перше місце серед найпопулярніших технологій року. До " -"кінця четвертого кварталу 2022 року Python є **найпопулярнішою** мовою за " -"всіма показниками GitHut :cite:`github:stats`." - -#: ../../src/intro/index.txt:49 -msgid "" -"Here are some logos of unknown companies across the globe who uses Python:" -msgstr "" -"Ось кілька логотипів невідомих компаній по всьому світі, які використовують " -"Python:" - -#: ../../src/intro/index.txt:54 -msgid "google facebook instagram spotify quora netflix dropbox reddit" -msgstr "google facebook instagram spotify quora netflix dropbox reddit" - -#: ../../src/intro/index.txt -msgid "Google" -msgstr "Google" - -#: ../../src/intro/index.txt -msgid "Facebook" -msgstr "Facebook" - -#: ../../src/intro/index.txt -msgid "Instagram" -msgstr "Instagram" - -#: ../../src/intro/index.txt -msgid "Spotify" -msgstr "Spotify" - -#: ../../src/intro/index.txt -msgid "Quora" -msgstr "Quora" - -#: ../../src/intro/index.txt -msgid "Netflix" -msgstr "Netflix" - -#: ../../src/intro/index.txt -msgid "Dropbox" -msgstr "Dropbox" - -#: ../../src/intro/index.txt -msgid "Reddit" -msgstr "Reddit" - -#: ../../src/intro/index.txt:56 -msgid "Python is interpreted" -msgstr "Python інтерпретується" - -#: ../../src/intro/index.txt:57 -msgid "" -"Many languages are compiled, meaning the source code you create needs to be " -"translated into machine code, the language of your computer’s processor, " -"before it can be run. Programs written in an interpreted language are passed " -"straight to an interpreter that runs them directly." -msgstr "" -"Багато мов компілюється, тобто вихідний код, який ви створюєте, має бути " -"переведений у машинний код, мовою процесора вашого комп’ютера, перш ніж його " -"можна буде запустити. Програми, написані на інтерпретованій мові, " -"передаються прямо до інтерпретатора, який їх безпосередньо запускає." - -#: ../../src/intro/index.txt:62 -msgid "" -"This makes for a quicker development cycle because you just type in your " -"code and run it, without the intermediate compilation step." -msgstr "" -"Це забезпечує швидший цикл розробки, оскільки ви просто вводите код і " -"запускаєте його без проміжного етапу компіляції." - -#: ../../src/intro/index.txt:66 -msgid "Python is free" -msgstr "Python безкоштовний" - -#: ../../src/intro/index.txt:67 -msgid "" -"The Python interpreter is developed under an OSI-approved open-source " -"license, making it free to install, use, and distribute, even for commercial " -"purposes." -msgstr "" -"Інтерпретатор Python розроблено відповідно до схваленої OSI ліцензії з " -"відкритим вихідним кодом, що робить його безкоштовним для встановлення, " -"використання та розповсюдження навіть у комерційних цілях." - -#: ../../src/intro/index.txt:71 -msgid "Python is portable" -msgstr "Python портативний" - -#: ../../src/intro/index.txt:72 -msgid "" -"Because Python code is interpreted and not compiled into native machine " -"instructions, code written for one platform will work on any other platform " -"that has the Python interpreter installed. This is true of any interpreted " -"language, not just Python." -msgstr "" -"Оскільки код Python інтерпретується, а не компілюється у власні машинні " -"інструкції, код, написаний для однієї платформи, працюватиме на будь-якій " -"іншій платформі, де встановлено інтерпретатор Python. Це стосується будь-" -"якої інтерпретованої мови, а не лише Python." - -#: ../../src/intro/index.txt:78 -msgid "Python is simple" -msgstr "Python простий" - -#: ../../src/intro/index.txt:79 -msgid "" -"As programming languages go, Python is relatively uncluttered, and the " -"developers have deliberately kept it that way. A rough estimate of the " -"complexity of a language can be gleaned from the number of keywords or " -"reserved words in the language. These are words that are reserved for " -"special meaning by the compiler or interpreter because they designate " -"specific built-in functionality of the language. There are only 35 :cite:" -"`docs-python:keywords` in Python and they are:" -msgstr "" -"Що стосується мов програмування, Python є відносно незавантаженим, і " -"розробники навмисно залишили його таким. Приблизну оцінку складності мови " -"можна отримати з кількості ключових або зарезервованих слів у мові. Це " -"слова, які зарезервовані для спеціального значення компілятором або " -"інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " -"У Python лише 35 :cite:`docs-python:keywords`, і вони:" - -#: ../../src/intro/index.txt:87 -msgid "Python Keywords" -msgstr "Ключові слова Python" - -#: ../../src/intro/index.txt:91 -msgid "``False``" -msgstr "``False``" - -#: ../../src/intro/index.txt:91 -msgid "``await``" -msgstr "``await``" - -#: ../../src/intro/index.txt:91 -msgid "``else``" -msgstr "``else``" - -#: ../../src/intro/index.txt:91 -msgid "``import``" -msgstr "``import``" - -#: ../../src/intro/index.txt:91 -msgid "``pass``" -msgstr "``pass``" - -#: ../../src/intro/index.txt:93 -msgid "``None``" -msgstr "``None``" - -#: ../../src/intro/index.txt:93 -msgid "``break``" -msgstr "``break``" - -#: ../../src/intro/index.txt:93 -msgid "``except``" -msgstr "``except``" - -#: ../../src/intro/index.txt:93 -msgid "``in``" -msgstr "``in``" - -#: ../../src/intro/index.txt:93 -msgid "``raise``" -msgstr "``raise``" - -#: ../../src/intro/index.txt:95 -msgid "``True``" -msgstr "``True``" - -#: ../../src/intro/index.txt:95 -msgid "``class``" -msgstr "``class``" - -#: ../../src/intro/index.txt:95 -msgid "``finally``" -msgstr "``finally``" - -#: ../../src/intro/index.txt:95 -msgid "``is``" -msgstr "``is``" - -#: ../../src/intro/index.txt:95 -msgid "``return``" -msgstr "``return``" - -#: ../../src/intro/index.txt:97 -msgid "``and``" -msgstr "``and``" - -#: ../../src/intro/index.txt:97 -msgid "``continue``" -msgstr "``continue``" - -#: ../../src/intro/index.txt:97 -msgid "``for``" -msgstr "``for``" - -#: ../../src/intro/index.txt:97 -msgid "``lambda``" -msgstr "``lambda``" - -#: ../../src/intro/index.txt:97 -msgid "``try``" -msgstr "``try``" - -#: ../../src/intro/index.txt:99 -msgid "``as``" -msgstr "``as``" - -#: ../../src/intro/index.txt:99 -msgid "``def``" -msgstr "``def``" - -#: ../../src/intro/index.txt:99 -msgid "``from``" -msgstr "``from``" - -#: ../../src/intro/index.txt:99 -msgid "``nonlocal``" -msgstr "``nonlocal``" - -#: ../../src/intro/index.txt:99 -msgid "``while``" -msgstr "``while``" - -#: ../../src/intro/index.txt:101 -msgid "``assert``" -msgstr "``assert``" - -#: ../../src/intro/index.txt:101 -msgid "``del``" -msgstr "``del``" - -#: ../../src/intro/index.txt:101 -msgid "``global``" -msgstr "``global``" - -#: ../../src/intro/index.txt:101 -msgid "``not``" -msgstr "``not``" - -#: ../../src/intro/index.txt:101 -msgid "``with``" -msgstr "``with``" - -#: ../../src/intro/index.txt:103 -msgid "``async``" -msgstr "``async``" - -#: ../../src/intro/index.txt:103 -msgid "``elif``" -msgstr "``elif``" - -#: ../../src/intro/index.txt:103 -msgid "``if``" -msgstr "``if``" - -#: ../../src/intro/index.txt:103 -msgid "``or``" -msgstr "``or``" - -#: ../../src/intro/index.txt:103 -msgid "``yield``" -msgstr "``yield``" - -#: ../../src/intro/index.txt:107 -msgid "Python is general purpose" -msgstr "Python є універсальним" - -#: ../../src/intro/index.txt:108 -msgid "" -"Python is everywhere. Talking more specific common scopes for Python " -"developers are :cite:`python-usage`:" -msgstr "" -"Python всюди. Говорячи про більш конкретні загальні області для розробників " -"Python, це :cite:`python-usage`:" - -#: ../../src/intro/index.txt:111 -msgid "Web Scraping Applications" -msgstr "Програми для сканування веб-сторінок" - -#: ../../src/intro/index.txt:112 -msgid "Data Science Solutions" -msgstr "Рішення для Data Science" - -#: ../../src/intro/index.txt:113 -msgid "Machine Learning Applications" -msgstr "Програми машинного навчання" - -#: ../../src/intro/index.txt:114 -msgid "Web Development" -msgstr "Веб-розробка" - -#: ../../src/intro/index.txt:115 -msgid "Game Development" -msgstr "Розробка ігор" - -#: ../../src/intro/index.txt:116 -msgid "Scientific and Numeric Applications" -msgstr "Наукові та обчислювальні програми" - -#: ../../src/intro/index.txt:117 -msgid "Image Design and Graphic Design Applications" -msgstr "Програми для обробки зображень та графіки" - -#: ../../src/intro/index.txt:118 -msgid "Finance Fintech Platform" -msgstr "Банківські та фінансові сервіси" - -#: ../../src/intro/index.txt:119 -msgid "Language Development" -msgstr "Language Development" - -#: ../../src/intro/index.txt:120 -msgid "Operating Systems" -msgstr "Операційні системи" - -#: ../../src/intro/install.txt:3 ../../src/intro/install.txt:21 -msgid "Install Python" -msgstr "Встановлення Python" - -#: ../../src/intro/install.txt:5 -msgid "" -"The `Python wiki `_ " -"briefly describes the installation process." -msgstr "" -"`Вікі Python `_ " -"коротко описує процес встановлення." - -#: ../../src/intro/install.txt:8 -msgid "" -"To become a **true** professional, you need a special software called :abbr:" -"`IDE (Integrated Development Environment)` or at least a code editor " -"supporting syntax highlight. Refer :doc:`/appx/code_edit` for more " -"information." -msgstr "" -"Щоб стати **справжнім** професіоналом, вам потрібне спеціальне програмне " -"забезпечення під назвою :abbr:`IDE (Integrated Development Environment)` або " -"принаймні редактор коду, який підтримує підсвічування синтаксису. Зверніться " -"до :doc:`/appx/code_edit` для отримання додаткової інформації." - -#: ../../src/intro/install.txt:14 -msgid "Linux" -msgstr "Linux" - -#: ../../src/intro/install.txt:16 -msgid "" -"On most Linux distros Python comes pre-installed and/or all distro have it " -"available in their package repository (I haven't seen the one which does " -"have). The installation process depends on the distro, but here are some " -"examples how you can install it:" -msgstr "" -"У більшості дистрибутивів Linux Python постачається попередньо встановленим " -"і/або в усіх дистрибутивах він доступний у сховищі пакетів (я не бачив того, " -"у якому є). Процес встановлення залежить від дистрибутива, але ось кілька " -"прикладів того, як його можна встановити:" - -#: ../../src/intro/install.txt:37 -msgid "MacOS" -msgstr "MacOS" - -#: ../../src/intro/install.txt:39 -msgid "" -"For newer versions of MacOS Python is no longer included by default and you " -"will have to download and install it." -msgstr "" -"Для нових версій MacOS Python більше не включено за замовчуванням, і вам " -"доведеться завантажити та встановити його." - -#: ../../src/intro/install.txt:42 -msgid "The process is described at: `Using Python on a Mac`_." -msgstr "Процес описано в: `Використання Python на Mac`_." - -#: ../../src/intro/install.txt:44 -msgid "" -"Briefly, you are invited to visit `downloads`_ and download the latest " -"stable version of Python. A \"universal binary\" build of Python runs " -"natively on Mac's new Intel and legacy PPC CPUs." -msgstr "" -"Коротко, вас запрошують відвідати `завантаження`_ та завантажити останню " -"стабільну версію Python. \"Універсальна двійкова\" збірка Python працює " -"нативно на нових процесорах Intel і застарілих процесорах PPC від Mac." - -#: ../../src/intro/install.txt:48 -msgid "After the installation you would get:" -msgstr "Після встановлення ви отримаєте:" - -#: ../../src/intro/install.txt:50 -msgid "" -"`Python 3.x` folder in `Applications` folder. Standard development " -"environment (`IDLE`) and `PythonLauncher` included." -msgstr "" -"Папка `Python 3.x` в папці `Програми`. Включено стандартне середовище " -"розробки (`IDLE`) і `PythonLauncher`." - -#: ../../src/intro/install.txt:52 -msgid "" -"A framework `/Library/Frameworks/Python.framework` included libraries and " -"executables." -msgstr "" -"Фреймворк `/Library/Frameworks/Python.framework` що включає бібліотеки та " -"виконувані файли." - -#: ../../src/intro/install.txt:56 -msgid "Install from Homebrew" -msgstr "Встановити з Homebrew" - -#: ../../src/intro/install.txt:58 -msgid "" -"Python for MacOS is available via Homebrew. You are to search `formulae`_ " -"for the latest available version. In general, it's as easy as:" -msgstr "" -"Python для MacOS доступний через Homebrew. Ви повинні шукати `формули`_ для " -"останньої доступної версії. Загалом, це так само просто:" - -#: ../../src/intro/install.txt:66 -msgid "Windows" -msgstr "Windows" - -#: ../../src/intro/install.txt:68 -msgid "" -"As for MacOS, here is the official documentation: `Using Python on Windows`_." -msgstr "" -"Що стосується MacOS, ось офіційна документація: `Using Python on Windows`_." - -#: ../../src/intro/install.txt:70 -msgid "" -"For Windows' users the stable release is available from `downloads`_. Just " -"download the installer and proceed to common steps to install software." -msgstr "" -"Для користувачів Windows стабільний випуск доступний із `завантажень`_. " -"Просто завантажте програму встановлення та перейдіть до стандартних кроків " -"для встановлення програмного забезпечення." - -#: ../../src/intro/install.txt:73 -msgid "" -"It's recommended to **Add Python3.x to PATH**, this will avoid problems at " -"the beginning of your journey with Python" -msgstr "" -"Рекомендовано **Додати Python3.x до PATH**, це дозволить уникнути проблем на " -"початку вашого шляху з Python" - -#: ../../src/intro/install.txt:80 -msgid "Python installer first page" -msgstr "Перша сторінка інсталятора Python" - -#: ../../src/intro/install.txt:82 -msgid "Going on with **Install Now**:" -msgstr "Продовжуємо з **Встановити зараз**:" - -#: ../../src/intro/install.txt:84 -msgid "Python will be installed to your user directory" -msgstr "Python буде встановлено у ваш каталог користувача" - -#: ../../src/intro/install.txt:85 -msgid "" -"Python Launcher will be installed according to the option at the bottom of " -"the page" -msgstr "Python Launcher буде встановлено відповідно до опції внизу сторінки" - -#: ../../src/intro/install.txt:88 -msgid "" -"Using **Customize installation** will perform an *all-users* installation." -msgstr "" -"Використання **Налаштувати інсталяцію** виконає інсталяцію *для всіх " -"користувачів*." - -#: ../../src/intro/install.txt:91 -msgid "Removing the MAX_PATH Limitation" -msgstr "Видалення обмеження MAX_PATH" - -#: ../../src/intro/install.txt:93 -msgid "" -"Windows historically has limited path lengths to 260 characters. This meant " -"that paths longer than this would not resolve and errors would result. In " -"the latest versions of Windows, this limitation can be expanded to " -"approximately 32,000 characters. This allows the open() function, the os " -"module and most other path functionality to accept and return paths longer " -"than 260 characters." -msgstr "" -"Історично у Windows довжина шляху обмежена 260 символами. Це означало, що " -"шляхи, довші за цей, не вирішуватимуться, і спричинятимуться помилки. В " -"останніх версіях Windows це обмеження можна розширити приблизно до 32 000 " -"символів. Це дозволяє функції open(), модулю os і більшості інших функцій " -"шляху приймати та повертати шляхи, довші за 260 символів." - -#: ../../src/intro/install.txt:99 -msgid "You will need PC administrator assistance to perform this action." -msgstr "Для виконання цієї дії вам знадобиться допомога адміністратора ПК." - -#: ../../src/intro/install.txt:102 -msgid "Install from the Microsoft Store" -msgstr "Встановити з Microsoft Store" - -#: ../../src/intro/install.txt:104 -msgid "You can install from the Microsoft Store in two steps:" -msgstr "Ви можете встановити з Microsoft Store у два кроки:" - -#: ../../src/intro/install.txt:106 -msgid "" -"Open the Microsoft Store app and search for ``Python`` The result should " -"look like:" -msgstr "" -"Відкрийте програму Microsoft Store і знайдіть ``Python``. Результат має " -"виглядати так:" - -#: ../../src/intro/install.txt:112 -msgid "Microsoft Store - search results for \"Python\"" -msgstr "Microsoft Store - результати пошуку для \"Python\"" - -#: ../../src/intro/install.txt:114 -msgid "Select ``Python 3.9`` or the higher available version." -msgstr "Виберіть ``Python 3.9`` або вищу доступну версію." - -#: ../../src/intro/install.txt:116 -msgid "" -"Click **GET** and wait until the installer is downloaded. The installation " -"process should run automatically. Follow the installer's instructions." -msgstr "" -"Натисніть **GET** і дочекайтеся завантаження інсталятора. Процес " -"встановлення має запуститися автоматично. Дотримуйтесь інструкцій " -"інсталятора." - -#: ../../src/intro/install.txt:124 -msgid "Online Interpreters" -msgstr "Онлайн Інтерпретатори" - -#: ../../src/intro/install.txt:126 -msgid "" -"Installing or updating Python on your computer is the first step to becoming " -"a Python programmer :cite:`realpython:install-and-setup`." -msgstr "" -"Встановлення або оновлення Python на вашому комп’ютері – це перший крок до " -"того, щоб стати програмістом Python :cite:`realpython:install-and-setup`." - -#: ../../src/intro/install.txt:129 -msgid "" -"But if you cannot install Python at the moment for some reason, are can go " -"with online interpreters. `repl.it `_ provides the " -"ability to create and store Python scripts (they are called *repl* here) for " -"free." -msgstr "" -"Але якщо ви не можете встановити Python на даний момент з якоїсь причини, " -"можна скористатися онлайн-інтерпретаторами. `repl.it `_ " -"надає можливість безкоштовно створювати та зберігати сценарії Python (тут " -"вони називаються *repl*)." - -#: ../../src/intro/interact.txt:3 -msgid "Interacting with Python Interpreter" -msgstr "Взаємодія з інтерпретатором Python" - -#: ../../src/intro/interact.txt:5 -msgid "It’s time to write some Python code!" -msgstr "Настав час написати код на Python!" - -#: ../../src/intro/interact.txt:7 -msgid ":cite:t:`realpython:interact`" -msgstr ":cite:t:`realpython:interact`" - -#: ../../src/intro/interact.txt:9 -msgid "In short there are three major ways to do something with Python:" -msgstr "Коротше кажучи, є три основні способи зробити щось з Python:" - -#: ../../src/intro/interact.txt:11 -msgid "interactive Python console" -msgstr "інтерактивна консоль Python" - -#: ../../src/intro/interact.txt:12 -msgid "running code from file [#]_" -msgstr "запуск коду з файлу [#]_" - -#: ../../src/intro/interact.txt:13 -msgid "use online editors (like `repl.it `_)" -msgstr "" -"використовувати онлайн-редактори (наприклад, `repl.it `_)" - -#: ../../src/intro/interact.txt:16 -msgid "Using Python interpreter interactively" -msgstr "Використання інтерпретатора Python в інтерактивному режимі" - -#: ../../src/intro/interact.txt:18 -msgid "" -"Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight " -"forward way to start talking to Python. This simply means starting up the " -"interpreter and typing commands to it directly :cite:`realpython:interact`. " -"The interpreter:" -msgstr "" -"Використання середовища :abbr:`REPL (Read-Eval-Print-Loop)` є найпростішим " -"способом почати спілкування з Python. Це просто означає запуск " -"інтерпретатора та введення команд безпосередньо в нього :cite:`realpython:" -"interact`. Перекладач:" - -#: ../../src/intro/interact.txt:23 -msgid "Reads the command you enter" -msgstr "Читає введену команду" - -#: ../../src/intro/interact.txt:24 -msgid "Evaluates and executes it" -msgstr "Оцінює та виконує її" - -#: ../../src/intro/interact.txt:25 -msgid "Prints the output (if any) back to the console" -msgstr "Друкує результат (якщо є) назад на консоль" - -#: ../../src/intro/interact.txt:26 -msgid "Loops back and repeats" -msgstr "Повертається назад та повторює" - -#: ../../src/intro/interact.txt:29 -msgid "Starting the interpreter" -msgstr "Запуск інтерпретатора" - -#: ../../src/intro/interact.txt:31 -msgid "" -"In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the " -"installer placed a shortcut on the desktop to launch the Python." -msgstr "" -"У середовищі :abbr:`GUI (Graphic User Interface)`, імовірно, інсталятор " -"розмістив ярлик на робочому столі для запуску Python." - -#: ../../src/intro/interact.txt:34 -msgid "" -"For example in Windows the interpreter can be found in the **Start** menu " -"labeled **Python 3.x**:" -msgstr "" -"Наприклад, у Windows інтерпретатор можна знайти в меню **Пуск** з позначкою " -"**Python 3.x**:" - -#: ../../src/intro/interact.txt:40 -msgid "Windows start menu Python group" -msgstr "Меню Пуск Windows Група Python" - -#: ../../src/intro/interact.txt:42 -msgid "" -"In case you are getting error saying python is not installed, but you are " -"sure that the interpreter **is installed** - this means you have no Python " -"in your ``PATH``. Message may look like: ``'python' is not recognized as an " -"internal or external command`` / ``python: command not found``" -msgstr "" -"Якщо ви отримуєте повідомлення про те, що python не встановлено, але ви " -"впевнені, що інтерпретатор **встановлено**, це означає, що у вашому ``PATH`` " -"немає Python. Повідомлення може виглядати так: ``'python' не розпізнається " -"як внутрішня або зовнішня команда`` / ``python: команда не знайдена``" - -#: ../../src/intro/interact.txt:48 -msgid "Refer :doc:`/appx/env_path` for problem solution." -msgstr "Зверніться до :doc:`/appx/env_path` для вирішення проблеми." - -#: ../../src/intro/interact.txt:50 -msgid "The alternative is to launch from a terminal window:" -msgstr "Альтернативою є запуск із вікна терміналу:" - -#: ../../src/intro/interact.txt:52 -msgid "**Command Prompt** in Windows" -msgstr "**Командний рядок** у Windows" - -#: ../../src/intro/interact.txt:53 -msgid "**Terminal** both in macOS and Linux" -msgstr "**Термінал** в macOS і Linux" - -#: ../../src/intro/interact.txt:58 -msgid "Start Python via Command Prompt" -msgstr "Запуск Python через командний рядок" - -#: ../../src/intro/interact.txt:63 -msgid "Start Python via Terminal" -msgstr "Запуск Python через термінал" - -#: ../../src/intro/interact.txt:66 -msgid "Running code" -msgstr "Запускаємо код" - -#: ../../src/intro/interact.txt:68 -msgid "" -"Put the Python code in interactive console and press enter to execute it." -msgstr "" -"Помістіть код Python в інтерактивну консоль і натисніть enter, щоб виконати " -"його." - -#: ../../src/intro/interact.txt:70 -msgid "" -"Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after " -"it" -msgstr "" -"Переконайтеся, що підказка ``>>>`` відображається, а курсор знаходиться " -"після неї" - -#: ../../src/intro/interact.txt:72 -msgid "Type the command ``print(\"Hello, World!\")``" -msgstr "Введіть команду ``print(\"Hello, World!\")``" - -#: ../../src/intro/interact.txt:73 -msgid "Press enter" -msgstr "Натисніть enter" - -#: ../../src/intro/interact.txt:79 -msgid "Your session should look like:" -msgstr "Ваш сеанс має виглядати так:" - -#: ../../src/intro/interact.txt:86 -msgid "" -"If you've seen string \"Hello, World!\" printed back, congrats - you've run " -"your first program in Python." -msgstr "" -"Якщо ви бачили рядок \"Hello, World!\" надруковано, вітаємо - ви запустили " -"свою першу програму на Python." - -#: ../../src/intro/interact.txt:94 -msgid "Exiting the interpreter" -msgstr "Вихід з інтерпретатора" - -#: ../../src/intro/interact.txt:96 -msgid "To exit the interactive console type \"exit\" and hit enter." -msgstr "Щоб вийти з інтерактивної консолі, введіть \"exit\" і натисніть Enter." - -#: ../../src/intro/interact.txt:103 -msgid "Running code from file" -msgstr "Запуск коду з файлу" - -#: ../../src/intro/interact.txt:105 -msgid "" -"A Python script is a reusable set of code. It is essentially a Python " -"program - a sequence of Python instructions - contained in a file. You can " -"run the program by specifying the name of the script file to the interpreter." -msgstr "" -"Сценарій Python — це багаторазовий набір коду. По суті, це програма на " -"Python – послідовність інструкцій Python, які містяться у файлі. Ви можете " -"запустити програму, вказавши інтерпретатору назву файлу сценарію." - -#: ../../src/intro/interact.txt:109 -msgid "" -"Python scripts are just plain text, so you can edit them with any text " -"editor. If you have a favorite programmer’s editor that operates on text " -"files, it should be fine to use. Otherwise here are some options for the " -"first time:" -msgstr "" -"Сценарії Python — це звичайний текст, тому ви можете редагувати їх у будь-" -"якому текстовому редакторі. Якщо у вас є улюблений програмістський редактор, " -"який працює з текстовими файлами, його цілком можна використовувати. Інакше " -"ось кілька варіантів для першого разу:" - -#: ../../src/intro/interact.txt:113 -msgid "Windows: |npp| `Notepad++ `_" -msgstr "Windows: |npp| `Notepad++ `_" - -#: ../../src/intro/interact.txt:148 -msgid "npp" -msgstr "npp" - -#: ../../src/intro/interact.txt:114 -msgid "Linux: |geany| `Geany `_" -msgstr "Linux: |geany| `Geany `_" - -#: ../../src/intro/interact.txt:150 -msgid "geany" -msgstr "geany" - -#: ../../src/intro/interact.txt:116 -msgid "" -"Using whatever editor create a script file called ``hello.py`` and put the " -"code in it:" -msgstr "" -"Використовуючи будь-який редактор, створіть файл сценарію під назвою ``hello." -"py`` і помістіть у нього код:" - -#: ../../src/intro/interact.txt:123 -msgid "" -"Save file keeping track on the directory you choose to save into. Now, open " -"the terminal or command prompt in this directory." -msgstr "" -"Збережіть файл, відстежуючи його в каталозі, який ви вибрали для збереження. " -"Тепер відкрийте термінал або командний рядок у цьому каталозі." - -#: ../../src/intro/interact.txt:126 -msgid "" -"In window you may open Command Prompt in the directory by typing \"cmd\" to " -"the address bar in explorer." -msgstr "" -"У вікні ви можете відкрити командний рядок у каталозі, ввівши \"cmd\" в " -"адресний рядок провідника." - -#: ../../src/intro/interact.txt:129 -msgid "In the terminal (or command prompt) type:" -msgstr "У терміналі (або командному рядку) введіть:" - -#: ../../src/intro/interact.txt:135 -msgid "" -"Python will print string \"Hello, World!\". Your session should look like:" -msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс має виглядати так:" - -#: ../../src/intro/interact.txt:144 -msgid "Files containing Python code are called *modules*." -msgstr "Файли, що містять код Python, називаються *модулями*." - -#~ msgid "in" -#~ msgstr "in" - -#~ msgid "is" -#~ msgstr "is" - -#~ msgid "as" -#~ msgstr "as" - -#~ msgid "if" -#~ msgstr "if" - -#~ msgid "or" -#~ msgstr "or" diff --git a/src/_locales/uk/LC_MESSAGES/intro/index.po b/src/_locales/uk/LC_MESSAGES/intro/index.po new file mode 100644 index 000000000..a45f16a8a --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro/index.po @@ -0,0 +1,446 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:13+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/intro/index.txt:123 +msgid "Contents" +msgstr "Зміст" + +#: ../../src/intro/index.txt:2 +msgid "" +"There are a whole bunch of common programming tasks that are easy in Python. " +"For someone who is not yet a programmer, who wants to become a programmer, " +"for those people Python is particularly easy to get. In Python, every symbol " +"you type is essential." +msgstr "" +"Існує ціла купа звичайних програмних завдань, які легко виконати на Python. " +"Для тих, хто ще не програміст, хто хоче стати програмістом, для цих людей " +"Python особливо легко отримати. У Python кожен символ, який ви вводите, є " +"важливим." + +#: ../../src/intro/index.txt:7 +msgid "|guido| Guido van Rossum" +msgstr "|guido| Гвідо ван Россум" + +#: ../../src/intro/index.txt:175 +msgid "guido" +msgstr "guido" + +#: ../../src/intro/index.txt:11 +msgid "Introduction to Python" +msgstr "Введення в Python" + +#: ../../src/intro/index.txt:13 +msgid "" +"|python| **Python** is a high-level, interpreted scripting language. It was " +"created in the early 1990s by Guido van Rossum at Stichting Mathematisch " +"Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a successor of " +"a language called ABC. Guido remains Python’s principal author, although it " +"includes many contributions from others." +msgstr "" +"|python| **Python** — це інтерпретована скриптова мова високого рівня. Її " +"було створено на початку 1990-х років Гвідо ван Россумом у Stichting " +"Mathematisch Centrum (CWI, див. https://www.cwi.nl/) у Нідерландах як " +"наступника мови під назвою ABC. Гвідо залишається головним автором Python, " +"хоча мова містить багато внесків від інших авторів." + +#: ../../src/intro/index.txt:132 +msgid "python" +msgstr "python" + +#: ../../src/intro/index.txt:19 +msgid "" +"Python 2.0 was released in 2000, and the 2.x versions were the prevalent " +"releases until December 2008. At that time, the development team made the " +"decision to release version 3.0, which contained a few relatively small but " +"significant changes that were not backward compatible with the 2.x versions. " +"Python 2 and 3 are very similar, and some features of Python 3 have been " +"backported to Python 2. But in general, they remain not quite compatible." +msgstr "" +"Python 2.0 був випущений у 2000 році, а версії 2.x були поширеними випусками " +"до грудня 2008 року. У той час команда розробників прийняла рішення " +"випустити версію 3.0, яка містила кілька відносно невеликих, але значних " +"змін, які не були зворотно сумісними. з версіями 2.x. Python 2 і 3 дуже " +"схожі, і деякі функції Python 3 були перенесені в Python 2. Але загалом вони " +"залишаються не зовсім сумісними." + +#: ../../src/intro/index.txt:26 +msgid "" +"Both Python 2 and 3 have continued to be maintained and developed, with " +"periodic release updates for both. However, an official End Of Life date of " +"January 1, 2020 has been established for Python 2, after which time it will " +"no longer be maintained." +msgstr "" +"І Python 2, і 3 продовжували підтримуватися та розроблятися з періодичними " +"оновленнями для обох. Однак для Python 2 було встановлено офіційну дату " +"завершення життя 1 січня 2020 року, після якої він більше не " +"підтримуватиметься." + +#: ../../src/intro/index.txt:31 +msgid "" +"Python is still maintained by a core development team at the Institute, and " +"Guido is still in charge, having been given the title of BDFL (Benevolent " +"Dictator For Life) by the Python community. The name Python, by the way, " +"derives not from the snake, but from the British comedy troupe Monty " +"Python’s Flying Circus, of which Guido was, and presumably still is, a fan. " +"It is common to find references to Monty Python sketches and movies " +"scattered throughout the Python documentation." +msgstr "" +"Python все ще підтримується основною командою розробників в Інституті, і " +"Гвідо все ще керує, отримавши звання BDFL (Доброзичливий диктатор на все " +"життя) від спільноти Python. Назва Python, до речі, походить не від імені " +"змії, а від британської комедійної трупи Monty Python’s Flying Circus, " +"шанувальником якої був і, мабуть, залишається Гвідо. Посилання на ескізи та " +"фільми Monty Python часто можна знайти в документації Python." + +#: ../../src/intro/index.txt:39 +msgid "Here are some significant facts about Python." +msgstr "Ось кілька важливих фактів про Python." + +#: ../../src/intro/index.txt:42 +msgid "Python is popular" +msgstr "Python популярний" + +#: ../../src/intro/index.txt:43 +msgid "" +"Python has been growing in popularity over the last few years. The 2018 " +"Stack Overflow Developer Survey ranked Python as the 7th most popular and " +"the number one most wanted technology of the year. By the end of Q-4 in 2022 " +"Python is the **top** language on all GitHut metrics :cite:`github:stats`." +msgstr "" +"Python набирає популярності протягом останніх кількох років. Опитування " +"розробників Stack Overflow 2018 року поставило Python на сьоме місце за " +"популярністю та на перше місце серед найпопулярніших технологій року. До " +"кінця четвертого кварталу 2022 року Python є **найпопулярнішою** мовою за " +"всіма показниками GitHut :cite:`github:stats`." + +#: ../../src/intro/index.txt:49 +msgid "" +"Here are some logos of unknown companies across the globe who uses Python:" +msgstr "" +"Ось кілька логотипів невідомих компаній по всьому світі, які використовують " +"Python:" + +#: ../../src/intro/index.txt:54 +msgid "google facebook instagram spotify quora netflix dropbox reddit" +msgstr "google facebook instagram spotify quora netflix dropbox reddit" + +#: ../../src/intro/index.txt +msgid "Google" +msgstr "Google" + +#: ../../src/intro/index.txt +msgid "Facebook" +msgstr "Facebook" + +#: ../../src/intro/index.txt +msgid "Instagram" +msgstr "Instagram" + +#: ../../src/intro/index.txt +msgid "Spotify" +msgstr "Spotify" + +#: ../../src/intro/index.txt +msgid "Quora" +msgstr "Quora" + +#: ../../src/intro/index.txt +msgid "Netflix" +msgstr "Netflix" + +#: ../../src/intro/index.txt +msgid "Dropbox" +msgstr "Dropbox" + +#: ../../src/intro/index.txt +msgid "Reddit" +msgstr "Reddit" + +#: ../../src/intro/index.txt:56 +msgid "Python is interpreted" +msgstr "Python інтерпретується" + +#: ../../src/intro/index.txt:57 +msgid "" +"Many languages are compiled, meaning the source code you create needs to be " +"translated into machine code, the language of your computer’s processor, " +"before it can be run. Programs written in an interpreted language are passed " +"straight to an interpreter that runs them directly." +msgstr "" +"Багато мов компілюється, тобто вихідний код, який ви створюєте, має бути " +"переведений у машинний код, мовою процесора вашого комп’ютера, перш ніж його " +"можна буде запустити. Програми, написані на інтерпретованій мові, " +"передаються прямо до інтерпретатора, який їх безпосередньо запускає." + +#: ../../src/intro/index.txt:62 +msgid "" +"This makes for a quicker development cycle because you just type in your " +"code and run it, without the intermediate compilation step." +msgstr "" +"Це забезпечує швидший цикл розробки, оскільки ви просто вводите код і " +"запускаєте його без проміжного етапу компіляції." + +#: ../../src/intro/index.txt:66 +msgid "Python is free" +msgstr "Python безкоштовний" + +#: ../../src/intro/index.txt:67 +msgid "" +"The Python interpreter is developed under an OSI-approved open-source " +"license, making it free to install, use, and distribute, even for commercial " +"purposes." +msgstr "" +"Інтерпретатор Python розроблено відповідно до схваленої OSI ліцензії з " +"відкритим вихідним кодом, що робить його безкоштовним для встановлення, " +"використання та розповсюдження навіть у комерційних цілях." + +#: ../../src/intro/index.txt:71 +msgid "Python is portable" +msgstr "Python портативний" + +#: ../../src/intro/index.txt:72 +msgid "" +"Because Python code is interpreted and not compiled into native machine " +"instructions, code written for one platform will work on any other platform " +"that has the Python interpreter installed. This is true of any interpreted " +"language, not just Python." +msgstr "" +"Оскільки код Python інтерпретується, а не компілюється у власні машинні " +"інструкції, код, написаний для однієї платформи, працюватиме на будь-якій " +"іншій платформі, де встановлено інтерпретатор Python. Це стосується будь-" +"якої інтерпретованої мови, а не лише Python." + +#: ../../src/intro/index.txt:78 +msgid "Python is simple" +msgstr "Python простий" + +#: ../../src/intro/index.txt:79 +msgid "" +"As programming languages go, Python is relatively uncluttered, and the " +"developers have deliberately kept it that way. A rough estimate of the " +"complexity of a language can be gleaned from the number of keywords or " +"reserved words in the language. These are words that are reserved for " +"special meaning by the compiler or interpreter because they designate " +"specific built-in functionality of the language. There are only 35 :cite:" +"`docs-python:keywords` in Python and they are:" +msgstr "" +"Що стосується мов програмування, Python є відносно незавантаженим, і " +"розробники навмисно залишили його таким. Приблизну оцінку складності мови " +"можна отримати з кількості ключових або зарезервованих слів у мові. Це " +"слова, які зарезервовані для спеціального значення компілятором або " +"інтерпретатором, оскільки вони позначають конкретні вбудовані функції мови. " +"У Python лише 35 :cite:`docs-python:keywords`, і вони:" + +#: ../../src/intro/index.txt:87 +msgid "Python Keywords" +msgstr "Ключові слова Python" + +#: ../../src/intro/index.txt:91 +msgid "``False``" +msgstr "``False``" + +#: ../../src/intro/index.txt:91 +msgid "``await``" +msgstr "``await``" + +#: ../../src/intro/index.txt:91 +msgid "``else``" +msgstr "``else``" + +#: ../../src/intro/index.txt:91 +msgid "``import``" +msgstr "``import``" + +#: ../../src/intro/index.txt:91 +msgid "``pass``" +msgstr "``pass``" + +#: ../../src/intro/index.txt:93 +msgid "``None``" +msgstr "``None``" + +#: ../../src/intro/index.txt:93 +msgid "``break``" +msgstr "``break``" + +#: ../../src/intro/index.txt:93 +msgid "``except``" +msgstr "``except``" + +#: ../../src/intro/index.txt:93 +msgid "``in``" +msgstr "``in``" + +#: ../../src/intro/index.txt:93 +msgid "``raise``" +msgstr "``raise``" + +#: ../../src/intro/index.txt:95 +msgid "``True``" +msgstr "``True``" + +#: ../../src/intro/index.txt:95 +msgid "``class``" +msgstr "``class``" + +#: ../../src/intro/index.txt:95 +msgid "``finally``" +msgstr "``finally``" + +#: ../../src/intro/index.txt:95 +msgid "``is``" +msgstr "``is``" + +#: ../../src/intro/index.txt:95 +msgid "``return``" +msgstr "``return``" + +#: ../../src/intro/index.txt:97 +msgid "``and``" +msgstr "``and``" + +#: ../../src/intro/index.txt:97 +msgid "``continue``" +msgstr "``continue``" + +#: ../../src/intro/index.txt:97 +msgid "``for``" +msgstr "``for``" + +#: ../../src/intro/index.txt:97 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/intro/index.txt:97 +msgid "``try``" +msgstr "``try``" + +#: ../../src/intro/index.txt:99 +msgid "``as``" +msgstr "``as``" + +#: ../../src/intro/index.txt:99 +msgid "``def``" +msgstr "``def``" + +#: ../../src/intro/index.txt:99 +msgid "``from``" +msgstr "``from``" + +#: ../../src/intro/index.txt:99 +msgid "``nonlocal``" +msgstr "``nonlocal``" + +#: ../../src/intro/index.txt:99 +msgid "``while``" +msgstr "``while``" + +#: ../../src/intro/index.txt:101 +msgid "``assert``" +msgstr "``assert``" + +#: ../../src/intro/index.txt:101 +msgid "``del``" +msgstr "``del``" + +#: ../../src/intro/index.txt:101 +msgid "``global``" +msgstr "``global``" + +#: ../../src/intro/index.txt:101 +msgid "``not``" +msgstr "``not``" + +#: ../../src/intro/index.txt:101 +msgid "``with``" +msgstr "``with``" + +#: ../../src/intro/index.txt:103 +msgid "``async``" +msgstr "``async``" + +#: ../../src/intro/index.txt:103 +msgid "``elif``" +msgstr "``elif``" + +#: ../../src/intro/index.txt:103 +msgid "``if``" +msgstr "``if``" + +#: ../../src/intro/index.txt:103 +msgid "``or``" +msgstr "``or``" + +#: ../../src/intro/index.txt:103 +msgid "``yield``" +msgstr "``yield``" + +#: ../../src/intro/index.txt:107 +msgid "Python is general purpose" +msgstr "Python є універсальним" + +#: ../../src/intro/index.txt:108 +msgid "" +"Python is everywhere. Talking more specific common scopes for Python " +"developers are :cite:`python-usage`:" +msgstr "" +"Python всюди. Говорячи про більш конкретні загальні області для розробників " +"Python, це :cite:`python-usage`:" + +#: ../../src/intro/index.txt:111 +msgid "Web Scraping Applications" +msgstr "Програми для сканування веб-сторінок" + +#: ../../src/intro/index.txt:112 +msgid "Data Science Solutions" +msgstr "Рішення для Data Science" + +#: ../../src/intro/index.txt:113 +msgid "Machine Learning Applications" +msgstr "Програми машинного навчання" + +#: ../../src/intro/index.txt:114 +msgid "Web Development" +msgstr "Веб-розробка" + +#: ../../src/intro/index.txt:115 +msgid "Game Development" +msgstr "Розробка ігор" + +#: ../../src/intro/index.txt:116 +msgid "Scientific and Numeric Applications" +msgstr "Наукові та обчислювальні програми" + +#: ../../src/intro/index.txt:117 +msgid "Image Design and Graphic Design Applications" +msgstr "Програми для обробки зображень та графіки" + +#: ../../src/intro/index.txt:118 +msgid "Finance Fintech Platform" +msgstr "Банківські та фінансові сервіси" + +#: ../../src/intro/index.txt:119 +msgid "Language Development" +msgstr "Language Development" + +#: ../../src/intro/index.txt:120 +msgid "Operating Systems" +msgstr "Операційні системи" diff --git a/src/_locales/uk/LC_MESSAGES/intro/install.po b/src/_locales/uk/LC_MESSAGES/intro/install.po new file mode 100644 index 000000000..4dd9b4c3c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro/install.po @@ -0,0 +1,250 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:12+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/intro/install.txt:3 ../../src/intro/install.txt:21 +msgid "Install Python" +msgstr "Встановлення Python" + +#: ../../src/intro/install.txt:5 +msgid "" +"The `Python wiki `_ " +"briefly describes the installation process." +msgstr "" +"`Вікі Python `_ " +"коротко описує процес встановлення." + +#: ../../src/intro/install.txt:8 +msgid "" +"To become a **true** professional, you need a special software called :abbr:" +"`IDE (Integrated Development Environment)` or at least a code editor " +"supporting syntax highlight. Refer :doc:`/appx/code_edit` for more " +"information." +msgstr "" +"Щоб стати **справжнім** професіоналом, вам потрібне спеціальне програмне " +"забезпечення під назвою :abbr:`IDE (Integrated Development Environment)` або " +"принаймні редактор коду, який підтримує підсвічування синтаксису. Зверніться " +"до :doc:`/appx/code_edit` для отримання додаткової інформації." + +#: ../../src/intro/install.txt:14 +msgid "Linux" +msgstr "Linux" + +#: ../../src/intro/install.txt:16 +msgid "" +"On most Linux distros Python comes pre-installed and/or all distro have it " +"available in their package repository (I haven't seen the one which does " +"have). The installation process depends on the distro, but here are some " +"examples how you can install it:" +msgstr "" +"У більшості дистрибутивів Linux Python постачається попередньо встановленим " +"і/або в усіх дистрибутивах він доступний у сховищі пакетів (я не бачив того, " +"у якому є). Процес встановлення залежить від дистрибутива, але ось кілька " +"прикладів того, як його можна встановити:" + +#: ../../src/intro/install.txt:37 +msgid "MacOS" +msgstr "MacOS" + +#: ../../src/intro/install.txt:39 +msgid "" +"For newer versions of MacOS Python is no longer included by default and you " +"will have to download and install it." +msgstr "" +"Для нових версій MacOS Python більше не включено за замовчуванням, і вам " +"доведеться завантажити та встановити його." + +#: ../../src/intro/install.txt:42 +msgid "The process is described at: `Using Python on a Mac`_." +msgstr "Процес описано в: `Використання Python на Mac`_." + +#: ../../src/intro/install.txt:44 +msgid "" +"Briefly, you are invited to visit `downloads`_ and download the latest " +"stable version of Python. A \"universal binary\" build of Python runs " +"natively on Mac's new Intel and legacy PPC CPUs." +msgstr "" +"Коротко, вас запрошують відвідати `завантаження`_ та завантажити останню " +"стабільну версію Python. \"Універсальна двійкова\" збірка Python працює " +"нативно на нових процесорах Intel і застарілих процесорах PPC від Mac." + +#: ../../src/intro/install.txt:48 +msgid "After the installation you would get:" +msgstr "Після встановлення ви отримаєте:" + +#: ../../src/intro/install.txt:50 +msgid "" +"`Python 3.x` folder in `Applications` folder. Standard development " +"environment (`IDLE`) and `PythonLauncher` included." +msgstr "" +"Папка `Python 3.x` в папці `Програми`. Включено стандартне середовище " +"розробки (`IDLE`) і `PythonLauncher`." + +#: ../../src/intro/install.txt:52 +msgid "" +"A framework `/Library/Frameworks/Python.framework` included libraries and " +"executables." +msgstr "" +"Фреймворк `/Library/Frameworks/Python.framework` що включає бібліотеки та " +"виконувані файли." + +#: ../../src/intro/install.txt:56 +msgid "Install from Homebrew" +msgstr "Встановити з Homebrew" + +#: ../../src/intro/install.txt:58 +msgid "" +"Python for MacOS is available via Homebrew. You are to search `formulae`_ " +"for the latest available version. In general, it's as easy as:" +msgstr "" +"Python для MacOS доступний через Homebrew. Ви повинні шукати `формули`_ для " +"останньої доступної версії. Загалом, це так само просто:" + +#: ../../src/intro/install.txt:66 +msgid "Windows" +msgstr "Windows" + +#: ../../src/intro/install.txt:68 +msgid "" +"As for MacOS, here is the official documentation: `Using Python on Windows`_." +msgstr "" +"Що стосується MacOS, ось офіційна документація: `Using Python on Windows`_." + +#: ../../src/intro/install.txt:70 +msgid "" +"For Windows' users the stable release is available from `downloads`_. Just " +"download the installer and proceed to common steps to install software." +msgstr "" +"Для користувачів Windows стабільний випуск доступний із `завантажень`_. " +"Просто завантажте програму встановлення та перейдіть до стандартних кроків " +"для встановлення програмного забезпечення." + +#: ../../src/intro/install.txt:73 +msgid "" +"It's recommended to **Add Python3.x to PATH**, this will avoid problems at " +"the beginning of your journey with Python" +msgstr "" +"Рекомендовано **Додати Python3.x до PATH**, це дозволить уникнути проблем на " +"початку вашого шляху з Python" + +#: ../../src/intro/install.txt:80 +msgid "Python installer first page" +msgstr "Перша сторінка інсталятора Python" + +#: ../../src/intro/install.txt:82 +msgid "Going on with **Install Now**:" +msgstr "Продовжуємо з **Встановити зараз**:" + +#: ../../src/intro/install.txt:84 +msgid "Python will be installed to your user directory" +msgstr "Python буде встановлено у ваш каталог користувача" + +#: ../../src/intro/install.txt:85 +msgid "" +"Python Launcher will be installed according to the option at the bottom of " +"the page" +msgstr "Python Launcher буде встановлено відповідно до опції внизу сторінки" + +#: ../../src/intro/install.txt:88 +msgid "" +"Using **Customize installation** will perform an *all-users* installation." +msgstr "" +"Використання **Налаштувати інсталяцію** виконає інсталяцію *для всіх " +"користувачів*." + +#: ../../src/intro/install.txt:91 +msgid "Removing the MAX_PATH Limitation" +msgstr "Видалення обмеження MAX_PATH" + +#: ../../src/intro/install.txt:93 +msgid "" +"Windows historically has limited path lengths to 260 characters. This meant " +"that paths longer than this would not resolve and errors would result. In " +"the latest versions of Windows, this limitation can be expanded to " +"approximately 32,000 characters. This allows the open() function, the os " +"module and most other path functionality to accept and return paths longer " +"than 260 characters." +msgstr "" +"Історично у Windows довжина шляху обмежена 260 символами. Це означало, що " +"шляхи, довші за цей, не вирішуватимуться, і спричинятимуться помилки. В " +"останніх версіях Windows це обмеження можна розширити приблизно до 32 000 " +"символів. Це дозволяє функції open(), модулю os і більшості інших функцій " +"шляху приймати та повертати шляхи, довші за 260 символів." + +#: ../../src/intro/install.txt:99 +msgid "You will need PC administrator assistance to perform this action." +msgstr "Для виконання цієї дії вам знадобиться допомога адміністратора ПК." + +#: ../../src/intro/install.txt:102 +msgid "Install from the Microsoft Store" +msgstr "Встановити з Microsoft Store" + +#: ../../src/intro/install.txt:104 +msgid "You can install from the Microsoft Store in two steps:" +msgstr "Ви можете встановити з Microsoft Store у два кроки:" + +#: ../../src/intro/install.txt:106 +msgid "" +"Open the Microsoft Store app and search for ``Python`` The result should " +"look like:" +msgstr "" +"Відкрийте програму Microsoft Store і знайдіть ``Python``. Результат має " +"виглядати так:" + +#: ../../src/intro/install.txt:112 +msgid "Microsoft Store - search results for \"Python\"" +msgstr "Microsoft Store - результати пошуку для \"Python\"" + +#: ../../src/intro/install.txt:114 +msgid "Select ``Python 3.9`` or the higher available version." +msgstr "Виберіть ``Python 3.9`` або вищу доступну версію." + +#: ../../src/intro/install.txt:116 +msgid "" +"Click **GET** and wait until the installer is downloaded. The installation " +"process should run automatically. Follow the installer's instructions." +msgstr "" +"Натисніть **GET** і дочекайтеся завантаження інсталятора. Процес " +"встановлення має запуститися автоматично. Дотримуйтесь інструкцій " +"інсталятора." + +#: ../../src/intro/install.txt:124 +msgid "Online Interpreters" +msgstr "Онлайн Інтерпретатори" + +#: ../../src/intro/install.txt:126 +msgid "" +"Installing or updating Python on your computer is the first step to becoming " +"a Python programmer :cite:`realpython:install-and-setup`." +msgstr "" +"Встановлення або оновлення Python на вашому комп’ютері – це перший крок до " +"того, щоб стати програмістом Python :cite:`realpython:install-and-setup`." + +#: ../../src/intro/install.txt:129 +msgid "" +"But if you cannot install Python at the moment for some reason, are can go " +"with online interpreters. `repl.it `_ provides the " +"ability to create and store Python scripts (they are called *repl* here) for " +"free." +msgstr "" +"Але якщо ви не можете встановити Python на даний момент з якоїсь причини, " +"можна скористатися онлайн-інтерпретаторами. `repl.it `_ " +"надає можливість безкоштовно створювати та зберігати сценарії Python (тут " +"вони називаються *repl*)." diff --git a/src/_locales/uk/LC_MESSAGES/intro/interact.po b/src/_locales/uk/LC_MESSAGES/intro/interact.po new file mode 100644 index 000000000..51ba6623e --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/intro/interact.po @@ -0,0 +1,267 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:12+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/intro/interact.txt:3 +msgid "Interacting with Python Interpreter" +msgstr "Взаємодія з інтерпретатором Python" + +#: ../../src/intro/interact.txt:5 +msgid "It’s time to write some Python code!" +msgstr "Настав час написати код на Python!" + +#: ../../src/intro/interact.txt:7 +msgid ":cite:t:`realpython:interact`" +msgstr ":cite:t:`realpython:interact`" + +#: ../../src/intro/interact.txt:9 +msgid "In short there are three major ways to do something with Python:" +msgstr "Коротше кажучи, є три основні способи зробити щось з Python:" + +#: ../../src/intro/interact.txt:11 +msgid "interactive Python console" +msgstr "інтерактивна консоль Python" + +#: ../../src/intro/interact.txt:12 +msgid "running code from file [#]_" +msgstr "запуск коду з файлу [#]_" + +#: ../../src/intro/interact.txt:13 +msgid "use online editors (like `repl.it `_)" +msgstr "" +"використовувати онлайн-редактори (наприклад, `repl.it `_)" + +#: ../../src/intro/interact.txt:16 +msgid "Using Python interpreter interactively" +msgstr "Використання інтерпретатора Python в інтерактивному режимі" + +#: ../../src/intro/interact.txt:18 +msgid "" +"Using :abbr:`REPL (Read-Eval-Print-Loop)` environment is the most straight " +"forward way to start talking to Python. This simply means starting up the " +"interpreter and typing commands to it directly :cite:`realpython:interact`. " +"The interpreter:" +msgstr "" +"Використання середовища :abbr:`REPL (Read-Eval-Print-Loop)` є найпростішим " +"способом почати спілкування з Python. Це просто означає запуск " +"інтерпретатора та введення команд безпосередньо в нього :cite:`realpython:" +"interact`. Перекладач:" + +#: ../../src/intro/interact.txt:23 +msgid "Reads the command you enter" +msgstr "Читає введену команду" + +#: ../../src/intro/interact.txt:24 +msgid "Evaluates and executes it" +msgstr "Оцінює та виконує її" + +#: ../../src/intro/interact.txt:25 +msgid "Prints the output (if any) back to the console" +msgstr "Друкує результат (якщо є) назад на консоль" + +#: ../../src/intro/interact.txt:26 +msgid "Loops back and repeats" +msgstr "Повертається назад та повторює" + +#: ../../src/intro/interact.txt:29 +msgid "Starting the interpreter" +msgstr "Запуск інтерпретатора" + +#: ../../src/intro/interact.txt:31 +msgid "" +"In :abbr:`GUI (Graphic User Interface)` environment, it's likely that the " +"installer placed a shortcut on the desktop to launch the Python." +msgstr "" +"У середовищі :abbr:`GUI (Graphic User Interface)`, імовірно, інсталятор " +"розмістив ярлик на робочому столі для запуску Python." + +#: ../../src/intro/interact.txt:34 +msgid "" +"For example in Windows the interpreter can be found in the **Start** menu " +"labeled **Python 3.x**:" +msgstr "" +"Наприклад, у Windows інтерпретатор можна знайти в меню **Пуск** з позначкою " +"**Python 3.x**:" + +#: ../../src/intro/interact.txt:40 +msgid "Windows start menu Python group" +msgstr "Меню Пуск Windows Група Python" + +#: ../../src/intro/interact.txt:42 +msgid "" +"In case you are getting error saying python is not installed, but you are " +"sure that the interpreter **is installed** - this means you have no Python " +"in your ``PATH``. Message may look like: ``'python' is not recognized as an " +"internal or external command`` / ``python: command not found``" +msgstr "" +"Якщо ви отримуєте повідомлення про те, що python не встановлено, але ви " +"впевнені, що інтерпретатор **встановлено**, це означає, що у вашому ``PATH`` " +"немає Python. Повідомлення може виглядати так: ``'python' не розпізнається " +"як внутрішня або зовнішня команда`` / ``python: команда не знайдена``" + +#: ../../src/intro/interact.txt:48 +msgid "Refer :doc:`/appx/env_path` for problem solution." +msgstr "Зверніться до :doc:`/appx/env_path` для вирішення проблеми." + +#: ../../src/intro/interact.txt:50 +msgid "The alternative is to launch from a terminal window:" +msgstr "Альтернативою є запуск із вікна терміналу:" + +#: ../../src/intro/interact.txt:52 +msgid "**Command Prompt** in Windows" +msgstr "**Командний рядок** у Windows" + +#: ../../src/intro/interact.txt:53 +msgid "**Terminal** both in macOS and Linux" +msgstr "**Термінал** в macOS і Linux" + +#: ../../src/intro/interact.txt:58 +msgid "Start Python via Command Prompt" +msgstr "Запуск Python через командний рядок" + +#: ../../src/intro/interact.txt:63 +msgid "Start Python via Terminal" +msgstr "Запуск Python через термінал" + +#: ../../src/intro/interact.txt:66 +msgid "Running code" +msgstr "Запускаємо код" + +#: ../../src/intro/interact.txt:68 +msgid "" +"Put the Python code in interactive console and press enter to execute it." +msgstr "" +"Помістіть код Python в інтерактивну консоль і натисніть enter, щоб виконати " +"його." + +#: ../../src/intro/interact.txt:70 +msgid "" +"Ensure that the ``>>>`` prompt is displayed and the cursor is pointed after " +"it" +msgstr "" +"Переконайтеся, що підказка ``>>>`` відображається, а курсор знаходиться " +"після неї" + +#: ../../src/intro/interact.txt:72 +msgid "Type the command ``print(\"Hello, World!\")``" +msgstr "Введіть команду ``print(\"Hello, World!\")``" + +#: ../../src/intro/interact.txt:73 +msgid "Press enter" +msgstr "Натисніть enter" + +#: ../../src/intro/interact.txt:79 +msgid "Your session should look like:" +msgstr "Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:86 +msgid "" +"If you've seen string \"Hello, World!\" printed back, congrats - you've run " +"your first program in Python." +msgstr "" +"Якщо ви бачили рядок \"Hello, World!\" надруковано, вітаємо - ви запустили " +"свою першу програму на Python." + +#: ../../src/intro/interact.txt:94 +msgid "Exiting the interpreter" +msgstr "Вихід з інтерпретатора" + +#: ../../src/intro/interact.txt:96 +msgid "To exit the interactive console type \"exit\" and hit enter." +msgstr "Щоб вийти з інтерактивної консолі, введіть \"exit\" і натисніть Enter." + +#: ../../src/intro/interact.txt:103 +msgid "Running code from file" +msgstr "Запуск коду з файлу" + +#: ../../src/intro/interact.txt:105 +msgid "" +"A Python script is a reusable set of code. It is essentially a Python " +"program - a sequence of Python instructions - contained in a file. You can " +"run the program by specifying the name of the script file to the interpreter." +msgstr "" +"Сценарій Python — це багаторазовий набір коду. По суті, це програма на " +"Python – послідовність інструкцій Python, які містяться у файлі. Ви можете " +"запустити програму, вказавши інтерпретатору назву файлу сценарію." + +#: ../../src/intro/interact.txt:109 +msgid "" +"Python scripts are just plain text, so you can edit them with any text " +"editor. If you have a favorite programmer’s editor that operates on text " +"files, it should be fine to use. Otherwise here are some options for the " +"first time:" +msgstr "" +"Сценарії Python — це звичайний текст, тому ви можете редагувати їх у будь-" +"якому текстовому редакторі. Якщо у вас є улюблений програмістський редактор, " +"який працює з текстовими файлами, його цілком можна використовувати. Інакше " +"ось кілька варіантів для першого разу:" + +#: ../../src/intro/interact.txt:113 +msgid "Windows: |npp| `Notepad++ `_" +msgstr "Windows: |npp| `Notepad++ `_" + +#: ../../src/intro/interact.txt:148 +msgid "npp" +msgstr "npp" + +#: ../../src/intro/interact.txt:114 +msgid "Linux: |geany| `Geany `_" +msgstr "Linux: |geany| `Geany `_" + +#: ../../src/intro/interact.txt:150 +msgid "geany" +msgstr "geany" + +#: ../../src/intro/interact.txt:116 +msgid "" +"Using whatever editor create a script file called ``hello.py`` and put the " +"code in it:" +msgstr "" +"Використовуючи будь-який редактор, створіть файл сценарію під назвою ``hello." +"py`` і помістіть у нього код:" + +#: ../../src/intro/interact.txt:123 +msgid "" +"Save file keeping track on the directory you choose to save into. Now, open " +"the terminal or command prompt in this directory." +msgstr "" +"Збережіть файл, відстежуючи його в каталозі, який ви вибрали для збереження. " +"Тепер відкрийте термінал або командний рядок у цьому каталозі." + +#: ../../src/intro/interact.txt:126 +msgid "" +"In window you may open Command Prompt in the directory by typing \"cmd\" to " +"the address bar in explorer." +msgstr "" +"У вікні ви можете відкрити командний рядок у каталозі, ввівши \"cmd\" в " +"адресний рядок провідника." + +#: ../../src/intro/interact.txt:129 +msgid "In the terminal (or command prompt) type:" +msgstr "У терміналі (або командному рядку) введіть:" + +#: ../../src/intro/interact.txt:135 +msgid "" +"Python will print string \"Hello, World!\". Your session should look like:" +msgstr "Python надрукує рядок \"Hello, World!\". Ваш сеанс має виглядати так:" + +#: ../../src/intro/interact.txt:144 +msgid "Files containing Python code are called *modules*." +msgstr "Файли, що містять код Python, називаються *модулями*." diff --git a/src/_locales/uk/LC_MESSAGES/linux.po b/src/_locales/uk/LC_MESSAGES/linux/index.po similarity index 91% rename from src/_locales/uk/LC_MESSAGES/linux.po rename to src/_locales/uk/LC_MESSAGES/linux/index.po index 7675956e4..5e917e0a9 100644 --- a/src/_locales/uk/LC_MESSAGES/linux.po +++ b/src/_locales/uk/LC_MESSAGES/linux/index.po @@ -1,5 +1,3 @@ -# LINUX BLOCK TRANSLATION. -# # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. @@ -9,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.04.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-21 05:50+0300\n" -"PO-Revision-Date: 2023-04-21 05:52+0300\n" +"PO-Revision-Date: 2023-10-05 20:12+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -17,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" #: ../../src/linux/index.txt:-1 msgid "Linux basics for Python developers" diff --git a/src/_locales/uk/LC_MESSAGES/oop/index.po b/src/_locales/uk/LC_MESSAGES/oop/index.po new file mode 100644 index 000000000..fc84bf980 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/index.po @@ -0,0 +1,46 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/index.txt:-1 +msgid "Object-oriented programming in Python" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/index.txt:-1 +msgid "python, oop, object-oriented programming, index" +msgstr "python, oop, object-oriented programming, index" + +#: ../../src/oop/index.txt:8 +msgid "Object-Oriented Programming" +msgstr "Об'єктно-орієнтоване програмування" + +#: ../../src/oop/index.txt:10 +msgid "" +"Object-oriented programming (OOP) is one of the biggest and most important " +"subjects in all of programming. It is a method of structuring a program by " +"bundling related properties and behavior into individual objects." +msgstr "" +"Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " +"найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " +"шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." diff --git a/src/_locales/uk/LC_MESSAGES/oop/inheritance.po b/src/_locales/uk/LC_MESSAGES/oop/inheritance.po new file mode 100644 index 000000000..d196a6b63 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/inheritance.po @@ -0,0 +1,36 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/inheritance.txt:-1 +msgid "Inheritance in Python" +msgstr "Наслідування в Python" + +#: ../../src/oop/inheritance.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/inheritance.txt:-1 +msgid "python, inheritance, oop, object-oriented programming" +msgstr "python, inheritance, oop, object-oriented programming" + +#: ../../src/oop/inheritance.txt:8 +msgid "Inheritance" +msgstr "Наслідування" diff --git a/src/_locales/uk/LC_MESSAGES/oop.po b/src/_locales/uk/LC_MESSAGES/oop/intro.po similarity index 85% rename from src/_locales/uk/LC_MESSAGES/oop.po rename to src/_locales/uk/LC_MESSAGES/oop/intro.po index 261c9d6b7..3c9da1ba5 100644 --- a/src/_locales/uk/LC_MESSAGES/oop.po +++ b/src/_locales/uk/LC_MESSAGES/oop/intro.po @@ -1,17 +1,13 @@ -# OBJECT-ORIENTED PROGRAMMING TOPICS -# # Copyright (C) 2022, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# # SERHII HORODILOV -# msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:08+0300\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:14+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,53 +16,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/oop/index.txt:-1 -msgid "Object-oriented programming in Python" -msgstr "Об'єктно-орієнтоване програмування" - -#: ../../src/oop/index.txt:-1 ../../src/oop/inheritance.txt:-1 -#: ../../src/oop/intro.txt:-1 ../../src/oop/patterns.txt:-1 -#: ../../src/oop/solid.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/oop/index.txt:-1 -msgid "python, oop, object-oriented programming, index" -msgstr "python, oop, object-oriented programming, index" - -#: ../../src/oop/index.txt:8 -msgid "Object-Oriented Programming" -msgstr "Об'єктно-орієнтоване програмування" - -#: ../../src/oop/index.txt:10 -msgid "" -"Object-oriented programming (OOP) is one of the biggest and most important " -"subjects in all of programming. It is a method of structuring a program by " -"bundling related properties and behavior into individual objects." -msgstr "" -"Об'єктно-орієнтоване програмування (ООП) є однією з найбільших і " -"найважливіших тем у всьому програмуванні. Це метод структуруванняпрограми " -"шляхом об'єднання пов'язаних властивостей і поведінки в окремі об'єкти." - -#: ../../src/oop/inheritance.txt:-1 -msgid "Inheritance in Python" -msgstr "Наслідування в Python" - -#: ../../src/oop/inheritance.txt:-1 -msgid "python, inheritance, oop, object-oriented programming" -msgstr "python, inheritance, oop, object-oriented programming" - -#: ../../src/oop/inheritance.txt:8 -msgid "Inheritance" -msgstr "Наслідування" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" #: ../../src/oop/intro.txt:-1 msgid "Introduction to OOP" msgstr "Введення в ООП" +#: ../../src/oop/intro.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + #: ../../src/oop/intro.txt:-1 msgid "python, intro, introduction, oop, object-oriented programming" msgstr "python, intro, introduction, oop, object-oriented programming" @@ -514,57 +474,3 @@ msgstr "" "Наприклад, у вас можуть бути різні класи, успадковані від базового класу, " "який забезпечує загальний інтерфейс, але кожен похідний клас може " "реалізовувати метод по-своєму." - -#: ../../src/oop/patterns.txt:-1 -msgid "Design patterns" -msgstr "Патерни проектування" - -#: ../../src/oop/patterns.txt:-1 -msgid "python, programming, design, patterns" -msgstr "python, programming, design, patterns" - -#: ../../src/oop/patterns.txt:8 -msgid "Design Patterns" -msgstr "Патерни Проектування" - -#: ../../src/oop/solid.txt:-1 -msgid "SOLID principles" -msgstr "Принципи SOLID" - -#: ../../src/oop/solid.txt:-1 -msgid "" -"python, solid, single, responsibility, open, closed, liskov, substitution, " -"interface, segregation, dependency, inversion, oop, object-oriented " -"programming" -msgstr "" -"python, solid, single, responsibility, open, closed, liskov, substitution, " -"interface, segregation, dependency, inversion, oop, object-oriented " -"programming" - -#: ../../src/oop/solid.txt:10 -msgid "SOLID Principles" -msgstr "Принципи SOLID" - -#~ msgid "" -#~ "Many programming languages has *access modifiers* implemented. The Python " -#~ "has also, but actually no. It's implemented as a convention-level. All " -#~ "class's members starting with underscore are considered to be " -#~ "**protected** members and should not be accessible outside the class " -#~ "instance; on the other hand members starting with two underscores are " -#~ "considered to be **private** members and shouldn't be accessible outside " -#~ "the class instance as well." -#~ msgstr "" -#~ "Багато мов програмування мають реалізовані модифікатори доступу. Python " -#~ "також має, але насправді ні. Він реалізований на рівні конвенції. Усі " -#~ "члени класу, які починаються з підкреслення, вважаються захищеними " -#~ "членами та не повинні бути доступними за межами екземпляр класу; з іншого " -#~ "боку, члени, які починаються з двох символів підкреслення, вважаються " -#~ "приватними членами та не повинні бути доступними за межами екземпляра " -#~ "класу." - -#~ msgid "" -#~ "With the implementation above there are **public** attributes, but you " -#~ "can still access data outside the class, but you definitely shouldn't." -#~ msgstr "" -#~ "З наведеною вище реалізацією є загальнодоступні атрибути, але ви все ще " -#~ "можете отримати доступ до даних за межами класу, але точно не повинні." diff --git a/src/_locales/uk/LC_MESSAGES/oop/patterns.po b/src/_locales/uk/LC_MESSAGES/oop/patterns.po new file mode 100644 index 000000000..2e406dc76 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/patterns.po @@ -0,0 +1,36 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:14+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/patterns.txt:-1 +msgid "Design patterns" +msgstr "Патерни проектування" + +#: ../../src/oop/patterns.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/patterns.txt:-1 +msgid "python, programming, design, patterns" +msgstr "python, programming, design, patterns" + +#: ../../src/oop/patterns.txt:8 +msgid "Design Patterns" +msgstr "Патерни Проектування" diff --git a/src/_locales/uk/LC_MESSAGES/oop/solid.po b/src/_locales/uk/LC_MESSAGES/oop/solid.po new file mode 100644 index 000000000..0ca410450 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/oop/solid.po @@ -0,0 +1,42 @@ +# Copyright (C) 2022, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:13+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/oop/solid.txt:-1 +msgid "SOLID principles" +msgstr "Принципи SOLID" + +#: ../../src/oop/solid.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/oop/solid.txt:-1 +msgid "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" +msgstr "" +"python, solid, single, responsibility, open, closed, liskov, substitution, " +"interface, segregation, dependency, inversion, oop, object-oriented " +"programming" + +#: ../../src/oop/solid.txt:10 +msgid "SOLID Principles" +msgstr "Принципи SOLID" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms.po b/src/_locales/uk/LC_MESSAGES/rdbms.po deleted file mode 100644 index 058d94f57..000000000 --- a/src/_locales/uk/LC_MESSAGES/rdbms.po +++ /dev/null @@ -1,1162 +0,0 @@ -# RELATIONAL DATABASES TRANSLATION. -# -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# -# SERHII HORODILOV -# -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." -"github.io/issues\n" -"POT-Creation-Date: 2023-04-14 01:49+0300\n" -"PO-Revision-Date: 2023-04-14 02:09+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.2.2\n" - -#: ../../src/rdbms/aggregation.txt:-1 -msgid "Data aggregation" -msgstr "Агрегація даних" - -#: ../../src/rdbms/aggregation.txt:-1 ../../src/rdbms/index.txt:-1 -#: ../../src/rdbms/normalization.txt:-1 ../../src/rdbms/relations.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/rdbms/aggregation.txt:-1 -msgid "sql, db, database, data, aggregation, functions" -msgstr "sql, db, database, data, aggregation, functions" - -#: ../../src/rdbms/aggregation.txt:8 -msgid "Data Aggregation" -msgstr "Агрегація даних" - -#: ../../src/rdbms/aggregation.txt:10 -msgid "Here is some dummy data, that will be used as example in this section." -msgstr "" -"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." - -#: ../../src/rdbms/aggregation.txt:12 ../../src/rdbms/normalization.txt:1 -msgid "product" -msgstr "product" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 -msgid "id" -msgstr "id" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:179 -#: ../../src/rdbms/relations.txt:254 ../../src/rdbms/relations.txt:283 -#: ../../src/rdbms/relations.txt:318 ../../src/rdbms/relations.txt:350 -msgid "name" -msgstr "name" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -msgid "price" -msgstr "price" - -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 -#: ../../src/rdbms/products_table.csv:1 -msgid "category" -msgstr "category" - -#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 -#: ../../src/rdbms/products_table.csv:1 -msgid "sold" -msgstr "sold" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 -#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 -msgid "1" -msgstr "1" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Samsung Galaxy" -msgstr "Samsung Galaxy" - -#: ../../src/rdbms/products_table.csv:1 -msgid "100000" -msgstr "100000" - -#: ../../src/rdbms/aggregation.txt:181 ../../src/rdbms/products_table.csv:1 -msgid "Phones" -msgstr "Phones" - -#: ../../src/rdbms/products_table.csv:1 -msgid "500" -msgstr "500" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 -#: ../../src/rdbms/relations.txt:183 -msgid "2" -msgstr "2" - -#: ../../src/rdbms/products_table.csv:1 -msgid "iPhone 13 Pro" -msgstr "iPhone 13 Pro" - -#: ../../src/rdbms/products_table.csv:1 -msgid "120000" -msgstr "120000" - -#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 -#: ../../src/rdbms/products_table.csv:1 -msgid "300" -msgstr "300" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 -msgid "3" -msgstr "3" - -#: ../../src/rdbms/products_table.csv:1 -msgid "MacBook Pro" -msgstr "MacBook Pro" - -#: ../../src/rdbms/products_table.csv:1 -msgid "350000" -msgstr "350000" - -#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 -#: ../../src/rdbms/products_table.csv:1 -msgid "Laptops" -msgstr "Laptops" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -msgid "100" -msgstr "100" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -#: ../../src/rdbms/relations.txt:164 -msgid "4" -msgstr "4" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Lenovo ThinkPad" -msgstr "Lenovo ThinkPad" - -#: ../../src/rdbms/products_table.csv:1 -msgid "150000" -msgstr "150000" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/products_table.csv:1 -msgid "200" -msgstr "200" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:166 -msgid "5" -msgstr "5" - -#: ../../src/rdbms/products_table.csv:1 -msgid "HP Printer" -msgstr "HP Printer" - -#: ../../src/rdbms/products_table.csv:1 -msgid "20000" -msgstr "20000" - -#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/products_table.csv:1 -msgid "Printers" -msgstr "Printers" - -#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/aggregation.txt:181 -#: ../../src/rdbms/products_table.csv:1 -msgid "800" -msgstr "800" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:168 -msgid "6" -msgstr "6" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Dell Monitor" -msgstr "Dell Monitor" - -#: ../../src/rdbms/products_table.csv:1 -msgid "50000" -msgstr "50000" - -#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 -#: ../../src/rdbms/products_table.csv:1 -msgid "Monitors" -msgstr "Monitors" - -#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 -#: ../../src/rdbms/products_table.csv:1 -msgid "400" -msgstr "400" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:170 -msgid "7" -msgstr "7" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Sony Headphones" -msgstr "Sony Headphones" - -#: ../../src/rdbms/products_table.csv:1 -msgid "30000" -msgstr "30000" - -#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 -#: ../../src/rdbms/products_table.csv:1 -msgid "Audio" -msgstr "Audio" - -#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 -#: ../../src/rdbms/products_table.csv:1 -msgid "0" -msgstr "0" - -#: ../../src/rdbms/products_table.csv:1 ../../src/rdbms/relations.txt:172 -msgid "8" -msgstr "8" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Bose Soundbar" -msgstr "Bose Soundbar" - -#: ../../src/rdbms/products_table.csv:1 -msgid "70000" -msgstr "70000" - -#: ../../src/rdbms/products_table.csv:1 -msgid "9" -msgstr "9" - -#: ../../src/rdbms/products_table.csv:1 -msgid "Xbox Series X" -msgstr "Xbox Series X" - -#: ../../src/rdbms/products_table.csv:1 -msgid "60000" -msgstr "60000" - -#: ../../src/rdbms/aggregation.txt:178 ../../src/rdbms/products_table.csv:1 -msgid "Gaming" -msgstr "Gaming" - -#: ../../src/rdbms/products_table.csv:1 -msgid "250" -msgstr "250" - -#: ../../src/rdbms/products_table.csv:1 -msgid "10" -msgstr "10" - -#: ../../src/rdbms/products_table.csv:1 -msgid "PlayStation 5" -msgstr "PlayStation 5" - -#: ../../src/rdbms/products_table.csv:1 -msgid "55000" -msgstr "55000" - -#: ../../src/rdbms/products_table.csv:1 -msgid "350" -msgstr "350" - -#: ../../src/rdbms/aggregation.txt:19 -msgid "The same dataset is available as:" -msgstr "The same dataset is available as:" - -#: ../../src/rdbms/aggregation.txt:21 -msgid ":download:`csv file <./products_table.csv>`" -msgstr ":download:`csv file <./products_table.csv>`" - -#: ../../src/rdbms/aggregation.txt:22 -msgid "" -":download:`postgres dump file `" -msgstr "" -":download:`postgres dump file `" - -#: ../../src/rdbms/aggregation.txt:25 -msgid "Aggregate functions" -msgstr "Агрегуючі функції" - -#: ../../src/rdbms/aggregation.txt:27 -msgid "" -"*Aggregate functions* compute a single result from a set of input values. " -"Various RDBMS implement various built-in aggregate functions. In this " -"section we will review 5 basic functions that are available in all RDBMS." -msgstr "" -"*Агрегатні функції* обчислюють один результат із набору вхідних значень. " -"Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " -"розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." - -#: ../../src/rdbms/aggregation.txt:34 -msgid "Count" -msgstr "Підрахунок" - -#: ../../src/rdbms/aggregation.txt:36 -msgid "" -"The ``count(field)`` function returns a count of the number of times that " -"``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " -"arguments) returns the total number of rows in the group." -msgstr "" -"Функція ``count(field)`` повертає кількість разів, коли ``field`` не є " -"``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " -"кількість рядків у групі." - -#: ../../src/rdbms/aggregation.txt:52 -msgid "Maximum value" -msgstr "Максимальне значення" - -#: ../../src/rdbms/aggregation.txt:54 -msgid "" -"The ``max()`` aggregate function returns the maximum value of all values in " -"the group. The maximum value is the value that would be returned last in an " -"ORDER BY on the same column. Aggregate function returns ``NULL`` if and only " -"if there are no non-NULL values in the group." -msgstr "" -"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень у " -"групі. Максимальне значення - це значення, яке буде повернуто останнім у " -"ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " -"і лише якщо в групі немає значень, відмінних від NULL." - -#: ../../src/rdbms/aggregation.txt:71 -msgid "Minimum value" -msgstr "Мінімальне значення" - -#: ../../src/rdbms/aggregation.txt:73 -msgid "" -"The ``min()`` aggregate function returns the minimum non-NULL value of all " -"values in the group. The minimum value is the first non-NULL value that " -"would appear in an ORDER BY of the column. Aggregate function returns " -"``NULL`` if and only if there are no non-NULL values in the group." -msgstr "" -"Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " -"значень у групі. Мінімальне значення - це перше значення не NULL, яке " -"з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " -"якщо в групі немає значень, відмінних від NULL." - -#: ../../src/rdbms/aggregation.txt:90 -msgid "Average value" -msgstr "Середнє значення" - -#: ../../src/rdbms/aggregation.txt:92 -msgid "" -"The ``avg()`` function returns the average value of all non-NULL inputs " -"within a group. String and BLOB values that do not look like numbers are " -"interpreted as 0. The result is always a floating point value whenever there " -"is at least one non-NULL input even if all inputs are integers. The result " -"is ``NULL`` if and only if there are no non-NULL inputs." -msgstr "" -"Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " -"групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " -"як 0. Результат завжди значення з плаваючою комою щоразу, коли є принаймні " -"один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " -"є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." - -#: ../../src/rdbms/aggregation.txt:110 -msgid "Sum of values" -msgstr "Сума значень" - -#: ../../src/rdbms/aggregation.txt:112 -msgid "" -"The ``sum()`` aggregate functions return the sum of all non-NULL values in " -"the group. If there are no non-NULL input rows then function returns " -"``NULL``." -msgstr "" -"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " -"NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." - -#: ../../src/rdbms/aggregation.txt:117 -msgid "" -"NULL is not normally a helpful result for the sum of no rows but the SQL " -"standard requires it." -msgstr "" -"NULL зазвичай не є корисним результатом для суми відсутності рядків, але " -"стандарт SQL вимагає цього." - -#: ../../src/rdbms/aggregation.txt:120 -msgid "" -"SQLite implements ``total`` aggregate function, that is similar to ``sum``, " -"but returns ``0.0`` (always floating point) if there are no non-NULL input " -"rows." -msgstr "" -"SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " -"повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " -"відмінних від NULL." - -#: ../../src/rdbms/aggregation.txt:135 -msgid "Grouping data" -msgstr "Групування даних" - -#: ../../src/rdbms/aggregation.txt:137 -msgid "" -"Getting some aggregated values is not very helpful itself. Most cases " -"require to group outputs in some specific manner." -msgstr "" -"Отримання деяких агрегованих значень не є дуже корисним саме по собі. " -"Більшість випадків вимагають згрупувати виходи певним чином." - -#: ../../src/rdbms/aggregation.txt:140 -msgid "" -"For example, if the task is to count number of registered categories it is " -"simple to solve as:" -msgstr "" -"Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " -"категорій, його просто вирішити так:" - -#: ../../src/rdbms/aggregation.txt:153 -msgid "" -"But in case, the task is to count **sold** items for each category, this " -"becomes impossible to solve without grouping items. ``GROUP BY`` clause " -"provides the ability to group rows based on some field(s) values." -msgstr "" -"Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " -"кожної категорії, це стає неможливим вирішити без групування товарів. Пункт " -"``GROUP BY`` надає можливість групувати рядки на основі певного значення " -"поля(ів)." - -#: ../../src/rdbms/aggregation.txt:157 -msgid "General syntax is:" -msgstr "Загальний синтаксис:" - -#: ../../src/rdbms/aggregation.txt:178 -msgid "600" -msgstr "600" - -#: ../../src/rdbms/aggregation.txt:184 -msgid "" -"If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " -"clause, then each of the expressions specified as part of the GROUP BY " -"clause is evaluated for each row of the dataset according to the processing " -"rules stated below for ORDER BY expressions. Each row is then assigned to a " -"\"group\" based on the results; rows for which the results of evaluating the " -"GROUP BY expressions are the same get assigned to the same group. For the " -"purposes of grouping rows, ``NULL`` values are considered equal. The usual " -"rules for selecting a collation sequence with which to compare text values " -"apply when evaluating expressions in a GROUP BY clause. The expressions in " -"the GROUP BY clause do not have to be expressions that appear in the result. " -"The expressions in a GROUP BY clause may not be aggregate expressions." -msgstr "" -"Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " -"тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " -"для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " -"для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " -"результатів; рядки, для яких результати оцінювання виразів GROUP BY однакові " -"призначаються до однієї групи. Для цілей групування рядків значення ``NULL`` " -"вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " -"якою порівнюються текстові значення, застосовуються під час оцінювання " -"виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " -"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " -"можуть бути сукупними виразами." - -#: ../../src/rdbms/aggregation.txt:197 -msgid "HAVING clause" -msgstr "Вираз HAVING" - -#: ../../src/rdbms/aggregation.txt:199 -msgid "" -"But what, if the task is to filter categories, that have less than 500 sold " -"items in it? ``WHERE`` clause will be useless, cause it's evaluated before " -"grouping output. In other words, only rows that suite WHERE filter will be " -"selected." -msgstr "" -"Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " -"500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " -"перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " -"вибрано фільтр." - -#: ../../src/rdbms/aggregation.txt:222 -msgid "" -"If a ``HAVING`` clause is specified, it is evaluated once for each group of " -"rows as a boolean expression. If the result of evaluating the HAVING clause " -"is false, the group is discarded. If the HAVING clause is an aggregate " -"expression, it is evaluated across all rows in the group." -msgstr "" -"Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " -"групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " -"хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " -"обчислюється в усіх рядках у групі." - -#: ../../src/rdbms/aggregation.txt:227 -msgid "" -"If a HAVING clause is a non-aggregate expression, it is evaluated with " -"respect to an arbitrarily selected row from the group. The HAVING expression " -"may refer to values, even aggregate functions, that are not in the result." -msgstr "" -"Якщо речення HAVING є неагрегатним виразом, воно оцінюється щодо довільно " -"вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " -"агрегатні функції, яких немає в результат." - -#: ../../src/rdbms/index.txt:-1 -msgid "Relational databases" -msgstr "Реляційні бази даних" - -#: ../../src/rdbms/index.txt:-1 -msgid "sql, db, database, intro, introduction, index" -msgstr "sql, db, database, intro, introduction, index" - -#: ../../src/rdbms/index.txt:8 -msgid "Relational Database" -msgstr "Реляційні бази даних" - -#: ../../src/rdbms/index.txt:10 -msgid "" -":abbr:`RDBMS (Relational Database Management System)` is a type of software " -"that helps users to create, update, manage, and access relational databases. " -"Relational databases organize data into tables, which consist of rows and " -"columns. Each column represents a specific attribute of the data, while each " -"row represents a specific instance of that data." -msgstr "" -":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " -"забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " -"отримувати доступ до реляційних баз даних. Реляційні бази даних " -"організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " -"стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " -"конкретний екземпляр цих даних." - -#: ../../src/rdbms/index.txt:16 -msgid "" -"RDBMS allow users to interact with the database using :abbr:`SQL (Structured " -"Query Language)`, which is a standard language for managing and manipulating " -"relational databases. SQL allows users to perform a variety of operations on " -"the database, including adding, updating, and deleting data, as well as " -"retrieving data based on specific criteria." -msgstr "" -"СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " -"(Structured Query Language)`, яка є стандартною мовою для керування і " -"маніпулювання реляційними базами даних. SQL дозволяє користувачам виконувати " -"різноманітність операцій з базою даних, включаючи додавання, оновлення та " -"видалення даних, а також отримання даних на основі певних критеріїв." - -#: ../../src/rdbms/index.txt:22 -msgid "" -"RDBMS also provide a range of features to ensure data integrity, such as " -"enforcing data constraints, supporting transactions, and providing backup " -"and recovery capabilities. Additionally, RDBMS systems often provide tools " -"for managing the database, such as user interfaces for creating and " -"modifying tables and views, and monitoring tools for optimizing database " -"performance." -msgstr "" -"СУБД також надає низку функцій для забезпечення цілісності даних, таких як " -"дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " -"резервного копіюванняі відновлення. Крім того, системи РСУБД часто надають " -"інструменти для керування базою даних, такі як інтерфейси користувача для " -"створення та модифікації таблиць і представлень, а також інструменти " -"моніторингу для оптимізації продуктивності бази даних." - -#: ../../src/rdbms/normalization.txt:-1 -msgid "Database normalization" -msgstr "Нормалізація баз даних" - -#: ../../src/rdbms/normalization.txt:-1 -msgid "sql, db, database, normalization" -msgstr "sql, db, database, normalization" - -#: ../../src/rdbms/normalization.txt:8 -msgid "Database Normalization" -msgstr "Нормалізація баз даних" - -#: ../../src/rdbms/normalization.txt:10 -msgid "" -"Normalization is a process of organizing data in a database so that it is " -"free from redundancy and dependency. It helps to eliminate data " -"inconsistencies and anomalies, thereby improving data integrity. " -"Normalization is a set of rules or guidelines to design a database schema in " -"such a way that it avoids data duplication, data redundancy, and data " -"inconsistency." -msgstr "" -"Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " -"вона була вільна від надлишковості та залежності. Це допомагає усунути " -"невідповідності та аномалії даних, тим самим покращуючи цілісність даних. " -"Нормалізація - це набір правил або вказівки щодо розробки схеми бази даних " -"таким чином, щоб уникнути дублювання даних, надмірності даних і " -"неузгодженості даних." - -#: ../../src/rdbms/normalization.txt:16 -msgid "" -"There are several normal forms, each building on the previous one, which " -"guide us in the normalization process. The most commonly used normal forms " -"are:" -msgstr "" -"Існує кілька нормальних форм, кожна з яких будується на попередній, які " -"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" - -#: ../../src/rdbms/normalization.txt:19 -msgid "" -"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " -"values. There should be no repeating groups or arrays of data in a table." -msgstr "" -"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " -"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " -"масивів даних." - -#: ../../src/rdbms/normalization.txt:22 -msgid "" -"**Second Normal Form (2NF)**: Each non-key column should be functionally " -"dependent on the entire primary key. In other words, every column in a table " -"should be related to the primary key and not dependent on any other non-key " -"columns." -msgstr "" -"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " -"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " -"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " -"інших неключових стовпців." - -#: ../../src/rdbms/normalization.txt:26 -msgid "" -"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " -"the primary key and not on any other non-key columns. This eliminates " -"transitive dependencies." -msgstr "" -"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " -"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " -"транзитивні залежності." - -#: ../../src/rdbms/normalization.txt:30 -msgid "" -"Normalization reduces data redundancy and dependency, making the database " -"more efficient, flexible, and scalable. It also helps in maintaining data " -"consistency and accuracy, and ensures that updates and deletions are " -"properly handled." -msgstr "" -"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " -"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " -"узгодженість і точність даних, а також гарантує належну обробку оновлень і " -"видалень." - -#: ../../src/rdbms/normalization.txt:36 -msgid "First normal form (1NF)" -msgstr "Перша нормальна форма (1NF)" - -#: ../../src/rdbms/normalization.txt:38 -msgid "" -"It's easier to understand normalization via examples. Let's start with some " -"dummy orders data." -msgstr "" -"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " -"про замовлення." - -#: ../../src/rdbms/normalization.txt:41 -msgid "Initial data" -msgstr "Початкові дані" - -#: ../../src/rdbms/normalization.txt:1 -msgid "order" -msgstr "order" - -#: ../../src/rdbms/normalization.txt:1 -msgid "customer" -msgstr "customer" - -#: ../../src/rdbms/normalization.txt:1 -msgid "quantity" -msgstr "quantity" - -#: ../../src/rdbms/normalization.txt:1 -msgid "total" -msgstr "total" - -#: ../../src/rdbms/normalization.txt:1 ../../src/rdbms/relations.txt:185 -#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:368 -msgid "John Doe" -msgstr "John Doe" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(Apple, Orange)" -msgstr "(Apple, Orange)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(2, 3)" -msgstr "(2, 3)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(100, 50)" -msgstr "(100, 50)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "(200, 150)" -msgstr "(200, 150)" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Jane Smith" -msgstr "Jane Smith" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Banana" -msgstr "Banana" - -#: ../../src/rdbms/normalization.txt:1 -msgid "25" -msgstr "25" - -#: ../../src/rdbms/normalization.txt:48 -msgid "" -"This table violates 1NF, since its columns contain multiple values. To bring " -"this to 1NF all data within the table are to be atomic." -msgstr "" -"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " -"привести це до 1NF, усі дані в таблиці мають бути атомарними." - -#: ../../src/rdbms/normalization.txt:51 -msgid "1NF applied" -msgstr "Застосовано 1NF" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Apple" -msgstr "Apple" - -#: ../../src/rdbms/normalization.txt:1 -msgid "Orange" -msgstr "Orange" - -#: ../../src/rdbms/normalization.txt:1 -msgid "50" -msgstr "50" - -#: ../../src/rdbms/normalization.txt:1 -msgid "150" -msgstr "150" - -#: ../../src/rdbms/normalization.txt:59 -msgid "From now each peace of data is represented as atomic value." -msgstr "Відтепер кожна частина даних представлена як атомарне значення." - -#: ../../src/rdbms/normalization.txt:62 -msgid "Second normal form (2NF)" -msgstr "Друга нормальна форма (2NF)" - -#: ../../src/rdbms/normalization.txt:64 -msgid "" -"The table above is in 1NF, but ``item price`` is dependent on the *item* " -"entity itself and have low cohesion to *orders*. To bring it into 2NF a " -"dedicated table to store information about items themselves is to be " -"created. After that ``order`` and ``product`` table are connected (related) " -"to each other via a foreign key." -msgstr "" -"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " -"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " -"потрібно створити окрему таблицю для зберігання інформації про самі товари. " -"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " -"одною за допомогою зовнішнього ключа." - -#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 -msgid "``order`` table" -msgstr "таблиця ``order``" - -#: ../../src/rdbms/normalization.txt:1 -msgid "product_id" -msgstr "product_id" - -#: ../../src/rdbms/normalization.txt:78 -msgid "``product`` table" -msgstr "таблиця ``product``" - -#: ../../src/rdbms/normalization.txt:103 -msgid "" -"``total`` field is also removed, since now it can be calculated as product " -"of ``product.price`` and ``order.quantity``." -msgstr "" -"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " -"добуток ``product.price`` і ``order.quantity``." - -#: ../../src/rdbms/normalization.txt:107 -msgid "Third normal form (3NF)" -msgstr "3-тя нормальна форма (3NF)" - -#: ../../src/rdbms/normalization.txt:109 -msgid "" -"At last it's time to remove a transitive functional dependency. Customer's " -"name is not actually dependent on a product, but on a person, who places an " -"order." -msgstr "" -"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " -"клієнта насправді залежить не від продукту, а від особи, яка робить " -"замовлення." - -#: ../../src/rdbms/normalization.txt:1 -msgid "customer_id" -msgstr "customer_id" - -#: ../../src/rdbms/normalization.txt:120 -msgid "``customer`` table" -msgstr "таблиця ``customer``" - -#: ../../src/rdbms/relations.txt:-1 -msgid "This document describes the database relationships" -msgstr "Цей документ описує відносини в базах даних" - -#: ../../src/rdbms/relations.txt:-1 -msgid "sql, db, database, relationship" -msgstr "sql, db, database, relationship" - -#: ../../src/rdbms/relations.txt:8 -msgid "Data Relationships" -msgstr "Зв'язки даних" - -#: ../../src/rdbms/relations.txt:10 -msgid "It's time to talk about **data relations**." -msgstr "Настав час поговорити про **відносини даних**." - -#: ../../src/rdbms/relations.txt:12 -msgid "" -"For example your database contains two tables: ``weather`` and ``city``. The " -"diagram below demonstrates the overall data structure:" -msgstr "" -"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " -"Діаграма нижче демонструє загальну структуру даних:" - -#: ../../src/rdbms/relations.txt:30 -msgid "" -"Consider the following problem: you want to make sure no one can insert a " -"record into ``weather`` without a matching entry in ``city`` table. This is " -"called maintaining the *referential integrity* of your data. In simplistic " -"database systems this would be implemented (if at all) by first looking at " -"the cities table to check if a matching record exists, and then inserting or " -"rejecting the new weather records. This approach has a number of problems " -"and is very inconvenient." -msgstr "" -"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " -"запис до ``weather`` без відповідного запису в ``city`` таблиці. " -"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " -"системах баз даних це було б реалізовано (якщо взагалі) спочатку " -"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " -"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " -"і дуже незручно." - -#: ../../src/rdbms/relations.txt:52 -msgid "" -"This declaration creates a relationship between two (or even more) tables." -msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." - -#: ../../src/rdbms/relations.txt:55 -msgid "Foreign key (FK)" -msgstr "Зовнішній ключ (FK)" - -#: ../../src/rdbms/relations.txt:57 -msgid "" -"So far, you have knowledge about **primary** keys. The **foreign** key is a " -"column, that *references* some another table. In common, it's a reference to " -"another table's PK; but there is no limitation of this kind, any column can " -"be referenced by another one. FKs handle data integrity only, it's not " -"required for FK to be non-NULL value." -msgstr "" -"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " -"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " -"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " -"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " -"відмінним від NULL." - -#: ../../src/rdbms/relations.txt:63 -msgid "" -"The relation's properties are described by CONSTRAINTS and the database's " -"structure." -msgstr "" -"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." - -#: ../../src/rdbms/relations.txt:66 -msgid "" -"For example, modifying declaration with ``NOT NULL`` constraint grants that " -"each record within a table has a matching one entity in another table." -msgstr "" -"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " -"запис у таблиці має відповідну сутність в іншій таблиці." - -#: ../../src/rdbms/relations.txt:76 -msgid "This brings us to various relationship models." -msgstr "Це підводить нас до різних моделей відносин." - -#: ../../src/rdbms/relations.txt:79 -msgid "One-to-many relationship (1-to-N)" -msgstr "Зв'язок один-до-багатьох (1-до-N)" - -#: ../../src/rdbms/relations.txt:81 -msgid "This is the most common relationship." -msgstr "Це найпоширеніший зв'язок." - -#: ../../src/rdbms/relations.txt:83 -msgid "" -"For the example above there are no limitations on temperature measurements " -"in a specified city. So, a single city may has 0 or N related records in " -"``weather`` table. But each weather record is related to the only one city." -msgstr "" -"Для наведеного вище прикладу немає обмежень на вимірювання температури у " -"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " -"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." - -#: ../../src/rdbms/relations.txt:87 -msgid "" -"Another example is employees and office buildings they work in. Some big " -"company may have multiple offices and employee across the globe. Multiple " -"employees can be present in a single office building at a time. But each " -"employee can be physically located only in a single office at a time." -msgstr "" -"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " -"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " -"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " -"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " -"одночасно." - -#: ../../src/rdbms/relations.txt:110 -msgid "One-to-one relationship (1-to-1)" -msgstr "One-to-one relationship (1-to-1)" - -#: ../../src/rdbms/relations.txt:112 -msgid "" -"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " -"and only one matching record. Back to the example with employees. Multiple " -"workstations (personal computers) are located in each office building. The " -"only one person can occupy the only one work station at a time." -msgstr "" -"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " -"наявність лише одного відповідного запису. Повернемося до прикладу зі " -"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " -"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " -"одну робочу станцію одночасно." - -#: ../../src/rdbms/relations.txt:123 -msgid "Many-to-many relationship (N-to-N)" -msgstr "Зв'язок багато-до-багатьох (N-до-N)" - -#: ../../src/rdbms/relations.txt:125 -msgid "" -"These relationships require additional table. A good example may be a " -"*project role*. There are many of them in a production team. And some " -"employees may be assigned to the same role (e.g. developers, testers etc.). " -"But also a single person can be a developer and tester at a time." -msgstr "" -"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " -"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " -"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " -"також одна людина може бути розробником і тестувальником одночасно." - -#: ../../src/rdbms/relations.txt:138 -msgid "Joining data" -msgstr "Об'єднання даних" - -#: ../../src/rdbms/relations.txt:140 -msgid "" -"``JOIN`` is used to *join* data fetched from multiple related tables. To " -"build a valid query you are to set the tables to join and parameter to use " -"for this operation." -msgstr "" -"``JOIN`` використовується для об'єднання даних, отриманих з кількох " -"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " -"таблиці для об'єднання та параметр, який використовується для цієї операції." - -#: ../../src/rdbms/relations.txt:144 -msgid "Common syntax is:" -msgstr "Загальний синтаксис:" - -#: ../../src/rdbms/relations.txt:150 -msgid "" -"There are various join types available. Here are is some dummy data to " -"demonstrate their purpose." -msgstr "" -"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " -"їх призначення." - -#: ../../src/rdbms/relations.txt:153 -msgid "poem" -msgstr "poem" - -#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 -#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 -#: ../../src/rdbms/relations.txt:350 -msgid "title" -msgstr "title" - -#: ../../src/rdbms/relations.txt:156 -msgid "author_id" -msgstr "author_id" - -#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 -#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 -#: ../../src/rdbms/relations.txt:352 -msgid "On the Field of Battle" -msgstr "On the Field of Battle" - -#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 -#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 -#: ../../src/rdbms/relations.txt:354 -msgid "Moses" -msgstr "Moses" - -#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 -#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 -#: ../../src/rdbms/relations.txt:356 -msgid "The Forest Song" -msgstr "The Forest Song" - -#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 -#: ../../src/rdbms/relations.txt:358 -msgid "In the Catacombs" -msgstr "In the Catacombs" - -#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 -#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 -#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 -#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 -#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 -#: ../../src/rdbms/relations.txt:368 -msgid "null" -msgstr "null" - -#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 -#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 -#: ../../src/rdbms/relations.txt:360 -msgid "The Singing Stones" -msgstr "The Singing Stones" - -#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 -#: ../../src/rdbms/relations.txt:362 -msgid "Ancient Fairy Tales" -msgstr "Ancient Fairy Tales" - -#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 -#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 -#: ../../src/rdbms/relations.txt:364 -msgid "My Thoughts" -msgstr "My Thoughts" - -#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 -#: ../../src/rdbms/relations.txt:366 -msgid "To Shevchenko" -msgstr "To Shevchenko" - -#: ../../src/rdbms/relations.txt:176 -msgid "author" -msgstr "author" - -#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 -#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 -#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 -#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 -#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 -#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 -#: ../../src/rdbms/relations.txt:360 -msgid "Larysa Kosach" -msgstr "Larysa Kosach" - -#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 -#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 -#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 -#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 -#: ../../src/rdbms/relations.txt:364 -msgid "Ivan Franko" -msgstr "Ivan Franko" - -#: ../../src/rdbms/relations.txt:217 -msgid "Join types" -msgstr "Join types" - -#: ../../src/rdbms/relations.txt -msgid "Cross join" -msgstr "Cross join" - -#: ../../src/rdbms/relations.txt:225 -msgid "" -"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " -"product), the joined table will contain a row consisting of all columns in " -"T1 followed by all columns in T2. If the tables have N and M rows " -"respectively, the joined table will have N * M rows." -msgstr "" -"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " -"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " -"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " -"відповідно, об’єднана таблиця матиме N * M рядків." - -#: ../../src/rdbms/relations.txt -msgid "Qualified joins" -msgstr "Qualified joins" - -#: ../../src/rdbms/relations.txt:236 -msgid "" -"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " -"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." -msgstr "" -"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " -"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." - -#: ../../src/rdbms/relations.txt:241 -msgid "INNER JOIN" -msgstr "INNER JOIN" - -#: ../../src/rdbms/relations.txt:243 -msgid "" -"For each row R1 of T1, the joined table has a row for each row in T2 that " -"satisfies the join condition with R1." -msgstr "" -"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " -"який задовольняє умову об'єднання з R1." - -#: ../../src/rdbms/relations.txt:246 -msgid "Inner join" -msgstr "Inner join" - -#: ../../src/rdbms/relations.txt:268 -msgid "LEFT OUTER JOIN" -msgstr "LEFT OUTER JOIN" - -#: ../../src/rdbms/relations.txt:270 -msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not " -"satisfy the join condition with any row in T2, a joined row is added with " -"null values in columns of T2. Thus, the joined table always has at least one " -"row for each row in T1." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " -"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " -"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." - -#: ../../src/rdbms/relations.txt:275 -msgid "Left join" -msgstr "Left join" - -#: ../../src/rdbms/relations.txt:303 -msgid "RIGHT OUTER JOIN" -msgstr "RIGHT OUTER JOIN" - -#: ../../src/rdbms/relations.txt:305 -msgid "" -"First, an inner join is performed. Then, for each row in T2 that does not " -"satisfy the join condition with any row in T1, a joined row is added with " -"null values in columns of T1. This is the converse of a left join: the " -"result table will always have a row for each row in T2." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " -"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " -"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " -"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " -"в T2." - -#: ../../src/rdbms/relations.txt:310 -msgid "Right join" -msgstr "Right join" - -#: ../../src/rdbms/relations.txt:334 -msgid "FULL OUTER JOIN" -msgstr "FULL OUTER JOIN" - -#: ../../src/rdbms/relations.txt:336 -msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not " -"satisfy the join condition with any row in T2, a joined row is added with " -"null values in columns of T2. Also, for each row of T2 that does not satisfy " -"the join condition with any row in T1, a joined row with null values in the " -"columns of T1 is added." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " -"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " -"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " -"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." - -#: ../../src/rdbms/relations.txt:342 -msgid "Full join" -msgstr "Full join" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po b/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po new file mode 100644 index 000000000..6fb3daa05 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po @@ -0,0 +1,479 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "Data aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/aggregation.txt:-1 +msgid "sql, db, database, data, aggregation, functions" +msgstr "sql, db, database, data, aggregation, functions" + +#: ../../src/rdbms/aggregation.txt:8 +msgid "Data Aggregation" +msgstr "Агрегація даних" + +#: ../../src/rdbms/aggregation.txt:10 +msgid "Here is some dummy data, that will be used as example in this section." +msgstr "" +"Ось деякі фіктивні дані, які будуть використані як приклад у цьому розділі." + +#: ../../src/rdbms/aggregation.txt:12 +msgid "product" +msgstr "product" + +#: ../../src/rdbms/products_table.csv:1 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/products_table.csv:1 +msgid "name" +msgstr "name" + +#: ../../src/rdbms/products_table.csv:1 +msgid "price" +msgstr "price" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 +#: ../../src/rdbms/products_table.csv:1 +msgid "category" +msgstr "category" + +#: ../../src/rdbms/aggregation.txt:174 ../../src/rdbms/aggregation.txt:215 +#: ../../src/rdbms/products_table.csv:1 +msgid "sold" +msgstr "sold" + +#: ../../src/rdbms/products_table.csv:1 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Samsung Galaxy" +msgstr "Samsung Galaxy" + +#: ../../src/rdbms/products_table.csv:1 +msgid "100000" +msgstr "100000" + +#: ../../src/rdbms/aggregation.txt:181 ../../src/rdbms/products_table.csv:1 +msgid "Phones" +msgstr "Phones" + +#: ../../src/rdbms/products_table.csv:1 +msgid "500" +msgstr "500" + +#: ../../src/rdbms/products_table.csv:1 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/products_table.csv:1 +msgid "iPhone 13 Pro" +msgstr "iPhone 13 Pro" + +#: ../../src/rdbms/products_table.csv:1 +msgid "120000" +msgstr "120000" + +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 +#: ../../src/rdbms/products_table.csv:1 +msgid "300" +msgstr "300" + +#: ../../src/rdbms/products_table.csv:1 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/products_table.csv:1 +msgid "MacBook Pro" +msgstr "MacBook Pro" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350000" +msgstr "350000" + +#: ../../src/rdbms/aggregation.txt:180 ../../src/rdbms/aggregation.txt:219 +#: ../../src/rdbms/products_table.csv:1 +msgid "Laptops" +msgstr "Laptops" + +#: ../../src/rdbms/products_table.csv:1 +msgid "100" +msgstr "100" + +#: ../../src/rdbms/products_table.csv:1 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Lenovo ThinkPad" +msgstr "Lenovo ThinkPad" + +#: ../../src/rdbms/products_table.csv:1 +msgid "150000" +msgstr "150000" + +#: ../../src/rdbms/products_table.csv:1 +msgid "200" +msgstr "200" + +#: ../../src/rdbms/products_table.csv:1 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/products_table.csv:1 +msgid "HP Printer" +msgstr "HP Printer" + +#: ../../src/rdbms/products_table.csv:1 +msgid "20000" +msgstr "20000" + +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/products_table.csv:1 +msgid "Printers" +msgstr "Printers" + +#: ../../src/rdbms/aggregation.txt:177 ../../src/rdbms/aggregation.txt:181 +#: ../../src/rdbms/products_table.csv:1 +msgid "800" +msgstr "800" + +#: ../../src/rdbms/products_table.csv:1 +msgid "6" +msgstr "6" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Dell Monitor" +msgstr "Dell Monitor" + +#: ../../src/rdbms/products_table.csv:1 +msgid "50000" +msgstr "50000" + +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 +#: ../../src/rdbms/products_table.csv:1 +msgid "Monitors" +msgstr "Monitors" + +#: ../../src/rdbms/aggregation.txt:179 ../../src/rdbms/aggregation.txt:218 +#: ../../src/rdbms/products_table.csv:1 +msgid "400" +msgstr "400" + +#: ../../src/rdbms/products_table.csv:1 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Sony Headphones" +msgstr "Sony Headphones" + +#: ../../src/rdbms/products_table.csv:1 +msgid "30000" +msgstr "30000" + +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 +#: ../../src/rdbms/products_table.csv:1 +msgid "Audio" +msgstr "Audio" + +#: ../../src/rdbms/aggregation.txt:176 ../../src/rdbms/aggregation.txt:217 +#: ../../src/rdbms/products_table.csv:1 +msgid "0" +msgstr "0" + +#: ../../src/rdbms/products_table.csv:1 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Bose Soundbar" +msgstr "Bose Soundbar" + +#: ../../src/rdbms/products_table.csv:1 +msgid "70000" +msgstr "70000" + +#: ../../src/rdbms/products_table.csv:1 +msgid "9" +msgstr "9" + +#: ../../src/rdbms/products_table.csv:1 +msgid "Xbox Series X" +msgstr "Xbox Series X" + +#: ../../src/rdbms/products_table.csv:1 +msgid "60000" +msgstr "60000" + +#: ../../src/rdbms/aggregation.txt:178 ../../src/rdbms/products_table.csv:1 +msgid "Gaming" +msgstr "Gaming" + +#: ../../src/rdbms/products_table.csv:1 +msgid "250" +msgstr "250" + +#: ../../src/rdbms/products_table.csv:1 +msgid "10" +msgstr "10" + +#: ../../src/rdbms/products_table.csv:1 +msgid "PlayStation 5" +msgstr "PlayStation 5" + +#: ../../src/rdbms/products_table.csv:1 +msgid "55000" +msgstr "55000" + +#: ../../src/rdbms/products_table.csv:1 +msgid "350" +msgstr "350" + +#: ../../src/rdbms/aggregation.txt:19 +msgid "The same dataset is available as:" +msgstr "The same dataset is available as:" + +#: ../../src/rdbms/aggregation.txt:21 +msgid ":download:`csv file <./products_table.csv>`" +msgstr ":download:`csv file <./products_table.csv>`" + +#: ../../src/rdbms/aggregation.txt:22 +msgid "" +":download:`postgres dump file `" +msgstr "" +":download:`postgres dump file `" + +#: ../../src/rdbms/aggregation.txt:25 +msgid "Aggregate functions" +msgstr "Агрегуючі функції" + +#: ../../src/rdbms/aggregation.txt:27 +msgid "" +"*Aggregate functions* compute a single result from a set of input values. " +"Various RDBMS implement various built-in aggregate functions. In this " +"section we will review 5 basic functions that are available in all RDBMS." +msgstr "" +"*Агрегатні функції* обчислюють один результат із набору вхідних значень. " +"Різні RDBMS реалізують різноманітні вбудовані агрегатні функції. У цьому " +"розділі ми розглянемо 5 основних функцій, доступних у всіх RDBMS." + +#: ../../src/rdbms/aggregation.txt:34 +msgid "Count" +msgstr "Підрахунок" + +#: ../../src/rdbms/aggregation.txt:36 +msgid "" +"The ``count(field)`` function returns a count of the number of times that " +"``field`` is not ``NULL`` in a group. The ``count(*)`` function (with no " +"arguments) returns the total number of rows in the group." +msgstr "" +"Функція ``count(field)`` повертає кількість разів, коли ``field`` не є " +"``NULL`` у групі. Функція ``count()`` (без аргументів) повертає загальну " +"кількість рядків у групі." + +#: ../../src/rdbms/aggregation.txt:52 +msgid "Maximum value" +msgstr "Максимальне значення" + +#: ../../src/rdbms/aggregation.txt:54 +msgid "" +"The ``max()`` aggregate function returns the maximum value of all values in " +"the group. The maximum value is the value that would be returned last in an " +"ORDER BY on the same column. Aggregate function returns ``NULL`` if and only " +"if there are no non-NULL values in the group." +msgstr "" +"Агрегатна функція ``max()`` повертає максимальне значення з усіх значень у " +"групі. Максимальне значення - це значення, яке буде повернуто останнім у " +"ORDER BY для того самого стовпця. Агрегатна функція повертає ` `NULL``, якщо " +"і лише якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:71 +msgid "Minimum value" +msgstr "Мінімальне значення" + +#: ../../src/rdbms/aggregation.txt:73 +msgid "" +"The ``min()`` aggregate function returns the minimum non-NULL value of all " +"values in the group. The minimum value is the first non-NULL value that " +"would appear in an ORDER BY of the column. Aggregate function returns " +"``NULL`` if and only if there are no non-NULL values in the group." +msgstr "" +"Агрегатна функція ``min()`` повертає мінімальне значення не NULL для всіх " +"значень у групі. Мінімальне значення - це перше значення не NULL, яке " +"з'явиться в ORDER BY з Агрегатна функція повертає ``NULL`` тоді і тільки " +"якщо в групі немає значень, відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:90 +msgid "Average value" +msgstr "Середнє значення" + +#: ../../src/rdbms/aggregation.txt:92 +msgid "" +"The ``avg()`` function returns the average value of all non-NULL inputs " +"within a group. String and BLOB values that do not look like numbers are " +"interpreted as 0. The result is always a floating point value whenever there " +"is at least one non-NULL input even if all inputs are integers. The result " +"is ``NULL`` if and only if there are no non-NULL inputs." +msgstr "" +"Функція ``avg()`` повертає середнє значення всіх не-NULL вхідних даних у " +"групі. Рядкові та BLOB-значення, які не виглядають як числа, інтерпретуються " +"як 0. Результат завжди значення з плаваючою комою щоразу, коли є принаймні " +"один не-NULL-вхід, навіть якщо всі вхідні дані є цілими числами. Результатом " +"є ``NULL`` тоді і тільки якщо немає не-NULL-вхідних даних." + +#: ../../src/rdbms/aggregation.txt:110 +msgid "Sum of values" +msgstr "Сума значень" + +#: ../../src/rdbms/aggregation.txt:112 +msgid "" +"The ``sum()`` aggregate functions return the sum of all non-NULL values in " +"the group. If there are no non-NULL input rows then function returns " +"``NULL``." +msgstr "" +"Агрегатні функції ``sum()`` повертають суму всіх значень, відмінних від " +"NULL, у групі. Якщо вхідних рядків немає, функція повертає ``NULL``." + +#: ../../src/rdbms/aggregation.txt:117 +msgid "" +"NULL is not normally a helpful result for the sum of no rows but the SQL " +"standard requires it." +msgstr "" +"NULL зазвичай не є корисним результатом для суми відсутності рядків, але " +"стандарт SQL вимагає цього." + +#: ../../src/rdbms/aggregation.txt:120 +msgid "" +"SQLite implements ``total`` aggregate function, that is similar to ``sum``, " +"but returns ``0.0`` (always floating point) if there are no non-NULL input " +"rows." +msgstr "" +"SQLite реалізує агрегатну функцію ``total``, подібну до ``sum``, але " +"повертає ``0.0`` (завжди з плаваючою точкою), якщо немає вхідних рядків, " +"відмінних від NULL." + +#: ../../src/rdbms/aggregation.txt:135 +msgid "Grouping data" +msgstr "Групування даних" + +#: ../../src/rdbms/aggregation.txt:137 +msgid "" +"Getting some aggregated values is not very helpful itself. Most cases " +"require to group outputs in some specific manner." +msgstr "" +"Отримання деяких агрегованих значень не є дуже корисним саме по собі. " +"Більшість випадків вимагають згрупувати виходи певним чином." + +#: ../../src/rdbms/aggregation.txt:140 +msgid "" +"For example, if the task is to count number of registered categories it is " +"simple to solve as:" +msgstr "" +"Наприклад, якщо завдання полягає в підрахунку кількості зареєстрованих " +"категорій, його просто вирішити так:" + +#: ../../src/rdbms/aggregation.txt:153 +msgid "" +"But in case, the task is to count **sold** items for each category, this " +"becomes impossible to solve without grouping items. ``GROUP BY`` clause " +"provides the ability to group rows based on some field(s) values." +msgstr "" +"Але у випадку, якщо завдання полягає в підрахунку проданих товарів для " +"кожної категорії, це стає неможливим вирішити без групування товарів. Пункт " +"``GROUP BY`` надає можливість групувати рядки на основі певного значення " +"поля(ів)." + +#: ../../src/rdbms/aggregation.txt:157 +msgid "General syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/aggregation.txt:178 +msgid "600" +msgstr "600" + +#: ../../src/rdbms/aggregation.txt:184 +msgid "" +"If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` " +"clause, then each of the expressions specified as part of the GROUP BY " +"clause is evaluated for each row of the dataset according to the processing " +"rules stated below for ORDER BY expressions. Each row is then assigned to a " +"\"group\" based on the results; rows for which the results of evaluating the " +"GROUP BY expressions are the same get assigned to the same group. For the " +"purposes of grouping rows, ``NULL`` values are considered equal. The usual " +"rules for selecting a collation sequence with which to compare text values " +"apply when evaluating expressions in a GROUP BY clause. The expressions in " +"the GROUP BY clause do not have to be expressions that appear in the result. " +"The expressions in a GROUP BY clause may not be aggregate expressions." +msgstr "" +"Якщо інструкція ``SELECT`` є сукупним запитом із пропозицією ``GROUP BY``, " +"тоді кожен із виразів, указаних як частина пропозиції GROUP BY, оцінюється " +"для кожного рядка набір даних згідно з правилами обробки, викладеними нижче " +"для виразів ORDER BY. Кожен рядок потім призначається \"групі\" на основі " +"результатів; рядки, для яких результати оцінювання виразів GROUP BY однакові " +"призначаються до однієї групи. Для цілей групування рядків значення ``NULL`` " +"вважаються рівними. Звичайні правила для вибору послідовності порівняння, з " +"якою порівнюються текстові значення, застосовуються під час оцінювання " +"виразів у Речення GROUP BY. Вирази в пункті GROUP BY не обов'язково повинні " +"бути виразами, які з'являються в результаті. Вирази в пункті GROUP BY не " +"можуть бути сукупними виразами." + +#: ../../src/rdbms/aggregation.txt:197 +msgid "HAVING clause" +msgstr "Вираз HAVING" + +#: ../../src/rdbms/aggregation.txt:199 +msgid "" +"But what, if the task is to filter categories, that have less than 500 sold " +"items in it? ``WHERE`` clause will be useless, cause it's evaluated before " +"grouping output. In other words, only rows that suite WHERE filter will be " +"selected." +msgstr "" +"Але що, якщо завдання полягає у фільтруванні категорій, які містять менше " +"500 проданих товарів? Речення ``WHERE`` буде марним, тому що воно оцінюється " +"перед групуванням виводу. Іншими словами, лише рядки, які набір WHERE буде " +"вибрано фільтр." + +#: ../../src/rdbms/aggregation.txt:222 +msgid "" +"If a ``HAVING`` clause is specified, it is evaluated once for each group of " +"rows as a boolean expression. If the result of evaluating the HAVING clause " +"is false, the group is discarded. If the HAVING clause is an aggregate " +"expression, it is evaluated across all rows in the group." +msgstr "" +"Якщо вказано пропозицію ``HAVING``, вона оцінюється один раз для кожної " +"групи рядків як логічний вираз. Якщо результат обчислення пропозиції HAVING " +"хибний, групу відкидають. Якщо речення HAVING є агрегатним виразом, воно " +"обчислюється в усіх рядках у групі." + +#: ../../src/rdbms/aggregation.txt:227 +msgid "" +"If a HAVING clause is a non-aggregate expression, it is evaluated with " +"respect to an arbitrarily selected row from the group. The HAVING expression " +"may refer to values, even aggregate functions, that are not in the result." +msgstr "" +"Якщо речення HAVING є неагрегатним виразом, воно оцінюється щодо довільно " +"вибраного рядка з групи. Вираз HAVING може посилатися на значення, навіть " +"агрегатні функції, яких немає в результат." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/index.po b/src/_locales/uk/LC_MESSAGES/rdbms/index.po new file mode 100644 index 000000000..2a57d7a5b --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/index.po @@ -0,0 +1,80 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/index.txt:-1 +msgid "Relational databases" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/index.txt:-1 +msgid "sql, db, database, intro, introduction, index" +msgstr "sql, db, database, intro, introduction, index" + +#: ../../src/rdbms/index.txt:8 +msgid "Relational Database" +msgstr "Реляційні бази даних" + +#: ../../src/rdbms/index.txt:10 +msgid "" +":abbr:`RDBMS (Relational Database Management System)` is a type of software " +"that helps users to create, update, manage, and access relational databases. " +"Relational databases organize data into tables, which consist of rows and " +"columns. Each column represents a specific attribute of the data, while each " +"row represents a specific instance of that data." +msgstr "" +":abbr:`RDBMS (Relational Database Management System)` - це тип програмного " +"забезпечення, яке допомагає користувачам створювати, оновлювати, керувати та " +"отримувати доступ до реляційних баз даних. Реляційні бази даних " +"організовують дані в таблиці, які складаються з рядків і стовпців. Кожен " +"стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " +"конкретний екземпляр цих даних." + +#: ../../src/rdbms/index.txt:16 +msgid "" +"RDBMS allow users to interact with the database using :abbr:`SQL (Structured " +"Query Language)`, which is a standard language for managing and manipulating " +"relational databases. SQL allows users to perform a variety of operations on " +"the database, including adding, updating, and deleting data, as well as " +"retrieving data based on specific criteria." +msgstr "" +"СУБД дозволяє користувачам взаємодіяти з базою даних за допомогою :abbr:`SQL " +"(Structured Query Language)`, яка є стандартною мовою для керування і " +"маніпулювання реляційними базами даних. SQL дозволяє користувачам виконувати " +"різноманітність операцій з базою даних, включаючи додавання, оновлення та " +"видалення даних, а також отримання даних на основі певних критеріїв." + +#: ../../src/rdbms/index.txt:22 +msgid "" +"RDBMS also provide a range of features to ensure data integrity, such as " +"enforcing data constraints, supporting transactions, and providing backup " +"and recovery capabilities. Additionally, RDBMS systems often provide tools " +"for managing the database, such as user interfaces for creating and " +"modifying tables and views, and monitoring tools for optimizing database " +"performance." +msgstr "" +"СУБД також надає низку функцій для забезпечення цілісності даних, таких як " +"дотримання обмежень даних, підтримка транзакцій та забезпечення можливостей " +"резервного копіюванняі відновлення. Крім того, системи РСУБД часто надають " +"інструменти для керування базою даних, такі як інтерфейси користувача для " +"створення та модифікації таблиць і представлень, а також інструменти " +"моніторингу для оптимізації продуктивності бази даних." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po new file mode 100644 index 000000000..0011959a6 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po @@ -0,0 +1,295 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "Database normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/normalization.txt:-1 +msgid "sql, db, database, normalization" +msgstr "sql, db, database, normalization" + +#: ../../src/rdbms/normalization.txt:8 +msgid "Database Normalization" +msgstr "Нормалізація баз даних" + +#: ../../src/rdbms/normalization.txt:10 +msgid "" +"Normalization is a process of organizing data in a database so that it is " +"free from redundancy and dependency. It helps to eliminate data " +"inconsistencies and anomalies, thereby improving data integrity. " +"Normalization is a set of rules or guidelines to design a database schema in " +"such a way that it avoids data duplication, data redundancy, and data " +"inconsistency." +msgstr "" +"Нормалізація - це процес упорядкування даних у базі даних таким чином, щоб " +"вона була вільна від надлишковості та залежності. Це допомагає усунути " +"невідповідності та аномалії даних, тим самим покращуючи цілісність даних. " +"Нормалізація - це набір правил або вказівки щодо розробки схеми бази даних " +"таким чином, щоб уникнути дублювання даних, надмірності даних і " +"неузгодженості даних." + +#: ../../src/rdbms/normalization.txt:16 +msgid "" +"There are several normal forms, each building on the previous one, which " +"guide us in the normalization process. The most commonly used normal forms " +"are:" +msgstr "" +"Існує кілька нормальних форм, кожна з яких будується на попередній, які " +"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" + +#: ../../src/rdbms/normalization.txt:19 +msgid "" +"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " +"values. There should be no repeating groups or arrays of data in a table." +msgstr "" +"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " +"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " +"масивів даних." + +#: ../../src/rdbms/normalization.txt:22 +msgid "" +"**Second Normal Form (2NF)**: Each non-key column should be functionally " +"dependent on the entire primary key. In other words, every column in a table " +"should be related to the primary key and not dependent on any other non-key " +"columns." +msgstr "" +"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " +"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " +"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " +"інших неключових стовпців." + +#: ../../src/rdbms/normalization.txt:26 +msgid "" +"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " +"the primary key and not on any other non-key columns. This eliminates " +"transitive dependencies." +msgstr "" +"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " +"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " +"транзитивні залежності." + +#: ../../src/rdbms/normalization.txt:30 +msgid "" +"Normalization reduces data redundancy and dependency, making the database " +"more efficient, flexible, and scalable. It also helps in maintaining data " +"consistency and accuracy, and ensures that updates and deletions are " +"properly handled." +msgstr "" +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " +"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень і " +"видалень." + +#: ../../src/rdbms/normalization.txt:36 +msgid "First normal form (1NF)" +msgstr "Перша нормальна форма (1NF)" + +#: ../../src/rdbms/normalization.txt:38 +msgid "" +"It's easier to understand normalization via examples. Let's start with some " +"dummy orders data." +msgstr "" +"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " +"про замовлення." + +#: ../../src/rdbms/normalization.txt:41 +msgid "Initial data" +msgstr "Початкові дані" + +#: ../../src/rdbms/normalization.txt:1 +msgid "order" +msgstr "order" + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer" +msgstr "customer" + +#: ../../src/rdbms/normalization.txt:1 +msgid "product" +msgstr "product" + +#: ../../src/rdbms/normalization.txt:1 +msgid "quantity" +msgstr "quantity" + +#: ../../src/rdbms/normalization.txt:1 +msgid "price" +msgstr "price" + +#: ../../src/rdbms/normalization.txt:1 +msgid "total" +msgstr "total" + +#: ../../src/rdbms/normalization.txt:1 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/normalization.txt:1 +msgid "John Doe" +msgstr "John Doe" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(Apple, Orange)" +msgstr "(Apple, Orange)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(2, 3)" +msgstr "(2, 3)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(100, 50)" +msgstr "(100, 50)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "(200, 150)" +msgstr "(200, 150)" + +#: ../../src/rdbms/normalization.txt:1 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Jane Smith" +msgstr "Jane Smith" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Banana" +msgstr "Banana" + +#: ../../src/rdbms/normalization.txt:1 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/normalization.txt:1 +msgid "25" +msgstr "25" + +#: ../../src/rdbms/normalization.txt:1 +msgid "100" +msgstr "100" + +#: ../../src/rdbms/normalization.txt:48 +msgid "" +"This table violates 1NF, since its columns contain multiple values. To bring " +"this to 1NF all data within the table are to be atomic." +msgstr "" +"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " +"привести це до 1NF, усі дані в таблиці мають бути атомарними." + +#: ../../src/rdbms/normalization.txt:51 +msgid "1NF applied" +msgstr "Застосовано 1NF" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Apple" +msgstr "Apple" + +#: ../../src/rdbms/normalization.txt:1 +msgid "200" +msgstr "200" + +#: ../../src/rdbms/normalization.txt:1 +msgid "Orange" +msgstr "Orange" + +#: ../../src/rdbms/normalization.txt:1 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/normalization.txt:1 +msgid "50" +msgstr "50" + +#: ../../src/rdbms/normalization.txt:1 +msgid "150" +msgstr "150" + +#: ../../src/rdbms/normalization.txt:59 +msgid "From now each peace of data is represented as atomic value." +msgstr "Відтепер кожна частина даних представлена як атомарне значення." + +#: ../../src/rdbms/normalization.txt:62 +msgid "Second normal form (2NF)" +msgstr "Друга нормальна форма (2NF)" + +#: ../../src/rdbms/normalization.txt:64 +msgid "" +"The table above is in 1NF, but ``item price`` is dependent on the *item* " +"entity itself and have low cohesion to *orders*. To bring it into 2NF a " +"dedicated table to store information about items themselves is to be " +"created. After that ``order`` and ``product`` table are connected (related) " +"to each other via a foreign key." +msgstr "" +"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " +"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " +"потрібно створити окрему таблицю для зберігання інформації про самі товари. " +"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " +"одною за допомогою зовнішнього ключа." + +#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 +msgid "``order`` table" +msgstr "таблиця ``order``" + +#: ../../src/rdbms/normalization.txt:1 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/normalization.txt:1 +msgid "product_id" +msgstr "product_id" + +#: ../../src/rdbms/normalization.txt:78 +msgid "``product`` table" +msgstr "таблиця ``product``" + +#: ../../src/rdbms/normalization.txt:103 +msgid "" +"``total`` field is also removed, since now it can be calculated as product " +"of ``product.price`` and ``order.quantity``." +msgstr "" +"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " +"добуток ``product.price`` і ``order.quantity``." + +#: ../../src/rdbms/normalization.txt:107 +msgid "Third normal form (3NF)" +msgstr "3-тя нормальна форма (3NF)" + +#: ../../src/rdbms/normalization.txt:109 +msgid "" +"At last it's time to remove a transitive functional dependency. Customer's " +"name is not actually dependent on a product, but on a person, who places an " +"order." +msgstr "" +"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " +"клієнта насправді залежить не від продукту, а від особи, яка робить " +"замовлення." + +#: ../../src/rdbms/normalization.txt:1 +msgid "customer_id" +msgstr "customer_id" + +#: ../../src/rdbms/normalization.txt:120 +msgid "``customer`` table" +msgstr "таблиця ``customer``" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po new file mode 100644 index 000000000..253b57112 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po @@ -0,0 +1,447 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." +"github.io/issues\n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/rdbms/relations.txt:-1 +msgid "This document describes the database relationships" +msgstr "Цей документ описує відносини в базах даних" + +#: ../../src/rdbms/relations.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/relations.txt:-1 +msgid "sql, db, database, relationship" +msgstr "sql, db, database, relationship" + +#: ../../src/rdbms/relations.txt:8 +msgid "Data Relationships" +msgstr "Зв'язки даних" + +#: ../../src/rdbms/relations.txt:10 +msgid "It's time to talk about **data relations**." +msgstr "Настав час поговорити про **відносини даних**." + +#: ../../src/rdbms/relations.txt:12 +msgid "" +"For example your database contains two tables: ``weather`` and ``city``. The " +"diagram below demonstrates the overall data structure:" +msgstr "" +"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " +"Діаграма нижче демонструє загальну структуру даних:" + +#: ../../src/rdbms/relations.txt:30 +msgid "" +"Consider the following problem: you want to make sure no one can insert a " +"record into ``weather`` without a matching entry in ``city`` table. This is " +"called maintaining the *referential integrity* of your data. In simplistic " +"database systems this would be implemented (if at all) by first looking at " +"the cities table to check if a matching record exists, and then inserting or " +"rejecting the new weather records. This approach has a number of problems " +"and is very inconvenient." +msgstr "" +"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " +"запис до ``weather`` без відповідного запису в ``city`` таблиці. " +"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " +"системах баз даних це було б реалізовано (якщо взагалі) спочатку " +"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " +"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " +"і дуже незручно." + +#: ../../src/rdbms/relations.txt:52 +msgid "" +"This declaration creates a relationship between two (or even more) tables." +msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." + +#: ../../src/rdbms/relations.txt:55 +msgid "Foreign key (FK)" +msgstr "Зовнішній ключ (FK)" + +#: ../../src/rdbms/relations.txt:57 +msgid "" +"So far, you have knowledge about **primary** keys. The **foreign** key is a " +"column, that *references* some another table. In common, it's a reference to " +"another table's PK; but there is no limitation of this kind, any column can " +"be referenced by another one. FKs handle data integrity only, it's not " +"required for FK to be non-NULL value." +msgstr "" +"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " +"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " +"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " +"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " +"відмінним від NULL." + +#: ../../src/rdbms/relations.txt:63 +msgid "" +"The relation's properties are described by CONSTRAINTS and the database's " +"structure." +msgstr "" +"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." + +#: ../../src/rdbms/relations.txt:66 +msgid "" +"For example, modifying declaration with ``NOT NULL`` constraint grants that " +"each record within a table has a matching one entity in another table." +msgstr "" +"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " +"запис у таблиці має відповідну сутність в іншій таблиці." + +#: ../../src/rdbms/relations.txt:76 +msgid "This brings us to various relationship models." +msgstr "Це підводить нас до різних моделей відносин." + +#: ../../src/rdbms/relations.txt:79 +msgid "One-to-many relationship (1-to-N)" +msgstr "Зв'язок один-до-багатьох (1-до-N)" + +#: ../../src/rdbms/relations.txt:81 +msgid "This is the most common relationship." +msgstr "Це найпоширеніший зв'язок." + +#: ../../src/rdbms/relations.txt:83 +msgid "" +"For the example above there are no limitations on temperature measurements " +"in a specified city. So, a single city may has 0 or N related records in " +"``weather`` table. But each weather record is related to the only one city." +msgstr "" +"Для наведеного вище прикладу немає обмежень на вимірювання температури у " +"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " +"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." + +#: ../../src/rdbms/relations.txt:87 +msgid "" +"Another example is employees and office buildings they work in. Some big " +"company may have multiple offices and employee across the globe. Multiple " +"employees can be present in a single office building at a time. But each " +"employee can be physically located only in a single office at a time." +msgstr "" +"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " +"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " +"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " +"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " +"одночасно." + +#: ../../src/rdbms/relations.txt:110 +msgid "One-to-one relationship (1-to-1)" +msgstr "One-to-one relationship (1-to-1)" + +#: ../../src/rdbms/relations.txt:112 +msgid "" +"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " +"and only one matching record. Back to the example with employees. Multiple " +"workstations (personal computers) are located in each office building. The " +"only one person can occupy the only one work station at a time." +msgstr "" +"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " +"наявність лише одного відповідного запису. Повернемося до прикладу зі " +"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " +"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " +"одну робочу станцію одночасно." + +#: ../../src/rdbms/relations.txt:123 +msgid "Many-to-many relationship (N-to-N)" +msgstr "Зв'язок багато-до-багатьох (N-до-N)" + +#: ../../src/rdbms/relations.txt:125 +msgid "" +"These relationships require additional table. A good example may be a " +"*project role*. There are many of them in a production team. And some " +"employees may be assigned to the same role (e.g. developers, testers etc.). " +"But also a single person can be a developer and tester at a time." +msgstr "" +"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " +"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " +"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " +"також одна людина може бути розробником і тестувальником одночасно." + +#: ../../src/rdbms/relations.txt:138 +msgid "Joining data" +msgstr "Об'єднання даних" + +#: ../../src/rdbms/relations.txt:140 +msgid "" +"``JOIN`` is used to *join* data fetched from multiple related tables. To " +"build a valid query you are to set the tables to join and parameter to use " +"for this operation." +msgstr "" +"``JOIN`` використовується для об'єднання даних, отриманих з кількох " +"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " +"таблиці для об'єднання та параметр, який використовується для цієї операції." + +#: ../../src/rdbms/relations.txt:144 +msgid "Common syntax is:" +msgstr "Загальний синтаксис:" + +#: ../../src/rdbms/relations.txt:150 +msgid "" +"There are various join types available. Here are is some dummy data to " +"demonstrate their purpose." +msgstr "" +"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " +"їх призначення." + +#: ../../src/rdbms/relations.txt:153 +msgid "poem" +msgstr "poem" + +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 +#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 +#: ../../src/rdbms/relations.txt:350 +msgid "title" +msgstr "title" + +#: ../../src/rdbms/relations.txt:156 +msgid "author_id" +msgstr "author_id" + +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:352 +msgid "On the Field of Battle" +msgstr "On the Field of Battle" + +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 +#: ../../src/rdbms/relations.txt:183 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:354 +msgid "Moses" +msgstr "Moses" + +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 +#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 +#: ../../src/rdbms/relations.txt:356 +msgid "The Forest Song" +msgstr "The Forest Song" + +#: ../../src/rdbms/relations.txt:164 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:358 +msgid "In the Catacombs" +msgstr "In the Catacombs" + +#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 +#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 +#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 +#: ../../src/rdbms/relations.txt:368 +msgid "null" +msgstr "null" + +#: ../../src/rdbms/relations.txt:166 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:360 +msgid "The Singing Stones" +msgstr "The Singing Stones" + +#: ../../src/rdbms/relations.txt:168 +msgid "6" +msgstr "6" + +#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 +#: ../../src/rdbms/relations.txt:362 +msgid "Ancient Fairy Tales" +msgstr "Ancient Fairy Tales" + +#: ../../src/rdbms/relations.txt:170 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 +#: ../../src/rdbms/relations.txt:364 +msgid "My Thoughts" +msgstr "My Thoughts" + +#: ../../src/rdbms/relations.txt:172 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 +#: ../../src/rdbms/relations.txt:366 +msgid "To Shevchenko" +msgstr "To Shevchenko" + +#: ../../src/rdbms/relations.txt:176 +msgid "author" +msgstr "author" + +#: ../../src/rdbms/relations.txt:179 ../../src/rdbms/relations.txt:254 +#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 +#: ../../src/rdbms/relations.txt:350 +msgid "name" +msgstr "name" + +#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 +#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 +#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 +#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 +#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 +#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 +#: ../../src/rdbms/relations.txt:360 +msgid "Larysa Kosach" +msgstr "Larysa Kosach" + +#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 +#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 +#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 +#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 +#: ../../src/rdbms/relations.txt:364 +msgid "Ivan Franko" +msgstr "Ivan Franko" + +#: ../../src/rdbms/relations.txt:185 ../../src/rdbms/relations.txt:330 +#: ../../src/rdbms/relations.txt:368 +msgid "John Doe" +msgstr "John Doe" + +#: ../../src/rdbms/relations.txt:217 +msgid "Join types" +msgstr "Join types" + +#: ../../src/rdbms/relations.txt +msgid "Cross join" +msgstr "Cross join" + +#: ../../src/rdbms/relations.txt:225 +msgid "" +"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " +"product), the joined table will contain a row consisting of all columns in " +"T1 followed by all columns in T2. If the tables have N and M rows " +"respectively, the joined table will have N * M rows." +msgstr "" +"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " +"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " +"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " +"відповідно, об’єднана таблиця матиме N * M рядків." + +#: ../../src/rdbms/relations.txt +msgid "Qualified joins" +msgstr "Qualified joins" + +#: ../../src/rdbms/relations.txt:236 +msgid "" +"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " +"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +msgstr "" +"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " +"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." + +#: ../../src/rdbms/relations.txt:241 +msgid "INNER JOIN" +msgstr "INNER JOIN" + +#: ../../src/rdbms/relations.txt:243 +msgid "" +"For each row R1 of T1, the joined table has a row for each row in T2 that " +"satisfies the join condition with R1." +msgstr "" +"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " +"який задовольняє умову об'єднання з R1." + +#: ../../src/rdbms/relations.txt:246 +msgid "Inner join" +msgstr "Inner join" + +#: ../../src/rdbms/relations.txt:268 +msgid "LEFT OUTER JOIN" +msgstr "LEFT OUTER JOIN" + +#: ../../src/rdbms/relations.txt:270 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Thus, the joined table always has at least one " +"row for each row in T1." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " +"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." + +#: ../../src/rdbms/relations.txt:275 +msgid "Left join" +msgstr "Left join" + +#: ../../src/rdbms/relations.txt:303 +msgid "RIGHT OUTER JOIN" +msgstr "RIGHT OUTER JOIN" + +#: ../../src/rdbms/relations.txt:305 +msgid "" +"First, an inner join is performed. Then, for each row in T2 that does not " +"satisfy the join condition with any row in T1, a joined row is added with " +"null values in columns of T1. This is the converse of a left join: the " +"result table will always have a row for each row in T2." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " +"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " +"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " +"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " +"в T2." + +#: ../../src/rdbms/relations.txt:310 +msgid "Right join" +msgstr "Right join" + +#: ../../src/rdbms/relations.txt:334 +msgid "FULL OUTER JOIN" +msgstr "FULL OUTER JOIN" + +#: ../../src/rdbms/relations.txt:336 +msgid "" +"First, an inner join is performed. Then, for each row in T1 that does not " +"satisfy the join condition with any row in T2, a joined row is added with " +"null values in columns of T2. Also, for each row of T2 that does not satisfy " +"the join condition with any row in T1, a joined row with null values in the " +"columns of T1 is added." +msgstr "" +"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " +"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " +"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " +"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." + +#: ../../src/rdbms/relations.txt:342 +msgid "Full join" +msgstr "Full join" diff --git a/src/_locales/uk/LC_MESSAGES/vcs.po b/src/_locales/uk/LC_MESSAGES/vcs.po deleted file mode 100644 index 6357ee984..000000000 --- a/src/_locales/uk/LC_MESSAGES/vcs.po +++ /dev/null @@ -1,2548 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# FIRST AUTHOR , 2023. -# -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.06.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-09-01 11:38+0300\n" -"PO-Revision-Date: 2023-09-05 11:15+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: uk \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.3.2\n" - -#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 -#: ../../src/vcs/intro.txt:-1 ../../src/vcs/setup.txt:-1 -msgid "Version control system" -msgstr "Система контролю версій" - -#: ../../src/vcs/basics.txt:-1 ../../src/vcs/branch.txt:-1 -#: ../../src/vcs/github.txt:-1 ../../src/vcs/index.txt:-1 -#: ../../src/vcs/intro.txt:-1 ../../src/vcs/pullrequest.txt:-1 -#: ../../src/vcs/setup.txt:-1 -msgid "Serhii Horodilov" -msgstr "Serhii Horodilov" - -#: ../../src/vcs/basics.txt:-1 -msgid "version, control, system, vcs, git, basics" -msgstr "version, control, system, vcs, git, basics" - -#: ../../src/vcs/basics.txt:8 -msgid "Git Basics" -msgstr "Основи Git" - -#: ../../src/vcs/basics.txt:11 -msgid "Getting a Git repository" -msgstr "Отримання Git-репозиторію" - -#: ../../src/vcs/basics.txt:13 -msgid "You typically obtain a Git repository in one of two ways:" -msgstr "Зазвичай ви отримуєте Git-репозиторій одним з двох способів:" - -#: ../../src/vcs/basics.txt:15 -msgid "" -"You can take a local directory that is currently not under version control, " -"and turn it into a Git repository." -msgstr "" -"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " -"версій, і перетворити його на Git-репозиторій." - -#: ../../src/vcs/basics.txt:17 -msgid "You can clone an existing Git repository from elsewhere." -msgstr "Ви можете клонувати існуюче сховище Git'а з іншого місця." - -#: ../../src/vcs/basics.txt:19 -msgid "" -"In either case, you end up with a Git repository on your local machine, " -"ready for work." -msgstr "" -"У будь-якому випадку, ви отримаєте Git-репозиторій на вашій локальній " -"машині, готовий до роботи." - -#: ../../src/vcs/basics.txt:23 -msgid "Initializing repo in an existing directory" -msgstr "Ініціалізація репо в існуючому каталозі" - -#: ../../src/vcs/basics.txt:25 -msgid "" -"If you have a project directory that is currently not under version control " -"and you want to start controlling it with Git, you first need to go to that " -"project's directory. If you've never done this, it looks a little different " -"depending on which system you're running:" -msgstr "" -"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " -"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " -"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " -"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" - -#: ../../src/vcs/basics.txt:30 -msgid "Change directory in bash (Linux)" -msgstr "Зміна каталогу в bash (Linux)" - -#: ../../src/vcs/basics.txt:35 -msgid "Change directory in bash (MacOS)" -msgstr "Зміна каталогу в bash (MacOS)" - -#: ../../src/vcs/basics.txt:40 -msgid "Change directory in PowerShell (Windows)" -msgstr "Зміна каталогу в PowerShell (Windows)" - -#: ../../src/vcs/basics.txt:45 -msgid "In the project's directory initialize a new Git repository." -msgstr "У каталозі проекту ініціалізуйте новий Git-репозиторій." - -#: ../../src/vcs/basics.txt:51 -msgid "" -"This creates a new subdirectory named .git that contains all of your " -"necessary repository files -- a Git repository skeleton." -msgstr "" -"Це створить новий підкаталог з ім'ям .git, який міститиме всі необхідні " -"файли сховища - скелет сховища Git." - -#: ../../src/vcs/basics.txt:55 -msgid "Cloning an existing repo" -msgstr "Клонування існуючого репо" - -#: ../../src/vcs/basics.txt:57 -msgid "" -"If you want to get a copy of an existing Git repository -- for example, a " -"project you'd like to contribute to -- the command you need is ``git clone``." -msgstr "" -"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " -"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." - -#: ../../src/vcs/basics.txt:64 -msgid "" -"That creates a directory named *edu-python-course.github.io*, initializes a " -"*.git* directory inside it, pulls down all the data for that repository, and " -"checks out a working copy of the latest version." -msgstr "" -"Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " -"каталог *.git* всередині нього, витягує всі дані для цього сховища і " -"перевіряє робочу копію останньої версії." - -#: ../../src/vcs/basics.txt:72 -msgid "" -"That command does the same thing as the previous one, but the target " -"directory is called *python-course*." -msgstr "" -"Ця команда робить те саме, що й попередня, але цільовий каталог називається " -"*python-course*." - -#: ../../src/vcs/basics.txt:75 -msgid "" -"Git has a number of different transfer protocols you can use. The previous " -"example uses the ``https://`` protocol, but you may also see ``git://`` or " -"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." -msgstr "" -"Git має декілька різних протоколів передачі даних, які ви можете " -"використовувати. У попередньому прикладі використовується протокол ``https://" -"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." -"git``, який використовує протокол передачі SSH." - -#: ../../src/vcs/basics.txt:80 -msgid "Making changes to the repo" -msgstr "Внесення змін до репозиторію" - -#: ../../src/vcs/basics.txt:82 -msgid "" -"At this point, you should have a *bona fide* Git repository on your local " -"machine, and a checkout or *working copy* of all of its files in front of " -"you. Typically, you'll want to start making changes and committing snapshots " -"of those changes into your repository each time the project reaches a state " -"you want to record." -msgstr "" -"На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " -"комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " -"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " -"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " -"зафіксувати." - -#: ../../src/vcs/basics.txt:88 -msgid "" -"Remember that each file in your working directory can be in one of two " -"states: **tracked** or **untracked**." -msgstr "" -"Пам'ятайте, що кожен файл у вашому робочому каталозі може перебувати в " -"одному з двох станів: **відстежується** або **невідстежується**." - -#: ../../src/vcs/basics.txt:91 -msgid "" -"Tracked files are files that were in the last snapshot, as well as any newly " -"staged files; they can be unmodified, modified, or staged. In short, tracked " -"files are files that Git knows about." -msgstr "" -"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" -"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " -"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " -"Git'у." - -#: ../../src/vcs/basics.txt:94 -msgid "" -"Untracked files are everything else -- any files in your working directory " -"that were not in your last snapshot and are not in your staging area. " -"Untracked basically means that Git sees a file you didn't have in a previous " -"snapshot (commit), and which hasn't been yet staged." -msgstr "" -"Невідстежені файли - це все інше - будь-які файли у вашому робочому " -"каталозі, яких не було у вашому останньому знімку і які не перебувають у " -"вашій області сховища. По суті, це означає, що Git бачить файл, якого не " -"було у попередньому знімку (комміті), і який ще не було покладено у сховище." - -#: ../../src/vcs/basics.txt:104 -msgid "Checking out status of the file(s)" -msgstr "Перевірка стану файлу(ів)" - -#: ../../src/vcs/basics.txt:106 -msgid "" -"The main tool you use to determine which files are in which state is the " -"``git status`` command." -msgstr "" -"Основним інструментом для визначення стану файлів є команда ``git status``." - -#: ../../src/vcs/basics.txt:133 -msgid "" -"Newly added *README.md* file is untracked, because it's under \"Untracked " -"files\" heading the status output." -msgstr "" -"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " -"розділі \"Файли, що не відстежуються\" у виведенні статусу." - -#: ../../src/vcs/basics.txt:137 -msgid "Tracking new files" -msgstr "Відстеження нових файлів" - -#: ../../src/vcs/basics.txt:139 -msgid "In order to begin tracking a new file, you use the ``git add`` command." -msgstr "" -"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " -"add``." - -#: ../../src/vcs/basics.txt:153 -msgid "" -"From now *README.md* file is **added** to the stage area and ready to be " -"committed (is under \"Changes to be committed\" heading)." -msgstr "" -"Відтепер файл *README.md* **додано** до області сцени і він готовий до " -"фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." - -#: ../../src/vcs/basics.txt:157 -msgid "" -"You can use wildcards, to stage multiple files at once. The most common use " -"cases is to add **all** modified files, or files inside of a specific " -"directory." -msgstr "" -"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " -"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " -"змінених файлів або файлів у певному каталозі." - -#: ../../src/vcs/basics.txt:168 -msgid "Staging modified files" -msgstr "Зберігання змінених файлів" - -#: ../../src/vcs/basics.txt:170 -msgid "" -"If a staged (or already committed) file has been changed, it will be moved " -"under \"Modified\" heading. These changes wouldn't be committed unless they " -"are staged." -msgstr "" -"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " -"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " -"вони не були поетапними." - -#: ../../src/vcs/basics.txt:190 -msgid "" -"Changes may be added to the stage area by repeating ``git add`` command." -msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." - -#: ../../src/vcs/basics.txt:191 -msgid "" -"Changes may be discard by ``git restore `` command. This action will " -"restore file to its **staged** version." -msgstr "" -"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " -"до його **попередньої** версії." - -#: ../../src/vcs/basics.txt:195 -msgid "Committing changes" -msgstr "Фіксація змін" - -#: ../../src/vcs/basics.txt:197 -msgid "" -"Now that the stage area is set up the way required, it's time to commit " -"changes. Remember that anything that is still unstaged -- any files you have " -"created or modified that you haven't run git add on since you edited them -- " -"won't go into this commit." -msgstr "" -"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " -"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " -"створили або змінили, але не запустили git-додаток з моменту редагування, - " -"не потраплять до цього коміту." - -#: ../../src/vcs/basics.txt:202 -msgid "The simplest way to commit is to type ``git commit``:" -msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" - -#: ../../src/vcs/basics.txt:208 -msgid "Doing so launches your editor of choice." -msgstr "Після цього запуститься обраний вами редактор." - -#: ../../src/vcs/basics.txt:211 -msgid "" -"This is set by your shell's EDITOR environment variable -- usually vim or " -"emacs, although you can configure it with whatever you want using the ``git " -"config --global core.editor``" -msgstr "" -"Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " -"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" -"global core.editor``" - -#: ../../src/vcs/basics.txt:215 -msgid "" -"Alternatively, you can type your commit message inline with the ``commit`` " -"command by specifying it after a ``-m`` flag, like this:" -msgstr "" -"Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " -"``commit``, вказавши його після прапорця ``-m``, як показано нижче:" - -#: ../../src/vcs/basics.txt:222 -msgid "" -"Although it can be amazingly useful for crafting commits exactly how you " -"want them, the staging area is sometimes a bit more complex than you need in " -"your workflow. If you want to skip the staging area, Git provides a simple " -"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " -"automatically stage every file that is already tracked before doing the " -"commit, letting you skip the git add part:" -msgstr "" -"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " -"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " -"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " -"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " -"commit`` змушує Git автоматично стадіювати кожен файл, який вже " -"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " -"git add:" - -#: ../../src/vcs/basics.txt:263 -msgid "Ignoring files" -msgstr "Ігнорування файлів" - -#: ../../src/vcs/basics.txt:265 -msgid "" -"Often, there is a class of files, that should not be a part of a repo. You " -"want these files to be prevent from being automatically added or even shown " -"as being untracked. These are generally files produced by loggers or a build " -"system, or some local settings for the project that shouldn't be shared " -"across other developers or maintainers. In such cases you can create a *." -"gitignore* file. Here is the content of *.gitignore* used in current " -"repository:" -msgstr "" -"Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " -"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " -"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " -"системою збірки, або деякі локальні налаштування проекту, які не повинні " -"бути доступними для інших розробників або супровідників. У таких випадках ви " -"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " -"використовується у поточному сховищі:" - -#: ../../src/vcs/basics.txt:305 -msgid "These lines mean:" -msgstr "Ці рядки означають:" - -#: ../../src/vcs/basics.txt:307 -msgid "" -"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " -"will be ignored completely." -msgstr "" -"Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " -"повністю проігноровано." - -#: ../../src/vcs/basics.txt:309 -msgid "Content within \"node_modules\" directory will be ignored completely." -msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." - -#: ../../src/vcs/basics.txt:310 -msgid "" -"Any files within directories named \".vscode\" or \".idea\" will be ignored " -"completely." -msgstr "" -"Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " -"повністю проігноровані." - -#: ../../src/vcs/basics.txt:312 -msgid "Any file with name starting with hash (#) will be ignored." -msgstr "" -"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." - -#: ../../src/vcs/basics.txt:313 -msgid "Any file with name ending with tilda (~) will be ignored." -msgstr "" -"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." - -#: ../../src/vcs/basics.txt:314 -msgid "" -"Content within directories named \"temp\" or \"tmp\" will be ignored " -"completely." -msgstr "" -"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." - -#: ../../src/vcs/basics.txt:316 -msgid "" -"Content within directories named \"_builds\", \"_build\", \"builds\" or " -"\"build\" will be ignored completely." -msgstr "" -"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " -"буде повністю проігноровано." - -#: ../../src/vcs/basics.txt:318 -msgid "Any file with name ending with \".pot\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." - -#: ../../src/vcs/basics.txt:319 -msgid "Any file with name ending with \".mo\" will be ignored." -msgstr "" -"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." - -#: ../../src/vcs/basics.txt:321 -msgid "" -"Setting up a *.gitignore* file for your new repository before you get going " -"is generally a good idea so you don't accidentally commit files that you " -"really don't want in your Git repository." -msgstr "" -"Створення файлу *.gitignore* для вашого нового сховища перед початком " -"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " -"вам насправді не потрібні у вашому Git-репозиторії." - -#: ../../src/vcs/basics.txt:325 -msgid "" -"The rules for the patterns you can put in the *.gitignore* file are as " -"follows:" -msgstr "" -"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" - -#: ../../src/vcs/basics.txt:327 -msgid "Blank lines or lines starting with # are ignored." -msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." - -#: ../../src/vcs/basics.txt:328 -msgid "" -"Standard glob patterns work, and will be applied recursively throughout the " -"entire working tree." -msgstr "" -"Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " -"по всьому робочому дереву." - -#: ../../src/vcs/basics.txt:330 -msgid "" -"You can start patterns with a forward slash (/) to avoid recursive inclusion." -msgstr "" -"Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " -"похилої риски (/)." - -#: ../../src/vcs/basics.txt:332 -msgid "You can end patterns with a forward slash (/) to specify a directory." -msgstr "" -"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." - -#: ../../src/vcs/basics.txt:333 -msgid "You can negate a pattern by starting it with an exclamation point (!)." -msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." - -#: ../../src/vcs/basics.txt:335 -msgid "" -"Glob patterns are like simplified regular expressions that shells use. An " -"asterisk (\\*) matches zero or more characters; [ab] matches any character " -"inside the brackets (in this case a or b); a question mark (?) matches a " -"single character; and brackets enclosing characters separated by a hyphen " -"([0-9]) matches any character between them (in this case 0 through 9). You " -"can also use two asterisks to match nested directories; a/\\*\\*/z would " -"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." -msgstr "" -"Глобальні шаблони подібні до спрощених регулярних виразів, які " -"використовують оболонки. Зірочка (\\*) відповідає нулю або більше символів; " -"[ab] відповідає будь-якому символу всередині дужок (у цьому випадку a або " -"b); знак питання (?) відповідає одному символу; а дужки, що містять символи, " -"розділені дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому " -"випадку від 0 до 9). Ви також можете використовувати дві зірочки для " -"вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " -"так далі." - -#: ../../src/vcs/basics.txt:344 -msgid "Viewing the commit history" -msgstr "Перегляд історії коммітів" - -#: ../../src/vcs/basics.txt:346 -msgid "" -"After you have created several commits, or if you have cloned a repository " -"with an existing commit history, you'll probably want to look back to see " -"what has happened. The most basic and powerful tool to do this is the ``git " -"log`` command." -msgstr "" -"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " -"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " -"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " -"команда ``git log``." - -#: ../../src/vcs/basics.txt:372 -msgid "" -"By default, with no arguments, ``git log`` lists the commits made in that " -"repository in reverse chronological order; that is, the most recent commits " -"show up first. As you can see, this command lists each commit with its SHA-1 " -"checksum, the author's name and email, the date written, and the commit " -"message." -msgstr "" -"За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " -"зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " -"найновіші комміти показуються першими. Як ви можете бачити, ця команда " -"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " -"адресою автора, датою створення та повідомленням про внесення." - -#: ../../src/vcs/basics.txt:378 -msgid "" -"One of the more helpful options is ``-p`` or ``--patch``, which shows the " -"difference (the *patch* output) introduced in each commit. You can also " -"limit the number of log entries displayed, such as using ``-`` to " -"show only desired number of latest entries." -msgstr "" -"Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " -"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " -"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" -"``, щоб показати лише потрібну кількість останніх записів." - -#: ../../src/vcs/basics.txt:414 -msgid "" -"This option display the same information but with a diff directly following " -"each entry. This is very helpful for code review or to quickly browse what " -"happened during a series of commits that a collaborator has added. You can " -"also use a series of summarizing options with ``git log``." -msgstr "" -"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " -"кожного запису. Це дуже корисно для перегляду коду або для швидкого " -"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " -"також можете скористатися низкою параметрів підсумовування за допомогою " -"``git log``." - -#: ../../src/vcs/basics.txt:419 -msgid "" -"If you want to see some abbreviated stats for each commit, you can use the " -"``--stat`` option:" -msgstr "" -"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " -"скористатися опцією ``--stat``:" - -#: ../../src/vcs/basics.txt:443 -msgid "" -"Another really useful option is ``--pretty``. This option changes the log " -"output to formats other that the default. A few prebuilt option values are " -"available for you to use. The ``oneline`` value for this option prints each " -"commit on a single line, which is useful if you're look a lot of commits. In " -"addition, the ``short``, ``full``, and ``fuller`` values show the output in " -"roughly the same format but with less or more information." -msgstr "" -"Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " -"формат виведення журналу на формат, відмінний від стандартного. Ви можете " -"скористатися кількома готовими значеннями цього параметра. Значення " -"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " -"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " -"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " -"форматі, але з меншою або більшою кількістю інформації." - -#: ../../src/vcs/basics.txt:476 -msgid "Specifier" -msgstr "Специфікатор" - -#: ../../src/vcs/basics.txt:476 -msgid "Description of Output" -msgstr "Опис Результатів" - -#: ../../src/vcs/basics.txt:478 -msgid "%H" -msgstr "%H" - -#: ../../src/vcs/basics.txt:478 -msgid "Commit hash" -msgstr "Хеш комміту" - -#: ../../src/vcs/basics.txt:480 -msgid "%h" -msgstr "%h" - -#: ../../src/vcs/basics.txt:480 -msgid "Abbreviated commit hash" -msgstr "Скорочений хеш коміту" - -#: ../../src/vcs/basics.txt:482 -msgid "%T" -msgstr "%T" - -#: ../../src/vcs/basics.txt:482 -msgid "Tree hash" -msgstr "Дерево хешу" - -#: ../../src/vcs/basics.txt:484 -msgid "%t" -msgstr "%t" - -#: ../../src/vcs/basics.txt:484 -msgid "Abbreviated tree hash" -msgstr "Скорочений хеш дерева" - -#: ../../src/vcs/basics.txt:486 -msgid "%P" -msgstr "%P" - -#: ../../src/vcs/basics.txt:486 -msgid "Parent hashes" -msgstr "Батьківські хеші" - -#: ../../src/vcs/basics.txt:488 -msgid "%p" -msgstr "%p" - -#: ../../src/vcs/basics.txt:488 -msgid "Abbreviated parent hashes" -msgstr "Скорочені батьківські хеші" - -#: ../../src/vcs/basics.txt:490 -msgid "%an" -msgstr "%an" - -#: ../../src/vcs/basics.txt:490 -msgid "Author name" -msgstr "Ім'я автора" - -#: ../../src/vcs/basics.txt:492 -msgid "%ae" -msgstr "%ae" - -#: ../../src/vcs/basics.txt:492 -msgid "Author email" -msgstr "Електронна пошта автора" - -#: ../../src/vcs/basics.txt:494 -msgid "%ad" -msgstr "%ad" - -#: ../../src/vcs/basics.txt:494 -msgid "Author date (format respects the --date=option)" -msgstr "Дата автора (формат відповідає параметру --date=option)" - -#: ../../src/vcs/basics.txt:496 -msgid "%ar" -msgstr "%ar" - -#: ../../src/vcs/basics.txt:496 -msgid "Author date, relative" -msgstr "Дата автора, відносна" - -#: ../../src/vcs/basics.txt:498 -#, python-format -msgid "%cn" -msgstr "%cn" - -#: ../../src/vcs/basics.txt:498 -msgid "Committer name" -msgstr "Ім'я коммітера" - -#: ../../src/vcs/basics.txt:500 -#, python-format -msgid "%ce" -msgstr "%ce" - -#: ../../src/vcs/basics.txt:500 -msgid "Committer email" -msgstr "Електронна пошта коммітера" - -#: ../../src/vcs/basics.txt:502 -#, python-format -msgid "%cd" -msgstr "%cd" - -#: ../../src/vcs/basics.txt:502 -msgid "Committer date" -msgstr "Дата коммітера" - -#: ../../src/vcs/basics.txt:504 -#, python-format -msgid "%cr" -msgstr "%cr" - -#: ../../src/vcs/basics.txt:504 -msgid "Committer date, relative" -msgstr "Дата коммітера, відносна" - -#: ../../src/vcs/basics.txt:506 -#, python-format -msgid "%s" -msgstr "%s" - -#: ../../src/vcs/basics.txt:506 -msgid "Subject" -msgstr "Тема" - -#: ../../src/vcs/basics.txt:509 -msgid "" -"The ``oneline`` and ``format`` option values are particularly useful with " -"another ``log`` option called ``--graph``. This option adds a nice little " -"ASCII graph showing your branch and merge history:" -msgstr "" -"Значення параметрів ``online`` і ``format`` особливо корисні з іншим " -"параметром ``log``, який називається ``--graph``. Цей параметр додає " -"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " -"злиття:" - -#: ../../src/vcs/basics.txt:538 -msgid "" -"There are many more output-formatting options to ``git log``. Common options " -"to ``git log`` are:" -msgstr "" -"Існує набагато більше варіантів форматування виводу для ``git log``. " -"Загальними параметрами ``git log`` є наступні:" - -#: ../../src/vcs/basics.txt:542 -msgid "Option" -msgstr "Опція" - -#: ../../src/vcs/basics.txt:542 -msgid "Description" -msgstr "Опис" - -#: ../../src/vcs/basics.txt:544 -msgid "-p" -msgstr "-p" - -#: ../../src/vcs/basics.txt:544 -msgid "Show the patch introduced with each commit." -msgstr "Показувати виправлення, внесені з кожним коммітом." - -#: ../../src/vcs/basics.txt:546 -msgid "--stat" -msgstr "--stat" - -#: ../../src/vcs/basics.txt:546 -msgid "Show statistics for files modified in each commit." -msgstr "Показувати статистику для файлів, змінених у кожному коміті." - -#: ../../src/vcs/basics.txt:548 -msgid "--shortstat" -msgstr "--shortstat" - -#: ../../src/vcs/basics.txt:548 -msgid "" -"Display only the changed/insertions/deletions line from the --stat command." -msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." - -#: ../../src/vcs/basics.txt:551 -msgid "--name-only" -msgstr "--name-only" - -#: ../../src/vcs/basics.txt:551 -msgid "Show the list of files modified after the commit information." -msgstr "Показати список файлів, змінених після фіксації інформації." - -#: ../../src/vcs/basics.txt:554 -msgid "--name-status" -msgstr "--name-status" - -#: ../../src/vcs/basics.txt:554 -msgid "" -"Show the list of files affected with added/modified/deleted information as " -"well." -msgstr "" -"Також покажіть список файлів, яких торкнулася додана/змінена/видалена " -"інформація." - -#: ../../src/vcs/basics.txt:557 -msgid "--abbrev-commit" -msgstr "--abbrev-commit" - -#: ../../src/vcs/basics.txt:557 -msgid "" -"Show only the first few characters of the SHA-1 checksum instead of all 40." -msgstr "" -"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." - -#: ../../src/vcs/basics.txt:560 -msgid "--relative-date" -msgstr "--relative-date" - -#: ../../src/vcs/basics.txt:560 -msgid "" -"Display the date in a relative format (for example, \"2 weeks ago\") instead " -"of using the full date format." -msgstr "" -"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " -"повного формату дати." - -#: ../../src/vcs/basics.txt:563 -msgid "--graph" -msgstr "--graph" - -#: ../../src/vcs/basics.txt:563 -msgid "" -"Display an ASCII graph of the branch and merge history beside the log output." -msgstr "" -"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." - -#: ../../src/vcs/basics.txt:566 -msgid "--pretty" -msgstr "--pretty" - -#: ../../src/vcs/basics.txt:566 -msgid "" -"Show commits in an alternate format. Option values include oneline, short, " -"full, fuller, and format (where you specify your own format)." -msgstr "" -"Показувати комміти в альтернативному форматі. Значення опції включають: " -"online, short, full, fuller і format (де ви можете вказати свій власний " -"формат)." - -#: ../../src/vcs/basics.txt:570 -msgid "--oneline" -msgstr "--oneline" - -#: ../../src/vcs/basics.txt:570 -msgid "Shorthand for --pretty=oneline --abbrev-commit used together." -msgstr "" -"Скорочення для --pretty=online --abbrev-commit, що використовується разом." - -#: ../../src/vcs/basics.txt:575 -msgid "Limiting log output" -msgstr "Обмеження виводу журналу" - -#: ../../src/vcs/basics.txt:577 -msgid "" -"In addition to output-formatting options, ``git log`` takes a number of " -"useful limiting options; that is options that let you show only a subset of " -"commits. You've seen one such option already -- the ``-`` (e.g. " -"``-2`` or ``-10``) option, which displays only the given number of latest " -"commits." -msgstr "" -"На додаток до параметрів форматування виводу, ``git log`` приймає ряд " -"корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " -"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" -"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " -"кількість останніх коммітів." - -#: ../../src/vcs/basics.txt:591 -msgid "" -"However, the time-limiting options such as ``--since`` and ``--until`` are " -"very useful. For example, the command to get the list of commits made in the " -"last two weeks:" -msgstr "" -"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" -"until``. Наприклад, команда для отримання списку коммітів, зроблених за " -"останні два тижні:" - -#: ../../src/vcs/basics.txt:599 -msgid "" -"This command works with lots of formats - you can specify a specific date " -"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " -"minutes ago\"``." -msgstr "" -"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " -"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " -"день 3 хвилини тому\"``." - -#: ../../src/vcs/basics.txt:602 -msgid "" -"The last really useful option to pass to ``git log`` as a filter is a path. " -"If you specify a directory or file name, you can limit the log output to " -"commits that introduced a change to those files. This is always the last " -"option and is generally preceded by double dashes (``--``) to separate the " -"paths from the options:" -msgstr "" -"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " -"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " -"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " -"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " -"щоб відокремити шлях від параметрів:" - -#: ../../src/vcs/basics.txt:621 -msgid "Undoing things" -msgstr "Виправлення помилок" - -#: ../../src/vcs/basics.txt:623 -msgid "At any stage, you may want to undo something." -msgstr "На будь-якому етапі ви можете захотіти щось виправити." - -#: ../../src/vcs/basics.txt:625 -msgid "" -"One of the common undos takes place when you commit too early and possibly " -"forget to add some files, or you mess up your commit message. If you want to " -"redo that commit, make the additional changes you forgot, stage them, and " -"commit again using the ``--amend`` option:" -msgstr "" -"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " -"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " -"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " -"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " -"використовуючи опцію ``--amend``:" - -#: ../../src/vcs/basics.txt:634 -msgid "E.g." -msgstr "Наприклад." - -#: ../../src/vcs/basics.txt:643 -msgid "Unstaging a staged file" -msgstr "Скасування додавання файла до індексу" - -#: ../../src/vcs/basics.txt:645 -msgid "" -"The next two sections demonstrate how to work with your staging area and " -"working directory changes. The nice part is that the command you use to " -"determine the state of those two areas also reminds you how to undo changes " -"to them." -msgstr "" -"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " -"збірці та робочому каталозі. Приємним моментом є те, що команда, за " -"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " -"те, як скасувати внесені до них зміни." - -#: ../../src/vcs/basics.txt:676 -msgid "Unmodifiyng a modified file" -msgstr "Скасування модифікації зміненого файлу" - -#: ../../src/vcs/basics.txt:678 -msgid "" -"What if you realize that you don't want to keep your changes to some file? " -"You can easily unmodify it -- **revert** it back to what it looked like when " -"you last committed. ``git status`` also tells you how to do that:" -msgstr "" -"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " -"Ви можете легко скасувати зміни - **повернути** його до того, як він " -"виглядав під час останнього компонування. ``git status`` також покаже вам, " -"як це зробити:" - -#: ../../src/vcs/basics.txt:686 -msgid "It tells you pretty explicitly how to discard the changes you've make." -msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." - -#: ../../src/vcs/basics.txt:699 -msgid "Undoing things with git restore" -msgstr "Скасування змін за допомогою git restore" - -#: ../../src/vcs/basics.txt:701 -msgid "" -"``git restore`` is basically an alternative to ``git reset``, from Git " -"version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " -"reset`` for many undo operations." -msgstr "" -"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " -"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " -"операцій скасування." - -#: ../../src/vcs/basics.txt:737 -msgid "" -"It’s important to understand that git restore is a dangerous command. " -"Any local changes you made to that file are gone -- Git just replaced that " -"file with the last staged or committed version. Don't ever use this command " -"unless you absolutely know that you don’t want those unsaved local changes." -msgstr "" -"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " -"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " -"замінить цей файл на останню версію, що перебуває у стадії виконання або " -"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " -"вам не потрібні ці незбережені локальні зміни." - -#: ../../src/vcs/branch.txt:-1 -msgid "version, control, system, vcs, git, branch, merge, cherry-pick" -msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" - -#: ../../src/vcs/branch.txt:8 -msgid "Branches and Merging" -msgstr "Гілки та злиття" - -#: ../../src/vcs/branch.txt:11 ../../src/vcs/pullrequest.txt:59 -msgid "About branches" -msgstr "Про гілки" - -#: ../../src/vcs/branch.txt:13 -msgid "" -"To really understand the way Git does branching, we need to take a step back " -"and examine how Git stores its data. Git doesn't store data as a series of " -"changesets or differences, but instead as a series of snapshots. When you " -"make a commit, Git stores a commit object that contains a pointer to the " -"snapshot of the content you staged. This object also contains the author's " -"name and email address, the message that you typed, and pointers to the " -"commit or commits that directly came before this commit (its parent or " -"parents): zero parents for the initial commit, one parent for a normal " -"commit, and multiple parents for a commit that results from a merge of two " -"or more branches." -msgstr "" -"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " -"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " -"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " -"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " -"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " -"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " -"на комміт або комміти, які безпосередньо передували цьому комміту (його " -"батька або батьків): нульовий батько для початкового комміту, один батько " -"для звичайного комміту і кілька батьків для комміту, який є результатом " -"злиття двох або більше гілок." - -#: ../../src/vcs/branch.txt:28 -msgid "" -"A branch in Git is simply a lightweight movable pointer to one of these " -"commits. The default branch name in Git is master. As you start making " -"commits, you're given a master branch that points to the last commit you " -"made. Every time you commit, the master branch pointer moves forward " -"automatically." -msgstr "" -"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " -"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " -"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " -"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " -"пересувається вперед." - -#: ../../src/vcs/branch.txt:38 -msgid "Branch management" -msgstr "Управління гілками" - -#: ../../src/vcs/branch.txt:40 -msgid "" -"The ``git branch`` command does more that create and delete branches. If you " -"run it with no arguments, you get a simple listing of your current branches:" -msgstr "" -"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " -"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " -"поточних гілок:" - -#: ../../src/vcs/branch.txt:55 -msgid "" -"To see all the branches that contain work you haven't yet merged in, use ``--" -"no-merged`` option:" -msgstr "" -"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " -"використовуйте опцію ``--no-merged``:" - -#: ../../src/vcs/branch.txt:65 -msgid "" -"Branches listed in the output has work, that isn't merged to current branch. " -"So, deleting them via ``git branch -d`` will fail." -msgstr "" -"У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " -"гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." - -#: ../../src/vcs/branch.txt:69 -msgid "Create branches" -msgstr "Створення гілок" - -#: ../../src/vcs/branch.txt:71 -msgid "" -"There are few ways to create a new branch in a Git repository. The most " -"common way is to use ``git branch`` command." -msgstr "" -"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " -"них - використання команди ``git branch``." - -#: ../../src/vcs/branch.txt:78 -msgid "" -"Pointer to a parent commit is optional. By default the parent commit is set " -"to the latest one available (HEAD pointer) at the moment of the branch " -"creation. You can also switch to the newly created branch just after its " -"creation using:" -msgstr "" -"Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " -"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " -"на момент створення гілки. Ви також можете переключитися на новостворену " -"гілку одразу після її створення за допомогою:" - -#: ../../src/vcs/branch.txt:88 -msgid "Switching branches" -msgstr "Перемикання гілок" - -#: ../../src/vcs/branch.txt:90 -msgid "To switch to an existing branch, you run the ``git checkout`` command." -msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." - -#: ../../src/vcs/branch.txt:109 -msgid "Basic branching and merging" -msgstr "Основи розгалуження та злиття" - -#: ../../src/vcs/branch.txt:111 -msgid "" -"First, let's say you're working on your project and have a couple of commits " -"already on the ``master`` branch. You've decided that you're going to work " -"on issue #53 in whatever issue-tracking system your company uses. To create " -"a new branch and switch to it at the same time, you can run the ``git " -"checkout`` command with the ``-b`` switch:" -msgstr "" -"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " -"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " -"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " -"створити нову гілку і одночасно переключитися на неї, ви можете виконати " -"команду ``git checkout`` з ключем ``-b``:" - -#: ../../src/vcs/branch.txt:122 -msgid "This is shorthand for:" -msgstr "Це скорочено означає:" - -#: ../../src/vcs/branch.txt:129 -msgid "" -"In deed this creates a new branch pointer, aimed to the latest commit " -"present on ``master`` branch. But, from now your branch is ``feature/" -"issue53``. So, doing commits moves the feature branch pointer forward, " -"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." -msgstr "" -"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " -"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" -"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " -"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." - -#: ../../src/vcs/branch.txt:134 -msgid "" -"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " -"from the ``feature/issue53`` branch back to ``master``." -msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " -"з гілки ``feature/issue53`` назад до ``master``." - -#: ../../src/vcs/branch.txt:138 -msgid "Merging branches" -msgstr "Злиття гілок" - -#: ../../src/vcs/branch.txt:140 -msgid "" -"You need to switch back to ``master`` branch and use ``git merge`` command, " -"to merge changes (commits) from the source branch into target." -msgstr "" -"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " -"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." - -#: ../../src/vcs/branch.txt:152 -msgid "" -"You'll notice phrase \"fast-forward\" in that merge. Because the commit " -"pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the pointer " -"forward." -msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " -"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " -"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " -"вказівник вперед." - -#: ../../src/vcs/branch.txt:156 -msgid "" -"Changes from ``feature/issue53`` are now in the snapshot of the commit " -"pointed to by the ``master`` branch." -msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " -"гілка ``master``." - -#: ../../src/vcs/branch.txt:163 -msgid "" -"Now, lets assume another developer started working on ``feature/issue54`` at " -"the same time. And there are few commits on this feature branch. Suppose, " -"the developer decided that work on **issue54** is finished and they want to " -"merge their feature branch into ``master``." -msgstr "" -"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " -"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " -"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " -"з ``master``." - -#: ../../src/vcs/branch.txt:179 -msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this case, " -"development history has diverged from some older point. Because the commit " -"on the branch you're on isn't a direct ancestor of the branch you're merging " -"in, Git has to do some work. In this case, Git does a simple three-way " -"merge, using two snapshots pointed to by the branch tips and the common " -"ancestor of the two." -msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " -"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " -"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " -"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " -"просте тристороннє злиття, використовуючи два знімки, на які вказують " -"кінчики гілок, і їхнього спільного предка." - -#: ../../src/vcs/branch.txt:186 -msgid "" -"Instead of just moving the branch pointer forward, Git creates a new " -"snapshot that results from this three-way merge and automatically creates a " -"new commit that points to it. This is referred to as a *merge commit*, and " -"is a special in that it has more than one parent." -msgstr "" -"Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " -"новий знімок, який є результатом цього тристороннього злиття, і автоматично " -"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " -"і він особливий тим, що має більше одного батька." - -#: ../../src/vcs/branch.txt:196 -msgid "Merge conflicts" -msgstr "Конфлікти об'єднання" - -#: ../../src/vcs/branch.txt:198 -msgid "" -"Occasionally, the merge process doesn't go smoothly. If the same part of the " -"same file is changed differently in the two branches you're merging, Git " -"won't be able to merge them cleanly." -msgstr "" -"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " -"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " -"Git не зможе об'єднати їх чисто." - -#: ../../src/vcs/branch.txt:209 -msgid "" -"Git hasn't automatically created a new merge commit. It has paused the " -"process while you resolve the conflict. If you want to see which files are " -"unmerged at any point after a merge conflict, you can run ``git status``:" -msgstr "" -"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " -"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " -"після конфлікту злиття, ви можете запустити ``git status``:" - -#: ../../src/vcs/branch.txt:228 -msgid "" -"Anything that has merge conflicts and hasn't been resolved is listed as " -"unmerged. Git adds standard conflict-resolution markers to the files that " -"have conflicts, so you can open them manually and resolve those conflicts. " -"Your file contains a section that looks something like this:" -msgstr "" -"Все, що має конфлікти злиття, які не було вирішено, позначається як не " -"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " -"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " -"Ваш файл містить розділ, який виглядає приблизно так:" - -#: ../../src/vcs/branch.txt:243 -msgid "" -"This means the version in ``HEAD`` (your ``master`` branch, because that was " -"what you had checked out when you ran merge command) is the top part of that " -"block (everything above the \"=======\"), while the version in ``vcs`` " -"branch looks like everything in the bottom part. In order to resolve the " -"conflict, you have to either choose one side or the other or merge the " -"contents yourself." -msgstr "" -"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " -"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " -"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " -"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " -"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." - -#: ../../src/vcs/branch.txt:249 -msgid "When conflicts are resolved, you can run ``git status`` command again:" -msgstr "" -"Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " -"status``:" - -#: ../../src/vcs/branch.txt:262 -msgid "" -"If you're happy with that, and you verify that everything that had conflicts " -"has been staged, you can run ``git commit`` for finalize the merge commit." -msgstr "" -"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " -"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " -"злиття." - -#: ../../src/vcs/branch.txt:266 -msgid "Rebasing" -msgstr "Перебазування" - -#: ../../src/vcs/branch.txt:268 -msgid "" -"In Git, there two main ways to integrate changes from one branch into " -"another: the ``merge`` and the ``rebase``." -msgstr "" -"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " -"\"злиття\" і \"перебазування\"." - -#: ../../src/vcs/branch.txt:271 -msgid "" -"Earlier, there was an example of diverged work and commits made on two " -"different branches." -msgstr "" -"Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " -"зроблених на двох різних гілках." - -#: ../../src/vcs/branch.txt:278 -msgid "" -"The easiest way to integrate the branches, as we've already covered, is the " -"``merge`` command. It performs a three-way merge between the two latest " -"branch snapshots, and the most recent common ancestor of the two, creating a " -"new snapshot (and commit)." -msgstr "" -"Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " -"``merge``. Вона виконує тристороннє злиття між двома останніми знімками " -"гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." - -#: ../../src/vcs/branch.txt:283 -msgid "" -"However, there is another way: you can take the patch of the change that was " -"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " -"is called *rebasing*. With ``rebase`` command, you can take all the changes " -"that were committed on one branch and replay them on a different branch." -msgstr "" -"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " -"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " -"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " -"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." - -#: ../../src/vcs/branch.txt:295 -msgid "" -"This operation works by going to the common ancestor of the two branches, " -"getting the diff introduced by each commit of the branch you're on, saving " -"those diffs to temporary files, resetting the current branch to the same " -"commit as the branch you are rebasing onto, and finally applying each change " -"in turn." -msgstr "" -"Ця операція виконується шляхом переходу до спільного предка двох гілок, " -"отримання відмінностей, внесених кожним коммітом гілки, на якій ви " -"перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " -"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " -"нарешті, застосування кожної зміни по черзі." - -#: ../../src/vcs/branch.txt:306 -msgid "" -"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " -"of their ``master`` branch, rather then merging it in, to keep a mostly " -"linear history." -msgstr "" -"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " -"об'єднувати їх, щоб зберегти переважно лінійну історію." - -#: ../../src/vcs/branch.txt:311 -msgid "Cherry-picking" -msgstr "Cherry-picking" - -#: ../../src/vcs/branch.txt:313 -msgid "" -"The other way to move introduced work from one branch to another is to " -"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " -"takes the patch that was introduced in a commit and tries to reapply it on " -"the branch you're currently on. This is useful if you have a number of " -"commits on a topic branch and you want to integrate only one of them, or if " -"you only have one commit on a topic branch and you'd prefer to cherry-pick " -"it rather than run rebase." -msgstr "" -"Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " -"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " -"відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " -"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " -"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " -"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " -"rebase." - -#: ../../src/vcs/branch.txt:333 -msgid "Branching strategies" -msgstr "Стратегії розгалуження" - -#: ../../src/vcs/branch.txt:335 -msgid "" -"Branching strategy in version control systems defines how branches are " -"created, managed, and used in a project's development process. It helps " -"teams collaborate effectively, isolate changes, and organize development " -"efforts. A good branching strategy provides clarity on how to work with " -"branches, minimizes conflicts, and enables a smooth and structured " -"development workflow." -msgstr "" -"Стратегія розгалуження в системах контролю версій визначає, як створюються, " -"управляються та використовуються гілки в процесі розробки проекту. Вона " -"допомагає командам ефективно співпрацювати, ізолювати зміни та " -"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " -"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " -"структурований робочий процес розробки." - -#: ../../src/vcs/branch.txt:342 -msgid "" -"GitFlow is a popular branching strategy that provides a well-defined model " -"for managing branches in a Git repository. It was introduced by Vincent " -"Driessen and is based on the idea of using two main branches: \"master\" and " -"\"develop.\"" -msgstr "" -"GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " -"модель для управління гілками в Git-репозиторії. Вона була представлена " -"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " -"основних гілок: \"master\" і \"develop\"." - -#: ../../src/vcs/branch.txt:346 -msgid "" -"**Master Branch**: The \"master\" branch represents the stable version of " -"the codebase. It should always contain production-ready code and be free " -"from any major issues. The \"master\" branch is protected, and only release " -"versions are merged into it." -msgstr "" -"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " -"бази. Вона завжди повинна містити готовий до використання код і не містити " -"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " -"релізні версії." - -#: ../../src/vcs/branch.txt:350 -msgid "" -"**Develop Branch**: The \"develop\" branch is where the ongoing development " -"and integration of features take place. It serves as the integration branch " -"for various feature branches and should also contain a stable version of the " -"code." -msgstr "" -"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " -"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " -"функціональних гілок, а також повинна містити стабільну версію коду." - -#: ../../src/vcs/branch.txt:354 -msgid "" -"**Feature Branches**: For each new feature or bug fix, a dedicated " -"\"feature\" branch is created off the \"develop\" branch. These branches are " -"short-lived and exist only for the duration of the feature development." -msgstr "" -"**Вітки функцій**: Для кожної нової функції або виправлення помилки " -"створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " -"недовговічні і існують лише на час розробки функції." - -#: ../../src/vcs/branch.txt:357 -msgid "" -"**Release Branches**: When the development on the \"develop\" branch is " -"ready for a release, a \"release\" branch is created. The release branch is " -"used for testing, bug fixing, and preparing for deployment." -msgstr "" -"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " -"створюється гілка \"release\". Релізна гілка використовується для " -"тестування, виправлення помилок і підготовки до розгортання." - -#: ../../src/vcs/branch.txt:360 -msgid "" -"**Hotfix Branches**: If a critical issue is discovered in the production " -"version, a \"hotfix\" branch is created from the \"master\" branch. This " -"allows for a quick fix without affecting ongoing development on the " -"\"develop\" branch." -msgstr "" -"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " -"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " -"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." - -#: ../../src/vcs/branch.txt:365 -msgid "" -"GitFlow provides a structured approach to managing branching in a " -"collaborative development environment. It ensures that the main branches " -"remain stable, and new features and bug fixes are integrated smoothly before " -"being released. This strategy is particularly useful for projects with " -"regular releases and a team working on multiple features concurrently." -msgstr "" -"GitFlow забезпечує структурований підхід до управління розгалуженням у " -"середовищі спільної розробки. Він гарантує, що основні гілки залишаються " -"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " -"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " -"і командою, яка працює над декількома функціями одночасно." - -#: ../../src/vcs/github.txt:-1 -msgid "version, control, system, vcs, git, github" -msgstr "version, control, system, vcs, git, github" - -#: ../../src/vcs/github.txt:10 -msgid "GitHub" -msgstr "GitHub" - -#: ../../src/vcs/github.txt:12 -msgid "" -"`GitHub`_ is the single largest host for Git repositories, and is the " -"central point of collaboration for millions of developers and projects." -msgstr "" -"`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " -"точкою співпраці для мільйонів розробників і проектів." - -#: ../../src/vcs/github.txt:16 -msgid "Account setup and configuration" -msgstr "Налаштування та конфігурація акаунта" - -#: ../../src/vcs/github.txt:18 -msgid "" -"The first thing you need to do is set up a free user account. Visit " -"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " -"account creation process. Just follow the hints and provide an email " -"address, username and a strong password." -msgstr "" -"Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " -"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " -"GitHub проведе вас через процес створення облікового запису. Просто " -"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " -"та надійний пароль." - -#: ../../src/vcs/github.txt:24 -msgid "About authentication to GitHub" -msgstr "Про автентифікацію на GitHub" - -#: ../../src/vcs/github.txt:27 -msgid "" -"Starting in March 2023 and through the end of 2023, GitHub gradually began " -"to require all users who contribute code on GitHub to enable two-factor " -"authentication (2FA)." -msgstr "" -"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " -"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " -"двофакторну автентифікацію (2FA)." - -#: ../../src/vcs/github.txt:32 -msgid "Connect with SSH" -msgstr "Підключення за допомогою SSH" - -#: ../../src/vcs/github.txt:34 -msgid "" -"You can access and write data in repositories on GitHub using :abbr:`SSH " -"(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " -"using a private key file on your local machine." -msgstr "" -"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " -"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " -"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " -"комп'ютері." - -#: ../../src/vcs/github.txt:39 -msgid "Generating a new SSH key" -msgstr "Генерація нового SSH-ключа" - -#: ../../src/vcs/github.txt:41 -msgid "" -"You can generate a new SSH key on your local machine. After you do that, you " -"can add the **public** key to your account on GitHub to enable " -"authentication for Git operations over SSH." -msgstr "" -"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " -"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " -"увімкнути автентифікацію для операцій з Git'ом через SSH." - -#: ../../src/vcs/github.txt:45 -msgid "Open terminal (git-bash will suite for Windows users)" -msgstr "Відкритий термінал (для користувачів Windows підійде git-bash)" - -#: ../../src/vcs/github.txt:46 -msgid "Run command:" -msgstr "Виконати команду:" - -#: ../../src/vcs/github.txt:53 -msgid "" -"If you are using a legacy system that doesn't support the **Ed25519** " -"algorithm, use:" -msgstr "" -"Якщо ви використовуєте застарілу систему, яка не підтримує алгоритм " -"**Ed25519**, використовуйте його:" - -#: ../../src/vcs/github.txt:60 -msgid "" -"When you're prompted to \"Enter a file in which to save the key\", you can " -"press **Enter** to accept the default file location." -msgstr "" -"Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " -"натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." - -#: ../../src/vcs/github.txt:67 -msgid "" -"Type a secure passphrase, if you want -- this is an extra layer of security." -msgstr "" -"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." - -#: ../../src/vcs/github.txt:75 -msgid "This will create a new SSH key, using the provided email as label." -msgstr "" -"Буде створено новий SSH-ключ, з використанням наданої адреси електронної " -"пошти як мітки." - -#: ../../src/vcs/github.txt:77 -msgid "" -"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " -"and ensure there are two files generated:" -msgstr "" -"Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " -"каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" - -#: ../../src/vcs/github.txt:80 -msgid "**id_ALGORITHM** (e.g. \"id_rsa\", \"id_ed252519\" etc.)" -msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощо)." - -#: ../../src/vcs/github.txt:81 -msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" -msgstr "" -"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." - -#: ../../src/vcs/github.txt:84 -msgid "" -"The private key (the one without \".pub\") should be kept secure and " -"private. You should never share this." -msgstr "" -"Закритий ключ (той, що без \".pub\") слід зберігати в безпеці і не " -"розголошувати. Ви ніколи не повинні ділитися ним." - -#: ../../src/vcs/github.txt:87 -msgid "" -"The public key is what you add to servers or services to which you want to " -"authenticate using your private key." -msgstr "" -"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " -"хочете пройти автентифікацію за допомогою вашого закритого ключа." - -#: ../../src/vcs/github.txt:91 -msgid "Adding your SSH key to the ssh-agent and GitHub" -msgstr "Додавання SSH-ключа до ssh-агента та GitHub" - -#: ../../src/vcs/github.txt:93 -msgid "" -"Before adding a new SSH key to the ssh-agent to manage your keys, you should " -"have checked for existing SSH keys and generated SSH keys." -msgstr "" -"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " -"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." - -#: ../../src/vcs/github.txt:96 -msgid "" -"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " -"it manually:" -msgstr "" -"Переконайтеся, що ssh-агент запущено. Ви можете скористатися " -"\"Автозапуском\" або запустити його вручну:" - -#: ../../src/vcs/github.txt:104 -msgid "Add you SSH private key to the ssh-agent." -msgstr "Додайте ваш приватний ключ SSH до ssh-агента." - -#: ../../src/vcs/github.txt:110 -msgid "" -"Add the SSH public key to your account on GitHub. Copy the SSH public key to " -"your clipboard." -msgstr "" -"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " -"відкритий ключ SSH до буфера обміну." - -#: ../../src/vcs/github.txt:117 -msgid "" -"Alternatively, if ``clip`` isn't working, just type public key content to " -"the terminal using ``cat``," -msgstr "" -"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " -"терміналі за допомогою ``cat``," - -#: ../../src/vcs/github.txt:124 -msgid "" -"or simply navigate to the file and open it with any text editor. At the end, " -"you need to copy public key content." -msgstr "" -"або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " -"текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." - -#: ../../src/vcs/github.txt:127 -msgid "" -"On GitHub, in the upper-right corner of any page, click your profile photo, " -"then click **Settings**." -msgstr "" -"На GitHub у правому верхньому куті будь-якої сторінки натисніть на " -"фотографію свого профілю, а потім натисніть **Налаштування**." - -#: ../../src/vcs/github.txt:129 -msgid "" -"In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " -"press **New SSH key** button." -msgstr "" -"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " -"кнопку **Новий ключ SSH**." - -#: ../../src/vcs/github.txt:131 -msgid "In the \"Title\" field, add a descriptive label for the new key." -msgstr "У полі \"Назва\" додайте описову мітку для нового ключа." - -#: ../../src/vcs/github.txt:132 -msgid "Select the type of key -- \"Authentication key\"." -msgstr "Виберіть тип ключа - \"Ключ автентифікації\"." - -#: ../../src/vcs/github.txt:133 -msgid "In the \"Key\" field, paste your public key." -msgstr "У полі \"Ключ\" вставте ваш відкритий ключ." - -#: ../../src/vcs/github.txt:134 -msgid "Click **Add SSH key**." -msgstr "Натисніть **Додати SSH-ключ**." - -#: ../../src/vcs/github.txt:135 -msgid "If prompted, confirm access to your account on GitHub." -msgstr "" -"Якщо з'явиться відповідний запит, підтвердіть доступ до свого облікового " -"запису на GitHub." - -#: ../../src/vcs/index.txt:-1 ../../src/vcs/intro.txt:-1 -msgid "version, control, system, vcs, git" -msgstr "version, control, system, vcs, git" - -#: ../../src/vcs/index.txt:8 -msgid "Version Control System" -msgstr "Система контролю версій" - -#: ../../src/vcs/index.txt:10 -msgid "" -":abbr:`VCS (Version Control Systems)` play an integral role in modern " -"software development. They allow multiple developers to work on a project " -"simultaneously without overwriting each other's changes. VCSs track the " -"history of changes to the source code, making it possible to revert to " -"previous states, compare versions, and more." -msgstr "" -":abbr:`VCS (Version Control Systems)` відіграють невід'ємну роль у сучасній " -"розробці програмного забезпечення. Вони дозволяють декільком розробникам " -"працювати над проектом одночасно, не перезаписуючи зміни один одного. VCS " -"відстежують історію змін у вихідному коді, дозволяючи повертатися до " -"попередніх станів, порівнювати версії тощо." - -#: ../../src/vcs/index.txt:16 -msgid "" -"Among the VCSs available, Git stands out as one of the most popular and " -"powerful tools. It's used by small projects and large-scale software alike, " -"owing to its flexibility, distributed nature, and efficient handling of " -"codebase versions." -msgstr "" -"Серед наявних VCS Git є одним з найпопулярніших і найпотужніших " -"інструментів. Його використовують як у невеликих проектах, так і у великому " -"програмному забезпеченні, завдяки його гнучкості, розподіленості та " -"ефективній роботі з версіями кодової бази." - -#: ../../src/vcs/index.txt:21 -msgid "" -"In this part, you'll learn about the fundamentals of version control, how to " -"set up your environment for Git, dive into the basics of commits, branches, " -"and merges, understand the significance of tags, and finally, explore how to " -"collaborate using remote repositories and platforms like GitHub." -msgstr "" -"У цій частині ви дізнаєтеся про основи управління версіями, як налаштувати " -"середовище для Git'а, зануритеся в основи коммітів, гілок і злиття, " -"зрозумієте значення тегів і, нарешті, вивчите, як співпрацювати за допомогою " -"віддалених репозиторіїв і платформ на кшталт GitHub." - -#: ../../src/vcs/intro.txt:8 -msgid "About version control (Git)" -msgstr "Про контроль версій (Git)" - -#: ../../src/vcs/intro.txt:10 -msgid "" -"Version control is a system that records changes to a file or set of files " -"over time so that you can recall specific versions later. It allows you to " -"revert selected files back to a previous state, revert the entire project " -"back to a previous state, compare changes over time, see who last modified " -"something that might be causing a problem, who introduced an issue and when, " -"and more." -msgstr "" -"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " -"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " -"повернути вибрані файли до попереднього стану, повернути весь проект до " -"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " -"щось, що може спричинити проблему, хто і коли створив проблему, тощо." - -#: ../../src/vcs/intro.txt:16 -msgid "" -"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " -"check out the latest snapshot of the files; rather, they fully mirror the " -"repository, including its full history. Thus, if any server dies, and these " -"systems were collaborating via that server, any of the client repositories " -"can be copied back up to the server to restore it. Every clone is really a " -"full backup of all the data." -msgstr "" -"У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " -"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " -"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " -"ладу, а ці системи працювали через нього, будь-який з клієнтських " -"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " -"клон - це фактично повна резервна копія всіх даних." - -#: ../../src/vcs/intro.txt:26 -msgid "Distributed version control diagram" -msgstr "Розподілена схема управління версіями" - -#: ../../src/vcs/intro.txt:29 -msgid "What is Git?" -msgstr "Що таке Git?" - -#: ../../src/vcs/intro.txt:30 -msgid "" -"The major difference between Git and any other VCS is the way Git thinks " -"about its data. Conceptually, most other systems store information as a list " -"of file-based changes. Git doesn't think of or store its data this way. " -"Instead, Git thinks of its data more like a series of snapshots of a " -"miniature filesystem." -msgstr "" -"Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " -"Git'ом мислить про свої дані. Концептуально, більшість інших систем " -"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " -"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " -"серію знімків мініатюрної файлової системи." - -#: ../../src/vcs/intro.txt:36 -msgid "" -"This is an important distinction between Git and nearly all other VCSs. It " -"makes Git reconsider almost every aspect of version control that most other " -"systems copied from the previous generation. This makes Git more like a mini " -"filesystem with some incredibly powerful tools built on top of it, rather " -"than simply a VCS." -msgstr "" -"Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " -"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " -"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " -"міні-файлову систему з деякими неймовірно потужними інструментами, " -"побудованими поверх неї, ніж на звичайну VCS." - -#: ../../src/vcs/intro.txt:45 -msgid "Storing data as snapshots of the project over time" -msgstr "Зберігання даних у вигляді знімків проекту з плином часу" - -#: ../../src/vcs/intro.txt:48 -msgid "Local operations" -msgstr "Локальні операції" - -#: ../../src/vcs/intro.txt:49 -msgid "" -"Most operations in Git need only local files and resources to operate -- " -"generally no information is needed from another computer on your network. " -"Because you have the entire history of the project right there on your local " -"disk, most operations seem almost instantaneous." -msgstr "" -"Для виконання більшості операцій у Git'і потрібні лише локальні файли та " -"ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " -"мережі. Оскільки вся історія проекту зберігається на вашому локальному " -"диску, більшість операцій виконуються майже миттєво." - -#: ../../src/vcs/intro.txt:55 -msgid "Integrity" -msgstr "Цілісність" - -#: ../../src/vcs/intro.txt:56 -msgid "" -"Everything in Git is checksummed before it is stored and is then referred to " -"by that checksum. This means it's impossible to change the contents of any " -"file or directory without Git knowing about it." -msgstr "" -"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " -"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " -"каталогу без відома Git'а." - -#: ../../src/vcs/intro.txt:61 -msgid "Repository files states" -msgstr "Стани файлів сховища" - -#: ../../src/vcs/intro.txt:62 -msgid "" -"Git has three main states that your files can reside in: **modified**, " -"**staged**, and **committed**:" -msgstr "" -"Git має три основні стани, в яких можуть перебувати ваші файли: " -"**модифіковані**, **на стадії розробки** та **зафіксовані**:" - -#: ../../src/vcs/intro.txt:65 -msgid "" -"Modified means that you have changed the file but have not committed it to " -"your database yet." -msgstr "" -"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " -"даних." - -#: ../../src/vcs/intro.txt:67 -msgid "" -"Staged means that you have marked a modified file in its current version to " -"go into your next commit snapshot." -msgstr "" -"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " -"він потрапив до наступного знімка фіксації." - -#: ../../src/vcs/intro.txt:69 -msgid "Committed means that the data is safely stored in your local database." -msgstr "" -"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." - -#: ../../src/vcs/intro.txt:76 -msgid "The basic Git workflow goes something like this:" -msgstr "Базовий робочий процес Git'а виглядає приблизно так:" - -#: ../../src/vcs/intro.txt:78 -msgid "You modify files in your working tree." -msgstr "Ви змінюєте файли у вашому робочому дереві." - -#: ../../src/vcs/intro.txt:79 -msgid "" -"You selectively stage just those changes you want to be part of your next " -"commit, which adds only those changes to the staging area." -msgstr "" -"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " -"коміт, що додає тільки ці зміни в область стабілізації." - -#: ../../src/vcs/intro.txt:81 -msgid "" -"You do a commit, which takes the files as they are in the staging area and " -"stores that snapshot permanently to your Git directory." -msgstr "" -"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " -"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." - -#: ../../src/vcs/intro.txt:85 -msgid "Command line" -msgstr "Командний рядок" - -#: ../../src/vcs/intro.txt:87 -msgid "" -"There are a lot of different ways to use Git. There are the original command-" -"line tools, and there are many graphical user interfaces of varying " -"capabilities. For one, the command line is the only place you can run all " -"Git commands -- most of the GUIs implement only a partial subset of Git " -"functionality for simplicity. If you know how to run the command-line " -"version, you can probably also figure out how to run the GUI version, while " -"the opposite is not necessarily true. Also, while your choice of graphical " -"client is a matter of personal taste, all users will have the command-line " -"tools installed and available." -msgstr "" -"Існує багато різних способів використання Git'у. Існують оригінальні " -"інструменти командного рядка, а також багато графічних інтерфейсів " -"користувача з різними можливостями. З одного боку, командний рядок є єдиним " -"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " -"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " -"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " -"ймовірно, також зможете з'ясувати, як запустити версію з графічним " -"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " -"графічного клієнта є справою особистого смаку, всі користувачі матимуть " -"встановлені та доступні інструменти командного рядка." - -#: ../../src/vcs/pullrequest.txt:-1 -msgid "Version Control System - Pull Requests" -msgstr "Система контролю версій - Запити на Злиття (Pull Requests)" - -#: ../../src/vcs/pullrequest.txt:-1 -msgid "Vladyslav Ponomaryov" -msgstr "Vladyslav Ponomaryov" - -#: ../../src/vcs/pullrequest.txt:-1 -msgid "version, control, system, vcs, git, pull request, merge" -msgstr "version, control, system, vcs, git, pull request, merge" - -#: ../../src/vcs/pullrequest.txt:9 -msgid "Pull Request" -msgstr "Запит на Злиття (Pull Request)" - -#: ../../src/vcs/pullrequest.txt:11 -msgid "" -"Pull request let you tell others about changes you've pushed to a branch in " -"a repository on GitHub. Once a pull request is opened, you can discuss and " -"review the potential changes with collaborators and add follow-up commits " -"before your changes are merged into the base branch:cite:`github:about-pr`." -msgstr "" -"Pull-запит дозволяє вам повідомити інших про зміни, які ви перенесли до " -"гілки в репозиторії на GitHub. Після того, як запит відкрито, ви можете " -"обговорити і переглянути потенційні зміни з колегами і додати подальші " -"коміти, перш ніж ваші зміни будуть злиті в базову гілку branch:cite:`github:" -"about-pr`." - -#: ../../src/vcs/pullrequest.txt:17 -msgid "Draft pull requests" -msgstr "Чернетки pull requests" - -#: ../../src/vcs/pullrequest.txt:19 -msgid "" -"Draft pull requests are available in public repositories on GitHub. When you " -"create a pull request, you can choose to a create a pull request that is " -"ready for review or a draft pull request. Draft pull requests cannot be " -"merged. When you're ready to get feedback on your pull request, you can mark " -"your draft pull request as ready for review." -msgstr "" -"Чернетки pull-запитів доступні в публічних репозиторіях на GitHub. Коли ви " -"створюєте пул-запит, ви можете вибрати між створенням готового до розгляду " -"пул-запиту та чернетки пул-запиту. Чернетки пул-запитів не можна " -"об'єднувати. Коли ви будете готові отримати відгук на свій запит, ви можете " -"позначити свій чернетковий запит як готовий до розгляду." - -#: ../../src/vcs/pullrequest.txt:26 -msgid "Difference between commits on compare and pull request pages" -msgstr "Різниця між коммітами на сторінках порівняння та pull-запитів" - -#: ../../src/vcs/pullrequest.txt:28 -msgid "" -"The compare and pull request pages use different methods to calculate the " -"diff for changed files:" -msgstr "" -"Сторінки запитів порівняння і витягування використовують різні методи для " -"обчислення різниці для змінених файлів:" - -#: ../../src/vcs/pullrequest.txt:31 -msgid "" -"Compare pages show the diff between the tip of the head ref and the current " -"common ancestor (that is, the merge base) of the head and base ref." -msgstr "" -"На сторінках порівняння показано різницю між кінчиком головного референта і " -"поточним спільним предком (тобто, основою злиття) головного і основного " -"референта." - -#: ../../src/vcs/pullrequest.txt:33 -msgid "" -"Pull request pages show the diff between the tip of the head ref and the " -"common ancestor of the head and base ref at the time when the pull request " -"was created. Consequently, the merge base used for the comparison might be " -"different." -msgstr "" -"Сторінки запитів на злиття показують різницю між вершиною головного рефа і " -"спільним предком головного і базового рефів на момент створення запиту на " -"злиття. Отже, база злиття, яка використовується для порівняння, може " -"відрізнятися." - -#: ../../src/vcs/pullrequest.txt:39 -msgid "About comparing branches" -msgstr "Про порівняння гілок" - -#: ../../src/vcs/pullrequest.txt:41 -msgid "" -"Pull requests display diffs to compare the changes you made in your topic " -"branch against the base branch that you want to merge your changes into." -msgstr "" -"Витягніть запити на відображення відмінностей, щоб порівняти зміни, зроблені " -"у вашій гілці теми, з базовою гілкою, до якої ви хочете об'єднати ваші зміни." - -#: ../../src/vcs/pullrequest.txt:44 -msgid "" -"Rather that viewing the commits themselves, you can view the proposed " -"changes as they'll appear in the files once the pull request is merged. The " -"files appear in alphabetical order within the Files changed tab. Additions " -"to the files appear in green and are prefaced by a ``+`` sign while content " -"that has been removed appears in red and is prefaced by a ``-`` sign :cite:" -"`github:compare-pr`." -msgstr "" -"Замість того, щоб переглядати самі комміти, ви можете переглянути " -"запропоновані зміни, які з'являться у файлах після об'єднання запиту на " -"витягування. Файли відображаються в алфавітному порядку на вкладці Змінені " -"файли. Доповнення до файлів відображаються зеленим кольором зі знаком ``+``, " -"тоді як вміст, який було вилучено, відображається червоним кольором зі " -"знаком ``-`` :cite:`github:compare-pr`." - -#: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 -msgid "Creating a pull request" -msgstr "Створення pull-запиту" - -#: ../../src/vcs/pullrequest.txt:54 -msgid "" -"Create a pull request to propose and collaborate on changes to a repository. " -"These changes are proposed in a *branch*, which ensures that the default " -"branch only contains finished and approved work:cite:`github:create-pr`." -msgstr "" -"Створіть pull request, щоб пропонувати зміни до сховища та співпрацювати над " -"ними. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " -"замовчуванням містить лише завершені та затверджені роботи:cite:`github:" -"create-pr`." - -#: ../../src/vcs/pullrequest.txt:61 -msgid "" -"Use a branch to isolate development work without affecting other branches in " -"the repository. Each repository has one default branch, and can have " -"multiple other branches. You can merge a branch into another branch using a " -"pull request." -msgstr "" -"Використовуйте гілку, щоб ізолювати роботу над розробкою, не впливаючи на " -"інші гілки у сховищі. Кожне сховище має одну гілку за замовчуванням і може " -"мати декілька інших гілок. Ви можете об'єднати гілку з іншою гілкою за " -"допомогою pull-запиту." - -#: ../../src/vcs/pullrequest.txt:66 -msgid "" -"Branches allow you to develop features, fix bugs, or safely experiment with " -"new ideas in a contained area of your repository." -msgstr "" -"Гілки дозволяють розробляти функції, виправляти помилки або безпечно " -"експериментувати з новими ідеями в обмеженій області вашого сховища." - -#: ../../src/vcs/pullrequest.txt:69 -msgid "" -"You always create a branch from an existing branch. Typically, you might " -"create a new branch from the default branch of your repository." -msgstr "" -"Ви завжди створюєте гілку з існуючої гілки. Зазвичай, ви можете створити " -"нову гілку з гілки за замовчуванням вашого сховища." - -#: ../../src/vcs/pullrequest.txt:75 -msgid "On GitHub, navigate to the main page of the repository." -msgstr "На GitHub перейдіть на головну сторінку репозиторію." - -#: ../../src/vcs/pullrequest.txt:76 -msgid "Switch to \"Pull requests\" tab." -msgstr "Перейдіть на вкладку \"Pull requests\"." - -#: ../../src/vcs/pullrequest.txt:77 -msgid "Press \"New pull request\" button." -msgstr "Натисніть кнопку \"New pull request\"." - -#: ../../src/vcs/pullrequest.txt:78 -msgid "Select base and source branches." -msgstr "Виберіть базову і вихідну гілки." - -#: ../../src/vcs/pullrequest.txt:79 -msgid "Press \"Create pull request\" button." -msgstr "Натисніть кнопку \"Create pull request\"." - -#: ../../src/vcs/pullrequest.txt:80 -msgid "Provide a meaningful title and description." -msgstr "Надайте змістовну назву та опис." - -#: ../../src/vcs/pullrequest.txt:81 -msgid "Draft or create a pull request." -msgstr "Створіть pull request або його чорнетку." - -#: ../../src/vcs/pullrequest.txt:83 -msgid "" -"To create pull request that is ready for review, click **Create Pull " -"Request**." -msgstr "" -"Щоб створити запит, готовий до перегляду, натисніть **Create Pull Request**." - -#: ../../src/vcs/pullrequest.txt:85 -msgid "" -"To create a draft pull request, use the drop-down and select **Create Draft " -"Pull Request**, then click **Draft Pull Request**." -msgstr "" -"Щоб створити чернетку запиту на вилучення, скористайтеся випадаючим списком " -"і виберіть **Create Draft Pull Request**, а потім натисніть **Draft Pull " -"Request**." - -#: ../../src/vcs/remotes.txt:3 -msgid "Remotes" -msgstr "Віддалені репозиторії" - -#: ../../src/vcs/remotes.txt:5 -msgid "" -"To be able to collaborate on any Git project, you need to know how to manage " -"your remote repositories. Remote repositories are versions of your project " -"that are hosted on the Internet or network somewhere. You can have several " -"of them, each of which generally is either read-only or read/write for you. " -"Managing remotes includes knowing how to add remote repositories, remove " -"remote repositories that are no longer valid, manage various branches and " -"define them as being tracked or not, and more." -msgstr "" -"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " -"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " -"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " -"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " -"або читання/запису. Керування віддаленими сховищами включає в себе вміння " -"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " -"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " -"чи ні, і багато іншого." - -#: ../../src/vcs/remotes.txt:21 -msgid "Showing your remote" -msgstr "Перелік віддалених репозиторіїв" - -#: ../../src/vcs/remotes.txt:23 -msgid "" -"To see which remote servers you have configured, you can run the ``git " -"remote`` command. It lists the shortnames of each remote handle you're " -"specified. If you've cloned your repository, you should at least see " -"``origin`` - that is default name Git gives to the server you clone from:" -msgstr "" -"Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " -"команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " -"віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " -"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " -"з якого ви клонуєте:" - -#: ../../src/vcs/remotes.txt:41 -msgid "" -"This means we can pull contributions from any of these users pretty easily. " -"We may additionally have permission to push to one or more of these." -msgstr "" -"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " -"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " -"або декількох з них." - -#: ../../src/vcs/remotes.txt:45 -msgid "Adding remote repositories" -msgstr "Додавання віддалених репозиторіїв" - -#: ../../src/vcs/remotes.txt:47 -msgid "" -"To add a new remote Git repository as a shortname you can reference easily, " -"run ``git remote add ``:" -msgstr "" -"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " -"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" - -#: ../../src/vcs/remotes.txt:61 -msgid "" -"Now you can use the string \"personal\" on the command line in lieu of the " -"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" -"course\" is now accessible as ``personal/master``, while shortname to the " -"same branch in origin will be -- ``origin/master``." -msgstr "" -"Тепер ви можете використовувати рядок \"personal\" в командному рядку " -"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" -"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " -"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." - -#: ../../src/vcs/remotes.txt:67 -msgid "Fetching and pulling from remotes" -msgstr "Отримання та витягування з віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:69 -msgid "" -"To get data from remote project, you can run ``git fetch`` command. The " -"command goes out to that remote project and pulls down all the information " -"from that remote project that you don't have yet. After you do this, you " -"should have references to all the branches from that remote, which you can " -"merge in or inspect at any time." -msgstr "" -"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " -"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " -"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " -"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " -"переглянути у будь-який час." - -#: ../../src/vcs/remotes.txt:79 -msgid "" -"If your current branch is set up to track a remote branch, you can use ``git " -"pull`` command to automatically fetch and then merge that remote branch into " -"your current branch. By default, the ``git clone`` command automatically " -"sets up your local ``master`` branch to track the remote ``master`` branch " -"(or whatever default remote branch)." -msgstr "" -"Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " -"можете скористатися командою ``git pull`` для автоматичного отримання і " -"подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " -"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " -"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " -"іншої віддаленої гілки за замовчуванням)." - -#: ../../src/vcs/remotes.txt:85 -msgid "" -"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." -"rebase`` variable is not set. Git will keep warning you until you set the " -"variable." -msgstr "" -"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " -"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " -"доки ви не встановите змінну." - -#: ../../src/vcs/remotes.txt:90 -msgid "" -"If you want the default behavior of Git (fast-forward if possible, else " -"create a merge commit): ``git config --global pull.rebase \"false\"``." -msgstr "" -"Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " -"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " -"pull.rebase \"false\"``." - -#: ../../src/vcs/remotes.txt:93 -msgid "" -"If you want to rebase when pulling: ``git config --global pull.rebase " -"\"true\"``." -msgstr "" -"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." -"rebase \"true\"``." - -#: ../../src/vcs/remotes.txt:97 -msgid "Pushing to remotes" -msgstr "Відправка до віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:99 -msgid "" -"When you have your project at a point that you want to share, you have to " -"push it upstream. The command for this is simple: ``git push " -"``." -msgstr "" -"Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " -"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " -"push <віддалений> <гілка>``." - -#: ../../src/vcs/remotes.txt:106 -msgid "" -"This command works only if you cloned from a server to which you have write " -"access and if nobody has pushed in the meantime. If you and someone else " -"clone at the same time and they push upstream and then you push upstream, " -"you push will rightly be rejected. You'll have to fetch their work first and " -"incorporate it into yours before you'll be allowed to push." -msgstr "" -"Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " -"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " -"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " -"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " -"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." - -#: ../../src/vcs/remotes.txt:113 -msgid "Pushing a new branch to remote" -msgstr "Переміщення нової гілки до віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:115 -msgid "" -"In case you have created a local branch for some specific needs and you want " -"to share this branch, you need to set up track for this branch. This can be " -"done by using: ``git push --set-upstream origin ``. This will " -"create a new remote branch and set up track to your current local branch. " -"There is a shortcut for this command: ``git push -u origin ``." -msgstr "" -"Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " -"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " -"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " -"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " -"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " -"<віддалена_гілка>``." - -#: ../../src/vcs/remotes.txt:122 -msgid "Inspecting a remote" -msgstr "Перевірка віддаленого репозиторію" - -#: ../../src/vcs/remotes.txt:124 -msgid "" -"If you want to see more information about a particular remote, you can use " -"the ``git remote show ``." -msgstr "" -"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " -"tag -d ``." - -#: ../../src/vcs/tagging.txt:117 -msgid "Checking out tags" -msgstr "Перевірка тегів" - -#: ../../src/vcs/tagging.txt:119 -msgid "" -"If you want to view the versions of files a tag is pointing to, you can do a " -"``git checkout`` of that tag, although this puts your repository in " -"\"detached HEAD\" state, which has some ill side effects:" -msgstr "" -"Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " -"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " -"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" - -#: ../../src/vcs/tagging.txt:145 -msgid "" -"In \"detached HEAD\" state, if you make changes and then create a commit, " -"the tag will stay the same, but your new commit won’t belong to any branch " -"and will be unreachable, except by the exact commit hash. Thus, if you need " -"to make changes -- say you’re fixing a bug on an older version, for instance " -"-- you will generally want to create a branch:" -msgstr "" -"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " -"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " -"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " -"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " -"як правило, краще створити гілку:" - -#~ msgid "version, control, system, vcs, git, history, commit" -#~ msgstr "version, control, system, vcs, git, history, commit" diff --git a/src/_locales/uk/LC_MESSAGES/vcs/basics.po b/src/_locales/uk/LC_MESSAGES/vcs/basics.po new file mode 100644 index 000000000..c8348a49b --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/basics.po @@ -0,0 +1,950 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/basics.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/basics.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/basics.txt:-1 +msgid "version, control, system, vcs, git, basics" +msgstr "version, control, system, vcs, git, basics" + +#: ../../src/vcs/basics.txt:8 +msgid "Git Basics" +msgstr "Основи Git" + +#: ../../src/vcs/basics.txt:11 +msgid "Getting a Git repository" +msgstr "Отримання Git-репозиторію" + +#: ../../src/vcs/basics.txt:13 +msgid "You typically obtain a Git repository in one of two ways:" +msgstr "Зазвичай ви отримуєте Git-репозиторій одним з двох способів:" + +#: ../../src/vcs/basics.txt:15 +msgid "" +"You can take a local directory that is currently not under version control, " +"and turn it into a Git repository." +msgstr "" +"Ви можете взяти локальний каталог, який наразі не перебуває під контролем " +"версій, і перетворити його на Git-репозиторій." + +#: ../../src/vcs/basics.txt:17 +msgid "You can clone an existing Git repository from elsewhere." +msgstr "Ви можете клонувати існуюче сховище Git'а з іншого місця." + +#: ../../src/vcs/basics.txt:19 +msgid "" +"In either case, you end up with a Git repository on your local machine, " +"ready for work." +msgstr "" +"У будь-якому випадку, ви отримаєте Git-репозиторій на вашій локальній " +"машині, готовий до роботи." + +#: ../../src/vcs/basics.txt:23 +msgid "Initializing repo in an existing directory" +msgstr "Ініціалізація репо в існуючому каталозі" + +#: ../../src/vcs/basics.txt:25 +msgid "" +"If you have a project directory that is currently not under version control " +"and you want to start controlling it with Git, you first need to go to that " +"project's directory. If you've never done this, it looks a little different " +"depending on which system you're running:" +msgstr "" +"Якщо у вас є каталог проекту, який наразі не перебуває під контролем версій, " +"і ви хочете почати контролювати його за допомогою Git'а, спершу вам потрібно " +"перейти до каталогу цього проекту. Якщо ви ніколи цього не робили, це " +"виглядає трохи інакше, залежно від того, якою системою ви користуєтеся:" + +#: ../../src/vcs/basics.txt:30 +msgid "Change directory in bash (Linux)" +msgstr "Зміна каталогу в bash (Linux)" + +#: ../../src/vcs/basics.txt:35 +msgid "Change directory in bash (MacOS)" +msgstr "Зміна каталогу в bash (MacOS)" + +#: ../../src/vcs/basics.txt:40 +msgid "Change directory in PowerShell (Windows)" +msgstr "Зміна каталогу в PowerShell (Windows)" + +#: ../../src/vcs/basics.txt:45 +msgid "In the project's directory initialize a new Git repository." +msgstr "У каталозі проекту ініціалізуйте новий Git-репозиторій." + +#: ../../src/vcs/basics.txt:51 +msgid "" +"This creates a new subdirectory named .git that contains all of your " +"necessary repository files -- a Git repository skeleton." +msgstr "" +"Це створить новий підкаталог з ім'ям .git, який міститиме всі необхідні " +"файли сховища - скелет сховища Git." + +#: ../../src/vcs/basics.txt:55 +msgid "Cloning an existing repo" +msgstr "Клонування існуючого репо" + +#: ../../src/vcs/basics.txt:57 +msgid "" +"If you want to get a copy of an existing Git repository -- for example, a " +"project you'd like to contribute to -- the command you need is ``git clone``." +msgstr "" +"Якщо ви хочете отримати копію існуючого сховища Git'а - наприклад, проекту, " +"до якого ви хочете долучитися, - вам потрібна команда ``git clone``." + +#: ../../src/vcs/basics.txt:64 +msgid "" +"That creates a directory named *edu-python-course.github.io*, initializes a " +"*.git* directory inside it, pulls down all the data for that repository, and " +"checks out a working copy of the latest version." +msgstr "" +"Він створює каталог з назвою *edu-python-course.github.io*, ініціалізує " +"каталог *.git* всередині нього, витягує всі дані для цього сховища і " +"перевіряє робочу копію останньої версії." + +#: ../../src/vcs/basics.txt:72 +msgid "" +"That command does the same thing as the previous one, but the target " +"directory is called *python-course*." +msgstr "" +"Ця команда робить те саме, що й попередня, але цільовий каталог називається " +"*python-course*." + +#: ../../src/vcs/basics.txt:75 +msgid "" +"Git has a number of different transfer protocols you can use. The previous " +"example uses the ``https://`` protocol, but you may also see ``git://`` or " +"``user@server:path/to/repo.git``, which uses the SSH transfer protocol." +msgstr "" +"Git має декілька різних протоколів передачі даних, які ви можете " +"використовувати. У попередньому прикладі використовується протокол ``https://" +"``, але ви також можете побачити ``git://`` або ``user@server:path/to/repo." +"git``, який використовує протокол передачі SSH." + +#: ../../src/vcs/basics.txt:80 +msgid "Making changes to the repo" +msgstr "Внесення змін до репозиторію" + +#: ../../src/vcs/basics.txt:82 +msgid "" +"At this point, you should have a *bona fide* Git repository on your local " +"machine, and a checkout or *working copy* of all of its files in front of " +"you. Typically, you'll want to start making changes and committing snapshots " +"of those changes into your repository each time the project reaches a state " +"you want to record." +msgstr "" +"На цьому етапі у вас має бути *справжній* Git-репозиторій на локальному " +"комп'ютері, а також контрольна або *робоча копія* всіх його файлів перед " +"вами. Зазвичай, ви захочете почати вносити зміни і фіксувати знімки цих змін " +"у вашому сховищі кожного разу, коли проект досягне стану, який ви хочете " +"зафіксувати." + +#: ../../src/vcs/basics.txt:88 +msgid "" +"Remember that each file in your working directory can be in one of two " +"states: **tracked** or **untracked**." +msgstr "" +"Пам'ятайте, що кожен файл у вашому робочому каталозі може перебувати в " +"одному з двох станів: **відстежується** або **невідстежується**." + +#: ../../src/vcs/basics.txt:91 +msgid "" +"Tracked files are files that were in the last snapshot, as well as any newly " +"staged files; they can be unmodified, modified, or staged. In short, tracked " +"files are files that Git knows about." +msgstr "" +"Відстежувані файли - це файли, які були в останньому знімку, а також будь-" +"які нещодавно покладені файли; вони можуть бути незміненими, зміненими або " +"покладеними. Коротше кажучи, відстежувані файли - це файли, про які відомо " +"Git'у." + +#: ../../src/vcs/basics.txt:94 +msgid "" +"Untracked files are everything else -- any files in your working directory " +"that were not in your last snapshot and are not in your staging area. " +"Untracked basically means that Git sees a file you didn't have in a previous " +"snapshot (commit), and which hasn't been yet staged." +msgstr "" +"Невідстежені файли - це все інше - будь-які файли у вашому робочому " +"каталозі, яких не було у вашому останньому знімку і які не перебувають у " +"вашій області сховища. По суті, це означає, що Git бачить файл, якого не " +"було у попередньому знімку (комміті), і який ще не було покладено у сховище." + +#: ../../src/vcs/basics.txt:104 +msgid "Checking out status of the file(s)" +msgstr "Перевірка стану файлу(ів)" + +#: ../../src/vcs/basics.txt:106 +msgid "" +"The main tool you use to determine which files are in which state is the " +"``git status`` command." +msgstr "" +"Основним інструментом для визначення стану файлів є команда ``git status``." + +#: ../../src/vcs/basics.txt:133 +msgid "" +"Newly added *README.md* file is untracked, because it's under \"Untracked " +"files\" heading the status output." +msgstr "" +"Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " +"розділі \"Файли, що не відстежуються\" у виведенні статусу." + +#: ../../src/vcs/basics.txt:137 +msgid "Tracking new files" +msgstr "Відстеження нових файлів" + +#: ../../src/vcs/basics.txt:139 +msgid "In order to begin tracking a new file, you use the ``git add`` command." +msgstr "" +"Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " +"add``." + +#: ../../src/vcs/basics.txt:153 +msgid "" +"From now *README.md* file is **added** to the stage area and ready to be " +"committed (is under \"Changes to be committed\" heading)." +msgstr "" +"Відтепер файл *README.md* **додано** до області сцени і він готовий до " +"фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." + +#: ../../src/vcs/basics.txt:157 +msgid "" +"You can use wildcards, to stage multiple files at once. The most common use " +"cases is to add **all** modified files, or files inside of a specific " +"directory." +msgstr "" +"Ви можете використовувати підстановочні знаки, щоб вносити зміни до кількох " +"файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " +"змінених файлів або файлів у певному каталозі." + +#: ../../src/vcs/basics.txt:168 +msgid "Staging modified files" +msgstr "Зберігання змінених файлів" + +#: ../../src/vcs/basics.txt:170 +msgid "" +"If a staged (or already committed) file has been changed, it will be moved " +"under \"Modified\" heading. These changes wouldn't be committed unless they " +"are staged." +msgstr "" +"Якщо файл, що перебуває на етапі (або вже зафіксований), було змінено, його " +"буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " +"вони не були поетапними." + +#: ../../src/vcs/basics.txt:190 +msgid "" +"Changes may be added to the stage area by repeating ``git add`` command." +msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." + +#: ../../src/vcs/basics.txt:191 +msgid "" +"Changes may be discard by ``git restore `` command. This action will " +"restore file to its **staged** version." +msgstr "" +"Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " +"до його **попередньої** версії." + +#: ../../src/vcs/basics.txt:195 +msgid "Committing changes" +msgstr "Фіксація змін" + +#: ../../src/vcs/basics.txt:197 +msgid "" +"Now that the stage area is set up the way required, it's time to commit " +"changes. Remember that anything that is still unstaged -- any files you have " +"created or modified that you haven't run git add on since you edited them -- " +"won't go into this commit." +msgstr "" +"Тепер, коли область змін налаштована належним чином, настав час зафіксувати " +"зміни. Пам'ятайте, що все, що ще не є стадією - будь-які файли, які ви " +"створили або змінили, але не запустили git-додаток з моменту редагування, - " +"не потраплять до цього коміту." + +#: ../../src/vcs/basics.txt:202 +msgid "The simplest way to commit is to type ``git commit``:" +msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" + +#: ../../src/vcs/basics.txt:208 +msgid "Doing so launches your editor of choice." +msgstr "Після цього запуститься обраний вами редактор." + +#: ../../src/vcs/basics.txt:211 +msgid "" +"This is set by your shell's EDITOR environment variable -- usually vim or " +"emacs, although you can configure it with whatever you want using the ``git " +"config --global core.editor``" +msgstr "" +"Це задається змінною оточення EDITOR вашої оболонки - зазвичай vim або " +"emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" +"global core.editor``" + +#: ../../src/vcs/basics.txt:215 +msgid "" +"Alternatively, you can type your commit message inline with the ``commit`` " +"command by specifying it after a ``-m`` flag, like this:" +msgstr "" +"Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " +"``commit``, вказавши його після прапорця ``-m``, як показано нижче:" + +#: ../../src/vcs/basics.txt:222 +msgid "" +"Although it can be amazingly useful for crafting commits exactly how you " +"want them, the staging area is sometimes a bit more complex than you need in " +"your workflow. If you want to skip the staging area, Git provides a simple " +"shortcut. Adding the ``-a`` option to the ``git commit`` command makes Git " +"automatically stage every file that is already tracked before doing the " +"commit, letting you skip the git add part:" +msgstr "" +"Хоча вона може бути надзвичайно корисною для створення коммітів саме так, як " +"вам потрібно, область підготовки іноді буває трохи складнішою, ніж вам " +"потрібно у вашому робочому процесі. Якщо ви хочете пропустити область " +"підготовки, Git надає простий ярлик. Додавання опції ``-a`` до команди ``git " +"commit`` змушує Git автоматично стадіювати кожен файл, який вже " +"відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " +"git add:" + +#: ../../src/vcs/basics.txt:263 +msgid "Ignoring files" +msgstr "Ігнорування файлів" + +#: ../../src/vcs/basics.txt:265 +msgid "" +"Often, there is a class of files, that should not be a part of a repo. You " +"want these files to be prevent from being automatically added or even shown " +"as being untracked. These are generally files produced by loggers or a build " +"system, or some local settings for the project that shouldn't be shared " +"across other developers or maintainers. In such cases you can create a *." +"gitignore* file. Here is the content of *.gitignore* used in current " +"repository:" +msgstr "" +"Часто існує клас файлів, які не повинні бути частиною репозиторію. Ви " +"хочете, щоб ці файли не додавалися автоматично або навіть показувалися як " +"такі, що не відстежуються. Зазвичай це файли, створені логгерами або " +"системою збірки, або деякі локальні налаштування проекту, які не повинні " +"бути доступними для інших розробників або супровідників. У таких випадках ви " +"можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " +"використовується у поточному сховищі:" + +#: ../../src/vcs/basics.txt:305 +msgid "These lines mean:" +msgstr "Ці рядки означають:" + +#: ../../src/vcs/basics.txt:307 +msgid "" +"Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " +"will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " +"повністю проігноровано." + +#: ../../src/vcs/basics.txt:309 +msgid "Content within \"node_modules\" directory will be ignored completely." +msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:310 +msgid "" +"Any files within directories named \".vscode\" or \".idea\" will be ignored " +"completely." +msgstr "" +"Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " +"повністю проігноровані." + +#: ../../src/vcs/basics.txt:312 +msgid "Any file with name starting with hash (#) will be ignored." +msgstr "" +"Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." + +#: ../../src/vcs/basics.txt:313 +msgid "Any file with name ending with tilda (~) will be ignored." +msgstr "" +"Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." + +#: ../../src/vcs/basics.txt:314 +msgid "" +"Content within directories named \"temp\" or \"tmp\" will be ignored " +"completely." +msgstr "" +"Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:316 +msgid "" +"Content within directories named \"_builds\", \"_build\", \"builds\" or " +"\"build\" will be ignored completely." +msgstr "" +"Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " +"буде повністю проігноровано." + +#: ../../src/vcs/basics.txt:318 +msgid "Any file with name ending with \".pot\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." + +#: ../../src/vcs/basics.txt:319 +msgid "Any file with name ending with \".mo\" will be ignored." +msgstr "" +"Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." + +#: ../../src/vcs/basics.txt:321 +msgid "" +"Setting up a *.gitignore* file for your new repository before you get going " +"is generally a good idea so you don't accidentally commit files that you " +"really don't want in your Git repository." +msgstr "" +"Створення файлу *.gitignore* для вашого нового сховища перед початком " +"роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " +"вам насправді не потрібні у вашому Git-репозиторії." + +#: ../../src/vcs/basics.txt:325 +msgid "" +"The rules for the patterns you can put in the *.gitignore* file are as " +"follows:" +msgstr "" +"Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" + +#: ../../src/vcs/basics.txt:327 +msgid "Blank lines or lines starting with # are ignored." +msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." + +#: ../../src/vcs/basics.txt:328 +msgid "" +"Standard glob patterns work, and will be applied recursively throughout the " +"entire working tree." +msgstr "" +"Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " +"по всьому робочому дереву." + +#: ../../src/vcs/basics.txt:330 +msgid "" +"You can start patterns with a forward slash (/) to avoid recursive inclusion." +msgstr "" +"Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " +"похилої риски (/)." + +#: ../../src/vcs/basics.txt:332 +msgid "You can end patterns with a forward slash (/) to specify a directory." +msgstr "" +"Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." + +#: ../../src/vcs/basics.txt:333 +msgid "You can negate a pattern by starting it with an exclamation point (!)." +msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." + +#: ../../src/vcs/basics.txt:335 +msgid "" +"Glob patterns are like simplified regular expressions that shells use. An " +"asterisk (\\*) matches zero or more characters; [ab] matches any character " +"inside the brackets (in this case a or b); a question mark (?) matches a " +"single character; and brackets enclosing characters separated by a hyphen " +"([0-9]) matches any character between them (in this case 0 through 9). You " +"can also use two asterisks to match nested directories; a/\\*\\*/z would " +"match *a/z*, *a/b/z*, *a/b/c/z*, and so on." +msgstr "" +"Глобальні шаблони подібні до спрощених регулярних виразів, які " +"використовують оболонки. Зірочка (\\*) відповідає нулю або більше символів; " +"[ab] відповідає будь-якому символу всередині дужок (у цьому випадку a або " +"b); знак питання (?) відповідає одному символу; а дужки, що містять символи, " +"розділені дефісом ([0-9]), відповідають будь-якому символу між ними (у цьому " +"випадку від 0 до 9). Ви також можете використовувати дві зірочки для " +"вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " +"так далі." + +#: ../../src/vcs/basics.txt:344 +msgid "Viewing the commit history" +msgstr "Перегляд історії коммітів" + +#: ../../src/vcs/basics.txt:346 +msgid "" +"After you have created several commits, or if you have cloned a repository " +"with an existing commit history, you'll probably want to look back to see " +"what has happened. The most basic and powerful tool to do this is the ``git " +"log`` command." +msgstr "" +"Після того, як ви створили кілька коммітів, або якщо ви клонували сховище з " +"існуючою історією коммітів, ви, ймовірно, захочете озирнутися назад, щоб " +"побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " +"команда ``git log``." + +#: ../../src/vcs/basics.txt:372 +msgid "" +"By default, with no arguments, ``git log`` lists the commits made in that " +"repository in reverse chronological order; that is, the most recent commits " +"show up first. As you can see, this command lists each commit with its SHA-1 " +"checksum, the author's name and email, the date written, and the commit " +"message." +msgstr "" +"За замовчуванням, без аргументів, ``git log`` виводить список коммітів, " +"зроблених у цьому сховищі, у зворотному хронологічному порядку; тобто, " +"найновіші комміти показуються першими. Як ви можете бачити, ця команда " +"показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " +"адресою автора, датою створення та повідомленням про внесення." + +#: ../../src/vcs/basics.txt:378 +msgid "" +"One of the more helpful options is ``-p`` or ``--patch``, which shows the " +"difference (the *patch* output) introduced in each commit. You can also " +"limit the number of log entries displayed, such as using ``-`` to " +"show only desired number of latest entries." +msgstr "" +"Однією з найбільш корисних опцій є ``-p`` або ``--patch``, яка показує " +"відмінності (виведення *patch*), внесені у кожну фіксацію. Ви також можете " +"обмежити кількість відображуваних записів, наприклад, за допомогою ``-" +"``, щоб показати лише потрібну кількість останніх записів." + +#: ../../src/vcs/basics.txt:414 +msgid "" +"This option display the same information but with a diff directly following " +"each entry. This is very helpful for code review or to quickly browse what " +"happened during a series of commits that a collaborator has added. You can " +"also use a series of summarizing options with ``git log``." +msgstr "" +"Цей параметр показує ту саму інформацію, але з різницею безпосередньо після " +"кожного запису. Це дуже корисно для перегляду коду або для швидкого " +"перегляду того, що сталося під час серії коммітів, доданих співавторами. Ви " +"також можете скористатися низкою параметрів підсумовування за допомогою " +"``git log``." + +#: ../../src/vcs/basics.txt:419 +msgid "" +"If you want to see some abbreviated stats for each commit, you can use the " +"``--stat`` option:" +msgstr "" +"Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " +"скористатися опцією ``--stat``:" + +#: ../../src/vcs/basics.txt:443 +msgid "" +"Another really useful option is ``--pretty``. This option changes the log " +"output to formats other that the default. A few prebuilt option values are " +"available for you to use. The ``oneline`` value for this option prints each " +"commit on a single line, which is useful if you're look a lot of commits. In " +"addition, the ``short``, ``full``, and ``fuller`` values show the output in " +"roughly the same format but with less or more information." +msgstr "" +"Ще одним дійсно корисним параметром є ``--pretty``. Цей параметр змінює " +"формат виведення журналу на формат, відмінний від стандартного. Ви можете " +"скористатися кількома готовими значеннями цього параметра. Значення " +"``oneline`` для цього параметра виводить кожну фіксацію в одному рядку, що є " +"корисним, якщо ви переглядаєте багато фіксацій. Крім того, значення " +"``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " +"форматі, але з меншою або більшою кількістю інформації." + +#: ../../src/vcs/basics.txt:476 +msgid "Specifier" +msgstr "Специфікатор" + +#: ../../src/vcs/basics.txt:476 +msgid "Description of Output" +msgstr "Опис Результатів" + +#: ../../src/vcs/basics.txt:478 +msgid "%H" +msgstr "%H" + +#: ../../src/vcs/basics.txt:478 +msgid "Commit hash" +msgstr "Хеш комміту" + +#: ../../src/vcs/basics.txt:480 +msgid "%h" +msgstr "%h" + +#: ../../src/vcs/basics.txt:480 +msgid "Abbreviated commit hash" +msgstr "Скорочений хеш коміту" + +#: ../../src/vcs/basics.txt:482 +msgid "%T" +msgstr "%T" + +#: ../../src/vcs/basics.txt:482 +msgid "Tree hash" +msgstr "Дерево хешу" + +#: ../../src/vcs/basics.txt:484 +msgid "%t" +msgstr "%t" + +#: ../../src/vcs/basics.txt:484 +msgid "Abbreviated tree hash" +msgstr "Скорочений хеш дерева" + +#: ../../src/vcs/basics.txt:486 +msgid "%P" +msgstr "%P" + +#: ../../src/vcs/basics.txt:486 +msgid "Parent hashes" +msgstr "Батьківські хеші" + +#: ../../src/vcs/basics.txt:488 +msgid "%p" +msgstr "%p" + +#: ../../src/vcs/basics.txt:488 +msgid "Abbreviated parent hashes" +msgstr "Скорочені батьківські хеші" + +#: ../../src/vcs/basics.txt:490 +msgid "%an" +msgstr "%an" + +#: ../../src/vcs/basics.txt:490 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/vcs/basics.txt:492 +msgid "%ae" +msgstr "%ae" + +#: ../../src/vcs/basics.txt:492 +msgid "Author email" +msgstr "Електронна пошта автора" + +#: ../../src/vcs/basics.txt:494 +msgid "%ad" +msgstr "%ad" + +#: ../../src/vcs/basics.txt:494 +msgid "Author date (format respects the --date=option)" +msgstr "Дата автора (формат відповідає параметру --date=option)" + +#: ../../src/vcs/basics.txt:496 +msgid "%ar" +msgstr "%ar" + +#: ../../src/vcs/basics.txt:496 +msgid "Author date, relative" +msgstr "Дата автора, відносна" + +#: ../../src/vcs/basics.txt:498 +#, python-format +msgid "%cn" +msgstr "%cn" + +#: ../../src/vcs/basics.txt:498 +msgid "Committer name" +msgstr "Ім'я коммітера" + +#: ../../src/vcs/basics.txt:500 +#, python-format +msgid "%ce" +msgstr "%ce" + +#: ../../src/vcs/basics.txt:500 +msgid "Committer email" +msgstr "Електронна пошта коммітера" + +#: ../../src/vcs/basics.txt:502 +#, python-format +msgid "%cd" +msgstr "%cd" + +#: ../../src/vcs/basics.txt:502 +msgid "Committer date" +msgstr "Дата коммітера" + +#: ../../src/vcs/basics.txt:504 +#, python-format +msgid "%cr" +msgstr "%cr" + +#: ../../src/vcs/basics.txt:504 +msgid "Committer date, relative" +msgstr "Дата коммітера, відносна" + +#: ../../src/vcs/basics.txt:506 +#, python-format +msgid "%s" +msgstr "%s" + +#: ../../src/vcs/basics.txt:506 +msgid "Subject" +msgstr "Тема" + +#: ../../src/vcs/basics.txt:509 +msgid "" +"The ``oneline`` and ``format`` option values are particularly useful with " +"another ``log`` option called ``--graph``. This option adds a nice little " +"ASCII graph showing your branch and merge history:" +msgstr "" +"Значення параметрів ``online`` і ``format`` особливо корисні з іншим " +"параметром ``log``, який називається ``--graph``. Цей параметр додає " +"невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " +"злиття:" + +#: ../../src/vcs/basics.txt:538 +msgid "" +"There are many more output-formatting options to ``git log``. Common options " +"to ``git log`` are:" +msgstr "" +"Існує набагато більше варіантів форматування виводу для ``git log``. " +"Загальними параметрами ``git log`` є наступні:" + +#: ../../src/vcs/basics.txt:542 +msgid "Option" +msgstr "Опція" + +#: ../../src/vcs/basics.txt:542 +msgid "Description" +msgstr "Опис" + +#: ../../src/vcs/basics.txt:544 +msgid "-p" +msgstr "-p" + +#: ../../src/vcs/basics.txt:544 +msgid "Show the patch introduced with each commit." +msgstr "Показувати виправлення, внесені з кожним коммітом." + +#: ../../src/vcs/basics.txt:546 +msgid "--stat" +msgstr "--stat" + +#: ../../src/vcs/basics.txt:546 +msgid "Show statistics for files modified in each commit." +msgstr "Показувати статистику для файлів, змінених у кожному коміті." + +#: ../../src/vcs/basics.txt:548 +msgid "--shortstat" +msgstr "--shortstat" + +#: ../../src/vcs/basics.txt:548 +msgid "" +"Display only the changed/insertions/deletions line from the --stat command." +msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." + +#: ../../src/vcs/basics.txt:551 +msgid "--name-only" +msgstr "--name-only" + +#: ../../src/vcs/basics.txt:551 +msgid "Show the list of files modified after the commit information." +msgstr "Показати список файлів, змінених після фіксації інформації." + +#: ../../src/vcs/basics.txt:554 +msgid "--name-status" +msgstr "--name-status" + +#: ../../src/vcs/basics.txt:554 +msgid "" +"Show the list of files affected with added/modified/deleted information as " +"well." +msgstr "" +"Також покажіть список файлів, яких торкнулася додана/змінена/видалена " +"інформація." + +#: ../../src/vcs/basics.txt:557 +msgid "--abbrev-commit" +msgstr "--abbrev-commit" + +#: ../../src/vcs/basics.txt:557 +msgid "" +"Show only the first few characters of the SHA-1 checksum instead of all 40." +msgstr "" +"Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." + +#: ../../src/vcs/basics.txt:560 +msgid "--relative-date" +msgstr "--relative-date" + +#: ../../src/vcs/basics.txt:560 +msgid "" +"Display the date in a relative format (for example, \"2 weeks ago\") instead " +"of using the full date format." +msgstr "" +"Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " +"повного формату дати." + +#: ../../src/vcs/basics.txt:563 +msgid "--graph" +msgstr "--graph" + +#: ../../src/vcs/basics.txt:563 +msgid "" +"Display an ASCII graph of the branch and merge history beside the log output." +msgstr "" +"Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." + +#: ../../src/vcs/basics.txt:566 +msgid "--pretty" +msgstr "--pretty" + +#: ../../src/vcs/basics.txt:566 +msgid "" +"Show commits in an alternate format. Option values include oneline, short, " +"full, fuller, and format (where you specify your own format)." +msgstr "" +"Показувати комміти в альтернативному форматі. Значення опції включають: " +"online, short, full, fuller і format (де ви можете вказати свій власний " +"формат)." + +#: ../../src/vcs/basics.txt:570 +msgid "--oneline" +msgstr "--oneline" + +#: ../../src/vcs/basics.txt:570 +msgid "Shorthand for --pretty=oneline --abbrev-commit used together." +msgstr "" +"Скорочення для --pretty=online --abbrev-commit, що використовується разом." + +#: ../../src/vcs/basics.txt:575 +msgid "Limiting log output" +msgstr "Обмеження виводу журналу" + +#: ../../src/vcs/basics.txt:577 +msgid "" +"In addition to output-formatting options, ``git log`` takes a number of " +"useful limiting options; that is options that let you show only a subset of " +"commits. You've seen one such option already -- the ``-`` (e.g. " +"``-2`` or ``-10``) option, which displays only the given number of latest " +"commits." +msgstr "" +"На додаток до параметрів форматування виводу, ``git log`` приймає ряд " +"корисних обмежувальних параметрів, тобто параметрів, які дозволяють вам " +"показувати лише підмножину коммітів. Ви вже бачили одну з таких опцій - ``-" +"<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " +"кількість останніх коммітів." + +#: ../../src/vcs/basics.txt:591 +msgid "" +"However, the time-limiting options such as ``--since`` and ``--until`` are " +"very useful. For example, the command to get the list of commits made in the " +"last two weeks:" +msgstr "" +"Однак, дуже корисними є опції, що обмежують час, такі як ``--since`` і ``--" +"until``. Наприклад, команда для отримання списку коммітів, зроблених за " +"останні два тижні:" + +#: ../../src/vcs/basics.txt:599 +msgid "" +"This command works with lots of formats - you can specify a specific date " +"like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " +"minutes ago\"``." +msgstr "" +"Ця команда працює з багатьма форматами - ви можете вказати конкретну дату, " +"наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " +"день 3 хвилини тому\"``." + +#: ../../src/vcs/basics.txt:602 +msgid "" +"The last really useful option to pass to ``git log`` as a filter is a path. " +"If you specify a directory or file name, you can limit the log output to " +"commits that introduced a change to those files. This is always the last " +"option and is generally preceded by double dashes (``--``) to separate the " +"paths from the options:" +msgstr "" +"Останньою дійсно корисною опцією, яку можна передати ``git log`` як фільтр, " +"є шлях. Якщо ви вкажете каталог або ім'я файлу, ви зможете обмежити " +"виведення журналу лише тими комітами, які внесли зміни до цих файлів. Це " +"завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " +"щоб відокремити шлях від параметрів:" + +#: ../../src/vcs/basics.txt:621 +msgid "Undoing things" +msgstr "Виправлення помилок" + +#: ../../src/vcs/basics.txt:623 +msgid "At any stage, you may want to undo something." +msgstr "На будь-якому етапі ви можете захотіти щось виправити." + +#: ../../src/vcs/basics.txt:625 +msgid "" +"One of the common undos takes place when you commit too early and possibly " +"forget to add some files, or you mess up your commit message. If you want to " +"redo that commit, make the additional changes you forgot, stage them, and " +"commit again using the ``--amend`` option:" +msgstr "" +"Одне з найпоширеніших випадків скасування відбувається, коли ви коммітуєте " +"занадто рано і, можливо, забуваєте додати деякі файли, або ви псуєте своє " +"повідомлення про коммітування. Якщо ви хочете повторити фіксацію, внесіть " +"додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " +"використовуючи опцію ``--amend``:" + +#: ../../src/vcs/basics.txt:634 +msgid "E.g." +msgstr "Наприклад." + +#: ../../src/vcs/basics.txt:643 +msgid "Unstaging a staged file" +msgstr "Скасування додавання файла до індексу" + +#: ../../src/vcs/basics.txt:645 +msgid "" +"The next two sections demonstrate how to work with your staging area and " +"working directory changes. The nice part is that the command you use to " +"determine the state of those two areas also reminds you how to undo changes " +"to them." +msgstr "" +"У наступних двох розділах продемонстровано, як працювати зі змінами у вашій " +"збірці та робочому каталозі. Приємним моментом є те, що команда, за " +"допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " +"те, як скасувати внесені до них зміни." + +#: ../../src/vcs/basics.txt:676 +msgid "Unmodifiyng a modified file" +msgstr "Скасування модифікації зміненого файлу" + +#: ../../src/vcs/basics.txt:678 +msgid "" +"What if you realize that you don't want to keep your changes to some file? " +"You can easily unmodify it -- **revert** it back to what it looked like when " +"you last committed. ``git status`` also tells you how to do that:" +msgstr "" +"Що робити, якщо ви зрозуміли, що не хочете зберігати зміни у якомусь файлі? " +"Ви можете легко скасувати зміни - **повернути** його до того, як він " +"виглядав під час останнього компонування. ``git status`` також покаже вам, " +"як це зробити:" + +#: ../../src/vcs/basics.txt:686 +msgid "It tells you pretty explicitly how to discard the changes you've make." +msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." + +#: ../../src/vcs/basics.txt:699 +msgid "Undoing things with git restore" +msgstr "Скасування змін за допомогою git restore" + +#: ../../src/vcs/basics.txt:701 +msgid "" +"``git restore`` is basically an alternative to ``git reset``, from Git " +"version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " +"reset`` for many undo operations." +msgstr "" +"``git restore`` є альтернативою ``git reset``, починаючи з версії 2.23.0, " +"Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " +"операцій скасування." + +#: ../../src/vcs/basics.txt:737 +msgid "" +"It’s important to understand that git restore is a dangerous command. " +"Any local changes you made to that file are gone -- Git just replaced that " +"file with the last staged or committed version. Don't ever use this command " +"unless you absolutely know that you don’t want those unsaved local changes." +msgstr "" +"Важливо розуміти, що відновлення git'ом <файлу> є небезпечною командою. Усі " +"локальні зміни, які ви зробили у цьому файлі, буде втрачено - Git просто " +"замінить цей файл на останню версію, що перебуває у стадії виконання або " +"фіксації. Ніколи не використовуйте цю команду, якщо ви точно не знаєте, що " +"вам не потрібні ці незбережені локальні зміни." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/branch.po b/src/_locales/uk/LC_MESSAGES/vcs/branch.po new file mode 100644 index 000000000..684fcb0b6 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/branch.po @@ -0,0 +1,509 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/branch.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/branch.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/branch.txt:-1 +msgid "version, control, system, vcs, git, branch, merge, cherry-pick" +msgstr "version, control, system, vcs, git, branch, merge, cherry-pick" + +#: ../../src/vcs/branch.txt:8 +msgid "Branches and Merging" +msgstr "Гілки та злиття" + +#: ../../src/vcs/branch.txt:11 +msgid "About branches" +msgstr "Про гілки" + +#: ../../src/vcs/branch.txt:13 +msgid "" +"To really understand the way Git does branching, we need to take a step back " +"and examine how Git stores its data. Git doesn't store data as a series of " +"changesets or differences, but instead as a series of snapshots. When you " +"make a commit, Git stores a commit object that contains a pointer to the " +"snapshot of the content you staged. This object also contains the author's " +"name and email address, the message that you typed, and pointers to the " +"commit or commits that directly came before this commit (its parent or " +"parents): zero parents for the initial commit, one parent for a normal " +"commit, and multiple parents for a commit that results from a merge of two " +"or more branches." +msgstr "" +"Щоб по-справжньому зрозуміти, як Git працює з розгалуженнями, нам потрібно " +"зробити крок назад і розглянути, як Git зберігає свої дані. Git зберігає " +"дані не у вигляді серії наборів змін або відмінностей, а у вигляді серії " +"знімків. Коли ви робите коміт, Git зберігає об'єкт коміту, який містить " +"вказівник на створений вами знімок вмісту. Цей об'єкт також містить ім'я та " +"адресу електронної пошти автора, повідомлення, яке ви набрали, і вказівники " +"на комміт або комміти, які безпосередньо передували цьому комміту (його " +"батька або батьків): нульовий батько для початкового комміту, один батько " +"для звичайного комміту і кілька батьків для комміту, який є результатом " +"злиття двох або більше гілок." + +#: ../../src/vcs/branch.txt:28 +msgid "" +"A branch in Git is simply a lightweight movable pointer to one of these " +"commits. The default branch name in Git is master. As you start making " +"commits, you're given a master branch that points to the last commit you " +"made. Every time you commit, the master branch pointer moves forward " +"automatically." +msgstr "" +"Гілка в Git'і - це просто легкий рухомий вказівник на одну з цих коммітів. " +"Стандартна назва гілки у Git'і - master. Коли ви починаєте робити комміти, " +"ви отримуєте головну гілку, яка вказує на останній зроблений вами комміт. " +"Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " +"пересувається вперед." + +#: ../../src/vcs/branch.txt:38 +msgid "Branch management" +msgstr "Управління гілками" + +#: ../../src/vcs/branch.txt:40 +msgid "" +"The ``git branch`` command does more that create and delete branches. If you " +"run it with no arguments, you get a simple listing of your current branches:" +msgstr "" +"Команда ``git branch`` робить більше, ніж просто створює і видаляє гілки. " +"Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " +"поточних гілок:" + +#: ../../src/vcs/branch.txt:55 +msgid "" +"To see all the branches that contain work you haven't yet merged in, use ``--" +"no-merged`` option:" +msgstr "" +"Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " +"використовуйте опцію ``--no-merged``:" + +#: ../../src/vcs/branch.txt:65 +msgid "" +"Branches listed in the output has work, that isn't merged to current branch. " +"So, deleting them via ``git branch -d`` will fail." +msgstr "" +"У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " +"гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." + +#: ../../src/vcs/branch.txt:69 +msgid "Create branches" +msgstr "Створення гілок" + +#: ../../src/vcs/branch.txt:71 +msgid "" +"There are few ways to create a new branch in a Git repository. The most " +"common way is to use ``git branch`` command." +msgstr "" +"Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " +"них - використання команди ``git branch``." + +#: ../../src/vcs/branch.txt:78 +msgid "" +"Pointer to a parent commit is optional. By default the parent commit is set " +"to the latest one available (HEAD pointer) at the moment of the branch " +"creation. You can also switch to the newly created branch just after its " +"creation using:" +msgstr "" +"Вказівник на батьківський коміт не є обов'язковим. За замовчуванням " +"батьківський коміт встановлюється на найновіший доступний (вказівник HEAD) " +"на момент створення гілки. Ви також можете переключитися на новостворену " +"гілку одразу після її створення за допомогою:" + +#: ../../src/vcs/branch.txt:88 +msgid "Switching branches" +msgstr "Перемикання гілок" + +#: ../../src/vcs/branch.txt:90 +msgid "To switch to an existing branch, you run the ``git checkout`` command." +msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." + +#: ../../src/vcs/branch.txt:109 +msgid "Basic branching and merging" +msgstr "Основи розгалуження та злиття" + +#: ../../src/vcs/branch.txt:111 +msgid "" +"First, let's say you're working on your project and have a couple of commits " +"already on the ``master`` branch. You've decided that you're going to work " +"on issue #53 in whatever issue-tracking system your company uses. To create " +"a new branch and switch to it at the same time, you can run the ``git " +"checkout`` command with the ``-b`` switch:" +msgstr "" +"По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " +"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " +"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " +"створити нову гілку і одночасно переключитися на неї, ви можете виконати " +"команду ``git checkout`` з ключем ``-b``:" + +#: ../../src/vcs/branch.txt:122 +msgid "This is shorthand for:" +msgstr "Це скорочено означає:" + +#: ../../src/vcs/branch.txt:129 +msgid "" +"In deed this creates a new branch pointer, aimed to the latest commit " +"present on ``master`` branch. But, from now your branch is ``feature/" +"issue53``. So, doing commits moves the feature branch pointer forward, " +"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +msgstr "" +"Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " +"наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" +"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " +"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." + +#: ../../src/vcs/branch.txt:134 +msgid "" +"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " +"from the ``feature/issue53`` branch back to ``master``." +msgstr "" +"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " +"з гілки ``feature/issue53`` назад до ``master``." + +#: ../../src/vcs/branch.txt:138 +msgid "Merging branches" +msgstr "Злиття гілок" + +#: ../../src/vcs/branch.txt:140 +msgid "" +"You need to switch back to ``master`` branch and use ``git merge`` command, " +"to merge changes (commits) from the source branch into target." +msgstr "" +"Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " +"merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." + +#: ../../src/vcs/branch.txt:152 +msgid "" +"You'll notice phrase \"fast-forward\" in that merge. Because the commit " +"pointed to by the branch ``feature/issue53`` you merged in was directly " +"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"forward." +msgstr "" +"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " +"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " +"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " +"вказівник вперед." + +#: ../../src/vcs/branch.txt:156 +msgid "" +"Changes from ``feature/issue53`` are now in the snapshot of the commit " +"pointed to by the ``master`` branch." +msgstr "" +"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"гілка ``master``." + +#: ../../src/vcs/branch.txt:163 +msgid "" +"Now, lets assume another developer started working on ``feature/issue54`` at " +"the same time. And there are few commits on this feature branch. Suppose, " +"the developer decided that work on **issue54** is finished and they want to " +"merge their feature branch into ``master``." +msgstr "" +"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " +"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " +"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " +"з ``master``." + +#: ../../src/vcs/branch.txt:179 +msgid "" +"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"development history has diverged from some older point. Because the commit " +"on the branch you're on isn't a direct ancestor of the branch you're merging " +"in, Git has to do some work. In this case, Git does a simple three-way " +"merge, using two snapshots pointed to by the branch tips and the common " +"ancestor of the two." +msgstr "" +"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " +"гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " +"злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " +"просте тристороннє злиття, використовуючи два знімки, на які вказують " +"кінчики гілок, і їхнього спільного предка." + +#: ../../src/vcs/branch.txt:186 +msgid "" +"Instead of just moving the branch pointer forward, Git creates a new " +"snapshot that results from this three-way merge and automatically creates a " +"new commit that points to it. This is referred to as a *merge commit*, and " +"is a special in that it has more than one parent." +msgstr "" +"Замість того, щоб просто перемістити вказівник гілки вперед, Git створює " +"новий знімок, який є результатом цього тристороннього злиття, і автоматично " +"створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " +"і він особливий тим, що має більше одного батька." + +#: ../../src/vcs/branch.txt:196 +msgid "Merge conflicts" +msgstr "Конфлікти об'єднання" + +#: ../../src/vcs/branch.txt:198 +msgid "" +"Occasionally, the merge process doesn't go smoothly. If the same part of the " +"same file is changed differently in the two branches you're merging, Git " +"won't be able to merge them cleanly." +msgstr "" +"Іноді процес злиття відбувається не зовсім гладко. Якщо у двох гілках, які " +"ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " +"Git не зможе об'єднати їх чисто." + +#: ../../src/vcs/branch.txt:209 +msgid "" +"Git hasn't automatically created a new merge commit. It has paused the " +"process while you resolve the conflict. If you want to see which files are " +"unmerged at any point after a merge conflict, you can run ``git status``:" +msgstr "" +"Git не створив автоматично новий коміт злиття. Він призупинив процес, поки " +"ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " +"після конфлікту злиття, ви можете запустити ``git status``:" + +#: ../../src/vcs/branch.txt:228 +msgid "" +"Anything that has merge conflicts and hasn't been resolved is listed as " +"unmerged. Git adds standard conflict-resolution markers to the files that " +"have conflicts, so you can open them manually and resolve those conflicts. " +"Your file contains a section that looks something like this:" +msgstr "" +"Все, що має конфлікти злиття, які не було вирішено, позначається як не " +"об'єднане. Git додає стандартні маркери вирішення конфліктів до файлів, які " +"мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " +"Ваш файл містить розділ, який виглядає приблизно так:" + +#: ../../src/vcs/branch.txt:243 +msgid "" +"This means the version in ``HEAD`` (your ``master`` branch, because that was " +"what you had checked out when you ran merge command) is the top part of that " +"block (everything above the \"=======\"), while the version in ``vcs`` " +"branch looks like everything in the bottom part. In order to resolve the " +"conflict, you have to either choose one side or the other or merge the " +"contents yourself." +msgstr "" +"Це означає, що версія у гілці ``HEAD`` (ваша гілка ``master``, тому що саме " +"її ви перевірили, коли виконували команду merge) - це верхня частина блоку " +"(все, що вище \"=======\"), тоді як версія у гілці ``vcs`` виглядає як все, " +"що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " +"доведеться або стати на чийсь бік, або об'єднати вміст самостійно." + +#: ../../src/vcs/branch.txt:249 +msgid "When conflicts are resolved, you can run ``git status`` command again:" +msgstr "" +"Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " +"status``:" + +#: ../../src/vcs/branch.txt:262 +msgid "" +"If you're happy with that, and you verify that everything that had conflicts " +"has been staged, you can run ``git commit`` for finalize the merge commit." +msgstr "" +"Якщо вас все влаштовує, і ви переконалися, що все, що викликало конфлікти, " +"було усунуто, ви можете запустити ``git commit`` для остаточного завершення " +"злиття." + +#: ../../src/vcs/branch.txt:266 +msgid "Rebasing" +msgstr "Перебазування" + +#: ../../src/vcs/branch.txt:268 +msgid "" +"In Git, there two main ways to integrate changes from one branch into " +"another: the ``merge`` and the ``rebase``." +msgstr "" +"У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " +"\"злиття\" і \"перебазування\"." + +#: ../../src/vcs/branch.txt:271 +msgid "" +"Earlier, there was an example of diverged work and commits made on two " +"different branches." +msgstr "" +"Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " +"зроблених на двох різних гілках." + +#: ../../src/vcs/branch.txt:278 +msgid "" +"The easiest way to integrate the branches, as we've already covered, is the " +"``merge`` command. It performs a three-way merge between the two latest " +"branch snapshots, and the most recent common ancestor of the two, creating a " +"new snapshot (and commit)." +msgstr "" +"Найпростішим способом об'єднання гілок, як ми вже розглядали, є команда " +"``merge``. Вона виконує тристороннє злиття між двома останніми знімками " +"гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." + +#: ../../src/vcs/branch.txt:283 +msgid "" +"However, there is another way: you can take the patch of the change that was " +"introduced in ``master`` and reapply it on top of ``feature``. In Git, this " +"is called *rebasing*. With ``rebase`` command, you can take all the changes " +"that were committed on one branch and replay them on a different branch." +msgstr "" +"Втім, є й інший спосіб: ви можете взяти патч зі змінами, які було внесено до " +"``master``, і повторно застосувати його поверх ``feature``. У Git'і це " +"називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " +"зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." + +#: ../../src/vcs/branch.txt:295 +msgid "" +"This operation works by going to the common ancestor of the two branches, " +"getting the diff introduced by each commit of the branch you're on, saving " +"those diffs to temporary files, resetting the current branch to the same " +"commit as the branch you are rebasing onto, and finally applying each change " +"in turn." +msgstr "" +"Ця операція виконується шляхом переходу до спільного предка двох гілок, " +"отримання відмінностей, внесених кожним коммітом гілки, на якій ви " +"перебуваєте, збереження цих відмінностей у тимчасових файлах, скидання " +"поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " +"нарешті, застосування кожної зміни по черзі." + +#: ../../src/vcs/branch.txt:306 +msgid "" +"Other maintainers prefer to rebase (or cherry-pick) contributed work on top " +"of their ``master`` branch, rather then merging it in, to keep a mostly " +"linear history." +msgstr "" +"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " +"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " +"об'єднувати їх, щоб зберегти переважно лінійну історію." + +#: ../../src/vcs/branch.txt:311 +msgid "Cherry-picking" +msgstr "Cherry-picking" + +#: ../../src/vcs/branch.txt:313 +msgid "" +"The other way to move introduced work from one branch to another is to " +"*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " +"takes the patch that was introduced in a commit and tries to reapply it on " +"the branch you're currently on. This is useful if you have a number of " +"commits on a topic branch and you want to integrate only one of them, or if " +"you only have one commit on a topic branch and you'd prefer to cherry-pick " +"it rather than run rebase." +msgstr "" +"Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " +"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " +"відновлення бази для одного коміту. Він бере патч, який було внесено в " +"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " +"хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " +"гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " +"rebase." + +#: ../../src/vcs/branch.txt:333 +msgid "Branching strategies" +msgstr "Стратегії розгалуження" + +#: ../../src/vcs/branch.txt:335 +msgid "" +"Branching strategy in version control systems defines how branches are " +"created, managed, and used in a project's development process. It helps " +"teams collaborate effectively, isolate changes, and organize development " +"efforts. A good branching strategy provides clarity on how to work with " +"branches, minimizes conflicts, and enables a smooth and structured " +"development workflow." +msgstr "" +"Стратегія розгалуження в системах контролю версій визначає, як створюються, " +"управляються та використовуються гілки в процесі розробки проекту. Вона " +"допомагає командам ефективно співпрацювати, ізолювати зміни та " +"організовувати зусилля з розробки. Хороша стратегія розгалуження забезпечує " +"чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " +"структурований робочий процес розробки." + +#: ../../src/vcs/branch.txt:342 +msgid "" +"GitFlow is a popular branching strategy that provides a well-defined model " +"for managing branches in a Git repository. It was introduced by Vincent " +"Driessen and is based on the idea of using two main branches: \"master\" and " +"\"develop.\"" +msgstr "" +"GitFlow - це популярна стратегія розгалуження, яка надає чітко визначену " +"модель для управління гілками в Git-репозиторії. Вона була представлена " +"Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " +"основних гілок: \"master\" і \"develop\"." + +#: ../../src/vcs/branch.txt:346 +msgid "" +"**Master Branch**: The \"master\" branch represents the stable version of " +"the codebase. It should always contain production-ready code and be free " +"from any major issues. The \"master\" branch is protected, and only release " +"versions are merged into it." +msgstr "" +"**Майстер-гілка**: \"Майстер-гілка\" представляє стабільну версію кодової " +"бази. Вона завжди повинна містити готовий до використання код і не містити " +"жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " +"релізні версії." + +#: ../../src/vcs/branch.txt:350 +msgid "" +"**Develop Branch**: The \"develop\" branch is where the ongoing development " +"and integration of features take place. It serves as the integration branch " +"for various feature branches and should also contain a stable version of the " +"code." +msgstr "" +"**Гілка розробки**: Гілка \"develop\" - це місце, де відбувається постійна " +"розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " +"функціональних гілок, а також повинна містити стабільну версію коду." + +#: ../../src/vcs/branch.txt:354 +msgid "" +"**Feature Branches**: For each new feature or bug fix, a dedicated " +"\"feature\" branch is created off the \"develop\" branch. These branches are " +"short-lived and exist only for the duration of the feature development." +msgstr "" +"**Вітки функцій**: Для кожної нової функції або виправлення помилки " +"створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " +"недовговічні і існують лише на час розробки функції." + +#: ../../src/vcs/branch.txt:357 +msgid "" +"**Release Branches**: When the development on the \"develop\" branch is " +"ready for a release, a \"release\" branch is created. The release branch is " +"used for testing, bug fixing, and preparing for deployment." +msgstr "" +"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " +"створюється гілка \"release\". Релізна гілка використовується для " +"тестування, виправлення помилок і підготовки до розгортання." + +#: ../../src/vcs/branch.txt:360 +msgid "" +"**Hotfix Branches**: If a critical issue is discovered in the production " +"version, a \"hotfix\" branch is created from the \"master\" branch. This " +"allows for a quick fix without affecting ongoing development on the " +"\"develop\" branch." +msgstr "" +"**Гілки виправлень**: Якщо у виробничій версії виявлено критичну проблему, " +"на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " +"виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." + +#: ../../src/vcs/branch.txt:365 +msgid "" +"GitFlow provides a structured approach to managing branching in a " +"collaborative development environment. It ensures that the main branches " +"remain stable, and new features and bug fixes are integrated smoothly before " +"being released. This strategy is particularly useful for projects with " +"regular releases and a team working on multiple features concurrently." +msgstr "" +"GitFlow забезпечує структурований підхід до управління розгалуженням у " +"середовищі спільної розробки. Він гарантує, що основні гілки залишаються " +"стабільними, а нові функції та виправлення помилок плавно інтегруються перед " +"випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " +"і командою, яка працює над декількома функціями одночасно." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/github.po b/src/_locales/uk/LC_MESSAGES/vcs/github.po new file mode 100644 index 000000000..530c87eea --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/github.po @@ -0,0 +1,259 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/github.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/github.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/github.txt:-1 +msgid "version, control, system, vcs, git, github" +msgstr "version, control, system, vcs, git, github" + +#: ../../src/vcs/github.txt:10 +msgid "GitHub" +msgstr "GitHub" + +#: ../../src/vcs/github.txt:12 +msgid "" +"`GitHub`_ is the single largest host for Git repositories, and is the " +"central point of collaboration for millions of developers and projects." +msgstr "" +"`GitHub`_ - найбільший хостинг для Git-репозиторіїв, який є центральною " +"точкою співпраці для мільйонів розробників і проектів." + +#: ../../src/vcs/github.txt:16 +msgid "Account setup and configuration" +msgstr "Налаштування та конфігурація акаунта" + +#: ../../src/vcs/github.txt:18 +msgid "" +"The first thing you need to do is set up a free user account. Visit " +"`GitHub`_ and press \"Sign Up\" button. The GitHub will lead you through the " +"account creation process. Just follow the hints and provide an email " +"address, username and a strong password." +msgstr "" +"Перше, що вам потрібно зробити, це створити безкоштовний обліковий запис " +"користувача. Відвідайте `GitHub`_ і натисніть кнопку \"Зареєструватися\". " +"GitHub проведе вас через процес створення облікового запису. Просто " +"дотримуйтесь підказок і вкажіть адресу електронної пошти, ім'я користувача " +"та надійний пароль." + +#: ../../src/vcs/github.txt:24 +msgid "About authentication to GitHub" +msgstr "Про автентифікацію на GitHub" + +#: ../../src/vcs/github.txt:27 +msgid "" +"Starting in March 2023 and through the end of 2023, GitHub gradually began " +"to require all users who contribute code on GitHub to enable two-factor " +"authentication (2FA)." +msgstr "" +"Починаючи з березня 2023 року і до кінця 2023 року, GitHub поступово почав " +"вимагати від усіх користувачів, які публікують код на GitHub, увімкнути " +"двофакторну автентифікацію (2FA)." + +#: ../../src/vcs/github.txt:32 +msgid "Connect with SSH" +msgstr "Підключення за допомогою SSH" + +#: ../../src/vcs/github.txt:34 +msgid "" +"You can access and write data in repositories on GitHub using :abbr:`SSH " +"(Secure Shell Protocol)`. When you connect to via SSH, you authenticate " +"using a private key file on your local machine." +msgstr "" +"Ви можете отримати доступ до даних у репозиторіях на GitHub і писати їх за " +"допомогою :abbr:`SSH (Secure Shell Protocol)`. При підключенні по SSH ви " +"автентифікуєтесь за допомогою файлу приватного ключа на вашому локальному " +"комп'ютері." + +#: ../../src/vcs/github.txt:39 +msgid "Generating a new SSH key" +msgstr "Генерація нового SSH-ключа" + +#: ../../src/vcs/github.txt:41 +msgid "" +"You can generate a new SSH key on your local machine. After you do that, you " +"can add the **public** key to your account on GitHub to enable " +"authentication for Git operations over SSH." +msgstr "" +"Ви можете згенерувати новий SSH-ключ на своїй локальній машині. Після цього " +"ви можете додати **public** ключ до свого облікового запису на GitHub, щоб " +"увімкнути автентифікацію для операцій з Git'ом через SSH." + +#: ../../src/vcs/github.txt:45 +msgid "Open terminal (git-bash will suite for Windows users)" +msgstr "Відкритий термінал (для користувачів Windows підійде git-bash)" + +#: ../../src/vcs/github.txt:46 +msgid "Run command:" +msgstr "Виконати команду:" + +#: ../../src/vcs/github.txt:53 +msgid "" +"If you are using a legacy system that doesn't support the **Ed25519** " +"algorithm, use:" +msgstr "" +"Якщо ви використовуєте застарілу систему, яка не підтримує алгоритм " +"**Ed25519**, використовуйте його:" + +#: ../../src/vcs/github.txt:60 +msgid "" +"When you're prompted to \"Enter a file in which to save the key\", you can " +"press **Enter** to accept the default file location." +msgstr "" +"Коли з'явиться запит \"Введіть файл для збереження ключа\", ви можете " +"натиснути **Enter**, щоб прийняти розташування файлу за замовчуванням." + +#: ../../src/vcs/github.txt:67 +msgid "" +"Type a secure passphrase, if you want -- this is an extra layer of security." +msgstr "" +"Введіть безпечну парольну фразу, якщо хочете -- це додатковий рівень безпеки." + +#: ../../src/vcs/github.txt:75 +msgid "This will create a new SSH key, using the provided email as label." +msgstr "" +"Буде створено новий SSH-ключ, з використанням наданої адреси електронної " +"пошти як мітки." + +#: ../../src/vcs/github.txt:77 +msgid "" +"Navigate to ssh key location -- \".ssh\" folder at your homedir by default " +"and ensure there are two files generated:" +msgstr "" +"Перейдіть до розташування ключа ssh -- теки \".ssh\" у вашому домашньому " +"каталозі за замовчуванням і переконайтеся, що згенеровано два файли:" + +#: ../../src/vcs/github.txt:80 +msgid "**id_ALGORITHM** (e.g. \"id_rsa\", \"id_ed252519\" etc.)" +msgstr "**id_ALGORITHM** (наприклад, \"id_rsa\", \"id_ed252519\" тощо)." + +#: ../../src/vcs/github.txt:81 +msgid "**id_ALGORITHM.pub** (e.g. \"id_rsa.pub\", \"id_ed25519.pub\" etc.)" +msgstr "" +"**id_ALGORITHM.pub** (наприклад, \"id_rsa.pub\", \"id_ed25519.pub\" тощо)." + +#: ../../src/vcs/github.txt:84 +msgid "" +"The private key (the one without \".pub\") should be kept secure and " +"private. You should never share this." +msgstr "" +"Закритий ключ (той, що без \".pub\") слід зберігати в безпеці і не " +"розголошувати. Ви ніколи не повинні ділитися ним." + +#: ../../src/vcs/github.txt:87 +msgid "" +"The public key is what you add to servers or services to which you want to " +"authenticate using your private key." +msgstr "" +"Відкритий ключ - це те, що ви додаєте до серверів або сервісів, на яких ви " +"хочете пройти автентифікацію за допомогою вашого закритого ключа." + +#: ../../src/vcs/github.txt:91 +msgid "Adding your SSH key to the ssh-agent and GitHub" +msgstr "Додавання SSH-ключа до ssh-агента та GitHub" + +#: ../../src/vcs/github.txt:93 +msgid "" +"Before adding a new SSH key to the ssh-agent to manage your keys, you should " +"have checked for existing SSH keys and generated SSH keys." +msgstr "" +"Перш ніж додавати новий SSH-ключ до ssh-агента для керування ключами, вам " +"слід перевірити наявність наявних SSH-ключів і згенерувати SSH-ключі." + +#: ../../src/vcs/github.txt:96 +msgid "" +"Ensure the ssh-agent is running. You can use the \"Auto-launching\" or start " +"it manually:" +msgstr "" +"Переконайтеся, що ssh-агент запущено. Ви можете скористатися " +"\"Автозапуском\" або запустити його вручну:" + +#: ../../src/vcs/github.txt:104 +msgid "Add you SSH private key to the ssh-agent." +msgstr "Додайте ваш приватний ключ SSH до ssh-агента." + +#: ../../src/vcs/github.txt:110 +msgid "" +"Add the SSH public key to your account on GitHub. Copy the SSH public key to " +"your clipboard." +msgstr "" +"Додайте публічний ключ SSH до свого облікового запису на GitHub. Скопіюйте " +"відкритий ключ SSH до буфера обміну." + +#: ../../src/vcs/github.txt:117 +msgid "" +"Alternatively, if ``clip`` isn't working, just type public key content to " +"the terminal using ``cat``," +msgstr "" +"Крім того, якщо ``clip`` не працює, просто введіть вміст відкритого ключа у " +"терміналі за допомогою ``cat``," + +#: ../../src/vcs/github.txt:124 +msgid "" +"or simply navigate to the file and open it with any text editor. At the end, " +"you need to copy public key content." +msgstr "" +"або просто перейдіть до файлу і відкрийте його за допомогою будь-якого " +"текстового редактора. В кінці потрібно скопіювати вміст відкритого ключа." + +#: ../../src/vcs/github.txt:127 +msgid "" +"On GitHub, in the upper-right corner of any page, click your profile photo, " +"then click **Settings**." +msgstr "" +"На GitHub у правому верхньому куті будь-якої сторінки натисніть на " +"фотографію свого профілю, а потім натисніть **Налаштування**." + +#: ../../src/vcs/github.txt:129 +msgid "" +"In the \"Access\" section of the sidebar, click **SSH and GPG keys** and " +"press **New SSH key** button." +msgstr "" +"У розділі \"Доступ\" бічної панелі натисніть **Ключі SSH і GPG** і натисніть " +"кнопку **Новий ключ SSH**." + +#: ../../src/vcs/github.txt:131 +msgid "In the \"Title\" field, add a descriptive label for the new key." +msgstr "У полі \"Назва\" додайте описову мітку для нового ключа." + +#: ../../src/vcs/github.txt:132 +msgid "Select the type of key -- \"Authentication key\"." +msgstr "Виберіть тип ключа - \"Ключ автентифікації\"." + +#: ../../src/vcs/github.txt:133 +msgid "In the \"Key\" field, paste your public key." +msgstr "У полі \"Ключ\" вставте ваш відкритий ключ." + +#: ../../src/vcs/github.txt:134 +msgid "Click **Add SSH key**." +msgstr "Натисніть **Додати SSH-ключ**." + +#: ../../src/vcs/github.txt:135 +msgid "If prompted, confirm access to your account on GitHub." +msgstr "" +"Якщо з'явиться відповідний запит, підтвердіть доступ до свого облікового " +"запису на GitHub." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/index.po b/src/_locales/uk/LC_MESSAGES/vcs/index.po new file mode 100644 index 000000000..b23852bdb --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/index.po @@ -0,0 +1,74 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/index.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/index.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/index.txt:-1 +msgid "version, control, system, vcs, git" +msgstr "version, control, system, vcs, git" + +#: ../../src/vcs/index.txt:8 +msgid "Version Control System" +msgstr "Система контролю версій" + +#: ../../src/vcs/index.txt:10 +msgid "" +":abbr:`VCS (Version Control Systems)` play an integral role in modern " +"software development. They allow multiple developers to work on a project " +"simultaneously without overwriting each other's changes. VCSs track the " +"history of changes to the source code, making it possible to revert to " +"previous states, compare versions, and more." +msgstr "" +":abbr:`VCS (Version Control Systems)` відіграють невід'ємну роль у сучасній " +"розробці програмного забезпечення. Вони дозволяють декільком розробникам " +"працювати над проектом одночасно, не перезаписуючи зміни один одного. VCS " +"відстежують історію змін у вихідному коді, дозволяючи повертатися до " +"попередніх станів, порівнювати версії тощо." + +#: ../../src/vcs/index.txt:16 +msgid "" +"Among the VCSs available, Git stands out as one of the most popular and " +"powerful tools. It's used by small projects and large-scale software alike, " +"owing to its flexibility, distributed nature, and efficient handling of " +"codebase versions." +msgstr "" +"Серед наявних VCS Git є одним з найпопулярніших і найпотужніших " +"інструментів. Його використовують як у невеликих проектах, так і у великому " +"програмному забезпеченні, завдяки його гнучкості, розподіленості та " +"ефективній роботі з версіями кодової бази." + +#: ../../src/vcs/index.txt:21 +msgid "" +"In this part, you'll learn about the fundamentals of version control, how to " +"set up your environment for Git, dive into the basics of commits, branches, " +"and merges, understand the significance of tags, and finally, explore how to " +"collaborate using remote repositories and platforms like GitHub." +msgstr "" +"У цій частині ви дізнаєтеся про основи управління версіями, як налаштувати " +"середовище для Git'а, зануритеся в основи коммітів, гілок і злиття, " +"зрозумієте значення тегів і, нарешті, вивчите, як співпрацювати за допомогою " +"віддалених репозиторіїв і платформ на кшталт GitHub." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/intro.po b/src/_locales/uk/LC_MESSAGES/vcs/intro.po new file mode 100644 index 000000000..c40a07462 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/intro.po @@ -0,0 +1,221 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/intro.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/intro.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/intro.txt:-1 +msgid "version, control, system, vcs, git" +msgstr "version, control, system, vcs, git" + +#: ../../src/vcs/intro.txt:8 +msgid "About version control (Git)" +msgstr "Про контроль версій (Git)" + +#: ../../src/vcs/intro.txt:10 +msgid "" +"Version control is a system that records changes to a file or set of files " +"over time so that you can recall specific versions later. It allows you to " +"revert selected files back to a previous state, revert the entire project " +"back to a previous state, compare changes over time, see who last modified " +"something that might be causing a problem, who introduced an issue and when, " +"and more." +msgstr "" +"Контроль версій - це система, яка реєструє зміни у файлі або наборі файлів з " +"плином часу, щоб ви могли пізніше згадати конкретні версії. Він дозволяє " +"повернути вибрані файли до попереднього стану, повернути весь проект до " +"попереднього стану, порівняти зміни в часі, побачити, хто востаннє змінював " +"щось, що може спричинити проблему, хто і коли створив проблему, тощо." + +#: ../../src/vcs/intro.txt:16 +msgid "" +"In a :abbr:`DVCS (Distributed Version Control Systems)` clients don't just " +"check out the latest snapshot of the files; rather, they fully mirror the " +"repository, including its full history. Thus, if any server dies, and these " +"systems were collaborating via that server, any of the client repositories " +"can be copied back up to the server to restore it. Every clone is really a " +"full backup of all the data." +msgstr "" +"У :abbr:`DVCS (Distributed Version Control Systems)` клієнти не просто " +"перевіряють останній знімок файлів, а повністю дзеркально копіюють сховище, " +"включно з його повною історією. Таким чином, якщо якийсь сервер вийде з " +"ладу, а ці системи працювали через нього, будь-який з клієнтських " +"репозиторіїв можна скопіювати на сервер, щоб відновити його роботу. Кожен " +"клон - це фактично повна резервна копія всіх даних." + +#: ../../src/vcs/intro.txt:26 +msgid "Distributed version control diagram" +msgstr "Розподілена схема управління версіями" + +#: ../../src/vcs/intro.txt:29 +msgid "What is Git?" +msgstr "Що таке Git?" + +#: ../../src/vcs/intro.txt:30 +msgid "" +"The major difference between Git and any other VCS is the way Git thinks " +"about its data. Conceptually, most other systems store information as a list " +"of file-based changes. Git doesn't think of or store its data this way. " +"Instead, Git thinks of its data more like a series of snapshots of a " +"miniature filesystem." +msgstr "" +"Основна відмінність між Git'ом та будь-якою іншою VCS полягає в тому, як " +"Git'ом мислить про свої дані. Концептуально, більшість інших систем " +"зберігають інформацію у вигляді списку змін у файлах. Git не думає про свої " +"дані і не зберігає їх таким чином. Натомість, Git думає про свої дані як про " +"серію знімків мініатюрної файлової системи." + +#: ../../src/vcs/intro.txt:36 +msgid "" +"This is an important distinction between Git and nearly all other VCSs. It " +"makes Git reconsider almost every aspect of version control that most other " +"systems copied from the previous generation. This makes Git more like a mini " +"filesystem with some incredibly powerful tools built on top of it, rather " +"than simply a VCS." +msgstr "" +"Це важлива відмінність між Git'ом та майже всіма іншими VCS. Вона змушує " +"Git'а переосмислити майже кожен аспект контролю версій, який більшість інших " +"систем скопіювали з попереднього покоління. Це робить Git більше схожим на " +"міні-файлову систему з деякими неймовірно потужними інструментами, " +"побудованими поверх неї, ніж на звичайну VCS." + +#: ../../src/vcs/intro.txt:45 +msgid "Storing data as snapshots of the project over time" +msgstr "Зберігання даних у вигляді знімків проекту з плином часу" + +#: ../../src/vcs/intro.txt:48 +msgid "Local operations" +msgstr "Локальні операції" + +#: ../../src/vcs/intro.txt:49 +msgid "" +"Most operations in Git need only local files and resources to operate -- " +"generally no information is needed from another computer on your network. " +"Because you have the entire history of the project right there on your local " +"disk, most operations seem almost instantaneous." +msgstr "" +"Для виконання більшості операцій у Git'і потрібні лише локальні файли та " +"ресурси - зазвичай не потрібна інформація з іншого комп'ютера у вашій " +"мережі. Оскільки вся історія проекту зберігається на вашому локальному " +"диску, більшість операцій виконуються майже миттєво." + +#: ../../src/vcs/intro.txt:55 +msgid "Integrity" +msgstr "Цілісність" + +#: ../../src/vcs/intro.txt:56 +msgid "" +"Everything in Git is checksummed before it is stored and is then referred to " +"by that checksum. This means it's impossible to change the contents of any " +"file or directory without Git knowing about it." +msgstr "" +"Усе в Git'і має контрольну суму перед збереженням і потім посилається на цю " +"контрольну суму. Це означає, що неможливо змінити вміст будь-якого файлу або " +"каталогу без відома Git'а." + +#: ../../src/vcs/intro.txt:61 +msgid "Repository files states" +msgstr "Стани файлів сховища" + +#: ../../src/vcs/intro.txt:62 +msgid "" +"Git has three main states that your files can reside in: **modified**, " +"**staged**, and **committed**:" +msgstr "" +"Git має три основні стани, в яких можуть перебувати ваші файли: " +"**модифіковані**, **на стадії розробки** та **зафіксовані**:" + +#: ../../src/vcs/intro.txt:65 +msgid "" +"Modified means that you have changed the file but have not committed it to " +"your database yet." +msgstr "" +"Змінено означає, що ви змінили файл, але ще не зафіксували його у вашій базі " +"даних." + +#: ../../src/vcs/intro.txt:67 +msgid "" +"Staged means that you have marked a modified file in its current version to " +"go into your next commit snapshot." +msgstr "" +"Поетапний означає, що ви позначили змінений файл у його поточній версії, щоб " +"він потрапив до наступного знімка фіксації." + +#: ../../src/vcs/intro.txt:69 +msgid "Committed means that the data is safely stored in your local database." +msgstr "" +"Фіксація означає, що дані безпечно зберігаються у вашій локальній базі даних." + +#: ../../src/vcs/intro.txt:76 +msgid "The basic Git workflow goes something like this:" +msgstr "Базовий робочий процес Git'а виглядає приблизно так:" + +#: ../../src/vcs/intro.txt:78 +msgid "You modify files in your working tree." +msgstr "Ви змінюєте файли у вашому робочому дереві." + +#: ../../src/vcs/intro.txt:79 +msgid "" +"You selectively stage just those changes you want to be part of your next " +"commit, which adds only those changes to the staging area." +msgstr "" +"Ви вибірково стабілізуєте лише ті зміни, які ви хочете включити в наступний " +"коміт, що додає тільки ці зміни в область стабілізації." + +#: ../../src/vcs/intro.txt:81 +msgid "" +"You do a commit, which takes the files as they are in the staging area and " +"stores that snapshot permanently to your Git directory." +msgstr "" +"Ви робите фіксацію, яка бере файли в тому вигляді, в якому вони знаходяться " +"в області підготовки, і зберігає цей знімок назавжди у вашому каталозі Git'а." + +#: ../../src/vcs/intro.txt:85 +msgid "Command line" +msgstr "Командний рядок" + +#: ../../src/vcs/intro.txt:87 +msgid "" +"There are a lot of different ways to use Git. There are the original command-" +"line tools, and there are many graphical user interfaces of varying " +"capabilities. For one, the command line is the only place you can run all " +"Git commands -- most of the GUIs implement only a partial subset of Git " +"functionality for simplicity. If you know how to run the command-line " +"version, you can probably also figure out how to run the GUI version, while " +"the opposite is not necessarily true. Also, while your choice of graphical " +"client is a matter of personal taste, all users will have the command-line " +"tools installed and available." +msgstr "" +"Існує багато різних способів використання Git'у. Існують оригінальні " +"інструменти командного рядка, а також багато графічних інтерфейсів " +"користувача з різними можливостями. З одного боку, командний рядок є єдиним " +"місцем, де ви можете виконувати всі команди Git'а - більшість графічних " +"інтерфейсів реалізують лише часткову підмножину функціональності Git'а для " +"спрощення. Якщо ви знаєте, як запустити версію з командного рядка, ви, " +"ймовірно, також зможете з'ясувати, як запустити версію з графічним " +"інтерфейсом, хоча зворотне не обов'язково вірно. Крім того, хоча ваш вибір " +"графічного клієнта є справою особистого смаку, всі користувачі матимуть " +"встановлені та доступні інструменти командного рядка." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po b/src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po new file mode 100644 index 000000000..e44a4939f --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/pullrequest.po @@ -0,0 +1,223 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Version Control System - Pull Requests" +msgstr "Система контролю версій - Запити на Злиття (Pull Requests)" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "Vladyslav Ponomaryov" +msgstr "Vladyslav Ponomaryov" + +#: ../../src/vcs/pullrequest.txt:-1 +msgid "version, control, system, vcs, git, pull request, merge" +msgstr "version, control, system, vcs, git, pull request, merge" + +#: ../../src/vcs/pullrequest.txt:9 +msgid "Pull Request" +msgstr "Запит на Злиття (Pull Request)" + +#: ../../src/vcs/pullrequest.txt:11 +msgid "" +"Pull request let you tell others about changes you've pushed to a branch in " +"a repository on GitHub. Once a pull request is opened, you can discuss and " +"review the potential changes with collaborators and add follow-up commits " +"before your changes are merged into the base branch:cite:`github:about-pr`." +msgstr "" +"Pull-запит дозволяє вам повідомити інших про зміни, які ви перенесли до " +"гілки в репозиторії на GitHub. Після того, як запит відкрито, ви можете " +"обговорити і переглянути потенційні зміни з колегами і додати подальші " +"коміти, перш ніж ваші зміни будуть злиті в базову гілку branch:cite:`github:" +"about-pr`." + +#: ../../src/vcs/pullrequest.txt:17 +msgid "Draft pull requests" +msgstr "Чернетки pull requests" + +#: ../../src/vcs/pullrequest.txt:19 +msgid "" +"Draft pull requests are available in public repositories on GitHub. When you " +"create a pull request, you can choose to a create a pull request that is " +"ready for review or a draft pull request. Draft pull requests cannot be " +"merged. When you're ready to get feedback on your pull request, you can mark " +"your draft pull request as ready for review." +msgstr "" +"Чернетки pull-запитів доступні в публічних репозиторіях на GitHub. Коли ви " +"створюєте пул-запит, ви можете вибрати між створенням готового до розгляду " +"пул-запиту та чернетки пул-запиту. Чернетки пул-запитів не можна " +"об'єднувати. Коли ви будете готові отримати відгук на свій запит, ви можете " +"позначити свій чернетковий запит як готовий до розгляду." + +#: ../../src/vcs/pullrequest.txt:26 +msgid "Difference between commits on compare and pull request pages" +msgstr "Різниця між коммітами на сторінках порівняння та pull-запитів" + +#: ../../src/vcs/pullrequest.txt:28 +msgid "" +"The compare and pull request pages use different methods to calculate the " +"diff for changed files:" +msgstr "" +"Сторінки запитів порівняння і витягування використовують різні методи для " +"обчислення різниці для змінених файлів:" + +#: ../../src/vcs/pullrequest.txt:31 +msgid "" +"Compare pages show the diff between the tip of the head ref and the current " +"common ancestor (that is, the merge base) of the head and base ref." +msgstr "" +"На сторінках порівняння показано різницю між кінчиком головного референта і " +"поточним спільним предком (тобто, основою злиття) головного і основного " +"референта." + +#: ../../src/vcs/pullrequest.txt:33 +msgid "" +"Pull request pages show the diff between the tip of the head ref and the " +"common ancestor of the head and base ref at the time when the pull request " +"was created. Consequently, the merge base used for the comparison might be " +"different." +msgstr "" +"Сторінки запитів на злиття показують різницю між вершиною головного рефа і " +"спільним предком головного і базового рефів на момент створення запиту на " +"злиття. Отже, база злиття, яка використовується для порівняння, може " +"відрізнятися." + +#: ../../src/vcs/pullrequest.txt:39 +msgid "About comparing branches" +msgstr "Про порівняння гілок" + +#: ../../src/vcs/pullrequest.txt:41 +msgid "" +"Pull requests display diffs to compare the changes you made in your topic " +"branch against the base branch that you want to merge your changes into." +msgstr "" +"Витягніть запити на відображення відмінностей, щоб порівняти зміни, зроблені " +"у вашій гілці теми, з базовою гілкою, до якої ви хочете об'єднати ваші зміни." + +#: ../../src/vcs/pullrequest.txt:44 +msgid "" +"Rather that viewing the commits themselves, you can view the proposed " +"changes as they'll appear in the files once the pull request is merged. The " +"files appear in alphabetical order within the Files changed tab. Additions " +"to the files appear in green and are prefaced by a ``+`` sign while content " +"that has been removed appears in red and is prefaced by a ``-`` sign :cite:" +"`github:compare-pr`." +msgstr "" +"Замість того, щоб переглядати самі комміти, ви можете переглянути " +"запропоновані зміни, які з'являться у файлах після об'єднання запиту на " +"витягування. Файли відображаються в алфавітному порядку на вкладці Змінені " +"файли. Доповнення до файлів відображаються зеленим кольором зі знаком ``+``, " +"тоді як вміст, який було вилучено, відображається червоним кольором зі " +"знаком ``-`` :cite:`github:compare-pr`." + +#: ../../src/vcs/pullrequest.txt:52 ../../src/vcs/pullrequest.txt:73 +msgid "Creating a pull request" +msgstr "Створення pull-запиту" + +#: ../../src/vcs/pullrequest.txt:54 +msgid "" +"Create a pull request to propose and collaborate on changes to a repository. " +"These changes are proposed in a *branch*, which ensures that the default " +"branch only contains finished and approved work:cite:`github:create-pr`." +msgstr "" +"Створіть pull request, щоб пропонувати зміни до сховища та співпрацювати над " +"ними. Ці зміни пропонуються у *гілці*, що гарантує, що гілка за " +"замовчуванням містить лише завершені та затверджені роботи:cite:`github:" +"create-pr`." + +#: ../../src/vcs/pullrequest.txt:59 +msgid "About branches" +msgstr "Про гілки" + +#: ../../src/vcs/pullrequest.txt:61 +msgid "" +"Use a branch to isolate development work without affecting other branches in " +"the repository. Each repository has one default branch, and can have " +"multiple other branches. You can merge a branch into another branch using a " +"pull request." +msgstr "" +"Використовуйте гілку, щоб ізолювати роботу над розробкою, не впливаючи на " +"інші гілки у сховищі. Кожне сховище має одну гілку за замовчуванням і може " +"мати декілька інших гілок. Ви можете об'єднати гілку з іншою гілкою за " +"допомогою pull-запиту." + +#: ../../src/vcs/pullrequest.txt:66 +msgid "" +"Branches allow you to develop features, fix bugs, or safely experiment with " +"new ideas in a contained area of your repository." +msgstr "" +"Гілки дозволяють розробляти функції, виправляти помилки або безпечно " +"експериментувати з новими ідеями в обмеженій області вашого сховища." + +#: ../../src/vcs/pullrequest.txt:69 +msgid "" +"You always create a branch from an existing branch. Typically, you might " +"create a new branch from the default branch of your repository." +msgstr "" +"Ви завжди створюєте гілку з існуючої гілки. Зазвичай, ви можете створити " +"нову гілку з гілки за замовчуванням вашого сховища." + +#: ../../src/vcs/pullrequest.txt:75 +msgid "On GitHub, navigate to the main page of the repository." +msgstr "На GitHub перейдіть на головну сторінку репозиторію." + +#: ../../src/vcs/pullrequest.txt:76 +msgid "Switch to \"Pull requests\" tab." +msgstr "Перейдіть на вкладку \"Pull requests\"." + +#: ../../src/vcs/pullrequest.txt:77 +msgid "Press \"New pull request\" button." +msgstr "Натисніть кнопку \"New pull request\"." + +#: ../../src/vcs/pullrequest.txt:78 +msgid "Select base and source branches." +msgstr "Виберіть базову і вихідну гілки." + +#: ../../src/vcs/pullrequest.txt:79 +msgid "Press \"Create pull request\" button." +msgstr "Натисніть кнопку \"Create pull request\"." + +#: ../../src/vcs/pullrequest.txt:80 +msgid "Provide a meaningful title and description." +msgstr "Надайте змістовну назву та опис." + +#: ../../src/vcs/pullrequest.txt:81 +msgid "Draft or create a pull request." +msgstr "Створіть pull request або його чорнетку." + +#: ../../src/vcs/pullrequest.txt:83 +msgid "" +"To create pull request that is ready for review, click **Create Pull " +"Request**." +msgstr "" +"Щоб створити запит, готовий до перегляду, натисніть **Create Pull Request**." + +#: ../../src/vcs/pullrequest.txt:85 +msgid "" +"To create a draft pull request, use the drop-down and select **Create Draft " +"Pull Request**, then click **Draft Pull Request**." +msgstr "" +"Щоб створити чернетку запиту на вилучення, скористайтеся випадаючим списком " +"і виберіть **Create Draft Pull Request**, а потім натисніть **Draft Pull " +"Request**." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/remotes.po b/src/_locales/uk/LC_MESSAGES/vcs/remotes.po new file mode 100644 index 000000000..407cb8da6 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/remotes.po @@ -0,0 +1,227 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/remotes.txt:3 +msgid "Remotes" +msgstr "Віддалені репозиторії" + +#: ../../src/vcs/remotes.txt:5 +msgid "" +"To be able to collaborate on any Git project, you need to know how to manage " +"your remote repositories. Remote repositories are versions of your project " +"that are hosted on the Internet or network somewhere. You can have several " +"of them, each of which generally is either read-only or read/write for you. " +"Managing remotes includes knowing how to add remote repositories, remove " +"remote repositories that are no longer valid, manage various branches and " +"define them as being tracked or not, and more." +msgstr "" +"Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно " +"знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це " +"версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати " +"декілька таких сховищ, кожне з яких, як правило, доступне лише для читання " +"або читання/запису. Керування віддаленими сховищами включає в себе вміння " +"додавати віддалені сховища, видаляти віддалені сховища, які більше не є " +"дійсними, керувати різними гілками і визначати їх як такі, що відстежуються " +"чи ні, і багато іншого." + +#: ../../src/vcs/remotes.txt:21 +msgid "Showing your remote" +msgstr "Перелік віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:23 +msgid "" +"To see which remote servers you have configured, you can run the ``git " +"remote`` command. It lists the shortnames of each remote handle you're " +"specified. If you've cloned your repository, you should at least see " +"``origin`` - that is default name Git gives to the server you clone from:" +msgstr "" +"Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати " +"команду ``git remote``. Вона покаже короткі імена кожного вказаного вами " +"віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте " +"побачити принаймні ``origin`` - ім'я за замовчуванням, яке Git дає серверу, " +"з якого ви клонуєте:" + +#: ../../src/vcs/remotes.txt:41 +msgid "" +"This means we can pull contributions from any of these users pretty easily. " +"We may additionally have permission to push to one or more of these." +msgstr "" +"Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих " +"користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного " +"або декількох з них." + +#: ../../src/vcs/remotes.txt:45 +msgid "Adding remote repositories" +msgstr "Додавання віддалених репозиторіїв" + +#: ../../src/vcs/remotes.txt:47 +msgid "" +"To add a new remote Git repository as a shortname you can reference easily, " +"run ``git remote add ``:" +msgstr "" +"Щоб додати новий віддалений репозиторій Git'у у вигляді короткого імені, на " +"яке можна легко посилатися, виконайте ``git remote add <назва> <адреса>``:" + +#: ../../src/vcs/remotes.txt:61 +msgid "" +"Now you can use the string \"personal\" on the command line in lieu of the " +"whole URL. ``master`` branch of \"https://github.com/shorodilov/python-" +"course\" is now accessible as ``personal/master``, while shortname to the " +"same branch in origin will be -- ``origin/master``." +msgstr "" +"Тепер ви можете використовувати рядок \"personal\" в командному рядку " +"замість повної URL-адреси. Гілка ``master`` в \"https://github.com/" +"shorodilov/python-course\" тепер доступна як ``personal/master``, тоді як " +"скорочена назва тієї ж гілки в origin буде -- ``origin/master``." + +#: ../../src/vcs/remotes.txt:67 +msgid "Fetching and pulling from remotes" +msgstr "Отримання та витягування з віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:69 +msgid "" +"To get data from remote project, you can run ``git fetch`` command. The " +"command goes out to that remote project and pulls down all the information " +"from that remote project that you don't have yet. After you do this, you " +"should have references to all the branches from that remote, which you can " +"merge in or inspect at any time." +msgstr "" +"Щоб отримати дані з віддаленого проекту, ви можете виконати команду ``git " +"fetch``. Команда звернеться до цього віддаленого проекту і витягне всю " +"інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання " +"на всі гілки з цього віддаленого проекту, які ви можете об'єднати або " +"переглянути у будь-який час." + +#: ../../src/vcs/remotes.txt:79 +msgid "" +"If your current branch is set up to track a remote branch, you can use ``git " +"pull`` command to automatically fetch and then merge that remote branch into " +"your current branch. By default, the ``git clone`` command automatically " +"sets up your local ``master`` branch to track the remote ``master`` branch " +"(or whatever default remote branch)." +msgstr "" +"Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви " +"можете скористатися командою ``git pull`` для автоматичного отримання і " +"подальшого об'єднання цієї віддаленої гілки у вашу поточну гілку. За " +"замовчуванням, команда ``git clone`` автоматично налаштовує вашу локальну " +"гілку ``master`` на відстеження віддаленої гілки ``master`` (або будь-якої " +"іншої віддаленої гілки за замовчуванням)." + +#: ../../src/vcs/remotes.txt:85 +msgid "" +"From Git version 2.27 onward, ``git pull`` will give a warning if the ``pull." +"rebase`` variable is not set. Git will keep warning you until you set the " +"variable." +msgstr "" +"Починаючи з версії 2.27, ``git pull`` видаватиме попередження, якщо змінну " +"``pull.rebase`` не встановлено. Git продовжуватиме видавати попередження, " +"доки ви не встановите змінну." + +#: ../../src/vcs/remotes.txt:90 +msgid "" +"If you want the default behavior of Git (fast-forward if possible, else " +"create a merge commit): ``git config --global pull.rebase \"false\"``." +msgstr "" +"Якщо ви хочете отримати поведінку Git'а за замовчуванням (перемотування " +"вперед, якщо можливо, інакше створіть комміт злиття): ``git config --global " +"pull.rebase \"false\"``." + +#: ../../src/vcs/remotes.txt:93 +msgid "" +"If you want to rebase when pulling: ``git config --global pull.rebase " +"\"true\"``." +msgstr "" +"Якщо ви хочете перебазувати базу при витягуванні: ``git config --global pull." +"rebase \"true\"``." + +#: ../../src/vcs/remotes.txt:97 +msgid "Pushing to remotes" +msgstr "Відправка до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:99 +msgid "" +"When you have your project at a point that you want to share, you have to " +"push it upstream. The command for this is simple: ``git push " +"``." +msgstr "" +"Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам " +"потрібно перемістити його вгору за течією. Команда для цього проста: ``git " +"push <віддалений> <гілка>``." + +#: ../../src/vcs/remotes.txt:106 +msgid "" +"This command works only if you cloned from a server to which you have write " +"access and if nobody has pushed in the meantime. If you and someone else " +"clone at the same time and they push upstream and then you push upstream, " +"you push will rightly be rejected. You'll have to fetch their work first and " +"incorporate it into yours before you'll be allowed to push." +msgstr "" +"Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є " +"доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте " +"одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, " +"ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати " +"їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати." + +#: ../../src/vcs/remotes.txt:113 +msgid "Pushing a new branch to remote" +msgstr "Переміщення нової гілки до віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:115 +msgid "" +"In case you have created a local branch for some specific needs and you want " +"to share this branch, you need to set up track for this branch. This can be " +"done by using: ``git push --set-upstream origin ``. This will " +"create a new remote branch and set up track to your current local branch. " +"There is a shortcut for this command: ``git push -u origin ``." +msgstr "" +"Якщо ви створили локальну гілку для якихось конкретних потреб і хочете " +"надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна " +"зробити за допомогою ``git push --set-upstream origin <віддалена_гілка>``. " +"Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної " +"гілки. Для цієї команди існує комбінація клавіш: ``git push -u origin " +"<віддалена_гілка>``." + +#: ../../src/vcs/remotes.txt:122 +msgid "Inspecting a remote" +msgstr "Перевірка віддаленого репозиторію" + +#: ../../src/vcs/remotes.txt:124 +msgid "" +"If you want to see more information about a particular remote, you can use " +"the ``git remote show , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/setup.txt:-1 +msgid "Version control system" +msgstr "Система контролю версій" + +#: ../../src/vcs/setup.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/vcs/setup.txt:-1 +msgid "version, control, system, vcs, git, setup" +msgstr "version, control, system, vcs, git, setup" + +#: ../../src/vcs/setup.txt:8 +msgid "Git Setup" +msgstr "Налаштування Git'а" + +#: ../../src/vcs/setup.txt:10 +msgid "" +"Now that you have Git on your system, you'll want to do a few things to " +"customize your Git environment. Git comes with a tool called ``git config`` " +"that lets you get and set configuration variables that control all aspects " +"of how Git looks and operates. These variables can be stored in three " +"different places:" +msgstr "" +"Тепер, коли у вашій системі встановлено Git, ви захочете зробити кілька " +"речей, щоб налаштувати середовище Git'а. Git постачається з інструментом під " +"назвою ``git config``, який дозволяє вам отримувати та встановлювати " +"конфігураційні змінні, що контролюють всі аспекти вигляду та роботи Git'у. " +"Ці змінні можна зберігати у трьох різних місцях:" + +#: ../../src/vcs/setup.txt:16 +msgid "" +"*[path]/etc/gitconfig* file: Contains values applied to every user on the " +"system and all their repositories. If you pass the option ``--system`` to " +"git config, it reads and writes from this file specifically. Because this is " +"a system configuration file, you would need administrative or superuser " +"privilege to make changes to it." +msgstr "" +"Файл *[path]/etc/gitconfig*: Містить значення, що застосовуються до кожного " +"користувача у системі та всіх його сховищ. Якщо ви передасте git config " +"параметр ``--system``, він буде читати і писати саме з цього файлу. Оскільки " +"це файл конфігурації системи, вам знадобляться адміністративні привілеї або " +"привілеї суперкористувача, щоб вносити до нього зміни." + +#: ../../src/vcs/setup.txt:21 +msgid "" +"*~/.gitconfig* or *~/.config/git/config* file: Values specific personally to " +"you, the user. You can make Git read and write to this file specifically by " +"passing the ``--global`` option, and this affects all of the repositories " +"you work with on your system." +msgstr "" +"*~/.gitconfig* або *~/.config/git/config* файл: Значення, характерні " +"особисто для вас, користувача. Ви можете змусити Git'а читати і писати до " +"цього файлу спеціально, передавши опцію ``--global``, і це вплине на всі " +"сховища, з якими ви працюєте у вашій системі." + +#: ../../src/vcs/setup.txt:25 +msgid "" +"*config* file in the Git directory (that is, *.git/config*) of whatever " +"repository you're currently using: Specific to that single repository. You " +"can force Git to read from and write to this file with the ``--local`` " +"option, but that is in fact the default. Unsurprisingly, you need to be " +"located somewhere in a Git repository for this option to work properly." +msgstr "" +"файл *config* у каталозі Git (тобто *.git/config*) того сховища, яке ви " +"зараз використовуєте: Специфічний для цього окремого сховища. Ви можете " +"змусити Git'а читати з цього файлу і писати до нього за допомогою опції ``--" +"local``, але за замовчуванням так і є. Не дивно, що для правильної роботи " +"цієї опції вам потрібно знаходитися десь у сховищі Git'а." + +#: ../../src/vcs/setup.txt:31 +msgid "" +"Each level overrides values in the previous level, so values in *.git/" +"config* trump those in *[path]/etc/gitconfig*." +msgstr "" +"Кожен рівень перевизначає значення попереднього рівня, тому значення у *.git/" +"config* мають перевагу над значеннями у *[path]/etc/gitconfig*." + +#: ../../src/vcs/setup.txt:34 +msgid "You can view all of your settings and where they are coming from using:" +msgstr "" +"Ви можете переглянути всі свої налаштування і те, звідки вони надходять, " +"використовуючи:" + +#: ../../src/vcs/setup.txt:41 +msgid "Your identity" +msgstr "Ваша особистість" + +#: ../../src/vcs/setup.txt:43 +msgid "" +"The first thing you should do when you install Git is to set your user name " +"and email address. This is important because every Git commit uses this " +"information." +msgstr "" +"Перше, що вам слід зробити під час встановлення Git'у, це вказати своє ім'я " +"користувача та адресу електронної пошти. Це важливо, оскільки кожна фіксація " +"Git'а використовує цю інформацію." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/tagging.po b/src/_locales/uk/LC_MESSAGES/vcs/tagging.po new file mode 100644 index 000000000..e1b8a53e9 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/vcs/tagging.po @@ -0,0 +1,169 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV , 2023. +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/vcs/tagging.txt:3 +msgid "Tagging" +msgstr "Тегування" + +#: ../../src/vcs/tagging.txt:5 +msgid "" +"Like most VCSs, Git has the ability to tag specific points in a repository's " +"history as being important. Typically, people use this functionality to mark " +"release points (``v1.0``, ``v2.0`` and so on)." +msgstr "" +"Як і більшість VCS, Git має можливість позначати певні моменти в історії " +"сховища як важливі. Зазвичай люди використовують цю функцію для позначення " +"точок релізу (``v1.0``, ``v2.0`` і так далі)." + +#: ../../src/vcs/tagging.txt:10 +msgid "Listing tags" +msgstr "Перелік тегів" + +#: ../../src/vcs/tagging.txt:12 +msgid "" +"Listing the existing tags in Git is straightforward. Just type ``git tag`` " +"(with optional ``-l`` or ``--list``)." +msgstr "" +"Перерахувати існуючі теги у Git'і дуже просто. Просто введіть ``git tag`` (з " +"необов'язковим ``-l`` або ``--list``)." + +#: ../../src/vcs/tagging.txt:21 +msgid "" +"This command lists the tags in alphabetical order, the order in which they " +"are displayed has no real importance. You can also search for tags that " +"match a particular pattern. The Git source repo, for instance contains more " +"than 500 tags. If you're interested only in looking at the 1.8.4 series, you " +"can run this:" +msgstr "" +"Ця команда перелічує мітки в алфавітному порядку, порядок їх відображення не " +"має особливого значення. Ви також можете шукати теги, які відповідають " +"певному шаблону. Наприклад, сховище коду Git містить понад 500 тегів. Якщо " +"вас цікавить лише серія 1.8.4, ви можете виконати цю команду:" + +#: ../../src/vcs/tagging.txt:37 +msgid "Creating tags" +msgstr "Створення тегів" + +#: ../../src/vcs/tagging.txt:39 +msgid "Git supports two types of tags: *lightweight* and *annotated*." +msgstr "Git підтримує два типи тегів: *легкі* та *анотовані*." + +#: ../../src/vcs/tagging.txt:41 +msgid "" +"A lightweight tag is very much like a branch that doesn't change -- it's " +"just a pointer to a specific commit." +msgstr "" +"Полегшений тег дуже схожий на гілку, яка не змінюється -- це просто " +"вказівник на конкретний комміт." + +#: ../../src/vcs/tagging.txt:44 +msgid "" +"Annotated tags, however, are stored as full objects in the Git database. " +"They're checksummed; contain the tagger name, email, and date; have a " +"tagging message; and can be signed and verified with GBU Privacy Guard " +"(GPG). It's generally recommended that you create annotated tags so you can " +"have all this information; but if you want a temporary tag or for some " +"reason don't want to keep the other information, lightweight tags are " +"available too." +msgstr "" +"Анотовані мітки, однак, зберігаються як повноцінні об'єкти в базі даних Git. " +"Вони мають контрольну суму, містять ім'я тегувальника, електронну пошту та " +"дату, мають повідомлення про тегування, а також можуть бути підписані та " +"перевірені за допомогою GBU Privacy Guard (GPG). Зазвичай рекомендується " +"створювати анотовані мітки, щоб мати всю цю інформацію; але якщо вам " +"потрібна тимчасова мітка або з якихось причин ви не хочете зберігати іншу " +"інформацію, доступні також полегшені мітки." + +#: ../../src/vcs/tagging.txt:52 +msgid "Annotated tags" +msgstr "Анотовані теги" + +#: ../../src/vcs/tagging.txt:53 +msgid "" +"Creating an annotated tag in Git is simple. The easiest way is to specify ``-" +"a`` when you run the ``tag`` command:" +msgstr "" +"Створити анотовану мітку в Git'і дуже просто. Найпростіший спосіб - вказати " +"``-a`` при виконанні команди ``tag``:" + +#: ../../src/vcs/tagging.txt:69 +msgid "Lightweight tags" +msgstr "Легкі мітки" + +#: ../../src/vcs/tagging.txt:70 +msgid "" +"Another way to tag commits is with a lightweight tag. this is basically the " +"commit checksum stored in a file -- no other information is kept. To create " +"a lightweight tag, don't supply any of the ``-a``, ``-s``, or ``-m`` " +"options, just provide a tag name:" +msgstr "" +"Інший спосіб позначення коммітів - використання полегшених тегів. Це, по " +"суті, контрольна сума комміту, яка зберігається у файлі - ніяка інша " +"інформація не зберігається. Щоб створити полегшену мітку, не вказуйте жодної " +"з опцій ``-a``, ``-s`` або ``-m``, просто вкажіть назву мітки:" + +#: ../../src/vcs/tagging.txt:89 +msgid "Tagging later" +msgstr "Відмітити пізніше" + +#: ../../src/vcs/tagging.txt:90 +msgid "You can also tag commits after you're moved past them." +msgstr "Ви також можете позначати коміти після того, як ви пройшли повз них." + +#: ../../src/vcs/tagging.txt:107 +msgid "Deleting tags" +msgstr "Видалення тегів" + +#: ../../src/vcs/tagging.txt:109 +msgid "" +"To delete a tag on your local repository, you can use ``git tag -d " +"``." +msgstr "" +"Щоб видалити тег у вашому локальному сховищі, ви можете скористатися ``git " +"tag -d ``." + +#: ../../src/vcs/tagging.txt:117 +msgid "Checking out tags" +msgstr "Перевірка тегів" + +#: ../../src/vcs/tagging.txt:119 +msgid "" +"If you want to view the versions of files a tag is pointing to, you can do a " +"``git checkout`` of that tag, although this puts your repository in " +"\"detached HEAD\" state, which has some ill side effects:" +msgstr "" +"Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете " +"виконати ``git checkout`` цього тегу, хоча це переводить ваше сховище у стан " +"\"відокремленої ГОЛОВИ\", що має деякі погані побічні ефекти:" + +#: ../../src/vcs/tagging.txt:145 +msgid "" +"In \"detached HEAD\" state, if you make changes and then create a commit, " +"the tag will stay the same, but your new commit won’t belong to any branch " +"and will be unreachable, except by the exact commit hash. Thus, if you need " +"to make changes -- say you’re fixing a bug on an older version, for instance " +"-- you will generally want to create a branch:" +msgstr "" +"У стані \"detached HEAD\", якщо ви внесете зміни, а потім створите коміт, " +"тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки " +"і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам " +"потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, " +"як правило, краще створити гілку:" From 55ae108f8b3df84835e478e510f4c0774a8860f9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 5 Oct 2023 20:48:40 +0300 Subject: [PATCH 434/689] Restore master doc translation file --- src/_locales/uk/LC_MESSAGES/index.po | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/index.po diff --git a/src/_locales/uk/LC_MESSAGES/index.po b/src/_locales/uk/LC_MESSAGES/index.po new file mode 100644 index 000000000..5303a5129 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/index.po @@ -0,0 +1,34 @@ +# PYTHON TRAINING COURSE TRANSLATION. +# +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# +# SERHII HORODILOV +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.04.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-14 01:49+0300\n" +"PO-Revision-Date: 2023-04-14 02:09+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: ua\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.2.2\n" + +#: ../../src/index.txt:21 +msgid "Additional materials" +msgstr "Додаткові матеріали" + +#: ../../src/index.txt:5 +msgid "PYTHON TRAINING COURSE" +msgstr "НАВЧАЛЬНИЙ КУРС PYTHON" + +#: ../../src/index.txt:35 +msgid "References" +msgstr "Посилання" From 612e55e48506d0c1915595e507f47059d6044a5d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:19:26 +0300 Subject: [PATCH 435/689] Add functions definition and calling section --- src/basics/functions.txt | 56 +++++++++++++++++++++++++++++++++++----- src/refs.bib | 7 +++++ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 7c24b38cd..378d740c3 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -3,18 +3,62 @@ :author: Serhii Horodilov :keywords: python, basics, functions -.. attention:: Page is under construction - - .. figure:: /../assets/img/construction.svg - :figwidth: 250 - :align: center - ******************************************************************************* Functions ******************************************************************************* +You may be familiar with the mathematical concept of a **function**. It is +a relationship or mapping between one or more inputs and a set of outputs. + +.. math:: + + z = f(x, y) + +Here ``f`` is a function that operates on the inputs ``x`` and ``y``, and +its output is bind to ``z``. + +In programming a **function** is a self-contained block of code that +encapsulate a specific task or related group of tasks. + +You may be familiar with some built-in functions like ``max``, ``min``, ``len`` +etc. + .. todo: function definition +The usual syntax for defining a Python function is as follows: + +:: + + def ([]): + + ++---------------------+-------------------------------------------------------+ +| Component | Meaning | ++=====================+=======================================================+ +| ``def`` | The keyword that informs Python that a function is | +| | being defined | ++---------------------+-------------------------------------------------------+ +| ```` | A valid Python identifier that names the function | ++---------------------+-------------------------------------------------------+ +| ```` | An optional, comma-separated list of parameters that | +| | may be passed to the function | ++---------------------+-------------------------------------------------------+ +| ```` | A block of valid Python statements; | +| | **body** of the function | ++---------------------+-------------------------------------------------------+ + +The syntax for calling a Python function is as follows: + +:: + + ([]) + +The ```` are the values passed into the function. They correspond +to the ```` in the function definition. You can define a function +that doesn't take any arguments, but the parentheses are still required. Both +a function definition and a function call must always include parentheses, +even if they're empty. + .. todo: function arguments (positional and key-word) .. todo: default argument value diff --git a/src/refs.bib b/src/refs.bib index 4e4b61640..1dc49ad96 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -170,3 +170,10 @@ @book{progit url = {https://git-scm.com/book/en/v2}, note = {Online Version}, } + +@misc{realpython:user-func, + title = {Defining Your Own Python Function}, + author = {John Sturtz}, + date = {2020.3.9}, + url = {https://realpython.com/defining-your-own-python-function/}, +} From 99d78ba7193daf06ca03abcf982af96f3750049d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:41:24 +0300 Subject: [PATCH 436/689] Add positional arguments description --- src/basics/functions.txt | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 378d740c3..3e4580b10 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -59,6 +59,45 @@ that doesn't take any arguments, but the parentheses are still required. Both a function definition and a function call must always include parentheses, even if they're empty. +Argument passing +================ .. todo: function arguments (positional and key-word) +More often, you want to **pass data into a function**. + +Positional arguments +-------------------- + +.. note:: + + Because of the way they're defined and used, positional arguments are also + called *required arguments*. + +The most straightforward way to pass arguments to a function is with +**positional arguments**. +In the function definition, you specify a comma-separated list of parameters +inside the parentheses. +When the function is called, you specify a corresponding list of arguments. + +The parameters behave like **variables** that are defined locally to the +function. + +Although positional arguments are the most straightforward way to pass data to +a function, they also afford the least flexibility. For starters, the **order** +of the arguments in the call must match the order of the parameters in the +definition. + +There's nothing to stop you from specifying positional arguments out of order. +The function even may still run, but it's very unlikely to produce the correct +results. + +.. note:: + + It's responsibility of the programmer who defines the function to document + what the appropriate arguments should be, and it's the responsibility of + the user of the function to be aware of that information and abide by it. + +With positional arguments, the arguments in the call and the parameters in the +definition must agree not only in order, but in number as well. + .. todo: default argument value From 08e4dfb243529f79e9e99ab124d70cbba2e1ef5b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:55:31 +0300 Subject: [PATCH 437/689] Add keyword arguments description --- src/basics/functions.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 3e4580b10..b6b230a7c 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -100,4 +100,24 @@ results. With positional arguments, the arguments in the call and the parameters in the definition must agree not only in order, but in number as well. +Keyword arguments +----------------- + +When calling a function, you can specify arguments in the form +``=``. In that case, each ```` must match a parameter +in the function definition. Referencing a keyword that doesn't match any of +these declared parameters generates an exception. + +Using keyword arguments lifts the restriction on arguments order. Each keyword +argument explicitly designates a specific parameter by name, so you can specify +them in any order and Python will still know which argument goes with which +parameter. + +Like with positional arguments, though, the number of arguments and parameters +must still match. + +You can call a function using both positional and keyword arguments. +Once you've specified a keyword argument, there can't be any positional +arguments to the right of it. + .. todo: default argument value From 521bf76c747579dee98e15acf2727a5c9d6d29cf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 19:58:17 +0300 Subject: [PATCH 438/689] Add default values description --- src/basics/functions.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index b6b230a7c..89b262185 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -120,4 +120,10 @@ You can call a function using both positional and keyword arguments. Once you've specified a keyword argument, there can't be any positional arguments to the right of it. -.. todo: default argument value +Default values +-------------- + +If a parameter specified in the function definition has the form of +``==``, then ```` becomes a default value for that +parameter. Parameters defined this way are referred to as +**default or optional parameters**. From 85e58b3d5814f4c80813f1e3bac74a4a4ed624da Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 20:13:36 +0300 Subject: [PATCH 439/689] Add mutable default values rubric --- src/basics/functions.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 89b262185..a108ed70a 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -127,3 +127,29 @@ If a parameter specified in the function definition has the form of ``==``, then ```` becomes a default value for that parameter. Parameters defined this way are referred to as **default or optional parameters**. + +.. rubric:: Mutable default parameter values + +Things can get weird if you specify a default parameter value that is +a mutable object. + +.. code-block:: python + + >>> def add_to_container(item, container = []): + ... container.append(item) + ... + >>> + >>> add_to_container(42, [1, 2, 3]) + [1, 2, 3, 42] + >>> add_to_container("foobar", ["foo", "bar"]) + ["foo", "bar", "foobar"] + >>> add_to_container(42) + [42] + >>> add_to_container("foobar") # ["foobar"] + [42, "foobar"] + +In Python default parameter values are **defined only once** when the function +is defined. The default value isn't re-defined each time the function is +called. For the example above, each time the ``add_to_container`` function is +called without passing ``container`` argument, the ``.append`` statement is +performed on the same list. From 3259c08a3ab4f3a6a4e5262b1ec5878d3f4e0dc7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 21:19:34 +0300 Subject: [PATCH 440/689] Add mutable vs immutable arguments section --- src/basics/functions.txt | 113 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index a108ed70a..521b587a3 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -153,3 +153,116 @@ is defined. The default value isn't re-defined each time the function is called. For the example above, each time the ``add_to_container`` function is called without passing ``container`` argument, the ``.append`` statement is performed on the same list. + +Mutable and immutable arguments +------------------------------- + +.. note:: + + Roughly, you may consider immutable object as passed-by-value, + and mutable objects as passed-by-reference. + However, that's not actual true. + +In programming language design, there are two common paradigms for passing an +argument to a function: + +- **pass-by-value** means a copy of the argument is passed to the function. +- **pass-by-reference** means a reference to the argument is passed to + the function. + +Are parameters in Python pass-by-value or pass-by-reference? They're neither, +exactly. That's because a reference doesn't mean quite the same thing in +Python as it does in C-like languages. + +Recall that in Python, every piece of data is an **object**. A reference points +to an object, not a specific memory location. + +Take a look on the code below: + +.. code-block:: python + :linenos: + + value = 24 + value = 42 + +These assignment statements have the following meaning: + +- **Line 1** cause ``value`` to point to an object whose value is ``24``. +- **Line 2** reassign ``value`` as a new reference to a different object + whose value is ``42``. + +In Python, when you pass an argument to a function, a similar *rebinding* +occurs. + +.. code-block:: python + :linenos: + + def reassign(fx: int) -> None: + fx = 10 + + + x = 5 + reassign(x) + +In the main program, the statement ``x = 5`` on line 5 creates a reference +named ``x`` bound to an object whose value is ``5``. +``reassign`` is then called on line 6 with ``x`` as its argument. +When a function first starts, a new reference called ``fx`` is created, which +initially points to the same ``5`` object. However, when the statement +``fx = 10`` on line 2 is executed, ``reassign`` rebinds ``fx`` to a new +object whose value is ``10``. From now, the two references ``x`` and ``fx`` are +uncoupled one from another. Nothing else that function does will affect ``x``, +and when function terminates, ``x`` will still point to the object ``5``, as it +did prior to the function call. + +You can confirm all this using ``id()``. Here's a slightly augmented version of +the code above: + +.. code-block:: python + :linenos: + + def reassign(fx: int) -> None: + print(f"{fx = }, {id(fx) = }") + fx = 10 + print(f"{fx = }, {id(fx) = }") + + + x = 5 + print(f"{x = }, {id(x) = }") + reassign(x) + print(f"{x = }, {id(x) = }") + +The outputs will look like: + +:: + + x = 5, id(x) = 140706772804520 + fx = 5, id(fx) = 140706772804520 + fx = 42, id(fx) = 140706772805704 + x = 5, id(x) = 140706772804520 + +.. note:: + + Python's argument-passing mechanism has been called **pass-by-assignment**. + You may also see terms pass-by-object, pass-by-object-reference, or + pass-by-sharing. This is because parameter names are bound to objects on + function entry in Python, and assignment is also the process of binding + a name to an object. + +The key takeaway here is that Python function can't change the value of an +argument by reassigning the corresponding parameter to something else. + +However, functions can use references to make modifications inside of a mutable +objects. + +.. code-block:: python + :linenos: + + >>> def insert_into_container(item, container, idx = 0): + ... container.insert(idx, item) + ... + >>> + >>> numbers = [1, 2, 3] + >>> insert_into_container(42, numbers) + >>> numbers + [42, 1, 2, 3] From 47fbee8a9f8d4dbaa65cb17e0f0eb3fec710e00e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 21:33:57 +0300 Subject: [PATCH 441/689] Add return statement section (draft) --- src/basics/functions.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 521b587a3..029bef3af 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -266,3 +266,15 @@ objects. >>> insert_into_container(42, numbers) >>> numbers [42, 1, 2, 3] + +The return statement +==================== + +It serves two purposes: + +- It immediately terminates the function and passes execution control back + to the caller. +- It provides a mechanism by which the function can pass data back + to the caller. + +.. todo: complete the return statement section From b28c457956ae0b8daf93744637a980221eacbbec Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 21:58:20 +0300 Subject: [PATCH 442/689] Add argument tuple packing/unpacking section --- src/basics/functions.txt | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 029bef3af..04063c378 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -278,3 +278,81 @@ It serves two purposes: to the caller. .. todo: complete the return statement section + +Variable-length argument list +============================= + +In some cases, when you're defining a function, you may not know beforehand how +many arguments you'll want it to take. + +For example, a function that computes an average of several values may look +something like this: + +.. code-block:: python + + def avg(a, b, c): + return (a + b + c) / 3 + +However, as you're already seen, when positional arguments are used, the number +of arguments passed must match the number of parameters declared. + +Argument tuple packing +---------------------- + +When a parameter name in a function definition is preceded by an asterisk (\*), +it indicates **argument tuple packing**. Any corresponding arguments in +a function call are packed into a tuple that the function can refer to by +the given parameter name. + +.. code-block:: python + + def avg(*args): + return sum(args) / len(args) + +Any name can be used, but *args* is so commonly chosen that it's practically +a standard. + +Argument tuple unpacking +------------------------ + +An analogous operation is available on the other side of the equation in +a function call. When an argument in a function call is preceded by an asterisk, +it indicates that the argument is a tuple that should be **unpacked** and +passed to the function as separate values. + +.. code-block:: python + + def demo_args_unpacking(a, b, c): + print(f"{a = }, {b = }, {c = }") + + + args = 10, 20, 30 + demo_args_unpacking(*args) + +.. note:: + + Although this type of unpacking is called **tuple** unpacking, it doesn't + only work with tuples. The asterisk can be applied to any iterable in + a function call. + + .. code-block:: python + + arguments_list = [10, 20, 30] + demo_args_unpacking(*arguments_list) + arguments_set = {10, 20, 30} + demo_args_unpacking(*arguments_set) + arguments_str = "ABC" + demo_args_unpacking(*arguments_str) + +.. note:: + + You can even do tuple packing and unpacking at the same time. + + .. code-block:: python + + def avg(*args) -> float: + return sum(args) / len(args) + + + numbers = 10, 20, 30 + average = avg(*numbers) From 355b1f630a62d921df2b6a54b855de6a4d34e621 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 22:15:35 +0300 Subject: [PATCH 443/689] Add argument dictionary packing/unpacking section --- src/basics/functions.txt | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 04063c378..f55b3f29b 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -356,3 +356,45 @@ passed to the function as separate values. numbers = 10, 20, 30 average = avg(*numbers) + +Argument dictionary packing +--------------------------- + +Python has a similar operator, the double asterisk (\*\*), which can be used +with function parameters to specify **dictionary packing**. Preceding parameter +in a function definition be a double asterisk indicates that the corresponding +arguments, which are expected to be keyword arguments (``key=value`` pairs), +should be packed into a dictionary. + +.. code-block:: python + + def display_person(first_name: str, last_name: str, **kwargs) -> None: + print(f"{first_name.title()} {last_name.title()}") + for key, value in kwargs.items(): + print(f"{key}:\t{value}") + + + display_person("serhii", "horodilov", school="A-Level", course="Python") + +Again, any name can be used, but the peculiar *kwargs* (which is short for +*keyword args*) is nearly standard. + +Argument dictionary unpacking +----------------------------- + +This is analogous to argument tuple unpacking. +When the double asterisk precedes an argument in a function call, it specifies +that the argument is a dictionary that should be unpacked, with the resulting +items passed to the function as keyword arguments. + +.. code-block:: python + + person_data = { + "first_name": "Serhii", + "last_name": "Horodilov", + "school": "A-Level", + "course": "Python", + "school_occupation": "teacher/mentor", + "job_title": "Software Engineer", + } + display_person(**person_data) From 0a3a12d23c36dce34991e1ea78184f0f0b9059ea Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 22:19:15 +0300 Subject: [PATCH 444/689] Add pre-translation for functions chapter --- .../uk/LC_MESSAGES/basics/functions.po | 650 +++++++++++++++++- 1 file changed, 643 insertions(+), 7 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index 61e7878af..e72f80b5b 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"POT-Creation-Date: 2023-10-23 22:17+0300\n" +"PO-Revision-Date: 2023-10-23 22:18+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -31,10 +31,646 @@ msgstr "Serhii Horodilov" msgid "python, basics, functions" msgstr "python, basics, functions" -#: ../../src/basics/functions.txt:6 -msgid "Page is under construction" -msgstr "Сторінка в розробці" - -#: ../../src/basics/functions.txt:14 +#: ../../src/basics/functions.txt:8 msgid "Functions" msgstr "Функції" + +#: ../../src/basics/functions.txt:10 +#, fuzzy +msgid "" +"You may be familiar with the mathematical concept of a **function**. It is a " +"relationship or mapping between one or more inputs and a set of outputs." +msgstr "" +"Можливо, ви знайомі з математичним поняттям **функція**. Це відношення або " +"відображення між одним або декількома входами та набором виходів." + +#: ../../src/basics/functions.txt:13 +#, fuzzy +msgid "z = f(x, y)" +msgstr "z = f(x, y)" + +#: ../../src/basics/functions.txt:17 +#, fuzzy +msgid "" +"Here ``f`` is a function that operates on the inputs ``x`` and ``y``, and " +"its output is bind to ``z``." +msgstr "" +"Тут ``f`` - це функція, яка оперує входами ``x`` та ``y``, а її вихід " +"прив'язаний до ``z``." + +#: ../../src/basics/functions.txt:20 +#, fuzzy +msgid "" +"In programming a **function** is a self-contained block of code that " +"encapsulate a specific task or related group of tasks." +msgstr "" +"У програмуванні **функція** - це автономний блок коду, який інкапсулює певну " +"задачу або пов'язану групу задач." + +#: ../../src/basics/functions.txt:23 +#, fuzzy +msgid "" +"You may be familiar with some built-in functions like ``max``, ``min``, " +"``len`` etc." +msgstr "" +"Ви можете бути знайомі з деякими вбудованими функціями, такими як ``max``, " +"``min``, ``len`` тощо." + +#: ../../src/basics/functions.txt:28 +#, fuzzy +msgid "The usual syntax for defining a Python function is as follows:" +msgstr "Звичайний синтаксис для визначення функції Python наступний:" + +#: ../../src/basics/functions.txt:36 +#, fuzzy +msgid "Component" +msgstr "Компонент" + +#: ../../src/basics/functions.txt:36 +#, fuzzy +msgid "Meaning" +msgstr "Значення" + +#: ../../src/basics/functions.txt:38 +#, fuzzy +msgid "``def``" +msgstr "``def``" + +#: ../../src/basics/functions.txt:38 +#, fuzzy +msgid "The keyword that informs Python that a function is being defined" +msgstr "Ключове слово, яке інформує Python про те, що функція визначається" + +#: ../../src/basics/functions.txt:41 +#, fuzzy +msgid "````" +msgstr "``<ім'я_функції>``" + +#: ../../src/basics/functions.txt:41 +#, fuzzy +msgid "A valid Python identifier that names the function" +msgstr "Правильний ідентифікатор Python, який називає функцію" + +#: ../../src/basics/functions.txt:43 +#, fuzzy +msgid "````" +msgstr "Параметри" + +#: ../../src/basics/functions.txt:43 +#, fuzzy +msgid "" +"An optional, comma-separated list of parameters that may be passed to the " +"function" +msgstr "" +"Необов'язковий список параметрів через кому, які можуть бути передані у " +"функцію" + +#: ../../src/basics/functions.txt:46 +#, fuzzy +msgid "````" +msgstr "''<висловлювання>''" + +#: ../../src/basics/functions.txt:46 +#, fuzzy +msgid "A block of valid Python statements; **body** of the function" +msgstr "Блок допустимих операторів Python; **тіло** функції" + +#: ../../src/basics/functions.txt:50 +#, fuzzy +msgid "The syntax for calling a Python function is as follows:" +msgstr "Синтаксис виклику функції Python наступний:" + +#: ../../src/basics/functions.txt:56 +#, fuzzy +msgid "" +"The ```` are the values passed into the function. They correspond " +"to the ```` in the function definition. You can define a " +"function that doesn't take any arguments, but the parentheses are still " +"required. Both a function definition and a function call must always include " +"parentheses, even if they're empty." +msgstr "" +"Значення ```` - це значення, що передаються у функцію. Вони " +"відповідають ```` у визначенні функції. Ви можете визначити " +"функцію, яка не приймає жодних аргументів, але дужки все одно є " +"обов'язковими. І визначення функції, і її виклик завжди повинні містити " +"дужки, навіть якщо вони порожні." + +#: ../../src/basics/functions.txt:63 +#, fuzzy +msgid "Argument passing" +msgstr "Передача аргументу" + +#: ../../src/basics/functions.txt:66 +#, fuzzy +msgid "More often, you want to **pass data into a function**." +msgstr "Найчастіше вам потрібно **передати дані у функцію**." + +#: ../../src/basics/functions.txt:69 +#, fuzzy +msgid "Positional arguments" +msgstr "Позиційні аргументи" + +#: ../../src/basics/functions.txt:73 +#, fuzzy +msgid "" +"Because of the way they're defined and used, positional arguments are also " +"called *required arguments*." +msgstr "" +"Через те, як вони визначаються і використовуються, позиційні аргументи також " +"називають *обов'язковими аргументами*." + +#: ../../src/basics/functions.txt:76 +#, fuzzy +msgid "" +"The most straightforward way to pass arguments to a function is with " +"**positional arguments**. In the function definition, you specify a comma-" +"separated list of parameters inside the parentheses. When the function is " +"called, you specify a corresponding list of arguments." +msgstr "" +"Найпростіший спосіб передачі аргументів у функцію - за допомогою " +"**позиційних аргументів**. У визначенні функції ви вказуєте список " +"параметрів, розділених комами, всередині круглих дужок. Коли функція " +"викликається, ви вказуєте відповідний список аргументів." + +#: ../../src/basics/functions.txt:82 +#, fuzzy +msgid "" +"The parameters behave like **variables** that are defined locally to the " +"function." +msgstr "Параметри поводяться як **змінні**, визначені локально у функції." + +#: ../../src/basics/functions.txt:85 +#, fuzzy +msgid "" +"Although positional arguments are the most straightforward way to pass data " +"to a function, they also afford the least flexibility. For starters, the " +"**order** of the arguments in the call must match the order of the " +"parameters in the definition." +msgstr "" +"Хоча позиційні аргументи є найпростішим способом передачі даних у функцію, " +"вони також забезпечують найменшу гнучкість. Для початку, **порядок** " +"аргументів у виклику повинен відповідати порядку параметрів у визначенні." + +#: ../../src/basics/functions.txt:90 +#, fuzzy +msgid "" +"There's nothing to stop you from specifying positional arguments out of " +"order. The function even may still run, but it's very unlikely to produce " +"the correct results." +msgstr "" +"Ніщо не заважає вам вказати позиційні аргументи в неправильному порядку. " +"Функція навіть може запуститися, але навряд чи видасть правильні результати." + +#: ../../src/basics/functions.txt:96 +#, fuzzy +msgid "" +"It's responsibility of the programmer who defines the function to document " +"what the appropriate arguments should be, and it's the responsibility of the " +"user of the function to be aware of that information and abide by it." +msgstr "" +"Програміст, який визначає функцію, зобов'язаний задокументувати, якими мають " +"бути відповідні аргументи, а користувач функції зобов'язаний знати цю " +"інформацію і дотримуватися її." + +#: ../../src/basics/functions.txt:100 +#, fuzzy +msgid "" +"With positional arguments, the arguments in the call and the parameters in " +"the definition must agree not only in order, but in number as well." +msgstr "" +"З позиційними аргументами аргументи у виклику та параметри у визначенні " +"повинні узгоджуватися не тільки за порядком, але й за кількістю." + +#: ../../src/basics/functions.txt:104 +#, fuzzy +msgid "Keyword arguments" +msgstr "Аргументи за ключовими словами" + +#: ../../src/basics/functions.txt:106 +#, fuzzy +msgid "" +"When calling a function, you can specify arguments in the form " +"``=``. In that case, each ```` must match a " +"parameter in the function definition. Referencing a keyword that doesn't " +"match any of these declared parameters generates an exception." +msgstr "" +"При виклику функції можна вказувати аргументи у вигляді " +"``=``. У цьому випадку кожен ```` повинен " +"відповідати параметру у визначенні функції. Звернення до ключового слова, " +"яке не відповідає жодному з цих оголошених параметрів, генерує виключення." + +#: ../../src/basics/functions.txt:111 +#, fuzzy +msgid "" +"Using keyword arguments lifts the restriction on arguments order. Each " +"keyword argument explicitly designates a specific parameter by name, so you " +"can specify them in any order and Python will still know which argument goes " +"with which parameter." +msgstr "" +"Використання аргументів з ключовими словами знімає обмеження на порядок " +"аргументів. Кожне ключове слово-аргумент явно вказує на конкретний параметр " +"за назвою, тому ви можете вказати їх у довільному порядку, і Python все одно " +"знатиме, який аргумент йде з яким параметром." + +#: ../../src/basics/functions.txt:116 +#, fuzzy +msgid "" +"Like with positional arguments, though, the number of arguments and " +"parameters must still match." +msgstr "" +"Як і у випадку з позиційними аргументами, кількість аргументів і параметрів " +"має збігатися." + +#: ../../src/basics/functions.txt:119 +#, fuzzy +msgid "" +"You can call a function using both positional and keyword arguments. Once " +"you've specified a keyword argument, there can't be any positional arguments " +"to the right of it." +msgstr "" +"Ви можете викликати функцію, використовуючи як позиційні, так і ключові " +"аргументи. Після того, як ви вказали ключове слово, праворуч від нього не " +"може бути жодних позиційних аргументів." + +#: ../../src/basics/functions.txt:124 +#, fuzzy +msgid "Default values" +msgstr "Значення за замовчуванням" + +#: ../../src/basics/functions.txt:126 +#, fuzzy +msgid "" +"If a parameter specified in the function definition has the form of " +"``==``, then ```` becomes a default value for that " +"parameter. Parameters defined this way are referred to as **default or " +"optional parameters**." +msgstr "" +"Якщо параметр, вказаний у визначенні функції, має вигляд " +"``==``, то значенням за замовчуванням для цього параметра стає " +"````. Параметри, визначені таким чином, називаються **параметрами за " +"замовчуванням або необов'язковими параметрами**." + +#: ../../src/basics/functions.txt:132 +#, fuzzy +msgid "Mutable default parameter values" +msgstr "Змінювані значення параметрів за замовчуванням" + +#: ../../src/basics/functions.txt:133 +#, fuzzy +msgid "" +"Things can get weird if you specify a default parameter value that is a " +"mutable object." +msgstr "" +"Ситуація може ускладнитися, якщо ви вкажете значення параметра за " +"замовчуванням, який є змінюваним об'єктом." + +#: ../../src/basics/functions.txt:151 +#, fuzzy +msgid "" +"In Python default parameter values are **defined only once** when the " +"function is defined. The default value isn't re-defined each time the " +"function is called. For the example above, each time the " +"``add_to_container`` function is called without passing ``container`` " +"argument, the ``.append`` statement is performed on the same list." +msgstr "" +"У Python значення параметрів за замовчуванням **визначаються лише один раз** " +"під час визначення функції. Значення за замовчуванням не перевизначається " +"при кожному виклику функції. У наведеному вище прикладі кожного разу, коли " +"функція ``add_to_container`` викликається без передачі аргументу " +"``container``, оператор ``.append`` виконується над тим самим списком." + +#: ../../src/basics/functions.txt:158 +#, fuzzy +msgid "Mutable and immutable arguments" +msgstr "Змінні та незмінні аргументи" + +#: ../../src/basics/functions.txt:162 +#, fuzzy +msgid "" +"Roughly, you may consider immutable object as passed-by-value, and mutable " +"objects as passed-by-reference. However, that's not actual true." +msgstr "" +"Грубо кажучи, ви можете вважати незмінний об'єкт переданим значенням, а " +"змінювані об'єкти - переданим посиланням. Однак, це не зовсім так." + +#: ../../src/basics/functions.txt:166 +#, fuzzy +msgid "" +"In programming language design, there are two common paradigms for passing " +"an argument to a function:" +msgstr "" +"У мові програмування існує дві поширені парадигми передачі аргументу у " +"функцію:" + +#: ../../src/basics/functions.txt:169 +#, fuzzy +msgid "" +"**pass-by-value** means a copy of the argument is passed to the function." +msgstr "" +"**передати за значенням** означає, що у функцію передається копія аргументу." + +#: ../../src/basics/functions.txt:170 +#, fuzzy +msgid "" +"**pass-by-reference** means a reference to the argument is passed to the " +"function." +msgstr "" +"**передача за посиланням** означає, що у функцію передається посилання на " +"аргумент." + +#: ../../src/basics/functions.txt:173 +#, fuzzy +msgid "" +"Are parameters in Python pass-by-value or pass-by-reference? They're " +"neither, exactly. That's because a reference doesn't mean quite the same " +"thing in Python as it does in C-like languages." +msgstr "" +"Чи є параметри в Python передачею за значенням або за посиланням? Вони не є " +"ні тими, ні іншими. Це тому, що посилання в Python означає не зовсім те " +"саме, що в C-подібних мовах." + +#: ../../src/basics/functions.txt:177 +#, fuzzy +msgid "" +"Recall that in Python, every piece of data is an **object**. A reference " +"points to an object, not a specific memory location." +msgstr "" +"Нагадаємо, що у Python кожен фрагмент даних є **об'єктом**. Посилання вказує " +"на об'єкт, а не на конкретну ділянку пам'яті." + +#: ../../src/basics/functions.txt:180 +#, fuzzy +msgid "Take a look on the code below:" +msgstr "Погляньте на код нижче:" + +#: ../../src/basics/functions.txt:188 +#, fuzzy +msgid "These assignment statements have the following meaning:" +msgstr "Ці оператори присвоювання мають наступне значення:" + +#: ../../src/basics/functions.txt:190 +#, fuzzy +msgid "**Line 1** cause ``value`` to point to an object whose value is ``24``." +msgstr "" +"**Рядок 1** призводить до того, що ``value`` вказує на об'єкт, значенням " +"якого є ``24``." + +#: ../../src/basics/functions.txt:191 +#, fuzzy +msgid "" +"**Line 2** reassign ``value`` as a new reference to a different object whose " +"value is ``42``." +msgstr "" +"**Рядок 2** перепризначити ``value`` як нове посилання на інший об'єкт, " +"значенням якого є ``42``." + +#: ../../src/basics/functions.txt:194 +#, fuzzy +msgid "" +"In Python, when you pass an argument to a function, a similar *rebinding* " +"occurs." +msgstr "" +"У Python, коли ви передаєте аргумент у функцію, відбувається аналогічне " +"*переприв'язування*." + +#: ../../src/basics/functions.txt:207 +#, fuzzy +msgid "" +"In the main program, the statement ``x = 5`` on line 5 creates a reference " +"named ``x`` bound to an object whose value is ``5``. ``reassign`` is then " +"called on line 6 with ``x`` as its argument. When a function first starts, a " +"new reference called ``fx`` is created, which initially points to the same " +"``5`` object. However, when the statement ``fx = 10`` on line 2 is executed, " +"``reassign`` rebinds ``fx`` to a new object whose value is ``10``. From now, " +"the two references ``x`` and ``fx`` are uncoupled one from another. Nothing " +"else that function does will affect ``x``, and when function terminates, " +"``x`` will still point to the object ``5``, as it did prior to the function " +"call." +msgstr "" +"В основній програмі оператор ``x = 5`` у рядку 5 створює посилання з іменем " +"``x``, пов'язане з об'єктом, значенням якого є ``5``. потім у рядку 6 " +"викликається функція ``reassign`` з ``x`` як аргументом. При першому запуску " +"функції створюється нове посилання ``fx``, яке спочатку вказує на той самий " +"об'єкт ``5``. Однак, коли виконується оператор ``fx = 10`` у рядку 2, " +"``reassign`` перепризначає ``fx`` на новий об'єкт, значенням якого є ``10``. " +"Відтепер два посилання ``x`` і ``fx`` від'єднано одне від одного. Ніякі інші " +"дії функції не вплинуть на ``x``, і коли функція завершиться, ``x`` все ще " +"вказуватиме на об'єкт ``5``, як це було до виклику функції." + +#: ../../src/basics/functions.txt:218 +#, fuzzy +msgid "" +"You can confirm all this using ``id()``. Here's a slightly augmented version " +"of the code above:" +msgstr "" +"Ви можете підтвердити все це за допомогою ``id()``. Ось дещо доповнена " +"версія коду вище:" + +#: ../../src/basics/functions.txt:235 +#, fuzzy +msgid "The outputs will look like:" +msgstr "Результати будуть виглядати так:" + +#: ../../src/basics/functions.txt:246 +#, fuzzy +msgid "" +"Python's argument-passing mechanism has been called **pass-by-assignment**. " +"You may also see terms pass-by-object, pass-by-object-reference, or pass-by-" +"sharing. This is because parameter names are bound to objects on function " +"entry in Python, and assignment is also the process of binding a name to an " +"object." +msgstr "" +"Механізм передачі аргументів у Python називається **передача за " +"присвоєнням**. Ви також можете зустріти терміни pass-by-object, pass-by-" +"object-reference або pass-by-sharing. Це пов'язано з тим, що імена " +"параметрів прив'язуються до об'єктів під час виклику функції у Python, а " +"присвоювання - це також процес прив'язки імені до об'єкта." + +#: ../../src/basics/functions.txt:252 +#, fuzzy +msgid "" +"The key takeaway here is that Python function can't change the value of an " +"argument by reassigning the corresponding parameter to something else." +msgstr "" +"Ключовим моментом тут є те, що функція Python не може змінити значення " +"аргументу, перепризначивши відповідний параметр на щось інше." + +#: ../../src/basics/functions.txt:255 +#, fuzzy +msgid "" +"However, functions can use references to make modifications inside of a " +"mutable objects." +msgstr "" +"Однак, функції можуть використовувати посилання для модифікацій всередині " +"змінюваних об'єктів." + +#: ../../src/basics/functions.txt:271 +#, fuzzy +msgid "The return statement" +msgstr "Оператор повернення" + +#: ../../src/basics/functions.txt:273 +#, fuzzy +msgid "It serves two purposes:" +msgstr "Він служить двом цілям:" + +#: ../../src/basics/functions.txt:275 +#, fuzzy +msgid "" +"It immediately terminates the function and passes execution control back to " +"the caller." +msgstr "" +"Він негайно завершує функцію і передає керування виконанням назад тому, хто " +"її викликав." + +#: ../../src/basics/functions.txt:277 +#, fuzzy +msgid "" +"It provides a mechanism by which the function can pass data back to the " +"caller." +msgstr "" +"Він надає механізм, за допомогою якого функція може передавати дані назад " +"тому, хто її викликає." + +#: ../../src/basics/functions.txt:283 +#, fuzzy +msgid "Variable-length argument list" +msgstr "Список аргументів змінної довжини" + +#: ../../src/basics/functions.txt:285 +#, fuzzy +msgid "" +"In some cases, when you're defining a function, you may not know beforehand " +"how many arguments you'll want it to take." +msgstr "" +"У деяких випадках, коли ви визначаєте функцію, ви можете не знати " +"заздалегідь, скільки аргументів ви хочете, щоб вона приймала." + +#: ../../src/basics/functions.txt:288 +#, fuzzy +msgid "" +"For example, a function that computes an average of several values may look " +"something like this:" +msgstr "" +"Наприклад, функція, яка обчислює середнє арифметичне декількох значень, може " +"виглядати приблизно так:" + +#: ../../src/basics/functions.txt:296 +#, fuzzy +msgid "" +"However, as you're already seen, when positional arguments are used, the " +"number of arguments passed must match the number of parameters declared." +msgstr "" +"Однак, як ви вже бачили, коли використовуються позиційні аргументи, " +"кількість переданих аргументів повинна відповідати кількості оголошених " +"параметрів." + +#: ../../src/basics/functions.txt:300 +#, fuzzy +msgid "Argument tuple packing" +msgstr "Пакування кортежів аргументів" + +#: ../../src/basics/functions.txt:302 +#, fuzzy +msgid "" +"When a parameter name in a function definition is preceded by an asterisk " +"(\\*), it indicates **argument tuple packing**. Any corresponding arguments " +"in a function call are packed into a tuple that the function can refer to by " +"the given parameter name." +msgstr "" +"Коли імені параметра у визначенні функції передує зірочка (\\*), це означає " +"**упакування кортежу аргументів**. Будь-які відповідні аргументи у виклику " +"функції упаковуються у кортеж, на який функція може посилатися за вказаним " +"іменем параметра." + +#: ../../src/basics/functions.txt:312 +#, fuzzy +msgid "" +"Any name can be used, but *args* is so commonly chosen that it's practically " +"a standard." +msgstr "" +"Можна використовувати будь-яке ім'я, але *args* є настільки поширеним, що " +"стало практично стандартом." + +#: ../../src/basics/functions.txt:316 +#, fuzzy +msgid "Argument tuple unpacking" +msgstr "Розпакування кортежу аргументів" + +#: ../../src/basics/functions.txt:318 +#, fuzzy +msgid "" +"An analogous operation is available on the other side of the equation in a " +"function call. When an argument in a function call is preceded by an " +"asterisk, it indicates that the argument is a tuple that should be " +"**unpacked** and passed to the function as separate values." +msgstr "" +"Аналогічна операція доступна з іншого боку рівняння у виклику функції. Якщо " +"перед аргументом у виклику функції стоїть зірочка, це означає, що аргумент є " +"кортежем, який слід **розпакувати** і передати у функцію як окремі значення." + +#: ../../src/basics/functions.txt:334 +#, fuzzy +msgid "" +"Although this type of unpacking is called **tuple** unpacking, it doesn't " +"only work with tuples. The asterisk can be applied to any iterable in a " +"function call." +msgstr "" +"Хоча цей тип розпакування називається **розпакуванням кортежів**, він працює " +"не лише з кортежами. Зірочка може бути застосована до будь-якого ітератора у " +"виклику функції." + +#: ../../src/basics/functions.txt:349 +#, fuzzy +msgid "You can even do tuple packing and unpacking at the same time." +msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." + +#: ../../src/basics/functions.txt:361 +#, fuzzy +msgid "Argument dictionary packing" +msgstr "Пакування словника аргументів" + +#: ../../src/basics/functions.txt:363 +#, fuzzy +msgid "" +"Python has a similar operator, the double asterisk (\\*\\*), which can be " +"used with function parameters to specify **dictionary packing**. Preceding " +"parameter in a function definition be a double asterisk indicates that the " +"corresponding arguments, which are expected to be keyword arguments " +"(``key=value`` pairs), should be packed into a dictionary." +msgstr "" +"У мові Python є подібний оператор, подвійна зірочка (\\*\\*), який можна " +"використовувати з параметрами функції для вказівки **пакування словників**. " +"Передування параметру у визначенні функції подвійною зірочкою вказує на те, " +"що відповідні аргументи, які, як очікується, є аргументами ключових слів " +"(пари ``ключ=значення``), мають бути упаковані у словник." + +#: ../../src/basics/functions.txt:379 +#, fuzzy +msgid "" +"Again, any name can be used, but the peculiar *kwargs* (which is short for " +"*keyword args*) is nearly standard." +msgstr "" +"Знову ж таки, можна використовувати будь-яке ім'я, але особливе *kwargs* (що " +"є скороченням від *ключове слово args*) є майже стандартним." + +#: ../../src/basics/functions.txt:383 +#, fuzzy +msgid "Argument dictionary unpacking" +msgstr "Розпакування словника аргументів" + +#: ../../src/basics/functions.txt:385 +#, fuzzy +msgid "" +"This is analogous to argument tuple unpacking. When the double asterisk " +"precedes an argument in a function call, it specifies that the argument is a " +"dictionary that should be unpacked, with the resulting items passed to the " +"function as keyword arguments." +msgstr "" +"Це аналогічно розпакуванню кортежу аргументів. Коли подвійна зірочка стоїть " +"перед аргументом у виклику функції, вона вказує на те, що аргумент є " +"словником, який слід розпакувати, а отримані елементи передати у функцію як " +"аргументи ключових слів." + +#~ msgid "Page is under construction" +#~ msgstr "Сторінка в розробці" From 7da2807dd5c7536cd399e2792746dd9f552bef0a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 23 Oct 2023 23:36:22 +0300 Subject: [PATCH 445/689] Complete return statement section --- .../uk/LC_MESSAGES/basics/functions.po | 130 +++++++++++++++--- src/basics/functions.txt | 67 ++++++++- 2 files changed, 178 insertions(+), 19 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index e72f80b5b..dbd22af0e 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-23 22:17+0300\n" -"PO-Revision-Date: 2023-10-23 22:18+0300\n" +"POT-Creation-Date: 2023-10-23 23:35+0300\n" +"PO-Revision-Date: 2023-10-23 23:36+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -532,12 +532,106 @@ msgstr "" "Він надає механізм, за допомогою якого функція може передавати дані назад " "тому, хто її викликає." -#: ../../src/basics/functions.txt:283 +#: ../../src/basics/functions.txt:280 +#, fuzzy +msgid "" +"The return statement can be used inside of a function or a method to send " +"the result back to the caller. It consists of the ``return`` Python keyword " +"and an optional return value." +msgstr "" +"Оператор return можна використовувати всередині функції або методу, щоб " +"відправити результат назад тому, хто його викликає. Він складається з " +"ключового слова return та необов'язкового значення, що повертається." + +#: ../../src/basics/functions.txt:284 +#, fuzzy +msgid "" +"The return value of a Python function can be any Python object (and you " +"should remember - everything in Python is an object)." +msgstr "" +"Значенням, що повертається функцією Python, може бути будь-який об'єкт " +"Python (і ви повинні пам'ятати - все в Python є об'єктом)." + +#: ../../src/basics/functions.txt:287 +#, fuzzy +msgid "" +"You can omit the return value and use bare ``return`` without a return " +"value. You can also omit the entire ``return`` statement. In both cases, the " +"return value will be ``None``. So, Python functions always have the return " +"value; in case it hasn't been specified - it's ``None``." +msgstr "" +"Ви можете опустити значення, що повертається, і використовувати просто " +"``return`` без значення, що повертається. Ви також можете опустити всю " +"інструкцію ``return``. В обох випадках значенням, що повертається, буде " +"``None``. Отже, функції Python завжди мають значення, що повертається, а " +"якщо його не вказано - це ``None``." + +#: ../../src/basics/functions.txt:292 +#, fuzzy +msgid "**Returning vs Printing**" +msgstr "**Повернення проти друку**" + +#: ../../src/basics/functions.txt:294 +#, fuzzy +msgid "" +"If you're working in an interactive session, then you might think that " +"printing a value and returning a value are equivalent. Consider the " +"following two functions:" +msgstr "" +"Якщо ви працюєте в інтерактивному сеансі, ви можете подумати, що виведення " +"значення і повернення значення еквівалентні. Розглянемо дві наступні функції:" + +#: ../../src/basics/functions.txt:310 +#, fuzzy +msgid "And their output:" +msgstr "Опис Результатів" + +#: ../../src/basics/functions.txt:319 +#, fuzzy +msgid "" +"Both functions seems to do the same thing. But only the second one function " +"actually returns a value, when the first one returns nothing (or **NoneType " +"object**)." +msgstr "" +"Здається, що обидві функції роблять одне й те саме. Але тільки друга функція " +"насправді повертає значення, тоді як перша не повертає нічого (або " +"**NoneType об'єкт**)." + +#: ../../src/basics/functions.txt:324 +#, fuzzy +msgid "Return multiple values" +msgstr "Значення за замовчуванням" + +#: ../../src/basics/functions.txt:326 +#, fuzzy +msgid "" +"You can use a return statement to return multiple values from a function. To " +"do that, you just need to supply several return values separated by commas. " +"The function will return a tuple of values." +msgstr "" +"Ви можете використовувати інструкцію return для повернення декількох значень " +"з функції. Для цього вам просто потрібно вказати декілька значень, що " +"повертаються, розділених комами. Функція поверне кортеж значень." + +#: ../../src/basics/functions.txt:342 +#, fuzzy +msgid "" +"The built-in ``divmod`` function is also an example of a function that " +"returns multiple values. The function takes two (non-complex) numbers as " +"arguments and returns two numbers, the quotient of the two input values and " +"the remainder of the division." +msgstr "" +"Вбудована функція ``divmod`` також є прикладом функції, яка повертає " +"декілька значень. Функція отримує два (нескладних) числа як аргументи і " +"повертає два числа - частку від ділення двох вхідних значень і залишок від " +"ділення." + +#: ../../src/basics/functions.txt:348 #, fuzzy msgid "Variable-length argument list" msgstr "Список аргументів змінної довжини" -#: ../../src/basics/functions.txt:285 +#: ../../src/basics/functions.txt:350 #, fuzzy msgid "" "In some cases, when you're defining a function, you may not know beforehand " @@ -546,7 +640,7 @@ msgstr "" "У деяких випадках, коли ви визначаєте функцію, ви можете не знати " "заздалегідь, скільки аргументів ви хочете, щоб вона приймала." -#: ../../src/basics/functions.txt:288 +#: ../../src/basics/functions.txt:353 #, fuzzy msgid "" "For example, a function that computes an average of several values may look " @@ -555,7 +649,7 @@ msgstr "" "Наприклад, функція, яка обчислює середнє арифметичне декількох значень, може " "виглядати приблизно так:" -#: ../../src/basics/functions.txt:296 +#: ../../src/basics/functions.txt:361 #, fuzzy msgid "" "However, as you're already seen, when positional arguments are used, the " @@ -565,12 +659,12 @@ msgstr "" "кількість переданих аргументів повинна відповідати кількості оголошених " "параметрів." -#: ../../src/basics/functions.txt:300 +#: ../../src/basics/functions.txt:365 #, fuzzy msgid "Argument tuple packing" msgstr "Пакування кортежів аргументів" -#: ../../src/basics/functions.txt:302 +#: ../../src/basics/functions.txt:367 #, fuzzy msgid "" "When a parameter name in a function definition is preceded by an asterisk " @@ -583,7 +677,7 @@ msgstr "" "функції упаковуються у кортеж, на який функція може посилатися за вказаним " "іменем параметра." -#: ../../src/basics/functions.txt:312 +#: ../../src/basics/functions.txt:377 #, fuzzy msgid "" "Any name can be used, but *args* is so commonly chosen that it's practically " @@ -592,12 +686,12 @@ msgstr "" "Можна використовувати будь-яке ім'я, але *args* є настільки поширеним, що " "стало практично стандартом." -#: ../../src/basics/functions.txt:316 +#: ../../src/basics/functions.txt:381 #, fuzzy msgid "Argument tuple unpacking" msgstr "Розпакування кортежу аргументів" -#: ../../src/basics/functions.txt:318 +#: ../../src/basics/functions.txt:383 #, fuzzy msgid "" "An analogous operation is available on the other side of the equation in a " @@ -609,7 +703,7 @@ msgstr "" "перед аргументом у виклику функції стоїть зірочка, це означає, що аргумент є " "кортежем, який слід **розпакувати** і передати у функцію як окремі значення." -#: ../../src/basics/functions.txt:334 +#: ../../src/basics/functions.txt:399 #, fuzzy msgid "" "Although this type of unpacking is called **tuple** unpacking, it doesn't " @@ -620,17 +714,17 @@ msgstr "" "не лише з кортежами. Зірочка може бути застосована до будь-якого ітератора у " "виклику функції." -#: ../../src/basics/functions.txt:349 +#: ../../src/basics/functions.txt:414 #, fuzzy msgid "You can even do tuple packing and unpacking at the same time." msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." -#: ../../src/basics/functions.txt:361 +#: ../../src/basics/functions.txt:426 #, fuzzy msgid "Argument dictionary packing" msgstr "Пакування словника аргументів" -#: ../../src/basics/functions.txt:363 +#: ../../src/basics/functions.txt:428 #, fuzzy msgid "" "Python has a similar operator, the double asterisk (\\*\\*), which can be " @@ -645,7 +739,7 @@ msgstr "" "що відповідні аргументи, які, як очікується, є аргументами ключових слів " "(пари ``ключ=значення``), мають бути упаковані у словник." -#: ../../src/basics/functions.txt:379 +#: ../../src/basics/functions.txt:444 #, fuzzy msgid "" "Again, any name can be used, but the peculiar *kwargs* (which is short for " @@ -654,12 +748,12 @@ msgstr "" "Знову ж таки, можна використовувати будь-яке ім'я, але особливе *kwargs* (що " "є скороченням від *ключове слово args*) є майже стандартним." -#: ../../src/basics/functions.txt:383 +#: ../../src/basics/functions.txt:448 #, fuzzy msgid "Argument dictionary unpacking" msgstr "Розпакування словника аргументів" -#: ../../src/basics/functions.txt:385 +#: ../../src/basics/functions.txt:450 #, fuzzy msgid "" "This is analogous to argument tuple unpacking. When the double asterisk " diff --git a/src/basics/functions.txt b/src/basics/functions.txt index f55b3f29b..49009b697 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -277,7 +277,72 @@ It serves two purposes: - It provides a mechanism by which the function can pass data back to the caller. -.. todo: complete the return statement section +The return statement can be used inside of a function or a method to send +the result back to the caller. It consists of the ``return`` Python keyword +and an optional return value. + +The return value of a Python function can be any Python object (and you should +remember - everything in Python is an object). + +You can omit the return value and use bare ``return`` without a return value. +You can also omit the entire ``return`` statement. In both cases, the return +value will be ``None``. So, Python functions always have the return value; in +case it hasn't been specified - it's ``None``. + +.. important:: **Returning vs Printing** + + If you're working in an interactive session, then you might think that + printing a value and returning a value are equivalent. + Consider the following two functions: + + .. code-block:: python + + from typing import List + + + def print_evens(numbers: List[int]) -> None: + print([number for number in numbers if not number % 2]) + + + def return_evens(numbers: List[int]) -> List[int]: + return [number for number in numbers if not number % 2] + + And their output: + + :: + + >>> print_evens([1, 2, 3, 4, 5, 6, 7, 8, 9]) + [2, 4, 6, 8] + >>> return_evens([1, 2, 3, 4, 5, 6, 7, 8, 9]) + [2, 4, 6, 8] + + Both functions seems to do the same thing. But only the second one + function actually returns a value, when the first one returns nothing + (or **NoneType object**). + +Return multiple values +---------------------- + +You can use a return statement to return multiple values from a function. +To do that, you just need to supply several return values separated by commas. +The function will return a tuple of values. + +.. code-block:: python + + import statistics as st + + + def describe(data): + return st.mean(data), st.median(data), st.mode(data) + + + sample = [8, 1, 9, 1, 4, 6, 1, 9, 8, 3] + mean, median, mode = describe(sample) + +The built-in ``divmod`` function is also an example of a function that returns +multiple values. The function takes two (non-complex) numbers as arguments and +returns two numbers, the quotient of the two input values and the remainder of +the division. Variable-length argument list ============================= From c432864446aa4fd2ea04f64ac705efa64317a6ed Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 00:16:03 +0300 Subject: [PATCH 446/689] Add lambda expression section --- .../uk/LC_MESSAGES/basics/functions.po | 96 +++++++++++++++++-- src/basics/functions.txt | 64 +++++++++++++ src/refs.bib | 7 ++ 3 files changed, 160 insertions(+), 7 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index dbd22af0e..bdec91a8a 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-23 23:35+0300\n" -"PO-Revision-Date: 2023-10-23 23:36+0300\n" +"POT-Creation-Date: 2023-10-24 00:16+0300\n" +"PO-Revision-Date: 2023-10-24 00:17+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -81,12 +81,12 @@ msgstr "" msgid "The usual syntax for defining a Python function is as follows:" msgstr "Звичайний синтаксис для визначення функції Python наступний:" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 #, fuzzy msgid "Component" msgstr "Компонент" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 #, fuzzy msgid "Meaning" msgstr "Значення" @@ -96,7 +96,7 @@ msgstr "Значення" msgid "``def``" msgstr "``def``" -#: ../../src/basics/functions.txt:38 +#: ../../src/basics/functions.txt:38 ../../src/basics/functions.txt:485 #, fuzzy msgid "The keyword that informs Python that a function is being defined" msgstr "Ключове слово, яке інформує Python про те, що функція визначається" @@ -111,12 +111,12 @@ msgstr "``<ім'я_функції>``" msgid "A valid Python identifier that names the function" msgstr "Правильний ідентифікатор Python, який називає функцію" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 #, fuzzy msgid "````" msgstr "Параметри" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 #, fuzzy msgid "" "An optional, comma-separated list of parameters that may be passed to the " @@ -766,5 +766,87 @@ msgstr "" "словником, який слід розпакувати, а отримані елементи передати у функцію як " "аргументи ключових слів." +#: ../../src/basics/functions.txt:468 +#, fuzzy +msgid "Lambda functions" +msgstr "Функції" + +#: ../../src/basics/functions.txt:470 +#, fuzzy +msgid "" +"Lambda expressions in Python and other programming languages have their " +"roots in lambda calculus, a model of computation invented by Alonzo Church. " +"Python is not inherently a functional language, but it adopted some " +"functional concepts early on. In January 1994, ``map()``, ``filter()``, " +"``reduce()``, and the lambda operator were added to the language." +msgstr "" +"Лямбда-вирази в Python та інших мовах програмування беруть свій початок у " +"лямбда-обчисленні - моделі обчислень, винайденій Алонзо Черчем. За своєю " +"суттю Python не є функціональною мовою, але вона рано перейняла деякі " +"функціональні концепції. У січні 1994 року до мови було додано ``map()``, " +"``filter()``, ``reduce()`` та лямбда-оператор." + +#: ../../src/basics/functions.txt:476 +#, fuzzy +msgid "General lambda function syntax is:" +msgstr "Загальний синтаксис лямбда-функції такий:" + +#: ../../src/basics/functions.txt:485 +#, fuzzy +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/basics/functions.txt:491 +#, fuzzy +msgid "````" +msgstr "Вираз Await" + +#: ../../src/basics/functions.txt:491 +#, fuzzy +msgid "A valid Python expression; return statement" +msgstr "Оператор повернення" + +#: ../../src/basics/functions.txt:502 +#, fuzzy +msgid "" +"The code sample above demonstrates the ``get_fullname`` Python function and " +"its lambda version. A lambda form presents syntactic distinctions from a " +"normal function. In particular, a lambda function has the following " +"characteristics:" +msgstr "" +"Наведений вище приклад коду демонструє функцію Python ``get_fullname`` та її " +"лямбда-версію. Лямбда-форма має синтаксичні відмінності від звичайної " +"функції. Зокрема, лямбда-функція має наступні характеристики:" + +#: ../../src/basics/functions.txt:506 +#, fuzzy +msgid "" +"It can only contain expressions and can’t include statements in its body." +msgstr "Він може містити лише вирази і не може включати в себе оператори." + +#: ../../src/basics/functions.txt:507 +#, fuzzy +msgid "It is written as a single line of execution." +msgstr "Він написаний у вигляді одного рядка виконання." + +#: ../../src/basics/functions.txt:508 +#, fuzzy +msgid "It does not support type annotations." +msgstr "Він не підтримує анотації типів." + +#: ../../src/basics/functions.txt:509 +#, fuzzy +msgid "" +"It can be immediately invoked (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." +msgstr "" +"Її можна негайно викликати (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." + +#: ../../src/basics/functions.txt:517 +#, fuzzy +msgid "Classic functional constructs" +msgstr "Класичні функціональні конструкції" + #~ msgid "Page is under construction" #~ msgstr "Сторінка в розробці" diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 49009b697..00b6c36fa 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -463,3 +463,67 @@ items passed to the function as keyword arguments. "job_title": "Software Engineer", } display_person(**person_data) + +Lambda functions +================ + +Lambda expressions in Python and other programming languages have their roots +in lambda calculus, a model of computation invented by Alonzo Church. +Python is not inherently a functional language, but it adopted some functional +concepts early on. In January 1994, ``map()``, ``filter()``, ``reduce()``, and +the lambda operator were added to the language. + +General lambda function syntax is: + +:: + + lambda []: + ++---------------------+-------------------------------------------------------+ +| Component | Meaning | ++=====================+=======================================================+ +| ``lambda`` | The keyword that informs Python that a function is | +| | being defined | ++---------------------+-------------------------------------------------------+ +| ```` | An optional, comma-separated list of parameters that | +| | may be passed to the function | ++---------------------+-------------------------------------------------------+ +| ```` | A valid Python expression; return statement | ++---------------------+-------------------------------------------------------+ + +.. code-block:: python + + def get_fullname(first_name: str, last_name: str): + return f"{first_name.title()} {last_name.title()}" + + + lambda first_name, last_name: f"{first_name.title()} {last_name.title()}" + +The code sample above demonstrates the ``get_fullname`` Python function and its +lambda version. A lambda form presents syntactic distinctions from a normal +function. In particular, a lambda function has the following characteristics: + +- It can only contain expressions and can’t include statements in its body. +- It is written as a single line of execution. +- It does not support type annotations. +- It can be immediately invoked + (:abbr:`IIFE (Immediately Invoked Function Execution)`). + + .. code-block:: python + + (lambda number: "odd" if number % 2 else "even")(42) + +.. rubric:: Classic functional constructs + +.. code-block:: python + + >>> # in-place data modifications + >>> list(map(lambda x: x.upper(), ["foo", "bar", "foobar"])) + ["FOO", "BAR", "FOOBAR"] + >>> # filtering values + >>> list(filter(lambda x: not x % 2, [1, 2, 3, 4, 5, 6, 7])) + [2, 4, 6] + >>> # reduce values + >>> from functools import reduce + >>> reduce(lambda acc, x: acc ^ x, [1, 2, 3, 1234, 3, 2, 1]) + 1234 diff --git a/src/refs.bib b/src/refs.bib index 1dc49ad96..d56df8e40 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -177,3 +177,10 @@ @misc{realpython:user-func date = {2020.3.9}, url = {https://realpython.com/defining-your-own-python-function/}, } + +@misc{realpython:lambda-func, + title = {How to use Python lambda functions}, + author = {Andre Burgaud}, + date = {2019.6.19}, + url = {https://realpython.com/python-lambda/}, +} From a26a23e22133225ad8dcf1dd9b635014606396d5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 00:36:44 +0300 Subject: [PATCH 447/689] Check functions document translation --- .../uk/LC_MESSAGES/basics/functions.po | 243 +++--------------- 1 file changed, 38 insertions(+), 205 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index bdec91a8a..57b5ac19e 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -4,15 +4,15 @@ # OLEKSANDR YEROMIN , 2023. msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Project-Id-Version: Python Training Course 2023.10.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-24 00:16+0300\n" -"PO-Revision-Date: 2023-10-24 00:17+0300\n" +"POT-Creation-Date: 2023-10-23 23:35+0300\n" +"PO-Revision-Date: 2023-10-24 00:36+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -36,30 +36,26 @@ msgid "Functions" msgstr "Функції" #: ../../src/basics/functions.txt:10 -#, fuzzy msgid "" "You may be familiar with the mathematical concept of a **function**. It is a " "relationship or mapping between one or more inputs and a set of outputs." msgstr "" -"Можливо, ви знайомі з математичним поняттям **функція**. Це відношення або " -"відображення між одним або декількома входами та набором виходів." +"Можливо, ви знайомі з математичним поняттям **функція**. Це відношення між " +"одним або декількома вхідними параметрами та набором результатів." #: ../../src/basics/functions.txt:13 -#, fuzzy msgid "z = f(x, y)" msgstr "z = f(x, y)" #: ../../src/basics/functions.txt:17 -#, fuzzy msgid "" "Here ``f`` is a function that operates on the inputs ``x`` and ``y``, and " "its output is bind to ``z``." msgstr "" -"Тут ``f`` - це функція, яка оперує входами ``x`` та ``y``, а її вихід " -"прив'язаний до ``z``." +"Тут ``f`` - це функція, яка оперує параметрами ``x`` та ``y``, а її " +"результат прив'язаний до ``z``." #: ../../src/basics/functions.txt:20 -#, fuzzy msgid "" "In programming a **function** is a self-contained block of code that " "encapsulate a specific task or related group of tasks." @@ -68,7 +64,6 @@ msgstr "" "задачу або пов'язану групу задач." #: ../../src/basics/functions.txt:23 -#, fuzzy msgid "" "You may be familiar with some built-in functions like ``max``, ``min``, " "``len`` etc." @@ -77,47 +72,38 @@ msgstr "" "``min``, ``len`` тощо." #: ../../src/basics/functions.txt:28 -#, fuzzy msgid "The usual syntax for defining a Python function is as follows:" msgstr "Звичайний синтаксис для визначення функції Python наступний:" -#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 -#, fuzzy +#: ../../src/basics/functions.txt:36 msgid "Component" msgstr "Компонент" -#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 -#, fuzzy +#: ../../src/basics/functions.txt:36 msgid "Meaning" msgstr "Значення" #: ../../src/basics/functions.txt:38 -#, fuzzy msgid "``def``" msgstr "``def``" -#: ../../src/basics/functions.txt:38 ../../src/basics/functions.txt:485 -#, fuzzy +#: ../../src/basics/functions.txt:38 msgid "The keyword that informs Python that a function is being defined" -msgstr "Ключове слово, яке інформує Python про те, що функція визначається" +msgstr "Ключове слово, яке інформує Python про те, що визначається функція" #: ../../src/basics/functions.txt:41 -#, fuzzy msgid "````" -msgstr "``<ім'я_функції>``" +msgstr "````" #: ../../src/basics/functions.txt:41 -#, fuzzy msgid "A valid Python identifier that names the function" -msgstr "Правильний ідентифікатор Python, який називає функцію" +msgstr "Валідний ідентифікатор Python, який називає функцію" -#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 -#, fuzzy +#: ../../src/basics/functions.txt:43 msgid "````" -msgstr "Параметри" +msgstr "````" -#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 -#, fuzzy +#: ../../src/basics/functions.txt:43 msgid "" "An optional, comma-separated list of parameters that may be passed to the " "function" @@ -126,22 +112,18 @@ msgstr "" "функцію" #: ../../src/basics/functions.txt:46 -#, fuzzy msgid "````" -msgstr "''<висловлювання>''" +msgstr "````" #: ../../src/basics/functions.txt:46 -#, fuzzy msgid "A block of valid Python statements; **body** of the function" msgstr "Блок допустимих операторів Python; **тіло** функції" #: ../../src/basics/functions.txt:50 -#, fuzzy msgid "The syntax for calling a Python function is as follows:" msgstr "Синтаксис виклику функції Python наступний:" #: ../../src/basics/functions.txt:56 -#, fuzzy msgid "" "The ```` are the values passed into the function. They correspond " "to the ```` in the function definition. You can define a " @@ -156,22 +138,18 @@ msgstr "" "дужки, навіть якщо вони порожні." #: ../../src/basics/functions.txt:63 -#, fuzzy msgid "Argument passing" -msgstr "Передача аргументу" +msgstr "Передача аргументів" #: ../../src/basics/functions.txt:66 -#, fuzzy msgid "More often, you want to **pass data into a function**." msgstr "Найчастіше вам потрібно **передати дані у функцію**." #: ../../src/basics/functions.txt:69 -#, fuzzy msgid "Positional arguments" msgstr "Позиційні аргументи" #: ../../src/basics/functions.txt:73 -#, fuzzy msgid "" "Because of the way they're defined and used, positional arguments are also " "called *required arguments*." @@ -180,7 +158,6 @@ msgstr "" "називають *обов'язковими аргументами*." #: ../../src/basics/functions.txt:76 -#, fuzzy msgid "" "The most straightforward way to pass arguments to a function is with " "**positional arguments**. In the function definition, you specify a comma-" @@ -193,14 +170,12 @@ msgstr "" "викликається, ви вказуєте відповідний список аргументів." #: ../../src/basics/functions.txt:82 -#, fuzzy msgid "" "The parameters behave like **variables** that are defined locally to the " "function." msgstr "Параметри поводяться як **змінні**, визначені локально у функції." #: ../../src/basics/functions.txt:85 -#, fuzzy msgid "" "Although positional arguments are the most straightforward way to pass data " "to a function, they also afford the least flexibility. For starters, the " @@ -212,7 +187,6 @@ msgstr "" "аргументів у виклику повинен відповідати порядку параметрів у визначенні." #: ../../src/basics/functions.txt:90 -#, fuzzy msgid "" "There's nothing to stop you from specifying positional arguments out of " "order. The function even may still run, but it's very unlikely to produce " @@ -222,7 +196,6 @@ msgstr "" "Функція навіть може запуститися, але навряд чи видасть правильні результати." #: ../../src/basics/functions.txt:96 -#, fuzzy msgid "" "It's responsibility of the programmer who defines the function to document " "what the appropriate arguments should be, and it's the responsibility of the " @@ -233,7 +206,6 @@ msgstr "" "інформацію і дотримуватися її." #: ../../src/basics/functions.txt:100 -#, fuzzy msgid "" "With positional arguments, the arguments in the call and the parameters in " "the definition must agree not only in order, but in number as well." @@ -242,12 +214,10 @@ msgstr "" "повинні узгоджуватися не тільки за порядком, але й за кількістю." #: ../../src/basics/functions.txt:104 -#, fuzzy msgid "Keyword arguments" msgstr "Аргументи за ключовими словами" #: ../../src/basics/functions.txt:106 -#, fuzzy msgid "" "When calling a function, you can specify arguments in the form " "``=``. In that case, each ```` must match a " @@ -260,7 +230,6 @@ msgstr "" "яке не відповідає жодному з цих оголошених параметрів, генерує виключення." #: ../../src/basics/functions.txt:111 -#, fuzzy msgid "" "Using keyword arguments lifts the restriction on arguments order. Each " "keyword argument explicitly designates a specific parameter by name, so you " @@ -273,7 +242,6 @@ msgstr "" "знатиме, який аргумент йде з яким параметром." #: ../../src/basics/functions.txt:116 -#, fuzzy msgid "" "Like with positional arguments, though, the number of arguments and " "parameters must still match." @@ -282,7 +250,6 @@ msgstr "" "має збігатися." #: ../../src/basics/functions.txt:119 -#, fuzzy msgid "" "You can call a function using both positional and keyword arguments. Once " "you've specified a keyword argument, there can't be any positional arguments " @@ -293,12 +260,10 @@ msgstr "" "може бути жодних позиційних аргументів." #: ../../src/basics/functions.txt:124 -#, fuzzy msgid "Default values" msgstr "Значення за замовчуванням" #: ../../src/basics/functions.txt:126 -#, fuzzy msgid "" "If a parameter specified in the function definition has the form of " "``==``, then ```` becomes a default value for that " @@ -311,12 +276,10 @@ msgstr "" "замовчуванням або необов'язковими параметрами**." #: ../../src/basics/functions.txt:132 -#, fuzzy msgid "Mutable default parameter values" msgstr "Змінювані значення параметрів за замовчуванням" #: ../../src/basics/functions.txt:133 -#, fuzzy msgid "" "Things can get weird if you specify a default parameter value that is a " "mutable object." @@ -325,7 +288,6 @@ msgstr "" "замовчуванням, який є змінюваним об'єктом." #: ../../src/basics/functions.txt:151 -#, fuzzy msgid "" "In Python default parameter values are **defined only once** when the " "function is defined. The default value isn't re-defined each time the " @@ -340,12 +302,10 @@ msgstr "" "``container``, оператор ``.append`` виконується над тим самим списком." #: ../../src/basics/functions.txt:158 -#, fuzzy msgid "Mutable and immutable arguments" msgstr "Змінні та незмінні аргументи" #: ../../src/basics/functions.txt:162 -#, fuzzy msgid "" "Roughly, you may consider immutable object as passed-by-value, and mutable " "objects as passed-by-reference. However, that's not actual true." @@ -354,7 +314,6 @@ msgstr "" "змінювані об'єкти - переданим посиланням. Однак, це не зовсім так." #: ../../src/basics/functions.txt:166 -#, fuzzy msgid "" "In programming language design, there are two common paradigms for passing " "an argument to a function:" @@ -363,34 +322,30 @@ msgstr "" "функцію:" #: ../../src/basics/functions.txt:169 -#, fuzzy msgid "" "**pass-by-value** means a copy of the argument is passed to the function." msgstr "" -"**передати за значенням** означає, що у функцію передається копія аргументу." +"**передати-за-значенням** означає, що у функцію передається копія аргументу." #: ../../src/basics/functions.txt:170 -#, fuzzy msgid "" "**pass-by-reference** means a reference to the argument is passed to the " "function." msgstr "" -"**передача за посиланням** означає, що у функцію передається посилання на " +"**передати-за-посиланням** означає, що у функцію передається посилання на " "аргумент." #: ../../src/basics/functions.txt:173 -#, fuzzy msgid "" "Are parameters in Python pass-by-value or pass-by-reference? They're " "neither, exactly. That's because a reference doesn't mean quite the same " "thing in Python as it does in C-like languages." msgstr "" -"Чи є параметри в Python передачею за значенням або за посиланням? Вони не є " +"Чи є параметри в Python переданими за значенням або за посиланням? Вони не є " "ні тими, ні іншими. Це тому, що посилання в Python означає не зовсім те " "саме, що в C-подібних мовах." #: ../../src/basics/functions.txt:177 -#, fuzzy msgid "" "Recall that in Python, every piece of data is an **object**. A reference " "points to an object, not a specific memory location." @@ -399,33 +354,28 @@ msgstr "" "на об'єкт, а не на конкретну ділянку пам'яті." #: ../../src/basics/functions.txt:180 -#, fuzzy msgid "Take a look on the code below:" msgstr "Погляньте на код нижче:" #: ../../src/basics/functions.txt:188 -#, fuzzy msgid "These assignment statements have the following meaning:" msgstr "Ці оператори присвоювання мають наступне значення:" #: ../../src/basics/functions.txt:190 -#, fuzzy msgid "**Line 1** cause ``value`` to point to an object whose value is ``24``." msgstr "" "**Рядок 1** призводить до того, що ``value`` вказує на об'єкт, значенням " "якого є ``24``." #: ../../src/basics/functions.txt:191 -#, fuzzy msgid "" "**Line 2** reassign ``value`` as a new reference to a different object whose " "value is ``42``." msgstr "" -"**Рядок 2** перепризначити ``value`` як нове посилання на інший об'єкт, " +"**Рядок 2** перепризначає ``value`` як нове посилання на інший об'єкт, " "значенням якого є ``42``." #: ../../src/basics/functions.txt:194 -#, fuzzy msgid "" "In Python, when you pass an argument to a function, a similar *rebinding* " "occurs." @@ -434,7 +384,6 @@ msgstr "" "*переприв'язування*." #: ../../src/basics/functions.txt:207 -#, fuzzy msgid "" "In the main program, the statement ``x = 5`` on line 5 creates a reference " "named ``x`` bound to an object whose value is ``5``. ``reassign`` is then " @@ -458,7 +407,6 @@ msgstr "" "вказуватиме на об'єкт ``5``, як це було до виклику функції." #: ../../src/basics/functions.txt:218 -#, fuzzy msgid "" "You can confirm all this using ``id()``. Here's a slightly augmented version " "of the code above:" @@ -467,12 +415,10 @@ msgstr "" "версія коду вище:" #: ../../src/basics/functions.txt:235 -#, fuzzy msgid "The outputs will look like:" msgstr "Результати будуть виглядати так:" #: ../../src/basics/functions.txt:246 -#, fuzzy msgid "" "Python's argument-passing mechanism has been called **pass-by-assignment**. " "You may also see terms pass-by-object, pass-by-object-reference, or pass-by-" @@ -480,14 +426,13 @@ msgid "" "entry in Python, and assignment is also the process of binding a name to an " "object." msgstr "" -"Механізм передачі аргументів у Python називається **передача за " -"присвоєнням**. Ви також можете зустріти терміни pass-by-object, pass-by-" -"object-reference або pass-by-sharing. Це пов'язано з тим, що імена " -"параметрів прив'язуються до об'єктів під час виклику функції у Python, а " -"присвоювання - це також процес прив'язки імені до об'єкта." +"Механізм передачі аргументів у Python називається **передача-за-" +"присвоєнням** (**pass-by-assignment**). Ви також можете зустріти терміни " +"pass-by-object, pass-by-object-reference або pass-by-sharing. Це пов'язано з " +"тим, що імена параметрів прив'язуються до об'єктів під час виклику функції у " +"Python, а присвоювання - це також процес прив'язки імені до об'єкта." #: ../../src/basics/functions.txt:252 -#, fuzzy msgid "" "The key takeaway here is that Python function can't change the value of an " "argument by reassigning the corresponding parameter to something else." @@ -496,7 +441,6 @@ msgstr "" "аргументу, перепризначивши відповідний параметр на щось інше." #: ../../src/basics/functions.txt:255 -#, fuzzy msgid "" "However, functions can use references to make modifications inside of a " "mutable objects." @@ -505,17 +449,14 @@ msgstr "" "змінюваних об'єктів." #: ../../src/basics/functions.txt:271 -#, fuzzy msgid "The return statement" msgstr "Оператор повернення" #: ../../src/basics/functions.txt:273 -#, fuzzy msgid "It serves two purposes:" msgstr "Він служить двом цілям:" #: ../../src/basics/functions.txt:275 -#, fuzzy msgid "" "It immediately terminates the function and passes execution control back to " "the caller." @@ -524,7 +465,6 @@ msgstr "" "її викликав." #: ../../src/basics/functions.txt:277 -#, fuzzy msgid "" "It provides a mechanism by which the function can pass data back to the " "caller." @@ -533,7 +473,6 @@ msgstr "" "тому, хто її викликає." #: ../../src/basics/functions.txt:280 -#, fuzzy msgid "" "The return statement can be used inside of a function or a method to send " "the result back to the caller. It consists of the ``return`` Python keyword " @@ -541,19 +480,17 @@ msgid "" msgstr "" "Оператор return можна використовувати всередині функції або методу, щоб " "відправити результат назад тому, хто його викликає. Він складається з " -"ключового слова return та необов'язкового значення, що повертається." +"ключового слова ``return`` та необов'язкового значення, що повертається." #: ../../src/basics/functions.txt:284 -#, fuzzy msgid "" "The return value of a Python function can be any Python object (and you " "should remember - everything in Python is an object)." msgstr "" -"Значенням, що повертається функцією Python, може бути будь-який об'єкт " -"Python (і ви повинні пам'ятати - все в Python є об'єктом)." +"Значенням, що повертається функцією, може бути будь-який об'єкт Python (і ви " +"повинні пам'ятати - все в Python є об'єктом)." #: ../../src/basics/functions.txt:287 -#, fuzzy msgid "" "You can omit the return value and use bare ``return`` without a return " "value. You can also omit the entire ``return`` statement. In both cases, the " @@ -567,12 +504,10 @@ msgstr "" "якщо його не вказано - це ``None``." #: ../../src/basics/functions.txt:292 -#, fuzzy msgid "**Returning vs Printing**" -msgstr "**Повернення проти друку**" +msgstr "**return проти print**" #: ../../src/basics/functions.txt:294 -#, fuzzy msgid "" "If you're working in an interactive session, then you might think that " "printing a value and returning a value are equivalent. Consider the " @@ -582,12 +517,10 @@ msgstr "" "значення і повернення значення еквівалентні. Розглянемо дві наступні функції:" #: ../../src/basics/functions.txt:310 -#, fuzzy msgid "And their output:" -msgstr "Опис Результатів" +msgstr "Та результати їх викликів:" #: ../../src/basics/functions.txt:319 -#, fuzzy msgid "" "Both functions seems to do the same thing. But only the second one function " "actually returns a value, when the first one returns nothing (or **NoneType " @@ -598,12 +531,10 @@ msgstr "" "**NoneType об'єкт**)." #: ../../src/basics/functions.txt:324 -#, fuzzy msgid "Return multiple values" -msgstr "Значення за замовчуванням" +msgstr "Повернення декількох значень" #: ../../src/basics/functions.txt:326 -#, fuzzy msgid "" "You can use a return statement to return multiple values from a function. To " "do that, you just need to supply several return values separated by commas. " @@ -611,10 +542,9 @@ msgid "" msgstr "" "Ви можете використовувати інструкцію return для повернення декількох значень " "з функції. Для цього вам просто потрібно вказати декілька значень, що " -"повертаються, розділених комами. Функція поверне кортеж значень." +"повертаються, розділених комами. Функція поверне їх як кортеж." #: ../../src/basics/functions.txt:342 -#, fuzzy msgid "" "The built-in ``divmod`` function is also an example of a function that " "returns multiple values. The function takes two (non-complex) numbers as " @@ -627,12 +557,10 @@ msgstr "" "ділення." #: ../../src/basics/functions.txt:348 -#, fuzzy msgid "Variable-length argument list" msgstr "Список аргументів змінної довжини" #: ../../src/basics/functions.txt:350 -#, fuzzy msgid "" "In some cases, when you're defining a function, you may not know beforehand " "how many arguments you'll want it to take." @@ -641,7 +569,6 @@ msgstr "" "заздалегідь, скільки аргументів ви хочете, щоб вона приймала." #: ../../src/basics/functions.txt:353 -#, fuzzy msgid "" "For example, a function that computes an average of several values may look " "something like this:" @@ -650,7 +577,6 @@ msgstr "" "виглядати приблизно так:" #: ../../src/basics/functions.txt:361 -#, fuzzy msgid "" "However, as you're already seen, when positional arguments are used, the " "number of arguments passed must match the number of parameters declared." @@ -665,7 +591,6 @@ msgid "Argument tuple packing" msgstr "Пакування кортежів аргументів" #: ../../src/basics/functions.txt:367 -#, fuzzy msgid "" "When a parameter name in a function definition is preceded by an asterisk " "(\\*), it indicates **argument tuple packing**. Any corresponding arguments " @@ -678,7 +603,6 @@ msgstr "" "іменем параметра." #: ../../src/basics/functions.txt:377 -#, fuzzy msgid "" "Any name can be used, but *args* is so commonly chosen that it's practically " "a standard." @@ -692,7 +616,6 @@ msgid "Argument tuple unpacking" msgstr "Розпакування кортежу аргументів" #: ../../src/basics/functions.txt:383 -#, fuzzy msgid "" "An analogous operation is available on the other side of the equation in a " "function call. When an argument in a function call is preceded by an " @@ -704,18 +627,16 @@ msgstr "" "кортежем, який слід **розпакувати** і передати у функцію як окремі значення." #: ../../src/basics/functions.txt:399 -#, fuzzy msgid "" "Although this type of unpacking is called **tuple** unpacking, it doesn't " "only work with tuples. The asterisk can be applied to any iterable in a " "function call." msgstr "" "Хоча цей тип розпакування називається **розпакуванням кортежів**, він працює " -"не лише з кортежами. Зірочка може бути застосована до будь-якого ітератора у " -"виклику функції." +"не лише з кортежами. Зірочка може бути застосована до будь-якого ітеруємого " +"об'єкта у виклику функції." #: ../../src/basics/functions.txt:414 -#, fuzzy msgid "You can even do tuple packing and unpacking at the same time." msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." @@ -725,7 +646,6 @@ msgid "Argument dictionary packing" msgstr "Пакування словника аргументів" #: ../../src/basics/functions.txt:428 -#, fuzzy msgid "" "Python has a similar operator, the double asterisk (\\*\\*), which can be " "used with function parameters to specify **dictionary packing**. Preceding " @@ -740,13 +660,12 @@ msgstr "" "(пари ``ключ=значення``), мають бути упаковані у словник." #: ../../src/basics/functions.txt:444 -#, fuzzy msgid "" "Again, any name can be used, but the peculiar *kwargs* (which is short for " "*keyword args*) is nearly standard." msgstr "" "Знову ж таки, можна використовувати будь-яке ім'я, але особливе *kwargs* (що " -"є скороченням від *ключове слово args*) є майже стандартним." +"є скороченням від *keyword args*) є майже стандартним." #: ../../src/basics/functions.txt:448 #, fuzzy @@ -754,7 +673,6 @@ msgid "Argument dictionary unpacking" msgstr "Розпакування словника аргументів" #: ../../src/basics/functions.txt:450 -#, fuzzy msgid "" "This is analogous to argument tuple unpacking. When the double asterisk " "precedes an argument in a function call, it specifies that the argument is a " @@ -765,88 +683,3 @@ msgstr "" "перед аргументом у виклику функції, вона вказує на те, що аргумент є " "словником, який слід розпакувати, а отримані елементи передати у функцію як " "аргументи ключових слів." - -#: ../../src/basics/functions.txt:468 -#, fuzzy -msgid "Lambda functions" -msgstr "Функції" - -#: ../../src/basics/functions.txt:470 -#, fuzzy -msgid "" -"Lambda expressions in Python and other programming languages have their " -"roots in lambda calculus, a model of computation invented by Alonzo Church. " -"Python is not inherently a functional language, but it adopted some " -"functional concepts early on. In January 1994, ``map()``, ``filter()``, " -"``reduce()``, and the lambda operator were added to the language." -msgstr "" -"Лямбда-вирази в Python та інших мовах програмування беруть свій початок у " -"лямбда-обчисленні - моделі обчислень, винайденій Алонзо Черчем. За своєю " -"суттю Python не є функціональною мовою, але вона рано перейняла деякі " -"функціональні концепції. У січні 1994 року до мови було додано ``map()``, " -"``filter()``, ``reduce()`` та лямбда-оператор." - -#: ../../src/basics/functions.txt:476 -#, fuzzy -msgid "General lambda function syntax is:" -msgstr "Загальний синтаксис лямбда-функції такий:" - -#: ../../src/basics/functions.txt:485 -#, fuzzy -msgid "``lambda``" -msgstr "``lambda``" - -#: ../../src/basics/functions.txt:491 -#, fuzzy -msgid "````" -msgstr "Вираз Await" - -#: ../../src/basics/functions.txt:491 -#, fuzzy -msgid "A valid Python expression; return statement" -msgstr "Оператор повернення" - -#: ../../src/basics/functions.txt:502 -#, fuzzy -msgid "" -"The code sample above demonstrates the ``get_fullname`` Python function and " -"its lambda version. A lambda form presents syntactic distinctions from a " -"normal function. In particular, a lambda function has the following " -"characteristics:" -msgstr "" -"Наведений вище приклад коду демонструє функцію Python ``get_fullname`` та її " -"лямбда-версію. Лямбда-форма має синтаксичні відмінності від звичайної " -"функції. Зокрема, лямбда-функція має наступні характеристики:" - -#: ../../src/basics/functions.txt:506 -#, fuzzy -msgid "" -"It can only contain expressions and can’t include statements in its body." -msgstr "Він може містити лише вирази і не може включати в себе оператори." - -#: ../../src/basics/functions.txt:507 -#, fuzzy -msgid "It is written as a single line of execution." -msgstr "Він написаний у вигляді одного рядка виконання." - -#: ../../src/basics/functions.txt:508 -#, fuzzy -msgid "It does not support type annotations." -msgstr "Він не підтримує анотації типів." - -#: ../../src/basics/functions.txt:509 -#, fuzzy -msgid "" -"It can be immediately invoked (:abbr:`IIFE (Immediately Invoked Function " -"Execution)`)." -msgstr "" -"Її можна негайно викликати (:abbr:`IIFE (Immediately Invoked Function " -"Execution)`)." - -#: ../../src/basics/functions.txt:517 -#, fuzzy -msgid "Classic functional constructs" -msgstr "Класичні функціональні конструкції" - -#~ msgid "Page is under construction" -#~ msgstr "Сторінка в розробці" From 9db9951214c636b61366bfffe3791e1eca773619 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 02:22:11 +0300 Subject: [PATCH 448/689] Update functions document translation --- .../uk/LC_MESSAGES/basics/functions.po | 96 ++++++++++++++++--- 1 file changed, 81 insertions(+), 15 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/functions.po b/src/_locales/uk/LC_MESSAGES/basics/functions.po index 57b5ac19e..56f5900e6 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/functions.po +++ b/src/_locales/uk/LC_MESSAGES/basics/functions.po @@ -6,13 +6,13 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.10.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-23 23:35+0300\n" -"PO-Revision-Date: 2023-10-24 00:36+0300\n" +"POT-Creation-Date: 2023-10-24 02:19+0300\n" +"PO-Revision-Date: 2023-10-24 02:21+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -75,11 +75,11 @@ msgstr "" msgid "The usual syntax for defining a Python function is as follows:" msgstr "Звичайний синтаксис для визначення функції Python наступний:" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 msgid "Component" msgstr "Компонент" -#: ../../src/basics/functions.txt:36 +#: ../../src/basics/functions.txt:36 ../../src/basics/functions.txt:483 msgid "Meaning" msgstr "Значення" @@ -87,7 +87,7 @@ msgstr "Значення" msgid "``def``" msgstr "``def``" -#: ../../src/basics/functions.txt:38 +#: ../../src/basics/functions.txt:38 ../../src/basics/functions.txt:485 msgid "The keyword that informs Python that a function is being defined" msgstr "Ключове слово, яке інформує Python про те, що визначається функція" @@ -99,11 +99,11 @@ msgstr "````" msgid "A valid Python identifier that names the function" msgstr "Валідний ідентифікатор Python, який називає функцію" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 msgid "````" msgstr "````" -#: ../../src/basics/functions.txt:43 +#: ../../src/basics/functions.txt:43 ../../src/basics/functions.txt:488 msgid "" "An optional, comma-separated list of parameters that may be passed to the " "function" @@ -586,9 +586,8 @@ msgstr "" "параметрів." #: ../../src/basics/functions.txt:365 -#, fuzzy msgid "Argument tuple packing" -msgstr "Пакування кортежів аргументів" +msgstr "Пакування аргументів до кортежа" #: ../../src/basics/functions.txt:367 msgid "" @@ -611,7 +610,6 @@ msgstr "" "стало практично стандартом." #: ../../src/basics/functions.txt:381 -#, fuzzy msgid "Argument tuple unpacking" msgstr "Розпакування кортежу аргументів" @@ -641,9 +639,8 @@ msgid "You can even do tuple packing and unpacking at the same time." msgstr "Ви навіть можете одночасно пакувати та розпаковувати кортежі." #: ../../src/basics/functions.txt:426 -#, fuzzy msgid "Argument dictionary packing" -msgstr "Пакування словника аргументів" +msgstr "Пакування аргументів до словника" #: ../../src/basics/functions.txt:428 msgid "" @@ -668,9 +665,8 @@ msgstr "" "є скороченням від *keyword args*) є майже стандартним." #: ../../src/basics/functions.txt:448 -#, fuzzy msgid "Argument dictionary unpacking" -msgstr "Розпакування словника аргументів" +msgstr "Розапакування аргументів зі словника" #: ../../src/basics/functions.txt:450 msgid "" @@ -683,3 +679,73 @@ msgstr "" "перед аргументом у виклику функції, вона вказує на те, що аргумент є " "словником, який слід розпакувати, а отримані елементи передати у функцію як " "аргументи ключових слів." + +#: ../../src/basics/functions.txt:468 +msgid "Lambda functions" +msgstr "Лямбда функції" + +#: ../../src/basics/functions.txt:470 +msgid "" +"Lambda expressions in Python and other programming languages have their " +"roots in lambda calculus, a model of computation invented by Alonzo Church. " +"Python is not inherently a functional language, but it adopted some " +"functional concepts early on. In January 1994, ``map()``, ``filter()``, " +"``reduce()``, and the lambda operator were added to the language." +msgstr "" +"Лямбда-вирази в Python та інших мовах програмування беруть свій початок у " +"лямбда-обчисленні - моделі обчислень, винайденій Алонзо Черчем. За своєю " +"суттю Python не є функціональною мовою, але вона рано перейняла деякі " +"функціональні концепції. У січні 1994 року до мови було додано ``map()``, " +"``filter()``, ``reduce()`` та лямбда-оператор." + +#: ../../src/basics/functions.txt:476 +msgid "General lambda function syntax is:" +msgstr "Загальний синтаксис лямбда-функції такий:" + +#: ../../src/basics/functions.txt:485 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/basics/functions.txt:491 +msgid "````" +msgstr "````" + +#: ../../src/basics/functions.txt:491 +msgid "A valid Python expression; return statement" +msgstr "Валідний вираз Python; оператор повернення" + +#: ../../src/basics/functions.txt:502 +msgid "" +"The code sample above demonstrates the ``get_fullname`` Python function and " +"its lambda version. A lambda form presents syntactic distinctions from a " +"normal function. In particular, a lambda function has the following " +"characteristics:" +msgstr "" +"Наведений вище приклад коду демонструє функцію Python ``get_fullname`` та її " +"лямбда-версію. Лямбда-форма має синтаксичні відмінності від звичайної " +"функції. Зокрема, лямбда-функція має наступні характеристики:" + +#: ../../src/basics/functions.txt:506 +msgid "" +"It can only contain expressions and can’t include statements in its body." +msgstr "Він може містити лише вирази і не може включати в себе оператори." + +#: ../../src/basics/functions.txt:507 +msgid "It is written as a single line of execution." +msgstr "Він написаний у вигляді одного рядка виконання." + +#: ../../src/basics/functions.txt:508 +msgid "It does not support type annotations." +msgstr "Він не підтримує анотації типів." + +#: ../../src/basics/functions.txt:509 +msgid "" +"It can be immediately invoked (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." +msgstr "" +"Її можна негайно викликати (:abbr:`IIFE (Immediately Invoked Function " +"Execution)`)." + +#: ../../src/basics/functions.txt:517 +msgid "Classic functional constructs" +msgstr "Класичні функціональні конструкції" From 8b6642ba59a3f8df8b53c15a7d7ccd26219d662d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 03:41:37 +0300 Subject: [PATCH 449/689] Clean up todos --- src/basics/functions.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/basics/functions.txt b/src/basics/functions.txt index 00b6c36fa..1f3f1d186 100644 --- a/src/basics/functions.txt +++ b/src/basics/functions.txt @@ -23,8 +23,6 @@ encapsulate a specific task or related group of tasks. You may be familiar with some built-in functions like ``max``, ``min``, ``len`` etc. -.. todo: function definition - The usual syntax for defining a Python function is as follows: :: @@ -61,7 +59,6 @@ even if they're empty. Argument passing ================ -.. todo: function arguments (positional and key-word) More often, you want to **pass data into a function**. From bdbfeff73197747fbb4886de27e8dfeacd82beea Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 17 Oct 2023 23:17:33 +0300 Subject: [PATCH 450/689] Add autotranslations (DeepL) for basics block --- .../uk/LC_MESSAGES/basics/bool_logic.po | 272 ++++++++++------ .../uk/LC_MESSAGES/basics/decorators.po | 198 +++++++----- .../uk/LC_MESSAGES/basics/stdtypes.po | 302 +++++++++++++----- .../uk/LC_MESSAGES/basics/variables.po | 74 +++-- 4 files changed, 568 insertions(+), 278 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po index 87a1dff07..d26d3cdc1 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po +++ b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"PO-Revision-Date: 2023-10-17 23:16+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,41 +20,49 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/bool_logic.txt:-1 +#, fuzzy msgid "this document covers usage of logic and comparison operators in Python" msgstr "" -"цей документ охоплює використання логіки та операторів порівняння в Python" +"у цьому документі розглядається використання логічних операторів та " +"операторів порівняння у Python" #: ../../src/basics/bool_logic.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/bool_logic.txt:-1 +#, fuzzy msgid "python, boolean, logic, comparison, operator" msgstr "python, boolean, logic, comparison, operator" #: ../../src/basics/bool_logic.txt:14 +#, fuzzy msgid "Boolean Logic" msgstr "Булева Логіка" #: ../../src/basics/bool_logic.txt:20 +#, fuzzy msgid "" "`George Boole`_ put together what is now known as `Boolean algebra`_, which " "relies on **true** and **false** values and define a set of boolean " "operations: **not**, **and**, and **or**." msgstr "" -"`George Boole`_ об'єднав те, що тепер відомо як `булева алгебра`_, яка " -"спирається на значення **true** і **false** і визначає набір логічних " -"операцій: **not**, **and** і **or**." +"`Джордж Буль`_ створив те, що зараз відоме як `булева алгебра`_, яка " +"спирається на значення **істина** та **хибність** і визначає набір булевих " +"операцій: **не**, **і** та **або**." #: ../../src/basics/bool_logic.txt:24 +#, fuzzy msgid "" "These Boolean values and operators are helpful in programming because they " "help you decide the course of action in your programs." msgstr "" -"Ці булеві значення та оператори корисні в програмуванні, оскільки вони " -"допомагають визначити курс дій у ваших програмах." +"Ці булеві значення та оператори корисні у програмуванні, оскільки вони " +"допомагають вам визначати порядок дій у ваших програмах." #: ../../src/basics/bool_logic.txt:27 +#, fuzzy msgid "" "The **Python boolean** type is one of Python's built-in data types. It's " "used to represent the truth value of an expression. For example, the " @@ -63,24 +71,27 @@ msgid "" "programming well in Python." msgstr "" "Тип **Python boolean** є одним із вбудованих типів даних Python. Він " -"використовується для представлення істиності значення виразу. Наприклад, " -"вираз ``1 < 2`` є ``True``, тоді як вираз ``0 == 1`` є ``False``. Розуміння " -"того, як поводяться логічні значення Python, є важливим для якісного " -"програмування на Python." +"використовується для представлення значення істинності виразу. Наприклад, " +"вираз ``1 < 2`` є ``True`` (істине), тоді як вираз ``0 == 1`` є ``False`` " +"(хибне). Розуміння того, як поводяться булеві значення у Python, є важливим " +"для якісного програмування на Python." #: ../../src/basics/bool_logic.txt:34 +#, fuzzy msgid "Understanding Boolean" -msgstr "Розбираємось з Логічним типом даних" +msgstr "Розуміння булевих функцій" #: ../../src/basics/bool_logic.txt:36 +#, fuzzy msgid "The Boolean type has only two possible values:" -msgstr "Логічний тип має лише два можливих значення:" +msgstr "Тип Boolean має лише два можливих значення:" #: ../../src/basics/bool_logic.txt:38 ../../src/basics/bool_logic.txt:119 #: ../../src/basics/bool_logic.txt:121 ../../src/basics/bool_logic.txt:147 #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:189 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 +#, fuzzy msgid "``True``" msgstr "``True``" @@ -89,14 +100,17 @@ msgstr "``True``" #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 +#, fuzzy msgid "``False``" msgstr "``False``" #: ../../src/basics/bool_logic.txt:41 +#, fuzzy msgid "No other value will have ``bool`` as it type." -msgstr "Жодне інше значення не матиме тип ``bool``." +msgstr "Жодне інше значення не буде мати тип ``bool``." #: ../../src/basics/bool_logic.txt:50 +#, fuzzy msgid "" "The type ``bool`` is **built-in**, meaning it's always available in Python. " "``True`` and ``False`` are keywords in Python and can't be used as variable " @@ -104,51 +118,57 @@ msgid "" "``bool``, however this is considered bad style." msgstr "" "Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " -"і ``False`` є ключовими словами в Python і не можуть використовуватися як " -"імена змінних, але тип ``bool`` не є таким, і імені ``bool`` призначити інше " -"значення, однак це вважається поганим стилем." +"та ``False`` є ключовими словами у Python і не можуть використовуватися як " +"імена змінних, але тип ``bool`` не є таким, і його можна присвоювати імені " +"``bool``, однак це вважається поганим стилем." #: ../../src/basics/bool_logic.txt:56 +#, fuzzy msgid "Boolean as numbers" -msgstr "Boolean як число" +msgstr "Булеві як числа" #: ../../src/basics/bool_logic.txt:58 +#, fuzzy msgid "" "Booleans are a subtype of **numeric** type in Python. This means they're " "numbers for all intents and purposes. In other words, you can apply " "arithmetic operations to Boolean, and you can also compare them to numbers. " "``True`` value is treated to be 1, and ``False`` value is treated to be 0." msgstr "" -"Логічні значення є підтипом **числового** типу в Python. Це означає, що вони " -"є числами для всіх намірів і цілей. Іншими словами, ви можете застосовувати " -"арифметичні операції до логічних значень, а також порівнювати їх із числами. " -"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " -"0." +"Булеві вирази є підтипом **числового** типу у Python. Це означає, що вони є " +"числами за всіма ознаками. Іншими словами, до булевих типів можна " +"застосовувати арифметичні операції, а також порівнювати їх з числами. " +"Значення ``Істина`` розглядається як 1, а значення ``Неправда`` " +"розглядається як 0." #: ../../src/basics/bool_logic.txt:63 +#, fuzzy msgid "There aren't many uses of the numerical nature of Boolean values." -msgstr "" -"Числовій природі логічних значень можна знайти не так багато застосунків." +msgstr "Існує не так багато застосувань числової природи булевих значень." #: ../../src/basics/bool_logic.txt:66 +#, fuzzy msgid "Truth value testing" msgstr "Перевірка істинності" #: ../../src/basics/bool_logic.txt:68 +#, fuzzy msgid "" "Any object can be tested for truth value. By default an object considered " "``True``, unless its class defines either. Here are most of built-in objects " "considered ``False``:" msgstr "" "Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " -"вважається ``True``, якщо його клас не визначає іншого. Ось більшість " -"вбудованих об'єктів, які вважаються ``False``:" +"вважається ``Істинним``, якщо його клас не визначає іншого значення. " +"Більшість вбудованих об'єктів вважаються такими, що мають значення ``False``:" #: ../../src/basics/bool_logic.txt:72 +#, fuzzy msgid "constant values: ``None`` and ``False``" -msgstr "константи: ``None`` та ``False``" +msgstr "константні значення: ``None`` та ``False``" #: ../../src/basics/bool_logic.txt:73 +#, fuzzy msgid "" "zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " "``Fraction(0, 1)``" @@ -157,6 +177,7 @@ msgstr "" "``Fraction(0, 1)``" #: ../../src/basics/bool_logic.txt:75 +#, fuzzy msgid "" "empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " "``range(0)``." @@ -165,173 +186,207 @@ msgstr "" "``set()``, ``range(0)``." #: ../../src/basics/bool_logic.txt:80 +#, fuzzy msgid "" "If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " "as ``False``." msgstr "" -"Якщо ``len(something)`` дорівнює 0, тоді ``something`` буде приведено до " -"``bool`` як ``False``." +"Якщо ``len(something)`` дорівнює 0, то ``something`` приводиться до ``bool`` " +"як ``False``." #: ../../src/basics/bool_logic.txt:84 +#, fuzzy msgid "Boolean comparison" -msgstr "Логічне Порівняння" +msgstr "Логічне порівняння" #: ../../src/basics/bool_logic.txt:86 +#, fuzzy msgid "Python provides 3 logical operators:" -msgstr "Python надає 3 логічних оператори:" +msgstr "У мові Python передбачено 3 логічних оператори:" #: ../../src/basics/bool_logic.txt:92 ../../src/basics/bool_logic.txt:226 +#, fuzzy msgid "Operator" msgstr "Оператор" #: ../../src/basics/bool_logic.txt:92 +#, fuzzy msgid "Logic operator" msgstr "Логічний оператор" #: ../../src/basics/bool_logic.txt:94 +#, fuzzy msgid "``not``" -msgstr "``not``" +msgstr "ні" #: ../../src/basics/bool_logic.txt:94 +#, fuzzy msgid "Negation" msgstr "Заперечення" #: ../../src/basics/bool_logic.txt:96 +#, fuzzy msgid "``and``" -msgstr "``and``" +msgstr "і.." #: ../../src/basics/bool_logic.txt:96 +#, fuzzy msgid "Conjunction" msgstr "Кон'юнкція" #: ../../src/basics/bool_logic.txt:98 +#, fuzzy msgid "``or``" -msgstr "``or``" +msgstr "або.." #: ../../src/basics/bool_logic.txt:98 +#, fuzzy msgid "Disjunction" msgstr "Диз'юнкція" #: ../../src/basics/bool_logic.txt:101 +#, fuzzy msgid "" "With these operators, you can build expressions by connecting Boolean " "expressions with each other. These operators are **keywords** of the " "language, so you cannot use them as identifiers without causing a " "*SyntaxError*." msgstr "" -"За допомогою цих операторів можна будувати вирази, поєднуючі логічні вирази " -"один з одним. Ці оператори є **ключовими словами** мови, тому ви не можете " -"використовувати їх як ідентифікатори, не викликаючи *SyntaxError*." +"За допомогою цих операторів ви можете створювати вирази, з'єднуючи булеві " +"вирази один з одним. Ці оператори є **ключовими словами** мови, тому ви не " +"можете використовувати їх як ідентифікатори, не викликавши *SyntaxError*." #: ../../src/basics/bool_logic.txt:106 +#, fuzzy msgid "Getting started with ``not`` operator" msgstr "Початок роботи з оператором ``not``" #: ../../src/basics/bool_logic.txt:108 +#, fuzzy msgid "" "The ``not`` operator is the Boolean or logic operator that implements " "negation in Python. It's **unary**, which means that it takes only one " "**operand**. The operand can be a Boolean expression or any Python object. " "The task of ``not`` is to reverse the truth value of its operand." msgstr "" -"Оператор ``not`` є логічним або логічним оператором, який реалізує " -"заперечення в Python. Це **унарний**, що означає, що він приймає лише один " -"**операнд**. Операндом може бути логічний вираз або будь-який об'єкт Python. " -"Завдання ``not`` полягає в тому, щоб змінити значення істинності свого " -"операнда." +"Оператор ``not`` - це булевий або логічний оператор, який реалізує " +"заперечення у Python. Він є **унарним**, що означає, що він приймає лише " +"один **операнд**. Операндом може бути булевий вираз або будь-який об'єкт " +"Python. Завдання ``not`` полягає в тому, щоб змінити значення істинності " +"свого операнда на протилежне." #: ../../src/basics/bool_logic.txt:113 +#, fuzzy msgid "not operator truth table" msgstr "таблиця істинності оператора not" #: ../../src/basics/bool_logic.txt:117 +#, fuzzy msgid "``operand``" -msgstr "``operand``" +msgstr "``операнд``" #: ../../src/basics/bool_logic.txt:117 +#, fuzzy msgid "``not operand``" -msgstr "``not operand``" +msgstr "``not операнд``" #: ../../src/basics/bool_logic.txt:124 +#, fuzzy msgid "This functionality makes it worthwhile in several situations:" -msgstr "Ця функція доцільна в кількох ситуаціях:" +msgstr "Ця функціональність робить його корисним у кількох ситуаціях:" #: ../../src/basics/bool_logic.txt:127 +#, fuzzy msgid "" "Checking **unmet conditions** in the context of ``if`` statements and " "``while`` loops" msgstr "" -"Перевірка **невиконаних умов** у контексті операторів ``if`` і циклів " +"Перевірка **невиконання умов** у контексті операторів ``if`` та циклів " "``while``" #: ../../src/basics/bool_logic.txt:129 +#, fuzzy msgid "**Inverting the truth value** of an object or expression" -msgstr "**Інвертування значення істинності** об'єкта чи виразу" +msgstr "**Інвертування значення істинності** об'єкта або виразу" #: ../../src/basics/bool_logic.txt:130 +#, fuzzy msgid "Checking if a **value is not in a given container**" -msgstr "Перевірка того, що **значення не міститься в заданому контейнері**" +msgstr "Перевірка, чи **значення не знаходиться у заданому контейнері**" #: ../../src/basics/bool_logic.txt:131 +#, fuzzy msgid "Checking for an **object's identity**" msgstr "Перевірка **ідентичності об'єкта**" #: ../../src/basics/bool_logic.txt:134 +#, fuzzy msgid "Getting started with ``and`` operator" msgstr "Початок роботи з оператором ``and``" #: ../../src/basics/bool_logic.txt:136 +#, fuzzy msgid "" "Python's ``and`` operator is **binary**, which means it takes two " "**operands**. The operands in an ``and`` expression are commonly known as " "*conditions*. The result of the operator depends on the truth values of its " "operands. It'll be ``True`` if **both** are true." msgstr "" -"Оператор Python ``and`` є **бінарним**, що означає, що він приймає два " -"**операнди**. Операнди у виразі ``and`` зазвичай відомі як *умови*. " -"Результат оператора залежить від істинних значень його операндів. Це буде " -"``True``, якщо **обидва** є істинними." +"Оператор ``and`` у мові Python є **двійковим**, що означає, що він приймає " +"два **операнди**. Операнди у виразі ``і`` зазвичай називають *умовами*. " +"Результат оператора залежить від значень істинності його операндів. " +"Результат буде ``Істина``, якщо **обоє** є істинними." #: ../../src/basics/bool_logic.txt:141 +#, fuzzy msgid "and operator truth table" msgstr "таблиця істинності оператора and" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +#, fuzzy msgid "``operand_1``" msgstr "``operand_1``" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 +#, fuzzy msgid "``operand_2``" msgstr "``operand_2``" #: ../../src/basics/bool_logic.txt:145 +#, fuzzy msgid "``operand_1 and operand_2``" msgstr "``operand_1 and operand_2``" #: ../../src/basics/bool_logic.txt:156 +#, fuzzy msgid "" "``and`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``and`` працює не тільки з операндами логічного типу. Його " -"поведінка:" +msgstr "``and`` працює не тільки з операндами булевого типу. Це поведінка:" #: ../../src/basics/bool_logic.txt:159 +#, fuzzy msgid "evaluate 1st operand; return it, if it's ``False`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` та завершити" +msgstr "" +"обчислити 1-й операнд; повернути його, якщо він рівний ``False`` і завершити" #: ../../src/basics/bool_logic.txt:160 +#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` та завершити" +msgstr "" +"обчислити 2-й операнд; повернути його, якщо він рівний ``False`` і завершити" #: ../../src/basics/bool_logic.txt:161 ../../src/basics/bool_logic.txt:203 +#, fuzzy msgid "return 2nd operand" msgstr "повернути 2-й операнд" #: ../../src/basics/bool_logic.txt:175 +#, fuzzy msgid "Getting started with ``or`` operator" msgstr "Початок роботи з оператором ``or``" #: ../../src/basics/bool_logic.txt:177 +#, fuzzy msgid "" "With Boolean ``or`` operator, you can connect two Boolean expressions into " "one compound expression. This makes ``or`` the **binary** operator. At least " @@ -339,170 +394,205 @@ msgid "" "considered ``True``, and it doesn't matter which. If both subexpressions are " "``False``, then the expression is ``False``." msgstr "" -"За допомогою логічного оператора ``or`` ви можете з'єднати два логічні " -"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " -"Принаймні один підвираз має бути ``True``, щоб складений вираз вважався " -"``True``, і не має значення який. Якщо обидва підвирази мають значення " -"``False``, тоді вираз є ``False``." +"За допомогою булевого оператора ``або`` ви можете об'єднати два булевих " +"вирази в один складений вираз. Це робить ``або`` **бінарним** оператором. " +"Принаймні один з підвиразів має бути ``True``, щоб складений вираз вважався " +"``True``, і не має значення, який саме. Якщо обидва під-вирази мають " +"значення ``False``, то вираз буде вважатися ``False``." #: ../../src/basics/bool_logic.txt:183 +#, fuzzy msgid "or operator truth table" msgstr "таблиця істинності оператора or" #: ../../src/basics/bool_logic.txt:187 +#, fuzzy msgid "``operand_1 or operand_2``" msgstr "``operand_1 or operand_2``" #: ../../src/basics/bool_logic.txt:198 +#, fuzzy msgid "" "``or`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "" -"Оператор ``or`` працює не тільки з операндами логічного типу. Його поведінка:" +msgstr "``or`` працює не тільки з операндами булевого типу. Це поведінка:" #: ../../src/basics/bool_logic.txt:201 +#, fuzzy msgid "evaluate 1st operand; return it, if it's ``True`` and finish" -msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` та завершити" +msgstr "" +"обчислити 1-й операнд; повернути його, якщо він рівний ``True`` і завершити" #: ../../src/basics/bool_logic.txt:202 +#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" -msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` та завершити" +msgstr "" +"обчислити 2-й операнд; повернути його, якщо він рівний ``True`` і завершити" #: ../../src/basics/bool_logic.txt:217 +#, fuzzy msgid "Comparison" msgstr "Порівняння" #: ../../src/basics/bool_logic.txt:219 +#, fuzzy msgid "" "There are eight comparison operations in Python. They all have the same " "priority (which is higher than that of the Boolean operations)." msgstr "" -"У Python є вісім операцій порівняння. Усі вони мають однаковий пріоритет " -"(вищий, ніж у логічних операцій)." +"У мові Python існує вісім операцій порівняння. Всі вони мають однаковий " +"пріоритет (вищий, ніж у булевих операцій)." #: ../../src/basics/bool_logic.txt:222 +#, fuzzy msgid "Comparison operators" msgstr "Оператори порівняння" #: ../../src/basics/bool_logic.txt:226 +#, fuzzy msgid "Meaning" msgstr "Значення" #: ../../src/basics/bool_logic.txt:228 +#, fuzzy msgid "``<``" msgstr "``<``" #: ../../src/basics/bool_logic.txt:228 +#, fuzzy msgid "strictly less than" -msgstr "строго менше ніж" +msgstr "строго менше, ніж" #: ../../src/basics/bool_logic.txt:230 +#, fuzzy msgid "``<=``" msgstr "``<=``" #: ../../src/basics/bool_logic.txt:230 +#, fuzzy msgid "less than or equal" msgstr "менше або дорівнює" #: ../../src/basics/bool_logic.txt:232 +#, fuzzy msgid "``>``" msgstr "``>``" #: ../../src/basics/bool_logic.txt:232 +#, fuzzy msgid "strictly greater than" -msgstr "строго більше ніж" +msgstr "строго більше, ніж" #: ../../src/basics/bool_logic.txt:234 +#, fuzzy msgid "``>=``" msgstr "``>=``" #: ../../src/basics/bool_logic.txt:234 +#, fuzzy msgid "greater or equal" msgstr "більше або дорівнює" #: ../../src/basics/bool_logic.txt:236 +#, fuzzy msgid "``==``" msgstr "``==``" #: ../../src/basics/bool_logic.txt:236 +#, fuzzy msgid "equal (aka *equality* comparison)" -msgstr "дорівнює (також відоме як порівняння *equality*)" +msgstr "дорівнює (також відоме як *equality* порівняння)" #: ../../src/basics/bool_logic.txt:238 +#, fuzzy msgid "``!=``" msgstr "``!=``" #: ../../src/basics/bool_logic.txt:238 +#, fuzzy msgid "not equal" msgstr "не дорівнює" #: ../../src/basics/bool_logic.txt:240 +#, fuzzy msgid "``is``" -msgstr "``is``" +msgstr "це.." #: ../../src/basics/bool_logic.txt:240 +#, fuzzy msgid "object identity" -msgstr "ідентичність об'єкта" +msgstr "ідентичність об'єктів" #: ../../src/basics/bool_logic.txt:242 +#, fuzzy msgid "``is not``" -msgstr "``is not``" +msgstr "не є" #: ../../src/basics/bool_logic.txt:242 +#, fuzzy msgid "negated object identity" -msgstr "заперечена ідентичність об'єкта" +msgstr "заперечення ідентичності об'єкта" #: ../../src/basics/bool_logic.txt:245 +#, fuzzy msgid "" "Each of these comparison operators return a Boolean value, it's always " "``True`` or ``False``." msgstr "" -"Кожен із цих операторів порівняння повертає логічне значення, воно завжди " -"``True`` або ``False``." +"Кожен з цих операторів порівняння повертає булеве значення, завжди ``True`` " +"або ``False``." #: ../../src/basics/bool_logic.txt:248 +#, fuzzy msgid "" "You can chain comparison operators together: ``x < y < z`` is equal to ``x < " "y and y < z``." msgstr "" -"Ви можете об'єднати оператори порівняння: ``x < y < z`` дорівнює ``x < y і y " -"< z``." +"Ви можете з'єднувати оператори порівняння ланцюжком: ``x < y < z`` дорівнює " +"``x < y та y < z``." #: ../../src/basics/bool_logic.txt:252 +#, fuzzy msgid "Equality vs Identity" -msgstr "Рівність та Ідентичність" +msgstr "Рівність vs Ідентичністі" #: ../../src/basics/bool_logic.txt:254 +#, fuzzy msgid "" "It's easier to understand the difference between those by asking the " "question each answers to." msgstr "" -"Легше зрозуміти різницю між ними, поставивши запитання, на яке кожен " -"відповідає." +"Зрозуміти різницю між ними простіше, задавши питання, на яке відповідає " +"кожна з них." #: ../../src/basics/bool_logic.txt:257 +#, fuzzy msgid "The question for ``==`` (*equality*) is:" -msgstr "Питання для ``==`` (*equality*) таке:" +msgstr "Питання для ``==`` (*рівності*) полягає у наступному:" #: ../../src/basics/bool_logic.txt:259 +#, fuzzy msgid "Is object on the left **equal** to the object on the right" -msgstr "Об'єкт ліворуч **дорівнює** об'єкту праворуч" +msgstr "Чи є об'єкт зліва **рівним** об'єкту справа" #: ../../src/basics/bool_logic.txt:261 +#, fuzzy msgid "The question for ``is`` (*identity*) is:" -msgstr "Питання для ``is`` (*identity*) таке:" +msgstr "Питання для ``is`` (*ідентичність*) полягає в наступному:" #: ../../src/basics/bool_logic.txt:263 +#, fuzzy msgid "Is object on the left **the same** as the object on the right" -msgstr "Об'єкт ліворуч **те саме**, що й об'єкт праворуч" +msgstr "Чи є об'єкт ліворуч **таким самим**, як і об'єкт праворуч" #: ../../src/basics/bool_logic.txt:265 +#, fuzzy msgid "" "For example, if there are two cars of the same model, same color etc. in " "front of you - these cars are equal, but they aren't ident to each other. " "But if you are shown two pictures of the same car, you understand that the " "cars on those pictures are the same object." msgstr "" -"Наприклад, якщо перед вами дві машини однієї моделі, одного кольору і т. д. " -"- ці машини рівні, але не ідентичні одна одній. Але якщо вам покажуть дві " -"фотографії однієї машини, ви зрозумієте, що машини на цих фотографіях є " -"одним і тим же об'єктом." +"Наприклад, якщо перед вами стоять два автомобілі однієї моделі, одного " +"кольору і т.д. - ці автомобілі рівні, але вони не ідентичні один одному. Але " +"якщо вам показують дві фотографії однієї і тієї ж машини, ви розумієте, що " +"машини на цих фотографіях - це один і той же об'єкт." diff --git a/src/_locales/uk/LC_MESSAGES/basics/decorators.po b/src/_locales/uk/LC_MESSAGES/basics/decorators.po index 4fa2fd4d8..77d39c0aa 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/decorators.po +++ b/src/_locales/uk/LC_MESSAGES/basics/decorators.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:09+0300\n" +"PO-Revision-Date: 2023-10-17 23:16+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,72 +20,83 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/decorators.txt:-1 +#, fuzzy msgid "Python decorators" msgstr "Декоратори в Python" #: ../../src/basics/decorators.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/decorators.txt:-1 +#, fuzzy msgid "python, basics, decorators" msgstr "python, basics, decorators" #: ../../src/basics/decorators.txt:11 +#, fuzzy msgid "Decorators" msgstr "Декоратори" #: ../../src/basics/decorators.txt:13 +#, fuzzy msgid "" "Decorators provide a simple syntax for calling higher-order functions :cite:" "`realpython:decorators`." msgstr "" -"Декоратори забезпечують простий синтаксис для виклику функцій вищого " -"порядку :cite:`realpython:decorators`." +"Декоратори надають простий синтаксис для виклику функцій вищого порядку :" +"cite:`realpython:decorators`." #: ../../src/basics/decorators.txt:18 +#, fuzzy msgid "There is some kind of misunderstanding in definitions." -msgstr "Є деяке непорозуміння у визначеннях." +msgstr "Існує певне непорозуміння у визначеннях." #: ../../src/basics/decorators.txt:20 +#, fuzzy msgid "" "**Decorator** is a function returning another function, usually applied as a " "function transformation using the ``@wrapper`` syntax :cite:`docs-python:" "term-decorator`." msgstr "" -"**Декоратор** — це функція, яка повертає іншу функцію, зазвичай " +"**Декоратор** - це функція, що повертає іншу функцію, зазвичай " "застосовується як перетворення функції за допомогою синтаксису ``@wrapper`` :" "cite:`docs-python:term-decorator`." #: ../../src/basics/decorators.txt:24 +#, fuzzy msgid "" "However, that's no quit enough to describe it. The more complete definition " "is:" -msgstr "Однак цього недостатньо, щоб описати це. Більш повне визначення таке:" +msgstr "Однак цього недостатньо, щоб описати його. Більш повне визначення:" #: ../../src/basics/decorators.txt:27 +#, fuzzy msgid "" "**Decorator** is a structural design pattern that lets you attach new " "behaviors to objects by placing these objects inside special wrapper objects " "that contain the behaviors :cite:`refactoring.guru:decorator`." msgstr "" -"**Декоратор** — це структурний шаблон проектування, який дає змогу додавати " -"нову поведінку до об'єктів, розміщуючи ці об'єкти всередині спеціальних " -"об'єктів-огорток, які містять поведінку :cite:`refactoring.guru:decorator`." +"**Декоратор** -- це патерн структурного дизайну, який дозволяє додавати нові " +"поведінки до об'єктів, розміщуючи ці об'єкти всередині спеціальних обгорток, " +"які містять поведінку :cite:`refactoring.guru:decorator`." #: ../../src/basics/decorators.txt:31 +#, fuzzy msgid "" "Before you understand decorators, you must first understand how functions " "work." msgstr "" -"Перш ніж зрозуміти декораторів, ви повинні спочатку зрозуміти, як працюють " -"функції." +"Перш ніж розбиратися в декораторах, потрібно зрозуміти, як працюють функції." #: ../../src/basics/decorators.txt:35 +#, fuzzy msgid "First-class objects" msgstr "Об'єкти першого класу" #: ../../src/basics/decorators.txt:37 +#, fuzzy msgid "" "In Python functions are `first-class objects`_. Everything in Python is an " "object. Functions are objects too." @@ -94,10 +105,12 @@ msgstr "" "Функції також є об'єктами." #: ../../src/basics/decorators.txt:41 +#, fuzzy msgid "Inner functions" msgstr "Внутрішні функції" #: ../../src/basics/decorators.txt:43 +#, fuzzy msgid "" "Functions can be nested. This means it is possible to define functions " "inside other functions." @@ -106,10 +119,12 @@ msgstr "" "всередині інших функцій." #: ../../src/basics/decorators.txt:46 +#, fuzzy msgid "Nested functions example" msgstr "Приклад вкладених функцій" #: ../../src/basics/decorators.txt:60 +#, fuzzy msgid "" "The order in which inner functions are defined no matters. The function " "definition does not execute the function body; this gets executed only when " @@ -119,103 +134,116 @@ msgid "" "cause ``NameError`` exception." msgstr "" "Порядок визначення внутрішніх функцій не має значення. Визначення функції не " -"виконує тіло функції; це виконується лише під час виклику функції. Крім " -"того, внутрішні функції не визначені, доки не буде викликана батьківська " -"функція. Вони локально прив'язані до свого батьківського елемента. Спроба " -"викликати функцію ``heapify`` поза межами ``heap_sort`` спричинить виняток " -"``NameError``." +"виконує тіло функції; воно виконується лише під час виклику функції. Крім " +"того, внутрішні функції не визначаються до виклику батьківської функції. " +"Вони локально масштабуються до свого батька. Спроба викликати функцію " +"``heapify`` поза ``heap_sort`` призведе до виключення ``NameError``." #: ../../src/basics/decorators.txt:68 +#, fuzzy msgid "Functions are objects" msgstr "Функції є об'єктами" #: ../../src/basics/decorators.txt:70 +#, fuzzy msgid "" "This means functions can be passed around and used as arguments, just like " "any other object (e.g. *int*, *str* etc.)." msgstr "" -"Це означає, що функції можна передавати й використовувати як аргументи, як і " -"будь-який інший об'єкт (наприклад, *int*, *str* тощо)." +"Це означає, що функції можна передавати і використовувати як аргументи так " +"само, як і будь-які інші об'єкти (наприклад, *int*, *str* тощо)." #: ../../src/basics/decorators.txt:95 +#, fuzzy msgid "Returning functions" msgstr "Повернення функцій" #: ../../src/basics/decorators.txt:97 +#, fuzzy msgid "" "Since function can be passed as an argument, it may be returned from another " "function." msgstr "" -"Оскільки функцію можна передати як аргумент, її можна повернути з іншої " -"функції." +"Оскільки функція може бути передана як аргумент, вона може бути повернута з " +"іншої функції." #: ../../src/basics/decorators.txt:120 +#, fuzzy msgid "``parent`` returns functions themselves, there are no parentheses." -msgstr "``parent`` повертає самі функції, тут нема дужок." +msgstr "``parent`` повертає самі функції, дужок немає." #: ../../src/basics/decorators.txt:122 +#, fuzzy msgid "" "After running the code snippet above, ``first`` refers the ``first_child`` " "function from the inner ``parent`` scope. From now it can be used to call " "the target function it refers." msgstr "" -"Після виконання наведеного вище фрагмента коду ``first`` посилається на " -"функцію ``first_child`` із внутрішньої області ``parent``. Відтепер його " -"можна використовувати для виклику цільової функції, на яку він посилається." +"Після виконання наведеного вище фрагмента коду, ``first`` звертається до " +"функції ``first_child`` з внутрішньої області видимості ``parent``. Тепер її " +"можна використовувати для виклику цільової функції, на яку вона посилається." #: ../../src/basics/decorators.txt:134 +#, fuzzy msgid "Simple decorators" msgstr "Прості декоратори" #: ../../src/basics/decorators.txt:136 +#, fuzzy msgid "" "Now you're ready to move on and see the magical beast that is the Python " "decorators. Let's start with a simple example:" msgstr "" -"Тепер ви готові рухатися далі та побачити чарівного звіра, яким є декоратори " +"Тепер ви готові рухатися далі і побачити чарівного звіра, яким є декоратори " "Python. Почнемо з простого прикладу:" #: ../../src/basics/decorators.txt:154 +#, fuzzy msgid "Running function:" msgstr "Запуск функцій:" #: ../../src/basics/decorators.txt:165 +#, fuzzy msgid "" "The common way to use decorators is to replace the original function with a " "decorated one:" msgstr "" -"Поширеним способом використання декораторів є заміна оригінальної функції на " -"декоровану:" +"Найпоширеніший спосіб використання декораторів - це заміна оригінальної " +"функції на декоровану:" #: ../../src/basics/decorators.txt:176 +#, fuzzy msgid "" "``say_hello`` function is the reference to the ``decorator.." "wrapper``, which itself is bound to the original ``say_hello`` function. " "There is a syntactic sugar to do this, called *pie-syntax*. The following " "example does exact the same things as the first decorator example:" msgstr "" -"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, який " -"сам прив'язаний до оригінальної функції ``say_hello``. Для цього існує " -"синтаксичний цукор, який називається *pie-syntax*. Наступний приклад виконує " -"ті самі речі, що й перший приклад декоратора:" +"Функція ``say_hello`` є посиланням на ``decorator..wrapper``, яка " +"сама зв'язана з оригінальною функцією ``say_hello``. Для цього існує " +"синтаксичний цукор, який називається *pie-синтаксис*. Наступний приклад " +"робить те саме, що і перший приклад декоратора:" #: ../../src/basics/decorators.txt:198 +#, fuzzy msgid "" "There is no way to *undecorate* object in Python. Once something is bound to " "the decorator's wrapper - it is decorated forever." msgstr "" -"У Python немає способу *скасувати* об'єкт. Одного разу щось прив'язане до " -"обгортки декоратора - воно прикрашене назавжди." +"У Python не існує способу *віддекорувати* об'єкт. Як тільки щось прив'язано " +"до обгортки декоратора - воно прикрашене назавжди." #: ../../src/basics/decorators.txt:201 +#, fuzzy msgid "" "A decorated function still remains a **function**. So, it can be decorated " "once more time again, and again, and again..." msgstr "" -"Декорована функція все ще залишається **функцією**. Отже, його можна " -"прикрашати ще раз, і ще, і ще..." +"Прикрашена функція все одно залишається **функцією**. Отже, її можна " +"прикрасити ще раз, і ще раз, і ще раз, і ще раз..." #: ../../src/basics/decorators.txt:253 +#, fuzzy msgid "" "\"Wrapper\" is the alternative nickname for the Decorator pattern that " "clearly expresses the main idea of the pattern. A wrapper is an object that " @@ -224,102 +252,116 @@ msgid "" "the wrapper may alter the result by doing something either before or after " "it passes the request to the target." msgstr "" -"\"Обгортка\" — альтернативне прізвисько візерунка \"Декоратор\", яке чітко " -"виражає основну ідею візерунка. Обгортка — це об'єкт, який можна зв'язати з " +"\"Обгортка\" - це альтернативна назва шаблону \"Декоратор\", яка чітко " +"виражає основну ідею шаблону. Обгортка - це об'єкт, який можна зв'язати з " "деяким цільовим об'єктом. Обгортка містить той самий набір методів, що й " -"мета, і делегує їй усі отримані запити. Однак обгортка може змінити " -"результат, зробивши щось до або після того, як вона передає запит цільовому " -"об'єкту." +"цільовий об'єкт, і делегує йому всі запити, які він отримує. Однак обгортка " +"може змінити результат, виконавши щось до або після передачі запиту " +"цільовому об'єкту." #: ../../src/basics/decorators.txt:261 +#, fuzzy msgid "Passing arguments to the wrapper" -msgstr "Передача аргументів до wrapper" +msgstr "Передача аргументів в обгортку" #: ../../src/basics/decorators.txt:263 +#, fuzzy msgid "" "Until now the examples use *simple* decorators. But what if the decorated " "function gets some arguments? This will cause ``TypeError`` exception that " "tell that \"arguments are missed\". This can be fixed with just passing " "arguments to the ``wrapper`` inner function." msgstr "" -"Досі приклади використовують *прості* декоратори. Але що, якщо декорована " -"функція отримує деякі аргументи? Це спричинить виняток ``TypeError``, який " -"повідомляє, що \"аргументи пропущено\". Це можна виправити, просто передавши " -"аргументи внутрішній функції ``wrapper``." +"Досі у прикладах використовувались *прості* декоратори. Але що, якщо " +"декорована функція отримає якісь аргументи? Це викличе виключення " +"``TypeError``, яке скаже, що \"аргументи пропущено\". Це можна виправити, " +"просто передавши аргументи у внутрішню функцію ``обгортки``." #: ../../src/basics/decorators.txt:289 +#, fuzzy msgid "" "If case you're trying to make a generic decorator, you may pass ``*args`` " "and ``**kwargs`` instead of exact arguments:" msgstr "" -"Якщо ви намагаєтеся створити загальний декоратор, ви можете передати " +"Якщо ви намагаєтеся створити узагальнений декоратор, ви можете передати " "``*args`` і ``**kwargs`` замість точних аргументів:" #: ../../src/basics/decorators.txt:308 +#, fuzzy msgid "Passing arguments to decorator" -msgstr "Передача аргументів декоратору" +msgstr "Передача аргументів до декоратора" #: ../../src/basics/decorators.txt:310 +#, fuzzy msgid "" "At last it's time to know how to pass arguments to the decorator. Here is a " "simple implementation of ``defer`` decorator which deferred the function " "execution for some time:" msgstr "" -"Нарешті настав час знати, як передавати аргументи декоратору. Ось проста " -"реалізація декоратора ``defer``, яка відкладає виконання функції на деякий " -"час:" +"Нарешті прийшов час дізнатися, як передавати аргументи декоратору. Ось " +"проста реалізація декоратора ``defer``, який відкладає виконання функції на " +"деякий час:" #: ../../src/basics/decorators.txt:353 +#, fuzzy msgid "Class decorators" msgstr "Декоратори класів" #: ../../src/basics/decorators.txt:355 +#, fuzzy msgid "" "There are some pre-defined decorators exists for usage together with " "classes. They are:" msgstr "" -"Існують деякі попередньо визначені декоратори для використання разом із " -"класами. Це:" +"Існує декілька попередньо визначених декораторів для використання разом з " +"класами. Ось вони:" #: ../../src/basics/decorators.txt:358 +#, fuzzy msgid "``classmethod``" msgstr "``classmethod``" #: ../../src/basics/decorators.txt:359 +#, fuzzy msgid "``staticmethod``" msgstr "``staticmethod``" #: ../../src/basics/decorators.txt:360 +#, fuzzy msgid "``property``" msgstr "``property``" #: ../../src/basics/decorators.txt:362 +#, fuzzy msgid "" "If you develop an intuitive understanding for their differences you'll be " "able to write object-oriented Python that communicates its intent more " "clearly and will be easier to maintain in the long run :cite:`realpython:" "methods-demystified`." msgstr "" -"Якщо ви розвинете інтуїтивне розуміння їхніх відмінностей, ви зможете " -"написати об'єктно-орієнтований Python, який чіткіше передає свої наміри та " -"який буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" +"Якщо ви розвинете інтуїтивне розуміння їх відмінностей, ви зможете писати " +"об'єктно-орієнтований Python, який більш чітко передає свої наміри і який " +"буде легше підтримувати в довгостроковій перспективі :cite:`realpython:" "methods-demystified`." #: ../../src/basics/decorators.txt:368 +#, fuzzy msgid "Class methods" msgstr "Методи класу" #: ../../src/basics/decorators.txt:370 +#, fuzzy msgid "" "Instead of accepting a ``self`` parameter, class methods take a ``cls`` " "parameter that points to the class — and not the object instance — when the " "method is called." msgstr "" -"Замість того, щоб приймати параметр self, під час виклику методу методи " -"класу приймають параметр ``cls``, який вказує на клас, а не на екземпляр " -"класу." +"Замість того, щоб приймати параметр ``self``, методи класу приймають " +"параметр ``cls``, який вказує на клас - а не на екземпляр об'єкта - під час " +"виклику методу." #: ../../src/basics/decorators.txt:374 +#, fuzzy msgid "" "Because the class method only has access to this ``cls`` argument, it can't " "modify object instance state. That would require access to ``self``. " @@ -327,65 +369,73 @@ msgid "" "instances of the class." msgstr "" "Оскільки метод класу має доступ лише до цього аргументу ``cls``, він не може " -"змінити стан екземпляра об'єкта. Це потребує доступу до ``self``. Однак " -"методи класу все ще можуть змінювати стан класу, який застосовується до всіх " -"екземплярів класу." +"змінювати стан екземпляра об'єкта. Для цього потрібен доступ до ``self``. " +"Однак, методи класу все ще можуть змінювати стан класу, який застосовується " +"до всіх екземплярів класу." #: ../../src/basics/decorators.txt:379 +#, fuzzy msgid "" "The common usage for ``classmethod`` is provide alternative initializers." msgstr "" -"Загальним використанням ``методи класу`` є надання альтернативних " +"Загальноприйнятим використанням ``classmethod`` є надання альтернативних " "ініціалізаторів." #: ../../src/basics/decorators.txt:382 +#, fuzzy msgid "Static methods" msgstr "Статичні методи" #: ../../src/basics/decorators.txt:384 +#, fuzzy msgid "" "This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " "course it's free to accept an arbitrary number of other parameters)." msgstr "" -"Цей тип методу не приймає ані ``self``, ані ``cls`` параметр (але, звичайно, " -"він може приймати будь-яку кількість інших параметрів)." +"Цей тип методів не приймає ні параметра ``self``, ні параметра ``cls`` (але, " +"звичайно, він може приймати довільну кількість інших параметрів)." #: ../../src/basics/decorators.txt:387 +#, fuzzy msgid "" "Therefore a static method can neither modify object state nor class state. " "Static methods are restricted in what data they can access - and they're " "primarily a way to namespace your methods." msgstr "" -"Тому статичний метод не може змінити ні стан об'єкта, ні стан класу. " -"Статичні методи обмежені в тому, до яких даних вони можуть отримати доступ, " -"і вони, перш за все, є способом простору імен ваших методів." +"Тому статичний метод не може змінювати стан об'єкта або класу. Статичні " +"методи обмежені в доступі до даних, до яких вони можуть отримати доступ - і " +"це, насамперед, спосіб організації простору імен ваших методів." #: ../../src/basics/decorators.txt:391 +#, fuzzy msgid "" "It's tricky to explain ``staticmethod`` usage. Almost always you can create " "a dedicated function instead of static method. But sometimes you need to " "bind some logic independent from class itself or its instances to a class - " "it common to encapsulate it with ``staticmethod``." msgstr "" -"Важко пояснити використання ``staticmethod``. Майже завжди ви можете " -"створити спеціальну функцію замість статичного методу. Але іноді вам " -"потрібно прив'язати до класу певну логіку, незалежну від самого класу або " -"його екземплярів – зазвичай інкапсулювати її за допомогою ``staticmethod``." +"Пояснити використання ``staticmethod`` досить складно. Майже завжди замість " +"статичного методу можна створити спеціальну функцію. Але іноді вам потрібно " +"прив'язати до класу деяку логіку, незалежну від самого класу або його " +"екземплярів, і тоді прийнято інкапсулювати її за допомогою ``staticmethod``." #: ../../src/basics/decorators.txt:397 +#, fuzzy msgid "Properties" msgstr "Властивості" #: ../../src/basics/decorators.txt:399 +#, fuzzy msgid "" "It's a way to bind a method name to access it as an attribute. Properties " "are **read-only** by default. This means a value cannot be assigned to " "``property member``." msgstr "" -"Це спосіб прив'язати назву методу для доступу до нього як до атрибута. За " -"замовчуванням властивості доступні **лише для читання**. Це означає, що " -"значення не можна призначити ``члену властивості``." +"Це спосіб зв'язати ім'я методу для доступу до нього як до атрибуту. За " +"замовчуванням властивості доступні лише для читання. Це означає, що члену " +"властивості не можна присвоїти значення." #: ../../src/basics/decorators.txt:404 +#, fuzzy msgid "Some examples" msgstr "Деякі приклади" diff --git a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po index 01cdf3130..413e5dda3 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po +++ b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:08+0300\n" +"PO-Revision-Date: 2023-10-17 23:16+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,38 +20,45 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/stdtypes.txt:-1 +#, fuzzy msgid "Python built-in types" msgstr "Вбудовані типи даних в Python" #: ../../src/basics/stdtypes.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/stdtypes.txt:-1 +#, fuzzy msgid "python, basics" msgstr "python, basics" #: ../../src/basics/stdtypes.txt:11 +#, fuzzy msgid "Built-in Types" -msgstr "Вбудовані типи" +msgstr "Вбудовані Типи" #: ../../src/basics/stdtypes.txt:13 +#, fuzzy msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " "instances and exceptions :cite:`docs-python:stdtypes`. This section covers " "only the most base of them. Others will be discussed in the future within " "their own topics." msgstr "" -"Основними вбудованими типами є числа, послідовності, відображення, класи, " -"екземпляри та винятки :cite:`docs-python:stdtypes`. Цей розділ охоплює лише " -"найпростіші з них. Інші будуть обговорюватися в майбутньому в рамках їхніх " -"власних тем." +"Основними вбудованими типами є числа, послідовності, словники, класи, " +"екземпляри та винятки :cite:`docs-python:stdtypes`. У цьому розділі " +"розглянуто лише найпростіші з них. Інші будуть розглянуті в майбутньому у " +"відповідних темах." #: ../../src/basics/stdtypes.txt:19 +#, fuzzy msgid "Numeric types" msgstr "Числові типи" #: ../../src/basics/stdtypes.txt:21 +#, fuzzy msgid "" "There are 3 distinct numeric types: *integers*, *floating point numbers*, " "and *complex numbers*. In addition, Booleans are a subtype of integers. " @@ -59,13 +66,14 @@ msgid "" "implemented using ``double`` in C. Complex numbers have a real and imaginary " "part, which are each a floating point number." msgstr "" -"Існує 3 різних типи чисел: *integers*, *floating point numbers*, та *complex " -"numbers*. Крім того, логічні значення є підтипом цілих чисел. Цілі числа " -"мають необмежену точність. Числа з плаваючою комою зазвичай реалізуються " -"через знак ``double`` у C. Комплексні числа мають дійсну та уявну частини, " -"кожна з яких є числом з плаваючою комою." +"Існує 3 різних числових типи: *цілі числа*, *числа з плаваючою комою* та " +"*комплексні числа*. Крім того, булеві числа є підтипом цілих чисел. Цілі " +"числа мають необмежену точність. Числа з плаваючою комою зазвичай " +"реалізуються за допомогою ``double`` у C. Комплексні числа мають дійсну та " +"уявну частини, кожна з яких є числом з плаваючою комою." #: ../../src/basics/stdtypes.txt:27 +#, fuzzy msgid "" "Numbers are created by numeric literals or as the result of built-in " "functions and operators. Unadorned integer literals (including hex, octal " @@ -76,85 +84,103 @@ msgid "" "number with real and imaginary parts." msgstr "" "Числа створюються за допомогою числових літералів або як результат " -"вбудованих функцій і операторів. Неприкрашені цілі літерали (включаючи " -"шістнадцяткові, вісімкові та двійкові числа) дають цілі числа. Числові " -"літерали, що містять десяткову кому або знак експоненти, дають числа з " -"плаваючою комою. Додавання ``j`` або ``J`` до числового літералу дає уявне " +"вбудованих функцій та операторів. Цілі літерали без прикрас (включаючи " +"шістнадцяткові, вісімкові та двійкові числа) створюють цілі числа. Числові " +"літерали, що містять десяткову крапку або знак експоненти, дають числа з " +"плаваючою комою. Додавання ``j`` або ``J`` до числового літерала дає уявне " "число (комплексне число з нульовою дійсною частиною), яке ви можете додати " -"до цілого числа або числа з плаваючою точкою, щоб отримати комплексне число " -"з дійсною та уявною частинами." +"до цілого числа або числа з плаваючою комою, щоб отримати комплексне число з " +"дійсною та уявною частинами." #: ../../src/basics/stdtypes.txt:36 +#, fuzzy msgid "Supported operations" -msgstr "Операції підтримки" +msgstr "Операції, які підтримуються" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 +#, fuzzy msgid "Operation" -msgstr "Операції" +msgstr "Операція" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 +#, fuzzy msgid "Result" msgstr "Результат" #: ../../src/basics/stdtypes.txt:41 +#, fuzzy msgid "``x + y``" msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:41 +#, fuzzy msgid "sum of *x* and *y*" msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:43 +#, fuzzy msgid "``x - y``" msgstr "``x - y``" #: ../../src/basics/stdtypes.txt:43 +#, fuzzy msgid "difference of *x* and *y*" msgstr "різниця між *x* і *y*" #: ../../src/basics/stdtypes.txt:45 +#, fuzzy msgid "``x * y``" msgstr "``x * y``" #: ../../src/basics/stdtypes.txt:45 +#, fuzzy msgid "product of *x* and *y*" msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:47 +#, fuzzy msgid "``x / y``" -msgstr "``x / y``" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:47 +#, fuzzy msgid "quotient of *x* and *y*" msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:49 +#, fuzzy msgid "``x // y``" -msgstr "``x // y``" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:49 +#, fuzzy msgid "floored quotient of *x* and *y*" msgstr "цілочисельне ділення *x* і *y*" #: ../../src/basics/stdtypes.txt:51 +#, fuzzy msgid "``x % y``" -msgstr "``x % y``" +msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:51 +#, fuzzy msgid "remainder of ``x / y``" msgstr "залишок від ділення ``x / y``" #: ../../src/basics/stdtypes.txt:53 +#, fuzzy msgid "``-x``" msgstr "``-x``" #: ../../src/basics/stdtypes.txt:53 +#, fuzzy msgid "*x* negated" msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:55 +#, fuzzy msgid "``+x``" msgstr "``+x``" @@ -164,96 +190,115 @@ msgid "*x* unchanged" msgstr "*y* без змін" #: ../../src/basics/stdtypes.txt:57 +#, fuzzy msgid "``abs(x)``" msgstr "``abs(x)``" #: ../../src/basics/stdtypes.txt:57 +#, fuzzy msgid "absolute value or magnitude of *x*" msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:59 +#, fuzzy msgid "``int(x)``" msgstr "``int(x)``" #: ../../src/basics/stdtypes.txt:59 +#, fuzzy msgid "*x* converted to integer" -msgstr "*x* перетворено на ціле число" +msgstr "*x* перетворено в ціле число" #: ../../src/basics/stdtypes.txt:61 +#, fuzzy msgid "``float(x)``" msgstr "``float(x)``" #: ../../src/basics/stdtypes.txt:61 +#, fuzzy msgid "*x* converted to floating point" -msgstr "*x* перетворено на число з плаваючою комою" +msgstr "*x* перетворено у число з плаваючою комою" #: ../../src/basics/stdtypes.txt:63 +#, fuzzy msgid "``complex(re, im)``" msgstr "``complex(re, im)``" #: ../../src/basics/stdtypes.txt:63 +#, fuzzy msgid "" "a complex number with real part *re*, imaginary part *im*. *im* defaults to " "zero." msgstr "" -"комплексне число з дійсною частиною *re*, уявною частиною *im*. *im* за " -"замовчуванням на нуль." +"комплексне число з дійсною частиною *re* та уявною частиною *im*. За " +"замовчуванням *im* дорівнює нулю." #: ../../src/basics/stdtypes.txt:66 +#, fuzzy msgid "``divmod(x, y)``" msgstr "``divmod(x, y)``" #: ../../src/basics/stdtypes.txt:66 +#, fuzzy msgid "the pair ``(x // y, x % y)``" msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:68 +#, fuzzy msgid "``pow(x, y)`` ``x ** y``" msgstr "``pow(x, y)`` ``x ** y``" #: ../../src/basics/stdtypes.txt:68 +#, fuzzy msgid "*x* to the power *y*" msgstr "*x* у степені *y*" #: ../../src/basics/stdtypes.txt:72 +#, fuzzy msgid "" "``x // y`` also referred to as integer division. The resultant value is a " "whole integer, through the result's type is not necessarily int. The result " "is always rounded towards minus infinity: ``1 // 2`` is ``0``" msgstr "" -"``x // y`` також називають цілим діленням. Результуюче значення є цілим " -"числом, через тип результату не обов'язково int. Результат завжди " -"округлюється до мінус нескінченності: ``1 // 2`` дорівнює ``0``" +"``x // y`` також називається цілочисельним діленням. Значення результату є " +"цілим числом, оскільки тип результату не обов'язково int. Результат завжди " +"округлюється до мінус нескінченності: ``1 // 2`` є ``0``" #: ../../src/basics/stdtypes.txt:77 +#, fuzzy msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " "optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " "and negative infinity." msgstr "" "``float(x)`` також приймає рядки ``\"nan\"`` та ``\"inf\"`` з необов'язковим " -"префіксом \"+\" або \"-\" для: :abbr:`NaN(Not a Number, не число)` і " -"позитивна та негативна нескінченність." +"префіксом \"+\" або \"-\" для :abbr:`NaN(Not a Number)`` та додатної і " +"від'ємної нескінченності." #: ../../src/basics/stdtypes.txt:82 +#, fuzzy msgid "Code examples" msgstr "Приклади коду" #: ../../src/basics/stdtypes.txt:84 +#, fuzzy msgid "Integer numbers" msgstr "Цілі числа" #: ../../src/basics/stdtypes.txt:98 +#, fuzzy msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: ../../src/basics/stdtypes.txt:114 ../../src/basics/stdtypes.txt:187 #: ../../src/basics/stdtypes.txt:295 ../../src/basics/stdtypes.txt:304 #: ../../src/basics/stdtypes.txt:333 +#, fuzzy msgid "Value comparisons" -msgstr "Порівняння цінностей" +msgstr "Порівняння значень" #: ../../src/basics/stdtypes.txt:116 +#, fuzzy msgid "" "Numbers of built-in numeric types can be compared within and across their " "types (with the restriction that complex numbers do not support order " @@ -261,38 +306,43 @@ msgid "" "mathematically correct without loss of precision." msgstr "" "Числа вбудованих числових типів можна порівнювати всередині та між типами (з " -"обмеженням, що комплексні числа не підтримують порядок порівняння). У межах " -"залучених типів вони порівняються математично правильно без втрати точності." +"обмеженням, що комплексні числа не підтримують порівняння порядків). У межах " +"відповідних типів вони порівнюються математично коректно без втрати точності." #: ../../src/basics/stdtypes.txt:121 +#, fuzzy msgid "" "The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." "Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" "number value is false." msgstr "" -"Значення \"not-a-number\" ``float(\"NaN\")`` і ``decimal.Decimal('NaN')`` є " -"спеціальними. Будь-яке впорядковане порівняння числа з нечисловим значенням " -"є хибним." +"Значення \"не-число\" ``float(\"NaN\")`` та ``decimal.Decimal('NaN')`` є " +"спеціальними. Будь-яке впорядковане порівняння числа зі значенням \"не-" +"число\" є хибним." #: ../../src/basics/stdtypes.txt:125 +#, fuzzy msgid "Sequence types" msgstr "Типи послідовностей" #: ../../src/basics/stdtypes.txt:127 +#, fuzzy msgid "" "There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " "Additional sequence types tailored for processing of binary data and text " "strings are described in dedicated sections." msgstr "" -"Існує 3 основних типи послідовностей: списки, кортежі та об'єкти діапазону. " -"Додаткові типи послідовностей, призначені для обробки двійкових даних і " -"текстових рядків, описані у інших розділах." +"Існує 3 основних типи послідовностей: *списки*, *кортежі* та *об'єкти " +"діапазону*. Додаткові типи послідовностей, призначені для обробки двійкових " +"даних і текстових рядків, описано у відповідних розділах." #: ../../src/basics/stdtypes.txt:132 +#, fuzzy msgid "Lists" msgstr "Списки" #: ../../src/basics/stdtypes.txt:134 +#, fuzzy msgid "" "Lists are mutable sequences, typically used to store collections of items. " "They may be constructed in several ways:" @@ -302,11 +352,13 @@ msgstr "" "способами:" #: ../../src/basics/stdtypes.txt:137 +#, fuzzy msgid "using a pair of square brackets to denote the empty list: ``[]``" msgstr "" -"використовуючи пару квадратних дужок для cтворення порожнього списку: ``[]``" +"використовуючи пару квадратних дужок для позначення порожнього списку: ``[]``" #: ../../src/basics/stdtypes.txt:138 +#, fuzzy msgid "" "using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" @@ -314,18 +366,22 @@ msgstr "" "b, c]``" #: ../../src/basics/stdtypes.txt:139 +#, fuzzy msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" #: ../../src/basics/stdtypes.txt:140 +#, fuzzy msgid "using the type constructor: ``list()`` or ``list(iterable)``" -msgstr "використовуючи конструкції типу: ``list()`` або ``list(iterable)``" +msgstr "використовуючи конструктор типу: ``list()`` або ``list(iterable)``" #: ../../src/basics/stdtypes.txt:143 +#, fuzzy msgid "Tuples" msgstr "Кортежі" #: ../../src/basics/stdtypes.txt:145 +#, fuzzy msgid "" "Tuples are immutable sequences, typically used to store collections of data " "or for cases where an immutable sequence of data is needed (such as allowing " @@ -333,38 +389,45 @@ msgid "" "number of ways:" msgstr "" "Кортежі - це незмінні послідовності, які зазвичай використовуються для " -"зберігання колекцій даних або для випадків, коли потрібна незмінна " -"послідовність даних (наприклад, дозволяє зберігати в екземплярах ``set`` або " -"``dict``). Вони можуть бути конструйовані декількома способами:" +"зберігання наборів даних або у випадках, коли потрібна незмінна " +"послідовність даних (наприклад, для зберігання в екземплярах ``set`` або " +"``dict``). Вони можуть бути побудовані кількома способами:" #: ../../src/basics/stdtypes.txt:150 +#, fuzzy msgid "using a pair of parentheses to denote the empty tuple: ``()``" msgstr "" "використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" #: ../../src/basics/stdtypes.txt:151 +#, fuzzy msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" -"використовуючи кінцеву кому для одноэлементного кортежу: ``a,`` або ``(a, b, " +"з використанням кінцевої коми для одиночного кортежу: ``a,`` або ``(a, b, " "c)``" #: ../../src/basics/stdtypes.txt:152 +#, fuzzy msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" -msgstr "відокремлюючи елементи комами: ``a, b, c`` або ``(a, b, c)``" +msgstr "розділення елементів комами: ``a, b, c`` або ``(a, b, c)``" #: ../../src/basics/stdtypes.txt:153 +#, fuzzy msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" -msgstr "за допомогою конструктора типу: ``tuple()`` або ``tuple(iterable)``" +msgstr "з використанням конструктора типу: ``tuple()`` або ``tuple(iterable)``" #: ../../src/basics/stdtypes.txt:156 +#, fuzzy msgid "Common operations" -msgstr "Загальні операції" +msgstr "Спільні операції" #: ../../src/basics/stdtypes.txt:161 +#, fuzzy msgid "``x in s`` ``x not in s``" msgstr "``x in s`` ``x not in s``" #: ../../src/basics/stdtypes.txt:161 +#, fuzzy msgid "" "``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " "*x*" @@ -373,78 +436,96 @@ msgstr "" "*x*" #: ../../src/basics/stdtypes.txt:164 +#, fuzzy msgid "``s + t``" msgstr "``s + t``" #: ../../src/basics/stdtypes.txt:164 +#, fuzzy msgid "the concatenation of *s* and *t*" -msgstr "конкатенація s і t" +msgstr "конкатенація *s* та *t*" #: ../../src/basics/stdtypes.txt:166 +#, fuzzy msgid "``s * n``" msgstr "``s * n``" #: ../../src/basics/stdtypes.txt:166 +#, fuzzy msgid "equivalent to adding *s* to itself *n* times" -msgstr "еквівалентно додаванню *s* до себе *n* разів" +msgstr "еквівалентно додаванню *s* до самого себе *n* разів" #: ../../src/basics/stdtypes.txt:168 +#, fuzzy msgid "``s[i]``" msgstr "``s[i]``" #: ../../src/basics/stdtypes.txt:168 +#, fuzzy msgid "*i*-th item of *s*, origin 0" -msgstr "*i*-й елемент *s*, джерело 0" +msgstr "*i*-й елемент з *s*, походження 0" #: ../../src/basics/stdtypes.txt:170 +#, fuzzy msgid "``s[i:j]`` ``s[i:j:k]``" msgstr "``s[i:j]`` ``s[i:j:k]``" #: ../../src/basics/stdtypes.txt:170 +#, fuzzy msgid "" "slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " "be omitted." msgstr "" -"фрагмент *s* від *i* до *j* з кроком *k*. будь-який із цих (або навіть усі " -"3) можна опустити." +"фрагмент *s* від *i* до *j* з кроком *k*. будь-який з них (або навіть всі 3) " +"можна опустити." #: ../../src/basics/stdtypes.txt:173 +#, fuzzy msgid "``len(s)``" msgstr "``len(s)``" #: ../../src/basics/stdtypes.txt:173 +#, fuzzy msgid "length of *s*" msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:175 +#, fuzzy msgid "``min(s)``" msgstr "``min(s)``" #: ../../src/basics/stdtypes.txt:175 +#, fuzzy msgid "smallest item of *s*" msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:177 +#, fuzzy msgid "``max(s)``" msgstr "``max(s)``" #: ../../src/basics/stdtypes.txt:177 +#, fuzzy msgid "largest item of *s*" msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:179 +#, fuzzy msgid "``s.count(x)``" msgstr "``s.count(x)``" #: ../../src/basics/stdtypes.txt:179 +#, fuzzy msgid "total number of occurrences of *x* in *s*" msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:181 +#, fuzzy msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" #: ../../src/basics/stdtypes.txt:181 +#, fuzzy msgid "" "index of the first occurrence of *x* in *s* at or after index *i* and before " "index *j*" @@ -453,6 +534,7 @@ msgstr "" "індексом *j*" #: ../../src/basics/stdtypes.txt:189 +#, fuzzy msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -460,90 +542,106 @@ msgid "" "these types raises ``TypeError``." msgstr "" "Послідовності можна порівнювати лише в межах кожного типу, з обмеженням, що " -"діапазони не підтримують порівняння порядку. Порівняння рівності між цими " -"типами призводить до нерівності, а впорядковане порівняння цих типів " +"діапазони не підтримують порівняння за порядком. Порівняння рівності між " +"цими типами призводить до нерівності, а порівняння порядку між цими типами " "викликає ``TypeError``." #: ../../src/basics/stdtypes.txt:194 +#, fuzzy msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " "equal to themselves. Lexicographical comparison between built-in collections " "works as follows:" msgstr "" -"Послідовності порівнюють лексикографічно за допомогою порівняння відповідних " -"елементів. Вбудовані контейнери зазвичай припускають, що ідентичні об'єкти " -"рівні собі. Лексикографічне порівняння між вбудованими колекціями працює " -"таким чином:" +"Послідовності порівнюються лексикографічно за допомогою порівняння " +"відповідних елементів. Вбудовані контейнери зазвичай вважають ідентичні " +"об'єкти рівними собі. Лексикографічне порівняння між вбудованими колекціями " +"працює наступним чином:" #: ../../src/basics/stdtypes.txt:199 +#, fuzzy msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." msgstr "" -"Щоб дві колекції порівнювалися рівноправними, вони повинні бути одного типу, " -"мати однакову довжину, і кожна пара відповідних елементів повинна " -"порівнюватися." +"Для того, щоб дві колекції були рівними, вони повинні бути одного типу, мати " +"однакову довжину і кожна пара відповідних елементів повинна порівнюватися " +"однаково." #: ../../src/basics/stdtypes.txt:201 +#, fuzzy msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " "collection is ordered first." msgstr "" -"Колекції, які підтримують порівняння порядку, упорядковуються так само, як і " -"їхні перші нерівні елементи. Якщо відповідний елемент не існує, спочатку " +"Колекції, що підтримують порівняння порядків, впорядковуються так само, як і " +"їх перші нерівні елементи. Якщо відповідного елемента не існує, то спочатку " "впорядковується коротша колекція." #: ../../src/basics/stdtypes.txt:206 +#, fuzzy msgid "Mutable sequence types" -msgstr "Змінні типи послідовностей" +msgstr "Типи змінних послідовностей" #: ../../src/basics/stdtypes.txt:211 +#, fuzzy msgid "``s[i] = x``" msgstr "``s[i] = x``" #: ../../src/basics/stdtypes.txt:211 +#, fuzzy msgid "item *i* of *s* is replaced by *x*" -msgstr "елемент *i* з *s* замінюється на *x*" +msgstr "елемент *i* в *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:213 +#, fuzzy msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" #: ../../src/basics/stdtypes.txt:213 +#, fuzzy msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" #: ../../src/basics/stdtypes.txt:216 +#, fuzzy msgid "``del s[i:j]``" msgstr "``del s[i:j]``" #: ../../src/basics/stdtypes.txt:216 +#, fuzzy msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:218 +#, fuzzy msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" #: ../../src/basics/stdtypes.txt:218 +#, fuzzy msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" #: ../../src/basics/stdtypes.txt:220 +#, fuzzy msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" #: ../../src/basics/stdtypes.txt:220 +#, fuzzy msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:222 +#, fuzzy msgid "``s.append(x)``" msgstr "``s.append(x)``" #: ../../src/basics/stdtypes.txt:222 +#, fuzzy msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" @@ -551,42 +649,52 @@ msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" #: ../../src/basics/stdtypes.txt:225 +#, fuzzy msgid "``s.clear()``" msgstr "``s.clear()``" #: ../../src/basics/stdtypes.txt:225 +#, fuzzy msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:227 +#, fuzzy msgid "``s.copy()``" msgstr "``s.copy()``" #: ../../src/basics/stdtypes.txt:227 +#, fuzzy msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:229 +#, fuzzy msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" #: ../../src/basics/stdtypes.txt:229 +#, fuzzy msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:232 +#, fuzzy msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" #: ../../src/basics/stdtypes.txt:232 +#, fuzzy msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" #: ../../src/basics/stdtypes.txt:235 +#, fuzzy msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" #: ../../src/basics/stdtypes.txt:235 +#, fuzzy msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -595,58 +703,70 @@ msgstr "" "пропущено - використовуйте останній доступний індекс)" #: ../../src/basics/stdtypes.txt:238 +#, fuzzy msgid "``s.remove(x)``" msgstr "``s.remove(x)``" #: ../../src/basics/stdtypes.txt:238 +#, fuzzy msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" #: ../../src/basics/stdtypes.txt:240 +#, fuzzy msgid "``s.reverse()``" msgstr "``s.reverse()``" #: ../../src/basics/stdtypes.txt:240 +#, fuzzy msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" #: ../../src/basics/stdtypes.txt:243 +#, fuzzy msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" #: ../../src/basics/stdtypes.txt:244 +#, fuzzy msgid "new in Python version 3.3" -msgstr "нове у версії Python 3.3" +msgstr "нове в Python версії 3.3" #: ../../src/basics/stdtypes.txt:247 +#, fuzzy msgid "Text sequence type" msgstr "Тип текстової послідовності" #: ../../src/basics/stdtypes.txt:250 +#, fuzzy msgid "String methods" -msgstr "Рядкові методи" +msgstr "Методи рядків" #: ../../src/basics/stdtypes.txt:252 +#, fuzzy msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." msgstr "" -"Рядки реалізують усі звичайні операції з послідовністю разом із додатковими " -"методами." +"Рядки реалізують всі звичайні операції з послідовністю, а також додаткові " +"методи." #: ../../src/basics/stdtypes.txt:297 +#, fuzzy msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." msgstr "" -"Рядки порівнюються лексикографічно з використанням числових кодових точок " -"Unicode своїх символів." +"Рядки порівнюються лексикографічно, використовуючи числові кодові точки " +"символів у Юнікоді." #: ../../src/basics/stdtypes.txt:301 +#, fuzzy msgid "Set types" -msgstr "Типи сетів" +msgstr "Типи множин" #: ../../src/basics/stdtypes.txt:306 +#, fuzzy msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -654,17 +774,19 @@ msgid "" "sets ``{1, 2}`` and ``{2, 3}`` are not equal, nor subsets of one another, " "nor supersets of one another)." msgstr "" -"Сети (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині та " -"між типами. Вони визначають оператори порівняння порядку, щоб проходити " -"тести підмножини та надмножини. Ці відношення не визначають загального " -"порядку (наприклад, два набори ``{1, 2}`` та ``{2, 3}`` не є рівними, ані " -"підмножини одного іншого, ані надмножини один одного)." +"Множини (екземпляри ``set`` або ``frozenset``) можна порівнювати всередині " +"та між їхніми типами. Вони визначають оператори порівняння порядку, які " +"означають тести підмножин та надмножин. Ці відношення не визначають повного " +"впорядкування (наприклад, дві множини ``{1, 2}`` і ``{2, 3}`` не є рівними, " +"не є підмножинами одна одної і не є надмножинами одна одної)." #: ../../src/basics/stdtypes.txt:313 +#, fuzzy msgid "Mapping type" msgstr "Тип відображення" #: ../../src/basics/stdtypes.txt:315 +#, fuzzy msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " @@ -676,38 +798,44 @@ msgstr "" "набори ключів та їхніх значень." #: ../../src/basics/stdtypes.txt:319 +#, fuzzy msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " "``1.0`` and ``True``) can be used interchangeably to index the same " "dictionary entry." msgstr "" -"Ключі словника - це майже довільні значення. Значення, які не хешуються, не " -"можуть бути використані як ключі. Значення, які порівнюються (такі як ``1``, " -"``1.0`` і ``True``), можна використовувати як взаємозамінні для індексування " -"тієї самої словникової статті." +"Ключі словника - це майже довільні значення. Значення, які не піддаються " +"хешуванню, не можна використовувати як ключі. Значення, які порівнюються як " +"рівні (наприклад, ``1``, ``1.0`` і ``True``), можуть використовуватися як " +"взаємозамінні для індексації однієї і тієї ж словникової статті." #: ../../src/basics/stdtypes.txt:323 +#, fuzzy msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" #: ../../src/basics/stdtypes.txt:325 +#, fuzzy msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" #: ../../src/basics/stdtypes.txt:326 +#, fuzzy msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" msgstr "" -"Використовуйте розділений комами список пар ``key: value`` з дужками: " +"Використовуйте список пар ``key: value`` через кому з дужками: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" #: ../../src/basics/stdtypes.txt:328 +#, fuzzy msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" #: ../../src/basics/stdtypes.txt:329 +#, fuzzy msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -716,13 +844,15 @@ msgstr "" "``dict(key=100)``" #: ../../src/basics/stdtypes.txt:335 +#, fuzzy msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." msgstr "" -"Екземпляри ``dict`` вважаються рівними тоді і тільки тоді, коли вони мають " -"однакові пари ключ-значення." +"Екземпляри ``dict`` порівнюються однаково тоді і тільки тоді, коли вони " +"мають однакові пари ключ-значення." #: ../../src/basics/stdtypes.txt:338 +#, fuzzy msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." diff --git a/src/_locales/uk/LC_MESSAGES/basics/variables.po b/src/_locales/uk/LC_MESSAGES/basics/variables.po index 36c224c23..9d685c32a 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/variables.po +++ b/src/_locales/uk/LC_MESSAGES/basics/variables.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:07+0300\n" +"PO-Revision-Date: 2023-10-17 23:15+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,32 +20,38 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/variables.txt:-1 +#, fuzzy msgid "Variables in programming" msgstr "Змінні в програмуванні" #: ../../src/basics/variables.txt:-1 +#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/variables.txt:-1 +#, fuzzy msgid "programming, basics, variables" msgstr "programming, basics, variables" #: ../../src/basics/variables.txt:8 +#, fuzzy msgid "Variables" msgstr "Змінні" #: ../../src/basics/variables.txt:10 +#, fuzzy msgid "" "In computer science a **variable** is a named storage location in memory " "that can hold a value (*data*). The value stored in a variable can be " "changed or accessed by the program during its execution." msgstr "" -"В інформатиці **variable** - це назване місце зберігання в пам'яті, яке може " -"зберігати значення (дані). Значення, яке зберігається у змінній, може бути " -"змінено або доступне програмою під час її виконання." +"У комп'ютерних науках **змінна** - це іменована комірка пам'яті, яка може " +"зберігати значення (*дані*). Значення, що зберігається у змінній, може бути " +"змінене або доступне програмі під час її виконання." #: ../../src/basics/variables.txt:14 +#, fuzzy msgid "" "In Python, variables are created dynamically once a value is assigned to " "them. This makes Python a dynamically typed language, which means that the " @@ -53,83 +59,97 @@ msgid "" "do not need to declare a variable before using it, as in statically typed " "languages." msgstr "" -"У Python змінні створюються динамічно після присвоєння їм значення. Це " -"робить Python динамічно типізованою мовою, а це означає, що тип даних " -"змінної виводиться з присвоєного їй значення. Отже, вам не потрібно " -"оголошувати змінну перед її використанням, як у статично типізованих мовах." +"У Python змінні створюються динамічно, щойно їм присвоюється значення. Це " +"робить Python динамічно типізованою мовою, що означає, що тип даних змінної " +"виводиться з присвоєного їй значення. Отже, вам не потрібно оголошувати " +"змінну перед її використанням, як у мовах зі статичною типізацією." #: ../../src/basics/variables.txt:19 +#, fuzzy msgid "" "The ability to create variables dynamically and infer their data type makes " "Python code more concise and easier to read. However, it also requires " "careful attention to variable naming and assignment to avoid unexpected " "behavior." msgstr "" -"Можливість динамічно створювати змінні та виводити їхні типи даних робить " -"код Python більш лаконічним і легшим для читання. Однак це також вимагає " -"пильної уваги до іменування та призначення змінних, щоб уникнути " +"Можливість динамічно створювати змінні та визначати тип їхніх даних робить " +"код Python лаконічнішим і легшим для читання. Однак, це також вимагає " +"ретельної уваги до іменування та присвоєння змінних, щоб уникнути " "неочікуваної поведінки." #: ../../src/basics/variables.txt:23 +#, fuzzy msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " "variable, the portion on the left of the operator is a *variable name* and " "the portion on the right is a *value* to assign to a variable." msgstr "" -"У Python ``=`` (оператор присвоєння) використовується для встановлення " -"значення деякої змінної, частина ліворуч від оператора - це ім'я змінної, а " -"частина праворуч - це значення, яке призначається для неї." +"У Python ``=`` (оператор присвоювання) використовується для присвоєння " +"значення деякій змінній, частина ліворуч від оператора - це *ім'я змінної*, " +"а частина праворуч - це *значення*, яке потрібно присвоїти змінній." #: ../../src/basics/variables.txt:27 +#, fuzzy msgid "Variable assignment in Python" -msgstr "Присвоєння змінної в Python" +msgstr "Присвоєння змінних у Python" #: ../../src/basics/variables.txt:34 +#, fuzzy msgid "Variable assignment in Java" -msgstr "Присвоєння змінної в Java" +msgstr "Присвоєння змінних у Java" #: ../../src/basics/variables.txt:42 +#, fuzzy msgid "Naming" -msgstr "Присвоєння назви" +msgstr "Іменування" #: ../../src/basics/variables.txt:44 +#, fuzzy msgid "" "In Python there are several rules that describe how to name your variables. " "Some of these are requirements and cannot be ignored, others are rather " "recommended than required and can be omitted. For now note, that a variable " "name **cannot**:" msgstr "" -"У Python є кілька правил, які описують, як іменувати ваші змінні. Деякі з " -"них є вимогами, і їх не можна ігнорувати, інші скоріше рекомендовані, ніж " -"обов'язкові, і їх можна пропустити. Наразі зауважте, що ім'я змінної не може:" +"У Python є кілька правил, які описують, як називати ваші змінні. Деякі з них " +"є обов'язковими і не можуть бути проігноровані, інші є скоріше " +"рекомендаційними, ніж обов'язковими, і їх можна опустити. Наразі зауважте, " +"що ім'я змінної **не може**:" #: ../../src/basics/variables.txt:49 +#, fuzzy msgid "a language keyword (like ``pass``, ``def`` or ``class``)" -msgstr "бути ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" +msgstr "ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" #: ../../src/basics/variables.txt:50 +#, fuzzy msgid "start with a number (e.g. ``123``, ``1_something``)" -msgstr "починатися з числа (наприклад, ``123``, ``1_something``)" +msgstr "починатись з числа (наприклад, ``123``, ``1_something``)" #: ../../src/basics/variables.txt:51 +#, fuzzy msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" -msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)" +msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)." #: ../../src/basics/variables.txt:52 +#, fuzzy msgid "contain white spaces" msgstr "містити пробіли" #: ../../src/basics/variables.txt:54 +#, fuzzy msgid "Also here are some general recommendation on naming anything:" -msgstr "Також ось деякі загальні рекомендації щодо іменування будь-чого:" +msgstr "" +"Також тут є кілька загальних рекомендацій щодо того, як називати будь-що:" #: ../../src/basics/variables.txt:56 +#, fuzzy msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" -"не використовуйте вбудовані функції як назву змінної (наприклад, ``len = " -"42``)" +"не використовуйте вбудовані функції як ім'я змінної (наприклад, ``len = 42``)" #: ../../src/basics/variables.txt:57 +#, fuzzy msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" -"зберігайте значення імен (``x = 10`` проти ``number_of_student = 100``)" +"зберігайте змістовність імен (``x = 10`` проти ``number_of_student = 100``)" From 692f0cd0113b4f0a36f2fd82f7ac2a289a6405f9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 18 Oct 2023 00:02:10 +0300 Subject: [PATCH 451/689] Complete check on variables document translations --- .../uk/LC_MESSAGES/basics/variables.po | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/variables.po b/src/_locales/uk/LC_MESSAGES/basics/variables.po index 9d685c32a..95b1e5a98 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/variables.po +++ b/src/_locales/uk/LC_MESSAGES/basics/variables.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:15+0300\n" +"PO-Revision-Date: 2023-10-18 00:01+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,27 +20,22 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/variables.txt:-1 -#, fuzzy msgid "Variables in programming" msgstr "Змінні в програмуванні" #: ../../src/basics/variables.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/variables.txt:-1 -#, fuzzy msgid "programming, basics, variables" msgstr "programming, basics, variables" #: ../../src/basics/variables.txt:8 -#, fuzzy msgid "Variables" msgstr "Змінні" #: ../../src/basics/variables.txt:10 -#, fuzzy msgid "" "In computer science a **variable** is a named storage location in memory " "that can hold a value (*data*). The value stored in a variable can be " @@ -51,7 +46,6 @@ msgstr "" "змінене або доступне програмі під час її виконання." #: ../../src/basics/variables.txt:14 -#, fuzzy msgid "" "In Python, variables are created dynamically once a value is assigned to " "them. This makes Python a dynamically typed language, which means that the " @@ -65,7 +59,6 @@ msgstr "" "змінну перед її використанням, як у мовах зі статичною типізацією." #: ../../src/basics/variables.txt:19 -#, fuzzy msgid "" "The ability to create variables dynamically and infer their data type makes " "Python code more concise and easier to read. However, it also requires " @@ -78,7 +71,6 @@ msgstr "" "неочікуваної поведінки." #: ../../src/basics/variables.txt:23 -#, fuzzy msgid "" "In Python ``=`` (assignment operator) is used to set a value to some " "variable, the portion on the left of the operator is a *variable name* and " @@ -89,22 +81,18 @@ msgstr "" "а частина праворуч - це *значення*, яке потрібно присвоїти змінній." #: ../../src/basics/variables.txt:27 -#, fuzzy msgid "Variable assignment in Python" msgstr "Присвоєння змінних у Python" #: ../../src/basics/variables.txt:34 -#, fuzzy msgid "Variable assignment in Java" msgstr "Присвоєння змінних у Java" #: ../../src/basics/variables.txt:42 -#, fuzzy msgid "Naming" msgstr "Іменування" #: ../../src/basics/variables.txt:44 -#, fuzzy msgid "" "In Python there are several rules that describe how to name your variables. " "Some of these are requirements and cannot be ignored, others are rather " @@ -113,43 +101,36 @@ msgid "" msgstr "" "У Python є кілька правил, які описують, як називати ваші змінні. Деякі з них " "є обов'язковими і не можуть бути проігноровані, інші є скоріше " -"рекомендаційними, ніж обов'язковими, і їх можна опустити. Наразі зауважте, " -"що ім'я змінної **не може**:" +"рекомендаціями, і їх можна опустити. Наразі зауважте, що ім'я змінної **не " +"може**:" #: ../../src/basics/variables.txt:49 -#, fuzzy msgid "a language keyword (like ``pass``, ``def`` or ``class``)" msgstr "ключовим словом мови (наприклад, ``pass``, ``def`` або ``class``)" #: ../../src/basics/variables.txt:50 -#, fuzzy msgid "start with a number (e.g. ``123``, ``1_something``)" msgstr "починатись з числа (наприклад, ``123``, ``1_something``)" #: ../../src/basics/variables.txt:51 -#, fuzzy msgid "contain special operators in it (``+``, ``-``, ``=`` etc.)" msgstr "містити спеціальні оператори (``+``, ``-``, ``=`` тощо)." #: ../../src/basics/variables.txt:52 -#, fuzzy msgid "contain white spaces" msgstr "містити пробіли" #: ../../src/basics/variables.txt:54 -#, fuzzy msgid "Also here are some general recommendation on naming anything:" msgstr "" "Також тут є кілька загальних рекомендацій щодо того, як називати будь-що:" #: ../../src/basics/variables.txt:56 -#, fuzzy msgid "do not use built-in functions as a variable name (e.g. ``len = 42``)" msgstr "" "не використовуйте вбудовані функції як ім'я змінної (наприклад, ``len = 42``)" #: ../../src/basics/variables.txt:57 -#, fuzzy msgid "keep names meaningful (``x = 10`` vs ``number_of_student = 100``)" msgstr "" "зберігайте змістовність імен (``x = 10`` проти ``number_of_student = 100``)" From 025871194e6d5edc80fb6ab80564a4cf8bec59c3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 18 Oct 2023 00:17:57 +0300 Subject: [PATCH 452/689] Complete check on bool_logic document translations --- .../uk/LC_MESSAGES/basics/bool_logic.po | 151 ++++-------------- 1 file changed, 29 insertions(+), 122 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po index d26d3cdc1..708b3b35f 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po +++ b/src/_locales/uk/LC_MESSAGES/basics/bool_logic.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:16+0300\n" +"PO-Revision-Date: 2023-10-18 00:17+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,29 +20,24 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/bool_logic.txt:-1 -#, fuzzy msgid "this document covers usage of logic and comparison operators in Python" msgstr "" "у цьому документі розглядається використання логічних операторів та " "операторів порівняння у Python" #: ../../src/basics/bool_logic.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/bool_logic.txt:-1 -#, fuzzy msgid "python, boolean, logic, comparison, operator" msgstr "python, boolean, logic, comparison, operator" #: ../../src/basics/bool_logic.txt:14 -#, fuzzy msgid "Boolean Logic" msgstr "Булева Логіка" #: ../../src/basics/bool_logic.txt:20 -#, fuzzy msgid "" "`George Boole`_ put together what is now known as `Boolean algebra`_, which " "relies on **true** and **false** values and define a set of boolean " @@ -50,10 +45,9 @@ msgid "" msgstr "" "`Джордж Буль`_ створив те, що зараз відоме як `булева алгебра`_, яка " "спирається на значення **істина** та **хибність** і визначає набір булевих " -"операцій: **не**, **і** та **або**." +"операцій: **not**, **and** та **or**." #: ../../src/basics/bool_logic.txt:24 -#, fuzzy msgid "" "These Boolean values and operators are helpful in programming because they " "help you decide the course of action in your programs." @@ -62,7 +56,6 @@ msgstr "" "допомагають вам визначати порядок дій у ваших програмах." #: ../../src/basics/bool_logic.txt:27 -#, fuzzy msgid "" "The **Python boolean** type is one of Python's built-in data types. It's " "used to represent the truth value of an expression. For example, the " @@ -72,17 +65,15 @@ msgid "" msgstr "" "Тип **Python boolean** є одним із вбудованих типів даних Python. Він " "використовується для представлення значення істинності виразу. Наприклад, " -"вираз ``1 < 2`` є ``True`` (істине), тоді як вираз ``0 == 1`` є ``False`` " -"(хибне). Розуміння того, як поводяться булеві значення у Python, є важливим " +"вираз ``1 < 2`` є ``True`` (істина), тоді як вираз ``0 == 1`` є ``False`` " +"(хибний). Розуміння того, як поводяться булеві значення у Python, є важливим " "для якісного програмування на Python." #: ../../src/basics/bool_logic.txt:34 -#, fuzzy msgid "Understanding Boolean" msgstr "Розуміння булевих функцій" #: ../../src/basics/bool_logic.txt:36 -#, fuzzy msgid "The Boolean type has only two possible values:" msgstr "Тип Boolean має лише два можливих значення:" @@ -91,7 +82,6 @@ msgstr "Тип Boolean має лише два можливих значення: #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:189 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 -#, fuzzy msgid "``True``" msgstr "``True``" @@ -100,17 +90,14 @@ msgstr "``True``" #: ../../src/basics/bool_logic.txt:151 ../../src/basics/bool_logic.txt:153 #: ../../src/basics/bool_logic.txt:191 ../../src/basics/bool_logic.txt:193 #: ../../src/basics/bool_logic.txt:195 -#, fuzzy msgid "``False``" msgstr "``False``" #: ../../src/basics/bool_logic.txt:41 -#, fuzzy msgid "No other value will have ``bool`` as it type." msgstr "Жодне інше значення не буде мати тип ``bool``." #: ../../src/basics/bool_logic.txt:50 -#, fuzzy msgid "" "The type ``bool`` is **built-in**, meaning it's always available in Python. " "``True`` and ``False`` are keywords in Python and can't be used as variable " @@ -119,16 +106,14 @@ msgid "" msgstr "" "Тип ``bool`` є **вбудованим**, тобто він завжди доступний у Python. ``True`` " "та ``False`` є ключовими словами у Python і не можуть використовуватися як " -"імена змінних, але тип ``bool`` не є таким, і його можна присвоювати імені " -"``bool``, однак це вважається поганим стилем." +"імена змінних, але тип ``bool`` не є таким, і можна зробити змінну ``bool``, " +"однак це вважається поганим стилем." #: ../../src/basics/bool_logic.txt:56 -#, fuzzy msgid "Boolean as numbers" msgstr "Булеві як числа" #: ../../src/basics/bool_logic.txt:58 -#, fuzzy msgid "" "Booleans are a subtype of **numeric** type in Python. This means they're " "numbers for all intents and purposes. In other words, you can apply " @@ -138,37 +123,32 @@ msgstr "" "Булеві вирази є підтипом **числового** типу у Python. Це означає, що вони є " "числами за всіма ознаками. Іншими словами, до булевих типів можна " "застосовувати арифметичні операції, а також порівнювати їх з числами. " -"Значення ``Істина`` розглядається як 1, а значення ``Неправда`` " -"розглядається як 0." +"Значення ``True`` розглядається як 1, а значення ``False`` розглядається як " +"0." #: ../../src/basics/bool_logic.txt:63 -#, fuzzy msgid "There aren't many uses of the numerical nature of Boolean values." msgstr "Існує не так багато застосувань числової природи булевих значень." #: ../../src/basics/bool_logic.txt:66 -#, fuzzy msgid "Truth value testing" msgstr "Перевірка істинності" #: ../../src/basics/bool_logic.txt:68 -#, fuzzy msgid "" "Any object can be tested for truth value. By default an object considered " "``True``, unless its class defines either. Here are most of built-in objects " "considered ``False``:" msgstr "" "Будь-який об'єкт можна перевірити на істинність. За замовчуванням об'єкт " -"вважається ``Істинним``, якщо його клас не визначає іншого значення. " -"Більшість вбудованих об'єктів вважаються такими, що мають значення ``False``:" +"вважається ``True``, якщо його клас не визначає іншого значення. Ось " +"більшість вбудованих об'єктів, що мають значення ``False``:" #: ../../src/basics/bool_logic.txt:72 -#, fuzzy msgid "constant values: ``None`` and ``False``" msgstr "константні значення: ``None`` та ``False``" #: ../../src/basics/bool_logic.txt:73 -#, fuzzy msgid "" "zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " "``Fraction(0, 1)``" @@ -177,7 +157,6 @@ msgstr "" "``Fraction(0, 1)``" #: ../../src/basics/bool_logic.txt:75 -#, fuzzy msgid "" "empty sequences and collections: ``''``, ``[]``, ``()``, ``{}``, ``set()``, " "``range(0)``." @@ -186,7 +165,6 @@ msgstr "" "``set()``, ``range(0)``." #: ../../src/basics/bool_logic.txt:80 -#, fuzzy msgid "" "If ``len(something)`` is equal to 0, than ``something`` is cast to ``bool`` " "as ``False``." @@ -195,57 +173,46 @@ msgstr "" "як ``False``." #: ../../src/basics/bool_logic.txt:84 -#, fuzzy msgid "Boolean comparison" msgstr "Логічне порівняння" #: ../../src/basics/bool_logic.txt:86 -#, fuzzy msgid "Python provides 3 logical operators:" msgstr "У мові Python передбачено 3 логічних оператори:" #: ../../src/basics/bool_logic.txt:92 ../../src/basics/bool_logic.txt:226 -#, fuzzy msgid "Operator" msgstr "Оператор" #: ../../src/basics/bool_logic.txt:92 -#, fuzzy msgid "Logic operator" msgstr "Логічний оператор" #: ../../src/basics/bool_logic.txt:94 -#, fuzzy msgid "``not``" -msgstr "ні" +msgstr "``not``" #: ../../src/basics/bool_logic.txt:94 -#, fuzzy msgid "Negation" msgstr "Заперечення" #: ../../src/basics/bool_logic.txt:96 -#, fuzzy msgid "``and``" -msgstr "і.." +msgstr "``and``" #: ../../src/basics/bool_logic.txt:96 -#, fuzzy msgid "Conjunction" msgstr "Кон'юнкція" #: ../../src/basics/bool_logic.txt:98 -#, fuzzy msgid "``or``" -msgstr "або.." +msgstr "``or``" #: ../../src/basics/bool_logic.txt:98 -#, fuzzy msgid "Disjunction" msgstr "Диз'юнкція" #: ../../src/basics/bool_logic.txt:101 -#, fuzzy msgid "" "With these operators, you can build expressions by connecting Boolean " "expressions with each other. These operators are **keywords** of the " @@ -257,12 +224,10 @@ msgstr "" "можете використовувати їх як ідентифікатори, не викликавши *SyntaxError*." #: ../../src/basics/bool_logic.txt:106 -#, fuzzy msgid "Getting started with ``not`` operator" msgstr "Початок роботи з оператором ``not``" #: ../../src/basics/bool_logic.txt:108 -#, fuzzy msgid "" "The ``not`` operator is the Boolean or logic operator that implements " "negation in Python. It's **unary**, which means that it takes only one " @@ -276,27 +241,22 @@ msgstr "" "свого операнда на протилежне." #: ../../src/basics/bool_logic.txt:113 -#, fuzzy msgid "not operator truth table" msgstr "таблиця істинності оператора not" #: ../../src/basics/bool_logic.txt:117 -#, fuzzy msgid "``operand``" msgstr "``операнд``" #: ../../src/basics/bool_logic.txt:117 -#, fuzzy msgid "``not operand``" msgstr "``not операнд``" #: ../../src/basics/bool_logic.txt:124 -#, fuzzy msgid "This functionality makes it worthwhile in several situations:" msgstr "Ця функціональність робить його корисним у кількох ситуаціях:" #: ../../src/basics/bool_logic.txt:127 -#, fuzzy msgid "" "Checking **unmet conditions** in the context of ``if`` statements and " "``while`` loops" @@ -305,27 +265,22 @@ msgstr "" "``while``" #: ../../src/basics/bool_logic.txt:129 -#, fuzzy msgid "**Inverting the truth value** of an object or expression" msgstr "**Інвертування значення істинності** об'єкта або виразу" #: ../../src/basics/bool_logic.txt:130 -#, fuzzy msgid "Checking if a **value is not in a given container**" msgstr "Перевірка, чи **значення не знаходиться у заданому контейнері**" #: ../../src/basics/bool_logic.txt:131 -#, fuzzy msgid "Checking for an **object's identity**" msgstr "Перевірка **ідентичності об'єкта**" #: ../../src/basics/bool_logic.txt:134 -#, fuzzy msgid "Getting started with ``and`` operator" msgstr "Початок роботи з оператором ``and``" #: ../../src/basics/bool_logic.txt:136 -#, fuzzy msgid "" "Python's ``and`` operator is **binary**, which means it takes two " "**operands**. The operands in an ``and`` expression are commonly known as " @@ -333,60 +288,48 @@ msgid "" "operands. It'll be ``True`` if **both** are true." msgstr "" "Оператор ``and`` у мові Python є **двійковим**, що означає, що він приймає " -"два **операнди**. Операнди у виразі ``і`` зазвичай називають *умовами*. " +"два **операнди**. Операнди у виразі ``and`` зазвичай називають *умовами*. " "Результат оператора залежить від значень істинності його операндів. " -"Результат буде ``Істина``, якщо **обоє** є істинними." +"Результат буде ``True``, якщо **обоє** є істинними." #: ../../src/basics/bool_logic.txt:141 -#, fuzzy msgid "and operator truth table" msgstr "таблиця істинності оператора and" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 -#, fuzzy msgid "``operand_1``" msgstr "``operand_1``" #: ../../src/basics/bool_logic.txt:145 ../../src/basics/bool_logic.txt:187 -#, fuzzy msgid "``operand_2``" msgstr "``operand_2``" #: ../../src/basics/bool_logic.txt:145 -#, fuzzy msgid "``operand_1 and operand_2``" msgstr "``operand_1 and operand_2``" #: ../../src/basics/bool_logic.txt:156 -#, fuzzy msgid "" "``and`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "``and`` працює не тільки з операндами булевого типу. Це поведінка:" +msgstr "``and`` працює не тільки з операндами булевого типу. Ось алгоритм:" #: ../../src/basics/bool_logic.txt:159 -#, fuzzy msgid "evaluate 1st operand; return it, if it's ``False`` and finish" -msgstr "" -"обчислити 1-й операнд; повернути його, якщо він рівний ``False`` і завершити" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``False`` і завершити" #: ../../src/basics/bool_logic.txt:160 -#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``False`` and finish" -msgstr "" -"обчислити 2-й операнд; повернути його, якщо він рівний ``False`` і завершити" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``False`` і завершити" #: ../../src/basics/bool_logic.txt:161 ../../src/basics/bool_logic.txt:203 -#, fuzzy msgid "return 2nd operand" msgstr "повернути 2-й операнд" #: ../../src/basics/bool_logic.txt:175 -#, fuzzy msgid "Getting started with ``or`` operator" msgstr "Початок роботи з оператором ``or``" #: ../../src/basics/bool_logic.txt:177 -#, fuzzy msgid "" "With Boolean ``or`` operator, you can connect two Boolean expressions into " "one compound expression. This makes ``or`` the **binary** operator. At least " @@ -394,47 +337,38 @@ msgid "" "considered ``True``, and it doesn't matter which. If both subexpressions are " "``False``, then the expression is ``False``." msgstr "" -"За допомогою булевого оператора ``або`` ви можете об'єднати два булевих " -"вирази в один складений вираз. Це робить ``або`` **бінарним** оператором. " +"За допомогою булевого оператора ``or`` ви можете об'єднати два булевих " +"вирази в один складений вираз. Це робить ``or`` **бінарним** оператором. " "Принаймні один з підвиразів має бути ``True``, щоб складений вираз вважався " "``True``, і не має значення, який саме. Якщо обидва під-вирази мають " "значення ``False``, то вираз буде вважатися ``False``." #: ../../src/basics/bool_logic.txt:183 -#, fuzzy msgid "or operator truth table" msgstr "таблиця істинності оператора or" #: ../../src/basics/bool_logic.txt:187 -#, fuzzy msgid "``operand_1 or operand_2``" msgstr "``operand_1 or operand_2``" #: ../../src/basics/bool_logic.txt:198 -#, fuzzy msgid "" "``or`` operator works not only with operands of Boolean type. It's behavior:" -msgstr "``or`` працює не тільки з операндами булевого типу. Це поведінка:" +msgstr "``or`` працює не тільки з операндами булевого типу. Ось алгоритм:" #: ../../src/basics/bool_logic.txt:201 -#, fuzzy msgid "evaluate 1st operand; return it, if it's ``True`` and finish" -msgstr "" -"обчислити 1-й операнд; повернути його, якщо він рівний ``True`` і завершити" +msgstr "обчислити 1-й операнд; повернути його, якщо він ``True`` і завершити" #: ../../src/basics/bool_logic.txt:202 -#, fuzzy msgid "evaluate 2nd operand; return it, if it's ``True`` and finish" -msgstr "" -"обчислити 2-й операнд; повернути його, якщо він рівний ``True`` і завершити" +msgstr "обчислити 2-й операнд; повернути його, якщо він ``True`` і завершити" #: ../../src/basics/bool_logic.txt:217 -#, fuzzy msgid "Comparison" msgstr "Порівняння" #: ../../src/basics/bool_logic.txt:219 -#, fuzzy msgid "" "There are eight comparison operations in Python. They all have the same " "priority (which is higher than that of the Boolean operations)." @@ -443,97 +377,78 @@ msgstr "" "пріоритет (вищий, ніж у булевих операцій)." #: ../../src/basics/bool_logic.txt:222 -#, fuzzy msgid "Comparison operators" msgstr "Оператори порівняння" #: ../../src/basics/bool_logic.txt:226 -#, fuzzy msgid "Meaning" msgstr "Значення" #: ../../src/basics/bool_logic.txt:228 -#, fuzzy msgid "``<``" msgstr "``<``" #: ../../src/basics/bool_logic.txt:228 -#, fuzzy msgid "strictly less than" msgstr "строго менше, ніж" #: ../../src/basics/bool_logic.txt:230 -#, fuzzy msgid "``<=``" msgstr "``<=``" #: ../../src/basics/bool_logic.txt:230 -#, fuzzy msgid "less than or equal" msgstr "менше або дорівнює" #: ../../src/basics/bool_logic.txt:232 -#, fuzzy msgid "``>``" msgstr "``>``" #: ../../src/basics/bool_logic.txt:232 -#, fuzzy msgid "strictly greater than" msgstr "строго більше, ніж" #: ../../src/basics/bool_logic.txt:234 -#, fuzzy msgid "``>=``" msgstr "``>=``" #: ../../src/basics/bool_logic.txt:234 -#, fuzzy msgid "greater or equal" msgstr "більше або дорівнює" #: ../../src/basics/bool_logic.txt:236 -#, fuzzy msgid "``==``" msgstr "``==``" #: ../../src/basics/bool_logic.txt:236 -#, fuzzy msgid "equal (aka *equality* comparison)" msgstr "дорівнює (також відоме як *equality* порівняння)" #: ../../src/basics/bool_logic.txt:238 -#, fuzzy msgid "``!=``" msgstr "``!=``" #: ../../src/basics/bool_logic.txt:238 -#, fuzzy msgid "not equal" msgstr "не дорівнює" #: ../../src/basics/bool_logic.txt:240 -#, fuzzy msgid "``is``" -msgstr "це.." +msgstr "``is``" #: ../../src/basics/bool_logic.txt:240 -#, fuzzy msgid "object identity" msgstr "ідентичність об'єктів" #: ../../src/basics/bool_logic.txt:242 -#, fuzzy msgid "``is not``" -msgstr "не є" +msgstr "``is not``" #: ../../src/basics/bool_logic.txt:242 -#, fuzzy msgid "negated object identity" msgstr "заперечення ідентичності об'єкта" #: ../../src/basics/bool_logic.txt:245 -#, fuzzy msgid "" "Each of these comparison operators return a Boolean value, it's always " "``True`` or ``False``." @@ -542,21 +457,18 @@ msgstr "" "або ``False``." #: ../../src/basics/bool_logic.txt:248 -#, fuzzy msgid "" "You can chain comparison operators together: ``x < y < z`` is equal to ``x < " "y and y < z``." msgstr "" -"Ви можете з'єднувати оператори порівняння ланцюжком: ``x < y < z`` дорівнює " -"``x < y та y < z``." +"Ви можете з'єднувати оператори порівняння ланцюжком: ``x < y < z`` " +"еквівалентне ``x < y and y < z``." #: ../../src/basics/bool_logic.txt:252 -#, fuzzy msgid "Equality vs Identity" -msgstr "Рівність vs Ідентичністі" +msgstr "Рівність та Ідентичність" #: ../../src/basics/bool_logic.txt:254 -#, fuzzy msgid "" "It's easier to understand the difference between those by asking the " "question each answers to." @@ -565,27 +477,22 @@ msgstr "" "кожна з них." #: ../../src/basics/bool_logic.txt:257 -#, fuzzy msgid "The question for ``==`` (*equality*) is:" msgstr "Питання для ``==`` (*рівності*) полягає у наступному:" #: ../../src/basics/bool_logic.txt:259 -#, fuzzy msgid "Is object on the left **equal** to the object on the right" msgstr "Чи є об'єкт зліва **рівним** об'єкту справа" #: ../../src/basics/bool_logic.txt:261 -#, fuzzy msgid "The question for ``is`` (*identity*) is:" msgstr "Питання для ``is`` (*ідентичність*) полягає в наступному:" #: ../../src/basics/bool_logic.txt:263 -#, fuzzy msgid "Is object on the left **the same** as the object on the right" -msgstr "Чи є об'єкт ліворуч **таким самим**, як і об'єкт праворуч" +msgstr "Чи є об'єкт ліворуч **тим самим**, як і об'єкт праворуч" #: ../../src/basics/bool_logic.txt:265 -#, fuzzy msgid "" "For example, if there are two cars of the same model, same color etc. in " "front of you - these cars are equal, but they aren't ident to each other. " From 89a22f6397790b39ed18c3da7f816b731f6e5faf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 18 Oct 2023 12:58:46 +0300 Subject: [PATCH 453/689] Complete check on decorators document translations --- .../uk/LC_MESSAGES/basics/decorators.po | 55 +------------------ 1 file changed, 3 insertions(+), 52 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/decorators.po b/src/_locales/uk/LC_MESSAGES/basics/decorators.po index 77d39c0aa..368055a22 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/decorators.po +++ b/src/_locales/uk/LC_MESSAGES/basics/decorators.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:16+0300\n" +"PO-Revision-Date: 2023-10-18 12:57+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,27 +20,22 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/decorators.txt:-1 -#, fuzzy msgid "Python decorators" msgstr "Декоратори в Python" #: ../../src/basics/decorators.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/decorators.txt:-1 -#, fuzzy msgid "python, basics, decorators" msgstr "python, basics, decorators" #: ../../src/basics/decorators.txt:11 -#, fuzzy msgid "Decorators" msgstr "Декоратори" #: ../../src/basics/decorators.txt:13 -#, fuzzy msgid "" "Decorators provide a simple syntax for calling higher-order functions :cite:" "`realpython:decorators`." @@ -49,7 +44,6 @@ msgstr "" "cite:`realpython:decorators`." #: ../../src/basics/decorators.txt:18 -#, fuzzy msgid "There is some kind of misunderstanding in definitions." msgstr "Існує певне непорозуміння у визначеннях." @@ -83,7 +77,6 @@ msgstr "" "які містять поведінку :cite:`refactoring.guru:decorator`." #: ../../src/basics/decorators.txt:31 -#, fuzzy msgid "" "Before you understand decorators, you must first understand how functions " "work." @@ -91,12 +84,10 @@ msgstr "" "Перш ніж розбиратися в декораторах, потрібно зрозуміти, як працюють функції." #: ../../src/basics/decorators.txt:35 -#, fuzzy msgid "First-class objects" msgstr "Об'єкти першого класу" #: ../../src/basics/decorators.txt:37 -#, fuzzy msgid "" "In Python functions are `first-class objects`_. Everything in Python is an " "object. Functions are objects too." @@ -105,12 +96,10 @@ msgstr "" "Функції також є об'єктами." #: ../../src/basics/decorators.txt:41 -#, fuzzy msgid "Inner functions" msgstr "Внутрішні функції" #: ../../src/basics/decorators.txt:43 -#, fuzzy msgid "" "Functions can be nested. This means it is possible to define functions " "inside other functions." @@ -119,12 +108,10 @@ msgstr "" "всередині інших функцій." #: ../../src/basics/decorators.txt:46 -#, fuzzy msgid "Nested functions example" msgstr "Приклад вкладених функцій" #: ../../src/basics/decorators.txt:60 -#, fuzzy msgid "" "The order in which inner functions are defined no matters. The function " "definition does not execute the function body; this gets executed only when " @@ -140,12 +127,10 @@ msgstr "" "``heapify`` поза ``heap_sort`` призведе до виключення ``NameError``." #: ../../src/basics/decorators.txt:68 -#, fuzzy msgid "Functions are objects" msgstr "Функції є об'єктами" #: ../../src/basics/decorators.txt:70 -#, fuzzy msgid "" "This means functions can be passed around and used as arguments, just like " "any other object (e.g. *int*, *str* etc.)." @@ -154,12 +139,10 @@ msgstr "" "само, як і будь-які інші об'єкти (наприклад, *int*, *str* тощо)." #: ../../src/basics/decorators.txt:95 -#, fuzzy msgid "Returning functions" msgstr "Повернення функцій" #: ../../src/basics/decorators.txt:97 -#, fuzzy msgid "" "Since function can be passed as an argument, it may be returned from another " "function." @@ -168,12 +151,10 @@ msgstr "" "іншої функції." #: ../../src/basics/decorators.txt:120 -#, fuzzy msgid "``parent`` returns functions themselves, there are no parentheses." msgstr "``parent`` повертає самі функції, дужок немає." #: ../../src/basics/decorators.txt:122 -#, fuzzy msgid "" "After running the code snippet above, ``first`` refers the ``first_child`` " "function from the inner ``parent`` scope. From now it can be used to call " @@ -184,12 +165,10 @@ msgstr "" "можна використовувати для виклику цільової функції, на яку вона посилається." #: ../../src/basics/decorators.txt:134 -#, fuzzy msgid "Simple decorators" msgstr "Прості декоратори" #: ../../src/basics/decorators.txt:136 -#, fuzzy msgid "" "Now you're ready to move on and see the magical beast that is the Python " "decorators. Let's start with a simple example:" @@ -198,12 +177,10 @@ msgstr "" "Python. Почнемо з простого прикладу:" #: ../../src/basics/decorators.txt:154 -#, fuzzy msgid "Running function:" msgstr "Запуск функцій:" #: ../../src/basics/decorators.txt:165 -#, fuzzy msgid "" "The common way to use decorators is to replace the original function with a " "decorated one:" @@ -212,7 +189,6 @@ msgstr "" "функції на декоровану:" #: ../../src/basics/decorators.txt:176 -#, fuzzy msgid "" "``say_hello`` function is the reference to the ``decorator.." "wrapper``, which itself is bound to the original ``say_hello`` function. " @@ -225,16 +201,14 @@ msgstr "" "робить те саме, що і перший приклад декоратора:" #: ../../src/basics/decorators.txt:198 -#, fuzzy msgid "" "There is no way to *undecorate* object in Python. Once something is bound to " "the decorator's wrapper - it is decorated forever." msgstr "" -"У Python не існує способу *віддекорувати* об'єкт. Як тільки щось прив'язано " +"У Python не існує способу *роздекорувати* об'єкт. Як тільки щось прив'язано " "до обгортки декоратора - воно прикрашене назавжди." #: ../../src/basics/decorators.txt:201 -#, fuzzy msgid "" "A decorated function still remains a **function**. So, it can be decorated " "once more time again, and again, and again..." @@ -243,7 +217,6 @@ msgstr "" "прикрасити ще раз, і ще раз, і ще раз, і ще раз..." #: ../../src/basics/decorators.txt:253 -#, fuzzy msgid "" "\"Wrapper\" is the alternative nickname for the Decorator pattern that " "clearly expresses the main idea of the pattern. A wrapper is an object that " @@ -260,12 +233,10 @@ msgstr "" "цільовому об'єкту." #: ../../src/basics/decorators.txt:261 -#, fuzzy msgid "Passing arguments to the wrapper" msgstr "Передача аргументів в обгортку" #: ../../src/basics/decorators.txt:263 -#, fuzzy msgid "" "Until now the examples use *simple* decorators. But what if the decorated " "function gets some arguments? This will cause ``TypeError`` exception that " @@ -275,10 +246,9 @@ msgstr "" "Досі у прикладах використовувались *прості* декоратори. Але що, якщо " "декорована функція отримає якісь аргументи? Це викличе виключення " "``TypeError``, яке скаже, що \"аргументи пропущено\". Це можна виправити, " -"просто передавши аргументи у внутрішню функцію ``обгортки``." +"просто передавши аргументи у внутрішню функцію ``wrapper``." #: ../../src/basics/decorators.txt:289 -#, fuzzy msgid "" "If case you're trying to make a generic decorator, you may pass ``*args`` " "and ``**kwargs`` instead of exact arguments:" @@ -287,12 +257,10 @@ msgstr "" "``*args`` і ``**kwargs`` замість точних аргументів:" #: ../../src/basics/decorators.txt:308 -#, fuzzy msgid "Passing arguments to decorator" msgstr "Передача аргументів до декоратора" #: ../../src/basics/decorators.txt:310 -#, fuzzy msgid "" "At last it's time to know how to pass arguments to the decorator. Here is a " "simple implementation of ``defer`` decorator which deferred the function " @@ -303,12 +271,10 @@ msgstr "" "деякий час:" #: ../../src/basics/decorators.txt:353 -#, fuzzy msgid "Class decorators" msgstr "Декоратори класів" #: ../../src/basics/decorators.txt:355 -#, fuzzy msgid "" "There are some pre-defined decorators exists for usage together with " "classes. They are:" @@ -317,22 +283,18 @@ msgstr "" "класами. Ось вони:" #: ../../src/basics/decorators.txt:358 -#, fuzzy msgid "``classmethod``" msgstr "``classmethod``" #: ../../src/basics/decorators.txt:359 -#, fuzzy msgid "``staticmethod``" msgstr "``staticmethod``" #: ../../src/basics/decorators.txt:360 -#, fuzzy msgid "``property``" msgstr "``property``" #: ../../src/basics/decorators.txt:362 -#, fuzzy msgid "" "If you develop an intuitive understanding for their differences you'll be " "able to write object-oriented Python that communicates its intent more " @@ -345,12 +307,10 @@ msgstr "" "methods-demystified`." #: ../../src/basics/decorators.txt:368 -#, fuzzy msgid "Class methods" msgstr "Методи класу" #: ../../src/basics/decorators.txt:370 -#, fuzzy msgid "" "Instead of accepting a ``self`` parameter, class methods take a ``cls`` " "parameter that points to the class — and not the object instance — when the " @@ -361,7 +321,6 @@ msgstr "" "виклику методу." #: ../../src/basics/decorators.txt:374 -#, fuzzy msgid "" "Because the class method only has access to this ``cls`` argument, it can't " "modify object instance state. That would require access to ``self``. " @@ -374,7 +333,6 @@ msgstr "" "до всіх екземплярів класу." #: ../../src/basics/decorators.txt:379 -#, fuzzy msgid "" "The common usage for ``classmethod`` is provide alternative initializers." msgstr "" @@ -382,12 +340,10 @@ msgstr "" "ініціалізаторів." #: ../../src/basics/decorators.txt:382 -#, fuzzy msgid "Static methods" msgstr "Статичні методи" #: ../../src/basics/decorators.txt:384 -#, fuzzy msgid "" "This type of method takes neither a ``self`` nor a ``cls`` parameter (but of " "course it's free to accept an arbitrary number of other parameters)." @@ -396,7 +352,6 @@ msgstr "" "звичайно, він може приймати довільну кількість інших параметрів)." #: ../../src/basics/decorators.txt:387 -#, fuzzy msgid "" "Therefore a static method can neither modify object state nor class state. " "Static methods are restricted in what data they can access - and they're " @@ -407,7 +362,6 @@ msgstr "" "це, насамперед, спосіб організації простору імен ваших методів." #: ../../src/basics/decorators.txt:391 -#, fuzzy msgid "" "It's tricky to explain ``staticmethod`` usage. Almost always you can create " "a dedicated function instead of static method. But sometimes you need to " @@ -420,12 +374,10 @@ msgstr "" "екземплярів, і тоді прийнято інкапсулювати її за допомогою ``staticmethod``." #: ../../src/basics/decorators.txt:397 -#, fuzzy msgid "Properties" msgstr "Властивості" #: ../../src/basics/decorators.txt:399 -#, fuzzy msgid "" "It's a way to bind a method name to access it as an attribute. Properties " "are **read-only** by default. This means a value cannot be assigned to " @@ -436,6 +388,5 @@ msgstr "" "властивості не можна присвоїти значення." #: ../../src/basics/decorators.txt:404 -#, fuzzy msgid "Some examples" msgstr "Деякі приклади" From 73d07de92247c8a45a8d7285dd4304a408e6726d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 24 Oct 2023 23:42:34 +0300 Subject: [PATCH 454/689] Complete check on stdtypes document translation --- .../uk/LC_MESSAGES/basics/stdtypes.po | 165 ++---------------- 1 file changed, 17 insertions(+), 148 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po index 413e5dda3..ce7bc7a62 100644 --- a/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po +++ b/src/_locales/uk/LC_MESSAGES/basics/stdtypes.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-17 23:16+0300\n" +"PO-Revision-Date: 2023-10-24 23:41+0300\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -20,27 +20,22 @@ msgstr "" "X-Generator: Poedit 3.4\n" #: ../../src/basics/stdtypes.txt:-1 -#, fuzzy msgid "Python built-in types" msgstr "Вбудовані типи даних в Python" #: ../../src/basics/stdtypes.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/basics/stdtypes.txt:-1 -#, fuzzy msgid "python, basics" msgstr "python, basics" #: ../../src/basics/stdtypes.txt:11 -#, fuzzy msgid "Built-in Types" msgstr "Вбудовані Типи" #: ../../src/basics/stdtypes.txt:13 -#, fuzzy msgid "" "The principal built-in types are numerics, sequences, mappings, classes, " "instances and exceptions :cite:`docs-python:stdtypes`. This section covers " @@ -53,12 +48,10 @@ msgstr "" "відповідних темах." #: ../../src/basics/stdtypes.txt:19 -#, fuzzy msgid "Numeric types" msgstr "Числові типи" #: ../../src/basics/stdtypes.txt:21 -#, fuzzy msgid "" "There are 3 distinct numeric types: *integers*, *floating point numbers*, " "and *complex numbers*. In addition, Booleans are a subtype of integers. " @@ -67,13 +60,12 @@ msgid "" "part, which are each a floating point number." msgstr "" "Існує 3 різних числових типи: *цілі числа*, *числа з плаваючою комою* та " -"*комплексні числа*. Крім того, булеві числа є підтипом цілих чисел. Цілі " +"*комплексні числа*. Крім того, булеві значення є підтипом цілих чисел. Цілі " "числа мають необмежену точність. Числа з плаваючою комою зазвичай " "реалізуються за допомогою ``double`` у C. Комплексні числа мають дійсну та " "уявну частини, кожна з яких є числом з плаваючою комою." #: ../../src/basics/stdtypes.txt:27 -#, fuzzy msgid "" "Numbers are created by numeric literals or as the result of built-in " "functions and operators. Unadorned integer literals (including hex, octal " @@ -84,148 +76,121 @@ msgid "" "number with real and imaginary parts." msgstr "" "Числа створюються за допомогою числових літералів або як результат " -"вбудованих функцій та операторів. Цілі літерали без прикрас (включаючи " -"шістнадцяткові, вісімкові та двійкові числа) створюють цілі числа. Числові " -"літерали, що містять десяткову крапку або знак експоненти, дають числа з " -"плаваючою комою. Додавання ``j`` або ``J`` до числового літерала дає уявне " -"число (комплексне число з нульовою дійсною частиною), яке ви можете додати " -"до цілого числа або числа з плаваючою комою, щоб отримати комплексне число з " -"дійсною та уявною частинами." +"вбудованих функцій та операторів. Цілочислені літерали без додатків " +"(включаючи шістнадцяткові, вісімкові та двійкові числа) створюють цілі " +"числа. Числові літерали, що містять десяткову крапку або знак експоненти, " +"дають числа з плаваючою комою. Додавання ``j`` або ``J`` до числового " +"літерала дає уявне число (комплексне число з нульовою дійсною частиною), яке " +"ви можете додати до цілого числа або числа з плаваючою комою, щоб отримати " +"комплексне число з дійсною та уявною частинами." #: ../../src/basics/stdtypes.txt:36 -#, fuzzy msgid "Supported operations" msgstr "Операції, які підтримуються" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 -#, fuzzy msgid "Operation" msgstr "Операція" #: ../../src/basics/stdtypes.txt:39 ../../src/basics/stdtypes.txt:159 #: ../../src/basics/stdtypes.txt:209 -#, fuzzy msgid "Result" msgstr "Результат" #: ../../src/basics/stdtypes.txt:41 -#, fuzzy msgid "``x + y``" msgstr "``x + y``" #: ../../src/basics/stdtypes.txt:41 -#, fuzzy msgid "sum of *x* and *y*" msgstr "сума *x* і *y*" #: ../../src/basics/stdtypes.txt:43 -#, fuzzy msgid "``x - y``" msgstr "``x - y``" #: ../../src/basics/stdtypes.txt:43 -#, fuzzy msgid "difference of *x* and *y*" -msgstr "різниця між *x* і *y*" +msgstr "різниця *x* і *y*" #: ../../src/basics/stdtypes.txt:45 -#, fuzzy msgid "``x * y``" msgstr "``x * y``" #: ../../src/basics/stdtypes.txt:45 -#, fuzzy msgid "product of *x* and *y*" msgstr "добуток *x* і *y*" #: ../../src/basics/stdtypes.txt:47 -#, fuzzy msgid "``x / y``" -msgstr "``x + y``" +msgstr "``x / y``" #: ../../src/basics/stdtypes.txt:47 -#, fuzzy msgid "quotient of *x* and *y*" msgstr "частка *x* і *y*" #: ../../src/basics/stdtypes.txt:49 -#, fuzzy msgid "``x // y``" -msgstr "``x + y``" +msgstr "``x // y``" #: ../../src/basics/stdtypes.txt:49 -#, fuzzy msgid "floored quotient of *x* and *y*" -msgstr "цілочисельне ділення *x* і *y*" +msgstr "поділ націло *x* і *y*" #: ../../src/basics/stdtypes.txt:51 -#, fuzzy msgid "``x % y``" -msgstr "``x + y``" +msgstr "``x % y``" #: ../../src/basics/stdtypes.txt:51 -#, fuzzy msgid "remainder of ``x / y``" msgstr "залишок від ділення ``x / y``" #: ../../src/basics/stdtypes.txt:53 -#, fuzzy msgid "``-x``" msgstr "``-x``" #: ../../src/basics/stdtypes.txt:53 -#, fuzzy msgid "*x* negated" msgstr "*x* від'ємне" #: ../../src/basics/stdtypes.txt:55 -#, fuzzy msgid "``+x``" msgstr "``+x``" #: ../../src/basics/stdtypes.txt:55 -#, fuzzy msgid "*x* unchanged" -msgstr "*y* без змін" +msgstr "*x* без змін" #: ../../src/basics/stdtypes.txt:57 -#, fuzzy msgid "``abs(x)``" msgstr "``abs(x)``" #: ../../src/basics/stdtypes.txt:57 -#, fuzzy msgid "absolute value or magnitude of *x*" msgstr "абсолютне значення або величина *x*" #: ../../src/basics/stdtypes.txt:59 -#, fuzzy msgid "``int(x)``" msgstr "``int(x)``" #: ../../src/basics/stdtypes.txt:59 -#, fuzzy msgid "*x* converted to integer" -msgstr "*x* перетворено в ціле число" +msgstr "*x* перетворене в ціле число" #: ../../src/basics/stdtypes.txt:61 -#, fuzzy msgid "``float(x)``" msgstr "``float(x)``" #: ../../src/basics/stdtypes.txt:61 -#, fuzzy msgid "*x* converted to floating point" -msgstr "*x* перетворено у число з плаваючою комою" +msgstr "*x* перетворене у число з плаваючою комою" #: ../../src/basics/stdtypes.txt:63 -#, fuzzy msgid "``complex(re, im)``" msgstr "``complex(re, im)``" #: ../../src/basics/stdtypes.txt:63 -#, fuzzy msgid "" "a complex number with real part *re*, imaginary part *im*. *im* defaults to " "zero." @@ -234,27 +199,22 @@ msgstr "" "замовчуванням *im* дорівнює нулю." #: ../../src/basics/stdtypes.txt:66 -#, fuzzy msgid "``divmod(x, y)``" msgstr "``divmod(x, y)``" #: ../../src/basics/stdtypes.txt:66 -#, fuzzy msgid "the pair ``(x // y, x % y)``" msgstr "об'єднує ``(x // y, x % y)``" #: ../../src/basics/stdtypes.txt:68 -#, fuzzy msgid "``pow(x, y)`` ``x ** y``" msgstr "``pow(x, y)`` ``x ** y``" #: ../../src/basics/stdtypes.txt:68 -#, fuzzy msgid "*x* to the power *y*" msgstr "*x* у степені *y*" #: ../../src/basics/stdtypes.txt:72 -#, fuzzy msgid "" "``x // y`` also referred to as integer division. The resultant value is a " "whole integer, through the result's type is not necessarily int. The result " @@ -265,7 +225,6 @@ msgstr "" "округлюється до мінус нескінченності: ``1 // 2`` є ``0``" #: ../../src/basics/stdtypes.txt:77 -#, fuzzy msgid "" "``float(x)`` also accepts the strings ``\"nan\"`` and ``\"inf\"`` with an " "optional prefix \"+\" or \"-\" for :abbr:`NaN(Not a Number)` and positive " @@ -276,29 +235,24 @@ msgstr "" "від'ємної нескінченності." #: ../../src/basics/stdtypes.txt:82 -#, fuzzy msgid "Code examples" msgstr "Приклади коду" #: ../../src/basics/stdtypes.txt:84 -#, fuzzy msgid "Integer numbers" msgstr "Цілі числа" #: ../../src/basics/stdtypes.txt:98 -#, fuzzy msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: ../../src/basics/stdtypes.txt:114 ../../src/basics/stdtypes.txt:187 #: ../../src/basics/stdtypes.txt:295 ../../src/basics/stdtypes.txt:304 #: ../../src/basics/stdtypes.txt:333 -#, fuzzy msgid "Value comparisons" msgstr "Порівняння значень" #: ../../src/basics/stdtypes.txt:116 -#, fuzzy msgid "" "Numbers of built-in numeric types can be compared within and across their " "types (with the restriction that complex numbers do not support order " @@ -310,7 +264,6 @@ msgstr "" "відповідних типів вони порівнюються математично коректно без втрати точності." #: ../../src/basics/stdtypes.txt:121 -#, fuzzy msgid "" "The \"not-a-number\" values ``float(\"NaN\")`` and ``decimal." "Decimal('NaN')`` are special. Any ordered comparison of a number to a not-a-" @@ -321,12 +274,10 @@ msgstr "" "число\" є хибним." #: ../../src/basics/stdtypes.txt:125 -#, fuzzy msgid "Sequence types" msgstr "Типи послідовностей" #: ../../src/basics/stdtypes.txt:127 -#, fuzzy msgid "" "There are 3 basic sequence types: *lists*, *tuples*, and *range objects*. " "Additional sequence types tailored for processing of binary data and text " @@ -337,12 +288,10 @@ msgstr "" "даних і текстових рядків, описано у відповідних розділах." #: ../../src/basics/stdtypes.txt:132 -#, fuzzy msgid "Lists" msgstr "Списки" #: ../../src/basics/stdtypes.txt:134 -#, fuzzy msgid "" "Lists are mutable sequences, typically used to store collections of items. " "They may be constructed in several ways:" @@ -352,13 +301,11 @@ msgstr "" "способами:" #: ../../src/basics/stdtypes.txt:137 -#, fuzzy msgid "using a pair of square brackets to denote the empty list: ``[]``" msgstr "" "використовуючи пару квадратних дужок для позначення порожнього списку: ``[]``" #: ../../src/basics/stdtypes.txt:138 -#, fuzzy msgid "" "using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" msgstr "" @@ -366,22 +313,18 @@ msgstr "" "b, c]``" #: ../../src/basics/stdtypes.txt:139 -#, fuzzy msgid "using a list comprehension: ``[x for x in iterable]``" msgstr "використовуючи генератори списків: ``[x for x in iterable]``" #: ../../src/basics/stdtypes.txt:140 -#, fuzzy msgid "using the type constructor: ``list()`` or ``list(iterable)``" msgstr "використовуючи конструктор типу: ``list()`` або ``list(iterable)``" #: ../../src/basics/stdtypes.txt:143 -#, fuzzy msgid "Tuples" msgstr "Кортежі" #: ../../src/basics/stdtypes.txt:145 -#, fuzzy msgid "" "Tuples are immutable sequences, typically used to store collections of data " "or for cases where an immutable sequence of data is needed (such as allowing " @@ -394,40 +337,33 @@ msgstr "" "``dict``). Вони можуть бути побудовані кількома способами:" #: ../../src/basics/stdtypes.txt:150 -#, fuzzy msgid "using a pair of parentheses to denote the empty tuple: ``()``" msgstr "" "використовуючи пару круглих дужок для позначення порожнього кортежу: ``()``" #: ../../src/basics/stdtypes.txt:151 -#, fuzzy msgid "using a trailing comma for a singleton tuple: ``a,`` or ``(a, b, c)``" msgstr "" "з використанням кінцевої коми для одиночного кортежу: ``a,`` або ``(a, b, " "c)``" #: ../../src/basics/stdtypes.txt:152 -#, fuzzy msgid "separating items with commas: ``a, b, c`` or ``(a, b, c)``" msgstr "розділення елементів комами: ``a, b, c`` або ``(a, b, c)``" #: ../../src/basics/stdtypes.txt:153 -#, fuzzy msgid "using the type constructor: ``tuple()`` or ``tuple(iterable)``" msgstr "з використанням конструктора типу: ``tuple()`` або ``tuple(iterable)``" #: ../../src/basics/stdtypes.txt:156 -#, fuzzy msgid "Common operations" msgstr "Спільні операції" #: ../../src/basics/stdtypes.txt:161 -#, fuzzy msgid "``x in s`` ``x not in s``" msgstr "``x in s`` ``x not in s``" #: ../../src/basics/stdtypes.txt:161 -#, fuzzy msgid "" "``True`` if an item of *s* equal to *x* ``False`` if an item of *s* equal to " "*x*" @@ -436,42 +372,34 @@ msgstr "" "*x*" #: ../../src/basics/stdtypes.txt:164 -#, fuzzy msgid "``s + t``" msgstr "``s + t``" #: ../../src/basics/stdtypes.txt:164 -#, fuzzy msgid "the concatenation of *s* and *t*" msgstr "конкатенація *s* та *t*" #: ../../src/basics/stdtypes.txt:166 -#, fuzzy msgid "``s * n``" msgstr "``s * n``" #: ../../src/basics/stdtypes.txt:166 -#, fuzzy msgid "equivalent to adding *s* to itself *n* times" msgstr "еквівалентно додаванню *s* до самого себе *n* разів" #: ../../src/basics/stdtypes.txt:168 -#, fuzzy msgid "``s[i]``" msgstr "``s[i]``" #: ../../src/basics/stdtypes.txt:168 -#, fuzzy msgid "*i*-th item of *s*, origin 0" msgstr "*i*-й елемент з *s*, походження 0" #: ../../src/basics/stdtypes.txt:170 -#, fuzzy msgid "``s[i:j]`` ``s[i:j:k]``" msgstr "``s[i:j]`` ``s[i:j:k]``" #: ../../src/basics/stdtypes.txt:170 -#, fuzzy msgid "" "slice of *s* from *i* to *j* with step *k*. any of these (or even all 3) may " "be omitted." @@ -480,52 +408,42 @@ msgstr "" "можна опустити." #: ../../src/basics/stdtypes.txt:173 -#, fuzzy msgid "``len(s)``" msgstr "``len(s)``" #: ../../src/basics/stdtypes.txt:173 -#, fuzzy msgid "length of *s*" msgstr "довжина *s*" #: ../../src/basics/stdtypes.txt:175 -#, fuzzy msgid "``min(s)``" msgstr "``min(s)``" #: ../../src/basics/stdtypes.txt:175 -#, fuzzy msgid "smallest item of *s*" msgstr "найменший елемент *s*" #: ../../src/basics/stdtypes.txt:177 -#, fuzzy msgid "``max(s)``" msgstr "``max(s)``" #: ../../src/basics/stdtypes.txt:177 -#, fuzzy msgid "largest item of *s*" msgstr "найбільший елемент *s*" #: ../../src/basics/stdtypes.txt:179 -#, fuzzy msgid "``s.count(x)``" msgstr "``s.count(x)``" #: ../../src/basics/stdtypes.txt:179 -#, fuzzy msgid "total number of occurrences of *x* in *s*" msgstr "загальна кількість входжень *x* у *s*" #: ../../src/basics/stdtypes.txt:181 -#, fuzzy msgid "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" msgstr "``s.index(x)`` ``s.index(x, i)`` ``s.index(x, i, j)``" #: ../../src/basics/stdtypes.txt:181 -#, fuzzy msgid "" "index of the first occurrence of *x* in *s* at or after index *i* and before " "index *j*" @@ -534,7 +452,6 @@ msgstr "" "індексом *j*" #: ../../src/basics/stdtypes.txt:189 -#, fuzzy msgid "" "Sequences can be compared only within each of their types, with the " "restriction that ranges do not support order comparison. Equality comparison " @@ -547,7 +464,6 @@ msgstr "" "викликає ``TypeError``." #: ../../src/basics/stdtypes.txt:194 -#, fuzzy msgid "" "Sequences compare lexicographically using comparison of corresponding " "elements. The built-in containers typically assume identical objects are " @@ -560,7 +476,6 @@ msgstr "" "працює наступним чином:" #: ../../src/basics/stdtypes.txt:199 -#, fuzzy msgid "" "For two collections to compare equal, they must be of the same type, have " "the same length, and each pair of corresponding elements must compare equal." @@ -570,7 +485,6 @@ msgstr "" "однаково." #: ../../src/basics/stdtypes.txt:201 -#, fuzzy msgid "" "Collections that supports order comparison are ordered the same as their " "first unequal elements. If corresponding element does not exist, the shorter " @@ -581,67 +495,54 @@ msgstr "" "впорядковується коротша колекція." #: ../../src/basics/stdtypes.txt:206 -#, fuzzy msgid "Mutable sequence types" msgstr "Типи змінних послідовностей" #: ../../src/basics/stdtypes.txt:211 -#, fuzzy msgid "``s[i] = x``" msgstr "``s[i] = x``" #: ../../src/basics/stdtypes.txt:211 -#, fuzzy msgid "item *i* of *s* is replaced by *x*" msgstr "елемент *i* в *s* замінюється на *x*" #: ../../src/basics/stdtypes.txt:213 -#, fuzzy msgid "``s[i:j] = t``" msgstr "``s[i:j] = t``" #: ../../src/basics/stdtypes.txt:213 -#, fuzzy msgid "slice of *s* from *i* to *j* replaced by the contents of *t*" msgstr "фрагмент *s* від *i* до *j*, замінений вмістом *t*" #: ../../src/basics/stdtypes.txt:216 -#, fuzzy msgid "``del s[i:j]``" msgstr "``del s[i:j]``" #: ../../src/basics/stdtypes.txt:216 -#, fuzzy msgid "same as ``s[i:j] = []``" msgstr "те саме, що ``s[i:j] = []``" #: ../../src/basics/stdtypes.txt:218 -#, fuzzy msgid "``s[i:j:k] = t``" msgstr "``s[i:j:k] = t``" #: ../../src/basics/stdtypes.txt:218 -#, fuzzy msgid "the elements of *s* are replaced by those of *t* [#]_" msgstr "елементи *s* замінюються елементами *t* [#]_" #: ../../src/basics/stdtypes.txt:220 -#, fuzzy msgid "``del s[i:j:k]``" msgstr "``del s[i:j:k]``" #: ../../src/basics/stdtypes.txt:220 -#, fuzzy msgid "removes the elements of ``s[i:j:k]`` from the list" msgstr "видаляє елементи ``s[i:j:k]`` зі списку" #: ../../src/basics/stdtypes.txt:222 -#, fuzzy msgid "``s.append(x)``" msgstr "``s.append(x)``" #: ../../src/basics/stdtypes.txt:222 -#, fuzzy msgid "" "appends *x* to the end of the sequence; the same as ``s[len(s):len(s)] = " "[x]``" @@ -649,52 +550,42 @@ msgstr "" "додає *x* до кінця послідовності; те саме, що ``s[len(s):len(s)] = [x]``" #: ../../src/basics/stdtypes.txt:225 -#, fuzzy msgid "``s.clear()``" msgstr "``s.clear()``" #: ../../src/basics/stdtypes.txt:225 -#, fuzzy msgid "removes all items from *s* (``del s[:]``) [#py33]_" msgstr "видаляє всі елементи з *s* (``del s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:227 -#, fuzzy msgid "``s.copy()``" msgstr "``s.copy()``" #: ../../src/basics/stdtypes.txt:227 -#, fuzzy msgid "creates a shallow copy of *s* (``s[:]``) [#py33]_" msgstr "створює поверхневу копію *s* (``s[:]``) [#py33]_" #: ../../src/basics/stdtypes.txt:229 -#, fuzzy msgid "``s.extend(t)`` ``s += t``" msgstr "``s.extend(t)`` ``s += t``" #: ../../src/basics/stdtypes.txt:229 -#, fuzzy msgid "extends *s* with the contents of *t*" msgstr "розширює *s* вмістом *t*" #: ../../src/basics/stdtypes.txt:232 -#, fuzzy msgid "``s.insert(i, x)``" msgstr "``s.insert(i, x)``" #: ../../src/basics/stdtypes.txt:232 -#, fuzzy msgid "inserts *x* into *s* at the index *i*; same as ``s[i:i] = [x]``" msgstr "вставляє *x* у *s* за індексом *i*; те саме, що ``s[i:i] = [x]``" #: ../../src/basics/stdtypes.txt:235 -#, fuzzy msgid "``s.pop()``, ``s.pop(i)``" msgstr "``s.pop()``, ``s.pop(i)``" #: ../../src/basics/stdtypes.txt:235 -#, fuzzy msgid "" "retrieves the item at *i* and also removes it from *s* (if *i* is omitted - " "use the last one available index)" @@ -703,47 +594,38 @@ msgstr "" "пропущено - використовуйте останній доступний індекс)" #: ../../src/basics/stdtypes.txt:238 -#, fuzzy msgid "``s.remove(x)``" msgstr "``s.remove(x)``" #: ../../src/basics/stdtypes.txt:238 -#, fuzzy msgid "remove the first item that is equal to *x* from *s*" msgstr "видалити перший елемент, який дорівнює *x*, із *s*" #: ../../src/basics/stdtypes.txt:240 -#, fuzzy msgid "``s.reverse()``" msgstr "``s.reverse()``" #: ../../src/basics/stdtypes.txt:240 -#, fuzzy msgid "reverses the items of *s* in place" msgstr "перевертає елементи *s* на місце" #: ../../src/basics/stdtypes.txt:243 -#, fuzzy msgid "*t* must have the same length as the slice it is replacing" msgstr "*t* повинен мати таку ж довжину, як і фрагмент, який він замінює" #: ../../src/basics/stdtypes.txt:244 -#, fuzzy msgid "new in Python version 3.3" msgstr "нове в Python версії 3.3" #: ../../src/basics/stdtypes.txt:247 -#, fuzzy msgid "Text sequence type" msgstr "Тип текстової послідовності" #: ../../src/basics/stdtypes.txt:250 -#, fuzzy msgid "String methods" msgstr "Методи рядків" #: ../../src/basics/stdtypes.txt:252 -#, fuzzy msgid "" "Strings implement all of the common sequence operations, along with the " "additional methods." @@ -752,7 +634,6 @@ msgstr "" "методи." #: ../../src/basics/stdtypes.txt:297 -#, fuzzy msgid "" "Strings compare lexicographically using the numerical Unicode code points of " "their characters." @@ -761,12 +642,10 @@ msgstr "" "символів у Юнікоді." #: ../../src/basics/stdtypes.txt:301 -#, fuzzy msgid "Set types" msgstr "Типи множин" #: ../../src/basics/stdtypes.txt:306 -#, fuzzy msgid "" "Sets (instances of ``set`` or ``frozenset``) can be compared within and " "across their types. They define order comparison operators to mean subset " @@ -781,12 +660,10 @@ msgstr "" "не є підмножинами одна одної і не є надмножинами одна одної)." #: ../../src/basics/stdtypes.txt:313 -#, fuzzy msgid "Mapping type" msgstr "Тип відображення" #: ../../src/basics/stdtypes.txt:315 -#, fuzzy msgid "" "A mapping object maps hashable values to arbitrary objects. Mappings are " "mutable objects. There is currently ony one standard mapping type, the " @@ -798,7 +675,6 @@ msgstr "" "набори ключів та їхніх значень." #: ../../src/basics/stdtypes.txt:319 -#, fuzzy msgid "" "A dictionary's keys are almost arbitrary values. Values that are not " "hashable may not be used as keys. Values that compare equal (such as ``1``, " @@ -811,17 +687,14 @@ msgstr "" "взаємозамінні для індексації однієї і тієї ж словникової статті." #: ../../src/basics/stdtypes.txt:323 -#, fuzzy msgid "Dictionaries can be created by several means:" msgstr "Словники можна створювати кількома способами:" #: ../../src/basics/stdtypes.txt:325 -#, fuzzy msgid "Use braces to denote the empty dictionary: ``{}``" msgstr "Використовуйте дужки для позначення порожнього словника: ``{}``" #: ../../src/basics/stdtypes.txt:326 -#, fuzzy msgid "" "Use a comma-separated list of ``key: value`` pairs with braces: " "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" @@ -830,12 +703,10 @@ msgstr "" "``{'first_name': 'Serhii', 'last_name': 'Horodilov', 'age': 34}``" #: ../../src/basics/stdtypes.txt:328 -#, fuzzy msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "Використовуючи генератори списків: ``{x: x 2 for x in range(10)}``" #: ../../src/basics/stdtypes.txt:329 -#, fuzzy msgid "" "Use the type constructor: ``dict()``, ``dict([('key', 100)])``, " "``dict(key=100)``" @@ -844,7 +715,6 @@ msgstr "" "``dict(key=100)``" #: ../../src/basics/stdtypes.txt:335 -#, fuzzy msgid "" "Instances of ``dict`` compare equal if and only if they have equal key-value " "pairs." @@ -853,6 +723,5 @@ msgstr "" "мають однакові пари ключ-значення." #: ../../src/basics/stdtypes.txt:338 -#, fuzzy msgid "Order comparisons raise ``TypeError``." msgstr "Порівняння порядку викликає ``TypeError``." From fbdc9f2ec6c583e9f2a1efa9afe6c48b4f477e71 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 25 Oct 2023 00:02:20 +0300 Subject: [PATCH 455/689] Move Python keywords table into a separate document --- src/_locales/uk/LC_MESSAGES/appx/_keywords.po | 166 ++++++++++++++++++ src/appx/_keywords.txt | 18 ++ src/intro/index.txt | 19 +- 3 files changed, 185 insertions(+), 18 deletions(-) create mode 100644 src/_locales/uk/LC_MESSAGES/appx/_keywords.po create mode 100644 src/appx/_keywords.txt diff --git a/src/_locales/uk/LC_MESSAGES/appx/_keywords.po b/src/_locales/uk/LC_MESSAGES/appx/_keywords.po new file mode 100644 index 000000000..119daae8c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/_keywords.po @@ -0,0 +1,166 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-24 21:59+0100\n" +"PO-Revision-Date: 2023-10-25 00:01+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/appx/_keywords.txt:1 +msgid "Python Keywords" +msgstr "Ключові слова мови Python" + +#: ../../src/appx/_keywords.txt:5 +msgid "``False``" +msgstr "``False``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``await``" +msgstr "``await``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``else``" +msgstr "``else``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``import``" +msgstr "``import``" + +#: ../../src/appx/_keywords.txt:5 +msgid "``pass``" +msgstr "``pass``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``None``" +msgstr "``None``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``break``" +msgstr "``break``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``except``" +msgstr "``except``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``in``" +msgstr "``in``" + +#: ../../src/appx/_keywords.txt:7 +msgid "``raise``" +msgstr "``raise``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``True``" +msgstr "``True``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``class``" +msgstr "``class``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``finally``" +msgstr "``finally``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``is``" +msgstr "``is``" + +#: ../../src/appx/_keywords.txt:9 +msgid "``return``" +msgstr "``return``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``and``" +msgstr "``and``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``continue``" +msgstr "``continue``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``for``" +msgstr "``for``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``lambda``" +msgstr "``lambda``" + +#: ../../src/appx/_keywords.txt:11 +msgid "``try``" +msgstr "``try``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``as``" +msgstr "``as``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``def``" +msgstr "``def``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``from``" +msgstr "``from``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``nonlocal``" +msgstr "``nonlocal``" + +#: ../../src/appx/_keywords.txt:13 +msgid "``while``" +msgstr "``while``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``assert``" +msgstr "``assert``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``del``" +msgstr "``del``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``global``" +msgstr "``global``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``not``" +msgstr "``not``" + +#: ../../src/appx/_keywords.txt:15 +msgid "``with``" +msgstr "``with``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``async``" +msgstr "``async``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``elif``" +msgstr "``elif``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``if``" +msgstr "``if``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``or``" +msgstr "``or``" + +#: ../../src/appx/_keywords.txt:17 +msgid "``yield``" +msgstr "``yield``" diff --git a/src/appx/_keywords.txt b/src/appx/_keywords.txt new file mode 100644 index 000000000..db30e5ef6 --- /dev/null +++ b/src/appx/_keywords.txt @@ -0,0 +1,18 @@ +.. table:: Python Keywords + :align: center + + +------------+--------------+-------------+--------------+------------+ + | ``False`` | ``await`` | ``else`` | ``import`` | ``pass`` | + +------------+--------------+-------------+--------------+------------+ + | ``None`` | ``break`` | ``except`` | ``in`` | ``raise`` | + +------------+--------------+-------------+--------------+------------+ + | ``True`` | ``class`` | ``finally`` | ``is`` | ``return`` | + +------------+--------------+-------------+--------------+------------+ + | ``and`` | ``continue`` | ``for`` | ``lambda`` | ``try`` | + +------------+--------------+-------------+--------------+------------+ + | ``as`` | ``def`` | ``from`` | ``nonlocal`` | ``while`` | + +------------+--------------+-------------+--------------+------------+ + | ``assert`` | ``del`` | ``global`` | ``not`` | ``with`` | + +------------+--------------+-------------+--------------+------------+ + | ``async`` | ``elif`` | ``if`` | ``or`` | ``yield`` | + +------------+--------------+-------------+--------------+------------+ diff --git a/src/intro/index.txt b/src/intro/index.txt index b81778a4e..9a095e652 100644 --- a/src/intro/index.txt +++ b/src/intro/index.txt @@ -84,24 +84,7 @@ meaning by the compiler or interpreter because they designate specific built-in functionality of the language. There are only 35 :cite:`docs-python:keywords` in Python and they are: -.. table:: Python Keywords - :align: center - - +------------+--------------+-------------+--------------+------------+ - | ``False`` | ``await`` | ``else`` | ``import`` | ``pass`` | - +------------+--------------+-------------+--------------+------------+ - | ``None`` | ``break`` | ``except`` | ``in`` | ``raise`` | - +------------+--------------+-------------+--------------+------------+ - | ``True`` | ``class`` | ``finally`` | ``is`` | ``return`` | - +------------+--------------+-------------+--------------+------------+ - | ``and`` | ``continue`` | ``for`` | ``lambda`` | ``try`` | - +------------+--------------+-------------+--------------+------------+ - | ``as`` | ``def`` | ``from`` | ``nonlocal`` | ``while`` | - +------------+--------------+-------------+--------------+------------+ - | ``assert`` | ``del`` | ``global`` | ``not`` | ``with`` | - +------------+--------------+-------------+--------------+------------+ - | ``async`` | ``elif`` | ``if`` | ``or`` | ``yield`` | - +------------+--------------+-------------+--------------+------------+ +.. include:: /appx/_keywords.txt .. rubric:: Python is general purpose From e00e0672c28e987b8ce023a5dda0d8dd9bc58b8d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 25 Oct 2023 19:48:21 +0300 Subject: [PATCH 456/689] Add code owners file --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..98751adf3 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,6 @@ +/src/basics/ @shorodilov @Bandydan @Jules57 +/src/vcs/ @shorodilov @Bandydan +/src/rdbms/ @shorodilov @Bandydan +/src/oop/ @shorodilov +/src/django/ @PonomaryovVladyslav @shorodilov +/src/deploy/ @PonomaryovVladyslav @shorodilov From 7aa839d8471ec24d0e5f48f2f276afedd8c70f84 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 07:12:20 +0200 Subject: [PATCH 457/689] Update project dependencies --- poetry.lock | 200 ++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- requirements.txt | 6 +- 3 files changed, 105 insertions(+), 103 deletions(-) diff --git a/poetry.lock b/poetry.lock index 33f88c984..58a237ec6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,16 +14,19 @@ files = [ [[package]] name = "babel" -version = "2.13.0" +version = "2.13.1" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, - {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, ] +[package.dependencies] +setuptools = {version = "*", markers = "python_version >= \"3.12\""} + [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] @@ -41,102 +44,102 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, - {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -829,19 +832,18 @@ test = ["pytest"] [[package]] name = "urllib3" -version = "2.0.6" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, - {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] diff --git a/pyproject.toml b/pyproject.toml index f61e6365c..246bfa4c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2023.09.dev" +version = "2023.11.dev" description = "Python training course materials" license = "MIT" authors = [ diff --git a/requirements.txt b/requirements.txt index b37881a85..b1292bf4c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.13.0 ; python_version >= "3.9" and python_version < "4.0" +babel==2.13.1 ; python_version >= "3.9" and python_version < "4.0" certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" -charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" @@ -37,5 +37,5 @@ sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.0.6 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" From 2f31ef0882ab99859c382824af33185b2128619d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 22:58:05 +0200 Subject: [PATCH 458/689] Update submodules --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index b2f2737e8..56ce293ef 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit b2f2737e8fbcce616ec3b22d325c20ca317dfff1 +Subproject commit 56ce293ef4329142767e14c270877fd4d90b1928 From 41abf9e5ffe8338925978ab7f534602a5422e43f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 6 Oct 2023 02:11:46 +0300 Subject: [PATCH 459/689] Add "libms-db" submodule --- .gitmodules | 3 +++ libms-db | 1 + 2 files changed, 4 insertions(+) create mode 160000 libms-db diff --git a/.gitmodules b/.gitmodules index 00959c024..3a07a3bcd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "src/appx/libms"] path = src/appx/libms url = git@github.com:edu-python-course/libms-spec.git +[submodule "libms-db"] + path = libms-db + url = git@github.com:edu-python-course/libms-db.git diff --git a/libms-db b/libms-db new file mode 160000 index 000000000..a38998e5c --- /dev/null +++ b/libms-db @@ -0,0 +1 @@ +Subproject commit a38998e5cc0de5172241989ef2eac6406be59f7f From 4a8a23c456b12b903e601ee5f9850fd3d6626b66 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 16:17:35 +0200 Subject: [PATCH 460/689] Update RDBMS introduction section (GH-73) --- assets/img/mysql.svg | 29 +++++++++++++++++++++++++++++ assets/img/postgres.svg | 1 + assets/img/sqlite.svg | 2 ++ src/rdbms/index.txt | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 assets/img/mysql.svg create mode 100644 assets/img/postgres.svg create mode 100644 assets/img/sqlite.svg diff --git a/assets/img/mysql.svg b/assets/img/mysql.svg new file mode 100644 index 000000000..a5437cd29 --- /dev/null +++ b/assets/img/mysql.svg @@ -0,0 +1,29 @@ + + + + + databases-and-servers/databases/mysql + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/img/postgres.svg b/assets/img/postgres.svg new file mode 100644 index 000000000..9b96ff353 --- /dev/null +++ b/assets/img/postgres.svg @@ -0,0 +1 @@ +file_type_pgsql \ No newline at end of file diff --git a/assets/img/sqlite.svg b/assets/img/sqlite.svg new file mode 100644 index 000000000..be6336de0 --- /dev/null +++ b/assets/img/sqlite.svg @@ -0,0 +1,2 @@ + +file_type_sqlite \ No newline at end of file diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index ac43a8f50..ed8364d5e 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -3,6 +3,21 @@ :author: Serhii Horodilov :keywords: sql, db, database, intro, introduction, index +.. |postgres| image:: /../assets/img/postgres.svg + :width: 32 + :alt: PostgreSQL + :target: https://www.postgresql.org + +.. |mysql| image:: /../assets/img/mysql.svg + :width: 32 + :alt: SQLite + :target: https://www.sqlite.org + +.. |sqlite| image:: /../assets/img/sqlite.svg + :width: 32 + :alt: MySQL + :target: https://www.mysql.com + ############################################################################### Relational Database ############################################################################### @@ -25,6 +40,24 @@ and recovery capabilities. Additionally, RDBMS systems often provide tools for managing the database, such as user interfaces for creating and modifying tables and views, and monitoring tools for optimizing database performance. +Security is a paramount aspect of managing databases. Even at the introductory +level, it's crucial to be aware of the basic security measures: + +- **Authentication and Authorization**: Ensuring that only authorized users + have access to the database. +- **Role-Based Access Control**: Assigning permissions based on roles within + the organization. +- **Data Encryption**: Protecting sensitive data both at rest and in transit. + +There are dozens of RDBMS, used in nowadays projects. But most widespread are: + +- |postgres| **PostgreSQL**: + A Powerful, open source object-relational database system. +- |sqlite| **SQLite**: + A C-library that implements a small, full featured SQL database engine. +- |mysql| **MySQL**: + A fast, multithread, multi-user, and robust SQL database server. + .. toctree:: :name: rdbms From 165206517818cd9d247a88e0f24364ab69d7dc56 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 16:21:56 +0200 Subject: [PATCH 461/689] Remove previous documents from toctree (require updates) --- src/rdbms/aggregation.txt | 2 ++ src/rdbms/index.txt | 4 ---- src/rdbms/normalization.txt | 2 ++ src/rdbms/relations.txt | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregation.txt index d61db96df..6cf288abe 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregation.txt @@ -1,3 +1,5 @@ +.. todo: review and update document + .. meta:: :description: Data aggregation :author: Serhii Horodilov diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index ed8364d5e..79ea09d6a 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -60,7 +60,3 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: .. toctree:: :name: rdbms - - aggregation - relations - normalization diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 059146a32..0833ea646 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -1,3 +1,5 @@ +.. todo: review and update document + .. meta:: :description: Database normalization :author: Serhii Horodilov diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index 4c950c40f..afb1f14c1 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -1,3 +1,5 @@ +.. todo: review and update document + .. meta:: :description: This document describes the database relationships :author: Serhii Horodilov From d927e15b664540d08c88ad95a00d46ca4c68cee9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 17:51:57 +0200 Subject: [PATCH 462/689] Add structure overview document (fixes #73) --- src/rdbms/index.txt | 2 + src/rdbms/structure.txt | 85 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/rdbms/structure.txt diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 79ea09d6a..3d4344ff6 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -60,3 +60,5 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: .. toctree:: :name: rdbms + + structure diff --git a/src/rdbms/structure.txt b/src/rdbms/structure.txt new file mode 100644 index 000000000..c34b36ee9 --- /dev/null +++ b/src/rdbms/structure.txt @@ -0,0 +1,85 @@ +************************** +Structure of Data in RDBMS +************************** + +The database itself is a set of data stored in a computer. This data is usually +structured in a way that makes them easily accessible. Relational databases +use the structure that allows us to identify and access data in *relation* to +another piece of data in the database. + +Understanding the basic structure of an RDBMS is crucial for effectively +managing and querying data. In this section, we delve into the core components: +*tables*, *rows*, and *columns*, and how they form the foundation of +a relational database. + +.. contents:: + :local: + :depth: 2 + +Tables +====== + +Tables are the building blocks. + +.. note:: + + Some documents may name tables as *relations*. + +A table in an RDBMS is akin to a spreadsheet. It is where data is stored and +organized. Each table in a database represents a specific entity or concept, +like ``Customers`` or ``Orders``. + +Structure and purpose +--------------------- + +A table consists of rows and columns, similar to a grid. All the rows and cols +together are the data *related* to some subject or concept within a database. + +Tables hold data about a particular subject, such as all the information +related to customer transactions, or books available in a local library. + +Naming conventions +------------------ + +.. important:: + + The conventions below aren't related to tables only, but also they are + used when naming databases and columns. + +- Use nouns that describe the subject the best. +- Use lowercase names, e.g. ``user`` instead of ``Users`` or ``USERS``. +- If the name must consist of two or more words, use underscore to connect + them, e.g. ``snake_case``, ``user_account``. +- Avoid use of dots, spaces, or dashes. +- When naming objects, balance the objective of keeping names short and easy + to use with the objective of making names as descriptive as possible. +- Singular names are preferred over plurals. + +Rows: Individual Records +======================== + +Tables can have hundreds, thousands, sometimes even millions of rows of data. +These rows are offer called *records*. Each row in a table represents a single +entity of a subject. For example, ``book`` table represents an abstract book +with all its attributes, like title, author etc. And a specific row within this +table represents a concrete book. + +Every row should ideally have something that make it unique. + +Rows in a table can be linked to other rows in other tables or within the same +table, maintaining relationships and data integrity. + +Columns: Attributes of Data +=========================== + +Columns in a table represent the attributes of the entity. For instance, +``book`` table may contain columns ``title``, ``author``, ``publisher`` etc. + +Each column has a defined data type, like ``integer``, ``string`` etc. + +Constraints +----------- + +Columns can have constraints to enforce data integrity. For example, some +columns cannot be empty, or store values under or above some threshold. +Several constraints can be combined together. From fd0bd5e1241c28fc17e4313589a76eae50875e23 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 18:21:11 +0200 Subject: [PATCH 463/689] Append table example --- src/rdbms/structure.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/rdbms/structure.txt b/src/rdbms/structure.txt index c34b36ee9..cc0b3fd5c 100644 --- a/src/rdbms/structure.txt +++ b/src/rdbms/structure.txt @@ -83,3 +83,22 @@ Constraints Columns can have constraints to enforce data integrity. For example, some columns cannot be empty, or store values under or above some threshold. Several constraints can be combined together. + +Examples +======== + +.. csv-table:: Authors table + :header-rows: 1 + :stub-columns: 1 + + id,first_name,last_name,country,birthdate + 1,Letta,Casbolt,Poland,1947-04-18 + 2,Robbyn,Attwoul,Poland,1954-10-17 + 3,Hesther,Kisby,Ukraine,1941-07-21 + 4,Gav,Jewett,Czech Republic,1988-02-05 + 5,Jorrie,Klehyn,United States,1941-08-07 + 6,Genevieve,Ollington,United States,1921-08-27 + 7,Carrissa,Arrandale,United Kingdom,1982-08-20 + 8,Josepha,Dominichelli,Poland,1976-12-03 + 9,Ario,Hepher,Ukraine,2003-10-11 + 10,Walker,Grolmann,Poland,1964-02-17 From 7d817b9981c69c9a2eeb5840c60a3780109b61c4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 19:04:21 +0200 Subject: [PATCH 464/689] Add DDL and DML drafts --- src/rdbms/ddl.txt | 28 ++++++++++++++++++++++++++++ src/rdbms/dml.txt | 31 +++++++++++++++++++++++++++++++ src/rdbms/index.txt | 2 ++ 3 files changed, 61 insertions(+) create mode 100644 src/rdbms/ddl.txt create mode 100644 src/rdbms/dml.txt diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt new file mode 100644 index 000000000..d04c7db4d --- /dev/null +++ b/src/rdbms/ddl.txt @@ -0,0 +1,28 @@ +************************ +Data Definition Language +************************ + +:abbr:`DDL (Data Definition Language)` is a subset of SQL used for defining and +modifying the database structure. Understanding DDL is fundamental to working +with RDBMS. It allows you to define the structure of your data and make +necessary changes as your requirements evolve. + +- ``CREATE`` used to create new objects within a RDBMS +- ``ALTER`` used to modify existing objects +- ``DROP`` used to delete database objects +- ``TRUNCATE`` used to remove all records from a table + +Create objects +============== + +.. todo + +Modify objects +============== + +.. todo + +Remove objects +============== + +.. todo diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt new file mode 100644 index 000000000..58c5150cd --- /dev/null +++ b/src/rdbms/dml.txt @@ -0,0 +1,31 @@ +************************** +Data Manipulation Language +************************** + +:abbr:`DML (Data Manipulation Language)` is a subset of SQL used for adding, +updating, and deleting data within database tables. + +- ``SELECT`` used to query data from the database +- ``INSERT`` used to insert new data into a table +- ``UPDATE`` used to modify existing data +- ``DELETE`` used to remove data from a table + +Querying data +============= + +.. todo + +Creating new records +==================== + +.. todo + +Modifying records +================= + +.. todo + +Removing data +============= + +.. todo diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 3d4344ff6..4b806e6bd 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -62,3 +62,5 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: :name: rdbms structure + ddl + dml From 87209ffd3cb8b914a2c8fb692e87524616ba8096 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 19:47:46 +0200 Subject: [PATCH 465/689] Add create role statement description (GH-78) --- src/rdbms/ddl.txt | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index d04c7db4d..2211a4349 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -15,7 +15,37 @@ necessary changes as your requirements evolve. Create objects ============== -.. todo +Creating database roles +----------------------- + +.. note:: + + SQLite is a small database in a single file and it doesn't implement + role based access to data. Any user who have access to DB file will + have access to data within the database as well. + +In RDBMS, roles are used to manage database permissions. They are an essential +part of database security and user management. + +In PostgreSQL a **role** is an entity that can own database objects and have +database privileges; a role can be considered a *user*, a *group*, or both +depending on how it is used. + +``CREATE ROLE`` statement defines a new database role. + +.. code-block:: postgresql + + CREATE ROLE name; + +This statement also can have options: + +.. code-block:: postgresql + + CREATE ROLE name WITH LOGIN SUPERUSER PASSWORD 'password'; + +Options clarify if a role can login to the database server, connect to specific +databases, create other roles etc. The full list of options is available in the +official postgres documentation. Modify objects ============== From 99b3a5a7efd2c96bd3fae6096ac2ea09c73468b2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 20:03:24 +0200 Subject: [PATCH 466/689] Add create database statement section (GH-78) --- src/rdbms/ddl.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 2211a4349..5bb459058 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -47,6 +47,27 @@ Options clarify if a role can login to the database server, connect to specific databases, create other roles etc. The full list of options is available in the official postgres documentation. +Creating databases +------------------ + +``CREATE DATABASE`` statement creates a new PostgreSQL database. To create +a database, you must be a superuser or have ``CREATEDB`` privilege. + +.. code-block:: postgresql + + CREATE DATABASE name; + +Databases within a PostgreSQL server have owners. By default a user who creates +a database is assigned as its owner. To specify another user as a database +owner options may be used: + +.. code-block:: postgresql + + CREATE DATABASE name OWNER role_name; + +There are lots of options for this statement available in the official postgres +documentation. + Modify objects ============== From eb70ac8f3bc95cc400aac30ac87fafd3b6989766 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 20:15:17 +0200 Subject: [PATCH 467/689] Add note to tables descriptions --- src/rdbms/structure.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rdbms/structure.txt b/src/rdbms/structure.txt index cc0b3fd5c..18220f438 100644 --- a/src/rdbms/structure.txt +++ b/src/rdbms/structure.txt @@ -19,6 +19,9 @@ a relational database. Tables ====== +.. in case updates are required - refer to documentation + https://www.postgresql.org/docs/current/ddl-basics.html + Tables are the building blocks. .. note:: From 35522faa7dc21825a0d085bce0338516eb7d02db Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 20:18:20 +0200 Subject: [PATCH 468/689] Add contents to DDL document --- src/rdbms/ddl.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 5bb459058..7faf13097 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -12,6 +12,10 @@ necessary changes as your requirements evolve. - ``DROP`` used to delete database objects - ``TRUNCATE`` used to remove all records from a table +.. contents:: + :local: + :maxdepth: 2 + Create objects ============== From a9be4ad374a38a4e282e4d7382d39e843938078b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 20:38:41 +0200 Subject: [PATCH 469/689] Add create table statement section (GH-78) --- src/rdbms/ddl.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 7faf13097..ec2b3591b 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -72,6 +72,26 @@ owner options may be used: There are lots of options for this statement available in the official postgres documentation. +Creating tables +--------------- + +To create a table, you use the aptly names ``CREATE TABLE`` command. +In this command you specify at least a name for the new table, the names of +the columns and the data type of each column. Constraints can be also applied +within the table creation command. + +.. code-block:: postgresql + + CREATE TABLE table_name + ( + first_column INTEGER, + second_column NUMERIC, + third_column VARCHAR(32), + fourth_column TEXT + ); + +.. todo: constraints + Modify objects ============== From ce13c8ed4d2f41247cb97b6412b7d606b1d96f9a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 20:52:32 +0200 Subject: [PATCH 470/689] Add default value section (GH-78) --- src/rdbms/ddl.txt | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index ec2b3591b..35dcbedb3 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -77,8 +77,7 @@ Creating tables To create a table, you use the aptly names ``CREATE TABLE`` command. In this command you specify at least a name for the new table, the names of -the columns and the data type of each column. Constraints can be also applied -within the table creation command. +the columns and the data type of each column. .. code-block:: postgresql @@ -90,7 +89,46 @@ within the table creation command. fourth_column TEXT ); -.. todo: constraints +.. rubric:: Default value + +Constraints also can be applied for columns while creating a table. +In this section, only most notable constraints will be described. + +A column can be assigned a default value. When a new row is created and +no values are specified for some of the columns, those columns will be +filled with their respective default values. If no default value is declared +explicitly, the default value is the ``NULL`` value. This usually makes sense +because a null value can be considered to represent unknown data. + +In a table definition the default values are listed after the data type. + +.. code-block:: postgresql + + CREATE TABLE product + ( + product_no INTEGER, + name TEXT + price NUMERIC DEFAULT 9.99 + ); + +The default value can be an expression, which will be evaluated whenever +the default value is inserted (**not when the table is created**). +A common example are timestamps columns representing the time a record was +created and a "serial number" generator. + +.. code-block:: postgresql + + CREATE TABLE product + ( + product_no INTEGER DEFAULT nextval('product_no_seq'), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + +There is a shorthand to generate serial numbers: + +.. code-block:: postgresql + + product_no SERIAL Modify objects ============== From f60a1c332cee663f42cf1a5b46d1a7c708006e28 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 21:07:25 +0200 Subject: [PATCH 471/689] Add generated columns section (GH-78) --- src/rdbms/ddl.txt | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 35dcbedb3..7c9946e91 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -130,6 +130,35 @@ There is a shorthand to generate serial numbers: product_no SERIAL +.. rubric:: Generated Columns + +In case you need to calculate some column value based on other columns, you may +use generated columns. A generated column is a special column that is always +computed from other columns. Thus, it is for columns what a view is for tables. +There are two kinds of generated columns: stored and virtual. + +A stored generated column is computed when it is written (inserted or updated) +and occupies storage as if it were a normal column. A virtual generated column +occupies no storage and is computed when it is read. + +.. code-block:: postgresql + + CREATE TABLE person + ( + height_cm NUMERIC, + height_in NUMERIC GENERATED ALWAYS AS (height_cm / 2.54) STORED + ); + +.. note:: + + There are several restrictions applied to the definitions of generated + columns and tables involving generated columns (not all listed): + + - The generation expression can only use immutable functions and cannot + use sub-queries or reference anything other than the current row. + - The generation expression cannot reference another generated column. + - A generated column cannot have column default. + Modify objects ============== From 9f075945183b2cc8d4ba7033314aaa8e3596f5bb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 21:24:22 +0200 Subject: [PATCH 472/689] Add constraints section (GH-78) --- src/rdbms/ddl.txt | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 7c9946e91..269df06e2 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -159,6 +159,47 @@ occupies no storage and is computed when it is read. - The generation expression cannot reference another generated column. - A generated column cannot have column default. +.. rubric:: Constraints + +A check constraint is the most generic constraint type. It allows you to +specify that the value in a certain column must satisfy a Boolean (truth-value) +expression. + +.. code-block:: postgresql + + CREATE TABLE product + ( + product_no INTEGER, + name TEXT, + price NUMERIC CONSTRAINT price_positive CHECK (price > 0), + discounted_price NUMERIC CHECK (discounted_price > 0), + CHECK (price > discounted_price) + ); + +A not-null constraint simply specifies that a column must not assume the null +value. + +.. code-block:: postgresql + + CREATE TABLE product + ( + product_no SERIAL NOT NULL, + name TEXT NOT NULL CHECK(length(name) > 0) + ); + +Unique constraints ensure that the data contained in a column, or a group of +columns, is unique among all the rows in the table. + +.. code-block:: postgresql + +CREATE TABLE example +( + a INTEGER, + b INTEGER UNIQUE, + c INTEGER, + UNIQUE (a, c) +); + Modify objects ============== From 3983488b73c82d5ed5518041fcd4379482fcde49 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 22:36:39 +0200 Subject: [PATCH 473/689] Add contents directive to GH-78 and GH-79 --- src/rdbms/ddl.txt | 2 +- src/rdbms/dml.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 269df06e2..32aa299f1 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -14,7 +14,7 @@ necessary changes as your requirements evolve. .. contents:: :local: - :maxdepth: 2 + :depth: 2 Create objects ============== diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 58c5150cd..84b73b1d0 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -10,6 +10,10 @@ updating, and deleting data within database tables. - ``UPDATE`` used to modify existing data - ``DELETE`` used to remove data from a table +.. contents:: + :local: + :depth: 2 + Querying data ============= From 9b58666e7a40e5ca92fbb1c068c209e95d6aa0e8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 16 Nov 2023 22:43:03 +0200 Subject: [PATCH 474/689] Fix identation in DDL (GH-78) --- src/rdbms/ddl.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 32aa299f1..a5b91ba50 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -192,13 +192,13 @@ columns, is unique among all the rows in the table. .. code-block:: postgresql -CREATE TABLE example -( - a INTEGER, - b INTEGER UNIQUE, - c INTEGER, - UNIQUE (a, c) -); + CREATE TABLE example + ( + a INTEGER, + b INTEGER UNIQUE, + c INTEGER, + UNIQUE (a, c) + ); Modify objects ============== From ff357cc5b0204ece2f648a7a24e107d50dbc9018 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 18 Nov 2023 10:45:21 +0200 Subject: [PATCH 475/689] Add insert data section draft (GH-79) --- src/rdbms/dml.txt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 84b73b1d0..d803ebb7d 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -14,15 +14,15 @@ updating, and deleting data within database tables. :local: :depth: 2 -Querying data -============= - -.. todo - Creating new records ==================== -.. todo +When a table is created, it contains no data. Inserting data will populate +a table with values. Data is inserted one row at a time. You can also insert +multiple rows with a single command. But it impossible to insert something +that is not a complete row. + +To create a new row use ``INSERT`` command. Modifying records ================= @@ -33,3 +33,9 @@ Removing data ============= .. todo + + +Querying data +============= + +.. todo From 25f78549b397ffc33f6842cfff88848b54e22c98 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 10:05:15 +0200 Subject: [PATCH 476/689] Add insert data section description and examples (GH-79) --- libms-db | 2 +- src/rdbms/dml.txt | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/libms-db b/libms-db index a38998e5c..9ea39e3c2 160000 --- a/libms-db +++ b/libms-db @@ -1 +1 @@ -Subproject commit a38998e5cc0de5172241989ef2eac6406be59f7f +Subproject commit 9ea39e3c2f9cb513b56daee2c77bce29db40a9d7 diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index d803ebb7d..719ea0988 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -24,6 +24,41 @@ that is not a complete row. To create a new row use ``INSERT`` command. +.. literalinclude:: /../libms-db/libms.sql + :caption: Create publisher table + :language: postgresql + :start-after: -- label: ddl-publisher + :end-before: -- label: + +.. literalinclude:: /../libms-db/libms.sql + :caption: Insert data to publisher table + :language: postgresql + :start-after: -- label: dml-publisher + :end-before: -- label: + +.. literalinclude:: /../libms-db/libms.sql + :caption: Create author table + :language: postgresql + :start-after: -- label: ddl-author + :end-before: -- label: + +.. literalinclude:: /../libms-db/libms.sql + :caption: Inserting multiple values at a time + :language: postgresql + :lines: 251-260,400-402 + +.. literalinclude:: /../libms-db/libms.sql + :caption: Create book table + :language: postgresql + :start-after: -- label: ddl-book + :end-before: -- label: + +.. literalinclude:: /../libms-db/libms.sql + :caption: Inserting records from file + :language: postgresql + :start-after: -- label: dml-book + :end-before: -- label: + Modifying records ================= From 5fb35bb49d52d41cfb2c47c57a71eef5e9a87dca Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 10:23:52 +0200 Subject: [PATCH 477/689] Update insert data section (GH-79) --- src/rdbms/dml.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 719ea0988..b747b54fd 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -35,7 +35,14 @@ To create a new row use ``INSERT`` command. :language: postgresql :start-after: -- label: dml-publisher :end-before: -- label: - + +The data values are listed in the order in which the columns appear in +the table, separated by commas. This syntax has the drawback that you need to +know the order of the columns in the table. To avoid this you can also list +the columns explicitly. If you don't have values for all the columns, you can +omit some of them. In that case, the columns will be filled with their default +values. + .. literalinclude:: /../libms-db/libms.sql :caption: Create author table :language: postgresql @@ -46,6 +53,8 @@ To create a new row use ``INSERT`` command. :caption: Inserting multiple values at a time :language: postgresql :lines: 251-260,400-402 + +You can insert multiple rows in a single command. .. literalinclude:: /../libms-db/libms.sql :caption: Create book table From 1603576bd1ba9a115b36267409e8cdf524f07154 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 13:16:34 +0200 Subject: [PATCH 478/689] Update insert data section (GH-79) --- src/rdbms/dml.txt | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index b747b54fd..b5b9729f0 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -24,6 +24,13 @@ that is not a complete row. To create a new row use ``INSERT`` command. +The data values are listed in the order in which the columns appear in +the table, separated by commas. This syntax has the drawback that you need to +know the order of the columns in the table. To avoid this you can also list +the columns explicitly. If you don't have values for all the columns, you can +omit some of them. In that case, the columns will be filled with their default +values. + .. literalinclude:: /../libms-db/libms.sql :caption: Create publisher table :language: postgresql @@ -36,12 +43,7 @@ To create a new row use ``INSERT`` command. :start-after: -- label: dml-publisher :end-before: -- label: -The data values are listed in the order in which the columns appear in -the table, separated by commas. This syntax has the drawback that you need to -know the order of the columns in the table. To avoid this you can also list -the columns explicitly. If you don't have values for all the columns, you can -omit some of them. In that case, the columns will be filled with their default -values. +You can insert multiple rows in a single command. .. literalinclude:: /../libms-db/libms.sql :caption: Create author table @@ -54,8 +56,11 @@ values. :language: postgresql :lines: 251-260,400-402 -You can insert multiple rows in a single command. - +.. note:: + + There is a reference to the "publisher" table present below. Think of it + like placing the publisher information directly into "book" table for now. + .. literalinclude:: /../libms-db/libms.sql :caption: Create book table :language: postgresql @@ -71,7 +76,13 @@ You can insert multiple rows in a single command. Modifying records ================= -.. todo +The modification of data that is already in the database is referred as +updating. To update the existing rows, use the ``UPDATE`` command. +This requires three pieces of information: + +#. The name of the table and column(s) to update +#. The new value of the column(s) +#. Which row(s) to update Removing data ============= From 58cc4b7d3c50558ccfcc75f4667c49130d5da7ff Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 13:44:23 +0200 Subject: [PATCH 479/689] Add update data section (GH-79) --- src/rdbms/dml.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index b5b9729f0..c42d85d8b 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -84,6 +84,27 @@ This requires three pieces of information: #. The new value of the column(s) #. Which row(s) to update +.. code-block:: postgresql + + UPDATE book SET language = 'uk' WHERE publisher = 3; + +This might cause zero, one, or many rows to be updated. The update syntax +is pretty straightforward. First the key word ``UPDATE`` followed by the table +name. Next is the key word ``SET`` followed by the column name, an equal sign, +and the new column value. The new column value can be any scalar expression, +not just a constant. More than one column can be updated at a time by listing +more than one assignment in the ``SET`` clause. + +.. important:: + + ``WHERE`` clause is optional, but it limits the rows affected by + ``UPDATE`` command. If there is no limitations all the records + within a table will be updated with new values. + + .. code-block:: postgresql + + UPDATE book SET language = 'uk'; + Removing data ============= From 275453b7c781dfae91041d63168a8650d1580af8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 13:48:08 +0200 Subject: [PATCH 480/689] Add remove data section (GH-79) --- src/rdbms/dml.txt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index c42d85d8b..34e1dd523 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -108,8 +108,25 @@ more than one assignment in the ``SET`` clause. Removing data ============= -.. todo +So far we have explained how to add data to tables and how to change data. +What remains to discuss how to remove data that is no longer needed. Just +as adding data is only possible in whole rows, you can only remove entire +rows from a table. + +You use ``DELETE`` command to remove rows; the syntax is very similar to +the ``UPDATE`` command. + +.. code-block:: postgresql + + DELETE FROM book WHERE publisher = 3; + +If you simply write: + +.. code-block:: postgresql + + DELETE FROM book; +then all rows in the table will be deleted! Querying data ============= From 91c5a4e964a0345700887228ba61ca97a709dba6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 14:18:57 +0200 Subject: [PATCH 481/689] Add returning clause description (fixes GH-79) --- src/rdbms/dml.txt | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 34e1dd523..2cd03d50a 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -131,4 +131,23 @@ then all rows in the table will be deleted! Querying data ============= -.. todo +Returning data from modified rows +--------------------------------- + +Sometimes it is useful to obtain data from modified rows while they are being +manipulated. The ``INSERT``, ``UPDATE`` and ``DELETE`` commands all have an +optional ``RETURNING`` clause that supports this. Use of ``RETURNING`` avoids +performing an extra database query to collect the data, and is especially +valuable when it would otherwise be difficult to identify the modified rows +reliably. + +.. code-block:: postgresql + + INSERT INTO author (first_name, last_name, country, birthdate) + VALUES ('Wendye', 'Rowbotham', 'Poland', '1932-12-16'), + ('Grannie', 'Kidner', 'United States', '1940-02-21'), + ('Godart', 'Van Driel', 'United Kingdom', '1980-01-02'), + ('Meara', 'Meenehan', 'United States', '1994-12-13') + RETURNING id; + +For example the query above provides the identifiers to new rows. From 8ef45765ad3eb038450c247c6d451ef6a94b37b6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 15:25:43 +0200 Subject: [PATCH 482/689] Add from clause description (GH-138) --- src/rdbms/dml.txt | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 2cd03d50a..771d0b354 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -131,6 +131,9 @@ then all rows in the table will be deleted! Querying data ============= +The process of retrieving or the command to retrieve data from a database is +called a *query*. In SQL the ``SELECT`` command is used to specify queries. + Returning data from modified rows --------------------------------- @@ -151,3 +154,39 @@ reliably. RETURNING id; For example the query above provides the identifiers to new rows. + +Select rows from a table +------------------------ + +A simple kind of query has the form: + +.. code-block:: postgresql + + SELECT * FROM publisher; + +This command would retrieve all rows and all user-defined columns from +``publisher`` table. A select list can also select a subset of the available +columns or make calculations using the columns. + +.. code-block:: postgresql + + SELECT title, page_count / 2 + FROM book; + +``FROM`` clause is a simple kind of table expression: it reads just one table. +In general, table expression can be complex constructs of base tables, joins +and sub-queries. But it is possible to omit the table expression entirely and +use the ``SELECT`` command as a calculator (or in some another way): + +.. code-block:: sql + + SELECT 40 + 2; + +The ``FROM`` clause derives a table from one or more other tables given in +a comma-separated table reference list. A table reference can a table name, +or derived table such as sub-query, a ``JOIN`` construct, or complex +combinations of these. If more than one table reference is listed in the +``FROM`` clause, the table are cross-joined. The result of the ``FROM`` list +is an intermediate virtual table tant can then be subject to transformations +by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the +result of the overall table expression. From 67b8f1713f6cba572d916841d60fca6d5d73a8d1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 15:34:17 +0200 Subject: [PATCH 483/689] Add where clause description (GH-138) --- src/rdbms/dml.txt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 771d0b354..62e89d924 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -190,3 +190,33 @@ combinations of these. If more than one table reference is listed in the is an intermediate virtual table tant can then be subject to transformations by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the result of the overall table expression. + +Search conditions +----------------- + +After the processing of the ``FROM`` clause is done, each row of the derived +virtual table can be checked against the search condition. If the result of +the condition is ``true``, the row is kept in the output table, otherwise it +is discarded. The ``WHERE`` clause is used to handle search condition checks. + +Here are some examples of ``WHERE`` clause: + +.. code-block:: sql + + SELECT ... FROM fdt + WHERE c1 > 5; + + SELECT ... FROM fdt + WHERE c1 IN (1, 2, 3); + + SELECT ... FROM fdt + WHERE c1 IN (SELECT c1 FROM t2); + + SELECT ... FROM fdt + WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10); + + SELECT ... FROM fdt + WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100; + + SELECT ... FROM fdt + WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1); From b6c671c007cb082a692921b98270e1eb2876c8bd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 15:48:28 +0200 Subject: [PATCH 484/689] Add brief group by and having clauses description (GH-138) --- src/rdbms/dml.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 62e89d924..89b785efd 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -220,3 +220,15 @@ Here are some examples of ``WHERE`` clause: SELECT ... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1); + +Grouping data +------------- + +After passing the ``WHERE`` filter, the derived input table might be subject +to grouping, using ``GROUP BY`` clause, and elimination of group rows using +the ``HAVING`` clause. The ``GROUP BY`` clause is used to group together those +rows in a table that have the same values in all the columns listed. The order +in the columns are listed does not matter. The effect is to combine each set of +rows having common values into one group row that represents all rows in the +group. This is done to eliminate redundancy in the output and/or compute +aggregates that apply to these groups. From 02255677dec18c898de9986b68b5c1d93f9252f8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 15:54:13 +0200 Subject: [PATCH 485/689] Move queries to a dedicated document (GH-138, GH-79) --- src/rdbms/dml.txt | 86 +------------------------------------------- src/rdbms/index.txt | 1 + src/rdbms/query.txt | 88 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 85 deletions(-) create mode 100644 src/rdbms/query.txt diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 89b785efd..7b786f760 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -128,14 +128,8 @@ If you simply write: then all rows in the table will be deleted! -Querying data -============= - -The process of retrieving or the command to retrieve data from a database is -called a *query*. In SQL the ``SELECT`` command is used to specify queries. - Returning data from modified rows ---------------------------------- +================================= Sometimes it is useful to obtain data from modified rows while they are being manipulated. The ``INSERT``, ``UPDATE`` and ``DELETE`` commands all have an @@ -154,81 +148,3 @@ reliably. RETURNING id; For example the query above provides the identifiers to new rows. - -Select rows from a table ------------------------- - -A simple kind of query has the form: - -.. code-block:: postgresql - - SELECT * FROM publisher; - -This command would retrieve all rows and all user-defined columns from -``publisher`` table. A select list can also select a subset of the available -columns or make calculations using the columns. - -.. code-block:: postgresql - - SELECT title, page_count / 2 - FROM book; - -``FROM`` clause is a simple kind of table expression: it reads just one table. -In general, table expression can be complex constructs of base tables, joins -and sub-queries. But it is possible to omit the table expression entirely and -use the ``SELECT`` command as a calculator (or in some another way): - -.. code-block:: sql - - SELECT 40 + 2; - -The ``FROM`` clause derives a table from one or more other tables given in -a comma-separated table reference list. A table reference can a table name, -or derived table such as sub-query, a ``JOIN`` construct, or complex -combinations of these. If more than one table reference is listed in the -``FROM`` clause, the table are cross-joined. The result of the ``FROM`` list -is an intermediate virtual table tant can then be subject to transformations -by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the -result of the overall table expression. - -Search conditions ------------------ - -After the processing of the ``FROM`` clause is done, each row of the derived -virtual table can be checked against the search condition. If the result of -the condition is ``true``, the row is kept in the output table, otherwise it -is discarded. The ``WHERE`` clause is used to handle search condition checks. - -Here are some examples of ``WHERE`` clause: - -.. code-block:: sql - - SELECT ... FROM fdt - WHERE c1 > 5; - - SELECT ... FROM fdt - WHERE c1 IN (1, 2, 3); - - SELECT ... FROM fdt - WHERE c1 IN (SELECT c1 FROM t2); - - SELECT ... FROM fdt - WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10); - - SELECT ... FROM fdt - WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100; - - SELECT ... FROM fdt - WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1); - -Grouping data -------------- - -After passing the ``WHERE`` filter, the derived input table might be subject -to grouping, using ``GROUP BY`` clause, and elimination of group rows using -the ``HAVING`` clause. The ``GROUP BY`` clause is used to group together those -rows in a table that have the same values in all the columns listed. The order -in the columns are listed does not matter. The effect is to combine each set of -rows having common values into one group row that represents all rows in the -group. This is done to eliminate redundancy in the output and/or compute -aggregates that apply to these groups. diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 4b806e6bd..799d39034 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -64,3 +64,4 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: structure ddl dml + query diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt new file mode 100644 index 000000000..693fffa14 --- /dev/null +++ b/src/rdbms/query.txt @@ -0,0 +1,88 @@ +************* +Querying data +************* + +The process of retrieving or the command to retrieve data from a database is +called a *query*. In SQL the ``SELECT`` command is used to specify queries. + +.. contents:: + :local: + :depth: 2 + +Select rows from a table +======================== + +A simple kind of query has the form: + +.. code-block:: postgresql + + SELECT * FROM publisher; + +This command would retrieve all rows and all user-defined columns from +``publisher`` table. A select list can also select a subset of the available +columns or make calculations using the columns. + +.. code-block:: postgresql + + SELECT title, page_count / 2 + FROM book; + +``FROM`` clause is a simple kind of table expression: it reads just one table. +In general, table expression can be complex constructs of base tables, joins +and sub-queries. But it is possible to omit the table expression entirely and +use the ``SELECT`` command as a calculator (or in some another way): + +.. code-block:: sql + + SELECT 40 + 2; + +The ``FROM`` clause derives a table from one or more other tables given in +a comma-separated table reference list. A table reference can a table name, +or derived table such as sub-query, a ``JOIN`` construct, or complex +combinations of these. If more than one table reference is listed in the +``FROM`` clause, the table are cross-joined. The result of the ``FROM`` list +is an intermediate virtual table tant can then be subject to transformations +by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the +result of the overall table expression. + +Search conditions +================= + +After the processing of the ``FROM`` clause is done, each row of the derived +virtual table can be checked against the search condition. If the result of +the condition is ``true``, the row is kept in the output table, otherwise it +is discarded. The ``WHERE`` clause is used to handle search condition checks. + +Here are some examples of ``WHERE`` clause: + +.. code-block:: sql + + SELECT ... FROM fdt + WHERE c1 > 5; + + SELECT ... FROM fdt + WHERE c1 IN (1, 2, 3); + + SELECT ... FROM fdt + WHERE c1 IN (SELECT c1 FROM t2); + + SELECT ... FROM fdt + WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10); + + SELECT ... FROM fdt + WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100; + + SELECT ... FROM fdt + WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1); + +Grouping data +============= + +After passing the ``WHERE`` filter, the derived input table might be subject +to grouping, using ``GROUP BY`` clause, and elimination of group rows using +the ``HAVING`` clause. The ``GROUP BY`` clause is used to group together those +rows in a table that have the same values in all the columns listed. The order +in the columns are listed does not matter. The effect is to combine each set of +rows having common values into one group row that represents all rows in the +group. This is done to eliminate redundancy in the output and/or compute +aggregates that apply to these groups. From adc2173ea77dd11a296b6a1173f4bc9e3e03cad7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 16:25:14 +0200 Subject: [PATCH 486/689] Add select lists subsection (GH-138) --- src/rdbms/query.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 693fffa14..09cd23dca 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -86,3 +86,24 @@ in the columns are listed does not matter. The effect is to combine each set of rows having common values into one group row that represents all rows in the group. This is done to eliminate redundancy in the output and/or compute aggregates that apply to these groups. + +Select lists +============ + +As shown is the previous section, the table expression in the ``SELECT`` +command constructs an intermediate virtual table by possibly combining tables, +views, eliminating rows, grouping etc. This table is finally passed on to +processing by the *select list*. The select list determines which *columns* +of the intermediate table are actually output. + +Select list items +----------------- + +The simplest kind of select is ``*`` which emits that the table expression +produces. Otherwise, a select list is a comma-separated list of value +expressions. For instance: + +.. code-block:: sql + + SELECT first_name, last_name + FROM author; From 888f0636fa36d07c695eb4250c05c4083919cbc3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 18:20:15 +0200 Subject: [PATCH 487/689] Add column labels (GH-138) --- src/rdbms/query.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 09cd23dca..598ff2255 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -107,3 +107,22 @@ expressions. For instance: SELECT first_name, last_name FROM author; + +Columns labels +-------------- + +The entries listed in the select list can be assigned names for subsequent +processing. + +.. code-block:: sql + + SELECT title, page_count / 2 as sheets FROM book; + +If no output column name is specified using ``AS``, the system will assign +a default column name. For simple column references, this is the name of +the referenced column. For function calls, this is the name of the function. +For complex expressions, the system will generate a generic name. + +.. note:: + + Labels are often referenced as "aliases". From 2511028278cd8b519a692d26c015995e4bc85a80 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 18:34:53 +0200 Subject: [PATCH 488/689] Add distinct description (GH-138) --- src/rdbms/query.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 598ff2255..e6ccb3f47 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -126,3 +126,22 @@ For complex expressions, the system will generate a generic name. .. note:: Labels are often referenced as "aliases". + +DISTINCT +-------- + +After the select list has been processed, the result table can optionally be +subject to the elimination of duplicate rows. The ``DISTINCT`` key word is +written directly after ``SELECT`` to specify this: + +.. note:: + + SELECT DISTINCT publisher FROM book; + +Obviously, two rows are considered distinct if they differ in at least one +column value. Null values are considered equal in comparison. Alternatively, +an arbitary expression can determine what rows are to be considered distinct. + +:: + + SELECT DISTINCT ON (expression [, expression ...]) select_list ... From 1cfe841f43f7942863bfa45df55984e28a5c34f9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 18:46:36 +0200 Subject: [PATCH 489/689] Update distinct section (GH-138) --- src/rdbms/query.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index e6ccb3f47..10aaf68df 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -142,6 +142,6 @@ Obviously, two rows are considered distinct if they differ in at least one column value. Null values are considered equal in comparison. Alternatively, an arbitary expression can determine what rows are to be considered distinct. -:: +.. code-block:: SELECT DISTINCT ON (expression [, expression ...]) select_list ... From c767681bc8fc90f69ebe50174258a53833086e8c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 18:47:32 +0200 Subject: [PATCH 490/689] Add combining queries draft (GH-138) --- src/rdbms/query.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 10aaf68df..9006e0841 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -145,3 +145,15 @@ an arbitary expression can determine what rows are to be considered distinct. .. code-block:: SELECT DISTINCT ON (expression [, expression ...]) select_list ... + +Combining queries +================= + +The results of two queries can be combined using the set operations union, +intersection, and difference. + +.. code-block:: + + query1 UNION [ALL] query2 + query1 INTERSECT [ALL] query2 + query1 EXCEPT [ALL] query2 From cbc423287bc0f68105997464a2924675d5a7ce1e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 19:07:11 +0200 Subject: [PATCH 491/689] Complete combining queries section (GH-138) --- src/rdbms/query.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 9006e0841..bbd646075 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -157,3 +157,16 @@ intersection, and difference. query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 + +UNION effectively appends the result of query2 to the result of query1 +(although there is no guarantee that this is the order in which the rows +are actually returned). Furthermore, it eliminates duplicate rows from +its result, in the same way as DISTINCT, unless UNION ALL is used. + +INTERSECT returns all rows that are both in the result of query1 and in +the result of query2. Duplicate rows are eliminated unless INTERSECT ALL +is used. + +EXCEPT returns all rows that are in the result of query1 but not in the result +of query2. (This is sometimes called the difference between two queries.) +Again, duplicates are eliminated unless EXCEPT ALL is used. From 06678d1ea7aed68b112aa74fdd36642775d4693e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 19:12:29 +0200 Subject: [PATCH 492/689] Update markups (GH-138) --- src/rdbms/query.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index bbd646075..bfb7e2812 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -158,15 +158,15 @@ intersection, and difference. query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 -UNION effectively appends the result of query2 to the result of query1 -(although there is no guarantee that this is the order in which the rows -are actually returned). Furthermore, it eliminates duplicate rows from -its result, in the same way as DISTINCT, unless UNION ALL is used. - -INTERSECT returns all rows that are both in the result of query1 and in -the result of query2. Duplicate rows are eliminated unless INTERSECT ALL -is used. - -EXCEPT returns all rows that are in the result of query1 but not in the result -of query2. (This is sometimes called the difference between two queries.) -Again, duplicates are eliminated unless EXCEPT ALL is used. +``UNION`` effectively appends the result of ``query2`` to the result of +``query1`` (although there is no guarantee that this is the order in which +the rows are actually returned). Furthermore, it eliminates duplicate rows from +its result, in the same way as ``DISTINCT``, unless ``UNION ALL`` is used. + +``INTERSECT`` returns all rows that are both in the result of ``query1`` and in +the result of ``query2``. Duplicate rows are eliminated unless +``INTERSECT ALL`` is used. + +``EXCEPT`` returns all rows that are in the result of ``query1`` but not in +the result of ``query2``. (This is sometimes called the difference between two +queries.) Again, duplicates are eliminated unless ``EXCEPT ALL`` is used. From 9cbca025c7ca312e9ef7d73cf0863ec8c5f8d724 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 19:24:04 +0200 Subject: [PATCH 493/689] Add meta for RDBMS documents --- src/rdbms/ddl.txt | 5 +++++ src/rdbms/dml.txt | 5 +++++ src/rdbms/query.txt | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index a5b91ba50..425dadf25 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Data definition language, DDL + :author: Serhii Horodilov + :keywords: sql, db, database, ddl, create, alter, drop + ************************ Data Definition Language ************************ diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 7b786f760..6e6a14402 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Data manipulation language, DML + :author: Serhii Horodilov + :keywords: sql, db, database, dml, insert, update, delete + ************************** Data Manipulation Language ************************** diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index bfb7e2812..966a17bfa 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -1,3 +1,8 @@ +.. meta:: + :description: Query data from database + :author: Serhii Horodilov + :keywords: sql, db, database, query, select, fetch + ************* Querying data ************* From 00f85d7db86abbbd4b99be064aa24060f55ba8af Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 20:02:08 +0200 Subject: [PATCH 494/689] Add sorting rows section (GH-138) --- src/rdbms/query.txt | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 966a17bfa..8682280e2 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -175,3 +175,40 @@ the result of ``query2``. Duplicate rows are eliminated unless ``EXCEPT`` returns all rows that are in the result of ``query1`` but not in the result of ``query2``. (This is sometimes called the difference between two queries.) Again, duplicates are eliminated unless ``EXCEPT ALL`` is used. + +Sorting rows +============ + +After a query has produced an output table it can optionally be sorted. +If sorting is not choosen, the rows will be returned in an unspecified order. +The actual order in this case will depend on the scan and join plan types and +the order on disk, but it must not be relied on. + +The ``ORDER BY`` clause specifies the sort order: + +.. code-block:: postgresql + + SELECT title, publisher_id FROM book ORDER BY title; + +The sort expression(s) can be any expression that would be valid in the query's +select list. + +When more than one expression is specified, the later values are used to sort +rows that are equal according to the earlier values. Each expression can be +followed by an option ``ASC`` or ``DESC`` keyword to set the sort direction +to asceding or desceding. ``ASC`` order is the default. + +The ``NULL FIRST`` and ``NULL LAST`` options can be used to determine whether +null appear before or after non-null values in the sort ordering. By default, +null values sort as if larget than any non-null value; that's, ``NULL FIRST`` +is the default for ``DESC`` order, and ``NULL LAST`` otherwise. + +Note that the ordering options are considered independently for each sort +column. For example ``ORDER BY x, y DESC`` means ``ORDER BY x ASC, y DESC``, +which is not the same as ``ORDER BY x DESC, y DESC``. + +A sort expression can also be the column label or number of an output column. + +``ORDER BY`` can be applied to the result of a ``UNION``, ``INTERSECT``, or +``EXCEPT`` combination, but in this case it is only permitted to sort by +output column names or numbers, not by expressions. From 2e70b2310997042f389125798bfecb02002bb328 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 20:31:55 +0200 Subject: [PATCH 495/689] Add WITH section (draft) (GH-138) --- src/rdbms/query.txt | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 8682280e2..6f4502af3 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -212,3 +212,60 @@ A sort expression can also be the column label or number of an output column. ``ORDER BY`` can be applied to the result of a ``UNION``, ``INTERSECT``, or ``EXCEPT`` combination, but in this case it is only permitted to sort by output column names or numbers, not by expressions. + +Limit and Offset +================ + +``LIMIT`` and ``OFFSET`` allow you to retrieve just a portion of the rows that +are generated by the rest of the query. + +.. code-block:: postgresql + + SELECT * FROM publisher LIMIT 10; + +The query above fetchs only first 10 rows from the "publisher" table. + +If a limit count is given, no more than that many rows will be returned. +But possibly fewer, if the query itself yeilds fewer rows. +``LIMIT ALL`` is the same as omitting the ``LIMIT`` clause, as is ``LIMIT`` +with ``NULL`` argument. + +``OFFSET`` says to skip that many rows before beginning to return rows. +``OFFSET 0`` is the same as omitting the ``OFFSET`` clause, as is ``OFFSET`` +with a ``NULL`` argument. + +.. code-block:: postgresql + + SELECT * FROM publisher LIMIT 10 OFFSET 10; + +The query above fetchs 10 publishers starting from the 11-th one. + +When using ``LIMIT`` and/or ``OFFSET``, it's important to use ``ORDER BY`` +clause that constraints the result rows into a unique order. Otherwise you +will get an unpredictable subset of the query's rows. + +WITH queries +============ + +``WITH`` provides a way to write auxillary statements for use in a larger +query. These statements, which are often referred to as +:abbr:`CTE (Common Table Expression)`, can be thought of as defining temporary +tables that exist just for one query. Each auxillary statement in a ``WITH`` +clause can be a ``SELECT``, ``INSERT``, ``UPDATE`` or ``DELETE``; and the +``WITH`` clause itself is attached to a primary statement that can be a +``SELECT``, ``INSERT``, ``UPDATE``, ``DELETE`` or ``MERGE``. + +Select in WITH +-------------- + +.. todo: + +Recursive queries +----------------- + +.. todo: + +Data modifying statements in WITH +--------------------------------- + +.. todo: From 55d510be7cca54f0dcf940e380d417d874bffede Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 21:34:19 +0200 Subject: [PATCH 496/689] Update library database submodule --- libms-db | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libms-db b/libms-db index 9ea39e3c2..dbdb0f388 160000 --- a/libms-db +++ b/libms-db @@ -1 +1 @@ -Subproject commit 9ea39e3c2f9cb513b56daee2c77bce29db40a9d7 +Subproject commit dbdb0f3887543f1039e9cb8c891555e3fd4c55e5 From 4e828173a92c7df50d728ac52179b679bab6bd36 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 21:42:16 +0200 Subject: [PATCH 497/689] Add data types document (GH-82) --- src/rdbms/datatypes.txt | 102 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/rdbms/datatypes.txt diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt new file mode 100644 index 000000000..523b79e42 --- /dev/null +++ b/src/rdbms/datatypes.txt @@ -0,0 +1,102 @@ +**************************** +PostgreSQL RDBMS: Data types +**************************** + +PostgreSQL has a rich set of data types available to users. + +Users can add new types to PostgreSQL using the ``CREATE TYPE`` command. + +.. literalinclude:: /../libms-db/libms.sql + :caption: Custom data type definition + :language: postgresql + :lines: 72-89 + ++-------------------------------+-------------------+------------------------------------------------------------------+ +| Name | Aliases | Description | ++===============================+===================+==================================================================+ +| ``bigint`` | ``int8`` | signed eight-byte integer | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``bigserial`` | ``serial8`` | auto incrementing eight-byte integer | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``bit`` | | fixed-length bit string | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``bit varying`` | ``varbit`` | variable-length bit string | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``boolean`` | ``bool`` | logical Boolean (true/false) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``box`` | | rectangular box on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``bytea`` | | binary data (“byte array”) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``character`` | ``char`` | fixed-length character string | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``character varying`` | ``varchar`` | variable-length character string | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``cidr`` | | IPv4 or IPv6 network address | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``circle`` | | circle on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``double precision`` | ``float8`` | double precision floating-point number (8 bytes) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``date`` | | calendar date (year, month, day) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``inet`` | | IPv4 or IPv6 host address | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``integer`` | ``int``, ``int4`` | signed four-byte integer | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``interval`` | | time span | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``json`` | | textual JSON data | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``jsonb`` | | binary JSON data, decomposed | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``line`` | | infinite line on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``lseg`` | | line segment on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``macaddr`` | | MAC (Media Access Control) address | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``macaddr8`` | | MAC (Media Access Control) address (EUI-64 format) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``money`` | | currency amount | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``numeric`` | ``decimal`` | exact numeric of selectable precision | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``path`` | | geometric path on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``pg_lsn`` | | PostgreSQL Log Sequence Number | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``pg_snapshot`` | | user-level transaction ID snapshot | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``point`` | | geometric point on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``polygon`` | | closed geometric path on a plane | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``real`` | ``float4`` | single precision floating-point number (4 bytes) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``smallint`` | ``int2`` | signed two-byte integer | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``smallserial`` | ``serial2`` | auto incrementing two-byte integer | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``serial`` | ``serial4`` | auto incrementing four-byte integer | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``text`` | | variable-length character string | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``time`` | | time of day (no time zone) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``time with time zone`` | ``timetz`` | time of day, including time zone | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``timestamp`` | | date and time (no time zone) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``timestamp with time zone`` | ``timestamptz`` | date and time, including time zone | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``tsquery`` | | text search query | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``tsvector`` | | text search document | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``txid_snapshot`` | | user-level transaction ID snapshot (deprecated; see pg_snapshot) | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``uuid`` | | universally unique identifier | ++-------------------------------+-------------------+------------------------------------------------------------------+ +| ``xml`` | | XML data | ++-------------------------------+-------------------+------------------------------------------------------------------+ From 5b2d743e7c300f1ed1dc0f47a21150df119ca685 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 21:54:37 +0200 Subject: [PATCH 498/689] Update RDBMS toctree --- src/rdbms/{aggregation.txt => aggregate.txt} | 124 ++----------------- src/rdbms/index.txt | 3 + 2 files changed, 14 insertions(+), 113 deletions(-) rename src/rdbms/{aggregation.txt => aggregate.txt} (67%) diff --git a/src/rdbms/aggregation.txt b/src/rdbms/aggregate.txt similarity index 67% rename from src/rdbms/aggregation.txt rename to src/rdbms/aggregate.txt index 6cf288abe..7bd8f1d1b 100644 --- a/src/rdbms/aggregation.txt +++ b/src/rdbms/aggregate.txt @@ -9,24 +9,10 @@ Data Aggregation ******************************************************************************* -Here is some dummy data, that will be used as example in this section. +Like most other relational database products, PostgreSQL supports +*aggregate functions*. -.. csv-table:: product - :align: center - :file: products_table.csv - :header-rows: 1 - -.. only:: builder_html - - The same dataset is available as: - - - :download:`csv file <./products_table.csv>` - - :download:`postgres dump file ` - -Aggregate functions -=================== - -*Aggregate functions* compute a single result from a set of input values. +An *aggregate functions* compute a single result from a set of input values. Various RDBMS implement various built-in aggregate functions. In this section we will review 5 basic functions that are available in all RDBMS. @@ -40,15 +26,7 @@ The ``count(field)`` function returns a count of the number of times that The ``count(*)`` function (with no arguments) returns the total number of rows in the group. -.. code-block:: sql - - SELECT count(*) as "total products" FROM product; - -:: - - total_products - ---------------- - 10 +.. todo: provide a code example Maximum value ------------- @@ -59,15 +37,7 @@ an ORDER BY on the same column. Aggregate function returns ``NULL`` if and only if there are no non-NULL values in the group. -.. code-block:: sql - - SELECT max(price) as "maximum price" FROM product; - -:: - - maximum price - --------------- - 350000 +.. todo: provide a code example Minimum value ------------- @@ -78,15 +48,7 @@ appear in an ORDER BY of the column. Aggregate function returns ``NULL`` if and only if there are no non-NULL values in the group. -.. code-block:: sql - - SELECT min(price) as "minimum price" FROM product; - -:: - - minimum price - --------------- - 20000 +.. todo: provide a code example Average value ------------- @@ -97,16 +59,7 @@ as 0. The result is always a floating point value whenever there is at least one non-NULL input even if all inputs are integers. The result is ``NULL`` if and only if there are no non-NULL inputs. -.. code-block:: sql - - SELECT avg(price) as "average price" FROM product; - -:: - - average price - --------------------- - 100500.000000000000 - +.. todo: provide a code example Sum of values ------------- @@ -123,15 +76,7 @@ If there are no non-NULL input rows then function returns ``NULL``. ``sum``, but returns ``0.0`` (always floating point) if there are no non-NULL input rows. -.. code-block:: sql - - SELECT sum(sold) as "total sold items" FROM product; - -:: - - total sold items - ------------------ - 3750 +.. todo: provide a code example Grouping data ============= @@ -142,15 +87,7 @@ to group outputs in some specific manner. For example, if the task is to count number of registered categories it is simple to solve as: -.. code-block:: - - SELECT count(DISTINCT category) FROM product; - -:: - - count - ------- - 6 +.. todo: provide a code example But in case, the task is to count **sold** items for each category, this becomes impossible to solve without grouping items. ``GROUP BY`` clause @@ -158,30 +95,7 @@ provides the ability to group rows based on some field(s) values. General syntax is: -:: - - SELECT select_list - FROM ... - [WHERE ...] - GROUP BY grouping_column_reference [, grouping_column_reference]... - -.. code-block:: - - SELECT category, sum(sold) as sold FROM product GROUP BY category; - -.. table:: - :align: center - - ======== ==== - category sold - ======== ==== - Audio 0 - Printers 800 - Gaming 600 - Monitors 400 - Laptops 300 - Phones 800 - ======== ==== +.. todo: provide a code example If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` clause, then each of the expressions specified as part of the GROUP BY clause is @@ -203,23 +117,7 @@ items in it? ``WHERE`` clause will be useless, cause it's evaluated before grouping output. In other words, only rows that suite WHERE filter will be selected. -.. code-block:: sql - - SELECT category, sum(sold) as sold - FROM product - GROUP BY category - HAVING sum(sold) < 500; - -.. table:: - :align: center - - ======== ==== - category sold - ======== ==== - Audio 0 - Monitors 400 - Laptops 300 - ======== ==== +.. todo: provide a code example If a ``HAVING`` clause is specified, it is evaluated once for each group of rows as a boolean expression. If the result of evaluating the HAVING clause is diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 799d39034..f4787099f 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -62,6 +62,9 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: :name: rdbms structure + datatype ddl dml query + relations + aggregate From d779e6d0de7918467c10e0d33e3c4c11bef3ebcf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 22:02:36 +0200 Subject: [PATCH 499/689] Remove outdated RDBMS assets --- assets/sql/products.pg13-1.dump.sql | 103 ---------------------------- src/rdbms/products_table.csv | 11 --- 2 files changed, 114 deletions(-) delete mode 100644 assets/sql/products.pg13-1.dump.sql delete mode 100644 src/rdbms/products_table.csv diff --git a/assets/sql/products.pg13-1.dump.sql b/assets/sql/products.pg13-1.dump.sql deleted file mode 100644 index b7ff37b33..000000000 --- a/assets/sql/products.pg13-1.dump.sql +++ /dev/null @@ -1,103 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 13.1 (Debian 13.1-1.pgdg100+1) --- Dumped by pg_dump version 14.5 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - -SET default_tablespace = ''; - -SET default_table_access_method = heap; - --- --- Name: product; Type: TABLE; Schema: public; Owner: postgres --- - -CREATE TABLE public.product ( - id integer NOT NULL, - name text NOT NULL, - price integer NOT NULL, - category text NOT NULL, - sold integer NOT NULL -); - - -ALTER TABLE public.product OWNER TO postgres; - --- --- Name: product_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres --- - -CREATE SEQUENCE public.product_id_seq - AS integer - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER TABLE public.product_id_seq OWNER TO postgres; - --- --- Name: product_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres --- - -ALTER SEQUENCE public.product_id_seq OWNED BY public.product.id; - - --- --- Name: product id; Type: DEFAULT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public.product ALTER COLUMN id SET DEFAULT nextval('public.product_id_seq'::regclass); - - --- --- Data for Name: product; Type: TABLE DATA; Schema: public; Owner: postgres --- - -COPY public.product (id, name, price, category, sold) FROM stdin; -1 Samsung Galaxy 100000 Phones 500 -2 iPhone 13 Pro 120000 Phones 300 -3 MacBook Pro 350000 Laptops 100 -4 Lenovo ThinkPad 150000 Laptops 200 -5 HP Printer 20000 Printers 800 -6 Dell Monitor 50000 Monitors 400 -7 Sony Headphones 30000 Audio 0 -8 Bose Soundbar 70000 Audio 0 -9 Xbox Series X 60000 Gaming 250 -10 PlayStation 5 55000 Gaming 350 -\. - - --- --- Name: product_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres --- - -SELECT pg_catalog.setval('public.product_id_seq', 10, true); - - --- --- Name: product product_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public.product - ADD CONSTRAINT product_pkey PRIMARY KEY (id); - - --- --- PostgreSQL database dump complete --- - diff --git a/src/rdbms/products_table.csv b/src/rdbms/products_table.csv deleted file mode 100644 index 4e4549145..000000000 --- a/src/rdbms/products_table.csv +++ /dev/null @@ -1,11 +0,0 @@ -id,name,price,category,sold -1,"Samsung Galaxy",100000,Phones,500 -2,"iPhone 13 Pro",120000,Phones,300 -3,"MacBook Pro",350000,Laptops,100 -4,"Lenovo ThinkPad",150000,Laptops,200 -5,"HP Printer",20000,Printers,800 -6,"Dell Monitor",50000,Monitors,400 -7,"Sony Headphones",30000,Audio,0 -8,"Bose Soundbar",70000,Audio,0 -9,"Xbox Series X",60000,Gaming,250 -10,"PlayStation 5",55000,Gaming,350 From 3c198770c48ebc9246199d9c8b20355acb64abd6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 22:15:56 +0200 Subject: [PATCH 500/689] Add numeric types ranges (GH-82) --- src/rdbms/datatypes.txt | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 523b79e42..bbf315feb 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -100,3 +100,41 @@ Users can add new types to PostgreSQL using the ``CREATE TYPE`` command. +-------------------------------+-------------------+------------------------------------------------------------------+ | ``xml`` | | XML data | +-------------------------------+-------------------+------------------------------------------------------------------+ + +Numeric types +============= + +Numeric types consist of two-, four-, and eight-byte integers, four- and +eight-byte floating-point numbers, and selectable-precision decimals. + +Type types ``smallint``, ``integer`` and ``bigint`` store whole numbers, that +is, numbers without fractional component, of various ranges. Attempts to store +values outside of the allowed range will result an error. + ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| Name | Storage Size | Description | Range | ++==================+==============+=================================+==================================================+ +| smallint | 2 bytes | small-range integer | -32768 to +32767 | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| integer | 4 bytes | typical choice for integer | -2147483648 to +2147483647 | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| bigint | 8 bytes | large-range integer | -9223372036854775808 to +9223372036854775807 | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| decimal | variable | user-specified precision, | up to 131072 digits before the decimal point; | +| | | exact | up to 16383 digits after the decimal point | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| numeric | variable | user-specified precision, | up to 131072 digits before the decimal point; | +| | | exact | up to 16383 digits after the decimal point | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| real | 4 bytes | variable-precision, | 6 decimal digits precision | +| | | inexact | | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| double precision | 8 bytes | variable-precision, | 15 decimal digits precision | +| | | inexact | | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| smallserial | 2 bytes | small auto incrementing integer | 1 to 32767 | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| serial | 4 bytes | auto incrementing integer | 1 to 2147483647 | ++------------------+--------------+---------------------------------+--------------------------------------------------+ +| bigserial | 8 bytes | large auto incrementing integer | 1 to 9223372036854775807 | ++------------------+--------------+---------------------------------+--------------------------------------------------+ From 0c396691a84dabfd07e5ad83fe1ddddbf13d9563 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 22:19:55 +0200 Subject: [PATCH 501/689] Update PostgreSQL image --- assets/img/postgres.svg | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/assets/img/postgres.svg b/assets/img/postgres.svg index 9b96ff353..d1eefea11 100644 --- a/assets/img/postgres.svg +++ b/assets/img/postgres.svg @@ -1 +1,16 @@ -file_type_pgsql \ No newline at end of file + + + + + + + + + + + + + + + + \ No newline at end of file From 463f8a724dae750d7571878b8226f58f7909690f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 22:49:24 +0200 Subject: [PATCH 502/689] Add system columns rubric (GH-78) --- src/rdbms/ddl.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 425dadf25..43fbc3fe7 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -205,6 +205,20 @@ columns, is unique among all the rows in the table. UNIQUE (a, c) ); +.. rubric:: System columns + +Every table has several system columns that are implicitly defined by +the system. Therefore, these names cannot be used as names of user-defined +columns. These columns cannot be used in the generated columns (except +``tableoid``). Columns are: + +- ``tableoid`` +- ``xmin`` +- ``cmin`` +- ``xmax`` +- ``cmax`` +- ``ctid`` + Modify objects ============== From 3eebeb416c618183657613eca0564c3cd2be2646 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 19 Nov 2023 23:21:23 +0200 Subject: [PATCH 503/689] Add character types section (GH-82) --- src/rdbms/datatypes.txt | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index bbf315feb..f49dfbe3d 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -138,3 +138,40 @@ values outside of the allowed range will result an error. +------------------+--------------+---------------------------------+--------------------------------------------------+ | bigserial | 8 bytes | large auto incrementing integer | 1 to 9223372036854775807 | +------------------+--------------+---------------------------------+--------------------------------------------------+ + +Character types +=============== + ++-------------------------------------+----------------------------+ +| Name | Description | ++=====================================+============================+ +| ``character varying``, ``varchar`` | variable-length with limit | ++-------------------------------------+----------------------------+ +| ``character``, ``char``, ``bpchar`` | fixed-length, blank-padded | ++-------------------------------------+----------------------------+ +| ``bpchar`` without length specifier | variable unlimited length, | +| | blank-trimmed | ++-------------------------------------+----------------------------+ +| ``text`` | variable-unlimited length | ++-------------------------------------+----------------------------+ + +SQL defines two primary character types: ``character varying(n)`` and +``character(n)``, where ``n`` is a positive integer. Both of these types can +store string up to ``n`` characters length. An attempt to store a longer string +into a column of these types will result an error, unless all the excess +characters are all spaces, in which case the string will be truncated to +the maximum length. However, if one explicitly casts a value to ``varchar(n)`` +or ``char(n)``, then an over-legth value will be truncated to ``n`` characters +without raising an error. If the string to be stored is shorter than the +declared length, value of type ``char`` will be space-padded; values of +``varchar`` will simply store the storter string. + +In addition postgres provides the ``text`` type, which stores strings of any +length. + +If specified, the length ``n`` must be greater than 0 and cannot exceed +10,485,760. If ``character varying`` is used without length specifier, +the type accepts strings of any length. If ``bpchar`` lacks a length specifier, +it also accepts strings of any length, but trailing spaces are semantically +insignificant. If ``character`` lacks a specifier, it is equavivalent to +``character(1)``. From 02ee2bdb33514708ecbcdf0021b369f7db154a4d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 00:20:12 +0200 Subject: [PATCH 504/689] Add date/time types (GH-82) --- src/rdbms/datatypes.txt | 106 ++++++++++++++++++++++++++++++++++++++++ src/rdbms/index.txt | 2 +- 2 files changed, 107 insertions(+), 1 deletion(-) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index f49dfbe3d..c025a106b 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -175,3 +175,109 @@ the type accepts strings of any length. If ``bpchar`` lacks a length specifier, it also accepts strings of any length, but trailing spaces are semantically insignificant. If ``character`` lacks a specifier, it is equavivalent to ``character(1)``. + +Date/Time types +=============== + +PostgreSQL supports the full set of SQL date and time types. Dates are counted +according to the Gregorian calendar, even in years before that calendar was +introduced. + +``time``, ``timestamp``, and ``interval`` accept an optional precision value, +which specifies the number of fractional digits retained in the seconds field. +By default, there is no explicit bound on precision. The allowed of this value +is from 0 to 6. + +The ``interval`` type has an additional option, which is to restrict the of +stored fields by writing one of these phrases: + +.. code-block:: + + YEAR + MONTH + DAY + HOUR + MINUTE + SECOND + YEAR TO MONTH + DAY TO HOUR + DAY TO MINUTE + DAY TO SECOND + HOUR TO MINUTE + HOUR TO SECOND + MINUTE TO SECOND + +Dates +----- + +Some possible inputs for the ``date`` type. + ++-----------------------+-----------------------------------------------------+ +| Example | Description | ++=======================+=====================================================+ +| ``1999-01-08`` | ISO 8601; January 8 in any mode | +| | (**recommended format**) | ++-----------------------+-----------------------------------------------------+ +| ``January 8, 1999`` | unambiguous in any datestyle input mode | ++-----------------------+-----------------------------------------------------+ +| ``1/8/1999`` | January 8 in MDY mode; August 1 in DMY mode | ++-----------------------+-----------------------------------------------------+ +| ``1/18/1999`` | January 18 in MDY mode; | +| | rejected in other modes | ++-----------------------+-----------------------------------------------------+ +| ``01/02/03`` | January 2, 2003 in MDY mode; | +| | February 1, 2003 in DMY mode; | +| | February 3, 2001 in YMD mode | ++-----------------------+-----------------------------------------------------+ +| ``1999-Jan-08`` | January 8 in any mode | +| ``Jan-08-1999`` | | +| ``08-Jan-1999`` | | ++-----------------------+-----------------------------------------------------+ +| ``99-Jan-08`` | January 8 in YMD mode, else error | ++-----------------------+-----------------------------------------------------+ +| ``08-Jan-99`` | January 8, except error in YMD mode | +| ``Jan-08-99`` | | ++-----------------------+-----------------------------------------------------+ +| ``19990108`` | ISO 8601; January 8, 1999 in any mode | +| ``990108`` | | ++-----------------------+-----------------------------------------------------+ +| ``1999.008`` | year and day of year | ++-----------------------+-----------------------------------------------------+ +| ``J2451187`` | Julian date | ++-----------------------+-----------------------------------------------------+ +| ``January 8, 99 BC`` | year 99 BC | ++-----------------------+-----------------------------------------------------+ + +Times +----- + +Some possible inputs for the ``time`` type. + ++-----------------------+-----------------------------------------------------+ +| Example | Description | ++=======================+=====================================================+ +| ``04:05:06.789`` | ISO 8601 | +| ``04:05:06`` | | +| ``04:05`` | | +| ``040506`` | | ++-----------------------+-----------------------------------------------------+ +| ``04:05 AM`` | same as 04:05; AM does not affect value | ++-----------------------+-----------------------------------------------------+ +| ``04:05 PM`` | same as 16:05; input hour must be <= 12 | ++-----------------------+-----------------------------------------------------+ +| ``04:05:06.789-8`` | ISO 8601, with time zone as UTC offset | +| ``04:05:06-08:00`` | | +| ``04:05-08:00`` | | +| ``040506-08`` | | ++-----------------------+-----------------------------------------------------+ +| ``040506+0730`` | ISO 8601, | +| | with fractional-hour time zone as UTC offset | ++-----------------------+-----------------------------------------------------+ +| ``040506+07:30:00`` | UTC offset specified to seconds | +| | (not allowed in ISO 8601) | ++-----------------------+-----------------------------------------------------+ +| ``04:05:06 PST`` | time zone specified by abbreviation | ++-----------------------+-----------------------------------------------------+ +| ``2003-04-12 04:05:06 | time zone specified by full | +| America/New_York`` | | ++-----------------------+-----------------------------------------------------+ diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index f4787099f..dfbbc2309 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -62,7 +62,7 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: :name: rdbms structure - datatype + datatypes ddl dml query From b7b2996d9bd5e5fdc8a65739c18635bd47e15cc7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 00:32:28 +0200 Subject: [PATCH 505/689] Add time zones and special date/time inputs tables (GH-82) --- src/rdbms/datatypes.txt | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index c025a106b..2c89871aa 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -281,3 +281,58 @@ Some possible inputs for the ``time`` type. | ``2003-04-12 04:05:06 | time zone specified by full | | America/New_York`` | | +-----------------------+-----------------------------------------------------+ + +.. rubric:: Time zone input + ++-----------------------+-----------------------------------------------------+ +| Example | Description | ++=======================+=====================================================+ +| ``PST`` | Abbreviation (for Pacific Standard Time) | ++-----------------------+-----------------------------------------------------+ +| ``America/New_York`` | Full time zone name | ++-----------------------+-----------------------------------------------------+ +| ``PST8PDT`` | POSIX-style time zone specification | ++-----------------------+-----------------------------------------------------+ +| ``-8:00:00`` | UTC offset for PST | ++-----------------------+-----------------------------------------------------+ +| ``-8:00`` | UTC offset for PST (ISO 8601 extended format) | ++-----------------------+-----------------------------------------------------+ +| ``-800`` | UTC offset for PST (ISO 8601 basic format) | ++-----------------------+-----------------------------------------------------+ +| ``-8`` | UTC offset for PST (ISO 8601 basic format) | ++-----------------------+-----------------------------------------------------+ +| ``zulu`` | Military abbreviation for UTC | ++-----------------------+-----------------------------------------------------+ +| ``z`` | Short form of zulu (also in ISO 8601) | ++-----------------------+-----------------------------------------------------+ + +Special date/time inputs +------------------------ + ++--------------+---------------+----------------------------------------------+ +| Input String | Valid Types | Description | ++==============+===============+==============================================+ +| epoch | ``date``, | 1970-01-01 00:00:00+00 | +| | ``timestamp`` | (Unix system time zero) | ++--------------+---------------+----------------------------------------------+ +| infinity | ``date``, | later than all other time stamps | +| | ``timestamp`` | | ++--------------+---------------+----------------------------------------------+ +| -infinity | ``date, | earlier than all other time stamps | +| | ``timestamp`` | | ++--------------+---------------+----------------------------------------------+ +| now | ``date``, | current transaction's start time | +| | ``time``, | | +| | ``timestamp`` | | ++--------------+---------------+----------------------------------------------+ +| today | ``date``, | midnight (00:00) today | +| | ``timestamp`` | | ++--------------+---------------+----------------------------------------------+ +| tomorrow | ``date``, | midnight (00:00) tomorrow | +| | ``timestamp`` | | ++--------------+---------------+----------------------------------------------+ +| yesterday | ``date``, | midnight (00:00) yesterday | +| | ``timestamp`` | | ++--------------+---------------+----------------------------------------------+ +| allballs | ``time`` | 00:00:00.00 UTC | ++--------------+---------------+----------------------------------------------+ From ef54972d19c75bb708a118084d79789dd979a3e9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 01:02:34 +0200 Subject: [PATCH 506/689] Add todos to data types document --- src/rdbms/datatypes.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 2c89871aa..639acbc6a 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -336,3 +336,13 @@ Special date/time inputs +--------------+---------------+----------------------------------------------+ | allballs | ``time`` | 00:00:00.00 UTC | +--------------+---------------+----------------------------------------------+ + +.. todo: add interval rubric, usage examples (ref. libms.sql:author) + +.. todo: add boolean type section + +.. todo: add enumerate type section + +.. todo: add uuid type section, short description without details + +.. todo: add XML and JSON type section, short description without details From 3414adcd38bc4a19efc76307a201317837cd5ed3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 21:55:37 +0200 Subject: [PATCH 507/689] Fix typos within RDBMS documents --- src/rdbms/datatypes.txt | 8 ++++---- src/rdbms/query.txt | 18 +++++++++--------- src/rdbms/relations.txt | 5 ----- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 639acbc6a..ddc638a81 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -161,10 +161,10 @@ store string up to ``n`` characters length. An attempt to store a longer string into a column of these types will result an error, unless all the excess characters are all spaces, in which case the string will be truncated to the maximum length. However, if one explicitly casts a value to ``varchar(n)`` -or ``char(n)``, then an over-legth value will be truncated to ``n`` characters +or ``char(n)``, then an over-length value will be truncated to ``n`` characters without raising an error. If the string to be stored is shorter than the declared length, value of type ``char`` will be space-padded; values of -``varchar`` will simply store the storter string. +``varchar`` will simply store the shorter string. In addition postgres provides the ``text`` type, which stores strings of any length. @@ -173,7 +173,7 @@ If specified, the length ``n`` must be greater than 0 and cannot exceed 10,485,760. If ``character varying`` is used without length specifier, the type accepts strings of any length. If ``bpchar`` lacks a length specifier, it also accepts strings of any length, but trailing spaces are semantically -insignificant. If ``character`` lacks a specifier, it is equavivalent to +insignificant. If ``character`` lacks a specifier, it is equivalent to ``character(1)``. Date/Time types @@ -218,7 +218,7 @@ Some possible inputs for the ``date`` type. | ``1999-01-08`` | ISO 8601; January 8 in any mode | | | (**recommended format**) | +-----------------------+-----------------------------------------------------+ -| ``January 8, 1999`` | unambiguous in any datestyle input mode | +| ``January 8, 1999`` | unambiguous in any date style input mode | +-----------------------+-----------------------------------------------------+ | ``1/8/1999`` | January 8 in MDY mode; August 1 in DMY mode | +-----------------------+-----------------------------------------------------+ diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 6f4502af3..f72eed401 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -145,7 +145,7 @@ written directly after ``SELECT`` to specify this: Obviously, two rows are considered distinct if they differ in at least one column value. Null values are considered equal in comparison. Alternatively, -an arbitary expression can determine what rows are to be considered distinct. +an arbitrary expression can determine what rows are to be considered distinct. .. code-block:: @@ -180,7 +180,7 @@ Sorting rows ============ After a query has produced an output table it can optionally be sorted. -If sorting is not choosen, the rows will be returned in an unspecified order. +If sorting is not chosen, the rows will be returned in an unspecified order. The actual order in this case will depend on the scan and join plan types and the order on disk, but it must not be relied on. @@ -196,11 +196,11 @@ select list. When more than one expression is specified, the later values are used to sort rows that are equal according to the earlier values. Each expression can be followed by an option ``ASC`` or ``DESC`` keyword to set the sort direction -to asceding or desceding. ``ASC`` order is the default. +to ascending or descending. ``ASC`` order is the default. The ``NULL FIRST`` and ``NULL LAST`` options can be used to determine whether null appear before or after non-null values in the sort ordering. By default, -null values sort as if larget than any non-null value; that's, ``NULL FIRST`` +null values sort as if larger than any non-null value; that's, ``NULL FIRST`` is the default for ``DESC`` order, and ``NULL LAST`` otherwise. Note that the ordering options are considered independently for each sort @@ -223,10 +223,10 @@ are generated by the rest of the query. SELECT * FROM publisher LIMIT 10; -The query above fetchs only first 10 rows from the "publisher" table. +The query above fetches only first 10 rows from the "publisher" table. If a limit count is given, no more than that many rows will be returned. -But possibly fewer, if the query itself yeilds fewer rows. +But possibly fewer, if the query itself yields fewer rows. ``LIMIT ALL`` is the same as omitting the ``LIMIT`` clause, as is ``LIMIT`` with ``NULL`` argument. @@ -238,7 +238,7 @@ with a ``NULL`` argument. SELECT * FROM publisher LIMIT 10 OFFSET 10; -The query above fetchs 10 publishers starting from the 11-th one. +The query above fetches 10 publishers starting from the 11-th one. When using ``LIMIT`` and/or ``OFFSET``, it's important to use ``ORDER BY`` clause that constraints the result rows into a unique order. Otherwise you @@ -247,10 +247,10 @@ will get an unpredictable subset of the query's rows. WITH queries ============ -``WITH`` provides a way to write auxillary statements for use in a larger +``WITH`` provides a way to write auxiliary statements for use in a larger query. These statements, which are often referred to as :abbr:`CTE (Common Table Expression)`, can be thought of as defining temporary -tables that exist just for one query. Each auxillary statement in a ``WITH`` +tables that exist just for one query. Each auxiliary statement in a ``WITH`` clause can be a ``SELECT``, ``INSERT``, ``UPDATE`` or ``DELETE``; and the ``WITH`` clause itself is attached to a primary statement that can be a ``SELECT``, ``INSERT``, ``UPDATE``, ``DELETE`` or ``MERGE``. diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index afb1f14c1..50b2efea4 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -116,11 +116,6 @@ and only one matching record. Back to the example with employees. Multiple workstations (personal computers) are located in each office building. The only one person can occupy the only one work station at a time. -.. mermaid:: - - erDiagram - employee ||--|| work_station : occupies - Many-to-many relationship (N-to-N) ---------------------------------- From 903dfd8ca58570b4eac855cab52a0fab09e8ae8c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 21:59:55 +0200 Subject: [PATCH 508/689] Update library database submodule --- libms-db | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libms-db b/libms-db index dbdb0f388..5fa0c78db 160000 --- a/libms-db +++ b/libms-db @@ -1 +1 @@ -Subproject commit dbdb0f3887543f1039e9cb8c891555e3fd4c55e5 +Subproject commit 5fa0c78dbb3aacf99ac7c5da7403881338500741 From 9a70898933400299e88f585811a4df8617e31565 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 22:26:16 +0200 Subject: [PATCH 509/689] Add primary key description (GH-135) --- src/rdbms/relations.txt | 77 +++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index 50b2efea4..6c8bcbaad 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -1,57 +1,60 @@ -.. todo: review and update document - .. meta:: :description: This document describes the database relationships :author: Serhii Horodilov - :keywords: sql, db, database, relationship + :keywords: sql, db, database, relationship, primary key, foreign key, + pk, fk, one-to-one, one-to-many, many-to-many, 1-1, 1-n, n-m ******************************************************************************* Data Relationships ******************************************************************************* -It's time to talk about **data relations**. +Before dive into relationships, there is a need explain core concepts on how +data are referenced between different tables. -For example your database contains two tables: ``weather`` and ``city``. The -diagram below demonstrates the overall data structure: +Primary key +=========== -.. mermaid:: - :align: center +A primary key constraint indicates that a column, or group of columns, can be +used as a unique identifier for rows in the table. This requires that values +be both unique and not null. So, the following two table definitions accept +the same data: - erDiagram - weather { - string city - int temp_lo - int temp_hi - date date - } - city { - string name - point location - } - -Consider the following problem: you want to make sure no one can insert -a record into ``weather`` without a matching entry in ``city`` table. -This is called maintaining the *referential integrity* of your data. -In simplistic database systems this would be implemented (if at all) by first -looking at the cities table to check if a matching record exists, and then -inserting or rejecting the new weather records. This approach has a number of -problems and is very inconvenient. +.. code-block:: postgresql -.. code-block:: sql + CREATE TABLE publisher + ( + id INTEGER PRIMARY KEY, + ); - CREATE TABLE city ( - name varchar(80) primary key, - location point + CREATE TABLE publisher + ( + id INTEGER NOT NULL UNIQUE, ); - CREATE TABLE weather ( - city varchar(80) references cities(name), - temp_lo int, - temp_hi int, - date date +Primary keys can span more than one column; the syntax is similar to unique +constraint: + +.. code-block:: postgresql + + CREATE TABLE example + ( + a INTEGER, + b INTEGER, + c INTEGER, + PRIMARY KEY (a, c) ); -This declaration creates a relationship between two (or even more) tables. +Adding a primary key will automatically create a unique B-tree index on +the column or group of columns listed in the primary key, and will force +the column(s) to be marked ``NOT NULL``. + +A table can have at most one primary key. + +.. note:: + + There can be any number of unique and not-null constraints, which are + functionally almost the same thing, but only one can be identified as + the primary key. Foreign key (FK) ================ From 3fb1a47d1655e8aa5fb354e283576318f91578bf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 22:32:11 +0200 Subject: [PATCH 510/689] Update foreign key description and remove relationship sections (GH-135) --- src/rdbms/relations.txt | 77 ++--------------------------------------- 1 file changed, 3 insertions(+), 74 deletions(-) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index 6c8bcbaad..e86caeabc 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -59,80 +59,9 @@ A table can have at most one primary key. Foreign key (FK) ================ -So far, you have knowledge about **primary** keys. -The **foreign** key is a column, that *references* some another table. -In common, it's a reference to another table's PK; but there is no limitation -of this kind, any column can be referenced by another one. -FKs handle data integrity only, it's not required for FK to be non-NULL value. - -The relation's properties are described by CONSTRAINTS and the database's -structure. - -For example, modifying declaration with ``NOT NULL`` constraint grants -that each record within a table has a matching one entity in another table. - -.. code-block:: sql - - CREATE TABLE weather ( - city varchar(80) references cities(name) NOT NULL, - ... - ); - -This brings us to various relationship models. - -One-to-many relationship (1-to-N) ---------------------------------- - -This is the most common relationship. - -For the example above there are no limitations on temperature measurements in -a specified city. So, a single city may has 0 or N related records in -``weather`` table. But each weather record is related to the only one city. - -Another example is employees and office buildings they work in. Some big -company may have multiple offices and employee across the globe. -Multiple employees can be present in a single office building at a time. -But each employee can be physically located only in a single office at a time. - -.. mermaid:: - - erDiagram - employee }o--|| office : located - employee { - int id - string first_name - string last_name - email email - int office_id fk - } - office { - int id - point location - text address - } - -One-to-one relationship (1-to-1) --------------------------------- - -``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is -and only one matching record. Back to the example with employees. Multiple -workstations (personal computers) are located in each office building. -The only one person can occupy the only one work station at a time. - -Many-to-many relationship (N-to-N) ----------------------------------- - -These relationships require additional table. -A good example may be a *project role*. There are many of them in a production -team. And some employees may be assigned to the same role (e.g. developers, -testers etc.). But also a single person can be a developer and tester at -a time. - -.. mermaid:: - - erDiagram - employee }o--|{ employee_role : execute - role }o--|{ employee_role : assign +A foreign key constraint specifies that the value in a column (or a group of +columns) must match the values appearing in some row of another table. We say +this maintains the *referential integrity* between two tables. Joining data ============ From 2210106fabe8fd30b9a7f745ed5af01fefd714ee Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 23:28:31 +0200 Subject: [PATCH 511/689] Complete foreign key section (GH-135) --- src/rdbms/relations.txt | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index e86caeabc..e2e7a995e 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -63,6 +63,97 @@ A foreign key constraint specifies that the value in a column (or a group of columns) must match the values appearing in some row of another table. We say this maintains the *referential integrity* between two tables. +A table can have more than one foreign key constraint. Foreign key can also +overlaps with the primary key. + +To define a FK constraint: + +.. code-block:: postgresql + + CREATE TABLE book + ( + id SERIAL PRIMARY KEY, + publisher_id INTEGER REFERENCES publisher + ); + + CREATE TABLE book + ( + id SERIAL PRIMARY KEY, + publisher_id INTEGER REFERENCES publisher (id) + ); + + CREATE TABLE book + ( + id SERIAL PRIMARY KEY, + publisher_id INTEGER, + FOREIGN KEY (publisher_id) REFERENCES publisher + ); + +In this situation the ``book`` table is the *referencing* table, and +the ``publisher`` table is the *referenced* table. Similarly there are +referencing and referenced columns. + +In case the referenced column is not explicitly defined, the primary key +of the referenced table will be used as the referenced column. + +It is not possible to create a row with non-null foreign key, that does not +appear in the referenced table. + +Self-referential foreign key +---------------------------- + +Sometimes it is useful to the referenced table to be the same table as +referencing. This makes possible to create a tree-structures with nodes, +there a top-level node would have ``NULL`` ``parent_id``. + +.. code-block:: postgresql + + CREATE TABLE tree + ( + id SERIAL PRIMARY KEY, + parent_id INTEGER REFERENCES tree + ); + +Deleting referenced rows +------------------------ + +So far we know that the foreign keys disallows creation of rows that do not +relate to any row inside the referenced table. But what if a referenced row +needs to be removed? Intuitively, there are few options: + +- disallow deletion +- delete referencing rows as well +- something else... + +Restricting and cascading deletes are the two most common options. +``RESTRICT`` prevents deletion of a referenced row. ``CASCADE`` will also +delete all referencing rows as well as the referenced one. + +.. code-block:: postgresql + + CREATE TABLE book + ( + id SERIAL PRIMARY KEY, + publisher_id INTEGER REFERENCES publisher ON DELETE RESTRICT + ); + + CREATE TABLE book + ( + id SERIAL PRIMARY KEY, + publisher_id INTEGER REFERENCES publisher ON DELETE CASCADE + ); + +There are others options. + +``NO ACTION`` means that if any referencing rows still exist when +the constraint is checked, an error is raised; this is the default behavior. + +``SET NULL`` will replace all referencing rows foreign key values with ``NULL`` +values. + +``SET DEFAULT`` will replace all referencing rows foreign key values with +default values. + Joining data ============ From 56a9fb7e4312080da102ea48fd891ec54f88fafb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 20 Nov 2023 23:45:54 +0200 Subject: [PATCH 512/689] Update library database submodule --- libms-db | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libms-db b/libms-db index 5fa0c78db..eec7d6a24 160000 --- a/libms-db +++ b/libms-db @@ -1 +1 @@ -Subproject commit 5fa0c78dbb3aacf99ac7c5da7403881338500741 +Subproject commit eec7d6a247a7051abdf808f64406652338aa0bac From 8597c535b73d0c59e4801a5d6a39bbd6e08726ad Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 00:43:02 +0200 Subject: [PATCH 513/689] fixup! Update library database submodule --- libms-db | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libms-db b/libms-db index eec7d6a24..e026286d6 160000 --- a/libms-db +++ b/libms-db @@ -1 +1 @@ -Subproject commit eec7d6a247a7051abdf808f64406652338aa0bac +Subproject commit e026286d6464ce67891de8dde231f20f2de94683 From d294912920d7f291f3de00744df098c7bab4945f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 00:43:48 +0200 Subject: [PATCH 514/689] Update SQL snippets (GH-135) --- src/rdbms/relations.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index e2e7a995e..ba5f44b11 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -24,11 +24,13 @@ the same data: CREATE TABLE publisher ( id INTEGER PRIMARY KEY, + ... ); CREATE TABLE publisher ( id INTEGER NOT NULL UNIQUE, + ... ); Primary keys can span more than one column; the syntax is similar to unique From 08d1402baab695c1b823755664bc02f77295f6e3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 00:44:07 +0200 Subject: [PATCH 515/689] Add relation section (fixes GH-135) --- src/rdbms/relations.txt | 51 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index ba5f44b11..06fb3bcc9 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -156,6 +156,57 @@ values. ``SET DEFAULT`` will replace all referencing rows foreign key values with default values. +Relationships +------------- + +From the point of view of the RDBMS there are no other relationships between +two tables except the **foreign key**. +But the way the foreign keys are designed brings us three concepts of the data +relations. + +.. rubric:: One-to-many + +In a relational database, two tables have a one-to-many relationship if each +row in one table references multiple rows of the other table. For example +``publisher`` can publish many books, but a single ``book`` is published by +some specific publisher. + +.. literalinclude:: /../libms-db/libms.sql + :language: postgresql + :start-after: -- label: ddl-book + :end-before: -- label: + +.. rubric:: One-to-one + +.. note:: + + You can think of one-to-one relationship as a limited version of + *one-to-many*. + +In a relational database, two tables have a one-to-one relationship if each row +in one table links to exactly one row in the other table, and vice versa. +For example a table of ``members`` and a table of ``contacts`` might have +a one-to-one relationship. + +.. literalinclude:: /../libms-db/libms.sql + :language: postgresql + :start-after: -- label: ddl-member + :end-before: -- label: + +.. rubric:: Many-to-many + +In relational database, two table have many-to-many relationship if each row +in one table can reference multiple rows in another table, and vice versa. +For example table ``book`` may contain records for books authored by many +``authors``. On the other hand author can write multiple books. Implementing +a many-to-many relationship requires creation of an intermediate table, that +applies one-to-many relationship with both original tables. + +.. literalinclude:: /../libms-db/libms.sql + :language: postgresql + :start-after: -- label: ddl-book_author + :end-before: -- label: + Joining data ============ From e9922d21f88a6f1b880677f3dc7ef1e2c8cef9a4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 01:15:14 +0200 Subject: [PATCH 516/689] Add select processing description (GH-138) --- src/rdbms/query.txt | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index f72eed401..226231691 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -10,6 +10,45 @@ Querying data The process of retrieving or the command to retrieve data from a database is called a *query*. In SQL the ``SELECT`` command is used to specify queries. +``SELECT`` retrieves rows from zero or more tables. The general processing of +``SELECT`` is as follows: + +#. All queries in the ``WITH`` list are computed. + This effectively serve as temporary tables that can be referenced in the + ``FROM`` list. +#. All elements in the ``FROM`` list are computed. If more than one element + is specified in the ``FROM`` list, they are cross-joined together. +#. If ``WHERE`` clause is specified, all rows that do not satisfy + the condition are eliminated from the output. +#. If the ``GROUP BY`` clause is specified, or if there are aggregate function + calls, the output is combined into groups of rows that match on one or more + values, and the result of aggregate functions are computed. + If the ``HAVING`` clause is present, it eliminates groups that does not + satisfy the given condition. +#. The actual output rows are computed using the ``SELECT`` output expressions + for each row or row of group. +#. ``SELECT DISTINCT`` eliminates duplicate rows from the result. + ``SELECT DISTINCT ON`` eliminates rows that match on all the specified + expressions. +#. Using the operators ``UNION``, ``INTERSECT``, and ``EXCEPT``, the output + of more than one ``SELECT`` statement can be combined to form a single + result set. + + - The ``UNION`` operator returns **all** rows that are in one or both + result sets. + - The ``INTERSECT`` operator returns all rows that are strictly in both + result sets. + - The ``EXCEPT`` operator returns the rows that are in the first result + set, but not in the second. + +#. If the ``ORDER BY`` clause is specified, the returned rows are sorted in + the specific order. +#. if the ``LIMIT`` or ``OFFSET`` clause is specified, the ``SELECT`` + statement only returns a subset of the result rows. +#. If ``FOR UPDATE``, ``FOR NO KEY UPDATE``, ``FOR SHARE`` or + ``FOR KEY SHARE`` is specified, the ``SELECT`` statement locks the selected + rows against concurrent updates. + .. contents:: :local: :depth: 2 From 7043185b3f00817d63669c51db0b9729539cdc48 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 01:45:50 +0200 Subject: [PATCH 517/689] Add joins section draft (GH-138) --- src/rdbms/query.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 226231691..65951cd27 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -308,3 +308,8 @@ Data modifying statements in WITH --------------------------------- .. todo: + +Join data from different tables +=============================== + +.. todo: From c45e03099d7abc43690f63789e8f38087306f109 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 02:09:28 +0200 Subject: [PATCH 518/689] Add with clauses subsections and usage examples (GH-138) --- src/rdbms/query.txt | 51 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 65951cd27..d6c6a29cf 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -297,17 +297,62 @@ clause can be a ``SELECT``, ``INSERT``, ``UPDATE`` or ``DELETE``; and the Select in WITH -------------- -.. todo: +The basic value of ``SELECT`` in ``WITH`` is to break down complicated queries +into simpler parts. + +.. code-block:: postgresql + :caption: Get most profitable months + + -- select top revenue months + WITH monthly_revenue AS (SELECT EXTRACT(YEAR FROM date) AS year, + EXTRACT(MONTH FROM date) AS month, + SUM(amount) AS total_amount + FROM revenue + GROUP BY year, month + ORDER BY year, month) + SELECT * + FROM monthly_revenue + WHERE total_amount > (SELECT SUM(total_amount) / 100 FROM monthly_revenue) + ORDER BY total_amount DESC; Recursive queries ----------------- -.. todo: + The optional RECURSIVE modifier changes WITH from a mere syntactic convenience +into a feature that accomplishes things not otherwise possible in standard SQL. +Using RECURSIVE, a WITH query can refer to its own output. + +.. code-block:: postgresql + :caption: Sum of first 10 numbers starting from 1 + + WITH RECURSIVE t(n) AS (VALUES (1) UNION SELECT n + 1 FROM t WHERE n < 10) + SELECT sum(n) + FROM t; + +.. important:: + + When working with recursive queries it is important to be sure that + the recursive part of the query will eventually return no tuple, or else + the query will loop indefinitely. Data modifying statements in WITH --------------------------------- -.. todo: +You can use most data-modifying statements (``INSERT``, ``UPDATE``, ``DELETE``) +in ``WITH``. This allows you to perform several different operations at a time, +in the same query. + +.. code-block:: postgresql + :caption: Remove old revenue records and store them into history table + + WITH deleted_rows AS ( + DELETE FROM revenue + WHERE date < '2020-01-01' + RETURNING *) + INSERT + INTO revenue_log + SELECT * + FROM deleted_rows; Join data from different tables =============================== From ceeca0398d89e76ada68a022e4b28fbf99e5ece5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 02:58:24 +0200 Subject: [PATCH 519/689] Add general join overview (GH-135) --- src/rdbms/query.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index d6c6a29cf..a7e31d3be 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -357,4 +357,15 @@ in the same query. Join data from different tables =============================== -.. todo: +A ``JOIN`` clause combines two ``FROM`` items, which for convenience we will +refer as "tables", though in reality they can be any type of ``FROM`` items. +Available join types are: + +- ``[INNER] JOIN`` +- ``LEFT [OUTER] JOIN`` +- ``RIGHT [OUTER] JOIN`` +- ``FULL [OUTER] JOIN`` + +.. note:: + + Key words in bracket parentheses above are optional. From a80a7c7cca44974dd3c6bb2a3887c00ba0287ab7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 03:35:31 +0200 Subject: [PATCH 520/689] Fix ident and markup in "query" document (GH-138) --- src/rdbms/query.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index a7e31d3be..9bb82aac2 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -318,9 +318,10 @@ into simpler parts. Recursive queries ----------------- - The optional RECURSIVE modifier changes WITH from a mere syntactic convenience -into a feature that accomplishes things not otherwise possible in standard SQL. -Using RECURSIVE, a WITH query can refer to its own output. +The optional ``RECURSIVE`` modifier changes WITH from a mere syntactic +convenience into a feature that accomplishes things not otherwise possible in +standard SQL. Using ``RECURSIVE``, a ``WITH`` query can refer to its own +output. .. code-block:: postgresql :caption: Sum of first 10 numbers starting from 1 From 2ea9409dc56707e456e1f46e02d67b62cdeac5c8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 16:15:46 +0200 Subject: [PATCH 521/689] Complete joins section (fixes GH-138) --- src/rdbms/query.txt | 234 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 9bb82aac2..dcb746ec4 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -370,3 +370,237 @@ Available join types are: .. note:: Key words in bracket parentheses above are optional. + +Joins between tables +-------------------- + +.. literalinclude:: /../libms-db/libms.sql + :caption: Publishers and books tables definitions + :language: postgresql + :lines: 14-23,50-62 + +Following tables are related via ``FOREIGN KEY`` constraint. Each record in +the ``book`` table references some record in the ``publisher`` table. + +.. important:: + + Since original tables contain lots of data, temporary tables will be + created instead before join query. Full tables content may be downloaded + via links: + :download:`publisher `, + :download:`book `. + + The subsets from original queries defined as: + + .. code-block:: postgresql + + SELECT * + FROM (VALUES (1, 'Zoonoodle'), + (3, 'Tanoodle'), + (4, 'Skivee')) + AS publisher(id, name); + + +----+-----------+ + | id |name | + +====+===========+ + | 1 | Zoonoodle | + +----+-----------+ + | 3 | Tanoodle | + +----+-----------+ + + .. code-block:: postgresql + + SELECT * + FROM (VALUES (22, 'pretium nisl', 2), + (38, 'ac est lacinia nisi venenatis', 3), + (69, 'vel accumsan tellus nisi', 3), + (72, 'nam dui proin', 2), + (85, 'nam tristique', 2)) + AS book(id, title, publisher_id); + + +----+-------------------------------+--------------+ + | id | title | publisher_id | + +====+===============================+==============+ + | 22 | pretium nisl | 2 | + +----+-------------------------------+--------------+ + | 38 | ac est lacinia nisi venenatis | 3 | + +----+-------------------------------+--------------+ + | 69 | vel accumsan tellus nisi | 3 | + +----+-------------------------------+--------------+ + | 72 | nam dui proin | 2 | + +----+-------------------------------+--------------+ + | 85 | nam tristique | 2 | + +----+-------------------------------+--------------+ + +By passing multiple tables to the ``FROM`` clause a ``CROSS JOIN`` query is +executed. This means the resulting table is the Cartesian product of two +original tables. + +.. code-block:: postgresql + :caption: Cross join (Cartesian product) + + WITH publisher AS + (SELECT * + FROM (VALUES (1, 'Zoonoodle'), + (3, 'Tanoodle'), + (4, 'Skivee')) + AS publisher(id, name)), + book AS + (SELECT * + FROM (VALUES (22, 'pretium nisl', 2), + (38, 'ac est lacinia nisi venenatis', 3), + (69, 'vel accumsan tellus nisi', 3), + (72, 'nam dui proin', 2), + (85, 'nam tristique', 2)) + AS book(id, title, publisher_id)) + -- querying the joined result + SELECT * + FROM book, + publisher; + +.. table:: Query result + + +----+-------------------------------+--------------+----+-----------+ + | id | title | publisher_id | id | name | + +====+===============================+==============+====+===========+ + | 22 | pretium nisl | 2 | 1 | Zoonoodle | + +----+-------------------------------+--------------+----+-----------+ + | 22 | pretium nisl | 2 | 3 | Tanoodle | + +----+-------------------------------+--------------+----+-----------+ + | 22 | pretium nisl | 2 | 4 | Skivee | + +----+-------------------------------+--------------+----+-----------+ + | 38 | ac est lacinia nisi venenatis | 3 | 1 | Zoonoodle | + +----+-------------------------------+--------------+----+-----------+ + | 38 | ac est lacinia nisi venenatis | 3 | 3 | Tanoodle | + +----+-------------------------------+--------------+----+-----------+ + | 38 | ac est lacinia nisi venenatis | 3 | 4 | Skivee | + +----+-------------------------------+--------------+----+-----------+ + | 69 | vel accumsan tellus nisi | 3 | 1 | Zoonoodle | + +----+-------------------------------+--------------+----+-----------+ + | 69 | vel accumsan tellus nisi | 3 | 3 | Tanoodle | + +----+-------------------------------+--------------+----+-----------+ + | 69 | vel accumsan tellus nisi | 3 | 4 | Skivee | + +----+-------------------------------+--------------+----+-----------+ + | 72 | nam dui proin | 2 | 1 | Zoonoodle | + +----+-------------------------------+--------------+----+-----------+ + | 72 | nam dui proin | 2 | 3 | Tanoodle | + +----+-------------------------------+--------------+----+-----------+ + | 72 | nam dui proin | 2 | 4 | Skivee | + +----+-------------------------------+--------------+----+-----------+ + | 85 | nam tristique | 2 | 1 | Zoonoodle | + +----+-------------------------------+--------------+----+-----------+ + | 85 | nam tristique | 2 | 3 | Tanoodle | + +----+-------------------------------+--------------+----+-----------+ + | 85 | nam tristique | 2 | 4 | Skivee | + +----+-------------------------------+--------------+----+-----------+ + +By defining the ``WHERE`` clause rows that do not match the condition may +be eliminated from the result. + +.. code-block:: postgresql + + SELECT * + FROM book, publisher + WHERE book.publisher_id = publisher.id; + ++----+-------------------------------+--------------+----+----------+ +| id | title | publisher_id | id | name | ++====+===============================+==============+====+==========+ +| 38 | ac est lacinia nisi venenatis | 3 | 3 | Tanoodle | ++----+-------------------------------+--------------+----+----------+ +| 69 | vel accumsan tellus nisi | 3 | 3 | Tanoodle | ++----+-------------------------------+--------------+----+----------+ + +This is called ``INNER JOIN``, which means that the result table will contain +only whose rows from left-hard and right-hand tables, that have corresponding +records to each other. + +The same result may be obtained using ``JOIN`` clause. All ``JOIN`` options are +just a notation convenience, since they do nothing you couldn't do with plain +``FROM`` and ``WHERE``. + +.. code-block:: postgresql + + SELECT * + FROM book b + JOIN publisher p ON b.publisher_id = p.id; + +``INNER JOIN`` is the default while joining two tables with each other. + +Right and left joins +-------------------- + +``LEFT OUTER JOIN`` returns all rows in the qualified Cartesian product +(i.e., all combined rows that pass its condition), plus one copy of each +row in the left-hand table for which there was no right-hand row that passed +the join condition. + +.. code-block:: postgresql + + SELECT * + FROM book b + LEFT JOIN publisher p ON b.publisher_id = p.id; + ++----+-------------------------------+--------------+------+----------+ +| id | title | publisher_id | id | name | ++====+===============================+==============+======+==========+ +| 22 | pretium nisl | 2 | null | null | ++----+-------------------------------+--------------+------+----------+ +| 38 | ac est lacinia nisi venenatis | 3 | 3 | Tanoodle | ++----+-------------------------------+--------------+------+----------+ +| 69 | vel accumsan tellus nisi | 3 | 3 | Tanoodle | ++----+-------------------------------+--------------+------+----------+ +| 72 | nam dui proin | 2 | null | null | ++----+-------------------------------+--------------+------+----------+ +| 85 | nam tristique | 2 | null | null | ++----+-------------------------------+--------------+------+----------+ + +Conversely, ``RIGHT OUTER JOIN`` returns all the joined rows, plus one row for +each unmatched right-hand row. This is just a notation convenience, since you +could convert it to a ``LEFT OUTER JOIN`` by switching the left and right +tables. + +.. code-block:: postgresql + + SELECT * + FROM book b + RIGHT JOIN publisher p ON b.publisher_id = p.id; + ++------+-------------------------------+--------------+----+-----------+ +| id | title | publisher_id | id | name | ++======+===============================+==============+====+===========+ +| 38 | ac est lacinia nisi venenatis | 3 | 3 | Tanoodle | ++------+-------------------------------+--------------+----+-----------+ +| 69 | vel accumsan tellus nisi | 3 | 3 | Tanoodle | ++------+-------------------------------+--------------+----+-----------+ +| null | null | null | 4 | Skivee | ++------+-------------------------------+--------------+----+-----------+ +| null | null | null | 1 | Zoonoodle | ++------+-------------------------------+--------------+----+-----------+ + +Full outer join +--------------- + +.. code-block:: postgresql + + SELECT * + FROM book b + FULL JOIN publisher p ON b.publisher_id = p.id; + ++------+-------------------------------+--------------+------+-----------+ +| id | title | publisher_id | id | name | ++======+===============================+==============+======+===========+ +| 22 | pretium nisl | 2 | null | null | ++------+-------------------------------+--------------+------+-----------+ +| 38 | ac est lacinia nisi venenatis | 3 | 3 | Tanoodle | ++------+-------------------------------+--------------+------+-----------+ +| 69 | vel accumsan tellus nisi | 3 | 3 | Tanoodle | ++------+-------------------------------+--------------+------+-----------+ +| 72 | nam dui proin | 2 | null | null | ++------+-------------------------------+--------------+------+-----------+ +| 85 | nam tristique | 2 | null | null | ++------+-------------------------------+--------------+------+-----------+ +| null | null | null | 4 | Skivee | ++------+-------------------------------+--------------+------+-----------+ +| null | null | null | 1 | Zoonoodle | ++------+-------------------------------+--------------+------+-----------+ From 0f56c61d28909bc82e3fd91b8b93d1b8592ea744 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 16:46:08 +0200 Subject: [PATCH 522/689] Remove duplicated join sections --- src/rdbms/relations.txt | 234 ---------------------------------------- 1 file changed, 234 deletions(-) diff --git a/src/rdbms/relations.txt b/src/rdbms/relations.txt index 06fb3bcc9..6c71f8ba8 100644 --- a/src/rdbms/relations.txt +++ b/src/rdbms/relations.txt @@ -206,237 +206,3 @@ applies one-to-many relationship with both original tables. :language: postgresql :start-after: -- label: ddl-book_author :end-before: -- label: - -Joining data -============ - -``JOIN`` is used to *join* data fetched from multiple related tables. -To build a valid query you are to set the tables to join and parameter to use -for this operation. - -Common syntax is: - -:: - - T1 join_type T2 [ join_condition ] - -There are various join types available. -Here are is some dummy data to demonstrate their purpose. - -.. table:: poem - - +----+------------------------+-----------+ - | id | title | author_id | - +====+========================+===========+ - | 1 | On the Field of Battle | 1 | - +----+------------------------+-----------+ - | 2 | Moses | 2 | - +----+------------------------+-----------+ - | 3 | The Forest Song | 1 | - +----+------------------------+-----------+ - | 4 | In the Catacombs | null | - +----+------------------------+-----------+ - | 5 | The Singing Stones | 1 | - +----+------------------------+-----------+ - | 6 | Ancient Fairy Tales | null | - +----+------------------------+-----------+ - | 7 | My Thoughts | 2 | - +----+------------------------+-----------+ - | 8 | To Shevchenko | null | - +----+------------------------+-----------+ - - -.. table:: author - - +----+---------------+ - | id | name | - +====+===============+ - | 1 | Larysa Kosach | - +----+---------------+ - | 2 | Ivan Franko | - +----+---------------+ - | 3 | John Doe | - +----+---------------+ - -.. code-block:: sql - - CREATE TABLE author - ( - id SERIAL PRIMARY KEY, - name VARCHAR(32) NOT NULL UNIQUE - ); - CREATE TABLE poem - ( - id SERIAL PRIMARY KEY, - title VARCHAR(32) NOT NULL UNIQUE, - author_id INT REFERENCES author (id) - ); - INSERT INTO author(name) - VALUES ('Larysa Kosach'), - ('Ivan Franko'), - ('John Doe'); - INSERT INTO poem(title, author_id) - VALUES ('On the Field of Battle', 1), - ('Moses', 2), - ('The Forest Song', 1), - ('In the Catacombs', null), - ('The Singing Stones', 1), - ('Ancient Fairy Tales', null), - ('My Thoughts', 2), - ('To Shevchenko', null) - ; - -Join types ----------- - -:Cross join: - - .. code-block:: - - T1 CROSS JOIN T2 - - For every possible combination of rows from T1 and T2 - (i.e., a Cartesian product), the joined table will contain a row consisting - of all columns in T1 followed by all columns in T2. If the tables have N - and M rows respectively, the joined table will have N * M rows. - -:Qualified joins: - - .. code-block:: - - T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON condition - - The words ``INNER`` and ``OUTER`` are optional for all forms. - ``INNER`` is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` - join. - -INNER JOIN ----------- - -For each row R1 of T1, the joined table has a row for each row in T2 that -satisfies the join condition with R1. - -.. code-block:: sql - :caption: Inner join - - SELECT p.title, a.name - FROM poem p - JOIN author a on p.author_id = a.id; - -+------------------------+---------------+ -| title | name | -+========================+===============+ -| On the Field of Battle | Larysa Kosach | -+------------------------+---------------+ -| Moses | Ivan Franko | -+------------------------+---------------+ -| The Forest Song | Larysa Kosach | -+------------------------+---------------+ -| The Singing Stones | Larysa Kosach | -+------------------------+---------------+ -| My Thoughts | Ivan Franko | -+------------------------+---------------+ - -LEFT OUTER JOIN ---------------- - -First, an inner join is performed. Then, for each row in T1 that does not -satisfy the join condition with any row in T2, a joined row is added with null -values in columns of T2. Thus, the joined table always has at least one row for -each row in T1. - -.. code-block:: sql - :caption: Left join - - SELECT p.title, a.name - FROM poem p - LEFT JOIN author a on p.author_id = a.id; - -+------------------------+---------------+ -| title | name | -+========================+===============+ -| On the Field of Battle | Larysa Kosach | -+------------------------+---------------+ -| Moses | Ivan Franko | -+------------------------+---------------+ -| The Forest Song | Larysa Kosach | -+------------------------+---------------+ -| In the Catacombs | null | -+------------------------+---------------+ -| The Singing Stones | Larysa Kosach | -+------------------------+---------------+ -| Ancient Fairy Tales | null | -+------------------------+---------------+ -| My Thoughts | Ivan Franko | -+------------------------+---------------+ -| To Shevchenko | null | -+------------------------+---------------+ - -RIGHT OUTER JOIN ----------------- - -First, an inner join is performed. Then, for each row in T2 that does not -satisfy the join condition with any row in T1, a joined row is added with -null values in columns of T1. This is the converse of a left join: the result -table will always have a row for each row in T2. - -.. code-block:: sql - :caption: Right join - - SELECT p.title, a.name - FROM poem p - RIGHT JOIN author a on p.author_id = a.id; - -+------------------------+---------------+ -| title | name | -+========================+===============+ -| On the Field of Battle | Larysa Kosach | -+------------------------+---------------+ -| Moses | Ivan Franko | -+------------------------+---------------+ -| The Forest Song | Larysa Kosach | -+------------------------+---------------+ -| The Singing Stones | Larysa Kosach | -+------------------------+---------------+ -| My Thoughts | Ivan Franko | -+------------------------+---------------+ -| null | John Doe | -+------------------------+---------------+ - -FULL OUTER JOIN ---------------- - -First, an inner join is performed. Then, for each row in T1 that does not -satisfy the join condition with any row in T2, a joined row is added with -null values in columns of T2. Also, for each row of T2 that does not satisfy -the join condition with any row in T1, a joined row with null values in -the columns of T1 is added. - -.. code-block:: sql - :caption: Full join - - SELECT p.title, a.name - FROM poem p - FULL JOIN author a on p.author_id = a.id; - -+------------------------+---------------+ -| title | name | -+========================+===============+ -| On the Field of Battle | Larysa Kosach | -+------------------------+---------------+ -| Moses | Ivan Franko | -+------------------------+---------------+ -| The Forest Song | Larysa Kosach | -+------------------------+---------------+ -| In the Catacombs | null | -+------------------------+---------------+ -| The Singing Stones | Larysa Kosach | -+------------------------+---------------+ -| Ancient Fairy Tales | null | -+------------------------+---------------+ -| My Thoughts | Ivan Franko | -+------------------------+---------------+ -| To Shevchenko | null | -+------------------------+---------------+ -| null | John Doe | -+------------------------+---------------+ From 3d07cc3f3e21111e3e3485a3d52be63d362ffde2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 17:31:02 +0200 Subject: [PATCH 523/689] Adjust markup --- src/rdbms/query.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index dcb746ec4..b2329a3cc 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -100,6 +100,7 @@ is discarded. The ``WHERE`` clause is used to handle search condition checks. Here are some examples of ``WHERE`` clause: .. code-block:: sql + :caption: WHERE clause usage examples SELECT ... FROM fdt WHERE c1 > 5; @@ -178,7 +179,7 @@ After the select list has been processed, the result table can optionally be subject to the elimination of duplicate rows. The ``DISTINCT`` key word is written directly after ``SELECT`` to specify this: -.. note:: +.. code-block:: postgresql SELECT DISTINCT publisher FROM book; From 7fc345c8b3c53cde8826bf9627e6483eaa2efae4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 17:31:57 +0200 Subject: [PATCH 524/689] Update code snippet --- src/rdbms/query.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index b2329a3cc..891ae90e3 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -102,22 +102,22 @@ Here are some examples of ``WHERE`` clause: .. code-block:: sql :caption: WHERE clause usage examples - SELECT ... FROM fdt + SELECT ... FROM tbl WHERE c1 > 5; - SELECT ... FROM fdt + SELECT ... FROM tbl WHERE c1 IN (1, 2, 3); - SELECT ... FROM fdt + SELECT ... FROM tbl WHERE c1 IN (SELECT c1 FROM t2); - SELECT ... FROM fdt - WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10); + SELECT ... FROM tbl + WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = tbl.c1 + 10); - SELECT ... FROM fdt - WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100; + SELECT ... FROM tbl + WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = tbl.c1 + 10) AND 100; - SELECT ... FROM fdt + SELECT ... FROM tbl WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1); Grouping data From 33c1d058f6312118be7a0859423d6838d7787dd7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 17:42:33 +0200 Subject: [PATCH 525/689] Update document structure and combining queries examples (GH-138) --- src/rdbms/query.txt | 172 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 147 insertions(+), 25 deletions(-) diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index 891ae90e3..f7ba21651 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -191,31 +191,6 @@ an arbitrary expression can determine what rows are to be considered distinct. SELECT DISTINCT ON (expression [, expression ...]) select_list ... -Combining queries -================= - -The results of two queries can be combined using the set operations union, -intersection, and difference. - -.. code-block:: - - query1 UNION [ALL] query2 - query1 INTERSECT [ALL] query2 - query1 EXCEPT [ALL] query2 - -``UNION`` effectively appends the result of ``query2`` to the result of -``query1`` (although there is no guarantee that this is the order in which -the rows are actually returned). Furthermore, it eliminates duplicate rows from -its result, in the same way as ``DISTINCT``, unless ``UNION ALL`` is used. - -``INTERSECT`` returns all rows that are both in the result of ``query1`` and in -the result of ``query2``. Duplicate rows are eliminated unless -``INTERSECT ALL`` is used. - -``EXCEPT`` returns all rows that are in the result of ``query1`` but not in -the result of ``query2``. (This is sometimes called the difference between two -queries.) Again, duplicates are eliminated unless ``EXCEPT ALL`` is used. - Sorting rows ============ @@ -356,6 +331,153 @@ in the same query. SELECT * FROM deleted_rows; +Combining queries +================= + +The results of two queries can be combined using the set operations union, +intersection, and difference. + +.. code-block:: + + query1 UNION [ALL] query2 + query1 INTERSECT [ALL] query2 + query1 EXCEPT [ALL] query2 + +``UNION`` effectively appends the result of ``query2`` to the result of +``query1`` (although there is no guarantee that this is the order in which +the rows are actually returned). Furthermore, it eliminates duplicate rows from +its result, in the same way as ``DISTINCT``, unless ``UNION ALL`` is used. + +.. code-block:: postgresql + + WITH north_lib_member AS + (SELECT * + FROM (VALUES (1, 'Mariska', 'Syson'), + (2, 'Robenia', 'Dimitriades'), + (3, 'Loren', 'Goretti'), + (4, 'Dianna', 'Giacomuzzo'), + (5, 'Anett', 'Hayland'), + (6, 'Keeley', 'Grishelyov')) AS tbl(id, first_name, last_name)), + south_lib_member AS + (SELECT * + FROM (VALUES (5, 'Anett', 'Hayland'), + (6, 'Keeley', 'Grishelyov'), + (7, 'Say', 'Kliner'), + (8, 'Charles', 'Ede'), + (9, 'Florentia', 'Core'), + (10, 'Tiffany', 'Tingly')) + AS tbl(id, first_name, last_name)) + SELECT * + FROM north_lib_member + UNION + SELECT * + FROM south_lib_member + ORDER BY id; + ++----+------------+-------------+ +| id | first_name | last_name | ++====+============+=============+ +| 1 | Mariska | Syson | ++----+------------+-------------+ +| 2 | Robenia | Dimitriades | ++----+------------+-------------+ +| 3 | Loren | Goretti | ++----+------------+-------------+ +| 4 | Dianna | Giacomuzzo | ++----+------------+-------------+ +| 5 | Anett | Hayland | ++----+------------+-------------+ +| 6 | Keeley | Grishelyov | ++----+------------+-------------+ +| 7 | Say | Kliner | ++----+------------+-------------+ +| 8 | Charles | Ede | ++----+------------+-------------+ +| 9 | Florentia | Core | ++----+------------+-------------+ +| 10 | Tiffany | Tingly | ++----+------------+-------------+ + +``INTERSECT`` returns all rows that are both in the result of ``query1`` and in +the result of ``query2``. Duplicate rows are eliminated unless +``INTERSECT ALL`` is used. + +.. code-block:: postgresql + + WITH north_lib_member AS + (SELECT * + FROM (VALUES (1, 'Mariska', 'Syson'), + (2, 'Robenia', 'Dimitriades'), + (3, 'Loren', 'Goretti'), + (4, 'Dianna', 'Giacomuzzo'), + (5, 'Anett', 'Hayland'), + (6, 'Keeley', 'Grishelyov')) AS tbl(id, first_name, last_name)), + south_lib_member AS + (SELECT * + FROM (VALUES (5, 'Anett', 'Hayland'), + (6, 'Keeley', 'Grishelyov'), + (7, 'Say', 'Kliner'), + (8, 'Charles', 'Ede'), + (9, 'Florentia', 'Core'), + (10, 'Tiffany', 'Tingly')) + AS tbl(id, first_name, last_name)) + SELECT * + FROM north_lib_member + INTERSECT + SELECT * + FROM south_lib_member + ORDER BY id; + ++----+------------+------------+ +| id | first_name | last_name | ++====+============+============+ +| 5 | Anett | Hayland | ++----+------------+------------+ +| 6 | Keeley | Grishelyov | ++----+------------+------------+ + +``EXCEPT`` returns all rows that are in the result of ``query1`` but not in +the result of ``query2``. (This is sometimes called the difference between two +queries.) Again, duplicates are eliminated unless ``EXCEPT ALL`` is used. + +.. code-block:: postgresql + + WITH north_lib_member AS + (SELECT * + FROM (VALUES (1, 'Mariska', 'Syson'), + (2, 'Robenia', 'Dimitriades'), + (3, 'Loren', 'Goretti'), + (4, 'Dianna', 'Giacomuzzo'), + (5, 'Anett', 'Hayland'), + (6, 'Keeley', 'Grishelyov')) AS tbl(id, first_name, last_name)), + south_lib_member AS + (SELECT * + FROM (VALUES (5, 'Anett', 'Hayland'), + (6, 'Keeley', 'Grishelyov'), + (7, 'Say', 'Kliner'), + (8, 'Charles', 'Ede'), + (9, 'Florentia', 'Core'), + (10, 'Tiffany', 'Tingly')) + AS tbl(id, first_name, last_name)) + SELECT * + FROM north_lib_member + EXCEPT + SELECT * + FROM south_lib_member + ORDER BY id; + ++----+------------+-------------+ +| id | first_name | last_name | ++====+============+=============+ +| 1 | Mariska | Syson | ++----+------------+-------------+ +| 2 | Robenia | Dimitriades | ++----+------------+-------------+ +| 3 | Loren | Goretti | ++----+------------+-------------+ +| 4 | Dianna | Giacomuzzo | ++----+------------+-------------+ + Join data from different tables =============================== From a14cde51b44364f9f5410e69c32f8f421a74739c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 19:10:15 +0200 Subject: [PATCH 526/689] Add intervals subsection (GH-82) --- src/rdbms/datatypes.txt | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index ddc638a81..f2fe1fbe2 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -337,7 +337,41 @@ Special date/time inputs | allballs | ``time`` | 00:00:00.00 UTC | +--------------+---------------+----------------------------------------------+ -.. todo: add interval rubric, usage examples (ref. libms.sql:author) +Intervals +--------- + +``interval`` values can be written using the following verbose syntax: + +:: + + [@] quantity unit [quantity unit...] [direction] + +Intervals are useful when you need to move timestamp back in past or to +the future. + ++--------------+----------+ +| Abbreviation | Meaning | ++==============+==========+ +| Y | Years | ++--------------+----------+ +| M | Months | ++--------------+----------+ +| W | Weeks | ++--------------+----------+ +| D | Days | ++--------------+----------+ +| H | Hours | ++--------------+----------+ +| M | Minutes | ++--------------+----------+ +| S | Seconds | ++--------------+----------+ + +.. code-block:: postgresql + :caption: 7 days before yesterday + + SELECT 'yesterday'::TIMESTAMP + INTERVAL '7d ago'; + SELECT 'yesterday'::TIMESTAMP - INTERVAL '7' DAY; .. todo: add boolean type section From 1ebc2bdeb0d9c92f87ee7171c5352565e53055a8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 19:22:07 +0200 Subject: [PATCH 527/689] Add boolean type section (GH-82) --- src/rdbms/datatypes.txt | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index f2fe1fbe2..58e5913b0 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -373,7 +373,32 @@ the future. SELECT 'yesterday'::TIMESTAMP + INTERVAL '7d ago'; SELECT 'yesterday'::TIMESTAMP - INTERVAL '7' DAY; -.. todo: add boolean type section +Boolean type +============ + +PostgreSQL provides the standard SQL type ``boolean``. The ``boolean`` type can +have several states: **true**, **false**, and a third state, **unknown**, which +is represented by the SQL ``NULL`` value. + +The datetype input function for type ``boolean`` accepts these strings +representations for the **true** state: + +- ``true`` +- ``yea`` +- ``on`` +- ``1`` + +and these representations for the **false** state: + +- ``false`` +- ``no`` +- ``off`` +- ``0`` + +The key words ``TRUE`` or ``FALSE`` are preferred (SQL-compliant) method for +writing Boolean constants in SQL queries. But, you can also use string +representations by following the generic string-literal constant syntax, for +example ``'yes':boolean``. .. todo: add enumerate type section From b81f7a9aa830c12ca0f3e88b6b89e8a64735685e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 19:32:16 +0200 Subject: [PATCH 528/689] Add enums section (GH-82) --- src/rdbms/datatypes.txt | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 58e5913b0..844d440f3 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -400,7 +400,36 @@ writing Boolean constants in SQL queries. But, you can also use string representations by following the generic string-literal constant syntax, for example ``'yes':boolean``. -.. todo: add enumerate type section +Enumerated types +================ + +Enumerated (enums) types are data types that comprise a static, ordered set of +values. They are equivalent to the ``enum`` types supported in a number of +programming languages. An example of an enum might be the days of the week, +or a set of status values for a piece of data. + +Enum types are created using the ``CREATE TYPE`` command; and once created, +the enum type can be used in table in function definitions, much like other +types: + +.. code-block:: postgresql + + CREATE TYPE WORK_DAY AS ENUM ('mon', 'tue', 'wed', 'thu', 'fri'); + CREATE TABLE work_log + ( + amount INTEGER, + date DATE, + day WORK_DAY + ); + +Ordering +-------- + +The ordering of the values in an enum type is the order in which the values +were listed when the type was created. All standard comparison operators and +related aggregate functions are supported for enums. However, remember that +each enumerated data type is separated and cannot be compared with other +enumerated types. .. todo: add uuid type section, short description without details From b635f3feae1449f34cb23a44b3866b76ff3fdfbe Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 19:35:57 +0200 Subject: [PATCH 529/689] Clean-up todos in data types document (fixes GH-82) --- src/rdbms/datatypes.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 844d440f3..09eb00980 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -430,7 +430,3 @@ were listed when the type was created. All standard comparison operators and related aggregate functions are supported for enums. However, remember that each enumerated data type is separated and cannot be compared with other enumerated types. - -.. todo: add uuid type section, short description without details - -.. todo: add XML and JSON type section, short description without details From 24bb32ba335c2a423951230977b3196e6818aeaf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 19:50:01 +0200 Subject: [PATCH 530/689] Add simple type cast syntax (fixes GH-84) GH-84 was simplified, refer to the original ticket to investigate its history. --- src/rdbms/datatypes.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 09eb00980..2b5fead67 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -101,6 +101,23 @@ Users can add new types to PostgreSQL using the ``CREATE TYPE`` command. | ``xml`` | | XML data | +-------------------------------+-------------------+------------------------------------------------------------------+ +Types casting +============= + +SQL is a strong type language. That is, every data item has an associated data +type which determines its behavior and allowed usage. PostgreSQL has an +extensible type system that is more general and flexible than other SQL +implementations. + +You can cast some types in place using ``::`` notation, like: + +.. code-block:: postgresql + + SELECT '42'::INT; + SELECT '24.5'::REAL; + SELECT 'today'::DATE; + SELECT 'tomorrow'::TIMESTAMP; + Numeric types ============= From 40221b70db362eaf931a87c53c2f6ec021bf9401 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 19:54:47 +0200 Subject: [PATCH 531/689] Add postgres install appendix document (GH-80) --- src/appx/env_path.txt | 2 +- src/appx/pg_install.txt | 4 ++++ src/index.txt | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/appx/pg_install.txt diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 07e7680c1..2677c3442 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -1,4 +1,4 @@ -.. meta:: +q.. meta:: :description: Setting up environment variables :author: Serhii Horodilov sgorodil@gmail.com :keywords: settings, environment, variables diff --git a/src/appx/pg_install.txt b/src/appx/pg_install.txt new file mode 100644 index 000000000..bf70af924 --- /dev/null +++ b/src/appx/pg_install.txt @@ -0,0 +1,4 @@ +############################################################################### + PostgreSQL Installation +############################################################################### + diff --git a/src/index.txt b/src/index.txt index b1de255e3..ff2130a71 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,6 +27,7 @@ appx/env_path appx/precedence appx/printf + appx/pg_install appx/assignments appx/conv_store appx/wtk From f6256c1c2e033ce295426ad5f362a2cec79b7fbb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 21 Nov 2023 21:31:37 +0200 Subject: [PATCH 532/689] Add local postgres deployment using binaries document (GH-80) External gist document is used. No submodules. --- src/appx/pg_install.txt | 1 + src/appx/pg_local.txt | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 src/appx/pg_local.txt diff --git a/src/appx/pg_install.txt b/src/appx/pg_install.txt index bf70af924..a55b260a1 100644 --- a/src/appx/pg_install.txt +++ b/src/appx/pg_install.txt @@ -2,3 +2,4 @@ PostgreSQL Installation ############################################################################### +:doc:`Local PostgreSQL server using binaries <./pg_local>` diff --git a/src/appx/pg_local.txt b/src/appx/pg_local.txt new file mode 100644 index 000000000..7b4bda2d4 --- /dev/null +++ b/src/appx/pg_local.txt @@ -0,0 +1,5 @@ +:orphan: + +.. raw:: html + + From ddc6591b7f4bba91c325b414694bbdb2b559d2a2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 11:33:56 +0200 Subject: [PATCH 533/689] Add hidden title to pg_local appendix (GH-80) --- src/appx/pg_local.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/appx/pg_local.txt b/src/appx/pg_local.txt index 7b4bda2d4..9d851974a 100644 --- a/src/appx/pg_local.txt +++ b/src/appx/pg_local.txt @@ -1,5 +1,20 @@ :orphan: +.. page title + +.. raw:: html + +
    + +########################## +PostgreSQL server binaries +########################## + +.. raw:: html + +
    + +.. include embed gist document (local postgres binaries) .. raw:: html From 1ead4b80c65e6f552b72ad21a8b6935c4578c61e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 11:54:19 +0200 Subject: [PATCH 534/689] Add postgres overview to appendix document (GH-80) --- src/appx/pg_install.txt | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/appx/pg_install.txt b/src/appx/pg_install.txt index a55b260a1..ab3eeac9b 100644 --- a/src/appx/pg_install.txt +++ b/src/appx/pg_install.txt @@ -2,4 +2,27 @@ PostgreSQL Installation ############################################################################### -:doc:`Local PostgreSQL server using binaries <./pg_local>` +Overview +======== + +PostgreSQL is a powerful, open source object-relational database system that +uses and extends the SQL language combined with many features that safely store +and scale the most complicated data workloads. + +PostgreSQL has earned a strong reputation for its proven architecture, +reliability, data integrity, robust feature set, extensibility, and the +dedication of the open source community behind the software to consistently +deliver performant and innovative solutions. + +.. todo: add ref to acid document + +PostgreSQL runs on **all major operating systems**, and is ACID +compliant. + +Installation +============ + +If you are not able to install postgres to your local computer, it is +possible to use binaries distributions. +Refer :doc:`Local PostgreSQL server using binaries <./pg_local>` for +more information. From 2296c9d908f4456a13e818c514f05ed7d842fbe4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 12:58:53 +0200 Subject: [PATCH 535/689] Add postgres install links (fixes GH-80) Rename appendix to postgres.txt --- src/appx/{pg_install.txt => postgres.txt} | 12 +++++++++++- src/index.txt | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) rename src/appx/{pg_install.txt => postgres.txt} (68%) diff --git a/src/appx/pg_install.txt b/src/appx/postgres.txt similarity index 68% rename from src/appx/pg_install.txt rename to src/appx/postgres.txt index ab3eeac9b..2c0127a7a 100644 --- a/src/appx/pg_install.txt +++ b/src/appx/postgres.txt @@ -1,5 +1,7 @@ +.. _PostgreSQL downloads: https://www.postgresql.org/download/ + ############################################################################### - PostgreSQL Installation + PostgreSQL ############################################################################### Overview @@ -26,3 +28,11 @@ If you are not able to install postgres to your local computer, it is possible to use binaries distributions. Refer :doc:`Local PostgreSQL server using binaries <./pg_local>` for more information. + +PostgreSQL is available for download as ready-to-use packages or installers +for various platforms, as well as a source code archive if you want to build +it yourself. + +Refer to `PostgreSQL downloads`_ page to get the installer for your operating +system. Follow the installation process instruction to get postgres server +running on your local computer. diff --git a/src/index.txt b/src/index.txt index ff2130a71..a382ab469 100644 --- a/src/index.txt +++ b/src/index.txt @@ -27,7 +27,7 @@ appx/env_path appx/precedence appx/printf - appx/pg_install + appx/postgres appx/assignments appx/conv_store appx/wtk From 1149bb4fb62a394b0cdbe050edb6ce9d1651f412 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 13:49:22 +0200 Subject: [PATCH 536/689] Add modifying objects section (GH-78) --- src/rdbms/ddl.txt | 161 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 1 deletion(-) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 43fbc3fe7..0dcbc3111 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -222,7 +222,166 @@ columns. These columns cannot be used in the generated columns (except Modify objects ============== -.. todo +When you create a table and you realize that you made a mistake, or the +requirements of the application change, you can drop the table and create +it again. But this is not a convenient option if the table is already filled +with data, or if the table is referenced by other database objects. + +PostgreSQL provides a family of commands to make modifications to existing +tables. You can: + +- add columns +- remove columns +- add constraints +- remove constraints +- change default values +- change column data types +- rename columns +- rename tables + +All these actions are performed using the ``ALTER TABLE`` command. + +Adding a column +--------------- + +To add a column, use a command like: + +.. code-block:: postgresql + + ALTER TABLE tbl_name ADD COLUMN cln_name cln_type + +.. literalinclude:: /../libms-db/libms.sql + :language: postgresql + :lines: 51-63,92-93 + +.. note:: + + Constraints can be also defined on the column at the same time, using + general syntax. + + In fact all the options that can be applied to a column description in + ``CREATE TABLE`` can be used here. Keep in mind however that the default + value must satisfy the given constraints, or the ``ADD`` will fail. + +Removing a column +----------------- + +To remove a column, use ``DROP`` command like this: + +.. code-block:: postgresql + + ALTER TABLE book + DROP COLUMN genre; + +Whatever data was in the column disappears. Table constraints involving +the column are dropped, too. However, if the column is referenced by a +foreign key constraint of another table, PostgreSQL will not silently drop +that constraint. You can authorize dropping everything that depends on +the column by adding ``CASCADE``: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + DROP COLUMN cln_name CASCADE; + +Adding a constraint +------------------- + +To add a constraint, the table constraint syntax is used. + +.. literalinclude:: /../libms-db/libms.sql + :language: postgresql + :start-after: -- label: ddl-borrow_request + :end-before: -- label: + +Other examples: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + ADD CONSTRAINT cst_name UNIQUE (cln_name); + + ALTER TABLE tbl_name + ADD FOREIGN KEY (cln_name) REFERENCES tbl_another; + +To add a non-null constraint, which cannot be written as a table constraint, +use this syntax: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + ALTER COLUMN cln_name SET NOT NULL; + +Removing a constraint +--------------------- + +To remove a constraint you need to know its name. The **psql** command +``\d table_name`` can be helpful to get the detailed information on +a specific table, including all constraints' names assigned to it. + +.. code-block:: postgresql + + ALTER TABLE tbl_name + DROP CONSTRAINT cst_name; + +Changing a column's default value +--------------------------------- + +To set a new default for a column, use command like this: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + ALTER COLUMN cln_name SET DEFAULT 0.0; + +To remove any default value, use: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + ALTER COLUMN cln_name DROP DEFAULT; + +This is effectively the same as settings the default to ``NULL``. + +Changing a column's data type +----------------------------- + +To convert a column to a different data type, use a command like this: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + ALTER COLUMN cln_name TYPE NUMERIC(10, 2); + +This will succeed only if each existing entry in the column can be converted +to the new type by an implicit cast. If a more complex conversion is needed, +you can add a ``USING`` clause that specifies how to compute the new values +from old ones. + +PostgreSQL will attempt to convert the column's default value (if any) to the +new type, as well as any constraint that involve the column. But these +conversions might fail, or might produce surprising results. It's often best +to drop any constraints on the column before altering its type, and then add +back suitably modified constraints afterwards. + +Renaming objects +---------------- + +To rename objects use ``RENAME`` command, like this: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + RENAME COLUMN cln_name TO new_cln_name; + ALTER TABLE tbl_name + RENAME CONSTRAINT cst_name TO new_cst_name; + +To rename a table: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + RENAME TO new_tbl_name; Remove objects ============== From 640660963338fb39d7037d5911647491c6d43ddc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 14:09:27 +0200 Subject: [PATCH 537/689] Complete dropping objects section (fixes GH-78) Move some subsection from "modifying objects" section. --- src/rdbms/ddl.txt | 88 +++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 34 deletions(-) diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 0dcbc3111..0a3212b5c 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -263,27 +263,6 @@ To add a column, use a command like: ``CREATE TABLE`` can be used here. Keep in mind however that the default value must satisfy the given constraints, or the ``ADD`` will fail. -Removing a column ------------------ - -To remove a column, use ``DROP`` command like this: - -.. code-block:: postgresql - - ALTER TABLE book - DROP COLUMN genre; - -Whatever data was in the column disappears. Table constraints involving -the column are dropped, too. However, if the column is referenced by a -foreign key constraint of another table, PostgreSQL will not silently drop -that constraint. You can authorize dropping everything that depends on -the column by adding ``CASCADE``: - -.. code-block:: postgresql - - ALTER TABLE tbl_name - DROP COLUMN cln_name CASCADE; - Adding a constraint ------------------- @@ -312,18 +291,6 @@ use this syntax: ALTER TABLE tbl_name ALTER COLUMN cln_name SET NOT NULL; -Removing a constraint ---------------------- - -To remove a constraint you need to know its name. The **psql** command -``\d table_name`` can be helpful to get the detailed information on -a specific table, including all constraints' names assigned to it. - -.. code-block:: postgresql - - ALTER TABLE tbl_name - DROP CONSTRAINT cst_name; - Changing a column's default value --------------------------------- @@ -386,4 +353,57 @@ To rename a table: Remove objects ============== -.. todo +Removing tables +--------------- + +``DROP`` command is used to remove objects. + +.. code-block:: postgresql + + DROP TABLE tbl_name; + +Remember, attempting to remove a table that does not exist is an error. +Nevertheless, it is common in SQL script files to unconditionally try to +drop each table before creating it, ignoring any error message, so that +the script works whether or not the table exists. ``IF EXISTS`` variant +can be used to avoid the error message, but this is not standard SQL. + +.. literalinclude:: /../libms-db/libms.sql + :language: postgresql + :lines: 1-20 + +In case there are other objects referencing the object to drop ``CASCADE`` may +be used to also remove any referencing objects. + +Removing a column +----------------- + +To remove a column, use ``DROP`` command like this: + +.. code-block:: postgresql + + ALTER TABLE book + DROP COLUMN genre; + +Whatever data was in the column disappears. Table constraints involving +the column are dropped, too. However, if the column is referenced by a +foreign key constraint of another table, PostgreSQL will not silently drop +that constraint. You can authorize dropping everything that depends on +the column by adding ``CASCADE``: + +.. code-block:: postgresql + + ALTER TABLE tbl_name + DROP COLUMN cln_name CASCADE; + +Removing a constraint +--------------------- + +To remove a constraint you need to know its name. The **psql** command +``\d table_name`` can be helpful to get the detailed information on +a specific table, including all constraints' names assigned to it. + +.. code-block:: postgresql + + ALTER TABLE tbl_name + DROP CONSTRAINT cst_name; From c127e0f0536054f4309b2f84d396dc8db4ed9c13 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 14:22:21 +0200 Subject: [PATCH 538/689] Add functions and operators document draft (GH-83) --- src/rdbms/functions.txt | 3 +++ src/rdbms/index.txt | 1 + 2 files changed, 4 insertions(+) create mode 100644 src/rdbms/functions.txt diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt new file mode 100644 index 000000000..b0fd354e7 --- /dev/null +++ b/src/rdbms/functions.txt @@ -0,0 +1,3 @@ +*********************** +Functions and operators +*********************** diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index dfbbc2309..3fb611bfb 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -67,4 +67,5 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: dml query relations + functions aggregate From 56b6072cd0f6a27c71c44bf3ad79be59df861a51 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 14:51:07 +0200 Subject: [PATCH 539/689] Add logical operators subsection (GH-83) --- src/rdbms/functions.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index b0fd354e7..3f8c9b8f9 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -1,3 +1,39 @@ *********************** Functions and operators *********************** + +Logical operators +================= + +The usual logical operators are still available: + +.. code-block:: sql + + boolean AND boolean -> boolean + boolean OR boolean -> boolean + NOT boolean -> boolean + +SQL uses a three-valued logic system with ``true``, ``false``, and ``null``, +which represents *unknown*. + +.. table:: Truth table + + +-----------+-----------+-------------+------------+-----------+ + | ``a`` | ``b`` | ``a AND b`` | ``a OR b`` | ``NOT a`` | + +===========+===========+=============+============+===========+ + | ``TRUE`` | ``TRUE`` | ``TRUE`` | ``TRUE`` | ``FALSE`` | + +-----------+-----------+-------------+------------+-----------+ + | ``TRUE`` | ``FALSE`` | ``FALSE`` | ``TRUE`` | ``FALSE`` | + +-----------+-----------+-------------+------------+-----------+ + | ``TRUE`` | ``NULL`` | ``NULL`` | ``TRUE`` | ``FALSE`` | + +-----------+-----------+-------------+------------+-----------+ + | ``FALSE`` | ``FALSE`` | ``FALSE`` | ``FALSE`` | ``TRUE`` | + +-----------+-----------+-------------+------------+-----------+ + | ``FALSE`` | ``NULL`` | ``FALSE`` | ``NULL`` | ``TRUE`` | + +-----------+-----------+-------------+------------+-----------+ + | ``NULL`` | ``NULL`` | ``NULL`` | ``NULL`` | ``NULL`` | + +-----------+-----------+-------------+------------+-----------+ + +The operators ``AND`` and ``OR`` are commutative, that is, you can switch +the left and right operands without affecting the result. However, it is not +guaranteed that the left operand is evaluated before the right operand. From 6b1dda0600040082bcf56edfbfa175a5236e4700 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 15:07:16 +0200 Subject: [PATCH 540/689] Add comparison operators and comparison predicates subsections (GH-83) --- src/rdbms/functions.txt | 103 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 2 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 3f8c9b8f9..1b2dfe57f 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -2,8 +2,8 @@ Functions and operators *********************** -Logical operators -================= +Logical operators and comparison +================================ The usual logical operators are still available: @@ -37,3 +37,102 @@ which represents *unknown*. The operators ``AND`` and ``OR`` are commutative, that is, you can switch the left and right operands without affecting the result. However, it is not guaranteed that the left operand is evaluated before the right operand. + +Comparison operators +-------------------- + +The usual comparison operators are available. + ++-------------------------------------+--------------------------+ +| Operator | Description | ++=====================================+==========================+ +| datatype < datatype -> boolean | Less than | ++-------------------------------------+--------------------------+ +| datatype > datatype -> boolean | Greater than | ++-------------------------------------+--------------------------+ +| datatype <= datatype -> boolean | Less than or equal to | ++-------------------------------------+--------------------------+ +| datatype >= datatype -> boolean | Greater than or equal to | ++-------------------------------------+--------------------------+ +| datatype = datatype -> boolean | Equal | ++-------------------------------------+--------------------------+ +| datatype <> datatype -> boolean | Not equal | ++-------------------------------------+--------------------------+ +| datatype != datatype -> boolean | Not equal | ++-------------------------------------+--------------------------+ + +Comparison predicates +--------------------- + +:: + + datatype BETWEEN datatype AND datatype -> boolean + Between (inclusive of the range endpoints). + 2 BETWEEN 1 AND 3 -> t + 2 BETWEEN 3 AND 1 -> f + + datatype NOT BETWEEN datatype AND datatype -> boolean + Not between (the negation of BETWEEN). + 2 NOT BETWEEN 1 AND 3 -> f + + datatype BETWEEN SYMMETRIC datatype AND datatype -> boolean + Between, after sorting the two endpoint values. + 2 BETWEEN SYMMETRIC 3 AND 1 -> t + + datatype NOT BETWEEN SYMMETRIC datatype AND datatype -> boolean + Not between, after sorting the two endpoint values. + 2 NOT BETWEEN SYMMETRIC 3 AND 1 -> f + + datatype IS DISTINCT FROM datatype -> boolean + Not equal, treating null as a comparable value. + 1 IS DISTINCT FROM NULL -> t (rather than NULL) + NULL IS DISTINCT FROM NULL -> f (rather than NULL) + + datatype IS NOT DISTINCT FROM datatype -> boolean + Equal, treating null as a comparable value. + 1 IS NOT DISTINCT FROM NULL -> f (rather than NULL) + NULL IS NOT DISTINCT FROM NULL -> t (rather than NULL) + + datatype IS NULL -> boolean + Test whether value is null. + 1.5 IS NULL -> f + + datatype IS NOT NULL -> boolean + Test whether value is not null. + 'null' IS NOT NULL -> t + + datatype ISNULL -> boolean + Test whether value is null (nonstandard syntax). + + datatype NOTNULL -> boolean + Test whether value is not null (nonstandard syntax). + + boolean IS TRUE -> boolean + Test whether boolean expression yields true. + true IS TRUE -> t + NULL::boolean IS TRUE -> f (rather than NULL) + + boolean IS NOT TRUE -> boolean + Test whether boolean expression yields false or unknown. + true IS NOT TRUE -> f + NULL::boolean IS NOT TRUE -> t (rather than NULL) + + boolean IS FALSE -> boolean + Test whether boolean expression yields false. + true IS FALSE -> f + NULL::boolean IS FALSE -> f (rather than NULL) + + boolean IS NOT FALSE -> boolean + Test whether boolean expression yields true or unknown. + true IS NOT FALSE -> t + NULL::boolean IS NOT FALSE -> t (rather than NULL) + + boolean IS UNKNOWN -> boolean + Test whether boolean expression yields unknown. + true IS UNKNOWN -> f + NULL::boolean IS UNKNOWN -> t (rather than NULL) + + boolean IS NOT UNKNOWN -> boolean + Test whether boolean expression yields true or false. + true IS NOT UNKNOWN -> t + NULL::boolean IS NOT UNKNOWN -> f (rather than NULL) From a28cceebde129b8cf8d0d111fa53472ec5830ccb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 15:19:32 +0200 Subject: [PATCH 541/689] Add comparison functions (GH-83) --- src/rdbms/functions.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 1b2dfe57f..5546b9cf6 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -136,3 +136,22 @@ Comparison predicates Test whether boolean expression yields true or false. true IS NOT UNKNOWN -> t NULL::boolean IS NOT UNKNOWN -> f (rather than NULL) + +Comparison functions +-------------------- + +.. function:: num_nonnulls(VARIADIC "any") + + Returns the number of non-null arguments + +.. code-block:: postgresql + + SELECT num_nonnulls(1, NULL, 2) -- return 2 + +.. function:: num_nulls(VARIADIC "any") + + Returns the number of null arguments + +.. code-block:: postgresql + + SELECT num_nulls(1, NULL, 2) -- return 1 From 99d9c14518208443f7c7d2bffb7319197797e970 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 15:22:06 +0200 Subject: [PATCH 542/689] Minor fixes to comparison predicates subsection (GH-83) --- src/rdbms/functions.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 5546b9cf6..94ee423e1 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -102,10 +102,10 @@ Comparison predicates 'null' IS NOT NULL -> t datatype ISNULL -> boolean - Test whether value is null (nonstandard syntax). + Test whether value is null (nonstandard syntax). datatype NOTNULL -> boolean - Test whether value is not null (nonstandard syntax). + Test whether value is not null (nonstandard syntax). boolean IS TRUE -> boolean Test whether boolean expression yields true. From c007c77f1bcbbaabdc1ed6a7bed8ea1269345a1f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 15:52:45 +0200 Subject: [PATCH 543/689] Update comparison predicates subsection (GH-83) --- src/rdbms/functions.txt | 200 +++++++++++++++++++++++++--------------- 1 file changed, 128 insertions(+), 72 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 94ee423e1..d131ab7f8 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -64,78 +64,134 @@ The usual comparison operators are available. Comparison predicates --------------------- -:: - - datatype BETWEEN datatype AND datatype -> boolean - Between (inclusive of the range endpoints). - 2 BETWEEN 1 AND 3 -> t - 2 BETWEEN 3 AND 1 -> f - - datatype NOT BETWEEN datatype AND datatype -> boolean - Not between (the negation of BETWEEN). - 2 NOT BETWEEN 1 AND 3 -> f - - datatype BETWEEN SYMMETRIC datatype AND datatype -> boolean - Between, after sorting the two endpoint values. - 2 BETWEEN SYMMETRIC 3 AND 1 -> t - - datatype NOT BETWEEN SYMMETRIC datatype AND datatype -> boolean - Not between, after sorting the two endpoint values. - 2 NOT BETWEEN SYMMETRIC 3 AND 1 -> f - - datatype IS DISTINCT FROM datatype -> boolean - Not equal, treating null as a comparable value. - 1 IS DISTINCT FROM NULL -> t (rather than NULL) - NULL IS DISTINCT FROM NULL -> f (rather than NULL) - - datatype IS NOT DISTINCT FROM datatype -> boolean - Equal, treating null as a comparable value. - 1 IS NOT DISTINCT FROM NULL -> f (rather than NULL) - NULL IS NOT DISTINCT FROM NULL -> t (rather than NULL) - - datatype IS NULL -> boolean - Test whether value is null. - 1.5 IS NULL -> f - - datatype IS NOT NULL -> boolean - Test whether value is not null. - 'null' IS NOT NULL -> t - - datatype ISNULL -> boolean - Test whether value is null (nonstandard syntax). - - datatype NOTNULL -> boolean - Test whether value is not null (nonstandard syntax). - - boolean IS TRUE -> boolean - Test whether boolean expression yields true. - true IS TRUE -> t - NULL::boolean IS TRUE -> f (rather than NULL) - - boolean IS NOT TRUE -> boolean - Test whether boolean expression yields false or unknown. - true IS NOT TRUE -> f - NULL::boolean IS NOT TRUE -> t (rather than NULL) - - boolean IS FALSE -> boolean - Test whether boolean expression yields false. - true IS FALSE -> f - NULL::boolean IS FALSE -> f (rather than NULL) - - boolean IS NOT FALSE -> boolean - Test whether boolean expression yields true or unknown. - true IS NOT FALSE -> t - NULL::boolean IS NOT FALSE -> t (rather than NULL) - - boolean IS UNKNOWN -> boolean - Test whether boolean expression yields unknown. - true IS UNKNOWN -> f - NULL::boolean IS UNKNOWN -> t (rather than NULL) - - boolean IS NOT UNKNOWN -> boolean - Test whether boolean expression yields true or false. - true IS NOT UNKNOWN -> t - NULL::boolean IS NOT UNKNOWN -> f (rather than NULL) +.. data:: datatype BETWEEN datatype AND datatype + + Test if a value is within the range endpoints (inclusive) + + .. code-block:: postgresql + + 2 BETWEEN 1 AND 3 -- true + 2 BETWEEN 3 AND 1 -- false + +.. data:: datatype NOT BETWEEN datatype AND datatype + + Not between (the negation of BETWEEN). + + .. code-block:: postgresql + + 2 NOT BETWEEN 1 AND 3 -- false + +.. data:: datatype BETWEEN SYMMETRIC datatype AND datatype + + Between, after sorting the two endpoint values. + + .. code-block:: postgresql + + 2 BETWEEN SYMMETRIC 3 AND 1 -- true + +.. data:: datatype NOT BETWEEN SYMMETRIC datatype AND datatype + + Not between, after sorting the two endpoint values. + + .. code-block:: postgresql + + 2 NOT BETWEEN SYMMETRIC 3 AND 1 -- false + +.. data:: datatype IS DISTINCT FROM datatype + + Not equal, treating null as a comparable value. + + .. code-block:: postgresql + + 1 IS DISTINCT FROM NULL -- true (rather than NULL) + NULL IS DISTINCT FROM NULL -- false (rather than NULL) + +.. data:: datatype IS NOT DISTINCT FROM datatype + + Equal, treating null as a comparable value. + + .. code-block:: postgresql + + 1 IS NOT DISTINCT FROM NULL -- false (rather than NULL) + NULL IS NOT DISTINCT FROM NULL -- true (rather than NULL) + +.. data:: datatype IS NULL + + Test whether value is null. + + .. code-block:: postgresql + + 1.5 IS NULL -- false + +.. data:: datatype IS NOT NULL + + Test whether value is not null. + + .. code-block:: postgresql + + 'null' IS NOT NULL -- true + +.. data:: datatype ISNULL + + Test whether value is null (nonstandard syntax). + +.. data:: datatype NOTNULL + + Test whether value is not null (nonstandard syntax). + +.. data:: boolean IS TRUE + + Test whether boolean expression yields true. + + .. code-block:: postgresql + + true IS TRUE -- true + NULL::boolean IS TRUE -- false (rather than NULL) + +.. data:: boolean IS NOT TRUE + + Test whether boolean expression yields false or unknown. + + .. code-block:: postgresql + + true IS NOT TRUE -- false + NULL::boolean IS NOT TRUE -- true (rather than NULL) + +.. data:: boolean IS FALSE + + Test whether boolean expression yields false. + + .. code-block:: postgresql + + true IS FALSE -- false + NULL::boolean IS FALSE -- false (rather than NULL) + +.. data:: boolean IS NOT FALSE + + Test whether boolean expression yields true or unknown. + + .. code-block:: postgresql + + true IS NOT FALSE -- true + NULL::boolean IS NOT FALSE -- true (rather than NULL) + +.. data:: boolean IS UNKNOWN + + Test whether boolean expression yields unknown. + + .. code-block:: postgresql + + true IS UNKNOWN -- false + NULL::boolean IS UNKNOWN -- true (rather than NULL) + +.. data:: boolean IS NOT UNKNOWN + + Test whether boolean expression yields true or false. + + .. code-block:: postgresql + + true IS NOT UNKNOWN -- true + NULL::boolean IS NOT UNKNOWN -- false (rather than NULL) Comparison functions -------------------- From 951f8601904693fad4958d54ce5fb62eeaf3d666 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 19:02:23 +0200 Subject: [PATCH 544/689] Update headers (GH-83) --- src/rdbms/functions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index d131ab7f8..3c9da5c38 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -2,7 +2,7 @@ Functions and operators *********************** -Logical operators and comparison +Logical and comparison operators ================================ The usual logical operators are still available: From 815aae31910f4c0d9278b1da79882127dc3aec85 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 19:33:36 +0200 Subject: [PATCH 545/689] Add math operators (GH-83) --- src/rdbms/functions.txt | 151 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 3c9da5c38..5c889b3d0 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -211,3 +211,154 @@ Comparison functions .. code-block:: postgresql SELECT num_nulls(1, NULL, 2) -- return 1 + +Mathematical functions and operators +==================================== + +.. data:: numeric_type + numeric_type + + Addition + + .. code-block:: sql + + SELECT 2 + 3 -- returns 5 + +.. data:: + numeric_type + + Unary plus (no operation) + + .. code-block:: sql + + SELECT + 3.5 -- returns 3.5 + +.. data:: numeric_type - numeric_type + + Subtraction + + .. code-block:: sql + + SELECT 2 - 3 -- returns -1 + +.. data:: - numeric_type + + Negation + + .. code-block:: sql + + SELECT - (-4) -- returns 4 + +.. data:: numeric_type * numeric_type + + Multiplication + + .. code-block:: sql + + SELECT 2 * 3 -- returns 6 + +.. data:: numeric_type / numeric_type + + Division (for integral types, division truncates the result towards zero) + + .. code-block:: sql + + SELECT 5.0 / 2 -- returns 2.5000000000000000 + + SELECT 5 / 2 -- returns 2 + + SELECT (-5) / 2 -- returns -2 + +.. data:: numeric_type % numeric_type + + Modulo (remainder); available for smallint, integer, bigint, and numeric + + .. code-block:: sql + + SELECT 5 % 4 -- returns 1 + +.. data:: numeric ^ numeric +.. data:: double precision ^ double precision + + Exponentiation + + .. code-block:: sql + + SELECT 2 ^ 3 -- returns 8 + + Unlike typical mathematical practice, multiple uses of ``^`` will associate + left to right by default: + + .. code-block:: sql + + SELECT 2 ^ 3 ^ 3 -- returns 512 + SELECT 2 ^ (3 ^ 3) -- returns 134217728 + +.. data:: |/ double precision + + Square root + + .. code-block:: sql + + SELECT |/ 25.0 -- returns 5 + +.. data:: ||/ double precision + + Cube root + + .. code-block:: sql + + SELECT ||/ 64.0 -- returns 4 + +.. data:: @ numeric_type + Absolute value + + .. code-block:: sql + + SELECT @ -5.0 -- returns 5.0 + +.. data:: integral_type & integral_type + + Bitwise AND + + .. code-block:: sql + + SELECT 91 & 15 -- returns 11 + +.. data:: integral_type | integral_type + + Bitwise OR + + .. code-block:: sql + + SELECT 32 | 3 -- returns 35 + +.. data:: integral_type # integral_type + + Bitwise exclusive OR + + .. code-block:: sql + + SELECT 17 # 5 -- returns 20 + +.. data:: ~ integral_type + + Bitwise NOT + + .. code-block:: sql + + SELECT ~1 -- returns -2 + +.. data:: integral_type << integer + + Bitwise shift left + + .. code-block:: sql + + SELECT 1 << 4 -- returns 16 + +.. data:: integral_type >> integer + + Bitwise shift right + + .. code-block:: sql + + SELECT 8 >> 2 -- returns 2 From a8d90f2773230c089410501fee0aebfdbfac1fbb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 19:34:45 +0200 Subject: [PATCH 546/689] Move comparison and match operators details to appendix document (GH-83) --- src/appx/pg_func_ops.txt | 304 +++++++++++++++++++++++++++++++++++++++ src/rdbms/functions.txt | 301 -------------------------------------- 2 files changed, 304 insertions(+), 301 deletions(-) create mode 100644 src/appx/pg_func_ops.txt diff --git a/src/appx/pg_func_ops.txt b/src/appx/pg_func_ops.txt new file mode 100644 index 000000000..55b91ea5f --- /dev/null +++ b/src/appx/pg_func_ops.txt @@ -0,0 +1,304 @@ +Comparison +========== + +Comparison predicates +--------------------- + +.. data:: datatype BETWEEN datatype AND datatype + + Test if a value is within the range endpoints (inclusive) + + .. code-block:: postgresql + + 2 BETWEEN 1 AND 3 -- true + 2 BETWEEN 3 AND 1 -- false + +.. data:: datatype NOT BETWEEN datatype AND datatype + + Not between (the negation of BETWEEN). + + .. code-block:: postgresql + + 2 NOT BETWEEN 1 AND 3 -- false + +.. data:: datatype BETWEEN SYMMETRIC datatype AND datatype + + Between, after sorting the two endpoint values. + + .. code-block:: postgresql + + 2 BETWEEN SYMMETRIC 3 AND 1 -- true + +.. data:: datatype NOT BETWEEN SYMMETRIC datatype AND datatype + + Not between, after sorting the two endpoint values. + + .. code-block:: postgresql + + 2 NOT BETWEEN SYMMETRIC 3 AND 1 -- false + +.. data:: datatype IS DISTINCT FROM datatype + + Not equal, treating null as a comparable value. + + .. code-block:: postgresql + + 1 IS DISTINCT FROM NULL -- true (rather than NULL) + NULL IS DISTINCT FROM NULL -- false (rather than NULL) + +.. data:: datatype IS NOT DISTINCT FROM datatype + + Equal, treating null as a comparable value. + + .. code-block:: postgresql + + 1 IS NOT DISTINCT FROM NULL -- false (rather than NULL) + NULL IS NOT DISTINCT FROM NULL -- true (rather than NULL) + +.. data:: datatype IS NULL + + Test whether value is null. + + .. code-block:: postgresql + + 1.5 IS NULL -- false + +.. data:: datatype IS NOT NULL + + Test whether value is not null. + + .. code-block:: postgresql + + 'null' IS NOT NULL -- true + +.. data:: datatype ISNULL + + Test whether value is null (nonstandard syntax). + +.. data:: datatype NOTNULL + + Test whether value is not null (nonstandard syntax). + +.. data:: boolean IS TRUE + + Test whether boolean expression yields true. + + .. code-block:: postgresql + + true IS TRUE -- true + NULL::boolean IS TRUE -- false (rather than NULL) + +.. data:: boolean IS NOT TRUE + + Test whether boolean expression yields false or unknown. + + .. code-block:: postgresql + + true IS NOT TRUE -- false + NULL::boolean IS NOT TRUE -- true (rather than NULL) + +.. data:: boolean IS FALSE + + Test whether boolean expression yields false. + + .. code-block:: postgresql + + true IS FALSE -- false + NULL::boolean IS FALSE -- false (rather than NULL) + +.. data:: boolean IS NOT FALSE + + Test whether boolean expression yields true or unknown. + + .. code-block:: postgresql + + true IS NOT FALSE -- true + NULL::boolean IS NOT FALSE -- true (rather than NULL) + +.. data:: boolean IS UNKNOWN + + Test whether boolean expression yields unknown. + + .. code-block:: postgresql + + true IS UNKNOWN -- false + NULL::boolean IS UNKNOWN -- true (rather than NULL) + +.. data:: boolean IS NOT UNKNOWN + + Test whether boolean expression yields true or false. + + .. code-block:: postgresql + + true IS NOT UNKNOWN -- true + NULL::boolean IS NOT UNKNOWN -- false (rather than NULL) + +Comparison functions +-------------------- + +.. function:: num_nonnulls(VARIADIC "any") + + Returns the number of non-null arguments + +.. code-block:: postgresql + + SELECT num_nonnulls(1, NULL, 2) -- return 2 + +.. function:: num_nulls(VARIADIC "any") + + Returns the number of null arguments + +.. code-block:: postgresql + + SELECT num_nulls(1, NULL, 2) -- return 1 + +Mathematical functions and operators +==================================== + +.. data:: numeric_type + numeric_type + + Addition + + .. code-block:: sql + + SELECT 2 + 3 -- returns 5 + +.. data:: + numeric_type + + Unary plus (no operation) + + .. code-block:: sql + + SELECT + 3.5 -- returns 3.5 + +.. data:: numeric_type - numeric_type + + Subtraction + + .. code-block:: sql + + SELECT 2 - 3 -- returns -1 + +.. data:: - numeric_type + + Negation + + .. code-block:: sql + + SELECT - (-4) -- returns 4 + +.. data:: numeric_type * numeric_type + + Multiplication + + .. code-block:: sql + + SELECT 2 * 3 -- returns 6 + +.. data:: numeric_type / numeric_type + + Division (for integral types, division truncates the result towards zero) + + .. code-block:: sql + + SELECT 5.0 / 2 -- returns 2.5000000000000000 + + SELECT 5 / 2 -- returns 2 + + SELECT (-5) / 2 -- returns -2 + +.. data:: numeric_type % numeric_type + + Modulo (remainder); available for smallint, integer, bigint, and numeric + + .. code-block:: sql + + SELECT 5 % 4 -- returns 1 + +.. data:: numeric ^ numeric +.. data:: double precision ^ double precision + + Exponentiation + + .. code-block:: sql + + SELECT 2 ^ 3 -- returns 8 + + Unlike typical mathematical practice, multiple uses of ``^`` will associate + left to right by default: + + .. code-block:: sql + + SELECT 2 ^ 3 ^ 3 -- returns 512 + SELECT 2 ^ (3 ^ 3) -- returns 134217728 + +.. data:: |/ double precision + + Square root + + .. code-block:: sql + + SELECT |/ 25.0 -- returns 5 + +.. data:: ||/ double precision + + Cube root + + .. code-block:: sql + + SELECT ||/ 64.0 -- returns 4 + +.. data:: @ numeric_type + Absolute value + + .. code-block:: sql + + SELECT @ -5.0 -- returns 5.0 + +.. data:: integral_type & integral_type + + Bitwise AND + + .. code-block:: sql + + SELECT 91 & 15 -- returns 11 + +.. data:: integral_type | integral_type + + Bitwise OR + + .. code-block:: sql + + SELECT 32 | 3 -- returns 35 + +.. data:: integral_type # integral_type + + Bitwise exclusive OR + + .. code-block:: sql + + SELECT 17 # 5 -- returns 20 + +.. data:: ~ integral_type + + Bitwise NOT + + .. code-block:: sql + + SELECT ~1 -- returns -2 + +.. data:: integral_type << integer + + Bitwise shift left + + .. code-block:: sql + + SELECT 1 << 4 -- returns 16 + +.. data:: integral_type >> integer + + Bitwise shift right + + .. code-block:: sql + + SELECT 8 >> 2 -- returns 2 diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 5c889b3d0..74d83eb78 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -61,304 +61,3 @@ The usual comparison operators are available. | datatype != datatype -> boolean | Not equal | +-------------------------------------+--------------------------+ -Comparison predicates ---------------------- - -.. data:: datatype BETWEEN datatype AND datatype - - Test if a value is within the range endpoints (inclusive) - - .. code-block:: postgresql - - 2 BETWEEN 1 AND 3 -- true - 2 BETWEEN 3 AND 1 -- false - -.. data:: datatype NOT BETWEEN datatype AND datatype - - Not between (the negation of BETWEEN). - - .. code-block:: postgresql - - 2 NOT BETWEEN 1 AND 3 -- false - -.. data:: datatype BETWEEN SYMMETRIC datatype AND datatype - - Between, after sorting the two endpoint values. - - .. code-block:: postgresql - - 2 BETWEEN SYMMETRIC 3 AND 1 -- true - -.. data:: datatype NOT BETWEEN SYMMETRIC datatype AND datatype - - Not between, after sorting the two endpoint values. - - .. code-block:: postgresql - - 2 NOT BETWEEN SYMMETRIC 3 AND 1 -- false - -.. data:: datatype IS DISTINCT FROM datatype - - Not equal, treating null as a comparable value. - - .. code-block:: postgresql - - 1 IS DISTINCT FROM NULL -- true (rather than NULL) - NULL IS DISTINCT FROM NULL -- false (rather than NULL) - -.. data:: datatype IS NOT DISTINCT FROM datatype - - Equal, treating null as a comparable value. - - .. code-block:: postgresql - - 1 IS NOT DISTINCT FROM NULL -- false (rather than NULL) - NULL IS NOT DISTINCT FROM NULL -- true (rather than NULL) - -.. data:: datatype IS NULL - - Test whether value is null. - - .. code-block:: postgresql - - 1.5 IS NULL -- false - -.. data:: datatype IS NOT NULL - - Test whether value is not null. - - .. code-block:: postgresql - - 'null' IS NOT NULL -- true - -.. data:: datatype ISNULL - - Test whether value is null (nonstandard syntax). - -.. data:: datatype NOTNULL - - Test whether value is not null (nonstandard syntax). - -.. data:: boolean IS TRUE - - Test whether boolean expression yields true. - - .. code-block:: postgresql - - true IS TRUE -- true - NULL::boolean IS TRUE -- false (rather than NULL) - -.. data:: boolean IS NOT TRUE - - Test whether boolean expression yields false or unknown. - - .. code-block:: postgresql - - true IS NOT TRUE -- false - NULL::boolean IS NOT TRUE -- true (rather than NULL) - -.. data:: boolean IS FALSE - - Test whether boolean expression yields false. - - .. code-block:: postgresql - - true IS FALSE -- false - NULL::boolean IS FALSE -- false (rather than NULL) - -.. data:: boolean IS NOT FALSE - - Test whether boolean expression yields true or unknown. - - .. code-block:: postgresql - - true IS NOT FALSE -- true - NULL::boolean IS NOT FALSE -- true (rather than NULL) - -.. data:: boolean IS UNKNOWN - - Test whether boolean expression yields unknown. - - .. code-block:: postgresql - - true IS UNKNOWN -- false - NULL::boolean IS UNKNOWN -- true (rather than NULL) - -.. data:: boolean IS NOT UNKNOWN - - Test whether boolean expression yields true or false. - - .. code-block:: postgresql - - true IS NOT UNKNOWN -- true - NULL::boolean IS NOT UNKNOWN -- false (rather than NULL) - -Comparison functions --------------------- - -.. function:: num_nonnulls(VARIADIC "any") - - Returns the number of non-null arguments - -.. code-block:: postgresql - - SELECT num_nonnulls(1, NULL, 2) -- return 2 - -.. function:: num_nulls(VARIADIC "any") - - Returns the number of null arguments - -.. code-block:: postgresql - - SELECT num_nulls(1, NULL, 2) -- return 1 - -Mathematical functions and operators -==================================== - -.. data:: numeric_type + numeric_type - - Addition - - .. code-block:: sql - - SELECT 2 + 3 -- returns 5 - -.. data:: + numeric_type - - Unary plus (no operation) - - .. code-block:: sql - - SELECT + 3.5 -- returns 3.5 - -.. data:: numeric_type - numeric_type - - Subtraction - - .. code-block:: sql - - SELECT 2 - 3 -- returns -1 - -.. data:: - numeric_type - - Negation - - .. code-block:: sql - - SELECT - (-4) -- returns 4 - -.. data:: numeric_type * numeric_type - - Multiplication - - .. code-block:: sql - - SELECT 2 * 3 -- returns 6 - -.. data:: numeric_type / numeric_type - - Division (for integral types, division truncates the result towards zero) - - .. code-block:: sql - - SELECT 5.0 / 2 -- returns 2.5000000000000000 - - SELECT 5 / 2 -- returns 2 - - SELECT (-5) / 2 -- returns -2 - -.. data:: numeric_type % numeric_type - - Modulo (remainder); available for smallint, integer, bigint, and numeric - - .. code-block:: sql - - SELECT 5 % 4 -- returns 1 - -.. data:: numeric ^ numeric -.. data:: double precision ^ double precision - - Exponentiation - - .. code-block:: sql - - SELECT 2 ^ 3 -- returns 8 - - Unlike typical mathematical practice, multiple uses of ``^`` will associate - left to right by default: - - .. code-block:: sql - - SELECT 2 ^ 3 ^ 3 -- returns 512 - SELECT 2 ^ (3 ^ 3) -- returns 134217728 - -.. data:: |/ double precision - - Square root - - .. code-block:: sql - - SELECT |/ 25.0 -- returns 5 - -.. data:: ||/ double precision - - Cube root - - .. code-block:: sql - - SELECT ||/ 64.0 -- returns 4 - -.. data:: @ numeric_type - Absolute value - - .. code-block:: sql - - SELECT @ -5.0 -- returns 5.0 - -.. data:: integral_type & integral_type - - Bitwise AND - - .. code-block:: sql - - SELECT 91 & 15 -- returns 11 - -.. data:: integral_type | integral_type - - Bitwise OR - - .. code-block:: sql - - SELECT 32 | 3 -- returns 35 - -.. data:: integral_type # integral_type - - Bitwise exclusive OR - - .. code-block:: sql - - SELECT 17 # 5 -- returns 20 - -.. data:: ~ integral_type - - Bitwise NOT - - .. code-block:: sql - - SELECT ~1 -- returns -2 - -.. data:: integral_type << integer - - Bitwise shift left - - .. code-block:: sql - - SELECT 1 << 4 -- returns 16 - -.. data:: integral_type >> integer - - Bitwise shift right - - .. code-block:: sql - - SELECT 8 >> 2 -- returns 2 From 0af419e010ccdf0df34ecf8c486ce6fb89e1dde1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 19:50:08 +0200 Subject: [PATCH 547/689] Add match operators (GH-83) --- src/appx/pg_func_ops.txt | 1 + src/rdbms/functions.txt | 61 +++++++++++++++++++++++++++++++++++----- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/appx/pg_func_ops.txt b/src/appx/pg_func_ops.txt index 55b91ea5f..027d63e8d 100644 --- a/src/appx/pg_func_ops.txt +++ b/src/appx/pg_func_ops.txt @@ -249,6 +249,7 @@ Mathematical functions and operators SELECT ||/ 64.0 -- returns 4 .. data:: @ numeric_type + Absolute value .. code-block:: sql diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 74d83eb78..56ce76c0e 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -46,18 +46,65 @@ The usual comparison operators are available. +-------------------------------------+--------------------------+ | Operator | Description | +=====================================+==========================+ -| datatype < datatype -> boolean | Less than | +| ``datatype < datatype -> boolean`` | Less than | +-------------------------------------+--------------------------+ -| datatype > datatype -> boolean | Greater than | +| ``datatype > datatype -> boolean`` | Greater than | +-------------------------------------+--------------------------+ -| datatype <= datatype -> boolean | Less than or equal to | +| ``datatype <= datatype -> boolean`` | Less than or equal to | +-------------------------------------+--------------------------+ -| datatype >= datatype -> boolean | Greater than or equal to | +| ``datatype >= datatype -> boolean`` | Greater than or equal to | +-------------------------------------+--------------------------+ -| datatype = datatype -> boolean | Equal | +| ``datatype = datatype -> boolean`` | Equal | +-------------------------------------+--------------------------+ -| datatype <> datatype -> boolean | Not equal | +| ``datatype <> datatype -> boolean`` | Not equal | +-------------------------------------+--------------------------+ -| datatype != datatype -> boolean | Not equal | +| ``datatype != datatype -> boolean`` | Not equal | +-------------------------------------+--------------------------+ +Mathematical functions and operators +==================================== + +Mathematical operators and provided for many PostgreSQL types. + ++-----------------------------------------+-----------------------------------+ +| Operation | Description | ++=========================================+===================================+ +| ``numeric_type + numeric_type`` | Addition | ++-----------------------------------------+-----------------------------------+ +| ``+ numeric_type`` | Unary plus (no operation) | ++-----------------------------------------+-----------------------------------+ +| ``numeric_type - numeric_type`` | Subtraction | ++-----------------------------------------+-----------------------------------+ +| ``- numeric_type`` | Negation | ++-----------------------------------------+-----------------------------------+ +| ``numeric_type * numeric_type`` | Multiplication | ++-----------------------------------------+-----------------------------------+ +| ``numeric_type / numeric_type`` | Division (for integral types, | +| | division truncates the result | +| | towards zero) | ++-----------------------------------------+-----------------------------------+ +| ``numeric_type % numeric_type`` | Modulo (remainder); available for | +| | ``smallint``, ``integer``, | +| | ``bigint``, and ``numeric`` | ++-----------------------------------------+-----------------------------------+ +| ``numeric ^ numeric`` | Exponentiation | +| ``double precision ^ double precision`` | | ++-----------------------------------------+-----------------------------------+ +| ``|/ double precision`` | Square root | ++-----------------------------------------+-----------------------------------+ +| ``||/ double precision`` | Cube root | ++-----------------------------------------+-----------------------------------+ +| ``@ numeric_type`` | Absolute value | ++-----------------------------------------+-----------------------------------+ +| ``integral_type & integral_type`` | Bitwise AND | ++-----------------------------------------+-----------------------------------+ +| ``integral_type | integral_type`` | Bitwise OR | ++-----------------------------------------+-----------------------------------+ +| ``integral_type # integral_type`` | Bitwise exclusive OR | ++-----------------------------------------+-----------------------------------+ +| ``~ integral_type`` | Bitwise NOT | ++-----------------------------------------+-----------------------------------+ +| ``integral_type << integer`` | Bitwise shift left | ++-----------------------------------------+-----------------------------------+ +| ``integral_type >> integer`` | Bitwise shift right | ++-----------------------------------------+-----------------------------------+ From 8fc93b502c1b7b423dae292df481eee7581c7803 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 20:39:26 +0200 Subject: [PATCH 548/689] Update headers and todos in functions document (GH-83) --- src/rdbms/functions.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 56ce76c0e..1dccb2e12 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -108,3 +108,26 @@ Mathematical operators and provided for many PostgreSQL types. +-----------------------------------------+-----------------------------------+ | ``integral_type >> integer`` | Bitwise shift right | +-----------------------------------------+-----------------------------------+ + +String functions +================ + +*Strings* in this context include values of the types ``character``, ``text`` +and ``character varying``. + +.. todo: concat, pattern matching (like) + +Date/Time functions and operators +================================= + +.. todo: extract, date_part, date_trunc, current d/t, formatting d/t + +Conditional expressions +======================= + +.. todo: case, coalesce + +Aggregate functions +=================== + +.. todo: sum, max, min, avg, count, + group by, + having From 9cbef9b265228d1def78fa139c23de6ba910b0a2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 22 Nov 2023 21:28:20 +0200 Subject: [PATCH 549/689] Update bibliography (GH-53, GH-136) --- src/refs.bib | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/refs.bib b/src/refs.bib index d56df8e40..8c6a65414 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -184,3 +184,44 @@ @misc{realpython:lambda-func date = {2019.6.19}, url = {https://realpython.com/python-lambda/}, } + +@misc{medium:db-nf-tut, + title = {A Complete Database Normalization Tutorial}, + author = {Anuradha Wickramarachchi}, + date = {2020.8.27}, + url = {https://medium.com/swlh/a-complete-database-normalization-tutorial-732df3748d0e}, +} + +@misc{medium:db-nf-2, + title = {Database Normalization Demystified}, + author = {Dr. Roi Yehoshua}, + date = {2023.3.10}, + url = {https://medium.com/@roiyeho/what-is-database-normalization-3b66ded5fc4d}, +} + +@misc{medium:db-acid-1, + title = {ACID, MVCC, and how PostgreSQL handles concurrent queries}, + author = {Igor Atakhanov}, + date = {2020.6.15}, + url = {https://medium.com/@igor.atakhanov/acid-mvcc-and-how-postgresql-handles-concurrent-queries-27fb48692db8}, +} + +@misc{medium:db-acid-2, + title = {Database ACID}, + author = {John Lu}, + date = {2023.4.12}, + url = {https://lush93md.medium.com/database-acid-c9eb55d10e20}, +} + +@misc{medium:db-acid-3, + title = {Database ACID Usage}, + author = {Murat Aslan}, + date = {2023.3.8}, + url = {https://medium.com/@murataslan1/database-acid-usage-f9b259091c11}, +} + +@misc{medium:db-acid-cap, + title = {Database:ACID CAP Isolation Levels}, + date = {2017.1.12}, + url = {https://cinish.medium.com/database-acid-cap-isolation-levels-371b7e06a112} +} From 1b5d48352c0dfa5b6da7158f39d997e8a9df9ffb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 12:25:54 +0200 Subject: [PATCH 550/689] Add avg and count functions subsections (GH-83) --- assets/img/aggregate-function.svg | 158 +++++++++++++++--------------- src/rdbms/functions.txt | 101 ++++++++++++++++++- 2 files changed, 180 insertions(+), 79 deletions(-) diff --git a/assets/img/aggregate-function.svg b/assets/img/aggregate-function.svg index f1cae6e44..7f8841161 100644 --- a/assets/img/aggregate-function.svg +++ b/assets/img/aggregate-function.svg @@ -1,78 +1,80 @@ - - - - - - - aggregate-func - - - - ( - - - - - - DISTINCT - - - - - - - - expr - - - - ) - - - - filter-clause - - - - - - - - - - - - - , - - - - - - * - - - - - - - - - + + + + + + +aggregate-func + + + +( + + + + + +DISTINCT + + + + + + + +expr + + + +) + + + +filter-clause + + + + + + + + + + + + +, + + + + + +* + + + + + + + + + + + +ORDER + + + +BY + + + +ordering-term + +, + + + + + + \ No newline at end of file diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 1dccb2e12..635f5940c 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -130,4 +130,103 @@ Conditional expressions Aggregate functions =================== -.. todo: sum, max, min, avg, count, + group by, + having +*Aggregate functions* compute a single result from a set of input values. +There are lots of these, and different RDBMS implement different aggregation +functions. In this section, we will focus on the most wide spread and often +used aggregate functions only. + +The general schema of using is presented below: + +.. image:: /../assets/img/aggregate-function.svg + +Average value +------------- + +.. function:: avg(smallint) -> numeric + avg(integer) -> numeric + avg(bigint) -> numeric + avg(numeric) -> numeric + avg(real) -> double precision + avg(double precision) -> double precision + avg(interval) -> interval + + Computes the average (arithmetic mean) of all the non-null input values + +The ``avg`` function returns the average value of all non-null inputs within +a group. + +.. important:: + + SQLite implements ``avg`` function in a manner to return ``NULL`` if and + only if all the inputs are nulls. On the other hand PostgreSQL will raise + an error in this scenario. + +.. code-block:: postgresql + + SELECT avg(amount), + ceil(avg(amount)), + extract(MONTH FROM date) AS month, + extract(YEAR FROM date) AS year + FROM revenue + GROUP BY month, year + ORDER BY year, month + LIMIT 5; + ++-----------------------+-------+-------+------+ +| avg | ceil | month | year | ++=======================+=======+=======+======+ +| 7797.6 | 7798 | 11 | 2013 | ++-----------------------+-------+-------+------+ +| 6708.2857142857142857 | 6709 | 12 | 2013 | ++-----------------------+-------+-------+------+ +| 6522.2 | 6523 | 1 | 2014 | ++-----------------------+-------+-------+------+ +| 6831.5 | 6832 | 2 | 2014 | ++-----------------------+-------+-------+------+ +| 10217.4 | 10218 | 3 | 2014 | ++-----------------------+-------+-------+------+ + +Count +----- + +.. function:: count(*) -> bigint + + Computes the number of input rows + +.. function:: count("any") -> bigint + + Computes the number of input rows in which the input value is not null + +.. code-block:: postgresql + + SELECT * + FROM revenue + WHERE extract(month from date) = 1 + AND extract(year from date) = 2014; + ++-----+-----------+------------+--------+ +| id | member_id | date | amount | ++-----+-----------+------------+--------+ +| 91 | 42 | 2014-01-18 | 6662 | ++-----+-----------+------------+--------+ +| 196 | 214 | 2014-01-07 | 8853 | ++-----+-----------+------------+--------+ +| 571 | 131 | 2014-01-13 | 8541 | ++-----+-----------+------------+--------+ +| 671 | 64 | 2014-01-12 | 2636 | ++-----+-----------+------------+--------+ +| 758 | 90 | 2014-01-18 | 5919 | ++-----+-----------+------------+--------+ + +.. code-block:: postgresql + + SELECT count(*) + FROM revenue + WHERE extract(month from date) = 1 + AND extract(year from date) = 2014; + ++-------+ +| count | ++=======+ +| 5 | ++-------+ From b01d89a3713e96e73ed599ac584fe287a56f2bde Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 12:33:16 +0200 Subject: [PATCH 551/689] Fix "env_path" appx - was changed by mistake --- src/appx/env_path.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/appx/env_path.txt b/src/appx/env_path.txt index 2677c3442..07e7680c1 100644 --- a/src/appx/env_path.txt +++ b/src/appx/env_path.txt @@ -1,4 +1,4 @@ -q.. meta:: +.. meta:: :description: Setting up environment variables :author: Serhii Horodilov sgorodil@gmail.com :keywords: settings, environment, variables From ec9b3c3370749ae793e6d855c592a7d5ccff9257 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 12:54:15 +0200 Subject: [PATCH 552/689] Add max, min and sum functions subsections (GH-83) --- src/rdbms/functions.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 635f5940c..7cdb68434 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -230,3 +230,39 @@ Count +=======+ | 5 | +-------+ + +Maximum value +------------- + +.. function:: max(see text) -> same as input type + + Computes the maximum of the non-null input values. + Available for any numeric, string, date/time or enum type. + +.. todo: add code example + +Minimum value +------------- + +.. function:: min(see text) -> same as input type + + Computes the minimum of the non-null inpout values. + Available for any numeric, string, date/time or enum type. + +.. todo: add code example + +Sum of values +------------- + +.. function:: sum ( smallint ) → bigint + sum ( integer ) → bigint + sum ( bigint ) → numeric + sum ( numeric ) → numeric + sum ( real ) → real + sum ( double precision ) → double precision + sum ( interval ) → interval + sum ( money ) → money + + Computes the sum of the non-null values + +.. todo: add code example From bfcf4090fcf22352a65fe6c203952fe4c91a9c54 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 13:20:03 +0200 Subject: [PATCH 553/689] Update aggregation functions examples (GH-83) --- src/rdbms/functions.txt | 153 +++++++++++++++++++++++++++------------- 1 file changed, 104 insertions(+), 49 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 7cdb68434..c2990ff55 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -163,28 +163,27 @@ a group. .. code-block:: postgresql - SELECT avg(amount), - ceil(avg(amount)), - extract(MONTH FROM date) AS month, - extract(YEAR FROM date) AS year + SELECT extract(year from date) as year, + extract(month from date) as month, + ceil(avg(amount)) as avg FROM revenue GROUP BY month, year ORDER BY year, month LIMIT 5; -+-----------------------+-------+-------+------+ -| avg | ceil | month | year | -+=======================+=======+=======+======+ -| 7797.6 | 7798 | 11 | 2013 | -+-----------------------+-------+-------+------+ -| 6708.2857142857142857 | 6709 | 12 | 2013 | -+-----------------------+-------+-------+------+ -| 6522.2 | 6523 | 1 | 2014 | -+-----------------------+-------+-------+------+ -| 6831.5 | 6832 | 2 | 2014 | -+-----------------------+-------+-------+------+ -| 10217.4 | 10218 | 3 | 2014 | -+-----------------------+-------+-------+------+ ++------+-------+-------+ +| year | month | avg | ++======+=======+=======+ +| 2013 | 11 | 7798 | ++------+-------+-------+ +| 2013 | 12 | 6709 | ++------+-------+-------+ +| 2014 | 1 | 6523 | ++------+-------+-------+ +| 2014 | 2 | 6832 | ++------+-------+-------+ +| 2014 | 3 | 10218 | ++------+-------+-------+ Count ----- @@ -199,37 +198,27 @@ Count .. code-block:: postgresql - SELECT * + SELECT extract(year from date) as year, + extract(month from date) as month, + count(*) FROM revenue - WHERE extract(month from date) = 1 - AND extract(year from date) = 2014; - -+-----+-----------+------------+--------+ -| id | member_id | date | amount | -+-----+-----------+------------+--------+ -| 91 | 42 | 2014-01-18 | 6662 | -+-----+-----------+------------+--------+ -| 196 | 214 | 2014-01-07 | 8853 | -+-----+-----------+------------+--------+ -| 571 | 131 | 2014-01-13 | 8541 | -+-----+-----------+------------+--------+ -| 671 | 64 | 2014-01-12 | 2636 | -+-----+-----------+------------+--------+ -| 758 | 90 | 2014-01-18 | 5919 | -+-----+-----------+------------+--------+ - -.. code-block:: postgresql - - SELECT count(*) - FROM revenue - WHERE extract(month from date) = 1 - AND extract(year from date) = 2014; + GROUP BY month, year + ORDER BY year, month + LIMIT 5; -+-------+ -| count | -+=======+ -| 5 | -+-------+ ++------+-------+-------+ +| year | month | count | ++======+=======+=======+ +| 2013 | 11 | 5 | ++------+-------+-------+ +| 2013 | 12 | 7 | ++------+-------+-------+ +| 2014 | 1 | 5 | ++------+-------+-------+ +| 2014 | 2 | 8 | ++------+-------+-------+ +| 2014 | 3 | 5 | ++------+-------+-------+ Maximum value ------------- @@ -239,7 +228,29 @@ Maximum value Computes the maximum of the non-null input values. Available for any numeric, string, date/time or enum type. -.. todo: add code example +.. code-block:: postgresql + + SELECT extract(year from date) as year, + extract(month from date) as month, + max(amount) + FROM revenue + GROUP BY month, year + ORDER BY year, month + LIMIT 5; + ++------+-------+-------+ +| year | month | max | ++======+=======+=======+ +| 2013 | 11 | 12383 | ++------+-------+-------+ +| 2013 | 12 | 12264 | ++------+-------+-------+ +| 2014 | 1 | 8853 | ++------+-------+-------+ +| 2014 | 2 | 12919 | ++------+-------+-------+ +| 2014 | 3 | 14661 | ++------+-------+-------+ Minimum value ------------- @@ -249,7 +260,29 @@ Minimum value Computes the minimum of the non-null inpout values. Available for any numeric, string, date/time or enum type. -.. todo: add code example +.. code-block:: postgresql + + SELECT extract(year from date) as year, + extract(month from date) as month, + min(amount) + FROM revenue + GROUP BY month, year + ORDER BY year, month + LIMIT 5; + ++------+-------+------+ +| year | month | min | ++======+=======+======+ +| 2013 | 11 | 3365 | ++------+-------+------+ +| 2013 | 12 | 3564 | ++------+-------+------+ +| 2014 | 1 | 2636 | ++------+-------+------+ +| 2014 | 2 | 3442 | ++------+-------+------+ +| 2014 | 3 | 2654 | ++------+-------+------+ Sum of values ------------- @@ -265,4 +298,26 @@ Sum of values Computes the sum of the non-null values -.. todo: add code example +.. code-block:: postgresql + + SELECT extract(year from date) as year, + extract(month from date) as month, + sum(amount) + FROM revenue + GROUP BY month, year + ORDER BY year, month + LIMIT 5; + ++------+-------+-------+ +| year | month | sum | ++======+=======+=======+ +| 2013 | 11 | 38988 | ++------+-------+-------+ +| 2013 | 12 | 46958 | ++------+-------+-------+ +| 2014 | 1 | 32611 | ++------+-------+-------+ +| 2014 | 2 | 54652 | ++------+-------+-------+ +| 2014 | 3 | 51087 | ++------+-------+-------+ From 6e316150460eeb5b6e4c382081151ab9da6d7c00 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 14:27:34 +0200 Subject: [PATCH 554/689] Update aggregation functions signatures as per off. docs (GH-83) --- src/rdbms/functions.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index c2990ff55..36aea5f24 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -142,13 +142,13 @@ The general schema of using is presented below: Average value ------------- -.. function:: avg(smallint) -> numeric - avg(integer) -> numeric - avg(bigint) -> numeric - avg(numeric) -> numeric - avg(real) -> double precision - avg(double precision) -> double precision - avg(interval) -> interval +.. function:: avg ( smallint ) -> numeric + avg ( integer ) -> numeric + avg ( bigint ) -> numeric + avg ( numeric ) -> numeric + avg ( real ) -> double precision + avg ( double precision ) -> double precision + avg ( interval ) -> interval Computes the average (arithmetic mean) of all the non-null input values @@ -188,11 +188,11 @@ a group. Count ----- -.. function:: count(*) -> bigint +.. function:: count ( * ) -> bigint Computes the number of input rows -.. function:: count("any") -> bigint +.. function:: count ( "any" ) -> bigint Computes the number of input rows in which the input value is not null @@ -223,7 +223,7 @@ Count Maximum value ------------- -.. function:: max(see text) -> same as input type +.. function:: max ( see text ) -> same as input type Computes the maximum of the non-null input values. Available for any numeric, string, date/time or enum type. @@ -255,7 +255,7 @@ Maximum value Minimum value ------------- -.. function:: min(see text) -> same as input type +.. function:: max ( see text ) -> same as input type Computes the minimum of the non-null inpout values. Available for any numeric, string, date/time or enum type. From ddc5a6201f3cde139888614273eecac09c2286d6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 14:32:03 +0200 Subject: [PATCH 555/689] Remove outdated aggregate.txt document (GH-83) --- src/rdbms/aggregate.txt | 129 ---------------------------------------- src/rdbms/index.txt | 1 - 2 files changed, 130 deletions(-) delete mode 100644 src/rdbms/aggregate.txt diff --git a/src/rdbms/aggregate.txt b/src/rdbms/aggregate.txt deleted file mode 100644 index 7bd8f1d1b..000000000 --- a/src/rdbms/aggregate.txt +++ /dev/null @@ -1,129 +0,0 @@ -.. todo: review and update document - -.. meta:: - :description: Data aggregation - :author: Serhii Horodilov - :keywords: sql, db, database, data, aggregation, functions - -******************************************************************************* - Data Aggregation -******************************************************************************* - -Like most other relational database products, PostgreSQL supports -*aggregate functions*. - -An *aggregate functions* compute a single result from a set of input values. -Various RDBMS implement various built-in aggregate functions. In this section -we will review 5 basic functions that are available in all RDBMS. - -.. image:: /../assets/img/aggregate-function.svg - -Count ------ - -The ``count(field)`` function returns a count of the number of times that -``field`` is not ``NULL`` in a group. -The ``count(*)`` function (with no arguments) returns the total number of rows -in the group. - -.. todo: provide a code example - -Maximum value -------------- - -The ``max()`` aggregate function returns the maximum value of all values in -the group. The maximum value is the value that would be returned last in -an ORDER BY on the same column. -Aggregate function returns ``NULL`` if and only if there are no non-NULL values -in the group. - -.. todo: provide a code example - -Minimum value -------------- - -The ``min()`` aggregate function returns the minimum non-NULL value of all -values in the group. The minimum value is the first non-NULL value that would -appear in an ORDER BY of the column. -Aggregate function returns ``NULL`` if and only if there are no non-NULL values -in the group. - -.. todo: provide a code example - -Average value -------------- - -The ``avg()`` function returns the average value of all non-NULL inputs within -a group. String and BLOB values that do not look like numbers are interpreted -as 0. The result is always a floating point value whenever there is at least -one non-NULL input even if all inputs are integers. -The result is ``NULL`` if and only if there are no non-NULL inputs. - -.. todo: provide a code example - -Sum of values -------------- - -The ``sum()`` aggregate functions return the sum of all non-NULL values in -the group. -If there are no non-NULL input rows then function returns ``NULL``. - -.. note:: - NULL is not normally a helpful result for the sum of no rows but - the SQL standard requires it. - - SQLite implements ``total`` aggregate function, that is similar to - ``sum``, but returns ``0.0`` (always floating point) if there are - no non-NULL input rows. - -.. todo: provide a code example - -Grouping data -============= - -Getting some aggregated values is not very helpful itself. Most cases require -to group outputs in some specific manner. - -For example, if the task is to count number of registered categories it is -simple to solve as: - -.. todo: provide a code example - -But in case, the task is to count **sold** items for each category, this -becomes impossible to solve without grouping items. ``GROUP BY`` clause -provides the ability to group rows based on some field(s) values. - -General syntax is: - -.. todo: provide a code example - -If the ``SELECT`` statement is an aggregate query with a ``GROUP BY`` clause, -then each of the expressions specified as part of the GROUP BY clause is -evaluated for each row of the dataset according to the processing rules stated -below for ORDER BY expressions. Each row is then assigned to a "group" based on -the results; rows for which the results of evaluating the GROUP BY expressions -are the same get assigned to the same group. For the purposes of grouping rows, -``NULL`` values are considered equal. The usual rules for selecting a collation -sequence with which to compare text values apply when evaluating expressions in -a GROUP BY clause. The expressions in the GROUP BY clause do not have to be -expressions that appear in the result. The expressions in a GROUP BY clause may -not be aggregate expressions. - -HAVING clause -------------- - -But what, if the task is to filter categories, that have less than 500 sold -items in it? ``WHERE`` clause will be useless, cause it's evaluated before -grouping output. In other words, only rows that suite WHERE filter will be -selected. - -.. todo: provide a code example - -If a ``HAVING`` clause is specified, it is evaluated once for each group of -rows as a boolean expression. If the result of evaluating the HAVING clause is -false, the group is discarded. If the HAVING clause is an aggregate expression, -it is evaluated across all rows in the group. - -If a HAVING clause is a non-aggregate expression, it is evaluated with respect -to an arbitrarily selected row from the group. The HAVING expression may refer -to values, even aggregate functions, that are not in the result. diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 3fb611bfb..475b82989 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -68,4 +68,3 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: query relations functions - aggregate From 4e7fbf17bd5e4d415a4676ff66377413dddca26d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 23 Nov 2023 14:33:03 +0200 Subject: [PATCH 556/689] Update avg function subsection (GH-83) --- src/rdbms/functions.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 36aea5f24..abeff2613 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -151,9 +151,7 @@ Average value avg ( interval ) -> interval Computes the average (arithmetic mean) of all the non-null input values - -The ``avg`` function returns the average value of all non-null inputs within -a group. + within a group .. important:: From 1f28f7ca0b22046bbd70e40f41700ca70aa465e1 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 24 Nov 2023 13:18:43 +0200 Subject: [PATCH 557/689] Fix minor documentation generator errors Add normalization document to rdbms toctree. Add noindex marker for repeating functions. Minor fixes to documentation markup and charset. --- src/appx/pg_func_ops.txt | 2 ++ src/rdbms/functions.txt | 19 ++++++++++--------- src/rdbms/index.txt | 1 + 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/appx/pg_func_ops.txt b/src/appx/pg_func_ops.txt index 027d63e8d..1da2a028a 100644 --- a/src/appx/pg_func_ops.txt +++ b/src/appx/pg_func_ops.txt @@ -1,3 +1,5 @@ +:orphan: + Comparison ========== diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index abeff2613..b05c0299d 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -191,6 +191,7 @@ Count Computes the number of input rows .. function:: count ( "any" ) -> bigint + :noindex: Computes the number of input rows in which the input value is not null @@ -253,7 +254,7 @@ Maximum value Minimum value ------------- -.. function:: max ( see text ) -> same as input type +.. function:: min ( see text ) -> same as input type Computes the minimum of the non-null inpout values. Available for any numeric, string, date/time or enum type. @@ -285,14 +286,14 @@ Minimum value Sum of values ------------- -.. function:: sum ( smallint ) → bigint - sum ( integer ) → bigint - sum ( bigint ) → numeric - sum ( numeric ) → numeric - sum ( real ) → real - sum ( double precision ) → double precision - sum ( interval ) → interval - sum ( money ) → money +.. function:: sum ( smallint ) -> bigint + sum ( integer ) -> bigint + sum ( bigint ) -> numeric + sum ( numeric ) -> numeric + sum ( real ) -> real + sum ( double precision ) -> double precision + sum ( interval ) -> interval + sum ( money ) -> money Computes the sum of the non-null values diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 475b82989..9aee887a4 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -68,3 +68,4 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: query relations functions + normalization From 24b58e86352df9ebe43cbced50ce0fefa1db7660 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 1 Dec 2023 22:23:28 +0200 Subject: [PATCH 558/689] Add gift-giver specification --- .gitmodules | 3 +++ src/spec/giver | 1 + 2 files changed, 4 insertions(+) create mode 160000 src/spec/giver diff --git a/.gitmodules b/.gitmodules index 00959c024..ddf07487e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "src/appx/libms"] path = src/appx/libms url = git@github.com:edu-python-course/libms-spec.git +[submodule "src/spec/giver"] + path = src/spec/giver + url = git@github.com:edu-python-course/giver-spec.git diff --git a/src/spec/giver b/src/spec/giver new file mode 160000 index 000000000..2006c3f5e --- /dev/null +++ b/src/spec/giver @@ -0,0 +1 @@ +Subproject commit 2006c3f5eb8c5615574f4fd0e6dd5252135bdbee From 55101370268bd2e13507757f0c305579f701d857 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 2 Dec 2023 14:55:17 +0200 Subject: [PATCH 559/689] Add pre-translated (DeepL) localization for gift-giver specification --- .../LC_MESSAGES/spec/giver/_legacy/index.po | 330 +++++++++++++ .../uk/LC_MESSAGES/spec/giver/index.po | 459 ++++++++++++++++++ 2 files changed, 789 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/spec/giver/index.po diff --git a/src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po b/src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po new file mode 100644 index 000000000..b6d77225f --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po @@ -0,0 +1,330 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-02 14:46+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: uk\n" +"Language-Team: uk \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 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.13.1\n" + +#: ../../src/spec/giver/_legacy/index.md:1 +msgid "Anonymous Giver Site" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:3 +msgid "" +"The project is inspired by \"Secret Santa\" (aka \"Secret Nicholas\") " +"Christmas tradition, but it does not focus on specific celebrations or " +"events. The primary objective is to create a place on the internet where " +"people can gather together in groups and anonymously give gifts to each " +"other." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:9 +msgid "Key features" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:11 +msgid "**Wish lists**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:13 +msgid "" +"Any registered user can create and modify their own wish lists. The wish " +"list is generally private and is not visible to other users, unless they " +"are assigned as a gift-giver to the wish list owner." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:17 +msgid "**Many gift-giving campaigns**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:19 +msgid "Users can join multiple gift-giving campaigns without any limit." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:21 +msgid "**Personal reminders**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:23 +msgid "" +"Users with empty wish lists will be prompted to place something there. " +"Similarly, dormant users will be prompted to join an existing gift-giving" +" campaign." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:27 +msgid "**Administration can't interfere**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:29 +msgid "" +"Site admins provide moderation for wish lists and support gift-giving " +"campaigns. But they cannot create their own campaigns, or modify or " +"remove existing campaigns created by other users." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:33 +msgid "Registration and authentication" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:35 +msgid "Anonymous users may access any publicly available page." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:36 +msgid "" +"Anonymous users can register by providing a username, fullname, and " +"password." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:38 +msgid "Anonymous users can log in to their existing account." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:39 +msgid "Authenticated users can log out at any time." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:41 +msgid "Wish lists" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:43 +msgid "Wish lists are personal collections of desired gifts." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:45 +msgid "A wish list is created for any registered user, except admins." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:46 +msgid "Users must add at least one item to their wish list before using the site." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:48 +msgid "A wish list is available only to its owner and site admins." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:49 +msgid "" +"A wish list is temporary available to other users assigned as a gift-" +"giver to its owner." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:51 +msgid "Owners can add, modify, or remove entries in their wish lists." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:52 +msgid "" +"Admins can mark any wish list item as restricted, which makes it act as a" +" deleted one." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:55 +msgid "Gift-giving campaigns" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:57 +msgid "Non-admin users can create their own gift-giving campaigns." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:58 +msgid "Each campaign should have name, description and members list." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:59 +msgid "The campaign creator is automatically a member and cannot be excluded." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:61 +msgid "Campaigns status can be draft, public, private, or completed." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:62 +msgid "" +"Admins or the campaign creator can run the campaign if it has at least 3 " +"members." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:64 +msgid "Campaigns cannot be joined once they have started." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:65 +msgid "Any user, except the creator, can leave the campaign if it hasn't started." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:67 +msgid "" +"The creator can remove non-running campaigns regardless of members list, " +"creation time, or status." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:69 +msgid "" +"Admins can remove the campaigns with 3 or fewer members that hasn't " +"started within a specified time." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:71 +msgid "" +"Admins can remove draft campaigns that haven't been published within a " +"specified time." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:73 +msgid "" +"The number of campaigns a user can be member of is limited by the number " +"of items in their wish list." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:76 +msgid "**Draft campaigns**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:78 +msgid "No user can join a draft campaign." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:79 +msgid "Campaigns can are marked as drafts by default at creation." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:80 +msgid "The creator can publish the campaign by making campaign private or public." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:82 +msgid "Draft campaigns cannot be initiated." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:84 +msgid "**Public campaigns**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:86 +msgid "Public campaigns are accessible to both anonymous and authenticated users." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:88 +msgid "" +"Authenticated users can join any public campaign, unless it hasn't " +"started." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:91 +msgid "**Private campaigns**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:93 +msgid "Private campaign are available only to their members." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:94 +msgid "The campaign creator can share a join link with other users." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:95 +msgid "Once joined, the campaign becomes visible in the user's campaigns list." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:98 +msgid "**Completed campaigns**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:100 +msgid "" +"Actually this means the campaign has been completed and archived. Admins " +"can remove archived campaigns at any time (campaigns clean-up). Running " +"campaigns cannot be manually moved to completed status. This is done " +"automatically." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:105 +msgid "**Campaign life-cycle**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:149 +msgid "Running the gift-giving campaign" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:151 +msgid "The option to start campaigns is available to their creators or admins." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:153 +msgid "Once the campaign has started, no one can join or leave it." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:154 +msgid "" +"Each campaign member is assigned to give a gift to a randomly chosen " +"person within the same campaign members list." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:157 +msgid "**Giver access for wish list**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:159 +msgid "The wish list of the assigned person becomes visible to the gift giver." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:161 +msgid "The giver can mark any single item within this list as a given gift." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:162 +msgid "After the gift is given, wish list returns to normal." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:163 +msgid "Wish list entry marked as given, cannot be changed by other givers." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:165 +msgid "**Multiple gifts**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:167 +msgid "" +"Generally, gift-giving campaigns allow for one gift at a time. However, " +"if a user is assigned twice to the same giver from different campaigns, " +"the giver can mark as many entries as the number of assignments." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:171 +msgid "**Autocomplete**" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:173 +msgid "" +"Once all the assignments within a campaign are completed, the campaign " +"itself is considered to be completed." +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:176 +msgid "REST API" +msgstr "" + +#: ../../src/spec/giver/_legacy/index.md:178 +msgid "**All site functions** will be implemented within REST API." +msgstr "" + diff --git a/src/_locales/uk/LC_MESSAGES/spec/giver/index.po b/src/_locales/uk/LC_MESSAGES/spec/giver/index.po new file mode 100644 index 000000000..3d560ce75 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/spec/giver/index.po @@ -0,0 +1,459 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-02 14:46+0200\n" +"PO-Revision-Date: 2023-12-02 14:53+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/spec/giver/index.rst:4 +#, fuzzy +msgid "Anonymous Giver Site" +msgstr "Сайт анонімних дарувальників" + +#: ../../src/spec/giver/index.rst:6 +#, fuzzy +msgid "" +"The project is inspired by \"Secret Santa\" (aka \"Secret Nicholas\") " +"Christmas tradition, but it does not focus on specific celebrations or " +"events. The primary objective is to create a place on the internet where " +"people can gather together in groups and anonymously give gifts to each " +"other." +msgstr "" +"Проект натхненний різдвяною традицією \"Таємного Санти\" (також відомого як " +"\"Таємний Миколай\"), але він не фокусується на конкретних святкуваннях чи " +"подіях. Основна мета - створити в інтернеті місце, де люди можуть збиратися " +"в групи і анонімно дарувати один одному подарунки." + +#: ../../src/spec/giver/index.rst:12 +#, fuzzy +msgid "Key features" +msgstr "Ключові особливості" + +#: ../../src/spec/giver/index.rst:15 ../../src/spec/giver/index.rst:46 +#, fuzzy +msgid "Wish lists" +msgstr "Списки побажань" + +#: ../../src/spec/giver/index.rst:16 +#, fuzzy +msgid "" +"Any registered user can create and modify their own wish lists. The wish " +"list is generally private and is not visible to other users, unless they are " +"assigned as a gift-giver to the wish list owner." +msgstr "" +"Будь-який зареєстрований користувач може створювати і змінювати власні " +"списки бажань. Список бажань, як правило, є приватним і не видимим для інших " +"користувачів, якщо тільки вони не призначені дарувальником для власника " +"списку бажань." + +#: ../../src/spec/giver/index.rst:21 +#, fuzzy +msgid "Many gift-giving campaigns" +msgstr "Багато кампаній з роздачі подарунків" + +#: ../../src/spec/giver/index.rst:22 +#, fuzzy +msgid "Users can join multiple gift-giving campaigns without any limit." +msgstr "" +"Користувачі можуть долучатися до кількох кампаній з дарування подарунків без " +"обмежень." + +#: ../../src/spec/giver/index.rst:25 +#, fuzzy +msgid "Personal reminders" +msgstr "Персональні нагадування" + +#: ../../src/spec/giver/index.rst:26 +#, fuzzy +msgid "" +"Users with empty wish lists will be prompted to place something there. " +"Similarly, dormant users will be prompted to join an existing gift-giving " +"campaign." +msgstr "" +"Користувачам з порожніми списками бажань буде запропоновано додати туди " +"щось. Так само неактивним користувачам буде запропоновано приєднатися до вже " +"існуючої кампанії з дарування подарунків." + +#: ../../src/spec/giver/index.rst:31 +#, fuzzy +msgid "Administration can't interfere" +msgstr "Адміністрація не може втручатися" + +#: ../../src/spec/giver/index.rst:32 +#, fuzzy +msgid "" +"Site admins provide moderation for wish lists and support gift-giving " +"campaigns. But they cannot create their own campaigns, or modify or remove " +"existing campaigns created by other users." +msgstr "" +"Адміністратори сайту модерують списки бажань і підтримують кампанії з " +"дарування подарунків. Але вони не можуть створювати власні кампанії, " +"змінювати або видаляти існуючі кампанії, створені іншими користувачами." + +#: ../../src/spec/giver/index.rst:37 +#, fuzzy +msgid "Registration and authentication" +msgstr "Реєстрація та Аутентифікація Користувачів" + +#: ../../src/spec/giver/index.rst:39 +#, fuzzy +msgid "Anonymous users may access any publicly available page." +msgstr "" +"Анонімні користувачі можуть отримати доступ до будь-якої загальнодоступної " +"сторінки." + +#: ../../src/spec/giver/index.rst:40 +#, fuzzy +msgid "" +"Anonymous users can register by providing a username, fullname, and password." +msgstr "" +"Анонімні користувачі можуть зареєструватися, вказавши ім'я користувача, " +"повне ім'я та пароль." + +#: ../../src/spec/giver/index.rst:42 +#, fuzzy +msgid "Anonymous users can log in to their existing account." +msgstr "Анонімні користувачі можуть увійти до свого облікового запису." + +#: ../../src/spec/giver/index.rst:43 +#, fuzzy +msgid "Authenticated users can log out at any time." +msgstr "Авторизовані користувачі можуть вийти з системи в будь-який час." + +#: ../../src/spec/giver/index.rst:48 +#, fuzzy +msgid "Wish lists are personal collections of desired gifts." +msgstr "Список бажань - це особиста колекція бажаних подарунків." + +#: ../../src/spec/giver/index.rst:50 +#, fuzzy +msgid "A wish list is created for any registered user, except admins." +msgstr "" +"Список побажань створюється для будь-якого зареєстрованого користувача, " +"окрім адміністраторів." + +#: ../../src/spec/giver/index.rst:51 +#, fuzzy +msgid "" +"Users must add at least one item to their wish list before using the site." +msgstr "" +"Перед тим, як користуватися сайтом, користувачі повинні додати принаймні " +"один пункт до свого списку бажань." + +#: ../../src/spec/giver/index.rst:52 +#, fuzzy +msgid "A wish list is available only to its owner and site admins." +msgstr "Список побажань доступний лише його власнику та адміністраторам сайту." + +#: ../../src/spec/giver/index.rst:53 +#, fuzzy +msgid "" +"A wish list is temporary available to other users assigned as a gift-giver " +"to its owner." +msgstr "" +"Список бажань тимчасово доступний іншим користувачам, призначеним " +"дарувальником його власнику." + +#: ../../src/spec/giver/index.rst:55 +#, fuzzy +msgid "Owners can add, modify, or remove entries in their wish lists." +msgstr "" +"Власники можуть додавати, змінювати або видаляти записи у своїх списках " +"бажань." + +#: ../../src/spec/giver/index.rst:56 +#, fuzzy +msgid "" +"Admins can mark any wish list item as restricted, which makes it act as a " +"deleted one." +msgstr "" +"Адміністратори можуть позначити будь-яку позицію списку бажань як обмежену, " +"і тоді вона буде діяти як видалена." + +#: ../../src/spec/giver/index.rst:60 +#, fuzzy +msgid "Gift-giving campaigns" +msgstr "Кампанії з роздачі подарунків" + +#: ../../src/spec/giver/index.rst:62 +#, fuzzy +msgid "Non-admin users can create their own gift-giving campaigns." +msgstr "" +"Користувачі, які не є адміністраторами, можуть створювати власні кампанії з " +"дарування подарунків." + +#: ../../src/spec/giver/index.rst:63 +#, fuzzy +msgid "Each campaign should have name, description and members list." +msgstr "Кожна кампанія повинна мати назву, опис та список учасників." + +#: ../../src/spec/giver/index.rst:64 +#, fuzzy +msgid "The campaign creator is automatically a member and cannot be excluded." +msgstr "Творець кампанії автоматично стає учасником і не може бути виключений." + +#: ../../src/spec/giver/index.rst:65 +#, fuzzy +msgid "Campaigns status can be draft, public, private, or completed." +msgstr "Статус кампанії може бути чернетка, публічна, приватна або завершена." + +#: ../../src/spec/giver/index.rst:66 +#, fuzzy +msgid "" +"Admins or the campaign creator can run the campaign if it has at least 3 " +"members." +msgstr "" +"Адміни або творець кампанії можуть керувати кампанією, якщо в ній є " +"щонайменше 3 учасники." + +#: ../../src/spec/giver/index.rst:68 +#, fuzzy +msgid "Campaigns cannot be joined once they have started." +msgstr "Приєднатися до кампанії після її початку неможливо." + +#: ../../src/spec/giver/index.rst:69 +#, fuzzy +msgid "" +"Any user, except the creator, can leave the campaign if it hasn't started." +msgstr "" +"Будь-який користувач, окрім автора, може вийти з кампанії, якщо вона не " +"розпочалася." + +#: ../../src/spec/giver/index.rst:70 +#, fuzzy +msgid "" +"The creator can remove non-running campaigns regardless of members list, " +"creation time, or status." +msgstr "" +"Творець може видалити неактивні кампанії незалежно від списку учасників, " +"часу створення або статусу." + +#: ../../src/spec/giver/index.rst:72 +#, fuzzy +msgid "" +"Admins can remove the campaigns with 3 or fewer members that hasn't started " +"within a specified time." +msgstr "" +"Адміністратори можуть видаляти кампанії з 3 або менше учасниками, які не " +"розпочалися протягом певного часу." + +#: ../../src/spec/giver/index.rst:74 +#, fuzzy +msgid "" +"Admins can remove draft campaigns that haven't been published within a " +"specified time." +msgstr "" +"Адміністратори можуть видаляти чернетки кампаній, які не були опубліковані " +"протягом певного часу." + +#: ../../src/spec/giver/index.rst:76 +#, fuzzy +msgid "" +"The number of campaigns a user can be member of is limited by the number of " +"items in their wish list." +msgstr "" +"Кількість кампаній, в яких може брати участь користувач, обмежена кількістю " +"пунктів у його списку бажань." + +#: ../../src/spec/giver/index.rst:80 +#, fuzzy +msgid "Draft campaigns" +msgstr "Проекти кампаній" + +#: ../../src/spec/giver/index.rst:81 +#, fuzzy +msgid "No user can join a draft campaign." +msgstr "Жоден користувач не може приєднатися до кампанії зі створення проекту." + +#: ../../src/spec/giver/index.rst:82 +#, fuzzy +msgid "Campaigns can are marked as drafts by default at creation." +msgstr "Кампанії за замовчуванням позначаються як чернетки під час створення." + +#: ../../src/spec/giver/index.rst:83 +#, fuzzy +msgid "" +"The creator can publish the campaign by making campaign private or public." +msgstr "Автор може опублікувати кампанію, зробивши її приватною або публічною." + +#: ../../src/spec/giver/index.rst:84 +#, fuzzy +msgid "Draft campaigns cannot be initiated." +msgstr "Проектні кампанії не можуть бути ініційовані." + +#: ../../src/spec/giver/index.rst:87 +#, fuzzy +msgid "Public campaigns" +msgstr "Громадські кампанії" + +#: ../../src/spec/giver/index.rst:88 +#, fuzzy +msgid "" +"Public campaigns are accessible to both anonymous and authenticated users." +msgstr "" +"Публічні кампанії доступні як анонімним, так і авторизованим користувачам." + +#: ../../src/spec/giver/index.rst:89 +#, fuzzy +msgid "" +"Authenticated users can join any public campaign, unless it hasn't started." +msgstr "" +"Авторизовані користувачі можуть приєднатися до будь-якої публічної кампанії, " +"якщо вона ще не розпочалася." + +#: ../../src/spec/giver/index.rst:92 +#, fuzzy +msgid "Private campaigns" +msgstr "Приватні кампанії" + +#: ../../src/spec/giver/index.rst:93 +#, fuzzy +msgid "Private campaign are available only to their members." +msgstr "Приватні кампанії доступні тільки їх учасникам." + +#: ../../src/spec/giver/index.rst:94 +#, fuzzy +msgid "The campaign creator can share a join link with other users." +msgstr "" +"Творець кампанії може поділитися посиланням для приєднання з іншими " +"користувачами." + +#: ../../src/spec/giver/index.rst:95 +#, fuzzy +msgid "Once joined, the campaign becomes visible in the user's campaigns list." +msgstr "Після приєднання кампанія стає видимою у списку кампаній користувача." + +#: ../../src/spec/giver/index.rst:98 +#, fuzzy +msgid "Completed campaigns" +msgstr "Завершені кампанії" + +#: ../../src/spec/giver/index.rst:99 +#, fuzzy +msgid "" +"Actually this means the campaign has been completed and archived. Admins can " +"remove archived campaigns at any time (campaigns clean-up). Running " +"campaigns cannot be manually moved to completed status. This is done " +"automatically." +msgstr "" +"Насправді це означає, що кампанія завершена і заархівована. Адміністратори " +"можуть видалити заархівовані кампанії в будь-який час (очищення кампаній). " +"Кампанії, що тривають, не можна вручну перевести в статус завершених. Це " +"відбувається автоматично." + +#: ../../src/spec/giver/index.rst:105 +#, fuzzy +msgid "Campaign life-cycle" +msgstr "Життєвий цикл кампанії" + +#: ../../src/spec/giver/index.rst:110 +#, fuzzy +msgid "Running the gift-giving campaign" +msgstr "Проведення кампанії з роздачі подарунків" + +#: ../../src/spec/giver/index.rst:112 +#, fuzzy +msgid "The option to start campaigns is available to their creators or admins." +msgstr "" +"Можливість запускати кампанії доступна їхнім творцям або адміністраторам." + +#: ../../src/spec/giver/index.rst:113 +#, fuzzy +msgid "Once the campaign has started, no one can join or leave it." +msgstr "" +"Після початку кампанії ніхто не може приєднатися до неї або вийти з неї." + +#: ../../src/spec/giver/index.rst:114 +#, fuzzy +msgid "" +"Each campaign member is assigned to give a gift to a randomly chosen person " +"within the same campaign members list." +msgstr "" +"Кожному учаснику кампанії доручено подарувати подарунок випадково обраній " +"людині з того ж списку учасників кампанії." + +#: ../../src/spec/giver/index.rst:118 +#, fuzzy +msgid "Giver access for wish list" +msgstr "Надайте доступ до списку бажань" + +#: ../../src/spec/giver/index.rst:119 +#, fuzzy +msgid "The wish list of the assigned person becomes visible to the gift giver." +msgstr "Список побажань призначеної особи стає видимим для дарувальника." + +#: ../../src/spec/giver/index.rst:120 +#, fuzzy +msgid "The giver can mark any single item within this list as a given gift." +msgstr "" +"Дарувальник може позначити будь-яку позицію з цього списку як подарунок." + +#: ../../src/spec/giver/index.rst:121 +#, fuzzy +msgid "After the gift is given, wish list returns to normal." +msgstr "" +"Після вручення подарунка список бажань повертається до нормального стану." + +#: ../../src/spec/giver/index.rst:122 +#, fuzzy +msgid "Wish list entry marked as given, cannot be changed by other givers." +msgstr "" +"Пункт списку бажань, позначений як подарований, не може бути змінений іншими " +"дарувальниками." + +#: ../../src/spec/giver/index.rst:125 +#, fuzzy +msgid "Multiple gifts" +msgstr "Кілька подарунків" + +#: ../../src/spec/giver/index.rst:126 +#, fuzzy +msgid "" +"Generally, gift-giving campaigns allow for one gift at a time. However, if a " +"user is assigned twice to the same giver from different campaigns, the giver " +"can mark as many entries as the number of assignments." +msgstr "" +"Зазвичай, кампанії з дарування подарунків дозволяють дарувати один подарунок " +"за раз. Однак, якщо користувач двічі призначений одному і тому ж " +"дарувальнику з різних кампаній, дарувальник може позначити стільки записів, " +"скільки призначень." + +#: ../../src/spec/giver/index.rst:131 +#, fuzzy +msgid "Autocomplete" +msgstr "Автозаповнення" + +#: ../../src/spec/giver/index.rst:132 +#, fuzzy +msgid "" +"Once all the assignments within a campaign are completed, the campaign " +"itself is considered to be completed." +msgstr "" +"Як тільки всі завдання в рамках кампанії виконані, сама кампанія вважається " +"завершеною." + +#: ../../src/spec/giver/index.rst:136 +#, fuzzy +msgid "REST API" +msgstr "REST API" + +#: ../../src/spec/giver/index.rst:138 +#, fuzzy +msgid "**All site functions** will be implemented within REST API." +msgstr "**Всі функції сайту** будуть реалізовані за допомогою REST API." From 7a6af38f5bb72e31d524f96384c7fd27c391ecaa Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 2 Dec 2023 16:56:01 +0200 Subject: [PATCH 560/689] [giver-spec] Complete proofread for translation --- .../uk/LC_MESSAGES/spec/giver/index.po | 100 +++--------------- 1 file changed, 16 insertions(+), 84 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/spec/giver/index.po b/src/_locales/uk/LC_MESSAGES/spec/giver/index.po index 3d560ce75..a6cf6410e 100644 --- a/src/_locales/uk/LC_MESSAGES/spec/giver/index.po +++ b/src/_locales/uk/LC_MESSAGES/spec/giver/index.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.09.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-02 14:46+0200\n" -"PO-Revision-Date: 2023-12-02 14:53+0200\n" +"PO-Revision-Date: 2023-12-02 16:54+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -22,12 +22,10 @@ msgstr "" "X-Generator: Poedit 3.4.1\n" #: ../../src/spec/giver/index.rst:4 -#, fuzzy msgid "Anonymous Giver Site" -msgstr "Сайт анонімних дарувальників" +msgstr "Сайт Анонімних Дарульвальників" #: ../../src/spec/giver/index.rst:6 -#, fuzzy msgid "" "The project is inspired by \"Secret Santa\" (aka \"Secret Nicholas\") " "Christmas tradition, but it does not focus on specific celebrations or " @@ -41,17 +39,14 @@ msgstr "" "в групи і анонімно дарувати один одному подарунки." #: ../../src/spec/giver/index.rst:12 -#, fuzzy msgid "Key features" msgstr "Ключові особливості" #: ../../src/spec/giver/index.rst:15 ../../src/spec/giver/index.rst:46 -#, fuzzy msgid "Wish lists" msgstr "Списки побажань" #: ../../src/spec/giver/index.rst:16 -#, fuzzy msgid "" "Any registered user can create and modify their own wish lists. The wish " "list is generally private and is not visible to other users, unless they are " @@ -60,27 +55,21 @@ msgstr "" "Будь-який зареєстрований користувач може створювати і змінювати власні " "списки бажань. Список бажань, як правило, є приватним і не видимим для інших " "користувачів, якщо тільки вони не призначені дарувальником для власника " -"списку бажань." +"списку." #: ../../src/spec/giver/index.rst:21 -#, fuzzy msgid "Many gift-giving campaigns" -msgstr "Багато кампаній з роздачі подарунків" +msgstr "Багаточисельні кампанії з роздачі подарунків" #: ../../src/spec/giver/index.rst:22 -#, fuzzy msgid "Users can join multiple gift-giving campaigns without any limit." -msgstr "" -"Користувачі можуть долучатися до кількох кампаній з дарування подарунків без " -"обмежень." +msgstr "Користувачі можуть долучатися до кількох кампаній без обмежень." #: ../../src/spec/giver/index.rst:25 -#, fuzzy msgid "Personal reminders" msgstr "Персональні нагадування" #: ../../src/spec/giver/index.rst:26 -#, fuzzy msgid "" "Users with empty wish lists will be prompted to place something there. " "Similarly, dormant users will be prompted to join an existing gift-giving " @@ -91,12 +80,10 @@ msgstr "" "існуючої кампанії з дарування подарунків." #: ../../src/spec/giver/index.rst:31 -#, fuzzy msgid "Administration can't interfere" msgstr "Адміністрація не може втручатися" #: ../../src/spec/giver/index.rst:32 -#, fuzzy msgid "" "Site admins provide moderation for wish lists and support gift-giving " "campaigns. But they cannot create their own campaigns, or modify or remove " @@ -107,19 +94,16 @@ msgstr "" "змінювати або видаляти існуючі кампанії, створені іншими користувачами." #: ../../src/spec/giver/index.rst:37 -#, fuzzy msgid "Registration and authentication" -msgstr "Реєстрація та Аутентифікація Користувачів" +msgstr "Реєстрація та аутентифікація користувачів" #: ../../src/spec/giver/index.rst:39 -#, fuzzy msgid "Anonymous users may access any publicly available page." msgstr "" "Анонімні користувачі можуть отримати доступ до будь-якої загальнодоступної " "сторінки." #: ../../src/spec/giver/index.rst:40 -#, fuzzy msgid "" "Anonymous users can register by providing a username, fullname, and password." msgstr "" @@ -127,29 +111,24 @@ msgstr "" "повне ім'я та пароль." #: ../../src/spec/giver/index.rst:42 -#, fuzzy msgid "Anonymous users can log in to their existing account." msgstr "Анонімні користувачі можуть увійти до свого облікового запису." #: ../../src/spec/giver/index.rst:43 -#, fuzzy msgid "Authenticated users can log out at any time." msgstr "Авторизовані користувачі можуть вийти з системи в будь-який час." #: ../../src/spec/giver/index.rst:48 -#, fuzzy msgid "Wish lists are personal collections of desired gifts." msgstr "Список бажань - це особиста колекція бажаних подарунків." #: ../../src/spec/giver/index.rst:50 -#, fuzzy msgid "A wish list is created for any registered user, except admins." msgstr "" "Список побажань створюється для будь-якого зареєстрованого користувача, " "окрім адміністраторів." #: ../../src/spec/giver/index.rst:51 -#, fuzzy msgid "" "Users must add at least one item to their wish list before using the site." msgstr "" @@ -157,12 +136,10 @@ msgstr "" "один пункт до свого списку бажань." #: ../../src/spec/giver/index.rst:52 -#, fuzzy msgid "A wish list is available only to its owner and site admins." msgstr "Список побажань доступний лише його власнику та адміністраторам сайту." #: ../../src/spec/giver/index.rst:53 -#, fuzzy msgid "" "A wish list is temporary available to other users assigned as a gift-giver " "to its owner." @@ -171,14 +148,12 @@ msgstr "" "дарувальником його власнику." #: ../../src/spec/giver/index.rst:55 -#, fuzzy msgid "Owners can add, modify, or remove entries in their wish lists." msgstr "" "Власники можуть додавати, змінювати або видаляти записи у своїх списках " "бажань." #: ../../src/spec/giver/index.rst:56 -#, fuzzy msgid "" "Admins can mark any wish list item as restricted, which makes it act as a " "deleted one." @@ -187,48 +162,40 @@ msgstr "" "і тоді вона буде діяти як видалена." #: ../../src/spec/giver/index.rst:60 -#, fuzzy msgid "Gift-giving campaigns" msgstr "Кампанії з роздачі подарунків" #: ../../src/spec/giver/index.rst:62 -#, fuzzy msgid "Non-admin users can create their own gift-giving campaigns." msgstr "" "Користувачі, які не є адміністраторами, можуть створювати власні кампанії з " "дарування подарунків." #: ../../src/spec/giver/index.rst:63 -#, fuzzy msgid "Each campaign should have name, description and members list." msgstr "Кожна кампанія повинна мати назву, опис та список учасників." #: ../../src/spec/giver/index.rst:64 -#, fuzzy msgid "The campaign creator is automatically a member and cannot be excluded." msgstr "Творець кампанії автоматично стає учасником і не може бути виключений." #: ../../src/spec/giver/index.rst:65 -#, fuzzy msgid "Campaigns status can be draft, public, private, or completed." msgstr "Статус кампанії може бути чернетка, публічна, приватна або завершена." #: ../../src/spec/giver/index.rst:66 -#, fuzzy msgid "" "Admins or the campaign creator can run the campaign if it has at least 3 " "members." msgstr "" -"Адміни або творець кампанії можуть керувати кампанією, якщо в ній є " +"Адміни або творець кампанії можуть запустити кампанію, якщо в ній є " "щонайменше 3 учасники." #: ../../src/spec/giver/index.rst:68 -#, fuzzy msgid "Campaigns cannot be joined once they have started." msgstr "Приєднатися до кампанії після її початку неможливо." #: ../../src/spec/giver/index.rst:69 -#, fuzzy msgid "" "Any user, except the creator, can leave the campaign if it hasn't started." msgstr "" @@ -236,7 +203,6 @@ msgstr "" "розпочалася." #: ../../src/spec/giver/index.rst:70 -#, fuzzy msgid "" "The creator can remove non-running campaigns regardless of members list, " "creation time, or status." @@ -245,7 +211,6 @@ msgstr "" "часу створення або статусу." #: ../../src/spec/giver/index.rst:72 -#, fuzzy msgid "" "Admins can remove the campaigns with 3 or fewer members that hasn't started " "within a specified time." @@ -254,7 +219,6 @@ msgstr "" "розпочалися протягом певного часу." #: ../../src/spec/giver/index.rst:74 -#, fuzzy msgid "" "Admins can remove draft campaigns that haven't been published within a " "specified time." @@ -263,7 +227,6 @@ msgstr "" "протягом певного часу." #: ../../src/spec/giver/index.rst:76 -#, fuzzy msgid "" "The number of campaigns a user can be member of is limited by the number of " "items in their wish list." @@ -272,45 +235,37 @@ msgstr "" "пунктів у його списку бажань." #: ../../src/spec/giver/index.rst:80 -#, fuzzy msgid "Draft campaigns" -msgstr "Проекти кампаній" +msgstr "Проекти (чернетки) кампаній" #: ../../src/spec/giver/index.rst:81 -#, fuzzy msgid "No user can join a draft campaign." -msgstr "Жоден користувач не може приєднатися до кампанії зі створення проекту." +msgstr "Жоден користувач не може приєднатися до неопублікованної кампанії." #: ../../src/spec/giver/index.rst:82 -#, fuzzy msgid "Campaigns can are marked as drafts by default at creation." msgstr "Кампанії за замовчуванням позначаються як чернетки під час створення." #: ../../src/spec/giver/index.rst:83 -#, fuzzy msgid "" "The creator can publish the campaign by making campaign private or public." msgstr "Автор може опублікувати кампанію, зробивши її приватною або публічною." #: ../../src/spec/giver/index.rst:84 -#, fuzzy msgid "Draft campaigns cannot be initiated." -msgstr "Проектні кампанії не можуть бути ініційовані." +msgstr "Чернетки кампанії не можуть бути ініційовані." #: ../../src/spec/giver/index.rst:87 -#, fuzzy msgid "Public campaigns" -msgstr "Громадські кампанії" +msgstr "Публічні кампанії" #: ../../src/spec/giver/index.rst:88 -#, fuzzy msgid "" "Public campaigns are accessible to both anonymous and authenticated users." msgstr "" "Публічні кампанії доступні як анонімним, так і авторизованим користувачам." #: ../../src/spec/giver/index.rst:89 -#, fuzzy msgid "" "Authenticated users can join any public campaign, unless it hasn't started." msgstr "" @@ -318,34 +273,28 @@ msgstr "" "якщо вона ще не розпочалася." #: ../../src/spec/giver/index.rst:92 -#, fuzzy msgid "Private campaigns" msgstr "Приватні кампанії" #: ../../src/spec/giver/index.rst:93 -#, fuzzy msgid "Private campaign are available only to their members." msgstr "Приватні кампанії доступні тільки їх учасникам." #: ../../src/spec/giver/index.rst:94 -#, fuzzy msgid "The campaign creator can share a join link with other users." msgstr "" "Творець кампанії може поділитися посиланням для приєднання з іншими " "користувачами." #: ../../src/spec/giver/index.rst:95 -#, fuzzy msgid "Once joined, the campaign becomes visible in the user's campaigns list." msgstr "Після приєднання кампанія стає видимою у списку кампаній користувача." #: ../../src/spec/giver/index.rst:98 -#, fuzzy msgid "Completed campaigns" msgstr "Завершені кампанії" #: ../../src/spec/giver/index.rst:99 -#, fuzzy msgid "" "Actually this means the campaign has been completed and archived. Admins can " "remove archived campaigns at any time (campaigns clean-up). Running " @@ -358,29 +307,24 @@ msgstr "" "відбувається автоматично." #: ../../src/spec/giver/index.rst:105 -#, fuzzy msgid "Campaign life-cycle" msgstr "Життєвий цикл кампанії" #: ../../src/spec/giver/index.rst:110 -#, fuzzy msgid "Running the gift-giving campaign" msgstr "Проведення кампанії з роздачі подарунків" #: ../../src/spec/giver/index.rst:112 -#, fuzzy msgid "The option to start campaigns is available to their creators or admins." msgstr "" "Можливість запускати кампанії доступна їхнім творцям або адміністраторам." #: ../../src/spec/giver/index.rst:113 -#, fuzzy msgid "Once the campaign has started, no one can join or leave it." msgstr "" "Після початку кампанії ніхто не може приєднатися до неї або вийти з неї." #: ../../src/spec/giver/index.rst:114 -#, fuzzy msgid "" "Each campaign member is assigned to give a gift to a randomly chosen person " "within the same campaign members list." @@ -389,58 +333,48 @@ msgstr "" "людині з того ж списку учасників кампанії." #: ../../src/spec/giver/index.rst:118 -#, fuzzy msgid "Giver access for wish list" -msgstr "Надайте доступ до списку бажань" +msgstr "Доступ до списку бажань для дарувальника" #: ../../src/spec/giver/index.rst:119 -#, fuzzy msgid "The wish list of the assigned person becomes visible to the gift giver." msgstr "Список побажань призначеної особи стає видимим для дарувальника." #: ../../src/spec/giver/index.rst:120 -#, fuzzy msgid "The giver can mark any single item within this list as a given gift." msgstr "" "Дарувальник може позначити будь-яку позицію з цього списку як подарунок." #: ../../src/spec/giver/index.rst:121 -#, fuzzy msgid "After the gift is given, wish list returns to normal." msgstr "" "Після вручення подарунка список бажань повертається до нормального стану." #: ../../src/spec/giver/index.rst:122 -#, fuzzy msgid "Wish list entry marked as given, cannot be changed by other givers." msgstr "" "Пункт списку бажань, позначений як подарований, не може бути змінений іншими " "дарувальниками." #: ../../src/spec/giver/index.rst:125 -#, fuzzy msgid "Multiple gifts" msgstr "Кілька подарунків" #: ../../src/spec/giver/index.rst:126 -#, fuzzy msgid "" "Generally, gift-giving campaigns allow for one gift at a time. However, if a " "user is assigned twice to the same giver from different campaigns, the giver " "can mark as many entries as the number of assignments." msgstr "" -"Зазвичай, кампанії з дарування подарунків дозволяють дарувати один подарунок " -"за раз. Однак, якщо користувач двічі призначений одному і тому ж " -"дарувальнику з різних кампаній, дарувальник може позначити стільки записів, " -"скільки призначень." +"Зазвичай, кампанії дозволяють дарувати один подарунок за раз. Однак, якщо " +"користувач двічі призначений одному і тому ж дарувальнику з різних кампаній, " +"дарувальник може позначити стільки записів, скільки має призначень." #: ../../src/spec/giver/index.rst:131 -#, fuzzy msgid "Autocomplete" -msgstr "Автозаповнення" +msgstr "Автозавершення" #: ../../src/spec/giver/index.rst:132 -#, fuzzy msgid "" "Once all the assignments within a campaign are completed, the campaign " "itself is considered to be completed." @@ -449,11 +383,9 @@ msgstr "" "завершеною." #: ../../src/spec/giver/index.rst:136 -#, fuzzy msgid "REST API" msgstr "REST API" #: ../../src/spec/giver/index.rst:138 -#, fuzzy msgid "**All site functions** will be implemented within REST API." msgstr "**Всі функції сайту** будуть реалізовані за допомогою REST API." From bfb695a780887cb5506ef7ea26fdd6578bc0aa48 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 12:37:12 +0200 Subject: [PATCH 561/689] Add conditional expressions (GH-83) --- src/rdbms/functions.txt | 53 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index b05c0299d..585a1c438 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -125,7 +125,58 @@ Date/Time functions and operators Conditional expressions ======================= -.. todo: case, coalesce +CASE +---- + +The SQL ``CASE`` expression is a generic conditional expression, similar to +if/else statements in other programming languages. + +.. todo: add case example + +COALESCE +-------- + +The ``COALESCE`` function returns the first of its arguments that is not null. +Null is returned only if all arguments are null. It is often used to substitute +a default value for null values when data is retrieved for display: + +.. code-block:: postgresql + + SELECT COALESCE(description, short_description, '(none)') ... + +This returns ``description`` if it is not null, otherwise ``short_description`` +if it is not null, otherwise ``(none)``. + +Like the ``CASE`` expression, ``COALESCE`` only evaluates the arguments that +are needed to determine the result; that is, arguments to the right of the +first non-null argument are not evaluated. + +NULLIF +------ + +.. code-block:: postgresql + + NULLIF(value_1, value_2) + +The ``NULLIF`` function returns a null ``value_1`` equals ``value_2``; +otherwise it returns ``value_1``. This can be used to perform the inverse +operation of the ``COALESCE``. + +.. code-block:: postgresql + + SELECT NULLIF(value, '(none)') ... + +In the example above, if ``value`` is ``(none)``, null is returned, otherwise +the value of ``value`` is returned. + +The two arguments must be of comparable types. +To be specific, they are compared exactly as if you had written +``value_1 = value_2``, so there must be a suitable ``=`` operator available. + +The result has the same type as the first argument -- but there is a subtlety. +What is actual returned is the first argument of the implied ``=`` operator, +and in some cases that will have been promoted to match the second argument's +type. Aggregate functions =================== From e87f4d83ab64695cf3247c6a82c999636319eceb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 12:51:31 +0200 Subject: [PATCH 562/689] Add string functions and operators (GH-83) --- src/rdbms/functions.txt | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 585a1c438..f4d6b5b12 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -115,6 +115,59 @@ String functions *Strings* in this context include values of the types ``character``, ``text`` and ``character varying``. + +.. function:: text || text -> text + + Concatenates the two strings. + + ``'Post' || 'greSQL' -> PostgreSQL`` + +.. function:: text || anynonarray -> text + anynonarray || text -> text + + Converts the non-string input to text, then concatenates the two strings. + (The non-string input cannot be of an array type, because that would create + ambiguity with the array ``||`` operators. If you want to concatenate + an array's text equivalent, cast it to text explicitly.) + + ``'Value: ' || 42 -> Value: 42`` + +.. function:: char_length ( text ) -> integer + character_length ( text ) -> integer + + Returns number of characters in the string. + + ``char_length('josé') -> 4`` + +.. function:: lower ( text ) -> text + + Converts the string to all lower case, according to the rules of + the database's locale. + + ``lower('TOM') -> tom`` + +.. function:: ltrim ( string text [, characters text ] ) -> text + + Removes the longest string containing only characters in characters + (a space by default) from the start of string. + + ``ltrim('zzzytest', 'xyz') -> test`` + +.. function:: rtrim ( string text [, characters text ] ) -> text + + Removes the longest string containing only characters in characters + (a space by default) from the end of string. + + ``rtrim('testxxzx', 'xyz') -> test`` + +.. function:: trim ( [ LEADING | TRAILING | BOTH ] [ characters text ] FROM string text ) -> text + + Removes the longest string containing only characters in characters + (a space by default) from the start, end, or both ends + (BOTH is the default) of string. + + ``trim(both 'xyz' from 'yxTomxx') -> Tom`` + .. todo: concat, pattern matching (like) Date/Time functions and operators From ac60add12aa9f4c678f213b6ed99d53ba1c4d91e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 13:05:31 +0200 Subject: [PATCH 563/689] Add pattern matching (GH-83) --- src/rdbms/functions.txt | 48 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index f4d6b5b12..cadf54887 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -115,7 +115,6 @@ String functions *Strings* in this context include values of the types ``character``, ``text`` and ``character varying``. - .. function:: text || text -> text Concatenates the two strings. @@ -168,7 +167,52 @@ and ``character varying``. ``trim(both 'xyz' from 'yxTomxx') -> Tom`` -.. todo: concat, pattern matching (like) +Pattern matching +---------------- + +There are three separate approaches to pattern matching provided by PostgreSQL: +the traditional ``LIKE`` operator, the most recent ``SIMILAR TO`` operator, and +POSIX-style regular expressions. + +This section will focus on ``LIKE`` operator only. + +:: + + string LIKE pattern [ESCAPE escape-character] + string NOT LIKE pattern [ESCAPE escape-character] + +The ``LIKE`` expression returns ``true`` if the ``string`` matches the supplied +``pattern`` (as expected, the ``NOT LIKE`` expression returns ``false`` if +``LIKE`` returns ``true``, and vice versa). + +If ``pattern`` does not contain percent signs or underscores, then the pattern +only represents the string itself; in than case ``LIKE`` acts like the equals +operator. An underscore (``_``) in ``pattern`` stands for (matches) any single +character; a percent sign (``%``) matches any sequence of zero or more +characters. + +Some examples: + +:: + + 'abc' LIKE 'abc' -- true + 'abc' LIKE 'a%' -- true + 'abc' LIKE '_b_' -- true + 'abc' LIKE 'c' -- false + +``LIKE`` patterns matching always covers the entire string. Therefore, if it's +desired to match a sequence anywhere within a string, the pattern must start +and end with a percent sign. + +To match a literal underscore or percent sing without matching other characters +the respective character in ``pattern`` must be preceded by the escape +character. The default escape character is backslash but a different one can be +selected by using the ``ESCAPE`` clause. To match the escape character itself, +write two escape characters. + +The key word ``ILIKE`` can be used instead of ``LIKE`` to make the match +case-insensitive according to the active locale. This is not in the SQL +standard but is a PostgreSQL extension. Date/Time functions and operators ================================= From 79a887b37078e89b0a59152a31b99260df8e88cc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 13:31:28 +0200 Subject: [PATCH 564/689] Add extract/date_part section (GH-83) --- src/rdbms/functions.txt | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index cadf54887..0eb8410b5 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -219,6 +219,47 @@ Date/Time functions and operators .. todo: extract, date_part, date_trunc, current d/t, formatting d/t +Extract +------- + +.. function:: exctract(field FROM source) + + The ``extract`` function retrieves subfields such as year or hour from + date/time value. The ``source`` must be a value expression of type + ``timestamp``, ``time``, or ``interval``. Expressions of type ``date`` + are cast to ``timestamp`` and can therefore be used as well. ``field`` is + an identifier or string that selects what field to extract from the source + value. The extract function returns value of type ``numeric``. + The following are valid field names: + + - ``centurty`` + - ``day`` + - ``decade`` + - ``dow`` + - ``doy`` + - ``epoch`` + - ``hour`` + - ``isodow`` + - ``isoyear`` + - ``julian`` + - ``microseconds`` + - ``millennium`` + - ``milliseconds`` + - ``minute`` + - ``month`` + - ``quarter`` + - ``second`` + - ``timezone`` + - ``timezone_hour`` + - ``timezone_minute`` + - ``week`` + - ``year`` + +The ``date_part`` function is modeled on the traditional Ingres equivalent to +the SQL-standard function ``extract``: + +.. function:: date_part('field', source) + Conditional expressions ======================= From 20404fcc39cc7709677b5a53704346f683e098e6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 14:10:54 +0200 Subject: [PATCH 565/689] Add current date/time functions (GH-83) --- src/rdbms/functions.txt | 50 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index 0eb8410b5..b0a871657 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -217,8 +217,6 @@ standard but is a PostgreSQL extension. Date/Time functions and operators ================================= -.. todo: extract, date_part, date_trunc, current d/t, formatting d/t - Extract ------- @@ -260,6 +258,54 @@ the SQL-standard function ``extract``: .. function:: date_part('field', source) +Current date/time +----------------- + +PostgreSQL provides a number of functions that return values related to the +current date and time. These SQL-standard functions all return values based on +the start time of the current transaction: + +.. function:: CURRENT_DATE +.. function:: CURRENT_TIME + CURRENT_TIME(precision) + + Deliver current time value with time zone. + + :precision: + An optional parameter, which causes the result to be rounded to that + many fractional digits in the second field. Without a precision, + the result is given to the full available precision. + +.. function:: CURRENT_TIMESTAMP + CURRENT_TIMESTAMP(precision) + + Deliver current timestamp value with time zone. + + :precision: + An optional parameter, which causes the result to be rounded to that + many fractional digits in the second field. Without a precision, + the result is given to the full available precision. + +.. function:: LOCALTIME + LOCALTIME(precision) + + Deliver current time value without time zone. + + :precision: + An optional parameter, which causes the result to be rounded to that + many fractional digits in the second field. Without a precision, + the result is given to the full available precision. + +.. function:: LOCALTIMESTAMP + LOCALTIMESTAMP(precision) + + Deliver current time value without time zone. + + :precision: + An optional parameter, which causes the result to be rounded to that + many fractional digits in the second field. Without a precision, + the result is given to the full available precision. + Conditional expressions ======================= From 08852c8be368fd07cef48fb09aa2ae703a8d14cf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 14:20:25 +0200 Subject: [PATCH 566/689] Add formatting functions (GH-83) --- src/rdbms/functions.txt | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/rdbms/functions.txt b/src/rdbms/functions.txt index b0a871657..c2aeb5dc1 100644 --- a/src/rdbms/functions.txt +++ b/src/rdbms/functions.txt @@ -306,6 +306,62 @@ the start time of the current transaction: many fractional digits in the second field. Without a precision, the result is given to the full available precision. +Formatting functions +-------------------- + +.. todo: move to its own section + +The PostgreSQL formatting functions provide a powerful set of tools for +converting various data types (date/time, integer, floatting point, numeric) +to formatted strings and for converting from formatted strings to specific +data types. + +These functions all follow a common calling convention: the first argument is +the value to be formatted and the second argument is a template that defines +the output or input format. + +.. function:: to_char ( timestamp, text ) → text + to_char ( timestamp with time zone, text ) → text + + Converts time stamp to string according to the given format. + + ``to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') → 05:31:12`` + +.. function:: to_char ( interval, text ) → text + + Converts interval to string according to the given format. + + ``to_char(interval '15h 2m 12s', 'HH24:MI:SS') → 15:02:12`` + +.. function:: to_char ( numeric_type, text ) → text + + Converts number to string according to the given format; + available for integer, bigint, numeric, real, double precision. + + - ``to_char(125, '999') → 125`` + - ``to_char(125.8::real, '999D9') → 125.8`` + - ``to_char(-125.8, '999D99S') → 125.80-`` + +.. function:: to_date ( text, text ) → date + + Converts string to date according to the given format. + + ``to_date('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05`` + +.. function:: to_number ( text, text ) → numeric + + Converts string to numeric according to the given format. + + ``to_number('12,454.8-', '99G999D9S') → -12454.8`` + +.. function:: to_timestamp ( text, text ) → timestamp with time zone + + Converts string to time stamp according to the given format. + + ``to_timestamp('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05 00:00:00-05`` + +.. todo: add template patterns for date/time formatting + Conditional expressions ======================= From 9ee2a98ec373e917305e85d9e326a9bd4e3aace4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 17:06:41 +0200 Subject: [PATCH 567/689] Update normalization document (GH-136) --- src/rdbms/normalization.txt | 130 +++--------------------------------- 1 file changed, 11 insertions(+), 119 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 0833ea646..36888fb3c 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -15,135 +15,27 @@ anomalies, thereby improving data integrity. Normalization is a set of rules or guidelines to design a database schema in such a way that it avoids data duplication, data redundancy, and data inconsistency. -There are several normal forms, each building on the previous one, which guide -us in the normalization process. The most commonly used normal forms are: +The main purpose of database normalization is to avoid complexities, eliminate +duplicates, and organize data in a consistent way. Normalization reduces data +redundancy and dependency, making the database more efficient, flexible, and +scalable. It also helps in maintaining data consistency and accuracy, and +ensures that updates and deletions are properly handled. -- **First Normal Form (1NF)**: - Each column should hold atomic (indivisible) values. - There should be no repeating groups or arrays of data in a table. -- **Second Normal Form (2NF)**: - Each non-key column should be functionally dependent on the entire primary - key. In other words, every column in a table should be related to - the primary key and not dependent on any other non-key columns. -- **Third Normal Form (3NF)**: - All non-key columns should be dependent only on the primary key and not on - any other non-key columns. This eliminates transitive dependencies. - -Normalization reduces data redundancy and dependency, making the database more -efficient, flexible, and scalable. It also helps in maintaining data -consistency and accuracy, and ensures that updates and deletions are properly -handled. +There are 6 **normal forms**, but this section focuses on the first 3 only, +since the commonest normal form you'll see out there is *3NF* (third normal +form). First normal form (1NF) ======================= -It's easier to understand normalization via examples. -Let's start with some dummy orders data. - -.. csv-table:: Initial data - :header-rows: 1 - - order,customer,product,quantity,price,total - 1,"John Doe","(Apple, Orange)","(2, 3)","(100, 50)","(200, 150)" - 2,"Jane Smith","Banana",4,25,100 - -This table violates 1NF, since its columns contain multiple values. To bring -this to 1NF all data within the table are to be atomic. - -.. csv-table:: 1NF applied - :header-rows: 1 - - order,customer,product,quantity,price,total - 1,"John Doe","Apple",2,100 ,200 - 2,"John Doe","Orange",3,50 ,150 - 3,"Jane Smith","Banana",4,25,100 - -From now each peace of data is represented as atomic value. +.. todo Second normal form (2NF) ======================== -The table above is in 1NF, but ``item price`` is dependent on the *item* entity -itself and have low cohesion to *orders*. To bring it into 2NF a dedicated -table to store information about items themselves is to be created. After that -``order`` and ``product`` table are connected (related) to each other via a -foreign key. - -.. csv-table:: ``order`` table - :header-rows: 1 - - id, customer, product_id, quantity - 1, "John Doe", 1, 2 - 2, "John Doe", 2, 3 - 3, "Jane Smith", 3, 4 - -.. csv-table:: ``product`` table - :header-rows: 1 - - id, product, price - 1, "Apple", 100 - 2, "Orange", 50 - 3, "Banana", 25 - -.. mermaid:: - :align: center - - erDiagram - ORDER ||--|{ PRODUCT : contains - ORDER { - int id pk - string customer - int product_id fk - int quantity - } - PRODUCT { - int id pk - string name - int price - } - -.. note:: ``total`` field is also removed, since now it can be calculated - as product of ``product.price`` and ``order.quantity``. +.. todo Third normal form (3NF) ======================= -At last it's time to remove a transitive functional dependency. Customer's name -is not actually dependent on a product, but on a person, who places an order. - -.. csv-table:: ``order`` table - :header-rows: 1 - - id, customer_id, product_id, quantity - 1, 1, 1, 2 - 2, 1, 2, 3 - 3, 2, 3, 4 - -.. csv-table:: ``customer`` table - :header-rows: 1 - - id, customer - 1, "John Doe" - 3, "Jane Smith" - -.. mermaid:: - :align: center - - erDiagram - CUSTOMER }o--|| ORDER : places - ORDER ||--|{ PRODUCT : contains - ORDER { - int id pk - int customer_id fk - int product_id fk - int quantity - } - PRODUCT { - int id pk - string name - int price - } - CUSTOMER { - int id pk - string name - } +.. todo From 1d6821ab26a40da7e7b9d6b03e9b36bba9e8ffa6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 18:50:56 +0200 Subject: [PATCH 568/689] Add normalized tables pros (GH-136) --- src/rdbms/normalization.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 36888fb3c..2f5f48ce9 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -25,6 +25,16 @@ There are 6 **normal forms**, but this section focuses on the first 3 only, since the commonest normal form you'll see out there is *3NF* (third normal form). +Normalized tables are: + +- Easier to understand +- Easier to enhance and extend +- Protected from: + + - insertion anomalies + - update anomalies + - deletion anomalies + First normal form (1NF) ======================= From 08e8e05e483c02342abc09ce9c63d84816f16896 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 3 Dec 2023 19:22:32 +0200 Subject: [PATCH 569/689] Add notes for 1-3NF and conclusion section draft (GH-136) --- src/rdbms/normalization.txt | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 2f5f48ce9..076c4ca68 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -38,14 +38,34 @@ Normalized tables are: First normal form (1NF) ======================= -.. todo +.. todo: definition, example + +.. using row order to convey information violates 1NF +.. mixing data types within the same column violates 1NF + (and the DB platform won't let you do it anyway) +.. a table without a primary key violates 1NF +.. storing a repeating group of data items on a single row violates 1NF Second normal form (2NF) ======================== -.. todo +.. todo: definition, example + +.. 2NF: each non-key attribute must depend on the entire primary key + (partial dependency) Third normal form (3NF) ======================= +.. todo: definition, bcnf, example + +.. every non-key attribute in a table should depend on the key, the whole key, + and nothing but the key (no transitive dependency) +.. Boyce-Codd normal form: **every attribute** in a table should... + +Conclusion +========== + .. todo + +.. 1nf -> 2nf -> 3nf -> bcnf -> 4nf -> 5nf From 59fdb12660415ec691f50bbee6ca7ec50c585ddc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Dec 2023 00:31:29 +0200 Subject: [PATCH 570/689] Add normal form requirements (1NF, 2NF, 3NF, BCNF) (GH-136) --- src/rdbms/normalization.txt | 65 ++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 076c4ca68..0b8fd4069 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -1,5 +1,3 @@ -.. todo: review and update document - .. meta:: :description: Database normalization :author: Serhii Horodilov @@ -38,34 +36,69 @@ Normalized tables are: First normal form (1NF) ======================= -.. todo: definition, example +.. rubric:: Data example + +.. todo: add data example (no NF) + +Requirements +------------ + +- Row order should not be used to convey information. +- Data types should not be mixed within the same column + (and the RDBMS won't let you do in anyway). +- Tables should have their primary keys. +- Repeating groups should be eliminated. -.. using row order to convey information violates 1NF -.. mixing data types within the same column violates 1NF - (and the DB platform won't let you do it anyway) -.. a table without a primary key violates 1NF -.. storing a repeating group of data items on a single row violates 1NF +Applying 1NF +------------ + +.. todo: complete subsection +.. todo: add data example in 1NF Second normal form (2NF) ======================== -.. todo: definition, example +Requirements +------------ + +- Each non-key attribute must depend on the entire primary key + +Applying 2NF +------------ -.. 2NF: each non-key attribute must depend on the entire primary key - (partial dependency) +.. todo: complete subsection +.. todo: add data example in 2NF Third normal form (3NF) ======================= .. todo: definition, bcnf, example -.. every non-key attribute in a table should depend on the key, the whole key, - and nothing but the key (no transitive dependency) -.. Boyce-Codd normal form: **every attribute** in a table should... +Requirements +------------ + +- Every non-key attribute in a table should depend on the key, the whole key, + and nothing but the key (no transitive dependency). + +.. note:: + + **Boyce-Codd normal form** + + :abbr:`BCNF (Boyce-Codd Normal Form)` is the stronger version of 3NF. + It also is called as 3.5NF (three-and-a-half normal form). + + **Every attribute** in a table should depend on the key, the whole key, + and nothing but the key. + +Applying 3NF +------------ + +.. todo: complete subsection +.. todo: add data example in 3NF Conclusion ========== -.. todo +Each next normal form includes all the requirements for the previous one. -.. 1nf -> 2nf -> 3nf -> bcnf -> 4nf -> 5nf +.. todo: complete the conclusion From 3ee47e7d1705c704fa3122734021f7fc7e835020 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Dec 2023 00:42:58 +0200 Subject: [PATCH 571/689] Add anomalies section draft (GH-136) --- src/rdbms/normalization.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 0b8fd4069..0efb77245 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -33,6 +33,24 @@ Normalized tables are: - update anomalies - deletion anomalies +Anomalies +========= + +Insertion anomalies +------------------- + +.. todo: complete subsection + +Update anomalies +---------------- + +.. todo: complete subsection + +Deletion anomalies +------------------ + +.. todo: complete subsection + First normal form (1NF) ======================= From 5dd64d347465e4385f1ebe7534dc7511c23c96db Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Dec 2023 00:46:00 +0200 Subject: [PATCH 572/689] Apply minor fixes to documentation (GH-136) --- src/rdbms/normalization.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 0efb77245..ca0ad65db 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -19,7 +19,7 @@ redundancy and dependency, making the database more efficient, flexible, and scalable. It also helps in maintaining data consistency and accuracy, and ensures that updates and deletions are properly handled. -There are 6 **normal forms**, but this section focuses on the first 3 only, +There are 6 **normal forms**, but this chapter focuses on the first 3 only, since the commonest normal form you'll see out there is *3NF* (third normal form). From e5efb46f67327cfb2b99499246b027974f15859c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 21 Dec 2023 03:13:36 +0200 Subject: [PATCH 573/689] Add toml package to project dependencies The information is obtained from the pyproject.toml file when possible. --- poetry.lock | 14 +++++++++++++- pyproject.toml | 3 +-- requirements.txt | 1 + src/conf.py | 25 +++++++++++-------------- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/poetry.lock b/poetry.lock index 58a237ec6..42d59d1a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -830,6 +830,18 @@ Sphinx = ">=5" lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + [[package]] name = "urllib3" version = "2.1.0" @@ -866,4 +878,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "76de98805112ca4ea0dbf697b2c3dd421f99252b68f71bfc69353cefe367ef2e" +content-hash = "21b20ccf05a1fc5b1c4a0fb7a3952fb9b06a35fa00ecdb101428061a5e05a175" diff --git a/pyproject.toml b/pyproject.toml index 246bfa4c1..767147eda 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,8 +40,7 @@ myst-parser = "^1.0.0" sphinxcontrib-bibtex = "^2.5.0" sphinxcontrib-mermaid = "^0.8.1" sphinx-copybutton = "^0.5.2" - -[tool.poetry.dev-dependencies] +toml = "^0.10.2" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt index b1292bf4c..dfe21ca05 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,5 +37,6 @@ sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/src/conf.py b/src/conf.py index 7c7886f51..5e4df8181 100644 --- a/src/conf.py +++ b/src/conf.py @@ -4,17 +4,22 @@ from datetime import datetime from pathlib import Path +import toml + # set up paths BASE_DIR = Path(__file__).resolve().parent.parent sys.path.insert(0, str(BASE_DIR / "problem-sets" / "src")) +# read project data from toml file +with open(BASE_DIR / "pyproject.toml") as io_buff: + project_data = toml.load(io_buff)["tool"]["poetry"] + # project information project = "Python Training Course" project_copyright = \ f"{datetime.now().year}, Python training course authors and contributors" -authors = "Vladyslav Ponomaryov \\and " \ - "Serhii Horodilov" -version = "2023.09.dev" +authors = " \\and ".join(project_data["authors"]) +version = project_data["version"] # general configuration master_doc = root_doc = "index" @@ -63,17 +68,9 @@ ("appx/software_list", "Software.tex", project, authors, "howto", False), ("appx/code_edit", "IDE.tex", project, authors, "howto", False), ("appx/blog/spec", "DjangoBlog.tex", project, authors, "howto", False), - ("appx/assignments", "CreatingPullRequest.tex", "Creating the Pull Request", - authors, "howto", False), + ("appx/assignments", "CreatingPullRequest.tex", + "Creating the Pull Request", authors, "howto", False), ] latex_appendices = [ - "appx/software_list", - "appx/code_edit", - "appx/env_path", - "appx/precedence", - "appx/printf", - "appx/assignments", - "appx/conv_store", - "appx/wtk", - "appx/blog/spec", + # TODO: review appendices list ] From 17e84c8cc5b73bfe7dda6ffa6063b014116851a9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 21 Dec 2023 04:03:39 +0200 Subject: [PATCH 574/689] Add pre-translated locale file --- .../uk/LC_MESSAGES/appx/pg_func_ops.po | 230 +++ src/_locales/uk/LC_MESSAGES/appx/pg_local.po | 26 + src/_locales/uk/LC_MESSAGES/appx/postgres.po | 102 ++ .../uk/LC_MESSAGES/rdbms/aggregation.po | 4 +- .../uk/LC_MESSAGES/rdbms/datatypes.po | 1474 +++++++++++++++++ src/_locales/uk/LC_MESSAGES/rdbms/ddl.po | 665 ++++++++ src/_locales/uk/LC_MESSAGES/rdbms/dml.po | 280 ++++ .../uk/LC_MESSAGES/rdbms/functions.po | 1183 +++++++++++++ src/_locales/uk/LC_MESSAGES/rdbms/index.po | 75 +- .../uk/LC_MESSAGES/rdbms/normalization.po | 466 +++--- src/_locales/uk/LC_MESSAGES/rdbms/query.po | 1204 ++++++++++++++ .../uk/LC_MESSAGES/rdbms/relations.po | 830 ++++++---- .../uk/LC_MESSAGES/rdbms/structure.po | 410 +++++ 13 files changed, 6389 insertions(+), 560 deletions(-) create mode 100644 src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/pg_local.po create mode 100644 src/_locales/uk/LC_MESSAGES/appx/postgres.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/ddl.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/dml.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/functions.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/query.po create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/structure.po diff --git a/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po b/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po new file mode 100644 index 000000000..7854bb5a2 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po @@ -0,0 +1,230 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 04:03+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/appx/pg_func_ops.txt:4 +#, fuzzy +msgid "Comparison" +msgstr "Порівняння" + +#: ../../src/appx/pg_func_ops.txt:7 +#, fuzzy +msgid "Comparison predicates" +msgstr "Предикати порівняння" + +#: ../../src/appx/pg_func_ops.txt:11 +#, fuzzy +msgid "Test if a value is within the range endpoints (inclusive)" +msgstr "" +"Перевірка, чи знаходиться значення в межах кінцевих точок діапазону (включно)" + +#: ../../src/appx/pg_func_ops.txt:20 +#, fuzzy +msgid "Not between (the negation of BETWEEN)." +msgstr "Не між (заперечення ПОМІЖ)." + +#: ../../src/appx/pg_func_ops.txt:28 +#, fuzzy +msgid "Between, after sorting the two endpoint values." +msgstr "Між, після сортування двох кінцевих значень." + +#: ../../src/appx/pg_func_ops.txt:36 +#, fuzzy +msgid "Not between, after sorting the two endpoint values." +msgstr "Не між, після сортування двох кінцевих значень." + +#: ../../src/appx/pg_func_ops.txt:44 +#, fuzzy +msgid "Not equal, treating null as a comparable value." +msgstr "Не дорівнює, розглядаючи нуль як порівнянне значення." + +#: ../../src/appx/pg_func_ops.txt:53 +#, fuzzy +msgid "Equal, treating null as a comparable value." +msgstr "Дорівнює, розглядаючи нуль як порівнянне значення." + +#: ../../src/appx/pg_func_ops.txt:62 +#, fuzzy +msgid "Test whether value is null." +msgstr "Перевірити, чи значення рівне нулю." + +#: ../../src/appx/pg_func_ops.txt:70 +#, fuzzy +msgid "Test whether value is not null." +msgstr "Перевірити, чи значення не рівне нулю." + +#: ../../src/appx/pg_func_ops.txt:78 +#, fuzzy +msgid "Test whether value is null (nonstandard syntax)." +msgstr "Перевірити, чи значення рівне нулю (нестандартний синтаксис)." + +#: ../../src/appx/pg_func_ops.txt:82 +#, fuzzy +msgid "Test whether value is not null (nonstandard syntax)." +msgstr "Перевірити, чи значення не є null (нестандартний синтаксис)." + +#: ../../src/appx/pg_func_ops.txt:86 +#, fuzzy +msgid "Test whether boolean expression yields true." +msgstr "Перевірте, чи дає булевий вираз значення true." + +#: ../../src/appx/pg_func_ops.txt:95 +#, fuzzy +msgid "Test whether boolean expression yields false or unknown." +msgstr "Перевірте, чи дає булевий вираз значення false або невідоме." + +#: ../../src/appx/pg_func_ops.txt:104 +#, fuzzy +msgid "Test whether boolean expression yields false." +msgstr "Перевірте, чи дає булевий вираз значення false." + +#: ../../src/appx/pg_func_ops.txt:113 +#, fuzzy +msgid "Test whether boolean expression yields true or unknown." +msgstr "Перевірте, чи дає булевий вираз значення true або unknown." + +#: ../../src/appx/pg_func_ops.txt:122 +#, fuzzy +msgid "Test whether boolean expression yields unknown." +msgstr "Перевірити, чи дає булевий вираз невідоме." + +#: ../../src/appx/pg_func_ops.txt:131 +#, fuzzy +msgid "Test whether boolean expression yields true or false." +msgstr "Перевірте, чи дає булевий вираз значення true або false." + +#: ../../src/appx/pg_func_ops.txt:139 +#, fuzzy +msgid "Comparison functions" +msgstr "Функції порівняння" + +#: ../../src/appx/pg_func_ops.txt:143 +#, fuzzy +msgid "Returns the number of non-null arguments" +msgstr "Повертає кількість ненульових аргументів" + +#: ../../src/appx/pg_func_ops.txt:151 +#, fuzzy +msgid "Returns the number of null arguments" +msgstr "Повертає кількість нульових аргументів" + +#: ../../src/appx/pg_func_ops.txt:158 +#, fuzzy +msgid "Mathematical functions and operators" +msgstr "Математичні функції та оператори" + +#: ../../src/appx/pg_func_ops.txt:162 +#, fuzzy +msgid "Addition" +msgstr "Додавання" + +#: ../../src/appx/pg_func_ops.txt:170 +#, fuzzy +msgid "Unary plus (no operation)" +msgstr "Унарний плюс (без операції)" + +#: ../../src/appx/pg_func_ops.txt:178 +#, fuzzy +msgid "Subtraction" +msgstr "Віднімання" + +#: ../../src/appx/pg_func_ops.txt:186 +#, fuzzy +msgid "Negation" +msgstr "Заперечення" + +#: ../../src/appx/pg_func_ops.txt:194 +#, fuzzy +msgid "Multiplication" +msgstr "Множення" + +#: ../../src/appx/pg_func_ops.txt:202 +#, fuzzy +msgid "" +"Division (for integral types, division truncates the result towards zero)" +msgstr "Ділення (для інтегральних типів ділення усікає результат до нуля)" + +#: ../../src/appx/pg_func_ops.txt:214 +#, fuzzy +msgid "" +"Modulo (remainder); available for smallint, integer, bigint, and numeric" +msgstr "" +"За модулем (залишок); доступний для smallint, integer, bigint та numeric" + +#: ../../src/appx/pg_func_ops.txt:223 +#, fuzzy +msgid "Exponentiation" +msgstr "Піднесення до степеня" + +#: ../../src/appx/pg_func_ops.txt:229 +#, fuzzy +msgid "" +"Unlike typical mathematical practice, multiple uses of ``^`` will associate " +"left to right by default:" +msgstr "" +"На відміну від типової математичної практики, багаторазове використання " +"``^`` за замовчуванням асоціюється зліва направо:" + +#: ../../src/appx/pg_func_ops.txt:239 +#, fuzzy +msgid "Square root" +msgstr "Квадратний корінь" + +#: ../../src/appx/pg_func_ops.txt:247 +#, fuzzy +msgid "Cube root" +msgstr "Кубічний корінь" + +#: ../../src/appx/pg_func_ops.txt:255 +#, fuzzy +msgid "Absolute value" +msgstr "Абсолютне значення" + +#: ../../src/appx/pg_func_ops.txt:263 +#, fuzzy +msgid "Bitwise AND" +msgstr "Побітове І" + +#: ../../src/appx/pg_func_ops.txt:271 +#, fuzzy +msgid "Bitwise OR" +msgstr "Порозрядне АБО" + +#: ../../src/appx/pg_func_ops.txt:279 +#, fuzzy +msgid "Bitwise exclusive OR" +msgstr "Побітове виключне АБО" + +#: ../../src/appx/pg_func_ops.txt:287 +#, fuzzy +msgid "Bitwise NOT" +msgstr "Побітове І" + +#: ../../src/appx/pg_func_ops.txt:295 +#, fuzzy +msgid "Bitwise shift left" +msgstr "Порозрядний зсув вліво" + +#: ../../src/appx/pg_func_ops.txt:303 +#, fuzzy +msgid "Bitwise shift right" +msgstr "Порозрядний зсув вправо" diff --git a/src/_locales/uk/LC_MESSAGES/appx/pg_local.po b/src/_locales/uk/LC_MESSAGES/appx/pg_local.po new file mode 100644 index 000000000..63b532490 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/pg_local.po @@ -0,0 +1,26 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 04:02+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/appx/pg_local.txt:11 +msgid "PostgreSQL server binaries" +msgstr "Бінарні файли сервера PostgreSQL" diff --git a/src/_locales/uk/LC_MESSAGES/appx/postgres.po b/src/_locales/uk/LC_MESSAGES/appx/postgres.po new file mode 100644 index 000000000..73c68c42d --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/appx/postgres.po @@ -0,0 +1,102 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 04:02+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/appx/postgres.txt:5 +msgid "PostgreSQL" +msgstr "PostgreSQL" + +#: ../../src/appx/postgres.txt:8 +#, fuzzy +msgid "Overview" +msgstr "Огляд" + +#: ../../src/appx/postgres.txt:10 +#, fuzzy +msgid "" +"PostgreSQL is a powerful, open source object-relational database system that " +"uses and extends the SQL language combined with many features that safely " +"store and scale the most complicated data workloads." +msgstr "" +"PostgreSQL - це потужна об'єктно-реляційна система баз даних з відкритим " +"вихідним кодом, яка використовує і розширює мову SQL у поєднанні з багатьма " +"функціями, що дозволяють безпечно зберігати і масштабувати найскладніші " +"робочі навантаження даних." + +#: ../../src/appx/postgres.txt:14 +#, fuzzy +msgid "" +"PostgreSQL has earned a strong reputation for its proven architecture, " +"reliability, data integrity, robust feature set, extensibility, and the " +"dedication of the open source community behind the software to consistently " +"deliver performant and innovative solutions." +msgstr "" +"PostgreSQL завоювала міцну репутацію завдяки своїй перевіреній архітектурі, " +"надійності, цілісності даних, потужному набору функцій, розширюваності та " +"прагненню спільноти розробників програмного забезпечення з відкритим " +"вихідним кодом постійно створювати ефективні та інноваційні рішення." + +#: ../../src/appx/postgres.txt:21 +#, fuzzy +msgid "" +"PostgreSQL runs on **all major operating systems**, and is ACID compliant." +msgstr "" +"PostgreSQL працює на **всіх основних операційних системах** і сумісна з ACID." + +#: ../../src/appx/postgres.txt:25 +#, fuzzy +msgid "Installation" +msgstr "Встановлення" + +#: ../../src/appx/postgres.txt:27 +#, fuzzy +msgid "" +"If you are not able to install postgres to your local computer, it is " +"possible to use binaries distributions. Refer :doc:`Local PostgreSQL server " +"using binaries <./pg_local>` for more information." +msgstr "" +"Якщо ви не можете встановити postgres на ваш локальний комп'ютер, ви можете " +"скористатися бінарними дистрибутивами. Зверніться до :doc:`Локальний сервер " +"PostgreSQL за допомогою двійкових файлів <./pg_local>` для отримання " +"додаткової інформації." + +#: ../../src/appx/postgres.txt:32 +#, fuzzy +msgid "" +"PostgreSQL is available for download as ready-to-use packages or installers " +"for various platforms, as well as a source code archive if you want to build " +"it yourself." +msgstr "" +"PostgreSQL доступна для завантаження у вигляді готових до використання " +"пакетів або інсталяторів для різних платформ, а також у вигляді архіву " +"вихідного коду, якщо ви хочете зібрати її самостійно." + +#: ../../src/appx/postgres.txt:36 +#, fuzzy +msgid "" +"Refer to `PostgreSQL downloads`_ page to get the installer for your " +"operating system. Follow the installation process instruction to get " +"postgres server running on your local computer." +msgstr "" +"Зверніться до сторінки `Завантаження PostgreSQL`_, щоб отримати інсталятор " +"для вашої операційної системи. Дотримуйтесь інструкцій процесу встановлення, " +"щоб запустити сервер Postgres на вашому локальному комп'ютері." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po b/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po index 6fb3daa05..1858c50b4 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/aggregation.po @@ -8,7 +8,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" "POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:16+0300\n" +"PO-Revision-Date: 2023-12-21 03:52+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"X-Generator: Poedit 3.4.1\n" #: ../../src/rdbms/aggregation.txt:-1 msgid "Data aggregation" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po b/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po new file mode 100644 index 000000000..f09bee196 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po @@ -0,0 +1,1474 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 03:52+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/rdbms/datatypes.txt:3 +#, fuzzy +msgid "PostgreSQL RDBMS: Data types" +msgstr "СУБД PostgreSQL: типи даних" + +#: ../../src/rdbms/datatypes.txt:5 +#, fuzzy +msgid "PostgreSQL has a rich set of data types available to users." +msgstr "PostgreSQL має багатий набір типів даних, доступних для користувачів." + +#: ../../src/rdbms/datatypes.txt:7 +#, fuzzy +msgid "" +"Users can add new types to PostgreSQL using the ``CREATE TYPE`` command." +msgstr "" +"Користувачі можуть додавати нові типи до PostgreSQL за допомогою команди " +"``CREATE TYPE``." + +#: ../../src/rdbms/datatypes.txt:9 +#, fuzzy +msgid "Custom data type definition" +msgstr "Визначення користувацького типу даних" + +#: ../../src/rdbms/datatypes.txt:15 ../../src/rdbms/datatypes.txt:132 +#: ../../src/rdbms/datatypes.txt:163 +#, fuzzy +msgid "Name" +msgstr "Ім'я" + +#: ../../src/rdbms/datatypes.txt:15 +#, fuzzy +msgid "Aliases" +msgstr "Псевдоніми" + +#: ../../src/rdbms/datatypes.txt:15 ../../src/rdbms/datatypes.txt:132 +#: ../../src/rdbms/datatypes.txt:163 ../../src/rdbms/datatypes.txt:233 +#: ../../src/rdbms/datatypes.txt:274 ../../src/rdbms/datatypes.txt:305 +#: ../../src/rdbms/datatypes.txt:330 +#, fuzzy +msgid "Description" +msgstr "Опис" + +#: ../../src/rdbms/datatypes.txt:17 +msgid "``bigint``" +msgstr "``bigint``" + +#: ../../src/rdbms/datatypes.txt:17 +msgid "``int8``" +msgstr "``int8``" + +#: ../../src/rdbms/datatypes.txt:17 +#, fuzzy +msgid "signed eight-byte integer" +msgstr "знакове восьмибайтне ціле число" + +#: ../../src/rdbms/datatypes.txt:19 +msgid "``bigserial``" +msgstr "``bigserial``" + +#: ../../src/rdbms/datatypes.txt:19 +msgid "``serial8``" +msgstr "``serial8``" + +#: ../../src/rdbms/datatypes.txt:19 +#, fuzzy +msgid "auto incrementing eight-byte integer" +msgstr "автоінкрементоване восьмибайтне ціле число" + +#: ../../src/rdbms/datatypes.txt:21 +msgid "``bit``" +msgstr "``bit``" + +#: ../../src/rdbms/datatypes.txt:21 +#, fuzzy +msgid "fixed-length bit string" +msgstr "бітовий рядок фіксованої довжини" + +#: ../../src/rdbms/datatypes.txt:23 +msgid "``bit varying``" +msgstr "``bit varying``" + +#: ../../src/rdbms/datatypes.txt:23 +msgid "``varbit``" +msgstr "``varbit``" + +#: ../../src/rdbms/datatypes.txt:23 +#, fuzzy +msgid "variable-length bit string" +msgstr "бітовий рядок змінної довжини" + +#: ../../src/rdbms/datatypes.txt:25 +msgid "``boolean``" +msgstr "``boolean``" + +#: ../../src/rdbms/datatypes.txt:25 +msgid "``bool``" +msgstr "``bool``" + +#: ../../src/rdbms/datatypes.txt:25 +#, fuzzy +msgid "logical Boolean (true/false)" +msgstr "логічний булевий (true/false)" + +#: ../../src/rdbms/datatypes.txt:27 +msgid "``box``" +msgstr "``box``" + +#: ../../src/rdbms/datatypes.txt:27 +#, fuzzy +msgid "rectangular box on a plane" +msgstr "прямокутна коробка на площині" + +#: ../../src/rdbms/datatypes.txt:29 +#, fuzzy +msgid "``bytea``" +msgstr "\"Байті\"" + +#: ../../src/rdbms/datatypes.txt:29 +#, fuzzy +msgid "binary data (“byte array”)" +msgstr "двійкові дані (\"байтовий масив\")" + +#: ../../src/rdbms/datatypes.txt:31 +msgid "``character``" +msgstr "``character``" + +#: ../../src/rdbms/datatypes.txt:31 +msgid "``char``" +msgstr "``char``" + +#: ../../src/rdbms/datatypes.txt:31 +#, fuzzy +msgid "fixed-length character string" +msgstr "символьний рядок фіксованої довжини" + +#: ../../src/rdbms/datatypes.txt:33 +msgid "``character varying``" +msgstr "``character varying``" + +#: ../../src/rdbms/datatypes.txt:33 +msgid "``varchar``" +msgstr "``varchar``" + +#: ../../src/rdbms/datatypes.txt:33 ../../src/rdbms/datatypes.txt:83 +#, fuzzy +msgid "variable-length character string" +msgstr "символьний рядок змінної довжини" + +#: ../../src/rdbms/datatypes.txt:35 +msgid "``cidr``" +msgstr "``cidr``" + +#: ../../src/rdbms/datatypes.txt:35 +#, fuzzy +msgid "IPv4 or IPv6 network address" +msgstr "Мережева адреса IPv4 або IPv6" + +#: ../../src/rdbms/datatypes.txt:37 +msgid "``circle``" +msgstr "``circle``" + +#: ../../src/rdbms/datatypes.txt:37 +#, fuzzy +msgid "circle on a plane" +msgstr "коло на площині" + +#: ../../src/rdbms/datatypes.txt:39 +msgid "``double precision``" +msgstr "``double precision``" + +#: ../../src/rdbms/datatypes.txt:39 +msgid "``float8``" +msgstr "``float8``" + +#: ../../src/rdbms/datatypes.txt:39 +#, fuzzy +msgid "double precision floating-point number (8 bytes)" +msgstr "число з плаваючою комою подвійної точності (8 байт)" + +#: ../../src/rdbms/datatypes.txt:41 +msgid "``date``" +msgstr "``date``" + +#: ../../src/rdbms/datatypes.txt:41 +#, fuzzy +msgid "calendar date (year, month, day)" +msgstr "календарна дата (рік, місяць, день)" + +#: ../../src/rdbms/datatypes.txt:43 +msgid "``inet``" +msgstr "``inet``" + +#: ../../src/rdbms/datatypes.txt:43 +#, fuzzy +msgid "IPv4 or IPv6 host address" +msgstr "IPv4 або IPv6 адреса хосту" + +#: ../../src/rdbms/datatypes.txt:45 +msgid "``integer``" +msgstr "``integer``" + +#: ../../src/rdbms/datatypes.txt:45 +msgid "``int``, ``int4``" +msgstr "``int``, ``int4``" + +#: ../../src/rdbms/datatypes.txt:45 +#, fuzzy +msgid "signed four-byte integer" +msgstr "знакове чотирибайтне ціле число" + +#: ../../src/rdbms/datatypes.txt:47 +msgid "``interval``" +msgstr "``interval``" + +#: ../../src/rdbms/datatypes.txt:47 +#, fuzzy +msgid "time span" +msgstr "проміжок часу" + +#: ../../src/rdbms/datatypes.txt:49 +msgid "``json``" +msgstr "``json``" + +#: ../../src/rdbms/datatypes.txt:49 +#, fuzzy +msgid "textual JSON data" +msgstr "текстові дані JSON" + +#: ../../src/rdbms/datatypes.txt:51 +msgid "``jsonb``" +msgstr "``jsonb``" + +#: ../../src/rdbms/datatypes.txt:51 +#, fuzzy +msgid "binary JSON data, decomposed" +msgstr "двійкові дані JSON, декомпоновані" + +#: ../../src/rdbms/datatypes.txt:53 +msgid "``line``" +msgstr "``line``" + +#: ../../src/rdbms/datatypes.txt:53 +#, fuzzy +msgid "infinite line on a plane" +msgstr "нескінченна пряма на площині" + +#: ../../src/rdbms/datatypes.txt:55 +msgid "``lseg``" +msgstr "``lseg``" + +#: ../../src/rdbms/datatypes.txt:55 +#, fuzzy +msgid "line segment on a plane" +msgstr "відрізок прямої на площині" + +#: ../../src/rdbms/datatypes.txt:57 +msgid "``macaddr``" +msgstr "``macaddr``" + +#: ../../src/rdbms/datatypes.txt:57 +#, fuzzy +msgid "MAC (Media Access Control) address" +msgstr "MAC-адреса (Media Access Control)" + +#: ../../src/rdbms/datatypes.txt:59 +msgid "``macaddr8``" +msgstr "``macaddr8``" + +#: ../../src/rdbms/datatypes.txt:59 +#, fuzzy +msgid "MAC (Media Access Control) address (EUI-64 format)" +msgstr "MAC-адреса (Media Access Control) (формат EUI-64)" + +#: ../../src/rdbms/datatypes.txt:61 +msgid "``money``" +msgstr "``money``" + +#: ../../src/rdbms/datatypes.txt:61 +#, fuzzy +msgid "currency amount" +msgstr "сума валюти" + +#: ../../src/rdbms/datatypes.txt:63 +msgid "``numeric``" +msgstr "``numeric``" + +#: ../../src/rdbms/datatypes.txt:63 +msgid "``decimal``" +msgstr "``decimal``" + +#: ../../src/rdbms/datatypes.txt:63 +#, fuzzy +msgid "exact numeric of selectable precision" +msgstr "точне число з обраною точністю" + +#: ../../src/rdbms/datatypes.txt:65 +msgid "``path``" +msgstr "``path``" + +#: ../../src/rdbms/datatypes.txt:65 +#, fuzzy +msgid "geometric path on a plane" +msgstr "геометричний шлях на площині" + +#: ../../src/rdbms/datatypes.txt:67 +msgid "``pg_lsn``" +msgstr "``pg_lsn``" + +#: ../../src/rdbms/datatypes.txt:67 +#, fuzzy +msgid "PostgreSQL Log Sequence Number" +msgstr "Номер послідовності журналу PostgreSQL" + +#: ../../src/rdbms/datatypes.txt:69 +msgid "``pg_snapshot``" +msgstr "``pg_snapshot``" + +#: ../../src/rdbms/datatypes.txt:69 +#, fuzzy +msgid "user-level transaction ID snapshot" +msgstr "знімок ідентифікатора транзакції на рівні користувача" + +#: ../../src/rdbms/datatypes.txt:71 +msgid "``point``" +msgstr "``point``" + +#: ../../src/rdbms/datatypes.txt:71 +#, fuzzy +msgid "geometric point on a plane" +msgstr "геометрична точка на площині" + +#: ../../src/rdbms/datatypes.txt:73 +msgid "``polygon``" +msgstr "``polygon``" + +#: ../../src/rdbms/datatypes.txt:73 +#, fuzzy +msgid "closed geometric path on a plane" +msgstr "замкнений геометричний шлях на площині" + +#: ../../src/rdbms/datatypes.txt:75 +msgid "``real``" +msgstr "``real``" + +#: ../../src/rdbms/datatypes.txt:75 +msgid "``float4``" +msgstr "``float4``" + +#: ../../src/rdbms/datatypes.txt:75 +#, fuzzy +msgid "single precision floating-point number (4 bytes)" +msgstr "число з плаваючою комою одинарної точності (4 байти)" + +#: ../../src/rdbms/datatypes.txt:77 +msgid "``smallint``" +msgstr "``smallint``" + +#: ../../src/rdbms/datatypes.txt:77 +msgid "``int2``" +msgstr "``int2``" + +#: ../../src/rdbms/datatypes.txt:77 +#, fuzzy +msgid "signed two-byte integer" +msgstr "знакове двобайтне ціле число" + +#: ../../src/rdbms/datatypes.txt:79 +msgid "``smallserial``" +msgstr "``smallserial``" + +#: ../../src/rdbms/datatypes.txt:79 +msgid "``serial2``" +msgstr "``serial2``" + +#: ../../src/rdbms/datatypes.txt:79 +#, fuzzy +msgid "auto incrementing two-byte integer" +msgstr "автоінкрементоване двобайтне ціле число" + +#: ../../src/rdbms/datatypes.txt:81 +msgid "``serial``" +msgstr "``serial``" + +#: ../../src/rdbms/datatypes.txt:81 +msgid "``serial4``" +msgstr "``serial4``" + +#: ../../src/rdbms/datatypes.txt:81 +#, fuzzy +msgid "auto incrementing four-byte integer" +msgstr "автоінкрементоване чотирибайтне ціле число" + +#: ../../src/rdbms/datatypes.txt:83 ../../src/rdbms/datatypes.txt:172 +msgid "``text``" +msgstr "``text``" + +#: ../../src/rdbms/datatypes.txt:85 ../../src/rdbms/datatypes.txt:354 +msgid "``time``" +msgstr "``time``" + +#: ../../src/rdbms/datatypes.txt:85 +#, fuzzy +msgid "time of day (no time zone)" +msgstr "час доби (без часового поясу)" + +#: ../../src/rdbms/datatypes.txt:87 +msgid "``time with time zone``" +msgstr "``time with time zone``" + +#: ../../src/rdbms/datatypes.txt:87 +msgid "``timetz``" +msgstr "``timetz``" + +#: ../../src/rdbms/datatypes.txt:87 +#, fuzzy +msgid "time of day, including time zone" +msgstr "час доби, включаючи часовий пояс" + +#: ../../src/rdbms/datatypes.txt:89 +msgid "``timestamp``" +msgstr "``timestamp``" + +#: ../../src/rdbms/datatypes.txt:89 +#, fuzzy +msgid "date and time (no time zone)" +msgstr "дата і час (без часового поясу)" + +#: ../../src/rdbms/datatypes.txt:91 +msgid "``timestamp with time zone``" +msgstr "``timestamp with time zone``" + +#: ../../src/rdbms/datatypes.txt:91 +msgid "``timestamptz``" +msgstr "``timestamptz``" + +#: ../../src/rdbms/datatypes.txt:91 +#, fuzzy +msgid "date and time, including time zone" +msgstr "дата і час, включаючи часовий пояс" + +#: ../../src/rdbms/datatypes.txt:93 +msgid "``tsquery``" +msgstr "``tsquery``" + +#: ../../src/rdbms/datatypes.txt:93 +#, fuzzy +msgid "text search query" +msgstr "текстовий пошуковий запит" + +#: ../../src/rdbms/datatypes.txt:95 +msgid "``tsvector``" +msgstr "``tsvector``" + +#: ../../src/rdbms/datatypes.txt:95 +#, fuzzy +msgid "text search document" +msgstr "текстовий пошуковий документ" + +#: ../../src/rdbms/datatypes.txt:97 +msgid "``txid_snapshot``" +msgstr "``txid_snapshot``" + +#: ../../src/rdbms/datatypes.txt:97 +#, fuzzy +msgid "user-level transaction ID snapshot (deprecated; see pg_snapshot)" +msgstr "" +"знімок ідентифікатора транзакції на рівні користувача (застарілий; див. " +"pg_snapshot)" + +#: ../../src/rdbms/datatypes.txt:99 +msgid "``uuid``" +msgstr "``uuid``" + +#: ../../src/rdbms/datatypes.txt:99 +#, fuzzy +msgid "universally unique identifier" +msgstr "універсальний унікальний ідентифікатор" + +#: ../../src/rdbms/datatypes.txt:101 +msgid "``xml``" +msgstr "``xml``" + +#: ../../src/rdbms/datatypes.txt:101 +#, fuzzy +msgid "XML data" +msgstr "XML-дані" + +#: ../../src/rdbms/datatypes.txt:105 +#, fuzzy +msgid "Types casting" +msgstr "Типи лиття" + +#: ../../src/rdbms/datatypes.txt:107 +#, fuzzy +msgid "" +"SQL is a strong type language. That is, every data item has an associated " +"data type which determines its behavior and allowed usage. PostgreSQL has an " +"extensible type system that is more general and flexible than other SQL " +"implementations." +msgstr "" +"SQL - це мова сильних типів. Це означає, що кожен елемент даних має " +"асоційований тип даних, який визначає його поведінку та дозволене " +"використання. PostgreSQL має розширювану систему типів, яка є більш " +"загальною і гнучкою, ніж інші реалізації SQL." + +#: ../../src/rdbms/datatypes.txt:112 +#, fuzzy +msgid "You can cast some types in place using ``::`` notation, like:" +msgstr "" +"Ви можете приводити деякі типи на місці, використовуючи нотацію ``::``, " +"наприклад:" + +#: ../../src/rdbms/datatypes.txt:122 +#, fuzzy +msgid "Numeric types" +msgstr "Числові типи" + +#: ../../src/rdbms/datatypes.txt:124 +#, fuzzy +msgid "" +"Numeric types consist of two-, four-, and eight-byte integers, four- and " +"eight-byte floating-point numbers, and selectable-precision decimals." +msgstr "" +"Числові типи складаються з двох-, чотирьох- і восьмибайтових цілих чисел, " +"чотирьох- і восьмибайтових чисел з плаваючою комою та десяткових чисел з " +"довільною точністю." + +#: ../../src/rdbms/datatypes.txt:127 +#, fuzzy +msgid "" +"Type types ``smallint``, ``integer`` and ``bigint`` store whole numbers, " +"that is, numbers without fractional component, of various ranges. Attempts " +"to store values outside of the allowed range will result an error." +msgstr "" +"Типи ``smallint``, ``integer`` і ``bigint`` зберігають цілі числа, тобто " +"числа без дробової частини, різних діапазонів. Спроби зберігати значення, що " +"виходять за межі допустимого діапазону, призведуть до помилки." + +#: ../../src/rdbms/datatypes.txt:132 +#, fuzzy +msgid "Storage Size" +msgstr "Розмір сховища" + +#: ../../src/rdbms/datatypes.txt:132 +#, fuzzy +msgid "Range" +msgstr "Діапазон" + +#: ../../src/rdbms/datatypes.txt:134 +#, fuzzy +msgid "smallint" +msgstr "smallint" + +#: ../../src/rdbms/datatypes.txt:134 ../../src/rdbms/datatypes.txt:152 +#, fuzzy +msgid "2 bytes" +msgstr "2 байти" + +#: ../../src/rdbms/datatypes.txt:134 +#, fuzzy +msgid "small-range integer" +msgstr "ціле число малого діапазону" + +#: ../../src/rdbms/datatypes.txt:134 +#, fuzzy +msgid "-32768 to +32767" +msgstr "-32768 до +32767" + +#: ../../src/rdbms/datatypes.txt:136 +#, fuzzy +msgid "integer" +msgstr "*x* перетворене в ціле число" + +#: ../../src/rdbms/datatypes.txt:136 ../../src/rdbms/datatypes.txt:146 +#: ../../src/rdbms/datatypes.txt:154 +#, fuzzy +msgid "4 bytes" +msgstr "4 байти" + +#: ../../src/rdbms/datatypes.txt:136 +#, fuzzy +msgid "typical choice for integer" +msgstr "типовий вибір для цілого числа" + +#: ../../src/rdbms/datatypes.txt:136 +#, fuzzy +msgid "-2147483648 to +2147483647" +msgstr "-2147483648 на +2147483647" + +#: ../../src/rdbms/datatypes.txt:138 +#, fuzzy +msgid "bigint" +msgstr "bigint" + +#: ../../src/rdbms/datatypes.txt:138 ../../src/rdbms/datatypes.txt:149 +#: ../../src/rdbms/datatypes.txt:156 +#, fuzzy +msgid "8 bytes" +msgstr "8 байт" + +#: ../../src/rdbms/datatypes.txt:138 +#, fuzzy +msgid "large-range integer" +msgstr "ціле число великого діапазону" + +#: ../../src/rdbms/datatypes.txt:138 +#, fuzzy +msgid "-9223372036854775808 to +9223372036854775807" +msgstr "-9223372036854775808 на +9223372036854775807" + +#: ../../src/rdbms/datatypes.txt:140 +#, fuzzy +msgid "decimal" +msgstr "десятковий" + +#: ../../src/rdbms/datatypes.txt:140 ../../src/rdbms/datatypes.txt:143 +#, fuzzy +msgid "variable" +msgstr "змінна" + +#: ../../src/rdbms/datatypes.txt:140 ../../src/rdbms/datatypes.txt:143 +#, fuzzy +msgid "user-specified precision, exact" +msgstr "задана користувачем точність, точна" + +#: ../../src/rdbms/datatypes.txt:140 ../../src/rdbms/datatypes.txt:143 +#, fuzzy +msgid "" +"up to 131072 digits before the decimal point; up to 16383 digits after the " +"decimal point" +msgstr "" +"до 131072 знаків до десяткової крапки; до 16383 знаків після десяткової " +"крапки" + +#: ../../src/rdbms/datatypes.txt:143 +msgid "numeric" +msgstr "" + +#: ../../src/rdbms/datatypes.txt:146 +msgid "real" +msgstr "" + +#: ../../src/rdbms/datatypes.txt:146 ../../src/rdbms/datatypes.txt:149 +#, fuzzy +msgid "variable-precision, inexact" +msgstr "змінної точності, неточний" + +#: ../../src/rdbms/datatypes.txt:146 +#, fuzzy +msgid "6 decimal digits precision" +msgstr "6 десяткових знаків після коми" + +#: ../../src/rdbms/datatypes.txt:149 +#, fuzzy +msgid "double precision" +msgstr "подвійна точність" + +#: ../../src/rdbms/datatypes.txt:149 +#, fuzzy +msgid "15 decimal digits precision" +msgstr "точність до 15 знаків після коми" + +#: ../../src/rdbms/datatypes.txt:152 +#, fuzzy +msgid "smallserial" +msgstr "дрібносерійний" + +#: ../../src/rdbms/datatypes.txt:152 +#, fuzzy +msgid "small auto incrementing integer" +msgstr "невелике ціле число, що автоматично збільшується" + +#: ../../src/rdbms/datatypes.txt:152 +#, fuzzy +msgid "1 to 32767" +msgstr "1 до 32767" + +#: ../../src/rdbms/datatypes.txt:154 +#, fuzzy +msgid "serial" +msgstr "серійний" + +#: ../../src/rdbms/datatypes.txt:154 +#, fuzzy +msgid "auto incrementing integer" +msgstr "автоінкрементоване ціле число" + +#: ../../src/rdbms/datatypes.txt:154 +#, fuzzy +msgid "1 to 2147483647" +msgstr "1 на 2147483647" + +#: ../../src/rdbms/datatypes.txt:156 +#, fuzzy +msgid "bigserial" +msgstr "багатосерійний фільм" + +#: ../../src/rdbms/datatypes.txt:156 +#, fuzzy +msgid "large auto incrementing integer" +msgstr "велике ціле число, що автоматично збільшується" + +#: ../../src/rdbms/datatypes.txt:156 +#, fuzzy +msgid "1 to 9223372036854775807" +msgstr "1 на 9223372036854775807" + +#: ../../src/rdbms/datatypes.txt:160 +#, fuzzy +msgid "Character types" +msgstr "Типи символів" + +#: ../../src/rdbms/datatypes.txt:165 +msgid "``character varying``, ``varchar``" +msgstr "``character varying``, ``varchar``" + +#: ../../src/rdbms/datatypes.txt:165 +#, fuzzy +msgid "variable-length with limit" +msgstr "змінної довжини з обмеженням" + +#: ../../src/rdbms/datatypes.txt:167 +msgid "``character``, ``char``, ``bpchar``" +msgstr "``character``, ``char``, ``bpchar``" + +#: ../../src/rdbms/datatypes.txt:167 +#, fuzzy +msgid "fixed-length, blank-padded" +msgstr "фіксованої довжини, пустотілі" + +#: ../../src/rdbms/datatypes.txt:169 +#, fuzzy +msgid "``bpchar`` without length specifier" +msgstr "``bpchar`` без специфікатора довжини" + +#: ../../src/rdbms/datatypes.txt:169 +#, fuzzy +msgid "variable unlimited length, blank-trimmed" +msgstr "змінна необмеженої довжини, без обрізів" + +#: ../../src/rdbms/datatypes.txt:172 +#, fuzzy +msgid "variable-unlimited length" +msgstr "змінна необмеженої довжини" + +#: ../../src/rdbms/datatypes.txt:175 +#, fuzzy +msgid "" +"SQL defines two primary character types: ``character varying(n)`` and " +"``character(n)``, where ``n`` is a positive integer. Both of these types can " +"store string up to ``n`` characters length. An attempt to store a longer " +"string into a column of these types will result an error, unless all the " +"excess characters are all spaces, in which case the string will be truncated " +"to the maximum length. However, if one explicitly casts a value to " +"``varchar(n)`` or ``char(n)``, then an over-length value will be truncated " +"to ``n`` characters without raising an error. If the string to be stored is " +"shorter than the declared length, value of type ``char`` will be space-" +"padded; values of ``varchar`` will simply store the shorter string." +msgstr "" +"У мові SQL визначено два основних типи символів: ``символ-змінна(n)`` та " +"``символ(n)``, де ``n`` - натуральне число. Обидва ці типи можуть зберігати " +"рядок довжиною до ``n`` символів. Спроба зберегти довший рядок у стовпці цих " +"типів призведе до помилки, якщо тільки всі надлишкові символи не є " +"пробілами, у цьому випадку рядок буде урізано до максимальної довжини. " +"Однак, якщо явно привести значення до ``varchar(n)`` або ``char(n)``, то " +"значення надмірної довжини буде урізано до ``n`` символів без виникнення " +"помилки. Якщо рядок, що зберігається, коротший за оголошену довжину, " +"значення типу ``char`` буде доповнено пробілами; значення типу ``varchar`` " +"просто збереже коротший рядок." + +#: ../../src/rdbms/datatypes.txt:186 +#, fuzzy +msgid "" +"In addition postgres provides the ``text`` type, which stores strings of any " +"length." +msgstr "" +"Крім того, у postgres передбачено тип ``text``, який зберігає рядки " +"довільної довжини." + +#: ../../src/rdbms/datatypes.txt:189 +#, fuzzy +msgid "" +"If specified, the length ``n`` must be greater than 0 and cannot exceed " +"10,485,760. If ``character varying`` is used without length specifier, the " +"type accepts strings of any length. If ``bpchar`` lacks a length specifier, " +"it also accepts strings of any length, but trailing spaces are semantically " +"insignificant. If ``character`` lacks a specifier, it is equivalent to " +"``character(1)``." +msgstr "" +"Якщо вказано, довжина ``n`` повинна бути більшою за 0 і не може перевищувати " +"10 485 760. Якщо ``character varying`` використовується без специфікатора " +"довжини, тип приймає рядки будь-якої довжини. Якщо ``bpchar`` не має " +"специфікатора довжини, він також приймає рядки будь-якої довжини, але " +"кінцеві пробіли є семантично несуттєвими. Якщо ``character`` не має " +"специфікатора, він еквівалентний ``character(1)``." + +#: ../../src/rdbms/datatypes.txt:197 +#, fuzzy +msgid "Date/Time types" +msgstr "Типи дати/часу" + +#: ../../src/rdbms/datatypes.txt:199 +#, fuzzy +msgid "" +"PostgreSQL supports the full set of SQL date and time types. Dates are " +"counted according to the Gregorian calendar, even in years before that " +"calendar was introduced." +msgstr "" +"PostgreSQL підтримує повний набір типів дати і часу SQL. Дати відраховуються " +"за григоріанським календарем, навіть у роки, коли цей календар ще не було " +"запроваджено." + +#: ../../src/rdbms/datatypes.txt:203 +#, fuzzy +msgid "" +"``time``, ``timestamp``, and ``interval`` accept an optional precision " +"value, which specifies the number of fractional digits retained in the " +"seconds field. By default, there is no explicit bound on precision. The " +"allowed of this value is from 0 to 6." +msgstr "" +"``time``, ``timestamp`` та ``interval`` приймають необов'язкове значення " +"точності, яке визначає кількість дробових знаків, що зберігаються у полі " +"секунд. За замовчуванням, немає явного обмеження на точність. Допустиме " +"значення цього параметра - від 0 до 6." + +#: ../../src/rdbms/datatypes.txt:208 +#, fuzzy +msgid "" +"The ``interval`` type has an additional option, which is to restrict the of " +"stored fields by writing one of these phrases:" +msgstr "" +"Тип ``інтервал`` має додаткову опцію, яка полягає в обмеженні полів, що " +"зберігаються, шляхом написання однієї з цих фраз:" + +#: ../../src/rdbms/datatypes.txt:228 +#, fuzzy +msgid "Dates" +msgstr "Дати" + +#: ../../src/rdbms/datatypes.txt:230 +#, fuzzy +msgid "Some possible inputs for the ``date`` type." +msgstr "Деякі можливі вхідні дані для типу ``date``." + +#: ../../src/rdbms/datatypes.txt:233 ../../src/rdbms/datatypes.txt:274 +#: ../../src/rdbms/datatypes.txt:305 +#, fuzzy +msgid "Example" +msgstr "Приклад" + +#: ../../src/rdbms/datatypes.txt:235 +msgid "``1999-01-08``" +msgstr "``1999-01-08``" + +#: ../../src/rdbms/datatypes.txt:235 +#, fuzzy +msgid "ISO 8601; January 8 in any mode (**recommended format**)" +msgstr "ISO 8601; 8 січня в будь-якому режимі (**рекомендований формат**)" + +#: ../../src/rdbms/datatypes.txt:238 +msgid "``January 8, 1999``" +msgstr "``January 8, 1999``" + +#: ../../src/rdbms/datatypes.txt:238 +#, fuzzy +msgid "unambiguous in any date style input mode" +msgstr "однозначний у будь-якому режимі введення стилю дати" + +#: ../../src/rdbms/datatypes.txt:240 +msgid "``1/8/1999``" +msgstr "``1/8/1999``" + +#: ../../src/rdbms/datatypes.txt:240 +#, fuzzy +msgid "January 8 in MDY mode; August 1 in DMY mode" +msgstr "8 січня в режимі MDY; 1 серпня в режимі DMY" + +#: ../../src/rdbms/datatypes.txt:242 +msgid "``1/18/1999``" +msgstr "``1/18/1999``" + +#: ../../src/rdbms/datatypes.txt:242 +#, fuzzy +msgid "January 18 in MDY mode; rejected in other modes" +msgstr "18 січня в режимі MDY; відхилено в інших режимах" + +#: ../../src/rdbms/datatypes.txt:245 +msgid "``01/02/03``" +msgstr "``01/02/03``" + +#: ../../src/rdbms/datatypes.txt:245 +#, fuzzy +msgid "" +"January 2, 2003 in MDY mode; February 1, 2003 in DMY mode; February 3, 2001 " +"in YMD mode" +msgstr "" +"2 січня 2003 року в режимі MDY; 1 лютого 2003 року в режимі DMY; 3 лютого " +"2001 року в режимі YMD" + +#: ../../src/rdbms/datatypes.txt:249 +msgid "``1999-Jan-08`` ``Jan-08-1999`` ``08-Jan-1999``" +msgstr "``1999-Jan-08`` ``Jan-08-1999`` ``08-Jan-1999``" + +#: ../../src/rdbms/datatypes.txt:249 +#, fuzzy +msgid "January 8 in any mode" +msgstr "8 січня в будь-якому режимі" + +#: ../../src/rdbms/datatypes.txt:253 +msgid "``99-Jan-08``" +msgstr "``99-Jan-08``" + +#: ../../src/rdbms/datatypes.txt:253 +#, fuzzy +msgid "January 8 in YMD mode, else error" +msgstr "8 січня в режимі YMD, інакше помилка" + +#: ../../src/rdbms/datatypes.txt:255 +msgid "``08-Jan-99`` ``Jan-08-99``" +msgstr "``08-Jan-99`` ``Jan-08-99``" + +#: ../../src/rdbms/datatypes.txt:255 +#, fuzzy +msgid "January 8, except error in YMD mode" +msgstr "8 січня, крім помилки в режимі YMD" + +#: ../../src/rdbms/datatypes.txt:258 +msgid "``19990108`` ``990108``" +msgstr "``19990108`` ``990108``" + +#: ../../src/rdbms/datatypes.txt:258 +#, fuzzy +msgid "ISO 8601; January 8, 1999 in any mode" +msgstr "ISO 8601; 8 січня 1999 року в будь-якому режимі" + +#: ../../src/rdbms/datatypes.txt:261 +msgid "``1999.008``" +msgstr "``1999.008``" + +#: ../../src/rdbms/datatypes.txt:261 +#, fuzzy +msgid "year and day of year" +msgstr "рік і день року" + +#: ../../src/rdbms/datatypes.txt:263 +msgid "``J2451187``" +msgstr "``J2451187``" + +#: ../../src/rdbms/datatypes.txt:263 +#, fuzzy +msgid "Julian date" +msgstr "Дата за юліанським календарем" + +#: ../../src/rdbms/datatypes.txt:265 +msgid "``January 8, 99 BC``" +msgstr "``January 8, 99 BC``" + +#: ../../src/rdbms/datatypes.txt:265 +#, fuzzy +msgid "year 99 BC" +msgstr "99 рік до н.е" + +#: ../../src/rdbms/datatypes.txt:269 +#, fuzzy +msgid "Times" +msgstr "Разів" + +#: ../../src/rdbms/datatypes.txt:271 +#, fuzzy +msgid "Some possible inputs for the ``time`` type." +msgstr "Деякі можливі вхідні дані для типу ``time``." + +#: ../../src/rdbms/datatypes.txt:276 +msgid "``04:05:06.789`` ``04:05:06`` ``04:05`` ``040506``" +msgstr "``04:05:06.789`` ``04:05:06`` ``04:05`` ``040506``" + +#: ../../src/rdbms/datatypes.txt:276 +#, fuzzy +msgid "ISO 8601" +msgstr "ISO 8601" + +#: ../../src/rdbms/datatypes.txt:281 +msgid "``04:05 AM``" +msgstr "``04:05 AM``" + +#: ../../src/rdbms/datatypes.txt:281 +#, fuzzy +msgid "same as 04:05; AM does not affect value" +msgstr "те саме, що і 04:05; AM не впливає на значення" + +#: ../../src/rdbms/datatypes.txt:283 +msgid "``04:05 PM``" +msgstr "``04:05 PM``" + +#: ../../src/rdbms/datatypes.txt:283 +#, fuzzy +msgid "same as 16:05; input hour must be <= 12" +msgstr "збігається з 16:05; вхідна година повинна бути <= 12" + +#: ../../src/rdbms/datatypes.txt:285 +msgid "``04:05:06.789-8`` ``04:05:06-08:00`` ``04:05-08:00`` ``040506-08``" +msgstr "``04:05:06.789-8`` ``04:05:06-08:00`` ``04:05-08:00`` ``040506-08``" + +#: ../../src/rdbms/datatypes.txt:285 +#, fuzzy +msgid "ISO 8601, with time zone as UTC offset" +msgstr "ISO 8601, з часовим поясом як зміщенням UTC" + +#: ../../src/rdbms/datatypes.txt:290 +msgid "``040506+0730``" +msgstr "``040506+0730``" + +#: ../../src/rdbms/datatypes.txt:290 +#, fuzzy +msgid "ISO 8601, with fractional-hour time zone as UTC offset" +msgstr "ISO 8601, з часовим поясом у дробових годинах як зміщенням UTC" + +#: ../../src/rdbms/datatypes.txt:293 +msgid "``040506+07:30:00``" +msgstr "``040506+07:30:00``" + +#: ../../src/rdbms/datatypes.txt:293 +#, fuzzy +msgid "UTC offset specified to seconds (not allowed in ISO 8601)" +msgstr "Зміщення UTC вказано в секундах (не дозволено в ISO 8601)" + +#: ../../src/rdbms/datatypes.txt:296 +msgid "``04:05:06 PST``" +msgstr "``04:05:06 PST``" + +#: ../../src/rdbms/datatypes.txt:296 +#, fuzzy +msgid "time zone specified by abbreviation" +msgstr "часовий пояс, вказаний абревіатурою" + +#: ../../src/rdbms/datatypes.txt:298 +msgid "``2003-04-12 04:05:06 America/New_York``" +msgstr "``2003-04-12 04:05:06 America/New_York``" + +#: ../../src/rdbms/datatypes.txt:298 +#, fuzzy +msgid "time zone specified by full" +msgstr "часовий пояс вказано повністю" + +#: ../../src/rdbms/datatypes.txt:303 +#, fuzzy +msgid "Time zone input" +msgstr "Введення часового поясу" + +#: ../../src/rdbms/datatypes.txt:307 +msgid "``PST``" +msgstr "``PST``" + +#: ../../src/rdbms/datatypes.txt:307 +#, fuzzy +msgid "Abbreviation (for Pacific Standard Time)" +msgstr "Скорочення (для Тихоокеанського стандартного часу)" + +#: ../../src/rdbms/datatypes.txt:309 +msgid "``America/New_York``" +msgstr "``America/New_York``" + +#: ../../src/rdbms/datatypes.txt:309 +#, fuzzy +msgid "Full time zone name" +msgstr "Повна назва часового поясу" + +#: ../../src/rdbms/datatypes.txt:311 +msgid "``PST8PDT``" +msgstr "``PST8PDT``" + +#: ../../src/rdbms/datatypes.txt:311 +#, fuzzy +msgid "POSIX-style time zone specification" +msgstr "Специфікація часових поясів у стилі POSIX" + +#: ../../src/rdbms/datatypes.txt:313 +msgid "``-8:00:00``" +msgstr "``-8:00:00``" + +#: ../../src/rdbms/datatypes.txt:313 +#, fuzzy +msgid "UTC offset for PST" +msgstr "Зміщення UTC для PST" + +#: ../../src/rdbms/datatypes.txt:315 +msgid "``-8:00``" +msgstr "``-8:00``" + +#: ../../src/rdbms/datatypes.txt:315 +#, fuzzy +msgid "UTC offset for PST (ISO 8601 extended format)" +msgstr "Зміщення UTC для PST (розширений формат ISO 8601)" + +#: ../../src/rdbms/datatypes.txt:317 +msgid "``-800``" +msgstr "``-800``" + +#: ../../src/rdbms/datatypes.txt:317 ../../src/rdbms/datatypes.txt:319 +#, fuzzy +msgid "UTC offset for PST (ISO 8601 basic format)" +msgstr "Зміщення UTC для PST (базовий формат ISO 8601)" + +#: ../../src/rdbms/datatypes.txt:319 +msgid "``-8``" +msgstr "``-8``" + +#: ../../src/rdbms/datatypes.txt:321 +msgid "``zulu``" +msgstr "``zulu``" + +#: ../../src/rdbms/datatypes.txt:321 +#, fuzzy +msgid "Military abbreviation for UTC" +msgstr "Військове скорочення UTC" + +#: ../../src/rdbms/datatypes.txt:323 +msgid "``z``" +msgstr "``z``" + +#: ../../src/rdbms/datatypes.txt:323 +#, fuzzy +msgid "Short form of zulu (also in ISO 8601)" +msgstr "Коротка форма зулу (також в ISO 8601)" + +#: ../../src/rdbms/datatypes.txt:327 +#, fuzzy +msgid "Special date/time inputs" +msgstr "Спеціальне введення дати/часу" + +#: ../../src/rdbms/datatypes.txt:330 +#, fuzzy +msgid "Input String" +msgstr "Вхідний рядок" + +#: ../../src/rdbms/datatypes.txt:330 +#, fuzzy +msgid "Valid Types" +msgstr "Допустимі типи" + +#: ../../src/rdbms/datatypes.txt:332 +#, fuzzy +msgid "epoch" +msgstr "епоха" + +#: ../../src/rdbms/datatypes.txt:332 ../../src/rdbms/datatypes.txt:335 +#: ../../src/rdbms/datatypes.txt:345 ../../src/rdbms/datatypes.txt:348 +#: ../../src/rdbms/datatypes.txt:351 +msgid "``date``, ``timestamp``" +msgstr "``date``, ``timestamp``" + +#: ../../src/rdbms/datatypes.txt:332 +#, fuzzy +msgid "1970-01-01 00:00:00+00 (Unix system time zero)" +msgstr "1970-01-01 00:00:00+00 (нульовий системний час Unix)" + +#: ../../src/rdbms/datatypes.txt:335 +#, fuzzy +msgid "infinity" +msgstr "нескінченність" + +#: ../../src/rdbms/datatypes.txt:335 +#, fuzzy +msgid "later than all other time stamps" +msgstr "пізніше за всі інші часові мітки" + +#: ../../src/rdbms/datatypes.txt:338 +#, fuzzy +msgid "-infinity" +msgstr "-нескінченність" + +#: ../../src/rdbms/datatypes.txt:338 +msgid "``date, ``timestamp``" +msgstr "``date, ``timestamp``" + +#: ../../src/rdbms/datatypes.txt:338 +#, fuzzy +msgid "earlier than all other time stamps" +msgstr "раніше за всі інші мітки часу" + +#: ../../src/rdbms/datatypes.txt:341 +#, fuzzy +msgid "now" +msgstr "зараз" + +#: ../../src/rdbms/datatypes.txt:341 +msgid "``date``, ``time``, ``timestamp``" +msgstr "``date``, ``time``, ``timestamp``" + +#: ../../src/rdbms/datatypes.txt:341 +#, fuzzy +msgid "current transaction's start time" +msgstr "час початку поточної транзакції" + +#: ../../src/rdbms/datatypes.txt:345 +#, fuzzy +msgid "today" +msgstr "сьогодні" + +#: ../../src/rdbms/datatypes.txt:345 +#, fuzzy +msgid "midnight (00:00) today" +msgstr "опівночі (00:00) сьогодні" + +#: ../../src/rdbms/datatypes.txt:348 +#, fuzzy +msgid "tomorrow" +msgstr "завтра" + +#: ../../src/rdbms/datatypes.txt:348 +#, fuzzy +msgid "midnight (00:00) tomorrow" +msgstr "опівночі (00:00) завтра" + +#: ../../src/rdbms/datatypes.txt:351 +#, fuzzy +msgid "yesterday" +msgstr "вчора" + +#: ../../src/rdbms/datatypes.txt:351 +#, fuzzy +msgid "midnight (00:00) yesterday" +msgstr "опівночі (00:00) вчора" + +#: ../../src/rdbms/datatypes.txt:354 +#, fuzzy +msgid "allballs" +msgstr "оллболи" + +#: ../../src/rdbms/datatypes.txt:354 +msgid "00:00:00.00 UTC" +msgstr "00:00:00.00 UTC" + +#: ../../src/rdbms/datatypes.txt:358 +#, fuzzy +msgid "Intervals" +msgstr "Інтервали" + +#: ../../src/rdbms/datatypes.txt:360 +#, fuzzy +msgid "``interval`` values can be written using the following verbose syntax:" +msgstr "" +"значення ``інтервалу`` можна записати, використовуючи наступний розгорнутий " +"синтаксис:" + +#: ../../src/rdbms/datatypes.txt:366 +#, fuzzy +msgid "" +"Intervals are useful when you need to move timestamp back in past or to the " +"future." +msgstr "" +"Інтервали корисні, коли вам потрібно перемістити мітку часу в минуле або в " +"майбутнє." + +#: ../../src/rdbms/datatypes.txt:370 +#, fuzzy +msgid "Abbreviation" +msgstr "Абревіатура" + +#: ../../src/rdbms/datatypes.txt:370 +#, fuzzy +msgid "Meaning" +msgstr "Значення" + +#: ../../src/rdbms/datatypes.txt:372 +msgid "Y" +msgstr "Y" + +#: ../../src/rdbms/datatypes.txt:372 +#, fuzzy +msgid "Years" +msgstr "Років" + +#: ../../src/rdbms/datatypes.txt:374 ../../src/rdbms/datatypes.txt:382 +msgid "M" +msgstr "M" + +#: ../../src/rdbms/datatypes.txt:374 +#, fuzzy +msgid "Months" +msgstr "Місяці" + +#: ../../src/rdbms/datatypes.txt:376 +msgid "W" +msgstr "W" + +#: ../../src/rdbms/datatypes.txt:376 +#, fuzzy +msgid "Weeks" +msgstr "Тижні" + +#: ../../src/rdbms/datatypes.txt:378 +msgid "D" +msgstr "D" + +#: ../../src/rdbms/datatypes.txt:378 +#, fuzzy +msgid "Days" +msgstr "Дні" + +#: ../../src/rdbms/datatypes.txt:380 +msgid "H" +msgstr "H" + +#: ../../src/rdbms/datatypes.txt:380 +#, fuzzy +msgid "Hours" +msgstr "Години" + +#: ../../src/rdbms/datatypes.txt:382 +#, fuzzy +msgid "Minutes" +msgstr "Хвилини" + +#: ../../src/rdbms/datatypes.txt:384 +msgid "S" +msgstr "S" + +#: ../../src/rdbms/datatypes.txt:384 +#, fuzzy +msgid "Seconds" +msgstr "Секунди" + +#: ../../src/rdbms/datatypes.txt:387 +#, fuzzy +msgid "7 days before yesterday" +msgstr "7 днів позавчора" + +#: ../../src/rdbms/datatypes.txt:394 +#, fuzzy +msgid "Boolean type" +msgstr "Булевий тип" + +#: ../../src/rdbms/datatypes.txt:396 +#, fuzzy +msgid "" +"PostgreSQL provides the standard SQL type ``boolean``. The ``boolean`` type " +"can have several states: **true**, **false**, and a third state, " +"**unknown**, which is represented by the SQL ``NULL`` value." +msgstr "" +"PostgreSQL надає стандартний тип SQL ``boolean``. Тип ``boolean`` може мати " +"декілька станів: **true**, **false** і третій стан, **unknown**, який " +"представляється значенням SQL ``NULL``." + +#: ../../src/rdbms/datatypes.txt:400 +#, fuzzy +msgid "" +"The datetype input function for type ``boolean`` accepts these strings " +"representations for the **true** state:" +msgstr "" +"Функція введення типу даних для типу ``boolean`` приймає ці представлення " +"рядків для стану **true**:" + +#: ../../src/rdbms/datatypes.txt:403 +msgid "``true``" +msgstr "``true``" + +#: ../../src/rdbms/datatypes.txt:404 +msgid "``yea``" +msgstr "``yea``" + +#: ../../src/rdbms/datatypes.txt:405 +msgid "``on``" +msgstr "``on``" + +#: ../../src/rdbms/datatypes.txt:406 +msgid "``1``" +msgstr "``1``" + +#: ../../src/rdbms/datatypes.txt:408 +#, fuzzy +msgid "and these representations for the **false** state:" +msgstr "і ці представлення для стану **false**:" + +#: ../../src/rdbms/datatypes.txt:410 +msgid "``false``" +msgstr "``false``" + +#: ../../src/rdbms/datatypes.txt:411 +msgid "``no``" +msgstr "``no``" + +#: ../../src/rdbms/datatypes.txt:412 +msgid "``off``" +msgstr "``off``" + +#: ../../src/rdbms/datatypes.txt:413 +msgid "``0``" +msgstr "``0``" + +#: ../../src/rdbms/datatypes.txt:415 +#, fuzzy +msgid "" +"The key words ``TRUE`` or ``FALSE`` are preferred (SQL-compliant) method for " +"writing Boolean constants in SQL queries. But, you can also use string " +"representations by following the generic string-literal constant syntax, for " +"example ``'yes':boolean``." +msgstr "" +"Ключові слова ``TRUE`` або ``FALSE`` є найкращим (SQL-сумісним) методом " +"запису булевих констант у SQL-запитах. Але ви також можете використовувати " +"рядкові представлення, дотримуючись загального синтаксису рядково-літерних " +"констант, наприклад, ``'yes':boolean``." + +#: ../../src/rdbms/datatypes.txt:421 +#, fuzzy +msgid "Enumerated types" +msgstr "Перераховані типи" + +#: ../../src/rdbms/datatypes.txt:423 +#, fuzzy +msgid "" +"Enumerated (enums) types are data types that comprise a static, ordered set " +"of values. They are equivalent to the ``enum`` types supported in a number " +"of programming languages. An example of an enum might be the days of the " +"week, or a set of status values for a piece of data." +msgstr "" +"Перечислювальні типи - це типи даних, які складаються зі статичного, " +"впорядкованого набору значень. Вони еквівалентні типам ``список``, що " +"підтримуються у багатьох мовах програмування. Прикладом перечислення можуть " +"бути дні тижня або набір значень статусу елемента даних." + +#: ../../src/rdbms/datatypes.txt:428 +#, fuzzy +msgid "" +"Enum types are created using the ``CREATE TYPE`` command; and once created, " +"the enum type can be used in table in function definitions, much like other " +"types:" +msgstr "" +"Типи перечислення створюються за допомогою команди ``CREATE TYPE``; і після " +"створення тип перечислення можна використовувати у таблицях та визначеннях " +"функцій, як і інші типи:" + +#: ../../src/rdbms/datatypes.txt:443 +#, fuzzy +msgid "Ordering" +msgstr "Перевірка та підтвердження замовлення (відсутній)" + +#: ../../src/rdbms/datatypes.txt:445 +#, fuzzy +msgid "" +"The ordering of the values in an enum type is the order in which the values " +"were listed when the type was created. All standard comparison operators and " +"related aggregate functions are supported for enums. However, remember that " +"each enumerated data type is separated and cannot be compared with other " +"enumerated types." +msgstr "" +"Порядок значень у зчислювальному типі - це порядок, у якому значення були " +"перераховані при створенні типу. Усі стандартні оператори порівняння та " +"пов'язані з ними агрегатні функції підтримуються для зчислень. Однак " +"пам'ятайте, що кожен перелічуваний тип даних є окремим і не може " +"порівнюватися з іншими перелічуваними типами." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po new file mode 100644 index 000000000..fe3b8bf3b --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po @@ -0,0 +1,665 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 03:52+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/rdbms/ddl.txt:-1 +#, fuzzy +msgid "Data definition language, DDL" +msgstr "Мова визначення даних, DDL" + +#: ../../src/rdbms/ddl.txt:-1 +#, fuzzy +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/ddl.txt:-1 +#, fuzzy +msgid "sql, db, database, ddl, create, alter, drop" +msgstr "sql, db, база даних, ddl, create, alter, drop" + +#: ../../src/rdbms/ddl.txt:8 +#, fuzzy +msgid "Data Definition Language" +msgstr "Мова опису даних" + +#: ../../src/rdbms/ddl.txt:10 +#, fuzzy +msgid "" +":abbr:`DDL (Data Definition Language)` is a subset of SQL used for defining " +"and modifying the database structure. Understanding DDL is fundamental to " +"working with RDBMS. It allows you to define the structure of your data and " +"make necessary changes as your requirements evolve." +msgstr "" +"abbr:`DDL (Data Definition Language) - це підмножина мови SQL, яка " +"використовується для визначення та модифікації структури бази даних. " +"Розуміння DDL є фундаментальним для роботи з СКБД. Це дозволяє вам визначати " +"структуру ваших даних і вносити необхідні зміни в міру розвитку ваших вимог." + +#: ../../src/rdbms/ddl.txt:15 +#, fuzzy +msgid "``CREATE`` used to create new objects within a RDBMS" +msgstr "``CREATE`` використовується для створення нових об'єктів у СКБД" + +#: ../../src/rdbms/ddl.txt:16 +#, fuzzy +msgid "``ALTER`` used to modify existing objects" +msgstr "``ALTER`` використовується для зміни існуючих об'єктів" + +#: ../../src/rdbms/ddl.txt:17 +#, fuzzy +msgid "``DROP`` used to delete database objects" +msgstr "``DROP`` використовується для видалення об'єктів бази даних" + +#: ../../src/rdbms/ddl.txt:18 +#, fuzzy +msgid "``TRUNCATE`` used to remove all records from a table" +msgstr "``TRUNCATE`` використовується для видалення всіх записів з таблиці" + +#: ../../src/rdbms/ddl.txt:25 +#, fuzzy +msgid "Create objects" +msgstr "Створення об'єктів" + +#: ../../src/rdbms/ddl.txt:28 +#, fuzzy +msgid "Creating database roles" +msgstr "Створення ролей бази даних" + +#: ../../src/rdbms/ddl.txt:32 +#, fuzzy +msgid "" +"SQLite is a small database in a single file and it doesn't implement role " +"based access to data. Any user who have access to DB file will have access " +"to data within the database as well." +msgstr "" +"SQLite - це невелика база даних в одному файлі, і вона не реалізує рольовий " +"доступ до даних. Будь-який користувач, який має доступ до файлу бази даних, " +"також має доступ до даних всередині бази даних." + +#: ../../src/rdbms/ddl.txt:36 +#, fuzzy +msgid "" +"In RDBMS, roles are used to manage database permissions. They are an " +"essential part of database security and user management." +msgstr "" +"У СКБД ролі використовуються для керування правами доступу до бази даних. " +"Вони є невід'ємною частиною безпеки бази даних та управління користувачами." + +#: ../../src/rdbms/ddl.txt:39 +#, fuzzy +msgid "" +"In PostgreSQL a **role** is an entity that can own database objects and have " +"database privileges; a role can be considered a *user*, a *group*, or both " +"depending on how it is used." +msgstr "" +"У PostgreSQL **роль** - це сутність, яка може володіти об'єктами бази даних " +"і мати привілеї до бази даних; роль може розглядатися як *користувач*, " +"*група* або і те, і інше, залежно від того, як вона використовується." + +#: ../../src/rdbms/ddl.txt:43 +#, fuzzy +msgid "``CREATE ROLE`` statement defines a new database role." +msgstr "оператор ``CREATE ROLE`` визначає нову роль бази даних." + +#: ../../src/rdbms/ddl.txt:49 +#, fuzzy +msgid "This statement also can have options:" +msgstr "Це твердження також може мати варіанти:" + +#: ../../src/rdbms/ddl.txt:55 +#, fuzzy +msgid "" +"Options clarify if a role can login to the database server, connect to " +"specific databases, create other roles etc. The full list of options is " +"available in the official postgres documentation." +msgstr "" +"Опції пояснюють, чи може роль входити на сервер бази даних, підключатися до " +"певних баз даних, створювати інші ролі тощо. Повний список опцій доступний в " +"офіційній документації postgres." + +#: ../../src/rdbms/ddl.txt:60 +#, fuzzy +msgid "Creating databases" +msgstr "Створення баз даних" + +#: ../../src/rdbms/ddl.txt:62 +#, fuzzy +msgid "" +"``CREATE DATABASE`` statement creates a new PostgreSQL database. To create a " +"database, you must be a superuser or have ``CREATEDB`` privilege." +msgstr "" +"оператор ``CREATE DATABASE`` створює нову базу даних PostgreSQL. Для " +"створення бази даних ви повинні бути суперкористувачем або мати привілей " +"``CREATEDB``." + +#: ../../src/rdbms/ddl.txt:69 +#, fuzzy +msgid "" +"Databases within a PostgreSQL server have owners. By default a user who " +"creates a database is assigned as its owner. To specify another user as a " +"database owner options may be used:" +msgstr "" +"Бази даних на сервері PostgreSQL мають власників. За замовчуванням власником " +"бази даних призначається користувач, який її створив. Щоб вказати іншого " +"користувача як власника бази даних, можна скористатися опціями:" + +#: ../../src/rdbms/ddl.txt:77 +#, fuzzy +msgid "" +"There are lots of options for this statement available in the official " +"postgres documentation." +msgstr "" +"В офіційній документації postgres є багато варіантів цього твердження, " +"доступних в офіційній документації postgres." + +#: ../../src/rdbms/ddl.txt:81 +#, fuzzy +msgid "Creating tables" +msgstr "Створення таблиць" + +#: ../../src/rdbms/ddl.txt:83 +#, fuzzy +msgid "" +"To create a table, you use the aptly names ``CREATE TABLE`` command. In this " +"command you specify at least a name for the new table, the names of the " +"columns and the data type of each column." +msgstr "" +"Для створення таблиці використовується команда ``CREATE TABLE``, яка має " +"влучну назву. У цій команді ви вказуєте принаймні назву нової таблиці, назви " +"стовпців і тип даних для кожного стовпця." + +#: ../../src/rdbms/ddl.txt:98 +#, fuzzy +msgid "Default value" +msgstr "Значення за замовчуванням" + +#: ../../src/rdbms/ddl.txt:99 +#, fuzzy +msgid "" +"Constraints also can be applied for columns while creating a table. In this " +"section, only most notable constraints will be described." +msgstr "" +"Обмеження також можуть бути застосовані до стовпців під час створення " +"таблиці. У цьому розділі буде описано лише найпоширеніші обмеження." + +#: ../../src/rdbms/ddl.txt:102 +#, fuzzy +msgid "" +"A column can be assigned a default value. When a new row is created and no " +"values are specified for some of the columns, those columns will be filled " +"with their respective default values. If no default value is declared " +"explicitly, the default value is the ``NULL`` value. This usually makes " +"sense because a null value can be considered to represent unknown data." +msgstr "" +"Стовпчику можна призначити значення за замовчуванням. Коли створюється новий " +"рядок і для деяких стовпців не вказано жодних значень, ці стовпці буде " +"заповнено відповідними значеннями за замовчуванням. Якщо значення за " +"замовчуванням не вказано явно, значенням за замовчуванням буде значення " +"``NULL``. Зазвичай це має сенс, оскільки нульове значення можна вважати " +"таким, що представляє невідомі дані." + +#: ../../src/rdbms/ddl.txt:108 +#, fuzzy +msgid "" +"In a table definition the default values are listed after the data type." +msgstr "" +"У визначенні таблиці значення за замовчуванням перераховані після типу даних." + +#: ../../src/rdbms/ddl.txt:119 +#, fuzzy +msgid "" +"The default value can be an expression, which will be evaluated whenever the " +"default value is inserted (**not when the table is created**). A common " +"example are timestamps columns representing the time a record was created " +"and a \"serial number\" generator." +msgstr "" +"Значення за замовчуванням може бути виразом, який буде обчислюватися щоразу, " +"коли вставляється значення за замовчуванням (**не під час створення " +"таблиці**). Типовим прикладом є стовпці з позначками часу, що відображають " +"час створення запису, та генератор \"серійних номерів\"." + +#: ../../src/rdbms/ddl.txt:132 +#, fuzzy +msgid "There is a shorthand to generate serial numbers:" +msgstr "Існує скорочення для генерації серійних номерів:" + +#: ../../src/rdbms/ddl.txt:139 +#, fuzzy +msgid "Generated Columns" +msgstr "Згенеровані стовпці" + +#: ../../src/rdbms/ddl.txt:140 +#, fuzzy +msgid "" +"In case you need to calculate some column value based on other columns, you " +"may use generated columns. A generated column is a special column that is " +"always computed from other columns. Thus, it is for columns what a view is " +"for tables. There are two kinds of generated columns: stored and virtual." +msgstr "" +"Якщо вам потрібно обчислити значення якогось стовпця на основі інших " +"стовпців, ви можете використовувати згенеровані стовпці. Згенерований " +"стовпець - це спеціальний стовпець, який завжди обчислюється на основі інших " +"стовпців. Таким чином, для стовпців це те саме, що подання для таблиць. " +"Існує два типи згенерованих стовпців: збережені та віртуальні." + +#: ../../src/rdbms/ddl.txt:145 +#, fuzzy +msgid "" +"A stored generated column is computed when it is written (inserted or " +"updated) and occupies storage as if it were a normal column. A virtual " +"generated column occupies no storage and is computed when it is read." +msgstr "" +"Збережений згенерований стовпець обчислюється, коли він записується " +"(вставляється або оновлюється) і займає пам'ять, як звичайний стовпець. " +"Віртуальний згенерований стовпець не займає місця в пам'яті і обчислюється " +"під час читання." + +#: ../../src/rdbms/ddl.txt:159 +#, fuzzy +msgid "" +"There are several restrictions applied to the definitions of generated " +"columns and tables involving generated columns (not all listed):" +msgstr "" +"Існує кілька обмежень, що застосовуються до визначень згенерованих стовпців " +"і таблиць, що містять згенеровані стовпці (не всі з них перераховані):" + +#: ../../src/rdbms/ddl.txt:162 +#, fuzzy +msgid "" +"The generation expression can only use immutable functions and cannot use " +"sub-queries or reference anything other than the current row." +msgstr "" +"Вираз генерації може використовувати лише незмінні функції і не може " +"використовувати підзапити або посилатися на щось, крім поточного рядка." + +#: ../../src/rdbms/ddl.txt:164 +#, fuzzy +msgid "The generation expression cannot reference another generated column." +msgstr "Вираз генерації не може посилатися на інший згенерований стовпець." + +#: ../../src/rdbms/ddl.txt:165 +#, fuzzy +msgid "A generated column cannot have column default." +msgstr "Створений стовпець не може мати стовпець за замовчуванням." + +#: ../../src/rdbms/ddl.txt:168 +#, fuzzy +msgid "Constraints" +msgstr "Обмеження" + +#: ../../src/rdbms/ddl.txt:169 +#, fuzzy +msgid "" +"A check constraint is the most generic constraint type. It allows you to " +"specify that the value in a certain column must satisfy a Boolean (truth-" +"value) expression." +msgstr "" +"Обмеження перевірки є найбільш загальним типом обмежень. Воно дозволяє " +"вказати, що значення в певному стовпчику має задовольняти булевому (істинно-" +"неістинному) виразу." + +#: ../../src/rdbms/ddl.txt:184 +#, fuzzy +msgid "" +"A not-null constraint simply specifies that a column must not assume the " +"null value." +msgstr "" +"Обмеження не-нуль просто вказує, що стовпець не повинен приймати нульове " +"значення." + +#: ../../src/rdbms/ddl.txt:195 +#, fuzzy +msgid "" +"Unique constraints ensure that the data contained in a column, or a group of " +"columns, is unique among all the rows in the table." +msgstr "" +"Унікальні обмеження гарантують, що дані, які містяться у стовпчику або групі " +"стовпчиків, є унікальними серед усіх рядків таблиці." + +#: ../../src/rdbms/ddl.txt:209 +#, fuzzy +msgid "System columns" +msgstr "Системні колонки" + +#: ../../src/rdbms/ddl.txt:210 +#, fuzzy +msgid "" +"Every table has several system columns that are implicitly defined by the " +"system. Therefore, these names cannot be used as names of user-defined " +"columns. These columns cannot be used in the generated columns (except " +"``tableoid``). Columns are:" +msgstr "" +"Кожна таблиця має декілька системних стовпців, які неявно визначені " +"системою. Тому ці назви не можуть бути використані як назви стовпців, " +"визначених користувачем. Ці стовпці не можуть бути використані у створених " +"стовпцях (крім ``tableoid``). Стовпці можна:" + +#: ../../src/rdbms/ddl.txt:215 +msgid "``tableoid``" +msgstr "``tableoid``" + +#: ../../src/rdbms/ddl.txt:216 +msgid "``xmin``" +msgstr "``xmin``" + +#: ../../src/rdbms/ddl.txt:217 +msgid "``cmin``" +msgstr "``cmin``" + +#: ../../src/rdbms/ddl.txt:218 +msgid "``xmax``" +msgstr "``xmax``" + +#: ../../src/rdbms/ddl.txt:219 +msgid "``cmax``" +msgstr "``cmax``" + +#: ../../src/rdbms/ddl.txt:220 +msgid "``ctid``" +msgstr "``ctid``" + +#: ../../src/rdbms/ddl.txt:223 +#, fuzzy +msgid "Modify objects" +msgstr "Модифікація об'єктів" + +#: ../../src/rdbms/ddl.txt:225 +#, fuzzy +msgid "" +"When you create a table and you realize that you made a mistake, or the " +"requirements of the application change, you can drop the table and create it " +"again. But this is not a convenient option if the table is already filled " +"with data, or if the table is referenced by other database objects." +msgstr "" +"Коли ви створюєте таблицю і розумієте, що зробили помилку, або вимоги " +"програми змінюються, ви можете видалити таблицю і створити її заново. Але це " +"не дуже зручний варіант, якщо таблиця вже заповнена даними або якщо на неї " +"посилаються інші об'єкти бази даних." + +#: ../../src/rdbms/ddl.txt:230 +#, fuzzy +msgid "" +"PostgreSQL provides a family of commands to make modifications to existing " +"tables. You can:" +msgstr "" +"PostgreSQL надає сімейство команд для внесення змін до існуючих таблиць. Ви " +"можете це робити:" + +#: ../../src/rdbms/ddl.txt:233 +#, fuzzy +msgid "add columns" +msgstr "додати стовпці" + +#: ../../src/rdbms/ddl.txt:234 +#, fuzzy +msgid "remove columns" +msgstr "видалити стовпці" + +#: ../../src/rdbms/ddl.txt:235 +#, fuzzy +msgid "add constraints" +msgstr "додати обмеження" + +#: ../../src/rdbms/ddl.txt:236 +#, fuzzy +msgid "remove constraints" +msgstr "зняти обмеження" + +#: ../../src/rdbms/ddl.txt:237 +#, fuzzy +msgid "change default values" +msgstr "змінити значення за замовчуванням" + +#: ../../src/rdbms/ddl.txt:238 +#, fuzzy +msgid "change column data types" +msgstr "змінити типи даних стовпців" + +#: ../../src/rdbms/ddl.txt:239 +#, fuzzy +msgid "rename columns" +msgstr "перейменувати стовпці" + +#: ../../src/rdbms/ddl.txt:240 +#, fuzzy +msgid "rename tables" +msgstr "перейменовувати таблиці" + +#: ../../src/rdbms/ddl.txt:242 +#, fuzzy +msgid "All these actions are performed using the ``ALTER TABLE`` command." +msgstr "Всі ці дії виконуються за допомогою команди ``ALTER TABLE``." + +#: ../../src/rdbms/ddl.txt:245 +#, fuzzy +msgid "Adding a column" +msgstr "Додавання стовпця" + +#: ../../src/rdbms/ddl.txt:247 +#, fuzzy +msgid "To add a column, use a command like:" +msgstr "Щоб додати стовпець, використовуйте команду like:" + +#: ../../src/rdbms/ddl.txt:259 +#, fuzzy +msgid "" +"Constraints can be also defined on the column at the same time, using " +"general syntax." +msgstr "" +"Обмеження можуть бути визначені для стовпця одночасно, використовуючи " +"загальний синтаксис." + +#: ../../src/rdbms/ddl.txt:262 +#, fuzzy +msgid "" +"In fact all the options that can be applied to a column description in " +"``CREATE TABLE`` can be used here. Keep in mind however that the default " +"value must satisfy the given constraints, or the ``ADD`` will fail." +msgstr "" +"Фактично, тут можна використовувати всі опції, які можна застосувати до " +"опису стовпця у ``CREATE TABLE``. Однак майте на увазі, що значення за " +"замовчуванням має задовольняти заданим обмеженням, інакше команда ``ADD`` не " +"спрацює." + +#: ../../src/rdbms/ddl.txt:267 +#, fuzzy +msgid "Adding a constraint" +msgstr "Додавання обмеження" + +#: ../../src/rdbms/ddl.txt:269 +#, fuzzy +msgid "To add a constraint, the table constraint syntax is used." +msgstr "Для додавання обмеження використовується синтаксис обмеження таблиці." + +#: ../../src/rdbms/ddl.txt:276 +#, fuzzy +msgid "Other examples:" +msgstr "Інші приклади:" + +#: ../../src/rdbms/ddl.txt:286 +#, fuzzy +msgid "" +"To add a non-null constraint, which cannot be written as a table constraint, " +"use this syntax:" +msgstr "" +"Щоб додати ненульове обмеження, яке не можна записати як обмеження таблиці, " +"використовуйте цей синтаксис:" + +#: ../../src/rdbms/ddl.txt:295 +#, fuzzy +msgid "Changing a column's default value" +msgstr "Зміна значення стовпця за замовчуванням" + +#: ../../src/rdbms/ddl.txt:297 +#, fuzzy +msgid "To set a new default for a column, use command like this:" +msgstr "" +"Щоб встановити нове значення за замовчуванням для стовпця, скористайтеся " +"такою командою:" + +#: ../../src/rdbms/ddl.txt:304 +#, fuzzy +msgid "To remove any default value, use:" +msgstr "Щоб видалити будь-яке значення за замовчуванням, використовуйте" + +#: ../../src/rdbms/ddl.txt:311 +#, fuzzy +msgid "This is effectively the same as settings the default to ``NULL``." +msgstr "Це фактично те саме, що встановити значення за замовчуванням ``NULL``." + +#: ../../src/rdbms/ddl.txt:314 +#, fuzzy +msgid "Changing a column's data type" +msgstr "Зміна типу даних стовпця" + +#: ../../src/rdbms/ddl.txt:316 +#, fuzzy +msgid "To convert a column to a different data type, use a command like this:" +msgstr "" +"Щоб перетворити стовпець в інший тип даних, скористайтеся такою командою:" + +#: ../../src/rdbms/ddl.txt:323 +#, fuzzy +msgid "" +"This will succeed only if each existing entry in the column can be converted " +"to the new type by an implicit cast. If a more complex conversion is needed, " +"you can add a ``USING`` clause that specifies how to compute the new values " +"from old ones." +msgstr "" +"Це вдасться лише у тому випадку, якщо кожен існуючий запис у стовпчику може " +"бути перетворено до нового типу неявним приведенням. Якщо потрібне більш " +"складне перетворення, ви можете додати речення ``ВИКОРИСТАННЯ``, яке вказує, " +"як обчислювати нові значення зі старих." + +#: ../../src/rdbms/ddl.txt:328 +#, fuzzy +msgid "" +"PostgreSQL will attempt to convert the column's default value (if any) to " +"the new type, as well as any constraint that involve the column. But these " +"conversions might fail, or might produce surprising results. It's often best " +"to drop any constraints on the column before altering its type, and then add " +"back suitably modified constraints afterwards." +msgstr "" +"PostgreSQL спробує перетворити значення стовпця за замовчуванням (якщо таке " +"є) до нового типу, а також будь-які обмеження, пов'язані зі стовпцем. Але ці " +"перетворення можуть виявитися невдалими або призвести до несподіваних " +"результатів. Часто краще зняти будь-які обмеження зі стовпця перед зміною " +"його типу, а потім додати назад відповідним чином змінені обмеження." + +#: ../../src/rdbms/ddl.txt:335 +#, fuzzy +msgid "Renaming objects" +msgstr "Перейменування об'єктів" + +#: ../../src/rdbms/ddl.txt:337 +#, fuzzy +msgid "To rename objects use ``RENAME`` command, like this:" +msgstr "" +"Для перейменування об'єктів використовуйте команду ``RENAME``, наприклад, " +"так:" + +#: ../../src/rdbms/ddl.txt:346 +#, fuzzy +msgid "To rename a table:" +msgstr "Перейменувати таблицю:" + +#: ../../src/rdbms/ddl.txt:354 +#, fuzzy +msgid "Remove objects" +msgstr "Видалення об'єктів" + +#: ../../src/rdbms/ddl.txt:357 +#, fuzzy +msgid "Removing tables" +msgstr "Видалення столів" + +#: ../../src/rdbms/ddl.txt:359 +#, fuzzy +msgid "``DROP`` command is used to remove objects." +msgstr "команда ``DROP`` використовується для видалення об'єктів." + +#: ../../src/rdbms/ddl.txt:365 +#, fuzzy +msgid "" +"Remember, attempting to remove a table that does not exist is an error. " +"Nevertheless, it is common in SQL script files to unconditionally try to " +"drop each table before creating it, ignoring any error message, so that the " +"script works whether or not the table exists. ``IF EXISTS`` variant can be " +"used to avoid the error message, but this is not standard SQL." +msgstr "" +"Пам'ятайте, що спроба видалити неіснуючу таблицю є помилкою. Тим не менш, у " +"файлах скриптів SQL часто зустрічається безумовна спроба видалити кожну " +"таблицю перед її створенням, ігноруючи будь-які повідомлення про помилки, " +"щоб скрипт працював незалежно від того, чи існує таблиця чи ні. варіант " +"``ЯКЩО ІСНУЄ`` можна використовувати для уникнення повідомлення про помилку, " +"але це не є стандартним для SQL." + +#: ../../src/rdbms/ddl.txt:375 +#, fuzzy +msgid "" +"In case there are other objects referencing the object to drop ``CASCADE`` " +"may be used to also remove any referencing objects." +msgstr "" +"Якщо є інші об'єкти, що посилаються на об'єкт, який потрібно вилучити, " +"``CASCADE`` може бути використано для вилучення всіх об'єктів, що " +"посилаються на об'єкт, який потрібно вилучити." + +#: ../../src/rdbms/ddl.txt:379 +#, fuzzy +msgid "Removing a column" +msgstr "Видалення стовпця" + +#: ../../src/rdbms/ddl.txt:381 +#, fuzzy +msgid "To remove a column, use ``DROP`` command like this:" +msgstr "Щоб видалити стовпець, використовуйте команду ``DROP`` ось так:" + +#: ../../src/rdbms/ddl.txt:388 +#, fuzzy +msgid "" +"Whatever data was in the column disappears. Table constraints involving the " +"column are dropped, too. However, if the column is referenced by a foreign " +"key constraint of another table, PostgreSQL will not silently drop that " +"constraint. You can authorize dropping everything that depends on the column " +"by adding ``CASCADE``:" +msgstr "" +"Усі дані, що були у стовпчику, зникають. Обмеження таблиці, що стосуються " +"стовпця, також зникають. Однак, якщо на стовпець посилається обмеження " +"зовнішнього ключа іншої таблиці, PostgreSQL не буде мовчки вилучати це " +"обмеження. Ви можете дозволити вилучення всього, що залежить від стовпця, " +"додавши ``CASCADE``:" + +#: ../../src/rdbms/ddl.txt:400 +#, fuzzy +msgid "Removing a constraint" +msgstr "Зняття обмеження" + +#: ../../src/rdbms/ddl.txt:402 +#, fuzzy +msgid "" +"To remove a constraint you need to know its name. The **psql** command ``\\d " +"table_name`` can be helpful to get the detailed information on a specific " +"table, including all constraints' names assigned to it." +msgstr "" +"Щоб видалити обмеження, вам потрібно знати його ім'я. Команда **psql** ``\\d " +"ім'я_таблиці`` може бути корисною для отримання детальної інформації про " +"конкретну таблицю, включно з іменами всіх обмежень, призначених для неї." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/dml.po b/src/_locales/uk/LC_MESSAGES/rdbms/dml.po new file mode 100644 index 000000000..e05a47ca1 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/dml.po @@ -0,0 +1,280 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 03:53+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/rdbms/dml.txt:-1 +#, fuzzy +msgid "Data manipulation language, DML" +msgstr "Мова маніпулювання даними, DML" + +#: ../../src/rdbms/dml.txt:-1 +#, fuzzy +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/dml.txt:-1 +#, fuzzy +msgid "sql, db, database, dml, insert, update, delete" +msgstr "sql, db, база даних, dml, вставка, оновлення, видалення" + +#: ../../src/rdbms/dml.txt:8 +#, fuzzy +msgid "Data Manipulation Language" +msgstr "Мова маніпулювання даними" + +#: ../../src/rdbms/dml.txt:10 +#, fuzzy +msgid "" +":abbr:`DML (Data Manipulation Language)` is a subset of SQL used for adding, " +"updating, and deleting data within database tables." +msgstr "" +"abbr:`DML (Data Manipulation Language) - це підмножина мови SQL, яка " +"використовується для додавання, оновлення та видалення даних у таблицях бази " +"даних." + +#: ../../src/rdbms/dml.txt:13 +#, fuzzy +msgid "``SELECT`` used to query data from the database" +msgstr "``SELECT`` використовується для запиту даних з бази даних" + +#: ../../src/rdbms/dml.txt:14 +#, fuzzy +msgid "``INSERT`` used to insert new data into a table" +msgstr "``INSERT`` використовується для вставки нових даних у таблицю" + +#: ../../src/rdbms/dml.txt:15 +#, fuzzy +msgid "``UPDATE`` used to modify existing data" +msgstr "''UPDATE'' використовується для зміни існуючих даних" + +#: ../../src/rdbms/dml.txt:16 +#, fuzzy +msgid "``DELETE`` used to remove data from a table" +msgstr "``DELETE`` використовується для видалення даних з таблиці" + +#: ../../src/rdbms/dml.txt:23 +#, fuzzy +msgid "Creating new records" +msgstr "Створення нових записів" + +#: ../../src/rdbms/dml.txt:25 +#, fuzzy +msgid "" +"When a table is created, it contains no data. Inserting data will populate a " +"table with values. Data is inserted one row at a time. You can also insert " +"multiple rows with a single command. But it impossible to insert something " +"that is not a complete row." +msgstr "" +"Коли таблицю створено, вона не містить даних. Вставлення даних заповнить " +"таблицю значеннями. Дані вставляються по одному рядку за раз. Ви також " +"можете вставити кілька рядків за допомогою однієї команди. Але неможливо " +"вставити щось, що не є повним рядком." + +#: ../../src/rdbms/dml.txt:30 +#, fuzzy +msgid "To create a new row use ``INSERT`` command." +msgstr "Для створення нового рядка використовується команда ``INSERT``." + +#: ../../src/rdbms/dml.txt:32 +#, fuzzy +msgid "" +"The data values are listed in the order in which the columns appear in the " +"table, separated by commas. This syntax has the drawback that you need to " +"know the order of the columns in the table. To avoid this you can also list " +"the columns explicitly. If you don't have values for all the columns, you " +"can omit some of them. In that case, the columns will be filled with their " +"default values." +msgstr "" +"Значення даних перераховані в порядку, в якому стовпці з'являються в " +"таблиці, розділені комами. Цей синтаксис має той недолік, що вам потрібно " +"знати порядок стовпців у таблиці. Щоб уникнути цього, ви також можете " +"перерахувати стовпці явно. Якщо ви не маєте значень для всіх стовпців, ви " +"можете опустити деякі з них. У цьому випадку стовпці будуть заповнені " +"значеннями за замовчуванням." + +#: ../../src/rdbms/dml.txt:39 +#, fuzzy +msgid "Create publisher table" +msgstr "Створення таблиці видавців" + +#: ../../src/rdbms/dml.txt:45 +#, fuzzy +msgid "Insert data to publisher table" +msgstr "Вставка даних до таблиці видавця" + +#: ../../src/rdbms/dml.txt:51 +#, fuzzy +msgid "You can insert multiple rows in a single command." +msgstr "Ви можете вставити кілька рядків однією командою." + +#: ../../src/rdbms/dml.txt:53 +#, fuzzy +msgid "Create author table" +msgstr "Створення таблиці авторів" + +#: ../../src/rdbms/dml.txt:59 +#, fuzzy +msgid "Inserting multiple values at a time" +msgstr "Вставлення декількох значень одночасно" + +#: ../../src/rdbms/dml.txt:66 +#, fuzzy +msgid "" +"There is a reference to the \"publisher\" table present below. Think of it " +"like placing the publisher information directly into \"book\" table for now." +msgstr "" +"Нижче є посилання на таблицю \"видавництво\". Подумайте про це, як про " +"розміщення інформації про видавця безпосередньо в таблиці \"книга\"." + +#: ../../src/rdbms/dml.txt:69 +#, fuzzy +msgid "Create book table" +msgstr "Створити таблицю книг" + +#: ../../src/rdbms/dml.txt:75 +#, fuzzy +msgid "Inserting records from file" +msgstr "Вставка записів з файлу" + +#: ../../src/rdbms/dml.txt:82 +#, fuzzy +msgid "Modifying records" +msgstr "Змінення записів" + +#: ../../src/rdbms/dml.txt:84 +#, fuzzy +msgid "" +"The modification of data that is already in the database is referred as " +"updating. To update the existing rows, use the ``UPDATE`` command. This " +"requires three pieces of information:" +msgstr "" +"Зміна даних, які вже є в базі даних, називається оновленням. Щоб оновити " +"існуючі рядки, скористайтеся командою ``UPDATE``. Для цього потрібні три " +"частини інформації:" + +#: ../../src/rdbms/dml.txt:88 +#, fuzzy +msgid "The name of the table and column(s) to update" +msgstr "Назва таблиці та стовпця(ів) для оновлення" + +#: ../../src/rdbms/dml.txt:89 +#, fuzzy +msgid "The new value of the column(s)" +msgstr "Нове значення стовпця(ів)" + +#: ../../src/rdbms/dml.txt:90 +#, fuzzy +msgid "Which row(s) to update" +msgstr "Який(і) рядок(и) оновити" + +#: ../../src/rdbms/dml.txt:96 +#, fuzzy +msgid "" +"This might cause zero, one, or many rows to be updated. The update syntax is " +"pretty straightforward. First the key word ``UPDATE`` followed by the table " +"name. Next is the key word ``SET`` followed by the column name, an equal " +"sign, and the new column value. The new column value can be any scalar " +"expression, not just a constant. More than one column can be updated at a " +"time by listing more than one assignment in the ``SET`` clause." +msgstr "" +"Це може призвести до оновлення нульового, одного або багатьох рядків. " +"Синтаксис оновлення досить простий. Спочатку ключове слово ``UPDATE``, за " +"яким слідує назва таблиці. Далі йде ключове слово ``SET``, за яким слідує " +"назва стовпця, знак рівності і нове значення стовпця. Нове значення стовпця " +"може бути будь-яким скалярним виразом, а не лише константою. Більш ніж один " +"стовпчик можна оновити за один раз, вказавши більше ніж одне присвоєння у " +"реченні ``SET``." + +#: ../../src/rdbms/dml.txt:105 +#, fuzzy +msgid "" +"``WHERE`` clause is optional, but it limits the rows affected by ``UPDATE`` " +"command. If there is no limitations all the records within a table will be " +"updated with new values." +msgstr "" +"речення ``WHERE`` є необов'язковим, але воно обмежує рядки, на які впливає " +"команда ``UPDATE``. Якщо обмежень не вказано, то всі записи в таблиці буде " +"оновлено новими значеннями." + +#: ../../src/rdbms/dml.txt:114 +#, fuzzy +msgid "Removing data" +msgstr "Видалення даних" + +#: ../../src/rdbms/dml.txt:116 +#, fuzzy +msgid "" +"So far we have explained how to add data to tables and how to change data. " +"What remains to discuss how to remove data that is no longer needed. Just as " +"adding data is only possible in whole rows, you can only remove entire rows " +"from a table." +msgstr "" +"Досі ми пояснювали, як додавати дані до таблиць і як їх змінювати. " +"Залишилося обговорити, як видалити дані, які більше не потрібні. Так само, " +"як додавання даних можливе лише цілими рядками, ви можете видаляти дані з " +"таблиці лише цілими рядками." + +#: ../../src/rdbms/dml.txt:121 +#, fuzzy +msgid "" +"You use ``DELETE`` command to remove rows; the syntax is very similar to the " +"``UPDATE`` command." +msgstr "" +"Для видалення рядків використовується команда ``DELETE``, синтаксис якої " +"дуже схожий на команду ``UPDATE``." + +#: ../../src/rdbms/dml.txt:128 +#, fuzzy +msgid "If you simply write:" +msgstr "Якщо просто писати:" + +#: ../../src/rdbms/dml.txt:134 +#, fuzzy +msgid "then all rows in the table will be deleted!" +msgstr "то всі рядки в таблиці будуть видалені!" + +#: ../../src/rdbms/dml.txt:137 +#, fuzzy +msgid "Returning data from modified rows" +msgstr "Повернення даних зі змінених рядків" + +#: ../../src/rdbms/dml.txt:139 +#, fuzzy +msgid "" +"Sometimes it is useful to obtain data from modified rows while they are " +"being manipulated. The ``INSERT``, ``UPDATE`` and ``DELETE`` commands all " +"have an optional ``RETURNING`` clause that supports this. Use of " +"``RETURNING`` avoids performing an extra database query to collect the data, " +"and is especially valuable when it would otherwise be difficult to identify " +"the modified rows reliably." +msgstr "" +"Іноді буває корисно отримати дані зі змінених рядків під час маніпуляцій з " +"ними. Команди ``INSERT``, ``UPDATE`` і ``DELETE`` мають необов'язковий " +"параметр ``RETURNING``, який підтримує цю можливість. Використання " +"``ПОВЕРНЕННЯ`` дозволяє уникнути виконання додаткового запиту до бази даних " +"для збору даних і є особливо цінним, коли інакше було б важко достовірно " +"ідентифікувати змінені рядки." + +#: ../../src/rdbms/dml.txt:155 +#, fuzzy +msgid "For example the query above provides the identifiers to new rows." +msgstr "Наприклад, наведений вище запит надає ідентифікатори для нових рядків." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po new file mode 100644 index 000000000..acc665e2c --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po @@ -0,0 +1,1183 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 03:58+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/rdbms/functions.txt:3 +#, fuzzy +msgid "Functions and operators" +msgstr "Функції та оператори" + +#: ../../src/rdbms/functions.txt:6 +#, fuzzy +msgid "Logical and comparison operators" +msgstr "Логічні оператори та оператори порівняння" + +#: ../../src/rdbms/functions.txt:8 +#, fuzzy +msgid "The usual logical operators are still available:" +msgstr "Звичні логічні оператори все ще доступні:" + +#: ../../src/rdbms/functions.txt:16 +#, fuzzy +msgid "" +"SQL uses a three-valued logic system with ``true``, ``false``, and ``null``, " +"which represents *unknown*." +msgstr "" +"SQL використовує тризначну логічну систему з ``істиною``, ``хибністю`` і " +"``нулем``, який представляє собою *невідоме*." + +#: ../../src/rdbms/functions.txt:19 +#, fuzzy +msgid "Truth table" +msgstr "Таблиця істини" + +#: ../../src/rdbms/functions.txt:22 +msgid "``a``" +msgstr "``a``" + +#: ../../src/rdbms/functions.txt:22 +msgid "``b``" +msgstr "``b``" + +#: ../../src/rdbms/functions.txt:22 +msgid "``a AND b``" +msgstr "``a AND b``" + +#: ../../src/rdbms/functions.txt:22 +msgid "``a OR b``" +msgstr "``a OR b``" + +#: ../../src/rdbms/functions.txt:22 +msgid "``NOT a``" +msgstr "``NOT a``" + +#: ../../src/rdbms/functions.txt:24 ../../src/rdbms/functions.txt:26 +#: ../../src/rdbms/functions.txt:28 ../../src/rdbms/functions.txt:30 +#: ../../src/rdbms/functions.txt:32 +msgid "``TRUE``" +msgstr "``TRUE``" + +#: ../../src/rdbms/functions.txt:24 ../../src/rdbms/functions.txt:26 +#: ../../src/rdbms/functions.txt:28 ../../src/rdbms/functions.txt:30 +#: ../../src/rdbms/functions.txt:32 +msgid "``FALSE``" +msgstr "``FALSE``" + +#: ../../src/rdbms/functions.txt:28 ../../src/rdbms/functions.txt:32 +#: ../../src/rdbms/functions.txt:34 +msgid "``NULL``" +msgstr "``NULL``" + +#: ../../src/rdbms/functions.txt:37 +#, fuzzy +msgid "" +"The operators ``AND`` and ``OR`` are commutative, that is, you can switch " +"the left and right operands without affecting the result. However, it is not " +"guaranteed that the left operand is evaluated before the right operand." +msgstr "" +"Оператори ``AND`` і ``OR`` є комутативними, тобто ви можете міняти місцями " +"лівий і правий операнди без впливу на результат. Однак не гарантується, що " +"лівий операнд буде обчислено раніше правого." + +#: ../../src/rdbms/functions.txt:42 +#, fuzzy +msgid "Comparison operators" +msgstr "Оператори порівняння" + +#: ../../src/rdbms/functions.txt:44 +#, fuzzy +msgid "The usual comparison operators are available." +msgstr "Доступні звичайні оператори порівняння." + +#: ../../src/rdbms/functions.txt:47 +#, fuzzy +msgid "Operator" +msgstr "Оператор" + +#: ../../src/rdbms/functions.txt:47 ../../src/rdbms/functions.txt:70 +#, fuzzy +msgid "Description" +msgstr "Опис" + +#: ../../src/rdbms/functions.txt:49 +msgid "``datatype < datatype -> boolean``" +msgstr "``datatype < datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:49 +#, fuzzy +msgid "Less than" +msgstr "Менше ніж" + +#: ../../src/rdbms/functions.txt:51 +msgid "``datatype > datatype -> boolean``" +msgstr "``datatype > datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:51 +#, fuzzy +msgid "Greater than" +msgstr "Більше ніж" + +#: ../../src/rdbms/functions.txt:53 +msgid "``datatype <= datatype -> boolean``" +msgstr "``datatype <= datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:53 +#, fuzzy +msgid "Less than or equal to" +msgstr "Менше ніж або дорівнює" + +#: ../../src/rdbms/functions.txt:55 +msgid "``datatype >= datatype -> boolean``" +msgstr "``datatype >= datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:55 +#, fuzzy +msgid "Greater than or equal to" +msgstr "Більше або дорівнює" + +#: ../../src/rdbms/functions.txt:57 +msgid "``datatype = datatype -> boolean``" +msgstr "``datatype = datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:57 +#, fuzzy +msgid "Equal" +msgstr "Однаковий" + +#: ../../src/rdbms/functions.txt:59 +msgid "``datatype <> datatype -> boolean``" +msgstr "``datatype <> datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:59 ../../src/rdbms/functions.txt:61 +#, fuzzy +msgid "Not equal" +msgstr "Не дорівнює" + +#: ../../src/rdbms/functions.txt:61 +msgid "``datatype != datatype -> boolean``" +msgstr "``datatype != datatype -> boolean``" + +#: ../../src/rdbms/functions.txt:65 +#, fuzzy +msgid "Mathematical functions and operators" +msgstr "Математичні функції та оператори" + +#: ../../src/rdbms/functions.txt:67 +#, fuzzy +msgid "Mathematical operators and provided for many PostgreSQL types." +msgstr "Математичні оператори і передбачені для багатьох типів PostgreSQL." + +#: ../../src/rdbms/functions.txt:70 +#, fuzzy +msgid "Operation" +msgstr "Операція" + +#: ../../src/rdbms/functions.txt:72 +msgid "``numeric_type + numeric_type``" +msgstr "``numeric_type + numeric_type``" + +#: ../../src/rdbms/functions.txt:72 +msgid "Addition" +msgstr "Додавання" + +#: ../../src/rdbms/functions.txt:74 +msgid "``+ numeric_type``" +msgstr "``+ numeric_type``" + +#: ../../src/rdbms/functions.txt:74 +msgid "Unary plus (no operation)" +msgstr "Унарний плюс (без операції)" + +#: ../../src/rdbms/functions.txt:76 +msgid "``numeric_type - numeric_type``" +msgstr "``numeric_type - numeric_type``" + +#: ../../src/rdbms/functions.txt:76 +msgid "Subtraction" +msgstr "Віднімання" + +#: ../../src/rdbms/functions.txt:78 +msgid "``- numeric_type``" +msgstr "``- numeric_type``" + +#: ../../src/rdbms/functions.txt:78 +msgid "Negation" +msgstr "Заперечення" + +#: ../../src/rdbms/functions.txt:80 +msgid "``numeric_type * numeric_type``" +msgstr "``numeric_type * numeric_type``" + +#: ../../src/rdbms/functions.txt:80 +msgid "Multiplication" +msgstr "Множення" + +#: ../../src/rdbms/functions.txt:82 +msgid "``numeric_type / numeric_type``" +msgstr "``numeric_type / numeric_type``" + +#: ../../src/rdbms/functions.txt:82 +msgid "" +"Division (for integral types, division truncates the result towards zero)" +msgstr "Ділення (для інтегральних типів ділення усікає результат до нуля)" + +#: ../../src/rdbms/functions.txt:86 +msgid "``numeric_type % numeric_type``" +msgstr "``numeric_type % numeric_type``" + +#: ../../src/rdbms/functions.txt:86 +#, fuzzy +msgid "" +"Modulo (remainder); available for ``smallint``, ``integer``, ``bigint``, and " +"``numeric``" +msgstr "" +"За модулем (залишок); доступний для ``smallint``, ``integer``, ``bigint`` та " +"``numeric``" + +#: ../../src/rdbms/functions.txt:90 +msgid "``numeric ^ numeric`` ``double precision ^ double precision``" +msgstr "``numeric ^ numeric`` ``double precision ^ double precision``" + +#: ../../src/rdbms/functions.txt:90 +msgid "Exponentiation" +msgstr "Піднесення до степеня" + +#: ../../src/rdbms/functions.txt:93 +msgid "``|/ double precision``" +msgstr "``|/ double precision``" + +#: ../../src/rdbms/functions.txt:93 +msgid "Square root" +msgstr "Квадратний корінь" + +#: ../../src/rdbms/functions.txt:95 +msgid "``||/ double precision``" +msgstr "``||/ double precision``" + +#: ../../src/rdbms/functions.txt:95 +msgid "Cube root" +msgstr "Кубічний корінь" + +#: ../../src/rdbms/functions.txt:97 +msgid "``@ numeric_type``" +msgstr "``@ numeric_type``" + +#: ../../src/rdbms/functions.txt:97 +msgid "Absolute value" +msgstr "Абсолютне значення" + +#: ../../src/rdbms/functions.txt:99 +msgid "``integral_type & integral_type``" +msgstr "``integral_type & integral_type``" + +#: ../../src/rdbms/functions.txt:99 +msgid "Bitwise AND" +msgstr "Побітове І" + +#: ../../src/rdbms/functions.txt:101 +msgid "``integral_type | integral_type``" +msgstr "``integral_type | integral_type``" + +#: ../../src/rdbms/functions.txt:101 +msgid "Bitwise OR" +msgstr "Порозрядне АБО" + +#: ../../src/rdbms/functions.txt:103 +msgid "``integral_type # integral_type``" +msgstr "``integral_type # integral_type``" + +#: ../../src/rdbms/functions.txt:103 +msgid "Bitwise exclusive OR" +msgstr "Побітове виключне АБО" + +#: ../../src/rdbms/functions.txt:105 +msgid "``~ integral_type``" +msgstr "``~ integral_type``" + +#: ../../src/rdbms/functions.txt:105 +msgid "Bitwise NOT" +msgstr "Побітове І" + +#: ../../src/rdbms/functions.txt:107 +msgid "``integral_type << integer``" +msgstr "``integral_type << integer``" + +#: ../../src/rdbms/functions.txt:107 +msgid "Bitwise shift left" +msgstr "Порозрядний зсув вліво" + +#: ../../src/rdbms/functions.txt:109 +msgid "``integral_type >> integer``" +msgstr "``integral_type >> integer``" + +#: ../../src/rdbms/functions.txt:109 +msgid "Bitwise shift right" +msgstr "Порозрядний зсув вправо" + +#: ../../src/rdbms/functions.txt:113 +#, fuzzy +msgid "String functions" +msgstr "Рядкові функції" + +#: ../../src/rdbms/functions.txt:115 +#, fuzzy +msgid "" +"*Strings* in this context include values of the types ``character``, " +"``text`` and ``character varying``." +msgstr "" +"*Рядки* у цьому контексті включають значення типів ``символ``, ``текст`` та " +"``символьна змінна``." + +#: ../../src/rdbms/functions.txt:120 +#, fuzzy +msgid "Concatenates the two strings." +msgstr "З'єднує два рядки." + +#: ../../src/rdbms/functions.txt:122 +msgid "``'Post' || 'greSQL' -> PostgreSQL``" +msgstr "``'Post' || 'greSQL' -> PostgreSQL``" + +#: ../../src/rdbms/functions.txt:127 +#, fuzzy +msgid "" +"Converts the non-string input to text, then concatenates the two strings. " +"(The non-string input cannot be of an array type, because that would create " +"ambiguity with the array ``||`` operators. If you want to concatenate an " +"array's text equivalent, cast it to text explicitly.)" +msgstr "" +"Перетворює нестрокове введення у текст, а потім об'єднує два рядки. " +"(Нестроковий ввід не може бути типом масиву, оскільки це створить " +"неоднозначність з операторами масиву ``||``. Якщо ви хочете об'єднати " +"текстовий еквівалент масиву, перетворіть його у текст явно)" + +#: ../../src/rdbms/functions.txt:132 +msgid "``'Value: ' || 42 -> Value: 42``" +msgstr "``'Value: ' || 42 -> Value: 42``" + +#: ../../src/rdbms/functions.txt:137 +#, fuzzy +msgid "Returns number of characters in the string." +msgstr "Повертає кількість символів у рядку." + +#: ../../src/rdbms/functions.txt:139 +msgid "``char_length('josé') -> 4``" +msgstr "``char_length('josé') -> 4``" + +#: ../../src/rdbms/functions.txt:143 +#, fuzzy +msgid "" +"Converts the string to all lower case, according to the rules of the " +"database's locale." +msgstr "" +"Перетворює рядок у всі регістри нижнього регістру відповідно до правил " +"локалі бази даних." + +#: ../../src/rdbms/functions.txt:146 +msgid "``lower('TOM') -> tom``" +msgstr "``lower('TOM') -> tom``" + +#: ../../src/rdbms/functions.txt:150 +#, fuzzy +msgid "" +"Removes the longest string containing only characters in characters (a space " +"by default) from the start of string." +msgstr "" +"Видаляє найдовший рядок, що містить лише символи (за замовчуванням пробіл) з " +"початку рядка." + +#: ../../src/rdbms/functions.txt:153 +msgid "``ltrim('zzzytest', 'xyz') -> test``" +msgstr "``ltrim('zzzytest', 'xyz') -> test``" + +#: ../../src/rdbms/functions.txt:157 +#, fuzzy +msgid "" +"Removes the longest string containing only characters in characters (a space " +"by default) from the end of string." +msgstr "" +"Видаляє з кінця рядка найдовший рядок, що містить лише символи (за " +"замовчуванням пробіл)." + +#: ../../src/rdbms/functions.txt:160 +msgid "``rtrim('testxxzx', 'xyz') -> test``" +msgstr "``rtrim('testxxzx', 'xyz') -> test``" + +#: ../../src/rdbms/functions.txt:164 +#, fuzzy +msgid "" +"Removes the longest string containing only characters in characters (a space " +"by default) from the start, end, or both ends (BOTH is the default) of " +"string." +msgstr "" +"Видаляє найдовший рядок, що містить лише символи (за замовчуванням пробіл) з " +"початку, кінця або обох кінців рядка (за замовчуванням BOTH)." + +#: ../../src/rdbms/functions.txt:168 +msgid "``trim(both 'xyz' from 'yxTomxx') -> Tom``" +msgstr "``trim(both 'xyz' from 'yxTomxx') -> Tom``" + +#: ../../src/rdbms/functions.txt:171 +#, fuzzy +msgid "Pattern matching" +msgstr "Зіставлення шаблонів" + +#: ../../src/rdbms/functions.txt:173 +#, fuzzy +msgid "" +"There are three separate approaches to pattern matching provided by " +"PostgreSQL: the traditional ``LIKE`` operator, the most recent ``SIMILAR " +"TO`` operator, and POSIX-style regular expressions." +msgstr "" +"У PostgreSQL існує три окремі підходи до зіставлення шаблонів: традиційний " +"оператор ``LIKE``, найновіший оператор ``SIMILAR TO`` та регулярні вирази у " +"стилі POSIX." + +#: ../../src/rdbms/functions.txt:177 +#, fuzzy +msgid "This section will focus on ``LIKE`` operator only." +msgstr "У цьому розділі буде розглянуто лише оператор ``LIKE``." + +#: ../../src/rdbms/functions.txt:184 +#, fuzzy +msgid "" +"The ``LIKE`` expression returns ``true`` if the ``string`` matches the " +"supplied ``pattern`` (as expected, the ``NOT LIKE`` expression returns " +"``false`` if ``LIKE`` returns ``true``, and vice versa)." +msgstr "" +"Вираз ``LIKE`` повертає значення ``true``, якщо ``рядок`` відповідає " +"заданому ``шаблону`` (як і очікувалося, вираз ``NOT LIKE`` повертає значення " +"``false``, якщо ``LIKE`` повертає значення ``true``, і навпаки)." + +#: ../../src/rdbms/functions.txt:188 +#, fuzzy +msgid "" +"If ``pattern`` does not contain percent signs or underscores, then the " +"pattern only represents the string itself; in than case ``LIKE`` acts like " +"the equals operator. An underscore (``_``) in ``pattern`` stands for " +"(matches) any single character; a percent sign (``%``) matches any sequence " +"of zero or more characters." +msgstr "" +"Якщо ``шаблон`` не містить знаків відсотків або підкреслень, то шаблон " +"представляє лише сам рядок; у цьому випадку ``LIKE`` діє як оператор " +"рівності. Підкреслення (``_``) у ``шаблоні`` означає (відповідає) будь-якому " +"окремому символу; знак відсотка (``%``) відповідає будь-якій послідовності з " +"нуля або більше символів." + +#: ../../src/rdbms/functions.txt:194 +#, fuzzy +msgid "Some examples:" +msgstr "Деякі приклади" + +#: ../../src/rdbms/functions.txt:203 +#, fuzzy +msgid "" +"``LIKE`` patterns matching always covers the entire string. Therefore, if " +"it's desired to match a sequence anywhere within a string, the pattern must " +"start and end with a percent sign." +msgstr "" +"шаблони ``LIKE`` завжди збігаються з усім рядком. Тому, якщо потрібно знайти " +"послідовність у будь-якому місці рядка, шаблон повинен починатися і " +"закінчуватися знаком відсотка." + +#: ../../src/rdbms/functions.txt:207 +#, fuzzy +msgid "" +"To match a literal underscore or percent sing without matching other " +"characters the respective character in ``pattern`` must be preceded by the " +"escape character. The default escape character is backslash but a different " +"one can be selected by using the ``ESCAPE`` clause. To match the escape " +"character itself, write two escape characters." +msgstr "" +"Для відповідності буквеному підкресленню або відсотковому знаку без " +"відповідності іншим символам перед відповідним символом у ``шаблоні`` має " +"стояти екранований символ. Типовим символом за замовчуванням є зворотна коса " +"риска, але ви можете вибрати інший символ за допомогою пункту ``ESCAPE``. " +"Щоб відповідати самому символу екранування, напишіть два символи екранування." + +#: ../../src/rdbms/functions.txt:213 +#, fuzzy +msgid "" +"The key word ``ILIKE`` can be used instead of ``LIKE`` to make the match " +"case-insensitive according to the active locale. This is not in the SQL " +"standard but is a PostgreSQL extension." +msgstr "" +"Ключове слово ``ILIKE`` можна використовувати замість ``LIKE``, щоб зробити " +"збіг нечутливим до регістру відповідно до активної локалі. Це не передбачено " +"стандартом SQL, але є розширенням PostgreSQL." + +#: ../../src/rdbms/functions.txt:218 +#, fuzzy +msgid "Date/Time functions and operators" +msgstr "Функції та оператори дати/часу" + +#: ../../src/rdbms/functions.txt:221 +#, fuzzy +msgid "Extract" +msgstr "Витяг" + +#: ../../src/rdbms/functions.txt:225 +#, fuzzy +msgid "" +"The ``extract`` function retrieves subfields such as year or hour from date/" +"time value. The ``source`` must be a value expression of type ``timestamp``, " +"``time``, or ``interval``. Expressions of type ``date`` are cast to " +"``timestamp`` and can therefore be used as well. ``field`` is an identifier " +"or string that selects what field to extract from the source value. The " +"extract function returns value of type ``numeric``. The following are valid " +"field names:" +msgstr "" +"Функція ``extract`` витягує підполя, такі як рік або година, зі значення " +"дати/часу. Джерело має бути виразом типу ``мітка часу``, ``час`` або " +"``інтервал``. Вирази типу ``date`` приводяться до ``timestamp``, тому їх " +"також можна використовувати. ``поле`` - це ідентифікатор або рядок, який " +"вказує, яке саме поле потрібно витягти з вихідного значення. Функція extract " +"повертає значення типу ``число``. Нижче наведено припустимі імена полів:" + +#: ../../src/rdbms/functions.txt:233 +msgid "``centurty``" +msgstr "``centurty``" + +#: ../../src/rdbms/functions.txt:234 +msgid "``day``" +msgstr "``day``" + +#: ../../src/rdbms/functions.txt:235 +msgid "``decade``" +msgstr "``decade``" + +#: ../../src/rdbms/functions.txt:236 +msgid "``dow``" +msgstr "``dow``" + +#: ../../src/rdbms/functions.txt:237 +msgid "``doy``" +msgstr "``doy``" + +#: ../../src/rdbms/functions.txt:238 +msgid "``epoch``" +msgstr "``epoch``" + +#: ../../src/rdbms/functions.txt:239 +msgid "``hour``" +msgstr "``hour``" + +#: ../../src/rdbms/functions.txt:240 +msgid "``isodow``" +msgstr "``isodow``" + +#: ../../src/rdbms/functions.txt:241 +msgid "``isoyear``" +msgstr "``isoyear``" + +#: ../../src/rdbms/functions.txt:242 +msgid "``julian``" +msgstr "``julian``" + +#: ../../src/rdbms/functions.txt:243 +msgid "``microseconds``" +msgstr "``microseconds``" + +#: ../../src/rdbms/functions.txt:244 +msgid "``millennium``" +msgstr "``millennium``" + +#: ../../src/rdbms/functions.txt:245 +msgid "``milliseconds``" +msgstr "``milliseconds``" + +#: ../../src/rdbms/functions.txt:246 +msgid "``minute``" +msgstr "``minute``" + +#: ../../src/rdbms/functions.txt:247 +msgid "``month``" +msgstr "``month``" + +#: ../../src/rdbms/functions.txt:248 +msgid "``quarter``" +msgstr "``quarter``" + +#: ../../src/rdbms/functions.txt:249 +msgid "``second``" +msgstr "``second``" + +#: ../../src/rdbms/functions.txt:250 +msgid "``timezone``" +msgstr "``timezone``" + +#: ../../src/rdbms/functions.txt:251 +msgid "``timezone_hour``" +msgstr "``timezone_hour``" + +#: ../../src/rdbms/functions.txt:252 +msgid "``timezone_minute``" +msgstr "``timezone_minute``" + +#: ../../src/rdbms/functions.txt:253 +msgid "``week``" +msgstr "``week``" + +#: ../../src/rdbms/functions.txt:254 +msgid "``year``" +msgstr "``year``" + +#: ../../src/rdbms/functions.txt:256 +#, fuzzy +msgid "" +"The ``date_part`` function is modeled on the traditional Ingres equivalent " +"to the SQL-standard function ``extract``:" +msgstr "" +"Функція ``date_part`` змодельована на основі традиційного для Ingres " +"еквівалента стандартної функції SQL ``extract``:" + +#: ../../src/rdbms/functions.txt:262 +#, fuzzy +msgid "Current date/time" +msgstr "Поточна дата/час" + +#: ../../src/rdbms/functions.txt:264 +#, fuzzy +msgid "" +"PostgreSQL provides a number of functions that return values related to the " +"current date and time. These SQL-standard functions all return values based " +"on the start time of the current transaction:" +msgstr "" +"PostgreSQL надає ряд функцій, які повертають значення, пов'язані з поточною " +"датою і часом. Всі ці стандартні функції SQL повертають значення на основі " +"часу початку поточної транзакції:" + +#: ../../src/rdbms/functions.txt:272 +#, fuzzy +msgid "Deliver current time value with time zone." +msgstr "Надавати поточне значення часу з часовим поясом." + +#: ../../src/rdbms/functions.txt +#, fuzzy +msgid "precision" +msgstr "точність" + +#: ../../src/rdbms/functions.txt:275 ../../src/rdbms/functions.txt:285 +#: ../../src/rdbms/functions.txt:295 ../../src/rdbms/functions.txt:305 +#, fuzzy +msgid "" +"An optional parameter, which causes the result to be rounded to that many " +"fractional digits in the second field. Without a precision, the result is " +"given to the full available precision." +msgstr "" +"Необов'язковий параметр, який призводить до округлення результату до такої " +"кількості дробових цифр у другому полі. Якщо параметр не вказано, результат " +"буде надано з повною доступною точністю." + +#: ../../src/rdbms/functions.txt:282 +#, fuzzy +msgid "Deliver current timestamp value with time zone." +msgstr "Видавати поточне значення мітки часу з часовим поясом." + +#: ../../src/rdbms/functions.txt:292 ../../src/rdbms/functions.txt:302 +#, fuzzy +msgid "Deliver current time value without time zone." +msgstr "Надавати поточне значення часу без часового поясу." + +#: ../../src/rdbms/functions.txt:310 +#, fuzzy +msgid "Formatting functions" +msgstr "Функції форматування" + +#: ../../src/rdbms/functions.txt:314 +#, fuzzy +msgid "" +"The PostgreSQL formatting functions provide a powerful set of tools for " +"converting various data types (date/time, integer, floatting point, " +"numeric) to formatted strings and for converting from formatted strings to " +"specific data types." +msgstr "" +"Функції форматування PostgreSQL надають потужний набір інструментів для " +"перетворення різних типів даних (дата/час, цілі числа, числа з плаваючою " +"комою, числові) у відформатовані рядки і для перетворення з відформатованих " +"рядків у певні типи даних." + +#: ../../src/rdbms/functions.txt:319 +#, fuzzy +msgid "" +"These functions all follow a common calling convention: the first argument " +"is the value to be formatted and the second argument is a template that " +"defines the output or input format." +msgstr "" +"Всі ці функції мають загальну схему виклику: перший аргумент - це значення, " +"яке потрібно відформатувати, а другий аргумент - шаблон, який визначає " +"формат виводу або вводу." + +#: ../../src/rdbms/functions.txt:326 +#, fuzzy +msgid "Converts time stamp to string according to the given format." +msgstr "Конвертує мітку часу в рядок відповідно до заданого формату." + +#: ../../src/rdbms/functions.txt:328 +msgid "" +"``to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') → 05:31:12``" +msgstr "" +"``to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') → 05:31:12``" + +#: ../../src/rdbms/functions.txt:332 +#, fuzzy +msgid "Converts interval to string according to the given format." +msgstr "Перетворює інтервал у рядок відповідно до заданого формату." + +#: ../../src/rdbms/functions.txt:334 +msgid "``to_char(interval '15h 2m 12s', 'HH24:MI:SS') → 15:02:12``" +msgstr "``to_char(interval '15h 2m 12s', 'HH24:MI:SS') → 15:02:12``" + +#: ../../src/rdbms/functions.txt:338 +#, fuzzy +msgid "" +"Converts number to string according to the given format; available for " +"integer, bigint, numeric, real, double precision." +msgstr "" +"Перетворює число в рядок відповідно до заданого формату; доступний для " +"цілих, біґінтових, числових, дійсних, подвійної точності." + +#: ../../src/rdbms/functions.txt:341 +msgid "``to_char(125, '999') → 125``" +msgstr "``to_char(125, '999') → 125``" + +#: ../../src/rdbms/functions.txt:342 +msgid "``to_char(125.8::real, '999D9') → 125.8``" +msgstr "``to_char(125.8::real, '999D9') → 125.8``" + +#: ../../src/rdbms/functions.txt:343 +msgid "``to_char(-125.8, '999D99S') → 125.80-``" +msgstr "``to_char(-125.8, '999D99S') → 125.80-``" + +#: ../../src/rdbms/functions.txt:347 +#, fuzzy +msgid "Converts string to date according to the given format." +msgstr "Конвертує рядок у дату відповідно до заданого формату." + +#: ../../src/rdbms/functions.txt:349 +msgid "``to_date('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05``" +msgstr "``to_date('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05``" + +#: ../../src/rdbms/functions.txt:353 +#, fuzzy +msgid "Converts string to numeric according to the given format." +msgstr "Перетворює рядок у число відповідно до заданого формату." + +#: ../../src/rdbms/functions.txt:355 +msgid "``to_number('12,454.8-', '99G999D9S') → -12454.8``" +msgstr "``to_number('12,454.8-', '99G999D9S') → -12454.8``" + +#: ../../src/rdbms/functions.txt:359 +#, fuzzy +msgid "Converts string to time stamp according to the given format." +msgstr "Перетворює рядок у мітку часу відповідно до заданого формату." + +#: ../../src/rdbms/functions.txt:361 +msgid "``to_timestamp('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05 00:00:00-05``" +msgstr "" +"``to_timestamp('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05 00:00:00-05``" + +#: ../../src/rdbms/functions.txt:366 +#, fuzzy +msgid "Conditional expressions" +msgstr "Умовні вирази" + +#: ../../src/rdbms/functions.txt:369 +msgid "CASE" +msgstr "" + +#: ../../src/rdbms/functions.txt:371 +#, fuzzy +msgid "" +"The SQL ``CASE`` expression is a generic conditional expression, similar to " +"if/else statements in other programming languages." +msgstr "" +"Вираз SQL ``CASE`` - це загальний умовний вираз, подібний до операторів if/" +"else в інших мовах програмування." + +#: ../../src/rdbms/functions.txt:377 +#, fuzzy +msgid "COALESCE" +msgstr "НАГЛЕЮЄТЬСЯ" + +#: ../../src/rdbms/functions.txt:379 +#, fuzzy +msgid "" +"The ``COALESCE`` function returns the first of its arguments that is not " +"null. Null is returned only if all arguments are null. It is often used to " +"substitute a default value for null values when data is retrieved for " +"display:" +msgstr "" +"Функція ``COALESCE`` повертає перший з аргументів, який не є нульовим. Null " +"повертається лише у випадку, якщо всі аргументи є нульовими. Вона часто " +"використовується для заміни значення за замовчуванням на нульові значення, " +"коли дані отримуються для відображення:" + +#: ../../src/rdbms/functions.txt:387 +#, fuzzy +msgid "" +"This returns ``description`` if it is not null, otherwise " +"``short_description`` if it is not null, otherwise ``(none)``." +msgstr "" +"Повертає ``description``, якщо він не є нульовим, інакше " +"``short_description``, якщо він не є нульовим, інакше ``(none)``." + +#: ../../src/rdbms/functions.txt:390 +#, fuzzy +msgid "" +"Like the ``CASE`` expression, ``COALESCE`` only evaluates the arguments that " +"are needed to determine the result; that is, arguments to the right of the " +"first non-null argument are not evaluated." +msgstr "" +"Як і вираз ``CASE``, ``COALESCE`` обчислює тільки ті аргументи, які потрібні " +"для визначення результату; тобто аргументи праворуч від першого ненульового " +"аргументу не обчислюються." + +#: ../../src/rdbms/functions.txt:395 +#, fuzzy +msgid "NULLIF" +msgstr "NULLIF" + +#: ../../src/rdbms/functions.txt:401 +#, fuzzy +msgid "" +"The ``NULLIF`` function returns a null ``value_1`` equals ``value_2``; " +"otherwise it returns ``value_1``. This can be used to perform the inverse " +"operation of the ``COALESCE``." +msgstr "" +"Функція ``NULLIF`` повертає нульове ``значення_1``, що дорівнює " +"``значенню_2``; інакше повертає ``значення_1``. Це може бути використано для " +"виконання оберненої операції до ``COALESCE``." + +#: ../../src/rdbms/functions.txt:409 +#, fuzzy +msgid "" +"In the example above, if ``value`` is ``(none)``, null is returned, " +"otherwise the value of ``value`` is returned." +msgstr "" +"У наведеному вище прикладі, якщо ``value`` дорівнює ``(none)``, повертається " +"нуль, інакше повертається значення ``value``." + +#: ../../src/rdbms/functions.txt:412 +#, fuzzy +msgid "" +"The two arguments must be of comparable types. To be specific, they are " +"compared exactly as if you had written ``value_1 = value_2``, so there must " +"be a suitable ``=`` operator available." +msgstr "" +"Два аргументи повинні бути порівнянних типів. Якщо бути точним, вони " +"порівнюються так само, як якщо б ви написали ``value_1 = value_2``, тому має " +"бути відповідний оператор ``=``." + +#: ../../src/rdbms/functions.txt:416 +#, fuzzy +msgid "" +"The result has the same type as the first argument -- but there is a " +"subtlety. What is actual returned is the first argument of the implied ``=`` " +"operator, and in some cases that will have been promoted to match the second " +"argument's type." +msgstr "" +"Результат має той самий тип, що і перший аргумент - але є один нюанс. " +"Насправді повертається перший аргумент неявного оператора ``=``, і в деяких " +"випадках він буде приведений до типу другого аргументу." + +#: ../../src/rdbms/functions.txt:422 +#, fuzzy +msgid "Aggregate functions" +msgstr "Агрегатні функції" + +#: ../../src/rdbms/functions.txt:424 +#, fuzzy +msgid "" +"*Aggregate functions* compute a single result from a set of input values. " +"There are lots of these, and different RDBMS implement different aggregation " +"functions. In this section, we will focus on the most wide spread and often " +"used aggregate functions only." +msgstr "" +"*Агрегатні функції* обчислюють один результат з набору вхідних значень. Їх " +"існує багато, і різні СКБД реалізують різні функції агрегації. У цьому " +"розділі ми зосередимося лише на найбільш поширених і часто використовуваних " +"агрегатних функціях." + +#: ../../src/rdbms/functions.txt:429 +#, fuzzy +msgid "The general schema of using is presented below:" +msgstr "Загальна схема використання представлена нижче:" + +#: ../../src/rdbms/functions.txt:434 +#, fuzzy +msgid "Average value" +msgstr "Середнє значення" + +#: ../../src/rdbms/functions.txt:444 +#, fuzzy +msgid "" +"Computes the average (arithmetic mean) of all the non-null input values " +"within a group" +msgstr "" +"Обчислює середнє значення (середнє арифметичне) всіх ненульових вхідних " +"значень у групі" + +#: ../../src/rdbms/functions.txt:449 +#, fuzzy +msgid "" +"SQLite implements ``avg`` function in a manner to return ``NULL`` if and " +"only if all the inputs are nulls. On the other hand PostgreSQL will raise an " +"error in this scenario." +msgstr "" +"SQLite реалізує функцію ``avg`` таким чином, що вона повертає ``NULL`` тоді " +"і тільки тоді, коли всі вхідні дані є нулями. З іншого боку, PostgreSQL " +"видасть помилку у цьому випадку." + +#: ../../src/rdbms/functions.txt:464 ../../src/rdbms/functions.txt:500 +#: ../../src/rdbms/functions.txt:532 ../../src/rdbms/functions.txt:564 +#: ../../src/rdbms/functions.txt:602 +#, fuzzy +msgid "year" +msgstr "рік" + +#: ../../src/rdbms/functions.txt:464 ../../src/rdbms/functions.txt:500 +#: ../../src/rdbms/functions.txt:532 ../../src/rdbms/functions.txt:564 +#: ../../src/rdbms/functions.txt:602 +#, fuzzy +msgid "month" +msgstr "місяць" + +#: ../../src/rdbms/functions.txt:464 +#, fuzzy +msgid "avg" +msgstr "в середньому" + +#: ../../src/rdbms/functions.txt:466 ../../src/rdbms/functions.txt:468 +#: ../../src/rdbms/functions.txt:502 ../../src/rdbms/functions.txt:504 +#: ../../src/rdbms/functions.txt:534 ../../src/rdbms/functions.txt:536 +#: ../../src/rdbms/functions.txt:566 ../../src/rdbms/functions.txt:568 +#: ../../src/rdbms/functions.txt:604 ../../src/rdbms/functions.txt:606 +msgid "2013" +msgstr "2013" + +#: ../../src/rdbms/functions.txt:466 ../../src/rdbms/functions.txt:502 +#: ../../src/rdbms/functions.txt:534 ../../src/rdbms/functions.txt:566 +#: ../../src/rdbms/functions.txt:604 +msgid "11" +msgstr "11" + +#: ../../src/rdbms/functions.txt:466 +msgid "7798" +msgstr "7798" + +#: ../../src/rdbms/functions.txt:468 ../../src/rdbms/functions.txt:504 +#: ../../src/rdbms/functions.txt:536 ../../src/rdbms/functions.txt:568 +#: ../../src/rdbms/functions.txt:606 +msgid "12" +msgstr "12" + +#: ../../src/rdbms/functions.txt:468 +msgid "6709" +msgstr "6709" + +#: ../../src/rdbms/functions.txt:470 ../../src/rdbms/functions.txt:472 +#: ../../src/rdbms/functions.txt:474 ../../src/rdbms/functions.txt:506 +#: ../../src/rdbms/functions.txt:508 ../../src/rdbms/functions.txt:510 +#: ../../src/rdbms/functions.txt:538 ../../src/rdbms/functions.txt:540 +#: ../../src/rdbms/functions.txt:542 ../../src/rdbms/functions.txt:570 +#: ../../src/rdbms/functions.txt:572 ../../src/rdbms/functions.txt:574 +#: ../../src/rdbms/functions.txt:608 ../../src/rdbms/functions.txt:610 +#: ../../src/rdbms/functions.txt:612 +msgid "2014" +msgstr "2014" + +#: ../../src/rdbms/functions.txt:470 ../../src/rdbms/functions.txt:506 +#: ../../src/rdbms/functions.txt:538 ../../src/rdbms/functions.txt:570 +#: ../../src/rdbms/functions.txt:608 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/functions.txt:470 +msgid "6523" +msgstr "6523" + +#: ../../src/rdbms/functions.txt:472 ../../src/rdbms/functions.txt:508 +#: ../../src/rdbms/functions.txt:540 ../../src/rdbms/functions.txt:572 +#: ../../src/rdbms/functions.txt:610 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/functions.txt:472 +msgid "6832" +msgstr "6832" + +#: ../../src/rdbms/functions.txt:474 ../../src/rdbms/functions.txt:510 +#: ../../src/rdbms/functions.txt:542 ../../src/rdbms/functions.txt:574 +#: ../../src/rdbms/functions.txt:612 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/functions.txt:474 +msgid "10218" +msgstr "10218" + +#: ../../src/rdbms/functions.txt:478 +#, fuzzy +msgid "Count" +msgstr "Кількість" + +#: ../../src/rdbms/functions.txt:482 +#, fuzzy +msgid "Computes the number of input rows" +msgstr "Обчислює кількість вхідних рядків" + +#: ../../src/rdbms/functions.txt:487 +#, fuzzy +msgid "Computes the number of input rows in which the input value is not null" +msgstr "" +"Обчислює кількість вхідних рядків, в яких вхідне значення не дорівнює нулю" + +#: ../../src/rdbms/functions.txt:500 +#, fuzzy +msgid "count" +msgstr "рахувати" + +#: ../../src/rdbms/functions.txt:502 ../../src/rdbms/functions.txt:506 +#: ../../src/rdbms/functions.txt:510 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/functions.txt:504 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/functions.txt:508 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/functions.txt:514 +#, fuzzy +msgid "Maximum value" +msgstr "Максимальне значення" + +#: ../../src/rdbms/functions.txt:518 +#, fuzzy +msgid "" +"Computes the maximum of the non-null input values. Available for any " +"numeric, string, date/time or enum type." +msgstr "" +"Обчислює максимальне з ненульових вхідних значень. Доступно для будь-яких " +"чисел, рядків, дати/часу або перелічуваних типів." + +#: ../../src/rdbms/functions.txt:532 +#, fuzzy +msgid "max" +msgstr "макс" + +#: ../../src/rdbms/functions.txt:534 +msgid "12383" +msgstr "12383" + +#: ../../src/rdbms/functions.txt:536 +msgid "12264" +msgstr "12264" + +#: ../../src/rdbms/functions.txt:538 +msgid "8853" +msgstr "8853" + +#: ../../src/rdbms/functions.txt:540 +msgid "12919" +msgstr "12919" + +#: ../../src/rdbms/functions.txt:542 +msgid "14661" +msgstr "14661" + +#: ../../src/rdbms/functions.txt:546 +#, fuzzy +msgid "Minimum value" +msgstr "Мінімальне значення" + +#: ../../src/rdbms/functions.txt:550 +#, fuzzy +msgid "" +"Computes the minimum of the non-null inpout values. Available for any " +"numeric, string, date/time or enum type." +msgstr "" +"Обчислює мінімальне з ненульових вхідних значень. Доступно для будь-якого " +"числового, рядкового, дати/часу або перелічуваного типу." + +#: ../../src/rdbms/functions.txt:564 +#, fuzzy +msgid "min" +msgstr "мін" + +#: ../../src/rdbms/functions.txt:566 +msgid "3365" +msgstr "3365" + +#: ../../src/rdbms/functions.txt:568 +msgid "3564" +msgstr "3564" + +#: ../../src/rdbms/functions.txt:570 +msgid "2636" +msgstr "2636" + +#: ../../src/rdbms/functions.txt:572 +msgid "3442" +msgstr "3442" + +#: ../../src/rdbms/functions.txt:574 +msgid "2654" +msgstr "2654" + +#: ../../src/rdbms/functions.txt:578 +#, fuzzy +msgid "Sum of values" +msgstr "Сума значень" + +#: ../../src/rdbms/functions.txt:589 +#, fuzzy +msgid "Computes the sum of the non-null values" +msgstr "Обчислює суму ненульових значень" + +#: ../../src/rdbms/functions.txt:602 +#, fuzzy +msgid "sum" +msgstr "сума" + +#: ../../src/rdbms/functions.txt:604 +msgid "38988" +msgstr "38988" + +#: ../../src/rdbms/functions.txt:606 +msgid "46958" +msgstr "46958" + +#: ../../src/rdbms/functions.txt:608 +msgid "32611" +msgstr "32611" + +#: ../../src/rdbms/functions.txt:610 +msgid "54652" +msgstr "54652" + +#: ../../src/rdbms/functions.txt:612 +msgid "51087" +msgstr "51087" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/index.po b/src/_locales/uk/LC_MESSAGES/rdbms/index.po index 2a57d7a5b..545693222 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/index.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/index.po @@ -7,16 +7,16 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 03:58+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.4.1\n" #: ../../src/rdbms/index.txt:-1 msgid "Relational databases" @@ -30,11 +30,23 @@ msgstr "Serhii Horodilov" msgid "sql, db, database, intro, introduction, index" msgstr "sql, db, database, intro, introduction, index" -#: ../../src/rdbms/index.txt:8 +#: ../../src/rdbms/index.txt +msgid "PostgreSQL" +msgstr "" + +#: ../../src/rdbms/index.txt +msgid "SQLite" +msgstr "" + +#: ../../src/rdbms/index.txt +msgid "MySQL" +msgstr "" + +#: ../../src/rdbms/index.txt:23 msgid "Relational Database" msgstr "Реляційні бази даних" -#: ../../src/rdbms/index.txt:10 +#: ../../src/rdbms/index.txt:25 msgid "" ":abbr:`RDBMS (Relational Database Management System)` is a type of software " "that helps users to create, update, manage, and access relational databases. " @@ -49,7 +61,7 @@ msgstr "" "стовпець представляє певний атрибут даних, тоді як кожен рядок представляє " "конкретний екземпляр цих даних." -#: ../../src/rdbms/index.txt:16 +#: ../../src/rdbms/index.txt:31 msgid "" "RDBMS allow users to interact with the database using :abbr:`SQL (Structured " "Query Language)`, which is a standard language for managing and manipulating " @@ -63,7 +75,7 @@ msgstr "" "різноманітність операцій з базою даних, включаючи додавання, оновлення та " "видалення даних, а також отримання даних на основі певних критеріїв." -#: ../../src/rdbms/index.txt:22 +#: ../../src/rdbms/index.txt:37 msgid "" "RDBMS also provide a range of features to ensure data integrity, such as " "enforcing data constraints, supporting transactions, and providing backup " @@ -78,3 +90,50 @@ msgstr "" "інструменти для керування базою даних, такі як інтерфейси користувача для " "створення та модифікації таблиць і представлень, а також інструменти " "моніторингу для оптимізації продуктивності бази даних." + +#: ../../src/rdbms/index.txt:43 +msgid "" +"Security is a paramount aspect of managing databases. Even at the " +"introductory level, it's crucial to be aware of the basic security measures:" +msgstr "" + +#: ../../src/rdbms/index.txt:46 +msgid "" +"**Authentication and Authorization**: Ensuring that only authorized users " +"have access to the database." +msgstr "" + +#: ../../src/rdbms/index.txt:48 +msgid "" +"**Role-Based Access Control**: Assigning permissions based on roles within " +"the organization." +msgstr "" + +#: ../../src/rdbms/index.txt:50 +msgid "" +"**Data Encryption**: Protecting sensitive data both at rest and in transit." +msgstr "" + +#: ../../src/rdbms/index.txt:52 +msgid "" +"There are dozens of RDBMS, used in nowadays projects. But most widespread " +"are:" +msgstr "" + +#: ../../src/rdbms/index.txt:54 +msgid "" +"|postgres| **PostgreSQL**: A Powerful, open source object-relational " +"database system." +msgstr "" + +#: ../../src/rdbms/index.txt:56 +msgid "" +"|sqlite| **SQLite**: A C-library that implements a small, full featured SQL " +"database engine." +msgstr "" + +#: ../../src/rdbms/index.txt:58 +msgid "" +"|mysql| **MySQL**: A fast, multithread, multi-user, and robust SQL database " +"server." +msgstr "" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po index 0011959a6..569b05a99 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po @@ -7,16 +7,16 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 03:59+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.4.1\n" #: ../../src/rdbms/normalization.txt:-1 msgid "Database normalization" @@ -51,245 +51,331 @@ msgstr "" "неузгодженості даних." #: ../../src/rdbms/normalization.txt:16 +#, fuzzy msgid "" -"There are several normal forms, each building on the previous one, which " -"guide us in the normalization process. The most commonly used normal forms " -"are:" +"The main purpose of database normalization is to avoid complexities, " +"eliminate duplicates, and organize data in a consistent way. Normalization " +"reduces data redundancy and dependency, making the database more efficient, " +"flexible, and scalable. It also helps in maintaining data consistency and " +"accuracy, and ensures that updates and deletions are properly handled." msgstr "" -"Існує кілька нормальних форм, кожна з яких будується на попередній, які " -"скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами є:" - -#: ../../src/rdbms/normalization.txt:19 -msgid "" -"**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " -"values. There should be no repeating groups or arrays of data in a table." -msgstr "" -"Перша нормальна форма (1NF): кожен стовпець має містити атомарні " -"(неподільні) значення. У таблиці не повинно бути повторюваних груп або " -"масивів даних." +"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " +"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " +"узгодженість і точність даних, а також гарантує належну обробку оновлень і " +"видалень." #: ../../src/rdbms/normalization.txt:22 msgid "" -"**Second Normal Form (2NF)**: Each non-key column should be functionally " -"dependent on the entire primary key. In other words, every column in a table " -"should be related to the primary key and not dependent on any other non-key " -"columns." +"There are 6 **normal forms**, but this chapter focuses on the first 3 only, " +"since the commonest normal form you'll see out there is *3NF* (third normal " +"form)." msgstr "" -"Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " -"залежати від усього первинного ключа. Іншими словами, кожен стовпець у " -"таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-яких " -"інших неключових стовпців." #: ../../src/rdbms/normalization.txt:26 -msgid "" -"**Third Normal Form (3NF)**: All non-key columns should be dependent only on " -"the primary key and not on any other non-key columns. This eliminates " -"transitive dependencies." +msgid "Normalized tables are:" +msgstr "" + +#: ../../src/rdbms/normalization.txt:28 +msgid "Easier to understand" +msgstr "" + +#: ../../src/rdbms/normalization.txt:29 +msgid "Easier to enhance and extend" msgstr "" -"Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише від " -"первинного ключа, а не від будь-яких інших неключових стовпців. Це усуває " -"транзитивні залежності." #: ../../src/rdbms/normalization.txt:30 -msgid "" -"Normalization reduces data redundancy and dependency, making the database " -"more efficient, flexible, and scalable. It also helps in maintaining data " -"consistency and accuracy, and ensures that updates and deletions are " -"properly handled." +msgid "Protected from:" msgstr "" -"Нормалізація зменшує надлишковість даних і залежність, роблячи базу даних " -"більш ефективною, гнучкою та масштабованою. Це також допомагає підтримувати " -"узгодженість і точність даних, а також гарантує належну обробку оновлень і " -"видалень." -#: ../../src/rdbms/normalization.txt:36 -msgid "First normal form (1NF)" -msgstr "Перша нормальна форма (1NF)" +#: ../../src/rdbms/normalization.txt:32 +msgid "insertion anomalies" +msgstr "" -#: ../../src/rdbms/normalization.txt:38 -msgid "" -"It's easier to understand normalization via examples. Let's start with some " -"dummy orders data." +#: ../../src/rdbms/normalization.txt:33 +msgid "update anomalies" msgstr "" -"Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних даних " -"про замовлення." -#: ../../src/rdbms/normalization.txt:41 -msgid "Initial data" -msgstr "Початкові дані" +#: ../../src/rdbms/normalization.txt:34 +msgid "deletion anomalies" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "order" -msgstr "order" +#: ../../src/rdbms/normalization.txt:37 +msgid "Anomalies" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "customer" -msgstr "customer" +#: ../../src/rdbms/normalization.txt:40 +msgid "Insertion anomalies" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "product" -msgstr "product" +#: ../../src/rdbms/normalization.txt:45 +msgid "Update anomalies" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "quantity" -msgstr "quantity" +#: ../../src/rdbms/normalization.txt:50 +msgid "Deletion anomalies" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "price" -msgstr "price" +#: ../../src/rdbms/normalization.txt:55 +msgid "First normal form (1NF)" +msgstr "Перша нормальна форма (1NF)" + +#: ../../src/rdbms/normalization.txt:58 +msgid "Data example" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "total" -msgstr "total" +#: ../../src/rdbms/normalization.txt:62 ../../src/rdbms/normalization.txt:80 +#: ../../src/rdbms/normalization.txt:96 +msgid "Requirements" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "1" -msgstr "1" +#: ../../src/rdbms/normalization.txt:64 +msgid "Row order should not be used to convey information." +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "John Doe" -msgstr "John Doe" +#: ../../src/rdbms/normalization.txt:65 +msgid "" +"Data types should not be mixed within the same column (and the RDBMS won't " +"let you do in anyway)." +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "(Apple, Orange)" -msgstr "(Apple, Orange)" +#: ../../src/rdbms/normalization.txt:67 +msgid "Tables should have their primary keys." +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "(2, 3)" -msgstr "(2, 3)" +#: ../../src/rdbms/normalization.txt:68 +msgid "Repeating groups should be eliminated." +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "(100, 50)" -msgstr "(100, 50)" +#: ../../src/rdbms/normalization.txt:71 +msgid "Applying 1NF" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "(200, 150)" -msgstr "(200, 150)" +#: ../../src/rdbms/normalization.txt:77 +msgid "Second normal form (2NF)" +msgstr "Друга нормальна форма (2NF)" -#: ../../src/rdbms/normalization.txt:1 -msgid "2" -msgstr "2" +#: ../../src/rdbms/normalization.txt:82 +msgid "Each non-key attribute must depend on the entire primary key" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "Jane Smith" -msgstr "Jane Smith" +#: ../../src/rdbms/normalization.txt:85 +msgid "Applying 2NF" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "Banana" -msgstr "Banana" +#: ../../src/rdbms/normalization.txt:91 +msgid "Third normal form (3NF)" +msgstr "3-тя нормальна форма (3NF)" -#: ../../src/rdbms/normalization.txt:1 -msgid "4" -msgstr "4" +#: ../../src/rdbms/normalization.txt:98 +msgid "" +"Every non-key attribute in a table should depend on the key, the whole key, " +"and nothing but the key (no transitive dependency)." +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "25" -msgstr "25" +#: ../../src/rdbms/normalization.txt:103 +msgid "**Boyce-Codd normal form**" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "100" -msgstr "100" +#: ../../src/rdbms/normalization.txt:105 +msgid "" +":abbr:`BCNF (Boyce-Codd Normal Form)` is the stronger version of 3NF. It " +"also is called as 3.5NF (three-and-a-half normal form)." +msgstr "" -#: ../../src/rdbms/normalization.txt:48 +#: ../../src/rdbms/normalization.txt:108 msgid "" -"This table violates 1NF, since its columns contain multiple values. To bring " -"this to 1NF all data within the table are to be atomic." +"**Every attribute** in a table should depend on the key, the whole key, and " +"nothing but the key." msgstr "" -"Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " -"привести це до 1NF, усі дані в таблиці мають бути атомарними." -#: ../../src/rdbms/normalization.txt:51 -msgid "1NF applied" -msgstr "Застосовано 1NF" +#: ../../src/rdbms/normalization.txt:112 +msgid "Applying 3NF" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "Apple" -msgstr "Apple" +#: ../../src/rdbms/normalization.txt:118 +msgid "Conclusion" +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "200" -msgstr "200" +#: ../../src/rdbms/normalization.txt:120 +msgid "" +"Each next normal form includes all the requirements for the previous one." +msgstr "" -#: ../../src/rdbms/normalization.txt:1 -msgid "Orange" -msgstr "Orange" +#~ msgid "" +#~ "There are several normal forms, each building on the previous one, which " +#~ "guide us in the normalization process. The most commonly used normal " +#~ "forms are:" +#~ msgstr "" +#~ "Існує кілька нормальних форм, кожна з яких будується на попередній, які " +#~ "скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами " +#~ "є:" + +#~ msgid "" +#~ "**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " +#~ "values. There should be no repeating groups or arrays of data in a table." +#~ msgstr "" +#~ "Перша нормальна форма (1NF): кожен стовпець має містити атомарні " +#~ "(неподільні) значення. У таблиці не повинно бути повторюваних груп або " +#~ "масивів даних." -#: ../../src/rdbms/normalization.txt:1 -msgid "3" -msgstr "3" +#~ msgid "" +#~ "**Second Normal Form (2NF)**: Each non-key column should be functionally " +#~ "dependent on the entire primary key. In other words, every column in a " +#~ "table should be related to the primary key and not dependent on any other " +#~ "non-key columns." +#~ msgstr "" +#~ "Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " +#~ "залежати від усього первинного ключа. Іншими словами, кожен стовпець у " +#~ "таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-" +#~ "яких інших неключових стовпців." -#: ../../src/rdbms/normalization.txt:1 -msgid "50" -msgstr "50" +#~ msgid "" +#~ "**Third Normal Form (3NF)**: All non-key columns should be dependent only " +#~ "on the primary key and not on any other non-key columns. This eliminates " +#~ "transitive dependencies." +#~ msgstr "" +#~ "Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише " +#~ "від первинного ключа, а не від будь-яких інших неключових стовпців. Це " +#~ "усуває транзитивні залежності." -#: ../../src/rdbms/normalization.txt:1 -msgid "150" -msgstr "150" +#~ msgid "" +#~ "It's easier to understand normalization via examples. Let's start with " +#~ "some dummy orders data." +#~ msgstr "" +#~ "Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних " +#~ "даних про замовлення." + +#~ msgid "Initial data" +#~ msgstr "Початкові дані" + +#~ msgid "order" +#~ msgstr "order" + +#~ msgid "customer" +#~ msgstr "customer" + +#~ msgid "product" +#~ msgstr "product" + +#~ msgid "quantity" +#~ msgstr "quantity" + +#~ msgid "price" +#~ msgstr "price" + +#~ msgid "total" +#~ msgstr "total" + +#~ msgid "1" +#~ msgstr "1" + +#~ msgid "John Doe" +#~ msgstr "John Doe" + +#~ msgid "(Apple, Orange)" +#~ msgstr "(Apple, Orange)" + +#~ msgid "(2, 3)" +#~ msgstr "(2, 3)" + +#~ msgid "(100, 50)" +#~ msgstr "(100, 50)" + +#~ msgid "(200, 150)" +#~ msgstr "(200, 150)" + +#~ msgid "2" +#~ msgstr "2" + +#~ msgid "Jane Smith" +#~ msgstr "Jane Smith" + +#~ msgid "Banana" +#~ msgstr "Banana" + +#~ msgid "4" +#~ msgstr "4" + +#~ msgid "25" +#~ msgstr "25" + +#~ msgid "100" +#~ msgstr "100" + +#~ msgid "" +#~ "This table violates 1NF, since its columns contain multiple values. To " +#~ "bring this to 1NF all data within the table are to be atomic." +#~ msgstr "" +#~ "Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " +#~ "привести це до 1NF, усі дані в таблиці мають бути атомарними." + +#~ msgid "1NF applied" +#~ msgstr "Застосовано 1NF" + +#~ msgid "Apple" +#~ msgstr "Apple" + +#~ msgid "200" +#~ msgstr "200" -#: ../../src/rdbms/normalization.txt:59 -msgid "From now each peace of data is represented as atomic value." -msgstr "Відтепер кожна частина даних представлена як атомарне значення." +#~ msgid "Orange" +#~ msgstr "Orange" -#: ../../src/rdbms/normalization.txt:62 -msgid "Second normal form (2NF)" -msgstr "Друга нормальна форма (2NF)" +#~ msgid "3" +#~ msgstr "3" -#: ../../src/rdbms/normalization.txt:64 -msgid "" -"The table above is in 1NF, but ``item price`` is dependent on the *item* " -"entity itself and have low cohesion to *orders*. To bring it into 2NF a " -"dedicated table to store information about items themselves is to be " -"created. After that ``order`` and ``product`` table are connected (related) " -"to each other via a foreign key." -msgstr "" -"Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " -"*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в 2NF, " -"потрібно створити окрему таблицю для зберігання інформації про самі товари. " -"Після цього таблиці ``order`` і ``product`` з'єднуються (пов'язані) одна з " -"одною за допомогою зовнішнього ключа." +#~ msgid "50" +#~ msgstr "50" -#: ../../src/rdbms/normalization.txt:70 ../../src/rdbms/normalization.txt:112 -msgid "``order`` table" -msgstr "таблиця ``order``" +#~ msgid "150" +#~ msgstr "150" -#: ../../src/rdbms/normalization.txt:1 -msgid "id" -msgstr "id" +#~ msgid "From now each peace of data is represented as atomic value." +#~ msgstr "Відтепер кожна частина даних представлена як атомарне значення." -#: ../../src/rdbms/normalization.txt:1 -msgid "product_id" -msgstr "product_id" +#~ msgid "" +#~ "The table above is in 1NF, but ``item price`` is dependent on the *item* " +#~ "entity itself and have low cohesion to *orders*. To bring it into 2NF a " +#~ "dedicated table to store information about items themselves is to be " +#~ "created. After that ``order`` and ``product`` table are connected " +#~ "(related) to each other via a foreign key." +#~ msgstr "" +#~ "Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " +#~ "*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в " +#~ "2NF, потрібно створити окрему таблицю для зберігання інформації про самі " +#~ "товари. Після цього таблиці ``order`` і ``product`` з'єднуються " +#~ "(пов'язані) одна з одною за допомогою зовнішнього ключа." -#: ../../src/rdbms/normalization.txt:78 -msgid "``product`` table" -msgstr "таблиця ``product``" +#~ msgid "``order`` table" +#~ msgstr "таблиця ``order``" -#: ../../src/rdbms/normalization.txt:103 -msgid "" -"``total`` field is also removed, since now it can be calculated as product " -"of ``product.price`` and ``order.quantity``." -msgstr "" -"Поле ``total`` також видалено, оскільки тепер його можна обчислити як " -"добуток ``product.price`` і ``order.quantity``." +#~ msgid "id" +#~ msgstr "id" -#: ../../src/rdbms/normalization.txt:107 -msgid "Third normal form (3NF)" -msgstr "3-тя нормальна форма (3NF)" +#~ msgid "product_id" +#~ msgstr "product_id" -#: ../../src/rdbms/normalization.txt:109 -msgid "" -"At last it's time to remove a transitive functional dependency. Customer's " -"name is not actually dependent on a product, but on a person, who places an " -"order." -msgstr "" -"Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " -"клієнта насправді залежить не від продукту, а від особи, яка робить " -"замовлення." +#~ msgid "``product`` table" +#~ msgstr "таблиця ``product``" -#: ../../src/rdbms/normalization.txt:1 -msgid "customer_id" -msgstr "customer_id" +#~ msgid "" +#~ "``total`` field is also removed, since now it can be calculated as " +#~ "product of ``product.price`` and ``order.quantity``." +#~ msgstr "" +#~ "Поле ``total`` також видалено, оскільки тепер його можна обчислити як " +#~ "добуток ``product.price`` і ``order.quantity``." -#: ../../src/rdbms/normalization.txt:120 -msgid "``customer`` table" -msgstr "таблиця ``customer``" +#~ msgid "" +#~ "At last it's time to remove a transitive functional dependency. " +#~ "Customer's name is not actually dependent on a product, but on a person, " +#~ "who places an order." +#~ msgstr "" +#~ "Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " +#~ "клієнта насправді залежить не від продукту, а від особи, яка робить " +#~ "замовлення." + +#~ msgid "customer_id" +#~ msgstr "customer_id" + +#~ msgid "``customer`` table" +#~ msgstr "таблиця ``customer``" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/query.po b/src/_locales/uk/LC_MESSAGES/rdbms/query.po new file mode 100644 index 000000000..3415971e1 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/query.po @@ -0,0 +1,1204 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 04:00+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/rdbms/query.txt:-1 +#, fuzzy +msgid "Query data from database" +msgstr "Запит даних з бази даних" + +#: ../../src/rdbms/query.txt:-1 +#, fuzzy +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/query.txt:-1 +#, fuzzy +msgid "sql, db, database, query, select, fetch" +msgstr "sql, db, база даних, запит, вибірка, вибірка" + +#: ../../src/rdbms/query.txt:8 +#, fuzzy +msgid "Querying data" +msgstr "Запит даних" + +#: ../../src/rdbms/query.txt:10 +#, fuzzy +msgid "" +"The process of retrieving or the command to retrieve data from a database is " +"called a *query*. In SQL the ``SELECT`` command is used to specify queries." +msgstr "" +"Процес отримання або команда для отримання даних з бази даних називається " +"*запит*. У мові SQL для визначення запитів використовується команда " +"``SELECT``." + +#: ../../src/rdbms/query.txt:13 +#, fuzzy +msgid "" +"``SELECT`` retrieves rows from zero or more tables. The general processing " +"of ``SELECT`` is as follows:" +msgstr "" +"``SELECT`` вибирає рядки з нуля або більше таблиць. Загальна обробка " +"``SELECT`` відбувається наступним чином:" + +#: ../../src/rdbms/query.txt:16 +#, fuzzy +msgid "" +"All queries in the ``WITH`` list are computed. This effectively serve as " +"temporary tables that can be referenced in the ``FROM`` list." +msgstr "" +"Всі запити у списку ``WITH`` обчислюються. Це фактично слугує тимчасовими " +"таблицями, на які можна посилатися у списку ``FROM``." + +#: ../../src/rdbms/query.txt:19 +#, fuzzy +msgid "" +"All elements in the ``FROM`` list are computed. If more than one element is " +"specified in the ``FROM`` list, they are cross-joined together." +msgstr "" +"Обчислюються всі елементи списку ``З''. Якщо у списку ``FROM`` вказано " +"більше одного елемента, вони об'єднуються разом." + +#: ../../src/rdbms/query.txt:21 +#, fuzzy +msgid "" +"If ``WHERE`` clause is specified, all rows that do not satisfy the condition " +"are eliminated from the output." +msgstr "" +"Якщо вказано оператор `WHERE`, то всі рядки, які не задовольняють умові, " +"вилучаються з виводу." + +#: ../../src/rdbms/query.txt:23 +#, fuzzy +msgid "" +"If the ``GROUP BY`` clause is specified, or if there are aggregate function " +"calls, the output is combined into groups of rows that match on one or more " +"values, and the result of aggregate functions are computed. If the " +"``HAVING`` clause is present, it eliminates groups that does not satisfy the " +"given condition." +msgstr "" +"Якщо вказано речення ``GROUP BY`` або якщо є виклики агрегатних функцій, то " +"вихідні дані об'єднуються в групи рядків, які збігаються за одним або " +"декількома значеннями, і обчислюються результати агрегатних функцій. Якщо " +"присутній оператор ``HAVING``, то вилучаються групи, які не задовольняють " +"заданій умові." + +#: ../../src/rdbms/query.txt:28 +#, fuzzy +msgid "" +"The actual output rows are computed using the ``SELECT`` output expressions " +"for each row or row of group." +msgstr "" +"Фактичні вихідні рядки обчислюються за допомогою виразів ``SELECT`` для " +"кожного рядка або рядка групи." + +#: ../../src/rdbms/query.txt:30 +#, fuzzy +msgid "" +"``SELECT DISTINCT`` eliminates duplicate rows from the result. ``SELECT " +"DISTINCT ON`` eliminates rows that match on all the specified expressions." +msgstr "" +"``SELECT DISTINCT`` видаляє повторювані рядки з результату. ``SELECT " +"DISTINCT ON`` вилучає рядки, які збігаються за всіма вказаними виразами." + +#: ../../src/rdbms/query.txt:33 +#, fuzzy +msgid "" +"Using the operators ``UNION``, ``INTERSECT``, and ``EXCEPT``, the output of " +"more than one ``SELECT`` statement can be combined to form a single result " +"set." +msgstr "" +"За допомогою операторів ``UNION``, ``INTERSECT`` і ``EXCEPT`` можна " +"об'єднати результати виконання кількох інструкцій ``SELECT``, щоб сформувати " +"єдиний набір результатів." + +#: ../../src/rdbms/query.txt:37 +#, fuzzy +msgid "" +"The ``UNION`` operator returns **all** rows that are in one or both result " +"sets." +msgstr "" +"Оператор ``UNION`` повертає **всі** рядки, які є в одному або обох наборах " +"результатів." + +#: ../../src/rdbms/query.txt:39 +#, fuzzy +msgid "" +"The ``INTERSECT`` operator returns all rows that are strictly in both result " +"sets." +msgstr "" +"Оператор ``INTERSECT`` повертає всі рядки, які строго знаходяться в обох " +"наборах результатів." + +#: ../../src/rdbms/query.txt:41 +#, fuzzy +msgid "" +"The ``EXCEPT`` operator returns the rows that are in the first result set, " +"but not in the second." +msgstr "" +"Оператор ``EXCEPT`` повертає рядки, які є в першому наборі результатів, але " +"відсутні в другому." + +#: ../../src/rdbms/query.txt:44 +#, fuzzy +msgid "" +"If the ``ORDER BY`` clause is specified, the returned rows are sorted in the " +"specific order." +msgstr "" +"Якщо вказано параметр ``Впорядкувати за'', повернуті рядки буде відсортовано " +"у певному порядку." + +#: ../../src/rdbms/query.txt:46 +#, fuzzy +msgid "" +"if the ``LIMIT`` or ``OFFSET`` clause is specified, the ``SELECT`` statement " +"only returns a subset of the result rows." +msgstr "" +"якщо вказано оператор ``LIMIT`` або ``OFFSET``, то інструкція ``SELECT`` " +"повертає лише підмножину рядків результату." + +#: ../../src/rdbms/query.txt:48 +#, fuzzy +msgid "" +"If ``FOR UPDATE``, ``FOR NO KEY UPDATE``, ``FOR SHARE`` or ``FOR KEY SHARE`` " +"is specified, the ``SELECT`` statement locks the selected rows against " +"concurrent updates." +msgstr "" +"Якщо вказано ``FOR UPDATE``, ``FOR NO KEY UPDATE``, ``FOR SHARE`` або ``FOR " +"KEY SHARE``, оператор ``SELECT`` блокує вибрані рядки від одночасного " +"оновлення." + +#: ../../src/rdbms/query.txt:57 +#, fuzzy +msgid "Select rows from a table" +msgstr "Виберіть рядки з таблиці" + +#: ../../src/rdbms/query.txt:59 +#, fuzzy +msgid "A simple kind of query has the form:" +msgstr "Простий вид запиту має вигляд:" + +#: ../../src/rdbms/query.txt:65 +#, fuzzy +msgid "" +"This command would retrieve all rows and all user-defined columns from " +"``publisher`` table. A select list can also select a subset of the available " +"columns or make calculations using the columns." +msgstr "" +"Ця команда вилучить усі рядки і всі визначені користувачем стовпці з таблиці " +"``publisher``. Список вибору може також вибирати підмножину доступних " +"стовпців або виконувати обчислення за цими стовпцями." + +#: ../../src/rdbms/query.txt:74 +#, fuzzy +msgid "" +"``FROM`` clause is a simple kind of table expression: it reads just one " +"table. In general, table expression can be complex constructs of base " +"tables, joins and sub-queries. But it is possible to omit the table " +"expression entirely and use the ``SELECT`` command as a calculator (or in " +"some another way):" +msgstr "" +"речення ``FROM`` є простим різновидом табличного виразу: воно зчитує лише " +"одну таблицю. Взагалі, табличний вираз може бути складною конструкцією з " +"базових таблиць, з'єднань і підзапитів. Але можна взагалі не використовувати " +"табличний вираз і використовувати команду ``SELECT`` як калькулятор (або в " +"інший спосіб):" + +#: ../../src/rdbms/query.txt:83 +#, fuzzy +msgid "" +"The ``FROM`` clause derives a table from one or more other tables given in a " +"comma-separated table reference list. A table reference can a table name, or " +"derived table such as sub-query, a ``JOIN`` construct, or complex " +"combinations of these. If more than one table reference is listed in the " +"``FROM`` clause, the table are cross-joined. The result of the ``FROM`` list " +"is an intermediate virtual table tant can then be subject to transformations " +"by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the " +"result of the overall table expression." +msgstr "" +"Речення ``FROM`` виводить таблицю з однієї або кількох інших таблиць, " +"наведених у списку посилань на таблиці, розділених комами. Посилання на " +"таблицю може бути ім'ям таблиці або похідною таблицею, наприклад, " +"підзапитом, конструкцією ``JOIN`` або їх складними комбінаціями. Якщо в " +"реченні ``З'' вказано більше одного посилання на таблицю, то таблиці " +"з'єднуються перехресним зв'язком. Результатом списку ``FROM`` є проміжна " +"віртуальна таблиця, яка потім може бути піддана перетворенням за допомогою " +"речень ``WHERE``, ``GROUP BY`` і ``HAVING`` і, нарешті, є результатом " +"загального табличного виразу." + +#: ../../src/rdbms/query.txt:93 +#, fuzzy +msgid "Search conditions" +msgstr "Умови пошуку" + +#: ../../src/rdbms/query.txt:95 +#, fuzzy +msgid "" +"After the processing of the ``FROM`` clause is done, each row of the derived " +"virtual table can be checked against the search condition. If the result of " +"the condition is ``true``, the row is kept in the output table, otherwise it " +"is discarded. The ``WHERE`` clause is used to handle search condition checks." +msgstr "" +"Після обробки оператора ``FROM`` кожен рядок отриманої віртуальної таблиці " +"може бути перевірений на відповідність умові пошуку. Якщо результат умови " +"рівний ``істина``, то рядок зберігається у вихідній таблиці, інакше він " +"відкидається. Для перевірки умови пошуку використовується оператор `WHERE`." + +#: ../../src/rdbms/query.txt:100 +#, fuzzy +msgid "Here are some examples of ``WHERE`` clause:" +msgstr "Ось кілька прикладів речення \"ДЕ\":" + +#: ../../src/rdbms/query.txt:102 +#, fuzzy +msgid "WHERE clause usage examples" +msgstr "Приклади використання речення WHERE" + +#: ../../src/rdbms/query.txt:124 +#, fuzzy +msgid "Grouping data" +msgstr "Дані для групування" + +#: ../../src/rdbms/query.txt:126 +#, fuzzy +msgid "" +"After passing the ``WHERE`` filter, the derived input table might be subject " +"to grouping, using ``GROUP BY`` clause, and elimination of group rows using " +"the ``HAVING`` clause. The ``GROUP BY`` clause is used to group together " +"those rows in a table that have the same values in all the columns listed. " +"The order in the columns are listed does not matter. The effect is to " +"combine each set of rows having common values into one group row that " +"represents all rows in the group. This is done to eliminate redundancy in " +"the output and/or compute aggregates that apply to these groups." +msgstr "" +"Після проходження фільтра ``WHERE`` отримана таблиця може бути згрупована за " +"допомогою речення ``GROUP BY`` і видалена з групи рядків за допомогою " +"речення ``HAVING``. Речення ``ГРУПУВАТИ ЗА`` використовується для групування " +"тих рядків таблиці, які мають однакові значення у всіх перелічених " +"стовпчиках. Порядок перерахування стовпчиків не має значення. Ефект полягає " +"в об'єднанні кожного набору рядків зі спільними значеннями в один груповий " +"рядок, який представляє всі рядки в групі. Це робиться для того, щоб усунути " +"надмірність у вихідних даних та/або обчислювальних агрегатах, які " +"застосовуються до цих груп." + +#: ../../src/rdbms/query.txt:136 +#, fuzzy +msgid "Select lists" +msgstr "Виберіть списки" + +#: ../../src/rdbms/query.txt:138 +#, fuzzy +msgid "" +"As shown is the previous section, the table expression in the ``SELECT`` " +"command constructs an intermediate virtual table by possibly combining " +"tables, views, eliminating rows, grouping etc. This table is finally passed " +"on to processing by the *select list*. The select list determines which " +"*columns* of the intermediate table are actually output." +msgstr "" +"Як показано у попередньому розділі, вираз table у команді ``SELECT`` створює " +"проміжну віртуальну таблицю шляхом можливого об'єднання таблиць, " +"представлень, вилучення рядків, групування тощо. Ця таблиця нарешті " +"передається для обробки за допомогою *списку вибору*. Список вибору " +"визначає, які саме *стовпці* проміжної таблиці буде виведено на екран." + +#: ../../src/rdbms/query.txt:145 +#, fuzzy +msgid "Select list items" +msgstr "Вибір елементів списку" + +#: ../../src/rdbms/query.txt:147 +#, fuzzy +msgid "" +"The simplest kind of select is ``*`` which emits that the table expression " +"produces. Otherwise, a select list is a comma-separated list of value " +"expressions. For instance:" +msgstr "" +"Найпростішим видом вибору є ``*``, який виводить те, що створює табличний " +"вираз. Інакше, список вибору - це список виразів значень, розділених комами. " +"Наприклад:" + +#: ../../src/rdbms/query.txt:157 +#, fuzzy +msgid "Columns labels" +msgstr "Мітки стовпців" + +#: ../../src/rdbms/query.txt:159 +#, fuzzy +msgid "" +"The entries listed in the select list can be assigned names for subsequent " +"processing." +msgstr "" +"Записам, переліченим у списку вибору, можна присвоїти імена для подальшої " +"обробки." + +#: ../../src/rdbms/query.txt:166 +#, fuzzy +msgid "" +"If no output column name is specified using ``AS``, the system will assign " +"a default column name. For simple column references, this is the name of the " +"referenced column. For function calls, this is the name of the function. For " +"complex expressions, the system will generate a generic name." +msgstr "" +"Якщо за допомогою ``AS`` не вказано назву вихідного стовпця, система " +"призначить назву стовпця за замовчуванням. Для простих посилань на стовпці - " +"це ім'я стовпця, на який є посилання. Для викликів функцій - це назва " +"функції. Для складних виразів система згенерує загальну назву." + +#: ../../src/rdbms/query.txt:173 +#, fuzzy +msgid "Labels are often referenced as \"aliases\"." +msgstr "Етикетки часто називають \"псевдонімами\"." + +#: ../../src/rdbms/query.txt:176 +#, fuzzy +msgid "DISTINCT" +msgstr "РОЗРІЗНИТИ" + +#: ../../src/rdbms/query.txt:178 +#, fuzzy +msgid "" +"After the select list has been processed, the result table can optionally be " +"subject to the elimination of duplicate rows. The ``DISTINCT`` key word is " +"written directly after ``SELECT`` to specify this:" +msgstr "" +"Після обробки списку вибірки таблиця результатів може бути піддана вилученню " +"рядків, що повторюються. Для цього безпосередньо після команди ``SELECT`` " +"записується ключове слово ``DISTINCT``:" + +#: ../../src/rdbms/query.txt:186 +#, fuzzy +msgid "" +"Obviously, two rows are considered distinct if they differ in at least one " +"column value. Null values are considered equal in comparison. Alternatively, " +"an arbitrary expression can determine what rows are to be considered " +"distinct." +msgstr "" +"Очевидно, що два рядки вважаються різними, якщо вони відрізняються принаймні " +"в одному стовпчику. Нульові значення вважаються рівними при порівнянні. Крім " +"того, довільний вираз може визначати, які рядки вважати різними." + +#: ../../src/rdbms/query.txt:195 +#, fuzzy +msgid "Sorting rows" +msgstr "Сортування рядків" + +#: ../../src/rdbms/query.txt:197 +#, fuzzy +msgid "" +"After a query has produced an output table it can optionally be sorted. If " +"sorting is not chosen, the rows will be returned in an unspecified order. " +"The actual order in this case will depend on the scan and join plan types " +"and the order on disk, but it must not be relied on." +msgstr "" +"Після того, як запит створив вихідну таблицю, її можна відсортувати за " +"бажанням. Якщо сортування не вибрано, рядки будуть повернуті в невизначеному " +"порядку. Фактичний порядок у цьому випадку залежатиме від типів планів " +"сканування та об'єднання, а також порядку на диску, але на нього не можна " +"покладатися." + +#: ../../src/rdbms/query.txt:202 +#, fuzzy +msgid "The ``ORDER BY`` clause specifies the sort order:" +msgstr "Речення ``ORDER BY`` задає порядок сортування:" + +#: ../../src/rdbms/query.txt:208 +#, fuzzy +msgid "" +"The sort expression(s) can be any expression that would be valid in the " +"query's select list." +msgstr "" +"Вираз(и) сортування може бути будь-яким виразом, який буде допустимим у " +"списку вибору запиту." + +#: ../../src/rdbms/query.txt:211 +#, fuzzy +msgid "" +"When more than one expression is specified, the later values are used to " +"sort rows that are equal according to the earlier values. Each expression " +"can be followed by an option ``ASC`` or ``DESC`` keyword to set the sort " +"direction to ascending or descending. ``ASC`` order is the default." +msgstr "" +"Якщо вказано більше одного виразу, пізніші значення використовуються для " +"сортування рядків, які є рівними за попередніми значеннями. Кожен вираз може " +"супроводжуватися ключовим словом ``ASC`` або ``DESC`` для встановлення " +"напрямку сортування за зростанням або спаданням. за замовчуванням " +"використовується порядок ``ASC``." + +#: ../../src/rdbms/query.txt:216 +#, fuzzy +msgid "" +"The ``NULL FIRST`` and ``NULL LAST`` options can be used to determine " +"whether null appear before or after non-null values in the sort ordering. By " +"default, null values sort as if larger than any non-null value; that's, " +"``NULL FIRST`` is the default for ``DESC`` order, and ``NULL LAST`` " +"otherwise." +msgstr "" +"Опції ``NULL FIRST`` та ``NULL LAST`` можна використовувати для визначення " +"того, чи з'являтимуться нулі до або після ненульових значень у порядку " +"сортування. За замовчуванням, нульові значення сортуються так, ніби вони " +"більші за будь-яке ненульове значення; тобто ``NULL FIRST`` за замовчуванням " +"для порядку ``DESC``, а ``NULL LAST`` в іншому випадку." + +#: ../../src/rdbms/query.txt:221 +#, fuzzy +msgid "" +"Note that the ordering options are considered independently for each sort " +"column. For example ``ORDER BY x, y DESC`` means ``ORDER BY x ASC, y DESC``, " +"which is not the same as ``ORDER BY x DESC, y DESC``." +msgstr "" +"Зверніть увагу, що варіанти впорядкування розглядаються незалежно для " +"кожного стовпця сортування. Наприклад, ``Впорядкувати за x, y DESC`` означає " +"``Впорядкувати за x ASC, y DESC``, що не те саме, що ``Впорядкувати за x " +"DESC, y DESC``." + +#: ../../src/rdbms/query.txt:225 +#, fuzzy +msgid "" +"A sort expression can also be the column label or number of an output column." +msgstr "" +"Вираз сортування також може бути міткою стовпця або номером вихідного " +"стовпця." + +#: ../../src/rdbms/query.txt:227 +#, fuzzy +msgid "" +"``ORDER BY`` can be applied to the result of a ``UNION``, ``INTERSECT``, or " +"``EXCEPT`` combination, but in this case it is only permitted to sort by " +"output column names or numbers, not by expressions." +msgstr "" +"оператор ``ORDER BY`` можна застосувати до результату комбінації ``UNION``, " +"``INTERSECT`` або ``EXCEPT``, але в цьому випадку дозволяється сортування " +"лише за іменами або номерами вихідних стовпців, а не за виразами." + +#: ../../src/rdbms/query.txt:232 +#, fuzzy +msgid "Limit and Offset" +msgstr "Ліміт і зміщення" + +#: ../../src/rdbms/query.txt:234 +#, fuzzy +msgid "" +"``LIMIT`` and ``OFFSET`` allow you to retrieve just a portion of the rows " +"that are generated by the rest of the query." +msgstr "" +"lIMIT і OFFSET дозволяють вам отримати лише частину рядків, згенерованих " +"рештою запиту." + +#: ../../src/rdbms/query.txt:241 +#, fuzzy +msgid "" +"The query above fetches only first 10 rows from the \"publisher\" table." +msgstr "" +"Наведений вище запит витягує лише перші 10 рядків з таблиці \"publisher\"." + +#: ../../src/rdbms/query.txt:243 +#, fuzzy +msgid "" +"If a limit count is given, no more than that many rows will be returned. But " +"possibly fewer, if the query itself yields fewer rows. ``LIMIT ALL`` is the " +"same as omitting the ``LIMIT`` clause, as is ``LIMIT`` with ``NULL`` " +"argument." +msgstr "" +"Якщо вказано граничну кількість рядків, буде повернуто не більше цієї " +"кількості. Але, можливо, і менше, якщо сам запит повертає менше рядків. " +"``LIMIT ALL`` - це те саме, що опустити пункт ``LIMIT``, так само як і " +"``LIMIT`` з аргументом ``NULL``." + +#: ../../src/rdbms/query.txt:248 +#, fuzzy +msgid "" +"``OFFSET`` says to skip that many rows before beginning to return rows. " +"``OFFSET 0`` is the same as omitting the ``OFFSET`` clause, as is ``OFFSET`` " +"with a ``NULL`` argument." +msgstr "" +"``OFFSET`` вказує пропустити стільки-то рядків перед початком повернення " +"рядків. ``OFFSET 0`` - це те саме, що опустити вираз ``OFFSET``, так само як " +"і ``OFFSET`` з аргументом ``NULL``." + +#: ../../src/rdbms/query.txt:256 +#, fuzzy +msgid "The query above fetches 10 publishers starting from the 11-th one." +msgstr "Наведений вище запит показує 10 видавництв, починаючи з 11-го." + +#: ../../src/rdbms/query.txt:258 +#, fuzzy +msgid "" +"When using ``LIMIT`` and/or ``OFFSET``, it's important to use ``ORDER BY`` " +"clause that constraints the result rows into a unique order. Otherwise you " +"will get an unpredictable subset of the query's rows." +msgstr "" +"При використанні ``LIMIT`` та/або ``OFFSET`` важливо використовувати речення " +"``ORDER BY``, яке обмежує рядки результатів в унікальному порядку. Інакше ви " +"отримаєте непередбачувану підмножину рядків запиту." + +#: ../../src/rdbms/query.txt:263 +#, fuzzy +msgid "WITH queries" +msgstr "З запитами" + +#: ../../src/rdbms/query.txt:265 +#, fuzzy +msgid "" +"``WITH`` provides a way to write auxiliary statements for use in a larger " +"query. These statements, which are often referred to as :abbr:`CTE (Common " +"Table Expression)`, can be thought of as defining temporary tables that " +"exist just for one query. Each auxiliary statement in a ``WITH`` clause can " +"be a ``SELECT``, ``INSERT``, ``UPDATE`` or ``DELETE``; and the ``WITH`` " +"clause itself is attached to a primary statement that can be a ``SELECT``, " +"``INSERT``, ``UPDATE``, ``DELETE`` or ``MERGE``." +msgstr "" +"команда ``WITH`` надає можливість писати допоміжні оператори для " +"використання у великих запитах. Ці оператори, які часто називають :abbr:`CTE " +"(Common Table Expression), можна розглядати як визначення тимчасових " +"таблиць, які існують лише для одного запиту. Кожен допоміжний оператор у " +"реченні ``WITH`` може бути оператором ``SELECT``, ``INSERT``, ``UPDATE`` або " +"``DELETE``; а саме речення ``WITH`` приєднується до основного оператора, " +"який може бути оператором ``SELECT``, ``INSERT``, ``UPDATE``, ``DELETE`` або " +"``MERGE``." + +#: ../../src/rdbms/query.txt:274 +#, fuzzy +msgid "Select in WITH" +msgstr "``select_attack``" + +#: ../../src/rdbms/query.txt:276 +#, fuzzy +msgid "" +"The basic value of ``SELECT`` in ``WITH`` is to break down complicated " +"queries into simpler parts." +msgstr "" +"Основне значення ``SELECT`` у ``WITH`` полягає в тому, щоб розбивати складні " +"запити на простіші частини." + +#: ../../src/rdbms/query.txt:279 +#, fuzzy +msgid "Get most profitable months" +msgstr "Отримайте найприбутковіші місяці" + +#: ../../src/rdbms/query.txt:295 +#, fuzzy +msgid "Recursive queries" +msgstr "Рекурсивні запити" + +#: ../../src/rdbms/query.txt:297 +#, fuzzy +msgid "" +"The optional ``RECURSIVE`` modifier changes WITH from a mere syntactic " +"convenience into a feature that accomplishes things not otherwise possible " +"in standard SQL. Using ``RECURSIVE``, a ``WITH`` query can refer to its own " +"output." +msgstr "" +"Додатковий модифікатор ``RECURSIVE`` перетворює WITH з простої синтаксичної " +"зручності на функцію, яка виконує речі, неможливі у стандартному SQL. " +"Використовуючи ``RECURSIVE``, запит ``WITH`` може посилатися на свій власний " +"вивід." + +#: ../../src/rdbms/query.txt:302 +#, fuzzy +msgid "Sum of first 10 numbers starting from 1" +msgstr "Сума перших 10 чисел, починаючи з 1" + +#: ../../src/rdbms/query.txt:311 +#, fuzzy +msgid "" +"When working with recursive queries it is important to be sure that the " +"recursive part of the query will eventually return no tuple, or else the " +"query will loop indefinitely." +msgstr "" +"При роботі з рекурсивними запитами важливо бути впевненим, що рекурсивна " +"частина запиту в кінцевому підсумку не поверне жодного кортежу, інакше запит " +"зациклиться на невизначений час." + +#: ../../src/rdbms/query.txt:316 +#, fuzzy +msgid "Data modifying statements in WITH" +msgstr "Оператори, що модифікують дані в операторі WITH" + +#: ../../src/rdbms/query.txt:318 +#, fuzzy +msgid "" +"You can use most data-modifying statements (``INSERT``, ``UPDATE``, " +"``DELETE``) in ``WITH``. This allows you to perform several different " +"operations at a time, in the same query." +msgstr "" +"Ви можете використовувати більшість операторів модифікації даних " +"(``INSERT``, ``UPDATE``, ``DELETE``) в ``WITH``. Це дозволяє виконувати " +"кілька різних операцій одночасно в одному запиті." + +#: ../../src/rdbms/query.txt:322 +#, fuzzy +msgid "Remove old revenue records and store them into history table" +msgstr "Видаліть старі записи про доходи та збережіть їх у таблиці історії" + +#: ../../src/rdbms/query.txt:335 +#, fuzzy +msgid "Combining queries" +msgstr "Об'єднання запитів" + +#: ../../src/rdbms/query.txt:337 +#, fuzzy +msgid "" +"The results of two queries can be combined using the set operations union, " +"intersection, and difference." +msgstr "" +"Результати двох запитів можна об'єднати за допомогою операцій об'єднання, " +"перетину та різниці." + +#: ../../src/rdbms/query.txt:346 +#, fuzzy +msgid "" +"``UNION`` effectively appends the result of ``query2`` to the result of " +"``query1`` (although there is no guarantee that this is the order in which " +"the rows are actually returned). Furthermore, it eliminates duplicate rows " +"from its result, in the same way as ``DISTINCT``, unless ``UNION ALL`` is " +"used." +msgstr "" +"``UNION`` ефективно додає результат ``запиту2`` до результату ``запиту1`` " +"(хоча немає жодних гарантій, що це саме той порядок, в якому повертаються " +"рядки). Крім того, вона вилучає з результату повторювані рядки так само, як " +"і ``DISTINCT``, якщо не використовується ``UNION ALL``." + +#: ../../src/rdbms/query.txt:378 ../../src/rdbms/query.txt:432 +#: ../../src/rdbms/query.txt:470 ../../src/rdbms/query.txt:527 +#: ../../src/rdbms/query.txt:545 ../../src/rdbms/query.txt:587 +#: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 +#: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 +#, fuzzy +msgid "id" +msgstr "id" + +#: ../../src/rdbms/query.txt:378 ../../src/rdbms/query.txt:432 +#: ../../src/rdbms/query.txt:470 +#, fuzzy +msgid "first_name" +msgstr "Ім'я" + +#: ../../src/rdbms/query.txt:378 ../../src/rdbms/query.txt:432 +#: ../../src/rdbms/query.txt:470 +#, fuzzy +msgid "last_name" +msgstr "Прізвище" + +#: ../../src/rdbms/query.txt:380 ../../src/rdbms/query.txt:472 +#: ../../src/rdbms/query.txt:529 ../../src/rdbms/query.txt:589 +#: ../../src/rdbms/query.txt:595 ../../src/rdbms/query.txt:601 +#: ../../src/rdbms/query.txt:607 ../../src/rdbms/query.txt:613 +#: ../../src/rdbms/query.txt:701 ../../src/rdbms/query.txt:728 +#, fuzzy +msgid "1" +msgstr "1" + +#: ../../src/rdbms/query.txt:380 ../../src/rdbms/query.txt:472 +#, fuzzy +msgid "Mariska" +msgstr "Марисько" + +#: ../../src/rdbms/query.txt:380 ../../src/rdbms/query.txt:472 +#, fuzzy +msgid "Syson" +msgstr "Сайсоне" + +#: ../../src/rdbms/query.txt:382 ../../src/rdbms/query.txt:474 +#: ../../src/rdbms/query.txt:547 ../../src/rdbms/query.txt:553 +#: ../../src/rdbms/query.txt:555 ../../src/rdbms/query.txt:589 +#: ../../src/rdbms/query.txt:591 ../../src/rdbms/query.txt:593 +#: ../../src/rdbms/query.txt:607 ../../src/rdbms/query.txt:609 +#: ../../src/rdbms/query.txt:611 ../../src/rdbms/query.txt:613 +#: ../../src/rdbms/query.txt:615 ../../src/rdbms/query.txt:617 +#: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:676 +#: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:716 +#: ../../src/rdbms/query.txt:722 ../../src/rdbms/query.txt:724 +#, fuzzy +msgid "2" +msgstr "2" + +#: ../../src/rdbms/query.txt:382 ../../src/rdbms/query.txt:474 +#, fuzzy +msgid "Robenia" +msgstr "Робена" + +#: ../../src/rdbms/query.txt:382 ../../src/rdbms/query.txt:474 +#, fuzzy +msgid "Dimitriades" +msgstr "Дімітріадіс" + +#: ../../src/rdbms/query.txt:384 ../../src/rdbms/query.txt:476 +#: ../../src/rdbms/query.txt:531 ../../src/rdbms/query.txt:549 +#: ../../src/rdbms/query.txt:551 ../../src/rdbms/query.txt:591 +#: ../../src/rdbms/query.txt:595 ../../src/rdbms/query.txt:597 +#: ../../src/rdbms/query.txt:599 ../../src/rdbms/query.txt:601 +#: ../../src/rdbms/query.txt:603 ../../src/rdbms/query.txt:605 +#: ../../src/rdbms/query.txt:609 ../../src/rdbms/query.txt:615 +#: ../../src/rdbms/query.txt:632 ../../src/rdbms/query.txt:634 +#: ../../src/rdbms/query.txt:672 ../../src/rdbms/query.txt:674 +#: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:697 +#: ../../src/rdbms/query.txt:718 ../../src/rdbms/query.txt:720 +#, fuzzy +msgid "3" +msgstr "3" + +#: ../../src/rdbms/query.txt:384 ../../src/rdbms/query.txt:476 +#, fuzzy +msgid "Loren" +msgstr "Лорен" + +#: ../../src/rdbms/query.txt:384 ../../src/rdbms/query.txt:476 +#, fuzzy +msgid "Goretti" +msgstr "Ґоретті" + +#: ../../src/rdbms/query.txt:386 ../../src/rdbms/query.txt:478 +#: ../../src/rdbms/query.txt:593 ../../src/rdbms/query.txt:599 +#: ../../src/rdbms/query.txt:605 ../../src/rdbms/query.txt:611 +#: ../../src/rdbms/query.txt:617 ../../src/rdbms/query.txt:699 +#: ../../src/rdbms/query.txt:726 +#, fuzzy +msgid "4" +msgstr "4" + +#: ../../src/rdbms/query.txt:386 ../../src/rdbms/query.txt:478 +#, fuzzy +msgid "Dianna" +msgstr "Діана" + +#: ../../src/rdbms/query.txt:386 ../../src/rdbms/query.txt:478 +#, fuzzy +msgid "Giacomuzzo" +msgstr "Джакомуццо" + +#: ../../src/rdbms/query.txt:388 ../../src/rdbms/query.txt:434 +#, fuzzy +msgid "5" +msgstr "5" + +#: ../../src/rdbms/query.txt:388 ../../src/rdbms/query.txt:434 +#, fuzzy +msgid "Anett" +msgstr "Анетт" + +#: ../../src/rdbms/query.txt:388 ../../src/rdbms/query.txt:434 +#, fuzzy +msgid "Hayland" +msgstr "Хейленд" + +#: ../../src/rdbms/query.txt:390 ../../src/rdbms/query.txt:436 +#, fuzzy +msgid "6" +msgstr "6" + +#: ../../src/rdbms/query.txt:390 ../../src/rdbms/query.txt:436 +#, fuzzy +msgid "Keeley" +msgstr "Кілі" + +#: ../../src/rdbms/query.txt:390 ../../src/rdbms/query.txt:436 +#, fuzzy +msgid "Grishelyov" +msgstr "Гришелов" + +#: ../../src/rdbms/query.txt:392 +#, fuzzy +msgid "7" +msgstr "7" + +#: ../../src/rdbms/query.txt:392 +#, fuzzy +msgid "Say" +msgstr "Сказати" + +#: ../../src/rdbms/query.txt:392 +#, fuzzy +msgid "Kliner" +msgstr "Клайнер" + +#: ../../src/rdbms/query.txt:394 +#, fuzzy +msgid "8" +msgstr "8" + +#: ../../src/rdbms/query.txt:394 +#, fuzzy +msgid "Charles" +msgstr "Чарльзе" + +#: ../../src/rdbms/query.txt:394 +#, fuzzy +msgid "Ede" +msgstr "Еде" + +#: ../../src/rdbms/query.txt:396 +#, fuzzy +msgid "9" +msgstr "9" + +#: ../../src/rdbms/query.txt:396 +#, fuzzy +msgid "Florentia" +msgstr "Флоренція" + +#: ../../src/rdbms/query.txt:396 +#, fuzzy +msgid "Core" +msgstr "Ядро" + +#: ../../src/rdbms/query.txt:398 +#, fuzzy +msgid "10" +msgstr "10" + +#: ../../src/rdbms/query.txt:398 +#, fuzzy +msgid "Tiffany" +msgstr "Тіффані" + +#: ../../src/rdbms/query.txt:398 +#, fuzzy +msgid "Tingly" +msgstr "Пощипування" + +#: ../../src/rdbms/query.txt:401 +#, fuzzy +msgid "" +"``INTERSECT`` returns all rows that are both in the result of ``query1`` and " +"in the result of ``query2``. Duplicate rows are eliminated unless " +"``INTERSECT ALL`` is used." +msgstr "" +"``INTERSECT`` повертає всі рядки, які є і в результаті ``запиту1``, і в " +"результаті ``запиту2``. Повторювані рядки вилучаються, якщо не " +"використовується ``INTERSECT ALL``." + +#: ../../src/rdbms/query.txt:439 +#, fuzzy +msgid "" +"``EXCEPT`` returns all rows that are in the result of ``query1`` but not in " +"the result of ``query2``. (This is sometimes called the difference between " +"two queries.) Again, duplicates are eliminated unless ``EXCEPT ALL`` is used." +msgstr "" +"``EXCEPT`` повертає всі рядки, які є в результаті ``запиту1``, але не є в " +"результаті ``запиту2``. (Це іноді називають різницею між двома запитами.) " +"Знову ж таки, дублікати вилучаються, якщо не використовується ``EXCEPT ALL``." + +#: ../../src/rdbms/query.txt:482 +#, fuzzy +msgid "Join data from different tables" +msgstr "Об'єднання даних з різних таблиць" + +#: ../../src/rdbms/query.txt:484 +#, fuzzy +msgid "" +"A ``JOIN`` clause combines two ``FROM`` items, which for convenience we will " +"refer as \"tables\", though in reality they can be any type of ``FROM`` " +"items. Available join types are:" +msgstr "" +"Речення ``JOIN`` об'єднує два елементи ``FROM``, які для зручності будемо " +"називати \"таблицями\", хоча насправді це може бути будь-який тип елементів " +"``FROM``. Доступні типи з'єднання" + +#: ../../src/rdbms/query.txt:488 +#, fuzzy +msgid "``[INNER] JOIN``" +msgstr "``[ВНУТРІШНЄ] ПРИЄДНАННЯ``" + +#: ../../src/rdbms/query.txt:489 +#, fuzzy +msgid "``LEFT [OUTER] JOIN``" +msgstr "\"ЛІВИЙ [ЗОВНІШНІЙ] СТИК" + +#: ../../src/rdbms/query.txt:490 +#, fuzzy +msgid "``RIGHT [OUTER] JOIN``" +msgstr "\"ПРАВЕ [ЗОВНІШНЄ] З'ЄДНАННЯ" + +#: ../../src/rdbms/query.txt:491 +#, fuzzy +msgid "``FULL [OUTER] JOIN``" +msgstr "``ПОВНЕ [ЗОВНІШНЄ] З'ЄДНАННЯ``" + +#: ../../src/rdbms/query.txt:495 +#, fuzzy +msgid "Key words in bracket parentheses above are optional." +msgstr "Ключові слова в дужках вище є необов'язковими." + +#: ../../src/rdbms/query.txt:498 +#, fuzzy +msgid "Joins between tables" +msgstr "З'єднання між столами" + +#: ../../src/rdbms/query.txt:500 +#, fuzzy +msgid "Publishers and books tables definitions" +msgstr "Визначення таблиць видавництв та книг" + +#: ../../src/rdbms/query.txt:505 +#, fuzzy +msgid "" +"Following tables are related via ``FOREIGN KEY`` constraint. Each record in " +"the ``book`` table references some record in the ``publisher`` table." +msgstr "" +"Наступні таблиці пов'язані між собою за допомогою обмеження ``зовнішній " +"ключ``. Кожен запис у таблиці ``book`` посилається на деякий запис у таблиці " +"``publisher``." + +#: ../../src/rdbms/query.txt:510 +#, fuzzy +msgid "" +"Since original tables contain lots of data, temporary tables will be created " +"instead before join query. Full tables content may be downloaded via links: :" +"download:`publisher `, :download:" +"`book `." +msgstr "" +"Оскільки вихідні таблиці містять багато даних, перед об'єднанням запитів " +"буде створено тимчасові таблиці. Повний вміст таблиць можна завантажити за " +"посиланнями: :download:`publisher `, :" +"download:`book `." + +#: ../../src/rdbms/query.txt:516 +#, fuzzy +msgid "The subsets from original queries defined as:" +msgstr "Підмножини з вихідних запитів визначаються як:" + +#: ../../src/rdbms/query.txt:527 ../../src/rdbms/query.txt:587 +#: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 +#: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 +#, fuzzy +msgid "name" +msgstr "ім’ я" + +#: ../../src/rdbms/query.txt:529 ../../src/rdbms/query.txt:589 +#: ../../src/rdbms/query.txt:595 ../../src/rdbms/query.txt:601 +#: ../../src/rdbms/query.txt:607 ../../src/rdbms/query.txt:613 +#: ../../src/rdbms/query.txt:701 ../../src/rdbms/query.txt:728 +#, fuzzy +msgid "Zoonoodle" +msgstr "Zoonoodle" + +#: ../../src/rdbms/query.txt:531 ../../src/rdbms/query.txt:591 +#: ../../src/rdbms/query.txt:597 ../../src/rdbms/query.txt:603 +#: ../../src/rdbms/query.txt:609 ../../src/rdbms/query.txt:615 +#: ../../src/rdbms/query.txt:632 ../../src/rdbms/query.txt:634 +#: ../../src/rdbms/query.txt:672 ../../src/rdbms/query.txt:674 +#: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:697 +#: ../../src/rdbms/query.txt:718 ../../src/rdbms/query.txt:720 +#, fuzzy +msgid "Tanoodle" +msgstr "Бувай" + +#: ../../src/rdbms/query.txt:545 ../../src/rdbms/query.txt:587 +#: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 +#: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 +#, fuzzy +msgid "title" +msgstr "назва" + +#: ../../src/rdbms/query.txt:545 ../../src/rdbms/query.txt:587 +#: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 +#: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 +#, fuzzy +msgid "publisher_id" +msgstr "publisher_id" + +#: ../../src/rdbms/query.txt:547 ../../src/rdbms/query.txt:589 +#: ../../src/rdbms/query.txt:591 ../../src/rdbms/query.txt:593 +#: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:716 +#, fuzzy +msgid "22" +msgstr "22" + +#: ../../src/rdbms/query.txt:547 ../../src/rdbms/query.txt:589 +#: ../../src/rdbms/query.txt:591 ../../src/rdbms/query.txt:593 +#: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:716 +#, fuzzy +msgid "pretium nisl" +msgstr "pretium nisl" + +#: ../../src/rdbms/query.txt:549 ../../src/rdbms/query.txt:595 +#: ../../src/rdbms/query.txt:597 ../../src/rdbms/query.txt:599 +#: ../../src/rdbms/query.txt:632 ../../src/rdbms/query.txt:672 +#: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:718 +#, fuzzy +msgid "38" +msgstr "38" + +#: ../../src/rdbms/query.txt:549 ../../src/rdbms/query.txt:595 +#: ../../src/rdbms/query.txt:597 ../../src/rdbms/query.txt:599 +#: ../../src/rdbms/query.txt:632 ../../src/rdbms/query.txt:672 +#: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:718 +#, fuzzy +msgid "ac est lacinia nisi venenatis" +msgstr "ac est lacinia nisi venenatis" + +#: ../../src/rdbms/query.txt:551 ../../src/rdbms/query.txt:601 +#: ../../src/rdbms/query.txt:603 ../../src/rdbms/query.txt:605 +#: ../../src/rdbms/query.txt:634 ../../src/rdbms/query.txt:674 +#: ../../src/rdbms/query.txt:697 ../../src/rdbms/query.txt:720 +#, fuzzy +msgid "69" +msgstr "69" + +#: ../../src/rdbms/query.txt:551 ../../src/rdbms/query.txt:601 +#: ../../src/rdbms/query.txt:603 ../../src/rdbms/query.txt:605 +#: ../../src/rdbms/query.txt:634 ../../src/rdbms/query.txt:674 +#: ../../src/rdbms/query.txt:697 ../../src/rdbms/query.txt:720 +#, fuzzy +msgid "vel accumsan tellus nisi" +msgstr "vel accumsan tellus nisi" + +#: ../../src/rdbms/query.txt:553 ../../src/rdbms/query.txt:607 +#: ../../src/rdbms/query.txt:609 ../../src/rdbms/query.txt:611 +#: ../../src/rdbms/query.txt:676 ../../src/rdbms/query.txt:722 +#, fuzzy +msgid "72" +msgstr "72" + +#: ../../src/rdbms/query.txt:553 ../../src/rdbms/query.txt:607 +#: ../../src/rdbms/query.txt:609 ../../src/rdbms/query.txt:611 +#: ../../src/rdbms/query.txt:676 ../../src/rdbms/query.txt:722 +#, fuzzy +msgid "nam dui proin" +msgstr "nam dui proin" + +#: ../../src/rdbms/query.txt:555 ../../src/rdbms/query.txt:613 +#: ../../src/rdbms/query.txt:615 ../../src/rdbms/query.txt:617 +#: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:724 +#, fuzzy +msgid "85" +msgstr "85" + +#: ../../src/rdbms/query.txt:555 ../../src/rdbms/query.txt:613 +#: ../../src/rdbms/query.txt:615 ../../src/rdbms/query.txt:617 +#: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:724 +#, fuzzy +msgid "nam tristique" +msgstr "nam tristique" + +#: ../../src/rdbms/query.txt:558 +#, fuzzy +msgid "" +"By passing multiple tables to the ``FROM`` clause a ``CROSS JOIN`` query is " +"executed. This means the resulting table is the Cartesian product of two " +"original tables." +msgstr "" +"При передачі декількох таблиць в речення ``FROM`` виконується запит ``CROSS " +"JOIN`` (перехресне об'єднання). Це означає, що результуюча таблиця є " +"декартовим добутком двох вихідних таблиць." + +#: ../../src/rdbms/query.txt:562 +#, fuzzy +msgid "Cross join (Cartesian product)" +msgstr "Поперечне з'єднання (декартовий добуток)" + +#: ../../src/rdbms/query.txt:584 +#, fuzzy +msgid "Query result" +msgstr "Результат запиту" + +#: ../../src/rdbms/query.txt:593 ../../src/rdbms/query.txt:599 +#: ../../src/rdbms/query.txt:605 ../../src/rdbms/query.txt:611 +#: ../../src/rdbms/query.txt:617 ../../src/rdbms/query.txt:699 +#: ../../src/rdbms/query.txt:726 +#, fuzzy +msgid "Skivee" +msgstr "Скайві" + +#: ../../src/rdbms/query.txt:620 +#, fuzzy +msgid "" +"By defining the ``WHERE`` clause rows that do not match the condition may be " +"eliminated from the result." +msgstr "" +"За допомогою оператора `WHERE` рядки, які не відповідають умові, можуть бути " +"вилучені з результату." + +#: ../../src/rdbms/query.txt:637 +#, fuzzy +msgid "" +"This is called ``INNER JOIN``, which means that the result table will " +"contain only whose rows from left-hard and right-hand tables, that have " +"corresponding records to each other." +msgstr "" +"Це називається ``ВНУТРІШНЄ ОБ'ЄДНАННЯ``, що означає, що результуюча таблиця " +"буде містити тільки ті рядки з лівої та правої таблиць, які мають відповідні " +"записи один одному." + +#: ../../src/rdbms/query.txt:641 +#, fuzzy +msgid "" +"The same result may be obtained using ``JOIN`` clause. All ``JOIN`` options " +"are just a notation convenience, since they do nothing you couldn't do with " +"plain ``FROM`` and ``WHERE``." +msgstr "" +"Той самий результат можна отримати за допомогою оператора ``JOIN``. Всі " +"опції ``JOIN`` є лише зручністю для нотації, оскільки вони не роблять нічого " +"такого, чого не можна було б зробити за допомогою звичайних ``FROM`` і " +"``WHERE``." + +#: ../../src/rdbms/query.txt:651 +#, fuzzy +msgid "``INNER JOIN`` is the default while joining two tables with each other." +msgstr "" +"``INNER JOIN`` використовується за замовчуванням при з'єднанні двох таблиць " +"одна з одною." + +#: ../../src/rdbms/query.txt:654 +#, fuzzy +msgid "Right and left joins" +msgstr "Праве та ліве з'єднання" + +#: ../../src/rdbms/query.txt:656 +#, fuzzy +msgid "" +"``LEFT OUTER JOIN`` returns all rows in the qualified Cartesian product (i." +"e., all combined rows that pass its condition), plus one copy of each row in " +"the left-hand table for which there was no right-hand row that passed the " +"join condition." +msgstr "" +"``LEFT OUTER JOIN`` повертає всі рядки кваліфікованого декартового добутку " +"(тобто всі об'єднані рядки, які задовольняють його умову), плюс по одній " +"копії кожного рядка лівої таблиці, для якого не було рядка правої таблиці, " +"що задовольняє умову об'єднання." + +#: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:676 +#: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:699 +#: ../../src/rdbms/query.txt:701 ../../src/rdbms/query.txt:716 +#: ../../src/rdbms/query.txt:722 ../../src/rdbms/query.txt:724 +#: ../../src/rdbms/query.txt:726 ../../src/rdbms/query.txt:728 +#, fuzzy +msgid "null" +msgstr "нуль" + +#: ../../src/rdbms/query.txt:681 +#, fuzzy +msgid "" +"Conversely, ``RIGHT OUTER JOIN`` returns all the joined rows, plus one row " +"for each unmatched right-hand row. This is just a notation convenience, " +"since you could convert it to a ``LEFT OUTER JOIN`` by switching the left " +"and right tables." +msgstr "" +"І навпаки, ``RIGHT OUTER JOIN`` повертає всі об'єднані рядки, плюс один " +"рядок для кожного невідповідного правого рядка. Це просто зручність " +"позначення, оскільки ви можете перетворити його на ``LEFT OUTER JOIN``, " +"помінявши місцями ліву та праву таблиці." + +#: ../../src/rdbms/query.txt:705 +#, fuzzy +msgid "Full outer join" +msgstr "``ПОВНЕ [ЗОВНІШНЄ] З'ЄДНАННЯ``" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po index 253b57112..b05eeb301 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po @@ -7,16 +7,16 @@ msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:15+0300\n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 04:00+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: ua\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.4.1\n" #: ../../src/rdbms/relations.txt:-1 msgid "This document describes the database relationships" @@ -27,421 +27,531 @@ msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/rdbms/relations.txt:-1 -msgid "sql, db, database, relationship" -msgstr "sql, db, database, relationship" +msgid "" +"sql, db, database, relationship, primary key, foreign key, pk, fk, one-to-" +"one, one-to-many, many-to-many, 1-1, 1-n, n-m" +msgstr "" -#: ../../src/rdbms/relations.txt:8 +#: ../../src/rdbms/relations.txt:9 msgid "Data Relationships" msgstr "Зв'язки даних" -#: ../../src/rdbms/relations.txt:10 -msgid "It's time to talk about **data relations**." -msgstr "Настав час поговорити про **відносини даних**." +#: ../../src/rdbms/relations.txt:11 +msgid "" +"Before dive into relationships, there is a need explain core concepts on how " +"data are referenced between different tables." +msgstr "" -#: ../../src/rdbms/relations.txt:12 +#: ../../src/rdbms/relations.txt:15 +msgid "Primary key" +msgstr "" + +#: ../../src/rdbms/relations.txt:17 msgid "" -"For example your database contains two tables: ``weather`` and ``city``. The " -"diagram below demonstrates the overall data structure:" +"A primary key constraint indicates that a column, or group of columns, can " +"be used as a unique identifier for rows in the table. This requires that " +"values be both unique and not null. So, the following two table definitions " +"accept the same data:" msgstr "" -"Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " -"Діаграма нижче демонструє загальну структуру даних:" -#: ../../src/rdbms/relations.txt:30 +#: ../../src/rdbms/relations.txt:36 msgid "" -"Consider the following problem: you want to make sure no one can insert a " -"record into ``weather`` without a matching entry in ``city`` table. This is " -"called maintaining the *referential integrity* of your data. In simplistic " -"database systems this would be implemented (if at all) by first looking at " -"the cities table to check if a matching record exists, and then inserting or " -"rejecting the new weather records. This approach has a number of problems " -"and is very inconvenient." -msgstr "" -"Розглянемо таку проблему: ви хочете переконатися, що ніхто не може вставити " -"запис до ``weather`` без відповідного запису в ``city`` таблиці. " -"Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " -"системах баз даних це було б реалізовано (якщо взагалі) спочатку " -"переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " -"потім вставляв або відхиляв нові записи погоди. Цей підхід має низку проблем " -"і дуже незручно." - -#: ../../src/rdbms/relations.txt:52 +"Primary keys can span more than one column; the syntax is similar to unique " +"constraint:" +msgstr "" + +#: ../../src/rdbms/relations.txt:49 msgid "" -"This declaration creates a relationship between two (or even more) tables." -msgstr "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." +"Adding a primary key will automatically create a unique B-tree index on the " +"column or group of columns listed in the primary key, and will force the " +"column(s) to be marked ``NOT NULL``." +msgstr "" -#: ../../src/rdbms/relations.txt:55 -msgid "Foreign key (FK)" -msgstr "Зовнішній ключ (FK)" +#: ../../src/rdbms/relations.txt:53 +msgid "A table can have at most one primary key." +msgstr "" #: ../../src/rdbms/relations.txt:57 msgid "" -"So far, you have knowledge about **primary** keys. The **foreign** key is a " -"column, that *references* some another table. In common, it's a reference to " -"another table's PK; but there is no limitation of this kind, any column can " -"be referenced by another one. FKs handle data integrity only, it's not " -"required for FK to be non-NULL value." -msgstr "" -"Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " -"посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; але " -"такого роду обмежень немає , на будь-який стовпець може посилатися інший. FK " -"обробляє лише цілісність даних, не обов'язково, щоб значення FK було " -"відмінним від NULL." - -#: ../../src/rdbms/relations.txt:63 -msgid "" -"The relation's properties are described by CONSTRAINTS and the database's " -"structure." +"There can be any number of unique and not-null constraints, which are " +"functionally almost the same thing, but only one can be identified as the " +"primary key." msgstr "" -"Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." -#: ../../src/rdbms/relations.txt:66 +#: ../../src/rdbms/relations.txt:62 +msgid "Foreign key (FK)" +msgstr "Зовнішній ключ (FK)" + +#: ../../src/rdbms/relations.txt:64 msgid "" -"For example, modifying declaration with ``NOT NULL`` constraint grants that " -"each record within a table has a matching one entity in another table." +"A foreign key constraint specifies that the value in a column (or a group of " +"columns) must match the values appearing in some row of another table. We " +"say this maintains the *referential integrity* between two tables." msgstr "" -"Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " -"запис у таблиці має відповідну сутність в іншій таблиці." -#: ../../src/rdbms/relations.txt:76 -msgid "This brings us to various relationship models." -msgstr "Це підводить нас до різних моделей відносин." +#: ../../src/rdbms/relations.txt:68 +msgid "" +"A table can have more than one foreign key constraint. Foreign key can also " +"overlaps with the primary key." +msgstr "" -#: ../../src/rdbms/relations.txt:79 -msgid "One-to-many relationship (1-to-N)" -msgstr "Зв'язок один-до-багатьох (1-до-N)" +#: ../../src/rdbms/relations.txt:71 +msgid "To define a FK constraint:" +msgstr "" -#: ../../src/rdbms/relations.txt:81 -msgid "This is the most common relationship." -msgstr "Це найпоширеніший зв'язок." +#: ../../src/rdbms/relations.txt:94 +msgid "" +"In this situation the ``book`` table is the *referencing* table, and the " +"``publisher`` table is the *referenced* table. Similarly there are " +"referencing and referenced columns." +msgstr "" -#: ../../src/rdbms/relations.txt:83 +#: ../../src/rdbms/relations.txt:98 msgid "" -"For the example above there are no limitations on temperature measurements " -"in a specified city. So, a single city may has 0 or N related records in " -"``weather`` table. But each weather record is related to the only one city." +"In case the referenced column is not explicitly defined, the primary key of " +"the referenced table will be used as the referenced column." msgstr "" -"Для наведеного вище прикладу немає обмежень на вимірювання температури у " -"визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних записів у " -"таблиці ``погода``. Але кожен запис погоди пов'язаний до єдиного міста." -#: ../../src/rdbms/relations.txt:87 +#: ../../src/rdbms/relations.txt:101 msgid "" -"Another example is employees and office buildings they work in. Some big " -"company may have multiple offices and employee across the globe. Multiple " -"employees can be present in a single office building at a time. But each " -"employee can be physically located only in a single office at a time." -msgstr "" -"Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " -"Деякі великі компанії можуть мати кілька офісів і співробітників по всьому " -"світу. Декілька працівників можуть бути присутні в одній офісній будівлі " -"одночасно. Але кожен працівник може фізично перебувати лише в одному офісі " -"одночасно." - -#: ../../src/rdbms/relations.txt:110 -msgid "One-to-one relationship (1-to-1)" -msgstr "One-to-one relationship (1-to-1)" - -#: ../../src/rdbms/relations.txt:112 +"It is not possible to create a row with non-null foreign key, that does not " +"appear in the referenced table." +msgstr "" + +#: ../../src/rdbms/relations.txt:105 +msgid "Self-referential foreign key" +msgstr "" + +#: ../../src/rdbms/relations.txt:107 msgid "" -"``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there is " -"and only one matching record. Back to the example with employees. Multiple " -"workstations (personal computers) are located in each office building. The " -"only one person can occupy the only one work station at a time." -msgstr "" -"Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб забезпечити " -"наявність лише одного відповідного запису. Повернемося до прикладу зі " -"співробітниками. Кілька робочих станцій (персональних комп'ютерів) " -"розташовані в у кожній офісній будівлі. Лише одна особа може займати лише " -"одну робочу станцію одночасно." - -#: ../../src/rdbms/relations.txt:123 -msgid "Many-to-many relationship (N-to-N)" -msgstr "Зв'язок багато-до-багатьох (N-до-N)" - -#: ../../src/rdbms/relations.txt:125 +"Sometimes it is useful to the referenced table to be the same table as " +"referencing. This makes possible to create a tree-structures with nodes, " +"there a top-level node would have ``NULL`` ``parent_id``." +msgstr "" + +#: ../../src/rdbms/relations.txt:120 +msgid "Deleting referenced rows" +msgstr "" + +#: ../../src/rdbms/relations.txt:122 msgid "" -"These relationships require additional table. A good example may be a " -"*project role*. There are many of them in a production team. And some " -"employees may be assigned to the same role (e.g. developers, testers etc.). " -"But also a single person can be a developer and tester at a time." +"So far we know that the foreign keys disallows creation of rows that do not " +"relate to any row inside the referenced table. But what if a referenced row " +"needs to be removed? Intuitively, there are few options:" +msgstr "" + +#: ../../src/rdbms/relations.txt:126 +msgid "disallow deletion" msgstr "" -"Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути роль у " -"проекті. Їх багато у виробничій команді. І деяким працівникам може бути " -"призначено ту саму роль (наприклад, розробники, тестувальники і т. д.). Але " -"також одна людина може бути розробником і тестувальником одночасно." -#: ../../src/rdbms/relations.txt:138 -msgid "Joining data" -msgstr "Об'єднання даних" +#: ../../src/rdbms/relations.txt:127 +msgid "delete referencing rows as well" +msgstr "" -#: ../../src/rdbms/relations.txt:140 +#: ../../src/rdbms/relations.txt:128 +msgid "something else..." +msgstr "" + +#: ../../src/rdbms/relations.txt:130 msgid "" -"``JOIN`` is used to *join* data fetched from multiple related tables. To " -"build a valid query you are to set the tables to join and parameter to use " -"for this operation." +"Restricting and cascading deletes are the two most common options. " +"``RESTRICT`` prevents deletion of a referenced row. ``CASCADE`` will also " +"delete all referencing rows as well as the referenced one." msgstr "" -"``JOIN`` використовується для об'єднання даних, отриманих з кількох " -"пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " -"таблиці для об'єднання та параметр, який використовується для цієї операції." -#: ../../src/rdbms/relations.txt:144 -msgid "Common syntax is:" -msgstr "Загальний синтаксис:" +#: ../../src/rdbms/relations.txt:148 +msgid "There are others options." +msgstr "" #: ../../src/rdbms/relations.txt:150 msgid "" -"There are various join types available. Here are is some dummy data to " -"demonstrate their purpose." +"``NO ACTION`` means that if any referencing rows still exist when the " +"constraint is checked, an error is raised; this is the default behavior." msgstr "" -"Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб продемонструвати " -"їх призначення." #: ../../src/rdbms/relations.txt:153 -msgid "poem" -msgstr "poem" - -#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:179 -msgid "id" -msgstr "id" - -#: ../../src/rdbms/relations.txt:156 ../../src/rdbms/relations.txt:254 -#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 -#: ../../src/rdbms/relations.txt:350 -msgid "title" -msgstr "title" +msgid "" +"``SET NULL`` will replace all referencing rows foreign key values with " +"``NULL`` values." +msgstr "" #: ../../src/rdbms/relations.txt:156 -msgid "author_id" -msgstr "author_id" - -#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:162 -#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:181 -msgid "1" -msgstr "1" - -#: ../../src/rdbms/relations.txt:158 ../../src/rdbms/relations.txt:256 -#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:320 -#: ../../src/rdbms/relations.txt:352 -msgid "On the Field of Battle" -msgstr "On the Field of Battle" +msgid "" +"``SET DEFAULT`` will replace all referencing rows foreign key values with " +"default values." +msgstr "" -#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:170 -#: ../../src/rdbms/relations.txt:183 -msgid "2" -msgstr "2" - -#: ../../src/rdbms/relations.txt:160 ../../src/rdbms/relations.txt:258 -#: ../../src/rdbms/relations.txt:287 ../../src/rdbms/relations.txt:322 -#: ../../src/rdbms/relations.txt:354 -msgid "Moses" -msgstr "Moses" - -#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:185 -msgid "3" -msgstr "3" - -#: ../../src/rdbms/relations.txt:162 ../../src/rdbms/relations.txt:260 -#: ../../src/rdbms/relations.txt:289 ../../src/rdbms/relations.txt:324 -#: ../../src/rdbms/relations.txt:356 -msgid "The Forest Song" -msgstr "The Forest Song" - -#: ../../src/rdbms/relations.txt:164 -msgid "4" -msgstr "4" - -#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:291 -#: ../../src/rdbms/relations.txt:358 -msgid "In the Catacombs" -msgstr "In the Catacombs" - -#: ../../src/rdbms/relations.txt:164 ../../src/rdbms/relations.txt:168 -#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:291 -#: ../../src/rdbms/relations.txt:295 ../../src/rdbms/relations.txt:299 -#: ../../src/rdbms/relations.txt:330 ../../src/rdbms/relations.txt:358 -#: ../../src/rdbms/relations.txt:362 ../../src/rdbms/relations.txt:366 -#: ../../src/rdbms/relations.txt:368 -msgid "null" -msgstr "null" - -#: ../../src/rdbms/relations.txt:166 -msgid "5" -msgstr "5" - -#: ../../src/rdbms/relations.txt:166 ../../src/rdbms/relations.txt:262 -#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:326 -#: ../../src/rdbms/relations.txt:360 -msgid "The Singing Stones" -msgstr "The Singing Stones" +#: ../../src/rdbms/relations.txt:160 +msgid "Relationships" +msgstr "" -#: ../../src/rdbms/relations.txt:168 -msgid "6" -msgstr "6" - -#: ../../src/rdbms/relations.txt:168 ../../src/rdbms/relations.txt:295 -#: ../../src/rdbms/relations.txt:362 -msgid "Ancient Fairy Tales" -msgstr "Ancient Fairy Tales" - -#: ../../src/rdbms/relations.txt:170 -msgid "7" -msgstr "7" - -#: ../../src/rdbms/relations.txt:170 ../../src/rdbms/relations.txt:264 -#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:328 -#: ../../src/rdbms/relations.txt:364 -msgid "My Thoughts" -msgstr "My Thoughts" - -#: ../../src/rdbms/relations.txt:172 -msgid "8" -msgstr "8" - -#: ../../src/rdbms/relations.txt:172 ../../src/rdbms/relations.txt:299 -#: ../../src/rdbms/relations.txt:366 -msgid "To Shevchenko" -msgstr "To Shevchenko" - -#: ../../src/rdbms/relations.txt:176 -msgid "author" -msgstr "author" - -#: ../../src/rdbms/relations.txt:179 ../../src/rdbms/relations.txt:254 -#: ../../src/rdbms/relations.txt:283 ../../src/rdbms/relations.txt:318 -#: ../../src/rdbms/relations.txt:350 -msgid "name" -msgstr "name" - -#: ../../src/rdbms/relations.txt:181 ../../src/rdbms/relations.txt:256 -#: ../../src/rdbms/relations.txt:260 ../../src/rdbms/relations.txt:262 -#: ../../src/rdbms/relations.txt:285 ../../src/rdbms/relations.txt:289 -#: ../../src/rdbms/relations.txt:293 ../../src/rdbms/relations.txt:320 -#: ../../src/rdbms/relations.txt:324 ../../src/rdbms/relations.txt:326 -#: ../../src/rdbms/relations.txt:352 ../../src/rdbms/relations.txt:356 -#: ../../src/rdbms/relations.txt:360 -msgid "Larysa Kosach" -msgstr "Larysa Kosach" - -#: ../../src/rdbms/relations.txt:183 ../../src/rdbms/relations.txt:258 -#: ../../src/rdbms/relations.txt:264 ../../src/rdbms/relations.txt:287 -#: ../../src/rdbms/relations.txt:297 ../../src/rdbms/relations.txt:322 -#: ../../src/rdbms/relations.txt:328 ../../src/rdbms/relations.txt:354 -#: ../../src/rdbms/relations.txt:364 -msgid "Ivan Franko" -msgstr "Ivan Franko" - -#: ../../src/rdbms/relations.txt:185 ../../src/rdbms/relations.txt:330 -#: ../../src/rdbms/relations.txt:368 -msgid "John Doe" -msgstr "John Doe" - -#: ../../src/rdbms/relations.txt:217 -msgid "Join types" -msgstr "Join types" - -#: ../../src/rdbms/relations.txt -msgid "Cross join" -msgstr "Cross join" - -#: ../../src/rdbms/relations.txt:225 +#: ../../src/rdbms/relations.txt:162 msgid "" -"For every possible combination of rows from T1 and T2 (i.e., a Cartesian " -"product), the joined table will contain a row consisting of all columns in " -"T1 followed by all columns in T2. If the tables have N and M rows " -"respectively, the joined table will have N * M rows." +"From the point of view of the RDBMS there are no other relationships between " +"two tables except the **foreign key**. But the way the foreign keys are " +"designed brings us three concepts of the data relations." msgstr "" -"Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " -"добутку) об’єднана таблиця міститиме рядок, що складається з усіх стовпців у " -"T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M рядків " -"відповідно, об’єднана таблиця матиме N * M рядків." -#: ../../src/rdbms/relations.txt -msgid "Qualified joins" -msgstr "Qualified joins" +#: ../../src/rdbms/relations.txt:168 +msgid "One-to-many" +msgstr "" -#: ../../src/rdbms/relations.txt:236 +#: ../../src/rdbms/relations.txt:169 msgid "" -"The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` is " -"the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +"In a relational database, two tables have a one-to-many relationship if each " +"row in one table references multiple rows of the other table. For example " +"``publisher`` can publish many books, but a single ``book`` is published by " +"some specific publisher." msgstr "" -"Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " -"типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." -#: ../../src/rdbms/relations.txt:241 -msgid "INNER JOIN" -msgstr "INNER JOIN" +#: ../../src/rdbms/relations.txt:180 +msgid "One-to-one" +msgstr "" -#: ../../src/rdbms/relations.txt:243 +#: ../../src/rdbms/relations.txt:183 msgid "" -"For each row R1 of T1, the joined table has a row for each row in T2 that " -"satisfies the join condition with R1." +"You can think of one-to-one relationship as a limited version of *one-to-" +"many*." msgstr "" -"Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " -"який задовольняє умову об'єднання з R1." -#: ../../src/rdbms/relations.txt:246 -msgid "Inner join" -msgstr "Inner join" +#: ../../src/rdbms/relations.txt:186 +msgid "" +"In a relational database, two tables have a one-to-one relationship if each " +"row in one table links to exactly one row in the other table, and vice " +"versa. For example a table of ``members`` and a table of ``contacts`` might " +"have a one-to-one relationship." +msgstr "" -#: ../../src/rdbms/relations.txt:268 -msgid "LEFT OUTER JOIN" -msgstr "LEFT OUTER JOIN" +#: ../../src/rdbms/relations.txt:197 +msgid "Many-to-many" +msgstr "" -#: ../../src/rdbms/relations.txt:270 +#: ../../src/rdbms/relations.txt:198 msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not " -"satisfy the join condition with any row in T2, a joined row is added with " -"null values in columns of T2. Thus, the joined table always has at least one " -"row for each row in T1." +"In relational database, two table have many-to-many relationship if each row " +"in one table can reference multiple rows in another table, and vice versa. " +"For example table ``book`` may contain records for books authored by many " +"``authors``. On the other hand author can write multiple books. Implementing " +"a many-to-many relationship requires creation of an intermediate table, that " +"applies one-to-many relationship with both original tables." msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -"який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " -"об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " -"об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." -#: ../../src/rdbms/relations.txt:275 -msgid "Left join" -msgstr "Left join" +#~ msgid "sql, db, database, relationship" +#~ msgstr "sql, db, database, relationship" + +#~ msgid "It's time to talk about **data relations**." +#~ msgstr "Настав час поговорити про **відносини даних**." + +#~ msgid "" +#~ "For example your database contains two tables: ``weather`` and ``city``. " +#~ "The diagram below demonstrates the overall data structure:" +#~ msgstr "" +#~ "Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " +#~ "Діаграма нижче демонструє загальну структуру даних:" + +#~ msgid "" +#~ "Consider the following problem: you want to make sure no one can insert a " +#~ "record into ``weather`` without a matching entry in ``city`` table. This " +#~ "is called maintaining the *referential integrity* of your data. In " +#~ "simplistic database systems this would be implemented (if at all) by " +#~ "first looking at the cities table to check if a matching record exists, " +#~ "and then inserting or rejecting the new weather records. This approach " +#~ "has a number of problems and is very inconvenient." +#~ msgstr "" +#~ "Розглянемо таку проблему: ви хочете переконатися, що ніхто не може " +#~ "вставити запис до ``weather`` без відповідного запису в ``city`` таблиці. " +#~ "Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " +#~ "системах баз даних це було б реалізовано (якщо взагалі) спочатку " +#~ "переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " +#~ "потім вставляв або відхиляв нові записи погоди. Цей підхід має низку " +#~ "проблем і дуже незручно." + +#~ msgid "" +#~ "This declaration creates a relationship between two (or even more) tables." +#~ msgstr "" +#~ "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." + +#~ msgid "" +#~ "So far, you have knowledge about **primary** keys. The **foreign** key is " +#~ "a column, that *references* some another table. In common, it's a " +#~ "reference to another table's PK; but there is no limitation of this kind, " +#~ "any column can be referenced by another one. FKs handle data integrity " +#~ "only, it's not required for FK to be non-NULL value." +#~ msgstr "" +#~ "Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " +#~ "посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; " +#~ "але такого роду обмежень немає , на будь-який стовпець може посилатися " +#~ "інший. FK обробляє лише цілісність даних, не обов'язково, щоб значення FK " +#~ "було відмінним від NULL." + +#~ msgid "" +#~ "The relation's properties are described by CONSTRAINTS and the database's " +#~ "structure." +#~ msgstr "" +#~ "Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." + +#~ msgid "" +#~ "For example, modifying declaration with ``NOT NULL`` constraint grants " +#~ "that each record within a table has a matching one entity in another " +#~ "table." +#~ msgstr "" +#~ "Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " +#~ "запис у таблиці має відповідну сутність в іншій таблиці." + +#~ msgid "This brings us to various relationship models." +#~ msgstr "Це підводить нас до різних моделей відносин." + +#~ msgid "One-to-many relationship (1-to-N)" +#~ msgstr "Зв'язок один-до-багатьох (1-до-N)" + +#~ msgid "This is the most common relationship." +#~ msgstr "Це найпоширеніший зв'язок." + +#~ msgid "" +#~ "For the example above there are no limitations on temperature " +#~ "measurements in a specified city. So, a single city may has 0 or N " +#~ "related records in ``weather`` table. But each weather record is related " +#~ "to the only one city." +#~ msgstr "" +#~ "Для наведеного вище прикладу немає обмежень на вимірювання температури у " +#~ "визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних " +#~ "записів у таблиці ``погода``. Але кожен запис погоди пов'язаний до " +#~ "єдиного міста." + +#~ msgid "" +#~ "Another example is employees and office buildings they work in. Some big " +#~ "company may have multiple offices and employee across the globe. Multiple " +#~ "employees can be present in a single office building at a time. But each " +#~ "employee can be physically located only in a single office at a time." +#~ msgstr "" +#~ "Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " +#~ "Деякі великі компанії можуть мати кілька офісів і співробітників по " +#~ "всьому світу. Декілька працівників можуть бути присутні в одній офісній " +#~ "будівлі одночасно. Але кожен працівник може фізично перебувати лише в " +#~ "одному офісі одночасно." + +#~ msgid "One-to-one relationship (1-to-1)" +#~ msgstr "One-to-one relationship (1-to-1)" + +#~ msgid "" +#~ "``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there " +#~ "is and only one matching record. Back to the example with employees. " +#~ "Multiple workstations (personal computers) are located in each office " +#~ "building. The only one person can occupy the only one work station at a " +#~ "time." +#~ msgstr "" +#~ "Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб " +#~ "забезпечити наявність лише одного відповідного запису. Повернемося до " +#~ "прикладу зі співробітниками. Кілька робочих станцій (персональних " +#~ "комп'ютерів) розташовані в у кожній офісній будівлі. Лише одна особа може " +#~ "займати лише одну робочу станцію одночасно." + +#~ msgid "Many-to-many relationship (N-to-N)" +#~ msgstr "Зв'язок багато-до-багатьох (N-до-N)" + +#~ msgid "" +#~ "These relationships require additional table. A good example may be a " +#~ "*project role*. There are many of them in a production team. And some " +#~ "employees may be assigned to the same role (e.g. developers, testers " +#~ "etc.). But also a single person can be a developer and tester at a time." +#~ msgstr "" +#~ "Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути " +#~ "роль у проекті. Їх багато у виробничій команді. І деяким працівникам може " +#~ "бути призначено ту саму роль (наприклад, розробники, тестувальники і т. " +#~ "д.). Але також одна людина може бути розробником і тестувальником " +#~ "одночасно." + +#~ msgid "Joining data" +#~ msgstr "Об'єднання даних" + +#~ msgid "" +#~ "``JOIN`` is used to *join* data fetched from multiple related tables. To " +#~ "build a valid query you are to set the tables to join and parameter to " +#~ "use for this operation." +#~ msgstr "" +#~ "``JOIN`` використовується для об'єднання даних, отриманих з кількох " +#~ "пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " +#~ "таблиці для об'єднання та параметр, який використовується для цієї " +#~ "операції." + +#~ msgid "Common syntax is:" +#~ msgstr "Загальний синтаксис:" + +#~ msgid "" +#~ "There are various join types available. Here are is some dummy data to " +#~ "demonstrate their purpose." +#~ msgstr "" +#~ "Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб " +#~ "продемонструвати їх призначення." + +#~ msgid "poem" +#~ msgstr "poem" + +#~ msgid "id" +#~ msgstr "id" + +#~ msgid "title" +#~ msgstr "title" + +#~ msgid "author_id" +#~ msgstr "author_id" + +#~ msgid "1" +#~ msgstr "1" + +#~ msgid "On the Field of Battle" +#~ msgstr "On the Field of Battle" + +#~ msgid "2" +#~ msgstr "2" + +#~ msgid "Moses" +#~ msgstr "Moses" + +#~ msgid "3" +#~ msgstr "3" + +#~ msgid "The Forest Song" +#~ msgstr "The Forest Song" + +#~ msgid "4" +#~ msgstr "4" + +#~ msgid "In the Catacombs" +#~ msgstr "In the Catacombs" + +#~ msgid "null" +#~ msgstr "null" + +#~ msgid "5" +#~ msgstr "5" + +#~ msgid "The Singing Stones" +#~ msgstr "The Singing Stones" + +#~ msgid "6" +#~ msgstr "6" + +#~ msgid "Ancient Fairy Tales" +#~ msgstr "Ancient Fairy Tales" + +#~ msgid "7" +#~ msgstr "7" + +#~ msgid "My Thoughts" +#~ msgstr "My Thoughts" + +#~ msgid "8" +#~ msgstr "8" + +#~ msgid "To Shevchenko" +#~ msgstr "To Shevchenko" + +#~ msgid "author" +#~ msgstr "author" + +#~ msgid "name" +#~ msgstr "name" + +#~ msgid "Larysa Kosach" +#~ msgstr "Larysa Kosach" + +#~ msgid "Ivan Franko" +#~ msgstr "Ivan Franko" + +#~ msgid "John Doe" +#~ msgstr "John Doe" + +#~ msgid "Join types" +#~ msgstr "Join types" + +#~ msgid "Cross join" +#~ msgstr "Cross join" + +#~ msgid "" +#~ "For every possible combination of rows from T1 and T2 (i.e., a Cartesian " +#~ "product), the joined table will contain a row consisting of all columns " +#~ "in T1 followed by all columns in T2. If the tables have N and M rows " +#~ "respectively, the joined table will have N * M rows." +#~ msgstr "" +#~ "Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " +#~ "добутку) об’єднана таблиця міститиме рядок, що складається з усіх " +#~ "стовпців у T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M " +#~ "рядків відповідно, об’єднана таблиця матиме N * M рядків." + +#~ msgid "Qualified joins" +#~ msgstr "Qualified joins" -#: ../../src/rdbms/relations.txt:303 -msgid "RIGHT OUTER JOIN" -msgstr "RIGHT OUTER JOIN" +#~ msgid "" +#~ "The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` " +#~ "is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." +#~ msgstr "" +#~ "Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " +#~ "типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." -#: ../../src/rdbms/relations.txt:305 -msgid "" -"First, an inner join is performed. Then, for each row in T2 that does not " -"satisfy the join condition with any row in T1, a joined row is added with " -"null values in columns of T1. This is the converse of a left join: the " -"result table will always have a row for each row in T2." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " -"який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " -"рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " -"лівого об'єднання: таблиця результатів завжди матиме рядок для кожного рядка " -"в T2." - -#: ../../src/rdbms/relations.txt:310 -msgid "Right join" -msgstr "Right join" - -#: ../../src/rdbms/relations.txt:334 -msgid "FULL OUTER JOIN" -msgstr "FULL OUTER JOIN" - -#: ../../src/rdbms/relations.txt:336 -msgid "" -"First, an inner join is performed. Then, for each row in T1 that does not " -"satisfy the join condition with any row in T2, a joined row is added with " -"null values in columns of T2. Also, for each row of T2 that does not satisfy " -"the join condition with any row in T1, a joined row with null values in the " -"columns of T1 is added." -msgstr "" -"Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -"який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " -"об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для кожного " -"рядка T2, який не задовольняє умову з'єднання з будь-яким рядком T1, " -"додається об'єднаний рядок із нульовими значеннями в стовпцях T1." - -#: ../../src/rdbms/relations.txt:342 -msgid "Full join" -msgstr "Full join" +#~ msgid "INNER JOIN" +#~ msgstr "INNER JOIN" + +#~ msgid "" +#~ "For each row R1 of T1, the joined table has a row for each row in T2 that " +#~ "satisfies the join condition with R1." +#~ msgstr "" +#~ "Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " +#~ "який задовольняє умову об'єднання з R1." + +#~ msgid "Inner join" +#~ msgstr "Inner join" + +#~ msgid "LEFT OUTER JOIN" +#~ msgstr "LEFT OUTER JOIN" + +#~ msgid "" +#~ "First, an inner join is performed. Then, for each row in T1 that does not " +#~ "satisfy the join condition with any row in T2, a joined row is added with " +#~ "null values in columns of T2. Thus, the joined table always has at least " +#~ "one row for each row in T1." +#~ msgstr "" +#~ "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +#~ "який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " +#~ "об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " +#~ "об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." + +#~ msgid "Left join" +#~ msgstr "Left join" + +#~ msgid "RIGHT OUTER JOIN" +#~ msgstr "RIGHT OUTER JOIN" + +#~ msgid "" +#~ "First, an inner join is performed. Then, for each row in T2 that does not " +#~ "satisfy the join condition with any row in T1, a joined row is added with " +#~ "null values in columns of T1. This is the converse of a left join: the " +#~ "result table will always have a row for each row in T2." +#~ msgstr "" +#~ "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " +#~ "який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " +#~ "рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " +#~ "лівого об'єднання: таблиця результатів завжди матиме рядок для кожного " +#~ "рядка в T2." + +#~ msgid "Right join" +#~ msgstr "Right join" + +#~ msgid "FULL OUTER JOIN" +#~ msgstr "FULL OUTER JOIN" + +#~ msgid "" +#~ "First, an inner join is performed. Then, for each row in T1 that does not " +#~ "satisfy the join condition with any row in T2, a joined row is added with " +#~ "null values in columns of T2. Also, for each row of T2 that does not " +#~ "satisfy the join condition with any row in T1, a joined row with null " +#~ "values in the columns of T1 is added." +#~ msgstr "" +#~ "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " +#~ "який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " +#~ "об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для " +#~ "кожного рядка T2, який не задовольняє умову з'єднання з будь-яким рядком " +#~ "T1, додається об'єднаний рядок із нульовими значеннями в стовпцях T1." + +#~ msgid "Full join" +#~ msgstr "Full join" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/structure.po b/src/_locales/uk/LC_MESSAGES/rdbms/structure.po new file mode 100644 index 000000000..95993cbf0 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/structure.po @@ -0,0 +1,410 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-16 13:55+0000\n" +"PO-Revision-Date: 2023-12-21 04:01+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/rdbms/structure.txt:3 +msgid "Structure of Data in RDBMS" +msgstr "Структура даних в СУБД" + +#: ../../src/rdbms/structure.txt:5 +msgid "" +"The database itself is a set of data stored in a computer. This data is " +"usually structured in a way that makes them easily accessible. Relational " +"databases use the structure that allows us to identify and access data in " +"*relation* to another piece of data in the database." +msgstr "" +"База даних - це набір даних, що зберігається в комп'ютері. Ці дані зазвичай " +"структуровані таким чином, щоб зробити їх легкодоступними. Реляційні бази " +"даних використовують структуру, яка дозволяє ідентифікувати та отримувати " +"доступ до даних у \"зв'язку\" з іншими даними в базі даних." + +#: ../../src/rdbms/structure.txt:10 +msgid "" +"Understanding the basic structure of an RDBMS is crucial for effectively " +"managing and querying data. In this section, we delve into the core " +"components: *tables*, *rows*, and *columns*, and how they form the " +"foundation of a relational database." +msgstr "" +"Розуміння базової структури СКБД має вирішальне значення для ефективного " +"керування даними та запитами до них. У цьому розділі ми заглибимося в " +"основні компоненти: *таблиці*, *рядки* та *стовпці*, а також те, як вони " +"формують основу реляційної бази даних." + +#: ../../src/rdbms/structure.txt:20 +msgid "Tables" +msgstr "Таблиці" + +#: ../../src/rdbms/structure.txt:25 +msgid "Tables are the building blocks." +msgstr "Столи - це будівельні блоки." + +#: ../../src/rdbms/structure.txt:29 +msgid "Some documents may name tables as *relations*." +msgstr "У деяких документах таблиці можуть називатися *зв'язками*." + +#: ../../src/rdbms/structure.txt:31 +msgid "" +"A table in an RDBMS is akin to a spreadsheet. It is where data is stored and " +"organized. Each table in a database represents a specific entity or concept, " +"like ``Customers`` or ``Orders``." +msgstr "" +"Таблиця в СКБД схожа на електронну таблицю. Це місце, де зберігаються та " +"організовуються дані. Кожна таблиця в базі даних представляє певну сутність " +"або концепцію, наприклад, \"Клієнти\" або \"Замовлення\"." + +#: ../../src/rdbms/structure.txt:36 +msgid "Structure and purpose" +msgstr "Структура та призначення" + +#: ../../src/rdbms/structure.txt:38 +msgid "" +"A table consists of rows and columns, similar to a grid. All the rows and " +"cols together are the data *related* to some subject or concept within a " +"database." +msgstr "" +"Таблиця складається з рядків і стовпців, подібно до сітки. Всі рядки і " +"стовпчики разом - це дані, \"пов'язані\" з певним предметом або поняттям у " +"базі даних." + +#: ../../src/rdbms/structure.txt:41 +msgid "" +"Tables hold data about a particular subject, such as all the information " +"related to customer transactions, or books available in a local library." +msgstr "" +"Таблиці містять дані про певний предмет, наприклад, всю інформацію, " +"пов'язану з транзакціями клієнтів, або книги, доступні в місцевій бібліотеці." + +#: ../../src/rdbms/structure.txt:45 +msgid "Naming conventions" +msgstr "Умовні позначення" + +#: ../../src/rdbms/structure.txt:49 +msgid "" +"The conventions below aren't related to tables only, but also they are used " +"when naming databases and columns." +msgstr "" +"Умовні позначення, наведені нижче, стосуються не лише таблиць, вони також " +"використовуються при іменуванні баз даних і стовпців." + +#: ../../src/rdbms/structure.txt:52 +msgid "Use nouns that describe the subject the best." +msgstr "Використовуйте іменники, які найкраще описують предмет." + +#: ../../src/rdbms/structure.txt:53 +msgid "Use lowercase names, e.g. ``user`` instead of ``Users`` or ``USERS``." +msgstr "" +"Використовуйте малі літери, наприклад, ``user`` замість ``Users`` або " +"``USERS``." + +#: ../../src/rdbms/structure.txt:54 +msgid "" +"If the name must consist of two or more words, use underscore to connect " +"them, e.g. ``snake_case``, ``user_account``." +msgstr "" +"Якщо назва складається з двох або більше слів, використовуйте підкреслення, " +"щоб з'єднати їх, наприклад, ``nake_case``, ``user_account``." + +#: ../../src/rdbms/structure.txt:56 +msgid "Avoid use of dots, spaces, or dashes." +msgstr "Уникайте використання крапок, пробілів або тире." + +#: ../../src/rdbms/structure.txt:57 +msgid "" +"When naming objects, balance the objective of keeping names short and easy " +"to use with the objective of making names as descriptive as possible." +msgstr "" +"Називаючи об'єкти, балансуйте між бажанням, щоб назви були короткими і " +"простими у використанні, та бажанням, щоб вони були максимально описовими." + +#: ../../src/rdbms/structure.txt:59 +msgid "Singular names are preferred over plurals." +msgstr "Імена в однині мають перевагу над множиною." + +#: ../../src/rdbms/structure.txt:62 +msgid "Rows: Individual Records" +msgstr "Ряди: Індивідуальні записи" + +#: ../../src/rdbms/structure.txt:64 +msgid "" +"Tables can have hundreds, thousands, sometimes even millions of rows of " +"data. These rows are offer called *records*. Each row in a table represents " +"a single entity of a subject. For example, ``book`` table represents an " +"abstract book with all its attributes, like title, author etc. And a " +"specific row within this table represents a concrete book." +msgstr "" +"Таблиці можуть містити сотні, тисячі, іноді навіть мільйони рядків даних. Ці " +"рядки називаються *записами*. Кожен рядок у таблиці представляє одну " +"сутність предмета. Наприклад, таблиця ``книга`` представляє абстрактну книгу " +"з усіма її атрибутами, такими як назва, автор тощо. А конкретний рядок у цій " +"таблиці представляє конкретну книгу." + +#: ../../src/rdbms/structure.txt:70 +msgid "Every row should ideally have something that make it unique." +msgstr "В ідеалі кожен ряд повинен мати щось, що робить його унікальним." + +#: ../../src/rdbms/structure.txt:72 +msgid "" +"Rows in a table can be linked to other rows in other tables or within the " +"same table, maintaining relationships and data integrity." +msgstr "" +"Рядки в таблиці можуть бути пов'язані з іншими рядками в інших таблицях або " +"в межах однієї таблиці, зберігаючи зв'язки і цілісність даних." + +#: ../../src/rdbms/structure.txt:76 +msgid "Columns: Attributes of Data" +msgstr "Стовпці: Атрибути даних" + +#: ../../src/rdbms/structure.txt:78 +msgid "" +"Columns in a table represent the attributes of the entity. For instance, " +"``book`` table may contain columns ``title``, ``author``, ``publisher`` etc." +msgstr "" +"Стовпці у таблиці представляють атрибути сутності. Наприклад, таблиця " +"``книга`` може містити стовпці ``назва``, ``автор``, ``видавництво`` тощо." + +#: ../../src/rdbms/structure.txt:81 +msgid "Each column has a defined data type, like ``integer``, ``string`` etc." +msgstr "" +"Кожен стовпець має певний тип даних, наприклад, ``ціле число``, ``рядок`` " +"тощо." + +#: ../../src/rdbms/structure.txt:84 +msgid "Constraints" +msgstr "Обмеження" + +#: ../../src/rdbms/structure.txt:86 +msgid "" +"Columns can have constraints to enforce data integrity. For example, some " +"columns cannot be empty, or store values under or above some threshold. " +"Several constraints can be combined together." +msgstr "" +"Стовпці можуть мати обмеження для забезпечення цілісності даних. Наприклад, " +"деякі стовпці не можуть бути порожніми або зберігати значення нижче або вище " +"певного порогу. Кілька обмежень можна комбінувати разом." + +#: ../../src/rdbms/structure.txt:91 +msgid "Examples" +msgstr "Приклади" + +#: ../../src/rdbms/structure.txt:93 +msgid "Authors table" +msgstr "Таблиця авторів" + +#: ../../src/rdbms/structure.txt:1 +msgid "id" +msgstr "id" + +#: ../../src/rdbms/structure.txt:1 +msgid "first_name" +msgstr "first_name" + +#: ../../src/rdbms/structure.txt:1 +msgid "last_name" +msgstr "last_name" + +#: ../../src/rdbms/structure.txt:1 +msgid "country" +msgstr "country" + +#: ../../src/rdbms/structure.txt:1 +msgid "birthdate" +msgstr "birthdate" + +#: ../../src/rdbms/structure.txt:1 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/structure.txt:1 +msgid "Letta" +msgstr "Letta" + +#: ../../src/rdbms/structure.txt:1 +msgid "Casbolt" +msgstr "Casbolt" + +#: ../../src/rdbms/structure.txt:1 +msgid "Poland" +msgstr "Poland" + +#: ../../src/rdbms/structure.txt:1 +msgid "1947-04-18" +msgstr "1947-04-18" + +#: ../../src/rdbms/structure.txt:1 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/structure.txt:1 +msgid "Robbyn" +msgstr "Robbyn" + +#: ../../src/rdbms/structure.txt:1 +msgid "Attwoul" +msgstr "Attwoul" + +#: ../../src/rdbms/structure.txt:1 +msgid "1954-10-17" +msgstr "1954-10-17" + +#: ../../src/rdbms/structure.txt:1 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/structure.txt:1 +msgid "Hesther" +msgstr "Hesther" + +#: ../../src/rdbms/structure.txt:1 +msgid "Kisby" +msgstr "Kisby" + +#: ../../src/rdbms/structure.txt:1 +msgid "Ukraine" +msgstr "Ukraine" + +#: ../../src/rdbms/structure.txt:1 +msgid "1941-07-21" +msgstr "1941-07-21" + +#: ../../src/rdbms/structure.txt:1 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/structure.txt:1 +msgid "Gav" +msgstr "Gav" + +#: ../../src/rdbms/structure.txt:1 +msgid "Jewett" +msgstr "Jewett" + +#: ../../src/rdbms/structure.txt:1 +msgid "Czech Republic" +msgstr "Czech Republic" + +#: ../../src/rdbms/structure.txt:1 +msgid "1988-02-05" +msgstr "1988-02-05" + +#: ../../src/rdbms/structure.txt:1 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/structure.txt:1 +msgid "Jorrie" +msgstr "Jorrie" + +#: ../../src/rdbms/structure.txt:1 +msgid "Klehyn" +msgstr "Klehyn" + +#: ../../src/rdbms/structure.txt:1 +msgid "United States" +msgstr "United States" + +#: ../../src/rdbms/structure.txt:1 +msgid "1941-08-07" +msgstr "1941-08-07" + +#: ../../src/rdbms/structure.txt:1 +msgid "6" +msgstr "6" + +#: ../../src/rdbms/structure.txt:1 +msgid "Genevieve" +msgstr "Genevieve" + +#: ../../src/rdbms/structure.txt:1 +msgid "Ollington" +msgstr "Ollington" + +#: ../../src/rdbms/structure.txt:1 +msgid "1921-08-27" +msgstr "1921-08-27" + +#: ../../src/rdbms/structure.txt:1 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/structure.txt:1 +msgid "Carrissa" +msgstr "Carrissa" + +#: ../../src/rdbms/structure.txt:1 +msgid "Arrandale" +msgstr "Arrandale" + +#: ../../src/rdbms/structure.txt:1 +msgid "United Kingdom" +msgstr "United Kingdom" + +#: ../../src/rdbms/structure.txt:1 +msgid "1982-08-20" +msgstr "1982-08-20" + +#: ../../src/rdbms/structure.txt:1 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/structure.txt:1 +msgid "Josepha" +msgstr "Josepha" + +#: ../../src/rdbms/structure.txt:1 +msgid "Dominichelli" +msgstr "Dominichelli" + +#: ../../src/rdbms/structure.txt:1 +msgid "1976-12-03" +msgstr "1976-12-03" + +#: ../../src/rdbms/structure.txt:1 +msgid "9" +msgstr "9" + +#: ../../src/rdbms/structure.txt:1 +msgid "Ario" +msgstr "Ario" + +#: ../../src/rdbms/structure.txt:1 +msgid "Hepher" +msgstr "Hepher" + +#: ../../src/rdbms/structure.txt:1 +msgid "2003-10-11" +msgstr "2003-10-11" + +#: ../../src/rdbms/structure.txt:1 +msgid "10" +msgstr "10" + +#: ../../src/rdbms/structure.txt:1 +msgid "Walker" +msgstr "Walker" + +#: ../../src/rdbms/structure.txt:1 +msgid "Grolmann" +msgstr "Grolmann" + +#: ../../src/rdbms/structure.txt:1 +msgid "1964-02-17" +msgstr "1964-02-17" From 4adfbda8b9c86b97909b4b3c43ee99e7e3cc959d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 17 Nov 2023 23:49:16 +0200 Subject: [PATCH 575/689] Update blog specification submodule --- src/appx/blog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/appx/blog b/src/appx/blog index 5c5d0bc65..6bd83e049 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit 5c5d0bc65ed259be549bff3d5e86ca9c07ca198e +Subproject commit 6bd83e049ab696587fd5f53a8101e3a66575b006 From 9f9f87a3faebbc3b05b96d8609ff385c668d6938 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 17 Nov 2023 23:58:03 +0200 Subject: [PATCH 576/689] Update blog specification translations --- src/_locales/uk/LC_MESSAGES/appx/blog/spec.po | 406 ++++++++++-------- 1 file changed, 217 insertions(+), 189 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po index fb01b5440..1a54bad42 100644 --- a/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po +++ b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:05+0300\n" +"POT-Creation-Date: 2023-11-17 23:49+0200\n" +"PO-Revision-Date: 2023-11-17 23:56+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -16,12 +16,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" #: ../../src/appx/blog/spec.rst:10 msgid "Blog Site" -msgstr "" +msgstr "Сайт Блогу" #: ../../src/appx/blog/spec.rst:12 msgid "" @@ -178,57 +178,66 @@ msgid "``/topics/``: A list of topics available on the site." msgstr "``/topics/``: Перелік доступних тем на сайті." #: ../../src/appx/blog/spec.rst:74 +msgid "" +"``/topics//add/``: Add the selected topic to preferred topics list." +msgstr "``/topics//add/``: Додати обрану тему до списку обраних тем." + +#: ../../src/appx/blog/spec.rst:75 +msgid "``/topics//remove/``: Removes the selected topic from preferred." +msgstr "``/topics//remove/``: Видаляє вибрану тему з обраних." + +#: ../../src/appx/blog/spec.rst:76 msgid "``/topics//subscribe/``: A view to subscribe for a topic." msgstr "``/topics//subscribe/``: Представлення для підписки на тему." -#: ../../src/appx/blog/spec.rst:75 +#: ../../src/appx/blog/spec.rst:77 msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." -#: ../../src/appx/blog/spec.rst:76 +#: ../../src/appx/blog/spec.rst:78 msgid "``/profile//``: A site user's personal page." msgstr "``/profile//``: Особиста сторінка користувача сайту." -#: ../../src/appx/blog/spec.rst:77 +#: ../../src/appx/blog/spec.rst:79 msgid "" "``/set-password/``: This route will be used to change users' credential data." msgstr "" "``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " "даних користувачів." -#: ../../src/appx/blog/spec.rst:79 +#: ../../src/appx/blog/spec.rst:81 msgid "``/set-userdata/``: This route will be user to change users' data." msgstr "" "``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " "користувачів." -#: ../../src/appx/blog/spec.rst:80 +#: ../../src/appx/blog/spec.rst:82 msgid "``/deactivate/``: Account deactivation (deletion) view." msgstr "" "``/deactivate/``: Представлення для деактивації облікового запису " "(видалення)." -#: ../../src/appx/blog/spec.rst:81 +#: ../../src/appx/blog/spec.rst:83 msgid "``/register/``: This view contains a user registration form." msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." -#: ../../src/appx/blog/spec.rst:82 +#: ../../src/appx/blog/spec.rst:84 msgid "``/login/``: This view contains a login form." msgstr "``/login/``: Сторінка з формою для логіна." -#: ../../src/appx/blog/spec.rst:83 +#: ../../src/appx/blog/spec.rst:85 msgid "" "``/logout/``: Logout page. This view should redirect user back to homepage." msgstr "" "``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " "сторінку.." -#: ../../src/appx/blog/spec.rst:87 ../../src/appx/blog/spec.rst:199 -#: ../../src/appx/blog/spec.rst:229 ../../src/appx/blog/spec.rst:404 +#: ../../src/appx/blog/spec.rst:89 ../../src/appx/blog/spec.rst:201 +#: ../../src/appx/blog/spec.rst:231 ../../src/appx/blog/spec.rst:409 msgid "Optional task(s)" msgstr "Додаткові завдання" -#: ../../src/appx/blog/spec.rst:89 +#: ../../src/appx/blog/spec.rst:91 msgid "" "``/archive///``: This view provides a list of articles " "published on a specified month of a specified year. This view should apply " @@ -245,11 +254,11 @@ msgstr "" "обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " "URL-адрес:" -#: ../../src/appx/blog/spec.rst:103 +#: ../../src/appx/blog/spec.rst:105 msgid "Challenge: Data models" msgstr "Завдання: моделі даних" -#: ../../src/appx/blog/spec.rst:106 +#: ../../src/appx/blog/spec.rst:108 msgid "" "Django admin may be used to create some dummy data. To gather access to " "admin section you need to create a superuser. The easiest way to do that is " @@ -260,43 +269,43 @@ msgstr "" "суперкористувача. Найпростіший спосіб зробити це - використовувати команду " "Django:" -#: ../../src/appx/blog/spec.rst:115 ../../src/appx/blog/spec.rst:216 +#: ../../src/appx/blog/spec.rst:117 ../../src/appx/blog/spec.rst:218 msgid "General" msgstr "Основне" -#: ../../src/appx/blog/spec.rst:116 +#: ../../src/appx/blog/spec.rst:118 msgid "Each model will be registered for admin site." msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." -#: ../../src/appx/blog/spec.rst:119 ../../src/appx/blog/spec.rst:451 +#: ../../src/appx/blog/spec.rst:121 ../../src/appx/blog/spec.rst:456 msgid "Article topic" msgstr "Тема статті" -#: ../../src/appx/blog/spec.rst:120 +#: ../../src/appx/blog/spec.rst:122 msgid "This is a simple model, that contains information about topic:" msgstr "Ось проста модель, що містить інформацію про тему:" -#: ../../src/appx/blog/spec.rst:122 +#: ../../src/appx/blog/spec.rst:124 msgid "topic title (unique value, 64 characters or fewer)" msgstr "назва теми (унікальне значення, не більше 64 символів)" -#: ../../src/appx/blog/spec.rst:123 +#: ../../src/appx/blog/spec.rst:125 msgid "topic short description (255 characters or fewer)" msgstr "короткий опис теми (не більше 255 символів)" -#: ../../src/appx/blog/spec.rst:126 ../../src/appx/blog/spec.rst:465 +#: ../../src/appx/blog/spec.rst:128 ../../src/appx/blog/spec.rst:470 msgid "Article" msgstr "Стаття" -#: ../../src/appx/blog/spec.rst:127 +#: ../../src/appx/blog/spec.rst:129 msgid "Article requires title (255 characters or fewer)." msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." -#: ../../src/appx/blog/spec.rst:128 +#: ../../src/appx/blog/spec.rst:130 msgid "Article requires content (at least 255 characters)." msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." -#: ../../src/appx/blog/spec.rst:129 +#: ../../src/appx/blog/spec.rst:131 msgid "" "Creation date should be autogenerated at article creation, and would never " "be updated." @@ -304,27 +313,27 @@ msgstr "" "Дата створення буде автоматично генеруватися при створенні статті і не буде " "оновлюватися пізніше." -#: ../../src/appx/blog/spec.rst:131 +#: ../../src/appx/blog/spec.rst:133 msgid "Updated date will be update at each article save." msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." -#: ../../src/appx/blog/spec.rst:134 ../../src/appx/blog/spec.rst:458 +#: ../../src/appx/blog/spec.rst:136 ../../src/appx/blog/spec.rst:463 msgid "Article comment" msgstr "Коментар до статті" -#: ../../src/appx/blog/spec.rst:135 +#: ../../src/appx/blog/spec.rst:137 msgid "Comment requires creation date (autogenerated)." msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." -#: ../../src/appx/blog/spec.rst:136 +#: ../../src/appx/blog/spec.rst:138 msgid "Comment requires message text." msgstr "Коментар вимагає наявності тексту повідомлення." -#: ../../src/appx/blog/spec.rst:139 +#: ../../src/appx/blog/spec.rst:141 msgid "Relationships" msgstr "Відносини" -#: ../../src/appx/blog/spec.rst:141 +#: ../../src/appx/blog/spec.rst:143 msgid "" "Standard Django user model **will be** used for now. To apply model " "reference pass ``\"auth.User\"`` as related model. Users can be created via " @@ -335,11 +344,11 @@ msgstr "" "модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " "також можете посилатися на ту саму модель, як показано нижче:" -#: ../../src/appx/blog/spec.rst:154 +#: ../../src/appx/blog/spec.rst:156 msgid "``article`` and ``topics`` have *many-to-many* relationship." msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." -#: ../../src/appx/blog/spec.rst:155 +#: ../../src/appx/blog/spec.rst:157 msgid "" "``article`` and ``user`` have *one-to-many* relationship. A article can have " "**only one** author, but users can create as many articles as they want." @@ -348,7 +357,7 @@ msgstr "" "бути **лише один** автор, але користувачі можуть створювати стільки статей, " "скільки їм потрібно." -#: ../../src/appx/blog/spec.rst:158 +#: ../../src/appx/blog/spec.rst:160 msgid "" "``article`` and ``comment`` have *one-to-many* relationship. A article may " "be a container for many comments, but a comment is related to a single " @@ -358,7 +367,7 @@ msgstr "" "бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " "однією статтею." -#: ../../src/appx/blog/spec.rst:161 +#: ../../src/appx/blog/spec.rst:163 msgid "" "``comment`` and ``user`` have *one-to-many* relationship. It's similar to " "*article - user* relationship." @@ -366,7 +375,7 @@ msgstr "" "``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " "відношення *стаття - користувач*." -#: ../../src/appx/blog/spec.rst:163 +#: ../../src/appx/blog/spec.rst:165 msgid "" "``topic`` and ``user`` use *many-to-many* relationship. A single user can " "prefer none or as many topics as needed and vice versa. This relationship " @@ -385,15 +394,15 @@ msgstr "" "список статей для користувача, а *notify* відповідає за розсилку новин для " "користувача." -#: ../../src/appx/blog/spec.rst:174 +#: ../../src/appx/blog/spec.rst:176 msgid "UML diagram" msgstr "UML діаграми" -#: ../../src/appx/blog/spec.rst:179 +#: ../../src/appx/blog/spec.rst:181 msgid "Challenge: ORM" msgstr "Завдання: ORM" -#: ../../src/appx/blog/spec.rst:181 +#: ../../src/appx/blog/spec.rst:183 msgid "" "Update existing views to represent entities that are actually stored inside " "the project's database." @@ -401,20 +410,20 @@ msgstr "" "Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " "в базі даних проекту." -#: ../../src/appx/blog/spec.rst:184 +#: ../../src/appx/blog/spec.rst:186 msgid "``/``: should represent a list of existing articles." msgstr "``/``: повинен представляти список існуючих статей." -#: ../../src/appx/blog/spec.rst:185 +#: ../../src/appx/blog/spec.rst:187 msgid "``/
    /``: should represent a single existing article." msgstr "``/
    /``: повинен представляти окрему існуючу статтю." -#: ../../src/appx/blog/spec.rst:186 +#: ../../src/appx/blog/spec.rst:188 msgid "Detail view should obtain a list of article related comments." msgstr "" "Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." -#: ../../src/appx/blog/spec.rst:187 +#: ../../src/appx/blog/spec.rst:189 msgid "" "``/profile//``: should contain information about user and a " "list of articles authored by this user." @@ -422,7 +431,7 @@ msgstr "" "``/profile//``: повинен містити інформацію про користувача та " "список статей, написаних цим користувачем." -#: ../../src/appx/blog/spec.rst:189 +#: ../../src/appx/blog/spec.rst:191 msgid "" "All views related to a single entity (*detail*, *update*, *delete*, " "*profile*) should raise ``Http404`` in case entity could not be fetched." @@ -431,7 +440,7 @@ msgstr "" "*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " "не вдалося отримати." -#: ../../src/appx/blog/spec.rst:194 +#: ../../src/appx/blog/spec.rst:196 msgid "" "It's common to store dedicated functions/classes that supports some specific " "business logic in a separate module called ``services.py`` or ``utils.py`` " @@ -441,7 +450,7 @@ msgstr "" "розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." "py`` всередині директорії додатку." -#: ../../src/appx/blog/spec.rst:201 +#: ../../src/appx/blog/spec.rst:203 msgid "" "Create a service to fetch articles, ordered by a specified user preferences. " "This means, topics preferred by a user affects articles orders. Queryset " @@ -453,25 +462,25 @@ msgstr "" "зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " "початку видачі." -#: ../../src/appx/blog/spec.rst:207 +#: ../../src/appx/blog/spec.rst:209 msgid "Challenge: Templates" msgstr "Завдання: Шаблони" -#: ../../src/appx/blog/spec.rst:210 +#: ../../src/appx/blog/spec.rst:212 msgid "Helpful link: `Bootstrap template`_" msgstr "Корисне посилання: `Bootstrap template`_" -#: ../../src/appx/blog/spec.rst:213 +#: ../../src/appx/blog/spec.rst:215 msgid "Links related to user data **may be** placeholders for now." msgstr "" "Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " "наразі." -#: ../../src/appx/blog/spec.rst:217 +#: ../../src/appx/blog/spec.rst:219 msgid "**All** templates should be inherited from the ``base.html`` template." msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." -#: ../../src/appx/blog/spec.rst:218 +#: ../../src/appx/blog/spec.rst:220 msgid "" "Each page has a descriptive title HTML tag, which included ``| Blog`` " "suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." @@ -479,13 +488,13 @@ msgstr "" "Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " "наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." -#: ../../src/appx/blog/spec.rst:220 +#: ../../src/appx/blog/spec.rst:222 msgid "Each page should contain a link to homepage (``/`` URL route)." msgstr "" "Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" "``)." -#: ../../src/appx/blog/spec.rst:221 +#: ../../src/appx/blog/spec.rst:223 msgid "" "Each page contains a list of registered topics. Each view of this kind " "filters only articles of a relevant topic. This should be implemented with a " @@ -495,87 +504,87 @@ msgstr "" "типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " "власного обробника контексту шаблону (template context processor)." -#: ../../src/appx/blog/spec.rst:224 +#: ../../src/appx/blog/spec.rst:226 msgid "Replace content block for *about* page with some static content." msgstr "" "Замініть блок вмісту (content block) для сторінки *about* на деякий " "статичний вміст." -#: ../../src/appx/blog/spec.rst:225 +#: ../../src/appx/blog/spec.rst:227 msgid "" "Application-level templates should be located within appropriate " "applications." msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." -#: ../../src/appx/blog/spec.rst:231 +#: ../../src/appx/blog/spec.rst:233 msgid "" "Each page should contain a list of links to archive views for the last year." msgstr "" "Кожна сторінка має містити список посилань на перегляди архіву за останній " "рік." -#: ../../src/appx/blog/spec.rst:233 +#: ../../src/appx/blog/spec.rst:235 msgid "Each page should contain an inclusion-block(s) with following links:" msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" -#: ../../src/appx/blog/spec.rst:235 +#: ../../src/appx/blog/spec.rst:237 msgid "``/registration/``: new user registration form" msgstr "``/register/``: форма реєстрації нового користувача" -#: ../../src/appx/blog/spec.rst:236 +#: ../../src/appx/blog/spec.rst:238 msgid "``/login/``: user login form" msgstr "``/login/``: форма логіна користувача" -#: ../../src/appx/blog/spec.rst:237 +#: ../../src/appx/blog/spec.rst:239 msgid "``/create/``: article creation page" msgstr "``/create/``: форма створення статті" -#: ../../src/appx/blog/spec.rst:240 +#: ../../src/appx/blog/spec.rst:242 msgid "Articles list" msgstr "Список статей" -#: ../../src/appx/blog/spec.rst:241 +#: ../../src/appx/blog/spec.rst:243 msgid "Main page contains a list of published articles." msgstr "Головна сторінка містить список опублікованих статей." -#: ../../src/appx/blog/spec.rst:242 +#: ../../src/appx/blog/spec.rst:244 msgid "Each article entity is rendered using a custom template tag." msgstr "" "Кожен елемент статті відображається за допомогою власного шаблонного тегу." -#: ../../src/appx/blog/spec.rst:243 +#: ../../src/appx/blog/spec.rst:245 msgid "``article`` template tag renders information about a article object:" msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" -#: ../../src/appx/blog/spec.rst:245 +#: ../../src/appx/blog/spec.rst:247 msgid "article title" msgstr "заголовок статті" -#: ../../src/appx/blog/spec.rst:246 +#: ../../src/appx/blog/spec.rst:248 msgid "article content (trimmed to ~50 characters)" msgstr "зміст статті (обрізаний до ~50 символів)" -#: ../../src/appx/blog/spec.rst:247 +#: ../../src/appx/blog/spec.rst:249 msgid "article creation date" msgstr "дата створення статті" -#: ../../src/appx/blog/spec.rst:248 +#: ../../src/appx/blog/spec.rst:250 msgid "related topics (3 topics or fewer)" msgstr "пов'язані теми (3 або менше)" -#: ../../src/appx/blog/spec.rst:249 +#: ../../src/appx/blog/spec.rst:251 msgid "number of related comments" msgstr "кількість коментарів до статті" -#: ../../src/appx/blog/spec.rst:256 +#: ../../src/appx/blog/spec.rst:258 msgid "Article details" msgstr "Деталі статті" -#: ../../src/appx/blog/spec.rst:258 +#: ../../src/appx/blog/spec.rst:260 msgid "Article update and deletion views **would not** affect data for now." msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." -#: ../../src/appx/blog/spec.rst:260 +#: ../../src/appx/blog/spec.rst:262 msgid "" "A article detail page contains links to **update** or **delete** current " "article." @@ -583,71 +592,71 @@ msgstr "" "На сторінці деталей статті мають бути посилання на **оновлення** або " "**видалення** поточної статті." -#: ../../src/appx/blog/spec.rst:262 +#: ../../src/appx/blog/spec.rst:264 msgid "Page provides information about article:" msgstr "Сторінка надає інформацію про статтю:" -#: ../../src/appx/blog/spec.rst:264 +#: ../../src/appx/blog/spec.rst:266 msgid "Article title" msgstr "Заголовок статті" -#: ../../src/appx/blog/spec.rst:265 +#: ../../src/appx/blog/spec.rst:267 msgid "Creation date" msgstr "Дата створення" -#: ../../src/appx/blog/spec.rst:266 ../../src/appx/blog/spec.rst:273 +#: ../../src/appx/blog/spec.rst:268 ../../src/appx/blog/spec.rst:275 msgid "Author name" msgstr "Ім'я автора" -#: ../../src/appx/blog/spec.rst:267 +#: ../../src/appx/blog/spec.rst:269 msgid "Related topics" msgstr "Пов'язані теми" -#: ../../src/appx/blog/spec.rst:268 +#: ../../src/appx/blog/spec.rst:270 msgid "Article content" msgstr "Вміст статті" -#: ../../src/appx/blog/spec.rst:270 +#: ../../src/appx/blog/spec.rst:272 msgid "Page contains a list of related comments." msgstr "Сторінка містить список пов'язаних коментарів." -#: ../../src/appx/blog/spec.rst:271 +#: ../../src/appx/blog/spec.rst:273 msgid "Each comment contains:" msgstr "Кожен коментар містить:" -#: ../../src/appx/blog/spec.rst:274 +#: ../../src/appx/blog/spec.rst:276 msgid "Comment creation time" msgstr "Час створення коментаря" -#: ../../src/appx/blog/spec.rst:275 +#: ../../src/appx/blog/spec.rst:277 msgid "Comment message" msgstr "Текст комментаря" -#: ../../src/appx/blog/spec.rst:278 +#: ../../src/appx/blog/spec.rst:280 msgid "Profile page" msgstr "Строніка профілю" -#: ../../src/appx/blog/spec.rst:279 +#: ../../src/appx/blog/spec.rst:281 msgid "Author page contains information about author:" msgstr "Сторінка автора містить інформацію про автора:" -#: ../../src/appx/blog/spec.rst:281 +#: ../../src/appx/blog/spec.rst:283 msgid "First name" msgstr "Ім'я" -#: ../../src/appx/blog/spec.rst:282 +#: ../../src/appx/blog/spec.rst:284 msgid "Last name" msgstr "Прізвище" -#: ../../src/appx/blog/spec.rst:284 +#: ../../src/appx/blog/spec.rst:286 msgid "Add more information, if needed." msgstr "Додайте більше інформації за бажанням." -#: ../../src/appx/blog/spec.rst:286 +#: ../../src/appx/blog/spec.rst:288 msgid "Author page contains a list of articles created by this author." msgstr "Сторінка автора містить список статей, створених цим автором." -#: ../../src/appx/blog/spec.rst:287 +#: ../../src/appx/blog/spec.rst:289 msgid "" "Author page contains buttons/links to change user data and password or " "deactivate a user's account." @@ -655,11 +664,11 @@ msgstr "" "Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " "деактивації облікового запису користувача." -#: ../../src/appx/blog/spec.rst:291 +#: ../../src/appx/blog/spec.rst:293 msgid "Forms" msgstr "Форми" -#: ../../src/appx/blog/spec.rst:293 +#: ../../src/appx/blog/spec.rst:295 msgid "" "There is **no need** to add actual forms now. They will be generated by " "Django. This section describes the final view of these pages. It's ok just " @@ -669,7 +678,7 @@ msgstr "" "Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " "використання достатньо створити окремі шаблони." -#: ../../src/appx/blog/spec.rst:297 +#: ../../src/appx/blog/spec.rst:299 msgid "" "``/register/`` page contains a new user registration form. It should take " "inputs from the user:" @@ -677,23 +686,23 @@ msgstr "" "Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " "повинна отримувати введені дані від користувача:" -#: ../../src/appx/blog/spec.rst:300 ../../src/appx/blog/spec.rst:308 +#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:310 msgid "username" msgstr "username" -#: ../../src/appx/blog/spec.rst:301 +#: ../../src/appx/blog/spec.rst:303 msgid "email" msgstr "email" -#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:309 +#: ../../src/appx/blog/spec.rst:304 ../../src/appx/blog/spec.rst:311 msgid "password" msgstr "password" -#: ../../src/appx/blog/spec.rst:303 ../../src/appx/blog/spec.rst:322 +#: ../../src/appx/blog/spec.rst:305 ../../src/appx/blog/spec.rst:324 msgid "confirm password" msgstr "confirm password" -#: ../../src/appx/blog/spec.rst:305 +#: ../../src/appx/blog/spec.rst:307 msgid "" "``/login/`` page contains a user login form. It should take the inputs from " "the user:" @@ -701,7 +710,7 @@ msgstr "" "Сторінка ``/login/`` містить форму входу користувача. Вона повинна " "отримувати введені дані від користувача:" -#: ../../src/appx/blog/spec.rst:311 +#: ../../src/appx/blog/spec.rst:313 msgid "" "``/create/`` and ``/
    /update/`` pages contain a form to collect a " "article's data:" @@ -709,33 +718,33 @@ msgstr "" "Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " "даних статті:" -#: ../../src/appx/blog/spec.rst:314 +#: ../../src/appx/blog/spec.rst:316 msgid "title" msgstr "title" -#: ../../src/appx/blog/spec.rst:315 +#: ../../src/appx/blog/spec.rst:317 msgid "relevant topics" msgstr "відповідні теми" -#: ../../src/appx/blog/spec.rst:316 +#: ../../src/appx/blog/spec.rst:318 msgid "content" msgstr "content" -#: ../../src/appx/blog/spec.rst:318 +#: ../../src/appx/blog/spec.rst:320 msgid "``/
    /delete`` page contains a simple delete confirmation form." msgstr "" "Сторінка ``/
    /delete`` містить просту форму для підтвердження " "видалення." -#: ../../src/appx/blog/spec.rst:319 +#: ../../src/appx/blog/spec.rst:321 msgid "Change password form has two fields:" msgstr "Форма зміни пароля має два поля:" -#: ../../src/appx/blog/spec.rst:321 +#: ../../src/appx/blog/spec.rst:323 msgid "new password" msgstr "new password" -#: ../../src/appx/blog/spec.rst:324 +#: ../../src/appx/blog/spec.rst:326 msgid "" "Change user's data form collects all information, that can be changed, e.g. " "``username``, ``first name``, ``last name`` etc." @@ -743,7 +752,7 @@ msgstr "" "Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " "наприклад, ``username``, ``first name``, ``last name`` та інше." -#: ../../src/appx/blog/spec.rst:326 +#: ../../src/appx/blog/spec.rst:328 msgid "" "User preferences page contains a list of available topics. User can mark " "some topics as preferred. Also for preferred topics an option to *subscribe* " @@ -753,112 +762,112 @@ msgstr "" "може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " "тем стає доступною опція *підписки* на розсилку новинних листів." -#: ../../src/appx/blog/spec.rst:331 +#: ../../src/appx/blog/spec.rst:333 msgid "Challenge: Articles' slugs" msgstr "Виклик: Slug-и статей" -#: ../../src/appx/blog/spec.rst:334 +#: ../../src/appx/blog/spec.rst:336 msgid "This is an optional challenge in addition to:" msgstr "Це додатковий виклик у додаток до:" -#: ../../src/appx/blog/spec.rst:336 +#: ../../src/appx/blog/spec.rst:338 msgid "`Challenge: Functional views`_" msgstr "`Challenge: Functional views`_" -#: ../../src/appx/blog/spec.rst:337 +#: ../../src/appx/blog/spec.rst:339 msgid "`Challenge: Templates`_" msgstr "`Challenge: Templates`_" -#: ../../src/appx/blog/spec.rst:338 +#: ../../src/appx/blog/spec.rst:340 msgid "`Challenge: Data models`_" msgstr "`Challenge: Data models`_" -#: ../../src/appx/blog/spec.rst:339 +#: ../../src/appx/blog/spec.rst:341 msgid "`Challenge: ORM`_" msgstr "`Challenge: ORM`_" -#: ../../src/appx/blog/spec.rst:341 +#: ../../src/appx/blog/spec.rst:343 msgid "Update ``Article`` model with ``slug`` field. The slug value is:" msgstr "" "Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" -#: ../../src/appx/blog/spec.rst:343 +#: ../../src/appx/blog/spec.rst:345 msgid "required for each article" msgstr "обов'язкове для кожної статті" -#: ../../src/appx/blog/spec.rst:344 +#: ../../src/appx/blog/spec.rst:346 msgid "unique for each article" msgstr "унікальне для кожної статті" -#: ../../src/appx/blog/spec.rst:346 +#: ../../src/appx/blog/spec.rst:348 msgid "Create a data migration to provide slugs for existing articles." msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." -#: ../../src/appx/blog/spec.rst:347 +#: ../../src/appx/blog/spec.rst:349 msgid "" "``slug`` should be auto-generated on article save. The pattern is ``article." "title-article.created_date``, e.g. \"Sample article\" created at " -"\"03/24/2023\" should receive slug: ``sample-blog-article-2023-03-23``." +"\"03/24/2023\" should receive slug: ``sample-article-2023-03-24``." msgstr "" "Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " "для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " -"наприклад, стаття з назвою \"Прикладна стаття\", створена \"24/03/2023\", " -"отримає slug: ``sample-blog-article-2023-03-23``." +"наприклад, стаття з назвою \"Sample article\", створена \"24/03/2023\", " +"отримає slug: ``sample-article-2023-03-24``." -#: ../../src/appx/blog/spec.rst:351 +#: ../../src/appx/blog/spec.rst:353 msgid "Update detail view URL path with article slug as dynamic portion." msgstr "" "Оновіть шлях URL для представлення деталей статті з динамічною частиною, " "якою буде slug статті." -#: ../../src/appx/blog/spec.rst:354 +#: ../../src/appx/blog/spec.rst:356 msgid "Challenge: Auth forms" msgstr "Завдання: форми авторизації" -#: ../../src/appx/blog/spec.rst:356 +#: ../../src/appx/blog/spec.rst:358 msgid "Create form for new users registration with required fields:" msgstr "" "Створити форму для реєстрації нових користувачів із обов'язковими полями:" -#: ../../src/appx/blog/spec.rst:358 +#: ../../src/appx/blog/spec.rst:360 msgid "``username``" msgstr "``username``" -#: ../../src/appx/blog/spec.rst:359 +#: ../../src/appx/blog/spec.rst:361 msgid "``email``" msgstr "``email``" -#: ../../src/appx/blog/spec.rst:360 +#: ../../src/appx/blog/spec.rst:362 msgid "``password``" msgstr "``password``" -#: ../../src/appx/blog/spec.rst:361 +#: ../../src/appx/blog/spec.rst:363 msgid "``confirm password``" msgstr "``confirm password``" -#: ../../src/appx/blog/spec.rst:363 +#: ../../src/appx/blog/spec.rst:365 msgid "``username`` value should be validated against existing values." msgstr "" "Значення ``username`` повинно перевірятися на відповідність існуючим " "значенням." -#: ../../src/appx/blog/spec.rst:364 +#: ../../src/appx/blog/spec.rst:366 msgid "``password`` and ``confirm password`` values should match." msgstr "Значення ``password`` і ``confirm password`` мають збігатися." -#: ../../src/appx/blog/spec.rst:365 +#: ../../src/appx/blog/spec.rst:367 msgid "Create form for existing users login." msgstr "Створити форму для входу існуючих користувачів." -#: ../../src/appx/blog/spec.rst:366 +#: ../../src/appx/blog/spec.rst:368 msgid "Validations errors are to be rendered on the template." msgstr "Помилки перевірки повинні відображатися на шаблоні." -#: ../../src/appx/blog/spec.rst:369 +#: ../../src/appx/blog/spec.rst:371 msgid "Challenge: Authentication" msgstr "Завдання: Автентифікація" -#: ../../src/appx/blog/spec.rst:371 +#: ../../src/appx/blog/spec.rst:373 msgid "" "For anonymous users ``/register/`` and ``/login/`` links should be visible " "in navbar." @@ -866,7 +875,7 @@ msgstr "" "Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " "видимими на панелі навігації." -#: ../../src/appx/blog/spec.rst:373 +#: ../../src/appx/blog/spec.rst:375 msgid "" "For authenticated users ``/logout/`` and ``/create/`` links should be " "visible in navbar." @@ -874,14 +883,14 @@ msgstr "" "Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " "мають бути видимими на панелі навігації." -#: ../../src/appx/blog/spec.rst:375 +#: ../../src/appx/blog/spec.rst:377 msgid "" "If authenticated user is admin or stuff they should see a link to admin page." msgstr "" "Якщо автентифікований користувач є адміністратором або іншим, він має " "побачити посилання на сторінку адміністратора." -#: ../../src/appx/blog/spec.rst:377 +#: ../../src/appx/blog/spec.rst:379 msgid "" "``/register/``: Users should provide all required information about them: " "desired username and email. Name data (both first and last) is optional. " @@ -895,7 +904,7 @@ msgstr "" "перенаправлені на сторінку входу для виконання процесу автентифікації. " "Недійсна форма повинна надавати інформацію про помилку(и)." -#: ../../src/appx/blog/spec.rst:382 +#: ../../src/appx/blog/spec.rst:384 msgid "" "``/login/``: Users should provide their credentials to login. In case login " "is successful they should be redirected to their profile (if no ``?" @@ -905,7 +914,7 @@ msgstr "" "успішного входу вони повинні бути перенаправлені до свого профілю (якщо " "немає рядка запиту ``?next=url``)." -#: ../../src/appx/blog/spec.rst:385 +#: ../../src/appx/blog/spec.rst:387 msgid "" "``/create/``: Only authenticated users should be able to visit this page. In " "case anonymous user is trying to request this view they should be redirected " @@ -920,7 +929,7 @@ msgstr "" "створенні статті вона повинна мати автором поточного аутентифікованого " "користувача." -#: ../../src/appx/blog/spec.rst:390 +#: ../../src/appx/blog/spec.rst:392 msgid "" "``/
    /comment/``: Currently authenticated user should be referenced " "as a comment's author." @@ -928,7 +937,7 @@ msgstr "" "``/
    /comment/``: У коментарі поточного аутентифікованого користувача " "повинна бути зазначена його ідентифікація як автора." -#: ../../src/appx/blog/spec.rst:392 +#: ../../src/appx/blog/spec.rst:394 msgid "" "Articles may be modified or deleted only by their authors from the detail " "article page. However, admins can still performs articles actions from the " @@ -938,21 +947,21 @@ msgstr "" "статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " "адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:395 +#: ../../src/appx/blog/spec.rst:397 msgid "User related paths are restricted for non-authorized users." msgstr "" "Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " "користувачів." -#: ../../src/appx/blog/spec.rst:397 +#: ../../src/appx/blog/spec.rst:399 msgid "``/set-password/``" msgstr "``/set-password/``" -#: ../../src/appx/blog/spec.rst:398 +#: ../../src/appx/blog/spec.rst:400 msgid "``/set-userdata/``" msgstr "``/set-userdata/``" -#: ../../src/appx/blog/spec.rst:400 +#: ../../src/appx/blog/spec.rst:402 msgid "" "``POST`` request ``/deactivate/`` should mark current authenticated user as " "*deleted* and log them user." @@ -961,7 +970,22 @@ msgstr "" "аутентифікованого користувача як *видаленого* і виходити з системи для цього " "користувача." -#: ../../src/appx/blog/spec.rst:406 +#: ../../src/appx/blog/spec.rst:404 +msgid "" +"Authenticated users should be able to adjust their preferred topics lists." +msgstr "" +"Авторизовані користувачі повинні мати можливість налаштовувати свої списки " +"обраних тем." + +#: ../../src/appx/blog/spec.rst:405 +msgid "" +"Authenticated users should be able to **subscribe** or **unsubscribe** for a " +"selected topic." +msgstr "" +"Авторизовані користувачі повинні мати можливість **підписатися** або " +"**відписатися** на обрану тему." + +#: ../../src/appx/blog/spec.rst:411 msgid "" "Adjust the order of article list according to authenticated user " "preferences. For anonymous users keep default ordering." @@ -970,7 +994,7 @@ msgstr "" "аутентифікованого користувача. Для анонімних користувачів залиште типове " "сортування за замовчуванням." -#: ../../src/appx/blog/spec.rst:408 +#: ../../src/appx/blog/spec.rst:413 msgid "" "Implement account reactivation behavior. The exact workflow does not mater. " "The sample scenario is to collect email for the user and check it for " @@ -983,11 +1007,11 @@ msgstr "" "цього створіть запит для адміністратора на активацію облікового запису та " "надішліть підтверджувальний лист електронною поштою, коли все буде готово." -#: ../../src/appx/blog/spec.rst:414 +#: ../../src/appx/blog/spec.rst:419 msgid "Challenge: Article related forms" msgstr "Виклик: Форми пов'язані зі статтями" -#: ../../src/appx/blog/spec.rst:416 +#: ../../src/appx/blog/spec.rst:421 msgid "" "Implement a article form. This form will be used to create new articles and " "to update existing ones." @@ -995,15 +1019,15 @@ msgstr "" "Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " "статей та оновлення існуючих." -#: ../../src/appx/blog/spec.rst:418 +#: ../../src/appx/blog/spec.rst:423 msgid "Each created article should have at least one related topic." msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." -#: ../../src/appx/blog/spec.rst:419 +#: ../../src/appx/blog/spec.rst:424 msgid "Implement a comment form to gather a comment from a user." msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." -#: ../../src/appx/blog/spec.rst:420 +#: ../../src/appx/blog/spec.rst:425 msgid "" "Only ``POST`` requests to ``/
    /comment/`` are allowed from this " "moment." @@ -1011,65 +1035,65 @@ msgstr "" "З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" "``." -#: ../../src/appx/blog/spec.rst:422 +#: ../../src/appx/blog/spec.rst:427 msgid "Implement functionality:" msgstr "Реалізуйте функціональність:" -#: ../../src/appx/blog/spec.rst:424 +#: ../../src/appx/blog/spec.rst:429 msgid "article creation" msgstr "створення статті" -#: ../../src/appx/blog/spec.rst:425 +#: ../../src/appx/blog/spec.rst:430 msgid "article update" msgstr "оновлення статті" -#: ../../src/appx/blog/spec.rst:426 +#: ../../src/appx/blog/spec.rst:431 msgid "article comment (create a related comment)" msgstr "коментування статті (створення коментаря)" -#: ../../src/appx/blog/spec.rst:427 +#: ../../src/appx/blog/spec.rst:432 msgid "article deletion" msgstr "видалення статті" -#: ../../src/appx/blog/spec.rst:429 +#: ../../src/appx/blog/spec.rst:434 msgid "Only authenticated users can create articles." msgstr "Лише аутентифіковані користувачі можуть створювати статі." -#: ../../src/appx/blog/spec.rst:430 +#: ../../src/appx/blog/spec.rst:435 msgid "Article can be edited only by its author." msgstr "Стаття може редагуватись лише її автором." -#: ../../src/appx/blog/spec.rst:431 +#: ../../src/appx/blog/spec.rst:436 msgid "Article can be deleted only by its author." msgstr "Стаття може видалятись лише її автором." -#: ../../src/appx/blog/spec.rst:432 +#: ../../src/appx/blog/spec.rst:437 msgid "Only authenticated users can comment articles." msgstr "Лише аутентифіковані користувачі можуть коментувати статті." -#: ../../src/appx/blog/spec.rst:439 +#: ../../src/appx/blog/spec.rst:444 msgid "Challenge: Class-Based Views" msgstr "Завдання: Class-Based Views" -#: ../../src/appx/blog/spec.rst:441 +#: ../../src/appx/blog/spec.rst:446 msgid "Replace **all** existing views via ``CBV``." msgstr "Замінити **всі** існуючі перегляди через ``CBV``." -#: ../../src/appx/blog/spec.rst:442 +#: ../../src/appx/blog/spec.rst:447 msgid "Existing functionality should not be corrupted." msgstr "Існуюча функціональність не повинна бути пошкоджена." -#: ../../src/appx/blog/spec.rst:445 +#: ../../src/appx/blog/spec.rst:450 msgid "It's ok to use built-in Django CBV if needed." msgstr "" "Якщо потрібно, можна використовувати вбудовані класи відображення у Django " "(CBV)." -#: ../../src/appx/blog/spec.rst:448 +#: ../../src/appx/blog/spec.rst:453 msgid "Challenge: Serializers" msgstr "Завдання: Серіалізатори" -#: ../../src/appx/blog/spec.rst:452 +#: ../../src/appx/blog/spec.rst:457 msgid "" "Topic serializer is for read-only purposes only. Topics can be created via " "admin page only." @@ -1077,7 +1101,7 @@ msgstr "" "Серіалізатор для теми призначений лише для операцій читання (read-only). " "Теми можна створювати лише через адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:454 +#: ../../src/appx/blog/spec.rst:459 msgid "" "Serialized data should contain all available data, e.g. ``pk``, ``title``, " "``description``." @@ -1085,7 +1109,7 @@ msgstr "" "Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " "``pk``, ``title``, ``description``." -#: ../../src/appx/blog/spec.rst:459 +#: ../../src/appx/blog/spec.rst:464 msgid "" "article comment serializer can perform both reading and writing operations. " "But it can't be used to *update* or *delete* comment." @@ -1094,7 +1118,7 @@ msgstr "" "операції запису. Проте він не може використовуватися для оновлення або " "видалення коментаря." -#: ../../src/appx/blog/spec.rst:461 +#: ../../src/appx/blog/spec.rst:466 msgid "" "Random, or pre-defined user may be used as comment's author for now. This " "will be fixed in the future." @@ -1102,7 +1126,7 @@ msgstr "" "Наразі можна використовувати випадкового або попередньо визначеного " "користувача як автора коментаря. Це буде виправлено у майбутньому." -#: ../../src/appx/blog/spec.rst:466 +#: ../../src/appx/blog/spec.rst:471 msgid "" "article serializer provides full access to articles. All operations are " "available: list, retrieve, create, update and destroy." @@ -1111,11 +1135,11 @@ msgstr "" "отримання списку, отримання окремої статті, створення нової статті, " "оновлення та видалення." -#: ../../src/appx/blog/spec.rst:470 +#: ../../src/appx/blog/spec.rst:475 msgid "User" msgstr "Користувач" -#: ../../src/appx/blog/spec.rst:471 +#: ../../src/appx/blog/spec.rst:476 msgid "" "User serializer provides full access to site users data. All operations are " "available for now: list, retrieve, create, update and destroy. This behavior " @@ -1127,17 +1151,16 @@ msgstr "" "Однак, ця поведінка буде виправлена у майбутньому для запобігання " "несанкціонованим змінам даних." -#: ../../src/appx/blog/spec.rst:477 +#: ../../src/appx/blog/spec.rst:482 msgid "Challenge: API views" msgstr "Завдання: API views" -#: ../../src/appx/blog/spec.rst:479 -msgid "All blog-site functionality are to be reflected via REST API." +#: ../../src/appx/blog/spec.rst:484 +msgid "All blog-site functionality are to be mirrored via REST API." msgstr "" -"Вся функціональність блог-сайту повинна бути відображена за допомогою REST " -"API." +"Вся функціональність сайту повинна бути відображена за допомогою REST API." -#: ../../src/appx/blog/spec.rst:482 +#: ../../src/appx/blog/spec.rst:487 msgid "" "It's ok to pass *pre-defined* user as argument in request's body. This will " "be fixed in the next challenge." @@ -1145,27 +1168,27 @@ msgstr "" "Наразі дозволяється передавати *наперед визначеного* користувача у тілі " "запиту. Це буде виправлено у наступному розділі." -#: ../../src/appx/blog/spec.rst:486 +#: ../../src/appx/blog/spec.rst:491 msgid "Challenge: Authentication and Permissions" msgstr "Завдання: Автентифікація та Дозволи" -#: ../../src/appx/blog/spec.rst:488 +#: ../../src/appx/blog/spec.rst:493 msgid "Implement authentication system for REST API." msgstr "Реалізуйте систему аутентифікації для REST API." -#: ../../src/appx/blog/spec.rst:490 +#: ../../src/appx/blog/spec.rst:495 msgid "For non-authenticated users it is possible to create a new account" msgstr "" "Для неаутентифікованих користувачів можлива створення нового облікового " "запису" -#: ../../src/appx/blog/spec.rst:491 +#: ../../src/appx/blog/spec.rst:496 msgid "" "For non-authenticated users it is possible to obtain authentication data." msgstr "" "Для неаутентифікованих користувачів можлива отримання даних аутентифікації." -#: ../../src/appx/blog/spec.rst:494 +#: ../../src/appx/blog/spec.rst:499 msgid "" "Access to user data is restricted. Authorized users can manipulate only " "their own data (e.g. ``retrieve``, ``update``)." @@ -1174,7 +1197,7 @@ msgstr "" "маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " "``update``)." -#: ../../src/appx/blog/spec.rst:496 +#: ../../src/appx/blog/spec.rst:501 msgid "" "Admins can retrieve all users data (``list``), but can't change them via " "REST API. However, it is still possible via admin page." @@ -1183,7 +1206,7 @@ msgstr "" "можуть змінювати їх через REST API. Однак це все ще можливо через " "адміністративну сторінку." -#: ../../src/appx/blog/spec.rst:498 +#: ../../src/appx/blog/spec.rst:503 msgid "" "Authorized users can ``create`` articles or ``update`` and ``delete`` " "articles created by them." @@ -1191,6 +1214,11 @@ msgstr "" "Авторизовані користувачі можуть ``create`` статті або ``update`` та " "``delete`` статті, створені ними." -#: ../../src/appx/blog/spec.rst:500 +#: ../../src/appx/blog/spec.rst:505 msgid "Authorized users can add comments to a specified article." msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." + +#: ../../src/appx/blog/spec.rst:506 +msgid "Authorized users can adjust their topics preferences." +msgstr "" +"Авторизовані користувачі можуть налаштовувати свої уподобання щодо тем." From ff6f039b737d0f6d9f69e2177ac613e9ac155794 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 22 Dec 2023 13:50:33 +0200 Subject: [PATCH 577/689] [GH-Actions] Update test build config (#148) Test documentation build for various OS and Python versions. os: [ ubuntu-latest, macos-latest, windows-latest ] python-version: [ "3.9", "3.10", "3.11", "3.12" ] --- .github/workflows/test_build.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_build.yml b/.github/workflows/test_build.yml index 10b95de56..fb5339f6c 100644 --- a/.github/workflows/test_build.yml +++ b/.github/workflows/test_build.yml @@ -14,18 +14,24 @@ on: jobs: check-build: runs-on: ubuntu-latest + strategy: + matrix: + os: [ ubuntu-latest, macos-latest, windows-latest ] + python-version: [ "3.9", "3.10", "3.11", "3.12" ] steps: - name: Checkout uses: actions/checkout@v3 with: submodules: true - - name: Setup Python + - name: Setup Python ${{ matrix.python-version }} uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} - name: Install dependencies run: | pip install -r requirements.txt - name: Build documents run: | LANGUAGE=en make html - LANGUAGE=uk make html \ No newline at end of file + LANGUAGE=uk make html From 4e666745e8fb2f77269972abba84e78d1b17f23c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 22 Dec 2023 14:30:07 +0200 Subject: [PATCH 578/689] Apply translation proofreading - rdbms/appx --- .../uk/LC_MESSAGES/appx/pg_func_ops.po | 46 ++----------------- src/_locales/uk/LC_MESSAGES/appx/pg_local.po | 2 +- src/_locales/uk/LC_MESSAGES/appx/postgres.po | 16 ++----- 3 files changed, 8 insertions(+), 56 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po b/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po index 7854bb5a2..b22c1cb1b 100644 --- a/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po +++ b/src/_locales/uk/LC_MESSAGES/appx/pg_func_ops.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 04:03+0200\n" +"PO-Revision-Date: 2023-12-22 14:26+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -22,161 +22,130 @@ msgstr "" "X-Generator: Poedit 3.4.1\n" #: ../../src/appx/pg_func_ops.txt:4 -#, fuzzy msgid "Comparison" msgstr "Порівняння" #: ../../src/appx/pg_func_ops.txt:7 -#, fuzzy msgid "Comparison predicates" msgstr "Предикати порівняння" #: ../../src/appx/pg_func_ops.txt:11 -#, fuzzy msgid "Test if a value is within the range endpoints (inclusive)" msgstr "" "Перевірка, чи знаходиться значення в межах кінцевих точок діапазону (включно)" #: ../../src/appx/pg_func_ops.txt:20 -#, fuzzy msgid "Not between (the negation of BETWEEN)." msgstr "Не між (заперечення ПОМІЖ)." #: ../../src/appx/pg_func_ops.txt:28 -#, fuzzy msgid "Between, after sorting the two endpoint values." msgstr "Між, після сортування двох кінцевих значень." #: ../../src/appx/pg_func_ops.txt:36 -#, fuzzy msgid "Not between, after sorting the two endpoint values." msgstr "Не між, після сортування двох кінцевих значень." #: ../../src/appx/pg_func_ops.txt:44 -#, fuzzy msgid "Not equal, treating null as a comparable value." msgstr "Не дорівнює, розглядаючи нуль як порівнянне значення." #: ../../src/appx/pg_func_ops.txt:53 -#, fuzzy msgid "Equal, treating null as a comparable value." msgstr "Дорівнює, розглядаючи нуль як порівнянне значення." #: ../../src/appx/pg_func_ops.txt:62 -#, fuzzy msgid "Test whether value is null." msgstr "Перевірити, чи значення рівне нулю." #: ../../src/appx/pg_func_ops.txt:70 -#, fuzzy msgid "Test whether value is not null." msgstr "Перевірити, чи значення не рівне нулю." #: ../../src/appx/pg_func_ops.txt:78 -#, fuzzy msgid "Test whether value is null (nonstandard syntax)." msgstr "Перевірити, чи значення рівне нулю (нестандартний синтаксис)." #: ../../src/appx/pg_func_ops.txt:82 -#, fuzzy msgid "Test whether value is not null (nonstandard syntax)." msgstr "Перевірити, чи значення не є null (нестандартний синтаксис)." #: ../../src/appx/pg_func_ops.txt:86 -#, fuzzy msgid "Test whether boolean expression yields true." msgstr "Перевірте, чи дає булевий вираз значення true." #: ../../src/appx/pg_func_ops.txt:95 -#, fuzzy msgid "Test whether boolean expression yields false or unknown." msgstr "Перевірте, чи дає булевий вираз значення false або невідоме." #: ../../src/appx/pg_func_ops.txt:104 -#, fuzzy msgid "Test whether boolean expression yields false." msgstr "Перевірте, чи дає булевий вираз значення false." #: ../../src/appx/pg_func_ops.txt:113 -#, fuzzy msgid "Test whether boolean expression yields true or unknown." msgstr "Перевірте, чи дає булевий вираз значення true або unknown." #: ../../src/appx/pg_func_ops.txt:122 -#, fuzzy msgid "Test whether boolean expression yields unknown." msgstr "Перевірити, чи дає булевий вираз невідоме." #: ../../src/appx/pg_func_ops.txt:131 -#, fuzzy msgid "Test whether boolean expression yields true or false." msgstr "Перевірте, чи дає булевий вираз значення true або false." #: ../../src/appx/pg_func_ops.txt:139 -#, fuzzy msgid "Comparison functions" msgstr "Функції порівняння" #: ../../src/appx/pg_func_ops.txt:143 -#, fuzzy msgid "Returns the number of non-null arguments" msgstr "Повертає кількість ненульових аргументів" #: ../../src/appx/pg_func_ops.txt:151 -#, fuzzy msgid "Returns the number of null arguments" msgstr "Повертає кількість нульових аргументів" #: ../../src/appx/pg_func_ops.txt:158 -#, fuzzy msgid "Mathematical functions and operators" msgstr "Математичні функції та оператори" #: ../../src/appx/pg_func_ops.txt:162 -#, fuzzy msgid "Addition" msgstr "Додавання" #: ../../src/appx/pg_func_ops.txt:170 -#, fuzzy msgid "Unary plus (no operation)" msgstr "Унарний плюс (без операції)" #: ../../src/appx/pg_func_ops.txt:178 -#, fuzzy msgid "Subtraction" msgstr "Віднімання" #: ../../src/appx/pg_func_ops.txt:186 -#, fuzzy msgid "Negation" msgstr "Заперечення" #: ../../src/appx/pg_func_ops.txt:194 -#, fuzzy msgid "Multiplication" msgstr "Множення" #: ../../src/appx/pg_func_ops.txt:202 -#, fuzzy msgid "" "Division (for integral types, division truncates the result towards zero)" msgstr "Ділення (для інтегральних типів ділення усікає результат до нуля)" #: ../../src/appx/pg_func_ops.txt:214 -#, fuzzy msgid "" "Modulo (remainder); available for smallint, integer, bigint, and numeric" msgstr "" "За модулем (залишок); доступний для smallint, integer, bigint та numeric" #: ../../src/appx/pg_func_ops.txt:223 -#, fuzzy msgid "Exponentiation" msgstr "Піднесення до степеня" #: ../../src/appx/pg_func_ops.txt:229 -#, fuzzy msgid "" "Unlike typical mathematical practice, multiple uses of ``^`` will associate " "left to right by default:" @@ -185,46 +154,37 @@ msgstr "" "``^`` за замовчуванням асоціюється зліва направо:" #: ../../src/appx/pg_func_ops.txt:239 -#, fuzzy msgid "Square root" msgstr "Квадратний корінь" #: ../../src/appx/pg_func_ops.txt:247 -#, fuzzy msgid "Cube root" msgstr "Кубічний корінь" #: ../../src/appx/pg_func_ops.txt:255 -#, fuzzy msgid "Absolute value" msgstr "Абсолютне значення" #: ../../src/appx/pg_func_ops.txt:263 -#, fuzzy msgid "Bitwise AND" msgstr "Побітове І" #: ../../src/appx/pg_func_ops.txt:271 -#, fuzzy msgid "Bitwise OR" msgstr "Порозрядне АБО" #: ../../src/appx/pg_func_ops.txt:279 -#, fuzzy msgid "Bitwise exclusive OR" msgstr "Побітове виключне АБО" #: ../../src/appx/pg_func_ops.txt:287 -#, fuzzy msgid "Bitwise NOT" -msgstr "Побітове І" +msgstr "Побітове НІ" #: ../../src/appx/pg_func_ops.txt:295 -#, fuzzy msgid "Bitwise shift left" msgstr "Порозрядний зсув вліво" #: ../../src/appx/pg_func_ops.txt:303 -#, fuzzy msgid "Bitwise shift right" msgstr "Порозрядний зсув вправо" diff --git a/src/_locales/uk/LC_MESSAGES/appx/pg_local.po b/src/_locales/uk/LC_MESSAGES/appx/pg_local.po index 63b532490..ce3c85b48 100644 --- a/src/_locales/uk/LC_MESSAGES/appx/pg_local.po +++ b/src/_locales/uk/LC_MESSAGES/appx/pg_local.po @@ -6,7 +6,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" "PO-Revision-Date: 2023-12-21 04:02+0200\n" diff --git a/src/_locales/uk/LC_MESSAGES/appx/postgres.po b/src/_locales/uk/LC_MESSAGES/appx/postgres.po index 73c68c42d..2a2af66f9 100644 --- a/src/_locales/uk/LC_MESSAGES/appx/postgres.po +++ b/src/_locales/uk/LC_MESSAGES/appx/postgres.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 04:02+0200\n" +"PO-Revision-Date: 2023-12-22 14:19+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -26,12 +26,10 @@ msgid "PostgreSQL" msgstr "PostgreSQL" #: ../../src/appx/postgres.txt:8 -#, fuzzy msgid "Overview" msgstr "Огляд" #: ../../src/appx/postgres.txt:10 -#, fuzzy msgid "" "PostgreSQL is a powerful, open source object-relational database system that " "uses and extends the SQL language combined with many features that safely " @@ -40,10 +38,9 @@ msgstr "" "PostgreSQL - це потужна об'єктно-реляційна система баз даних з відкритим " "вихідним кодом, яка використовує і розширює мову SQL у поєднанні з багатьма " "функціями, що дозволяють безпечно зберігати і масштабувати найскладніші " -"робочі навантаження даних." +"структури даних." #: ../../src/appx/postgres.txt:14 -#, fuzzy msgid "" "PostgreSQL has earned a strong reputation for its proven architecture, " "reliability, data integrity, robust feature set, extensibility, and the " @@ -56,19 +53,16 @@ msgstr "" "вихідним кодом постійно створювати ефективні та інноваційні рішення." #: ../../src/appx/postgres.txt:21 -#, fuzzy msgid "" "PostgreSQL runs on **all major operating systems**, and is ACID compliant." msgstr "" "PostgreSQL працює на **всіх основних операційних системах** і сумісна з ACID." #: ../../src/appx/postgres.txt:25 -#, fuzzy msgid "Installation" msgstr "Встановлення" #: ../../src/appx/postgres.txt:27 -#, fuzzy msgid "" "If you are not able to install postgres to your local computer, it is " "possible to use binaries distributions. Refer :doc:`Local PostgreSQL server " @@ -80,7 +74,6 @@ msgstr "" "додаткової інформації." #: ../../src/appx/postgres.txt:32 -#, fuzzy msgid "" "PostgreSQL is available for download as ready-to-use packages or installers " "for various platforms, as well as a source code archive if you want to build " @@ -91,7 +84,6 @@ msgstr "" "вихідного коду, якщо ви хочете зібрати її самостійно." #: ../../src/appx/postgres.txt:36 -#, fuzzy msgid "" "Refer to `PostgreSQL downloads`_ page to get the installer for your " "operating system. Follow the installation process instruction to get " @@ -99,4 +91,4 @@ msgid "" msgstr "" "Зверніться до сторінки `Завантаження PostgreSQL`_, щоб отримати інсталятор " "для вашої операційної системи. Дотримуйтесь інструкцій процесу встановлення, " -"щоб запустити сервер Postgres на вашому локальному комп'ютері." +"щоб запустити сервер postgres на вашому локальному комп'ютері." From 1cce0a0edce6bcaab0b01e2a43f3d67f88dad214 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 22 Dec 2023 15:17:52 +0200 Subject: [PATCH 579/689] Apply translation proofreading - rdbms/datatypes --- .../uk/LC_MESSAGES/rdbms/datatypes.po | 303 ++++-------------- src/rdbms/datatypes.txt | 4 +- 2 files changed, 66 insertions(+), 241 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po b/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po index f09bee196..9abe3d11a 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 03:52+0200\n" +"POT-Creation-Date: 2023-12-22 13:15+0000\n" +"PO-Revision-Date: 2023-12-22 15:15+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -18,21 +18,18 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.13.1\n" +"Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.4.1\n" #: ../../src/rdbms/datatypes.txt:3 -#, fuzzy msgid "PostgreSQL RDBMS: Data types" -msgstr "СУБД PostgreSQL: типи даних" +msgstr "СУБД PostgreSQL: Типи даних" #: ../../src/rdbms/datatypes.txt:5 -#, fuzzy msgid "PostgreSQL has a rich set of data types available to users." msgstr "PostgreSQL має багатий набір типів даних, доступних для користувачів." #: ../../src/rdbms/datatypes.txt:7 -#, fuzzy msgid "" "Users can add new types to PostgreSQL using the ``CREATE TYPE`` command." msgstr "" @@ -40,18 +37,15 @@ msgstr "" "``CREATE TYPE``." #: ../../src/rdbms/datatypes.txt:9 -#, fuzzy msgid "Custom data type definition" msgstr "Визначення користувацького типу даних" #: ../../src/rdbms/datatypes.txt:15 ../../src/rdbms/datatypes.txt:132 #: ../../src/rdbms/datatypes.txt:163 -#, fuzzy msgid "Name" -msgstr "Ім'я" +msgstr "Назва" #: ../../src/rdbms/datatypes.txt:15 -#, fuzzy msgid "Aliases" msgstr "Псевдоніми" @@ -59,7 +53,6 @@ msgstr "Псевдоніми" #: ../../src/rdbms/datatypes.txt:163 ../../src/rdbms/datatypes.txt:233 #: ../../src/rdbms/datatypes.txt:274 ../../src/rdbms/datatypes.txt:305 #: ../../src/rdbms/datatypes.txt:330 -#, fuzzy msgid "Description" msgstr "Опис" @@ -72,7 +65,6 @@ msgid "``int8``" msgstr "``int8``" #: ../../src/rdbms/datatypes.txt:17 -#, fuzzy msgid "signed eight-byte integer" msgstr "знакове восьмибайтне ціле число" @@ -85,7 +77,6 @@ msgid "``serial8``" msgstr "``serial8``" #: ../../src/rdbms/datatypes.txt:19 -#, fuzzy msgid "auto incrementing eight-byte integer" msgstr "автоінкрементоване восьмибайтне ціле число" @@ -94,7 +85,6 @@ msgid "``bit``" msgstr "``bit``" #: ../../src/rdbms/datatypes.txt:21 -#, fuzzy msgid "fixed-length bit string" msgstr "бітовий рядок фіксованої довжини" @@ -107,7 +97,6 @@ msgid "``varbit``" msgstr "``varbit``" #: ../../src/rdbms/datatypes.txt:23 -#, fuzzy msgid "variable-length bit string" msgstr "бітовий рядок змінної довжини" @@ -120,26 +109,22 @@ msgid "``bool``" msgstr "``bool``" #: ../../src/rdbms/datatypes.txt:25 -#, fuzzy msgid "logical Boolean (true/false)" -msgstr "логічний булевий (true/false)" +msgstr "логічний тип даних (true/false)" #: ../../src/rdbms/datatypes.txt:27 msgid "``box``" msgstr "``box``" #: ../../src/rdbms/datatypes.txt:27 -#, fuzzy msgid "rectangular box on a plane" -msgstr "прямокутна коробка на площині" +msgstr "прямокутник на площині" #: ../../src/rdbms/datatypes.txt:29 -#, fuzzy msgid "``bytea``" -msgstr "\"Байті\"" +msgstr "``bytea``" #: ../../src/rdbms/datatypes.txt:29 -#, fuzzy msgid "binary data (“byte array”)" msgstr "двійкові дані (\"байтовий масив\")" @@ -152,7 +137,6 @@ msgid "``char``" msgstr "``char``" #: ../../src/rdbms/datatypes.txt:31 -#, fuzzy msgid "fixed-length character string" msgstr "символьний рядок фіксованої довжини" @@ -165,7 +149,6 @@ msgid "``varchar``" msgstr "``varchar``" #: ../../src/rdbms/datatypes.txt:33 ../../src/rdbms/datatypes.txt:83 -#, fuzzy msgid "variable-length character string" msgstr "символьний рядок змінної довжини" @@ -174,7 +157,6 @@ msgid "``cidr``" msgstr "``cidr``" #: ../../src/rdbms/datatypes.txt:35 -#, fuzzy msgid "IPv4 or IPv6 network address" msgstr "Мережева адреса IPv4 або IPv6" @@ -183,7 +165,6 @@ msgid "``circle``" msgstr "``circle``" #: ../../src/rdbms/datatypes.txt:37 -#, fuzzy msgid "circle on a plane" msgstr "коло на площині" @@ -196,7 +177,6 @@ msgid "``float8``" msgstr "``float8``" #: ../../src/rdbms/datatypes.txt:39 -#, fuzzy msgid "double precision floating-point number (8 bytes)" msgstr "число з плаваючою комою подвійної точності (8 байт)" @@ -205,7 +185,6 @@ msgid "``date``" msgstr "``date``" #: ../../src/rdbms/datatypes.txt:41 -#, fuzzy msgid "calendar date (year, month, day)" msgstr "календарна дата (рік, місяць, день)" @@ -214,7 +193,6 @@ msgid "``inet``" msgstr "``inet``" #: ../../src/rdbms/datatypes.txt:43 -#, fuzzy msgid "IPv4 or IPv6 host address" msgstr "IPv4 або IPv6 адреса хосту" @@ -227,7 +205,6 @@ msgid "``int``, ``int4``" msgstr "``int``, ``int4``" #: ../../src/rdbms/datatypes.txt:45 -#, fuzzy msgid "signed four-byte integer" msgstr "знакове чотирибайтне ціле число" @@ -236,7 +213,6 @@ msgid "``interval``" msgstr "``interval``" #: ../../src/rdbms/datatypes.txt:47 -#, fuzzy msgid "time span" msgstr "проміжок часу" @@ -245,7 +221,6 @@ msgid "``json``" msgstr "``json``" #: ../../src/rdbms/datatypes.txt:49 -#, fuzzy msgid "textual JSON data" msgstr "текстові дані JSON" @@ -254,7 +229,6 @@ msgid "``jsonb``" msgstr "``jsonb``" #: ../../src/rdbms/datatypes.txt:51 -#, fuzzy msgid "binary JSON data, decomposed" msgstr "двійкові дані JSON, декомпоновані" @@ -263,7 +237,6 @@ msgid "``line``" msgstr "``line``" #: ../../src/rdbms/datatypes.txt:53 -#, fuzzy msgid "infinite line on a plane" msgstr "нескінченна пряма на площині" @@ -272,7 +245,6 @@ msgid "``lseg``" msgstr "``lseg``" #: ../../src/rdbms/datatypes.txt:55 -#, fuzzy msgid "line segment on a plane" msgstr "відрізок прямої на площині" @@ -281,7 +253,6 @@ msgid "``macaddr``" msgstr "``macaddr``" #: ../../src/rdbms/datatypes.txt:57 -#, fuzzy msgid "MAC (Media Access Control) address" msgstr "MAC-адреса (Media Access Control)" @@ -290,7 +261,6 @@ msgid "``macaddr8``" msgstr "``macaddr8``" #: ../../src/rdbms/datatypes.txt:59 -#, fuzzy msgid "MAC (Media Access Control) address (EUI-64 format)" msgstr "MAC-адреса (Media Access Control) (формат EUI-64)" @@ -299,7 +269,6 @@ msgid "``money``" msgstr "``money``" #: ../../src/rdbms/datatypes.txt:61 -#, fuzzy msgid "currency amount" msgstr "сума валюти" @@ -312,7 +281,6 @@ msgid "``decimal``" msgstr "``decimal``" #: ../../src/rdbms/datatypes.txt:63 -#, fuzzy msgid "exact numeric of selectable precision" msgstr "точне число з обраною точністю" @@ -321,7 +289,6 @@ msgid "``path``" msgstr "``path``" #: ../../src/rdbms/datatypes.txt:65 -#, fuzzy msgid "geometric path on a plane" msgstr "геометричний шлях на площині" @@ -330,7 +297,6 @@ msgid "``pg_lsn``" msgstr "``pg_lsn``" #: ../../src/rdbms/datatypes.txt:67 -#, fuzzy msgid "PostgreSQL Log Sequence Number" msgstr "Номер послідовності журналу PostgreSQL" @@ -339,7 +305,6 @@ msgid "``pg_snapshot``" msgstr "``pg_snapshot``" #: ../../src/rdbms/datatypes.txt:69 -#, fuzzy msgid "user-level transaction ID snapshot" msgstr "знімок ідентифікатора транзакції на рівні користувача" @@ -348,7 +313,6 @@ msgid "``point``" msgstr "``point``" #: ../../src/rdbms/datatypes.txt:71 -#, fuzzy msgid "geometric point on a plane" msgstr "геометрична точка на площині" @@ -357,7 +321,6 @@ msgid "``polygon``" msgstr "``polygon``" #: ../../src/rdbms/datatypes.txt:73 -#, fuzzy msgid "closed geometric path on a plane" msgstr "замкнений геометричний шлях на площині" @@ -370,7 +333,6 @@ msgid "``float4``" msgstr "``float4``" #: ../../src/rdbms/datatypes.txt:75 -#, fuzzy msgid "single precision floating-point number (4 bytes)" msgstr "число з плаваючою комою одинарної точності (4 байти)" @@ -383,7 +345,6 @@ msgid "``int2``" msgstr "``int2``" #: ../../src/rdbms/datatypes.txt:77 -#, fuzzy msgid "signed two-byte integer" msgstr "знакове двобайтне ціле число" @@ -396,7 +357,6 @@ msgid "``serial2``" msgstr "``serial2``" #: ../../src/rdbms/datatypes.txt:79 -#, fuzzy msgid "auto incrementing two-byte integer" msgstr "автоінкрементоване двобайтне ціле число" @@ -409,7 +369,6 @@ msgid "``serial4``" msgstr "``serial4``" #: ../../src/rdbms/datatypes.txt:81 -#, fuzzy msgid "auto incrementing four-byte integer" msgstr "автоінкрементоване чотирибайтне ціле число" @@ -422,7 +381,6 @@ msgid "``time``" msgstr "``time``" #: ../../src/rdbms/datatypes.txt:85 -#, fuzzy msgid "time of day (no time zone)" msgstr "час доби (без часового поясу)" @@ -435,7 +393,6 @@ msgid "``timetz``" msgstr "``timetz``" #: ../../src/rdbms/datatypes.txt:87 -#, fuzzy msgid "time of day, including time zone" msgstr "час доби, включаючи часовий пояс" @@ -444,7 +401,6 @@ msgid "``timestamp``" msgstr "``timestamp``" #: ../../src/rdbms/datatypes.txt:89 -#, fuzzy msgid "date and time (no time zone)" msgstr "дата і час (без часового поясу)" @@ -457,7 +413,6 @@ msgid "``timestamptz``" msgstr "``timestamptz``" #: ../../src/rdbms/datatypes.txt:91 -#, fuzzy msgid "date and time, including time zone" msgstr "дата і час, включаючи часовий пояс" @@ -466,7 +421,6 @@ msgid "``tsquery``" msgstr "``tsquery``" #: ../../src/rdbms/datatypes.txt:93 -#, fuzzy msgid "text search query" msgstr "текстовий пошуковий запит" @@ -475,7 +429,6 @@ msgid "``tsvector``" msgstr "``tsvector``" #: ../../src/rdbms/datatypes.txt:95 -#, fuzzy msgid "text search document" msgstr "текстовий пошуковий документ" @@ -484,7 +437,6 @@ msgid "``txid_snapshot``" msgstr "``txid_snapshot``" #: ../../src/rdbms/datatypes.txt:97 -#, fuzzy msgid "user-level transaction ID snapshot (deprecated; see pg_snapshot)" msgstr "" "знімок ідентифікатора транзакції на рівні користувача (застарілий; див. " @@ -495,7 +447,6 @@ msgid "``uuid``" msgstr "``uuid``" #: ../../src/rdbms/datatypes.txt:99 -#, fuzzy msgid "universally unique identifier" msgstr "універсальний унікальний ідентифікатор" @@ -504,17 +455,14 @@ msgid "``xml``" msgstr "``xml``" #: ../../src/rdbms/datatypes.txt:101 -#, fuzzy msgid "XML data" msgstr "XML-дані" #: ../../src/rdbms/datatypes.txt:105 -#, fuzzy msgid "Types casting" -msgstr "Типи лиття" +msgstr "Перетворення типів" #: ../../src/rdbms/datatypes.txt:107 -#, fuzzy msgid "" "SQL is a strong type language. That is, every data item has an associated " "data type which determines its behavior and allowed usage. PostgreSQL has an " @@ -527,19 +475,16 @@ msgstr "" "загальною і гнучкою, ніж інші реалізації SQL." #: ../../src/rdbms/datatypes.txt:112 -#, fuzzy msgid "You can cast some types in place using ``::`` notation, like:" msgstr "" "Ви можете приводити деякі типи на місці, використовуючи нотацію ``::``, " "наприклад:" #: ../../src/rdbms/datatypes.txt:122 -#, fuzzy msgid "Numeric types" msgstr "Числові типи" #: ../../src/rdbms/datatypes.txt:124 -#, fuzzy msgid "" "Numeric types consist of two-, four-, and eight-byte integers, four- and " "eight-byte floating-point numbers, and selectable-precision decimals." @@ -549,7 +494,6 @@ msgstr "" "довільною точністю." #: ../../src/rdbms/datatypes.txt:127 -#, fuzzy msgid "" "Type types ``smallint``, ``integer`` and ``bigint`` store whole numbers, " "that is, numbers without fractional component, of various ranges. Attempts " @@ -560,94 +504,76 @@ msgstr "" "виходять за межі допустимого діапазону, призведуть до помилки." #: ../../src/rdbms/datatypes.txt:132 -#, fuzzy msgid "Storage Size" -msgstr "Розмір сховища" +msgstr "Розмір" #: ../../src/rdbms/datatypes.txt:132 -#, fuzzy msgid "Range" msgstr "Діапазон" #: ../../src/rdbms/datatypes.txt:134 -#, fuzzy msgid "smallint" msgstr "smallint" #: ../../src/rdbms/datatypes.txt:134 ../../src/rdbms/datatypes.txt:152 -#, fuzzy msgid "2 bytes" msgstr "2 байти" #: ../../src/rdbms/datatypes.txt:134 -#, fuzzy msgid "small-range integer" msgstr "ціле число малого діапазону" #: ../../src/rdbms/datatypes.txt:134 -#, fuzzy msgid "-32768 to +32767" msgstr "-32768 до +32767" #: ../../src/rdbms/datatypes.txt:136 -#, fuzzy msgid "integer" -msgstr "*x* перетворене в ціле число" +msgstr "integer" #: ../../src/rdbms/datatypes.txt:136 ../../src/rdbms/datatypes.txt:146 #: ../../src/rdbms/datatypes.txt:154 -#, fuzzy msgid "4 bytes" msgstr "4 байти" #: ../../src/rdbms/datatypes.txt:136 -#, fuzzy msgid "typical choice for integer" msgstr "типовий вибір для цілого числа" #: ../../src/rdbms/datatypes.txt:136 -#, fuzzy msgid "-2147483648 to +2147483647" -msgstr "-2147483648 на +2147483647" +msgstr "-2147483648 до +2147483647" #: ../../src/rdbms/datatypes.txt:138 -#, fuzzy msgid "bigint" msgstr "bigint" #: ../../src/rdbms/datatypes.txt:138 ../../src/rdbms/datatypes.txt:149 #: ../../src/rdbms/datatypes.txt:156 -#, fuzzy msgid "8 bytes" msgstr "8 байт" #: ../../src/rdbms/datatypes.txt:138 -#, fuzzy msgid "large-range integer" msgstr "ціле число великого діапазону" #: ../../src/rdbms/datatypes.txt:138 -#, fuzzy msgid "-9223372036854775808 to +9223372036854775807" -msgstr "-9223372036854775808 на +9223372036854775807" +msgstr "-9223372036854775808 до +9223372036854775807" #: ../../src/rdbms/datatypes.txt:140 -#, fuzzy msgid "decimal" -msgstr "десятковий" +msgstr "decimal" #: ../../src/rdbms/datatypes.txt:140 ../../src/rdbms/datatypes.txt:143 -#, fuzzy msgid "variable" msgstr "змінна" #: ../../src/rdbms/datatypes.txt:140 ../../src/rdbms/datatypes.txt:143 -#, fuzzy msgid "user-specified precision, exact" msgstr "задана користувачем точність, точна" #: ../../src/rdbms/datatypes.txt:140 ../../src/rdbms/datatypes.txt:143 -#, fuzzy msgid "" "up to 131072 digits before the decimal point; up to 16383 digits after the " "decimal point" @@ -657,88 +583,73 @@ msgstr "" #: ../../src/rdbms/datatypes.txt:143 msgid "numeric" -msgstr "" +msgstr "numeric" #: ../../src/rdbms/datatypes.txt:146 msgid "real" -msgstr "" +msgstr "real" #: ../../src/rdbms/datatypes.txt:146 ../../src/rdbms/datatypes.txt:149 -#, fuzzy msgid "variable-precision, inexact" msgstr "змінної точності, неточний" #: ../../src/rdbms/datatypes.txt:146 -#, fuzzy msgid "6 decimal digits precision" msgstr "6 десяткових знаків після коми" #: ../../src/rdbms/datatypes.txt:149 -#, fuzzy msgid "double precision" -msgstr "подвійна точність" +msgstr "double precision" #: ../../src/rdbms/datatypes.txt:149 -#, fuzzy msgid "15 decimal digits precision" msgstr "точність до 15 знаків після коми" #: ../../src/rdbms/datatypes.txt:152 -#, fuzzy msgid "smallserial" -msgstr "дрібносерійний" +msgstr "smallserial" #: ../../src/rdbms/datatypes.txt:152 -#, fuzzy msgid "small auto incrementing integer" msgstr "невелике ціле число, що автоматично збільшується" #: ../../src/rdbms/datatypes.txt:152 -#, fuzzy msgid "1 to 32767" msgstr "1 до 32767" #: ../../src/rdbms/datatypes.txt:154 -#, fuzzy msgid "serial" -msgstr "серійний" +msgstr "serial" #: ../../src/rdbms/datatypes.txt:154 -#, fuzzy msgid "auto incrementing integer" msgstr "автоінкрементоване ціле число" #: ../../src/rdbms/datatypes.txt:154 -#, fuzzy msgid "1 to 2147483647" -msgstr "1 на 2147483647" +msgstr "1 до 2147483647" #: ../../src/rdbms/datatypes.txt:156 -#, fuzzy msgid "bigserial" -msgstr "багатосерійний фільм" +msgstr "bigserial" #: ../../src/rdbms/datatypes.txt:156 -#, fuzzy msgid "large auto incrementing integer" msgstr "велике ціле число, що автоматично збільшується" #: ../../src/rdbms/datatypes.txt:156 -#, fuzzy msgid "1 to 9223372036854775807" -msgstr "1 на 9223372036854775807" +msgstr "1 до 9223372036854775807" #: ../../src/rdbms/datatypes.txt:160 -#, fuzzy msgid "Character types" -msgstr "Типи символів" +msgstr "Символьні типи" #: ../../src/rdbms/datatypes.txt:165 msgid "``character varying``, ``varchar``" msgstr "``character varying``, ``varchar``" #: ../../src/rdbms/datatypes.txt:165 -#, fuzzy msgid "variable-length with limit" msgstr "змінної довжини з обмеженням" @@ -747,27 +658,22 @@ msgid "``character``, ``char``, ``bpchar``" msgstr "``character``, ``char``, ``bpchar``" #: ../../src/rdbms/datatypes.txt:167 -#, fuzzy msgid "fixed-length, blank-padded" msgstr "фіксованої довжини, пустотілі" #: ../../src/rdbms/datatypes.txt:169 -#, fuzzy msgid "``bpchar`` without length specifier" msgstr "``bpchar`` без специфікатора довжини" #: ../../src/rdbms/datatypes.txt:169 -#, fuzzy msgid "variable unlimited length, blank-trimmed" msgstr "змінна необмеженої довжини, без обрізів" #: ../../src/rdbms/datatypes.txt:172 -#, fuzzy msgid "variable-unlimited length" msgstr "змінна необмеженої довжини" #: ../../src/rdbms/datatypes.txt:175 -#, fuzzy msgid "" "SQL defines two primary character types: ``character varying(n)`` and " "``character(n)``, where ``n`` is a positive integer. Both of these types can " @@ -780,11 +686,11 @@ msgid "" "shorter than the declared length, value of type ``char`` will be space-" "padded; values of ``varchar`` will simply store the shorter string." msgstr "" -"У мові SQL визначено два основних типи символів: ``символ-змінна(n)`` та " -"``символ(n)``, де ``n`` - натуральне число. Обидва ці типи можуть зберігати " -"рядок довжиною до ``n`` символів. Спроба зберегти довший рядок у стовпці цих " -"типів призведе до помилки, якщо тільки всі надлишкові символи не є " -"пробілами, у цьому випадку рядок буде урізано до максимальної довжини. " +"У мові SQL визначено два основних типи символів: ``character varying(n)`` та " +"``character(n)``, де ``n`` - натуральне число. Обидва ці типи можуть " +"зберігати рядок довжиною до ``n`` символів. Спроба зберегти довший рядок у " +"стовпці цих типів призведе до помилки, якщо тільки всі надлишкові символи не " +"є пробілами, у цьому випадку рядок буде урізано до максимальної довжини. " "Однак, якщо явно привести значення до ``varchar(n)`` або ``char(n)``, то " "значення надмірної довжини буде урізано до ``n`` символів без виникнення " "помилки. Якщо рядок, що зберігається, коротший за оголошену довжину, " @@ -792,7 +698,6 @@ msgstr "" "просто збереже коротший рядок." #: ../../src/rdbms/datatypes.txt:186 -#, fuzzy msgid "" "In addition postgres provides the ``text`` type, which stores strings of any " "length." @@ -801,7 +706,6 @@ msgstr "" "довільної довжини." #: ../../src/rdbms/datatypes.txt:189 -#, fuzzy msgid "" "If specified, the length ``n`` must be greater than 0 and cannot exceed " "10,485,760. If ``character varying`` is used without length specifier, the " @@ -811,19 +715,17 @@ msgid "" "``character(1)``." msgstr "" "Якщо вказано, довжина ``n`` повинна бути більшою за 0 і не може перевищувати " -"10 485 760. Якщо ``character varying`` використовується без специфікатора " -"довжини, тип приймає рядки будь-якої довжини. Якщо ``bpchar`` не має " -"специфікатора довжини, він також приймає рядки будь-якої довжини, але " +"10 485 760 символів. Якщо ``character varying`` використовується без " +"специфікатора довжини, тип приймає рядки будь-якої довжини. Якщо ``bpchar`` " +"не має специфікатора довжини, він також приймає рядки будь-якої довжини, але " "кінцеві пробіли є семантично несуттєвими. Якщо ``character`` не має " -"специфікатора, він еквівалентний ``character(1)``." +"специфікатора, він еквівалентний до ``character(1)``." #: ../../src/rdbms/datatypes.txt:197 -#, fuzzy msgid "Date/Time types" msgstr "Типи дати/часу" #: ../../src/rdbms/datatypes.txt:199 -#, fuzzy msgid "" "PostgreSQL supports the full set of SQL date and time types. Dates are " "counted according to the Gregorian calendar, even in years before that " @@ -834,7 +736,6 @@ msgstr "" "запроваджено." #: ../../src/rdbms/datatypes.txt:203 -#, fuzzy msgid "" "``time``, ``timestamp``, and ``interval`` accept an optional precision " "value, which specifies the number of fractional digits retained in the " @@ -847,7 +748,6 @@ msgstr "" "значення цього параметра - від 0 до 6." #: ../../src/rdbms/datatypes.txt:208 -#, fuzzy msgid "" "The ``interval`` type has an additional option, which is to restrict the of " "stored fields by writing one of these phrases:" @@ -856,18 +756,15 @@ msgstr "" "зберігаються, шляхом написання однієї з цих фраз:" #: ../../src/rdbms/datatypes.txt:228 -#, fuzzy msgid "Dates" msgstr "Дати" #: ../../src/rdbms/datatypes.txt:230 -#, fuzzy msgid "Some possible inputs for the ``date`` type." msgstr "Деякі можливі вхідні дані для типу ``date``." #: ../../src/rdbms/datatypes.txt:233 ../../src/rdbms/datatypes.txt:274 #: ../../src/rdbms/datatypes.txt:305 -#, fuzzy msgid "Example" msgstr "Приклад" @@ -876,7 +773,6 @@ msgid "``1999-01-08``" msgstr "``1999-01-08``" #: ../../src/rdbms/datatypes.txt:235 -#, fuzzy msgid "ISO 8601; January 8 in any mode (**recommended format**)" msgstr "ISO 8601; 8 січня в будь-якому режимі (**рекомендований формат**)" @@ -885,7 +781,6 @@ msgid "``January 8, 1999``" msgstr "``January 8, 1999``" #: ../../src/rdbms/datatypes.txt:238 -#, fuzzy msgid "unambiguous in any date style input mode" msgstr "однозначний у будь-якому режимі введення стилю дати" @@ -894,7 +789,6 @@ msgid "``1/8/1999``" msgstr "``1/8/1999``" #: ../../src/rdbms/datatypes.txt:240 -#, fuzzy msgid "January 8 in MDY mode; August 1 in DMY mode" msgstr "8 січня в режимі MDY; 1 серпня в режимі DMY" @@ -903,7 +797,6 @@ msgid "``1/18/1999``" msgstr "``1/18/1999``" #: ../../src/rdbms/datatypes.txt:242 -#, fuzzy msgid "January 18 in MDY mode; rejected in other modes" msgstr "18 січня в режимі MDY; відхилено в інших режимах" @@ -912,7 +805,6 @@ msgid "``01/02/03``" msgstr "``01/02/03``" #: ../../src/rdbms/datatypes.txt:245 -#, fuzzy msgid "" "January 2, 2003 in MDY mode; February 1, 2003 in DMY mode; February 3, 2001 " "in YMD mode" @@ -925,7 +817,6 @@ msgid "``1999-Jan-08`` ``Jan-08-1999`` ``08-Jan-1999``" msgstr "``1999-Jan-08`` ``Jan-08-1999`` ``08-Jan-1999``" #: ../../src/rdbms/datatypes.txt:249 -#, fuzzy msgid "January 8 in any mode" msgstr "8 січня в будь-якому режимі" @@ -934,7 +825,6 @@ msgid "``99-Jan-08``" msgstr "``99-Jan-08``" #: ../../src/rdbms/datatypes.txt:253 -#, fuzzy msgid "January 8 in YMD mode, else error" msgstr "8 січня в режимі YMD, інакше помилка" @@ -943,7 +833,6 @@ msgid "``08-Jan-99`` ``Jan-08-99``" msgstr "``08-Jan-99`` ``Jan-08-99``" #: ../../src/rdbms/datatypes.txt:255 -#, fuzzy msgid "January 8, except error in YMD mode" msgstr "8 січня, крім помилки в режимі YMD" @@ -952,7 +841,6 @@ msgid "``19990108`` ``990108``" msgstr "``19990108`` ``990108``" #: ../../src/rdbms/datatypes.txt:258 -#, fuzzy msgid "ISO 8601; January 8, 1999 in any mode" msgstr "ISO 8601; 8 січня 1999 року в будь-якому режимі" @@ -961,16 +849,14 @@ msgid "``1999.008``" msgstr "``1999.008``" #: ../../src/rdbms/datatypes.txt:261 -#, fuzzy msgid "year and day of year" -msgstr "рік і день року" +msgstr "рік та день року" #: ../../src/rdbms/datatypes.txt:263 msgid "``J2451187``" msgstr "``J2451187``" #: ../../src/rdbms/datatypes.txt:263 -#, fuzzy msgid "Julian date" msgstr "Дата за юліанським календарем" @@ -979,17 +865,14 @@ msgid "``January 8, 99 BC``" msgstr "``January 8, 99 BC``" #: ../../src/rdbms/datatypes.txt:265 -#, fuzzy msgid "year 99 BC" msgstr "99 рік до н.е" #: ../../src/rdbms/datatypes.txt:269 -#, fuzzy msgid "Times" -msgstr "Разів" +msgstr "Час" #: ../../src/rdbms/datatypes.txt:271 -#, fuzzy msgid "Some possible inputs for the ``time`` type." msgstr "Деякі можливі вхідні дані для типу ``time``." @@ -998,7 +881,6 @@ msgid "``04:05:06.789`` ``04:05:06`` ``04:05`` ``040506``" msgstr "``04:05:06.789`` ``04:05:06`` ``04:05`` ``040506``" #: ../../src/rdbms/datatypes.txt:276 -#, fuzzy msgid "ISO 8601" msgstr "ISO 8601" @@ -1007,7 +889,6 @@ msgid "``04:05 AM``" msgstr "``04:05 AM``" #: ../../src/rdbms/datatypes.txt:281 -#, fuzzy msgid "same as 04:05; AM does not affect value" msgstr "те саме, що і 04:05; AM не впливає на значення" @@ -1016,7 +897,6 @@ msgid "``04:05 PM``" msgstr "``04:05 PM``" #: ../../src/rdbms/datatypes.txt:283 -#, fuzzy msgid "same as 16:05; input hour must be <= 12" msgstr "збігається з 16:05; вхідна година повинна бути <= 12" @@ -1025,25 +905,22 @@ msgid "``04:05:06.789-8`` ``04:05:06-08:00`` ``04:05-08:00`` ``040506-08``" msgstr "``04:05:06.789-8`` ``04:05:06-08:00`` ``04:05-08:00`` ``040506-08``" #: ../../src/rdbms/datatypes.txt:285 -#, fuzzy msgid "ISO 8601, with time zone as UTC offset" -msgstr "ISO 8601, з часовим поясом як зміщенням UTC" +msgstr "ISO 8601, з часовим поясом відносно UTC" #: ../../src/rdbms/datatypes.txt:290 msgid "``040506+0730``" msgstr "``040506+0730``" #: ../../src/rdbms/datatypes.txt:290 -#, fuzzy msgid "ISO 8601, with fractional-hour time zone as UTC offset" -msgstr "ISO 8601, з часовим поясом у дробових годинах як зміщенням UTC" +msgstr "ISO 8601, з часовим поясом у дробових годинах відносно UTC" #: ../../src/rdbms/datatypes.txt:293 msgid "``040506+07:30:00``" msgstr "``040506+07:30:00``" #: ../../src/rdbms/datatypes.txt:293 -#, fuzzy msgid "UTC offset specified to seconds (not allowed in ISO 8601)" msgstr "Зміщення UTC вказано в секундах (не дозволено в ISO 8601)" @@ -1052,7 +929,6 @@ msgid "``04:05:06 PST``" msgstr "``04:05:06 PST``" #: ../../src/rdbms/datatypes.txt:296 -#, fuzzy msgid "time zone specified by abbreviation" msgstr "часовий пояс, вказаний абревіатурою" @@ -1061,12 +937,10 @@ msgid "``2003-04-12 04:05:06 America/New_York``" msgstr "``2003-04-12 04:05:06 America/New_York``" #: ../../src/rdbms/datatypes.txt:298 -#, fuzzy msgid "time zone specified by full" msgstr "часовий пояс вказано повністю" #: ../../src/rdbms/datatypes.txt:303 -#, fuzzy msgid "Time zone input" msgstr "Введення часового поясу" @@ -1075,7 +949,6 @@ msgid "``PST``" msgstr "``PST``" #: ../../src/rdbms/datatypes.txt:307 -#, fuzzy msgid "Abbreviation (for Pacific Standard Time)" msgstr "Скорочення (для Тихоокеанського стандартного часу)" @@ -1084,7 +957,6 @@ msgid "``America/New_York``" msgstr "``America/New_York``" #: ../../src/rdbms/datatypes.txt:309 -#, fuzzy msgid "Full time zone name" msgstr "Повна назва часового поясу" @@ -1093,7 +965,6 @@ msgid "``PST8PDT``" msgstr "``PST8PDT``" #: ../../src/rdbms/datatypes.txt:311 -#, fuzzy msgid "POSIX-style time zone specification" msgstr "Специфікація часових поясів у стилі POSIX" @@ -1102,27 +973,24 @@ msgid "``-8:00:00``" msgstr "``-8:00:00``" #: ../../src/rdbms/datatypes.txt:313 -#, fuzzy msgid "UTC offset for PST" -msgstr "Зміщення UTC для PST" +msgstr "Зміщення відносно UTC для PST" #: ../../src/rdbms/datatypes.txt:315 msgid "``-8:00``" msgstr "``-8:00``" #: ../../src/rdbms/datatypes.txt:315 -#, fuzzy msgid "UTC offset for PST (ISO 8601 extended format)" -msgstr "Зміщення UTC для PST (розширений формат ISO 8601)" +msgstr "Зміщення відносно UTC для PST (розширений формат ISO 8601)" #: ../../src/rdbms/datatypes.txt:317 msgid "``-800``" msgstr "``-800``" #: ../../src/rdbms/datatypes.txt:317 ../../src/rdbms/datatypes.txt:319 -#, fuzzy msgid "UTC offset for PST (ISO 8601 basic format)" -msgstr "Зміщення UTC для PST (базовий формат ISO 8601)" +msgstr "Зміщення відносно UTC для PST (базовий формат ISO 8601)" #: ../../src/rdbms/datatypes.txt:319 msgid "``-8``" @@ -1133,7 +1001,6 @@ msgid "``zulu``" msgstr "``zulu``" #: ../../src/rdbms/datatypes.txt:321 -#, fuzzy msgid "Military abbreviation for UTC" msgstr "Військове скорочення UTC" @@ -1142,29 +1009,24 @@ msgid "``z``" msgstr "``z``" #: ../../src/rdbms/datatypes.txt:323 -#, fuzzy msgid "Short form of zulu (also in ISO 8601)" msgstr "Коротка форма зулу (також в ISO 8601)" #: ../../src/rdbms/datatypes.txt:327 -#, fuzzy msgid "Special date/time inputs" msgstr "Спеціальне введення дати/часу" #: ../../src/rdbms/datatypes.txt:330 -#, fuzzy msgid "Input String" -msgstr "Вхідний рядок" +msgstr "Вхідний Рядок" #: ../../src/rdbms/datatypes.txt:330 -#, fuzzy msgid "Valid Types" -msgstr "Допустимі типи" +msgstr "Допустимі Типи" #: ../../src/rdbms/datatypes.txt:332 -#, fuzzy msgid "epoch" -msgstr "епоха" +msgstr "epoch" #: ../../src/rdbms/datatypes.txt:332 ../../src/rdbms/datatypes.txt:335 #: ../../src/rdbms/datatypes.txt:345 ../../src/rdbms/datatypes.txt:348 @@ -1173,101 +1035,84 @@ msgid "``date``, ``timestamp``" msgstr "``date``, ``timestamp``" #: ../../src/rdbms/datatypes.txt:332 -#, fuzzy msgid "1970-01-01 00:00:00+00 (Unix system time zero)" msgstr "1970-01-01 00:00:00+00 (нульовий системний час Unix)" #: ../../src/rdbms/datatypes.txt:335 -#, fuzzy msgid "infinity" -msgstr "нескінченність" +msgstr "infinity" #: ../../src/rdbms/datatypes.txt:335 -#, fuzzy msgid "later than all other time stamps" msgstr "пізніше за всі інші часові мітки" #: ../../src/rdbms/datatypes.txt:338 -#, fuzzy msgid "-infinity" -msgstr "-нескінченність" +msgstr "-infinity" #: ../../src/rdbms/datatypes.txt:338 msgid "``date, ``timestamp``" msgstr "``date, ``timestamp``" #: ../../src/rdbms/datatypes.txt:338 -#, fuzzy msgid "earlier than all other time stamps" msgstr "раніше за всі інші мітки часу" #: ../../src/rdbms/datatypes.txt:341 -#, fuzzy msgid "now" -msgstr "зараз" +msgstr "now" #: ../../src/rdbms/datatypes.txt:341 msgid "``date``, ``time``, ``timestamp``" msgstr "``date``, ``time``, ``timestamp``" #: ../../src/rdbms/datatypes.txt:341 -#, fuzzy msgid "current transaction's start time" msgstr "час початку поточної транзакції" #: ../../src/rdbms/datatypes.txt:345 -#, fuzzy msgid "today" -msgstr "сьогодні" +msgstr "today" #: ../../src/rdbms/datatypes.txt:345 -#, fuzzy msgid "midnight (00:00) today" msgstr "опівночі (00:00) сьогодні" #: ../../src/rdbms/datatypes.txt:348 -#, fuzzy msgid "tomorrow" -msgstr "завтра" +msgstr "tomorrow" #: ../../src/rdbms/datatypes.txt:348 -#, fuzzy msgid "midnight (00:00) tomorrow" msgstr "опівночі (00:00) завтра" #: ../../src/rdbms/datatypes.txt:351 -#, fuzzy msgid "yesterday" -msgstr "вчора" +msgstr "yesterday" #: ../../src/rdbms/datatypes.txt:351 -#, fuzzy msgid "midnight (00:00) yesterday" msgstr "опівночі (00:00) вчора" #: ../../src/rdbms/datatypes.txt:354 -#, fuzzy msgid "allballs" -msgstr "оллболи" +msgstr "allballs" #: ../../src/rdbms/datatypes.txt:354 msgid "00:00:00.00 UTC" msgstr "00:00:00.00 UTC" #: ../../src/rdbms/datatypes.txt:358 -#, fuzzy msgid "Intervals" msgstr "Інтервали" #: ../../src/rdbms/datatypes.txt:360 -#, fuzzy msgid "``interval`` values can be written using the following verbose syntax:" msgstr "" -"значення ``інтервалу`` можна записати, використовуючи наступний розгорнутий " +"значення ``interval`` можна записати, використовуючи наступний розгорнутий " "синтаксис:" #: ../../src/rdbms/datatypes.txt:366 -#, fuzzy msgid "" "Intervals are useful when you need to move timestamp back in past or to the " "future." @@ -1276,12 +1121,10 @@ msgstr "" "майбутнє." #: ../../src/rdbms/datatypes.txt:370 -#, fuzzy msgid "Abbreviation" msgstr "Абревіатура" #: ../../src/rdbms/datatypes.txt:370 -#, fuzzy msgid "Meaning" msgstr "Значення" @@ -1290,16 +1133,14 @@ msgid "Y" msgstr "Y" #: ../../src/rdbms/datatypes.txt:372 -#, fuzzy msgid "Years" -msgstr "Років" +msgstr "Роки" #: ../../src/rdbms/datatypes.txt:374 ../../src/rdbms/datatypes.txt:382 msgid "M" msgstr "M" #: ../../src/rdbms/datatypes.txt:374 -#, fuzzy msgid "Months" msgstr "Місяці" @@ -1308,7 +1149,6 @@ msgid "W" msgstr "W" #: ../../src/rdbms/datatypes.txt:376 -#, fuzzy msgid "Weeks" msgstr "Тижні" @@ -1317,7 +1157,6 @@ msgid "D" msgstr "D" #: ../../src/rdbms/datatypes.txt:378 -#, fuzzy msgid "Days" msgstr "Дні" @@ -1326,12 +1165,10 @@ msgid "H" msgstr "H" #: ../../src/rdbms/datatypes.txt:380 -#, fuzzy msgid "Hours" msgstr "Години" #: ../../src/rdbms/datatypes.txt:382 -#, fuzzy msgid "Minutes" msgstr "Хвилини" @@ -1340,22 +1177,18 @@ msgid "S" msgstr "S" #: ../../src/rdbms/datatypes.txt:384 -#, fuzzy msgid "Seconds" msgstr "Секунди" #: ../../src/rdbms/datatypes.txt:387 -#, fuzzy msgid "7 days before yesterday" -msgstr "7 днів позавчора" +msgstr "7 днів перед вчора" #: ../../src/rdbms/datatypes.txt:394 -#, fuzzy msgid "Boolean type" -msgstr "Булевий тип" +msgstr "Логічний тип" #: ../../src/rdbms/datatypes.txt:396 -#, fuzzy msgid "" "PostgreSQL provides the standard SQL type ``boolean``. The ``boolean`` type " "can have several states: **true**, **false**, and a third state, " @@ -1366,7 +1199,6 @@ msgstr "" "представляється значенням SQL ``NULL``." #: ../../src/rdbms/datatypes.txt:400 -#, fuzzy msgid "" "The datetype input function for type ``boolean`` accepts these strings " "representations for the **true** state:" @@ -1379,8 +1211,8 @@ msgid "``true``" msgstr "``true``" #: ../../src/rdbms/datatypes.txt:404 -msgid "``yea``" -msgstr "``yea``" +msgid "``yes``" +msgstr "``yes``" #: ../../src/rdbms/datatypes.txt:405 msgid "``on``" @@ -1391,7 +1223,6 @@ msgid "``1``" msgstr "``1``" #: ../../src/rdbms/datatypes.txt:408 -#, fuzzy msgid "and these representations for the **false** state:" msgstr "і ці представлення для стану **false**:" @@ -1412,25 +1243,22 @@ msgid "``0``" msgstr "``0``" #: ../../src/rdbms/datatypes.txt:415 -#, fuzzy msgid "" "The key words ``TRUE`` or ``FALSE`` are preferred (SQL-compliant) method for " "writing Boolean constants in SQL queries. But, you can also use string " "representations by following the generic string-literal constant syntax, for " -"example ``'yes':boolean``." +"example ``'yes'::boolean``." msgstr "" "Ключові слова ``TRUE`` або ``FALSE`` є найкращим (SQL-сумісним) методом " "запису булевих констант у SQL-запитах. Але ви також можете використовувати " "рядкові представлення, дотримуючись загального синтаксису рядково-літерних " -"констант, наприклад, ``'yes':boolean``." +"констант, наприклад, ``'yes'::boolean``." #: ../../src/rdbms/datatypes.txt:421 -#, fuzzy msgid "Enumerated types" msgstr "Перераховані типи" #: ../../src/rdbms/datatypes.txt:423 -#, fuzzy msgid "" "Enumerated (enums) types are data types that comprise a static, ordered set " "of values. They are equivalent to the ``enum`` types supported in a number " @@ -1443,7 +1271,6 @@ msgstr "" "бути дні тижня або набір значень статусу елемента даних." #: ../../src/rdbms/datatypes.txt:428 -#, fuzzy msgid "" "Enum types are created using the ``CREATE TYPE`` command; and once created, " "the enum type can be used in table in function definitions, much like other " @@ -1454,12 +1281,10 @@ msgstr "" "функцій, як і інші типи:" #: ../../src/rdbms/datatypes.txt:443 -#, fuzzy msgid "Ordering" -msgstr "Перевірка та підтвердження замовлення (відсутній)" +msgstr "Упорядкування" #: ../../src/rdbms/datatypes.txt:445 -#, fuzzy msgid "" "The ordering of the values in an enum type is the order in which the values " "were listed when the type was created. All standard comparison operators and " @@ -1467,8 +1292,8 @@ msgid "" "each enumerated data type is separated and cannot be compared with other " "enumerated types." msgstr "" -"Порядок значень у зчислювальному типі - це порядок, у якому значення були " -"перераховані при створенні типу. Усі стандартні оператори порівняння та " -"пов'язані з ними агрегатні функції підтримуються для зчислень. Однак " -"пам'ятайте, що кожен перелічуваний тип даних є окремим і не може " -"порівнюватися з іншими перелічуваними типами." +"Порядок значень у типі enum - це порядок, у якому значення були перераховані " +"при створенні типу. Усі стандартні оператори порівняння та пов'язані з ними " +"агрегатні функції підтримуються для перелічуваних типів. Однак пам'ятайте, " +"що кожен перелічуваний тип даних є окремим і не може порівнюватися з іншими " +"перелічуваними типами." diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 2b5fead67..6db7dc85a 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -401,7 +401,7 @@ The datetype input function for type ``boolean`` accepts these strings representations for the **true** state: - ``true`` -- ``yea`` +- ``yes`` - ``on`` - ``1`` @@ -415,7 +415,7 @@ and these representations for the **false** state: The key words ``TRUE`` or ``FALSE`` are preferred (SQL-compliant) method for writing Boolean constants in SQL queries. But, you can also use string representations by following the generic string-literal constant syntax, for -example ``'yes':boolean``. +example ``'yes'::boolean``. Enumerated types ================ From 837115451f04c5190fb1cb43887284a7c26abc78 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 22 Dec 2023 15:20:42 +0200 Subject: [PATCH 580/689] Update translation (pre-translated) - rdbms/ddl --- src/_locales/uk/LC_MESSAGES/rdbms/ddl.po | 11 +++++------ src/rdbms/ddl.txt | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po index fe3b8bf3b..eaff5bd6c 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.09.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 03:52+0200\n" +"POT-Creation-Date: 2023-12-22 13:19+0000\n" +"PO-Revision-Date: 2023-12-22 15:20+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.13.1\n" +"Generated-By: Babel 2.12.1\n" "X-Generator: Poedit 3.4.1\n" #: ../../src/rdbms/ddl.txt:-1 @@ -517,9 +517,8 @@ msgstr "" "такою командою:" #: ../../src/rdbms/ddl.txt:304 -#, fuzzy -msgid "To remove any default value, use:" -msgstr "Щоб видалити будь-яке значення за замовчуванням, використовуйте" +msgid "To remove any default value, use:" +msgstr "Щоб видалити будь-яке значення за замовчуванням, використовуйте:" #: ../../src/rdbms/ddl.txt:311 #, fuzzy diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 0a3212b5c..1eaac0f2b 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -301,7 +301,7 @@ To set a new default for a column, use command like this: ALTER TABLE tbl_name ALTER COLUMN cln_name SET DEFAULT 0.0; -To remove any default value, use: +To remove any default value, use: .. code-block:: postgresql From f293cb18ee4453fb742e53ba913b62d8dedb0f1d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 22 Dec 2023 15:24:53 +0200 Subject: [PATCH 581/689] Update project version in translation files --- src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po | 3 +-- src/_locales/uk/LC_MESSAGES/rdbms/ddl.po | 5 ++--- src/_locales/uk/LC_MESSAGES/rdbms/dml.po | 5 ++--- src/_locales/uk/LC_MESSAGES/rdbms/functions.po | 5 ++--- src/_locales/uk/LC_MESSAGES/rdbms/query.po | 5 ++--- src/_locales/uk/LC_MESSAGES/rdbms/structure.po | 5 ++--- 6 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po b/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po index 9abe3d11a..d4bf1c56b 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/datatypes.po @@ -2,8 +2,7 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. -# +# SERHII HORODILOV msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.11.dev\n" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po index eaff5bd6c..0cdd21c22 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po @@ -2,11 +2,10 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. -# +# SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-22 13:19+0000\n" "PO-Revision-Date: 2023-12-22 15:20+0200\n" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/dml.po b/src/_locales/uk/LC_MESSAGES/rdbms/dml.po index e05a47ca1..4c1242214 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/dml.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/dml.po @@ -2,11 +2,10 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. -# +# SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" "PO-Revision-Date: 2023-12-21 03:53+0200\n" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po index acc665e2c..a71f47f24 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po @@ -2,11 +2,10 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. -# +# SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" "PO-Revision-Date: 2023-12-21 03:58+0200\n" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/query.po b/src/_locales/uk/LC_MESSAGES/rdbms/query.po index 3415971e1..9f7794efc 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/query.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/query.po @@ -2,11 +2,10 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. -# +# SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" "PO-Revision-Date: 2023-12-21 04:00+0200\n" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/structure.po b/src/_locales/uk/LC_MESSAGES/rdbms/structure.po index 95993cbf0..a5a12bd20 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/structure.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/structure.po @@ -2,11 +2,10 @@ # Copyright (C) 2023, Python training course authors and contributors # This file is distributed under the same license as the Python Training # Course package. -# FIRST AUTHOR , 2023. -# +# SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" +"Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" "PO-Revision-Date: 2023-12-21 04:01+0200\n" From 0585c628f21703576f5d892efb172a2c5d419063 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:17:13 +0200 Subject: [PATCH 582/689] Update submodules from remotes --- problem-sets | 2 +- src/appx/blog | 2 +- src/appx/libms | 2 +- src/index.txt | 4 ++-- src/spec/giver | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/problem-sets b/problem-sets index 56ce293ef..4e056d7bb 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 56ce293ef4329142767e14c270877fd4d90b1928 +Subproject commit 4e056d7bb7e3f1645b9c72e1343a40acf766ca52 diff --git a/src/appx/blog b/src/appx/blog index 6bd83e049..6e7cbc29b 160000 --- a/src/appx/blog +++ b/src/appx/blog @@ -1 +1 @@ -Subproject commit 6bd83e049ab696587fd5f53a8101e3a66575b006 +Subproject commit 6e7cbc29bd4fbb0155df0104111de26cdc1681cd diff --git a/src/appx/libms b/src/appx/libms index a7b79a2c2..a1762d276 160000 --- a/src/appx/libms +++ b/src/appx/libms @@ -1 +1 @@ -Subproject commit a7b79a2c262c0506f6577e1230c01264d1777060 +Subproject commit a1762d276c5ef518e6febee266bfb215bae877c9 diff --git a/src/index.txt b/src/index.txt index a382ab469..0a85189c4 100644 --- a/src/index.txt +++ b/src/index.txt @@ -31,8 +31,8 @@ appx/assignments appx/conv_store appx/wtk - appx/blog/spec - appx/libms/spec + appx/blog/index + appx/libms/index .. rubric:: References diff --git a/src/spec/giver b/src/spec/giver index 2006c3f5e..858138001 160000 --- a/src/spec/giver +++ b/src/spec/giver @@ -1 +1 @@ -Subproject commit 2006c3f5eb8c5615574f4fd0e6dd5252135bdbee +Subproject commit 858138001350b9e33d3ff45fdc69badcbe7425a4 From cdab2ef2022ae809ce5cfbf4d7eea6387a8eccbf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:21:06 +0200 Subject: [PATCH 583/689] Add legacy directories to the documentation builder exclude patterns --- src/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/conf.py b/src/conf.py index 5e4df8181..5fcb7e831 100644 --- a/src/conf.py +++ b/src/conf.py @@ -40,6 +40,8 @@ } needs_sphinx = "4.0" exclude_patterns = [ + "**/_legacy/**", + "**/legacy/**", "**/README.*", ] suppress_warnings = [] From f6f4db8e1a8e294f4e666ef7eb9d7f503e8b8b96 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:26:25 +0200 Subject: [PATCH 584/689] Add redirects support for the documentation builder --- poetry.lock | 17 ++++++++++++++++- pyproject.toml | 1 + requirements.txt | 1 + src/conf.py | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 42d59d1a8..3cc9e19de 100644 --- a/poetry.lock +++ b/poetry.lock @@ -654,6 +654,21 @@ sphinx = "*" [package.extras] test = ["mock", "pytest", "six"] +[[package]] +name = "sphinx-reredirects" +version = "0.1.3" +description = "Handles redirects for moved pages in Sphinx documentation projects" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinx_reredirects-0.1.3-py3-none-any.whl", hash = "sha256:02c53437c467cf9ed89863eff3addedc01d129624b2f03ab6302518fb77a2c89"}, + {file = "sphinx_reredirects-0.1.3.tar.gz", hash = "sha256:56e222d285f76c944fd370f36ad3a1a66103a88b552e97d3d24a622bb9465de8"}, +] + +[package.dependencies] +sphinx = "*" + [[package]] name = "sphinx-rtd-theme" version = "1.3.0" @@ -878,4 +893,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "21b20ccf05a1fc5b1c4a0fb7a3952fb9b06a35fa00ecdb101428061a5e05a175" +content-hash = "f071d183d2f1e5bc624eabe1397898b37da6b54f2ee0cc293240741d1219fd66" diff --git a/pyproject.toml b/pyproject.toml index 767147eda..e765f81f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ sphinxcontrib-bibtex = "^2.5.0" sphinxcontrib-mermaid = "^0.8.1" sphinx-copybutton = "^0.5.2" toml = "^0.10.2" +sphinx-reredirects = "^0.1.3" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt index dfe21ca05..8e4a21243 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,6 +26,7 @@ six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +sphinx-reredirects==0.1.3 ; python_version >= "3.9" and python_version < "4.0" sphinx-rtd-theme==1.3.0 ; python_version >= "3.9" and python_version < "4.0" sphinx==6.2.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-applehelp==1.0.7 ; python_version >= "3.9" and python_version < "4.0" diff --git a/src/conf.py b/src/conf.py index 5fcb7e831..f9b8ea9f1 100644 --- a/src/conf.py +++ b/src/conf.py @@ -32,6 +32,7 @@ "sphinx_rtd_theme", "myst_parser", "sphinx_copybutton", + "sphinx_reredirects", ] source_suffix = { ".txt": "restructuredtext", From 447508c6fa1f89acdbec63f95fa3d7fcfb56d222 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:30:09 +0200 Subject: [PATCH 585/689] Move specification submodules to spec directory --- .gitmodules | 4 ++-- src/index.txt | 4 ++-- src/{appx => spec}/blog | 0 src/{appx => spec}/libms | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename src/{appx => spec}/blog (100%) rename src/{appx => spec}/libms (100%) diff --git a/.gitmodules b/.gitmodules index 14e078726..6003f9eed 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,10 +2,10 @@ path = problem-sets url = git@github.com:edu-python-course/problem-sets [submodule "src/appx/blog"] - path = src/appx/blog + path = src/spec/blog url = git@github.com:edu-python-course/blog-spec [submodule "src/appx/libms"] - path = src/appx/libms + path = src/spec/libms url = git@github.com:edu-python-course/libms-spec.git [submodule "src/spec/giver"] path = src/spec/giver diff --git a/src/index.txt b/src/index.txt index 0a85189c4..25b428dca 100644 --- a/src/index.txt +++ b/src/index.txt @@ -31,8 +31,8 @@ appx/assignments appx/conv_store appx/wtk - appx/blog/index - appx/libms/index + spec/blog/index + spec/libms/index .. rubric:: References diff --git a/src/appx/blog b/src/spec/blog similarity index 100% rename from src/appx/blog rename to src/spec/blog diff --git a/src/appx/libms b/src/spec/libms similarity index 100% rename from src/appx/libms rename to src/spec/libms From e798bfc2fe1a032aa6d95b801a04a3f5b904ea4e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:36:34 +0200 Subject: [PATCH 586/689] Set up redirects (fixes GH-139) --- src/conf.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/conf.py b/src/conf.py index f9b8ea9f1..5b9d43c19 100644 --- a/src/conf.py +++ b/src/conf.py @@ -54,6 +54,14 @@ # TODO: configure options for mermaid output for pdf # mermaid-js/mermaid-cli is added to project's dependencies +# options for redirects +redirects = { + "appx/blog/spec": "../../spec/blog/index.html", + "appx/blog/index": "../../spec/blog/index.html", + "appx/libms/spec": "../../spec/libms/index.html", + "appx/libms/index": "../../spec/libms/index.html", +} + # options for internationalization gettext_compact = False language = "en" From e4eca816e9be4c8cc44f77e81932eb29527a63e5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:46:54 +0200 Subject: [PATCH 587/689] Update project dependencies --- poetry.lock | 44 +++++++++++++++++++++----------------------- requirements.txt | 12 ++++++------ 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3cc9e19de..141376eab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,32 +14,29 @@ files = [ [[package]] name = "babel" -version = "2.13.1" +version = "2.14.0" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, - {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] -[package.dependencies] -setuptools = {version = "*", markers = "python_version >= \"3.12\""} - [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] @@ -183,14 +180,14 @@ files = [ [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] @@ -207,21 +204,21 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.1" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] @@ -452,18 +449,19 @@ pybtex = ">=0.16" [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyyaml" @@ -539,18 +537,18 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.2.2" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] diff --git a/requirements.txt b/requirements.txt index 8e4a21243..77c0b57f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,13 @@ alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" -babel==2.13.1 ; python_version >= "3.9" and python_version < "4.0" -certifi==2023.7.22 ; python_version >= "3.9" and python_version < "4.0" +babel==2.14.0 ; python_version >= "3.9" and python_version < "4.0" +certifi==2023.11.17 ; python_version >= "3.9" and python_version < "4.0" charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" -idna==3.4 ; python_version >= "3.9" and python_version < "4.0" +idna==3.6 ; python_version >= "3.9" and python_version < "4.0" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" -importlib-metadata==6.8.0 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==7.0.1 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" @@ -18,10 +18,10 @@ myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" packaging==23.2 ; python_version >= "3.9" and python_version < "4.0" pybtex-docutils==1.0.3 ; python_version >= "3.9" and python_version < "4.0" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" -pygments==2.16.1 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.17.2 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" -setuptools==68.2.2 ; python_version >= "3.9" and python_version < "4.0" +setuptools==69.0.3 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" From f299dec8d1ad64fb5009383455badeac1471d13c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:54:33 +0200 Subject: [PATCH 588/689] Move specification translations (fixes GH-139) --- .../uk/LC_MESSAGES/spec/blog/index.po | 1224 +++++++++++++++++ .../uk/LC_MESSAGES/spec/libms/index.po | 1187 ++++++++++++++++ 2 files changed, 2411 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/spec/blog/index.po create mode 100644 src/_locales/uk/LC_MESSAGES/spec/libms/index.po diff --git a/src/_locales/uk/LC_MESSAGES/spec/blog/index.po b/src/_locales/uk/LC_MESSAGES/spec/blog/index.po new file mode 100644 index 000000000..8f2e14416 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/spec/blog/index.po @@ -0,0 +1,1224 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-11-17 23:49+0200\n" +"PO-Revision-Date: 2023-11-17 23:56+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.1\n" + +#: ../../src/spec/blog/index.rst:10 +msgid "Blog Site" +msgstr "Сайт Блогу" + +#: ../../src/spec/blog/index.rst:12 +msgid "" +"The project aims to develop a robust and user-friendly web application using " +"the Django framework. The primary objective is to create a blogging platform " +"that allows users to publish and manage articles on various topics. The " +"application will provide an intuitive interface for authors to compose and " +"format their articles, while also offering a seamless reading experience for " +"visitors." +msgstr "" +"Проект має на меті розробку міцного та зручного у використанні веб-додатка " +"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " +"для блогів, яка дозволить користувачам публікувати та керувати статтями на " +"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " +"форматування своїх статей, а також забезпечить безперешкодний досвід читання " +"для відвідувачів." + +#: ../../src/spec/blog/index.rst:19 +msgid "**Key Features**" +msgstr "**Основні функції**" + +#: ../../src/spec/blog/index.rst:22 +msgid "User Registration and Authentication" +msgstr "Реєстрація та Аутентифікація Користувачів" + +#: ../../src/spec/blog/index.rst:23 +msgid "" +"The application will provide user registration and authentication " +"functionality, allowing individuals to create accounts, log in, and manage " +"their profile information. This feature will enable authors to have " +"personalized accounts and maintain ownership of their published articles." +msgstr "" +"Застосунок надасть функціональність реєстрації та аутентифікації " +"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " +"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " +"мати персоналізовані облікові записи та зберігати право власності на їхні " +"опубліковані статті." + +#: ../../src/spec/blog/index.rst:30 +msgid "Article Management" +msgstr "Керування Статтями" + +#: ../../src/spec/blog/index.rst:31 +msgid "" +"Authors will have the ability to create, edit, and delete articles within " +"the application. The system will offer a user-friendly editor. Additionally, " +"authors will be able to categorize articles by assigning relevant topics to " +"them." +msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." + +#: ../../src/spec/blog/index.rst:37 +msgid "Topic Subscription:" +msgstr "Підписка на Теми:" + +#: ../../src/spec/blog/index.rst:38 +msgid "" +"The application will include a subscription feature that allows users to " +"subscribe to topics of interest. By subscribing to specific topics, users " +"will receive notifications or updates whenever new articles are published in " +"those categories. This feature will enhance user engagement and ensure that " +"readers stay informed about the topics they find most valuable." +msgstr "" +"Автори матимуть можливість створювати, редагувати та видаляти статті в " +"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " +"категоризувати статті, присвоюючи їм відповідні теми." + +#: ../../src/spec/blog/index.rst:45 +msgid "" +"Overall, the project aims to deliver an efficient blogging platform that " +"caters to both authors and readers. By providing a seamless user experience " +"and incorporating essential functionalities such as user authentication, " +"article management, and topic subscriptions, the application will empower " +"users to create, share, and explore engaging content within a well-" +"structured and organized platform." +msgstr "" +"Застосунок буде містити функцію підписки, яка дозволить користувачам " +"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " +"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " +"категоріях будуть публікуватися нові статті. Ця функція покращить " +"залученість користувачів та забезпечить, що читачі будуть інформовані про " +"найцікавіші для них теми." + +#: ../../src/spec/blog/index.rst:52 +msgid "" +"Here is a starter repository template, that may helps: `Starter template`_." +msgstr "" +"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." + +#: ../../src/spec/blog/index.rst:55 +msgid "Challenge: Functional views" +msgstr "Виклик: Функціональні представлення" + +#: ../../src/spec/blog/index.rst:57 +msgid "" +"It's ok not to return **actual** content for now. Just ensure all the routes " +"are available and provide correct data. Use anything you like to return " +"within HTTP response." +msgstr "" +"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " +"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " +"ви хочете повернути в HTTP-відповіді." + +#: ../../src/spec/blog/index.rst:61 +msgid "" +"``/about/``: Provides a regular text for a user, describing the " +"functionalities of the django site." +msgstr "" +"``/about/``: надає звичайний текст для користувача, що описує функції сайту " +"django." + +#: ../../src/spec/blog/index.rst:63 +msgid "" +"``/``: A site's homepage. This will contain a list of blogs published via " +"the django site." +msgstr "" +"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " +"сайт Django." + +#: ../../src/spec/blog/index.rst:65 +msgid "" +"``/
    /``: A single article detail view. The URL contains dynamic part " +"in it. This will be used to fetch a single article from the database." +msgstr "" +"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " +"частину. Вона буде використовуватися для отримання однієї статті з бази " +"даних." + +#: ../../src/spec/blog/index.rst:68 +msgid "" +"``/
    /comment/``: This view will be used to add comments to a article." +msgstr "" +"``/
    /comment/``: Це представлення буде використовуватися для " +"додавання коментарів до статті." + +#: ../../src/spec/blog/index.rst:70 +msgid "``/create/``: A article creation form." +msgstr "``/create/``: Форма створення статті." + +#: ../../src/spec/blog/index.rst:71 +msgid "``/
    /update/``: A view to update an existing article data." +msgstr "" +"``/
    /update/``: Представлення для оновлення існуючих даних статті." + +#: ../../src/spec/blog/index.rst:72 +msgid "``/
    /delete/``: A view to confirm article deletion." +msgstr "" +"``/
    /delete/``: Представлення для підтвердження видалення статті." + +#: ../../src/spec/blog/index.rst:73 +msgid "``/topics/``: A list of topics available on the site." +msgstr "``/topics/``: Перелік доступних тем на сайті." + +#: ../../src/spec/blog/index.rst:74 +msgid "" +"``/topics//add/``: Add the selected topic to preferred topics list." +msgstr "``/topics//add/``: Додати обрану тему до списку обраних тем." + +#: ../../src/spec/blog/index.rst:75 +msgid "``/topics//remove/``: Removes the selected topic from preferred." +msgstr "``/topics//remove/``: Видаляє вибрану тему з обраних." + +#: ../../src/spec/blog/index.rst:76 +msgid "``/topics//subscribe/``: A view to subscribe for a topic." +msgstr "``/topics//subscribe/``: Представлення для підписки на тему." + +#: ../../src/spec/blog/index.rst:77 +msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." +msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." + +#: ../../src/spec/blog/index.rst:78 +msgid "``/profile//``: A site user's personal page." +msgstr "``/profile//``: Особиста сторінка користувача сайту." + +#: ../../src/spec/blog/index.rst:79 +msgid "" +"``/set-password/``: This route will be used to change users' credential data." +msgstr "" +"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " +"даних користувачів." + +#: ../../src/spec/blog/index.rst:81 +msgid "``/set-userdata/``: This route will be user to change users' data." +msgstr "" +"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " +"користувачів." + +#: ../../src/spec/blog/index.rst:82 +msgid "``/deactivate/``: Account deactivation (deletion) view." +msgstr "" +"``/deactivate/``: Представлення для деактивації облікового запису " +"(видалення)." + +#: ../../src/spec/blog/index.rst:83 +msgid "``/register/``: This view contains a user registration form." +msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." + +#: ../../src/spec/blog/index.rst:84 +msgid "``/login/``: This view contains a login form." +msgstr "``/login/``: Сторінка з формою для логіна." + +#: ../../src/spec/blog/index.rst:85 +msgid "" +"``/logout/``: Logout page. This view should redirect user back to homepage." +msgstr "" +"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " +"сторінку.." + +#: ../../src/spec/blog/index.rst:89 ../../src/spec/blog/index.rst:201 +#: ../../src/spec/blog/index.rst:231 ../../src/spec/blog/index.rst:409 +msgid "Optional task(s)" +msgstr "Додаткові завдання" + +#: ../../src/spec/blog/index.rst:91 +msgid "" +"``/archive///``: This view provides a list of articles " +"published on a specified month of a specified year. This view should apply " +"date validation and raise ``Http404`` for invalid paths. The valid date is a " +"year's 4-digits form followed by 1 or 2 digits representing month. Month " +"range should be limited as [1..12], leading zero may be omitted. Valid URLs " +"are:" +msgstr "" +"``/archive///``: Це представлення надає список статей, " +"опублікованих у певному місяці певного року. Це представлення повинно " +"застосовувати перевірку дати та викидати помилку ``Http404`` для " +"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " +"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " +"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " +"URL-адрес:" + +#: ../../src/spec/blog/index.rst:105 +msgid "Challenge: Data models" +msgstr "Завдання: моделі даних" + +#: ../../src/spec/blog/index.rst:108 +msgid "" +"Django admin may be used to create some dummy data. To gather access to " +"admin section you need to create a superuser. The easiest way to do that is " +"to use a django command:" +msgstr "" +"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " +"отримати доступ до адміністративного розділу, вам потрібно створити " +"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " +"Django:" + +#: ../../src/spec/blog/index.rst:117 ../../src/spec/blog/index.rst:218 +msgid "General" +msgstr "Основне" + +#: ../../src/spec/blog/index.rst:118 +msgid "Each model will be registered for admin site." +msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." + +#: ../../src/spec/blog/index.rst:121 ../../src/spec/blog/index.rst:456 +msgid "Article topic" +msgstr "Тема статті" + +#: ../../src/spec/blog/index.rst:122 +msgid "This is a simple model, that contains information about topic:" +msgstr "Ось проста модель, що містить інформацію про тему:" + +#: ../../src/spec/blog/index.rst:124 +msgid "topic title (unique value, 64 characters or fewer)" +msgstr "назва теми (унікальне значення, не більше 64 символів)" + +#: ../../src/spec/blog/index.rst:125 +msgid "topic short description (255 characters or fewer)" +msgstr "короткий опис теми (не більше 255 символів)" + +#: ../../src/spec/blog/index.rst:128 ../../src/spec/blog/index.rst:470 +msgid "Article" +msgstr "Стаття" + +#: ../../src/spec/blog/index.rst:129 +msgid "Article requires title (255 characters or fewer)." +msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." + +#: ../../src/spec/blog/index.rst:130 +msgid "Article requires content (at least 255 characters)." +msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." + +#: ../../src/spec/blog/index.rst:131 +msgid "" +"Creation date should be autogenerated at article creation, and would never " +"be updated." +msgstr "" +"Дата створення буде автоматично генеруватися при створенні статті і не буде " +"оновлюватися пізніше." + +#: ../../src/spec/blog/index.rst:133 +msgid "Updated date will be update at each article save." +msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." + +#: ../../src/spec/blog/index.rst:136 ../../src/spec/blog/index.rst:463 +msgid "Article comment" +msgstr "Коментар до статті" + +#: ../../src/spec/blog/index.rst:137 +msgid "Comment requires creation date (autogenerated)." +msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." + +#: ../../src/spec/blog/index.rst:138 +msgid "Comment requires message text." +msgstr "Коментар вимагає наявності тексту повідомлення." + +#: ../../src/spec/blog/index.rst:141 +msgid "Relationships" +msgstr "Відносини" + +#: ../../src/spec/blog/index.rst:143 +msgid "" +"Standard Django user model **will be** used for now. To apply model " +"reference pass ``\"auth.User\"`` as related model. Users can be created via " +"admin page. You can also refer the same model as shown below:" +msgstr "" +"Стандартна модель користувача Django **буде** використовуватися наразі. Для " +"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " +"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " +"також можете посилатися на ту саму модель, як показано нижче:" + +#: ../../src/spec/blog/index.rst:156 +msgid "``article`` and ``topics`` have *many-to-many* relationship." +msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." + +#: ../../src/spec/blog/index.rst:157 +msgid "" +"``article`` and ``user`` have *one-to-many* relationship. A article can have " +"**only one** author, but users can create as many articles as they want." +msgstr "" +"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " +"бути **лише один** автор, але користувачі можуть створювати стільки статей, " +"скільки їм потрібно." + +#: ../../src/spec/blog/index.rst:160 +msgid "" +"``article`` and ``comment`` have *one-to-many* relationship. A article may " +"be a container for many comments, but a comment is related to a single " +"article." +msgstr "" +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." + +#: ../../src/spec/blog/index.rst:163 +msgid "" +"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " +"*article - user* relationship." +msgstr "" +"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " +"відношення *стаття - користувач*." + +#: ../../src/spec/blog/index.rst:165 +msgid "" +"``topic`` and ``user`` use *many-to-many* relationship. A single user can " +"prefer none or as many topics as needed and vice versa. This relationship " +"represents topics preferred by a certain blog user. Also this provides an " +"additional option to mark some of preferred topics with a **notify** flag, " +"to receive newsletters about specified topics updates. The difference " +"between *prefer* and *notify* is that *preferred* topics affect the articles " +"list for a user, and *notify* is responsible for newsletters for the user." +msgstr "" +"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " +"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " +"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " +"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " +"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " +"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " +"список статей для користувача, а *notify* відповідає за розсилку новин для " +"користувача." + +#: ../../src/spec/blog/index.rst:176 +msgid "UML diagram" +msgstr "UML діаграми" + +#: ../../src/spec/blog/index.rst:181 +msgid "Challenge: ORM" +msgstr "Завдання: ORM" + +#: ../../src/spec/blog/index.rst:183 +msgid "" +"Update existing views to represent entities that are actually stored inside " +"the project's database." +msgstr "" +"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " +"в базі даних проекту." + +#: ../../src/spec/blog/index.rst:186 +msgid "``/``: should represent a list of existing articles." +msgstr "``/``: повинен представляти список існуючих статей." + +#: ../../src/spec/blog/index.rst:187 +msgid "``/
    /``: should represent a single existing article." +msgstr "``/
    /``: повинен представляти окрему існуючу статтю." + +#: ../../src/spec/blog/index.rst:188 +msgid "Detail view should obtain a list of article related comments." +msgstr "" +"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." + +#: ../../src/spec/blog/index.rst:189 +msgid "" +"``/profile//``: should contain information about user and a " +"list of articles authored by this user." +msgstr "" +"``/profile//``: повинен містити інформацію про користувача та " +"список статей, написаних цим користувачем." + +#: ../../src/spec/blog/index.rst:191 +msgid "" +"All views related to a single entity (*detail*, *update*, *delete*, " +"*profile*) should raise ``Http404`` in case entity could not be fetched." +msgstr "" +"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " +"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " +"не вдалося отримати." + +#: ../../src/spec/blog/index.rst:196 +msgid "" +"It's common to store dedicated functions/classes that supports some specific " +"business logic in a separate module called ``services.py`` or ``utils.py`` " +"within an application directory." +msgstr "" +"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " +"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." +"py`` всередині директорії додатку." + +#: ../../src/spec/blog/index.rst:203 +msgid "" +"Create a service to fetch articles, ordered by a specified user preferences. " +"This means, topics preferred by a user affects articles orders. Queryset " +"should be ordered in way, to have articles with most corresponding topics at " +"the begging." +msgstr "" +"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " +"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " +"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " +"початку видачі." + +#: ../../src/spec/blog/index.rst:209 +msgid "Challenge: Templates" +msgstr "Завдання: Шаблони" + +#: ../../src/spec/blog/index.rst:212 +msgid "Helpful link: `Bootstrap template`_" +msgstr "Корисне посилання: `Bootstrap template`_" + +#: ../../src/spec/blog/index.rst:215 +msgid "Links related to user data **may be** placeholders for now." +msgstr "" +"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " +"наразі." + +#: ../../src/spec/blog/index.rst:219 +msgid "**All** templates should be inherited from the ``base.html`` template." +msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." + +#: ../../src/spec/blog/index.rst:220 +msgid "" +"Each page has a descriptive title HTML tag, which included ``| Blog`` " +"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." +msgstr "" +"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " +"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." + +#: ../../src/spec/blog/index.rst:222 +msgid "Each page should contain a link to homepage (``/`` URL route)." +msgstr "" +"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" +"``)." + +#: ../../src/spec/blog/index.rst:223 +msgid "" +"Each page contains a list of registered topics. Each view of this kind " +"filters only articles of a relevant topic. This should be implemented with a " +"custom template context processor." +msgstr "" +"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " +"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " +"власного обробника контексту шаблону (template context processor)." + +#: ../../src/spec/blog/index.rst:226 +msgid "Replace content block for *about* page with some static content." +msgstr "" +"Замініть блок вмісту (content block) для сторінки *about* на деякий " +"статичний вміст." + +#: ../../src/spec/blog/index.rst:227 +msgid "" +"Application-level templates should be located within appropriate " +"applications." +msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." + +#: ../../src/spec/blog/index.rst:233 +msgid "" +"Each page should contain a list of links to archive views for the last year." +msgstr "" +"Кожна сторінка має містити список посилань на перегляди архіву за останній " +"рік." + +#: ../../src/spec/blog/index.rst:235 +msgid "Each page should contain an inclusion-block(s) with following links:" +msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" + +#: ../../src/spec/blog/index.rst:237 +msgid "``/registration/``: new user registration form" +msgstr "``/register/``: форма реєстрації нового користувача" + +#: ../../src/spec/blog/index.rst:238 +msgid "``/login/``: user login form" +msgstr "``/login/``: форма логіна користувача" + +#: ../../src/spec/blog/index.rst:239 +msgid "``/create/``: article creation page" +msgstr "``/create/``: форма створення статті" + +#: ../../src/spec/blog/index.rst:242 +msgid "Articles list" +msgstr "Список статей" + +#: ../../src/spec/blog/index.rst:243 +msgid "Main page contains a list of published articles." +msgstr "Головна сторінка містить список опублікованих статей." + +#: ../../src/spec/blog/index.rst:244 +msgid "Each article entity is rendered using a custom template tag." +msgstr "" +"Кожен елемент статті відображається за допомогою власного шаблонного тегу." + +#: ../../src/spec/blog/index.rst:245 +msgid "``article`` template tag renders information about a article object:" +msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" + +#: ../../src/spec/blog/index.rst:247 +msgid "article title" +msgstr "заголовок статті" + +#: ../../src/spec/blog/index.rst:248 +msgid "article content (trimmed to ~50 characters)" +msgstr "зміст статті (обрізаний до ~50 символів)" + +#: ../../src/spec/blog/index.rst:249 +msgid "article creation date" +msgstr "дата створення статті" + +#: ../../src/spec/blog/index.rst:250 +msgid "related topics (3 topics or fewer)" +msgstr "пов'язані теми (3 або менше)" + +#: ../../src/spec/blog/index.rst:251 +msgid "number of related comments" +msgstr "кількість коментарів до статті" + +#: ../../src/spec/blog/index.rst:258 +msgid "Article details" +msgstr "Деталі статті" + +#: ../../src/spec/blog/index.rst:260 +msgid "Article update and deletion views **would not** affect data for now." +msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." + +#: ../../src/spec/blog/index.rst:262 +msgid "" +"A article detail page contains links to **update** or **delete** current " +"article." +msgstr "" +"На сторінці деталей статті мають бути посилання на **оновлення** або " +"**видалення** поточної статті." + +#: ../../src/spec/blog/index.rst:264 +msgid "Page provides information about article:" +msgstr "Сторінка надає інформацію про статтю:" + +#: ../../src/spec/blog/index.rst:266 +msgid "Article title" +msgstr "Заголовок статті" + +#: ../../src/spec/blog/index.rst:267 +msgid "Creation date" +msgstr "Дата створення" + +#: ../../src/spec/blog/index.rst:268 ../../src/spec/blog/index.rst:275 +msgid "Author name" +msgstr "Ім'я автора" + +#: ../../src/spec/blog/index.rst:269 +msgid "Related topics" +msgstr "Пов'язані теми" + +#: ../../src/spec/blog/index.rst:270 +msgid "Article content" +msgstr "Вміст статті" + +#: ../../src/spec/blog/index.rst:272 +msgid "Page contains a list of related comments." +msgstr "Сторінка містить список пов'язаних коментарів." + +#: ../../src/spec/blog/index.rst:273 +msgid "Each comment contains:" +msgstr "Кожен коментар містить:" + +#: ../../src/spec/blog/index.rst:276 +msgid "Comment creation time" +msgstr "Час створення коментаря" + +#: ../../src/spec/blog/index.rst:277 +msgid "Comment message" +msgstr "Текст комментаря" + +#: ../../src/spec/blog/index.rst:280 +msgid "Profile page" +msgstr "Строніка профілю" + +#: ../../src/spec/blog/index.rst:281 +msgid "Author page contains information about author:" +msgstr "Сторінка автора містить інформацію про автора:" + +#: ../../src/spec/blog/index.rst:283 +msgid "First name" +msgstr "Ім'я" + +#: ../../src/spec/blog/index.rst:284 +msgid "Last name" +msgstr "Прізвище" + +#: ../../src/spec/blog/index.rst:286 +msgid "Add more information, if needed." +msgstr "Додайте більше інформації за бажанням." + +#: ../../src/spec/blog/index.rst:288 +msgid "Author page contains a list of articles created by this author." +msgstr "Сторінка автора містить список статей, створених цим автором." + +#: ../../src/spec/blog/index.rst:289 +msgid "" +"Author page contains buttons/links to change user data and password or " +"deactivate a user's account." +msgstr "" +"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " +"деактивації облікового запису користувача." + +#: ../../src/spec/blog/index.rst:293 +msgid "Forms" +msgstr "Форми" + +#: ../../src/spec/blog/index.rst:295 +msgid "" +"There is **no need** to add actual forms now. They will be generated by " +"Django. This section describes the final view of these pages. It's ok just " +"to create a dedicated templates for future use." +msgstr "" +"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " +"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " +"використання достатньо створити окремі шаблони." + +#: ../../src/spec/blog/index.rst:299 +msgid "" +"``/register/`` page contains a new user registration form. It should take " +"inputs from the user:" +msgstr "" +"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " +"повинна отримувати введені дані від користувача:" + +#: ../../src/spec/blog/index.rst:302 ../../src/spec/blog/index.rst:310 +msgid "username" +msgstr "username" + +#: ../../src/spec/blog/index.rst:303 +msgid "email" +msgstr "email" + +#: ../../src/spec/blog/index.rst:304 ../../src/spec/blog/index.rst:311 +msgid "password" +msgstr "password" + +#: ../../src/spec/blog/index.rst:305 ../../src/spec/blog/index.rst:324 +msgid "confirm password" +msgstr "confirm password" + +#: ../../src/spec/blog/index.rst:307 +msgid "" +"``/login/`` page contains a user login form. It should take the inputs from " +"the user:" +msgstr "" +"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " +"отримувати введені дані від користувача:" + +#: ../../src/spec/blog/index.rst:313 +msgid "" +"``/create/`` and ``/
    /update/`` pages contain a form to collect a " +"article's data:" +msgstr "" +"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " +"даних статті:" + +#: ../../src/spec/blog/index.rst:316 +msgid "title" +msgstr "title" + +#: ../../src/spec/blog/index.rst:317 +msgid "relevant topics" +msgstr "відповідні теми" + +#: ../../src/spec/blog/index.rst:318 +msgid "content" +msgstr "content" + +#: ../../src/spec/blog/index.rst:320 +msgid "``/
    /delete`` page contains a simple delete confirmation form." +msgstr "" +"Сторінка ``/
    /delete`` містить просту форму для підтвердження " +"видалення." + +#: ../../src/spec/blog/index.rst:321 +msgid "Change password form has two fields:" +msgstr "Форма зміни пароля має два поля:" + +#: ../../src/spec/blog/index.rst:323 +msgid "new password" +msgstr "new password" + +#: ../../src/spec/blog/index.rst:326 +msgid "" +"Change user's data form collects all information, that can be changed, e.g. " +"``username``, ``first name``, ``last name`` etc." +msgstr "" +"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " +"наприклад, ``username``, ``first name``, ``last name`` та інше." + +#: ../../src/spec/blog/index.rst:328 +msgid "" +"User preferences page contains a list of available topics. User can mark " +"some topics as preferred. Also for preferred topics an option to *subscribe* " +"for the newsletters becomes available." +msgstr "" +"Сторінка налаштувань користувача містить список доступних тем. Користувач " +"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " +"тем стає доступною опція *підписки* на розсилку новинних листів." + +#: ../../src/spec/blog/index.rst:333 +msgid "Challenge: Articles' slugs" +msgstr "Виклик: Slug-и статей" + +#: ../../src/spec/blog/index.rst:336 +msgid "This is an optional challenge in addition to:" +msgstr "Це додатковий виклик у додаток до:" + +#: ../../src/spec/blog/index.rst:338 +msgid "`Challenge: Functional views`_" +msgstr "`Challenge: Functional views`_" + +#: ../../src/spec/blog/index.rst:339 +msgid "`Challenge: Templates`_" +msgstr "`Challenge: Templates`_" + +#: ../../src/spec/blog/index.rst:340 +msgid "`Challenge: Data models`_" +msgstr "`Challenge: Data models`_" + +#: ../../src/spec/blog/index.rst:341 +msgid "`Challenge: ORM`_" +msgstr "`Challenge: ORM`_" + +#: ../../src/spec/blog/index.rst:343 +msgid "Update ``Article`` model with ``slug`` field. The slug value is:" +msgstr "" +"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" + +#: ../../src/spec/blog/index.rst:345 +msgid "required for each article" +msgstr "обов'язкове для кожної статті" + +#: ../../src/spec/blog/index.rst:346 +msgid "unique for each article" +msgstr "унікальне для кожної статті" + +#: ../../src/spec/blog/index.rst:348 +msgid "Create a data migration to provide slugs for existing articles." +msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." + +#: ../../src/spec/blog/index.rst:349 +msgid "" +"``slug`` should be auto-generated on article save. The pattern is ``article." +"title-article.created_date``, e.g. \"Sample article\" created at " +"\"03/24/2023\" should receive slug: ``sample-article-2023-03-24``." +msgstr "" +"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " +"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " +"наприклад, стаття з назвою \"Sample article\", створена \"24/03/2023\", " +"отримає slug: ``sample-article-2023-03-24``." + +#: ../../src/spec/blog/index.rst:353 +msgid "Update detail view URL path with article slug as dynamic portion." +msgstr "" +"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " +"якою буде slug статті." + +#: ../../src/spec/blog/index.rst:356 +msgid "Challenge: Auth forms" +msgstr "Завдання: форми авторизації" + +#: ../../src/spec/blog/index.rst:358 +msgid "Create form for new users registration with required fields:" +msgstr "" +"Створити форму для реєстрації нових користувачів із обов'язковими полями:" + +#: ../../src/spec/blog/index.rst:360 +msgid "``username``" +msgstr "``username``" + +#: ../../src/spec/blog/index.rst:361 +msgid "``email``" +msgstr "``email``" + +#: ../../src/spec/blog/index.rst:362 +msgid "``password``" +msgstr "``password``" + +#: ../../src/spec/blog/index.rst:363 +msgid "``confirm password``" +msgstr "``confirm password``" + +#: ../../src/spec/blog/index.rst:365 +msgid "``username`` value should be validated against existing values." +msgstr "" +"Значення ``username`` повинно перевірятися на відповідність існуючим " +"значенням." + +#: ../../src/spec/blog/index.rst:366 +msgid "``password`` and ``confirm password`` values should match." +msgstr "Значення ``password`` і ``confirm password`` мають збігатися." + +#: ../../src/spec/blog/index.rst:367 +msgid "Create form for existing users login." +msgstr "Створити форму для входу існуючих користувачів." + +#: ../../src/spec/blog/index.rst:368 +msgid "Validations errors are to be rendered on the template." +msgstr "Помилки перевірки повинні відображатися на шаблоні." + +#: ../../src/spec/blog/index.rst:371 +msgid "Challenge: Authentication" +msgstr "Завдання: Автентифікація" + +#: ../../src/spec/blog/index.rst:373 +msgid "" +"For anonymous users ``/register/`` and ``/login/`` links should be visible " +"in navbar." +msgstr "" +"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " +"видимими на панелі навігації." + +#: ../../src/spec/blog/index.rst:375 +msgid "" +"For authenticated users ``/logout/`` and ``/create/`` links should be " +"visible in navbar." +msgstr "" +"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " +"мають бути видимими на панелі навігації." + +#: ../../src/spec/blog/index.rst:377 +msgid "" +"If authenticated user is admin or stuff they should see a link to admin page." +msgstr "" +"Якщо автентифікований користувач є адміністратором або іншим, він має " +"побачити посилання на сторінку адміністратора." + +#: ../../src/spec/blog/index.rst:379 +msgid "" +"``/register/``: Users should provide all required information about them: " +"desired username and email. Name data (both first and last) is optional. " +"After user creation they should be redirected to login page to perform " +"authentication process. Invalid form should provide information about " +"error(s)." +msgstr "" +"``/register/``: користувачі повинні надати всю необхідну інформацію про " +"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " +"прізвище) необов'язкові. Після створення користувача вони повинні бути " +"перенаправлені на сторінку входу для виконання процесу автентифікації. " +"Недійсна форма повинна надавати інформацію про помилку(и)." + +#: ../../src/spec/blog/index.rst:384 +msgid "" +"``/login/``: Users should provide their credentials to login. In case login " +"is successful they should be redirected to their profile (if no ``?" +"next=url`` query string available)." +msgstr "" +"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " +"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " +"немає рядка запиту ``?next=url``)." + +#: ../../src/spec/blog/index.rst:387 +msgid "" +"``/create/``: Only authenticated users should be able to visit this page. In " +"case anonymous user is trying to request this view they should be redirected " +"to the login view first, and after successful authentication get back to " +"article creation. Then a article is created, it should be authored by the " +"currently authenticated user." +msgstr "" +"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " +"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " +"представлення, його повинно перенаправити спочатку на сторінку входу, а " +"після успішної аутентифікації повернути на сторінку створення статті. При " +"створенні статті вона повинна мати автором поточного аутентифікованого " +"користувача." + +#: ../../src/spec/blog/index.rst:392 +msgid "" +"``/
    /comment/``: Currently authenticated user should be referenced " +"as a comment's author." +msgstr "" +"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " +"повинна бути зазначена його ідентифікація як автора." + +#: ../../src/spec/blog/index.rst:394 +msgid "" +"Articles may be modified or deleted only by their authors from the detail " +"article page. However, admins can still performs articles actions from the " +"admin page." +msgstr "" +"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " +"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " +"адміністративну сторінку." + +#: ../../src/spec/blog/index.rst:397 +msgid "User related paths are restricted for non-authorized users." +msgstr "" +"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " +"користувачів." + +#: ../../src/spec/blog/index.rst:399 +msgid "``/set-password/``" +msgstr "``/set-password/``" + +#: ../../src/spec/blog/index.rst:400 +msgid "``/set-userdata/``" +msgstr "``/set-userdata/``" + +#: ../../src/spec/blog/index.rst:402 +msgid "" +"``POST`` request ``/deactivate/`` should mark current authenticated user as " +"*deleted* and log them user." +msgstr "" +"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " +"аутентифікованого користувача як *видаленого* і виходити з системи для цього " +"користувача." + +#: ../../src/spec/blog/index.rst:404 +msgid "" +"Authenticated users should be able to adjust their preferred topics lists." +msgstr "" +"Авторизовані користувачі повинні мати можливість налаштовувати свої списки " +"обраних тем." + +#: ../../src/spec/blog/index.rst:405 +msgid "" +"Authenticated users should be able to **subscribe** or **unsubscribe** for a " +"selected topic." +msgstr "" +"Авторизовані користувачі повинні мати можливість **підписатися** або " +"**відписатися** на обрану тему." + +#: ../../src/spec/blog/index.rst:411 +msgid "" +"Adjust the order of article list according to authenticated user " +"preferences. For anonymous users keep default ordering." +msgstr "" +"Призначте зміну порядку списку статей відповідно до вподобань " +"аутентифікованого користувача. Для анонімних користувачів залиште типове " +"сортування за замовчуванням." + +#: ../../src/spec/blog/index.rst:413 +msgid "" +"Implement account reactivation behavior. The exact workflow does not mater. " +"The sample scenario is to collect email for the user and check it for " +"existing in the database. After that create a request for admin to activate " +"an account and send a confirmation email, when all is done." +msgstr "" +"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " +"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " +"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " +"цього створіть запит для адміністратора на активацію облікового запису та " +"надішліть підтверджувальний лист електронною поштою, коли все буде готово." + +#: ../../src/spec/blog/index.rst:419 +msgid "Challenge: Article related forms" +msgstr "Виклик: Форми пов'язані зі статтями" + +#: ../../src/spec/blog/index.rst:421 +msgid "" +"Implement a article form. This form will be used to create new articles and " +"to update existing ones." +msgstr "" +"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " +"статей та оновлення існуючих." + +#: ../../src/spec/blog/index.rst:423 +msgid "Each created article should have at least one related topic." +msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." + +#: ../../src/spec/blog/index.rst:424 +msgid "Implement a comment form to gather a comment from a user." +msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." + +#: ../../src/spec/blog/index.rst:425 +msgid "" +"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " +"moment." +msgstr "" +"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" +"``." + +#: ../../src/spec/blog/index.rst:427 +msgid "Implement functionality:" +msgstr "Реалізуйте функціональність:" + +#: ../../src/spec/blog/index.rst:429 +msgid "article creation" +msgstr "створення статті" + +#: ../../src/spec/blog/index.rst:430 +msgid "article update" +msgstr "оновлення статті" + +#: ../../src/spec/blog/index.rst:431 +msgid "article comment (create a related comment)" +msgstr "коментування статті (створення коментаря)" + +#: ../../src/spec/blog/index.rst:432 +msgid "article deletion" +msgstr "видалення статті" + +#: ../../src/spec/blog/index.rst:434 +msgid "Only authenticated users can create articles." +msgstr "Лише аутентифіковані користувачі можуть створювати статі." + +#: ../../src/spec/blog/index.rst:435 +msgid "Article can be edited only by its author." +msgstr "Стаття може редагуватись лише її автором." + +#: ../../src/spec/blog/index.rst:436 +msgid "Article can be deleted only by its author." +msgstr "Стаття може видалятись лише її автором." + +#: ../../src/spec/blog/index.rst:437 +msgid "Only authenticated users can comment articles." +msgstr "Лише аутентифіковані користувачі можуть коментувати статті." + +#: ../../src/spec/blog/index.rst:444 +msgid "Challenge: Class-Based Views" +msgstr "Завдання: Class-Based Views" + +#: ../../src/spec/blog/index.rst:446 +msgid "Replace **all** existing views via ``CBV``." +msgstr "Замінити **всі** існуючі перегляди через ``CBV``." + +#: ../../src/spec/blog/index.rst:447 +msgid "Existing functionality should not be corrupted." +msgstr "Існуюча функціональність не повинна бути пошкоджена." + +#: ../../src/spec/blog/index.rst:450 +msgid "It's ok to use built-in Django CBV if needed." +msgstr "" +"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " +"(CBV)." + +#: ../../src/spec/blog/index.rst:453 +msgid "Challenge: Serializers" +msgstr "Завдання: Серіалізатори" + +#: ../../src/spec/blog/index.rst:457 +msgid "" +"Topic serializer is for read-only purposes only. Topics can be created via " +"admin page only." +msgstr "" +"Серіалізатор для теми призначений лише для операцій читання (read-only). " +"Теми можна створювати лише через адміністративну сторінку." + +#: ../../src/spec/blog/index.rst:459 +msgid "" +"Serialized data should contain all available data, e.g. ``pk``, ``title``, " +"``description``." +msgstr "" +"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " +"``pk``, ``title``, ``description``." + +#: ../../src/spec/blog/index.rst:464 +msgid "" +"article comment serializer can perform both reading and writing operations. " +"But it can't be used to *update* or *delete* comment." +msgstr "" +"серіалізатор коментаря статті може виконувати як операції читання, так і " +"операції запису. Проте він не може використовуватися для оновлення або " +"видалення коментаря." + +#: ../../src/spec/blog/index.rst:466 +msgid "" +"Random, or pre-defined user may be used as comment's author for now. This " +"will be fixed in the future." +msgstr "" +"Наразі можна використовувати випадкового або попередньо визначеного " +"користувача як автора коментаря. Це буде виправлено у майбутньому." + +#: ../../src/spec/blog/index.rst:471 +msgid "" +"article serializer provides full access to articles. All operations are " +"available: list, retrieve, create, update and destroy." +msgstr "" +"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " +"отримання списку, отримання окремої статті, створення нової статті, " +"оновлення та видалення." + +#: ../../src/spec/blog/index.rst:475 +msgid "User" +msgstr "Користувач" + +#: ../../src/spec/blog/index.rst:476 +msgid "" +"User serializer provides full access to site users data. All operations are " +"available for now: list, retrieve, create, update and destroy. This behavior " +"will be fixed in the future, to prevent unauthorized data modifications." +msgstr "" +"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " +"Усі операції доступні наразі: отримання списку користувачів, отримання " +"окремого користувача, створення нового користувача, оновлення та видалення. " +"Однак, ця поведінка буде виправлена у майбутньому для запобігання " +"несанкціонованим змінам даних." + +#: ../../src/spec/blog/index.rst:482 +msgid "Challenge: API views" +msgstr "Завдання: API views" + +#: ../../src/spec/blog/index.rst:484 +msgid "All blog-site functionality are to be mirrored via REST API." +msgstr "" +"Вся функціональність сайту повинна бути відображена за допомогою REST API." + +#: ../../src/spec/blog/index.rst:487 +msgid "" +"It's ok to pass *pre-defined* user as argument in request's body. This will " +"be fixed in the next challenge." +msgstr "" +"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " +"запиту. Це буде виправлено у наступному розділі." + +#: ../../src/spec/blog/index.rst:491 +msgid "Challenge: Authentication and Permissions" +msgstr "Завдання: Автентифікація та Дозволи" + +#: ../../src/spec/blog/index.rst:493 +msgid "Implement authentication system for REST API." +msgstr "Реалізуйте систему аутентифікації для REST API." + +#: ../../src/spec/blog/index.rst:495 +msgid "For non-authenticated users it is possible to create a new account" +msgstr "" +"Для неаутентифікованих користувачів можлива створення нового облікового " +"запису" + +#: ../../src/spec/blog/index.rst:496 +msgid "" +"For non-authenticated users it is possible to obtain authentication data." +msgstr "" +"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." + +#: ../../src/spec/blog/index.rst:499 +msgid "" +"Access to user data is restricted. Authorized users can manipulate only " +"their own data (e.g. ``retrieve``, ``update``)." +msgstr "" +"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " +"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " +"``update``)." + +#: ../../src/spec/blog/index.rst:501 +msgid "" +"Admins can retrieve all users data (``list``), but can't change them via " +"REST API. However, it is still possible via admin page." +msgstr "" +"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " +"можуть змінювати їх через REST API. Однак це все ще можливо через " +"адміністративну сторінку." + +#: ../../src/spec/blog/index.rst:503 +msgid "" +"Authorized users can ``create`` articles or ``update`` and ``delete`` " +"articles created by them." +msgstr "" +"Авторизовані користувачі можуть ``create`` статті або ``update`` та " +"``delete`` статті, створені ними." + +#: ../../src/spec/blog/index.rst:505 +msgid "Authorized users can add comments to a specified article." +msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." + +#: ../../src/spec/blog/index.rst:506 +msgid "Authorized users can adjust their topics preferences." +msgstr "" +"Авторизовані користувачі можуть налаштовувати свої уподобання щодо тем." diff --git a/src/_locales/uk/LC_MESSAGES/spec/libms/index.po b/src/_locales/uk/LC_MESSAGES/spec/libms/index.po new file mode 100644 index 000000000..2baecf838 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/spec/libms/index.po @@ -0,0 +1,1187 @@ +# Copyright (C) 2023, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# SERHII HORODILOV +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-05 19:49+0300\n" +"PO-Revision-Date: 2023-10-05 20:06+0300\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: ua \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Generated-By: Babel 2.13.0\n" +"X-Generator: Poedit 3.4\n" + +#: ../../src/spec/libms/index.rst:3 +msgid "Library Management System" +msgstr "Система Керування Бібліотекою" + +#: ../../src/spec/libms/index.rst:5 +msgid "" +"The Library Management System is a Django-based web application that offers " +"a digital platform for managing and interacting with a library's collection. " +"It streamlines the processes of book lending, returns, and inventory " +"management, while ensuring easy access for users and librarians alike. " +"Through this system, users can search for available books, place borrowing " +"requests, and manage their borrowed items. Librarians, on the other hand, " +"oversee the addition, update, and removal of book records, and can approve " +"or decline borrowing requests. The system also supports diverse user roles, " +"from regular members to staff and administrators, each with distinct " +"capabilities." +msgstr "" +"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " +"пропонує цифрову платформу для управління та взаємодії з колекцією " +"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " +"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " +"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " +"книги, робити запити на позику та керувати позиченими предметами. " +"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " +"записів книг та можуть схвалювати або відхиляти запити на позику. Система " +"також підтримує різноманітні ролі користувачів, від звичайних членів до " +"персоналу та адміністраторів, кожен з яких має відмінні можливості." + +#: ../../src/spec/libms/index.rst:15 +msgid "" +"A well-structured user interface ensures that all functionalities are easily " +"accessible, making the library management process seamless and efficient. " +"This project aims to merge traditional library functions with modern " +"technological innovations, promoting efficiency and an enhanced user " +"experience." +msgstr "" +"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " +"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " +"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " +"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " +"покращенню користувацького досвіду." + +#: ../../src/spec/libms/index.rst:22 +msgid "User roles" +msgstr "Ролі користувачів" + +#: ../../src/spec/libms/index.rst:25 +msgid "" +"It is essential for developers to consider security aspects when " +"implementing these roles to ensure that users cannot perform actions outside " +"their designated role's scope." +msgstr "" +"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " +"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " +"рамки призначеної їм ролі." + +#: ../../src/spec/libms/index.rst:30 +msgid "Admins" +msgstr "Адміністратори" + +#: ../../src/spec/libms/index.rst:32 +msgid "" +"Superusers have full control over the entire system. They can access and " +"manage all functionalities provided by the Django admin site." +msgstr "" +"Адміністратори мають повний контроль над усією системою. Вони можуть " +"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " +"керувати ними." + +#: ../../src/spec/libms/index.rst:35 +msgid "Admins can create, modify, or delete any record within the application." +msgstr "" +"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " +"додатку." + +#: ../../src/spec/libms/index.rst:38 ../../src/spec/libms/index.rst:49 +#: ../../src/spec/libms/index.rst:68 ../../src/spec/libms/index.rst:82 +msgid "Capabilities" +msgstr "Можливості" + +#: ../../src/spec/libms/index.rst:39 +msgid "Access Django admin site" +msgstr "Доступ до адміністративного сайту Django" + +#: ../../src/spec/libms/index.rst:42 +msgid "Librarians" +msgstr "Бібліотекарі" + +#: ../../src/spec/libms/index.rst:44 +msgid "" +"Staff personnel are in charge of day-to-day operations within the library. " +"They can add new books to the library's collection, manage existing books' " +"details, and accept or decline borrow requests from regular users." +msgstr "" +"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " +"можуть додавати нові книги до бібліотечної колекції, керувати даними про " +"наявні книги, а також приймати або відхиляти запити від постійних " +"користувачів." + +#: ../../src/spec/libms/index.rst:50 +msgid "Management of the library catalogue" +msgstr "Управління бібліотечним каталогом" + +#: ../../src/spec/libms/index.rst:52 +msgid "Add, modify or delete authors" +msgstr "Додавати, змінювати або видаляти авторів" + +#: ../../src/spec/libms/index.rst:53 +msgid "Add, modify or delete genres" +msgstr "Додавати, змінювати або видаляти жанри" + +#: ../../src/spec/libms/index.rst:54 +msgid "Add, modify or delete books' details" +msgstr "Додавати, змінювати або видаляти дані про книги" + +#: ../../src/spec/libms/index.rst:56 +msgid "Review borrow requests from regular users" +msgstr "Переглядати запити на позичення від користувачів" + +#: ../../src/spec/libms/index.rst:57 +msgid "Accept or decline borrow requests" +msgstr "Приймати або відхиляти запити на позичення" + +#: ../../src/spec/libms/index.rst:58 +msgid "Register returned books and update their status" +msgstr "Реєструвати повернені книги та оновлювати їх статус" + +#: ../../src/spec/libms/index.rst:61 +msgid "Regular" +msgstr "Звичайний" + +#: ../../src/spec/libms/index.rst:63 +msgid "" +"Regular registered users are the members of the library. They can search " +"books, request to borrow them, and are responsible for returning borrowed " +"books on time." +msgstr "" +"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " +"книги, запитувати їх, а також несуть відповідальність за своєчасне " +"повернення позичених книг." + +#: ../../src/spec/libms/index.rst:69 ../../src/spec/libms/index.rst:83 +msgid "Browse the books' catalogue" +msgstr "Переглядати каталог книг" + +#: ../../src/spec/libms/index.rst:70 ../../src/spec/libms/index.rst:84 +msgid "View details of a book" +msgstr "Переглядати деталі книги" + +#: ../../src/spec/libms/index.rst:71 ../../src/spec/libms/index.rst:85 +msgid "Search books" +msgstr "Шукати книги" + +#: ../../src/spec/libms/index.rst:72 +msgid "Request to borrow available books" +msgstr "Робити запит на позичення доступних книжок" + +#: ../../src/spec/libms/index.rst:73 +msgid "Check due date for returned books" +msgstr "Перевіряти термін повернення запозичених книжок" + +#: ../../src/spec/libms/index.rst:74 +msgid "Return borrowed books" +msgstr "Повертати запозичені книги" + +#: ../../src/spec/libms/index.rst:77 +msgid "Anonymous" +msgstr "Анонімні" + +#: ../../src/spec/libms/index.rst:79 +msgid "Anonymous users are visitors who haven't logged into the system." +msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." + +#: ../../src/spec/libms/index.rst:86 +msgid "Access to the registration or login pages" +msgstr "Доступ до сторінок реєстрації або входу" + +#: ../../src/spec/libms/index.rst:90 +msgid "Models" +msgstr "Моделі" + +#: ../../src/spec/libms/index.rst:93 +msgid "Author model" +msgstr "Модель авторів" + +#: ../../src/spec/libms/index.rst:95 +msgid "" +"The ``Author`` model captures the details of the person, or group " +"responsible for creating the book." +msgstr "" +"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " +"за створення книги." + +#: ../../src/spec/libms/index.rst:99 ../../src/spec/libms/index.rst:116 +#: ../../src/spec/libms/index.rst:128 ../../src/spec/libms/index.rst:170 +msgid "Attributes" +msgstr "Атрибути" + +#: ../../src/spec/libms/index.rst +msgid "Name" +msgstr "Name" + +#: ../../src/spec/libms/index.rst:102 +msgid "The full name of the author. This should be limited to 255 characters." +msgstr "Повне ім'я автора. Не більше 255 символів." + +#: ../../src/spec/libms/index.rst +msgid "Bio" +msgstr "Bio" + +#: ../../src/spec/libms/index.rst:105 +msgid "A brief biography or description of the author." +msgstr "Коротка біографія або опис автора." + +#: ../../src/spec/libms/index.rst:108 +msgid "Genre model" +msgstr "Модель жанра" + +#: ../../src/spec/libms/index.rst:110 +msgid "" +"The ``Genre`` model represents the category or type of content a book " +"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " +"etc. Since a book can belong to more than one category at a time, it is " +"implemented as a dedicated model." +msgstr "" +"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " +"книга, наприклад, \"Художня література\", \"Нехудожня література\", " +"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " +"категорій одночасно, вона реалізована як окрема модель." + +#: ../../src/spec/libms/index.rst:118 +msgid "The name of the genre." +msgstr "Назва жанру." + +#: ../../src/spec/libms/index.rst:121 +msgid "Book model" +msgstr "Модель книги" + +#: ../../src/spec/libms/index.rst:123 +msgid "" +"The ``Book`` model represents a physical book in the library's collection. " +"Each book record captures essential bibliographic information, as well as " +"details related to its current status in the library (e.g. available, " +"borrowed etc.)." +msgstr "" +"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " +"запис про книгу містить основну бібліографічну інформацію, а також деталі, " +"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " +"тощо)." + +#: ../../src/spec/libms/index.rst +msgid "Title" +msgstr "Title" + +#: ../../src/spec/libms/index.rst:131 +msgid "The name or title of the book (255 characters or fewer)." +msgstr "Назва книги (255 символів або менше)." + +#: ../../src/spec/libms/index.rst +msgid "Summary" +msgstr "Summary" + +#: ../../src/spec/libms/index.rst:134 +msgid "A brief description or synopsis of the book." +msgstr "Короткий опис або синопсис книги." + +#: ../../src/spec/libms/index.rst +msgid "ISBN" +msgstr "ISBN" + +#: ../../src/spec/libms/index.rst:137 +msgid "International Standard Book Number, a unique identifier for books." +msgstr "" +"International Standard Book Number, унікальний ідентифікатор для книг.." + +#: ../../src/spec/libms/index.rst +msgid "Available" +msgstr "Available" + +#: ../../src/spec/libms/index.rst:140 +msgid "" +"Current available status of the book. Either ``True`` or ``False``. Books " +"are available by default." +msgstr "" +"Поточний статус доступності книги. Або ``True``, або ``False``. За " +"замовчуванням книги доступні." + +#: ../../src/spec/libms/index.rst +msgid "Published date" +msgstr "Published date" + +#: ../../src/spec/libms/index.rst:144 +msgid "The date when the book was published." +msgstr "Дата, коли книга була опублікована." + +#: ../../src/spec/libms/index.rst +msgid "Publisher" +msgstr "Publisher" + +#: ../../src/spec/libms/index.rst:147 +msgid "" +"The entity or company responsible for the production and distribution of the " +"book." +msgstr "" +"Організація або компанія, відповідальна за виробництво та розповсюдження " +"книги." + +#: ../../src/spec/libms/index.rst +msgid "Genre(s)" +msgstr "Genre(s)" + +#: ../../src/spec/libms/index.rst:151 +msgid "" +"The category or type of content the book falls under (e.g., Fiction, Non-" +"Fiction, Science)." +msgstr "" +"Категорія або тип контенту, до якого належить книга (наприклад, художня " +"література, нон-фікшн, наукова література)." + +#: ../../src/spec/libms/index.rst +msgid "Author(s)" +msgstr "Author(s)" + +#: ../../src/spec/libms/index.rst:156 +msgid "" +"The name of the person or group responsible for creating the content of the " +"book." +msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." + +#: ../../src/spec/libms/index.rst +msgid "Borrower" +msgstr "Borrower" + +#: ../../src/spec/libms/index.rst:160 +msgid "The user who has currently borrowed the book, if applicable." +msgstr "Користувач, який наразі позичив книгу, якщо це можливо." + +#: ../../src/spec/libms/index.rst:163 +msgid "Borrow request model" +msgstr "Модель запиту на позику" + +#: ../../src/spec/libms/index.rst:165 +msgid "" +"The ``BorrowRequest`` model captures the intent of a user to borrow a " +"specific book. It tracks the status of the request, whether it's pending, " +"approved, declined, or completed." +msgstr "" +"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " +"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." + +#: ../../src/spec/libms/index.rst +msgid "Book" +msgstr "Book" + +#: ../../src/spec/libms/index.rst:173 +msgid "A reference to a book to be borrowed." +msgstr "Посилання на книгу, яку потрібно взяти." + +#: ../../src/spec/libms/index.rst:176 +msgid "A reference to a user who wants to borrow a book." +msgstr "Посилання на користувача, який хоче взяти книгу." + +#: ../../src/spec/libms/index.rst +msgid "Status" +msgstr "Status" + +#: ../../src/spec/libms/index.rst:179 +msgid "The current status of the request." +msgstr "Поточний статус заявки." + +#: ../../src/spec/libms/index.rst:181 +msgid "pending" +msgstr "pending" + +#: ../../src/spec/libms/index.rst:182 +msgid "approved" +msgstr "approved" + +#: ../../src/spec/libms/index.rst:183 +msgid "collected" +msgstr "collected" + +#: ../../src/spec/libms/index.rst:184 +msgid "complete" +msgstr "complete" + +#: ../../src/spec/libms/index.rst:185 +msgid "declined" +msgstr "declined" + +#: ../../src/spec/libms/index.rst:187 +msgid "" +"The status constants should be encapsulated within the ``BorrowRequest`` " +"model." +msgstr "" +"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." + +#: ../../src/spec/libms/index.rst +msgid "Overdue" +msgstr "Overdue" + +#: ../../src/spec/libms/index.rst:202 +msgid "A flag indicating if a borrow request was overdue." +msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." + +#: ../../src/spec/libms/index.rst +msgid "Request date" +msgstr "Request date" + +#: ../../src/spec/libms/index.rst:205 +msgid "The date the borrow request was made. This is required." +msgstr "Дата подання запиту на позику. Це обов'язкова інформація." + +#: ../../src/spec/libms/index.rst +msgid "Approval date" +msgstr "Approval date" + +#: ../../src/spec/libms/index.rst:208 +msgid "The date the request was approved, if applicable. Optional." +msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." + +#: ../../src/spec/libms/index.rst +msgid "Due date" +msgstr "Due date" + +#: ../../src/spec/libms/index.rst:211 +msgid "" +"The date by which the book should be returned. Optional, should only be set " +"if the request if approved." +msgstr "" +"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " +"у разі схвалення запиту." + +#: ../../src/spec/libms/index.rst +msgid "Complete date" +msgstr "Complete date" + +#: ../../src/spec/libms/index.rst:215 +msgid "" +"The date the book was returned and the borrowing request was completed. " +"Optional, should only be set if the request has reached the \"Complete\" " +"status." +msgstr "" +"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " +"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." + +#: ../../src/spec/libms/index.rst:220 +msgid "Relationships" +msgstr "Відносини" + +#: ../../src/spec/libms/index.rst:228 +msgid "Book to author" +msgstr "Книга до автору" + +#: ../../src/spec/libms/index.rst:230 +msgid "" +"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " +"can have **one or more** ``authors``. This establishes a **many-to-many** " +"relationship between the two entities." +msgstr "" +"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " +"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " +"**багато-до-багатьох** між цими двома сутностями." + +#: ../../src/spec/libms/index.rst:235 +msgid "Book to genre" +msgstr "Книга до жанру" + +#: ../../src/spec/libms/index.rst:237 +msgid "" +"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " +"However a ``Book`` might not belong to any genre. This relationship between " +"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " +"possibility of zero genres for a book." +msgstr "" +"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " +"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " +"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " +"можливістю нульових жанрів для книги." + +#: ../../src/spec/libms/index.rst:243 +msgid "Book to borrow request" +msgstr "Книга до запиту на позику" + +#: ../../src/spec/libms/index.rst:245 +msgid "" +"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " +"relationship." +msgstr "" +"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " +"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " +"зв'язок **багато-до-одного**." + +#: ../../src/spec/libms/index.rst:250 +msgid "User to borrow request" +msgstr "Користувач до запиту на позику" + +#: ../../src/spec/libms/index.rst:252 +msgid "" +"Each ``User`` can make multiple ``BorrowRequests``, but each " +"``BorrowRequest`` refers to only one book, forming a **many-to-one** " +"relationship." +msgstr "" +"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " +"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " +"``багато до однієї``." + +#: ../../src/spec/libms/index.rst:256 +msgid "User to book (as a borrower)" +msgstr "Користувач до книги (як запозичувач)" + +#: ../../src/spec/libms/index.rst:258 +msgid "" +"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " +"``Book`` can be borrowed by one user only. This forms a **one-to-one** " +"relationship." +msgstr "" +"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " +"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " +"відносини \"один до одного\"." + +#: ../../src/spec/libms/index.rst:264 +msgid "Views and templates" +msgstr "Подання та шаблони" + +#: ../../src/spec/libms/index.rst:267 +msgid "Admin site" +msgstr "Адмін-сайт" + +#: ../../src/spec/libms/index.rst:269 +msgid "" +"Admin site provides the full control over the entire system. Only admins are " +"permitted to use admin site. Librarians should use their dedicated views to " +"perform operations, except special cases." +msgstr "" +"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " +"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " +"повинні використовувати свої виділені подання для виконання операцій, за " +"винятком особливих випадків." + +#: ../../src/spec/libms/index.rst:275 +msgid "Authentication" +msgstr "Автентифікація" + +#: ../../src/spec/libms/index.rst:278 +msgid "Login" +msgstr "Логін" + +#: ../../src/spec/libms/index.rst:281 ../../src/spec/libms/index.rst:293 +#: ../../src/spec/libms/index.rst:324 ../../src/spec/libms/index.rst:344 +#: ../../src/spec/libms/index.rst:371 ../../src/spec/libms/index.rst:495 +#: ../../src/spec/libms/index.rst:512 +msgid "Template" +msgstr "Template" + +#: ../../src/spec/libms/index.rst:282 +msgid "" +"A form with fields for entering a username and a password, and a submit " +"button." +msgstr "" +"Форма з полями для введення імені користувача та пароля, а також кнопкою " +"\"Надіслати\"." + +#: ../../src/spec/libms/index.rst:285 ../../src/spec/libms/index.rst:303 +#: ../../src/spec/libms/index.rst:329 ../../src/spec/libms/index.rst:353 +#: ../../src/spec/libms/index.rst:390 ../../src/spec/libms/index.rst:476 +#: ../../src/spec/libms/index.rst:499 +msgid "View logic" +msgstr "View logic" + +#: ../../src/spec/libms/index.rst:286 +msgid "" +"Validate entered credentials and authenticate the user. In case of incorrect " +"credentials, display an error message." +msgstr "" +"Перевірити введені облікові дані та автентифікувати користувача. У разі " +"неправильних облікових даних вивести повідомлення про помилку." + +#: ../../src/spec/libms/index.rst:290 +msgid "Registration" +msgstr "Реєстрація" + +#: ../../src/spec/libms/index.rst:294 +msgid "A form for new user registration. **Required** fields are:" +msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" + +#: ../../src/spec/libms/index.rst:296 +msgid "username" +msgstr "username" + +#: ../../src/spec/libms/index.rst:297 +msgid "first name" +msgstr "first name" + +#: ../../src/spec/libms/index.rst:298 +msgid "last name" +msgstr "last name" + +#: ../../src/spec/libms/index.rst:299 +msgid "password" +msgstr "password" + +#: ../../src/spec/libms/index.rst:300 +msgid "confirm password" +msgstr "confirm password" + +#: ../../src/spec/libms/index.rst:304 +msgid "Upon submission, the view should validate the provided data:" +msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" + +#: ../../src/spec/libms/index.rst:306 +msgid "Check if username is already taken." +msgstr "Перевірте, чи не зайнято вже ім'я користувача." + +#: ../../src/spec/libms/index.rst:307 +msgid "Ensure that password and confirm password fields match." +msgstr "" +"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." + +#: ../../src/spec/libms/index.rst:308 +msgid "" +"Save the user's data if all validations pass. Otherwise, display appropriate " +"error messages." +msgstr "" +"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " +"відобразити відповідні повідомлення про помилки." + +#: ../../src/spec/libms/index.rst:311 +msgid "" +"When saving passwords in the database, always store them in a hashed format, " +"never in plain text." +msgstr "" +"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " +"не у вигляді простого тексту." + +#: ../../src/spec/libms/index.rst:315 +msgid "" +"Django's built-in ``User`` model and authentication system handle password " +"hashing by default, which is a big plus." +msgstr "" +"Вбудована в Django модель ``User`` та система автентифікації за " +"замовчуванням обробляє хешування паролів, що є великим плюсом." + +#: ../../src/spec/libms/index.rst:319 +msgid "Borrowing History" +msgstr "Історія запозичень" + +#: ../../src/spec/libms/index.rst:321 +msgid "This view is available only for authenticated users." +msgstr "Це подання доступне лише для авторизованих користувачів." + +#: ../../src/spec/libms/index.rst:325 +msgid "" +"Users can see the list of **all** their borrows requests, regardless of " +"approve/decline status." +msgstr "" +"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " +"від статусу схвалення/відхилення." + +#: ../../src/spec/libms/index.rst:330 +msgid "Authenticated users can see only their own borrow requests." +msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." + +#: ../../src/spec/libms/index.rst:331 +msgid "" +"Librarians and admins can access borrows requests list for any user, " +"registered in the library system." +msgstr "" +"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " +"будь-якого користувача, зареєстрованого в бібліотечній системі." + +#: ../../src/spec/libms/index.rst:335 +msgid "Library collection" +msgstr "Бібліотечний фонд" + +#: ../../src/spec/libms/index.rst:337 +msgid "" +"These views are generally available for all (including anonymous) users. The " +"functionality for authenticated users include books borrowing." +msgstr "" +"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " +"користувачів. Функціонал для аутентифікованих користувачів включає в себе " +"можливість позичати книги." + +#: ../../src/spec/libms/index.rst:341 +msgid "Books list" +msgstr "Список літератури" + +#: ../../src/spec/libms/index.rst:345 +msgid "A list (or table) of books. Each book entry should provide information:" +msgstr "" +"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " +"книгу:" + +#: ../../src/spec/libms/index.rst:347 +msgid "title" +msgstr "title" + +#: ../../src/spec/libms/index.rst:348 +msgid "author(s)" +msgstr "автор(и)" + +#: ../../src/spec/libms/index.rst:349 +msgid "summary (truncated if too long, 30 words or fewer)" +msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" + +#: ../../src/spec/libms/index.rst:350 +msgid "availability status (either **Available** or **Unavailable**)" +msgstr "статус доступності (**Доступний** або **Не доступний**)" + +#: ../../src/spec/libms/index.rst:354 +msgid "Querying the data" +msgstr "Запит даних" + +#: ../../src/spec/libms/index.rst:356 +msgid "Fetch **all** books from the database" +msgstr "Отримати **усі** книги з бази даних" + +#: ../../src/spec/libms/index.rst:358 +msgid "Checking availability status (visual mark)" +msgstr "Перевірка статусу доступності (візуальна позначка)" + +#: ../../src/spec/libms/index.rst:360 +msgid "" +"For each book, determine its availability status. Check ``Book.available`` " +"flag." +msgstr "" +"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." +"available``." + +#: ../../src/spec/libms/index.rst:364 +msgid "" +"A user can still create a borrowing request, regardless of the book " +"availability status. This is only the visual mark." +msgstr "" +"Користувач все одно може створити запит на позику, незалежно від статусу " +"доступності книги. Це лише візуальна позначка." + +#: ../../src/spec/libms/index.rst:368 +msgid "Detail view" +msgstr "Детальний перегляд" + +#: ../../src/spec/libms/index.rst:372 +msgid "" +"The detailed view of a specific book, presenting comprehensive information:" +msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" + +#: ../../src/spec/libms/index.rst:374 +msgid "**Title**: Display the book's title prominently." +msgstr "**Назва**: Покажіть назву книги на видному місці." + +#: ../../src/spec/libms/index.rst:375 +msgid "**Genre(s)**: List all associated genres (if any)." +msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." + +#: ../../src/spec/libms/index.rst:376 +msgid "**Author(s)**: List all associated authors." +msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." + +#: ../../src/spec/libms/index.rst:377 +msgid "**ISBN**: The International Standard Book Number." +msgstr "**ISBN**: Міжнародний стандартний номер книги." + +#: ../../src/spec/libms/index.rst:378 +msgid "**Published Date**: When the book was published." +msgstr "**Дата публікації**: Коли вийшла друком книга." + +#: ../../src/spec/libms/index.rst:379 +msgid "" +"**Publisher**: The name of the entity or company responsible for publishing" +msgstr "" +"**Видавець**: Назва організації або компанії, відповідальної за публікацію" + +#: ../../src/spec/libms/index.rst:380 +msgid "**Summary**: A full summary or description of the book. the book." +msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." + +#: ../../src/spec/libms/index.rst:382 +msgid "**Action Buttons** (For authenticated users only):" +msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" + +#: ../../src/spec/libms/index.rst:384 +msgid "" +"**Borrow Request Button**: If the user has no associated borrow request they " +"can create a new one." +msgstr "" +"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " +"позику, він може створити новий." + +#: ../../src/spec/libms/index.rst:386 +msgid "" +"**Gather Book Button**: If the user's borrow request for this book has been " +"approved, allow the user to confirm they've picked up the book." +msgstr "" +"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " +"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." + +#: ../../src/spec/libms/index.rst:391 +msgid "**Fetching Book Details**:" +msgstr "**Доступ до деталей книги**:" + +#: ../../src/spec/libms/index.rst:393 +msgid "" +"Use the book's identifier (usually a primary key) to fetch its details from " +"the database." +msgstr "" +"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " +"інформацію про неї з бази даних." + +#: ../../src/spec/libms/index.rst:396 +msgid "**Checking User Authentication**:" +msgstr "**Перевірка автентичності користувача**:" + +#: ../../src/spec/libms/index.rst:398 +msgid "" +"Determine if a user is authenticated. If they are, display the appropriate " +"action buttons based on the book's availability status and any existing " +"borrow requests by the user." +msgstr "" +"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " +"кнопки дій на основі статусу доступності книги та наявних запитів " +"користувача на позику." + +#: ../../src/spec/libms/index.rst:402 +msgid "**Handling Borrow Requests**:" +msgstr "**Обробка запитів на позику**:" + +#: ../../src/spec/libms/index.rst:404 +msgid "If an authenticated user clicks on the \"Borrow Request\" button:" +msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" + +#: ../../src/spec/libms/index.rst:406 +msgid "" +"Create a new borrow request in the ``BorrowRequest`` model with status " +"\"pending\"." +msgstr "" +"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " +"розгляді\"." + +#: ../../src/spec/libms/index.rst:408 +msgid "Update the book's status to \"Awaiting approval\"." +msgstr "Оновіть статус книги на \"Очікує затвердження\"." + +#: ../../src/spec/libms/index.rst:409 +msgid "" +"Redirect the user to a confirmation page or display a message indicating the " +"request has been made." +msgstr "" +"Перенаправлення користувача на сторінку підтвердження або відображення " +"повідомлення про те, що запит було зроблено." + +#: ../../src/spec/libms/index.rst:412 +msgid "**Handling Book Gathering**:" +msgstr "**Опрацювання Позики Книги**:" + +#: ../../src/spec/libms/index.rst:414 +msgid "" +"If an authenticated user has an approved borrow request and clicks the " +"\"Gather Book\" button:" +msgstr "" +"Якщо авторизований користувач має схвалений запит на позику і натискає " +"кнопку \"Зібрати книгу\":" + +#: ../../src/spec/libms/index.rst:417 +msgid "Update the book's status to \"Borrowed\"." +msgstr "Оновіть статус книги на \"Позичена\"." + +#: ../../src/spec/libms/index.rst:418 +msgid "Update the borrow request's status to \"complete\"." +msgstr "Оновіть статус запиту на позику до \"завершено\"." + +#: ../../src/spec/libms/index.rst:419 +msgid "" +"Redirect the user to a confirmation page or display a message indicating " +"they've picked up the book." +msgstr "" +"Перенаправляйте користувача на сторінку підтвердження або показуйте " +"повідомлення про те, що він забрав книгу." + +#: ../../src/spec/libms/index.rst:423 +msgid "" +"Always ensure the user's actions are authenticated and authorized. This " +"prevents unauthorized borrow requests or gathering of books. Also, consider " +"adding error handling to manage cases where the book's details cannot be " +"fetched or any other unexpected issues." +msgstr "" +"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " +"Це запобігає несанкціонованим запитам на позику або збору книг. Також " +"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " +"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." + +#: ../../src/spec/libms/index.rst:429 +msgid "Books management" +msgstr "Управління книгами" + +#: ../../src/spec/libms/index.rst:431 +msgid "These views are available only for staff (librarians and admins)." +msgstr "" +"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." + +#: ../../src/spec/libms/index.rst:434 +msgid "Authors and genres management" +msgstr "Управління авторами та жанрами" + +#: ../../src/spec/libms/index.rst:436 +msgid "" +"Only librarians and admins can add, modify or delete authors and genres. No " +"additional views for CRUD operations required (except admin site). " +"Librarians are allowed to access authors and genres via admin site. Only " +"admins can remove authors or genres." +msgstr "" +"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " +"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " +"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " +"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " +"жанри." + +#: ../../src/spec/libms/index.rst:442 +msgid "Book creation and update" +msgstr "Створення та оновлення книг" + +#: ../../src/spec/libms/index.rst:444 +msgid "" +"The template should comprise a form with fields corresponding to the book's " +"attributes. Here are the essential elements for the form:" +msgstr "" +"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " +"основні елементи форми:" + +#: ../../src/spec/libms/index.rst:448 ../../src/spec/libms/index.rst:463 +msgid "A text input field." +msgstr "Поле для введення тексту." + +#: ../../src/spec/libms/index.rst:451 +msgid "A textarea for a brief description or synopsis." +msgstr "Текстова область для короткого опису або синопсису." + +#: ../../src/spec/libms/index.rst:454 +msgid "A text input field for the book's International Standard Book Number." +msgstr "Поле для введення міжнародного стандартного номера книги." + +#: ../../src/spec/libms/index.rst:457 +msgid "A checkbox indicating if a book is available. Defaults to ``True``." +msgstr "" +"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." + +#: ../../src/spec/libms/index.rst:460 +msgid "A date input field." +msgstr "Поле для введення дати." + +#: ../../src/spec/libms/index.rst +msgid "Genres" +msgstr "Жанри" + +#: ../../src/spec/libms/index.rst:466 +msgid "" +"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " +"fetch available genres from the database and allow users to select zero or " +"more genres." +msgstr "" +"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " +"користувачам вибирати нуль або більше жанрів." + +#: ../../src/spec/libms/index.rst +msgid "Authors" +msgstr "Автори" + +#: ../../src/spec/libms/index.rst:471 +msgid "" +"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " +"fetch available authors from the database and allow users to select one or " +"more authors." +msgstr "" +"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " +"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " +"користувачам вибирати одного або декількох авторів." + +#: ../../src/spec/libms/index.rst:477 +msgid "" +"If it's an *update* action, pre-populate the form fields with the existing " +"details of the book fetched from the database." +msgstr "" +"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " +"книги, отриманими з бази даних." + +#: ../../src/spec/libms/index.rst:479 +msgid "For *creation*, provide an empty form for the librarian to fill in." +msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." + +#: ../../src/spec/libms/index.rst:480 +msgid "Ensure the published date is logical (e.g. not a future date)." +msgstr "" +"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " +"майбутнього)." + +#: ../../src/spec/libms/index.rst:481 +msgid "Validate required inputs, according to general ``Book`` model rules." +msgstr "" +"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " +"``Book``." + +#: ../../src/spec/libms/index.rst:482 +msgid "" +"If validations pass: save changes to the database; otherwise, provide " +"helpful error messages." +msgstr "" +"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " +"випадку надайте корисні повідомлення про помилки." + +#: ../../src/spec/libms/index.rst:486 +msgid "" +"You MAY provide a mechanism (like modal or a quick entry form) to add a new " +"genre or author without leaving the book form page." +msgstr "" +"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " +"введення) для додавання нового жанру або автора, не виходячи зі сторінки " +"форми книги." + +#: ../../src/spec/libms/index.rst:490 +msgid "Book deletion" +msgstr "Видалення книги" + +#: ../../src/spec/libms/index.rst:492 +msgid "" +"Only librarians and administrators are permitted to perform this action." +msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." + +#: ../../src/spec/libms/index.rst:496 +msgid "A confirm delete form with **Submit** and **Cancel** buttons." +msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." + +#: ../../src/spec/libms/index.rst:500 +msgid "Authorize user before deleting performing deletion." +msgstr "Авторизуйте користувача перед виконанням видалення." + +#: ../../src/spec/libms/index.rst:501 +msgid "" +"If a form is submitted, a book should be removed from the library collection." +msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." + +#: ../../src/spec/libms/index.rst:503 +msgid "" +"If deletion is canceled view should redirect back to book detail view page." +msgstr "" +"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " +"сторінку детального перегляду книги." + +#: ../../src/spec/libms/index.rst:506 +msgid "Borrow requests" +msgstr "Запити на позики" + +#: ../../src/spec/libms/index.rst:508 +msgid "" +"This view facilitates the management of borrowing requests for librarians " +"and admins, aiding in their prompt handling." +msgstr "" +"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " +"позики, допомагаючи оперативно їх обробляти." + +#: ../../src/spec/libms/index.rst:513 +msgid "" +"Present a table showcasing the list of borrow requests. Each row embodies a " +"borrow request and encompasses:" +msgstr "" +"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " +"відображає один запит на позику і включає в себе всі запити:" + +#: ../../src/spec/libms/index.rst:516 +msgid "**Book Title**: Title of the requested book." +msgstr "**Назва книги**: Назва запитуваної книги." + +#: ../../src/spec/libms/index.rst:517 +msgid "**User**: Identifier of the user who initiated the request." +msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." + +#: ../../src/spec/libms/index.rst:518 +msgid "**Request Date**: Date of the request's inception." +msgstr "**Дата запиту**: Дата створення запиту." + +#: ../../src/spec/libms/index.rst:519 +msgid "" +"**Due Date**: - Input field for librarians to set upon approval for new " +"requests. - For approved ones, display the librarian-set date." +msgstr "" +"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " +"нових запитів. - Для затверджених запитів відображатиметься дата, " +"встановлена бібліотекарем." + +#: ../../src/spec/libms/index.rst:522 +msgid "" +"**Status**: Present state of the request (New, Approved, Completed, " +"Declined)." +msgstr "" +"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " +"Відхилений)." + +#: ../../src/spec/libms/index.rst:524 +msgid "" +"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " +"and freezes the due date." +msgstr "" +"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " +"статус на \"Затверджено\" і заморожує дату виконання." + +#: ../../src/spec/libms/index.rst:526 +msgid "" +"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " +"and can prompt for a decline reason." +msgstr "" +"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " +"\"Відхилено\" і може запитувати причину відхилення." + +#: ../../src/spec/libms/index.rst:528 +msgid "" +"**Complete Button**: Displayed for approved requests. Marks the request as " +"completed." +msgstr "" +"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " +"запит як завершений." + +#: ../../src/spec/libms/index.rst:532 +msgid "View Logic" +msgstr "View Logic" + +#: ../../src/spec/libms/index.rst:533 +msgid "" +"**Approve Borrow Request**: - Validate book availability. - Modify book " +"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " +"Define the return due date as per librarian. - Inform the user about the " +"approval and due date." +msgstr "" +"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " +"статус книги на \"Позичена\". - Переключіть запит на позику на " +"\"Затверджено\". - Визначте дату повернення відповідно до побажань " +"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." + +#: ../../src/spec/libms/index.rst:540 +msgid "" +"**Decline Borrow Request**: - Change borrow request status to " +"\"Declined\". - Optionally, procure decline reason from librarian. - " +"Notify user regarding the declination." +msgstr "" +"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " +"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " +"користувача про відхилення." + +#: ../../src/spec/libms/index.rst:545 +msgid "" +"**Complete Borrow Request**: - Ensure book's return. - Update book " +"status to \"Available\". - Toggle borrow request status to \"Completed\". " +"- If needed, record any notes or damages during return." +msgstr "" +"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " +"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " +"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " +"під час повернення." + +#: ../../src/spec/libms/index.rst:552 +msgid "" +"Implementing reminders for near-due borrow requests can function as an alert " +"system for both the librarian and the user." +msgstr "" +"Впровадження нагадувань про прострочені запити може функціонувати як система " +"оповіщення як для бібліотекаря, так і для користувача." From 02ea7df2fc8fac886bbf26dc0879aaf92122a49c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 26 Dec 2023 23:55:40 +0200 Subject: [PATCH 589/689] Delete outdated translations --- src/_locales/uk/LC_MESSAGES/appx/blog/spec.po | 1224 ----------------- .../uk/LC_MESSAGES/appx/libms/spec.po | 1187 ---------------- .../LC_MESSAGES/spec/giver/_legacy/index.po | 330 ----- 3 files changed, 2741 deletions(-) delete mode 100644 src/_locales/uk/LC_MESSAGES/appx/blog/spec.po delete mode 100644 src/_locales/uk/LC_MESSAGES/appx/libms/spec.po delete mode 100644 src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po diff --git a/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po b/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po deleted file mode 100644 index 1a54bad42..000000000 --- a/src/_locales/uk/LC_MESSAGES/appx/blog/spec.po +++ /dev/null @@ -1,1224 +0,0 @@ -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# SERHII HORODILOV -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-11-17 23:49+0200\n" -"PO-Revision-Date: 2023-11-17 23:56+0200\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.13.1\n" -"X-Generator: Poedit 3.4.1\n" - -#: ../../src/appx/blog/spec.rst:10 -msgid "Blog Site" -msgstr "Сайт Блогу" - -#: ../../src/appx/blog/spec.rst:12 -msgid "" -"The project aims to develop a robust and user-friendly web application using " -"the Django framework. The primary objective is to create a blogging platform " -"that allows users to publish and manage articles on various topics. The " -"application will provide an intuitive interface for authors to compose and " -"format their articles, while also offering a seamless reading experience for " -"visitors." -msgstr "" -"Проект має на меті розробку міцного та зручного у використанні веб-додатка " -"за допомогою фреймворку Django. Основна мета полягає у створенні платформи " -"для блогів, яка дозволить користувачам публікувати та керувати статтями на " -"різні теми. Додаток надасть інтуїтивний інтерфейс авторам для створення та " -"форматування своїх статей, а також забезпечить безперешкодний досвід читання " -"для відвідувачів." - -#: ../../src/appx/blog/spec.rst:19 -msgid "**Key Features**" -msgstr "**Основні функції**" - -#: ../../src/appx/blog/spec.rst:22 -msgid "User Registration and Authentication" -msgstr "Реєстрація та Аутентифікація Користувачів" - -#: ../../src/appx/blog/spec.rst:23 -msgid "" -"The application will provide user registration and authentication " -"functionality, allowing individuals to create accounts, log in, and manage " -"their profile information. This feature will enable authors to have " -"personalized accounts and maintain ownership of their published articles." -msgstr "" -"Застосунок надасть функціональність реєстрації та аутентифікації " -"користувачів, дозволяючи індивідуумам створювати облікові записи, входити в " -"систему та керувати інформацією свого профілю. Ця функція дозволить авторам " -"мати персоналізовані облікові записи та зберігати право власності на їхні " -"опубліковані статті." - -#: ../../src/appx/blog/spec.rst:30 -msgid "Article Management" -msgstr "Керування Статтями" - -#: ../../src/appx/blog/spec.rst:31 -msgid "" -"Authors will have the ability to create, edit, and delete articles within " -"the application. The system will offer a user-friendly editor. Additionally, " -"authors will be able to categorize articles by assigning relevant topics to " -"them." -msgstr "" -"Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." - -#: ../../src/appx/blog/spec.rst:37 -msgid "Topic Subscription:" -msgstr "Підписка на Теми:" - -#: ../../src/appx/blog/spec.rst:38 -msgid "" -"The application will include a subscription feature that allows users to " -"subscribe to topics of interest. By subscribing to specific topics, users " -"will receive notifications or updates whenever new articles are published in " -"those categories. This feature will enhance user engagement and ensure that " -"readers stay informed about the topics they find most valuable." -msgstr "" -"Автори матимуть можливість створювати, редагувати та видаляти статті в " -"рамках додатка. Система надасть зручний редактор. Крім того, автори зможуть " -"категоризувати статті, присвоюючи їм відповідні теми." - -#: ../../src/appx/blog/spec.rst:45 -msgid "" -"Overall, the project aims to deliver an efficient blogging platform that " -"caters to both authors and readers. By providing a seamless user experience " -"and incorporating essential functionalities such as user authentication, " -"article management, and topic subscriptions, the application will empower " -"users to create, share, and explore engaging content within a well-" -"structured and organized platform." -msgstr "" -"Застосунок буде містити функцію підписки, яка дозволить користувачам " -"підписуватися на цікаві їм теми. Підписавшись на конкретні теми, користувачі " -"отримуватимуть повідомлення або оновлення кожного разу, коли в цих " -"категоріях будуть публікуватися нові статті. Ця функція покращить " -"залученість користувачів та забезпечить, що читачі будуть інформовані про " -"найцікавіші для них теми." - -#: ../../src/appx/blog/spec.rst:52 -msgid "" -"Here is a starter repository template, that may helps: `Starter template`_." -msgstr "" -"Ось шаблон стартового репозиторію, який може допомогти: `Starter template`_." - -#: ../../src/appx/blog/spec.rst:55 -msgid "Challenge: Functional views" -msgstr "Виклик: Функціональні представлення" - -#: ../../src/appx/blog/spec.rst:57 -msgid "" -"It's ok not to return **actual** content for now. Just ensure all the routes " -"are available and provide correct data. Use anything you like to return " -"within HTTP response." -msgstr "" -"Зараз немає потреби повертати **фактичний** вміст. Просто переконайтеся, що " -"всі маршрути доступні та надають правильні дані. Використовуйте будь-що, що " -"ви хочете повернути в HTTP-відповіді." - -#: ../../src/appx/blog/spec.rst:61 -msgid "" -"``/about/``: Provides a regular text for a user, describing the " -"functionalities of the django site." -msgstr "" -"``/about/``: надає звичайний текст для користувача, що описує функції сайту " -"django." - -#: ../../src/appx/blog/spec.rst:63 -msgid "" -"``/``: A site's homepage. This will contain a list of blogs published via " -"the django site." -msgstr "" -"``/``: Головна сторінка сайту. Тут буде перелік блогів, опублікованих через " -"сайт Django." - -#: ../../src/appx/blog/spec.rst:65 -msgid "" -"``/
    /``: A single article detail view. The URL contains dynamic part " -"in it. This will be used to fetch a single article from the database." -msgstr "" -"``/
    /``: Представлення деталей однієї статті. URL містить динамічну " -"частину. Вона буде використовуватися для отримання однієї статті з бази " -"даних." - -#: ../../src/appx/blog/spec.rst:68 -msgid "" -"``/
    /comment/``: This view will be used to add comments to a article." -msgstr "" -"``/
    /comment/``: Це представлення буде використовуватися для " -"додавання коментарів до статті." - -#: ../../src/appx/blog/spec.rst:70 -msgid "``/create/``: A article creation form." -msgstr "``/create/``: Форма створення статті." - -#: ../../src/appx/blog/spec.rst:71 -msgid "``/
    /update/``: A view to update an existing article data." -msgstr "" -"``/
    /update/``: Представлення для оновлення існуючих даних статті." - -#: ../../src/appx/blog/spec.rst:72 -msgid "``/
    /delete/``: A view to confirm article deletion." -msgstr "" -"``/
    /delete/``: Представлення для підтвердження видалення статті." - -#: ../../src/appx/blog/spec.rst:73 -msgid "``/topics/``: A list of topics available on the site." -msgstr "``/topics/``: Перелік доступних тем на сайті." - -#: ../../src/appx/blog/spec.rst:74 -msgid "" -"``/topics//add/``: Add the selected topic to preferred topics list." -msgstr "``/topics//add/``: Додати обрану тему до списку обраних тем." - -#: ../../src/appx/blog/spec.rst:75 -msgid "``/topics//remove/``: Removes the selected topic from preferred." -msgstr "``/topics//remove/``: Видаляє вибрану тему з обраних." - -#: ../../src/appx/blog/spec.rst:76 -msgid "``/topics//subscribe/``: A view to subscribe for a topic." -msgstr "``/topics//subscribe/``: Представлення для підписки на тему." - -#: ../../src/appx/blog/spec.rst:77 -msgid "``/topics//unsubscribe/``: A view to unsubscribe from a topic." -msgstr "``/topics//unsubscribe/``: Представлення для відписки від теми." - -#: ../../src/appx/blog/spec.rst:78 -msgid "``/profile//``: A site user's personal page." -msgstr "``/profile//``: Особиста сторінка користувача сайту." - -#: ../../src/appx/blog/spec.rst:79 -msgid "" -"``/set-password/``: This route will be used to change users' credential data." -msgstr "" -"``/set-password/``: Цей маршрут буде використовуватися для зміни облікових " -"даних користувачів." - -#: ../../src/appx/blog/spec.rst:81 -msgid "``/set-userdata/``: This route will be user to change users' data." -msgstr "" -"``/set-userdata/``: Цей маршрут буде використовуватися для зміни даних " -"користувачів." - -#: ../../src/appx/blog/spec.rst:82 -msgid "``/deactivate/``: Account deactivation (deletion) view." -msgstr "" -"``/deactivate/``: Представлення для деактивації облікового запису " -"(видалення)." - -#: ../../src/appx/blog/spec.rst:83 -msgid "``/register/``: This view contains a user registration form." -msgstr "``/register/``: Сторінка з формою для реєстрації нового користувача." - -#: ../../src/appx/blog/spec.rst:84 -msgid "``/login/``: This view contains a login form." -msgstr "``/login/``: Сторінка з формою для логіна." - -#: ../../src/appx/blog/spec.rst:85 -msgid "" -"``/logout/``: Logout page. This view should redirect user back to homepage." -msgstr "" -"``/logout/``: Логаут. Має перенаправляти користувача назад на домашню " -"сторінку.." - -#: ../../src/appx/blog/spec.rst:89 ../../src/appx/blog/spec.rst:201 -#: ../../src/appx/blog/spec.rst:231 ../../src/appx/blog/spec.rst:409 -msgid "Optional task(s)" -msgstr "Додаткові завдання" - -#: ../../src/appx/blog/spec.rst:91 -msgid "" -"``/archive///``: This view provides a list of articles " -"published on a specified month of a specified year. This view should apply " -"date validation and raise ``Http404`` for invalid paths. The valid date is a " -"year's 4-digits form followed by 1 or 2 digits representing month. Month " -"range should be limited as [1..12], leading zero may be omitted. Valid URLs " -"are:" -msgstr "" -"``/archive///``: Це представлення надає список статей, " -"опублікованих у певному місяці певного року. Це представлення повинно " -"застосовувати перевірку дати та викидати помилку ``Http404`` для " -"неприпустимих шляхів. Припустимою датою є 4-значний формат року, за яким " -"слідує 1 або 2 цифри, що представляють місяць. Діапазон місяця повинен бути " -"обмежений [1..12], ведучий нуль може бути пропущений. Приклади правильних " -"URL-адрес:" - -#: ../../src/appx/blog/spec.rst:105 -msgid "Challenge: Data models" -msgstr "Завдання: моделі даних" - -#: ../../src/appx/blog/spec.rst:108 -msgid "" -"Django admin may be used to create some dummy data. To gather access to " -"admin section you need to create a superuser. The easiest way to do that is " -"to use a django command:" -msgstr "" -"Для створення деяких фіктивних даних можна використовувати Django Admin. Щоб " -"отримати доступ до адміністративного розділу, вам потрібно створити " -"суперкористувача. Найпростіший спосіб зробити це - використовувати команду " -"Django:" - -#: ../../src/appx/blog/spec.rst:117 ../../src/appx/blog/spec.rst:218 -msgid "General" -msgstr "Основне" - -#: ../../src/appx/blog/spec.rst:118 -msgid "Each model will be registered for admin site." -msgstr "Кожна модель буде зареєстрована на сторінці адміністрації сайту." - -#: ../../src/appx/blog/spec.rst:121 ../../src/appx/blog/spec.rst:456 -msgid "Article topic" -msgstr "Тема статті" - -#: ../../src/appx/blog/spec.rst:122 -msgid "This is a simple model, that contains information about topic:" -msgstr "Ось проста модель, що містить інформацію про тему:" - -#: ../../src/appx/blog/spec.rst:124 -msgid "topic title (unique value, 64 characters or fewer)" -msgstr "назва теми (унікальне значення, не більше 64 символів)" - -#: ../../src/appx/blog/spec.rst:125 -msgid "topic short description (255 characters or fewer)" -msgstr "короткий опис теми (не більше 255 символів)" - -#: ../../src/appx/blog/spec.rst:128 ../../src/appx/blog/spec.rst:470 -msgid "Article" -msgstr "Стаття" - -#: ../../src/appx/blog/spec.rst:129 -msgid "Article requires title (255 characters or fewer)." -msgstr "Стаття вимагає наявності заголовка (не більше 255 символів)." - -#: ../../src/appx/blog/spec.rst:130 -msgid "Article requires content (at least 255 characters)." -msgstr "Стаття вимагає наявності змісту (принаймні 255 символів)." - -#: ../../src/appx/blog/spec.rst:131 -msgid "" -"Creation date should be autogenerated at article creation, and would never " -"be updated." -msgstr "" -"Дата створення буде автоматично генеруватися при створенні статті і не буде " -"оновлюватися пізніше." - -#: ../../src/appx/blog/spec.rst:133 -msgid "Updated date will be update at each article save." -msgstr "Дата оновлення буде оновлюватися при кожному збереженні статті." - -#: ../../src/appx/blog/spec.rst:136 ../../src/appx/blog/spec.rst:463 -msgid "Article comment" -msgstr "Коментар до статті" - -#: ../../src/appx/blog/spec.rst:137 -msgid "Comment requires creation date (autogenerated)." -msgstr "Коментар вимагає наявності дати створення (автоматично генерується)." - -#: ../../src/appx/blog/spec.rst:138 -msgid "Comment requires message text." -msgstr "Коментар вимагає наявності тексту повідомлення." - -#: ../../src/appx/blog/spec.rst:141 -msgid "Relationships" -msgstr "Відносини" - -#: ../../src/appx/blog/spec.rst:143 -msgid "" -"Standard Django user model **will be** used for now. To apply model " -"reference pass ``\"auth.User\"`` as related model. Users can be created via " -"admin page. You can also refer the same model as shown below:" -msgstr "" -"Стандартна модель користувача Django **буде** використовуватися наразі. Для " -"застосування посилання на модель передайте ``\"auth.User\"`` як пов'язану " -"модель. Користувачі можуть бути створені через адміністративну сторінку. Ви " -"також можете посилатися на ту саму модель, як показано нижче:" - -#: ../../src/appx/blog/spec.rst:156 -msgid "``article`` and ``topics`` have *many-to-many* relationship." -msgstr "``article`` та ``topics`` мають *багато-до-багатьох* відношення." - -#: ../../src/appx/blog/spec.rst:157 -msgid "" -"``article`` and ``user`` have *one-to-many* relationship. A article can have " -"**only one** author, but users can create as many articles as they want." -msgstr "" -"``article`` та ``user`` мають *один-до-багатьох* відношення. У статті може " -"бути **лише один** автор, але користувачі можуть створювати стільки статей, " -"скільки їм потрібно." - -#: ../../src/appx/blog/spec.rst:160 -msgid "" -"``article`` and ``comment`` have *one-to-many* relationship. A article may " -"be a container for many comments, but a comment is related to a single " -"article." -msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " -"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " -"однією статтею." - -#: ../../src/appx/blog/spec.rst:163 -msgid "" -"``comment`` and ``user`` have *one-to-many* relationship. It's similar to " -"*article - user* relationship." -msgstr "" -"``comment`` та ``user`` мають *один-до-багатьох* відношення. Це схоже на " -"відношення *стаття - користувач*." - -#: ../../src/appx/blog/spec.rst:165 -msgid "" -"``topic`` and ``user`` use *many-to-many* relationship. A single user can " -"prefer none or as many topics as needed and vice versa. This relationship " -"represents topics preferred by a certain blog user. Also this provides an " -"additional option to mark some of preferred topics with a **notify** flag, " -"to receive newsletters about specified topics updates. The difference " -"between *prefer* and *notify* is that *preferred* topics affect the articles " -"list for a user, and *notify* is responsible for newsletters for the user." -msgstr "" -"``topic`` та ``user`` використовують відношення *багато-до-багатьох*. Один " -"користувач може вибрати будь-яку кількість тем, і навпаки. Це відношення " -"представляє теми, які вибрані певним користувачем блогу. Крім того, це надає " -"додаткову опцію позначити деякі з вибраних тем прапорцем **notify**, щоб " -"отримувати розсилки про оновлення зазначених тем. Відмінність між *prefer* " -"(вибір) та *notify* (сповіщення) полягає в тому, що *prefer* впливає на " -"список статей для користувача, а *notify* відповідає за розсилку новин для " -"користувача." - -#: ../../src/appx/blog/spec.rst:176 -msgid "UML diagram" -msgstr "UML діаграми" - -#: ../../src/appx/blog/spec.rst:181 -msgid "Challenge: ORM" -msgstr "Завдання: ORM" - -#: ../../src/appx/blog/spec.rst:183 -msgid "" -"Update existing views to represent entities that are actually stored inside " -"the project's database." -msgstr "" -"Оновіть існуючі подання, щоб представити сутності, які фактично зберігаються " -"в базі даних проекту." - -#: ../../src/appx/blog/spec.rst:186 -msgid "``/``: should represent a list of existing articles." -msgstr "``/``: повинен представляти список існуючих статей." - -#: ../../src/appx/blog/spec.rst:187 -msgid "``/
    /``: should represent a single existing article." -msgstr "``/
    /``: повинен представляти окрему існуючу статтю." - -#: ../../src/appx/blog/spec.rst:188 -msgid "Detail view should obtain a list of article related comments." -msgstr "" -"Вью для перегляду окремої статті повинен отримувати зв'язані коментарі." - -#: ../../src/appx/blog/spec.rst:189 -msgid "" -"``/profile//``: should contain information about user and a " -"list of articles authored by this user." -msgstr "" -"``/profile//``: повинен містити інформацію про користувача та " -"список статей, написаних цим користувачем." - -#: ../../src/appx/blog/spec.rst:191 -msgid "" -"All views related to a single entity (*detail*, *update*, *delete*, " -"*profile*) should raise ``Http404`` in case entity could not be fetched." -msgstr "" -"Усі ресурси, пов'язані з окремою сутністю (*деталі*, *оновлення*, " -"*видалення*, *профіль*) мають викликати ``Http404`` у випадку, якщо сутність " -"не вдалося отримати." - -#: ../../src/appx/blog/spec.rst:196 -msgid "" -"It's common to store dedicated functions/classes that supports some specific " -"business logic in a separate module called ``services.py`` or ``utils.py`` " -"within an application directory." -msgstr "" -"Звичайно, функції/класи, що підтримують певну специфічну бізнес-логіку, " -"розумно зберігати в окремому модулі з назвою ``services.py`` або ``utils." -"py`` всередині директорії додатку." - -#: ../../src/appx/blog/spec.rst:203 -msgid "" -"Create a service to fetch articles, ordered by a specified user preferences. " -"This means, topics preferred by a user affects articles orders. Queryset " -"should be ordered in way, to have articles with most corresponding topics at " -"the begging." -msgstr "" -"Створіть сервіс для того, щоб отримувати статі у вигляді відсортованому " -"згідно вподобань зазначеного користувача. Це означає, що чим більше тем " -"зазначених у статті співпадає з вподобаннями користувача, тим ближче вона до " -"початку видачі." - -#: ../../src/appx/blog/spec.rst:209 -msgid "Challenge: Templates" -msgstr "Завдання: Шаблони" - -#: ../../src/appx/blog/spec.rst:212 -msgid "Helpful link: `Bootstrap template`_" -msgstr "Корисне посилання: `Bootstrap template`_" - -#: ../../src/appx/blog/spec.rst:215 -msgid "Links related to user data **may be** placeholders for now." -msgstr "" -"Посилання, що стосуються даних користувача, **можуть бути** плейсхолдерами " -"наразі." - -#: ../../src/appx/blog/spec.rst:219 -msgid "**All** templates should be inherited from the ``base.html`` template." -msgstr "**Усі** шаблони повинні успадковувати ``base.html`` шаблон." - -#: ../../src/appx/blog/spec.rst:220 -msgid "" -"Each page has a descriptive title HTML tag, which included ``| Blog`` " -"suffix, e.g. \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" etc." -msgstr "" -"Кожна сторінка має описовий тег HTML заголовка, включаючи суфікс ``| Blog``, " -"наприклад, \"Articles | Blogs\", \"Sample | Blog\", \"Login | Blog\" і т.д." - -#: ../../src/appx/blog/spec.rst:222 -msgid "Each page should contain a link to homepage (``/`` URL route)." -msgstr "" -"Кожна сторінка повинна містити посилання на головну сторінку (шлях URL ``/" -"``)." - -#: ../../src/appx/blog/spec.rst:223 -msgid "" -"Each page contains a list of registered topics. Each view of this kind " -"filters only articles of a relevant topic. This should be implemented with a " -"custom template context processor." -msgstr "" -"Кожна сторінка містить список зареєстрованих тем. Кожне представлення цього " -"типу фільтрує лише статті відповідної теми. Це слід реалізувати за допомогою " -"власного обробника контексту шаблону (template context processor)." - -#: ../../src/appx/blog/spec.rst:226 -msgid "Replace content block for *about* page with some static content." -msgstr "" -"Замініть блок вмісту (content block) для сторінки *about* на деякий " -"статичний вміст." - -#: ../../src/appx/blog/spec.rst:227 -msgid "" -"Application-level templates should be located within appropriate " -"applications." -msgstr "Шаблони рівня застосунків розташовуватися у відповідних застосунках." - -#: ../../src/appx/blog/spec.rst:233 -msgid "" -"Each page should contain a list of links to archive views for the last year." -msgstr "" -"Кожна сторінка має містити список посилань на перегляди архіву за останній " -"рік." - -#: ../../src/appx/blog/spec.rst:235 -msgid "Each page should contain an inclusion-block(s) with following links:" -msgstr "Кожна сторінка повинна містити блок(и) включення з такими посиланнями:" - -#: ../../src/appx/blog/spec.rst:237 -msgid "``/registration/``: new user registration form" -msgstr "``/register/``: форма реєстрації нового користувача" - -#: ../../src/appx/blog/spec.rst:238 -msgid "``/login/``: user login form" -msgstr "``/login/``: форма логіна користувача" - -#: ../../src/appx/blog/spec.rst:239 -msgid "``/create/``: article creation page" -msgstr "``/create/``: форма створення статті" - -#: ../../src/appx/blog/spec.rst:242 -msgid "Articles list" -msgstr "Список статей" - -#: ../../src/appx/blog/spec.rst:243 -msgid "Main page contains a list of published articles." -msgstr "Головна сторінка містить список опублікованих статей." - -#: ../../src/appx/blog/spec.rst:244 -msgid "Each article entity is rendered using a custom template tag." -msgstr "" -"Кожен елемент статті відображається за допомогою власного шаблонного тегу." - -#: ../../src/appx/blog/spec.rst:245 -msgid "``article`` template tag renders information about a article object:" -msgstr "Шаблонний тег ``article`` відображає інформацію про об'єкт статті:" - -#: ../../src/appx/blog/spec.rst:247 -msgid "article title" -msgstr "заголовок статті" - -#: ../../src/appx/blog/spec.rst:248 -msgid "article content (trimmed to ~50 characters)" -msgstr "зміст статті (обрізаний до ~50 символів)" - -#: ../../src/appx/blog/spec.rst:249 -msgid "article creation date" -msgstr "дата створення статті" - -#: ../../src/appx/blog/spec.rst:250 -msgid "related topics (3 topics or fewer)" -msgstr "пов'язані теми (3 або менше)" - -#: ../../src/appx/blog/spec.rst:251 -msgid "number of related comments" -msgstr "кількість коментарів до статті" - -#: ../../src/appx/blog/spec.rst:258 -msgid "Article details" -msgstr "Деталі статті" - -#: ../../src/appx/blog/spec.rst:260 -msgid "Article update and deletion views **would not** affect data for now." -msgstr "Оновлення та видалення статей **не будуть** впливати на дані наразі." - -#: ../../src/appx/blog/spec.rst:262 -msgid "" -"A article detail page contains links to **update** or **delete** current " -"article." -msgstr "" -"На сторінці деталей статті мають бути посилання на **оновлення** або " -"**видалення** поточної статті." - -#: ../../src/appx/blog/spec.rst:264 -msgid "Page provides information about article:" -msgstr "Сторінка надає інформацію про статтю:" - -#: ../../src/appx/blog/spec.rst:266 -msgid "Article title" -msgstr "Заголовок статті" - -#: ../../src/appx/blog/spec.rst:267 -msgid "Creation date" -msgstr "Дата створення" - -#: ../../src/appx/blog/spec.rst:268 ../../src/appx/blog/spec.rst:275 -msgid "Author name" -msgstr "Ім'я автора" - -#: ../../src/appx/blog/spec.rst:269 -msgid "Related topics" -msgstr "Пов'язані теми" - -#: ../../src/appx/blog/spec.rst:270 -msgid "Article content" -msgstr "Вміст статті" - -#: ../../src/appx/blog/spec.rst:272 -msgid "Page contains a list of related comments." -msgstr "Сторінка містить список пов'язаних коментарів." - -#: ../../src/appx/blog/spec.rst:273 -msgid "Each comment contains:" -msgstr "Кожен коментар містить:" - -#: ../../src/appx/blog/spec.rst:276 -msgid "Comment creation time" -msgstr "Час створення коментаря" - -#: ../../src/appx/blog/spec.rst:277 -msgid "Comment message" -msgstr "Текст комментаря" - -#: ../../src/appx/blog/spec.rst:280 -msgid "Profile page" -msgstr "Строніка профілю" - -#: ../../src/appx/blog/spec.rst:281 -msgid "Author page contains information about author:" -msgstr "Сторінка автора містить інформацію про автора:" - -#: ../../src/appx/blog/spec.rst:283 -msgid "First name" -msgstr "Ім'я" - -#: ../../src/appx/blog/spec.rst:284 -msgid "Last name" -msgstr "Прізвище" - -#: ../../src/appx/blog/spec.rst:286 -msgid "Add more information, if needed." -msgstr "Додайте більше інформації за бажанням." - -#: ../../src/appx/blog/spec.rst:288 -msgid "Author page contains a list of articles created by this author." -msgstr "Сторінка автора містить список статей, створених цим автором." - -#: ../../src/appx/blog/spec.rst:289 -msgid "" -"Author page contains buttons/links to change user data and password or " -"deactivate a user's account." -msgstr "" -"Сторінка автора містить кнопки/посилання для зміни користувача та пароля або " -"деактивації облікового запису користувача." - -#: ../../src/appx/blog/spec.rst:293 -msgid "Forms" -msgstr "Форми" - -#: ../../src/appx/blog/spec.rst:295 -msgid "" -"There is **no need** to add actual forms now. They will be generated by " -"Django. This section describes the final view of these pages. It's ok just " -"to create a dedicated templates for future use." -msgstr "" -"Наразі **немає потреби** додавати фактичні форми. Вони будуть створені " -"Django. Цей розділ описує кінцевий вигляд цих сторінок. Для майбутнього " -"використання достатньо створити окремі шаблони." - -#: ../../src/appx/blog/spec.rst:299 -msgid "" -"``/register/`` page contains a new user registration form. It should take " -"inputs from the user:" -msgstr "" -"Сторінка ``/register/`` містить форму реєстрації нового користувача. Вона " -"повинна отримувати введені дані від користувача:" - -#: ../../src/appx/blog/spec.rst:302 ../../src/appx/blog/spec.rst:310 -msgid "username" -msgstr "username" - -#: ../../src/appx/blog/spec.rst:303 -msgid "email" -msgstr "email" - -#: ../../src/appx/blog/spec.rst:304 ../../src/appx/blog/spec.rst:311 -msgid "password" -msgstr "password" - -#: ../../src/appx/blog/spec.rst:305 ../../src/appx/blog/spec.rst:324 -msgid "confirm password" -msgstr "confirm password" - -#: ../../src/appx/blog/spec.rst:307 -msgid "" -"``/login/`` page contains a user login form. It should take the inputs from " -"the user:" -msgstr "" -"Сторінка ``/login/`` містить форму входу користувача. Вона повинна " -"отримувати введені дані від користувача:" - -#: ../../src/appx/blog/spec.rst:313 -msgid "" -"``/create/`` and ``/
    /update/`` pages contain a form to collect a " -"article's data:" -msgstr "" -"Сторінки ``/create/`` та ``/
    /update/`` містять форму для збору " -"даних статті:" - -#: ../../src/appx/blog/spec.rst:316 -msgid "title" -msgstr "title" - -#: ../../src/appx/blog/spec.rst:317 -msgid "relevant topics" -msgstr "відповідні теми" - -#: ../../src/appx/blog/spec.rst:318 -msgid "content" -msgstr "content" - -#: ../../src/appx/blog/spec.rst:320 -msgid "``/
    /delete`` page contains a simple delete confirmation form." -msgstr "" -"Сторінка ``/
    /delete`` містить просту форму для підтвердження " -"видалення." - -#: ../../src/appx/blog/spec.rst:321 -msgid "Change password form has two fields:" -msgstr "Форма зміни пароля має два поля:" - -#: ../../src/appx/blog/spec.rst:323 -msgid "new password" -msgstr "new password" - -#: ../../src/appx/blog/spec.rst:326 -msgid "" -"Change user's data form collects all information, that can be changed, e.g. " -"``username``, ``first name``, ``last name`` etc." -msgstr "" -"Форма зміни даних користувача збирає всю інформацію, яка може бути змінена, " -"наприклад, ``username``, ``first name``, ``last name`` та інше." - -#: ../../src/appx/blog/spec.rst:328 -msgid "" -"User preferences page contains a list of available topics. User can mark " -"some topics as preferred. Also for preferred topics an option to *subscribe* " -"for the newsletters becomes available." -msgstr "" -"Сторінка налаштувань користувача містить список доступних тем. Користувач " -"може відмітити деякі теми як пріоритетні (переваги). Також для пріоритетних " -"тем стає доступною опція *підписки* на розсилку новинних листів." - -#: ../../src/appx/blog/spec.rst:333 -msgid "Challenge: Articles' slugs" -msgstr "Виклик: Slug-и статей" - -#: ../../src/appx/blog/spec.rst:336 -msgid "This is an optional challenge in addition to:" -msgstr "Це додатковий виклик у додаток до:" - -#: ../../src/appx/blog/spec.rst:338 -msgid "`Challenge: Functional views`_" -msgstr "`Challenge: Functional views`_" - -#: ../../src/appx/blog/spec.rst:339 -msgid "`Challenge: Templates`_" -msgstr "`Challenge: Templates`_" - -#: ../../src/appx/blog/spec.rst:340 -msgid "`Challenge: Data models`_" -msgstr "`Challenge: Data models`_" - -#: ../../src/appx/blog/spec.rst:341 -msgid "`Challenge: ORM`_" -msgstr "`Challenge: ORM`_" - -#: ../../src/appx/blog/spec.rst:343 -msgid "Update ``Article`` model with ``slug`` field. The slug value is:" -msgstr "" -"Оновіть модель ``Article``, додавши поле ``slug``. Значення slug поля є:" - -#: ../../src/appx/blog/spec.rst:345 -msgid "required for each article" -msgstr "обов'язкове для кожної статті" - -#: ../../src/appx/blog/spec.rst:346 -msgid "unique for each article" -msgstr "унікальне для кожної статті" - -#: ../../src/appx/blog/spec.rst:348 -msgid "Create a data migration to provide slugs for existing articles." -msgstr "Створіть міграцію даних для надання slug-ів існуючим статтям." - -#: ../../src/appx/blog/spec.rst:349 -msgid "" -"``slug`` should be auto-generated on article save. The pattern is ``article." -"title-article.created_date``, e.g. \"Sample article\" created at " -"\"03/24/2023\" should receive slug: ``sample-article-2023-03-24``." -msgstr "" -"Поле ``slug`` повинно автоматично генеруватися при збереженні статті. Шаблон " -"для генерації поля ``slug``: ``назва-статті-дата-створення-статті``, " -"наприклад, стаття з назвою \"Sample article\", створена \"24/03/2023\", " -"отримає slug: ``sample-article-2023-03-24``." - -#: ../../src/appx/blog/spec.rst:353 -msgid "Update detail view URL path with article slug as dynamic portion." -msgstr "" -"Оновіть шлях URL для представлення деталей статті з динамічною частиною, " -"якою буде slug статті." - -#: ../../src/appx/blog/spec.rst:356 -msgid "Challenge: Auth forms" -msgstr "Завдання: форми авторизації" - -#: ../../src/appx/blog/spec.rst:358 -msgid "Create form for new users registration with required fields:" -msgstr "" -"Створити форму для реєстрації нових користувачів із обов'язковими полями:" - -#: ../../src/appx/blog/spec.rst:360 -msgid "``username``" -msgstr "``username``" - -#: ../../src/appx/blog/spec.rst:361 -msgid "``email``" -msgstr "``email``" - -#: ../../src/appx/blog/spec.rst:362 -msgid "``password``" -msgstr "``password``" - -#: ../../src/appx/blog/spec.rst:363 -msgid "``confirm password``" -msgstr "``confirm password``" - -#: ../../src/appx/blog/spec.rst:365 -msgid "``username`` value should be validated against existing values." -msgstr "" -"Значення ``username`` повинно перевірятися на відповідність існуючим " -"значенням." - -#: ../../src/appx/blog/spec.rst:366 -msgid "``password`` and ``confirm password`` values should match." -msgstr "Значення ``password`` і ``confirm password`` мають збігатися." - -#: ../../src/appx/blog/spec.rst:367 -msgid "Create form for existing users login." -msgstr "Створити форму для входу існуючих користувачів." - -#: ../../src/appx/blog/spec.rst:368 -msgid "Validations errors are to be rendered on the template." -msgstr "Помилки перевірки повинні відображатися на шаблоні." - -#: ../../src/appx/blog/spec.rst:371 -msgid "Challenge: Authentication" -msgstr "Завдання: Автентифікація" - -#: ../../src/appx/blog/spec.rst:373 -msgid "" -"For anonymous users ``/register/`` and ``/login/`` links should be visible " -"in navbar." -msgstr "" -"Для анонімних користувачів посилання ``/register/`` і ``/login/`` мають бути " -"видимими на панелі навігації." - -#: ../../src/appx/blog/spec.rst:375 -msgid "" -"For authenticated users ``/logout/`` and ``/create/`` links should be " -"visible in navbar." -msgstr "" -"Для автентифікованих користувачів посилання ``/logout/`` і ``/create/`` " -"мають бути видимими на панелі навігації." - -#: ../../src/appx/blog/spec.rst:377 -msgid "" -"If authenticated user is admin or stuff they should see a link to admin page." -msgstr "" -"Якщо автентифікований користувач є адміністратором або іншим, він має " -"побачити посилання на сторінку адміністратора." - -#: ../../src/appx/blog/spec.rst:379 -msgid "" -"``/register/``: Users should provide all required information about them: " -"desired username and email. Name data (both first and last) is optional. " -"After user creation they should be redirected to login page to perform " -"authentication process. Invalid form should provide information about " -"error(s)." -msgstr "" -"``/register/``: користувачі повинні надати всю необхідну інформацію про " -"себе: бажане ім'я користувача та електронну адресу. Дані імені (ім'я та " -"прізвище) необов'язкові. Після створення користувача вони повинні бути " -"перенаправлені на сторінку входу для виконання процесу автентифікації. " -"Недійсна форма повинна надавати інформацію про помилку(и)." - -#: ../../src/appx/blog/spec.rst:384 -msgid "" -"``/login/``: Users should provide their credentials to login. In case login " -"is successful they should be redirected to their profile (if no ``?" -"next=url`` query string available)." -msgstr "" -"``/login/``: користувачі повинні надати свої облікові дані для входу. У разі " -"успішного входу вони повинні бути перенаправлені до свого профілю (якщо " -"немає рядка запиту ``?next=url``)." - -#: ../../src/appx/blog/spec.rst:387 -msgid "" -"``/create/``: Only authenticated users should be able to visit this page. In " -"case anonymous user is trying to request this view they should be redirected " -"to the login view first, and after successful authentication get back to " -"article creation. Then a article is created, it should be authored by the " -"currently authenticated user." -msgstr "" -"``/create/``: Лише аутентифіковані користувачі повинні мати доступ до цієї " -"сторінки. Якщо анонімний користувач намагається отримати доступ до цього " -"представлення, його повинно перенаправити спочатку на сторінку входу, а " -"після успішної аутентифікації повернути на сторінку створення статті. При " -"створенні статті вона повинна мати автором поточного аутентифікованого " -"користувача." - -#: ../../src/appx/blog/spec.rst:392 -msgid "" -"``/
    /comment/``: Currently authenticated user should be referenced " -"as a comment's author." -msgstr "" -"``/
    /comment/``: У коментарі поточного аутентифікованого користувача " -"повинна бути зазначена його ідентифікація як автора." - -#: ../../src/appx/blog/spec.rst:394 -msgid "" -"Articles may be modified or deleted only by their authors from the detail " -"article page. However, admins can still performs articles actions from the " -"admin page." -msgstr "" -"Змінювати або видаляти статті можуть тільки їх автори на сторінці деталей " -"статті. Однак адміністратори все ще можуть виконувати дії зі статтями через " -"адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:397 -msgid "User related paths are restricted for non-authorized users." -msgstr "" -"Шляхи, пов'язані з користувачем, обмежені для неаутентифікованих " -"користувачів." - -#: ../../src/appx/blog/spec.rst:399 -msgid "``/set-password/``" -msgstr "``/set-password/``" - -#: ../../src/appx/blog/spec.rst:400 -msgid "``/set-userdata/``" -msgstr "``/set-userdata/``" - -#: ../../src/appx/blog/spec.rst:402 -msgid "" -"``POST`` request ``/deactivate/`` should mark current authenticated user as " -"*deleted* and log them user." -msgstr "" -"Запит ``POST`` на ``/deactivate/`` повинен позначати поточного " -"аутентифікованого користувача як *видаленого* і виходити з системи для цього " -"користувача." - -#: ../../src/appx/blog/spec.rst:404 -msgid "" -"Authenticated users should be able to adjust their preferred topics lists." -msgstr "" -"Авторизовані користувачі повинні мати можливість налаштовувати свої списки " -"обраних тем." - -#: ../../src/appx/blog/spec.rst:405 -msgid "" -"Authenticated users should be able to **subscribe** or **unsubscribe** for a " -"selected topic." -msgstr "" -"Авторизовані користувачі повинні мати можливість **підписатися** або " -"**відписатися** на обрану тему." - -#: ../../src/appx/blog/spec.rst:411 -msgid "" -"Adjust the order of article list according to authenticated user " -"preferences. For anonymous users keep default ordering." -msgstr "" -"Призначте зміну порядку списку статей відповідно до вподобань " -"аутентифікованого користувача. Для анонімних користувачів залиште типове " -"сортування за замовчуванням." - -#: ../../src/appx/blog/spec.rst:413 -msgid "" -"Implement account reactivation behavior. The exact workflow does not mater. " -"The sample scenario is to collect email for the user and check it for " -"existing in the database. After that create a request for admin to activate " -"an account and send a confirmation email, when all is done." -msgstr "" -"Реалізуйте поведінку щодо відновлення облікового запису. Точний порядок дій " -"не має значення. Один зі зразків сценаріїв може полягати у зборі електронної " -"пошти користувача та перевірки наявності цієї адреси в базі даних. Після " -"цього створіть запит для адміністратора на активацію облікового запису та " -"надішліть підтверджувальний лист електронною поштою, коли все буде готово." - -#: ../../src/appx/blog/spec.rst:419 -msgid "Challenge: Article related forms" -msgstr "Виклик: Форми пов'язані зі статтями" - -#: ../../src/appx/blog/spec.rst:421 -msgid "" -"Implement a article form. This form will be used to create new articles and " -"to update existing ones." -msgstr "" -"Реалізуйте форму статті. Ця форма буде використовуватися для створення нових " -"статей та оновлення існуючих." - -#: ../../src/appx/blog/spec.rst:423 -msgid "Each created article should have at least one related topic." -msgstr "Кожна створена стаття повинна мати принаймні одну пов'язану тему." - -#: ../../src/appx/blog/spec.rst:424 -msgid "Implement a comment form to gather a comment from a user." -msgstr "Реалізуйте форму коментаря, щоб збирати коментарі від користувача." - -#: ../../src/appx/blog/spec.rst:425 -msgid "" -"Only ``POST`` requests to ``/
    /comment/`` are allowed from this " -"moment." -msgstr "" -"З даного моменту дозволені лише запити типу ``POST`` до ``/
    /comment/" -"``." - -#: ../../src/appx/blog/spec.rst:427 -msgid "Implement functionality:" -msgstr "Реалізуйте функціональність:" - -#: ../../src/appx/blog/spec.rst:429 -msgid "article creation" -msgstr "створення статті" - -#: ../../src/appx/blog/spec.rst:430 -msgid "article update" -msgstr "оновлення статті" - -#: ../../src/appx/blog/spec.rst:431 -msgid "article comment (create a related comment)" -msgstr "коментування статті (створення коментаря)" - -#: ../../src/appx/blog/spec.rst:432 -msgid "article deletion" -msgstr "видалення статті" - -#: ../../src/appx/blog/spec.rst:434 -msgid "Only authenticated users can create articles." -msgstr "Лише аутентифіковані користувачі можуть створювати статі." - -#: ../../src/appx/blog/spec.rst:435 -msgid "Article can be edited only by its author." -msgstr "Стаття може редагуватись лише її автором." - -#: ../../src/appx/blog/spec.rst:436 -msgid "Article can be deleted only by its author." -msgstr "Стаття може видалятись лише її автором." - -#: ../../src/appx/blog/spec.rst:437 -msgid "Only authenticated users can comment articles." -msgstr "Лише аутентифіковані користувачі можуть коментувати статті." - -#: ../../src/appx/blog/spec.rst:444 -msgid "Challenge: Class-Based Views" -msgstr "Завдання: Class-Based Views" - -#: ../../src/appx/blog/spec.rst:446 -msgid "Replace **all** existing views via ``CBV``." -msgstr "Замінити **всі** існуючі перегляди через ``CBV``." - -#: ../../src/appx/blog/spec.rst:447 -msgid "Existing functionality should not be corrupted." -msgstr "Існуюча функціональність не повинна бути пошкоджена." - -#: ../../src/appx/blog/spec.rst:450 -msgid "It's ok to use built-in Django CBV if needed." -msgstr "" -"Якщо потрібно, можна використовувати вбудовані класи відображення у Django " -"(CBV)." - -#: ../../src/appx/blog/spec.rst:453 -msgid "Challenge: Serializers" -msgstr "Завдання: Серіалізатори" - -#: ../../src/appx/blog/spec.rst:457 -msgid "" -"Topic serializer is for read-only purposes only. Topics can be created via " -"admin page only." -msgstr "" -"Серіалізатор для теми призначений лише для операцій читання (read-only). " -"Теми можна створювати лише через адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:459 -msgid "" -"Serialized data should contain all available data, e.g. ``pk``, ``title``, " -"``description``." -msgstr "" -"Серіалізовані дані повинні містити всю доступну інформацію, наприклад, " -"``pk``, ``title``, ``description``." - -#: ../../src/appx/blog/spec.rst:464 -msgid "" -"article comment serializer can perform both reading and writing operations. " -"But it can't be used to *update* or *delete* comment." -msgstr "" -"серіалізатор коментаря статті може виконувати як операції читання, так і " -"операції запису. Проте він не може використовуватися для оновлення або " -"видалення коментаря." - -#: ../../src/appx/blog/spec.rst:466 -msgid "" -"Random, or pre-defined user may be used as comment's author for now. This " -"will be fixed in the future." -msgstr "" -"Наразі можна використовувати випадкового або попередньо визначеного " -"користувача як автора коментаря. Це буде виправлено у майбутньому." - -#: ../../src/appx/blog/spec.rst:471 -msgid "" -"article serializer provides full access to articles. All operations are " -"available: list, retrieve, create, update and destroy." -msgstr "" -"серіалізатор статей надає повний доступ до статей. Доступні всі операції: " -"отримання списку, отримання окремої статті, створення нової статті, " -"оновлення та видалення." - -#: ../../src/appx/blog/spec.rst:475 -msgid "User" -msgstr "Користувач" - -#: ../../src/appx/blog/spec.rst:476 -msgid "" -"User serializer provides full access to site users data. All operations are " -"available for now: list, retrieve, create, update and destroy. This behavior " -"will be fixed in the future, to prevent unauthorized data modifications." -msgstr "" -"Серіалізатор користувача надає повний доступ до даних користувачів сайту. " -"Усі операції доступні наразі: отримання списку користувачів, отримання " -"окремого користувача, створення нового користувача, оновлення та видалення. " -"Однак, ця поведінка буде виправлена у майбутньому для запобігання " -"несанкціонованим змінам даних." - -#: ../../src/appx/blog/spec.rst:482 -msgid "Challenge: API views" -msgstr "Завдання: API views" - -#: ../../src/appx/blog/spec.rst:484 -msgid "All blog-site functionality are to be mirrored via REST API." -msgstr "" -"Вся функціональність сайту повинна бути відображена за допомогою REST API." - -#: ../../src/appx/blog/spec.rst:487 -msgid "" -"It's ok to pass *pre-defined* user as argument in request's body. This will " -"be fixed in the next challenge." -msgstr "" -"Наразі дозволяється передавати *наперед визначеного* користувача у тілі " -"запиту. Це буде виправлено у наступному розділі." - -#: ../../src/appx/blog/spec.rst:491 -msgid "Challenge: Authentication and Permissions" -msgstr "Завдання: Автентифікація та Дозволи" - -#: ../../src/appx/blog/spec.rst:493 -msgid "Implement authentication system for REST API." -msgstr "Реалізуйте систему аутентифікації для REST API." - -#: ../../src/appx/blog/spec.rst:495 -msgid "For non-authenticated users it is possible to create a new account" -msgstr "" -"Для неаутентифікованих користувачів можлива створення нового облікового " -"запису" - -#: ../../src/appx/blog/spec.rst:496 -msgid "" -"For non-authenticated users it is possible to obtain authentication data." -msgstr "" -"Для неаутентифікованих користувачів можлива отримання даних аутентифікації." - -#: ../../src/appx/blog/spec.rst:499 -msgid "" -"Access to user data is restricted. Authorized users can manipulate only " -"their own data (e.g. ``retrieve``, ``update``)." -msgstr "" -"Доступ до даних користувача обмежений. Авторизовані користувачі можуть " -"маніпулювати лише своїми власними даними (наприклад, ``retrieve``, " -"``update``)." - -#: ../../src/appx/blog/spec.rst:501 -msgid "" -"Admins can retrieve all users data (``list``), but can't change them via " -"REST API. However, it is still possible via admin page." -msgstr "" -"Адміністратори можуть отримати дані всіх користувачів (``list``), але не " -"можуть змінювати їх через REST API. Однак це все ще можливо через " -"адміністративну сторінку." - -#: ../../src/appx/blog/spec.rst:503 -msgid "" -"Authorized users can ``create`` articles or ``update`` and ``delete`` " -"articles created by them." -msgstr "" -"Авторизовані користувачі можуть ``create`` статті або ``update`` та " -"``delete`` статті, створені ними." - -#: ../../src/appx/blog/spec.rst:505 -msgid "Authorized users can add comments to a specified article." -msgstr "Авторизовані користувачі можуть додавати коментарі до вказаної статті." - -#: ../../src/appx/blog/spec.rst:506 -msgid "Authorized users can adjust their topics preferences." -msgstr "" -"Авторизовані користувачі можуть налаштовувати свої уподобання щодо тем." diff --git a/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po b/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po deleted file mode 100644 index e131f1d55..000000000 --- a/src/_locales/uk/LC_MESSAGES/appx/libms/spec.po +++ /dev/null @@ -1,1187 +0,0 @@ -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# SERHII HORODILOV -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:06+0300\n" -"Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" - -#: ../../src/appx/libms/spec.rst:3 -msgid "Library Management System" -msgstr "Система Керування Бібліотекою" - -#: ../../src/appx/libms/spec.rst:5 -msgid "" -"The Library Management System is a Django-based web application that offers " -"a digital platform for managing and interacting with a library's collection. " -"It streamlines the processes of book lending, returns, and inventory " -"management, while ensuring easy access for users and librarians alike. " -"Through this system, users can search for available books, place borrowing " -"requests, and manage their borrowed items. Librarians, on the other hand, " -"oversee the addition, update, and removal of book records, and can approve " -"or decline borrowing requests. The system also supports diverse user roles, " -"from regular members to staff and administrators, each with distinct " -"capabilities." -msgstr "" -"Система Керування Бібліотекою є веб-застосуванням на базі Django, яке " -"пропонує цифрову платформу для управління та взаємодії з колекцією " -"бібліотеки. Вона оптимізує процеси надання книг, повернення та управління " -"інвентарем, забезпечуючи легкий доступ як для користувачів, так і для " -"бібліотекарів. За допомогою цієї системи користувачі можуть шукати доступні " -"книги, робити запити на позику та керувати позиченими предметами. " -"Бібліотекарі, з свого боку, контролюють додавання, оновлення та видалення " -"записів книг та можуть схвалювати або відхиляти запити на позику. Система " -"також підтримує різноманітні ролі користувачів, від звичайних членів до " -"персоналу та адміністраторів, кожен з яких має відмінні можливості." - -#: ../../src/appx/libms/spec.rst:15 -msgid "" -"A well-structured user interface ensures that all functionalities are easily " -"accessible, making the library management process seamless and efficient. " -"This project aims to merge traditional library functions with modern " -"technological innovations, promoting efficiency and an enhanced user " -"experience." -msgstr "" -"Добре структурований користувацький інтерфейс забезпечує легкий доступ до " -"всіх функцій, роблячи процес управління бібліотекою безперешкодним та " -"ефективним. Цей проект має на меті об'єднати традиційні бібліотечні функції " -"з сучасними технологічними інноваціями, сприяючи підвищенню ефективності та " -"покращенню користувацького досвіду." - -#: ../../src/appx/libms/spec.rst:22 -msgid "User roles" -msgstr "Ролі користувачів" - -#: ../../src/appx/libms/spec.rst:25 -msgid "" -"It is essential for developers to consider security aspects when " -"implementing these roles to ensure that users cannot perform actions outside " -"their designated role's scope." -msgstr "" -"Розробникам важливо враховувати аспекти безпеки при впровадженні цих ролей, " -"щоб гарантувати, що користувачі не зможуть виконувати дії, які виходять за " -"рамки призначеної їм ролі." - -#: ../../src/appx/libms/spec.rst:30 -msgid "Admins" -msgstr "Адміністратори" - -#: ../../src/appx/libms/spec.rst:32 -msgid "" -"Superusers have full control over the entire system. They can access and " -"manage all functionalities provided by the Django admin site." -msgstr "" -"Адміністратори мають повний контроль над усією системою. Вони можуть " -"отримати доступ до всіх функцій, що надаються адмін-сайтом Django, і " -"керувати ними." - -#: ../../src/appx/libms/spec.rst:35 -msgid "Admins can create, modify, or delete any record within the application." -msgstr "" -"Адміністратори можуть створювати, змінювати або видаляти будь-які записи в " -"додатку." - -#: ../../src/appx/libms/spec.rst:38 ../../src/appx/libms/spec.rst:49 -#: ../../src/appx/libms/spec.rst:68 ../../src/appx/libms/spec.rst:82 -msgid "Capabilities" -msgstr "Можливості" - -#: ../../src/appx/libms/spec.rst:39 -msgid "Access Django admin site" -msgstr "Доступ до адміністративного сайту Django" - -#: ../../src/appx/libms/spec.rst:42 -msgid "Librarians" -msgstr "Бібліотекарі" - -#: ../../src/appx/libms/spec.rst:44 -msgid "" -"Staff personnel are in charge of day-to-day operations within the library. " -"They can add new books to the library's collection, manage existing books' " -"details, and accept or decline borrow requests from regular users." -msgstr "" -"Працівники бібліотеки відповідають за повсякденну роботу в бібліотеці. Вони " -"можуть додавати нові книги до бібліотечної колекції, керувати даними про " -"наявні книги, а також приймати або відхиляти запити від постійних " -"користувачів." - -#: ../../src/appx/libms/spec.rst:50 -msgid "Management of the library catalogue" -msgstr "Управління бібліотечним каталогом" - -#: ../../src/appx/libms/spec.rst:52 -msgid "Add, modify or delete authors" -msgstr "Додавати, змінювати або видаляти авторів" - -#: ../../src/appx/libms/spec.rst:53 -msgid "Add, modify or delete genres" -msgstr "Додавати, змінювати або видаляти жанри" - -#: ../../src/appx/libms/spec.rst:54 -msgid "Add, modify or delete books' details" -msgstr "Додавати, змінювати або видаляти дані про книги" - -#: ../../src/appx/libms/spec.rst:56 -msgid "Review borrow requests from regular users" -msgstr "Переглядати запити на позичення від користувачів" - -#: ../../src/appx/libms/spec.rst:57 -msgid "Accept or decline borrow requests" -msgstr "Приймати або відхиляти запити на позичення" - -#: ../../src/appx/libms/spec.rst:58 -msgid "Register returned books and update their status" -msgstr "Реєструвати повернені книги та оновлювати їх статус" - -#: ../../src/appx/libms/spec.rst:61 -msgid "Regular" -msgstr "Звичайний" - -#: ../../src/appx/libms/spec.rst:63 -msgid "" -"Regular registered users are the members of the library. They can search " -"books, request to borrow them, and are responsible for returning borrowed " -"books on time." -msgstr "" -"Постійні зареєстровані користувачі є членами бібліотеки. Вони можуть шукати " -"книги, запитувати їх, а також несуть відповідальність за своєчасне " -"повернення позичених книг." - -#: ../../src/appx/libms/spec.rst:69 ../../src/appx/libms/spec.rst:83 -msgid "Browse the books' catalogue" -msgstr "Переглядати каталог книг" - -#: ../../src/appx/libms/spec.rst:70 ../../src/appx/libms/spec.rst:84 -msgid "View details of a book" -msgstr "Переглядати деталі книги" - -#: ../../src/appx/libms/spec.rst:71 ../../src/appx/libms/spec.rst:85 -msgid "Search books" -msgstr "Шукати книги" - -#: ../../src/appx/libms/spec.rst:72 -msgid "Request to borrow available books" -msgstr "Робити запит на позичення доступних книжок" - -#: ../../src/appx/libms/spec.rst:73 -msgid "Check due date for returned books" -msgstr "Перевіряти термін повернення запозичених книжок" - -#: ../../src/appx/libms/spec.rst:74 -msgid "Return borrowed books" -msgstr "Повертати запозичені книги" - -#: ../../src/appx/libms/spec.rst:77 -msgid "Anonymous" -msgstr "Анонімні" - -#: ../../src/appx/libms/spec.rst:79 -msgid "Anonymous users are visitors who haven't logged into the system." -msgstr "Анонімні користувачі - це відвідувачі, які не ввійшли в систему." - -#: ../../src/appx/libms/spec.rst:86 -msgid "Access to the registration or login pages" -msgstr "Доступ до сторінок реєстрації або входу" - -#: ../../src/appx/libms/spec.rst:90 -msgid "Models" -msgstr "Моделі" - -#: ../../src/appx/libms/spec.rst:93 -msgid "Author model" -msgstr "Модель авторів" - -#: ../../src/appx/libms/spec.rst:95 -msgid "" -"The ``Author`` model captures the details of the person, or group " -"responsible for creating the book." -msgstr "" -"Модель ``Author`` фіксує інформацію про особу або групу осіб, відповідальних " -"за створення книги." - -#: ../../src/appx/libms/spec.rst:99 ../../src/appx/libms/spec.rst:116 -#: ../../src/appx/libms/spec.rst:128 ../../src/appx/libms/spec.rst:170 -msgid "Attributes" -msgstr "Атрибути" - -#: ../../src/appx/libms/spec.rst -msgid "Name" -msgstr "Name" - -#: ../../src/appx/libms/spec.rst:102 -msgid "The full name of the author. This should be limited to 255 characters." -msgstr "Повне ім'я автора. Не більше 255 символів." - -#: ../../src/appx/libms/spec.rst -msgid "Bio" -msgstr "Bio" - -#: ../../src/appx/libms/spec.rst:105 -msgid "A brief biography or description of the author." -msgstr "Коротка біографія або опис автора." - -#: ../../src/appx/libms/spec.rst:108 -msgid "Genre model" -msgstr "Модель жанра" - -#: ../../src/appx/libms/spec.rst:110 -msgid "" -"The ``Genre`` model represents the category or type of content a book " -"belongs to, such as \"Fiction\", \"Non-fiction\", \"Science\", \"Romance\" " -"etc. Since a book can belong to more than one category at a time, it is " -"implemented as a dedicated model." -msgstr "" -"Модель ``Genre`` представляє категорію або тип контенту, до якого належить " -"книга, наприклад, \"Художня література\", \"Нехудожня література\", " -"\"Наука\", \"Романтика\" тощо. Оскільки книга може належати до кількох " -"категорій одночасно, вона реалізована як окрема модель." - -#: ../../src/appx/libms/spec.rst:118 -msgid "The name of the genre." -msgstr "Назва жанру." - -#: ../../src/appx/libms/spec.rst:121 -msgid "Book model" -msgstr "Модель книги" - -#: ../../src/appx/libms/spec.rst:123 -msgid "" -"The ``Book`` model represents a physical book in the library's collection. " -"Each book record captures essential bibliographic information, as well as " -"details related to its current status in the library (e.g. available, " -"borrowed etc.)." -msgstr "" -"Модель ``Book`` представляє фізичну книгу в бібліотечній колекції. Кожен " -"запис про книгу містить основну бібліографічну інформацію, а також деталі, " -"пов'язані з її поточним статусом у бібліотеці (наприклад, доступна, позичена " -"тощо)." - -#: ../../src/appx/libms/spec.rst -msgid "Title" -msgstr "Title" - -#: ../../src/appx/libms/spec.rst:131 -msgid "The name or title of the book (255 characters or fewer)." -msgstr "Назва книги (255 символів або менше)." - -#: ../../src/appx/libms/spec.rst -msgid "Summary" -msgstr "Summary" - -#: ../../src/appx/libms/spec.rst:134 -msgid "A brief description or synopsis of the book." -msgstr "Короткий опис або синопсис книги." - -#: ../../src/appx/libms/spec.rst -msgid "ISBN" -msgstr "ISBN" - -#: ../../src/appx/libms/spec.rst:137 -msgid "International Standard Book Number, a unique identifier for books." -msgstr "" -"International Standard Book Number, унікальний ідентифікатор для книг.." - -#: ../../src/appx/libms/spec.rst -msgid "Available" -msgstr "Available" - -#: ../../src/appx/libms/spec.rst:140 -msgid "" -"Current available status of the book. Either ``True`` or ``False``. Books " -"are available by default." -msgstr "" -"Поточний статус доступності книги. Або ``True``, або ``False``. За " -"замовчуванням книги доступні." - -#: ../../src/appx/libms/spec.rst -msgid "Published date" -msgstr "Published date" - -#: ../../src/appx/libms/spec.rst:144 -msgid "The date when the book was published." -msgstr "Дата, коли книга була опублікована." - -#: ../../src/appx/libms/spec.rst -msgid "Publisher" -msgstr "Publisher" - -#: ../../src/appx/libms/spec.rst:147 -msgid "" -"The entity or company responsible for the production and distribution of the " -"book." -msgstr "" -"Організація або компанія, відповідальна за виробництво та розповсюдження " -"книги." - -#: ../../src/appx/libms/spec.rst -msgid "Genre(s)" -msgstr "Genre(s)" - -#: ../../src/appx/libms/spec.rst:151 -msgid "" -"The category or type of content the book falls under (e.g., Fiction, Non-" -"Fiction, Science)." -msgstr "" -"Категорія або тип контенту, до якого належить книга (наприклад, художня " -"література, нон-фікшн, наукова література)." - -#: ../../src/appx/libms/spec.rst -msgid "Author(s)" -msgstr "Author(s)" - -#: ../../src/appx/libms/spec.rst:156 -msgid "" -"The name of the person or group responsible for creating the content of the " -"book." -msgstr "Ім'я особи або групи осіб, відповідальних за створення змісту книги." - -#: ../../src/appx/libms/spec.rst -msgid "Borrower" -msgstr "Borrower" - -#: ../../src/appx/libms/spec.rst:160 -msgid "The user who has currently borrowed the book, if applicable." -msgstr "Користувач, який наразі позичив книгу, якщо це можливо." - -#: ../../src/appx/libms/spec.rst:163 -msgid "Borrow request model" -msgstr "Модель запиту на позику" - -#: ../../src/appx/libms/spec.rst:165 -msgid "" -"The ``BorrowRequest`` model captures the intent of a user to borrow a " -"specific book. It tracks the status of the request, whether it's pending, " -"approved, declined, or completed." -msgstr "" -"Модель ``BorrowRequest`` фіксує намір користувача взяти конкретну книгу. " -"Вона відстежує статус запиту: очікує, схвалений, відхилений чи завершений." - -#: ../../src/appx/libms/spec.rst -msgid "Book" -msgstr "Book" - -#: ../../src/appx/libms/spec.rst:173 -msgid "A reference to a book to be borrowed." -msgstr "Посилання на книгу, яку потрібно взяти." - -#: ../../src/appx/libms/spec.rst:176 -msgid "A reference to a user who wants to borrow a book." -msgstr "Посилання на користувача, який хоче взяти книгу." - -#: ../../src/appx/libms/spec.rst -msgid "Status" -msgstr "Status" - -#: ../../src/appx/libms/spec.rst:179 -msgid "The current status of the request." -msgstr "Поточний статус заявки." - -#: ../../src/appx/libms/spec.rst:181 -msgid "pending" -msgstr "pending" - -#: ../../src/appx/libms/spec.rst:182 -msgid "approved" -msgstr "approved" - -#: ../../src/appx/libms/spec.rst:183 -msgid "collected" -msgstr "collected" - -#: ../../src/appx/libms/spec.rst:184 -msgid "complete" -msgstr "complete" - -#: ../../src/appx/libms/spec.rst:185 -msgid "declined" -msgstr "declined" - -#: ../../src/appx/libms/spec.rst:187 -msgid "" -"The status constants should be encapsulated within the ``BorrowRequest`` " -"model." -msgstr "" -"Константи стану повинні бути інкапсульовані в моделі ``BorrowRequest``." - -#: ../../src/appx/libms/spec.rst -msgid "Overdue" -msgstr "Overdue" - -#: ../../src/appx/libms/spec.rst:202 -msgid "A flag indicating if a borrow request was overdue." -msgstr "Прапорець, що вказує на те, чи був запит на позику прострочений." - -#: ../../src/appx/libms/spec.rst -msgid "Request date" -msgstr "Request date" - -#: ../../src/appx/libms/spec.rst:205 -msgid "The date the borrow request was made. This is required." -msgstr "Дата подання запиту на позику. Це обов'язкова інформація." - -#: ../../src/appx/libms/spec.rst -msgid "Approval date" -msgstr "Approval date" - -#: ../../src/appx/libms/spec.rst:208 -msgid "The date the request was approved, if applicable. Optional." -msgstr "Дата схвалення запиту, якщо це можливо. Необов'язково." - -#: ../../src/appx/libms/spec.rst -msgid "Due date" -msgstr "Due date" - -#: ../../src/appx/libms/spec.rst:211 -msgid "" -"The date by which the book should be returned. Optional, should only be set " -"if the request if approved." -msgstr "" -"Дата, до якої книга має бути повернута. Необов'язкова, має бути вказана лише " -"у разі схвалення запиту." - -#: ../../src/appx/libms/spec.rst -msgid "Complete date" -msgstr "Complete date" - -#: ../../src/appx/libms/spec.rst:215 -msgid "" -"The date the book was returned and the borrowing request was completed. " -"Optional, should only be set if the request has reached the \"Complete\" " -"status." -msgstr "" -"Дата повернення книги та завершення запиту на позику. Необов'язкова, має " -"бути встановлена тільки якщо запит досяг статусу \"Завершено\"." - -#: ../../src/appx/libms/spec.rst:220 -msgid "Relationships" -msgstr "Відносини" - -#: ../../src/appx/libms/spec.rst:228 -msgid "Book to author" -msgstr "Книга до автору" - -#: ../../src/appx/libms/spec.rst:230 -msgid "" -"Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " -"can have **one or more** ``authors``. This establishes a **many-to-many** " -"relationship between the two entities." -msgstr "" -"Кожен ``Автор`` може бути пов'язаний з декількома ``Книгами``, а кожна " -"``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " -"**багато-до-багатьох** між цими двома сутностями." - -#: ../../src/appx/libms/spec.rst:235 -msgid "Book to genre" -msgstr "Книга до жанру" - -#: ../../src/appx/libms/spec.rst:237 -msgid "" -"Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " -"However a ``Book`` might not belong to any genre. This relationship between " -"``Genre`` and ``Book`` is still considered **many-to-many**, but with the " -"possibility of zero genres for a book." -msgstr "" -"Кожен ``Жанр`` може бути пов'язаний з декількома ``Книгами``, і навпаки. " -"Однак ``Книга`` може не належати до жодного жанру. Цей зв'язок між " -"``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " -"можливістю нульових жанрів для книги." - -#: ../../src/appx/libms/spec.rst:243 -msgid "Book to borrow request" -msgstr "Книга до запиту на позику" - -#: ../../src/appx/libms/spec.rst:245 -msgid "" -"Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " -"``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " -"relationship." -msgstr "" -"Кожна ``Книга`` може бути пов'язана з декількома ``Запитами на позику``, але " -"кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " -"зв'язок **багато-до-одного**." - -#: ../../src/appx/libms/spec.rst:250 -msgid "User to borrow request" -msgstr "Користувач до запиту на позику" - -#: ../../src/appx/libms/spec.rst:252 -msgid "" -"Each ``User`` can make multiple ``BorrowRequests``, but each " -"``BorrowRequest`` refers to only one book, forming a **many-to-one** " -"relationship." -msgstr "" -"Кожен ``Користувач`` може зробити кілька ``Запитів на позику``, але кожен " -"``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " -"``багато до однієї``." - -#: ../../src/appx/libms/spec.rst:256 -msgid "User to book (as a borrower)" -msgstr "Користувач до книги (як запозичувач)" - -#: ../../src/appx/libms/spec.rst:258 -msgid "" -"A ``Book`` may have been borrowed by a ``User``, but at any given time, each " -"``Book`` can be borrowed by one user only. This forms a **one-to-one** " -"relationship." -msgstr "" -"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " -"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " -"відносини \"один до одного\"." - -#: ../../src/appx/libms/spec.rst:264 -msgid "Views and templates" -msgstr "Подання та шаблони" - -#: ../../src/appx/libms/spec.rst:267 -msgid "Admin site" -msgstr "Адмін-сайт" - -#: ../../src/appx/libms/spec.rst:269 -msgid "" -"Admin site provides the full control over the entire system. Only admins are " -"permitted to use admin site. Librarians should use their dedicated views to " -"perform operations, except special cases." -msgstr "" -"Адмін-сайт забезпечує повний контроль над всією системою. Тільки " -"адміністратори мають право користуватися сайтом адміністратора. Бібліотекарі " -"повинні використовувати свої виділені подання для виконання операцій, за " -"винятком особливих випадків." - -#: ../../src/appx/libms/spec.rst:275 -msgid "Authentication" -msgstr "Автентифікація" - -#: ../../src/appx/libms/spec.rst:278 -msgid "Login" -msgstr "Логін" - -#: ../../src/appx/libms/spec.rst:281 ../../src/appx/libms/spec.rst:293 -#: ../../src/appx/libms/spec.rst:324 ../../src/appx/libms/spec.rst:344 -#: ../../src/appx/libms/spec.rst:371 ../../src/appx/libms/spec.rst:495 -#: ../../src/appx/libms/spec.rst:512 -msgid "Template" -msgstr "Template" - -#: ../../src/appx/libms/spec.rst:282 -msgid "" -"A form with fields for entering a username and a password, and a submit " -"button." -msgstr "" -"Форма з полями для введення імені користувача та пароля, а також кнопкою " -"\"Надіслати\"." - -#: ../../src/appx/libms/spec.rst:285 ../../src/appx/libms/spec.rst:303 -#: ../../src/appx/libms/spec.rst:329 ../../src/appx/libms/spec.rst:353 -#: ../../src/appx/libms/spec.rst:390 ../../src/appx/libms/spec.rst:476 -#: ../../src/appx/libms/spec.rst:499 -msgid "View logic" -msgstr "View logic" - -#: ../../src/appx/libms/spec.rst:286 -msgid "" -"Validate entered credentials and authenticate the user. In case of incorrect " -"credentials, display an error message." -msgstr "" -"Перевірити введені облікові дані та автентифікувати користувача. У разі " -"неправильних облікових даних вивести повідомлення про помилку." - -#: ../../src/appx/libms/spec.rst:290 -msgid "Registration" -msgstr "Реєстрація" - -#: ../../src/appx/libms/spec.rst:294 -msgid "A form for new user registration. **Required** fields are:" -msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" - -#: ../../src/appx/libms/spec.rst:296 -msgid "username" -msgstr "username" - -#: ../../src/appx/libms/spec.rst:297 -msgid "first name" -msgstr "first name" - -#: ../../src/appx/libms/spec.rst:298 -msgid "last name" -msgstr "last name" - -#: ../../src/appx/libms/spec.rst:299 -msgid "password" -msgstr "password" - -#: ../../src/appx/libms/spec.rst:300 -msgid "confirm password" -msgstr "confirm password" - -#: ../../src/appx/libms/spec.rst:304 -msgid "Upon submission, the view should validate the provided data:" -msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" - -#: ../../src/appx/libms/spec.rst:306 -msgid "Check if username is already taken." -msgstr "Перевірте, чи не зайнято вже ім'я користувача." - -#: ../../src/appx/libms/spec.rst:307 -msgid "Ensure that password and confirm password fields match." -msgstr "" -"Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." - -#: ../../src/appx/libms/spec.rst:308 -msgid "" -"Save the user's data if all validations pass. Otherwise, display appropriate " -"error messages." -msgstr "" -"Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " -"відобразити відповідні повідомлення про помилки." - -#: ../../src/appx/libms/spec.rst:311 -msgid "" -"When saving passwords in the database, always store them in a hashed format, " -"never in plain text." -msgstr "" -"Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " -"не у вигляді простого тексту." - -#: ../../src/appx/libms/spec.rst:315 -msgid "" -"Django's built-in ``User`` model and authentication system handle password " -"hashing by default, which is a big plus." -msgstr "" -"Вбудована в Django модель ``User`` та система автентифікації за " -"замовчуванням обробляє хешування паролів, що є великим плюсом." - -#: ../../src/appx/libms/spec.rst:319 -msgid "Borrowing History" -msgstr "Історія запозичень" - -#: ../../src/appx/libms/spec.rst:321 -msgid "This view is available only for authenticated users." -msgstr "Це подання доступне лише для авторизованих користувачів." - -#: ../../src/appx/libms/spec.rst:325 -msgid "" -"Users can see the list of **all** their borrows requests, regardless of " -"approve/decline status." -msgstr "" -"Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " -"від статусу схвалення/відхилення." - -#: ../../src/appx/libms/spec.rst:330 -msgid "Authenticated users can see only their own borrow requests." -msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." - -#: ../../src/appx/libms/spec.rst:331 -msgid "" -"Librarians and admins can access borrows requests list for any user, " -"registered in the library system." -msgstr "" -"Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " -"будь-якого користувача, зареєстрованого в бібліотечній системі." - -#: ../../src/appx/libms/spec.rst:335 -msgid "Library collection" -msgstr "Бібліотечний фонд" - -#: ../../src/appx/libms/spec.rst:337 -msgid "" -"These views are generally available for all (including anonymous) users. The " -"functionality for authenticated users include books borrowing." -msgstr "" -"Ці перегляди загалом доступні для всіх (в тому числі анонімних) " -"користувачів. Функціонал для аутентифікованих користувачів включає в себе " -"можливість позичати книги." - -#: ../../src/appx/libms/spec.rst:341 -msgid "Books list" -msgstr "Список літератури" - -#: ../../src/appx/libms/spec.rst:345 -msgid "A list (or table) of books. Each book entry should provide information:" -msgstr "" -"Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " -"книгу:" - -#: ../../src/appx/libms/spec.rst:347 -msgid "title" -msgstr "title" - -#: ../../src/appx/libms/spec.rst:348 -msgid "author(s)" -msgstr "автор(и)" - -#: ../../src/appx/libms/spec.rst:349 -msgid "summary (truncated if too long, 30 words or fewer)" -msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" - -#: ../../src/appx/libms/spec.rst:350 -msgid "availability status (either **Available** or **Unavailable**)" -msgstr "статус доступності (**Доступний** або **Не доступний**)" - -#: ../../src/appx/libms/spec.rst:354 -msgid "Querying the data" -msgstr "Запит даних" - -#: ../../src/appx/libms/spec.rst:356 -msgid "Fetch **all** books from the database" -msgstr "Отримати **усі** книги з бази даних" - -#: ../../src/appx/libms/spec.rst:358 -msgid "Checking availability status (visual mark)" -msgstr "Перевірка статусу доступності (візуальна позначка)" - -#: ../../src/appx/libms/spec.rst:360 -msgid "" -"For each book, determine its availability status. Check ``Book.available`` " -"flag." -msgstr "" -"Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." -"available``." - -#: ../../src/appx/libms/spec.rst:364 -msgid "" -"A user can still create a borrowing request, regardless of the book " -"availability status. This is only the visual mark." -msgstr "" -"Користувач все одно може створити запит на позику, незалежно від статусу " -"доступності книги. Це лише візуальна позначка." - -#: ../../src/appx/libms/spec.rst:368 -msgid "Detail view" -msgstr "Детальний перегляд" - -#: ../../src/appx/libms/spec.rst:372 -msgid "" -"The detailed view of a specific book, presenting comprehensive information:" -msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" - -#: ../../src/appx/libms/spec.rst:374 -msgid "**Title**: Display the book's title prominently." -msgstr "**Назва**: Покажіть назву книги на видному місці." - -#: ../../src/appx/libms/spec.rst:375 -msgid "**Genre(s)**: List all associated genres (if any)." -msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." - -#: ../../src/appx/libms/spec.rst:376 -msgid "**Author(s)**: List all associated authors." -msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." - -#: ../../src/appx/libms/spec.rst:377 -msgid "**ISBN**: The International Standard Book Number." -msgstr "**ISBN**: Міжнародний стандартний номер книги." - -#: ../../src/appx/libms/spec.rst:378 -msgid "**Published Date**: When the book was published." -msgstr "**Дата публікації**: Коли вийшла друком книга." - -#: ../../src/appx/libms/spec.rst:379 -msgid "" -"**Publisher**: The name of the entity or company responsible for publishing" -msgstr "" -"**Видавець**: Назва організації або компанії, відповідальної за публікацію" - -#: ../../src/appx/libms/spec.rst:380 -msgid "**Summary**: A full summary or description of the book. the book." -msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." - -#: ../../src/appx/libms/spec.rst:382 -msgid "**Action Buttons** (For authenticated users only):" -msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" - -#: ../../src/appx/libms/spec.rst:384 -msgid "" -"**Borrow Request Button**: If the user has no associated borrow request they " -"can create a new one." -msgstr "" -"**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " -"позику, він може створити новий." - -#: ../../src/appx/libms/spec.rst:386 -msgid "" -"**Gather Book Button**: If the user's borrow request for this book has been " -"approved, allow the user to confirm they've picked up the book." -msgstr "" -"**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " -"схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." - -#: ../../src/appx/libms/spec.rst:391 -msgid "**Fetching Book Details**:" -msgstr "**Доступ до деталей книги**:" - -#: ../../src/appx/libms/spec.rst:393 -msgid "" -"Use the book's identifier (usually a primary key) to fetch its details from " -"the database." -msgstr "" -"Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " -"інформацію про неї з бази даних." - -#: ../../src/appx/libms/spec.rst:396 -msgid "**Checking User Authentication**:" -msgstr "**Перевірка автентичності користувача**:" - -#: ../../src/appx/libms/spec.rst:398 -msgid "" -"Determine if a user is authenticated. If they are, display the appropriate " -"action buttons based on the book's availability status and any existing " -"borrow requests by the user." -msgstr "" -"Визначити, чи користувач автентифікований. Якщо так, відобразити відповідні " -"кнопки дій на основі статусу доступності книги та наявних запитів " -"користувача на позику." - -#: ../../src/appx/libms/spec.rst:402 -msgid "**Handling Borrow Requests**:" -msgstr "**Обробка запитів на позику**:" - -#: ../../src/appx/libms/spec.rst:404 -msgid "If an authenticated user clicks on the \"Borrow Request\" button:" -msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" - -#: ../../src/appx/libms/spec.rst:406 -msgid "" -"Create a new borrow request in the ``BorrowRequest`` model with status " -"\"pending\"." -msgstr "" -"Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " -"розгляді\"." - -#: ../../src/appx/libms/spec.rst:408 -msgid "Update the book's status to \"Awaiting approval\"." -msgstr "Оновіть статус книги на \"Очікує затвердження\"." - -#: ../../src/appx/libms/spec.rst:409 -msgid "" -"Redirect the user to a confirmation page or display a message indicating the " -"request has been made." -msgstr "" -"Перенаправлення користувача на сторінку підтвердження або відображення " -"повідомлення про те, що запит було зроблено." - -#: ../../src/appx/libms/spec.rst:412 -msgid "**Handling Book Gathering**:" -msgstr "**Опрацювання Позики Книги**:" - -#: ../../src/appx/libms/spec.rst:414 -msgid "" -"If an authenticated user has an approved borrow request and clicks the " -"\"Gather Book\" button:" -msgstr "" -"Якщо авторизований користувач має схвалений запит на позику і натискає " -"кнопку \"Зібрати книгу\":" - -#: ../../src/appx/libms/spec.rst:417 -msgid "Update the book's status to \"Borrowed\"." -msgstr "Оновіть статус книги на \"Позичена\"." - -#: ../../src/appx/libms/spec.rst:418 -msgid "Update the borrow request's status to \"complete\"." -msgstr "Оновіть статус запиту на позику до \"завершено\"." - -#: ../../src/appx/libms/spec.rst:419 -msgid "" -"Redirect the user to a confirmation page or display a message indicating " -"they've picked up the book." -msgstr "" -"Перенаправляйте користувача на сторінку підтвердження або показуйте " -"повідомлення про те, що він забрав книгу." - -#: ../../src/appx/libms/spec.rst:423 -msgid "" -"Always ensure the user's actions are authenticated and authorized. This " -"prevents unauthorized borrow requests or gathering of books. Also, consider " -"adding error handling to manage cases where the book's details cannot be " -"fetched or any other unexpected issues." -msgstr "" -"Завжди переконуйтеся, що дії користувача автентифіковані та санкціоновані. " -"Це запобігає несанкціонованим запитам на позику або збору книг. Також " -"подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " -"отримати дані про книгу, або будь-яких інших непередбачуваних проблем." - -#: ../../src/appx/libms/spec.rst:429 -msgid "Books management" -msgstr "Управління книгами" - -#: ../../src/appx/libms/spec.rst:431 -msgid "These views are available only for staff (librarians and admins)." -msgstr "" -"Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." - -#: ../../src/appx/libms/spec.rst:434 -msgid "Authors and genres management" -msgstr "Управління авторами та жанрами" - -#: ../../src/appx/libms/spec.rst:436 -msgid "" -"Only librarians and admins can add, modify or delete authors and genres. No " -"additional views for CRUD operations required (except admin site). " -"Librarians are allowed to access authors and genres via admin site. Only " -"admins can remove authors or genres." -msgstr "" -"Тільки бібліотекарі та адміністратори можуть додавати, змінювати або " -"видаляти авторів і жанри. Для виконання CRUD-операцій не потрібні додаткові " -"перегляди (окрім адмін-сайту). Бібліотекарі мають доступ до авторів і жанрів " -"через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " -"жанри." - -#: ../../src/appx/libms/spec.rst:442 -msgid "Book creation and update" -msgstr "Створення та оновлення книг" - -#: ../../src/appx/libms/spec.rst:444 -msgid "" -"The template should comprise a form with fields corresponding to the book's " -"attributes. Here are the essential elements for the form:" -msgstr "" -"Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " -"основні елементи форми:" - -#: ../../src/appx/libms/spec.rst:448 ../../src/appx/libms/spec.rst:463 -msgid "A text input field." -msgstr "Поле для введення тексту." - -#: ../../src/appx/libms/spec.rst:451 -msgid "A textarea for a brief description or synopsis." -msgstr "Текстова область для короткого опису або синопсису." - -#: ../../src/appx/libms/spec.rst:454 -msgid "A text input field for the book's International Standard Book Number." -msgstr "Поле для введення міжнародного стандартного номера книги." - -#: ../../src/appx/libms/spec.rst:457 -msgid "A checkbox indicating if a book is available. Defaults to ``True``." -msgstr "" -"Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." - -#: ../../src/appx/libms/spec.rst:460 -msgid "A date input field." -msgstr "Поле для введення дати." - -#: ../../src/appx/libms/spec.rst -msgid "Genres" -msgstr "Жанри" - -#: ../../src/appx/libms/spec.rst:466 -msgid "" -"A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " -"fetch available genres from the database and allow users to select zero or " -"more genres." -msgstr "" -"Список жанрів з можливістю вибору (наприклад, випадаючий список, прапорці " -"тощо). Він повинен отримувати доступні жанри з бази даних і дозволяти " -"користувачам вибирати нуль або більше жанрів." - -#: ../../src/appx/libms/spec.rst -msgid "Authors" -msgstr "Автори" - -#: ../../src/appx/libms/spec.rst:471 -msgid "" -"A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " -"fetch available authors from the database and allow users to select one or " -"more authors." -msgstr "" -"Список авторів з можливістю вибору (наприклад, випадаючий список, прапорці " -"тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " -"користувачам вибирати одного або декількох авторів." - -#: ../../src/appx/libms/spec.rst:477 -msgid "" -"If it's an *update* action, pre-populate the form fields with the existing " -"details of the book fetched from the database." -msgstr "" -"Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " -"книги, отриманими з бази даних." - -#: ../../src/appx/libms/spec.rst:479 -msgid "For *creation*, provide an empty form for the librarian to fill in." -msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." - -#: ../../src/appx/libms/spec.rst:480 -msgid "Ensure the published date is logical (e.g. not a future date)." -msgstr "" -"Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " -"майбутнього)." - -#: ../../src/appx/libms/spec.rst:481 -msgid "Validate required inputs, according to general ``Book`` model rules." -msgstr "" -"Перевірити необхідні вхідні дані відповідно до загальних правил моделі " -"``Book``." - -#: ../../src/appx/libms/spec.rst:482 -msgid "" -"If validations pass: save changes to the database; otherwise, provide " -"helpful error messages." -msgstr "" -"Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " -"випадку надайте корисні повідомлення про помилки." - -#: ../../src/appx/libms/spec.rst:486 -msgid "" -"You MAY provide a mechanism (like modal or a quick entry form) to add a new " -"genre or author without leaving the book form page." -msgstr "" -"Ви МОЖЕТЕ надати механізм (наприклад, модальну форму або форму швидкого " -"введення) для додавання нового жанру або автора, не виходячи зі сторінки " -"форми книги." - -#: ../../src/appx/libms/spec.rst:490 -msgid "Book deletion" -msgstr "Видалення книги" - -#: ../../src/appx/libms/spec.rst:492 -msgid "" -"Only librarians and administrators are permitted to perform this action." -msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." - -#: ../../src/appx/libms/spec.rst:496 -msgid "A confirm delete form with **Submit** and **Cancel** buttons." -msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." - -#: ../../src/appx/libms/spec.rst:500 -msgid "Authorize user before deleting performing deletion." -msgstr "Авторизуйте користувача перед виконанням видалення." - -#: ../../src/appx/libms/spec.rst:501 -msgid "" -"If a form is submitted, a book should be removed from the library collection." -msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." - -#: ../../src/appx/libms/spec.rst:503 -msgid "" -"If deletion is canceled view should redirect back to book detail view page." -msgstr "" -"Якщо видалення скасовано, перегляд має бути перенаправлений назад на " -"сторінку детального перегляду книги." - -#: ../../src/appx/libms/spec.rst:506 -msgid "Borrow requests" -msgstr "Запити на позики" - -#: ../../src/appx/libms/spec.rst:508 -msgid "" -"This view facilitates the management of borrowing requests for librarians " -"and admins, aiding in their prompt handling." -msgstr "" -"Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " -"позики, допомагаючи оперативно їх обробляти." - -#: ../../src/appx/libms/spec.rst:513 -msgid "" -"Present a table showcasing the list of borrow requests. Each row embodies a " -"borrow request and encompasses:" -msgstr "" -"Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " -"відображає один запит на позику і включає в себе всі запити:" - -#: ../../src/appx/libms/spec.rst:516 -msgid "**Book Title**: Title of the requested book." -msgstr "**Назва книги**: Назва запитуваної книги." - -#: ../../src/appx/libms/spec.rst:517 -msgid "**User**: Identifier of the user who initiated the request." -msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." - -#: ../../src/appx/libms/spec.rst:518 -msgid "**Request Date**: Date of the request's inception." -msgstr "**Дата запиту**: Дата створення запиту." - -#: ../../src/appx/libms/spec.rst:519 -msgid "" -"**Due Date**: - Input field for librarians to set upon approval for new " -"requests. - For approved ones, display the librarian-set date." -msgstr "" -"**Дата виконання**: - Поле для введення бібліотекарями при затвердженні " -"нових запитів. - Для затверджених запитів відображатиметься дата, " -"встановлена бібліотекарем." - -#: ../../src/appx/libms/spec.rst:522 -msgid "" -"**Status**: Present state of the request (New, Approved, Completed, " -"Declined)." -msgstr "" -"**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " -"Відхилений)." - -#: ../../src/appx/libms/spec.rst:524 -msgid "" -"**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " -"and freezes the due date." -msgstr "" -"**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " -"статус на \"Затверджено\" і заморожує дату виконання." - -#: ../../src/appx/libms/spec.rst:526 -msgid "" -"**Decline Button**: Appears for new requests. Sets status to \"Declined\" " -"and can prompt for a decline reason." -msgstr "" -"**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " -"\"Відхилено\" і може запитувати причину відхилення." - -#: ../../src/appx/libms/spec.rst:528 -msgid "" -"**Complete Button**: Displayed for approved requests. Marks the request as " -"completed." -msgstr "" -"**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " -"запит як завершений." - -#: ../../src/appx/libms/spec.rst:532 -msgid "View Logic" -msgstr "View Logic" - -#: ../../src/appx/libms/spec.rst:533 -msgid "" -"**Approve Borrow Request**: - Validate book availability. - Modify book " -"status to \"Borrowed\". - Switch borrow request to \"Approved\". - " -"Define the return due date as per librarian. - Inform the user about the " -"approval and due date." -msgstr "" -"**Схвалити запит на позику**: - Підтвердити наявність книги. - Змінити " -"статус книги на \"Позичена\". - Переключіть запит на позику на " -"\"Затверджено\". - Визначте дату повернення відповідно до побажань " -"бібліотекаря. - Повідомте користувача про схвалення та дату повернення." - -#: ../../src/appx/libms/spec.rst:540 -msgid "" -"**Decline Borrow Request**: - Change borrow request status to " -"\"Declined\". - Optionally, procure decline reason from librarian. - " -"Notify user regarding the declination." -msgstr "" -"**Відхилити запит на позику**: - Змінити статус запиту на \"Відхилено\". - " -"За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " -"користувача про відхилення." - -#: ../../src/appx/libms/spec.rst:545 -msgid "" -"**Complete Borrow Request**: - Ensure book's return. - Update book " -"status to \"Available\". - Toggle borrow request status to \"Completed\". " -"- If needed, record any notes or damages during return." -msgstr "" -"**Завершити запит на позику**: - Переконайтеся, що книга повернулася. - " -"Оновити статус книги до \"Доступна\". - Змінити статус запиту на " -"\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " -"під час повернення." - -#: ../../src/appx/libms/spec.rst:552 -msgid "" -"Implementing reminders for near-due borrow requests can function as an alert " -"system for both the librarian and the user." -msgstr "" -"Впровадження нагадувань про прострочені запити може функціонувати як система " -"оповіщення як для бібліотекаря, так і для користувача." diff --git a/src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po b/src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po deleted file mode 100644 index b6d77225f..000000000 --- a/src/_locales/uk/LC_MESSAGES/spec/giver/_legacy/index.po +++ /dev/null @@ -1,330 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2023, Python training course authors and contributors -# This file is distributed under the same license as the Python Training -# Course package. -# FIRST AUTHOR , 2023. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python Training Course 2023.09.dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-02 14:46+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language: uk\n" -"Language-Team: uk \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 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.13.1\n" - -#: ../../src/spec/giver/_legacy/index.md:1 -msgid "Anonymous Giver Site" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:3 -msgid "" -"The project is inspired by \"Secret Santa\" (aka \"Secret Nicholas\") " -"Christmas tradition, but it does not focus on specific celebrations or " -"events. The primary objective is to create a place on the internet where " -"people can gather together in groups and anonymously give gifts to each " -"other." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:9 -msgid "Key features" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:11 -msgid "**Wish lists**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:13 -msgid "" -"Any registered user can create and modify their own wish lists. The wish " -"list is generally private and is not visible to other users, unless they " -"are assigned as a gift-giver to the wish list owner." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:17 -msgid "**Many gift-giving campaigns**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:19 -msgid "Users can join multiple gift-giving campaigns without any limit." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:21 -msgid "**Personal reminders**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:23 -msgid "" -"Users with empty wish lists will be prompted to place something there. " -"Similarly, dormant users will be prompted to join an existing gift-giving" -" campaign." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:27 -msgid "**Administration can't interfere**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:29 -msgid "" -"Site admins provide moderation for wish lists and support gift-giving " -"campaigns. But they cannot create their own campaigns, or modify or " -"remove existing campaigns created by other users." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:33 -msgid "Registration and authentication" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:35 -msgid "Anonymous users may access any publicly available page." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:36 -msgid "" -"Anonymous users can register by providing a username, fullname, and " -"password." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:38 -msgid "Anonymous users can log in to their existing account." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:39 -msgid "Authenticated users can log out at any time." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:41 -msgid "Wish lists" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:43 -msgid "Wish lists are personal collections of desired gifts." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:45 -msgid "A wish list is created for any registered user, except admins." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:46 -msgid "Users must add at least one item to their wish list before using the site." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:48 -msgid "A wish list is available only to its owner and site admins." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:49 -msgid "" -"A wish list is temporary available to other users assigned as a gift-" -"giver to its owner." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:51 -msgid "Owners can add, modify, or remove entries in their wish lists." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:52 -msgid "" -"Admins can mark any wish list item as restricted, which makes it act as a" -" deleted one." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:55 -msgid "Gift-giving campaigns" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:57 -msgid "Non-admin users can create their own gift-giving campaigns." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:58 -msgid "Each campaign should have name, description and members list." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:59 -msgid "The campaign creator is automatically a member and cannot be excluded." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:61 -msgid "Campaigns status can be draft, public, private, or completed." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:62 -msgid "" -"Admins or the campaign creator can run the campaign if it has at least 3 " -"members." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:64 -msgid "Campaigns cannot be joined once they have started." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:65 -msgid "Any user, except the creator, can leave the campaign if it hasn't started." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:67 -msgid "" -"The creator can remove non-running campaigns regardless of members list, " -"creation time, or status." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:69 -msgid "" -"Admins can remove the campaigns with 3 or fewer members that hasn't " -"started within a specified time." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:71 -msgid "" -"Admins can remove draft campaigns that haven't been published within a " -"specified time." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:73 -msgid "" -"The number of campaigns a user can be member of is limited by the number " -"of items in their wish list." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:76 -msgid "**Draft campaigns**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:78 -msgid "No user can join a draft campaign." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:79 -msgid "Campaigns can are marked as drafts by default at creation." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:80 -msgid "The creator can publish the campaign by making campaign private or public." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:82 -msgid "Draft campaigns cannot be initiated." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:84 -msgid "**Public campaigns**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:86 -msgid "Public campaigns are accessible to both anonymous and authenticated users." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:88 -msgid "" -"Authenticated users can join any public campaign, unless it hasn't " -"started." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:91 -msgid "**Private campaigns**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:93 -msgid "Private campaign are available only to their members." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:94 -msgid "The campaign creator can share a join link with other users." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:95 -msgid "Once joined, the campaign becomes visible in the user's campaigns list." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:98 -msgid "**Completed campaigns**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:100 -msgid "" -"Actually this means the campaign has been completed and archived. Admins " -"can remove archived campaigns at any time (campaigns clean-up). Running " -"campaigns cannot be manually moved to completed status. This is done " -"automatically." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:105 -msgid "**Campaign life-cycle**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:149 -msgid "Running the gift-giving campaign" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:151 -msgid "The option to start campaigns is available to their creators or admins." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:153 -msgid "Once the campaign has started, no one can join or leave it." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:154 -msgid "" -"Each campaign member is assigned to give a gift to a randomly chosen " -"person within the same campaign members list." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:157 -msgid "**Giver access for wish list**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:159 -msgid "The wish list of the assigned person becomes visible to the gift giver." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:161 -msgid "The giver can mark any single item within this list as a given gift." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:162 -msgid "After the gift is given, wish list returns to normal." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:163 -msgid "Wish list entry marked as given, cannot be changed by other givers." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:165 -msgid "**Multiple gifts**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:167 -msgid "" -"Generally, gift-giving campaigns allow for one gift at a time. However, " -"if a user is assigned twice to the same giver from different campaigns, " -"the giver can mark as many entries as the number of assignments." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:171 -msgid "**Autocomplete**" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:173 -msgid "" -"Once all the assignments within a campaign are completed, the campaign " -"itself is considered to be completed." -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:176 -msgid "REST API" -msgstr "" - -#: ../../src/spec/giver/_legacy/index.md:178 -msgid "**All site functions** will be implemented within REST API." -msgstr "" - From 0e5dc42fbbbc910db6498be8a830edf4d151e00c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 27 Dec 2023 00:03:57 +0200 Subject: [PATCH 590/689] Update printf appendix --- src/_locales/uk/LC_MESSAGES/appx/printf.po | 12 ++++++------ src/appx/printf.txt | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx/printf.po b/src/_locales/uk/LC_MESSAGES/appx/printf.po index 5476a9142..f80d80ef8 100644 --- a/src/_locales/uk/LC_MESSAGES/appx/printf.po +++ b/src/_locales/uk/LC_MESSAGES/appx/printf.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"POT-Creation-Date: 2023-12-26 23:58+0200\n" +"PO-Revision-Date: 2023-12-27 00:02+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -16,8 +16,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/appx/printf.txt:-1 msgid "Formatted strings usage in Python" @@ -32,8 +32,8 @@ msgid "python, string, formatting" msgstr "python, string, formatting" #: ../../src/appx/printf.txt:10 -msgid "``printf-style`` String Formatting" -msgstr "``printf-style`` Форматування рядків" +msgid "String Formatting: printf-style" +msgstr "Форматування рядка: стиль printf" #: ../../src/appx/printf.txt:12 msgid "" diff --git a/src/appx/printf.txt b/src/appx/printf.txt index 7842edf9b..d5ad84d62 100644 --- a/src/appx/printf.txt +++ b/src/appx/printf.txt @@ -5,9 +5,9 @@ .. todo: add code examples -################################## -``printf-style`` String Formatting -################################## +############################### +String Formatting: printf-style +############################### String objects have one unique built-in operation: the ``%`` operator (modulo). This is also known as the string *formatting* or *interpolation* operator From 186214d8c344734a0fc41efa22eebe0eb28f9d20 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 27 Dec 2023 00:16:46 +0200 Subject: [PATCH 591/689] Remove separate PDF documents builds config --- src/conf.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/conf.py b/src/conf.py index 5b9d43c19..eda595281 100644 --- a/src/conf.py +++ b/src/conf.py @@ -76,11 +76,7 @@ latex_engine = "xelatex" latex_documents = [ (master_doc, latex_doc, project, authors, "manual", False), - ("appx/software_list", "Software.tex", project, authors, "howto", False), - ("appx/code_edit", "IDE.tex", project, authors, "howto", False), - ("appx/blog/spec", "DjangoBlog.tex", project, authors, "howto", False), - ("appx/assignments", "CreatingPullRequest.tex", - "Creating the Pull Request", authors, "howto", False), + # TODO: add separate documents to build ] latex_appendices = [ # TODO: review appendices list From 55e39f7f60cfe648cb5516fea5f2df2417cf44e4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 31 Jul 2023 14:07:28 +0300 Subject: [PATCH 592/689] Add CONTRIBUTING.rst guides (draft) --- .github/CONTRIBUTING.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/CONTRIBUTING.rst diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst new file mode 100644 index 000000000..2e7701112 --- /dev/null +++ b/.github/CONTRIBUTING.rst @@ -0,0 +1,3 @@ +############################################################################### + CONTRIBUTING GUIDES +############################################################################### From b0cd671d57b74ad5bb521453366f1819da77c185 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Aug 2023 16:16:47 +0300 Subject: [PATCH 593/689] Add "CONTRIBUTING" reference to "README" file. --- README.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 653b86f87..816583cdb 100644 --- a/README.rst +++ b/README.rst @@ -48,7 +48,7 @@ To do the same using poetry: .. _poetry: https://python-poetry.org Building documentation ----------------------- +====================== This repository comes with *Makefile*. For now this is the easiest way to do anything within this source code. There are several targets defined: @@ -84,3 +84,9 @@ This command is equal to: make clean LANGUAGE=en make html LANGUAGE=uk make html + +Contributing to the project +=========================== + +This is an open-source project, so anyone is welcome to contribute to it. +Please see `contributing guide <./.github/CONTRIBUTING.rst>`_ for more details. From 34acae4fb0a733c33ba6f0eabd72302adb49bc39 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 21 Aug 2023 21:15:03 +0300 Subject: [PATCH 594/689] Add todos to contributing document --- .github/CONTRIBUTING.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 2e7701112..c9a3f6ce0 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -1,3 +1,13 @@ ############################################################################### CONTRIBUTING GUIDES ############################################################################### + +Contributing to documents +========================= + +.. todo: general information, structure, howto + +Contributing to translations +============================ + +.. todo: general information, tools and software, howto From 8a63ee3b5dc28fa2ed66fd0e057110a76d486710 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 22 Aug 2023 13:32:48 +0300 Subject: [PATCH 595/689] Update CONTRIBUTING.rst (no todos!) --- .github/CONTRIBUTING.rst | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index c9a3f6ce0..8017a2aaa 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -2,12 +2,21 @@ CONTRIBUTING GUIDES ############################################################################### -Contributing to documents -========================= +Welcome and thank you for considering contributing to our project! Here we have +an ecosystem of documentation tools, what helps us to deliver valuable +knowledge about Python programming language to the public. -.. todo: general information, structure, howto +Collaborating with us means delving into this, which this guide will help you +navigate. From the intricacies of Sphinx to the fluidity of Mermaid diagrams, +we aim to provide you with all the insights you need. -Contributing to translations -============================ +Let's dive in! -.. todo: general information, tools and software, howto +*************************** +Documentation markup syntax +*************************** + +The documentation build system supports: + +- `reStructuredText `_ +- `MarkDown `_ From b48ab87660bf12696d6dbff41016cd5c71aba2c7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 23 Aug 2023 00:47:12 +0300 Subject: [PATCH 596/689] Add headings description --- .github/CONTRIBUTING.rst | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 8017a2aaa..652bdaad5 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -20,3 +20,55 @@ The documentation build system supports: - `reStructuredText `_ - `MarkDown `_ + +reStructuredText syntax +======================= + +Headings +-------- + +Here we use structure "part > chapter > section > subsection". + +:: + + #### + Part + #### + + ******* + Chapter + ******* + + Section + ======= + + Subsection + ---------- + +All of these above will be added to :abbr:`TOC (Table of Content)`. +In case you want to avoid this use ``rubric`` directive to mark a heading +without adding it to the TOC. + +:: + + .. rubric:: Rubric heading + + And the content goes here. + +MarkDown +======== + +MarkDown is not the main markup language, but it is supported as well. + +Headings +-------- + +Just place a hash symbol before the heading. The number of hashes controls +the heading's level. + +:: + + # Part + ## Chapter + ### Section + #### Subsection From 60e6ca5089cae6cd41c480802b80abed3769cb3a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Aug 2023 10:00:28 +0300 Subject: [PATCH 597/689] Add "build without make" subsection --- README.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.rst b/README.rst index 816583cdb..a9e2ae98d 100644 --- a/README.rst +++ b/README.rst @@ -85,6 +85,17 @@ This command is equal to: LANGUAGE=en make html LANGUAGE=uk make html +Building without make +--------------------- + +``make`` just automates the build process, however in case you don't have it +installed, you can run builds manually: + +.. code-block:: shell + + sphinx-build -b html -D language=en src _build/html/en + sphinx-build -b html -D language=uk src _build/html/uk + Contributing to the project =========================== From 496ee63245042459cd744cb0a5cefe01688c0c35 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Aug 2023 10:06:49 +0300 Subject: [PATCH 598/689] Update CONTRIBUTING.rst Add mermaid inclusion syntax (directives). Add repository structure description. --- .github/CONTRIBUTING.rst | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 652bdaad5..3e707a103 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -1,3 +1,5 @@ +.. _sphinxcontrib-mermaid: https://pypi.org/project/sphinxcontrib-mermaid/ + ############################################################################### CONTRIBUTING GUIDES ############################################################################### @@ -12,6 +14,35 @@ we aim to provide you with all the insights you need. Let's dive in! +******************** +Repository structure +******************** + +:: + + / + |-- assets/ + |-- src/ + |-- index.txt + |-- / + |---- index.txt + |-- problem-sets/ + +**src** directory is the main documentation source, and it's considered to be +a *content-root*. It means you may refer this directory as ``/`` for the Sphinx +documentation builder. + +The **src/index.txt** is the master document. It combines all the content +together. All topics are described in their own "topic" directories, each with +its own *index.txt*. + +**assets** directory contains various static content for the documentation, +like CSS, images etc. + +**problem-sets** is a sub-module, that contains various challenges and demos. +It's already included to the documentation generator config, so any materials +from this repo can be referred in the documents. + *************************** Documentation markup syntax *************************** @@ -20,6 +51,10 @@ The documentation build system supports: - `reStructuredText `_ - `MarkDown `_ +- `mermaid `_ + +The main documentation syntax is "reST", since it provides more flexibility +while working with docs. reStructuredText syntax ======================= @@ -55,6 +90,29 @@ without adding it to the TOC. And the content goes here. +Mermaid diagrams +---------------- + +The build system supports ``mermaid`` syntax via ``.. mermaid::`` directive. +This is done using `sphinxcontrib-mermaid`_ extension. + +There are two main approaches to include mermaid diagrams to the documentation: + +- integrate a file containing the diagram + + :: + + .. mermaid:: /../assets/mermaid// + +- integrate the mermaid block itself + + :: + + .. mermaid:: + + flowchart LR + id + MarkDown ======== @@ -72,3 +130,16 @@ the heading's level. ## Chapter ### Section #### Subsection + +Mermaid diagrams +---------------- + +Mermaid support for MarkDown source is limited with just including mermaid +blocks: + +:: + + ```mermaid + flowchart LR + id + ``` From 661d57b7922ec6cdf1f79331ef95c58d6630a724 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 24 Aug 2023 11:03:26 +0300 Subject: [PATCH 599/689] Update CONTRIBUTING.rst --- .github/CONTRIBUTING.rst | 80 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 3e707a103..8492cba09 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -1,3 +1,4 @@ +.. _Sphinx: https://www.sphinx-doc.org/ .. _sphinxcontrib-mermaid: https://pypi.org/project/sphinxcontrib-mermaid/ ############################################################################### @@ -14,6 +15,33 @@ we aim to provide you with all the insights you need. Let's dive in! +******************* +Documentation tools +******************* + +`Sphinx`_ makes it easy to create intelligent and beautiful documentation. +This is the main documentation generator used on this project. There are also +some 3rd-party dependencies, like ``sphinxcontrib-mermaid`` or +``MyST markdown`` installed, that makes it possible to use some extended +syntax. Just install all project dependencies (including development). + +.. code-block:: shell + + poetry install --with dev + +**requirements.txt** file does not split general and development deps, just do: + +.. code-block:: shell + + pip install -r requirements.txt + +Other useful tools +================== + +We found ``poedit`` software very useful for working with translations. + +.. todo + ******************** Repository structure ******************** @@ -34,7 +62,8 @@ documentation builder. The **src/index.txt** is the master document. It combines all the content together. All topics are described in their own "topic" directories, each with -its own *index.txt*. +its own *index.txt*. Topic index file is the :abbr:`TOC (Table of Content)` for +the topic, and it should be added to the master TOC. **assets** directory contains various static content for the documentation, like CSS, images etc. @@ -143,3 +172,52 @@ blocks: flowchart LR id ``` + +********* +Branching +********* + +Branches explanation +==================== + +This repo comes with two main branches: ``master`` and ``devel``. +``master`` branch contains some stable releases of the documentation, while +``devel`` aggregates works for the future releases. + +Working with topic branch(es) +============================= + +We use GitFlow approach on this project. This means you would not commit to +``master`` or ``devel`` branches directly. Instead you are to create a topic +branch to work with. + +For example, if you want to describe "Django middleware", you will create +a new branch ``[topic/]django-middleware``, and you will commit all your work +to this branch. + +Once you consider the work is done - just open a pull request from your topic +branch to ``devel``. + +********************** +Working with documents +********************** + +Do not make changes in **src** directory directly, except changes to "conf.py" +and "index.txt" files. Keep your documents in dedicated topic directories +instead. This project has some predefined topics already, so you can work +inside of an existing topic directory. + +How to add new document(s) +========================== + +.. todo + +How to add new topic(s) +======================= + +.. todo + +How to translate +================ + +.. todo From 147edf7122fa8af712001be5599092d80c9d1a1e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Wed, 27 Dec 2023 17:24:54 +0200 Subject: [PATCH 600/689] Update documentation description section in contributing guide document --- .github/CONTRIBUTING.rst | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 8492cba09..aaa107abd 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -52,9 +52,11 @@ Repository structure |-- assets/ |-- src/ |-- index.txt - |-- / |---- index.txt - |-- problem-sets/ + |---- / + +**assets** directory contains various static content for the documentation, +like CSS, images etc. **src** directory is the main documentation source, and it's considered to be a *content-root*. It means you may refer this directory as ``/`` for the Sphinx @@ -65,12 +67,7 @@ together. All topics are described in their own "topic" directories, each with its own *index.txt*. Topic index file is the :abbr:`TOC (Table of Content)` for the topic, and it should be added to the master TOC. -**assets** directory contains various static content for the documentation, -like CSS, images etc. - -**problem-sets** is a sub-module, that contains various challenges and demos. -It's already included to the documentation generator config, so any materials -from this repo can be referred in the documents. +.. todo: describe submodules *************************** Documentation markup syntax @@ -192,8 +189,8 @@ We use GitFlow approach on this project. This means you would not commit to branch to work with. For example, if you want to describe "Django middleware", you will create -a new branch ``[topic/]django-middleware``, and you will commit all your work -to this branch. +a new branch ``[topic/|feature/]django-middleware``, and you will commit all +your work to this branch. Once you consider the work is done - just open a pull request from your topic branch to ``devel``. From fb37e1f36be7eb06b8d68823045b07ea936359cb Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 13:11:41 +0200 Subject: [PATCH 601/689] Add submodules section to contributing document --- .github/CONTRIBUTING.rst | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index aaa107abd..1557bfc98 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -67,7 +67,17 @@ together. All topics are described in their own "topic" directories, each with its own *index.txt*. Topic index file is the :abbr:`TOC (Table of Content)` for the topic, and it should be added to the master TOC. -.. todo: describe submodules +Submodules +========== + +There are two major approaches in the code base organization: monorepo and +multirepo. + +This repository uses **hybrid poly-as-mono** approach. It includes several +other repositories as its submodules to glue the content from different repos +together. + +Make sure submodules are pulled from the ``devel`` branch. *************************** Documentation markup syntax From f80666f4976c21403798a7e4a179cf367de00853 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 13:15:39 +0200 Subject: [PATCH 602/689] Add code of conduct document template --- .github/CODE_OF_CONDUCT.rst | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.rst diff --git a/.github/CODE_OF_CONDUCT.rst b/.github/CODE_OF_CONDUCT.rst new file mode 100644 index 000000000..09a3169df --- /dev/null +++ b/.github/CODE_OF_CONDUCT.rst @@ -0,0 +1,84 @@ +Contributor Covenant Code of Conduct +==================================== + +Our Pledge +---------- + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our +project and our community a harassment-free experience for everyone, +regardless of age, body size, disability, ethnicity, gender identity and +expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +Our Standards +------------- + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual + attention or advances +- Trolling, insulting/derogatory comments, and personal or political + attacks +- Public or private harassment +- Publishing others’ private information, such as a physical or + electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +Our Responsibilities +-------------------- + +Project maintainers are responsible for clarifying the standards of +acceptable behavior and are expected to take appropriate and fair +corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, +or reject comments, commits, code, wiki edits, issues, and other +contributions that are not aligned to this Code of Conduct, or to ban +temporarily or permanently any contributor for other behaviors that they +deem inappropriate, threatening, offensive, or harmful. + +Scope +----- + +This Code of Conduct applies both within project spaces and in public +spaces when an individual is representing the project or its community. +Examples of representing a project or community include using an +official project e-mail address, posting via an official social media +account, or acting as an appointed representative at an online or +offline event. Representation of a project may be further defined and +clarified by project maintainers. + +Enforcement +----------- + +Instances of abusive, harassing, or otherwise unacceptable behavior may +be reported by contacting the project team at {{ email }}. All +complaints will be reviewed and investigated and will result in a +response that is deemed necessary and appropriate to the circumstances. +The project team is obligated to maintain confidentiality with regard to +the reporter of an incident. Further details of specific enforcement +policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in +good faith may face temporary or permanent repercussions as determined +by other members of the project’s leadership. + +Attribution +----------- + +This Code of Conduct is adapted from the `Contributor +Covenant `__, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html From 034262f1f2f6fb5f57da6564be61ded0eed354da Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 21:49:10 +0200 Subject: [PATCH 603/689] Add poedit short description --- .github/CONTRIBUTING.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 1557bfc98..3d0877d6a 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -1,5 +1,6 @@ .. _Sphinx: https://www.sphinx-doc.org/ .. _sphinxcontrib-mermaid: https://pypi.org/project/sphinxcontrib-mermaid/ +,, _poedit: https://poedit.net/ ############################################################################### CONTRIBUTING GUIDES @@ -38,9 +39,9 @@ syntax. Just install all project dependencies (including development). Other useful tools ================== -We found ``poedit`` software very useful for working with translations. - -.. todo +We found `poedit`_ software very useful for working with translations. +It can be used for documents automatic translation, storing translation +memories, proofreading etc. ******************** Repository structure From 477df05da185ca9d5bb4a064845df28a90d087b9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 22:03:21 +0200 Subject: [PATCH 604/689] Add guide on how to add new documents to the repo --- .github/CONTRIBUTING.rst | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 3d0877d6a..b257114c3 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -218,7 +218,17 @@ inside of an existing topic directory. How to add new document(s) ========================== -.. todo +Locate the corresponding topic and create a new text file. +Use ``.txt`` extension for the reStructuredText documents, and ``.md`` for +the Markdown markup. Keep filename meaningful. + +To attach the newly created document to the documentation builds, just add +its name to the ``toctree`` directive content in the **index.txt** file +within the appropriate topic directory. Do not add file extension while adding +file to the ``toctree``. + +In rare cases, when the new document should not be a part of any toctree, you +are to ``:orphan:`` mark at its begging. How to add new topic(s) ======================= From 7eae18ba96fc0e0c9f28bdd345b90727b1baea08 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 22:46:09 +0200 Subject: [PATCH 605/689] Add guide on how to add new topics --- .github/CONTRIBUTING.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index b257114c3..bc50f8da5 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -233,7 +233,10 @@ are to ``:orphan:`` mark at its begging. How to add new topic(s) ======================= -.. todo +Most of the topics are already present in the documents root. However, in case +of need to add a new topic - you are to create a new directory inside of *src* +folder. Create a file called ``index.txt`` within a new directory, and add it +to the master doc (toctree): **src/index.txt**. How to translate ================ From e73a6fe6cd4486705b5f23e6b2d0ba7a90010d00 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 22:51:08 +0200 Subject: [PATCH 606/689] Fix poedit link --- .github/CONTRIBUTING.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index bc50f8da5..723cbedc0 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -1,6 +1,6 @@ .. _Sphinx: https://www.sphinx-doc.org/ .. _sphinxcontrib-mermaid: https://pypi.org/project/sphinxcontrib-mermaid/ -,, _poedit: https://poedit.net/ +.. _poedit: https://poedit.net/ ############################################################################### CONTRIBUTING GUIDES From 442b6164718441dda4afd4c28927c867719b1f0d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 23:43:48 +0200 Subject: [PATCH 607/689] Add guide on how to prepare translations --- .github/CONTRIBUTING.rst | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index 723cbedc0..66323e278 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -241,4 +241,28 @@ to the master doc (toctree): **src/index.txt**. How to translate ================ -.. todo +There is a target defined in Makefile to build and/or update translations +called ``locales``. To gather newly added or updated strings and prepare +portable object files, do: + +.. code-block:: shell + + make locales + +This will create/update po files in *src/_locales* directory. Navigate to +the file and perform translations. + +Original strings are marked as ``msgid``, and the translated versions are +marked as ``msgstr``. + +Using software like `poedit`_ can make the translation process more efficient. + +In case, you don't have cmake/make installed on your computer, you may use +the full commands to gather the text, and prepare po file: + +.. code-block:: shell + + sphinx-build -b gettext src _build/gettext + sphinx-intl -c src/conf.py update -p _build/gettext + +Actually, ``make locales`` is the shortcut to the same set of commands. From d59cabf922ad8ef1fcddd0a930c37e3f5dcba1b3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 23:49:12 +0200 Subject: [PATCH 608/689] Add markdown version of code of conduct document --- .github/CODE_OF_CONDUCT.md | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..85c89ea42 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,77 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our +project and our community a harassment-free experience for everyone, +regardless of age, body size, disability, ethnicity, gender identity and +expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual + attention or advances +- Trolling, insulting/derogatory comments, and personal or political + attacks +- Public or private harassment +- Publishing others' private information, such as a physical or + electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in + a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of +acceptable behavior and are expected to take appropriate and fair +corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, +or reject comments, commits, code, wiki edits, issues, and other +contributions that are not aligned to this Code of Conduct, or to ban +temporarily or permanently any contributor for other behaviors that they +deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public +spaces when an individual is representing the project or its community. +Examples of representing a project or community include using an +official project e-mail address, posting via an official social media +account, or acting as an appointed representative at an online or +offline event. Representation of a project may be further defined and +clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may +be reported by contacting the project team at {{ email }}. All +complaints will be reviewed and investigated and will result in a +response that is deemed necessary and appropriate to the circumstances. +The project team is obligated to maintain confidentiality with regard to +the reporter of an incident. Further details of specific enforcement +policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in +good faith may face temporary or permanent repercussions as determined +by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor +Covenant](https://www.contributor-covenant.org), version 1.4, available +at + From 468098a8ee4009553bc642cdb6db10ba868efdb3 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 29 Dec 2023 00:00:03 +0200 Subject: [PATCH 609/689] Add markdown version of contributing document --- .github/CONTRIBUTING.md | 233 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 .github/CONTRIBUTING.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..e225529f0 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,233 @@ +# CONTRIBUTING GUIDES + +Welcome and thank you for considering contributing to our project! Here +we have an ecosystem of documentation tools, what helps us to deliver +valuable knowledge about Python programming language to the public. + +Collaborating with us means delving into this, which this guide will +help you navigate. From the intricacies of Sphinx to the fluidity of +Mermaid diagrams, we aim to provide you with all the insights you need. + +Let\'s dive in! + +## Documentation tools + +[Sphinx](https://www.sphinx-doc.org/) makes it easy to create +intelligent and beautiful documentation. This is the main documentation +generator used on this project. There are also some 3rd-party +dependencies, like `sphinxcontrib-mermaid` or `MyST markdown` installed, +that makes it possible to use some extended syntax. Just install all +project dependencies (including development). + +``` shell +poetry install --with dev +``` + +**requirements.txt** file does not split general and development deps, +just do: + +``` shell +pip install -r requirements.txt +``` + +### Other useful tools + +We found [poedit](https://poedit.net/) software very useful for working +with translations. It can be used for documents automatic translation, +storing translation memories, proofreading etc. + +## Repository structure + + / + |-- assets/ + |-- src/ + |-- index.txt + |---- index.txt + |---- / + +**assets** directory contains various static content for the +documentation, like CSS, images etc. + +**src** directory is the main documentation source, and it\'s considered +to be a *content-root*. It means you may refer this directory as `/` for +the Sphinx documentation builder. + +The **src/index.txt** is the master document. It combines all the +content together. All topics are described in their own \"topic\" +directories, each with its own *index.txt*. Topic index file is the +`TOC (Table of Content)`{.interpreted-text role="abbr"} for the topic, +and it should be added to the master TOC. + +### Submodules + +There are two major approaches in the code base organization: monorepo +and multirepo. + +This repository uses **hybrid poly-as-mono** approach. It includes +several other repositories as its submodules to glue the content from +different repos together. + +Make sure submodules are pulled from the `devel` branch. + +## Documentation markup syntax + +The documentation build system supports: + +- [reStructuredText](https://docutils.sourceforge.io/rst.html) +- [MarkDown](https://daringfireball.net/projects/markdown/) +- [mermaid](https://mermaid.js.org/) + +The main documentation syntax is \"reST\", since it provides more +flexibility while working with docs. + +### reStructuredText syntax + +#### Headings + +Here we use structure \"part \> chapter \> section \> subsection\". + + #### + Part + #### + + ******* + Chapter + ******* + + Section + ======= + + Subsection + ---------- + +All of these above will be added to +`TOC (Table of Content)`{.interpreted-text role="abbr"}. In case you +want to avoid this use `rubric` directive to mark a heading without +adding it to the TOC. + + .. rubric:: Rubric heading + + And the content goes here. + +#### Mermaid diagrams + +The build system supports `mermaid` syntax via `.. mermaid::` directive. +This is done using +[sphinxcontrib-mermaid](https://pypi.org/project/sphinxcontrib-mermaid/) +extension. + +There are two main approaches to include mermaid diagrams to the +documentation: + +- integrate a file containing the diagram + + .. mermaid:: /../assets/mermaid// + +- integrate the mermaid block itself + + .. mermaid:: + + flowchart LR + id + +### MarkDown + +MarkDown is not the main markup language, but it is supported as well. + +#### Headings + +Just place a hash symbol before the heading. The number of hashes +controls the heading\'s level. + + # Part + ## Chapter + ### Section + #### Subsection + +#### Mermaid diagrams + +Mermaid support for MarkDown source is limited with just including +mermaid blocks: + + ```mermaid + flowchart LR + id + ``` + +## Branching + +### Branches explanation + +This repo comes with two main branches: `master` and `devel`. `master` +branch contains some stable releases of the documentation, while `devel` +aggregates works for the future releases. + +### Working with topic branch(es) + +We use GitFlow approach on this project. This means you would not commit +to `master` or `devel` branches directly. Instead you are to create a +topic branch to work with. + +For example, if you want to describe \"Django middleware\", you will +create a new branch `[topic/|feature/]django-middleware`, and you will +commit all your work to this branch. + +Once you consider the work is done - just open a pull request from your +topic branch to `devel`. + +## Working with documents + +Do not make changes in **src** directory directly, except changes to +\"conf.py\" and \"index.txt\" files. Keep your documents in dedicated +topic directories instead. This project has some predefined topics +already, so you can work inside of an existing topic directory. + +### How to add new document(s) + +Locate the corresponding topic and create a new text file. Use `.txt` +extension for the reStructuredText documents, and `.md` for the Markdown +markup. Keep filename meaningful. + +To attach the newly created document to the documentation builds, just +add its name to the `toctree` directive content in the **index.txt** +file within the appropriate topic directory. Do not add file extension +while adding file to the `toctree`. + +In rare cases, when the new document should not be a part of any +toctree, you are to `:orphan:` mark at its begging. + +### How to add new topic(s) + +Most of the topics are already present in the documents root. However, +in case of need to add a new topic - you are to create a new directory +inside of *src* folder. Create a file called `index.txt` within a new +directory, and add it to the master doc (toctree): **src/index.txt**. + +### How to translate + +There is a target defined in Makefile to build and/or update +translations called `locales`. To gather newly added or updated strings +and prepare portable object files, do: + +``` shell +make locales +``` + +This will create/update po files in *src/\_locales* directory. Navigate +to the file and perform translations. + +Original strings are marked as `msgid`, and the translated versions are +marked as `msgstr`. + +Using software like [poedit](https://poedit.net/) can make the +translation process more efficient. + +In case, you don\'t have cmake/make installed on your computer, you may +use the full commands to gather the text, and prepare po file: + +``` shell +sphinx-build -b gettext src _build/gettext +sphinx-intl -c src/conf.py update -p _build/gettext +``` + +Actually, `make locales` is the shortcut to the same set of commands. From 9260c65701c8469f051ecb2e05222e4d78afd37c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 6 Jan 2024 04:07:26 +0200 Subject: [PATCH 610/689] Update linux intro image --- lesson45.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson45.md b/lesson45.md index 1e8505008..bb1c44223 100644 --- a/lesson45.md +++ b/lesson45.md @@ -8,7 +8,7 @@ обеспечением на компьютере. Операционная система, также известная как **ОС**, взаимодействует с аппаратным обеспечением компьютера и предоставляет службы, которые могут использовать приложения. -![](http://img2.joyreactor.cc/pics/comment/%D0%B1%D0%B5%D0%B7-%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B0-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-windows-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-3799042.jpeg))) +![](https://media.discordapp.net/attachments/943973009788641300/1190088341186686976/b573ad7c999d7443.jpg?ex=65a9c1a3&is=65974ca3&hm=636f2c77d679a1ec82586745dcf0ef683a91604196cd41c7b8365919ee943a3d&=&format=webp&width=745&height=621) ### Что делает операционная система? From b1f059ad466dd91ccd9ca166fa9c693e76669d3f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 8 Jan 2024 17:49:09 +0200 Subject: [PATCH 611/689] Update submodules --- problem-sets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problem-sets b/problem-sets index 4e056d7bb..78e4d6fe5 160000 --- a/problem-sets +++ b/problem-sets @@ -1 +1 @@ -Subproject commit 4e056d7bb7e3f1645b9c72e1343a40acf766ca52 +Subproject commit 78e4d6fe5389dbb512ed31c4edeb51ee36e5b734 From 15db8edb6debf89378f738c3f7a7ae746e82c98f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 28 Dec 2023 12:37:38 +0200 Subject: [PATCH 612/689] Add yEd graph editor mention to the software list appendix --- src/appx/software_list.rst | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/appx/software_list.rst b/src/appx/software_list.rst index 35976d6ea..b3203ddb1 100644 --- a/src/appx/software_list.rst +++ b/src/appx/software_list.rst @@ -6,6 +6,21 @@ Software List ============= +yEd - Graph editor +------------------ + +yEd is a powerful desktop application that can be used to quickly and +effectively generate high-quality diagrams. Create diagrams manually, or +import your external data for analysis. Our automatic layout algorithms +arrange even large data sets with just the press of a button. +yEd is freely available and runs on all major platforms: +Windows, Unix/Linux, and macOS. + +https://www.yworks.com/products/yed + +`Online live version `_ +is also available. + 7zip ---- @@ -78,8 +93,6 @@ reputation for reliability, feature robustness, and performance. https://www.postgresql.org/ -.. _psqlcygwin-pkg: - psql [#cygwin]_ --------------- From 057c40c4e8ed267ebb6b33108ce7653258ac19d2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 8 Jan 2024 18:44:23 +0200 Subject: [PATCH 613/689] Update translations (Ukrainian) --- .../uk/LC_MESSAGES/appx/software_list.po | 110 +++++++++++------- 1 file changed, 70 insertions(+), 40 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/appx/software_list.po b/src/_locales/uk/LC_MESSAGES/appx/software_list.po index e4a941241..feb15d794 100644 --- a/src/_locales/uk/LC_MESSAGES/appx/software_list.po +++ b/src/_locales/uk/LC_MESSAGES/appx/software_list.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:02+0300\n" +"POT-Creation-Date: 2024-01-08 18:40+0200\n" +"PO-Revision-Date: 2024-01-08 18:43+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -16,8 +16,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/appx/software_list.rst:-1 msgid "Useful software list" @@ -36,15 +36,45 @@ msgid "Software List" msgstr "Список Програмного Забезпечення" #: ../../src/appx/software_list.rst:10 +msgid "yEd - Graph editor" +msgstr "yEd - Graph editor" + +#: ../../src/appx/software_list.rst:12 +msgid "" +"yEd is a powerful desktop application that can be used to quickly and " +"effectively generate high-quality diagrams. Create diagrams manually, or " +"import your external data for analysis. Our automatic layout algorithms " +"arrange even large data sets with just the press of a button. yEd is freely " +"available and runs on all major platforms: Windows, Unix/Linux, and macOS." +msgstr "" +"yEd - це потужний застосунок, який можна використовувати для швидкого та " +"ефективного створення високоякісних діаграм. Створюйте діаграми вручну або " +"імпортуйте зовнішні дані для аналізу. Алгоритми автоматичної побудови " +"впорядковують навіть великі набори даних одним натисканням кнопки. yEd є " +"вільно доступним і працює на всіх основних платформах: Windows, Unix/Linux " +"та macOS." + +#: ../../src/appx/software_list.rst:19 +msgid "https://www.yworks.com/products/yed" +msgstr "https://www.yworks.com/products/yed" + +#: ../../src/appx/software_list.rst:21 +msgid "" +"`Online live version `_ is also " +"available." +msgstr "" +"Також доступна `онлайн-версія `_." + +#: ../../src/appx/software_list.rst:25 msgid "7zip" msgstr "7zip" -#: ../../src/appx/software_list.rst:12 +#: ../../src/appx/software_list.rst:27 msgid "**7-Zip** is **free software** with **open source**." msgstr "" "**7-Zip** — це **вільне програмне забезпечення** з **відкритим кодом**." -#: ../../src/appx/software_list.rst:14 +#: ../../src/appx/software_list.rst:29 msgid "" "High compression ratio in `7z format `__ with " "**LZMA** and **LZMA2** compression" @@ -52,15 +82,15 @@ msgstr "" "Високий ступінь стиснення у `7z format `__ зі " "стисненням **LZMA** і **LZMA2**" -#: ../../src/appx/software_list.rst:16 +#: ../../src/appx/software_list.rst:31 msgid "Supported formats:" msgstr "Підтримувані формати:" -#: ../../src/appx/software_list.rst:18 +#: ../../src/appx/software_list.rst:33 msgid "Packing / unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM" msgstr "Пакування / розпакування: 7z, XZ, BZIP2, GZIP, TAR, ZIP і WIM" -#: ../../src/appx/software_list.rst:19 +#: ../../src/appx/software_list.rst:34 msgid "" "Unpacking only: APFS, AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, " "HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, " @@ -70,23 +100,23 @@ msgstr "" "GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, " "SquashFS , UDF, UEFI, VDI, VHD, VHDX, VMDK, XAR і Z." -#: ../../src/appx/software_list.rst:23 +#: ../../src/appx/software_list.rst:38 msgid "Self-extracting capability for 7z format" msgstr "Можливість саморозпакування для формату 7z" -#: ../../src/appx/software_list.rst:24 +#: ../../src/appx/software_list.rst:39 msgid "Integration with Windows Shell" msgstr "Інтеграція з Windows Shell" -#: ../../src/appx/software_list.rst:26 +#: ../../src/appx/software_list.rst:41 msgid "https://7-zip.org/" msgstr "https://7-zip.org/" -#: ../../src/appx/software_list.rst:29 +#: ../../src/appx/software_list.rst:44 msgid "cygwin" msgstr "cygwin" -#: ../../src/appx/software_list.rst:31 +#: ../../src/appx/software_list.rst:46 msgid "" "It is a large collection of GNU and Open Source tools which provide " "functionality similar to a `Linux distribution `__ у Windows та DLL (cygwin1.dll), яка забезпечує " "значний POSIX Функціонал API." -#: ../../src/appx/software_list.rst:37 +#: ../../src/appx/software_list.rst:52 msgid "**Cygwin is not**:" msgstr "**Сygwin це не**:" -#: ../../src/appx/software_list.rst:39 +#: ../../src/appx/software_list.rst:54 msgid "" "a way to run native Linux apps on Windows. You must rebuild your application " "*from source* if you want it to run on Windows." @@ -110,7 +140,7 @@ msgstr "" "спосіб запуску рідних програм Linux у Windows. Ви повинні перебудувати свою " "програму *з вихідного коду*, якщо ви хочете, щоб вона запускалася в Windows." -#: ../../src/appx/software_list.rst:41 +#: ../../src/appx/software_list.rst:56 msgid "" "a way to magically make native Windows apps aware of UNIX® functionality " "like ``signals``, ``ptys`` etc. Again, you need to build your apps *from " @@ -121,15 +151,15 @@ msgstr "" "потрібно створити свої програми *з джерела*, якщо ви хочете скористатися " "перевагами функціональності Cygwin." -#: ../../src/appx/software_list.rst:46 +#: ../../src/appx/software_list.rst:61 msgid "https://www.cygwin.com/" msgstr "https://www.cygwin.com/" -#: ../../src/appx/software_list.rst:49 +#: ../../src/appx/software_list.rst:64 msgid "git [#cygwin]_" msgstr "git [#cygwin]_" -#: ../../src/appx/software_list.rst:51 +#: ../../src/appx/software_list.rst:66 msgid "" "Git is a `free and open source `__ distributed version control system designed to handle everything " @@ -140,21 +170,21 @@ msgstr "" "призначена для швидкого та ефективного керування всіма проектами, від малих " "до дуже великих." -#: ../../src/appx/software_list.rst:56 +#: ../../src/appx/software_list.rst:71 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../../src/appx/software_list.rst:59 +#: ../../src/appx/software_list.rst:74 msgid "Docker" msgstr "Docker" -#: ../../src/appx/software_list.rst:61 +#: ../../src/appx/software_list.rst:76 msgid "The most-loved Tool in Stack Overflow’s 2022 Developer Survey." msgstr "" "Найулюбленіший інструмент в опитуванні розробників Stack Overflow за 2022 " "рік." -#: ../../src/appx/software_list.rst:63 +#: ../../src/appx/software_list.rst:78 msgid "" "Docker helps developers bring their ideas to life by conquering the " "complexity of app development. We simplify and accelerate development " @@ -170,15 +200,15 @@ msgstr "" "Docker Desktop і Docker Hub забезпечують неперевершену простоту, гнучкість і " "вибір." -#: ../../src/appx/software_list.rst:70 +#: ../../src/appx/software_list.rst:85 msgid "https://www.docker.com/" msgstr "https://www.docker.com/" -#: ../../src/appx/software_list.rst:73 +#: ../../src/appx/software_list.rst:88 msgid "PostgreSQL [#cygwin]_" msgstr "PostgreSQL [#cygwin]_" -#: ../../src/appx/software_list.rst:75 +#: ../../src/appx/software_list.rst:90 msgid "" "PostgreSQL is a powerful, open source object-relational database system with " "over 35 years of active development that has earned it a strong reputation " @@ -188,15 +218,15 @@ msgstr "" "кодом, активна розробка якої триває понад 35 років, завдяки чому вона " "заслужила міцну репутацію надійності, надійності функцій і продуктивності." -#: ../../src/appx/software_list.rst:79 +#: ../../src/appx/software_list.rst:94 msgid "https://www.postgresql.org/" msgstr "https://www.postgresql.org/" -#: ../../src/appx/software_list.rst:84 +#: ../../src/appx/software_list.rst:97 msgid "psql [#cygwin]_" msgstr "psql [#cygwin]_" -#: ../../src/appx/software_list.rst:86 +#: ../../src/appx/software_list.rst:99 msgid "" "A terminal-based front-end to PostgreSQL. It enables you to type in queries " "interactively, issue them to PostgreSQL, and see the query results. " @@ -212,7 +242,7 @@ msgstr "" "подібних до оболонки, для полегшення написання сценаріїв і автоматизації " "різноманітних завдань." -#: ../../src/appx/software_list.rst:93 +#: ../../src/appx/software_list.rst:106 msgid "" "On Windows it will be installed within PostgreSQL RDBMS. For macOS and Linux " "look for ``postgresql-client`` package." @@ -220,15 +250,15 @@ msgstr "" "У Windows його буде встановлено в СУБД PostgreSQL. Для macOS і Linux " "знайдіть пакет ``postgresql-client``." -#: ../../src/appx/software_list.rst:96 +#: ../../src/appx/software_list.rst:109 msgid "https://www.postgresql.org/docs/current/app-psql.html" msgstr "https://www.postgresql.org/docs/current/app-psql.html" -#: ../../src/appx/software_list.rst:99 +#: ../../src/appx/software_list.rst:112 msgid "pgAdmin" msgstr "pgAdmin" -#: ../../src/appx/software_list.rst:101 +#: ../../src/appx/software_list.rst:114 msgid "" "pgAdmin is the most popular and feature rich Open Source administration and " "development platform for PostgreSQL, the most advanced Open Source database " @@ -238,21 +268,21 @@ msgstr "" "та розробки з відкритим кодом для PostgreSQL, найдосконалішої бази даних з " "відкритим кодом у світі." -#: ../../src/appx/software_list.rst:105 +#: ../../src/appx/software_list.rst:118 msgid "It is a PostgreSQL client (like a ``psql``), but with web based GUI." msgstr "" "Це клієнт PostgreSQL (як ``psql``), але з графічним інтерфейсом на основі " "веб-інтерфейсу." -#: ../../src/appx/software_list.rst:107 +#: ../../src/appx/software_list.rst:120 msgid "https://pgadmin.org/" msgstr "https://pgadmin.org/" -#: ../../src/appx/software_list.rst:110 +#: ../../src/appx/software_list.rst:123 msgid "SQLite [#cygwin]_" msgstr "SQLite [#cygwin]_" -#: ../../src/appx/software_list.rst:112 +#: ../../src/appx/software_list.rst:125 msgid "" "SQLite is a C-language library that implements a `small `__, `fast `__, `self-" @@ -266,10 +296,10 @@ msgstr "" "`__, `повнофункціональний `__, двигун бази даних SQL." -#: ../../src/appx/software_list.rst:120 +#: ../../src/appx/software_list.rst:133 msgid "https://sqlite.org/" msgstr "https://sqlite.org/" -#: ../../src/appx/software_list.rst:123 +#: ../../src/appx/software_list.rst:136 msgid "available for installation as a cygwin package" msgstr "доступно для встановлення як пакет cygwin" From e1d3c7b695652068dc7fe8ac8976774c028be583 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 8 Jan 2024 22:24:13 +0200 Subject: [PATCH 614/689] Update specifications submodules --- src/spec/blog | 2 +- src/spec/giver | 2 +- src/spec/libms | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/spec/blog b/src/spec/blog index 6e7cbc29b..7432eb332 160000 --- a/src/spec/blog +++ b/src/spec/blog @@ -1 +1 @@ -Subproject commit 6e7cbc29bd4fbb0155df0104111de26cdc1681cd +Subproject commit 7432eb3321cc6a417ff4adea932e03f1b95e50ad diff --git a/src/spec/giver b/src/spec/giver index 858138001..b06b9da62 160000 --- a/src/spec/giver +++ b/src/spec/giver @@ -1 +1 @@ -Subproject commit 858138001350b9e33d3ff45fdc69badcbe7425a4 +Subproject commit b06b9da6287646c51d4145f5dd0ab64e4745ef2f diff --git a/src/spec/libms b/src/spec/libms index a1762d276..20ce2effb 160000 --- a/src/spec/libms +++ b/src/spec/libms @@ -1 +1 @@ -Subproject commit a1762d276c5ef518e6febee266bfb215bae877c9 +Subproject commit 20ce2effb90877f3dd93f51ffe242f6fda0c3c6d From 2371ec42a438eee6557f097a2f5036bacf298930 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 8 Jan 2024 22:29:47 +0200 Subject: [PATCH 615/689] Add png versions of mermaid diagrams --- assets/mermaid/git/cherry-pick.mmd.png | Bin 0 -> 19830 bytes assets/mermaid/git/commits.mmd.png | Bin 0 -> 13323 bytes assets/mermaid/git/gitflow.mmd.png | Bin 0 -> 46771 bytes assets/mermaid/git/lifecycle.mmd.png | Bin 0 -> 14060 bytes assets/mermaid/git/merge-1.mmd.png | Bin 0 -> 9478 bytes assets/mermaid/git/merge-2.mmd.png | Bin 0 -> 17428 bytes assets/mermaid/git/rebase-1.mmd.png | Bin 0 -> 12066 bytes assets/mermaid/git/rebase-2.mmd.png | Bin 0 -> 11990 bytes assets/mermaid/git/states.mmd.png | Bin 0 -> 13171 bytes 9 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/mermaid/git/cherry-pick.mmd.png create mode 100644 assets/mermaid/git/commits.mmd.png create mode 100644 assets/mermaid/git/gitflow.mmd.png create mode 100644 assets/mermaid/git/lifecycle.mmd.png create mode 100644 assets/mermaid/git/merge-1.mmd.png create mode 100644 assets/mermaid/git/merge-2.mmd.png create mode 100644 assets/mermaid/git/rebase-1.mmd.png create mode 100644 assets/mermaid/git/rebase-2.mmd.png create mode 100644 assets/mermaid/git/states.mmd.png diff --git a/assets/mermaid/git/cherry-pick.mmd.png b/assets/mermaid/git/cherry-pick.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..77502df0d6c160ff66841b91c01b0cbbac4d9d60 GIT binary patch literal 19830 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≻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 KV_IqK9``>k?p!+n literal 0 HcmV?d00001 diff --git a/assets/mermaid/git/commits.mmd.png b/assets/mermaid/git/commits.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..b591bdefcb560788e6c1c265c31feebce1d02025 GIT binary patch literal 13323 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 DZ3J(I literal 0 HcmV?d00001 diff --git a/assets/mermaid/git/gitflow.mmd.png b/assets/mermaid/git/gitflow.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3be39dabd3ef181a51141d56cee32ebd25bae0 GIT binary patch literal 46771 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�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 literal 0 HcmV?d00001 diff --git a/assets/mermaid/git/merge-1.mmd.png b/assets/mermaid/git/merge-1.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..3d97f653a764788d6870ce60390fcbcc6a8275f0 GIT binary patch literal 9478 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%0DV+;(|M-4|V5Ch~RE0gC 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 + + + + From 432aaf0f5fc93d40d2be679108223b8197f637c6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 24 Feb 2024 10:27:12 +0200 Subject: [PATCH 641/689] Set up presentations builder (fixes GH-208) --- package-lock.json | 7123 +++++++++++++++-- package.json | 22 +- src/_static/scss/presentation-common.scss | 12 + .../scss/presentation-normalization.scss | 21 + src/conf.js | 11 + src/pres/normalization/index.hbs | 27 + src/pres/normalization/index.html | 23 +- webpack.config.js | 62 + 8 files changed, 6489 insertions(+), 812 deletions(-) create mode 100644 src/_static/scss/presentation-common.scss create mode 100644 src/_static/scss/presentation-normalization.scss create mode 100644 src/conf.js create mode 100644 src/pres/normalization/index.hbs create mode 100644 webpack.config.js diff --git a/package-lock.json b/package-lock.json index 73fdf982f..5a97c5a6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,121 +6,342 @@ "": { "name": "python-course", "dependencies": { - "@mermaid-js/mermaid-cli": "^10.1.0" + "@mermaid-js/mermaid-cli": "^10.8.0", + "mermaid": "^10.8.0" }, "devDependencies": { - "csso-cli": "^4.0.2", - "sass": "^1.62.0" + "css-loader": "^6.10.0", + "handlebars": "^4.7.8", + "handlebars-loader": "^1.7.3", + "html-loader": "^5.0.0", + "html-webpack-plugin": "^5.6.0", + "mini-css-extract-plugin": "^2.8.0", + "sass": "^1.71.1", + "sass-loader": "^14.1.1", + "webpack": "^5.90.3", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.2" } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@mermaid-js/mermaid-cli": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.1.0.tgz", - "integrity": "sha512-O75bbknW9xe1KYpD0Zgjfa81oH4pjPdAPmR4miXBKTmoqPhQMzbbecCJJmJFLpa1D8UaSBr2lNgKoagXEzNT8Q==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "chalk": "^5.0.1", - "commander": "^10.0.0", - "puppeteer": "^19.0.0" + "color-convert": "^1.9.0" }, - "bin": { - "mmdc": "src/cli.js" + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^14.13 || >=16.0" + "node": ">=4" } }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "debug": "4" + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=12" } }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@mermaid-js/mermaid-cli/node_modules/puppeteer": { - "version": "19.9.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.9.0.tgz", - "integrity": "sha512-JDx8WwGlkdQYTaa3OMYDF+uFWimiwNnacg5FGEC5J6+VxDsLK30wHKU/Db2LqEhtAoIu4RwS+BRH4zRPlCsFpA==", - "hasInstallScript": true, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { - "@puppeteer/browsers": "0.4.1", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.9.0" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-10.8.0.tgz", + "integrity": "sha512-xZsGR88RsP72SAXyvjU23HzsKHsq6b7/kbnmQrEuIcPrJGPOckFiP9nzHvPh3Z04MjvpDJVjtbIspt2ZQwUzzA==", + "dependencies": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "puppeteer": "^19.0.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^14.13 || >=16.0" + } + }, + "node_modules/@mermaid-js/mermaid-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" } }, "node_modules/@puppeteer/browsers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.1.tgz", - "integrity": "sha512-4IICvy1McAkT/HyNZHIs7sp8ngBX1dmO0TPQ+FWq9ATQMqI8p+Ulm5A3kS2wYDh5HDHHkYrrETOu6rlj64VuTw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -146,495 +367,626 @@ } } }, - "node_modules/@puppeteer/browsers/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@puppeteer/browsers/node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "@types/node": "*" } }, - "node_modules/@puppeteer/browsers/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "@types/node": "*" } }, - "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "optional": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, "dependencies": { + "@types/express-serve-static-core": "*", "@types/node": "*" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", + "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==" + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@types/eslint": { + "version": "8.56.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", + "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", + "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/anymatch": { - "version": "3.1.3", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "ISC", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } }, - "node_modules/binary-extensions": { - "version": "2.2.0", + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@types/node": "*" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "@types/unist": "^2" } }, - "node_modules/braces": { - "version": "3.0.2", + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "devOptional": true + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, - "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" + "@types/node": "*" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@types/node": "*" } }, - "node_modules/chokidar": { - "version": "3.5.3", + "node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "@types/node": "*" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "dependencies": { + "@types/node": "*" + } }, - "node_modules/chromium-bidi": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", - "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/clap": { - "version": "3.1.1", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, "dependencies": { - "color-name": "1.1.3" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, "dependencies": { - "node-fetch": "2.6.7" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/css-tree": { - "version": "2.2.1", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, - "license": "MIT", "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, - "node_modules/csso": { - "version": "5.0.5", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, - "license": "MIT", "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/csso-cli": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso-cli/-/csso-cli-4.0.2.tgz", - "integrity": "sha512-p/VipA45w8EmS8Lv6wGtE+UdsbFlqUBGhL9FCTGKxd5dC07mtg3BbZaMzMh0X+oIl2JUGR/mPx5YzuNnTM2a3w==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, "dependencies": { - "chokidar": "^3.5.3", - "clap": "^3.1.1", - "csso": "^5.0.4", - "source-map-js": "^1.0.2" - }, - "bin": { - "csso": "bin/csso" - }, + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, "engines": { - "node": ">=12.20.0" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, "engines": { - "node": ">=6.0" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" }, "peerDependenciesMeta": { - "supports-color": { + "webpack-dev-server": { "optional": true } } }, - "node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, "dependencies": { - "once": "^1.4.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">=0.8.0" + "node": ">= 6.0.0" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, "dependencies": { - "pend": "~1.2.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "ajv": "^8.0.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "pump": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 6" + "node": ">= 8" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -650,506 +1002,5663 @@ } ] }, - "node_modules/immutable": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, - "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">= 0.8" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "ms": "2.0.0" } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "node_modules/mdn-data": { - "version": "2.0.28", + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, - "license": "CC0-1.0" - }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001589", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", + "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cytoscape": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.28.1.tgz", + "integrity": "sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.9.tgz", + "integrity": "sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ==" + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.681", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz", + "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==", + "dev": true + }, + "node_modules/elkjs": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.2.tgz", + "integrity": "sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars-loader": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/handlebars-loader/-/handlebars-loader-1.7.3.tgz", + "integrity": "sha512-dDb+8D51vE3OTSE2wuGPWRAegtsEuw8Mk8hCjtRu/pNcBfN5q+M8ZG3kVJxBuOeBrVElpFStipGmaxSBTRR1mQ==", + "dev": true, + "dependencies": { + "async": "^3.2.2", + "fastparse": "^1.0.0", + "loader-utils": "1.4.x", + "object-assign": "^4.1.0" + }, + "peerDependencies": { + "handlebars": ">= 1.3.0 < 5" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", + "dev": true, + "dependencies": { + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/html-loader/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/html-loader/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-loader/node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.0.1.tgz", + "integrity": "sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.7.7.tgz", + "integrity": "sha512-x9qc6k88J/VVwnfTkJV8pRRswJ2156Rc4w5rciRqKceFDZ0y1MqsNL9pkg5sE0GOcDzZYbonreALhaHzg1siFw==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mermaid": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.8.0.tgz", + "integrity": "sha512-9CzfSreRjdDJxX796+jW4zjEq0DVw5xVF0nWsqff8OTbrt+ml0TZ5PyYUjjUZJa2NYxYJZZXewEquxGiM8qZEA==", + "dependencies": { + "@braintree/sanitize-url": "^6.0.1", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.28.1", + "cytoscape-cose-bilkent": "^4.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "^3.0.5", + "elkjs": "^0.9.0", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", + "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/open/-/open-10.0.3.tgz", + "integrity": "sha512-dtbI5oW7987hwC9qjJTyABldTaa19SuyJse1QboWv3b0qCcrrLNVDqBx1XgELAjh9QTVQaP/C5b1nhQebd1H2A==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "deprecated": "< 21.5.0 is no longer supported", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", + "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, "peerDependencies": { - "encoding": "^0.1.0" + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dependencies": { - "wrappy": "1" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dependencies": { - "callsites": "^3.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { "node": ">=6" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/terser": { + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", + "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } }, - "node_modules/picomatch": { - "version": "2.3.1", + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=8.6" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, - "node_modules/proxy-from-env": { + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/puppeteer-core": { - "version": "19.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.9.0.tgz", - "integrity": "sha512-IJYfCE0oFpi5dTvNFqOwo8Dey6zzx7hANy7z6K2bjpCux9oPOSOIubq40awNhaHlfi8soYtgU4qabnzMXB7xBQ==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, "dependencies": { - "@puppeteer/browsers": "0.4.1", - "chromium-bidi": "0.4.6", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=0.8.0" } }, - "node_modules/puppeteer-core/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dependencies": { - "debug": "4" + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 0.8" } }, - "node_modules/puppeteer-core/node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" + "update-browserslist-db": "cli.js" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/puppeteer-core/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "punycode": "^2.1.0" } }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "bin": { + "uvu": "bin.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, - "node_modules/readdirp": { - "version": "3.6.0", + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=8.10.0" + "node": ">=10.13.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } + "node_modules/web-worker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", + "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==" }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/sass": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz", - "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==", + "node_modules/webpack": { + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dev": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "bin": { - "sass": "sass.js" + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/source-map-js": { - "version": "1.0.2", + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, - "license": "BSD-3-Clause", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/webpack-dev-middleware": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.0.0.tgz", + "integrity": "sha512-tZ5hqsWwww/8DislmrzXE3x+4f+v10H1z57mA2dWFrILb4i3xX+dPhTkcdR0DLyQztrhF2AUmO5nN085UYjd/Q==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/webpack-dev-server": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.2.tgz", + "integrity": "sha512-IVj3qsQhiLJR82zVg3QdPtngMD05CYP/Am+9NG5QSl+XwUR/UPtFwllRBKrMwM9ttzFsC6Zj3DMgniPyn/Z0hQ==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.0.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">=8" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=8.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/whatwg-url": { "version": "5.0.0", @@ -1160,6 +6669,33 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -1176,41 +6712,50 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -1219,6 +6764,12 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yargs": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", diff --git a/package.json b/package.json index 44d87d0a8..e1094b63d 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,25 @@ { "name": "python-course", "private": true, - "dependencies": { - "@mermaid-js/mermaid-cli": "^10.1.0" + "scripts": { + "start": "webpack serve", + "build": "webpack build" }, "devDependencies": { - "csso-cli": "^4.0.2", - "sass": "^1.62.0" + "css-loader": "^6.10.0", + "handlebars": "^4.7.8", + "handlebars-loader": "^1.7.3", + "html-loader": "^5.0.0", + "html-webpack-plugin": "^5.6.0", + "mini-css-extract-plugin": "^2.8.0", + "sass": "^1.71.1", + "sass-loader": "^14.1.1", + "webpack": "^5.90.3", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.2" + }, + "dependencies": { + "@mermaid-js/mermaid-cli": "^10.8.0", + "mermaid": "^10.8.0" } } diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss new file mode 100644 index 000000000..2d19b9d09 --- /dev/null +++ b/src/_static/scss/presentation-common.scss @@ -0,0 +1,12 @@ +$background: #212121; +$primary: white; + +body { + background-color: $background; + color: $primary; +} + +.step { + width: 800px; + height: 600px; +} diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss new file mode 100644 index 000000000..4c11299cb --- /dev/null +++ b/src/_static/scss/presentation-normalization.scss @@ -0,0 +1,21 @@ +#title { + height: 200px; + + h1 { + text-align: center; + font-size: 4rem; + } +} + +#definition { + width: 400px; + height: 400px; + + p { + position: relative; + top: 20%; + left: 25%; + font-size: 1.25rem; + font-style: italic; + } +} diff --git a/src/conf.js b/src/conf.js new file mode 100644 index 000000000..a2cecf326 --- /dev/null +++ b/src/conf.js @@ -0,0 +1,11 @@ +import "../assets/favicon.ico" + +import "./_static/scss/presentation-common.scss" +import "./_static/scss/presentation-normalization.scss" + +// import impress.js presentation framework +import "../assets/impress.js/js/impress" +import "../assets/impress.js/css/impress-common.css" + +// initialize impress.js presentation framework +impress().init() diff --git a/src/pres/normalization/index.hbs b/src/pres/normalization/index.hbs new file mode 100644 index 000000000..23d0eb44a --- /dev/null +++ b/src/pres/normalization/index.hbs @@ -0,0 +1,27 @@ + + + + + + + + + + Database Normalization + + +
    + +
    + +
    + + diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 24feed3fd..1bc337c38 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -9,28 +9,7 @@ Database Normalization - - +
    Date: Sat, 24 Feb 2024 21:12:52 +0200 Subject: [PATCH 642/689] GH-202: Update anomalies slides Remove custom styles, focusing on content. --- src/_static/scss/presentation-common.scss | 12 - .../scss/presentation-normalization.scss | 21 -- src/pres/normalization/index.hbs | 27 -- src/pres/normalization/index.html | 271 ++++++++++++++---- 4 files changed, 212 insertions(+), 119 deletions(-) delete mode 100644 src/pres/normalization/index.hbs diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index 2d19b9d09..e69de29bb 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -1,12 +0,0 @@ -$background: #212121; -$primary: white; - -body { - background-color: $background; - color: $primary; -} - -.step { - width: 800px; - height: 600px; -} diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index 4c11299cb..e69de29bb 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -1,21 +0,0 @@ -#title { - height: 200px; - - h1 { - text-align: center; - font-size: 4rem; - } -} - -#definition { - width: 400px; - height: 400px; - - p { - position: relative; - top: 20%; - left: 25%; - font-size: 1.25rem; - font-style: italic; - } -} diff --git a/src/pres/normalization/index.hbs b/src/pres/normalization/index.hbs deleted file mode 100644 index 23d0eb44a..000000000 --- a/src/pres/normalization/index.hbs +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - Database Normalization - - -
    - -
    - -
    - - diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 1bc337c38..e2bd0b672 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -12,72 +12,225 @@ -
    +
    + data-width="1920" + data-height="1080" + data-max-scale="3" + data-min-scale="0" + data-perspective="1000"> -
    -

    title

    -
    +
    +

    Database normalization

    +
    -
    -

    definition

    -
    +
    +

    + Normalization is a process of organizing data in a database so that it is free from redundancy and dependency. + It helps to eliminate data inconsistencies and anomalies, thereby improving data integrity. Normalization is a + set of rules or guidelines to design a database schema in such a way that it avoids data duplication, data + redundancy, and data inconsistency. +

    +
    -
    - - - - - - - - - - - - -
    Player Information
    name
    -
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate1 spell book
    +
    +
    -
    -

    Insertion anomalies

    -
    -
    -

    Update anomalies

    -
    -
    -

    Deletion anomalies

    -
    +
    +

    Insertion anomalies

    +

    + There are circumstances in which certain facts cannot be recorded at all. +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate1 spell book
    acen19991Beginner
    +
    +
    -
    -

    First normal form

    -
    -
    -

    Second normal form

    -
    -
    -

    Third normal form

    -
    +
    +

    Update anomalies

    +

    + The same information can be expressed on multiple rows; therefore updates to + the relation may result in logical inconsistencies. +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    acen19991Beginner1 wizard hat
    wheed1997Greater than 7Intermediate1 spell book
    acen19992Beginner1 wizard hat, 1 robe
    +
    +
    + +
    +

    Deletion anomalies

    +

    + Under certain circumstances, the deletion of data representing certain facts + necessitates the deletion of data representing completely different facts. +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate1 spell book
    acen19991Beginner
    +
    +
    + +
    +

    First normal form

    +
    -
    +
    +

    Second normal form

    +
    -
    - - +
    +

    Third normal form

    +
    + +
    + +
    + From 72be9ac87c7e98bfa2ed760987ee4d90959e22f8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sat, 24 Feb 2024 21:32:22 +0200 Subject: [PATCH 643/689] GH-202: Add normal forms requirements --- src/pres/normalization/index.html | 55 ++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index e2bd0b672..6960de97c 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -207,28 +207,61 @@

    Deletion anomalies

    -
    -

    First normal form

    +

    First normal form

    +
    +

    Requirements

    +
    +
      +
    • + Row order should not be used to convey information +
    • +
    • + Data types should not be mixed within the same column + (And the RDBMS won't let you do it anyway) +
    • +
    • + Tables should have their primary keys +
    • +
    • + Repeating groups should be eliminated +
    • +
    +
    -
    -

    Second normal form

    +

    Second normal form

    +
    +

    Requirements

    +
      +
    • Each non-key attribute must depend on the entire primary key
    • +
    +
    -
    -

    Third normal form

    +

    Third normal form

    +
    +

    Requirements

    +
      +
    • + Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key +
    • +
    +
    -
    +
    From 5b34f1505387d03c44e8f4516fa14238e3776011 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 25 Feb 2024 10:32:09 +0200 Subject: [PATCH 644/689] GH-202: Add anomalies notes --- src/pres/normalization/index.html | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 6960de97c..dacf0a8b3 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -112,6 +112,11 @@

    Insertion anomalies

    +
    + When a new player acen1999 join the game, they have nothing in their inventory. + Therefore, the details of any player who have at least one item can be recorded, but a newly game member + who has no items cannot be recorded, except by setting the inventory to null. +
    Update anomalies

    ZXaay_0wg6pKnPxg0KDHV&~X9$tg#ZXRFKvq&a zh2V!f95db{@#%JIeOt;KoDm1%=-GR4;ajdx(|DPKknmlA`GetpU`bJ<;^<05B;aT5_-+~yEkV*H+oN(g$Epg3w}ucvdQ z4T21Pd)XCOan=^xcE!>(?~Zq3FX3`+SU2mF*Us>{%B1nqe0M2aBC#n15#8DP`>iA( zR0U95-+Voh?X~4Ilbp2i|eT?!9uEJBX!%&zy5H&4cfL@r=e31a`H5g$N`)R8}5&CPl5 zIEjhdmS@8{@BPbjEBNQT_ObFEfu2fq#dI+s%{UzcS_mat9&0-Hr%W2}tof+lJSBH5 zDn*@R!KYhd;)A8|fPf!@Dm@65#1rhho4N40_zQcGPF$ zAy&khU=_80p)!d0nOiiE!{#OR&SBI=A&SK!-%izF0CCk}gUZL?tY0 z#lfmf+Ka~^MM=KYZ#pM8as@y2R+StH5H<6k6)3O*#BodG=+Y^&|1m*b1LYg`j_<76 zT%*w{op6Uq){Xi5zzTaA#$7Q$Qt}11XFI*?6XUy07znnb_Z}-4AE)zO zcd3606qpwxqN|br_bllX^{LSzVKwBGBbEKjZqeFd!PwnozE2E#dg))ZfyFBPx7Z}9 z*dUrT4?bjluF9iHPK`n+h4mAVPv#90gT0-FuGX+v#U1q&^%WOyzCd>{Tc)&tT$e^( zRvEDP(u1I1*8YT@rXrTKuJ5nb5pt-j%rWd6kY<<_6B`o5K}ixX){5nAkhm}n}vaim4vG&8E z*Lv^!;Ka9=Mr_z8fIEPMeg6S$(dvsIx%4f()c8m|8|(O zCr^oJGs+IjH7B7Ait#N!#C?jsf6;*Ii$xF`l!{lw8IHvLThDn{m(XsHQmwLUo?z_* zN|Lpl0BDN5a2yoM@W)x0N@LjHBYXaX#=QRUuIcQ&TS?$JQ~!rUkxWX$x-ef6M7?Cr zO;G;->@hHLe^LUKv0Zse5let04O8U7UUQwUYXD3&Pl1aKfhD2Kt_KQ0DSdDt8l7Zx z0-Bd^^b1%7d1={crHBC2;vH~o3OGG!1r99&!$wIToUcfr|JBb+w))AX_G>cmm=6X| LS3j3^P6H>bw literal 0 HcmV?d00001 diff --git a/assets/mermaid/git/rebase-1.mmd.png b/assets/mermaid/git/rebase-1.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..334ab8611c3e1bc427a38f58ebdc9a301b9d2166 GIT binary patch literal 12066 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 G|NjAEZXyi; literal 0 HcmV?d00001 diff --git a/assets/mermaid/git/rebase-2.mmd.png b/assets/mermaid/git/rebase-2.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..cb0dc09c29641f57fe6d9c1be5dc5ca9e1c3c7cb GIT binary patch literal 11990 zcmZvCWn7fq^EV*i(k$JvAfO;!k_s%{ozfwlONX#@gCgA^-6bH%(gGrl^n!GQgyjG7 zets{XH~YD2&YAqq?3{^KSCzxVrou)+LBUgym(fH)L6rusXF-_2uhQ|_zZ+B!O*tu) znjbW~C@2gl3NmlBeX9&art?XD_yE2sUX<9_bb@=Bw@{ z*bFbRWgO{bEGkXE(r=2L0ypK99pcY8=6}xq8jtXdom_mD`KoOyyO9s_E(X@|Oc5v2 zur)qq8Bb9uE;IcElRC+9q+QbLJ;%r;yHSJbuhns77T@CS!27_pvBA~t!CSHR0Es*~ zLUi+tsit{UP$+{PYH|Ss2n{0rh7kR=6&olNB?=eg4I#>ZPZ@Yg(BGh#SvQksONbAo zs=eJH@21$u@lKl~>Yu4JUu+=_IF0qYJT&?`k1VqZpdpH;iSDD&tNHymOj5rm$GhhD z6Z)SoVRkw^f|$UIXqkjcz4L%SMeKF@x(#lYmd(;XS=#N%O!8jw4TxWLj$iwTOWWgK z9tjYFnmAw-eD0SA6u}pIdVfz72lZQ3J>|Avt{(Y9@?87y#CQh zoMJgOv3?3m4EW7U&b2jcHBB%`fqSx7=@f8axj@{J?^NMuf%){)90k(RxV`x6X{hM2 z_RevwDqMXBwi4Wp;0i8}H-&XS-hO%&9Mt&&jAq5_di?d1@BYif`(@CAY)~L4BR*ZH z1Q(X^S8M{YlOQ~%OzPV!Q>L6;f6*F~u-jwPI~XXwpD5WJr*>1w{qG0!`X>hbD}D|% z-H#%AHKSbq-2s%BM_&z#$||KpNScc|-;ppvOt~?38~Re6bAfc8#|xR%`Wxj=pRIH`aD`Wff;9C)_A@RcNSy zs*JJz-VtTsRPt2nk^f$poRs4HR8(GGZs9wYDG-;KSTwb}rR|)dA84v#@OetdgmZFo z5)nhnUcpIzTn{@mZ1`2Rca|yOpx-UA)CumHda{cXkU!=W1 zrcc7h^h7i?RTG-f(sf7GZFgO74;OqqtRALovX-WcH)=Z4zURfNyYNGLL)+p?*TWVO z4*2q_H_H7NXGh!^ zIY#ck)(fN^e(rAv(|@Jwx|x|tP2+y~TXK8670~6~;>1G52G;|E!2uUzh9em|7aNu~ zfQ#zq$4evZ8jnPNA)s?!Ug+z7^f$sQs>ls{TDx&&YHMeAbO>Ov>rr-nga(!pZM;>4 z)XVwCLGD@;&p&>`UiN|iaO5d|)mF>m)`MM*A%^75#Cof=9fwSWQXKuGkNDMUcg*bU z9t%Xb2A=oWslw+^^>DWxemGHae6y|aS?K31i$4|ijK)lA_q$Xvvl7RpGCa2r=Vv4P zCw_XB3qF7w&@Q&t{=UBwYH-SGS@1Z@POc5G7I2vR@vzj~9N%a;_+nsCsNOtG?6cH` z_Qjvz>t0?yz3*}oh0BtOPoCZ+Tb-ck-);7oo4D`FLyj$0k{r0&vLl_ zH9p&DGiD)YoZ%AWfhT#t>jyjV!T9p*ixWrD{o;4ajuXZunl#?`! zR25?zO|D>3e;epUQhA{$zVVKtDHu}`p8^BhW%X`LXoH!^(zq*o+mhaB7|3(^3P#au z{8k}uoW}D%c6J<$+fEpR?)MXU#g@L)df&x}9$h~}F>2`?sL=VSSBf1vGPXI(7fX&8_+-!Z5*$rQtPld8wyI92f7tw@CmRfe0u!j0l~5PHLVk zOR}y4Ml=3$)@s~Aws~`rr(N}umt;#x+VcZ?vo;YUNqc5|)Bd>?m~3Ld)slOu@dODP zK}$xan2UhP$~h?kkrDn(cDUy-+tmJn^eI}5zedHNWW^3Tc$8C@ga9}>gD`(D)GK=oyQsE zDu8ab>TeTBqYMku8)0=5$4wc4>up6iFCXba@VHEZAg4>;l7NC=&hAz0!o_5!7ops! z6oQs+$6GxQd^GpJraj)qNKFq{vLeL5l!7#TiC|b;9+QnSF2&@7W|B?;ISM|IwGnmS6z#lPA>3CItmBN~&Kv*U zF^uR;9#x+zBQ*b`klmHa{E-|>d6X(E=c~+N;Jo*Pvl6-t z9)BT_-tt1jr>9&6ch1gId({~KHFE!gSU**Sd>BrEeXhV8sB0r?(y&6JpWDJIL1j6o$0-)vmnO^5_xh+=)o zWzIxXlmR7;n4|%0us0~`@Rbo3xaay@`^K&G3RkZ+T_T%~!*cUKinQ>HUWP4`IR2WvkImy{ff^=1)+#lnKBCaTyr-eCY?1Oo}udEwC76 z)C686h`0>v!)-Np4vBMZ`Q?~~pk{03qf5u1=%bGk3{B(OMVxotEl zMk1QMDM!66_PGK{z7AMd^45fqk>3r82)6S4)BNuErR9I}x@u^A;i)ud!rbIQ4((f^ zG~QFgjcr|Dsiov<8e~D>_O{(FG3tb5Xv4VVcmj}hoS1v% z^dB7eWL+XbB)omHgyt+0VeG>2nH2?=rl&@Aq^og_t0`dY*f6UIoP_ooH<8Y)q%Y*P zqzp<+kD#6eLPohX?F!OHgIfrC)U9`_`^7pxDlQ@Hi1AST{a`@u^aq8!T_{^dfx64@ zx#Q46=fBE|sA2UV<*V8jCIiC}0>A#z7ttNVroQHf{>2Tb={Y#-BVPVK(Jv zfrK%G&&P!P6yCwTeC-%wca5%K%}2H^J+E9sUPfHtnHuiL3dva+D)v}O zc}}v(DONh*(}<3;N%UO$yf~-%qZM|lB>~LR*LoO)amb)%Zc@G#a;19kgWUCYJRgPo z_57pQ_Yda^O%Md*`9-}^zoD{m6L+ezVD-F--4cvgwMx_6C&um%#Y^7XWVF%%m~Ob zIKcb~ag?*+8N7%$7AxZDqWDDa%YtKXR6hPp0>!d@KAlfA$D$pWDY%4x{SvJ{fD6di zo$2ty(PTqq{!Y9t^{H$43)?6y16*(d?>Pk$1w7u!CdkL*U4mOr1o*@PH1~UEAuO(r zijgx76lq&SBq{rIi|O|<3yClMca;`gK3M3|z{RQEe|f z!vK!az-%Gy$@aAV7AK1{U6f%*96slT9#$Ef05z2>bB=SJbj#Jk_u-P0VdJN3_~EKL z%8XzvT%mIne+_X3>(${98>|PBzr`oKfTbv0rt-opCOScp@=!G*h246Q_BuA}L0{cs z3CIVp2&u2hrpr2fIiRNsEKlF-R>4k|Cc=h|ma1O=m-HB=`91kVL5<9Jw;-FN0q0>N zcM0X!yO{ym+a%0PBvjewuK(o|8R)3CevU5q#}yd#%Q;wlJ2DM zlt_f-IB+a1&o3Z9+MQ+Az$25cikDPCDcvqC3rg=eng5ZZ9A^F=$_B!DFZQ)UozDP` z&Cl_H)1qb>u4PsyrpW9ggtgilZA7q^`=QNF1O7zD*c3re4e1qJLgho-1#ZJN8&t(; ziOXM!W35>q(h0<#NyP;|xh*E0p&~W60YNDdc8lRXjd>?Bx4fser_W?xIP$STNYdya zy_DrAl7Tm$uARbp-YAQ@if|#%b2uCu%y#;y&)*+&*JBQYw36@Vm&b|D4tv+>dZ?Sh z&B2-Y`d1XAvkrcvC z9gMTFQ@@lD8bL=B7Ewu30XymZr$yNa;(2AZFWWYk_U#1Z1Z(maNhdAj_%3Ik>*T&4 zvjS2`q)_TYHKK?~_+)GePH`#70vn3u`BHfeLPojYN$$3%aumJoYYh2c^@10~i@ z?*ECr%Q7CVL&B_~5M>BvR6bhRulLJi-5f^5H^WWRiEiaf>7OqOqct)AGjnm4m~D&{ z2UH2dp(*%RtG!I*0#fjM+1md_Xq38sLKN;cw4AV+4FR#1LXV;^?DfLblOF(KpcZEt zKZz+ccrOUmFLo4MT2SHDeG8xghbc2(71o%Y5ghu$DoW^QJ7`mbbT3xSd?dkQu1nj` zkercUfYSCZD4=s)(d~_T{E(}G<_pQgSVFV@nANP)TjL{d9Fpid?PQ)_YbA|Pc3=fm z-I{FPO>wN`0&ZY+sm_ehgj%uj zqx;W~-ow|QR(PJ=+C3mEO3yJA1GyX4gW_{c7fLlR#{0;a^qlU5q3q3ouo zdq8Dk>Nd`|gO^0?nK+#N-H%J?>Z+Ra*!8S5XtrOha#(@iB#k}5-@jKI(;qaetM@%G z$B2>FS1e0G`X76pKio!=Lvka`#xlnn-%T}E>GMpH{go2;xjj6Li^~Q!9f)7GUT){& zQkR+GMeOWQTQzP|P`(i0GdDbOh0ul`gr(g`Y_%G2XGN2EB6>55M(#dE|PatEo@U9Nu({*g$@s($vDrl{z#MZKP%#?rF<7dw`KZEu7N-=f9o z>8TPfZa^jy8LXe4Zxgj4)cwxZ>i1F=1bt|m50GMg9ZLP{K$7b9HaCiFvsY62G@I>@d5Korh2_$PfxBK38*3 zA9TA&aK7UIc3|-7KFu$c$=z|(FRx7V#tA%5*KHlhf6@Tz;`?@;T|2%VNlDSx4MUxY zHW}|e)nKb{mV+SSzh6A`nw0QuFqH6_-Hr zbA^K#v4{zu>_$+WtZ6)?QoMPwc?+!*Js?PF?1&A-S2$HYVCDC|b@f5`i?QK_SH|dw z6))EuPs2j;cp|r0Kz5~GA{UJ99Fj->MguJ~&0M8@`1q2PS19D`l`<_?Kxe}DNwe>wRhm)*XEJSaPf*PmX3~qds(~oaqXbFMFM@sC65bojdA%M3unc3V7HW z-)S#7@n}``+>g!6^Ff1s{H_UrO^u`N`Ier3;}%XV?RUJigm3ndsFs?!YviKCA$k923b^q=BEl=aKY8*5C16{0HACxF4yUIn0lkE=&R>^@ zEtj36qpck86%8E;&z<0tX)XGKFMp#K9+B7r<^gxS8KYb%^WDLc%gf7g@$otw!JF)+ z1sxq(KonJchqiZguzs9TpUbIPjVB)fo3?-E9ua%_%mhh2-7shQUg4bc7=gppqr}xS zi~auP!=1@Rz*%bE?;`qpHYX=1(viHI>CbKMo7nqvwY3$U&dVYw4?BquQAi}RVx+n{ zyp{doI`OfsqG8NtV{fLi%A}*E;w%DBSGUS1{d{|wUr1=+re#w~qC16@9eaFmTjJ`K z`xhD&6&2DE0*Pyejg5^R7EQX9C3T zoMsA-DqmK>5#{{H5WT#Y$tDKN&#ywM`BufmBRRdXc(baUcrz$Iae9s4aC(RjZGV#0 z`;vC}bJy@!=ig0(t5Rc*y#9-}>|td%<$1LR7!|0e`mkk^StigH@xXwd29dfdR~a_$hb^8*444ru?fj zM&=_V(40T#Qak*$!rH1h@AUM_-kmE9No@BQx4m5sHunjMURUY4bkgX$UXZmaSxo-$LlO0v^!E4n{EN`!#Xq?pJz;*QS-Cctx?4z14%L2Yj zC(*>`4z>ACp6vn@xGn9E*$B~LBLH~M+tswRsOhg?`%E+})Yl7raV-GUve0={G}YW- zE}bu{F%!8EPsu551vGP_+4azXKGU3wqnpl40RGd`OqSe7R_BBp_S8RgZ{1(zWeys# zVHz4e@?{B%8%?#@$2;C~fxIl1MF=o^13kLB%FCT5prG)pZ&_K#+2KC(-;%`<}VLWchkQ47+b>y8=feKs1rxuARK4VEvj=uT>CeT-{q zaRG2Ix4A}jPReKzwZ+l*iN40;n*FybQIpDFIzF!^r<;`hI*Ls)6@n8ym-`EB>ZPAhTLH9*Bu7 zFGRy|8{Id_{@kcFnD@5oe>v-orFGRAebGBHF$dHYYNNh{KIQHsFD15ML>H> zw=PRf8!>qtOSx`=t)T)FG7^osvQuVM6fz*(io*t%KGmRL$(cw67LWM_@)hMNRwY)k z9yw~(H?bjwXfG!W9P-BEVwkIzQ8I~@Ce9k6py0#*%>snY-HR!d5O>_8Utx}-cjiz~ zFdT?t$-eCLDzu5K126Cd18z=OAsY|6#q!I;kmGWu{>E_n4b`}ZF>XNDxQA{jO*5Kf zpsj!kth<;nKr2K7=t-x{L?ZRskvCG~5`6A5$gOl3`kJ3bD!(1ZUjus6J{+o!VK0;Z z?C6o`;Tojt5*2dF4GWg!b9tzRg7Jag7EAVIrK6l>ETK$9Xg*OhWdU8~HVWpdr4W2) zdkq&dQ3yg^aJ%sadn}Wz|2eb^0Ec>}V!XlFAhGeYB|@T1oS^7#!{Sgf=CFhVtODdt z46_tI_gKBiv-_FZ|bBFYH5oDhT>8pdhjsw2YTbOHn*t z6p@d(*dgZBxoeyj3CrlIHv@!>A?8dGQ8>0f`Ranl3~LU9mi{SrrJb}&a&TZc0Zy3? zWr!}CUmnEr^(L0*p7_}LyifZ8FS~x*)%$~K*-J1Bnkj--Bw^0?1Nxz`6l3;8Az@^c zTo%@|?)QO{2g8#@jKH{qIhD4RW?GK0*6Kjs5yE`pN&j#Jq3+b@Q!5y9x($TNk-({$ zNXK}%6pdjf6;*Q`G+H_sHBV=720^FfBY|U=1;*ZfLROcGVl;X{m=7a$nx;{d~CfZ1*k~OOX<7!DPn#pFU;vs(DN@v zurGy;aHISP8&QM;&Cm z(o1ac7$bEZcbWPQ#);flbdfJpOSq&6DY4P^&{LoqvfqBjOrS)6lSoPE6&}04u8x#{ z)p6=CG6FAq^Djbq&A3}E%%aL}4dQy7t9B)pexy=}Jq3}>QJ{@L;S9Hw*dufwO%w+k ziw|u+3>k=^F&<=)L{BrcOe;*TybVp5ZHR4RMU+!FN+`=JBrD^aD`yul{fr&d^y@zZ zGY+K})Kz83GGv^~SZuqHXd!KRuKlsvyeG}u35+7?Vz(J+kxzVx1p^F8&G$%F%pPUT zEi7kGP?r*5$}k|-RfO*nlP-^$qHwNw$r$Br*f@+z$BT)2dW#Rg3Vm1f14(b;2FYi4jY9f2#&&M&}C_&J5;wfAl4XI8(})(FftU@^AU$@| zq1Cp~J}efTQs<$CEV|Y(uG!XztEMn{iq+BjF8HtV4Rg)dQ}qNo*7f%Il1?6nmw+8c zKp#hJKLl9}Gp?`DokX4(+Ahw%4TGTPyB6CnbtEPoa+}-U;(C2*{pWxj)LX9V8h~Tm zuW?9CSAdi#8TN7&q9FeaIuh!eJ)gEa=pqT{DZ5{`wXq2)+va|EWp13hzzE@h@RFnn zzd%nBQQ>wc3%f8ko>h5qT=@p9yNnMuf6kl5!C|gV7q;t98#^Y;Qn$ZVTFO`WzqhX- z(&o{HrAoilhL*#I@7Z*fSdUK5g&_pv5F)&ox;ZAMG}^~M$`)n8 zEh29aysXA%P~Jrb1B?f#n$?el1;aQ(aj*?*efF zkz~Z&s@%XHV*gk4a~>m688{zfMnN51ofQ$azsNj#Wg(Q)@3bs8I<3-|*S{|;TevQ; zK+G6j)MnATK@fRj^kcn&7V<8moEC!k_0OP?vIEW1TUYp~OlJ;?)p{h*MvabuSqz1k zE6SF<0i*4nI7@B4?VOc*MY<9%>Jd^_nKSwUkZ1;ou{!iJi~Ah&m!(6)(e(n{`t&_T ze^QIxWI$&8&BVBWk~7(|s)01Zg$hA@0rX3i{em1q?Y(wU>?-0HRT3dTm;i1eQwwK@ zb^uN@e+h1(={*uwWQJwtb45)3GSF3$(Z`!qA)`vCL{FiVF(;PARA|J~GMN1gv;qe; z&4N%qTV}z$%W|t}hl7aTaT|&7sM*7#>I`Kfq{4WWSU!qHj4dbrT8f*x!aJ~OzM4q_ znI{|)f`4ED2!l7|i8h=9I$*D=-mgRQ=Cb52z$c0?y9~j|0Kgxz*;9Z%$iQfZHj5Ws zKPbkXn$|{ry~N=-LY}43(^K2eMUNfA!QBdIVml0IxG-qvIvjW+RaTX_wRd#MWZbbT zH;LX=CjR{3RMqqhfi}|unAh|lW9pk#ZWRQd_i<~mlJm1!lULv+(nXO%Dv=eyS`P2y zfNeuEO^n{M?)Xt;-7_SUm>ofA7F35Wm?ucgI;(+>t4R3Z1GnHD4-xhYfYT~cVAO4+ zY@}EdNlX#ISlFWqxmQXQ@_=uCAT*?1_u7h*q76GxJishMN;4%5i$}kI-4+DHfXmjJzYEKFCDcB zsBo4lxgcL-+8Q3c1}2$%gLoqzG^jyD`K>cmy(w1vj~B02jolj$h*ebCF;pZ#9G>&p ztwSvt4R=;t=Kip6Jq65(&ifu>N7$T2deBQ%561B}x3OrMX-$6pTZ4nNway+j(}C{r zPuV`z;CmUSPC%JyNeDKf|Ux2`eXgFfNw}!lShH}qXGH|_146^Fc747vriZY8Wj{&$90GHsRcunVFA-KQvR>K1%#H=+($lZMhv7$C-=e{|mt(1w{4)?K@! zQs{cX5`u1Jw+uYTbayuN;HwsFgMv#L{Xig?al(hx^{u8kL@60)#1ta0G&nMX?k>aD z2$l&IM80B8eNe##^2OdFBg9y~7{DaRo=rSoc`6)2uD~8rKcIuVB|`SWcFsbNM2B}gtp*Dccie+b$f0<`ckUN8Un!MM#c+H-{H zLwmi)A7n}}p)HF47$i399u2tqKlaKHrZ~_6$(k zbn=UVS>;yC*l=urLbRl3TfTAX6`I!ZF@zO%kx}XnfN;~%FUD_Bcu(mLYJv{BOwx&2 zqYPirt`vj8r3o7+yIAn{QpZLCe}H>K87sEw_Zc$6@WLhwe*6?&L37@;!0K$)+&1(r zC;hQa+cY~FIB_xLwl301rdKOm_@9{#frjjKx&g1$CW-U@x!JOObLp-%9_TkJtUwDRA7v9~{lus}gpDfebyX_?Gm zG%O-Tgiv^V$dGy&>K^a&&o1bZmPQ4R0Nyl%TO=a}I|$UQ+7M9S&^4r>C{_9TBlQ^{ zaQ>qHmi2k#0N%*=e*D*Vo~6X{ZiU6_--}lmoc5SW_nBxUWVOFgo0es{t~(Pc?9?@V za@1Ag)Ow8Jlossn^h$GEc;KlUIJbR|esKr#E%{Gb6(uNMLo31XC}HM-ZG^xdyy zD_F7$W<|L^2MTig5ITMFzf7A%w4C$>Ltj%_6j4$p z$a#Dc*6Kg3+7@&Spvdn| zolp?k6l?#xjQe+Koh@b4feA)V0$~9P4XNV$H>3^xZ({%fu1ScF3RG{Q3@HEqiEflf Z`aAO@A(}WTI$%&8MFFZRQzK;-`hRpj$~FK1 literal 0 HcmV?d00001 diff --git a/assets/mermaid/git/states.mmd.png b/assets/mermaid/git/states.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..62b7594432b963685b10da8bbf1809d156319170 GIT binary patch literal 13171 zcmd6OXINA3w`CAPMUbBe(nSSDKt!a2fQa-eU0Oh-_g(`i0*VyrO?vM&bO=R3xK@&U@Z>pS{;!Yn{*9no2ZOEL0#6h(<;E zl@17WsTKqx6SztV{HOEVVJC1P^VCs#3924r+XR8`f>d6~>G^%zL4`Q6*$1O>T1Tmm zRE6edojHn71>NC78R7nyZ=}_8Mzn_2$A<4p-Aa0Q*8-jEhmT|p>pQ%f*}y0$^I_ea zdgA>?=vT3HPLDsa){&PlB~H?5`qGQXvmY5>Wx3&Ujiq+1Yc0md(4oRtF(dv}lvDj) zT={PG7RS3I+q$+zfzY&@vu0SmhOII!>G9^MF7=0rH-V`x-Sl=51CF2>noEy?!}D;^ zb>N_Nulo`R)UA6Jcs9^J{eLvXvf$D!cX~F}h%|S$7aCo(>E4A;t8r^0Hg|kk)++Lc z+hVZ%kOO;TjO()@r&bh;pN4#aR>>H=Vy!BmInyK80PM20_N8$W09;kpRi>%IA2Z}u-2ViDz&8>lt74!UP&4teVw=5^8OE|k z9a;Z^V%-=AyK-Fywk`3uGC5j~V5ic&o)Q?rr6EYB*`zT<_7tPMO zBptAe6u*9mY=r#DR*CEJiIn&0W0{Re)W6 z+Ib?!2z}}azbjpCn!Dd+$;3cg<0saO=lN%IrgKV0Z$9khyYXVGjIuN6&q3JB$qGjM zEOErDk5H(*XMWLZOpT+}?YSc|AEB%XWHI_mynFQDAe{izJbQP4#P{PzH&o3!$Bza+ za#hth>+8ozX@BQ-c0npWS=I(ZGPL9$3o>Avc`h3PJLyM7b{jZkzYL}LuNs<>$7v@9 z=TwhNd$-?v@Eoz=opY8*i*mUNg5N#0XkT4uSx<0j?lp113sv-h94UvEZ>*H9SI6_9=Q~sFH!uFL2jo^MF!@> zt(C1bS3}>5Bmx`N>F1T($8ml5dT6`Z5&MIBHJZ{MP~dA6XTp8jZ?OGU@=>Kos8KB= z*X_t6iyUul_Jk%M3R?Gr_K5)Ea(vbB^S_Qq-4$;J-{=2ZHv;WA@NHDmHgQN*9QBXYNIn`Up$#q_?5=fC~X_R4XqNQUQO3g;eMdi z7*A`EGBmN&d~PGX=dbPD+R0p=wz;YXlxig;ShDjE{&=JCK!K6N;n&aIBw8p_{0H4s zuQa@V6{Ib3OKL%LxZ)is`*EoG(R^vx?7PQOLV0w4K4XW{CZER~UE4rF}nI*a> z+M(*Y=2#40erA+2>+kV$fqhlv3xz-$;$h)bWb;arg$97akN|q$8n#VMJY!` zj5Bapg%@2>;1r~F9x&frDPABNnIGt_j}hJmr-u{jJY^RwXWbO=!HA|1{h7FAoi5s@ z9oklilnJMl#H?g=bhVHFtfR4(Sy?_>yKz3mZRN zCd0dv6=iGDlr-svZgrVIG@>Kmb$)}!nu>MtfmHKbrgVui6moPSa!1j{L?|kTn$JRNCTiMNlT72`Hm0pC z4NH`hAG-7Ny)uzdHlv|%DV&=WNEMkJGP)!yS~GTCO`eXHenNw0UGZ$G80jbmgaDOq zQd?Coik?d>Oh!w@&n%XpR1P zqMI<-N-G?KRdL|}XK(3qY5Tq8Szr|4ZRVJdoq!)k)63XimrZ`ms$@?H7J-G>B<~Fj z3BZClf`IrnA~@$M|7@yR5K-dr-40VbE-Gt@-oKKecIPF>SthKwLXM|?qvMhK;~Q$6 zVol6~W)mx=Tm=w9`q*lv4E187;*)eVVzshbDi$A|Qc~!qBnOI-(VMR_3sQ`AhLpF` z%16b1_uL!Lp8hhPI)4miSdYwKJX-7R5p5X#a)hJ*c4{C4ZfqL<+(0CT;^Tm4O=9| zx4wL7#Fnxdi>|JI^OLW9&Mg@N&UQPyy4tv;zlCRQ+?>2dzV6b7_MI7R)-@W>WaF0L zw+5P6!Vb=Q3_Kv~$MZhy9dwJj;=D26o&GGgn1`_X_c4q?u7s-2^ZB+gWnS)-p(S~Ugd zendL@j$UtCfVn1#=h5$dSq~1=!of5 zSvUM%+tQts(y&on2|`j#CHYTLjReB860Jkb{CSh4VyE-mTtLxA)L|yrVfN(uKV|u2x1Kx|csDZf zkEd+;Tk<|B*tFnU=HkFn6z<3O<=SoChPAnlqx#qUCx|PI zv6=?Iu4ED{0wOOoIHtadc(G@rLvA=zk zfA7?<=z}x#gN<-uthB6i?%|oX1AQB`T}y6W!Nayt$x6^U$%u0>|^Szsf`QjC^)4QDmQySIrEMSLJW(mQ4*()rQbm0)eGQYSqO)5&+}F&&cj*(-Ek`o_w3JBMPUjMr!-V#^@& z(@SJGj2lljHF*p4w)6eTg5X+mcAbS4J%Lo?>$VYJvXR;a4&vQ5ePgxyGGEWDC9q5} za}Lh+hECz!ZydKceG{ieN6NC#5DSrn$4#P?RV>{LKVyZVro>lHGP?x}qeAU^a-A`) zUCRRrJ1rZ}_5#mZdhdsFNiFy__D$uFJi=_Uo!K&+vhE8OMF);hnzaG4xVMa+X&GU8l> zYMXS~-IL2UL5{I=^t3yf-dZPRwvJb#B7`&NC#sfrQL+1PyxkNG6WWu$vHC_UI*Ubd z@rb=-@Oi#J!<)S*QsMJ-a_!rxMl_n_95h_1Kt=zXA%o;QIL1lnQbD88??3T&Y&AZ4 zu`c`T-GeOdSc8jt>q|6&&7TPxwKWJl$8)1)ep&UIGrAztV`g0JRAw<+RX4xwoD96h zmnlxkYiO!+_GG!HJas&viW4JnsLc}U-Jh~)h1G4hfe}xhAmdtS#}=Qyap8DgC^N$% z_>JV&Vc}MK*5nme`r&CtRp8#_yIxVK>z)=Bfw3%iyGPR1)^!_&!xw9p5iy{{F#QZc z{GZDFqTS8fUbm{`VZ^GZ#nF@Uz(Pak@OvfLglbAxNu`KrR@EO|A>FAQ53a2%`S}!J z=ae!sWJ}xzTEyCBqO=)VtYD?6yXbKcTJ*O@HuCl z>l>0QQX)I&nCI6Y-Q5SAz((_Piax7+aUukj8F%!}R-PU&>*E-za^Y&~8wHD2p&(Qd zRhLM{ZEV=k)#b|k_`uk6B)(llOZ|vFZ((oo3{Uez@sOb7w)J_JTGjcpWwNdt<=-_W)Rk1@9Qtoj7z3SWv{8KkaCgd<|V zC-V~YG7rzEi5IJXGrrg*`D$65;fS`m)tbjeFX!HVlTepFX168)#;Ad%)_inLQv)xL z+09_IMU|7iDJ2*hXBMsH&8iG;5L`w`?p z^8>+6-4_R@J9|eQu*qpDV?Dz?sndu%_x7^$9L?T#EWMx5!d|15OHCqGJh|dcey8J} z;G2E*A3Jx($&+5f0zj1miaT2e;WjECt#~;^X+>DO3{SITS1TWKjt#gVsV-G=r?bD} z(%%3359e+rp+W=+mfTF+n>q|u6plq8>e4nfE?!?C8;=VM)7IMYD@oE1+cFp`MYsR2l`s4SlpD~Z;{1Fus3OKXV zPmk8p;KwGQo3AR3qL1t$B2^&r}K zmBbr#jzPuRQAy+n&9VUn0x}wy@0*Hv@kiSHL6fH#4Ftj(ezH55!Suc=3X};wanP+0 z5QF}pejN{;HVHWQHy$n7LL3@6n`Z4OW@$OdnAIefRO~hQ06~`Wm~Mic-g?92}~rHU<1c zE|bJ7YQ)AZNBI%HH~31*PfFKyu?{l&Qm_t`AJIv^Mpg^6x+w`+GfkWy?YSulDVCF5 z@!^XtnFc%YcHYZ65G!vjYJ15tjoN^1FAk!^IKZXaOa`NN`cGWiHgNIVx=?m9pf_zg^c zq~^?3`tyc6{_h@=zs_78D3ns_Y;~elA3%!7U6=CpE#)O?10ZD$vp; zMc~xl$pNb<-=*>;l;hE{W9o4Zsc(^=Wz#gHHkpSh zf->rMf=QbGqy<<@E?r)ZHRT~SGx>Fo$L{v`ac%J4&`VbCDneV$DX+uBMnJW;(cPE! zLm!}W;^`eyLk6bDN=d{5(<-U7u&!^SUfKe#)h2KFzA@#R(R|; ztzv$(3$rv_8PKG8;8IcYR9Zme(bIvqA!KW&i zO$8z-hEgn%p}q3dT0t$I%snS@R}GBwCgm;-|IJ&^Z8ulz-Lx2i?OZLXY;^b+O~Pk3Bz45WDNzD%Wu)%djr zHa*VUoZmX|b+D7<8a+n4)bpMblMD>FpoThq*FiJa$Zm&nuWl(5uJ8T?XFTdEfK>)9 zc|F&+!25cVPH-QAWw9b72pQ=bGd(&|M~>Y~{~{cc9SGyM&lC&rwuc9NeChskG=+1f zskzf^GWt;_Md;h4e?a?JVF51OaOl(A7qEMQ3)f>bF)FH3ngq23$;hO%lxSjT^?H~8 z>%7f{>%vK&HhW*ZI9CkjH!GN8;ZIDEiY#Wx*fb<{Q~Yqj+5I$qf9SebpY3MhtTOJb zA^Qx@@$_BFa)hun`=mN4svv7Bj~Q#*40Y72o0pDWx)jO$yEQr!I8{@3gYP(8zV<>P38%JJVh)301r)zw?R z!D!zF7l4E7j=fqd;^OVC-|T{#6ocV4P@RF(JL|wH+n-AQftMl>`Vd_EB7)<5f@2WK zu~t@nI}ZWUPVXbg#0rTt@WvpWKkxxO?Bh#LF@D&sBAL_Qdt2iiMDQWL&`Z+n(EIbN zY>XjU~=ra*MafT)eiT&;S|GkiX|C@5MA%s zd3sLm6oWtx-xXF8h(BUT+34=&?wb~l-;ZorPp3)4I4>NjrJ$-xqtpMWcoidax>3OC z!n~BdeRX@hQSj1rw#J34+lzszpfBV~p;b3eVBfK55?HUK;a)s2l`h`{Dq}TdD<8nVetp;EGQ}RDv zrE00|XUK8joe($gaob!G{L!w6t;jmr%bp5<(rkPg)O|3yAZcz>2(z#APmg6cl*UsJ=?mAw1X4cgOP&Q&rM_>k&g0n z&hL6+&P~!e#ECmWC|Z}!9DmaM;`sC7C!2)Du?`ZkS*SU9|1s%EXSlYr#3?Y!yrJ(j z2O@j4gIgS54KaNyfpi?PP8%ki;D(zEZwDP3)(FKBm%of`RcJJ4Uee1FkeUDa{Pc^! zGvKw`x(H&X_X^2ECBIALhvMoD^!Db;^1gqqg6HbOB%}x$n)CfpB zH#ll(Z=%$Swa{-f&mLH25eJLcwQMumN)DZfbJMRz2G@HcuIJ(WLy|JrI6aW9!i^XRo=3=XhWBnAm{=MEm7T5>W~*0V z<{m@gq@}N|dY$~%{enxNj##=&dd)?IjL+kC{XY%!ePa5PYDY1?H#GQ!r*bM7cUWRJ zea62Q%SW76u^_7_(p+d&7!5A55d2i6XX9tngC&O5kF3eF$e{khK3#ght**l zG5Jbvv=nRD2vmc-{EwiS#0vy5a(J20+?vP%3YAw1r8xP1Mt)5ifb^hHmRHxvLdy{- zR8}P_PPkw#7xpw z&Spgj+7^qbX=?c;3F3T*~3sUFnH zt<&w#hpwZny^T)XZ_joWP$=Yn_oY%}4GoQey-wWKYLK?|1u}SYELRe^&3}Om*8Sc%sl7hGy15oR=OkQ&m+O7)EbXxQ-$tYS;(nfC&y2}1J??_ zt{1i(-xH)Zxz>~LFgkctIVz4K7J?_&#sE+hw5@xQ8_F>CV>|n8;qOEHm+xtCN5FZ~ z$r=`aML||YWs1v&fteB)0x54RB8VIH0QzpwyZ5xX`&B!gd{$sU9MBQGWzn{HJl_Oh z;Nk}bi?g>u19U*$4lSrVt^?AA-5ga-0$ieS^D8}!qdCTBPRZjONYzDuXE@EqBJ@Mz zdhe<5@ezV(K{Xc(6#L4-T0uuSRVr&y);CWrN_O&=p)p1G7htnPA%_*6W*@adN)do& zJ<~ikd{0FvV{ZMX-nvzVjaSGZ{`_CiIh=jVmh5ia#cyCv{1~HdJR1V2+0obdRdmob z4vlIV>GdcSOgN9o%tOB$PiWT2nhLM(4KM`_+|&X%0k%(Lc^~Ogx!)ZF_@4^f4 zKjF$h2L<|7opXBs0`8VCsl=59a!RnPk&XeFEXpirKtPr#eRezpAfW$2i9cCQ4Z){k zZ9`6Mfutew=|Z?aS>=|+f9~(^KjwoS@?Czz#&f}D%-qTuFJTlgx3ji>!1#`ItVM$F z*yK@OD8t=dGht3#bQ4g=>BhgVL~wIvIB&lv@Jcq4(BmW{)-O3_c@tK*#)(ED=Y24*cIFrQ2f#T;>oLe_ zvEu{MNzHLw^*S$uLxIry{)EV*ou zcl+OF2=EaiVq%z)bfHr$nB?t!eio9)Eo8`IP|J}q^KF+Hh#lt^$tj;6 zoWi<@t#x+>#UoF*Qszg+Q$)p{9jct3m9Pe!w~p_uvq@pGGSF{jhE}@XG2Vq@&jPUb zt44*nzW^MEO|~y`T6~X9G)L=#f5|W@-(xd~6-Yb?UYK7P*#Lsf`k9Of6wcSz%F@1i zq{8Z$IppNBc_wD8x43lv^yu_R~C$oj%Yv9;A1a${Zvuu+td{=`h0$Ycez5AGCq zul(*%cXZ^e0(M*&poAcV%n*XAZP(m=uo>3(ow%t$PSs`>Y$~@Iw!Nd$j!4Z6I2>#n zYs~g)=jqNfg49*_M?@Qs8xByQeahdOZ(z~(BAy~K_y^znb`+c&PJ9W|?lZXeS;j117J{v{{@WX0Mh0W*1sgsH$@^x@1~KNthr7Z3#gSNiFL9%$xxOasCHJTZBa769q1X zK6F%EUGHRAetcSFlU2>JyRJ*f;~GC+Pc%dj2DnpZS~+%Wom%pPU=H&z-t7TZp2aKk zCy@(XSyk~_&>g-eNZSXQmIWEVCCI+3l2<4EWX~wVHampD$#DLJBWo>x4BhMaM{v(n z>+K{r3G1$5zKF72or!ps<9>kmh$K4BpJ}h-f?&tChQc1dk=3~oB5$nFt#j112F!9^ z#P?A0stxx>Lqk{8uTO{8mj|`(sMZ&Y-C8;H{m4atm%QA1B+iuo=PUiNrvJjDE*8~j zzJE3ma1X_>h!MV)nbGBkit<}V9q;(L3ub;whdX;e`K*$2>GRp~(4k&Up*b^p*wy>( zWJzqTFx1HrEKE8A^zo`SdKLq}E`jE1sp+wG8CuTfD&`-G5e&8LPCqb0C7};*op_`4 zMgmB=_pE7GUvQDm^|p)ezwb>XNr(3h!EE+9G7Zt;MfU(rcB7cmlQY;&7XxJlLLgj9 z)lAP6Zoyl9lL!3Pja#bduXZBY{GJrUv@#$Pn;Hpg-MOY@|DkY6!J77(XGq6}sp2~V z&*199l?>P^S96?z7M7Rp(epg|-7k#E^Ks4tb`JiER5=adIjSi!1&t6`#-eP)5YB2X z72HKD1H^CTd6PERyLrRijDk2o-+gd8sb{MAmwfaAZ5}Og6g-8%x8CRRZ5DmSXAA^ zZB*V)d?v41tA(nvsTHApfhl)eO`w)WEUebjf1BVZz|mFA6#Cj?Qgi}~@84iUIP2OO z)I%2ZoSuTgRsw-PlSNHOQ$-tna6F}fszExzsKlELmF+Fr6^-T^sQT%L={ZV(#%E;` z)8j|9;A@rfJaulrVg7lKhb>w0ZPUK%g7%1ekEKV4;;h^186+(WU6hewAo2T&!!N4T z+1F7+iUR@;zue{gUPE-7uBQOzCwN5#3cu2DVW5JPYH>M+Y$M?Hp3Gr_CbHTuG0^sP z3X|PMG1YI{Q8)!p*{-q~_IdZIxe}8mQNuPTwq)t!iuSr3nHl%pc;2nBTY$C0_-&5X zjvH~-^TPQ;>3W;`ep=3^GENj{z-2fzy#xg9&sZayzBX@j^^uI8Nq=fcVOj4#W^S}< z2ex`WO%DxDUi-FxInzE46eUO~nIzB(b3k$4q6CK$9NZ~%H09>=V5f+0P9@gIqmP*U zb6;KL<5}|Yj+c$TP6-}{(x0^sxxZPM1g0}orx|)|>6=&|aXm=eL49%BvBYI3e1i-r zBFWxmJ{*LkPjTb1JHaOG1;0g|ojY~B6!4=0P$vS#C%xC`Ym8}(&(`fewQ}g+ehWb7 z^k@E>Qy!Up)`#)KWn6$&uy%ql-gtu?qjZVsDJ)D30&z9aMY=vD{;^qScQb=v? zUUgv>VKXd7ZA|X6Bc+oontjc6x!#872yNWpYFJodK^W&@<8K%K;y>{Zq(i5t$yiQ^ zMQ0#8M^xKC_>l+|Y7SMByK`TvRlH)ua?xn_CY05})6&-T%guR&I_7~H%?-!HzVpjn zZztSR@6gIj=Pb}>1&t|_7;n6qZL)UIh;C>WOgh=uqbftXAunAU}NKL?>&jS z~+u z$q1Qyq(uQY>gR!>&GI?3NPWMZJ|G zRV_LbnI5BN8MDt4Jvlb&ENiX7Of3!S z7e0`A9#^ytnH6V>E$K1xLDe`gGGde#uAp7h9yin8(cu6X_OTFg^QYo^!6t1=dU8yo z$WCATXO@|B%{cDx^DlbZCl*=F4Pqy|gdp8gJ(4#F-@`kacIIXvTQ*PtvMV@ z)cP|bq$ewydcRHus2GNcWpT>)(-gf;kX;&%OSpW*`5bVj?r>_1=IFLqnWELC%W`$% zpWxZ$MLXxCZ>NckH=4{HszrZYEA^&^?+ZjQNLNtt_Q0 zuffU9k=dqqaSfSKMJ_*;mE*fx)=zg`j-LN&XgwDX=@?ufB_zUY4Ls2?(VQLMws3yy!ou_(O`jQQ8URzsQoZjSEAO6;>vJsRdU++PzXjD7v0=enF+oHnr~jt->O+s&Ev0&yHw&AO<&|Wf(0XxR)5CQX;&7VbDz1`;kSmWT_r1gY^s_hB+beN)Sgst zY(`h{`oI+o%_jjBgOs#W)#nM=FM*BBF#s{$>+0w)|*4LojRWPl9wp;Vo{=@w)!pj!iC=Q>Alx zmt1*`Z~Fs+=azbyzxqFK-9bojiT9Rs90z@ZW{y34ZrHmylZ-7xtVR^Rpu;fXq68Ro zR`9x}0n!CPde+BkcsocUN=I&|&dg-BN#^|S&~&u&)uY*dzI| Sx9k^jqoSbss`{nHhyMo7te_kK literal 0 HcmV?d00001 From 7a11a78b55fa179c8d522fb38b957e483694f881 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 9 Jan 2024 01:31:36 +0200 Subject: [PATCH 616/689] Change mermaid diagrams to their png versions for the PDF builder --- src/vcs/basics.txt | 15 +++++-- src/vcs/branch.txt | 105 ++++++++++++++++++++++++++++++++++++--------- src/vcs/intro.txt | 9 +++- 3 files changed, 103 insertions(+), 26 deletions(-) diff --git a/src/vcs/basics.txt b/src/vcs/basics.txt index 1c93d8ec4..7bf6b5951 100644 --- a/src/vcs/basics.txt +++ b/src/vcs/basics.txt @@ -96,9 +96,18 @@ Remember that each file in your working directory can be in one of two states: Untracked basically means that Git sees a file you didn't have in a previous snapshot (commit), and which hasn't been yet staged. -.. mermaid:: /../assets/mermaid/git/lifecycle.mmd - :align: center - :caption: The lifecycle of the status of repo's files +.. only:: html + + .. mermaid:: /../assets/mermaid/git/lifecycle.mmd + :align: center + :caption: The lifecycle of the status of repo's files + +.. only:: latex + + .. figure:: /../assets/mermaid/git/lifecycle.mmd.png + :align: center + + The lifecycle of the status of repo's files Checking out status of the file(s) ---------------------------------- diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index 199b60944..d66fa62ea 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -21,9 +21,18 @@ zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. -.. mermaid:: /../assets/mermaid/git/commits.mmd - :align: center - :caption: Commits tree +.. only:: html + + .. mermaid:: /../assets/mermaid/git/commits.mmd + :align: center + :caption: Commits tree + +.. only:: latex + + .. figure:: /../assets/mermaid/git/commits.mmd.png + :align: center + + Commits tree A branch in Git is simply a lightweight movable pointer to one of these commits. The default branch name in Git is master. As you start making commits, @@ -156,9 +165,18 @@ last commit on ``master`` branch, Git simply moves the pointer forward. Changes from ``feature/issue53`` are now in the snapshot of the commit pointed to by the ``master`` branch. -.. mermaid:: /../assets/mermaid/git/merge-1.mmd - :align: center - :caption: Fast-forward merge +.. only:: html + + .. mermaid:: /../assets/mermaid/git/merge-1.mmd + :align: center + :caption: Fast-forward merge + +.. only:: latex + + .. figure:: /../assets/mermaid/git/merge-1.mmd.png + :align: center + + Fast-forward merge Now, lets assume another developer started working on ``feature/issue54`` at the same time. And there are few commits on this feature branch. Suppose, @@ -188,9 +206,18 @@ that results from this three-way merge and automatically creates a new commit that points to it. This is referred to as a *merge commit*, and is a special in that it has more than one parent. -.. mermaid:: /../assets/mermaid/git/merge-2.mmd - :align: center - :caption: Merge commit +.. only:: html + + .. mermaid:: /../assets/mermaid/git/merge-2.mmd + :align: center + :caption: Merge commit + +.. only:: latex + + .. figure:: /../assets/mermaid/git/merge-2.mmd.png + :align: center + + Merge commit Merge conflicts --------------- @@ -271,9 +298,18 @@ the ``merge`` and the ``rebase``. Earlier, there was an example of diverged work and commits made on two different branches. -.. mermaid:: /../assets/mermaid/git/rebase-1.mmd - :align: center - :caption: Before rebase +.. only:: html + + .. mermaid:: /../assets/mermaid/git/rebase-1.mmd + :align: center + :caption: Before rebase + +.. only:: latex + + .. figure:: /../assets/mermaid/git/merge-2.mmd.png + :align: center + + Merge commit The easiest way to integrate the branches, as we've already covered, is the ``merge`` command. It performs a three-way merge between the two latest @@ -298,9 +334,18 @@ those diffs to temporary files, resetting the current branch to the same commit as the branch you are rebasing onto, and finally applying each change in turn. -.. mermaid:: /../assets/mermaid/git/rebase-2.mmd - :align: center - :caption: After rebase +.. only:: html + + .. mermaid:: /../assets/mermaid/git/rebase-2.mmd + :align: center + :caption: After rebase + +.. only:: latex + + .. figure:: /../assets/mermaid/git/rebase-2.mmd.png + :align: center + + After rebase .. note:: Other maintainers prefer to rebase (or cherry-pick) contributed work on @@ -318,9 +363,18 @@ of commits on a topic branch and you want to integrate only one of them, or if you only have one commit on a topic branch and you'd prefer to cherry-pick it rather than run rebase. -.. mermaid:: /../assets/mermaid/git/cherry-pick.mmd - :align: center - :caption: Cherry-pick a commit +.. only:: html + + .. mermaid:: /../assets/mermaid/git/cherry-pick.mmd + :align: center + :caption: Cherry-pick a commit + +.. only:: latex + + .. figure:: /../assets/mermaid/git/cherry-pick.mmd.png + :align: center + + Cherry-pick a commit :: @@ -368,6 +422,15 @@ new features and bug fixes are integrated smoothly before being released. This strategy is particularly useful for projects with regular releases and a team working on multiple features concurrently. -.. mermaid:: /../assets/mermaid/git/gitflow.mmd - :align: center - :caption: GitFlow diagram +.. only:: html + + .. mermaid:: /../assets/mermaid/git/gitflow.mmd + :align: center + :caption: GitFlow diagram + +.. only:: latex + + .. figure:: /../assets/mermaid/git/gitflow.mmd.png + :align: center + + GitFlow diagram diff --git a/src/vcs/intro.txt b/src/vcs/intro.txt index 42dd5d6ed..054765204 100644 --- a/src/vcs/intro.txt +++ b/src/vcs/intro.txt @@ -68,10 +68,15 @@ Git has three main states that your files can reside in: to go into your next commit snapshot. - Committed means that the data is safely stored in your local database. -.. mermaid:: /../assets/mermaid/git/states.mmd - :align: center +.. only:: html + + .. mermaid:: /../assets/mermaid/git/states.mmd + :align: center +.. only:: latex + .. figure:: /../assets/mermaid/git/states.mmd.png + :align: center The basic Git workflow goes something like this: From b61cf7d9ddf26f2f670de87ab7a9dcb91fb80c21 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 9 Jan 2024 02:17:52 +0200 Subject: [PATCH 617/689] Update SVG assets --- assets/img/aggregate-function.svg | 632 +++++++++++-- assets/img/celebrate.svg | 150 ++- assets/img/construction.svg | 296 +++--- assets/img/dropbox.svg | 79 +- assets/img/emacs.svg | 104 ++- assets/img/facebook.svg | 79 +- assets/img/geany.svg | 79 +- assets/img/git-commits.svg | 525 ++++++++--- assets/img/git-snapshots.svg | 1408 ++++++++++++++++++++++------- assets/img/google.svg | 106 ++- assets/img/instagram.svg | 186 +++- assets/img/mysql.svg | 120 ++- assets/img/netflix.svg | 126 ++- assets/img/npp.svg | 468 ++++++++-- assets/img/postgres.svg | 91 +- assets/img/pycharm.svg | 374 +++++--- assets/img/python.svg | 112 ++- assets/img/quora.svg | 64 +- assets/img/reddit.svg | 79 +- assets/img/spotify.svg | 79 +- assets/img/sqlite.svg | 89 +- assets/img/vcs-dvcs.svg | 1338 +++++++++++++++++++++------ assets/img/vim.svg | 298 ++++-- assets/img/vscode.svg | 59 +- 24 files changed, 5551 insertions(+), 1390 deletions(-) diff --git a/assets/img/aggregate-function.svg b/assets/img/aggregate-function.svg index 7f8841161..2fc73e3b1 100644 --- a/assets/img/aggregate-function.svg +++ b/assets/img/aggregate-function.svg @@ -1,80 +1,554 @@ + - - - - - -aggregate-func - - - -( - - - - - -DISTINCT - - - - - - - -expr - - - -) - - - -filter-clause - - - - - - - - - - - - -, - - - - - -* - - - - - - - - - - - -ORDER - - - -BY - - - -ordering-term - -, - - - - - - \ No newline at end of file + + + Aggregate functions + + + + + + + aggregate-func + + + + ( + + + + + + DISTINCT + + + + + + + + expr + + + + ) + + + + filter-clause + + + + + + + + + + + + + , + + + + + + * + + + + + + + + + + + + ORDER + + + + BY + + + + ordering-term + + , + + + + + + + + + Aggregate functions + + + + diff --git a/assets/img/celebrate.svg b/assets/img/celebrate.svg index 21bae043b..16e474cfb 100644 --- a/assets/img/celebrate.svg +++ b/assets/img/celebrate.svg @@ -1,44 +1,108 @@ - + - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/construction.svg b/assets/img/construction.svg index b58bb33ee..2c600d548 100644 --- a/assets/img/construction.svg +++ b/assets/img/construction.svg @@ -1,119 +1,183 @@ - - + - - \ No newline at end of file + diff --git a/assets/img/dropbox.svg b/assets/img/dropbox.svg index 4ef068688..7158acaea 100644 --- a/assets/img/dropbox.svg +++ b/assets/img/dropbox.svg @@ -1,17 +1,70 @@ - - - Dropbox-color - Created with Sketch. - - - - - - - - + + + Dropbox Logo + Created with Sketch. + + + + - \ No newline at end of file + + + + + Dropbox Logo + + + + diff --git a/assets/img/emacs.svg b/assets/img/emacs.svg index 64afe6f03..811768de9 100644 --- a/assets/img/emacs.svg +++ b/assets/img/emacs.svg @@ -1,2 +1,102 @@ - -file_type_emacs \ No newline at end of file + + + + + + + + + + + + + + + + + Emacs Logo + + + + + + Emacs Logo + + + + diff --git a/assets/img/facebook.svg b/assets/img/facebook.svg index 88c648577..09541f3a9 100644 --- a/assets/img/facebook.svg +++ b/assets/img/facebook.svg @@ -1,17 +1,70 @@ - - - Facebook-color - Created with Sketch. - - - - - - - - + + + Facebook Logo + Created with Sketch. + + + + - \ No newline at end of file + + + + + Facebook Logo + + + + diff --git a/assets/img/geany.svg b/assets/img/geany.svg index 7d47d524c..1c16320a0 100644 --- a/assets/img/geany.svg +++ b/assets/img/geany.svg @@ -1,10 +1,71 @@ - + - - - - - - - - \ No newline at end of file + + + Geany Logo + + + + + + + + + + Geany Logo + + + + diff --git a/assets/img/git-commits.svg b/assets/img/git-commits.svg index 6f9c9917b..b08ab4f08 100644 --- a/assets/img/git-commits.svg +++ b/assets/img/git-commits.svg @@ -1,109 +1,418 @@ - - - - - - - - - - - - - - - - - - - - - - 383a7630 - - - - - - - 1c060f79 - - - - - - - 1fe791ec - - - - - - - 01cda149 - - - - - - - testing - - - - - - - master - - - - - - - develop - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + 383a7630 + + + + + + + 1c060f79 + + + + + + + 1fe791ec + + + + + + + 01cda149 + + + + + + + testing + + + + + + + master + + + + + + + develop + + + + + + + + + + + + + diff --git a/assets/img/git-snapshots.svg b/assets/img/git-snapshots.svg index 1aa53b2f0..adef343c7 100644 --- a/assets/img/git-snapshots.svg +++ b/assets/img/git-snapshots.svg @@ -1,320 +1,1092 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Version 1 - - - - - - File A - - - - - - File B - - - - - - File C - - - - - - - - - Version 2 - - - - - - - A1 - - - - - - B - - - - - - - C1 - - - - - - - - - Version 3 - - - - - - A1 - - - - - - B - - - - - - - C2 - - - - - - - - - Version 4 - - - - - - - A2 - - - - - - - B1 - - - - - - C2 - - - - - - - - - Version 5 - - - - - - A2 - - - - - - - B2 - - - - - - - C3 - - - - - - - - - - - - - - - Checkins Over Time - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version 1 + + + + + + File A + + + + + + File B + + + + + + File C + + + + + + + + + Version 2 + + + + + + + A1 + + + + + + B + + + + + + + C1 + + + + + + + + + Version 3 + + + + + + A1 + + + + + + B + + + + + + + C2 + + + + + + + + + Version 4 + + + + + + + A2 + + + + + + + B1 + + + + + + C2 + + + + + + + + + Version 5 + + + + + + A2 + + + + + + + B2 + + + + + + + C3 + + + + + + + + + + + + + + + Checkins Over Time + + + + + diff --git a/assets/img/google.svg b/assets/img/google.svg index b26d4a451..370e3945b 100644 --- a/assets/img/google.svg +++ b/assets/img/google.svg @@ -1,28 +1,86 @@ - - - Google-color - Created with Sketch. - - - - - - - - - - - - - - - - - - - + + + Google Logo + Created with Sketch. + + + + + + + + + - \ No newline at end of file + + + + + Google Logo + + + + diff --git a/assets/img/instagram.svg b/assets/img/instagram.svg index b7b97924b..64fe33f14 100644 --- a/assets/img/instagram.svg +++ b/assets/img/instagram.svg @@ -1,27 +1,159 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + Instagram Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Instagram Logo + + + + diff --git a/assets/img/mysql.svg b/assets/img/mysql.svg index a5437cd29..8ea6ac83e 100644 --- a/assets/img/mysql.svg +++ b/assets/img/mysql.svg @@ -1,29 +1,97 @@ - + - - - databases-and-servers/databases/mysql - Created with Sketch. - - - - - - - - - - - - - - - - - - - - + + + MySQL Logo + Created with Sketch. + + + + + + + + + + + + - \ No newline at end of file + + + + + MySQL Logo + + + + diff --git a/assets/img/netflix.svg b/assets/img/netflix.svg index 920720336..0c8ae03b1 100644 --- a/assets/img/netflix.svg +++ b/assets/img/netflix.svg @@ -1,21 +1,105 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + Netflix Logo + + + + + + + + + + + + + + + + + + + + + + + Netflix Logo + + + + diff --git a/assets/img/npp.svg b/assets/img/npp.svg index a0331d399..961beba83 100644 --- a/assets/img/npp.svg +++ b/assets/img/npp.svg @@ -1,7 +1,48 @@ - + - - diff --git a/assets/img/postgres.svg b/assets/img/postgres.svg index d1eefea11..ed52d291f 100644 --- a/assets/img/postgres.svg +++ b/assets/img/postgres.svg @@ -1,16 +1,77 @@ - + - - - - - - - - - - - - - - \ No newline at end of file + + + PostgreSQL Logo + + + + + + + + + + + + + PostgreSQL Logo + + + + diff --git a/assets/img/pycharm.svg b/assets/img/pycharm.svg index 86bb6d44c..f1e6dc34e 100644 --- a/assets/img/pycharm.svg +++ b/assets/img/pycharm.svg @@ -1,106 +1,272 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + PyCharm Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PyCharm Logo + + + + diff --git a/assets/img/python.svg b/assets/img/python.svg index 25df8268f..af0b2040f 100644 --- a/assets/img/python.svg +++ b/assets/img/python.svg @@ -1,15 +1,97 @@ - - - - - - - - - - - - - - - \ No newline at end of file + + + + + Python Logo + + + + + + + + + + + + + + + + + Python Logo + + + + diff --git a/assets/img/quora.svg b/assets/img/quora.svg index a4c327ddc..2698b5e47 100644 --- a/assets/img/quora.svg +++ b/assets/img/quora.svg @@ -1,4 +1,60 @@ - - - - \ No newline at end of file + + + + + Quora Logo + + + + + + + Quora Logo + + + + diff --git a/assets/img/reddit.svg b/assets/img/reddit.svg index 64b767668..962dbb8c8 100644 --- a/assets/img/reddit.svg +++ b/assets/img/reddit.svg @@ -1,17 +1,70 @@ - - - Reddit-color - Created with Sketch. - - - - - - - - + + + Reddit Logo + Created with Sketch. + + + + - \ No newline at end of file + + + + + Reddit Logo + + + + diff --git a/assets/img/spotify.svg b/assets/img/spotify.svg index fb46e3ac8..b55a3cd2b 100644 --- a/assets/img/spotify.svg +++ b/assets/img/spotify.svg @@ -1,17 +1,70 @@ - - - Spotify-color - Created with Sketch. - - - - - - - - + + + Spotify Logo + Created with Sketch. + + + + - \ No newline at end of file + + + + + Spotify Logo + + + + diff --git a/assets/img/sqlite.svg b/assets/img/sqlite.svg index be6336de0..b9f64884e 100644 --- a/assets/img/sqlite.svg +++ b/assets/img/sqlite.svg @@ -1,2 +1,87 @@ - -file_type_sqlite \ No newline at end of file + + + + + + + + + + + + + SQLite Logo + + + + + + + SQLite Logo + + + + diff --git a/assets/img/vcs-dvcs.svg b/assets/img/vcs-dvcs.svg index 65bf23fb6..9f7b20543 100644 --- a/assets/img/vcs-dvcs.svg +++ b/assets/img/vcs-dvcs.svg @@ -1,278 +1,1064 @@ - - - - - - - - - - - - - - - - - - - - - Local Repository A - - - - - - - - - - File - - - - - - - Version Database - - - - - - - - - - Version 3 - - - - - - - Version 2 - - - - - - - Version 1 - - - - - - - - - - - Local Repository B - - - - - - - - - - File - - - - - - - - - - Version Database - - - - - - - - - - Version 3 - - - - - - - Version 2 - - - - - - - Version 1 - - - - - - - - - - - Remote Repository - - - - - - - - - - - - - - - - Version Database - - - - - - - - - - Version 3 - - - - - - - Version 2 - - - - - - - Version 1 - - - + + + + + + + + + + + + + + + + + + + + + Local Repository A + + + + + + + + + + File + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + + + + + + + Local Repository B + + + + + + + + + + File + + + + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + + + + + + + + Remote Repository + + + + + + + + + + + + + + + + Version Database + + + + + + + + + + Version 3 + + + + + + + Version 2 + + + + + + + Version 1 + + + + diff --git a/assets/img/vim.svg b/assets/img/vim.svg index 4c4dbfcf2..731422858 100644 --- a/assets/img/vim.svg +++ b/assets/img/vim.svg @@ -1,56 +1,242 @@ - - - - - - - - - file_type_vim - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + Vim Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vim Logo + + + + diff --git a/assets/img/vscode.svg b/assets/img/vscode.svg index 0efbaffc7..d88acc9e3 100644 --- a/assets/img/vscode.svg +++ b/assets/img/vscode.svg @@ -1,2 +1,57 @@ - -file_type_vscode3 \ No newline at end of file + + + + + + + VSCode Logo + + + + + VSCode Logo + + + + From 442b6aa491704c7d50efd13345b2fa1e1126046e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 9 Jan 2024 03:21:49 +0200 Subject: [PATCH 618/689] Setup Inkscape as svg converter for pdf builder --- poetry.lock | 20 +++++++++++++++++++- pyproject.toml | 1 + requirements.txt | 1 + src/conf.py | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 141376eab..888967d5c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -843,6 +843,24 @@ Sphinx = ">=5" lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] +[[package]] +name = "sphinxcontrib-svg2pdfconverter" +version = "1.2.2" +description = "Sphinx SVG to PDF converter extension" +category = "main" +optional = false +python-versions = "~=3.4" +files = [ + {file = "sphinxcontrib-svg2pdfconverter-1.2.2.tar.gz", hash = "sha256:80a55ca61f70eae93efc65f3814f2f177c86ba55934a9f6c5022f1778b62146b"}, + {file = "sphinxcontrib_svg2pdfconverter-1.2.2-py3-none-any.whl", hash = "sha256:04ec767b55780a6b18d89cc1a8ada6d900c6efde9d1683abdb98a49b144465ca"}, +] + +[package.dependencies] +Sphinx = ">=1.6.3" + +[package.extras] +cairosvg = ["cairosvg (>=1.0)"] + [[package]] name = "toml" version = "0.10.2" @@ -891,4 +909,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "f071d183d2f1e5bc624eabe1397898b37da6b54f2ee0cc293240741d1219fd66" +content-hash = "f5c86228397ade865057c3a908f9ab397b846cce48f7ad0cd432e0002227f5ed" diff --git a/pyproject.toml b/pyproject.toml index e765f81f8..0eacf8a60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ sphinxcontrib-mermaid = "^0.8.1" sphinx-copybutton = "^0.5.2" toml = "^0.10.2" sphinx-reredirects = "^0.1.3" +sphinxcontrib-svg2pdfconverter = "^1.2.2" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt index 77c0b57f7..b14ea369d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,6 +38,7 @@ sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-svg2pdfconverter==1.2.2 ; python_version >= "3.9" and python_version < "4.0" toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/src/conf.py b/src/conf.py index eda595281..a39491224 100644 --- a/src/conf.py +++ b/src/conf.py @@ -25,8 +25,8 @@ master_doc = root_doc = "index" extensions = [ "sphinx.ext.autodoc", - "sphinx.ext.imgconverter", + "sphinxcontrib.inkscapeconverter", "sphinxcontrib.bibtex", "sphinxcontrib.mermaid", "sphinx_rtd_theme", From d7672948c2062352e9e0d7a86276524ce3ca80ad Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 9 Jan 2024 04:05:39 +0200 Subject: [PATCH 619/689] Update translations (Ukrainian) --- .../uk/LC_MESSAGES/spec/libms/index.po | 260 +++++++++--------- src/_locales/uk/LC_MESSAGES/vcs/basics.po | 248 +++++++++-------- src/_locales/uk/LC_MESSAGES/vcs/branch.po | 126 +++++---- 3 files changed, 333 insertions(+), 301 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/spec/libms/index.po b/src/_locales/uk/LC_MESSAGES/spec/libms/index.po index 2baecf838..36a59002a 100644 --- a/src/_locales/uk/LC_MESSAGES/spec/libms/index.po +++ b/src/_locales/uk/LC_MESSAGES/spec/libms/index.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2022.11.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:06+0300\n" +"POT-Creation-Date: 2024-01-09 03:59+0200\n" +"PO-Revision-Date: 2024-01-09 04:02+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: ua \n" "Language: uk\n" @@ -16,8 +16,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/spec/libms/index.rst:3 msgid "Library Management System" @@ -469,11 +469,15 @@ msgstr "" msgid "Relationships" msgstr "Відносини" -#: ../../src/spec/libms/index.rst:228 +#: ../../src/spec/libms/index.rst:234 +msgid "Entity relationship diagram" +msgstr "Діаграма зв'язків" + +#: ../../src/spec/libms/index.rst:237 msgid "Book to author" msgstr "Книга до автору" -#: ../../src/spec/libms/index.rst:230 +#: ../../src/spec/libms/index.rst:239 msgid "" "Each ``Author`` can be associated with multiple ``Books``, and each ``Book`` " "can have **one or more** ``authors``. This establishes a **many-to-many** " @@ -483,11 +487,11 @@ msgstr "" "``Книга`` може мати **одного або більше** ``авторів``. Це встановлює зв'язок " "**багато-до-багатьох** між цими двома сутностями." -#: ../../src/spec/libms/index.rst:235 +#: ../../src/spec/libms/index.rst:244 msgid "Book to genre" msgstr "Книга до жанру" -#: ../../src/spec/libms/index.rst:237 +#: ../../src/spec/libms/index.rst:246 msgid "" "Each ``Genre`` can be associated with multiple ``Books``, and vice-versa. " "However a ``Book`` might not belong to any genre. This relationship between " @@ -499,11 +503,11 @@ msgstr "" "``Жанром`` і ``Книгою`` все ще вважається **багато-до-багатьох**, але з " "можливістю нульових жанрів для книги." -#: ../../src/spec/libms/index.rst:243 +#: ../../src/spec/libms/index.rst:252 msgid "Book to borrow request" msgstr "Книга до запиту на позику" -#: ../../src/spec/libms/index.rst:245 +#: ../../src/spec/libms/index.rst:254 msgid "" "Each ``Book`` can be associated with multiple ``BorrowRequests``, but each " "``BorrowRequest`` refers only one ``book``, forming a **many-to-one** " @@ -513,11 +517,11 @@ msgstr "" "кожен ``Запит на позику`` посилається тільки на одну ``Книгу``, утворюючи " "зв'язок **багато-до-одного**." -#: ../../src/spec/libms/index.rst:250 +#: ../../src/spec/libms/index.rst:259 msgid "User to borrow request" msgstr "Користувач до запиту на позику" -#: ../../src/spec/libms/index.rst:252 +#: ../../src/spec/libms/index.rst:261 msgid "" "Each ``User`` can make multiple ``BorrowRequests``, but each " "``BorrowRequest`` refers to only one book, forming a **many-to-one** " @@ -527,11 +531,11 @@ msgstr "" "``Запит на позику`` відноситься тільки до однієї книги, формуючи зв'язок " "``багато до однієї``." -#: ../../src/spec/libms/index.rst:256 +#: ../../src/spec/libms/index.rst:265 msgid "User to book (as a borrower)" msgstr "Користувач до книги (як запозичувач)" -#: ../../src/spec/libms/index.rst:258 +#: ../../src/spec/libms/index.rst:267 msgid "" "A ``Book`` may have been borrowed by a ``User``, but at any given time, each " "``Book`` can be borrowed by one user only. This forms a **one-to-one** " @@ -541,15 +545,15 @@ msgstr "" "кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " "відносини \"один до одного\"." -#: ../../src/spec/libms/index.rst:264 +#: ../../src/spec/libms/index.rst:273 msgid "Views and templates" msgstr "Подання та шаблони" -#: ../../src/spec/libms/index.rst:267 +#: ../../src/spec/libms/index.rst:276 msgid "Admin site" msgstr "Адмін-сайт" -#: ../../src/spec/libms/index.rst:269 +#: ../../src/spec/libms/index.rst:278 msgid "" "Admin site provides the full control over the entire system. Only admins are " "permitted to use admin site. Librarians should use their dedicated views to " @@ -560,22 +564,22 @@ msgstr "" "повинні використовувати свої виділені подання для виконання операцій, за " "винятком особливих випадків." -#: ../../src/spec/libms/index.rst:275 +#: ../../src/spec/libms/index.rst:284 msgid "Authentication" msgstr "Автентифікація" -#: ../../src/spec/libms/index.rst:278 +#: ../../src/spec/libms/index.rst:287 msgid "Login" msgstr "Логін" -#: ../../src/spec/libms/index.rst:281 ../../src/spec/libms/index.rst:293 -#: ../../src/spec/libms/index.rst:324 ../../src/spec/libms/index.rst:344 -#: ../../src/spec/libms/index.rst:371 ../../src/spec/libms/index.rst:495 -#: ../../src/spec/libms/index.rst:512 +#: ../../src/spec/libms/index.rst:290 ../../src/spec/libms/index.rst:302 +#: ../../src/spec/libms/index.rst:333 ../../src/spec/libms/index.rst:353 +#: ../../src/spec/libms/index.rst:380 ../../src/spec/libms/index.rst:504 +#: ../../src/spec/libms/index.rst:521 msgid "Template" msgstr "Template" -#: ../../src/spec/libms/index.rst:282 +#: ../../src/spec/libms/index.rst:291 msgid "" "A form with fields for entering a username and a password, and a submit " "button." @@ -583,14 +587,14 @@ msgstr "" "Форма з полями для введення імені користувача та пароля, а також кнопкою " "\"Надіслати\"." -#: ../../src/spec/libms/index.rst:285 ../../src/spec/libms/index.rst:303 -#: ../../src/spec/libms/index.rst:329 ../../src/spec/libms/index.rst:353 -#: ../../src/spec/libms/index.rst:390 ../../src/spec/libms/index.rst:476 -#: ../../src/spec/libms/index.rst:499 +#: ../../src/spec/libms/index.rst:294 ../../src/spec/libms/index.rst:312 +#: ../../src/spec/libms/index.rst:338 ../../src/spec/libms/index.rst:362 +#: ../../src/spec/libms/index.rst:399 ../../src/spec/libms/index.rst:485 +#: ../../src/spec/libms/index.rst:508 msgid "View logic" msgstr "View logic" -#: ../../src/spec/libms/index.rst:286 +#: ../../src/spec/libms/index.rst:295 msgid "" "Validate entered credentials and authenticate the user. In case of incorrect " "credentials, display an error message." @@ -598,48 +602,48 @@ msgstr "" "Перевірити введені облікові дані та автентифікувати користувача. У разі " "неправильних облікових даних вивести повідомлення про помилку." -#: ../../src/spec/libms/index.rst:290 +#: ../../src/spec/libms/index.rst:299 msgid "Registration" msgstr "Реєстрація" -#: ../../src/spec/libms/index.rst:294 +#: ../../src/spec/libms/index.rst:303 msgid "A form for new user registration. **Required** fields are:" msgstr "Форма для реєстрації нового користувача. **Обов'язковими** полями є:" -#: ../../src/spec/libms/index.rst:296 +#: ../../src/spec/libms/index.rst:305 msgid "username" msgstr "username" -#: ../../src/spec/libms/index.rst:297 +#: ../../src/spec/libms/index.rst:306 msgid "first name" msgstr "first name" -#: ../../src/spec/libms/index.rst:298 +#: ../../src/spec/libms/index.rst:307 msgid "last name" msgstr "last name" -#: ../../src/spec/libms/index.rst:299 +#: ../../src/spec/libms/index.rst:308 msgid "password" msgstr "password" -#: ../../src/spec/libms/index.rst:300 +#: ../../src/spec/libms/index.rst:309 msgid "confirm password" msgstr "confirm password" -#: ../../src/spec/libms/index.rst:304 +#: ../../src/spec/libms/index.rst:313 msgid "Upon submission, the view should validate the provided data:" msgstr "Після відправлення, перегляд повинен підтвердити надані дані:" -#: ../../src/spec/libms/index.rst:306 +#: ../../src/spec/libms/index.rst:315 msgid "Check if username is already taken." msgstr "Перевірте, чи не зайнято вже ім'я користувача." -#: ../../src/spec/libms/index.rst:307 +#: ../../src/spec/libms/index.rst:316 msgid "Ensure that password and confirm password fields match." msgstr "" "Переконайтеся, що поля \"Пароль\" і \"Підтвердження пароля\" збігаються." -#: ../../src/spec/libms/index.rst:308 +#: ../../src/spec/libms/index.rst:317 msgid "" "Save the user's data if all validations pass. Otherwise, display appropriate " "error messages." @@ -647,7 +651,7 @@ msgstr "" "Зберегти дані користувача, якщо всі перевірки пройдено. В іншому випадку, " "відобразити відповідні повідомлення про помилки." -#: ../../src/spec/libms/index.rst:311 +#: ../../src/spec/libms/index.rst:320 msgid "" "When saving passwords in the database, always store them in a hashed format, " "never in plain text." @@ -655,7 +659,7 @@ msgstr "" "Зберігаючи паролі в базі даних, завжди зберігайте їх у хешованому форматі, а " "не у вигляді простого тексту." -#: ../../src/spec/libms/index.rst:315 +#: ../../src/spec/libms/index.rst:324 msgid "" "Django's built-in ``User`` model and authentication system handle password " "hashing by default, which is a big plus." @@ -663,15 +667,15 @@ msgstr "" "Вбудована в Django модель ``User`` та система автентифікації за " "замовчуванням обробляє хешування паролів, що є великим плюсом." -#: ../../src/spec/libms/index.rst:319 +#: ../../src/spec/libms/index.rst:328 msgid "Borrowing History" msgstr "Історія запозичень" -#: ../../src/spec/libms/index.rst:321 +#: ../../src/spec/libms/index.rst:330 msgid "This view is available only for authenticated users." msgstr "Це подання доступне лише для авторизованих користувачів." -#: ../../src/spec/libms/index.rst:325 +#: ../../src/spec/libms/index.rst:334 msgid "" "Users can see the list of **all** their borrows requests, regardless of " "approve/decline status." @@ -679,11 +683,11 @@ msgstr "" "Користувачі можуть бачити список **всіх** своїх заявок на позики, незалежно " "від статусу схвалення/відхилення." -#: ../../src/spec/libms/index.rst:330 +#: ../../src/spec/libms/index.rst:339 msgid "Authenticated users can see only their own borrow requests." msgstr "Авторизовані користувачі можуть бачити лише власні заявки на позики." -#: ../../src/spec/libms/index.rst:331 +#: ../../src/spec/libms/index.rst:340 msgid "" "Librarians and admins can access borrows requests list for any user, " "registered in the library system." @@ -691,11 +695,11 @@ msgstr "" "Бібліотекарі та адміністратори мають доступ до списку запитів на позики для " "будь-якого користувача, зареєстрованого в бібліотечній системі." -#: ../../src/spec/libms/index.rst:335 +#: ../../src/spec/libms/index.rst:344 msgid "Library collection" msgstr "Бібліотечний фонд" -#: ../../src/spec/libms/index.rst:337 +#: ../../src/spec/libms/index.rst:346 msgid "" "These views are generally available for all (including anonymous) users. The " "functionality for authenticated users include books borrowing." @@ -704,45 +708,45 @@ msgstr "" "користувачів. Функціонал для аутентифікованих користувачів включає в себе " "можливість позичати книги." -#: ../../src/spec/libms/index.rst:341 +#: ../../src/spec/libms/index.rst:350 msgid "Books list" msgstr "Список літератури" -#: ../../src/spec/libms/index.rst:345 +#: ../../src/spec/libms/index.rst:354 msgid "A list (or table) of books. Each book entry should provide information:" msgstr "" "Список (або таблиця) книг. Кожна позиція повинна містити інформацію про " "книгу:" -#: ../../src/spec/libms/index.rst:347 +#: ../../src/spec/libms/index.rst:356 msgid "title" msgstr "title" -#: ../../src/spec/libms/index.rst:348 +#: ../../src/spec/libms/index.rst:357 msgid "author(s)" msgstr "автор(и)" -#: ../../src/spec/libms/index.rst:349 +#: ../../src/spec/libms/index.rst:358 msgid "summary (truncated if too long, 30 words or fewer)" msgstr "опис (скорочене, якщо занадто довге, до 30 слів або менше)" -#: ../../src/spec/libms/index.rst:350 +#: ../../src/spec/libms/index.rst:359 msgid "availability status (either **Available** or **Unavailable**)" msgstr "статус доступності (**Доступний** або **Не доступний**)" -#: ../../src/spec/libms/index.rst:354 +#: ../../src/spec/libms/index.rst:363 msgid "Querying the data" msgstr "Запит даних" -#: ../../src/spec/libms/index.rst:356 +#: ../../src/spec/libms/index.rst:365 msgid "Fetch **all** books from the database" msgstr "Отримати **усі** книги з бази даних" -#: ../../src/spec/libms/index.rst:358 +#: ../../src/spec/libms/index.rst:367 msgid "Checking availability status (visual mark)" msgstr "Перевірка статусу доступності (візуальна позначка)" -#: ../../src/spec/libms/index.rst:360 +#: ../../src/spec/libms/index.rst:369 msgid "" "For each book, determine its availability status. Check ``Book.available`` " "flag." @@ -750,7 +754,7 @@ msgstr "" "Для кожної книги визначте її статус доступності. Встановіть прапорець ``Book." "available``." -#: ../../src/spec/libms/index.rst:364 +#: ../../src/spec/libms/index.rst:373 msgid "" "A user can still create a borrowing request, regardless of the book " "availability status. This is only the visual mark." @@ -758,50 +762,50 @@ msgstr "" "Користувач все одно може створити запит на позику, незалежно від статусу " "доступності книги. Це лише візуальна позначка." -#: ../../src/spec/libms/index.rst:368 +#: ../../src/spec/libms/index.rst:377 msgid "Detail view" msgstr "Детальний перегляд" -#: ../../src/spec/libms/index.rst:372 +#: ../../src/spec/libms/index.rst:381 msgid "" "The detailed view of a specific book, presenting comprehensive information:" msgstr "Детальний огляд конкретної книги, що містить вичерпну інформацію:" -#: ../../src/spec/libms/index.rst:374 +#: ../../src/spec/libms/index.rst:383 msgid "**Title**: Display the book's title prominently." msgstr "**Назва**: Покажіть назву книги на видному місці." -#: ../../src/spec/libms/index.rst:375 +#: ../../src/spec/libms/index.rst:384 msgid "**Genre(s)**: List all associated genres (if any)." msgstr "**Жанр(и)**: Перелічіть усі пов'язані жанри (якщо такі є)." -#: ../../src/spec/libms/index.rst:376 +#: ../../src/spec/libms/index.rst:385 msgid "**Author(s)**: List all associated authors." msgstr "**Автор(и)**: Перерахуйте всіх асоційованих авторів." -#: ../../src/spec/libms/index.rst:377 +#: ../../src/spec/libms/index.rst:386 msgid "**ISBN**: The International Standard Book Number." msgstr "**ISBN**: Міжнародний стандартний номер книги." -#: ../../src/spec/libms/index.rst:378 +#: ../../src/spec/libms/index.rst:387 msgid "**Published Date**: When the book was published." msgstr "**Дата публікації**: Коли вийшла друком книга." -#: ../../src/spec/libms/index.rst:379 +#: ../../src/spec/libms/index.rst:388 msgid "" "**Publisher**: The name of the entity or company responsible for publishing" msgstr "" "**Видавець**: Назва організації або компанії, відповідальної за публікацію" -#: ../../src/spec/libms/index.rst:380 +#: ../../src/spec/libms/index.rst:389 msgid "**Summary**: A full summary or description of the book. the book." msgstr "**Коротка анотація**: Повне резюме або опис книги. книги." -#: ../../src/spec/libms/index.rst:382 +#: ../../src/spec/libms/index.rst:391 msgid "**Action Buttons** (For authenticated users only):" msgstr "**Кнопки дій** (Тільки для авторизованих користувачів):" -#: ../../src/spec/libms/index.rst:384 +#: ../../src/spec/libms/index.rst:393 msgid "" "**Borrow Request Button**: If the user has no associated borrow request they " "can create a new one." @@ -809,7 +813,7 @@ msgstr "" "**Кнопка запиту на позику**: Якщо користувач не має пов'язаного запиту на " "позику, він може створити новий." -#: ../../src/spec/libms/index.rst:386 +#: ../../src/spec/libms/index.rst:395 msgid "" "**Gather Book Button**: If the user's borrow request for this book has been " "approved, allow the user to confirm they've picked up the book." @@ -817,11 +821,11 @@ msgstr "" "**Кнопка Забрати книгу**: Якщо запит користувача на позику цієї книги було " "схвалено, дозвольте користувачеві підтвердити, що він забрав книгу." -#: ../../src/spec/libms/index.rst:391 +#: ../../src/spec/libms/index.rst:400 msgid "**Fetching Book Details**:" msgstr "**Доступ до деталей книги**:" -#: ../../src/spec/libms/index.rst:393 +#: ../../src/spec/libms/index.rst:402 msgid "" "Use the book's identifier (usually a primary key) to fetch its details from " "the database." @@ -829,11 +833,11 @@ msgstr "" "Використовуйте ідентифікатор книги (зазвичай первинний ключ), щоб отримати " "інформацію про неї з бази даних." -#: ../../src/spec/libms/index.rst:396 +#: ../../src/spec/libms/index.rst:405 msgid "**Checking User Authentication**:" msgstr "**Перевірка автентичності користувача**:" -#: ../../src/spec/libms/index.rst:398 +#: ../../src/spec/libms/index.rst:407 msgid "" "Determine if a user is authenticated. If they are, display the appropriate " "action buttons based on the book's availability status and any existing " @@ -843,15 +847,15 @@ msgstr "" "кнопки дій на основі статусу доступності книги та наявних запитів " "користувача на позику." -#: ../../src/spec/libms/index.rst:402 +#: ../../src/spec/libms/index.rst:411 msgid "**Handling Borrow Requests**:" msgstr "**Обробка запитів на позику**:" -#: ../../src/spec/libms/index.rst:404 +#: ../../src/spec/libms/index.rst:413 msgid "If an authenticated user clicks on the \"Borrow Request\" button:" msgstr "Якщо авторизований користувач натискає кнопку \"Запит на позику\":" -#: ../../src/spec/libms/index.rst:406 +#: ../../src/spec/libms/index.rst:415 msgid "" "Create a new borrow request in the ``BorrowRequest`` model with status " "\"pending\"." @@ -859,11 +863,11 @@ msgstr "" "Створіть новий запит на позику в моделі ``BorrowRequest`` зі статусом \"на " "розгляді\"." -#: ../../src/spec/libms/index.rst:408 +#: ../../src/spec/libms/index.rst:417 msgid "Update the book's status to \"Awaiting approval\"." msgstr "Оновіть статус книги на \"Очікує затвердження\"." -#: ../../src/spec/libms/index.rst:409 +#: ../../src/spec/libms/index.rst:418 msgid "" "Redirect the user to a confirmation page or display a message indicating the " "request has been made." @@ -871,11 +875,11 @@ msgstr "" "Перенаправлення користувача на сторінку підтвердження або відображення " "повідомлення про те, що запит було зроблено." -#: ../../src/spec/libms/index.rst:412 +#: ../../src/spec/libms/index.rst:421 msgid "**Handling Book Gathering**:" msgstr "**Опрацювання Позики Книги**:" -#: ../../src/spec/libms/index.rst:414 +#: ../../src/spec/libms/index.rst:423 msgid "" "If an authenticated user has an approved borrow request and clicks the " "\"Gather Book\" button:" @@ -883,15 +887,15 @@ msgstr "" "Якщо авторизований користувач має схвалений запит на позику і натискає " "кнопку \"Зібрати книгу\":" -#: ../../src/spec/libms/index.rst:417 +#: ../../src/spec/libms/index.rst:426 msgid "Update the book's status to \"Borrowed\"." msgstr "Оновіть статус книги на \"Позичена\"." -#: ../../src/spec/libms/index.rst:418 +#: ../../src/spec/libms/index.rst:427 msgid "Update the borrow request's status to \"complete\"." msgstr "Оновіть статус запиту на позику до \"завершено\"." -#: ../../src/spec/libms/index.rst:419 +#: ../../src/spec/libms/index.rst:428 msgid "" "Redirect the user to a confirmation page or display a message indicating " "they've picked up the book." @@ -899,7 +903,7 @@ msgstr "" "Перенаправляйте користувача на сторінку підтвердження або показуйте " "повідомлення про те, що він забрав книгу." -#: ../../src/spec/libms/index.rst:423 +#: ../../src/spec/libms/index.rst:432 msgid "" "Always ensure the user's actions are authenticated and authorized. This " "prevents unauthorized borrow requests or gathering of books. Also, consider " @@ -911,20 +915,20 @@ msgstr "" "подумайте про те, щоб додати обробку помилок для випадків, коли не вдається " "отримати дані про книгу, або будь-яких інших непередбачуваних проблем." -#: ../../src/spec/libms/index.rst:429 +#: ../../src/spec/libms/index.rst:438 msgid "Books management" msgstr "Управління книгами" -#: ../../src/spec/libms/index.rst:431 +#: ../../src/spec/libms/index.rst:440 msgid "These views are available only for staff (librarians and admins)." msgstr "" "Ці перегляди доступні лише для персоналу (бібліотекарів та адміністраторів)." -#: ../../src/spec/libms/index.rst:434 +#: ../../src/spec/libms/index.rst:443 msgid "Authors and genres management" msgstr "Управління авторами та жанрами" -#: ../../src/spec/libms/index.rst:436 +#: ../../src/spec/libms/index.rst:445 msgid "" "Only librarians and admins can add, modify or delete authors and genres. No " "additional views for CRUD operations required (except admin site). " @@ -937,11 +941,11 @@ msgstr "" "через сайт адміністратора. Тільки адміністратори можуть видаляти авторів або " "жанри." -#: ../../src/spec/libms/index.rst:442 +#: ../../src/spec/libms/index.rst:451 msgid "Book creation and update" msgstr "Створення та оновлення книг" -#: ../../src/spec/libms/index.rst:444 +#: ../../src/spec/libms/index.rst:453 msgid "" "The template should comprise a form with fields corresponding to the book's " "attributes. Here are the essential elements for the form:" @@ -949,24 +953,24 @@ msgstr "" "Шаблон повинен містити форму з полями, що відповідають атрибутам книги. Ось " "основні елементи форми:" -#: ../../src/spec/libms/index.rst:448 ../../src/spec/libms/index.rst:463 +#: ../../src/spec/libms/index.rst:457 ../../src/spec/libms/index.rst:472 msgid "A text input field." msgstr "Поле для введення тексту." -#: ../../src/spec/libms/index.rst:451 +#: ../../src/spec/libms/index.rst:460 msgid "A textarea for a brief description or synopsis." msgstr "Текстова область для короткого опису або синопсису." -#: ../../src/spec/libms/index.rst:454 +#: ../../src/spec/libms/index.rst:463 msgid "A text input field for the book's International Standard Book Number." msgstr "Поле для введення міжнародного стандартного номера книги." -#: ../../src/spec/libms/index.rst:457 +#: ../../src/spec/libms/index.rst:466 msgid "A checkbox indicating if a book is available. Defaults to ``True``." msgstr "" "Прапорець, що вказує на наявність книги. За замовчуванням стоїть ``True``." -#: ../../src/spec/libms/index.rst:460 +#: ../../src/spec/libms/index.rst:469 msgid "A date input field." msgstr "Поле для введення дати." @@ -974,7 +978,7 @@ msgstr "Поле для введення дати." msgid "Genres" msgstr "Жанри" -#: ../../src/spec/libms/index.rst:466 +#: ../../src/spec/libms/index.rst:475 msgid "" "A multi-select list of genres (e.g. dropdown, checkboxes etc.). This should " "fetch available genres from the database and allow users to select zero or " @@ -988,7 +992,7 @@ msgstr "" msgid "Authors" msgstr "Автори" -#: ../../src/spec/libms/index.rst:471 +#: ../../src/spec/libms/index.rst:480 msgid "" "A multi-select list of authors (e.g. dropdown, checkboxes etc.). This should " "fetch available authors from the database and allow users to select one or " @@ -998,7 +1002,7 @@ msgstr "" "тощо). Він повинен отримувати доступних авторів з бази даних і дозволяти " "користувачам вибирати одного або декількох авторів." -#: ../../src/spec/libms/index.rst:477 +#: ../../src/spec/libms/index.rst:486 msgid "" "If it's an *update* action, pre-populate the form fields with the existing " "details of the book fetched from the database." @@ -1006,23 +1010,23 @@ msgstr "" "Якщо це дія *оновлення*, попередньо заповніть поля форми існуючими даними " "книги, отриманими з бази даних." -#: ../../src/spec/libms/index.rst:479 +#: ../../src/spec/libms/index.rst:488 msgid "For *creation*, provide an empty form for the librarian to fill in." msgstr "Для *створення* надайте бібліотекарю порожню форму для заповнення." -#: ../../src/spec/libms/index.rst:480 +#: ../../src/spec/libms/index.rst:489 msgid "Ensure the published date is logical (e.g. not a future date)." msgstr "" "Переконайтеся, що опублікована дата є логічною (наприклад, не є датою " "майбутнього)." -#: ../../src/spec/libms/index.rst:481 +#: ../../src/spec/libms/index.rst:490 msgid "Validate required inputs, according to general ``Book`` model rules." msgstr "" "Перевірити необхідні вхідні дані відповідно до загальних правил моделі " "``Book``." -#: ../../src/spec/libms/index.rst:482 +#: ../../src/spec/libms/index.rst:491 msgid "" "If validations pass: save changes to the database; otherwise, provide " "helpful error messages." @@ -1030,7 +1034,7 @@ msgstr "" "Якщо перевірка пройшла успішно: збережіть зміни в базі даних; в іншому " "випадку надайте корисні повідомлення про помилки." -#: ../../src/spec/libms/index.rst:486 +#: ../../src/spec/libms/index.rst:495 msgid "" "You MAY provide a mechanism (like modal or a quick entry form) to add a new " "genre or author without leaving the book form page." @@ -1039,40 +1043,40 @@ msgstr "" "введення) для додавання нового жанру або автора, не виходячи зі сторінки " "форми книги." -#: ../../src/spec/libms/index.rst:490 +#: ../../src/spec/libms/index.rst:499 msgid "Book deletion" msgstr "Видалення книги" -#: ../../src/spec/libms/index.rst:492 +#: ../../src/spec/libms/index.rst:501 msgid "" "Only librarians and administrators are permitted to perform this action." msgstr "Тільки бібліотекарі та адміністратори мають право виконувати цю дію." -#: ../../src/spec/libms/index.rst:496 +#: ../../src/spec/libms/index.rst:505 msgid "A confirm delete form with **Submit** and **Cancel** buttons." msgstr "Форма підтвердження видалення з кнопками **Подати** та **Скасувати**." -#: ../../src/spec/libms/index.rst:500 +#: ../../src/spec/libms/index.rst:509 msgid "Authorize user before deleting performing deletion." msgstr "Авторизуйте користувача перед виконанням видалення." -#: ../../src/spec/libms/index.rst:501 +#: ../../src/spec/libms/index.rst:510 msgid "" "If a form is submitted, a book should be removed from the library collection." msgstr "Якщо формуляр подано, книга має бути вилучена з бібліотечної колекції." -#: ../../src/spec/libms/index.rst:503 +#: ../../src/spec/libms/index.rst:512 msgid "" "If deletion is canceled view should redirect back to book detail view page." msgstr "" "Якщо видалення скасовано, перегляд має бути перенаправлений назад на " "сторінку детального перегляду книги." -#: ../../src/spec/libms/index.rst:506 +#: ../../src/spec/libms/index.rst:515 msgid "Borrow requests" msgstr "Запити на позики" -#: ../../src/spec/libms/index.rst:508 +#: ../../src/spec/libms/index.rst:517 msgid "" "This view facilitates the management of borrowing requests for librarians " "and admins, aiding in their prompt handling." @@ -1080,7 +1084,7 @@ msgstr "" "Цей перегляд полегшує бібліотекарям і адміністраторам управління запитами на " "позики, допомагаючи оперативно їх обробляти." -#: ../../src/spec/libms/index.rst:513 +#: ../../src/spec/libms/index.rst:522 msgid "" "Present a table showcasing the list of borrow requests. Each row embodies a " "borrow request and encompasses:" @@ -1088,19 +1092,19 @@ msgstr "" "Уявіть таблицю, що відображає список запитів на позики. Кожен рядок " "відображає один запит на позику і включає в себе всі запити:" -#: ../../src/spec/libms/index.rst:516 +#: ../../src/spec/libms/index.rst:525 msgid "**Book Title**: Title of the requested book." msgstr "**Назва книги**: Назва запитуваної книги." -#: ../../src/spec/libms/index.rst:517 +#: ../../src/spec/libms/index.rst:526 msgid "**User**: Identifier of the user who initiated the request." msgstr "**Користувач**: Ідентифікатор користувача, який ініціював запит." -#: ../../src/spec/libms/index.rst:518 +#: ../../src/spec/libms/index.rst:527 msgid "**Request Date**: Date of the request's inception." msgstr "**Дата запиту**: Дата створення запиту." -#: ../../src/spec/libms/index.rst:519 +#: ../../src/spec/libms/index.rst:528 msgid "" "**Due Date**: - Input field for librarians to set upon approval for new " "requests. - For approved ones, display the librarian-set date." @@ -1109,7 +1113,7 @@ msgstr "" "нових запитів. - Для затверджених запитів відображатиметься дата, " "встановлена бібліотекарем." -#: ../../src/spec/libms/index.rst:522 +#: ../../src/spec/libms/index.rst:531 msgid "" "**Status**: Present state of the request (New, Approved, Completed, " "Declined)." @@ -1117,7 +1121,7 @@ msgstr "" "**Статус**: Поточний стан запиту (Новий, Затверджений, Завершений, " "Відхилений)." -#: ../../src/spec/libms/index.rst:524 +#: ../../src/spec/libms/index.rst:533 msgid "" "**Approve Button**: Visible for new requests. Toggles status to \"Approved\" " "and freezes the due date." @@ -1125,7 +1129,7 @@ msgstr "" "**Кнопка \"Затвердити\"**: Відображається для нових запитів. Перемикає " "статус на \"Затверджено\" і заморожує дату виконання." -#: ../../src/spec/libms/index.rst:526 +#: ../../src/spec/libms/index.rst:535 msgid "" "**Decline Button**: Appears for new requests. Sets status to \"Declined\" " "and can prompt for a decline reason." @@ -1133,7 +1137,7 @@ msgstr "" "**Кнопка \"Відхилити\"**: З'являється для нових запитів. Встановлює статус " "\"Відхилено\" і може запитувати причину відхилення." -#: ../../src/spec/libms/index.rst:528 +#: ../../src/spec/libms/index.rst:537 msgid "" "**Complete Button**: Displayed for approved requests. Marks the request as " "completed." @@ -1141,11 +1145,11 @@ msgstr "" "**Кнопка \"Завершити\"**: Відображається для затверджених запитів. Позначає " "запит як завершений." -#: ../../src/spec/libms/index.rst:532 +#: ../../src/spec/libms/index.rst:541 msgid "View Logic" msgstr "View Logic" -#: ../../src/spec/libms/index.rst:533 +#: ../../src/spec/libms/index.rst:542 msgid "" "**Approve Borrow Request**: - Validate book availability. - Modify book " "status to \"Borrowed\". - Switch borrow request to \"Approved\". - " @@ -1157,7 +1161,7 @@ msgstr "" "\"Затверджено\". - Визначте дату повернення відповідно до побажань " "бібліотекаря. - Повідомте користувача про схвалення та дату повернення." -#: ../../src/spec/libms/index.rst:540 +#: ../../src/spec/libms/index.rst:549 msgid "" "**Decline Borrow Request**: - Change borrow request status to " "\"Declined\". - Optionally, procure decline reason from librarian. - " @@ -1167,7 +1171,7 @@ msgstr "" "За бажанням, запитайте причину відмови у бібліотекаря. - Повідомте " "користувача про відхилення." -#: ../../src/spec/libms/index.rst:545 +#: ../../src/spec/libms/index.rst:554 msgid "" "**Complete Borrow Request**: - Ensure book's return. - Update book " "status to \"Available\". - Toggle borrow request status to \"Completed\". " @@ -1178,7 +1182,7 @@ msgstr "" "\"Виконано\". - Якщо потрібно, запишіть будь-які примітки або пошкодження " "під час повернення." -#: ../../src/spec/libms/index.rst:552 +#: ../../src/spec/libms/index.rst:561 msgid "" "Implementing reminders for near-due borrow requests can function as an alert " "system for both the librarian and the user." diff --git a/src/_locales/uk/LC_MESSAGES/vcs/basics.po b/src/_locales/uk/LC_MESSAGES/vcs/basics.po index c8348a49b..0955e6e57 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs/basics.po +++ b/src/_locales/uk/LC_MESSAGES/vcs/basics.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"POT-Creation-Date: 2024-01-09 03:59+0200\n" +"PO-Revision-Date: 2024-01-09 04:03+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -16,8 +16,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/vcs/basics.txt:-1 msgid "Version control system" @@ -193,18 +193,22 @@ msgstr "" "вашій області сховища. По суті, це означає, що Git бачить файл, якого не " "було у попередньому знімку (комміті), і який ще не було покладено у сховище." -#: ../../src/vcs/basics.txt:104 +#: ../../src/vcs/basics.txt:110 +msgid "The lifecycle of the status of repo's files" +msgstr "Життєвий цикл статусу файлів репозиторію" + +#: ../../src/vcs/basics.txt:113 msgid "Checking out status of the file(s)" msgstr "Перевірка стану файлу(ів)" -#: ../../src/vcs/basics.txt:106 +#: ../../src/vcs/basics.txt:115 msgid "" "The main tool you use to determine which files are in which state is the " "``git status`` command." msgstr "" "Основним інструментом для визначення стану файлів є команда ``git status``." -#: ../../src/vcs/basics.txt:133 +#: ../../src/vcs/basics.txt:142 msgid "" "Newly added *README.md* file is untracked, because it's under \"Untracked " "files\" heading the status output." @@ -212,17 +216,17 @@ msgstr "" "Щойно доданий файл *README.md* не відстежується, оскільки він знаходиться у " "розділі \"Файли, що не відстежуються\" у виведенні статусу." -#: ../../src/vcs/basics.txt:137 +#: ../../src/vcs/basics.txt:146 msgid "Tracking new files" msgstr "Відстеження нових файлів" -#: ../../src/vcs/basics.txt:139 +#: ../../src/vcs/basics.txt:148 msgid "In order to begin tracking a new file, you use the ``git add`` command." msgstr "" "Для того, щоб почати відстеження нового файлу, скористайтеся командою ``git " "add``." -#: ../../src/vcs/basics.txt:153 +#: ../../src/vcs/basics.txt:162 msgid "" "From now *README.md* file is **added** to the stage area and ready to be " "committed (is under \"Changes to be committed\" heading)." @@ -230,7 +234,7 @@ msgstr "" "Відтепер файл *README.md* **додано** до області сцени і він готовий до " "фіксації (знаходиться під заголовком \"Зміни, що підлягають фіксації\")." -#: ../../src/vcs/basics.txt:157 +#: ../../src/vcs/basics.txt:166 msgid "" "You can use wildcards, to stage multiple files at once. The most common use " "cases is to add **all** modified files, or files inside of a specific " @@ -240,11 +244,11 @@ msgstr "" "файлів одночасно. Найпоширенішим випадком використання є додавання **усіх** " "змінених файлів або файлів у певному каталозі." -#: ../../src/vcs/basics.txt:168 +#: ../../src/vcs/basics.txt:177 msgid "Staging modified files" msgstr "Зберігання змінених файлів" -#: ../../src/vcs/basics.txt:170 +#: ../../src/vcs/basics.txt:179 msgid "" "If a staged (or already committed) file has been changed, it will be moved " "under \"Modified\" heading. These changes wouldn't be committed unless they " @@ -254,12 +258,12 @@ msgstr "" "буде переміщено у рубрику \"Змінено\". Ці зміни не будуть зафіксовані, якщо " "вони не були поетапними." -#: ../../src/vcs/basics.txt:190 +#: ../../src/vcs/basics.txt:199 msgid "" "Changes may be added to the stage area by repeating ``git add`` command." msgstr "Зміни можна додати до області сцени, повторивши команду ``git add``." -#: ../../src/vcs/basics.txt:191 +#: ../../src/vcs/basics.txt:200 msgid "" "Changes may be discard by ``git restore `` command. This action will " "restore file to its **staged** version." @@ -267,11 +271,11 @@ msgstr "" "Зміни можна відкинути командою ``git restore ``. Ця дія відновить файл " "до його **попередньої** версії." -#: ../../src/vcs/basics.txt:195 +#: ../../src/vcs/basics.txt:204 msgid "Committing changes" msgstr "Фіксація змін" -#: ../../src/vcs/basics.txt:197 +#: ../../src/vcs/basics.txt:206 msgid "" "Now that the stage area is set up the way required, it's time to commit " "changes. Remember that anything that is still unstaged -- any files you have " @@ -283,15 +287,15 @@ msgstr "" "створили або змінили, але не запустили git-додаток з моменту редагування, - " "не потраплять до цього коміту." -#: ../../src/vcs/basics.txt:202 +#: ../../src/vcs/basics.txt:211 msgid "The simplest way to commit is to type ``git commit``:" msgstr "Найпростіший спосіб фіксації - ввести ``git commit``:" -#: ../../src/vcs/basics.txt:208 +#: ../../src/vcs/basics.txt:217 msgid "Doing so launches your editor of choice." msgstr "Після цього запуститься обраний вами редактор." -#: ../../src/vcs/basics.txt:211 +#: ../../src/vcs/basics.txt:220 msgid "" "This is set by your shell's EDITOR environment variable -- usually vim or " "emacs, although you can configure it with whatever you want using the ``git " @@ -301,7 +305,7 @@ msgstr "" "emacs, хоча ви можете налаштувати її як завгодно за допомогою ``git config --" "global core.editor``" -#: ../../src/vcs/basics.txt:215 +#: ../../src/vcs/basics.txt:224 msgid "" "Alternatively, you can type your commit message inline with the ``commit`` " "command by specifying it after a ``-m`` flag, like this:" @@ -309,7 +313,7 @@ msgstr "" "Крім того, ви можете ввести повідомлення про фіксацію у рядку з командою " "``commit``, вказавши його після прапорця ``-m``, як показано нижче:" -#: ../../src/vcs/basics.txt:222 +#: ../../src/vcs/basics.txt:231 msgid "" "Although it can be amazingly useful for crafting commits exactly how you " "want them, the staging area is sometimes a bit more complex than you need in " @@ -326,11 +330,11 @@ msgstr "" "відстежується, перед виконанням комміту, дозволяючи вам пропустити частину " "git add:" -#: ../../src/vcs/basics.txt:263 +#: ../../src/vcs/basics.txt:272 msgid "Ignoring files" msgstr "Ігнорування файлів" -#: ../../src/vcs/basics.txt:265 +#: ../../src/vcs/basics.txt:274 msgid "" "Often, there is a class of files, that should not be a part of a repo. You " "want these files to be prevent from being automatically added or even shown " @@ -348,11 +352,11 @@ msgstr "" "можете створити файл *.gitignore*. Ось вміст *.gitignore*, який " "використовується у поточному сховищі:" -#: ../../src/vcs/basics.txt:305 +#: ../../src/vcs/basics.txt:314 msgid "These lines mean:" msgstr "Ці рядки означають:" -#: ../../src/vcs/basics.txt:307 +#: ../../src/vcs/basics.txt:316 msgid "" "Content within directories named \".venv\", \".env\", \"venv\" or \"env\" " "will be ignored completely." @@ -360,11 +364,11 @@ msgstr "" "Вміст каталогів з іменами \".venv\", \".env\", \"venv\" або \"env\" буде " "повністю проігноровано." -#: ../../src/vcs/basics.txt:309 +#: ../../src/vcs/basics.txt:318 msgid "Content within \"node_modules\" directory will be ignored completely." msgstr "Вміст каталогу \"node_modules\" буде повністю проігноровано." -#: ../../src/vcs/basics.txt:310 +#: ../../src/vcs/basics.txt:319 msgid "" "Any files within directories named \".vscode\" or \".idea\" will be ignored " "completely." @@ -372,24 +376,24 @@ msgstr "" "Будь-які файли в каталогах з іменами \".vscode\" або \".idea\" будуть " "повністю проігноровані." -#: ../../src/vcs/basics.txt:312 +#: ../../src/vcs/basics.txt:321 msgid "Any file with name starting with hash (#) will be ignored." msgstr "" "Будь-який файл з іменем, що починається з хешу (#), буде проігноровано." -#: ../../src/vcs/basics.txt:313 +#: ../../src/vcs/basics.txt:322 msgid "Any file with name ending with tilda (~) will be ignored." msgstr "" "Будь-який файл, ім'я якого закінчується на тильду (~), буде проігноровано." -#: ../../src/vcs/basics.txt:314 +#: ../../src/vcs/basics.txt:323 msgid "" "Content within directories named \"temp\" or \"tmp\" will be ignored " "completely." msgstr "" "Вміст каталогів з іменами \"temp\" або \"tmp\" буде повністю проігноровано." -#: ../../src/vcs/basics.txt:316 +#: ../../src/vcs/basics.txt:325 msgid "" "Content within directories named \"_builds\", \"_build\", \"builds\" or " "\"build\" will be ignored completely." @@ -397,17 +401,17 @@ msgstr "" "Вміст каталогів з іменами \"_builds\", \"_build\", \"builds\" або \"build\" " "буде повністю проігноровано." -#: ../../src/vcs/basics.txt:318 +#: ../../src/vcs/basics.txt:327 msgid "Any file with name ending with \".pot\" will be ignored." msgstr "" "Будь-який файл з іменем, що закінчується на \".pot\", буде проігноровано." -#: ../../src/vcs/basics.txt:319 +#: ../../src/vcs/basics.txt:328 msgid "Any file with name ending with \".mo\" will be ignored." msgstr "" "Будь-який файл з іменем, що закінчується на \".mo\", буде проігноровано." -#: ../../src/vcs/basics.txt:321 +#: ../../src/vcs/basics.txt:330 msgid "" "Setting up a *.gitignore* file for your new repository before you get going " "is generally a good idea so you don't accidentally commit files that you " @@ -417,18 +421,18 @@ msgstr "" "роботи, як правило, є гарною ідеєю, щоб випадково не зафіксувати файли, які " "вам насправді не потрібні у вашому Git-репозиторії." -#: ../../src/vcs/basics.txt:325 +#: ../../src/vcs/basics.txt:334 msgid "" "The rules for the patterns you can put in the *.gitignore* file are as " "follows:" msgstr "" "Правила для шаблонів, які ви можете помістити у *.gitignore* файл, такі:" -#: ../../src/vcs/basics.txt:327 +#: ../../src/vcs/basics.txt:336 msgid "Blank lines or lines starting with # are ignored." msgstr "Порожні рядки або рядки, що починаються з #, ігноруються." -#: ../../src/vcs/basics.txt:328 +#: ../../src/vcs/basics.txt:337 msgid "" "Standard glob patterns work, and will be applied recursively throughout the " "entire working tree." @@ -436,23 +440,23 @@ msgstr "" "Працюють стандартні глобальні шаблони, які будуть застосовуватися рекурсивно " "по всьому робочому дереву." -#: ../../src/vcs/basics.txt:330 +#: ../../src/vcs/basics.txt:339 msgid "" "You can start patterns with a forward slash (/) to avoid recursive inclusion." msgstr "" "Щоб уникнути рекурсивного включення, ви можете починати шаблони з прямої " "похилої риски (/)." -#: ../../src/vcs/basics.txt:332 +#: ../../src/vcs/basics.txt:341 msgid "You can end patterns with a forward slash (/) to specify a directory." msgstr "" "Ви можете закінчувати шаблони прямою похилою рискою (/), щоб вказати каталог." -#: ../../src/vcs/basics.txt:333 +#: ../../src/vcs/basics.txt:342 msgid "You can negate a pattern by starting it with an exclamation point (!)." msgstr "Ви можете заперечити шаблон, почавши його зі знаку оклику (!)." -#: ../../src/vcs/basics.txt:335 +#: ../../src/vcs/basics.txt:344 msgid "" "Glob patterns are like simplified regular expressions that shells use. An " "asterisk (\\*) matches zero or more characters; [ab] matches any character " @@ -471,11 +475,11 @@ msgstr "" "вкладених каталогів; a/\\*\\*/z буде відповідати *a/z*, *a/b/z*, *a/b/c/z* і " "так далі." -#: ../../src/vcs/basics.txt:344 +#: ../../src/vcs/basics.txt:353 msgid "Viewing the commit history" msgstr "Перегляд історії коммітів" -#: ../../src/vcs/basics.txt:346 +#: ../../src/vcs/basics.txt:355 msgid "" "After you have created several commits, or if you have cloned a repository " "with an existing commit history, you'll probably want to look back to see " @@ -487,7 +491,7 @@ msgstr "" "побачити, що сталося. Найпростішим і найпотужнішим інструментом для цього є " "команда ``git log``." -#: ../../src/vcs/basics.txt:372 +#: ../../src/vcs/basics.txt:381 msgid "" "By default, with no arguments, ``git log`` lists the commits made in that " "repository in reverse chronological order; that is, the most recent commits " @@ -501,7 +505,7 @@ msgstr "" "показує кожне внесення з його контрольною сумою SHA-1, ім'ям та електронною " "адресою автора, датою створення та повідомленням про внесення." -#: ../../src/vcs/basics.txt:378 +#: ../../src/vcs/basics.txt:387 msgid "" "One of the more helpful options is ``-p`` or ``--patch``, which shows the " "difference (the *patch* output) introduced in each commit. You can also " @@ -513,7 +517,7 @@ msgstr "" "обмежити кількість відображуваних записів, наприклад, за допомогою ``-" "``, щоб показати лише потрібну кількість останніх записів." -#: ../../src/vcs/basics.txt:414 +#: ../../src/vcs/basics.txt:423 msgid "" "This option display the same information but with a diff directly following " "each entry. This is very helpful for code review or to quickly browse what " @@ -526,7 +530,7 @@ msgstr "" "також можете скористатися низкою параметрів підсумовування за допомогою " "``git log``." -#: ../../src/vcs/basics.txt:419 +#: ../../src/vcs/basics.txt:428 msgid "" "If you want to see some abbreviated stats for each commit, you can use the " "``--stat`` option:" @@ -534,7 +538,7 @@ msgstr "" "Якщо ви хочете побачити скорочену статистику для кожного коміту, ви можете " "скористатися опцією ``--stat``:" -#: ../../src/vcs/basics.txt:443 +#: ../../src/vcs/basics.txt:452 msgid "" "Another really useful option is ``--pretty``. This option changes the log " "output to formats other that the default. A few prebuilt option values are " @@ -551,140 +555,140 @@ msgstr "" "``short``, ``full`` і ``fuller`` показують виведення у приблизно однаковому " "форматі, але з меншою або більшою кількістю інформації." -#: ../../src/vcs/basics.txt:476 +#: ../../src/vcs/basics.txt:485 msgid "Specifier" msgstr "Специфікатор" -#: ../../src/vcs/basics.txt:476 +#: ../../src/vcs/basics.txt:485 msgid "Description of Output" msgstr "Опис Результатів" -#: ../../src/vcs/basics.txt:478 +#: ../../src/vcs/basics.txt:487 msgid "%H" msgstr "%H" -#: ../../src/vcs/basics.txt:478 +#: ../../src/vcs/basics.txt:487 msgid "Commit hash" msgstr "Хеш комміту" -#: ../../src/vcs/basics.txt:480 +#: ../../src/vcs/basics.txt:489 msgid "%h" msgstr "%h" -#: ../../src/vcs/basics.txt:480 +#: ../../src/vcs/basics.txt:489 msgid "Abbreviated commit hash" msgstr "Скорочений хеш коміту" -#: ../../src/vcs/basics.txt:482 +#: ../../src/vcs/basics.txt:491 msgid "%T" msgstr "%T" -#: ../../src/vcs/basics.txt:482 +#: ../../src/vcs/basics.txt:491 msgid "Tree hash" msgstr "Дерево хешу" -#: ../../src/vcs/basics.txt:484 +#: ../../src/vcs/basics.txt:493 msgid "%t" msgstr "%t" -#: ../../src/vcs/basics.txt:484 +#: ../../src/vcs/basics.txt:493 msgid "Abbreviated tree hash" msgstr "Скорочений хеш дерева" -#: ../../src/vcs/basics.txt:486 +#: ../../src/vcs/basics.txt:495 msgid "%P" msgstr "%P" -#: ../../src/vcs/basics.txt:486 +#: ../../src/vcs/basics.txt:495 msgid "Parent hashes" msgstr "Батьківські хеші" -#: ../../src/vcs/basics.txt:488 +#: ../../src/vcs/basics.txt:497 msgid "%p" msgstr "%p" -#: ../../src/vcs/basics.txt:488 +#: ../../src/vcs/basics.txt:497 msgid "Abbreviated parent hashes" msgstr "Скорочені батьківські хеші" -#: ../../src/vcs/basics.txt:490 +#: ../../src/vcs/basics.txt:499 msgid "%an" msgstr "%an" -#: ../../src/vcs/basics.txt:490 +#: ../../src/vcs/basics.txt:499 msgid "Author name" msgstr "Ім'я автора" -#: ../../src/vcs/basics.txt:492 +#: ../../src/vcs/basics.txt:501 msgid "%ae" msgstr "%ae" -#: ../../src/vcs/basics.txt:492 +#: ../../src/vcs/basics.txt:501 msgid "Author email" msgstr "Електронна пошта автора" -#: ../../src/vcs/basics.txt:494 +#: ../../src/vcs/basics.txt:503 msgid "%ad" msgstr "%ad" -#: ../../src/vcs/basics.txt:494 +#: ../../src/vcs/basics.txt:503 msgid "Author date (format respects the --date=option)" msgstr "Дата автора (формат відповідає параметру --date=option)" -#: ../../src/vcs/basics.txt:496 +#: ../../src/vcs/basics.txt:505 msgid "%ar" msgstr "%ar" -#: ../../src/vcs/basics.txt:496 +#: ../../src/vcs/basics.txt:505 msgid "Author date, relative" msgstr "Дата автора, відносна" -#: ../../src/vcs/basics.txt:498 +#: ../../src/vcs/basics.txt:507 #, python-format msgid "%cn" msgstr "%cn" -#: ../../src/vcs/basics.txt:498 +#: ../../src/vcs/basics.txt:507 msgid "Committer name" msgstr "Ім'я коммітера" -#: ../../src/vcs/basics.txt:500 +#: ../../src/vcs/basics.txt:509 #, python-format msgid "%ce" msgstr "%ce" -#: ../../src/vcs/basics.txt:500 +#: ../../src/vcs/basics.txt:509 msgid "Committer email" msgstr "Електронна пошта коммітера" -#: ../../src/vcs/basics.txt:502 +#: ../../src/vcs/basics.txt:511 #, python-format msgid "%cd" msgstr "%cd" -#: ../../src/vcs/basics.txt:502 +#: ../../src/vcs/basics.txt:511 msgid "Committer date" msgstr "Дата коммітера" -#: ../../src/vcs/basics.txt:504 +#: ../../src/vcs/basics.txt:513 #, python-format msgid "%cr" msgstr "%cr" -#: ../../src/vcs/basics.txt:504 +#: ../../src/vcs/basics.txt:513 msgid "Committer date, relative" msgstr "Дата коммітера, відносна" -#: ../../src/vcs/basics.txt:506 +#: ../../src/vcs/basics.txt:515 #, python-format msgid "%s" msgstr "%s" -#: ../../src/vcs/basics.txt:506 +#: ../../src/vcs/basics.txt:515 msgid "Subject" msgstr "Тема" -#: ../../src/vcs/basics.txt:509 +#: ../../src/vcs/basics.txt:518 msgid "" "The ``oneline`` and ``format`` option values are particularly useful with " "another ``log`` option called ``--graph``. This option adds a nice little " @@ -695,7 +699,7 @@ msgstr "" "невеликий гарний графік у форматі ASCII, який показує історію ваших гілок і " "злиття:" -#: ../../src/vcs/basics.txt:538 +#: ../../src/vcs/basics.txt:547 msgid "" "There are many more output-formatting options to ``git log``. Common options " "to ``git log`` are:" @@ -703,52 +707,52 @@ msgstr "" "Існує набагато більше варіантів форматування виводу для ``git log``. " "Загальними параметрами ``git log`` є наступні:" -#: ../../src/vcs/basics.txt:542 +#: ../../src/vcs/basics.txt:551 msgid "Option" msgstr "Опція" -#: ../../src/vcs/basics.txt:542 +#: ../../src/vcs/basics.txt:551 msgid "Description" msgstr "Опис" -#: ../../src/vcs/basics.txt:544 +#: ../../src/vcs/basics.txt:553 msgid "-p" msgstr "-p" -#: ../../src/vcs/basics.txt:544 +#: ../../src/vcs/basics.txt:553 msgid "Show the patch introduced with each commit." msgstr "Показувати виправлення, внесені з кожним коммітом." -#: ../../src/vcs/basics.txt:546 +#: ../../src/vcs/basics.txt:555 msgid "--stat" msgstr "--stat" -#: ../../src/vcs/basics.txt:546 +#: ../../src/vcs/basics.txt:555 msgid "Show statistics for files modified in each commit." msgstr "Показувати статистику для файлів, змінених у кожному коміті." -#: ../../src/vcs/basics.txt:548 +#: ../../src/vcs/basics.txt:557 msgid "--shortstat" msgstr "--shortstat" -#: ../../src/vcs/basics.txt:548 +#: ../../src/vcs/basics.txt:557 msgid "" "Display only the changed/insertions/deletions line from the --stat command." msgstr "Відображати лише змінений/вставлений/видалений рядок з команди --stat." -#: ../../src/vcs/basics.txt:551 +#: ../../src/vcs/basics.txt:560 msgid "--name-only" msgstr "--name-only" -#: ../../src/vcs/basics.txt:551 +#: ../../src/vcs/basics.txt:560 msgid "Show the list of files modified after the commit information." msgstr "Показати список файлів, змінених після фіксації інформації." -#: ../../src/vcs/basics.txt:554 +#: ../../src/vcs/basics.txt:563 msgid "--name-status" msgstr "--name-status" -#: ../../src/vcs/basics.txt:554 +#: ../../src/vcs/basics.txt:563 msgid "" "Show the list of files affected with added/modified/deleted information as " "well." @@ -756,21 +760,21 @@ msgstr "" "Також покажіть список файлів, яких торкнулася додана/змінена/видалена " "інформація." -#: ../../src/vcs/basics.txt:557 +#: ../../src/vcs/basics.txt:566 msgid "--abbrev-commit" msgstr "--abbrev-commit" -#: ../../src/vcs/basics.txt:557 +#: ../../src/vcs/basics.txt:566 msgid "" "Show only the first few characters of the SHA-1 checksum instead of all 40." msgstr "" "Показувати лише перші кілька символів контрольної суми SHA-1 замість усіх 40." -#: ../../src/vcs/basics.txt:560 +#: ../../src/vcs/basics.txt:569 msgid "--relative-date" msgstr "--relative-date" -#: ../../src/vcs/basics.txt:560 +#: ../../src/vcs/basics.txt:569 msgid "" "Display the date in a relative format (for example, \"2 weeks ago\") instead " "of using the full date format." @@ -778,21 +782,21 @@ msgstr "" "Відображати дату у відносному форматі (наприклад, \"2 тижні тому\") замість " "повного формату дати." -#: ../../src/vcs/basics.txt:563 +#: ../../src/vcs/basics.txt:572 msgid "--graph" msgstr "--graph" -#: ../../src/vcs/basics.txt:563 +#: ../../src/vcs/basics.txt:572 msgid "" "Display an ASCII graph of the branch and merge history beside the log output." msgstr "" "Відобразити ASCII-графік гілки та історію злиття поряд з виведенням журналу." -#: ../../src/vcs/basics.txt:566 +#: ../../src/vcs/basics.txt:575 msgid "--pretty" msgstr "--pretty" -#: ../../src/vcs/basics.txt:566 +#: ../../src/vcs/basics.txt:575 msgid "" "Show commits in an alternate format. Option values include oneline, short, " "full, fuller, and format (where you specify your own format)." @@ -801,20 +805,20 @@ msgstr "" "online, short, full, fuller і format (де ви можете вказати свій власний " "формат)." -#: ../../src/vcs/basics.txt:570 +#: ../../src/vcs/basics.txt:579 msgid "--oneline" msgstr "--oneline" -#: ../../src/vcs/basics.txt:570 +#: ../../src/vcs/basics.txt:579 msgid "Shorthand for --pretty=oneline --abbrev-commit used together." msgstr "" "Скорочення для --pretty=online --abbrev-commit, що використовується разом." -#: ../../src/vcs/basics.txt:575 +#: ../../src/vcs/basics.txt:584 msgid "Limiting log output" msgstr "Обмеження виводу журналу" -#: ../../src/vcs/basics.txt:577 +#: ../../src/vcs/basics.txt:586 msgid "" "In addition to output-formatting options, ``git log`` takes a number of " "useful limiting options; that is options that let you show only a subset of " @@ -828,7 +832,7 @@ msgstr "" "<число>`` (наприклад, ``-2`` або ``-10``), яка показує лише вказану " "кількість останніх коммітів." -#: ../../src/vcs/basics.txt:591 +#: ../../src/vcs/basics.txt:600 msgid "" "However, the time-limiting options such as ``--since`` and ``--until`` are " "very useful. For example, the command to get the list of commits made in the " @@ -838,7 +842,7 @@ msgstr "" "until``. Наприклад, команда для отримання списку коммітів, зроблених за " "останні два тижні:" -#: ../../src/vcs/basics.txt:599 +#: ../../src/vcs/basics.txt:608 msgid "" "This command works with lots of formats - you can specify a specific date " "like ``\"2022-02-24\"``, or relative date such as ``\"2 years 1 days 3 " @@ -848,7 +852,7 @@ msgstr "" "наприклад, ``\"2022-02-24\"``, або відносну дату, наприклад, ``\"2 роки 1 " "день 3 хвилини тому\"``." -#: ../../src/vcs/basics.txt:602 +#: ../../src/vcs/basics.txt:611 msgid "" "The last really useful option to pass to ``git log`` as a filter is a path. " "If you specify a directory or file name, you can limit the log output to " @@ -862,15 +866,15 @@ msgstr "" "завжди останній параметр, і йому зазвичай передують подвійні тире (``--``), " "щоб відокремити шлях від параметрів:" -#: ../../src/vcs/basics.txt:621 +#: ../../src/vcs/basics.txt:630 msgid "Undoing things" msgstr "Виправлення помилок" -#: ../../src/vcs/basics.txt:623 +#: ../../src/vcs/basics.txt:632 msgid "At any stage, you may want to undo something." msgstr "На будь-якому етапі ви можете захотіти щось виправити." -#: ../../src/vcs/basics.txt:625 +#: ../../src/vcs/basics.txt:634 msgid "" "One of the common undos takes place when you commit too early and possibly " "forget to add some files, or you mess up your commit message. If you want to " @@ -883,15 +887,15 @@ msgstr "" "додаткові зміни, про які ви забули, збережіть їх і зафіксуйте ще раз, " "використовуючи опцію ``--amend``:" -#: ../../src/vcs/basics.txt:634 +#: ../../src/vcs/basics.txt:643 msgid "E.g." msgstr "Наприклад." -#: ../../src/vcs/basics.txt:643 +#: ../../src/vcs/basics.txt:652 msgid "Unstaging a staged file" msgstr "Скасування додавання файла до індексу" -#: ../../src/vcs/basics.txt:645 +#: ../../src/vcs/basics.txt:654 msgid "" "The next two sections demonstrate how to work with your staging area and " "working directory changes. The nice part is that the command you use to " @@ -903,11 +907,11 @@ msgstr "" "допомогою якої ви визначаєте стан цих двох областей, також нагадує вам про " "те, як скасувати внесені до них зміни." -#: ../../src/vcs/basics.txt:676 +#: ../../src/vcs/basics.txt:685 msgid "Unmodifiyng a modified file" msgstr "Скасування модифікації зміненого файлу" -#: ../../src/vcs/basics.txt:678 +#: ../../src/vcs/basics.txt:687 msgid "" "What if you realize that you don't want to keep your changes to some file? " "You can easily unmodify it -- **revert** it back to what it looked like when " @@ -918,15 +922,15 @@ msgstr "" "виглядав під час останнього компонування. ``git status`` також покаже вам, " "як це зробити:" -#: ../../src/vcs/basics.txt:686 +#: ../../src/vcs/basics.txt:695 msgid "It tells you pretty explicitly how to discard the changes you've make." msgstr "Він досить чітко розповідає, як відкинути зміни, які ви зробили." -#: ../../src/vcs/basics.txt:699 +#: ../../src/vcs/basics.txt:708 msgid "Undoing things with git restore" msgstr "Скасування змін за допомогою git restore" -#: ../../src/vcs/basics.txt:701 +#: ../../src/vcs/basics.txt:710 msgid "" "``git restore`` is basically an alternative to ``git reset``, from Git " "version 2.23.0 onwards, Git will use ``git restore`` instead of ``git " @@ -936,7 +940,7 @@ msgstr "" "Git використовуватиме ``git restore`` замість ``git reset`` для багатьох " "операцій скасування." -#: ../../src/vcs/basics.txt:737 +#: ../../src/vcs/basics.txt:746 msgid "" "It’s important to understand that git restore is a dangerous command. " "Any local changes you made to that file are gone -- Git just replaced that " diff --git a/src/_locales/uk/LC_MESSAGES/vcs/branch.po b/src/_locales/uk/LC_MESSAGES/vcs/branch.po index 684fcb0b6..678468287 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs/branch.po +++ b/src/_locales/uk/LC_MESSAGES/vcs/branch.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Training Course 2023.06.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-05 19:49+0300\n" -"PO-Revision-Date: 2023-10-05 20:17+0300\n" +"POT-Creation-Date: 2024-01-09 03:59+0200\n" +"PO-Revision-Date: 2024-01-09 04:05+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -16,8 +16,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.13.0\n" -"X-Generator: Poedit 3.4\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/vcs/branch.txt:-1 msgid "Version control system" @@ -63,7 +63,11 @@ msgstr "" "для звичайного комміту і кілька батьків для комміту, який є результатом " "злиття двох або більше гілок." -#: ../../src/vcs/branch.txt:28 +#: ../../src/vcs/branch.txt:35 +msgid "Commits tree" +msgstr "Дерево комітів" + +#: ../../src/vcs/branch.txt:37 msgid "" "A branch in Git is simply a lightweight movable pointer to one of these " "commits. The default branch name in Git is master. As you start making " @@ -77,11 +81,11 @@ msgstr "" "Кожного разу, коли ви робите комміт, вказівник головної гілки автоматично " "пересувається вперед." -#: ../../src/vcs/branch.txt:38 +#: ../../src/vcs/branch.txt:47 msgid "Branch management" msgstr "Управління гілками" -#: ../../src/vcs/branch.txt:40 +#: ../../src/vcs/branch.txt:49 msgid "" "The ``git branch`` command does more that create and delete branches. If you " "run it with no arguments, you get a simple listing of your current branches:" @@ -90,7 +94,7 @@ msgstr "" "Якщо ви запустите її без аргументів, ви отримаєте простий список ваших " "поточних гілок:" -#: ../../src/vcs/branch.txt:55 +#: ../../src/vcs/branch.txt:64 msgid "" "To see all the branches that contain work you haven't yet merged in, use ``--" "no-merged`` option:" @@ -98,7 +102,7 @@ msgstr "" "Щоб побачити всі гілки, які містять роботи, до яких ви ще не приєдналися, " "використовуйте опцію ``--no-merged``:" -#: ../../src/vcs/branch.txt:65 +#: ../../src/vcs/branch.txt:74 msgid "" "Branches listed in the output has work, that isn't merged to current branch. " "So, deleting them via ``git branch -d`` will fail." @@ -106,11 +110,11 @@ msgstr "" "У гілках, перелічених у виводі, є напрацювання, які не злито з поточною " "гілкою. Отже, їх видалення за допомогою ``git branch -d`` не спрацює." -#: ../../src/vcs/branch.txt:69 +#: ../../src/vcs/branch.txt:78 msgid "Create branches" msgstr "Створення гілок" -#: ../../src/vcs/branch.txt:71 +#: ../../src/vcs/branch.txt:80 msgid "" "There are few ways to create a new branch in a Git repository. The most " "common way is to use ``git branch`` command." @@ -118,7 +122,7 @@ msgstr "" "Існує декілька способів створити нову гілку в Git-сховищі. Найпоширеніший з " "них - використання команди ``git branch``." -#: ../../src/vcs/branch.txt:78 +#: ../../src/vcs/branch.txt:87 msgid "" "Pointer to a parent commit is optional. By default the parent commit is set " "to the latest one available (HEAD pointer) at the moment of the branch " @@ -130,19 +134,19 @@ msgstr "" "на момент створення гілки. Ви також можете переключитися на новостворену " "гілку одразу після її створення за допомогою:" -#: ../../src/vcs/branch.txt:88 +#: ../../src/vcs/branch.txt:97 msgid "Switching branches" msgstr "Перемикання гілок" -#: ../../src/vcs/branch.txt:90 +#: ../../src/vcs/branch.txt:99 msgid "To switch to an existing branch, you run the ``git checkout`` command." msgstr "Щоб перейти до існуючої гілки, виконайте команду ``git checkout``." -#: ../../src/vcs/branch.txt:109 +#: ../../src/vcs/branch.txt:118 msgid "Basic branching and merging" msgstr "Основи розгалуження та злиття" -#: ../../src/vcs/branch.txt:111 +#: ../../src/vcs/branch.txt:120 msgid "" "First, let's say you're working on your project and have a couple of commits " "already on the ``master`` branch. You've decided that you're going to work " @@ -156,11 +160,11 @@ msgstr "" "створити нову гілку і одночасно переключитися на неї, ви можете виконати " "команду ``git checkout`` з ключем ``-b``:" -#: ../../src/vcs/branch.txt:122 +#: ../../src/vcs/branch.txt:131 msgid "This is shorthand for:" msgstr "Це скорочено означає:" -#: ../../src/vcs/branch.txt:129 +#: ../../src/vcs/branch.txt:138 msgid "" "In deed this creates a new branch pointer, aimed to the latest commit " "present on ``master`` branch. But, from now your branch is ``feature/" @@ -172,7 +176,7 @@ msgstr "" "issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " "вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." -#: ../../src/vcs/branch.txt:134 +#: ../../src/vcs/branch.txt:143 msgid "" "Now, lets assume the \"issue53\" is fixed, and you need to bring commits " "from the ``feature/issue53`` branch back to ``master``." @@ -180,11 +184,11 @@ msgstr "" "Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " "з гілки ``feature/issue53`` назад до ``master``." -#: ../../src/vcs/branch.txt:138 +#: ../../src/vcs/branch.txt:147 msgid "Merging branches" msgstr "Злиття гілок" -#: ../../src/vcs/branch.txt:140 +#: ../../src/vcs/branch.txt:149 msgid "" "You need to switch back to ``master`` branch and use ``git merge`` command, " "to merge changes (commits) from the source branch into target." @@ -192,7 +196,7 @@ msgstr "" "Вам потрібно повернутися до гілки ``master`` і скористатися командою ``git " "merge``, щоб об'єднати зміни (коміти) з вихідної гілки в цільову." -#: ../../src/vcs/branch.txt:152 +#: ../../src/vcs/branch.txt:161 msgid "" "You'll notice phrase \"fast-forward\" in that merge. Because the commit " "pointed to by the branch ``feature/issue53`` you merged in was directly " @@ -204,7 +208,7 @@ msgstr "" "безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " "вказівник вперед." -#: ../../src/vcs/branch.txt:156 +#: ../../src/vcs/branch.txt:165 msgid "" "Changes from ``feature/issue53`` are now in the snapshot of the commit " "pointed to by the ``master`` branch." @@ -212,7 +216,11 @@ msgstr "" "Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " "гілка ``master``." -#: ../../src/vcs/branch.txt:163 +#: ../../src/vcs/branch.txt:179 +msgid "Fast-forward merge" +msgstr "Злиття fast-forward" + +#: ../../src/vcs/branch.txt:181 msgid "" "Now, lets assume another developer started working on ``feature/issue54`` at " "the same time. And there are few commits on this feature branch. Suppose, " @@ -224,7 +232,7 @@ msgstr "" "вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " "з ``master``." -#: ../../src/vcs/branch.txt:179 +#: ../../src/vcs/branch.txt:197 msgid "" "This looks a bit different than the ``feature/issue53`` merge. In this case, " "development history has diverged from some older point. Because the commit " @@ -240,7 +248,7 @@ msgstr "" "просте тристороннє злиття, використовуючи два знімки, на які вказують " "кінчики гілок, і їхнього спільного предка." -#: ../../src/vcs/branch.txt:186 +#: ../../src/vcs/branch.txt:204 msgid "" "Instead of just moving the branch pointer forward, Git creates a new " "snapshot that results from this three-way merge and automatically creates a " @@ -252,11 +260,15 @@ msgstr "" "створює новий коміт, який вказує на нього. Це називається *коммітом злиття*, " "і він особливий тим, що має більше одного батька." -#: ../../src/vcs/branch.txt:196 +#: ../../src/vcs/branch.txt:220 ../../src/vcs/branch.txt:312 +msgid "Merge commit" +msgstr "Комміт злиття" + +#: ../../src/vcs/branch.txt:223 msgid "Merge conflicts" msgstr "Конфлікти об'єднання" -#: ../../src/vcs/branch.txt:198 +#: ../../src/vcs/branch.txt:225 msgid "" "Occasionally, the merge process doesn't go smoothly. If the same part of the " "same file is changed differently in the two branches you're merging, Git " @@ -266,7 +278,7 @@ msgstr "" "ви об'єднуєте, однакова частина одного і того ж файлу змінена по-різному, " "Git не зможе об'єднати їх чисто." -#: ../../src/vcs/branch.txt:209 +#: ../../src/vcs/branch.txt:236 msgid "" "Git hasn't automatically created a new merge commit. It has paused the " "process while you resolve the conflict. If you want to see which files are " @@ -276,7 +288,7 @@ msgstr "" "ви вирішуєте конфлікт. Якщо ви хочете побачити, які файли було від'єднано " "після конфлікту злиття, ви можете запустити ``git status``:" -#: ../../src/vcs/branch.txt:228 +#: ../../src/vcs/branch.txt:255 msgid "" "Anything that has merge conflicts and hasn't been resolved is listed as " "unmerged. Git adds standard conflict-resolution markers to the files that " @@ -288,7 +300,7 @@ msgstr "" "мають конфлікти, щоб ви могли відкрити їх вручну і вирішити ці конфлікти. " "Ваш файл містить розділ, який виглядає приблизно так:" -#: ../../src/vcs/branch.txt:243 +#: ../../src/vcs/branch.txt:270 msgid "" "This means the version in ``HEAD`` (your ``master`` branch, because that was " "what you had checked out when you ran merge command) is the top part of that " @@ -303,13 +315,13 @@ msgstr "" "що знаходиться у нижній частині. Для того, щоб вирішити конфлікт, вам " "доведеться або стати на чийсь бік, або об'єднати вміст самостійно." -#: ../../src/vcs/branch.txt:249 +#: ../../src/vcs/branch.txt:276 msgid "When conflicts are resolved, you can run ``git status`` command again:" msgstr "" "Коли конфлікти буде вирішено, ви можете знову запустити команду ``git " "status``:" -#: ../../src/vcs/branch.txt:262 +#: ../../src/vcs/branch.txt:289 msgid "" "If you're happy with that, and you verify that everything that had conflicts " "has been staged, you can run ``git commit`` for finalize the merge commit." @@ -318,11 +330,11 @@ msgstr "" "було усунуто, ви можете запустити ``git commit`` для остаточного завершення " "злиття." -#: ../../src/vcs/branch.txt:266 +#: ../../src/vcs/branch.txt:293 msgid "Rebasing" msgstr "Перебазування" -#: ../../src/vcs/branch.txt:268 +#: ../../src/vcs/branch.txt:295 msgid "" "In Git, there two main ways to integrate changes from one branch into " "another: the ``merge`` and the ``rebase``." @@ -330,7 +342,7 @@ msgstr "" "У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " "\"злиття\" і \"перебазування\"." -#: ../../src/vcs/branch.txt:271 +#: ../../src/vcs/branch.txt:298 msgid "" "Earlier, there was an example of diverged work and commits made on two " "different branches." @@ -338,7 +350,7 @@ msgstr "" "Раніше ми вже наводили приклад розбіжностей у роботі та зобов'язаннях, " "зроблених на двох різних гілках." -#: ../../src/vcs/branch.txt:278 +#: ../../src/vcs/branch.txt:314 msgid "" "The easiest way to integrate the branches, as we've already covered, is the " "``merge`` command. It performs a three-way merge between the two latest " @@ -349,7 +361,7 @@ msgstr "" "``merge``. Вона виконує тристороннє злиття між двома останніми знімками " "гілок і останнім спільним предком, створюючи новий знімок (і фіксацію)." -#: ../../src/vcs/branch.txt:283 +#: ../../src/vcs/branch.txt:319 msgid "" "However, there is another way: you can take the patch of the change that was " "introduced in ``master`` and reapply it on top of ``feature``. In Git, this " @@ -361,7 +373,7 @@ msgstr "" "називається *rebasing*. За допомогою команди ``rebase`` ви можете взяти всі " "зміни, які були зафіксовані на одній гілці, і відтворити їх на іншій гілці." -#: ../../src/vcs/branch.txt:295 +#: ../../src/vcs/branch.txt:331 msgid "" "This operation works by going to the common ancestor of the two branches, " "getting the diff introduced by each commit of the branch you're on, saving " @@ -375,7 +387,11 @@ msgstr "" "поточної гілки до того ж комміту, що і гілка, на яку ви перебазуєтесь, і, " "нарешті, застосування кожної зміни по черзі." -#: ../../src/vcs/branch.txt:306 +#: ../../src/vcs/branch.txt:348 +msgid "After rebase" +msgstr "Після ребазування" + +#: ../../src/vcs/branch.txt:351 msgid "" "Other maintainers prefer to rebase (or cherry-pick) contributed work on top " "of their ``master`` branch, rather then merging it in, to keep a mostly " @@ -385,11 +401,11 @@ msgstr "" "внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " "об'єднувати їх, щоб зберегти переважно лінійну історію." -#: ../../src/vcs/branch.txt:311 +#: ../../src/vcs/branch.txt:356 msgid "Cherry-picking" msgstr "Cherry-picking" -#: ../../src/vcs/branch.txt:313 +#: ../../src/vcs/branch.txt:358 msgid "" "The other way to move introduced work from one branch to another is to " "*cherry-pick* it. A cherry-pick in Git is a rebase for a single commit. It " @@ -408,11 +424,15 @@ msgstr "" "гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " "rebase." -#: ../../src/vcs/branch.txt:333 +#: ../../src/vcs/branch.txt:377 +msgid "Cherry-pick a commit" +msgstr "Перенос комміту (cherry-pick)" + +#: ../../src/vcs/branch.txt:387 msgid "Branching strategies" msgstr "Стратегії розгалуження" -#: ../../src/vcs/branch.txt:335 +#: ../../src/vcs/branch.txt:389 msgid "" "Branching strategy in version control systems defines how branches are " "created, managed, and used in a project's development process. It helps " @@ -428,7 +448,7 @@ msgstr "" "чіткість у роботі з гілками, мінімізує конфлікти та уможливлює плавний і " "структурований робочий процес розробки." -#: ../../src/vcs/branch.txt:342 +#: ../../src/vcs/branch.txt:396 msgid "" "GitFlow is a popular branching strategy that provides a well-defined model " "for managing branches in a Git repository. It was introduced by Vincent " @@ -440,7 +460,7 @@ msgstr "" "Вінсентом Дріссеном (Vincent Driessen) і базується на ідеї використання двох " "основних гілок: \"master\" і \"develop\"." -#: ../../src/vcs/branch.txt:346 +#: ../../src/vcs/branch.txt:400 msgid "" "**Master Branch**: The \"master\" branch represents the stable version of " "the codebase. It should always contain production-ready code and be free " @@ -452,7 +472,7 @@ msgstr "" "жодних серйозних проблем. Майстер-гілка захищена, і в неї зливаються тільки " "релізні версії." -#: ../../src/vcs/branch.txt:350 +#: ../../src/vcs/branch.txt:404 msgid "" "**Develop Branch**: The \"develop\" branch is where the ongoing development " "and integration of features take place. It serves as the integration branch " @@ -463,7 +483,7 @@ msgstr "" "розробка та інтеграція функцій. Вона слугує інтеграційною гілкою для різних " "функціональних гілок, а також повинна містити стабільну версію коду." -#: ../../src/vcs/branch.txt:354 +#: ../../src/vcs/branch.txt:408 msgid "" "**Feature Branches**: For each new feature or bug fix, a dedicated " "\"feature\" branch is created off the \"develop\" branch. These branches are " @@ -473,7 +493,7 @@ msgstr "" "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " "недовговічні і існують лише на час розробки функції." -#: ../../src/vcs/branch.txt:357 +#: ../../src/vcs/branch.txt:411 msgid "" "**Release Branches**: When the development on the \"develop\" branch is " "ready for a release, a \"release\" branch is created. The release branch is " @@ -483,7 +503,7 @@ msgstr "" "створюється гілка \"release\". Релізна гілка використовується для " "тестування, виправлення помилок і підготовки до розгортання." -#: ../../src/vcs/branch.txt:360 +#: ../../src/vcs/branch.txt:414 msgid "" "**Hotfix Branches**: If a critical issue is discovered in the production " "version, a \"hotfix\" branch is created from the \"master\" branch. This " @@ -494,7 +514,7 @@ msgstr "" "на основі основної гілки створюється гілка \"hotfix\". Це дозволяє швидко " "виправити проблему, не впливаючи на поточну розробку на гілці \"develop\"." -#: ../../src/vcs/branch.txt:365 +#: ../../src/vcs/branch.txt:419 msgid "" "GitFlow provides a structured approach to managing branching in a " "collaborative development environment. It ensures that the main branches " @@ -507,3 +527,7 @@ msgstr "" "стабільними, а нові функції та виправлення помилок плавно інтегруються перед " "випуском. Ця стратегія особливо корисна для проектів з регулярними випусками " "і командою, яка працює над декількома функціями одночасно." + +#: ../../src/vcs/branch.txt:436 +msgid "GitFlow diagram" +msgstr "Діаграма GitFlow" From 342f8458ddd9c7a55ee47d95d6a0d434af407821 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 9 Jan 2024 04:16:56 +0200 Subject: [PATCH 620/689] Fixes GH-115 --- src/conf.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/conf.py b/src/conf.py index a39491224..44ca0bbe9 100644 --- a/src/conf.py +++ b/src/conf.py @@ -51,9 +51,6 @@ bibtex_bibfiles = ["refs.bib"] bibtex_reference_style = "label" -# TODO: configure options for mermaid output for pdf -# mermaid-js/mermaid-cli is added to project's dependencies - # options for redirects redirects = { "appx/blog/spec": "../../spec/blog/index.html", From 13354a2ba5c19428ae9c8a4f83954567a2628b93 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 29 Jan 2024 16:56:57 +0200 Subject: [PATCH 621/689] Fixes GH-184 --- lesson40.md | 2 +- lesson44.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson40.md b/lesson40.md index e7e86d189..4a9389255 100644 --- a/lesson40.md +++ b/lesson40.md @@ -1161,4 +1161,4 @@ class TestCalculator(TestCase): 2. Напишите интеграционные тесты для логина и для покупки товара. -3. (Задание до выдачи задания на диплом) Покройте тестами весь остальной код. +3. Покройте тестами весь остальной код. diff --git a/lesson44.md b/lesson44.md index c9d5f341d..86783a73d 100644 --- a/lesson44.md +++ b/lesson44.md @@ -766,4 +766,4 @@ class ChatConsumer(AsyncWebsocketConsumer): 1. Повторите туториал из этого занятия. -2. Давайте разбирать задания на диплом! \ No newline at end of file +2. Давайте разбирать задания на диплом! From c4409e24acbbd015a6b2cbbe60b766044d9f7fc4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 13:16:18 +0200 Subject: [PATCH 622/689] Change project version and update dependencies (2024.02.dev) --- poetry.lock | 199 ++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- requirements.txt | 22 +++--- 3 files changed, 112 insertions(+), 111 deletions(-) diff --git a/poetry.lock b/poetry.lock index 888967d5c..38760ca2b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,14 +2,14 @@ [[package]] name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" +version = "0.7.16" +description = "A light, configurable Sphinx theme" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] [[package]] @@ -29,14 +29,14 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -224,14 +224,14 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -282,62 +282,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] @@ -537,19 +547,19 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "69.0.3" +version = "69.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, - {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, + {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, + {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -689,21 +699,19 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.7" +version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, - {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, + {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, + {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] @@ -727,40 +735,36 @@ Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.5" +version = "1.0.6" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, - {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, + {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, + {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.4" +version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, - {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, + {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, + {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] [[package]] @@ -807,40 +811,36 @@ files = [ [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.6" +version = "1.0.7" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, - {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, + {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, + {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.9" +version = "1.1.10" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, - {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, + {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, + {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] @@ -875,18 +875,19 @@ files = [ [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] diff --git a/pyproject.toml b/pyproject.toml index 0eacf8a60..3cf972348 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2023.11.dev" +version = "2024.02.dev" description = "Python training course materials" license = "MIT" authors = [ diff --git a/requirements.txt b/requirements.txt index b14ea369d..2f830b158 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" +alabaster==0.7.16 ; python_version >= "3.9" and python_version < "4.0" babel==2.14.0 ; python_version >= "3.9" and python_version < "4.0" -certifi==2023.11.17 ; python_version >= "3.9" and python_version < "4.0" +certifi==2024.2.2 ; python_version >= "3.9" and python_version < "4.0" charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "4.0" click==8.1.7 ; python_version >= "3.9" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" @@ -8,10 +8,10 @@ docutils==0.18.1 ; python_version >= "3.9" and python_version < "4.0" idna==3.6 ; python_version >= "3.9" and python_version < "4.0" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" importlib-metadata==7.0.1 ; python_version >= "3.9" and python_version < "3.10" -jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" +jinja2==3.1.3 ; python_version >= "3.9" and python_version < "4.0" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "4.0" markdown-it-py==2.2.0 ; python_version >= "3.9" and python_version < "4.0" -markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "4.0" mdit-py-plugins==0.3.5 ; python_version >= "3.9" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" myst-parser==1.0.0 ; python_version >= "3.9" and python_version < "4.0" @@ -21,7 +21,7 @@ pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" pygments==2.17.2 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" -setuptools==69.0.3 ; python_version >= "3.9" and python_version < "4.0" +setuptools==69.1.0 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" @@ -29,16 +29,16 @@ sphinx-intl==2.1.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-reredirects==0.1.3 ; python_version >= "3.9" and python_version < "4.0" sphinx-rtd-theme==1.3.0 ; python_version >= "3.9" and python_version < "4.0" sphinx==6.2.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.7 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.8 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-bibtex==2.5.0 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.5 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.4 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.5 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-mermaid==0.8.1 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "4.0" -sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-qthelp==1.0.7 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.10 ; python_version >= "3.9" and python_version < "4.0" sphinxcontrib-svg2pdfconverter==1.2.2 ; python_version >= "3.9" and python_version < "4.0" toml==0.10.2 ; python_version >= "3.9" and python_version < "4.0" -urllib3==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +urllib3==2.2.1 ; python_version >= "3.9" and python_version < "4.0" zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" From d6601b3a16262e769dc4e11664bedbf75dff9d25 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 13:57:16 +0200 Subject: [PATCH 623/689] (GH-136) Complete anomalies sections --- src/rdbms/normalization.txt | 55 ++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index ca0ad65db..e5840c8f8 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -19,7 +19,7 @@ redundancy and dependency, making the database more efficient, flexible, and scalable. It also helps in maintaining data consistency and accuracy, and ensures that updates and deletions are properly handled. -There are 6 **normal forms**, but this chapter focuses on the first 3 only, +There are 6 + 3 **normal forms**, but this chapter focuses on the first 3 only, since the commonest normal form you'll see out there is *3NF* (third normal form). @@ -39,17 +39,64 @@ Anomalies Insertion anomalies ------------------- -.. todo: complete subsection +There are circumstances in which certain facts cannot be recorded at all. +For example, each record in the "Faculty and Their Courses" relation might +contain a *Faculty ID*, *Faculty Name* and *Course Code*. Therefore, the +details of any faculty member who teaches at least one course can be recorded, +but a newly hired faculty member who has not yet been assigned to teach any +courses cannot be recorded, except by setting the course code to ``null``. + ++------------+----------------+-------------+ +| Faculty ID | Faculty Name | Course Code | ++============+================+=============+ +| 389 | Dr. Headstrong | ENG-206 | ++------------+----------------+-------------+ +| 407 | Dr. Mugwort | CMP-101 | ++------------+----------------+-------------+ +| 407 | Dr. Mugwort | CMP-201 | ++------------+----------------+-------------+ + ++------------+----------------+-------------+ +| Faculty ID | Faculty Name | Course Code | ++============+================+=============+ +| 389 | Dr. Newone | ??? | ++------------+----------------+-------------+ Update anomalies ---------------- -.. todo: complete subsection +The same information can be expressed on multiple rows; therefore updates to +the relation may result in logical inconsistencies. For example, each record +in an "Employees' Skills" relation might contain ah *Employee ID*, *Employee +Address*, and *Skill*; thus a charge of address for a particular employee may +need to be applied to multiple records (one for each skill). If the update is +only partially successful -- the employee's address is updated on some records +but not others -- then the relation is left in an inconsistent state. +Specifically, the relation provides conflicting answers to the question of what +this particular employee's address is. + ++-------------+-----------------------+-----------------+ +| Employee ID | Employee Address | Skill | ++=============+=======================+=================+ +| 426 | 230 Parkland Crescent | typing | ++-------------+-----------------------+-----------------+ +| 426 | 230 Parkland Crescent | shorthand | ++-------------+-----------------------+-----------------+ +| 529 | 158 Watkins Place | public speaking | ++-------------+-----------------------+-----------------+ +| 529 | 108 Church Street | carpentry | ++-------------+-----------------------+-----------------+ Deletion anomalies ------------------ -.. todo: complete subsection +Under certain circumstances, the deletion of data representing certain facts +necessitates the deletion of data representing completely different facts. +The "Faculty and Their Courses" relation described in the previous example +suffers from this type of anomaly, for if a faculty member temporary ceases to +be assigned to any courses, the last of the records on which that faculty +member appears must be deleted, effectively also deleting the faculty member, +unless the *Course Code* field is set to ``null``. First normal form (1NF) ======================= From 1f221859a825529ffa5e67a2b9ff9d10b3c45cce Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 14:45:08 +0200 Subject: [PATCH 624/689] (GH-136) Complete 1NF section --- src/rdbms/normalization.txt | 83 +++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index e5840c8f8..40e4c8145 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -103,7 +103,18 @@ First normal form (1NF) .. rubric:: Data example -.. todo: add data example (no NF) +The table below represents players and their characters inventory, ordered by +their characters' levels. + ++------------+----------------------------------------------------------------+ +| username | inventory | ++============+================================================================+ +| prombery87 | 2 amulets, 3 rings | ++------------+----------------------------------------------------------------+ +| wheed1997 | 18 copper coins, 1 bow, 5 arrows | ++------------+----------------------------------------------------------------+ +| acen1999 | 1 sword, 1 shield, 4 rings | ++------------+----------------------------------------------------------------+ Requirements ------------ @@ -117,8 +128,74 @@ Requirements Applying 1NF ------------ -.. todo: complete subsection -.. todo: add data example in 1NF +First of all, using the rows order to represent the information violates 1NF. +This can be easily fixed by adding additional column *level* to store the info +about the character's level. From this, the ordered sequences can be fetched +by using the query: + +.. code-block:: sql + + SELECT username FROM player ORDER BY level; + +The second rule is **do not** mix data types within the same column. +As example, the characters' level might be described as follows: + ++------------+----------------------------------+-----------------------------+ +| username | inventory | level | ++============+==================================+=============================+ +| prombery87 | 2 amulets, 3 rings | 10 | ++------------+----------------------------------+-----------------------------+ +| wheed1997 | 18 copper coins, 1 bow, 5 arrows | almost 8 | ++------------+----------------------------------+-----------------------------+ +| acen1999 | 1 sword, 1 shield, 4 rings | 5.5 | ++------------+----------------------------------+-----------------------------+ + +The data types are mixed in *level* column, which violates 1NF; and normally, +RDBMS won't let you do this. + +The tables without a **primary key** violates 1NF as well. *username* field +may be used as **PK** for the players relation example. This would prevent +the data duplication, like having both ``wheed1997`` players at level 7 and 8 +at the same time, which makes no sense. + ++------------+----------------------------------+-----------------------------+ +| username | inventory | level | ++============+==================================+=============================+ +| prombery87 | 2 amulets, 3 rings | 10 | ++------------+----------------------------------+-----------------------------+ +| wheed1997 | 18 copper coins, 1 bow, 5 arrows | 8 | ++------------+----------------------------------+-----------------------------+ +| wheed1997 | 18 copper coins, 1 bow, 5 arrows | 7 | ++------------+----------------------------------+-----------------------------+ +| acen1999 | 1 sword, 1 shield, 4 rings | 5 | ++------------+----------------------------------+-----------------------------+ + +At last, *inventory* column contains repeating groups of data (also called +*non-atomic data*), which violates 1NF. To normalize the table, it should be +altered in a way, to represent only one inventory item per row. + ++------------+-------------+---------------+ +| player_id | item_type | item_quantity | ++============+=============+===============+ +| prombery87 | amulet | 2 | ++------------+-------------+---------------+ +| prombery87 | ring | 3 | ++------------+-------------+---------------+ +| wheed1997 | copper coin | 18 | ++------------+-------------+---------------+ +| wheed1997 | bow | 1 | ++------------+-------------+---------------+ +| wheed1997 | arrow | 5 | ++------------+-------------+---------------+ +| acen1999 | sword | 1 | ++------------+-------------+---------------+ +| acen1999 | shield | 1 | ++------------+-------------+---------------+ +| acen1999 | ring | 4 | ++------------+-------------+---------------+ + +The primary key for this table is the combination of *player_id* and +*item_type* -- a composite primary key. Second normal form (2NF) ======================== From e85da3aa286d288971afc46bda3367e6785ca12b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 15:15:06 +0200 Subject: [PATCH 625/689] (GH-136) Complete 2NF section --- src/rdbms/normalization.txt | 85 ++++++++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 40e4c8145..c429e1a9e 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -200,6 +200,32 @@ The primary key for this table is the combination of *player_id* and Second normal form (2NF) ======================== +Here, 2NF starts. For example, let's bring back *level* info to the table, +representing players and theirs inventory. + ++------------+-------------+---------------+--------------+ +| player_id | item_type | item_quantity | player_level | ++============+=============+===============+==============+ +| prombery87 | amulet | 2 | 10 | ++------------+-------------+---------------+--------------+ +| prombery87 | ring | 3 | 10 | ++------------+-------------+---------------+--------------+ +| wheed1997 | copper coin | 18 | 7 | ++------------+-------------+---------------+--------------+ +| wheed1997 | bow | 1 | 7 | ++------------+-------------+---------------+--------------+ +| wheed1997 | arrow | 5 | 7 | ++------------+-------------+---------------+--------------+ +| acen1999 | sword | 1 | 5 | ++------------+-------------+---------------+--------------+ +| acen1999 | shield | 1 | 5 | ++------------+-------------+---------------+--------------+ +| acen1999 | ring | 4 | 5 | ++------------+-------------+---------------+--------------+ + +The player's *level* should be duplicated for each row. This table design +keeps the doors open for **insertion**, **update** and **deletion** anomalies. + Requirements ------------ @@ -208,8 +234,63 @@ Requirements Applying 2NF ------------ -.. todo: complete subsection -.. todo: add data example in 2NF +The 2NF is all about "how non-key columns related to the primary key". +The example above has *non-key attributes* (which is another term for +the "non-key columns") are: *item_quantity* and *player_level*. + +The relations between the *primary key* and *non-key attributes* can be +described as: + +:: + + { player_id, item_type } -> { item_quantity } + { player_id } -> { player_level } + +The *item_quantity* column depends on the *player_id* and *item_type* columns, +which creates a 1-to-1 dependency for this column on the entire primary key. +This means, there is no way to place different values in the *item_quantity* +column for the same primary key. + +But, the *player_level* column depends on the *player_id* only. It's a problem, +because the *player_id* is not the primary key, but a part of a primary key. +This violates the 2NF, and what's why the table is vulnerable to the problems. + +The **player** is the important concept for representing the data. +So, it's the best solution to store player related data in a separate table. + +.. table:: player + + +------------+--------------+ + | player_id | player_level | + +============+==============+ + | prombery87 | 10 | + +------------+--------------+ + | wheed1997 | 7 | + +------------+--------------+ + | acen1999 | 5 | + +------------+--------------+ + +.. table:: player_inventory + + +------------+-------------+---------------+ + | player_id | item_type | item_quantity | + +============+=============+===============+ + | prombery87 | amulet | 2 | + +------------+-------------+---------------+ + | prombery87 | ring | 3 | + +------------+-------------+---------------+ + | wheed1997 | copper coin | 18 | + +------------+-------------+---------------+ + | wheed1997 | bow | 1 | + +------------+-------------+---------------+ + | wheed1997 | arrow | 5 | + +------------+-------------+---------------+ + | acen1999 | sword | 1 | + +------------+-------------+---------------+ + | acen1999 | shield | 1 | + +------------+-------------+---------------+ + | acen1999 | ring | 4 | + +------------+-------------+---------------+ Third normal form (3NF) ======================= From 9a5f957acf4ba1b0b565c90ba6039b4b22470bba Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 15:35:13 +0200 Subject: [PATCH 626/689] (GH-136) Complete 3NF section --- src/rdbms/normalization.txt | 107 ++++++++++++++++++++++++++++++------ 1 file changed, 91 insertions(+), 16 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index c429e1a9e..97827e41a 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -143,7 +143,7 @@ As example, the characters' level might be described as follows: +------------+----------------------------------+-----------------------------+ | username | inventory | level | +============+==================================+=============================+ -| prombery87 | 2 amulets, 3 rings | 10 | +| prombery87 | 2 amulets, 3 rings | 9 | +------------+----------------------------------+-----------------------------+ | wheed1997 | 18 copper coins, 1 bow, 5 arrows | almost 8 | +------------+----------------------------------+-----------------------------+ @@ -161,7 +161,7 @@ at the same time, which makes no sense. +------------+----------------------------------+-----------------------------+ | username | inventory | level | +============+==================================+=============================+ -| prombery87 | 2 amulets, 3 rings | 10 | +| prombery87 | 2 amulets, 3 rings | 9 | +------------+----------------------------------+-----------------------------+ | wheed1997 | 18 copper coins, 1 bow, 5 arrows | 8 | +------------+----------------------------------+-----------------------------+ @@ -206,21 +206,21 @@ representing players and theirs inventory. +------------+-------------+---------------+--------------+ | player_id | item_type | item_quantity | player_level | +============+=============+===============+==============+ -| prombery87 | amulet | 2 | 10 | +| prombery87 | amulet | 2 | 9 | +------------+-------------+---------------+--------------+ -| prombery87 | ring | 3 | 10 | +| prombery87 | ring | 3 | 9 | +------------+-------------+---------------+--------------+ -| wheed1997 | copper coin | 18 | 7 | +| wheed1997 | copper coin | 18 | 6 | +------------+-------------+---------------+--------------+ -| wheed1997 | bow | 1 | 7 | +| wheed1997 | bow | 1 | 6 | +------------+-------------+---------------+--------------+ -| wheed1997 | arrow | 5 | 7 | +| wheed1997 | arrow | 5 | 6 | +------------+-------------+---------------+--------------+ -| acen1999 | sword | 1 | 5 | +| acen1999 | sword | 1 | 3 | +------------+-------------+---------------+--------------+ -| acen1999 | shield | 1 | 5 | +| acen1999 | shield | 1 | 3 | +------------+-------------+---------------+--------------+ -| acen1999 | ring | 4 | 5 | +| acen1999 | ring | 4 | 3 | +------------+-------------+---------------+--------------+ The player's *level* should be duplicated for each row. This table design @@ -263,11 +263,11 @@ So, it's the best solution to store player related data in a separate table. +------------+--------------+ | player_id | player_level | +============+==============+ - | prombery87 | 10 | + | prombery87 | 9 | +------------+--------------+ - | wheed1997 | 7 | + | wheed1997 | 6 | +------------+--------------+ - | acen1999 | 5 | + | acen1999 | 3 | +------------+--------------+ .. table:: player_inventory @@ -295,7 +295,45 @@ So, it's the best solution to store player related data in a separate table. Third normal form (3NF) ======================= -.. todo: definition, bcnf, example +Let's assume, the player table is extended with the *player_rating* column, +which describes the players' skills as "beginner", "intermediate", or +"advanced". And let's assume, the skills are arranged in some like: + ++--------------+-----------+--------------+-----------+ +| Skill Level | Beginner | Intermediate | Advanced | ++--------------+---+---+---+----+----+----+---+---+---+ +| Player Level | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ++--------------+---+---+---+----+----+----+---+---+---+ + +.. table:: player + + +------------+--------------+---------------+ + | player_id | player_level | player_rating | + +============+==============+===============+ + | prombery87 | 9 | advanced | + +------------+--------------+---------------+ + | wheed1997 | 6 | intermediate | + +------------+--------------+---------------+ + | acen1999 | 3 | beginner | + +------------+--------------+---------------+ + +The *non-key attributes* dependencies can be described as follows: + +:: + + { player_id } -> { player_level } + { player_id } -> { player_level } -> { player_skill } + +The *player_rating* does not depend on the primary key, but it depends on +the *player_level* attribute, which is dependent on the primary key. These +type of dependencies is called **transitive dependency**. Having these in +a table opens a way for having data in an inconsistent form. E.g. let's assume +player "acen1999" have increase their level to 4, but something went wrong, +and *player_rating* has not been updated. + ++------------+--------------+---------------+ +| acen1999 | 4 | beginner | ++------------+--------------+---------------+ Requirements ------------ @@ -316,8 +354,45 @@ Requirements Applying 3NF ------------ -.. todo: complete subsection -.. todo: add data example in 3NF +Introducing the "player_rating_levels" will fix the problem. + +.. table:: player + + +------------+--------------+ + | player_id | player_level | + +============+==============+ + | prombery87 | 9 | + +------------+--------------+ + | wheed1997 | 6 | + +------------+--------------+ + | acen1999 | 3 | + +------------+--------------+ + +.. table:: player_rating_levels + +.. table:: player + + +--------------+---------------+ + | player_level | player_rating | + +==============+===============+ + | 9 | advanced | + +--------------+---------------+ + | 8 | advanced | + +--------------+---------------+ + | 7 | advanced | + +--------------+---------------+ + | 6 | intermediate | + +--------------+---------------+ + | 5 | intermediate | + +--------------+---------------+ + | 4 | intermediate | + +--------------+---------------+ + | 3 | beginner | + +--------------+---------------+ + | 2 | beginner | + +--------------+---------------+ + | 1 | beginner | + +--------------+---------------+ Conclusion ========== From 170197e0a255695b84e8f4135006ec8f402fb890 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 15:38:03 +0200 Subject: [PATCH 627/689] Complete conclusion (fixes GH-136) --- src/rdbms/normalization.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 97827e41a..4abff02de 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -399,4 +399,5 @@ Conclusion Each next normal form includes all the requirements for the previous one. -.. todo: complete the conclusion +Following the rules above will lead you to having a fully normalized tables +in 99% of time. From 0dbfb9f81089e32b8c2e33288ab7c3f17dd5b206 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 15:48:57 +0200 Subject: [PATCH 628/689] (GH-53) Add ACID document draft --- src/rdbms/acid.txt | 36 ++++++++++++++++++++++++++++++++++++ src/rdbms/index.txt | 1 + 2 files changed, 37 insertions(+) create mode 100644 src/rdbms/acid.txt diff --git a/src/rdbms/acid.txt b/src/rdbms/acid.txt new file mode 100644 index 000000000..4e1f708c8 --- /dev/null +++ b/src/rdbms/acid.txt @@ -0,0 +1,36 @@ +.. meta:: + :description: Database normalization + :author: Serhii Horodilov + :keywords: sql, db, database, acid, atomic, consistent, isolated, durable + +******************************************************************************* + ACID +******************************************************************************* + +:abbr:`ACID (Atomicity, Consistency, Isolation, Durability)` is a set of +properties of database transactions intended to guarantee data validity despite +errors, power failures, and other mishaps. In the context of databases, +a sequence of database operations that satisfies the ACID properties is called +a transaction. + +Atomicity +========= + +.. todo: entire transaction must finish, or revert the database to old state. + +Consistency +=========== + +.. todo: help ensure the data to be in correct state, + data integrity constraints must be followed. + consistency = correctness + +Isolation +========= + +.. todo: concurrent execution safe. + +Durability +========== + +.. todo: committed transactions to be persisted in non-volatile memory. diff --git a/src/rdbms/index.txt b/src/rdbms/index.txt index 9aee887a4..4a20ba034 100644 --- a/src/rdbms/index.txt +++ b/src/rdbms/index.txt @@ -68,4 +68,5 @@ There are dozens of RDBMS, used in nowadays projects. But most widespread are: query relations functions + acid normalization From 9f8df5ac552b245fc03938da1c519020ae46968e Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 16:17:13 +0200 Subject: [PATCH 629/689] (GH-53) Add atomicity section --- src/rdbms/acid.txt | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/rdbms/acid.txt b/src/rdbms/acid.txt index 4e1f708c8..f992addbd 100644 --- a/src/rdbms/acid.txt +++ b/src/rdbms/acid.txt @@ -16,7 +16,47 @@ a transaction. Atomicity ========= -.. todo: entire transaction must finish, or revert the database to old state. +Transactions are often composed of multiple statements. Atomicity guarantees +that each transaction is treated as a single "unit", which either succeeds +completely, or fails completely: if any of the statements constituting +a transaction fails to complete, the entire transaction fails and the database +left unchanged. A guarantee of atomicity prevents updates to the database from +occurring only partially, which can cause greater problems, than rejecting the +whole series outright. + +As an example, there are few rows in an accounting table: + +.. table:: accounting + + +-----------+-----------------+---------+ + | person_id | name | balance | + +===========+=================+=========+ + | ... | ... | ... | + +-----------+-----------------+---------+ + | 529 | Dora Headstrong | $1,000 | + +-----------+-----------------+---------+ + | 402 | Toby Mugwort | $100 | + +-----------+-----------------+---------+ + | ... | ... | ... | + +-----------+-----------------+---------+ + +In case, Dora wants to transfer $100 to Toby, this can be split into +3 statements: + +- Check if $100 is available +- Deduct $100 from Dora's balance +- Add $100 to Toby's balance + +In case the 3rd statement fails, the data may stay as: + ++-----------+-----------------+---------+ +| 529 | Dora Headstrong | $900 | ++-----------+-----------------+---------+ +| 402 | Toby Mugwort | $100 | ++-----------+-----------------+---------+ + +Atomicity guarantee reverting database to an old state, in case any statement +fails. Consistency =========== From a43c1645b5bc878c3fc417fc72d15886f5bb3861 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 16:24:24 +0200 Subject: [PATCH 630/689] (GH-53) Add consistency section --- src/rdbms/acid.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/rdbms/acid.txt b/src/rdbms/acid.txt index f992addbd..9e3455ff2 100644 --- a/src/rdbms/acid.txt +++ b/src/rdbms/acid.txt @@ -61,9 +61,13 @@ fails. Consistency =========== -.. todo: help ensure the data to be in correct state, - data integrity constraints must be followed. - consistency = correctness +You can think "consistency" as "correctness". It ensures that a transaction +can only bring the database from one consistent state to another, preserving +database invariants: any data written to the database must be valid according +to all defined rules, including constraints, cascades, triggers, and any +combination of thereof. This prevents database corruption by an illegal +transaction. As example, referential integrity guarantees the primary key -- +foreign key relationship. Isolation ========= From b8983e1500767b6ed5ecffaf3d9955098d6e5a6a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 16:33:00 +0200 Subject: [PATCH 631/689] (GH-53) Add isolation section --- src/rdbms/acid.txt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/rdbms/acid.txt b/src/rdbms/acid.txt index 9e3455ff2..db7a1dacf 100644 --- a/src/rdbms/acid.txt +++ b/src/rdbms/acid.txt @@ -72,7 +72,22 @@ foreign key relationship. Isolation ========= -.. todo: concurrent execution safe. +Transactions are often executed concurrently (e.g. multiple transactions +reading and writing to a table at the same time). Isolation ensures that +concurrent execution of transactions leaves the database in the state that +would have been obtained if the transactions were executed sequentially. +Isolation is the main goal of concurrency control; depending on the isolation +level used, the effects of an incomplete transaction might not be visible to +other transaction. + +For example, two persons have access to the same account having $1,000 on it, +and both persons tries to get the money out of this account. Dora tries to +get $1,000, and Toby tries to get $100. + +The sum of the money to get out of the account is $1,100, which cause an issue +of leaving negative amount of money. So, one of these transactions fails. + +Isolation ensures the concurrent executions are safe. Durability ========== From 3f161bdc1dc43ce853fffbfc89d11116263a8fe5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 16:40:19 +0200 Subject: [PATCH 632/689] Add durability section (fixes GH-53) --- src/rdbms/acid.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rdbms/acid.txt b/src/rdbms/acid.txt index db7a1dacf..9e80f10c2 100644 --- a/src/rdbms/acid.txt +++ b/src/rdbms/acid.txt @@ -92,4 +92,6 @@ Isolation ensures the concurrent executions are safe. Durability ========== -.. todo: committed transactions to be persisted in non-volatile memory. +The durability means once the transaction has been committed, the data must +be writen to non-volatile memory. So, even if a crash happens, or something +wrong with the database, the data must be where, and must not be corrupted. From 6e9500ed130b9a9784905b525e62993dd065b976 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 17:02:24 +0200 Subject: [PATCH 633/689] Fix normalization doc tables captions --- src/rdbms/normalization.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rdbms/normalization.txt b/src/rdbms/normalization.txt index 4abff02de..6eded8ab4 100644 --- a/src/rdbms/normalization.txt +++ b/src/rdbms/normalization.txt @@ -370,8 +370,6 @@ Introducing the "player_rating_levels" will fix the problem. .. table:: player_rating_levels -.. table:: player - +--------------+---------------+ | player_level | player_rating | +==============+===============+ From 18b486924aac0210c87e38cb16ad5be68de2102c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 17:03:15 +0200 Subject: [PATCH 634/689] Add ACID chapter translation (GH-146) --- src/_locales/uk/LC_MESSAGES/rdbms/acid.po | 239 ++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 src/_locales/uk/LC_MESSAGES/rdbms/acid.po diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/acid.po b/src/_locales/uk/LC_MESSAGES/rdbms/acid.po new file mode 100644 index 000000000..684341331 --- /dev/null +++ b/src/_locales/uk/LC_MESSAGES/rdbms/acid.po @@ -0,0 +1,239 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2024, Python training course authors and contributors +# This file is distributed under the same license as the Python Training +# Course package. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Training Course 2024.02.dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-18 16:48+0200\n" +"PO-Revision-Date: 2024-02-18 16:59+0200\n" +"Last-Translator: Serhii Horodilov \n" +"Language-Team: uk \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" + +#: ../../src/rdbms/acid.txt:-1 +msgid "Database normalization" +msgstr "Нормалізація бази даних" + +#: ../../src/rdbms/acid.txt:-1 +msgid "Serhii Horodilov" +msgstr "Serhii Horodilov" + +#: ../../src/rdbms/acid.txt:-1 +msgid "sql, db, database, acid, atomic, consistent, isolated, durable" +msgstr "sql, db, database, acid, atomic, consistent, isolated, durable" + +#: ../../src/rdbms/acid.txt:8 +msgid "ACID" +msgstr "ACID" + +#: ../../src/rdbms/acid.txt:10 +msgid "" +":abbr:`ACID (Atomicity, Consistency, Isolation, Durability)` is a set of " +"properties of database transactions intended to guarantee data validity " +"despite errors, power failures, and other mishaps. In the context of " +"databases, a sequence of database operations that satisfies the ACID " +"properties is called a transaction." +msgstr "" +":abbr:`ACID (Atomicity, Consistency, Isolation, Durability - атомарність, " +"узгодженість, ізоляція, довговічність)` - це набір властивостей транзакцій " +"бази даних, призначених для гарантування дійсності даних, незважаючи на " +"помилки, збої в електропостачанні та інші непередбачувані ситуації. У " +"контексті баз даних послідовність операцій з базою даних, яка задовольняє " +"властивості ACID, називається транзакцією." + +#: ../../src/rdbms/acid.txt:17 +msgid "Atomicity" +msgstr "Атомарність" + +#: ../../src/rdbms/acid.txt:19 +msgid "" +"Transactions are often composed of multiple statements. Atomicity guarantees " +"that each transaction is treated as a single \"unit\", which either succeeds " +"completely, or fails completely: if any of the statements constituting a " +"transaction fails to complete, the entire transaction fails and the database " +"left unchanged. A guarantee of atomicity prevents updates to the database " +"from occurring only partially, which can cause greater problems, than " +"rejecting the whole series outright." +msgstr "" +"Транзакції часто складаються з декількох операцій. Атомарність гарантує, що " +"кожна транзакція розглядається як одна \"одиниця\", яка або повністю " +"завершується успішно, або повністю провалюється: якщо будь-який з " +"операторів, що складають транзакцію, не завершується, вся транзакція " +"провалюється, а база даних залишається незмінною. Гарантія атомарності " +"запобігає частковому оновленню бази даних, що може спричинити більші " +"проблеми, ніж повна відмова від усієї серії оновлень даних." + +#: ../../src/rdbms/acid.txt:27 +msgid "As an example, there are few rows in an accounting table:" +msgstr "Наприклад, в бухгалтерській таблиці є кілька рядків:" + +#: ../../src/rdbms/acid.txt:29 +msgid "accounting" +msgstr "accounting" + +#: ../../src/rdbms/acid.txt:32 +msgid "person_id" +msgstr "person_id" + +#: ../../src/rdbms/acid.txt:32 +msgid "name" +msgstr "name" + +#: ../../src/rdbms/acid.txt:32 +msgid "balance" +msgstr "balance" + +#: ../../src/rdbms/acid.txt:34 ../../src/rdbms/acid.txt:40 +msgid "..." +msgstr "..." + +#: ../../src/rdbms/acid.txt:36 ../../src/rdbms/acid.txt:53 +msgid "529" +msgstr "529" + +#: ../../src/rdbms/acid.txt:36 ../../src/rdbms/acid.txt:53 +msgid "Dora Headstrong" +msgstr "Dora Headstrong" + +#: ../../src/rdbms/acid.txt:36 +msgid "$1,000" +msgstr "$1,000" + +#: ../../src/rdbms/acid.txt:38 ../../src/rdbms/acid.txt:55 +msgid "402" +msgstr "402" + +#: ../../src/rdbms/acid.txt:38 ../../src/rdbms/acid.txt:55 +msgid "Toby Mugwort" +msgstr "Toby Mugwort" + +#: ../../src/rdbms/acid.txt:38 ../../src/rdbms/acid.txt:55 +msgid "$100" +msgstr "$100" + +#: ../../src/rdbms/acid.txt:43 +msgid "" +"In case, Dora wants to transfer $100 to Toby, this can be split into 3 " +"statements:" +msgstr "Якщо Дора хоче переказати $100 Тобі, це можна розбити на 3 операції:" + +#: ../../src/rdbms/acid.txt:46 +msgid "Check if $100 is available" +msgstr "Перевірити, чи доступні $100" + +#: ../../src/rdbms/acid.txt:47 +msgid "Deduct $100 from Dora's balance" +msgstr "Відняти $100 з балансу Дори" + +#: ../../src/rdbms/acid.txt:48 +msgid "Add $100 to Toby's balance" +msgstr "Додати $100 на баланс Тобі" + +#: ../../src/rdbms/acid.txt:50 +msgid "In case the 3rd statement fails, the data may stay as:" +msgstr "Якщо 3-й оператор не спрацює, дані можуть залишитися у вигляді:" + +#: ../../src/rdbms/acid.txt:53 +msgid "$900" +msgstr "$900" + +#: ../../src/rdbms/acid.txt:58 +msgid "" +"Atomicity guarantee reverting database to an old state, in case any " +"statement fails." +msgstr "" +"Атомарність гарантує повернення бази даних до старого стану, якщо якийсь " +"оператор зазнає невдачі." + +#: ../../src/rdbms/acid.txt:62 +msgid "Consistency" +msgstr "Узгодженість" + +#: ../../src/rdbms/acid.txt:64 +msgid "" +"You can think \"consistency\" as \"correctness\". It ensures that a " +"transaction can only bring the database from one consistent state to " +"another, preserving database invariants: any data written to the database " +"must be valid according to all defined rules, including constraints, " +"cascades, triggers, and any combination of thereof. This prevents database " +"corruption by an illegal transaction. As example, referential integrity " +"guarantees the primary key -- foreign key relationship." +msgstr "" +"Ви можете думати про \"узгодженість\" як про \"правильність\". Вона " +"гарантує, що транзакція може лише переводити базу даних з одного узгодженого " +"стану в інший: будь-які дані, записані в базу даних, повинні бути дійсними " +"згідно з усіма визначеними правилами, включаючи обмеження, каскади, тригери " +"та будь-яку їх комбінацію. Це запобігає пошкодженню бази даних неправильною " +"транзакцією. Наприклад, цілісність посилань гарантує зв'язок між первинним і " +"зовнішнім ключами." + +#: ../../src/rdbms/acid.txt:73 +msgid "Isolation" +msgstr "Ізоляція" + +#: ../../src/rdbms/acid.txt:75 +msgid "" +"Transactions are often executed concurrently (e.g. multiple transactions " +"reading and writing to a table at the same time). Isolation ensures that " +"concurrent execution of transactions leaves the database in the state that " +"would have been obtained if the transactions were executed sequentially. " +"Isolation is the main goal of concurrency control; depending on the " +"isolation level used, the effects of an incomplete transaction might not be " +"visible to other transaction." +msgstr "" +"Транзакції часто виконуються паралельно (наприклад, декілька транзакцій " +"одночасно читають і записують дані в таблицю). Ізоляція гарантує, що " +"одночасне виконання транзакцій залишає базу даних у стані, який був би " +"отриманий, якби транзакції виконувалися послідовно. Ізоляція є основною " +"метою контролю паралелізму; залежно від рівня ізоляції, що використовується, " +"наслідки незавершеної транзакції можуть бути невидимими для інших транзакцій." + +#: ../../src/rdbms/acid.txt:83 +msgid "" +"For example, two persons have access to the same account having $1,000 on " +"it, and both persons tries to get the money out of this account. Dora tries " +"to get $1,000, and Toby tries to get $100." +msgstr "" +"Наприклад, дві особи мають доступ до одного рахунку, на якому є $1,000, і " +"обидві особи намагаються зняти гроші з цього рахунку. Дора намагається зняти " +"$1,000, а Тобі - $100." + +#: ../../src/rdbms/acid.txt:87 +msgid "" +"The sum of the money to get out of the account is $1,100, which cause an " +"issue of leaving negative amount of money. So, one of these transactions " +"fails." +msgstr "" +"Сума грошей, яку потрібно зняти з рахунку, становить $1,100, що призводить " +"до проблеми від'ємної суми. Отже, одна з цих транзакцій не вдається." + +#: ../../src/rdbms/acid.txt:90 +msgid "Isolation ensures the concurrent executions are safe." +msgstr "Ізоляція забезпечує безпеку конкурентного виконання." + +#: ../../src/rdbms/acid.txt:93 +msgid "Durability" +msgstr "Довговічність" + +#: ../../src/rdbms/acid.txt:95 +msgid "" +"The durability means once the transaction has been committed, the data must " +"be writen to non-volatile memory. So, even if a crash happens, or something " +"wrong with the database, the data must be where, and must not be corrupted." +msgstr "" +"Довговічність означає, що як тільки транзакція була здійснена, дані повинні " +"бути записані в енергонезалежну пам'ять. Таким чином, навіть якщо трапиться " +"збій або щось не так з базою даних, дані повинні бути на місці і не повинні " +"бути пошкоджені." From 1c5db34e0064e449ab14026f58dcc0b8e0d26f36 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 17:28:05 +0200 Subject: [PATCH 635/689] Add normalization doc translation (GH-146) --- .../uk/LC_MESSAGES/rdbms/normalization.po | 871 +++++++++++++----- 1 file changed, 639 insertions(+), 232 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po index 569b05a99..46abce8e9 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po @@ -4,19 +4,19 @@ # SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Project-Id-Version: Python Training Course 2024.02.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" -"POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 03:59+0200\n" +"POT-Creation-Date: 2024-02-18 16:49+0200\n" +"PO-Revision-Date: 2024-02-18 17:26+0200\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.4.1\n" +"Generated-By: Babel 2.14.0\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/normalization.txt:-1 msgid "Database normalization" @@ -51,7 +51,6 @@ msgstr "" "неузгодженості даних." #: ../../src/rdbms/normalization.txt:16 -#, fuzzy msgid "" "The main purpose of database normalization is to avoid complexities, " "eliminate duplicates, and organize data in a consistent way. Normalization " @@ -66,316 +65,724 @@ msgstr "" #: ../../src/rdbms/normalization.txt:22 msgid "" -"There are 6 **normal forms**, but this chapter focuses on the first 3 only, " -"since the commonest normal form you'll see out there is *3NF* (third normal " -"form)." +"There are 6 + 3 **normal forms**, but this chapter focuses on the first 3 " +"only, since the commonest normal form you'll see out there is *3NF* (third " +"normal form)." msgstr "" +"Існує 6 + 3 **нормальних форми**, але у цій главі ми розглянемо лише перші " +"3, оскільки найпоширенішою нормальною формою, яку ви побачите, є *3НФ* " +"(третя нормальна форма)." #: ../../src/rdbms/normalization.txt:26 msgid "Normalized tables are:" -msgstr "" +msgstr "Нормалізовані таблиці:" #: ../../src/rdbms/normalization.txt:28 msgid "Easier to understand" -msgstr "" +msgstr "Легше зрозуміти" #: ../../src/rdbms/normalization.txt:29 msgid "Easier to enhance and extend" -msgstr "" +msgstr "Легше вдосконалювати та розширювати" #: ../../src/rdbms/normalization.txt:30 msgid "Protected from:" -msgstr "" +msgstr "Захищені від:" #: ../../src/rdbms/normalization.txt:32 msgid "insertion anomalies" -msgstr "" +msgstr "аномалій вставки" #: ../../src/rdbms/normalization.txt:33 msgid "update anomalies" -msgstr "" +msgstr "аномалій оновлення" #: ../../src/rdbms/normalization.txt:34 msgid "deletion anomalies" -msgstr "" +msgstr "аномалій видалення" #: ../../src/rdbms/normalization.txt:37 msgid "Anomalies" -msgstr "" +msgstr "Аномалії" #: ../../src/rdbms/normalization.txt:40 msgid "Insertion anomalies" -msgstr "" +msgstr "Аномалії вставки" -#: ../../src/rdbms/normalization.txt:45 +#: ../../src/rdbms/normalization.txt:42 +msgid "" +"There are circumstances in which certain facts cannot be recorded at all. " +"For example, each record in the \"Faculty and Their Courses\" relation might " +"contain a *Faculty ID*, *Faculty Name* and *Course Code*. Therefore, the " +"details of any faculty member who teaches at least one course can be " +"recorded, but a newly hired faculty member who has not yet been assigned to " +"teach any courses cannot be recorded, except by setting the course code to " +"``null``." +msgstr "" +"Існують обставини, за яких певні факти взагалі не можуть бути записані. " +"Наприклад, кожен запис у відношенні \"Викладачі та їхні курси\" може містити " +"*ідентифікатор викладача*, *ім'я викладача* та *код курсу*. Таким чином, " +"можна записати інформацію про будь-якого викладача, який викладає хоча б " +"один курс, але не можна записати інформацію про новоприйнятого викладача, " +"якому ще не було призначено викладання жодного курсу, окрім як встановивши " +"код курсу на ``нуль``." + +#: ../../src/rdbms/normalization.txt:50 ../../src/rdbms/normalization.txt:60 +msgid "Faculty ID" +msgstr "Faculty ID" + +#: ../../src/rdbms/normalization.txt:50 ../../src/rdbms/normalization.txt:60 +msgid "Faculty Name" +msgstr "Faculty Name" + +#: ../../src/rdbms/normalization.txt:50 ../../src/rdbms/normalization.txt:60 +msgid "Course Code" +msgstr "Course Code" + +#: ../../src/rdbms/normalization.txt:52 ../../src/rdbms/normalization.txt:62 +msgid "389" +msgstr "389" + +#: ../../src/rdbms/normalization.txt:52 +msgid "Dr. Headstrong" +msgstr "Dr. Headstrong" + +#: ../../src/rdbms/normalization.txt:52 +msgid "ENG-206" +msgstr "ENG-206" + +#: ../../src/rdbms/normalization.txt:54 ../../src/rdbms/normalization.txt:56 +msgid "407" +msgstr "407" + +#: ../../src/rdbms/normalization.txt:54 ../../src/rdbms/normalization.txt:56 +msgid "Dr. Mugwort" +msgstr "Dr. Mugwort" + +#: ../../src/rdbms/normalization.txt:54 +msgid "CMP-101" +msgstr "CMP-101" + +#: ../../src/rdbms/normalization.txt:56 +msgid "CMP-201" +msgstr "CMP-201" + +#: ../../src/rdbms/normalization.txt:62 +msgid "Dr. Newone" +msgstr "Dr. Newone" + +#: ../../src/rdbms/normalization.txt:62 +msgid "???" +msgstr "???" + +#: ../../src/rdbms/normalization.txt:66 msgid "Update anomalies" +msgstr "Анамолії оновлення" + +#: ../../src/rdbms/normalization.txt:68 +msgid "" +"The same information can be expressed on multiple rows; therefore updates to " +"the relation may result in logical inconsistencies. For example, each record " +"in an \"Employees' Skills\" relation might contain ah *Employee ID*, " +"*Employee Address*, and *Skill*; thus a charge of address for a particular " +"employee may need to be applied to multiple records (one for each skill). If " +"the update is only partially successful -- the employee's address is updated " +"on some records but not others -- then the relation is left in an " +"inconsistent state. Specifically, the relation provides conflicting answers " +"to the question of what this particular employee's address is." msgstr "" +"Одна й та сама інформація може бути виражена в декількох рядках, тому " +"оновлення відношення може призвести до логічної неузгодженості. Наприклад, " +"кожен запис у відношенні \"Навички працівників\" може містити ах " +"*Ідентифікатор працівника*, *Адреса працівника* та *Навичка*; таким чином, " +"може виникнути потреба в оновленні адреси для певного працівника в декількох " +"записах (по одному для кожної навички). Якщо оновлення відбувається лише " +"частково - адреса працівника оновлюється в одних записах, але не в інших - " +"то відношення залишається в неузгодженому стані. Зокрема, відношення надає " +"суперечливі відповіді на питання про те, якою є адреса конкретного " +"працівника." + +#: ../../src/rdbms/normalization.txt:79 +msgid "Employee ID" +msgstr "Employee ID" + +#: ../../src/rdbms/normalization.txt:79 +msgid "Employee Address" +msgstr "Employee Address" + +#: ../../src/rdbms/normalization.txt:79 +msgid "Skill" +msgstr "Skill" + +#: ../../src/rdbms/normalization.txt:81 ../../src/rdbms/normalization.txt:83 +msgid "426" +msgstr "426" + +#: ../../src/rdbms/normalization.txt:81 ../../src/rdbms/normalization.txt:83 +msgid "230 Parkland Crescent" +msgstr "230 Parkland Crescent" + +#: ../../src/rdbms/normalization.txt:81 +msgid "typing" +msgstr "typing" + +#: ../../src/rdbms/normalization.txt:83 +msgid "shorthand" +msgstr "shorthand" + +#: ../../src/rdbms/normalization.txt:85 ../../src/rdbms/normalization.txt:87 +msgid "529" +msgstr "529" + +#: ../../src/rdbms/normalization.txt:85 +msgid "158 Watkins Place" +msgstr "158 Watkins Place" + +#: ../../src/rdbms/normalization.txt:85 +msgid "public speaking" +msgstr "public speaking" + +#: ../../src/rdbms/normalization.txt:87 +msgid "108 Church Street" +msgstr "108 Church Street" + +#: ../../src/rdbms/normalization.txt:87 +msgid "carpentry" +msgstr "carpentry" -#: ../../src/rdbms/normalization.txt:50 +#: ../../src/rdbms/normalization.txt:91 msgid "Deletion anomalies" -msgstr "" +msgstr "Аномалії видалення" -#: ../../src/rdbms/normalization.txt:55 +#: ../../src/rdbms/normalization.txt:93 +msgid "" +"Under certain circumstances, the deletion of data representing certain facts " +"necessitates the deletion of data representing completely different facts. " +"The \"Faculty and Their Courses\" relation described in the previous example " +"suffers from this type of anomaly, for if a faculty member temporary ceases " +"to be assigned to any courses, the last of the records on which that faculty " +"member appears must be deleted, effectively also deleting the faculty " +"member, unless the *Course Code* field is set to ``null``." +msgstr "" +"За певних обставин видалення даних, що представляють певні факти, призводить " +"до видалення даних, що представляють зовсім інші факти. Відношення " +"\"Викладачі та їхні курси\", описане в попередньому прикладі, страждає від " +"цього типу аномалії, тому що якщо викладач тимчасово перестає бути " +"призначеним на будь-який курс, останній запис, в якому він з'являється, має " +"бути видалений, фактично видаляючи і самого викладача, якщо тільки поле *Код " +"курсу* не встановлено в ``нуль``." + +#: ../../src/rdbms/normalization.txt:102 msgid "First normal form (1NF)" msgstr "Перша нормальна форма (1NF)" -#: ../../src/rdbms/normalization.txt:58 +#: ../../src/rdbms/normalization.txt:105 msgid "Data example" -msgstr "" +msgstr "Приклад даних" -#: ../../src/rdbms/normalization.txt:62 ../../src/rdbms/normalization.txt:80 -#: ../../src/rdbms/normalization.txt:96 -msgid "Requirements" +#: ../../src/rdbms/normalization.txt:106 +msgid "" +"The table below represents players and their characters inventory, ordered " +"by their characters' levels." msgstr "" +"У таблиці нижче представлені гравці та інвентар їхніх персонажів, " +"впорядковані за рівнями персонажів." + +#: ../../src/rdbms/normalization.txt:110 ../../src/rdbms/normalization.txt:144 +#: ../../src/rdbms/normalization.txt:162 +msgid "username" +msgstr "username" + +#: ../../src/rdbms/normalization.txt:110 ../../src/rdbms/normalization.txt:144 +#: ../../src/rdbms/normalization.txt:162 +msgid "inventory" +msgstr "inventory" + +#: ../../src/rdbms/normalization.txt:112 ../../src/rdbms/normalization.txt:146 +#: ../../src/rdbms/normalization.txt:164 ../../src/rdbms/normalization.txt:180 +#: ../../src/rdbms/normalization.txt:182 ../../src/rdbms/normalization.txt:209 +#: ../../src/rdbms/normalization.txt:211 ../../src/rdbms/normalization.txt:266 +#: ../../src/rdbms/normalization.txt:278 ../../src/rdbms/normalization.txt:280 +#: ../../src/rdbms/normalization.txt:313 ../../src/rdbms/normalization.txt:364 +msgid "prombery87" +msgstr "prombery87" + +#: ../../src/rdbms/normalization.txt:112 ../../src/rdbms/normalization.txt:146 +#: ../../src/rdbms/normalization.txt:164 +msgid "2 amulets, 3 rings" +msgstr "2 амулети, 3 каблучки" + +#: ../../src/rdbms/normalization.txt:114 ../../src/rdbms/normalization.txt:148 +#: ../../src/rdbms/normalization.txt:166 ../../src/rdbms/normalization.txt:168 +#: ../../src/rdbms/normalization.txt:184 ../../src/rdbms/normalization.txt:186 +#: ../../src/rdbms/normalization.txt:188 ../../src/rdbms/normalization.txt:213 +#: ../../src/rdbms/normalization.txt:215 ../../src/rdbms/normalization.txt:217 +#: ../../src/rdbms/normalization.txt:268 ../../src/rdbms/normalization.txt:282 +#: ../../src/rdbms/normalization.txt:284 ../../src/rdbms/normalization.txt:286 +#: ../../src/rdbms/normalization.txt:315 ../../src/rdbms/normalization.txt:366 +msgid "wheed1997" +msgstr "wheed1997" + +#: ../../src/rdbms/normalization.txt:114 ../../src/rdbms/normalization.txt:148 +#: ../../src/rdbms/normalization.txt:166 ../../src/rdbms/normalization.txt:168 +msgid "18 copper coins, 1 bow, 5 arrows" +msgstr "18 мідних монет, 1 лук, 5 стріл" + +#: ../../src/rdbms/normalization.txt:116 ../../src/rdbms/normalization.txt:150 +#: ../../src/rdbms/normalization.txt:170 ../../src/rdbms/normalization.txt:190 +#: ../../src/rdbms/normalization.txt:192 ../../src/rdbms/normalization.txt:194 +#: ../../src/rdbms/normalization.txt:219 ../../src/rdbms/normalization.txt:221 +#: ../../src/rdbms/normalization.txt:223 ../../src/rdbms/normalization.txt:270 +#: ../../src/rdbms/normalization.txt:288 ../../src/rdbms/normalization.txt:290 +#: ../../src/rdbms/normalization.txt:292 ../../src/rdbms/normalization.txt:317 +#: ../../src/rdbms/normalization.txt:335 ../../src/rdbms/normalization.txt:368 +msgid "acen1999" +msgstr "acen1999" + +#: ../../src/rdbms/normalization.txt:116 ../../src/rdbms/normalization.txt:150 +#: ../../src/rdbms/normalization.txt:170 +msgid "1 sword, 1 shield, 4 rings" +msgstr "1 меч, 1 щит, 4 персні" + +#: ../../src/rdbms/normalization.txt:120 ../../src/rdbms/normalization.txt:230 +#: ../../src/rdbms/normalization.txt:339 +msgid "Requirements" +msgstr "Вимоги" -#: ../../src/rdbms/normalization.txt:64 +#: ../../src/rdbms/normalization.txt:122 msgid "Row order should not be used to convey information." -msgstr "" +msgstr "Порядок рядків не повинен використовуватися для передачі інформації." -#: ../../src/rdbms/normalization.txt:65 +#: ../../src/rdbms/normalization.txt:123 msgid "" "Data types should not be mixed within the same column (and the RDBMS won't " "let you do in anyway)." msgstr "" +"Типи даних не повинні змішуватися в одному стовпчику (і СУБД не дозволить " +"вам цього зробити в будь-якому випадку)." -#: ../../src/rdbms/normalization.txt:67 +#: ../../src/rdbms/normalization.txt:125 msgid "Tables should have their primary keys." -msgstr "" +msgstr "Таблиці повинні мати первинні ключі." -#: ../../src/rdbms/normalization.txt:68 +#: ../../src/rdbms/normalization.txt:126 msgid "Repeating groups should be eliminated." -msgstr "" +msgstr "Групи, що повторюються, мають бути виключені." -#: ../../src/rdbms/normalization.txt:71 +#: ../../src/rdbms/normalization.txt:129 msgid "Applying 1NF" +msgstr "Застосування 1NF" + +#: ../../src/rdbms/normalization.txt:131 +msgid "" +"First of all, using the rows order to represent the information violates " +"1NF. This can be easily fixed by adding additional column *level* to store " +"the info about the character's level. From this, the ordered sequences can " +"be fetched by using the query:" msgstr "" +"Перш за все, використання порядку рядків для представлення інформації " +"порушує 1NF. Це можна легко виправити, додавши додатковий стовпець *level* " +"для зберігання інформації про рівень персонажа. Звідси впорядковані " +"послідовності можуть бути отримані за допомогою запиту:" -#: ../../src/rdbms/normalization.txt:77 +#: ../../src/rdbms/normalization.txt:140 +msgid "" +"The second rule is **do not** mix data types within the same column. As " +"example, the characters' level might be described as follows:" +msgstr "" +"Друге правило - не змішувати типи даних в одному стовпчику. Наприклад, " +"рівень символів можна описати наступним чином:" + +#: ../../src/rdbms/normalization.txt:144 ../../src/rdbms/normalization.txt:162 +msgid "level" +msgstr "level" + +#: ../../src/rdbms/normalization.txt:146 ../../src/rdbms/normalization.txt:164 +#: ../../src/rdbms/normalization.txt:209 ../../src/rdbms/normalization.txt:211 +#: ../../src/rdbms/normalization.txt:266 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:313 ../../src/rdbms/normalization.txt:364 +#: ../../src/rdbms/normalization.txt:376 +msgid "9" +msgstr "9" + +#: ../../src/rdbms/normalization.txt:148 +msgid "almost 8" +msgstr "almost 8" + +#: ../../src/rdbms/normalization.txt:150 +msgid "5.5" +msgstr "5.5" + +#: ../../src/rdbms/normalization.txt:153 +msgid "" +"The data types are mixed in *level* column, which violates 1NF; and " +"normally, RDBMS won't let you do this." +msgstr "" +"У стовпчику *level* змішано типи даних, що порушує 1NF; і зазвичай СУБД не " +"дозволяє цього робити." + +#: ../../src/rdbms/normalization.txt:156 +msgid "" +"The tables without a **primary key** violates 1NF as well. *username* field " +"may be used as **PK** for the players relation example. This would prevent " +"the data duplication, like having both ``wheed1997`` players at level 7 and " +"8 at the same time, which makes no sense." +msgstr "" +"Таблиці без **первинного ключа** також порушують 1NF. *поле username* можна " +"використовувати як **PK** для прикладу відношення гравців. Це запобігатиме " +"дублюванню даних, наприклад, наявності обох гравців ``wheed1997`` на 7 і 8 " +"рівнях одночасно, що не має сенсу." + +#: ../../src/rdbms/normalization.txt:166 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:378 +msgid "8" +msgstr "8" + +#: ../../src/rdbms/normalization.txt:168 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:380 +msgid "7" +msgstr "7" + +#: ../../src/rdbms/normalization.txt:170 ../../src/rdbms/normalization.txt:188 +#: ../../src/rdbms/normalization.txt:217 ../../src/rdbms/normalization.txt:286 +#: ../../src/rdbms/normalization.txt:305 ../../src/rdbms/normalization.txt:384 +msgid "5" +msgstr "5" + +#: ../../src/rdbms/normalization.txt:173 +msgid "" +"At last, *inventory* column contains repeating groups of data (also called " +"*non-atomic data*), which violates 1NF. To normalize the table, it should be " +"altered in a way, to represent only one inventory item per row." +msgstr "" +"Нарешті, стовпчик *інвентар* містить групи даних, що повторюються (також " +"звані *неатомними даними*), що порушує 1НФ. Щоб нормалізувати таблицю, її " +"слід змінити таким чином, щоб у кожному рядку було представлено лише одну " +"інвентарну одиницю." + +#: ../../src/rdbms/normalization.txt:178 ../../src/rdbms/normalization.txt:207 +#: ../../src/rdbms/normalization.txt:264 ../../src/rdbms/normalization.txt:276 +#: ../../src/rdbms/normalization.txt:311 ../../src/rdbms/normalization.txt:362 +msgid "player_id" +msgstr "player_id" + +#: ../../src/rdbms/normalization.txt:178 ../../src/rdbms/normalization.txt:207 +#: ../../src/rdbms/normalization.txt:276 +msgid "item_type" +msgstr "item_type" + +#: ../../src/rdbms/normalization.txt:178 ../../src/rdbms/normalization.txt:207 +#: ../../src/rdbms/normalization.txt:276 +msgid "item_quantity" +msgstr "item_quantity" + +#: ../../src/rdbms/normalization.txt:180 ../../src/rdbms/normalization.txt:209 +#: ../../src/rdbms/normalization.txt:278 +msgid "amulet" +msgstr "амулет" + +#: ../../src/rdbms/normalization.txt:180 ../../src/rdbms/normalization.txt:209 +#: ../../src/rdbms/normalization.txt:278 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:390 +msgid "2" +msgstr "2" + +#: ../../src/rdbms/normalization.txt:182 ../../src/rdbms/normalization.txt:194 +#: ../../src/rdbms/normalization.txt:211 ../../src/rdbms/normalization.txt:223 +#: ../../src/rdbms/normalization.txt:280 ../../src/rdbms/normalization.txt:292 +msgid "ring" +msgstr "каблучка" + +#: ../../src/rdbms/normalization.txt:182 ../../src/rdbms/normalization.txt:211 +#: ../../src/rdbms/normalization.txt:219 ../../src/rdbms/normalization.txt:221 +#: ../../src/rdbms/normalization.txt:223 ../../src/rdbms/normalization.txt:270 +#: ../../src/rdbms/normalization.txt:280 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:317 ../../src/rdbms/normalization.txt:368 +#: ../../src/rdbms/normalization.txt:388 +msgid "3" +msgstr "3" + +#: ../../src/rdbms/normalization.txt:184 ../../src/rdbms/normalization.txt:213 +#: ../../src/rdbms/normalization.txt:282 +msgid "copper coin" +msgstr "мідна монета" + +#: ../../src/rdbms/normalization.txt:184 ../../src/rdbms/normalization.txt:213 +#: ../../src/rdbms/normalization.txt:282 +msgid "18" +msgstr "18" + +#: ../../src/rdbms/normalization.txt:186 ../../src/rdbms/normalization.txt:215 +#: ../../src/rdbms/normalization.txt:284 +msgid "bow" +msgstr "лук" + +#: ../../src/rdbms/normalization.txt:186 ../../src/rdbms/normalization.txt:190 +#: ../../src/rdbms/normalization.txt:192 ../../src/rdbms/normalization.txt:215 +#: ../../src/rdbms/normalization.txt:219 ../../src/rdbms/normalization.txt:221 +#: ../../src/rdbms/normalization.txt:284 ../../src/rdbms/normalization.txt:288 +#: ../../src/rdbms/normalization.txt:290 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:392 +msgid "1" +msgstr "1" + +#: ../../src/rdbms/normalization.txt:188 ../../src/rdbms/normalization.txt:217 +#: ../../src/rdbms/normalization.txt:286 +msgid "arrow" +msgstr "стріла" + +#: ../../src/rdbms/normalization.txt:190 ../../src/rdbms/normalization.txt:219 +#: ../../src/rdbms/normalization.txt:288 +msgid "sword" +msgstr "меч" + +#: ../../src/rdbms/normalization.txt:192 ../../src/rdbms/normalization.txt:221 +#: ../../src/rdbms/normalization.txt:290 +msgid "shield" +msgstr "щит" + +#: ../../src/rdbms/normalization.txt:194 ../../src/rdbms/normalization.txt:223 +#: ../../src/rdbms/normalization.txt:292 ../../src/rdbms/normalization.txt:305 +#: ../../src/rdbms/normalization.txt:335 ../../src/rdbms/normalization.txt:386 +msgid "4" +msgstr "4" + +#: ../../src/rdbms/normalization.txt:197 +msgid "" +"The primary key for this table is the combination of *player_id* and " +"*item_type* -- a composite primary key." +msgstr "" +"Первинним ключем для цієї таблиці є комбінація *player_id* та *item_type* - " +"складений первинний ключ." + +#: ../../src/rdbms/normalization.txt:201 msgid "Second normal form (2NF)" msgstr "Друга нормальна форма (2NF)" -#: ../../src/rdbms/normalization.txt:82 -msgid "Each non-key attribute must depend on the entire primary key" +#: ../../src/rdbms/normalization.txt:203 +msgid "" +"Here, 2NF starts. For example, let's bring back *level* info to the table, " +"representing players and theirs inventory." +msgstr "" +"Тут починається 2NF. Наприклад, давайте повернемо до таблиці інформацію про " +"*рівень*, що представляє гравців та їхній інвентар." + +#: ../../src/rdbms/normalization.txt:207 ../../src/rdbms/normalization.txt:264 +#: ../../src/rdbms/normalization.txt:311 ../../src/rdbms/normalization.txt:362 +#: ../../src/rdbms/normalization.txt:374 +msgid "player_level" +msgstr "player_level" + +#: ../../src/rdbms/normalization.txt:213 ../../src/rdbms/normalization.txt:215 +#: ../../src/rdbms/normalization.txt:217 ../../src/rdbms/normalization.txt:268 +#: ../../src/rdbms/normalization.txt:305 ../../src/rdbms/normalization.txt:315 +#: ../../src/rdbms/normalization.txt:366 ../../src/rdbms/normalization.txt:382 +msgid "6" +msgstr "6" + +#: ../../src/rdbms/normalization.txt:226 +msgid "" +"The player's *level* should be duplicated for each row. This table design " +"keeps the doors open for **insertion**, **update** and **deletion** " +"anomalies." msgstr "" +"Рівень гравця повинен дублюватися в кожному рядку. Такий дизайн таблиці " +"залишає двері відкритими для **вставки**, **оновлення** та **видалення** " +"аномалій." -#: ../../src/rdbms/normalization.txt:85 +#: ../../src/rdbms/normalization.txt:232 +msgid "Each non-key attribute must depend on the entire primary key" +msgstr "Кожен неключовий атрибут повинен залежати від усього первинного ключа" + +#: ../../src/rdbms/normalization.txt:235 msgid "Applying 2NF" +msgstr "Застосування 2NF" + +#: ../../src/rdbms/normalization.txt:237 +msgid "" +"The 2NF is all about \"how non-key columns related to the primary key\". The " +"example above has *non-key attributes* (which is another term for the \"non-" +"key columns\") are: *item_quantity* and *player_level*." msgstr "" +"2NF - це все про те, \"як неключові стовпці пов'язані з первинним ключем\". " +"У наведеному вище прикладі *неключові атрибути* (що є іншим терміном для " +"\"неключових стовпців\") є: *item_quantity* та *player_level*." -#: ../../src/rdbms/normalization.txt:91 +#: ../../src/rdbms/normalization.txt:241 +msgid "" +"The relations between the *primary key* and *non-key attributes* can be " +"described as:" +msgstr "" +"Відношення між *первинним ключем* та *неключовими атрибутами* можна описати " +"так:" + +#: ../../src/rdbms/normalization.txt:249 +msgid "" +"The *item_quantity* column depends on the *player_id* and *item_type* " +"columns, which creates a 1-to-1 dependency for this column on the entire " +"primary key. This means, there is no way to place different values in the " +"*item_quantity* column for the same primary key." +msgstr "" +"Стовпець *item_quantity* залежить від стовпців *player_id* і *item_type*, що " +"створює залежність 1 до 1 для цього стовпця від усього первинного ключа. Це " +"означає, що не існує способу розмістити різні значення у стовпці " +"*item_quantity* для одного первинного ключа." + +#: ../../src/rdbms/normalization.txt:254 +msgid "" +"But, the *player_level* column depends on the *player_id* only. It's a " +"problem, because the *player_id* is not the primary key, but a part of a " +"primary key. This violates the 2NF, and what's why the table is vulnerable " +"to the problems." +msgstr "" +"Але стовпець *player_level* залежить тільки від *player_id*. Це проблема, " +"тому що *player_id* не є первинним ключем, але є частиною первинного ключа. " +"Це порушує 2НФ, і саме тому таблиця вразлива до проблем." + +#: ../../src/rdbms/normalization.txt:258 +msgid "" +"The **player** is the important concept for representing the data. So, it's " +"the best solution to store player related data in a separate table." +msgstr "" +"Важливим поняттям для представлення даних є **гравець**. Тому найкращим " +"рішенням буде зберігати дані, пов'язані з гравцями, в окремій таблиці." + +#: ../../src/rdbms/normalization.txt:261 ../../src/rdbms/normalization.txt:308 +#: ../../src/rdbms/normalization.txt:359 +msgid "player" +msgstr "player" + +#: ../../src/rdbms/normalization.txt:273 +msgid "player_inventory" +msgstr "player_inventory" + +#: ../../src/rdbms/normalization.txt:296 msgid "Third normal form (3NF)" msgstr "3-тя нормальна форма (3NF)" -#: ../../src/rdbms/normalization.txt:98 +#: ../../src/rdbms/normalization.txt:298 +msgid "" +"Let's assume, the player table is extended with the *player_rating* column, " +"which describes the players' skills as \"beginner\", \"intermediate\", or " +"\"advanced\". And let's assume, the skills are arranged in some like:" +msgstr "" +"Припустимо, таблиця гравців доповнена стовпчиком *рейтинг гравця*, який " +"описує навички гравців як \"початківець\", \"середній\" або \"просунутий\". " +"І припустимо, що навички впорядковані за типом \"like\":" + +#: ../../src/rdbms/normalization.txt:303 +msgid "Skill Level" +msgstr "Skill Level" + +#: ../../src/rdbms/normalization.txt:303 +msgid "Beginner" +msgstr "Beginner" + +#: ../../src/rdbms/normalization.txt:303 +msgid "Intermediate" +msgstr "Intermediate" + +#: ../../src/rdbms/normalization.txt:303 +msgid "Advanced" +msgstr "Advanced" + +#: ../../src/rdbms/normalization.txt:305 +msgid "Player Level" +msgstr "Player Level" + +#: ../../src/rdbms/normalization.txt:311 ../../src/rdbms/normalization.txt:374 +msgid "player_rating" +msgstr "player_rating" + +#: ../../src/rdbms/normalization.txt:313 ../../src/rdbms/normalization.txt:376 +#: ../../src/rdbms/normalization.txt:378 ../../src/rdbms/normalization.txt:380 +msgid "advanced" +msgstr "advanced" + +#: ../../src/rdbms/normalization.txt:315 ../../src/rdbms/normalization.txt:382 +#: ../../src/rdbms/normalization.txt:384 ../../src/rdbms/normalization.txt:386 +msgid "intermediate" +msgstr "intermediate" + +#: ../../src/rdbms/normalization.txt:317 ../../src/rdbms/normalization.txt:335 +#: ../../src/rdbms/normalization.txt:388 ../../src/rdbms/normalization.txt:390 +#: ../../src/rdbms/normalization.txt:392 +msgid "beginner" +msgstr "beginner" + +#: ../../src/rdbms/normalization.txt:320 +msgid "The *non-key attributes* dependencies can be described as follows:" +msgstr "Залежності *неключових атрибутів* можна описати наступним чином:" + +#: ../../src/rdbms/normalization.txt:327 +msgid "" +"The *player_rating* does not depend on the primary key, but it depends on " +"the *player_level* attribute, which is dependent on the primary key. These " +"type of dependencies is called **transitive dependency**. Having these in a " +"table opens a way for having data in an inconsistent form. E.g. let's assume " +"player \"acen1999\" have increase their level to 4, but something went " +"wrong, and *player_rating* has not been updated." +msgstr "" +"Атрибут *рейтинг_гравця* не залежить від первинного ключа, але залежить від " +"атрибута *рівень_гравця*, який залежить від первинного ключа. Цей тип " +"залежностей називається **транзитивною залежністю**. Наявність таких " +"залежностей у таблиці відкриває шлях до отримання даних у непослідовній " +"формі. Наприклад, припустимо, що гравець \"acen1999\" підвищив свій рівень " +"до 4, але щось пішло не так, і *рейтинг_гравця* не було оновлено." + +#: ../../src/rdbms/normalization.txt:341 msgid "" "Every non-key attribute in a table should depend on the key, the whole key, " "and nothing but the key (no transitive dependency)." msgstr "" +"Кожен неключовий атрибут у таблиці повинен залежати від ключа, всього ключа " +"і ні від чого, крім ключа (без транзитивної залежності)." -#: ../../src/rdbms/normalization.txt:103 +#: ../../src/rdbms/normalization.txt:346 msgid "**Boyce-Codd normal form**" -msgstr "" +msgstr "**Нормальна форма Бойса-Кодда**" -#: ../../src/rdbms/normalization.txt:105 +#: ../../src/rdbms/normalization.txt:348 msgid "" ":abbr:`BCNF (Boyce-Codd Normal Form)` is the stronger version of 3NF. It " "also is called as 3.5NF (three-and-a-half normal form)." msgstr "" +"abbr:`BCNF (нормальна форма Бойса-Кодда)` - це сильніша версія 3NF. Її також " +"називають 3.5NF (третя з половиною нормальна форма)." -#: ../../src/rdbms/normalization.txt:108 +#: ../../src/rdbms/normalization.txt:351 msgid "" "**Every attribute** in a table should depend on the key, the whole key, and " "nothing but the key." msgstr "" +"**Кожен атрибут** у таблиці повинен залежати від ключа, всього ключа і ні " +"від чого, крім ключа." -#: ../../src/rdbms/normalization.txt:112 +#: ../../src/rdbms/normalization.txt:355 msgid "Applying 3NF" -msgstr "" +msgstr "Застосування 3NF" + +#: ../../src/rdbms/normalization.txt:357 +msgid "Introducing the \"player_rating_levels\" will fix the problem." +msgstr "Використання таблиці \"player_rating_levels\" вирішить цю проблему." + +#: ../../src/rdbms/normalization.txt:371 +msgid "player_rating_levels" +msgstr "player_rating_levels" -#: ../../src/rdbms/normalization.txt:118 +#: ../../src/rdbms/normalization.txt:396 msgid "Conclusion" -msgstr "" +msgstr "Висновок" -#: ../../src/rdbms/normalization.txt:120 +#: ../../src/rdbms/normalization.txt:398 msgid "" "Each next normal form includes all the requirements for the previous one." -msgstr "" - -#~ msgid "" -#~ "There are several normal forms, each building on the previous one, which " -#~ "guide us in the normalization process. The most commonly used normal " -#~ "forms are:" -#~ msgstr "" -#~ "Існує кілька нормальних форм, кожна з яких будується на попередній, які " -#~ "скеровують нас у процесі нормалізації. Найпоширенішими звичайними формами " -#~ "є:" - -#~ msgid "" -#~ "**First Normal Form (1NF)**: Each column should hold atomic (indivisible) " -#~ "values. There should be no repeating groups or arrays of data in a table." -#~ msgstr "" -#~ "Перша нормальна форма (1NF): кожен стовпець має містити атомарні " -#~ "(неподільні) значення. У таблиці не повинно бути повторюваних груп або " -#~ "масивів даних." - -#~ msgid "" -#~ "**Second Normal Form (2NF)**: Each non-key column should be functionally " -#~ "dependent on the entire primary key. In other words, every column in a " -#~ "table should be related to the primary key and not dependent on any other " -#~ "non-key columns." -#~ msgstr "" -#~ "Друга нормальна форма (2NF): кожен неключовий стовпець має функціонально " -#~ "залежати від усього первинного ключа. Іншими словами, кожен стовпець у " -#~ "таблиці має бути пов'язаний із первинним ключем, а не залежати від будь-" -#~ "яких інших неключових стовпців." - -#~ msgid "" -#~ "**Third Normal Form (3NF)**: All non-key columns should be dependent only " -#~ "on the primary key and not on any other non-key columns. This eliminates " -#~ "transitive dependencies." -#~ msgstr "" -#~ "Третя нормальна форма (3NF): усі неключові стовпці мають залежати лише " -#~ "від первинного ключа, а не від будь-яких інших неключових стовпців. Це " -#~ "усуває транзитивні залежності." - -#~ msgid "" -#~ "It's easier to understand normalization via examples. Let's start with " -#~ "some dummy orders data." -#~ msgstr "" -#~ "Легше зрозуміти нормалізацію на прикладах. Почнемо з деяких фіктивних " -#~ "даних про замовлення." - -#~ msgid "Initial data" -#~ msgstr "Початкові дані" - -#~ msgid "order" -#~ msgstr "order" - -#~ msgid "customer" -#~ msgstr "customer" - -#~ msgid "product" -#~ msgstr "product" - -#~ msgid "quantity" -#~ msgstr "quantity" - -#~ msgid "price" -#~ msgstr "price" - -#~ msgid "total" -#~ msgstr "total" - -#~ msgid "1" -#~ msgstr "1" - -#~ msgid "John Doe" -#~ msgstr "John Doe" - -#~ msgid "(Apple, Orange)" -#~ msgstr "(Apple, Orange)" - -#~ msgid "(2, 3)" -#~ msgstr "(2, 3)" - -#~ msgid "(100, 50)" -#~ msgstr "(100, 50)" - -#~ msgid "(200, 150)" -#~ msgstr "(200, 150)" - -#~ msgid "2" -#~ msgstr "2" - -#~ msgid "Jane Smith" -#~ msgstr "Jane Smith" - -#~ msgid "Banana" -#~ msgstr "Banana" - -#~ msgid "4" -#~ msgstr "4" - -#~ msgid "25" -#~ msgstr "25" - -#~ msgid "100" -#~ msgstr "100" - -#~ msgid "" -#~ "This table violates 1NF, since its columns contain multiple values. To " -#~ "bring this to 1NF all data within the table are to be atomic." -#~ msgstr "" -#~ "Ця таблиця порушує 1NF, оскільки її стовпці містять кілька значень. Щоб " -#~ "привести це до 1NF, усі дані в таблиці мають бути атомарними." - -#~ msgid "1NF applied" -#~ msgstr "Застосовано 1NF" - -#~ msgid "Apple" -#~ msgstr "Apple" - -#~ msgid "200" -#~ msgstr "200" - -#~ msgid "Orange" -#~ msgstr "Orange" - -#~ msgid "3" -#~ msgstr "3" - -#~ msgid "50" -#~ msgstr "50" +msgstr "Кожна наступна нормальна форма включає всі вимоги до попередньої." -#~ msgid "150" -#~ msgstr "150" - -#~ msgid "From now each peace of data is represented as atomic value." -#~ msgstr "Відтепер кожна частина даних представлена як атомарне значення." - -#~ msgid "" -#~ "The table above is in 1NF, but ``item price`` is dependent on the *item* " -#~ "entity itself and have low cohesion to *orders*. To bring it into 2NF a " -#~ "dedicated table to store information about items themselves is to be " -#~ "created. After that ``order`` and ``product`` table are connected " -#~ "(related) to each other via a foreign key." -#~ msgstr "" -#~ "Таблиця вище міститься в 1NF, але ``item price`` залежить від самого " -#~ "*елемента* і має низьку зв'язність із замовленнями. Щоб перенести її в " -#~ "2NF, потрібно створити окрему таблицю для зберігання інформації про самі " -#~ "товари. Після цього таблиці ``order`` і ``product`` з'єднуються " -#~ "(пов'язані) одна з одною за допомогою зовнішнього ключа." - -#~ msgid "``order`` table" -#~ msgstr "таблиця ``order``" - -#~ msgid "id" -#~ msgstr "id" - -#~ msgid "product_id" -#~ msgstr "product_id" - -#~ msgid "``product`` table" -#~ msgstr "таблиця ``product``" - -#~ msgid "" -#~ "``total`` field is also removed, since now it can be calculated as " -#~ "product of ``product.price`` and ``order.quantity``." -#~ msgstr "" -#~ "Поле ``total`` також видалено, оскільки тепер його можна обчислити як " -#~ "добуток ``product.price`` і ``order.quantity``." - -#~ msgid "" -#~ "At last it's time to remove a transitive functional dependency. " -#~ "Customer's name is not actually dependent on a product, but on a person, " -#~ "who places an order." -#~ msgstr "" -#~ "Нарешті настав час видалити транзитивну функціональну залежність. Ім'я " -#~ "клієнта насправді залежить не від продукту, а від особи, яка робить " -#~ "замовлення." - -#~ msgid "customer_id" -#~ msgstr "customer_id" - -#~ msgid "``customer`` table" -#~ msgstr "таблиця ``customer``" +#: ../../src/rdbms/normalization.txt:400 +msgid "" +"Following the rules above will lead you to having a fully normalized tables " +"in 99% of time." +msgstr "" +"Дотримуючись наведених вище правил, ви отримаєте повністю нормалізовані " +"таблиці у 99% випадків." From db6ff279f5d7a6e60d3f10aecad353b4b0302793 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 18 Feb 2024 17:59:38 +0200 Subject: [PATCH 636/689] Fixes GH-146 --- src/_locales/uk/LC_MESSAGES/rdbms/ddl.po | 104 +------ src/_locales/uk/LC_MESSAGES/rdbms/dml.po | 56 +--- .../uk/LC_MESSAGES/rdbms/functions.po | 109 +------ .../uk/LC_MESSAGES/rdbms/normalization.po | 2 +- src/_locales/uk/LC_MESSAGES/rdbms/query.po | 284 +++++------------- 5 files changed, 99 insertions(+), 456 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po index 0cdd21c22..cc6529918 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/ddl.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-22 13:19+0000\n" -"PO-Revision-Date: 2023-12-22 15:20+0200\n" +"PO-Revision-Date: 2024-02-18 17:39+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -18,73 +18,61 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/ddl.txt:-1 -#, fuzzy msgid "Data definition language, DDL" msgstr "Мова визначення даних, DDL" #: ../../src/rdbms/ddl.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/rdbms/ddl.txt:-1 -#, fuzzy msgid "sql, db, database, ddl, create, alter, drop" -msgstr "sql, db, база даних, ddl, create, alter, drop" +msgstr "sql, db, database, ddl, create, alter, drop" #: ../../src/rdbms/ddl.txt:8 -#, fuzzy msgid "Data Definition Language" -msgstr "Мова опису даних" +msgstr "Мова Визначення Даних" #: ../../src/rdbms/ddl.txt:10 -#, fuzzy msgid "" ":abbr:`DDL (Data Definition Language)` is a subset of SQL used for defining " "and modifying the database structure. Understanding DDL is fundamental to " "working with RDBMS. It allows you to define the structure of your data and " "make necessary changes as your requirements evolve." msgstr "" -"abbr:`DDL (Data Definition Language) - це підмножина мови SQL, яка " +":abbr:`DDL (Data Definition Language)` - це підмножина мови SQL, яка " "використовується для визначення та модифікації структури бази даних. " "Розуміння DDL є фундаментальним для роботи з СКБД. Це дозволяє вам визначати " "структуру ваших даних і вносити необхідні зміни в міру розвитку ваших вимог." #: ../../src/rdbms/ddl.txt:15 -#, fuzzy msgid "``CREATE`` used to create new objects within a RDBMS" msgstr "``CREATE`` використовується для створення нових об'єктів у СКБД" #: ../../src/rdbms/ddl.txt:16 -#, fuzzy msgid "``ALTER`` used to modify existing objects" msgstr "``ALTER`` використовується для зміни існуючих об'єктів" #: ../../src/rdbms/ddl.txt:17 -#, fuzzy msgid "``DROP`` used to delete database objects" msgstr "``DROP`` використовується для видалення об'єктів бази даних" #: ../../src/rdbms/ddl.txt:18 -#, fuzzy msgid "``TRUNCATE`` used to remove all records from a table" msgstr "``TRUNCATE`` використовується для видалення всіх записів з таблиці" #: ../../src/rdbms/ddl.txt:25 -#, fuzzy msgid "Create objects" msgstr "Створення об'єктів" #: ../../src/rdbms/ddl.txt:28 -#, fuzzy msgid "Creating database roles" msgstr "Створення ролей бази даних" #: ../../src/rdbms/ddl.txt:32 -#, fuzzy msgid "" "SQLite is a small database in a single file and it doesn't implement role " "based access to data. Any user who have access to DB file will have access " @@ -95,7 +83,6 @@ msgstr "" "також має доступ до даних всередині бази даних." #: ../../src/rdbms/ddl.txt:36 -#, fuzzy msgid "" "In RDBMS, roles are used to manage database permissions. They are an " "essential part of database security and user management." @@ -104,7 +91,6 @@ msgstr "" "Вони є невід'ємною частиною безпеки бази даних та управління користувачами." #: ../../src/rdbms/ddl.txt:39 -#, fuzzy msgid "" "In PostgreSQL a **role** is an entity that can own database objects and have " "database privileges; a role can be considered a *user*, a *group*, or both " @@ -115,17 +101,14 @@ msgstr "" "*група* або і те, і інше, залежно від того, як вона використовується." #: ../../src/rdbms/ddl.txt:43 -#, fuzzy msgid "``CREATE ROLE`` statement defines a new database role." -msgstr "оператор ``CREATE ROLE`` визначає нову роль бази даних." +msgstr "Оператор ``CREATE ROLE`` визначає нову роль бази даних." #: ../../src/rdbms/ddl.txt:49 -#, fuzzy msgid "This statement also can have options:" msgstr "Це твердження також може мати варіанти:" #: ../../src/rdbms/ddl.txt:55 -#, fuzzy msgid "" "Options clarify if a role can login to the database server, connect to " "specific databases, create other roles etc. The full list of options is " @@ -136,22 +119,19 @@ msgstr "" "офіційній документації postgres." #: ../../src/rdbms/ddl.txt:60 -#, fuzzy msgid "Creating databases" msgstr "Створення баз даних" #: ../../src/rdbms/ddl.txt:62 -#, fuzzy msgid "" "``CREATE DATABASE`` statement creates a new PostgreSQL database. To create a " "database, you must be a superuser or have ``CREATEDB`` privilege." msgstr "" -"оператор ``CREATE DATABASE`` створює нову базу даних PostgreSQL. Для " -"створення бази даних ви повинні бути суперкористувачем або мати привілей " +"Оператор ``CREATE DATABASE`` створює нову базу даних PostgreSQL. Для " +"створення бази даних ви повинні бути супер-користувачем або мати привілей " "``CREATEDB``." #: ../../src/rdbms/ddl.txt:69 -#, fuzzy msgid "" "Databases within a PostgreSQL server have owners. By default a user who " "creates a database is assigned as its owner. To specify another user as a " @@ -162,7 +142,6 @@ msgstr "" "користувача як власника бази даних, можна скористатися опціями:" #: ../../src/rdbms/ddl.txt:77 -#, fuzzy msgid "" "There are lots of options for this statement available in the official " "postgres documentation." @@ -171,12 +150,10 @@ msgstr "" "доступних в офіційній документації postgres." #: ../../src/rdbms/ddl.txt:81 -#, fuzzy msgid "Creating tables" msgstr "Створення таблиць" #: ../../src/rdbms/ddl.txt:83 -#, fuzzy msgid "" "To create a table, you use the aptly names ``CREATE TABLE`` command. In this " "command you specify at least a name for the new table, the names of the " @@ -187,12 +164,10 @@ msgstr "" "стовпців і тип даних для кожного стовпця." #: ../../src/rdbms/ddl.txt:98 -#, fuzzy msgid "Default value" msgstr "Значення за замовчуванням" #: ../../src/rdbms/ddl.txt:99 -#, fuzzy msgid "" "Constraints also can be applied for columns while creating a table. In this " "section, only most notable constraints will be described." @@ -201,7 +176,6 @@ msgstr "" "таблиці. У цьому розділі буде описано лише найпоширеніші обмеження." #: ../../src/rdbms/ddl.txt:102 -#, fuzzy msgid "" "A column can be assigned a default value. When a new row is created and no " "values are specified for some of the columns, those columns will be filled " @@ -217,14 +191,12 @@ msgstr "" "таким, що представляє невідомі дані." #: ../../src/rdbms/ddl.txt:108 -#, fuzzy msgid "" "In a table definition the default values are listed after the data type." msgstr "" "У визначенні таблиці значення за замовчуванням перераховані після типу даних." #: ../../src/rdbms/ddl.txt:119 -#, fuzzy msgid "" "The default value can be an expression, which will be evaluated whenever the " "default value is inserted (**not when the table is created**). A common " @@ -237,17 +209,14 @@ msgstr "" "час створення запису, та генератор \"серійних номерів\"." #: ../../src/rdbms/ddl.txt:132 -#, fuzzy msgid "There is a shorthand to generate serial numbers:" msgstr "Існує скорочення для генерації серійних номерів:" #: ../../src/rdbms/ddl.txt:139 -#, fuzzy msgid "Generated Columns" msgstr "Згенеровані стовпці" #: ../../src/rdbms/ddl.txt:140 -#, fuzzy msgid "" "In case you need to calculate some column value based on other columns, you " "may use generated columns. A generated column is a special column that is " @@ -261,7 +230,6 @@ msgstr "" "Існує два типи згенерованих стовпців: збережені та віртуальні." #: ../../src/rdbms/ddl.txt:145 -#, fuzzy msgid "" "A stored generated column is computed when it is written (inserted or " "updated) and occupies storage as if it were a normal column. A virtual " @@ -273,7 +241,6 @@ msgstr "" "під час читання." #: ../../src/rdbms/ddl.txt:159 -#, fuzzy msgid "" "There are several restrictions applied to the definitions of generated " "columns and tables involving generated columns (not all listed):" @@ -282,7 +249,6 @@ msgstr "" "і таблиць, що містять згенеровані стовпці (не всі з них перераховані):" #: ../../src/rdbms/ddl.txt:162 -#, fuzzy msgid "" "The generation expression can only use immutable functions and cannot use " "sub-queries or reference anything other than the current row." @@ -291,22 +257,18 @@ msgstr "" "використовувати підзапити або посилатися на щось, крім поточного рядка." #: ../../src/rdbms/ddl.txt:164 -#, fuzzy msgid "The generation expression cannot reference another generated column." msgstr "Вираз генерації не може посилатися на інший згенерований стовпець." #: ../../src/rdbms/ddl.txt:165 -#, fuzzy msgid "A generated column cannot have column default." msgstr "Створений стовпець не може мати стовпець за замовчуванням." #: ../../src/rdbms/ddl.txt:168 -#, fuzzy msgid "Constraints" msgstr "Обмеження" #: ../../src/rdbms/ddl.txt:169 -#, fuzzy msgid "" "A check constraint is the most generic constraint type. It allows you to " "specify that the value in a certain column must satisfy a Boolean (truth-" @@ -317,7 +279,6 @@ msgstr "" "неістинному) виразу." #: ../../src/rdbms/ddl.txt:184 -#, fuzzy msgid "" "A not-null constraint simply specifies that a column must not assume the " "null value." @@ -326,7 +287,6 @@ msgstr "" "значення." #: ../../src/rdbms/ddl.txt:195 -#, fuzzy msgid "" "Unique constraints ensure that the data contained in a column, or a group of " "columns, is unique among all the rows in the table." @@ -335,12 +295,10 @@ msgstr "" "стовпчиків, є унікальними серед усіх рядків таблиці." #: ../../src/rdbms/ddl.txt:209 -#, fuzzy msgid "System columns" msgstr "Системні колонки" #: ../../src/rdbms/ddl.txt:210 -#, fuzzy msgid "" "Every table has several system columns that are implicitly defined by the " "system. Therefore, these names cannot be used as names of user-defined " @@ -377,12 +335,10 @@ msgid "``ctid``" msgstr "``ctid``" #: ../../src/rdbms/ddl.txt:223 -#, fuzzy msgid "Modify objects" msgstr "Модифікація об'єктів" #: ../../src/rdbms/ddl.txt:225 -#, fuzzy msgid "" "When you create a table and you realize that you made a mistake, or the " "requirements of the application change, you can drop the table and create it " @@ -395,7 +351,6 @@ msgstr "" "посилаються інші об'єкти бази даних." #: ../../src/rdbms/ddl.txt:230 -#, fuzzy msgid "" "PostgreSQL provides a family of commands to make modifications to existing " "tables. You can:" @@ -404,62 +359,50 @@ msgstr "" "можете це робити:" #: ../../src/rdbms/ddl.txt:233 -#, fuzzy msgid "add columns" msgstr "додати стовпці" #: ../../src/rdbms/ddl.txt:234 -#, fuzzy msgid "remove columns" msgstr "видалити стовпці" #: ../../src/rdbms/ddl.txt:235 -#, fuzzy msgid "add constraints" msgstr "додати обмеження" #: ../../src/rdbms/ddl.txt:236 -#, fuzzy msgid "remove constraints" msgstr "зняти обмеження" #: ../../src/rdbms/ddl.txt:237 -#, fuzzy msgid "change default values" msgstr "змінити значення за замовчуванням" #: ../../src/rdbms/ddl.txt:238 -#, fuzzy msgid "change column data types" msgstr "змінити типи даних стовпців" #: ../../src/rdbms/ddl.txt:239 -#, fuzzy msgid "rename columns" msgstr "перейменувати стовпці" #: ../../src/rdbms/ddl.txt:240 -#, fuzzy msgid "rename tables" msgstr "перейменовувати таблиці" #: ../../src/rdbms/ddl.txt:242 -#, fuzzy msgid "All these actions are performed using the ``ALTER TABLE`` command." msgstr "Всі ці дії виконуються за допомогою команди ``ALTER TABLE``." #: ../../src/rdbms/ddl.txt:245 -#, fuzzy msgid "Adding a column" msgstr "Додавання стовпця" #: ../../src/rdbms/ddl.txt:247 -#, fuzzy msgid "To add a column, use a command like:" -msgstr "Щоб додати стовпець, використовуйте команду like:" +msgstr "Щоб додати стовпець, використовуйте команду накшатл:" #: ../../src/rdbms/ddl.txt:259 -#, fuzzy msgid "" "Constraints can be also defined on the column at the same time, using " "general syntax." @@ -468,7 +411,6 @@ msgstr "" "загальний синтаксис." #: ../../src/rdbms/ddl.txt:262 -#, fuzzy msgid "" "In fact all the options that can be applied to a column description in " "``CREATE TABLE`` can be used here. Keep in mind however that the default " @@ -480,22 +422,18 @@ msgstr "" "спрацює." #: ../../src/rdbms/ddl.txt:267 -#, fuzzy msgid "Adding a constraint" msgstr "Додавання обмеження" #: ../../src/rdbms/ddl.txt:269 -#, fuzzy msgid "To add a constraint, the table constraint syntax is used." msgstr "Для додавання обмеження використовується синтаксис обмеження таблиці." #: ../../src/rdbms/ddl.txt:276 -#, fuzzy msgid "Other examples:" msgstr "Інші приклади:" #: ../../src/rdbms/ddl.txt:286 -#, fuzzy msgid "" "To add a non-null constraint, which cannot be written as a table constraint, " "use this syntax:" @@ -504,12 +442,10 @@ msgstr "" "використовуйте цей синтаксис:" #: ../../src/rdbms/ddl.txt:295 -#, fuzzy msgid "Changing a column's default value" msgstr "Зміна значення стовпця за замовчуванням" #: ../../src/rdbms/ddl.txt:297 -#, fuzzy msgid "To set a new default for a column, use command like this:" msgstr "" "Щоб встановити нове значення за замовчуванням для стовпця, скористайтеся " @@ -520,23 +456,19 @@ msgid "To remove any default value, use:" msgstr "Щоб видалити будь-яке значення за замовчуванням, використовуйте:" #: ../../src/rdbms/ddl.txt:311 -#, fuzzy msgid "This is effectively the same as settings the default to ``NULL``." msgstr "Це фактично те саме, що встановити значення за замовчуванням ``NULL``." #: ../../src/rdbms/ddl.txt:314 -#, fuzzy msgid "Changing a column's data type" msgstr "Зміна типу даних стовпця" #: ../../src/rdbms/ddl.txt:316 -#, fuzzy msgid "To convert a column to a different data type, use a command like this:" msgstr "" "Щоб перетворити стовпець в інший тип даних, скористайтеся такою командою:" #: ../../src/rdbms/ddl.txt:323 -#, fuzzy msgid "" "This will succeed only if each existing entry in the column can be converted " "to the new type by an implicit cast. If a more complex conversion is needed, " @@ -549,7 +481,6 @@ msgstr "" "як обчислювати нові значення зі старих." #: ../../src/rdbms/ddl.txt:328 -#, fuzzy msgid "" "PostgreSQL will attempt to convert the column's default value (if any) to " "the new type, as well as any constraint that involve the column. But these " @@ -564,39 +495,32 @@ msgstr "" "його типу, а потім додати назад відповідним чином змінені обмеження." #: ../../src/rdbms/ddl.txt:335 -#, fuzzy msgid "Renaming objects" msgstr "Перейменування об'єктів" #: ../../src/rdbms/ddl.txt:337 -#, fuzzy msgid "To rename objects use ``RENAME`` command, like this:" msgstr "" "Для перейменування об'єктів використовуйте команду ``RENAME``, наприклад, " "так:" #: ../../src/rdbms/ddl.txt:346 -#, fuzzy msgid "To rename a table:" msgstr "Перейменувати таблицю:" #: ../../src/rdbms/ddl.txt:354 -#, fuzzy msgid "Remove objects" msgstr "Видалення об'єктів" #: ../../src/rdbms/ddl.txt:357 -#, fuzzy msgid "Removing tables" msgstr "Видалення столів" #: ../../src/rdbms/ddl.txt:359 -#, fuzzy msgid "``DROP`` command is used to remove objects." -msgstr "команда ``DROP`` використовується для видалення об'єктів." +msgstr "Команда ``DROP`` використовується для видалення об'єктів." #: ../../src/rdbms/ddl.txt:365 -#, fuzzy msgid "" "Remember, attempting to remove a table that does not exist is an error. " "Nevertheless, it is common in SQL script files to unconditionally try to " @@ -612,7 +536,6 @@ msgstr "" "але це не є стандартним для SQL." #: ../../src/rdbms/ddl.txt:375 -#, fuzzy msgid "" "In case there are other objects referencing the object to drop ``CASCADE`` " "may be used to also remove any referencing objects." @@ -622,17 +545,14 @@ msgstr "" "посилаються на об'єкт, який потрібно вилучити." #: ../../src/rdbms/ddl.txt:379 -#, fuzzy msgid "Removing a column" msgstr "Видалення стовпця" #: ../../src/rdbms/ddl.txt:381 -#, fuzzy msgid "To remove a column, use ``DROP`` command like this:" msgstr "Щоб видалити стовпець, використовуйте команду ``DROP`` ось так:" #: ../../src/rdbms/ddl.txt:388 -#, fuzzy msgid "" "Whatever data was in the column disappears. Table constraints involving the " "column are dropped, too. However, if the column is referenced by a foreign " @@ -647,17 +567,15 @@ msgstr "" "додавши ``CASCADE``:" #: ../../src/rdbms/ddl.txt:400 -#, fuzzy msgid "Removing a constraint" msgstr "Зняття обмеження" #: ../../src/rdbms/ddl.txt:402 -#, fuzzy msgid "" "To remove a constraint you need to know its name. The **psql** command ``\\d " "table_name`` can be helpful to get the detailed information on a specific " "table, including all constraints' names assigned to it." msgstr "" "Щоб видалити обмеження, вам потрібно знати його ім'я. Команда **psql** ``\\d " -"ім'я_таблиці`` може бути корисною для отримання детальної інформації про " +"table_name`` може бути корисною для отримання детальної інформації про " "конкретну таблицю, включно з іменами всіх обмежень, призначених для неї." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/dml.po b/src/_locales/uk/LC_MESSAGES/rdbms/dml.po index 4c1242214..5f67e064d 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/dml.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/dml.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 03:53+0200\n" +"PO-Revision-Date: 2024-02-18 17:33+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -18,65 +18,54 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.13.1\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/dml.txt:-1 -#, fuzzy msgid "Data manipulation language, DML" msgstr "Мова маніпулювання даними, DML" #: ../../src/rdbms/dml.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/rdbms/dml.txt:-1 -#, fuzzy msgid "sql, db, database, dml, insert, update, delete" -msgstr "sql, db, база даних, dml, вставка, оновлення, видалення" +msgstr "sql, db, database, dml, insert, update, delete" #: ../../src/rdbms/dml.txt:8 -#, fuzzy msgid "Data Manipulation Language" -msgstr "Мова маніпулювання даними" +msgstr "Мова Маніпулювання Даними" #: ../../src/rdbms/dml.txt:10 -#, fuzzy msgid "" ":abbr:`DML (Data Manipulation Language)` is a subset of SQL used for adding, " "updating, and deleting data within database tables." msgstr "" -"abbr:`DML (Data Manipulation Language) - це підмножина мови SQL, яка " +":abbr:`DML (Data Manipulation Language)` - це підмножина мови SQL, яка " "використовується для додавання, оновлення та видалення даних у таблицях бази " "даних." #: ../../src/rdbms/dml.txt:13 -#, fuzzy msgid "``SELECT`` used to query data from the database" msgstr "``SELECT`` використовується для запиту даних з бази даних" #: ../../src/rdbms/dml.txt:14 -#, fuzzy msgid "``INSERT`` used to insert new data into a table" msgstr "``INSERT`` використовується для вставки нових даних у таблицю" #: ../../src/rdbms/dml.txt:15 -#, fuzzy msgid "``UPDATE`` used to modify existing data" msgstr "''UPDATE'' використовується для зміни існуючих даних" #: ../../src/rdbms/dml.txt:16 -#, fuzzy msgid "``DELETE`` used to remove data from a table" msgstr "``DELETE`` використовується для видалення даних з таблиці" #: ../../src/rdbms/dml.txt:23 -#, fuzzy msgid "Creating new records" msgstr "Створення нових записів" #: ../../src/rdbms/dml.txt:25 -#, fuzzy msgid "" "When a table is created, it contains no data. Inserting data will populate a " "table with values. Data is inserted one row at a time. You can also insert " @@ -89,12 +78,10 @@ msgstr "" "вставити щось, що не є повним рядком." #: ../../src/rdbms/dml.txt:30 -#, fuzzy msgid "To create a new row use ``INSERT`` command." msgstr "Для створення нового рядка використовується команда ``INSERT``." #: ../../src/rdbms/dml.txt:32 -#, fuzzy msgid "" "The data values are listed in the order in which the columns appear in the " "table, separated by commas. This syntax has the drawback that you need to " @@ -111,32 +98,26 @@ msgstr "" "значеннями за замовчуванням." #: ../../src/rdbms/dml.txt:39 -#, fuzzy msgid "Create publisher table" msgstr "Створення таблиці видавців" #: ../../src/rdbms/dml.txt:45 -#, fuzzy msgid "Insert data to publisher table" msgstr "Вставка даних до таблиці видавця" #: ../../src/rdbms/dml.txt:51 -#, fuzzy msgid "You can insert multiple rows in a single command." msgstr "Ви можете вставити кілька рядків однією командою." #: ../../src/rdbms/dml.txt:53 -#, fuzzy msgid "Create author table" msgstr "Створення таблиці авторів" #: ../../src/rdbms/dml.txt:59 -#, fuzzy msgid "Inserting multiple values at a time" -msgstr "Вставлення декількох значень одночасно" +msgstr "Додавання декількох значень одночасно" #: ../../src/rdbms/dml.txt:66 -#, fuzzy msgid "" "There is a reference to the \"publisher\" table present below. Think of it " "like placing the publisher information directly into \"book\" table for now." @@ -145,22 +126,18 @@ msgstr "" "розміщення інформації про видавця безпосередньо в таблиці \"книга\"." #: ../../src/rdbms/dml.txt:69 -#, fuzzy msgid "Create book table" msgstr "Створити таблицю книг" #: ../../src/rdbms/dml.txt:75 -#, fuzzy msgid "Inserting records from file" msgstr "Вставка записів з файлу" #: ../../src/rdbms/dml.txt:82 -#, fuzzy msgid "Modifying records" msgstr "Змінення записів" #: ../../src/rdbms/dml.txt:84 -#, fuzzy msgid "" "The modification of data that is already in the database is referred as " "updating. To update the existing rows, use the ``UPDATE`` command. This " @@ -171,22 +148,18 @@ msgstr "" "частини інформації:" #: ../../src/rdbms/dml.txt:88 -#, fuzzy msgid "The name of the table and column(s) to update" msgstr "Назва таблиці та стовпця(ів) для оновлення" #: ../../src/rdbms/dml.txt:89 -#, fuzzy msgid "The new value of the column(s)" msgstr "Нове значення стовпця(ів)" #: ../../src/rdbms/dml.txt:90 -#, fuzzy msgid "Which row(s) to update" msgstr "Який(і) рядок(и) оновити" #: ../../src/rdbms/dml.txt:96 -#, fuzzy msgid "" "This might cause zero, one, or many rows to be updated. The update syntax is " "pretty straightforward. First the key word ``UPDATE`` followed by the table " @@ -204,23 +177,20 @@ msgstr "" "реченні ``SET``." #: ../../src/rdbms/dml.txt:105 -#, fuzzy msgid "" "``WHERE`` clause is optional, but it limits the rows affected by ``UPDATE`` " "command. If there is no limitations all the records within a table will be " "updated with new values." msgstr "" -"речення ``WHERE`` є необов'язковим, але воно обмежує рядки, на які впливає " -"команда ``UPDATE``. Якщо обмежень не вказано, то всі записи в таблиці буде " -"оновлено новими значеннями." +"``WHERE`` є необов'язковим, але воно обмежує рядки, на які впливає команда " +"``UPDATE``. Якщо обмежень не вказано, то всі записи в таблиці буде оновлено " +"новими значеннями." #: ../../src/rdbms/dml.txt:114 -#, fuzzy msgid "Removing data" msgstr "Видалення даних" #: ../../src/rdbms/dml.txt:116 -#, fuzzy msgid "" "So far we have explained how to add data to tables and how to change data. " "What remains to discuss how to remove data that is no longer needed. Just as " @@ -233,7 +203,6 @@ msgstr "" "таблиці лише цілими рядками." #: ../../src/rdbms/dml.txt:121 -#, fuzzy msgid "" "You use ``DELETE`` command to remove rows; the syntax is very similar to the " "``UPDATE`` command." @@ -242,22 +211,18 @@ msgstr "" "дуже схожий на команду ``UPDATE``." #: ../../src/rdbms/dml.txt:128 -#, fuzzy msgid "If you simply write:" msgstr "Якщо просто писати:" #: ../../src/rdbms/dml.txt:134 -#, fuzzy msgid "then all rows in the table will be deleted!" msgstr "то всі рядки в таблиці будуть видалені!" #: ../../src/rdbms/dml.txt:137 -#, fuzzy msgid "Returning data from modified rows" msgstr "Повернення даних зі змінених рядків" #: ../../src/rdbms/dml.txt:139 -#, fuzzy msgid "" "Sometimes it is useful to obtain data from modified rows while they are " "being manipulated. The ``INSERT``, ``UPDATE`` and ``DELETE`` commands all " @@ -269,11 +234,10 @@ msgstr "" "Іноді буває корисно отримати дані зі змінених рядків під час маніпуляцій з " "ними. Команди ``INSERT``, ``UPDATE`` і ``DELETE`` мають необов'язковий " "параметр ``RETURNING``, який підтримує цю можливість. Використання " -"``ПОВЕРНЕННЯ`` дозволяє уникнути виконання додаткового запиту до бази даних " +"``RETURNING`` дозволяє уникнути виконання додаткового запиту до бази даних " "для збору даних і є особливо цінним, коли інакше було б важко достовірно " "ідентифікувати змінені рядки." #: ../../src/rdbms/dml.txt:155 -#, fuzzy msgid "For example the query above provides the identifiers to new rows." msgstr "Наприклад, наведений вище запит надає ідентифікатори для нових рядків." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po index a71f47f24..406f86cbd 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 03:58+0200\n" +"PO-Revision-Date: 2024-02-18 17:44+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -18,25 +18,21 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.13.1\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/functions.txt:3 -#, fuzzy msgid "Functions and operators" msgstr "Функції та оператори" #: ../../src/rdbms/functions.txt:6 -#, fuzzy msgid "Logical and comparison operators" msgstr "Логічні оператори та оператори порівняння" #: ../../src/rdbms/functions.txt:8 -#, fuzzy msgid "The usual logical operators are still available:" msgstr "Звичні логічні оператори все ще доступні:" #: ../../src/rdbms/functions.txt:16 -#, fuzzy msgid "" "SQL uses a three-valued logic system with ``true``, ``false``, and ``null``, " "which represents *unknown*." @@ -45,7 +41,6 @@ msgstr "" "``нулем``, який представляє собою *невідоме*." #: ../../src/rdbms/functions.txt:19 -#, fuzzy msgid "Truth table" msgstr "Таблиця істини" @@ -87,7 +82,6 @@ msgid "``NULL``" msgstr "``NULL``" #: ../../src/rdbms/functions.txt:37 -#, fuzzy msgid "" "The operators ``AND`` and ``OR`` are commutative, that is, you can switch " "the left and right operands without affecting the result. However, it is not " @@ -98,22 +92,18 @@ msgstr "" "лівий операнд буде обчислено раніше правого." #: ../../src/rdbms/functions.txt:42 -#, fuzzy msgid "Comparison operators" msgstr "Оператори порівняння" #: ../../src/rdbms/functions.txt:44 -#, fuzzy msgid "The usual comparison operators are available." msgstr "Доступні звичайні оператори порівняння." #: ../../src/rdbms/functions.txt:47 -#, fuzzy msgid "Operator" msgstr "Оператор" #: ../../src/rdbms/functions.txt:47 ../../src/rdbms/functions.txt:70 -#, fuzzy msgid "Description" msgstr "Опис" @@ -122,7 +112,6 @@ msgid "``datatype < datatype -> boolean``" msgstr "``datatype < datatype -> boolean``" #: ../../src/rdbms/functions.txt:49 -#, fuzzy msgid "Less than" msgstr "Менше ніж" @@ -131,7 +120,6 @@ msgid "``datatype > datatype -> boolean``" msgstr "``datatype > datatype -> boolean``" #: ../../src/rdbms/functions.txt:51 -#, fuzzy msgid "Greater than" msgstr "Більше ніж" @@ -140,7 +128,6 @@ msgid "``datatype <= datatype -> boolean``" msgstr "``datatype <= datatype -> boolean``" #: ../../src/rdbms/functions.txt:53 -#, fuzzy msgid "Less than or equal to" msgstr "Менше ніж або дорівнює" @@ -149,7 +136,6 @@ msgid "``datatype >= datatype -> boolean``" msgstr "``datatype >= datatype -> boolean``" #: ../../src/rdbms/functions.txt:55 -#, fuzzy msgid "Greater than or equal to" msgstr "Більше або дорівнює" @@ -158,16 +144,14 @@ msgid "``datatype = datatype -> boolean``" msgstr "``datatype = datatype -> boolean``" #: ../../src/rdbms/functions.txt:57 -#, fuzzy msgid "Equal" -msgstr "Однаковий" +msgstr "Дорівнює" #: ../../src/rdbms/functions.txt:59 msgid "``datatype <> datatype -> boolean``" msgstr "``datatype <> datatype -> boolean``" #: ../../src/rdbms/functions.txt:59 ../../src/rdbms/functions.txt:61 -#, fuzzy msgid "Not equal" msgstr "Не дорівнює" @@ -176,17 +160,14 @@ msgid "``datatype != datatype -> boolean``" msgstr "``datatype != datatype -> boolean``" #: ../../src/rdbms/functions.txt:65 -#, fuzzy msgid "Mathematical functions and operators" msgstr "Математичні функції та оператори" #: ../../src/rdbms/functions.txt:67 -#, fuzzy msgid "Mathematical operators and provided for many PostgreSQL types." msgstr "Математичні оператори і передбачені для багатьох типів PostgreSQL." #: ../../src/rdbms/functions.txt:70 -#, fuzzy msgid "Operation" msgstr "Операція" @@ -244,7 +225,6 @@ msgid "``numeric_type % numeric_type``" msgstr "``numeric_type % numeric_type``" #: ../../src/rdbms/functions.txt:86 -#, fuzzy msgid "" "Modulo (remainder); available for ``smallint``, ``integer``, ``bigint``, and " "``numeric``" @@ -333,12 +313,10 @@ msgid "Bitwise shift right" msgstr "Порозрядний зсув вправо" #: ../../src/rdbms/functions.txt:113 -#, fuzzy msgid "String functions" msgstr "Рядкові функції" #: ../../src/rdbms/functions.txt:115 -#, fuzzy msgid "" "*Strings* in this context include values of the types ``character``, " "``text`` and ``character varying``." @@ -347,7 +325,6 @@ msgstr "" "``символьна змінна``." #: ../../src/rdbms/functions.txt:120 -#, fuzzy msgid "Concatenates the two strings." msgstr "З'єднує два рядки." @@ -356,7 +333,6 @@ msgid "``'Post' || 'greSQL' -> PostgreSQL``" msgstr "``'Post' || 'greSQL' -> PostgreSQL``" #: ../../src/rdbms/functions.txt:127 -#, fuzzy msgid "" "Converts the non-string input to text, then concatenates the two strings. " "(The non-string input cannot be of an array type, because that would create " @@ -373,7 +349,6 @@ msgid "``'Value: ' || 42 -> Value: 42``" msgstr "``'Value: ' || 42 -> Value: 42``" #: ../../src/rdbms/functions.txt:137 -#, fuzzy msgid "Returns number of characters in the string." msgstr "Повертає кількість символів у рядку." @@ -382,7 +357,6 @@ msgid "``char_length('josé') -> 4``" msgstr "``char_length('josé') -> 4``" #: ../../src/rdbms/functions.txt:143 -#, fuzzy msgid "" "Converts the string to all lower case, according to the rules of the " "database's locale." @@ -395,7 +369,6 @@ msgid "``lower('TOM') -> tom``" msgstr "``lower('TOM') -> tom``" #: ../../src/rdbms/functions.txt:150 -#, fuzzy msgid "" "Removes the longest string containing only characters in characters (a space " "by default) from the start of string." @@ -408,7 +381,6 @@ msgid "``ltrim('zzzytest', 'xyz') -> test``" msgstr "``ltrim('zzzytest', 'xyz') -> test``" #: ../../src/rdbms/functions.txt:157 -#, fuzzy msgid "" "Removes the longest string containing only characters in characters (a space " "by default) from the end of string." @@ -421,7 +393,6 @@ msgid "``rtrim('testxxzx', 'xyz') -> test``" msgstr "``rtrim('testxxzx', 'xyz') -> test``" #: ../../src/rdbms/functions.txt:164 -#, fuzzy msgid "" "Removes the longest string containing only characters in characters (a space " "by default) from the start, end, or both ends (BOTH is the default) of " @@ -435,12 +406,10 @@ msgid "``trim(both 'xyz' from 'yxTomxx') -> Tom``" msgstr "``trim(both 'xyz' from 'yxTomxx') -> Tom``" #: ../../src/rdbms/functions.txt:171 -#, fuzzy msgid "Pattern matching" msgstr "Зіставлення шаблонів" #: ../../src/rdbms/functions.txt:173 -#, fuzzy msgid "" "There are three separate approaches to pattern matching provided by " "PostgreSQL: the traditional ``LIKE`` operator, the most recent ``SIMILAR " @@ -451,12 +420,10 @@ msgstr "" "стилі POSIX." #: ../../src/rdbms/functions.txt:177 -#, fuzzy msgid "This section will focus on ``LIKE`` operator only." msgstr "У цьому розділі буде розглянуто лише оператор ``LIKE``." #: ../../src/rdbms/functions.txt:184 -#, fuzzy msgid "" "The ``LIKE`` expression returns ``true`` if the ``string`` matches the " "supplied ``pattern`` (as expected, the ``NOT LIKE`` expression returns " @@ -467,7 +434,6 @@ msgstr "" "``false``, якщо ``LIKE`` повертає значення ``true``, і навпаки)." #: ../../src/rdbms/functions.txt:188 -#, fuzzy msgid "" "If ``pattern`` does not contain percent signs or underscores, then the " "pattern only represents the string itself; in than case ``LIKE`` acts like " @@ -482,12 +448,10 @@ msgstr "" "нуля або більше символів." #: ../../src/rdbms/functions.txt:194 -#, fuzzy msgid "Some examples:" -msgstr "Деякі приклади" +msgstr "Деякі приклади:" #: ../../src/rdbms/functions.txt:203 -#, fuzzy msgid "" "``LIKE`` patterns matching always covers the entire string. Therefore, if " "it's desired to match a sequence anywhere within a string, the pattern must " @@ -498,7 +462,6 @@ msgstr "" "закінчуватися знаком відсотка." #: ../../src/rdbms/functions.txt:207 -#, fuzzy msgid "" "To match a literal underscore or percent sing without matching other " "characters the respective character in ``pattern`` must be preceded by the " @@ -513,7 +476,6 @@ msgstr "" "Щоб відповідати самому символу екранування, напишіть два символи екранування." #: ../../src/rdbms/functions.txt:213 -#, fuzzy msgid "" "The key word ``ILIKE`` can be used instead of ``LIKE`` to make the match " "case-insensitive according to the active locale. This is not in the SQL " @@ -524,17 +486,14 @@ msgstr "" "стандартом SQL, але є розширенням PostgreSQL." #: ../../src/rdbms/functions.txt:218 -#, fuzzy msgid "Date/Time functions and operators" msgstr "Функції та оператори дати/часу" #: ../../src/rdbms/functions.txt:221 -#, fuzzy msgid "Extract" -msgstr "Витяг" +msgstr "Вилучення" #: ../../src/rdbms/functions.txt:225 -#, fuzzy msgid "" "The ``extract`` function retrieves subfields such as year or hour from date/" "time value. The ``source`` must be a value expression of type ``timestamp``, " @@ -545,11 +504,11 @@ msgid "" "field names:" msgstr "" "Функція ``extract`` витягує підполя, такі як рік або година, зі значення " -"дати/часу. Джерело має бути виразом типу ``мітка часу``, ``час`` або " -"``інтервал``. Вирази типу ``date`` приводяться до ``timestamp``, тому їх " -"також можна використовувати. ``поле`` - це ідентифікатор або рядок, який " +"дати/часу. Джерело має бути виразом типу ``timestamp``, ``time`` або " +"``interval``. Вирази типу ``date`` приводяться до ``timestamp``, тому їх " +"також можна використовувати. ``field`` - це ідентифікатор або рядок, який " "вказує, яке саме поле потрібно витягти з вихідного значення. Функція extract " -"повертає значення типу ``число``. Нижче наведено припустимі імена полів:" +"повертає значення типу ``numeric``. Нижче наведено припустимі імена полів:" #: ../../src/rdbms/functions.txt:233 msgid "``centurty``" @@ -640,7 +599,6 @@ msgid "``year``" msgstr "``year``" #: ../../src/rdbms/functions.txt:256 -#, fuzzy msgid "" "The ``date_part`` function is modeled on the traditional Ingres equivalent " "to the SQL-standard function ``extract``:" @@ -649,12 +607,10 @@ msgstr "" "еквівалента стандартної функції SQL ``extract``:" #: ../../src/rdbms/functions.txt:262 -#, fuzzy msgid "Current date/time" msgstr "Поточна дата/час" #: ../../src/rdbms/functions.txt:264 -#, fuzzy msgid "" "PostgreSQL provides a number of functions that return values related to the " "current date and time. These SQL-standard functions all return values based " @@ -665,18 +621,15 @@ msgstr "" "часу початку поточної транзакції:" #: ../../src/rdbms/functions.txt:272 -#, fuzzy msgid "Deliver current time value with time zone." msgstr "Надавати поточне значення часу з часовим поясом." #: ../../src/rdbms/functions.txt -#, fuzzy msgid "precision" msgstr "точність" #: ../../src/rdbms/functions.txt:275 ../../src/rdbms/functions.txt:285 #: ../../src/rdbms/functions.txt:295 ../../src/rdbms/functions.txt:305 -#, fuzzy msgid "" "An optional parameter, which causes the result to be rounded to that many " "fractional digits in the second field. Without a precision, the result is " @@ -687,22 +640,18 @@ msgstr "" "буде надано з повною доступною точністю." #: ../../src/rdbms/functions.txt:282 -#, fuzzy msgid "Deliver current timestamp value with time zone." msgstr "Видавати поточне значення мітки часу з часовим поясом." #: ../../src/rdbms/functions.txt:292 ../../src/rdbms/functions.txt:302 -#, fuzzy msgid "Deliver current time value without time zone." msgstr "Надавати поточне значення часу без часового поясу." #: ../../src/rdbms/functions.txt:310 -#, fuzzy msgid "Formatting functions" msgstr "Функції форматування" #: ../../src/rdbms/functions.txt:314 -#, fuzzy msgid "" "The PostgreSQL formatting functions provide a powerful set of tools for " "converting various data types (date/time, integer, floatting point, " @@ -715,7 +664,6 @@ msgstr "" "рядків у певні типи даних." #: ../../src/rdbms/functions.txt:319 -#, fuzzy msgid "" "These functions all follow a common calling convention: the first argument " "is the value to be formatted and the second argument is a template that " @@ -726,7 +674,6 @@ msgstr "" "формат виводу або вводу." #: ../../src/rdbms/functions.txt:326 -#, fuzzy msgid "Converts time stamp to string according to the given format." msgstr "Конвертує мітку часу в рядок відповідно до заданого формату." @@ -737,7 +684,6 @@ msgstr "" "``to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') → 05:31:12``" #: ../../src/rdbms/functions.txt:332 -#, fuzzy msgid "Converts interval to string according to the given format." msgstr "Перетворює інтервал у рядок відповідно до заданого формату." @@ -746,7 +692,6 @@ msgid "``to_char(interval '15h 2m 12s', 'HH24:MI:SS') → 15:02:12``" msgstr "``to_char(interval '15h 2m 12s', 'HH24:MI:SS') → 15:02:12``" #: ../../src/rdbms/functions.txt:338 -#, fuzzy msgid "" "Converts number to string according to the given format; available for " "integer, bigint, numeric, real, double precision." @@ -767,7 +712,6 @@ msgid "``to_char(-125.8, '999D99S') → 125.80-``" msgstr "``to_char(-125.8, '999D99S') → 125.80-``" #: ../../src/rdbms/functions.txt:347 -#, fuzzy msgid "Converts string to date according to the given format." msgstr "Конвертує рядок у дату відповідно до заданого формату." @@ -776,7 +720,6 @@ msgid "``to_date('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05``" msgstr "``to_date('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05``" #: ../../src/rdbms/functions.txt:353 -#, fuzzy msgid "Converts string to numeric according to the given format." msgstr "Перетворює рядок у число відповідно до заданого формату." @@ -785,7 +728,6 @@ msgid "``to_number('12,454.8-', '99G999D9S') → -12454.8``" msgstr "``to_number('12,454.8-', '99G999D9S') → -12454.8``" #: ../../src/rdbms/functions.txt:359 -#, fuzzy msgid "Converts string to time stamp according to the given format." msgstr "Перетворює рядок у мітку часу відповідно до заданого формату." @@ -795,7 +737,6 @@ msgstr "" "``to_timestamp('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05 00:00:00-05``" #: ../../src/rdbms/functions.txt:366 -#, fuzzy msgid "Conditional expressions" msgstr "Умовні вирази" @@ -804,7 +745,6 @@ msgid "CASE" msgstr "" #: ../../src/rdbms/functions.txt:371 -#, fuzzy msgid "" "The SQL ``CASE`` expression is a generic conditional expression, similar to " "if/else statements in other programming languages." @@ -813,12 +753,10 @@ msgstr "" "else в інших мовах програмування." #: ../../src/rdbms/functions.txt:377 -#, fuzzy msgid "COALESCE" msgstr "НАГЛЕЮЄТЬСЯ" #: ../../src/rdbms/functions.txt:379 -#, fuzzy msgid "" "The ``COALESCE`` function returns the first of its arguments that is not " "null. Null is returned only if all arguments are null. It is often used to " @@ -831,7 +769,6 @@ msgstr "" "коли дані отримуються для відображення:" #: ../../src/rdbms/functions.txt:387 -#, fuzzy msgid "" "This returns ``description`` if it is not null, otherwise " "``short_description`` if it is not null, otherwise ``(none)``." @@ -840,7 +777,6 @@ msgstr "" "``short_description``, якщо він не є нульовим, інакше ``(none)``." #: ../../src/rdbms/functions.txt:390 -#, fuzzy msgid "" "Like the ``CASE`` expression, ``COALESCE`` only evaluates the arguments that " "are needed to determine the result; that is, arguments to the right of the " @@ -851,12 +787,10 @@ msgstr "" "аргументу не обчислюються." #: ../../src/rdbms/functions.txt:395 -#, fuzzy msgid "NULLIF" msgstr "NULLIF" #: ../../src/rdbms/functions.txt:401 -#, fuzzy msgid "" "The ``NULLIF`` function returns a null ``value_1`` equals ``value_2``; " "otherwise it returns ``value_1``. This can be used to perform the inverse " @@ -867,7 +801,6 @@ msgstr "" "виконання оберненої операції до ``COALESCE``." #: ../../src/rdbms/functions.txt:409 -#, fuzzy msgid "" "In the example above, if ``value`` is ``(none)``, null is returned, " "otherwise the value of ``value`` is returned." @@ -876,7 +809,6 @@ msgstr "" "нуль, інакше повертається значення ``value``." #: ../../src/rdbms/functions.txt:412 -#, fuzzy msgid "" "The two arguments must be of comparable types. To be specific, they are " "compared exactly as if you had written ``value_1 = value_2``, so there must " @@ -887,7 +819,6 @@ msgstr "" "бути відповідний оператор ``=``." #: ../../src/rdbms/functions.txt:416 -#, fuzzy msgid "" "The result has the same type as the first argument -- but there is a " "subtlety. What is actual returned is the first argument of the implied ``=`` " @@ -899,12 +830,10 @@ msgstr "" "випадках він буде приведений до типу другого аргументу." #: ../../src/rdbms/functions.txt:422 -#, fuzzy msgid "Aggregate functions" msgstr "Агрегатні функції" #: ../../src/rdbms/functions.txt:424 -#, fuzzy msgid "" "*Aggregate functions* compute a single result from a set of input values. " "There are lots of these, and different RDBMS implement different aggregation " @@ -917,17 +846,14 @@ msgstr "" "агрегатних функціях." #: ../../src/rdbms/functions.txt:429 -#, fuzzy msgid "The general schema of using is presented below:" msgstr "Загальна схема використання представлена нижче:" #: ../../src/rdbms/functions.txt:434 -#, fuzzy msgid "Average value" msgstr "Середнє значення" #: ../../src/rdbms/functions.txt:444 -#, fuzzy msgid "" "Computes the average (arithmetic mean) of all the non-null input values " "within a group" @@ -936,7 +862,6 @@ msgstr "" "значень у групі" #: ../../src/rdbms/functions.txt:449 -#, fuzzy msgid "" "SQLite implements ``avg`` function in a manner to return ``NULL`` if and " "only if all the inputs are nulls. On the other hand PostgreSQL will raise an " @@ -949,19 +874,16 @@ msgstr "" #: ../../src/rdbms/functions.txt:464 ../../src/rdbms/functions.txt:500 #: ../../src/rdbms/functions.txt:532 ../../src/rdbms/functions.txt:564 #: ../../src/rdbms/functions.txt:602 -#, fuzzy msgid "year" msgstr "рік" #: ../../src/rdbms/functions.txt:464 ../../src/rdbms/functions.txt:500 #: ../../src/rdbms/functions.txt:532 ../../src/rdbms/functions.txt:564 #: ../../src/rdbms/functions.txt:602 -#, fuzzy msgid "month" msgstr "місяць" #: ../../src/rdbms/functions.txt:464 -#, fuzzy msgid "avg" msgstr "в середньому" @@ -1035,23 +957,19 @@ msgid "10218" msgstr "10218" #: ../../src/rdbms/functions.txt:478 -#, fuzzy msgid "Count" msgstr "Кількість" #: ../../src/rdbms/functions.txt:482 -#, fuzzy msgid "Computes the number of input rows" msgstr "Обчислює кількість вхідних рядків" #: ../../src/rdbms/functions.txt:487 -#, fuzzy msgid "Computes the number of input rows in which the input value is not null" msgstr "" "Обчислює кількість вхідних рядків, в яких вхідне значення не дорівнює нулю" #: ../../src/rdbms/functions.txt:500 -#, fuzzy msgid "count" msgstr "рахувати" @@ -1069,12 +987,10 @@ msgid "8" msgstr "8" #: ../../src/rdbms/functions.txt:514 -#, fuzzy msgid "Maximum value" msgstr "Максимальне значення" #: ../../src/rdbms/functions.txt:518 -#, fuzzy msgid "" "Computes the maximum of the non-null input values. Available for any " "numeric, string, date/time or enum type." @@ -1083,7 +999,6 @@ msgstr "" "чисел, рядків, дати/часу або перелічуваних типів." #: ../../src/rdbms/functions.txt:532 -#, fuzzy msgid "max" msgstr "макс" @@ -1108,12 +1023,10 @@ msgid "14661" msgstr "14661" #: ../../src/rdbms/functions.txt:546 -#, fuzzy msgid "Minimum value" msgstr "Мінімальне значення" #: ../../src/rdbms/functions.txt:550 -#, fuzzy msgid "" "Computes the minimum of the non-null inpout values. Available for any " "numeric, string, date/time or enum type." @@ -1122,7 +1035,6 @@ msgstr "" "числового, рядкового, дати/часу або перелічуваного типу." #: ../../src/rdbms/functions.txt:564 -#, fuzzy msgid "min" msgstr "мін" @@ -1147,17 +1059,14 @@ msgid "2654" msgstr "2654" #: ../../src/rdbms/functions.txt:578 -#, fuzzy msgid "Sum of values" msgstr "Сума значень" #: ../../src/rdbms/functions.txt:589 -#, fuzzy msgid "Computes the sum of the non-null values" msgstr "Обчислює суму ненульових значень" #: ../../src/rdbms/functions.txt:602 -#, fuzzy msgid "sum" msgstr "сума" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po index 46abce8e9..5bc6b1167 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/normalization.po @@ -747,7 +747,7 @@ msgid "" ":abbr:`BCNF (Boyce-Codd Normal Form)` is the stronger version of 3NF. It " "also is called as 3.5NF (three-and-a-half normal form)." msgstr "" -"abbr:`BCNF (нормальна форма Бойса-Кодда)` - це сильніша версія 3NF. Її також " +":abbr:`BCNF (нормальна форма Бойса-Кодда)` - це сильніша версія 3NF. Її також " "називають 3.5NF (третя з половиною нормальна форма)." #: ../../src/rdbms/normalization.txt:351 diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/query.po b/src/_locales/uk/LC_MESSAGES/rdbms/query.po index 9f7794efc..0e8d726a8 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/query.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/query.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2023.11.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 04:00+0200\n" +"PO-Revision-Date: 2024-02-18 17:54+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -18,30 +18,25 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.13.1\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/query.txt:-1 -#, fuzzy msgid "Query data from database" msgstr "Запит даних з бази даних" #: ../../src/rdbms/query.txt:-1 -#, fuzzy msgid "Serhii Horodilov" msgstr "Serhii Horodilov" #: ../../src/rdbms/query.txt:-1 -#, fuzzy msgid "sql, db, database, query, select, fetch" -msgstr "sql, db, база даних, запит, вибірка, вибірка" +msgstr "sql, db, database, query, select, fetch" #: ../../src/rdbms/query.txt:8 -#, fuzzy msgid "Querying data" msgstr "Запит даних" #: ../../src/rdbms/query.txt:10 -#, fuzzy msgid "" "The process of retrieving or the command to retrieve data from a database is " "called a *query*. In SQL the ``SELECT`` command is used to specify queries." @@ -51,7 +46,6 @@ msgstr "" "``SELECT``." #: ../../src/rdbms/query.txt:13 -#, fuzzy msgid "" "``SELECT`` retrieves rows from zero or more tables. The general processing " "of ``SELECT`` is as follows:" @@ -60,7 +54,6 @@ msgstr "" "``SELECT`` відбувається наступним чином:" #: ../../src/rdbms/query.txt:16 -#, fuzzy msgid "" "All queries in the ``WITH`` list are computed. This effectively serve as " "temporary tables that can be referenced in the ``FROM`` list." @@ -69,25 +62,22 @@ msgstr "" "таблицями, на які можна посилатися у списку ``FROM``." #: ../../src/rdbms/query.txt:19 -#, fuzzy msgid "" "All elements in the ``FROM`` list are computed. If more than one element is " "specified in the ``FROM`` list, they are cross-joined together." msgstr "" -"Обчислюються всі елементи списку ``З''. Якщо у списку ``FROM`` вказано " +"Обчислюються всі елементи списку ``FROM``. Якщо у списку ``FROM`` вказано " "більше одного елемента, вони об'єднуються разом." #: ../../src/rdbms/query.txt:21 -#, fuzzy msgid "" "If ``WHERE`` clause is specified, all rows that do not satisfy the condition " "are eliminated from the output." msgstr "" -"Якщо вказано оператор `WHERE`, то всі рядки, які не задовольняють умові, " +"Якщо вказано оператор ``WHERE``, то всі рядки, які не задовольняють умові, " "вилучаються з виводу." #: ../../src/rdbms/query.txt:23 -#, fuzzy msgid "" "If the ``GROUP BY`` clause is specified, or if there are aggregate function " "calls, the output is combined into groups of rows that match on one or more " @@ -102,7 +92,6 @@ msgstr "" "заданій умові." #: ../../src/rdbms/query.txt:28 -#, fuzzy msgid "" "The actual output rows are computed using the ``SELECT`` output expressions " "for each row or row of group." @@ -111,7 +100,6 @@ msgstr "" "кожного рядка або рядка групи." #: ../../src/rdbms/query.txt:30 -#, fuzzy msgid "" "``SELECT DISTINCT`` eliminates duplicate rows from the result. ``SELECT " "DISTINCT ON`` eliminates rows that match on all the specified expressions." @@ -120,7 +108,6 @@ msgstr "" "DISTINCT ON`` вилучає рядки, які збігаються за всіма вказаними виразами." #: ../../src/rdbms/query.txt:33 -#, fuzzy msgid "" "Using the operators ``UNION``, ``INTERSECT``, and ``EXCEPT``, the output of " "more than one ``SELECT`` statement can be combined to form a single result " @@ -131,7 +118,6 @@ msgstr "" "єдиний набір результатів." #: ../../src/rdbms/query.txt:37 -#, fuzzy msgid "" "The ``UNION`` operator returns **all** rows that are in one or both result " "sets." @@ -140,7 +126,6 @@ msgstr "" "результатів." #: ../../src/rdbms/query.txt:39 -#, fuzzy msgid "" "The ``INTERSECT`` operator returns all rows that are strictly in both result " "sets." @@ -149,7 +134,6 @@ msgstr "" "наборах результатів." #: ../../src/rdbms/query.txt:41 -#, fuzzy msgid "" "The ``EXCEPT`` operator returns the rows that are in the first result set, " "but not in the second." @@ -158,16 +142,14 @@ msgstr "" "відсутні в другому." #: ../../src/rdbms/query.txt:44 -#, fuzzy msgid "" "If the ``ORDER BY`` clause is specified, the returned rows are sorted in the " "specific order." msgstr "" -"Якщо вказано параметр ``Впорядкувати за'', повернуті рядки буде відсортовано " -"у певному порядку." +"Якщо вказано параметр ``ORDER BY``, повернуті рядки буде відсортовано у " +"певному порядку." #: ../../src/rdbms/query.txt:46 -#, fuzzy msgid "" "if the ``LIMIT`` or ``OFFSET`` clause is specified, the ``SELECT`` statement " "only returns a subset of the result rows." @@ -176,7 +158,6 @@ msgstr "" "повертає лише підмножину рядків результату." #: ../../src/rdbms/query.txt:48 -#, fuzzy msgid "" "If ``FOR UPDATE``, ``FOR NO KEY UPDATE``, ``FOR SHARE`` or ``FOR KEY SHARE`` " "is specified, the ``SELECT`` statement locks the selected rows against " @@ -187,17 +168,14 @@ msgstr "" "оновлення." #: ../../src/rdbms/query.txt:57 -#, fuzzy msgid "Select rows from a table" msgstr "Виберіть рядки з таблиці" #: ../../src/rdbms/query.txt:59 -#, fuzzy msgid "A simple kind of query has the form:" msgstr "Простий вид запиту має вигляд:" #: ../../src/rdbms/query.txt:65 -#, fuzzy msgid "" "This command would retrieve all rows and all user-defined columns from " "``publisher`` table. A select list can also select a subset of the available " @@ -208,7 +186,6 @@ msgstr "" "стовпців або виконувати обчислення за цими стовпцями." #: ../../src/rdbms/query.txt:74 -#, fuzzy msgid "" "``FROM`` clause is a simple kind of table expression: it reads just one " "table. In general, table expression can be complex constructs of base " @@ -223,7 +200,6 @@ msgstr "" "інший спосіб):" #: ../../src/rdbms/query.txt:83 -#, fuzzy msgid "" "The ``FROM`` clause derives a table from one or more other tables given in a " "comma-separated table reference list. A table reference can a table name, or " @@ -238,19 +214,17 @@ msgstr "" "наведених у списку посилань на таблиці, розділених комами. Посилання на " "таблицю може бути ім'ям таблиці або похідною таблицею, наприклад, " "підзапитом, конструкцією ``JOIN`` або їх складними комбінаціями. Якщо в " -"реченні ``З'' вказано більше одного посилання на таблицю, то таблиці " +"реченні ``FROM`` вказано більше одного посилання на таблицю, то таблиці " "з'єднуються перехресним зв'язком. Результатом списку ``FROM`` є проміжна " "віртуальна таблиця, яка потім може бути піддана перетворенням за допомогою " "речень ``WHERE``, ``GROUP BY`` і ``HAVING`` і, нарешті, є результатом " "загального табличного виразу." #: ../../src/rdbms/query.txt:93 -#, fuzzy msgid "Search conditions" msgstr "Умови пошуку" #: ../../src/rdbms/query.txt:95 -#, fuzzy msgid "" "After the processing of the ``FROM`` clause is done, each row of the derived " "virtual table can be checked against the search condition. If the result of " @@ -259,26 +233,22 @@ msgid "" msgstr "" "Після обробки оператора ``FROM`` кожен рядок отриманої віртуальної таблиці " "може бути перевірений на відповідність умові пошуку. Якщо результат умови " -"рівний ``істина``, то рядок зберігається у вихідній таблиці, інакше він " +"рівний ``true``, то рядок зберігається у вихідній таблиці, інакше він " "відкидається. Для перевірки умови пошуку використовується оператор `WHERE`." #: ../../src/rdbms/query.txt:100 -#, fuzzy msgid "Here are some examples of ``WHERE`` clause:" -msgstr "Ось кілька прикладів речення \"ДЕ\":" +msgstr "Ось кілька прикладів речення ``WHERE``:" #: ../../src/rdbms/query.txt:102 -#, fuzzy msgid "WHERE clause usage examples" msgstr "Приклади використання речення WHERE" #: ../../src/rdbms/query.txt:124 -#, fuzzy msgid "Grouping data" msgstr "Дані для групування" #: ../../src/rdbms/query.txt:126 -#, fuzzy msgid "" "After passing the ``WHERE`` filter, the derived input table might be subject " "to grouping, using ``GROUP BY`` clause, and elimination of group rows using " @@ -291,21 +261,19 @@ msgid "" msgstr "" "Після проходження фільтра ``WHERE`` отримана таблиця може бути згрупована за " "допомогою речення ``GROUP BY`` і видалена з групи рядків за допомогою " -"речення ``HAVING``. Речення ``ГРУПУВАТИ ЗА`` використовується для групування " -"тих рядків таблиці, які мають однакові значення у всіх перелічених " -"стовпчиках. Порядок перерахування стовпчиків не має значення. Ефект полягає " -"в об'єднанні кожного набору рядків зі спільними значеннями в один груповий " -"рядок, який представляє всі рядки в групі. Це робиться для того, щоб усунути " -"надмірність у вихідних даних та/або обчислювальних агрегатах, які " -"застосовуються до цих груп." +"речення ``HAVING``. Речення ``GROUP BY`` використовується для групування тих " +"рядків таблиці, які мають однакові значення у всіх перелічених стовпчиках. " +"Порядок перерахування стовпчиків не має значення. Ефект полягає в об'єднанні " +"кожного набору рядків зі спільними значеннями в один груповий рядок, який " +"представляє всі рядки в групі. Це робиться для того, щоб усунути надмірність " +"у вихідних даних та/або обчислювальних агрегатах, які застосовуються до цих " +"груп." #: ../../src/rdbms/query.txt:136 -#, fuzzy msgid "Select lists" msgstr "Виберіть списки" #: ../../src/rdbms/query.txt:138 -#, fuzzy msgid "" "As shown is the previous section, the table expression in the ``SELECT`` " "command constructs an intermediate virtual table by possibly combining " @@ -320,12 +288,10 @@ msgstr "" "визначає, які саме *стовпці* проміжної таблиці буде виведено на екран." #: ../../src/rdbms/query.txt:145 -#, fuzzy msgid "Select list items" msgstr "Вибір елементів списку" #: ../../src/rdbms/query.txt:147 -#, fuzzy msgid "" "The simplest kind of select is ``*`` which emits that the table expression " "produces. Otherwise, a select list is a comma-separated list of value " @@ -336,12 +302,10 @@ msgstr "" "Наприклад:" #: ../../src/rdbms/query.txt:157 -#, fuzzy msgid "Columns labels" msgstr "Мітки стовпців" #: ../../src/rdbms/query.txt:159 -#, fuzzy msgid "" "The entries listed in the select list can be assigned names for subsequent " "processing." @@ -350,7 +314,6 @@ msgstr "" "обробки." #: ../../src/rdbms/query.txt:166 -#, fuzzy msgid "" "If no output column name is specified using ``AS``, the system will assign " "a default column name. For simple column references, this is the name of the " @@ -363,17 +326,14 @@ msgstr "" "функції. Для складних виразів система згенерує загальну назву." #: ../../src/rdbms/query.txt:173 -#, fuzzy msgid "Labels are often referenced as \"aliases\"." msgstr "Етикетки часто називають \"псевдонімами\"." #: ../../src/rdbms/query.txt:176 -#, fuzzy msgid "DISTINCT" -msgstr "РОЗРІЗНИТИ" +msgstr "DISTINCT" #: ../../src/rdbms/query.txt:178 -#, fuzzy msgid "" "After the select list has been processed, the result table can optionally be " "subject to the elimination of duplicate rows. The ``DISTINCT`` key word is " @@ -384,7 +344,6 @@ msgstr "" "записується ключове слово ``DISTINCT``:" #: ../../src/rdbms/query.txt:186 -#, fuzzy msgid "" "Obviously, two rows are considered distinct if they differ in at least one " "column value. Null values are considered equal in comparison. Alternatively, " @@ -396,12 +355,10 @@ msgstr "" "того, довільний вираз може визначати, які рядки вважати різними." #: ../../src/rdbms/query.txt:195 -#, fuzzy msgid "Sorting rows" msgstr "Сортування рядків" #: ../../src/rdbms/query.txt:197 -#, fuzzy msgid "" "After a query has produced an output table it can optionally be sorted. If " "sorting is not chosen, the rows will be returned in an unspecified order. " @@ -415,12 +372,10 @@ msgstr "" "покладатися." #: ../../src/rdbms/query.txt:202 -#, fuzzy msgid "The ``ORDER BY`` clause specifies the sort order:" msgstr "Речення ``ORDER BY`` задає порядок сортування:" #: ../../src/rdbms/query.txt:208 -#, fuzzy msgid "" "The sort expression(s) can be any expression that would be valid in the " "query's select list." @@ -429,7 +384,6 @@ msgstr "" "списку вибору запиту." #: ../../src/rdbms/query.txt:211 -#, fuzzy msgid "" "When more than one expression is specified, the later values are used to " "sort rows that are equal according to the earlier values. Each expression " @@ -443,7 +397,6 @@ msgstr "" "використовується порядок ``ASC``." #: ../../src/rdbms/query.txt:216 -#, fuzzy msgid "" "The ``NULL FIRST`` and ``NULL LAST`` options can be used to determine " "whether null appear before or after non-null values in the sort ordering. By " @@ -458,19 +411,16 @@ msgstr "" "для порядку ``DESC``, а ``NULL LAST`` в іншому випадку." #: ../../src/rdbms/query.txt:221 -#, fuzzy msgid "" "Note that the ordering options are considered independently for each sort " "column. For example ``ORDER BY x, y DESC`` means ``ORDER BY x ASC, y DESC``, " "which is not the same as ``ORDER BY x DESC, y DESC``." msgstr "" "Зверніть увагу, що варіанти впорядкування розглядаються незалежно для " -"кожного стовпця сортування. Наприклад, ``Впорядкувати за x, y DESC`` означає " -"``Впорядкувати за x ASC, y DESC``, що не те саме, що ``Впорядкувати за x " -"DESC, y DESC``." +"кожного стовпця сортування. Наприклад, ``ORDER BY x, y DESC`` означає " +"``ORDER BY x ASC, y DESC``, що не те саме, що ``ORDER BY x DESC, y DESC``." #: ../../src/rdbms/query.txt:225 -#, fuzzy msgid "" "A sort expression can also be the column label or number of an output column." msgstr "" @@ -478,7 +428,6 @@ msgstr "" "стовпця." #: ../../src/rdbms/query.txt:227 -#, fuzzy msgid "" "``ORDER BY`` can be applied to the result of a ``UNION``, ``INTERSECT``, or " "``EXCEPT`` combination, but in this case it is only permitted to sort by " @@ -489,28 +438,24 @@ msgstr "" "лише за іменами або номерами вихідних стовпців, а не за виразами." #: ../../src/rdbms/query.txt:232 -#, fuzzy msgid "Limit and Offset" msgstr "Ліміт і зміщення" #: ../../src/rdbms/query.txt:234 -#, fuzzy msgid "" "``LIMIT`` and ``OFFSET`` allow you to retrieve just a portion of the rows " "that are generated by the rest of the query." msgstr "" -"lIMIT і OFFSET дозволяють вам отримати лише частину рядків, згенерованих " -"рештою запиту." +"``LIMIT`` і ``OFFSET`` дозволяють вам отримати лише частину рядків, " +"згенерованих рештою запиту." #: ../../src/rdbms/query.txt:241 -#, fuzzy msgid "" "The query above fetches only first 10 rows from the \"publisher\" table." msgstr "" "Наведений вище запит витягує лише перші 10 рядків з таблиці \"publisher\"." #: ../../src/rdbms/query.txt:243 -#, fuzzy msgid "" "If a limit count is given, no more than that many rows will be returned. But " "possibly fewer, if the query itself yields fewer rows. ``LIMIT ALL`` is the " @@ -523,7 +468,6 @@ msgstr "" "``LIMIT`` з аргументом ``NULL``." #: ../../src/rdbms/query.txt:248 -#, fuzzy msgid "" "``OFFSET`` says to skip that many rows before beginning to return rows. " "``OFFSET 0`` is the same as omitting the ``OFFSET`` clause, as is ``OFFSET`` " @@ -534,12 +478,10 @@ msgstr "" "і ``OFFSET`` з аргументом ``NULL``." #: ../../src/rdbms/query.txt:256 -#, fuzzy msgid "The query above fetches 10 publishers starting from the 11-th one." msgstr "Наведений вище запит показує 10 видавництв, починаючи з 11-го." #: ../../src/rdbms/query.txt:258 -#, fuzzy msgid "" "When using ``LIMIT`` and/or ``OFFSET``, it's important to use ``ORDER BY`` " "clause that constraints the result rows into a unique order. Otherwise you " @@ -550,12 +492,10 @@ msgstr "" "отримаєте непередбачувану підмножину рядків запиту." #: ../../src/rdbms/query.txt:263 -#, fuzzy msgid "WITH queries" -msgstr "З запитами" +msgstr "WITH" #: ../../src/rdbms/query.txt:265 -#, fuzzy msgid "" "``WITH`` provides a way to write auxiliary statements for use in a larger " "query. These statements, which are often referred to as :abbr:`CTE (Common " @@ -565,9 +505,9 @@ msgid "" "clause itself is attached to a primary statement that can be a ``SELECT``, " "``INSERT``, ``UPDATE``, ``DELETE`` or ``MERGE``." msgstr "" -"команда ``WITH`` надає можливість писати допоміжні оператори для " +"Команда ``WITH`` надає можливість писати допоміжні оператори для " "використання у великих запитах. Ці оператори, які часто називають :abbr:`CTE " -"(Common Table Expression), можна розглядати як визначення тимчасових " +"(Common Table Expression)`, можна розглядати як визначення тимчасових " "таблиць, які існують лише для одного запиту. Кожен допоміжний оператор у " "реченні ``WITH`` може бути оператором ``SELECT``, ``INSERT``, ``UPDATE`` або " "``DELETE``; а саме речення ``WITH`` приєднується до основного оператора, " @@ -575,12 +515,10 @@ msgstr "" "``MERGE``." #: ../../src/rdbms/query.txt:274 -#, fuzzy msgid "Select in WITH" -msgstr "``select_attack``" +msgstr "Вибірка у WITH" #: ../../src/rdbms/query.txt:276 -#, fuzzy msgid "" "The basic value of ``SELECT`` in ``WITH`` is to break down complicated " "queries into simpler parts." @@ -589,17 +527,14 @@ msgstr "" "запити на простіші частини." #: ../../src/rdbms/query.txt:279 -#, fuzzy msgid "Get most profitable months" msgstr "Отримайте найприбутковіші місяці" #: ../../src/rdbms/query.txt:295 -#, fuzzy msgid "Recursive queries" msgstr "Рекурсивні запити" #: ../../src/rdbms/query.txt:297 -#, fuzzy msgid "" "The optional ``RECURSIVE`` modifier changes WITH from a mere syntactic " "convenience into a feature that accomplishes things not otherwise possible " @@ -612,12 +547,10 @@ msgstr "" "вивід." #: ../../src/rdbms/query.txt:302 -#, fuzzy msgid "Sum of first 10 numbers starting from 1" msgstr "Сума перших 10 чисел, починаючи з 1" #: ../../src/rdbms/query.txt:311 -#, fuzzy msgid "" "When working with recursive queries it is important to be sure that the " "recursive part of the query will eventually return no tuple, or else the " @@ -628,12 +561,10 @@ msgstr "" "зациклиться на невизначений час." #: ../../src/rdbms/query.txt:316 -#, fuzzy msgid "Data modifying statements in WITH" msgstr "Оператори, що модифікують дані в операторі WITH" #: ../../src/rdbms/query.txt:318 -#, fuzzy msgid "" "You can use most data-modifying statements (``INSERT``, ``UPDATE``, " "``DELETE``) in ``WITH``. This allows you to perform several different " @@ -644,17 +575,14 @@ msgstr "" "кілька різних операцій одночасно в одному запиті." #: ../../src/rdbms/query.txt:322 -#, fuzzy msgid "Remove old revenue records and store them into history table" msgstr "Видаліть старі записи про доходи та збережіть їх у таблиці історії" #: ../../src/rdbms/query.txt:335 -#, fuzzy msgid "Combining queries" msgstr "Об'єднання запитів" #: ../../src/rdbms/query.txt:337 -#, fuzzy msgid "" "The results of two queries can be combined using the set operations union, " "intersection, and difference." @@ -663,7 +591,6 @@ msgstr "" "перетину та різниці." #: ../../src/rdbms/query.txt:346 -#, fuzzy msgid "" "``UNION`` effectively appends the result of ``query2`` to the result of " "``query1`` (although there is no guarantee that this is the order in which " @@ -671,7 +598,7 @@ msgid "" "from its result, in the same way as ``DISTINCT``, unless ``UNION ALL`` is " "used." msgstr "" -"``UNION`` ефективно додає результат ``запиту2`` до результату ``запиту1`` " +"``UNION`` ефективно додає результат ``query2`` до результату ``query1`` " "(хоча немає жодних гарантій, що це саме той порядок, в якому повертаються " "рядки). Крім того, вона вилучає з результату повторювані рядки так само, як " "і ``DISTINCT``, якщо не використовується ``UNION ALL``." @@ -681,40 +608,34 @@ msgstr "" #: ../../src/rdbms/query.txt:545 ../../src/rdbms/query.txt:587 #: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 #: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 -#, fuzzy msgid "id" msgstr "id" #: ../../src/rdbms/query.txt:378 ../../src/rdbms/query.txt:432 #: ../../src/rdbms/query.txt:470 -#, fuzzy msgid "first_name" -msgstr "Ім'я" +msgstr "first_name" #: ../../src/rdbms/query.txt:378 ../../src/rdbms/query.txt:432 #: ../../src/rdbms/query.txt:470 -#, fuzzy msgid "last_name" -msgstr "Прізвище" +msgstr "last_name" #: ../../src/rdbms/query.txt:380 ../../src/rdbms/query.txt:472 #: ../../src/rdbms/query.txt:529 ../../src/rdbms/query.txt:589 #: ../../src/rdbms/query.txt:595 ../../src/rdbms/query.txt:601 #: ../../src/rdbms/query.txt:607 ../../src/rdbms/query.txt:613 #: ../../src/rdbms/query.txt:701 ../../src/rdbms/query.txt:728 -#, fuzzy msgid "1" msgstr "1" #: ../../src/rdbms/query.txt:380 ../../src/rdbms/query.txt:472 -#, fuzzy msgid "Mariska" -msgstr "Марисько" +msgstr "Mariska" #: ../../src/rdbms/query.txt:380 ../../src/rdbms/query.txt:472 -#, fuzzy msgid "Syson" -msgstr "Сайсоне" +msgstr "Syson" #: ../../src/rdbms/query.txt:382 ../../src/rdbms/query.txt:474 #: ../../src/rdbms/query.txt:547 ../../src/rdbms/query.txt:553 @@ -726,19 +647,16 @@ msgstr "Сайсоне" #: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:676 #: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:716 #: ../../src/rdbms/query.txt:722 ../../src/rdbms/query.txt:724 -#, fuzzy msgid "2" msgstr "2" #: ../../src/rdbms/query.txt:382 ../../src/rdbms/query.txt:474 -#, fuzzy msgid "Robenia" -msgstr "Робена" +msgstr "Robenia" #: ../../src/rdbms/query.txt:382 ../../src/rdbms/query.txt:474 -#, fuzzy msgid "Dimitriades" -msgstr "Дімітріадіс" +msgstr "Dimitriades" #: ../../src/rdbms/query.txt:384 ../../src/rdbms/query.txt:476 #: ../../src/rdbms/query.txt:531 ../../src/rdbms/query.txt:549 @@ -751,158 +669,130 @@ msgstr "Дімітріадіс" #: ../../src/rdbms/query.txt:672 ../../src/rdbms/query.txt:674 #: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:697 #: ../../src/rdbms/query.txt:718 ../../src/rdbms/query.txt:720 -#, fuzzy msgid "3" msgstr "3" #: ../../src/rdbms/query.txt:384 ../../src/rdbms/query.txt:476 -#, fuzzy msgid "Loren" -msgstr "Лорен" +msgstr "Loren" #: ../../src/rdbms/query.txt:384 ../../src/rdbms/query.txt:476 -#, fuzzy msgid "Goretti" -msgstr "Ґоретті" +msgstr "Goretti" #: ../../src/rdbms/query.txt:386 ../../src/rdbms/query.txt:478 #: ../../src/rdbms/query.txt:593 ../../src/rdbms/query.txt:599 #: ../../src/rdbms/query.txt:605 ../../src/rdbms/query.txt:611 #: ../../src/rdbms/query.txt:617 ../../src/rdbms/query.txt:699 #: ../../src/rdbms/query.txt:726 -#, fuzzy msgid "4" msgstr "4" #: ../../src/rdbms/query.txt:386 ../../src/rdbms/query.txt:478 -#, fuzzy msgid "Dianna" -msgstr "Діана" +msgstr "Dianna" #: ../../src/rdbms/query.txt:386 ../../src/rdbms/query.txt:478 -#, fuzzy msgid "Giacomuzzo" -msgstr "Джакомуццо" +msgstr "Giacomuzzo" #: ../../src/rdbms/query.txt:388 ../../src/rdbms/query.txt:434 -#, fuzzy msgid "5" msgstr "5" #: ../../src/rdbms/query.txt:388 ../../src/rdbms/query.txt:434 -#, fuzzy msgid "Anett" -msgstr "Анетт" +msgstr "Anett" #: ../../src/rdbms/query.txt:388 ../../src/rdbms/query.txt:434 -#, fuzzy msgid "Hayland" -msgstr "Хейленд" +msgstr "Hayland" #: ../../src/rdbms/query.txt:390 ../../src/rdbms/query.txt:436 -#, fuzzy msgid "6" msgstr "6" #: ../../src/rdbms/query.txt:390 ../../src/rdbms/query.txt:436 -#, fuzzy msgid "Keeley" -msgstr "Кілі" +msgstr "Keeley" #: ../../src/rdbms/query.txt:390 ../../src/rdbms/query.txt:436 -#, fuzzy msgid "Grishelyov" -msgstr "Гришелов" +msgstr "Grishelyov" #: ../../src/rdbms/query.txt:392 -#, fuzzy msgid "7" msgstr "7" #: ../../src/rdbms/query.txt:392 -#, fuzzy msgid "Say" -msgstr "Сказати" +msgstr "Say" #: ../../src/rdbms/query.txt:392 -#, fuzzy msgid "Kliner" -msgstr "Клайнер" +msgstr "Kliner" #: ../../src/rdbms/query.txt:394 -#, fuzzy msgid "8" msgstr "8" #: ../../src/rdbms/query.txt:394 -#, fuzzy msgid "Charles" -msgstr "Чарльзе" +msgstr "Charles" #: ../../src/rdbms/query.txt:394 -#, fuzzy msgid "Ede" -msgstr "Еде" +msgstr "Ede" #: ../../src/rdbms/query.txt:396 -#, fuzzy msgid "9" msgstr "9" #: ../../src/rdbms/query.txt:396 -#, fuzzy msgid "Florentia" -msgstr "Флоренція" +msgstr "Florentia" #: ../../src/rdbms/query.txt:396 -#, fuzzy msgid "Core" -msgstr "Ядро" +msgstr "Core" #: ../../src/rdbms/query.txt:398 -#, fuzzy msgid "10" msgstr "10" #: ../../src/rdbms/query.txt:398 -#, fuzzy msgid "Tiffany" -msgstr "Тіффані" +msgstr "Tiffany" #: ../../src/rdbms/query.txt:398 -#, fuzzy msgid "Tingly" -msgstr "Пощипування" +msgstr "Tingly" #: ../../src/rdbms/query.txt:401 -#, fuzzy msgid "" "``INTERSECT`` returns all rows that are both in the result of ``query1`` and " "in the result of ``query2``. Duplicate rows are eliminated unless " "``INTERSECT ALL`` is used." msgstr "" -"``INTERSECT`` повертає всі рядки, які є і в результаті ``запиту1``, і в " -"результаті ``запиту2``. Повторювані рядки вилучаються, якщо не " +"``INTERSECT`` повертає всі рядки, які є і в результаті ``query1``, і в " +"результаті ``query2``. Повторювані рядки вилучаються, якщо не " "використовується ``INTERSECT ALL``." #: ../../src/rdbms/query.txt:439 -#, fuzzy msgid "" "``EXCEPT`` returns all rows that are in the result of ``query1`` but not in " "the result of ``query2``. (This is sometimes called the difference between " "two queries.) Again, duplicates are eliminated unless ``EXCEPT ALL`` is used." msgstr "" -"``EXCEPT`` повертає всі рядки, які є в результаті ``запиту1``, але не є в " -"результаті ``запиту2``. (Це іноді називають різницею між двома запитами.) " +"``EXCEPT`` повертає всі рядки, які є в результаті ``query1``, але не є в " +"результаті ``query2``. (Це іноді називають різницею між двома запитами.) " "Знову ж таки, дублікати вилучаються, якщо не використовується ``EXCEPT ALL``." #: ../../src/rdbms/query.txt:482 -#, fuzzy msgid "Join data from different tables" msgstr "Об'єднання даних з різних таблиць" #: ../../src/rdbms/query.txt:484 -#, fuzzy msgid "" "A ``JOIN`` clause combines two ``FROM`` items, which for convenience we will " "refer as \"tables\", though in reality they can be any type of ``FROM`` " @@ -910,55 +800,46 @@ msgid "" msgstr "" "Речення ``JOIN`` об'єднує два елементи ``FROM``, які для зручності будемо " "називати \"таблицями\", хоча насправді це може бути будь-який тип елементів " -"``FROM``. Доступні типи з'єднання" +"``FROM``. Доступні типи з'єднання:" #: ../../src/rdbms/query.txt:488 -#, fuzzy msgid "``[INNER] JOIN``" -msgstr "``[ВНУТРІШНЄ] ПРИЄДНАННЯ``" +msgstr "``[INNER] JOIN``" #: ../../src/rdbms/query.txt:489 -#, fuzzy msgid "``LEFT [OUTER] JOIN``" -msgstr "\"ЛІВИЙ [ЗОВНІШНІЙ] СТИК" +msgstr "``LEFT [OUTER] JOIN``" #: ../../src/rdbms/query.txt:490 -#, fuzzy msgid "``RIGHT [OUTER] JOIN``" -msgstr "\"ПРАВЕ [ЗОВНІШНЄ] З'ЄДНАННЯ" +msgstr "``RIGHT [OUTER] JOIN``" #: ../../src/rdbms/query.txt:491 -#, fuzzy msgid "``FULL [OUTER] JOIN``" -msgstr "``ПОВНЕ [ЗОВНІШНЄ] З'ЄДНАННЯ``" +msgstr "``FULL [OUTER] JOIN``" #: ../../src/rdbms/query.txt:495 -#, fuzzy msgid "Key words in bracket parentheses above are optional." msgstr "Ключові слова в дужках вище є необов'язковими." #: ../../src/rdbms/query.txt:498 -#, fuzzy msgid "Joins between tables" msgstr "З'єднання між столами" #: ../../src/rdbms/query.txt:500 -#, fuzzy msgid "Publishers and books tables definitions" msgstr "Визначення таблиць видавництв та книг" #: ../../src/rdbms/query.txt:505 -#, fuzzy msgid "" "Following tables are related via ``FOREIGN KEY`` constraint. Each record in " "the ``book`` table references some record in the ``publisher`` table." msgstr "" -"Наступні таблиці пов'язані між собою за допомогою обмеження ``зовнішній " -"ключ``. Кожен запис у таблиці ``book`` посилається на деякий запис у таблиці " +"Наступні таблиці пов'язані між собою за допомогою обмеження ``FOREIGN KEY``. " +"Кожен запис у таблиці ``book`` посилається на деякий запис у таблиці " "``publisher``." #: ../../src/rdbms/query.txt:510 -#, fuzzy msgid "" "Since original tables contain lots of data, temporary tables will be created " "instead before join query. Full tables content may be downloaded via links: :" @@ -971,22 +852,19 @@ msgstr "" "download:`book `." #: ../../src/rdbms/query.txt:516 -#, fuzzy msgid "The subsets from original queries defined as:" msgstr "Підмножини з вихідних запитів визначаються як:" #: ../../src/rdbms/query.txt:527 ../../src/rdbms/query.txt:587 #: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 #: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 -#, fuzzy msgid "name" -msgstr "ім’ я" +msgstr "name" #: ../../src/rdbms/query.txt:529 ../../src/rdbms/query.txt:589 #: ../../src/rdbms/query.txt:595 ../../src/rdbms/query.txt:601 #: ../../src/rdbms/query.txt:607 ../../src/rdbms/query.txt:613 #: ../../src/rdbms/query.txt:701 ../../src/rdbms/query.txt:728 -#, fuzzy msgid "Zoonoodle" msgstr "Zoonoodle" @@ -997,35 +875,30 @@ msgstr "Zoonoodle" #: ../../src/rdbms/query.txt:672 ../../src/rdbms/query.txt:674 #: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:697 #: ../../src/rdbms/query.txt:718 ../../src/rdbms/query.txt:720 -#, fuzzy msgid "Tanoodle" -msgstr "Бувай" +msgstr "Tanoodle" #: ../../src/rdbms/query.txt:545 ../../src/rdbms/query.txt:587 #: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 #: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 -#, fuzzy msgid "title" -msgstr "назва" +msgstr "title" #: ../../src/rdbms/query.txt:545 ../../src/rdbms/query.txt:587 #: ../../src/rdbms/query.txt:630 ../../src/rdbms/query.txt:668 #: ../../src/rdbms/query.txt:693 ../../src/rdbms/query.txt:714 -#, fuzzy msgid "publisher_id" msgstr "publisher_id" #: ../../src/rdbms/query.txt:547 ../../src/rdbms/query.txt:589 #: ../../src/rdbms/query.txt:591 ../../src/rdbms/query.txt:593 #: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:716 -#, fuzzy msgid "22" msgstr "22" #: ../../src/rdbms/query.txt:547 ../../src/rdbms/query.txt:589 #: ../../src/rdbms/query.txt:591 ../../src/rdbms/query.txt:593 #: ../../src/rdbms/query.txt:670 ../../src/rdbms/query.txt:716 -#, fuzzy msgid "pretium nisl" msgstr "pretium nisl" @@ -1033,7 +906,6 @@ msgstr "pretium nisl" #: ../../src/rdbms/query.txt:597 ../../src/rdbms/query.txt:599 #: ../../src/rdbms/query.txt:632 ../../src/rdbms/query.txt:672 #: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:718 -#, fuzzy msgid "38" msgstr "38" @@ -1041,7 +913,6 @@ msgstr "38" #: ../../src/rdbms/query.txt:597 ../../src/rdbms/query.txt:599 #: ../../src/rdbms/query.txt:632 ../../src/rdbms/query.txt:672 #: ../../src/rdbms/query.txt:695 ../../src/rdbms/query.txt:718 -#, fuzzy msgid "ac est lacinia nisi venenatis" msgstr "ac est lacinia nisi venenatis" @@ -1049,7 +920,6 @@ msgstr "ac est lacinia nisi venenatis" #: ../../src/rdbms/query.txt:603 ../../src/rdbms/query.txt:605 #: ../../src/rdbms/query.txt:634 ../../src/rdbms/query.txt:674 #: ../../src/rdbms/query.txt:697 ../../src/rdbms/query.txt:720 -#, fuzzy msgid "69" msgstr "69" @@ -1057,40 +927,34 @@ msgstr "69" #: ../../src/rdbms/query.txt:603 ../../src/rdbms/query.txt:605 #: ../../src/rdbms/query.txt:634 ../../src/rdbms/query.txt:674 #: ../../src/rdbms/query.txt:697 ../../src/rdbms/query.txt:720 -#, fuzzy msgid "vel accumsan tellus nisi" msgstr "vel accumsan tellus nisi" #: ../../src/rdbms/query.txt:553 ../../src/rdbms/query.txt:607 #: ../../src/rdbms/query.txt:609 ../../src/rdbms/query.txt:611 #: ../../src/rdbms/query.txt:676 ../../src/rdbms/query.txt:722 -#, fuzzy msgid "72" msgstr "72" #: ../../src/rdbms/query.txt:553 ../../src/rdbms/query.txt:607 #: ../../src/rdbms/query.txt:609 ../../src/rdbms/query.txt:611 #: ../../src/rdbms/query.txt:676 ../../src/rdbms/query.txt:722 -#, fuzzy msgid "nam dui proin" msgstr "nam dui proin" #: ../../src/rdbms/query.txt:555 ../../src/rdbms/query.txt:613 #: ../../src/rdbms/query.txt:615 ../../src/rdbms/query.txt:617 #: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:724 -#, fuzzy msgid "85" msgstr "85" #: ../../src/rdbms/query.txt:555 ../../src/rdbms/query.txt:613 #: ../../src/rdbms/query.txt:615 ../../src/rdbms/query.txt:617 #: ../../src/rdbms/query.txt:678 ../../src/rdbms/query.txt:724 -#, fuzzy msgid "nam tristique" msgstr "nam tristique" #: ../../src/rdbms/query.txt:558 -#, fuzzy msgid "" "By passing multiple tables to the ``FROM`` clause a ``CROSS JOIN`` query is " "executed. This means the resulting table is the Cartesian product of two " @@ -1101,12 +965,10 @@ msgstr "" "декартовим добутком двох вихідних таблиць." #: ../../src/rdbms/query.txt:562 -#, fuzzy msgid "Cross join (Cartesian product)" msgstr "Поперечне з'єднання (декартовий добуток)" #: ../../src/rdbms/query.txt:584 -#, fuzzy msgid "Query result" msgstr "Результат запиту" @@ -1114,12 +976,10 @@ msgstr "Результат запиту" #: ../../src/rdbms/query.txt:605 ../../src/rdbms/query.txt:611 #: ../../src/rdbms/query.txt:617 ../../src/rdbms/query.txt:699 #: ../../src/rdbms/query.txt:726 -#, fuzzy msgid "Skivee" -msgstr "Скайві" +msgstr "Skivee" #: ../../src/rdbms/query.txt:620 -#, fuzzy msgid "" "By defining the ``WHERE`` clause rows that do not match the condition may be " "eliminated from the result." @@ -1128,18 +988,16 @@ msgstr "" "вилучені з результату." #: ../../src/rdbms/query.txt:637 -#, fuzzy msgid "" "This is called ``INNER JOIN``, which means that the result table will " "contain only whose rows from left-hard and right-hand tables, that have " "corresponding records to each other." msgstr "" -"Це називається ``ВНУТРІШНЄ ОБ'ЄДНАННЯ``, що означає, що результуюча таблиця " -"буде містити тільки ті рядки з лівої та правої таблиць, які мають відповідні " +"Це називається ``INNER JOIN``, що означає, що результуюча таблиця буде " +"містити тільки ті рядки з лівої та правої таблиць, які мають відповідні " "записи один одному." #: ../../src/rdbms/query.txt:641 -#, fuzzy msgid "" "The same result may be obtained using ``JOIN`` clause. All ``JOIN`` options " "are just a notation convenience, since they do nothing you couldn't do with " @@ -1151,19 +1009,16 @@ msgstr "" "``WHERE``." #: ../../src/rdbms/query.txt:651 -#, fuzzy msgid "``INNER JOIN`` is the default while joining two tables with each other." msgstr "" "``INNER JOIN`` використовується за замовчуванням при з'єднанні двох таблиць " "одна з одною." #: ../../src/rdbms/query.txt:654 -#, fuzzy msgid "Right and left joins" msgstr "Праве та ліве з'єднання" #: ../../src/rdbms/query.txt:656 -#, fuzzy msgid "" "``LEFT OUTER JOIN`` returns all rows in the qualified Cartesian product (i." "e., all combined rows that pass its condition), plus one copy of each row in " @@ -1180,12 +1035,10 @@ msgstr "" #: ../../src/rdbms/query.txt:701 ../../src/rdbms/query.txt:716 #: ../../src/rdbms/query.txt:722 ../../src/rdbms/query.txt:724 #: ../../src/rdbms/query.txt:726 ../../src/rdbms/query.txt:728 -#, fuzzy msgid "null" -msgstr "нуль" +msgstr "null" #: ../../src/rdbms/query.txt:681 -#, fuzzy msgid "" "Conversely, ``RIGHT OUTER JOIN`` returns all the joined rows, plus one row " "for each unmatched right-hand row. This is just a notation convenience, " @@ -1198,6 +1051,5 @@ msgstr "" "помінявши місцями ліву та праву таблиці." #: ../../src/rdbms/query.txt:705 -#, fuzzy msgid "Full outer join" -msgstr "``ПОВНЕ [ЗОВНІШНЄ] З'ЄДНАННЯ``" +msgstr "Full outer join" From 83fabc941d12a340905a5f343a88cf81f02b58db Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 22 Feb 2024 13:56:30 +0200 Subject: [PATCH 637/689] Update submodules meta --- .gitmodules | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6003f9eed..b87dbf886 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,15 @@ [submodule "problem-sets"] path = problem-sets url = git@github.com:edu-python-course/problem-sets -[submodule "src/appx/blog"] +[submodule "blog-spec"] path = src/spec/blog url = git@github.com:edu-python-course/blog-spec -[submodule "src/appx/libms"] - path = src/spec/libms - url = git@github.com:edu-python-course/libms-spec.git -[submodule "src/spec/giver"] - path = src/spec/giver - url = git@github.com:edu-python-course/giver-spec.git [submodule "libms-db"] path = libms-db - url = git@github.com:edu-python-course/libms-db.git + url = git@github.com:edu-python-course/libms-db +[submodule "libms-spec"] + path = src/spec/libms + url = git@github.com:edu-python-course/libms-spec +[submodule "giver-spec"] + path = src/spec/giver + url = git@github.com:edu-python-course/giver-spec From 947cd95c30a6b05b1ec9be1f2e24a33b800bd643 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 23 Feb 2024 11:50:43 +0200 Subject: [PATCH 638/689] Add impress.js (presentation framework) submodule (fixes GH-207) --- .gitmodules | 3 +++ assets/impress.js | 1 + 2 files changed, 4 insertions(+) create mode 160000 assets/impress.js diff --git a/.gitmodules b/.gitmodules index b87dbf886..d9c4a24cb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "giver-spec"] path = src/spec/giver url = git@github.com:edu-python-course/giver-spec +[submodule "impress.js"] + path = assets/impress.js + url = https://github.com/impress/impress.js diff --git a/assets/impress.js b/assets/impress.js new file mode 160000 index 000000000..f7e19b459 --- /dev/null +++ b/assets/impress.js @@ -0,0 +1 @@ +Subproject commit f7e19b459eb2d2a1f7d618bf11e55cd540e27ce6 From c8e5e1caf7172faa742cd4152943462fc749ef56 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 23 Feb 2024 12:01:39 +0200 Subject: [PATCH 639/689] GH-202: Add normalization topic mindmap --- mindmaps/normalization.mmd | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 mindmaps/normalization.mmd diff --git a/mindmaps/normalization.mmd b/mindmaps/normalization.mmd new file mode 100644 index 000000000..053c383b1 --- /dev/null +++ b/mindmaps/normalization.mmd @@ -0,0 +1,19 @@ +mindmap + root((Normalization)) + def)Definition( + anomalies[Anomalies] + ins{{Insertion anomaly}} + table + upd{{Update anomaly}} + table + del{{Deletion anomaly}} + table + 1nf(1st Normal Form) + 1nfReq)requirements( + table + 2nf(2nd Normal Form) + 2nfReq)requirements( + table + 3nf(3rd Normal Form) + 3nfReq)requirements( + table From 32d2f66c257417d46088421bb0eda4b8d260b1e2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 23 Feb 2024 22:32:52 +0200 Subject: [PATCH 640/689] GH-202: Add presentation draft --- src/pres/normalization/index.html | 104 ++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/pres/normalization/index.html diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html new file mode 100644 index 000000000..24feed3fd --- /dev/null +++ b/src/pres/normalization/index.html @@ -0,0 +1,104 @@ + + + + + + + + + + Database Normalization + + + + +

    +
    + The same information can be expressed on multiple rows, therefore updates to the relation may result in + logical inconsistencies. If the wheed1997 increase their level, when the + rank should be updated as well. But if the update is only partial successful, then the + relation is left in an inconsistent state. Specifically. the relation provides conflicting information + on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999". +
    Deletion anomalies

    RQU!?6H@4jptd0 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%0AvxZB2C-aERra0927a9TL< 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 z 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

    +
    + If a player looses their items completely, the record must be deleted, unless the inventory + field is set to null. This leads to the loosing all other information about a player. +
    Deletion anomalies

    RQU!?6H@4jptd0 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%0AvxZB2C-aERra0927a9TL< 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

    First normal form

    Requirements

    -
    • Row order should not be used to convey information From 47a19b07e8c1fd01c6fe314ed4b6872fefe091cf Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 25 Feb 2024 11:59:28 +0200 Subject: [PATCH 645/689] GH-202: Add applying 1NF steps --- src/pres/normalization/index.html | 174 ++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index dacf0a8b3..0b07088c0 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -248,6 +248,180 @@

      Requirements

    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    usernamelevel
    prombery877.75
    wheed1997Almost 7
    acen19991
    + + + + + + + + + + + + + + + + + + + + + +
    usernamelevel
    prombery877
    wheed19976
    acen19991
    +
    +
    + + Data types should not be mixed within the same column +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    usernameinventory
    prombery871 sword, 4 rings
    wheed19971 spell book
    acen19991 wizard hat, 1 robe
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997spell book1
    acen1999wizard hat1
    acen1999robe1
    +
    +
    + + Repeating groups should be eliminated +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997spell book1
    acen1999wizard hat1
    acen1999robe1
    +
    +
    + + Tables should have their primary keys +
    +
    +
    Date: Sun, 25 Feb 2024 12:15:10 +0200 Subject: [PATCH 646/689] GH-202: Update steps identifiers --- src/pres/normalization/index.html | 36 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 0b07088c0..23351f79f 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -70,7 +70,7 @@

    Database normalization

    -
    @@ -118,7 +118,7 @@

    Insertion anomalies

    who has no items cannot be recorded, except by setting the inventory to null.
    -
    @@ -175,7 +175,7 @@

    Update anomalies

    on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999".
    -
    @@ -223,13 +223,13 @@

    Deletion anomalies

    field is set to null. This leads to the loosing all other information about a player.
    -
    -

    First normal form

    -
    -

    Requirements

    +

    First normal form

    +
    +

    Requirements

    • Row order should not be used to convey information @@ -248,7 +248,7 @@

      Requirements

    -
    @@ -304,7 +304,7 @@

    Requirements

    -
    @@ -374,7 +374,7 @@

    Requirements

    -
    @@ -422,26 +422,26 @@

    Requirements

    -
    -

    Second normal form

    -
    -

    Requirements

    +

    Second normal form

    +
    +

    Requirements

    • Each non-key attribute must depend on the entire primary key
    -
    -

    Third normal form

    -
    -

    Requirements

    +

    Third normal form

    +
    +

    Requirements

    • Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key From e5e726af27f4573bea7040bb84c8177bb0d156a7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 25 Feb 2024 12:54:34 +0200 Subject: [PATCH 647/689] GH-202: Add applying 2NF steps --- src/pres/normalization/index.html | 140 ++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 23351f79f..cfea54e2b 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -435,6 +435,146 @@

      Requirements

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernameitem_typeitem_quantitylevelrank
    prombery87sword17Advanced
    prombery87ring47Advanced
    wheed1997spell book16Intermediate
    acen1999wizard hat11Beginner
    acen1999robe11Beginner
    +
    +
    +
      +
    • + + { name, item_type } <-- { item_quantity } +
    • +
    • + + { name } <-- { level } +
    • +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    usernameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997spell book1
    acen1999wizard hat1
    acen1999robe1
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    usernamelevelrank
    prombery877Advanced
    wheed19976Intermediate
    acen19991Beginner
    +
    +
    +
    Date: Sun, 25 Feb 2024 13:02:20 +0200 Subject: [PATCH 648/689] GH-202: Add ids to data tables rows --- src/pres/normalization/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index cfea54e2b..40942c209 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -388,27 +388,27 @@

    Requirements

    - + prombery87 sword 1 - + prombery87 ring 4 - + wheed1997 spell book 1 - + acen1999 wizard hat 1 - + acen1999 robe 1 From c2b444969c953351e11654198aac74345f341117 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 25 Feb 2024 13:24:18 +0200 Subject: [PATCH 649/689] GH-202: Add applying 3NF steps --- src/pres/normalization/index.html | 141 ++++++++++++++++++++++++++++-- 1 file changed, 136 insertions(+), 5 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 40942c209..805c8ca92 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -299,7 +299,7 @@

    Requirements

    - + Data types should not be mixed within the same column
    @@ -369,7 +369,7 @@

    Requirements

    - + Repeating groups should be eliminated
    @@ -417,7 +417,7 @@

    Requirements

    - + Tables should have their primary keys
    @@ -492,11 +492,11 @@

    Requirements

    • - + { name, item_type } <-- { item_quantity }
    • - + { name } <-- { level }
    @@ -590,6 +590,137 @@

    Requirements

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    usernamelevelrank
    prombery877Advanced
    wheed19976Intermediate
    acen19991Beginner
    +
    +
    +
      +
    • + + { name } <-- { level } <-- { rank } +
    • +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    usernamelevel
    prombery877
    wheed19976
    acen19991
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    levelrank
    1Beginner
    2Beginner
    3Beginner
    4Intermediate
    5Intermediate
    6Intermediate
    7Advanced
    8Advanced
    9Advanced +
    +
    +
    +
      +
    • + + { name } <-- { level } +
    • +
    • + + { level } <-- { rank } +
    • +
    +
    +
    +
    From c18bd8e6f60f0ec55d323c2fa3cd69acd0a1e5c9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 25 Feb 2024 13:46:36 +0200 Subject: [PATCH 650/689] GH-202: Adjust presentation data Add tables captions. Apply ids for table rows to avoid repeating data. --- src/pres/normalization/index.html | 112 ++++++++++++++++-------------- 1 file changed, 60 insertions(+), 52 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 805c8ca92..de15efea3 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -42,8 +42,8 @@

    Database normalization

    -
    - +
    +
    @@ -63,7 +63,7 @@

    Database normalization

    - +
    username wheed1997 Almost 7 Intermediate1 spell book18 copper coins
    @@ -79,8 +79,8 @@

    Insertion anomalies

    There are circumstances in which certain facts cannot be recorded at all.


    -
    - +
    +
    @@ -100,7 +100,7 @@

    Insertion anomalies

    - + @@ -128,8 +128,8 @@

    Update anomalies

    the relation may result in logical inconsistencies.


    -
    -
    username wheed1997 Almost 7 Intermediate1 spell book18 copper coins
    acen1999
    +
    +
    @@ -155,7 +155,7 @@

    Update anomalies

    - + @@ -185,8 +185,8 @@

    Deletion anomalies

    necessitates the deletion of data representing completely different facts.


    -
    -
    username wheed1997 Greater than 7 Intermediate1 spell book18 copper coins
    acen1999
    +
    +
    @@ -206,7 +206,7 @@

    Deletion anomalies

    - + @@ -252,46 +252,48 @@

    Requirements

    data-rel-x="250" data-rel-y="250" data-rel-rotate-z="-75"> -
    -
    username wheed1997 Almost 7 Intermediate1 spell book18 copper coins
    acen1999
    +
    +
    + - + - + - + - +
    Player Level
    username level
    prombery87 7.75
    wheed1997 Almost 7
    acen1999 1
    - +
    + - + - + - + - + @@ -309,58 +311,60 @@

    Requirements

    data-rel-y="250" data-rel-rotate-z="-75">
    -
    Player Level
    username level
    prombery87 7
    wheed1997 6
    acen1999 1
    +
    + - + - + - + - + - +
    Player Inventory
    username inventory
    prombery87 1 sword, 4 rings
    wheed19971 spell book18 copper coins
    acen1999 1 wizard hat, 1 robe
    - +
    + - + - + - + - + - - + + - + - + @@ -379,7 +383,8 @@

    Requirements

    data-rel-y="250" data-rel-rotate-z="-75">
    -
    Player Inventory
    username item_type item_quantity
    prombery87 sword 1
    prombery87 ring 4
    wheed1997spell book1copper coin18
    acen1999 wizard hat 1
    acen1999 robe 1
    +
    + @@ -398,10 +403,10 @@

    Requirements

    - + - - + + @@ -440,7 +445,7 @@

    Requirements

    data-rel-y="1v" data-rel-rotate-z="0">
    -
    Player Inventory
    username ring 4
    wheed1997spell book1copper coin18
    acen1999
    +
    @@ -467,8 +472,8 @@

    Requirements

    - - + + @@ -508,7 +513,7 @@

    Requirements

    data-rel-y="1v" data-rel-rotate-z="0">
    -
    username
    wheed1997spell book1copper coin18 6 Intermediate
    +
    @@ -528,9 +533,9 @@

    Requirements

    - + - + @@ -545,7 +550,7 @@

    Requirements

    Player Inventory
    ring 4
    wheed1997spell bookcopper coin 1
    - +
    @@ -595,7 +600,8 @@

    Requirements

    data-rel-y="1v" data-rel-rotate-z="0">
    -
    Player Level
    +
    + @@ -637,7 +643,8 @@

    Requirements

    data-rel-y="1v" data-rel-rotate-z="0">
    -
    Player Level
    username
    +
    + @@ -659,7 +666,8 @@

    Requirements

    Player Level
    username
    - +
    + From f9bf8ee24d4a696f6042786ce5a3e8509abb7cc7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Sun, 25 Feb 2024 15:01:09 +0200 Subject: [PATCH 651/689] GH-202: Add fallback message --- src/_static/scss/presentation-common.scss | 42 +++++++++++++++++++++++ src/pres/normalization/index.html | 16 ++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index e69de29bb..2dae0650c 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -0,0 +1,42 @@ +/** + Common presentation stylesheet + + */ + +/** + Fallback message is only visible when there is `impress-not-supported` class + on body. This class means, that browser doesn't support features required by + impress.js framework. + + If the script detects that browser supports all required features, this class + will be removed. + */ +.fallback-message { + font-family: sans-serif; + line-height: 1.3; + + width: 780px; + padding: 10px 10px 0; + margin: 20px auto; + + border: 1px solid #E4C652; + border-radius: 10px; + background: #EEDC94; + + p { + margin-bottom: 10px; + } +} + +.impress-supported { + .fallback-message { + display: none; + } +} + +// hide all presentation steps if impress.js is not supported +.impress-not-supported { + .step { + display: none; + } +} diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index de15efea3..d8b828091 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -11,7 +11,21 @@ Database Normalization - + + +
    +

    + Your browser doesn't support the features required by impress.js, so you are presented with a simplified + version of this presentation. +

    +

    + For the best experience please use the latest Chrome, Safari or Firefox browser. +

    +
    +
    Date: Sun, 25 Feb 2024 21:30:54 +0200 Subject: [PATCH 652/689] GH-202: Add styles and complete 1NF presentation steps --- src/_static/scss/presentation-common.scss | 121 ++++++ .../scss/presentation-normalization.scss | 31 ++ src/pres/normalization/index.html | 407 ++++++++++-------- 3 files changed, 369 insertions(+), 190 deletions(-) diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index 2dae0650c..50e37ef11 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -40,3 +40,124 @@ display: none; } } + +/* colors */ +// todo: adjust colors +$background: #212121; +$on-background: white; +$surface: #212121; +$on-surface: white; +$primary: #212121; +$on-primary: white; +$secondary: #212121; +$on-secondary: white; + +body { + background: $background; +} + +/* fonts */ +$base-font-size: 3.75rem; +$title: $base-font-size * 2.5; +$subtitle: $base-font-size *2; +$section: $base-font-size * 1.5; + +body { + font-size: $base-font-size; + + h1 { + font-size: $title + } + + h2 { + font-size: $subtitle + } + + h3 { + font-size: $section + } + + small { + font-size: $base-font-size * 0.5; + } +} + +/* content align */ +.text-start { + text-align: start +} + +.text-center { + text-align: center +} + +.text-end { + text-align: end +} + +h1, h2, h3, caption { + @extend .text-center; + margin: 0 auto; +} + +/* impress presentation */ +$step-width: 1800px; + +#impress { + pointer-events: none; + + .step { + display: block; + position: relative; + width: $step-width; + padding: 60px; + + background-color: $surface; + color: $on-surface; + } + + .title, + #title { + h1 { + font-size: $title * 2; + } + + h2 { + font-size: $subtitle * 2; + } + } + + .overview, + #overview { + position: fixed; + background: none; + display: none; + } + + .db-table { + width: 75%; + + margin: auto auto 20px; + + font-family: Monospaced, monospace; + font-size: $base-font-size * 0.75; + + th, td { + padding: 1svh 3svw; + } + + th { + @extend .text-center; + + font-weight: bold; + font-size: $base-font-size * 0.8; + + background-color: $secondary; + color: $on-secondary; + } + } + + .description { + padding: 0 20px; + } +} diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index e69de29bb..574a6cc33 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -0,0 +1,31 @@ +@import "./presentation-common"; + +#normalization[aria-roledescription=presentation] { + #definition { + width: $step-width * 0.66; + padding: 0 0 120px 120px; + } + + .requirements { + h3 { + @extend .text-start; + } + } + + #mixed-data-types--1nf, + #no-mixed-data-types--1nf { + table { + margin-right: auto; + margin-left: auto; + width: 50%; + } + } + + #repeating-groups--1nf { + table { + margin-right: auto; + margin-left: auto; + width: 50%; + } + } +} diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index d8b828091..493a60aae 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -36,26 +36,28 @@ data-min-scale="0" data-perspective="1000"> -
    +

    Database normalization

    -
    -

    - Normalization is a process of organizing data in a database so that it is free from redundancy and dependency. - It helps to eliminate data inconsistencies and anomalies, thereby improving data integrity. Normalization is a - set of rules or guidelines to design a database schema in such a way that it avoids data duplication, data - redundancy, and data inconsistency. +

    + + Normalization is a process of organizing data in a database so that it is free from redundancy and dependency. + It helps to eliminate data inconsistencies and anomalies, thereby improving data integrity. Normalization is a + set of rules or guidelines to design a database schema in such a way that it avoids data duplication, data + redundancy, and data inconsistency. +

    -
    +
    Level Ranking
    level
    @@ -69,28 +71,29 @@

    Database normalization

    - - - + + + - - - + + +
    prombery877.75Advanced1 sword, 4 rings7.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coinsAlmost 7Intermediate18 copper coins
    -
    +

    Insertion anomalies

    -

    - There are circumstances in which certain facts cannot be recorded at all. +

    + + There are circumstances in which certain facts cannot be recorded at all. +


    @@ -106,40 +109,42 @@

    Insertion anomalies

    prombery87 - 7.75 - Advanced - 1 sword, 4 rings + 7.75 + Advanced + 1 sword, 4 rings wheed1997 - Almost 7 - Intermediate - 18 copper coins + Almost 7 + Intermediate + 18 copper coins acen1999 - 1 - Beginner - + 1 + Beginner +
    -
    -
    - When a new player acen1999 join the game, they have nothing in their inventory. - Therefore, the details of any player who have at least one item can be recorded, but a newly game member - who has no items cannot be recorded, except by setting the inventory to null. +
    + When a new player acen1999 join the game, they have nothing in their inventory. + Therefore, the details of any player who have at least one item can be recorded, but a newly game member + who has no items cannot be recorded, except by setting the inventory to null. +
    -

    Update anomalies

    - The same information can be expressed on multiple rows; therefore updates to - the relation may result in logical inconsistencies. + + The same information can be expressed on multiple rows; therefore updates to + the relation may result in logical inconsistencies. +


    @@ -157,46 +162,48 @@

    Update anomalies

    prombery87 7.75 Advanced - 1 sword, 4 rings + 1 sword, 4 rings acen1999 - 1 + 1 Beginner - 1 wizard hat + 1 wizard hat wheed1997 - Greater than 7 - Intermediate - 18 copper coins + Greater than 7 + Intermediate + 18 copper coins acen1999 - 2 + 2 Beginner - 1 wizard hat, 1 robe + 1 wizard hat, 1 robe
    -
    -
    - The same information can be expressed on multiple rows, therefore updates to the relation may result in - logical inconsistencies. If the wheed1997 increase their level, when the - rank should be updated as well. But if the update is only partial successful, then the - relation is left in an inconsistent state. Specifically. the relation provides conflicting information - on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999". +
    + The same information can be expressed on multiple rows, therefore updates to the relation may result in + logical inconsistencies. If the wheed1997 increase their level, when the + rank should be updated as well. But if the update is only partial successful, then the + relation is left in an inconsistent state. Specifically. the relation provides conflicting information + on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999". +
    -
    +

    Deletion anomalies

    - Under certain circumstances, the deletion of data representing certain facts - necessitates the deletion of data representing completely different facts. + + Under certain circumstances, the deletion of data representing certain facts + necessitates the deletion of data representing completely different facts. +


    @@ -231,17 +238,18 @@

    Deletion anomalies

    -
    -
    - If a player looses their items completely, the record must be deleted, unless the inventory - field is set to null. This leads to the loosing all other information about a player. +
    + If a player looses their items completely, the record must be deleted, unless the inventory + field is set to null. This leads to the loosing all other information about a player. +
    -
    -

    First normal form

    +
    +

    First normal form

    Requirements

      @@ -249,8 +257,8 @@

      Requirements

      Row order should not be used to convey information
    • - Data types should not be mixed within the same column - (And the RDBMS won't let you do it anyway) + Data types should not be mixed within the same column
      + (and the RDBMS won't let you do it anyway)
    • Tables should have their primary keys @@ -262,189 +270,203 @@

      Requirements

    -
    -
    +
    +
    - + - - - + + + - - - + + + - - - + + +
    Player Level
    username level
    prombery877.75
    prombery877.75
    wheed1997Almost 7
    wheed1997Almost 7
    acen19991
    acen19991
    +
    Mixed types are not allowed
    +
    +
    +
    +
    - + - - - + + + - - - + + + - - - + + +
    Player Level
    username level
    prombery877
    prombery877
    wheed19976
    wheed19976
    acen19991
    acen19991
    -
    -
    - - Data types should not be mixed within the same column +
    Mixed types are not allowed
    -
    +
    - + - + - + - + - + - + - +
    Player Inventory
    username inventory
    prombery871 sword, 4 rings1 sword, 4 rings
    wheed199718 copper coins18 copper coins
    acen19991 wizard hat, 1 robe1 wizard hat, 1 robe
    +
    Repeating groups are eliminated
    +
    +
    +
    +
    - + - + - + - + - + - +
    Player Inventory
    username item_type item_quantity
    prombery87 sword 1
    prombery87 ring 4
    wheed1997 copper coin 18
    acen1999 wizard hat 1
    acen1999 robe 1
    -
    -
    - - Repeating groups should be eliminated +
    Repeating groups are eliminated
    -
    +
    - + - + - + - + - + - + - + - + - + - + - +
    Player Inventory
    username item_type item_quantity
    prombery87 sword11
    prombery87 ring44
    wheed1997 copper coin1818
    acen1999 wizard hat11
    acen1999 robe11
    -
    - - Tables should have their primary keys -
    -
    +
    +
    + +

    Second normal form

    Requirements

    @@ -454,14 +476,15 @@

    Requirements

    -
    +
    +
    -
    +
    From 52f5bce75996f6004e0129cd0ae8418fd29dd9ea Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 10:20:14 +0200 Subject: [PATCH 655/689] GH-202: Add 3NF transitions --- src/_static/scss/presentation-common.scss | 42 +++++++++++++++++- .../scss/presentation-normalization.scss | 36 +++++++++++++++ src/pres/normalization/index.html | 44 +++++++++---------- 3 files changed, 99 insertions(+), 23 deletions(-) diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index 50e37ef11..ebbd089c5 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -41,6 +41,9 @@ } } +/* transitions */ +$transition-default: 2000ms; + /* colors */ // todo: adjust colors $background: #212121; @@ -137,11 +140,15 @@ $step-width: 1800px; .db-table { width: 75%; - margin: auto auto 20px; + margin-bottom: 20px; font-family: Monospaced, monospace; font-size: $base-font-size * 0.75; + .primary-key { + background-color: rgba(125, 125, 125, 0.1); + } + th, td { padding: 1svh 3svw; } @@ -161,3 +168,36 @@ $step-width: 1800px; padding: 0 20px; } } + +/* 4th dimension */ +#impress { + .future { + .fade-in { + opacity: 0.0; + } + .fly-in { + opacity: 0.0; + transform: translateY(2200px); + } + } + + .present { + .fade-in { + opacity: 1.0; + transition: $transition-default; + } + .fly-in { + opacity: 1.0; + transform: translateY(0px); + transition: $transition-default; + } + } + + .past { + .fade-out { + opacity: 0.0; + transition: $transition-default; + } + } + +} \ No newline at end of file diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index 6ae8d734c..95b35007f 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -9,6 +9,7 @@ .requirements { h3 { @extend .text-start; + text-decoration: underline; } } @@ -34,5 +35,40 @@ grid-template-columns: repeat(2, 1fr); grid-column-gap: 20px; align-items: start; + + table { + margin: 30px auto; + } + } + + #table--3nf.future { + section:first-of-type { + .fly-in { + transform: translateY(-2200px); + } + } + + section:last-of-type { + .fly-in { + transform: translateY(2200px); + } + } + + section { + .fly-in { + opacity: 0.0; + } + } + } + + #table--3nf.present { + section { + .fly-in { + transform: translateY(0px); + opacity: 1.0; + transition: $transition-default; + transition-delay: 1000ms; + } + } } } diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index c5ed012f3..590a1f2ae 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -633,12 +633,12 @@

    Requirements

    data-x="-3000" data-y="750" data-rotate-z="15"> -

    Third normal form

    -
    +

    Third normal form

    +

    Requirements

    • - Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key + Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key.
    @@ -648,7 +648,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="0" data-rel-y="2000"> -
    +
    @@ -683,7 +683,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="0" data-rel-y="-1000"> -
    +
    { username } <-- { level }
    @@ -698,20 +698,20 @@

    Requirements

    - + - + - +
    Player Level
    prombery8777
    wheed199766
    acen199911
    -
    -
    +
    +
    @@ -722,39 +722,39 @@

    Requirements

    - + - + - + - + - + - + - + - + - + @@ -762,14 +762,14 @@

    Requirements

    { level } <-- { rank }
    - +
    + data-rel-y="-350" + data-scale="2">
    From 8b112f6d6d1173759bbadc46f5942e56b6ddac0d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 11:18:37 +0200 Subject: [PATCH 656/689] GH-202: Add 2NF transitions --- src/pres/normalization/index.html | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 590a1f2ae..3f7410de4 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -471,11 +471,13 @@

    Requirements

    data-x="3000" data-y="750" data-rotate-z="-15"> -

    Second normal form

    -
    -

    Requirements

    +

    Second normal form

    +
    +

    Requirements

      -
    • Each non-key attribute must depend on the entire primary key
    • +
    • + Each non-key attribute must depend on the entire primary key. +
    @@ -484,7 +486,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="0" data-rel-y="2000"> -
    +
    Level Ranking
    11 Beginner
    22 Beginner
    33 Beginner
    44 Intermediate
    55 Intermediate
    66 Intermediate
    77 Advanced
    88 Advanced
    99 Advanced
    @@ -534,15 +536,13 @@

    Requirements

    -
    +
    • - - { name, item_type } <-- { item_quantity } + { name, item_type } <-- { item_quantity }
    • - - { name } <-- { level } + { name } <-- { level }
    @@ -552,7 +552,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="0" data-rel-y="-1000"> -
    +
    @@ -566,27 +566,27 @@

    Requirements

    - + - + - + - + - +
    Player Inventory
    prombery87 sword11
    prombery87 ring44
    wheed1997 copper coin11
    acen1999 wizard hat11
    acen1999 robe11
    @@ -602,17 +602,17 @@

    Requirements

    prombery87 - 7 + 7 Advanced wheed1997 - 6 + 6 Intermediate acen1999 - 1 + 1 Beginner @@ -623,8 +623,8 @@

    Requirements

    + data-rel-y="-300" + data-scale="2">
    From 75370b5d17fc5bc2ce595f5bd9e1d9651c7543ac Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 11:26:37 +0200 Subject: [PATCH 657/689] GH-202: Add 1NF transitions --- src/pres/normalization/index.html | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 3f7410de4..a6f6f156d 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -250,24 +250,24 @@

    Deletion anomalies

    -

    First normal form

    -
    +

    First normal form

    +

    Requirements

    • - Row order should not be used to convey information + Row order should not be used to convey information.
    • - Data types should not be mixed within the same column
      - (and the RDBMS won't let you do it anyway) + Data types should not be mixed within the same column.
      + (and the RDBMS won't let you do it anyway)
    • - Tables should have their primary keys + Tables should have their primary keys.
    • - Repeating groups should be eliminated + Repeating groups should be eliminated.
    @@ -277,7 +277,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="-1000" data-rel-y="1500"> -
    +
    @@ -308,7 +308,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="0" data-rel-y="850"> -
    +
    Player Level
    @@ -340,7 +340,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="2000" data-rel-y="-850"> -
    +
    Player Level
    @@ -371,7 +371,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="0" data-rel-y="850"> -
    +
    Player Inventory
    @@ -385,27 +385,27 @@

    Requirements

    - + - + - + - + - +
    Player Inventory
    prombery87 sword11
    prombery87 ring44
    wheed1997 copper coin1818
    acen1999 wizard hat11
    acen1999 robe11
    @@ -417,7 +417,7 @@

    Requirements

    data-rel-position="relative" data-rel-x="-1000" data-rel-y="-1600"> -
    +
    @@ -461,8 +461,8 @@

    Requirements

    + data-rel-y="-500" + data-scale="2">
    From b9cadc5d68ba9552461a48e14e9251475e515582 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 12:05:44 +0200 Subject: [PATCH 658/689] GH-202: Add deletion anomalies transitions --- src/_static/scss/presentation-common.scss | 11 ++++-- .../scss/presentation-normalization.scss | 37 ++++++++++++++++++- src/pres/normalization/index.html | 20 +++++----- 3 files changed, 53 insertions(+), 15 deletions(-) diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index ebbd089c5..35d546865 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -42,7 +42,8 @@ } /* transitions */ -$transition-default: 2000ms; +$transition: 2000ms; +$transition-delay: 1000ms; /* colors */ // todo: adjust colors @@ -55,6 +56,8 @@ $on-primary: white; $secondary: #212121; $on-secondary: white; +$lost-data: orange; + body { background: $background; } @@ -184,19 +187,19 @@ $step-width: 1800px; .present { .fade-in { opacity: 1.0; - transition: $transition-default; + transition: $transition; } .fly-in { opacity: 1.0; transform: translateY(0px); - transition: $transition-default; + transition: $transition; } } .past { .fade-out { opacity: 0.0; - transition: $transition-default; + transition: $transition; } } diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index 95b35007f..3536b5797 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -13,6 +13,41 @@ } } + #deletion-anomalies.future { + td.fade-out { + opacity: 1.0; + } + } + + #deletion-anomalies.present { + td.fade-out { + opacity: 0.0; + transition: $transition; + transition-delay: $transition-delay; + } + + td.lost-data { + &:nth-child(odd) { + transform: rotate(-7deg); + } + + &:nth-child(even) { + transform: rotate(7deg); + } + + color: $lost-data; + transition: $transition; + transition-delay: $transition + $transition-delay; + } + } + + #deletion-anomalies.past { + td.lost-data { + color: $lost-data; + transform: rotate(7deg); + } + } + #mixed-data-types--1nf, #no-mixed-data-types--1nf { table { @@ -66,7 +101,7 @@ .fly-in { transform: translateY(0px); opacity: 1.0; - transition: $transition-default; + transition: $transition; transition-delay: 1000ms; } } diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index a6f6f156d..58e9cb067 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -162,25 +162,25 @@

    Update anomalies

    - + - + - + - + @@ -221,21 +221,21 @@

    Deletion anomalies

    - + - - - + + + - + - +
    Player Inventory
    prombery877.757.75 Advanced 1 sword, 4 rings
    acen199911 Beginner 1 wizard hat
    wheed1997Greater than 7Greater than 7 Intermediate 18 copper coins
    acen199922 Beginner 1 wizard hat, 1 robe
    prombery877.757.75 Advanced 1 sword, 4 rings
    wheed1997Almost 7Intermediatewheed1997Almost 7Intermediate 18 copper coins
    acen199911 Beginner1 wizard hat, 1 robe
    From b4a4e30539c86e124b9ca35510ee4d475906bebd Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 13:08:38 +0200 Subject: [PATCH 659/689] GH-202: Add update anomalies transitions --- src/_static/scss/presentation-common.scss | 1 + .../scss/presentation-normalization.scss | 50 +++++++++++++++++++ src/pres/normalization/index.html | 30 ++++++++--- 3 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index 35d546865..972e77c44 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -56,6 +56,7 @@ $on-primary: white; $secondary: #212121; $on-secondary: white; +$invalid-data: red; $lost-data: orange; body { diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index 3536b5797..0a902c7da 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -13,6 +13,56 @@ } } + #update-anomalies { + .invalid-data { + position: relative; + + .updated-data { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + display: flex; + align-items: center; + justify-content: center; + } + } + } + + #update-anomalies.future { + span.fade-out { + opacity: 1.0; + } + + span.fade-in { + opacity: 0.0; + } + } + + #update-anomalies.present { + span.fade-out { + opacity: 0.0; + transition: $transition; + transition-delay: $transition-delay; + } + + span.fade-in { + opacity: 1.0; + transition: $transition; + transition-delay: $transition + $transition-delay; + } + + .invalid-data { + color: $invalid-data; + } + } + + #update-anomalies.past { + .invalid-data { + color: $invalid-data; + } + } + #deletion-anomalies.future { td.fade-out { opacity: 1.0; diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index 58e9cb067..c6e7e1ee7 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -168,21 +168,39 @@

    Update anomalies

    acen1999 - 1 + + 1 + 1 + Beginner - 1 wizard hat + + 1 wizard hat + 1 wizard hat + wheed1997 - Greater than 7 - Intermediate + + Almost 7 + Greater than 7 + + + Intermediate + Intermediate + 18 copper coins acen1999 - 2 + + 1 + 2 + Beginner - 1 wizard hat, 1 robe + + 1 wizard hat + 1 wizard hat, 1 robe + From 77b49ea83272f7b7c0e60ec2238f8dc4752c243f Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 13:14:01 +0200 Subject: [PATCH 660/689] GH-202: Add insertion anomalies transitions --- .../scss/presentation-normalization.scss | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index 0a902c7da..517b28707 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -39,6 +39,37 @@ } } + #insertion-anomalies.future { + .invalid-data { + opacity: 0.0; + } + } + + #insertion-anomalies.present { + .invalid-data { + border: 1px solid $invalid-data; + opacity: 1.0; + transition: $transition; + transition-delay: $transition-delay + $transition; + } + + .lost-data { + color: $lost-data; + transition: $transition; + transition-delay: $transition-delay + $transition; + } + } + + #insertion-anomalies.past { + .invalid-data { + border: 1px solid $invalid-data; + } + + .lost-data { + color: $lost-data; + } + } + #update-anomalies.present { span.fade-out { opacity: 0.0; From 19c8118bac18e3b11be2ba9da24b0d06c5da1c14 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 13:16:38 +0200 Subject: [PATCH 661/689] GH-202: Fix deletion anomalies transitions --- .../scss/presentation-normalization.scss | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index 517b28707..f70180597 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -102,12 +102,17 @@ #deletion-anomalies.present { td.fade-out { + color: red; opacity: 0.0; transition: $transition; transition-delay: $transition-delay; } td.lost-data { + color: $lost-data; + transition: $transition; + transition-delay: $transition + $transition-delay; + &:nth-child(odd) { transform: rotate(-7deg); } @@ -115,17 +120,20 @@ &:nth-child(even) { transform: rotate(7deg); } - - color: $lost-data; - transition: $transition; - transition-delay: $transition + $transition-delay; } } #deletion-anomalies.past { td.lost-data { color: $lost-data; - transform: rotate(7deg); + + &:nth-child(odd) { + transform: rotate(-7deg); + } + + &:nth-child(even) { + transform: rotate(7deg); + } } } From 4e2227cb16ac3f3cc63bc2d75558692a72fb03ca Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 15:06:36 +0200 Subject: [PATCH 662/689] GH-202: Add test pass/fail marks and update transitions --- assets/icons/check-mark-svgrepo-com.svg | 35 ++++++++ assets/icons/cross-mark-svgrepo-com.svg | 37 +++++++++ src/_static/scss/presentation-common.scss | 26 +++++- .../scss/presentation-normalization.scss | 42 ++++++++-- src/conf.js | 3 + src/pres/normalization/index.html | 82 ++++++++++++------- 6 files changed, 190 insertions(+), 35 deletions(-) create mode 100644 assets/icons/check-mark-svgrepo-com.svg create mode 100644 assets/icons/cross-mark-svgrepo-com.svg diff --git a/assets/icons/check-mark-svgrepo-com.svg b/assets/icons/check-mark-svgrepo-com.svg new file mode 100644 index 000000000..a0c183ef7 --- /dev/null +++ b/assets/icons/check-mark-svgrepo-com.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/icons/cross-mark-svgrepo-com.svg b/assets/icons/cross-mark-svgrepo-com.svg new file mode 100644 index 000000000..3143825c7 --- /dev/null +++ b/assets/icons/cross-mark-svgrepo-com.svg @@ -0,0 +1,37 @@ + + + + \ No newline at end of file diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss index 972e77c44..d1fd7bb9f 100644 --- a/src/_static/scss/presentation-common.scss +++ b/src/_static/scss/presentation-common.scss @@ -63,12 +63,34 @@ body { background: $background; } -/* fonts */ +/* fonts and icons */ $base-font-size: 3.75rem; $title: $base-font-size * 2.5; $subtitle: $base-font-size *2; $section: $base-font-size * 1.5; +$checkMarkIcon: url("../../../assets/icons/check-mark-svgrepo-com.svg"); +$crossMarkIcon: url("../../../assets/icons/cross-mark-svgrepo-com.svg"); + +.i { + display: inline-block; + height: 1em; + width: 1em; + margin: auto 0.5em; +} + +.i-pass { + @extend .i; + background-image: $checkMarkIcon; + background-size: contain; +} + +.i-fail { + @extend .i; + background-image: $crossMarkIcon; + background-size: contain; +} + body { font-size: $base-font-size; @@ -179,6 +201,7 @@ $step-width: 1800px; .fade-in { opacity: 0.0; } + .fly-in { opacity: 0.0; transform: translateY(2200px); @@ -190,6 +213,7 @@ $step-width: 1800px; opacity: 1.0; transition: $transition; } + .fly-in { opacity: 1.0; transform: translateY(0px); diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss index f70180597..350668272 100644 --- a/src/_static/scss/presentation-normalization.scss +++ b/src/_static/scss/presentation-normalization.scss @@ -138,20 +138,52 @@ } #mixed-data-types--1nf, - #no-mixed-data-types--1nf { - table { - margin-right: auto; - margin-left: auto; - width: 50%; + #repeating-groups--1nf, + #table--1nf, + #non-key-attrs--2nf, + #table--2nf, + #transitive-deps--3nf, + #table--3nf { + ul { + list-style: none; + + li { + font-size: $base-font-size * 0.65; + } } } + #mixed-data-types--1nf, #repeating-groups--1nf { + section { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 20px; + } + table { margin-right: auto; margin-left: auto; width: 50%; } + + } + + #mixed-data-types--1nf.future, + #repeating-groups--1nf.future { + .fly-in:first-of-type { + transform: translateX(-2200px); + + } + + .fly-in:last-of-type { + transform: translateX(2200px); + } + + .fly-in { + opacity: 0.0; + transition-delay: $transition-delay; + } } #table--3nf { diff --git a/src/conf.js b/src/conf.js index a2cecf326..085f00a7c 100644 --- a/src/conf.js +++ b/src/conf.js @@ -3,6 +3,9 @@ import "../assets/favicon.ico" import "./_static/scss/presentation-common.scss" import "./_static/scss/presentation-normalization.scss" +import "../assets/icons/check-mark-svgrepo-com.svg" +import "../assets/icons/cross-mark-svgrepo-com.svg" + // import impress.js presentation framework import "../assets/impress.js/js/impress" import "../assets/impress.js/css/impress-common.css" diff --git a/src/pres/normalization/index.html b/src/pres/normalization/index.html index c6e7e1ee7..32758a71b 100644 --- a/src/pres/normalization/index.html +++ b/src/pres/normalization/index.html @@ -294,7 +294,7 @@

    Requirements

    + data-rel-y="2200">
    @@ -319,14 +319,6 @@

    Requirements

    Player Level
    -
    Mixed types are not allowed
    -
    -
    -
    -
    @@ -350,14 +342,21 @@

    Requirements

    Player Level
    -
    Mixed types are not allowed
    +
    +
    +
      +
    • No mixed data types
    • +
    +
      +
    • No mixed data types
    • +
    + data-rel-y="0">
    @@ -382,14 +381,6 @@

    Requirements

    Player Inventory
    -
    Repeating groups are eliminated
    -
    -
    -
    -
    @@ -427,14 +418,23 @@

    Requirements

    Player Inventory
    -
    Repeating groups are eliminated
    +
    +
    +
      +
    • No mixed data types
    • +
    • No repeating groups
    • +
    +
      +
    • No mixed data types
    • +
    • No repeating groups
    • +
    + data-rel-y="-1200">
    @@ -474,6 +474,13 @@

    Requirements

    Player Inventory
    +
    +
      +
    • Primary key applied
    • +
    • No mixed data types
    • +
    • No repeating groups
    • +
    +
    Requirements

    RQU!?6H@4jptd0 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%0AvxZB2C-aERra0927a9TL< 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 z zba7;ROB}=5U%L$ac0UXt>}c5gv12iQDT<2L}#tHbjAGgyI8)urMj-b zR{{SQ3bIIlG|=Sm;mU&ei<=RmTwHMY&>Z*@UBC)+lf-Yu#x19%_&U^K)-Ii^flDo~ zl(apVBO@hUR`MfGN=~{@>O^S7BdzeaSHHKSce)jEWv%I5kHS#`E~-wRjmLmsg`vup zFEt^nyBX1~R}KS$_QmE|F)*@9La5-4>TL1a*^)F1`{D+zssD!_mQJMxOChfL#-bmu zkFc%7fUIyC%6fSwdVy=K2!gOEu#bAO%VI>Fm4+x{>bd*kRnl5N?vy1T-Th15ypX*! ze`hxBWqKiIq7)gr3cvg;Zu5uHo!b2i8qw5|gvuN$+Q>jA*{yzrxfkxWl`f8LMWUr#SV8bI(;BS9boP(mo4iytL`5nHk?rc5 zcFW$od@apH+9gLByOO(0U2okrOhBV`ET<(`UDSz9gQHkSP>CsuMqBpUuqzO+ZF6Pj zxTdL@vdjtxL4AG|pw_KFs6w;;qJr1Xsz0x?Jcg_yc3uS)6{4gZajB9^xHQ=%*;L@+ zP!kgLQZ$I%R8m}wUr5ym%&3pp9AptjapDFnz0hO*g~zKNU?U+gBq4J5J|Do3*Gtx- zN(K6Ob84J=*w+HQz0`}&gBp~DnXJi@p8enI@Buk!Qtq|yt$K*fGa~}%2Zrh*dwA(Ge-v61 zzF57P2+`WLpf^RxCZ*K87P>BWP{Y1{UD9E~Jn44NGnM1E-Q+2V|Is4sYf-eRM$Sc% zO{V-%oJ<&Kef(&&|HQ}h9ip!){~J5aMWV11n0J6fA_<&h2=&VXahFKM8zLWD7>o75 z_pq;ltkK8S2G+W9Kltb8iIr~X$*D(a-olPbA+A6f&+NHo>6)r<-c}2Y+{o29&d$NQ zTe;e+sqKMh4`n#Fd>mT*Wv+Mni!PjLA3rO+q~-HKPXM&=d;2GMpa(e}czKt?Og=wF z(ys7kIcqFRCw;|tiXml4ihnSZHCB_FJq%NWu*^(Zsa<<-7Yb~`OuEJ?%jny6A%eQR$ zzH)QbKN1&7(7jTUA#M>4#|B;Ds#jC1j(I=tPle6*XGFUO9aq~aA$B(Fe2xUZoMHEn zWt_#&Fc+4B)A!cN?+>hKG79cVN9z*c+W{$$^*nq%47azdd{-N7EI_5Xm5h}#@DZh z_ZvL@O=erHAgj|y9eS{&Q~bmodOLQa)B2XNzs!(N##(-1!XTh`#HYqJZSuBcic6NO z5nSA;3)@-#y-3aVWyNa1W@18pjf0GGSD5)I))okQj-rhvdtof)5=*>G3nK~e(n5KH zv&-nJZ~f}K-qvwe46S~f@JK~hAJrOG0C!Ft{Q|EkEj4zxs65;?{JH<2b<%g%?+tcy zfLP;K$aMGjH#x#rdDg?UV=ZWT!!qk0>l4ExqyD$?i;F>~mU$J!7~k>%TJ{Yd#?-RG z#UaeD$u7C{*CY!HT=OiTn5GFIuZ@4{H}@Xm$V=#B;Rc_Ai3*I8g%>K-LJc)F@fHx@ zCX^KRwd>*j(wqXp;yzF`&!y${pB8gK(u$>@nuVx#grdH*^l@^qN&JT2tPwPGJO4ym z5ParG8)-pxkiWp=)2pME=Qz+F3l|R(BxG5LproGtD&UK@22Y=NUR~|ll})*a(W0CM z4E2;v(3yb2lG`5Ey>Lq! +)rq*?Vk6%&7AK0DP*SGH9z=OI65I}*YPq@Zazw&#^ zftts3woU(sXI-mL@D`SEfiB7QBDx>-#_THuU>BEjcu|U}sS>)23T3@-y=1bwtD_*w z&HW&|Cr)XbJND2x!JWc0TF@6bPH>FB*Os@@3Fy5x;l-AH(BCL7%*0UjC5`<){%G3G z5=5eha?N`sj|n>YEEzF29tlg`4rYDS?z!>Fvnn#sj8S!&AW5bd6Ns?Tesv3oeU+frI#9Q4sRYhI5_ zg2XEmJkG8xP2^WX;&;n`Z+7yRTj!TIxCPKDSzgRGGQYNjjXXJMsC=BlMe;XzyY-u}?h&JvXSCeGA_T&~M(3(A@lmH`asx^*55 zAu3OizEV~3Rx5$sPy8PY=J2TuiOL7&txx$Mh?+fG&%0XS zf2m1SEi}c}IpUiKi=eR|67wxW=JKQ}o&-d(8Cc_2&whKw*;W>D>^qtJeR}~da`|}a z4pz~3UYtbG_RcE_JeIS!wcdy4-4I;tzis{VDO^C5)aBS8bydX{RZ3%{n}XPFr{uc_ z94$t=^sARNSP2d=rl9|sm3EjbD%DhOgz0CKn40PO)D#~F90Wd6=MGA?MZqi^gQ0#G z@KPu7g3Wn3=vHr3DyFVT51zVTbMFZAe((HSs0@n=ll@191+o~5FY2>(27!6Kzpb$M zhWSi7OZ!>3|;PE=VhRVJSyA!(?I0kyq|SHakEoGnT`Vmg#Hq zK&f#u=Qj&CsZXHq_Qhdd>{wjrTUl7M@pnbFiYwe`l!eYDD=kmX8C+fe4Vy?eURs); zK@{D88m{bjV>%b_RL-IG7dPQ7pj9<-&sFWmPb5Qwq5gsN9wD=sFnxN4l!OUy6bP&d z4W!-@*CE{0sUciFJjecK@0XJK1@hkr*`0`;Vbew(yKr_bdoDuN>A695HmXy@qsd@_ z_cE~e?)yrpa0!L6%LKNq^C^yz`g$txzL%_nEBJpHxAHCmr_@l=tkgT5qDMsFobm#o z-?343?7vcy+4xU}P5mB|0m9#Js5qj2E!yrj69E{n(sX{h z>kL4orv@){dQoF#6IWe;w~hUA33>K;7Dac2a+JD~w{x%);cC1_D=Cv%g;`AfmKujC z`6DCvWWs9i6H|h@^s0KEedb(hzU^p>xO<|wsH!PwufLSY2rs`~fZf$^`5lFp(e&>n zaB3NfvTXB|{37PR4YsY%mM_L+QI zgZ~i;5}GsmFBY!`Ia+M4-lRHW1flYM_JuKAO{aRQWHwo&3B7;@?TJ#*|DoyKuK0B7TCcFoFu?CeD|wU^vx%v6gcP-7BR)pH#24HW9X*o97lF7fXv z;Gj&GNjsEbAgTH7p6axh&7+#zJG}R|6)@us*g*Fin^0P(vg&^K{;Vc@1 zsT@peJs0{3j3RL7piddL&^^{TlhNJ2T^oqjk;d9FG!a6YSZ-d{v|#`CnMQGdn8!Q3 zWrwBM&dz|`rp`=q-YfZ>LZD+1?L=Y@A?140>T>dOj>ElQ)CXph`b1Esc!XATXj_T! zy7OZ6NNv^S0}>Ye%0nOH$1zZg?L1wWI~?bqECiT{~J8R&8A#C24al zI6RnKMYwcDt%rAV*o|nh={WsLxsP zZ1KXiwna4CUm)zr#p-pzg!@RvtoEk=h%G1jv^Uyj>$nY6nDObRV}ZsR19zZGKU?OU zi$p++(+4z&YL>_iI8#K78Pt_Yku~9!luSCsps+S{*h?cS?=5z?bHfyJTRQ!}#V>7~ zEj>TX@&vf9ou#rOKyY-hIL}j=@Bb}iJ$$64X*tqI_U^%~PkK5FIZ}7obM|TJ8Xsg10k=u`zNf_0Pff?!8Wey2a%Pf)i>;LLPE7;-N zIX=!#tnNbAy;5$1*`NK2FmkYtg~Yh-p}c06$WYGuvfgG-KQexS1CuQOuFb$ba#JB6e{I zhu)cvI|%u9?pS}j=B-;E-R!QT*iLB#ad2#pp_%Q&c?8+%LV`^{OZInbPKo{hhhUU? zOu>7TZqP_D?CFLkI@kxy`rGzoq`!CkX6B?iH`Y6-{0Uvg-e%xGOYg%Gx6gP~+2@1K zq=i;}TuNFRE?F)Z(Nq3D$vHTG#IxZ2u7#*`j!eThq;Fv1)KtOzJ{fV#5`Dp^vHT9J|Hd8()Gv`MqW;EYv9W@FaQ_eVGRrvAyb-`iy zy+-xA=E{95JHc`HM=~?}Rx0VW$WPp#8M84Ta2%*>`euBX?yU_yTfA?@3H3wyy*92L z^b6xl;Lwsbj>B2ti>_#ijC#+3k+SV)xDN{vBw9+<>8`^=H)FaxAyRWb0e4 zd0eTZR*V2L`a+dseTr9MR(tpVJy(YY;(JgYMHg+9Dk2NhO|Un-mRm3KB&4@-*<6Oq zE+i>+>&`q^?Qa(6yBukzE-D-pv`LxOf~%dqx?Q{L)a;Ga18F#EMyb)S<>W=50SROq zo%C#|#+i##t=qvQX!{&5+K zvoG;Hjeg-BGEk`&hsM@cS@cy9);%n~zC~}mCq{vTlyeab1Nk6tP9YO8 zTY1dKG|uHzA(zMWT+(1E715{Q!1EgSQ*}wdnD6(sVe# zh=Oq3TlSSz3N`HQ71a0?f1S@l{SfhJy5S&{Hm!mJ9v-lJSttkMY~9yCuW6tyQCj67 zqTxt#TE6Cq+BMkI&H9%UDdjP(5gPtnpK_nsu09goW$84v>*;-&RKP5j6_}Xmz!lK+ zXrGk<;`{ni@O9W<&Bq1#p6}P=diVA(*eDd>fA~@spH*9Fcl37uZo4gtUma2xt}NXA zu+AREF8)bdSX@|LSbYCU!A`DrwBQ4`sAUgALWeymqL2H$`WgT8F~ReHgsnaH_x9p` z#M~TL0!Qi0XiZIu?nt=5|1{V8^~obV^ZQK}vqnFX^xAth8E{%O5NOvjHNx~Pw*-$v zp1W7d+#Kbduid(6Mz^+BBMYsFsj|`yW`d?%U^ZG}$s8IAg1u*u1CD`#RU9{92}_74 zI=zqMEagP`Uc;5%@!F-9n>-v@&RE3uH+mcuTw5;`3pMkNp#h4E-+(xB>p>L<;Zv6_ zq!DZdBkT6c{e#d5?{nI~>PH%nyn>aISPICBBNz(C!M%Os+;s3aX(D;OKGH~AVj*|$ z>DcqiH|(O?#BJbsDEQn9R(X_5zDF(@}8;9{VRI4zL~; z+z3*@^mVMMZp{H3J-Z?AW&2ui7_!b*t3aU~U zTKU#&llr&=;g`H5?bEDU{5lfcA1y-o!{-n=-KVog`r{f}F(1u0L%-y0Mx=von<4l9 z`gsvP?JZ7HenWRB46J99KsV%MVFYs_yW2uRi7n7NN9n(8<_0WUPJ{V*?<~M60bika zpD%;lj>sBCQ2Gk{PSN8`bY?qneLv|}mmH8XUnvSl6t>6^Rnwg#jTfgUE~T$?@ckWw z#e+8~j9cP_>8<;}2ShVe%#gbEpy%`Y2*fWJM#_e(WwFpP(hwGJq5EMkkkI{NUSxK& z|J~asQ?8-&>Bqe=GcZK6dtZsrAOQ2ecr25wvasPK_rWo*U?M=irja$ws#BJ$6)@Msb(pHE-qeSzUM?x!gbT!JUpfba?IN9 zRoKhCkh8OdI2w$cW}Hvx6`C^$&{i{WhS3*zQKzmDv->k{y7rEOi2DF^#~Gxp%LM7PfkoSjdlPf**x@|Q24M|@ zrvJ&|`epotRGAzzZnbO^?u_Ryd3Ipm!c0IVV=E2moFf}l{5}2h`lab}wG$n$!-%cf zTPMt_c5)C7?X5>_vCj>{+E8d`v_$wAF@=tv7oBmzBb(F2SamTebWy@qByqSng~)hz z(0_9a*Pt?gM*RKv$}Tbtdclk~k>(!rC{5O*Pj(KkGl88ctH&4!RiR(F_Y2O!>ow-2 zl~0*X9W8nuy%@3(6Ecvn`6_R(DtPS7p2s9!4qLOw&|SE> zzLD#Gm+7US|B0|O_;XsEO9EkEnf=GuJ8*4R^4w;b#xFlXj)V}If^-^@qT_}xhF zDQ!E(@^Ix#okJU?i>tjB?{1ope9u5TfakgjerX@vF#o*MomwS%e0k-1NHva{9G@ zBXn$16Ho-}u{xDOpDYcY>rq>%mK;`Clsb?P7AivyfHHIhg0@quPZAidggZLV4z85# zL0o!07PWn)v~Db3f^;SKzk9DLiQt%K+!lYnopP zZ~&d=R{<-vD;c#gh(EjlzGpwxa86*Yq~nWfky$RT{w8K81tA+UKw3yw*jr-RD|Q-S zME3a8dJA_PB2*6CSe+bBG)3{Qgw_)m5$C-a{F?+`MkGe7WUJQC!-+fy|ygct?KX_=5`dMyU z@op?YSy!m|dttT(5xPJb*m@gSvjxy85nS?R7AY^?W&Mkjo!og`wzBnS+9A?oxs=ky zUgwUP31a%b&nBiG=>q3LU~LeIyQUR4kw|3R(G+Ez)VX-HwwnvCZHs>@XyGJ$kc<+7 zwTpV2scCsQvN9FL+pg(sWhQ-;iYOd#3)On5uGMBZ7i~ATDu(3=Xd!{u?*+Jwzm~no zZgIxf?yePs2^wue&<3a9Iko#^rb`swlvnqWg_-T7|5}*W#(W(Mb!ulMn9;*oNv@Xx zZ<^XAzm=}$X3)590*tsW0N(ikz8jf{Q(Jp<-OQDAXQdJgf9s~1zIv!m5;h+OV1>C( z0xGot(VU&S4njQrHd<09kX!yCk<4&lk&X|fY(NOV#s zOBCjYM**aQ(3GuSPfRHz8O*!r)U&P67eZ}P<$e(421t_EDp@AV(pcRo4=4I>UH52K zDB+!OkUe4}Ue=A{?*PzAkePS$B_F^5KUES{oFCvfBBSt}I)ZWFP^=lU)&bK}EBNiu zvVxSR3`!p#)5Utr2*jN0O_{iB-B}tVRQ?dC-V8pQsOw;VWT?5QO7lm;L5UCaW$F zJ$WcNv_ikfaw27cuL(^~oP`niJ(+;xq5%OrpIz>fu~i-JYb7OK_YNARW3EpmDiU_{ zJv<*D5I_ZdzxeYz(d( zP*i0ZpI3Fmb})S1>#`3+$j+nbRn4-U)zj#kW{v_j^|E}_k$B4ZvXWqW52UUfsM8hM zQHjpXFDvyv536Wtv8=9$fwfwxak*cSn}6LV85{;Rsu&ww^gHFWqRzS}TY<{M9SIz> z<8q8=22H202P`WFl>fY3$R}>KqsL8+XD=>U=6|jGGK!!7r>61he`>*9sU-wbl=<~x zrVxPIH_lq3Vw7G4i}g3mTon8_R3m2g@wmnRt4~(U-y_~oOy(bx70{gcuS3j9yFgFC{!#4!K(Blf1{;`DcTWSUG30D(c*;4)`hN_-K6cnw#9@LYA-p z&{3Dgf-hdvvV*!ix2dQ{MyhnU8GT z{S=pULm9mB<^EAYVoCXr8S1`Jh@AJAiCY`XFE_uU+h%^yh$H?p<#H{+eRNE*&9f1L zv&7a7!=a%m-~5pzWvU3_@g{qxy6b;tV|j?6*D&6Gj<)=2Lw$+YxuvGL&N%W-yu8n@ z5hGS=k*jK2wURVIOt;sxWYy_U?AeQgJ55w>o_m3gcyQQ{iaa*(`erY&w%;c4;+^8} zZKdDCXXStU3YTuMtBw~f0PEEO9po#WWJ|%7W!Tq-Ewfxc$5)G|4mb|}cfc2X-_frR zGCOV<{ONf1dnK$`os&)lUJMRj3w}RYJ9dx=u&dU*(+u;C42jjr(81QfE#=*Q8}jpz zClpy(*xmu{J^Gu`3Umpp(;)-}OVRh#7L|jo4ulDJ+`#S|CBVMVozNONN8i0*Kb29f zT8B`+vGl;kdB=k)dehNa@E)o|G@g-wap}qhh7QSX+fTHW0{3$AxDVFS7_WH(hFXr2 zOs2;_3$t~C2$i)?Ej`h}7zwn;W+$wB*$9L{GI@j7wixG&!fhr%ihk2uoeaUCqmuo_ zp0V7|*Y`?Y3lSNpuWg*clxRHiclB8-7rKPR!CG+J8N$SWFih)95%>WY3lx2tq0dv4 z4x$)>ot*~HfQ&R5tnc}{Y{+!zIDT7a7Ra1$LueL~M1!4zzUGJTh2ijl2qf#08FA+d zbGy8ve?;NZau?S+C&&ystk`*{Mb`ZV5T7-w*mc`XeLeU1AB2GB+VcpFdFfrJOlfct zE?(1(Uyd?V*&p?|rigQfLxKruptPXx3pu+}C1#qw zup542UJ71EkMgA7`n+O2k#K#2t3QR$$%)6l_Tz;-hZr$d*E{NxbwKET?TkkXi^}E+ zMYPW7YR71L$fJm?aD&iu0CY2AD@iNlG5$e&gWpicfE&!;afXd7(NFh<+W$Yv@?F`U zSy%fTMI!EgrV(rngt>BNsxi-9t&*mhupgy+_DVN25X$eGW;n3GRKCe8={7|oV#%V( zRMn>dC;md7zm!5||;P0bz6uy#c~+4_qipFZ`3#6q>fyb*L~WygDGt;l?6(QlBj_D1$- z$82v|ePF2B7Do1+HF_n8EH*kwXxr<2B80!36+KgadJAbmkS)V|pl$^7Z=o zN;W^N!p&Ftjx5rzYYvBRQ#;@cp?+1L_PaSkN>>TU1PZQo$DJb6QUV--ntuIHI6PUe zrTNM@@kOcPJNAkh?>-vw^uGtuBZ=kW!CfRb{|u*hZMKlGnlaBS`D@%eZ$pDP7A2)uUfY^YTT#b*X3kKdYB{8C8!^L;{IaV%jfb5o>wQe zG>v4tpS8(}D%`w3ZZ+=V>g@RCbAuNFO-aPAeqL_$qH{G-$Q&=|4|DuYp99%1xlX<_#fV29e#-s^1Z6W`kaD-x}9`HE;>5a z=An4vQKQ-+vD>so(5mHvORwC+ZQb`K!0l1{7Fwe{+l5?*aGX34j&%r3YP9ut?x`$( zb!HPR%nUmW^Pc|b@k(hgVh#6OU@_`9aD+i?#{`2i*SE_yi|oP_af!5x)5SW0=cVE-X*l79mk}i6* z6Wj2Iq;JQnKk%wWP{RWTUsyRdn#s@WgFKw`9Y8$fWeKfl@kCkEu`Uec%B}UIt~=8MlP_{p zW$Q8Lt;tcjRRN`yD-%VJIqyo2c8*OsZY+J8In7PHE6I7;T(^nPXfjz~Q~Tl-`=kC_ z45qMPVF)iwDg=7xvoM)|pC)BO3NA1km*zPj)5Js*eE8GNOw(bk+ilSY5+}jV=7PI= zKr`&+n{WacT{GpuFY7@Lt11%B0p$a+39^lCm2>xaWq&M4C$C9Xt&j z1Sn8NCF=dXHnW|C3mQJ?EH{DQpI^m*b&TO&z+CXr9Yrp`C@U!osur;i;TwY$bezZwN<;NY3dEf-g~U z+?>s}1&U8fy-Yr0PnU?ep!pH@jc7_4|KaE&vZsWbagoV zsTEn%l;+G{U86}x1Yg49f~0`7VlCOltr?RpRwguhk^$HD1R%YQWO;><2O6i7KsG4* zLk9l1+6KhK3HOz`o4e&EFu{hGY5}^Xrg?D`AZ$7LzO}j9bLMF@9LPN3Tr0*ZQ1tJ( zdp}JwM(s;1_>f}wgv(IFfu+Y4smh}dp;PYXI{toLmBIQE1%%YhB4jV@W*0Wy2R}!M z_|xoOK2Qi6;-cIS&5PU0X~DC)@K1wv*M!@ycICbX>g?w6m2ro>!4}%7H}KJyJBHb8 z*y*jKb1jAHjQ$w6x2vEBGg$^Yl$_ycjpHwZKG(oP*|t@1OAN2k-+?67j^RoaoIGS& zcHMt|g6_W%l&N~yW~af@Vn>m1QL{k%`!lTGnWt&Yav5HoYT!rnBJ0E)`|1yr2<4Pu zyqc~d&1;4=jz3I&ACdJztI<$20q-5L`gV$qsA;I!vwuBj80pjC17jp!+L0=d-eUdR zV`utZ$dR*#?FyDX3}c!L1w8gSWK(dCx+nNhonQX;i)8mw0F;Hp#zIaEoUAI6?LO;q zX4bp^YZ+$=1(2I1u)8#oqq?gX+RpD(1E+H?=)v`!l#Oydkk>B7@@xVzq2}?cdLdPU zozii^sVe;uH#S>r;|~VH0}dt|4z2%lW7#{x*7Zb(X8Q3JS70SlgL4(%F1<>7^G4|3 zyr(eCzw$FrDdyYoM&ZSx^tZdZ<5c)` zgSN|e15NCj-+!wAu=od|`y@?7*k4A@FoH0c$g?Zb{?v88?#NN-a((3U_?M^V#x-Fl zhOr&v!o3gjhDTS#Xv6PSt|$GC*efY;JeruOf%h}I%iTOXcPr^zDTKNd;@jm%{ucY@ zcp|TO4hhlpj={^VETp*A^I}HoEaCd_>XxIt;A7#T7QS1txl4T>W1zjKWsX^Yg#Pz2 zboL=IqlZdmeHF{VQ;f7+lUqvPqXda^-Ses4pE;o!0voa!e&qJ3mgVX#t=DcFqaj;N zY;c#&M%_@$_GS5wM`?>zSJxus4)2{Qln};+7%!&d_PJQGe;});w+UTUYjt&Ix<`E8 z=Q;tP&Fcaog>&qzGcYv2x%P}JBnJ6`Dn=4%(mu5*T^B=>nA(*{;YECZQ^hZ37Ab(PX7KK%k#!y+hZwO+!K^kzdc=xT}|9Qb@COe|xx zOkne6-Ts5n(QuVIlUY43;**Thy3NFmT|llj%s-cpphotBp_2ucfC>VKNDv|<(*MHr zS<=4v$11_#kJkBXDTFHaBOTIW%(J2F4$Wo`>&HGE0PVxr^{0yp2 ze*5ZoX`PNF>vu3kG`H5+?{#O4yWPxAMOX?`zxC|b&3^Cz9=a6rZdYyMtaxY4#*W9z zor@k(Je$E`L6QRXPc0qeBi##lcbAx#u&cK0bO}9s(9IfY0f`Z7 zip8%h35yU47D`6+b!zd9Mk=k(@23+%TS-`?pFtpbD87t$G|Z=3t+i=sw0+bL9gLdwfW8$utBKWHuioe z=Wx2;pqCWwR_F82qzUB_b3&oEg&7!-(6zgCQCaQXXd!svq1i+PL)#;E<5NRo5-t!9!d0plPg#8mKY|!>>o~^M~Ri812)nq1WE(o%e2_7Ep zF;sIlS6|@-)iml)W`hkB{AA(+F2x7=dU7x?GnR+QSs_yi%Smzt;vRZdlxXyz)Q-RY zMXd)gWW9~+edIS->*bRoodHnh&HXbT#&+`>=VTsHTKy&CwT3|b@1b40`dnJ(Fu&}- zb>IP5Cox-UpJ!iecbi~pZLUts0*!{LaL`<&Cz>ad)n;q5U<=IhEAbeE>fv-1CFEe9 ztM%Lfp4qRs6>Jv)LM1P4l}R~E4;@@uE<5Y*AU`kh>rr~Mp#-XOqvXXl+iM*9#>gPye8N`Os(Zfr6$ueSIFY7o{ROftjM>8fU zvaE3xZQr}4uc6W+!_4`hi2!xu z`%-v_(wNhD_(yp@`3*r#Vy)+BIzE13(#H;eUz>?u{Rxf8$%@?}fI+*bFrk(+LbHy_ zC#SJA`-AYcZ(xZGA;?fbAgb~s7!_|DyBZ62OqcbNm){>*pA1}MnCPIm%tIH?KKKtERviz)(V*yb$%>U9N6C#8J>wz*v>SU>=O|@|iNwB1#HvLX*J9(LEhdl74_mx)PwlTfJT!LwS|Gj zuUh=)HT!C1H@iB?I;m>=dpka?poeCgik)BN?N&1t%@rrk)%RlqsAvut4GGJOON`;^ zCflU=P4H-vv&;sdzYbB=6ybdldKdAcK*;MoskoXUK1z%BKQ-opCqW^nQj-C&8gn4c zT%9Q{3HHx2aZ#U$h3Z+sE$H7BYX&@x^!a>cyDx#AImx#uG51BiW*&Ibns5r8yGO5& z$_n?n$(O+9h8!RdJqG1gS|XM;y*La=mnyi9>QD8d2n~b1Jf7ljfhPoM!M`U@pgJW% zhr%IOvAg^QAav~Y+=2L=n+-7U@9Oja^UoIZBVlsb4Nh=m4Sxsw7CV5gW~*)2ui|Rx z^|!Up;b5;kCnApGAUoMS@J$3I-tF{BYf{4J!lwBnAKRu;&6IKu5;D5mh> z>1|PIaCNaM|N6g>4bO?>;=w|ZeL01a>P1^V+BH$}I&n%%vPoL7^`)8BJDPM-mPDB% z(_BI2ZjSp3H>@TJY|A|BtTF4WIh>>vA}F!JTX6G@O;aI&so7+hIyE__ObLbq{W9aJ zm+P*&%ycyukal?6Q%>HHV2gQgN~rt%X><{?^}GQ_3O^Ed5{6t&6HV450-;V`zCJms zok|>;_?cf*!#sD5Po~Z`;UF?kAxgq0MaqQXRB3Jr@JHdR{Y^mGCC9KVdGKA->8-{v zERyTuP9}OT98~pY-t?*X)2lH?Le5gexKsQ!4+B|cK$=acr+{C!1T|CJpIU+(GY^H2 zwnbxQ6c}EpD9IGPv@=o>S0iK>t`FglIKRoZa+qk+51ZbE^N&;C5u<}LK>!7SBC3i} z{Q|Nh^1J%Qa9a<%f3%xR1PyTQ0J~+4?P!?WqKw;-H@dg52IVued0_kgFd$~mHL&~3 zu_O*n>AD=N5gVT&gjvzAGedtgXF4?=fDT2)6AU4==67gX52W2iVf`7Sz66rB+9AfEY9&|g=gu2au!C)`DDB9{4F z>5d{(P|Msfsv?hvOj=rq5731~Xsd6H&GP#A zlb+&{gCm`pAqhrMKmEvkE58m9*#EXAi<&LxO8&yGYVz$iPT6wnx)4mm#+&b;^*3mz zbDM`LMU}kkx9eR++s`*B*1_Sr)jQyJVJEiR$nSCkAf!r2Y2+ak4G(0BBvV%e)PjBe|r!N`F?gXYqn#dTqSq zy2U-st$P-6KjR*^-p-Bx`3O(pX53xscT5*G`CsbG>1PECt{UJamB-;0z3?<1=ThIx zV7Nz*Vtu{LsyI)q#kC!%#_$&IFJ{fy-6{6aI)FHUtN$<+b5b6D@&2uHeesAHy_$#P zd}MYI6CjD9C01 zq&tabZ@*m1(A$vz$;)%r^m^&L&6AMT5Sn{6z(L$JRI~Z1m+@he3f`0=oyZg0!y6lW z2mvAuXVb&>&lm6#IYP0|H_XJ)l=j+xh+G+*B&|sAbS17c(=q+{Ku$Z$tbF8>-d7m* zYMM`#48%H^wtwS%U4?iqP_wAmn>Whd!%6NmPCEia* z;ci(@fJSEuS?LN2LhK9RrHFk)Cw`m+`HHdaL~==2Pq2_TrSn9sja+X_t$NUt0}k&a zo-gPWP}6I0naiy29h06~oJ z(r(c^7VYQlxaYKn1c%?R-onrxKozzy*Ifhs>{*u-gNCM)mllvVbvi5wA5>?yLYb6g zoCcF`AxHK$ialA;lEgzg4f)n}@n6B_o=lFCs?FJOd|d(eAr@W6KAZ7AS4FFH&l=d# zeA#6hIUy>f$?uge>B$`ygT}SIO`%=wIZ(c>b@+R-dm#tt5jVh}4YD83lV35^kqUzs z=!||i2w&~?mz+ik*q-01U%RQQGy-K(a)x><8f3iYee|lLi6?lpu)s<`uWH%KO=|jk z#_i8dfD=5(DfCvGqj}_K&|l%sAL{?0C=fA3S8il@R9mQoAkUaBS4o{k0uWWznN6T` zVrWX=s$hKcmtuf?4Z3=P@g+{?G_6J;s80E`g#x+cGhT(7lOsSwhi&hLVL2213I)7P z!;rKmJ-}AIjK1By`Agpc9Um@%8wCKE(U~4D%IR6Gi@;z#S}_S-ppFS}D*kz9zR!-; zW;a$?o$!`t<@HRDw-sGS+-E!tsW^I=Jg=n*mQ-Ai-y+$uL6*-!Dc~b2b|mmK&aGKL zDLwta*bujdx^OHowr86_+Px)nIIwWwZvaA)qzbV{zBcv7G=7;3rIH^D8im^}s|y_T zy1!F6TjR!YJ7O&Q7+uN*OHKcczi( zlrXQPL^qcaP>!!7A8{owE9}aGFe`5qUct#OPi!j)$A_Clzc;g3AsyG0P0W66JMI@d zIt5mda%ohc{^O01&EOeTfV9t13!6}_)+HGi5WSn1(YPt?^ia^bh7bDTED&6C;P0bp ztImO6<-MyP7-p<%TiCG8IY+`q$;LiN#Pn(yh?RT;g`|NYO3J<{4hcU!^`(6+{erxd zb$`i*(ddA^icE!!QIf~(x{*k$CdjpM!IE94clTt|qo)gxnT3;v1Wnop<^XoqP)(N$ zQ?R~yIK4T}=ggC1eAfp1W(lAGuFWX0b?szu3pqRQnyg|GoXiu7=cm<)|LfFQMGX>R z)lz{Q&{>)Ok0lM?@uAL{@6--*LUpdcfnX%qf1e@^7;+Fw_-yB#A-N=c?8i7+-`(-5 zapCE2@RD`H+4rUJrE|IB_eZzB865GO1wUw@Q_NNW`8QsFaRsTMW$@zX;0io(dO~|} znyK4o!*I4553-E32-#RI`ZYzGd9>{&A-;Sg)W#>@t)R_hH8w&wmee-LIj+|V z!+d&!NzGT%XMT-u?-xDJGtFFpZisxdu_mNTdy_rf{eG#Q1fi!T zyEO~C8UF|r!uLZ#_(Je{0f9&DSH9anzPBcl)gCX45F@5`3S5Kx_k=|vV3gMqu?&_{ z`w~l7#%Qs+zO)7Os5$WwL?6kgTydcK@gVhvAZT`f$=D@^0iT+`Ro|ka3vmwmynO|o z#9wf|pzr*><2io?kF8G^DxOKtcI;d=o|znY zr2-t09JI6Kg;U6x6U8%(IgL@k8{`)iALUJzWR|iY-{ZJ{ou7Eu#WEnnvt779S7x`g zQogO^FicZ@ukm;6erHEhT-FOP^71AsPVYU)c+2`j=T|d97&)UqdoF@DL{o@8*iDfH3#4@F9@kZQc@y{`#b z3cUyI)me7SFxPjUH;5sj z^pwxvzniG5X+Z)8GTs!4%7&!~ctMASp{Hnp?5fRY<{i;33^C}OqXd@}y?TT~aYov* zhU0FYBo|>C%fIM+Yp@fgCz4<<+MP|}Fj44D3%Ku~i~0zB;1uAZ|7`?)77MCo4`KXs z#HOmQ&q~MF@gKfEnqTMq3>=@Xcyp~|lb1{~{JIaL&*tSv?V}Z9{M9Bdv|L{ftLZ0n z8rW^-70BJTjnaT46GT>xYUeKzw_82*Z2bZf`0AjIJ=?2i5<3n%x7G6Es}xj6Qg}7o zRY;$X7wnD}*0ASoWtiq%kYB|rTqPOZ&yrR@Q?oNeGQc0zEY~H1SD$HopvyPj#Mt_N zLEKSMGT<_Jb@#Maj#gD_wQG8RS9CbXU$oMRD)RG8$A`_0W(bpA|_@1 zNMp@DGYjHJv-`w>ocH;e2}hd#Bhczvkk`S;Tw0%v+K%|~JE_rr1!T1{+wi|=|ERO8 zn~*;hu|s0y=vb?$AAy-QoKtiH` z(y1TOr6OR!{LmBQFUd#Sqbh}gXc{1G2Z9C|d0sIJRo}}|&;uyb9R1YA;ZHj_?eINmL+>% zf4LK+>wPzk5bHMI{R{5p_!_O`o1}hIc-yU{Dcny-q;P5q%kGXl?>bBkS6f~G?NJT; zH=00kuz#b(zxWA@d+UmE>UxBaVd$1DXQBNT%#SF+*0h=D_K-rwek&>LA%L;gj!+TX z&Jk+2$H4vnw%5Lh09%{0DSCUrCu0%e0}l89RrVBE(bfL>C`L5C`2>GtcVsVPz{0L^ zJDP{VM?TxJw_kpGVW5Ki&C+R>ST>i07Mn0Cea_Rn19el`A4L?2INW^IIQOwTCq#0w zICeL7yADt^7LoPtM*Hp)Ir%UeT$(r2(PgH{WzF|x#@SA3@HQ|?i5Nm-`hu;fbno@X zm1oTbrI+IWYa&AM+9QPvb2oRbPdQ3O?f^mHf7U;RZ zR5n-++~K2xiwJ<99PR#`$7Nad45Ok170Kv;FJA^ok4nR17}^?9GwP6Z4fxJBny;C> zWYv5i=~^d1cYs7O#3hz!UO!91J5Y72-P_!kGTtsf<@?snnVUG{+&J&=dqP3_!zq;T zBb2zegyBtmPqVX0Y@q9O7R3^xnl8)5g52kHovvss94{&PnYoecn~xlwN5!3uDyb%9 z2nlH!DR|@NHP7@BKLPyn;00O4D{w)~$XPEdN9s-9h8K+}@i*Wv5!=BBXZNa{86V#3 z!^PUo;J;VB`wUUPq>8?hxx`m)rCSwd@rEsJu^OF`W5x1EHyB}goP#=GU+q}?9gttP zXHlQgOw0is&L?TC_tt(YY&h5gHqhPEuXZ$SxRAF*yk?UVii5{om#^+Cts9m@cCMT!ai0mA`9?x-n5*ZR?cQS)}BZHtpVnxQ*ie;SZ8Q-<-K z4{Uu7m*GCjHj^bq?h3J<@~JDgnrr}U9#=S8rJ9|fJ&a6QF7c8gr(afG{7ws&m=j|^ zJLIa=obW6}@!KM2&)f%2=tQ#0tRt<|-8^cLc3yxg zA`j?u=blg8Ea2YV@#Fd+ls|9vn!SLPi72aYSru2z2uarkPYBx#Bw@9Zl)Ntf?IiAI zXAENrr_%lY&KfF=e)5h~=EBTzy7JHS)9&s=LobG~C045|id?M^)R~;?hblV}h`0NI zsG3I|zlB>-5PvLAjRsAiqII`r0Q057!uR8^qCW$_!MY1oas8FMp;P;2F$*j$u!dfr z@=?lkqws`;bXdy-Hdt!^rcyzCUi6rKQf} zZs6i%`C-EIUWT=d9t7jZwVajDf z3%>IIj7pbTx(FCniwv5(glI_YehZa6sI65Q+(Kp(F9y6Qxu2Mx{D0Vb%b+OuFKk#r zL8V1u$t5HtcLAjqkPuKxL{hqu2I&?gWGU&Ek_PE+*rgj*Iu=-(g{AY|`@a9r`{jAg z2Zq_%VTPIWJ9(Y!f*e>;!j{t-5@4ler2|Ea%t}hdQ~bgosm>1U2aF`R^l`S^qk^;y zO&OCO=5}@A#?k;&VZ2d}4Q?+3E$Bub_J2=eMl;hGyjT}UHH=^~)OeQh(JLV#Tvq7e-NrG9*!2#Dz(b3XL9= zVLhlm6nzch>Ds}847)h`tn!UMG$D3bp827y-mapLNCkN|(Yhh|iX7imA|M9E zVJG2cB53%bx_A@@QqlHgydVk@_WI=FF#{0s1ouI6wV+6&qV5^o%w23%=-eOfp-+kl z_|lq0@&ozi)neDLemOl$=k14^nv==G31`ojFN)Dl^9Kc|{G>Y=p>Dng3aI4frq5F` z$wB-cBi?Y|=Now|DJvqGxZ?QN)!_zyyaes=#_**OY&8c-RQPKKGwX5u5YIadWG04t z`ySkPlZ+Xj~G${c}s(;iQY}3En&9fV(fK0J_7}pcRLfYQ*;Q(N|(U> zP>nd&n&Q1Bxg7wn@e38W=tL|G;qr}ks+kzkcXBL5&)1uE1I&xXr9VdLI4wL<8=-uR zh&{40xcpp#yEO@CV_AN?$C_tIou%~rhNau#%M*w%n3(N-IJ*AIm?{BdJ^$D# z5|jD!K&FKPiS!QVQ~r_JwaRIgwUAg%0PAtuMG0rAQ1s<7?!|{Y?XTiHZC#f4ZC}_c zOgHev&L*tYJRj;JgCr{peAOMhPTr_Nz99=S@S#omn`ACKR5%pk`_;i;@W5Ity$vYTyzb+1cgbyY}w6DG>*${e-sa>*YB4c_`iCrYna5ms)+5FoIUOG^Azr60w;i-= zhFEQZNM*Y1Dyvb6pC!Y}ooL%`^I~r8So=R~l^Aruja0qCFi8Qf^M}yG!0Lqsken+s zzAWxNkoLZV`cuBpOwH$Dy`FWxpz6?eb84YJ4iXKSWO z0%j$YTbYv}iD!+KvRk$!){zM2=MPZo(RIcqzq6;Ewc>kE3BH<`MmFwGFz* z-$wMlqGsN;tgO=wU99pcf6EsoIa$$xBj(63uxI%_w_nnjPcFfP;ib16v^qd4zMmg?pHyQ^UQ9QukokI21w)II90pjfm<}c|RFbTUy3EHuBD3 znuK;=;^m&>;S{>+qk0Ce1mcJF20}pDjg(S?AHuV;<1cQaUuBPd>v*!hg?)nBe>gBL z{O!EGNox*vBIHu~gS~K>uz)8%=dw%x&;raXKa`jozE937LVD?>#$V4I*z6yW_71A@ z1AT>y+d%4w4uDUko=S?x3Js-og2&%}>g;mV+>QZyk`>{wa{tgDA9!&-Oo!@pRvLu^ zpDoh!9HhG~#{2^etF~Stv6)Q)Ejf0R67pJYp4OippE_QOEU&NfObAXNIG%VsCq=NZ zM)_$kUv?kA2*sptH1;&t4=h92^4i{`J-dC{cW#vmGMURz$nEv!D5QeWXSBN_9!yMF zXibhwbt#8;xN}>ljjJo>pE$4!@eKfS1)&aACQyn0cNj>3Bi%TdzZL%x`j)GCgfFer z3oo(b5JA|K^lil34@^(_anU6Dy@O3~Q#~*KNkHI16z@;=q3Y$B35Zu-31vbZ@a#ud zbdpsy)w5T`U1<^8r!A5j<;gzfqi$l!S>%~Y+!ry_5|M_gj_jYUO)i#8%e;>l8%xS8 zZ!3BB>^=|MRu0%J45!cij9)Ao@+(oXh?nxX#Zb*kuM72B&`b^aS{?B`U9Bz&{(8VZZ^yqP+u5E1 z%&T9|PRaYyN_?YlFd+GWPtaoJr~7$5ynvI(+1g!uKFIydFfj*p#$2=V{aP&0{SNk| zvM*!@W0#2%Eoptc1Ui4E*IY}VO@bD;BCxyk?It1E_jXZft@rqBH-9_sN1=mZQYJHdQ?WjaOh zkODBlX=XsvA@05^%=Y~L^{x&oxdZdfG2O|V=sWWtpET4WEDDmr31M?D`_uYuiO9N| z%|#COZsfk7KEuJy*-~8%{n7>g3hF{e%$q309sk0Er($19|Eu}UV=;N>i)x}uch`%$ z?g9d9<&rH@S^Q({gry)*V(FesE|+^DGa{}wbSIP`vs~}6RM?%0V5_+IH}Kr^`O$?w z9pB3+kxrDg3R}(GJAa^OO0&gxtq?Px)*|L(4(77ri2)5>1l#mMHM%+D&e5Z|dEi{^ z=ADZN)r!k8)^Upv+`)*k9j~X5y;O}mO_IL$^YIlAMLZMSoCHHh#bZ#MDm^8=Gz~c! zD=R5EE33MlsVQG~(8DgKr7$GITv0KJflqQ(*4*jayx(!uZA>2~j7*llm&my{B$JPU zRZtO{bp31Koy%DtHM#hj(FbXYizG|1cBlKJEPN->lS>9^>{>M0J2Zvl!^E^=XDD{E zG8rhe{hcvZgel5tnK81D-QzKm5B%G=mt|pYRnzZ8vlQ|bDQl7)Ql>BW^;@DRcHK`X z4oy6ivuW8^)W_~SI)o?1$=(7@qZ9jtVo$c^98_?&qL3boLJ`CUb&(d2vGSh!vXF2) zm6S8AFgM46SqLKk{gQyU+Rlm6{isA!!|wJ?Q9wZB@f_dUinixkU0c=$~Z|GL^zBYfaO+XFM^$f&T9#d5aB9p%lfKl?$s*(+Nj7urn5x9-?|s;n{ms=_Ymm5**XA_Vze@2JpmHVh8vZG6^;udy2-#X#x7Lf z+S%8mt}Y0$9eEVc^mysTe-E*9bOhXfb+x-GG%2{4GT(}c_df06Zt%EL*i-1&CXg$i zyV2OdCAfv3(v5eCod`jc$Cey1mi^{Z-1Je6^+I!XE+p1Awobz=S@CzMAO zw_TUS-X(e3nV+P1zsk5BXVcDNQ+7#iYn%!d`X@fK5v_{80dqFjEROzc=p|$LPPlk| zHJMq3hK%nW1>@fR<+B>5SweaPcs4OQClG;ow|sIdawtRxx!IYL|WQu8z)3{{~p}K6(Tc zF|22nSO$8f z`W_T~&4d8`%YVwhvghP5Cqv~b>zZ;_aQj}_PD=dD36$R2nNP`46XtNS zguSJsto{`|oHMr&IouRdS=YvPHUOkMvip^)2o)RYe-o}0k?r;BH>U)M-EBnnZ z%^}p;@<}2UIOw^q=fV^?7qrXc|gw zbmm3nO(u^A>uv9Kmc3%Peo?Z8Ry0xSM)+$X+7Do|o3IEP4TI^A^{!CVwR^f+TBx)I z%w^g{OO7$JA`@f{Ea`KH7>#>#!x5FEVHSkgC=& z-qbCIAS1)dHI$mkGWNo|)q?yb>lekpAks?(5m|^xC~Ccvuh2-UvwO2@L_F3HV}BcQ zjUD*sDg6MI-E3vv7G5voOZ@4ZD8HF4*OoK<7T6K~7(iaObRMzvhcB6(5y2+42{V1X zuql7|0J}T5#4=TJUaXM#S(@GadtK16iW8gTcT;{>(*R(48UBu1M7lR5vGKM8cpVTw z;HDS-HhGc~m+s^mOWF731#E&q$4xwNLm)}|YV9xY*%+srL=Roy z*LE|Uz94FbuATJge+`|B7Jjr}#Z?cnzO{c{;*x!_xaCh)$n&<8(IbcLZ86)p<$HaQ z1+}~eP4AbwXjgs!-pqnP>GO}1@!laoyw1kq*liAlmxv3^$TrnjPtMp9_1Kb*Y`S0x z*Q@6r%eNpOo%(*0_f6V<(dAElUj>d&IC?!f#K*060XD9z0$H285^i0TVk%o}?J(mS z#oEIv$@sw+FP&Q^hG&}P3j5dRB4{XQyb1++HmNou%?Z_4$sdcQQ`XJWrDvY5FW%Vl zKZ#7X{&Ep=Bi-P9RqK7)$98l$BA%e)dq{Bc4cNSu7Hco(RI>eJc&g?_YTf?+?rd6I z!%NvoYTNwxW<-&}r8806NmW(9`sXtmUUlonUw{d6*UsD?_>OL3H2hQ^UxuWI5Bgl( zrw^apebnN2mqA4{_WihiFQZw4rTKEyde{Zwi@jR_62;wmYS05UCazL)qM}YnIx+P^ zV!b+RZ1tp?!NuN>A1|4r2aVIruX`SCuxS`QGl>Xsc|HxT=hccevSrdowU0QH;sSjM zbxVL1`rqzDE7DykVXnUN`_>;@c{*pGtXJH2i#&74p*k81b7($YJ$uRLPJFoAG1}+c zizw8J{RZ^WA~#Vgd@|m`Qx6&O%^Fd}j%n9qxS`)52L0kE)6S;X+>PrFh8YQ%RKiT3_!9n9q)%SPey0+ z&(Rb5`mKSWSbf&E)8fzRq)&q_30(au)#Cd2E3sc;UEO>Km}x&j8w6u-8Ojrq|Mv!P zR6PjE1y(O?timyA6DF*EQUho%=X+Hh@wdYCEWFBU5|V5^M>;S?mYmMX*MT#}Jn2)G zaj~+1=lwdH5cvu4?$qB7!LhJ0nJy8^kCeEKTgk0YHn|3Fjcq{84^TlIQ`8*cL-*or zzk#1IC7Ouj|9q8HB?+L5foHHoBU2&|$K1ik56NgHf7oejByy)`>NhxPqu_|O(z>KJ zm%LE{Xm~qn)Hx|AG_tE`pML$ZE{9xLqqcaev`KYWv4}O5ci>_3uywg^6DuW;p2nF{ zgVPOn!}W$s!_o9-Cv{XJqRb%HZP8C<@pjp#p~%rYwIUB=w~f_PA77<2v{q})!%W!w zpfkJ+nh!XZsKXm{jMa9oH>L#F((9HI1Z!wFj+>o9_GXL2-#`)qri+78Tx`+JSNmQf zeg;)%P`5=7O;m%<{-x&(&#UyiBj(<-J-PtMnweyRu!Q08@NoZ_Wr?%-qF^;}v^DFf zf5n!pfDliFydJbDnnuqu?;&OomZwe6f;#Cr6qTN{$|`(M9D$^Je53&U5Knrk^Jcf4 zX+yjFT09a1zg=G@K5Y_WuZOlV;fv>+I4r);AV*RcEfaowha!TKZp6+l1 zz7@71Hp}aeNsk}ly%ux=QyFJ>#H71{%wvWtEybZP$Wle>;+M1;O>|@{A=te%P_05l&xlH)& zDp%QpC>Za=I~Ik5DjsNfZlTY#T-WDkE&Y98;= z(8)^=i!JBYQDsJ2_^kb1Xy)5S=&}U;h>IpAu1O1b4J@U^RxfeCKjD;MBcnh^t!N-l z{9{)E1=JUS5aO#TyE`WcqYE!;rnXDY!FD*0#zbiFi-UB z((w~I`1OxF?H@%t6NC?C1=Hawm`+!!*QtX>{Mve-tI{L(%C>WzXI-0ETI^KjT+}qC z5xEn40145y0_i*S8&;76ds7!}1HG|BleZejKEHA>GfbI(-O%U1ktzN2pQw7}$QKzI zHhz;jTW{11E{LX=4dpkqHR-%|K5=a_!JrP4(xFEA1belW<7&4F)r{-+0nei%gHO}n z^|ODCgmU$ln#d3neI?9_c%RmeF%2aOcAa1kC_*RUN0+Thf(AaWd+DvXkl59*Y;xvc z#jUR{%X${Pu1@tXu3@$fE~qjn8z7OO_qQ+w67tMIiqjG-WyRP@ zdM3R;MU~*98$K=p?}1RW7Qb&_Kql3xhOuZTpv1K|CYUrH+7}GZBx2ZenLkoS$>$NS zVFJmfSwI|>tlc7^H2VzG;#wxgwm~Pv=M4thU4{#tCuDMmqTN?u8 z`pz(!ck|Qf>a76$)0j@Ng`v^d41%+wdUje5b>sQ!T%aMLmNZW&U;|8 z6((?2`({rN5*a1&S{g`Bcl=A*aMHN5^TiLL%twcuTz4$gZ9j}xAMnP?v2q0^f4aF@ zx@%FYO`4Am>0>nez;mc*IvR-8833Vgs{BqzY@YU(7qSP2#n$0Bdf}UN%2PLjJ*0V8 zLA9!stX_&`z2tRl9%B!?fLp|bVSq<3$-9^vvw`cXDy-iXTYCvSJgVu;z{!CHg6laF zv3f@zh)-C6C&ytlP7RBbseRmyH;B7SgCWqsgZRss#7axG$U4KHy)}}rV=ZTi>6Yby zg!$D#w9|jJK!PMty05*yyB&~`c}u7+=$j#HRSRlHmvG-W-X^!baC@J^@?9e8yAP*B zLg9 z<*vs4uGJ?2o;(Vc=U4k8zfgbsYp^RO_q$?TV5@jSX?&QsyY1W7o73QuGwShC#!KG@^4d9 zPBZRR0yE@F1hF)AvDw;B_eHl35wFq2(lEWZGAv!{H@X zV7YZoYpzS$$4~Y4=0@82?9>%|!X&otXDQdnM?c?E?2OsNKeZjG*r;+Ew zu5ya-Ib+IooD~nawh#N>{xoRd`JZ+LDaAKbo2KB%=Nq4l6QpP|y5P)qoZK@=L?nXqL@Av=0~wV&^uFk?RtHE)z)(1zyRI zOOTPBya*kT3o_a0F?psmr}v#5x>%^+ z90|l;Rv=2eNL3ok14+#nf?e2AXD-kCgA#>8K|a9~8CYG^gTY8#7T{5{1n%)K-Hf-o z_}6HY(HDv$JHoxkJI~G(&PVUlAFs{yM8Smn2=smbC^vnu4~0N78ICP{LQW-#jke#> zH5>f-E#te54>VgA$pZ2@7SbS6PdLsC@Go9cwrJ%@X-@y>?ZN^1&fH5A=88Nb&A8F7Thce!y_4p%i*v;S3l+*ui1T8C;%@x`sRrDuJU?QPJ)ja zcqpD+{Ox)&;PG>BM_Ny{*JkRNY!Z*rsLP)rP8W9f28k9e~sf9 zoIO%msM|6gjiKb}@83?X?RBJBZs@`6mTd47uVtJ-wosXiaiVTO%g~E&;)r*D8Ujav zlM$$=sws{m;|Z9-oA)bi${op(8ozVZKGH`u1b}fmwBU001Jxc*HGF);o7qcARy-6a zwZifiR6I-@Zng}6^g4=QYrXSCYK}cIZ|lYMSBrq3UGGwVA~e@JQ`=r7F5Rd%obQ(p zNValxS!o`iHCuPAEx zKq%}RFyX?RI6G3@z?XK^nW|)q7MAN5J%YW-Yk-C@Z|(Rrl%HL^K}GA_Z@7lhjDOy; z@;S~}Sa^k8b{{0U$2P6&?N@=Y8h~98{48uGIaru#-sO8t@aNEF{noT~kc6VPOgF*2 ziPUY15bXV^7;drF;7!dlLbN7`OADz7aKtqlTtcK z)m(*NfwMCmoLXBA)wkO@_|>~Nw{)x6nzKj&etzTSodhK^Gk6rdPx?yw51~3KxTmkm zl4rsd*2*w1wbo1zDr zo(9wFytms2>-c`B2H4+rmIlT`fw-GOAMC%xTL1oT&NUD^yL4IW!3D^R5j;1!rON3< zw$Su=Tu@?gil>a@HV#{#{n66!@3AtUsA4jtlF-tRym&9j&{{4nj5&@qm3Xq!yUB;{ zW-v)MSa)yfYC(E7qI+Eq=5zG16(PbnAOy|DbcBBvF@Rd{IxA~C#=P*~t;*nBsCQ$> z%5VKVJFuGA#7Jgx9+OYA-9vmoO!pc?Flp8K!x6HhAuc4O<;kE^3`EBM4gEo2Nkco_ zxeMvgCr8cq4!30K4`&9@tSUAdINo%hXaOR@AYpWzZ?n83aX3rjdCA|qG6L59DowKX zfz^zBLk*&9aMTIciK!#mT2!vky^bRS?m)o02EB+lG&xCI9kJmqVNnXXYN@7CSYj)|17N!$TR8sV(RlCy$zg;tYaINlFqj&Q%e z&i;|;&B}-dgQf5sgOa={B`K}REoBdUH0MKltcIRePc zym&iW{nfK1q>wO+tUFB8oqPN1MX^V*bFhbdL$ejto_E$z8dDlO<%7GDmc!&aLU>7n zY>>XQ?iElMYV3XWXUeX>ANJdHPrcC0c8_gWXF`}ESaN8l_c%|cD#z<(r*67g3f1$f z*aF&;P{wq>LAaKdM%}fhlMbz^C@{a_k~M|zXQ@8VfdOZf{9c9HNA*!*TG3+ap+A;= z&9OZ?6wEC^HHmzSj*9u;B``k9q2$yfpZDL4;JC7l@ikLU_{&&js>Y%JO$Psl2v#~YfBmF#{$d`{~()`D82SL zo~yh_5650uNuZoxeZ`y1T-A~KcC-p7I(+bB*;~15e%|n-7$Ykf<;2bpq%CP3o{y!k z499`ms|FubnYSZ(AX0BHu$tq*b&MEB1^MH?Pzv_#proVK1@7$4Aaq_?ML`Ex3-!~Le99Y z&=nh!Nv~M?F?4QgjJ!u_p%|xTUEUB2n(N(1GI&mjVg@%e(&C7T0mi6AB9$7tFlW7c zmF$!Y+6W_jww?Fr`?{tdiTU*W`lT&GL5Ju!L1IL$NtEtB^DK*VF^!}oWCuI8Wh%NB z%gz5)$tw6hi3)PLt-8Mshdue~2itoee0xVKqrLA5;YHD-wy>}}?+lm}E*$JI$ks%f zJV0=-j5=}B{k>C9I4mb3lZqLziq!7;^B6+Z?b*0b zx>X^;GlxVv%^SQ;LkyrHJh+tZ_5C}JZ1FMwKFdFZC9j(I@n9i&0jinJ)N10=d)nJ0 zYAzN=*Jf!qEVS2*wqq*2z1NK1eDvwtk47$@*t5Sl2Zq0Gbzl4=6r#mrUo=MG@lW)_n&UISS}7_l6GNClG6e$zPuCgngM_|&{=LD@0KL5fD|k$1bo!AZImc)v;DiT2X`&&Wth0GUUauJ&AX?Iq2S1_)9c zc*tu($PVKhdyTWpVZ%X!C$Vp|J+R8^JNr$K4M2L|w#Q2{VX7;vn+*ziygH|a9`D!8`a(o~BMU4aT$0TVY2_lb%Src@=DEa{QUnIfB_CWdCKzVDNS4yizQ=5RTy+P|op9`MVmOWeBxv+W7 z+uLRNIajsFuW5f5=3=i>rngE;LxueKM1>qpG%zM?%)6W)^Ezse%vn#rhhFF@7r229rEV|P=z)3x#Bv%y*RqTA zsou{09;rEj%%F$n?M;O6ve_};*;9ZHcMsGf>jq^TMIT zek+Dr?Oi#4LS10Ue0zOeoBa|}*W7R|5f2crV%Ohe?Z-41_BdRKCH0UFr8l`=;r=B( zA<@}}RwVB_77d+=>e{C%APnT^H6_D#%=7J=5>CIl3_ddrUXs3{jKTol@l%ikcjPje zBamG$M-Xw!7)4#YBgQ)`j0BOl&(I;$fbxINa*4jgu8hSaTJg?t@Y*uWao|k<ji% zy>b;7&%w)5d>zO~s>9=E#sHNRV^Dx+!n-&XoR`R*B&f%Qf!xf0AsD+C!-*XEIc&Tb z1Wih+#J^i@h6?Yd{q=YhAs144w)}g(<8@~+)oa}Dd1a+WY`pWUEt|>Qifl}C zZNGIUzC5L|<@OQ&jq?@kh!v)p=&k6T!*KcuWlU0VAH-p`?} zTgPdeXI|VjMxRhVELG9UJo!j^^4&sqg4Jg;j-0%i9Oe(|B(8Et3*DYASqF5qVECAQ ziiSxYWB3Zdtc$Ful!DC#ZTv1Zcqby}DX#7Ln8~?@uqd;3oH=+QQn{z7xY@;J=DyYX zoXaEc*1r+G_)q)q2VQJB(u(fo+0wP+;oao$g1$>&POnyiZb&`C8X*n=7j?;r~8;0+kZpd zW}#d<=n48KNz%NLKzC9vn7EsN=4vx1%0?=vCppob6{=aLTfzK6*cHY-hK|P9dl}N) z?b!WNs95BGV_^so#3C;Wm>`yg8=pV$@Yed%oz3(7)}*qSAgr1m0q$)#45Cp~?U45m zZAfajcu7q)J~;$ppL&t0Xy(v;7L+o+l^$#ErkBFWZT01D*psMGP^d7Ql_+oUh~m1x6oqdoN{a0n+%v0e_mV{2?aRTw3c@1=B_J9~P}GjC<2s^@B^e zM4Xpu=jckW8ug1iD1|BFb3TGKP8sOhG{#1b zM$2@7@yV}HnN;Xn^E1=@iK+vI;ObG4a3z&?=6T@6Q?Brgo|VJfgMGf}4Ktx37w;Cb zx;|R^)$~a>5IuJKvEU%Xfrrw>#^=Mo#q&%k|74i$P!7O^Z*#2KUB^ zVg1CitkItL<&j!y(+QwI7iV{mObkuA%!&FUBJJC5YV-ILs=^l}(`YzXd=luOYaS`y zBR|TE=l^TD%PB8kCq>HpG@v1@f$F$9dhY4xpnxXVy%cYB2mb5B99)MLkO<#l*TUQ! ze|plU&(+*gEv09>AOYRxdtt7mWfeTwe}7367n_fuc(6S04haL(AIRr1Ze(n%T!s~c zPbpj)uQTczADz~t301HEb(^F2QH*P!1wg|Q;q8P!6LJr?@jB%{@PsD9aMH)Vz%6?P z%HNeOxQUpt>B*%O(>Ns|%q)cBr3~D4_8LpR7#L`)y6G*PC^lLXS(OUpg{l5XxBnd| zug{sgd=+W#-7Vi+);(UpzH3aY5b5YBGMQKywvjGhESylPP6*Y*;+@pBx15f*WrA~< z8;YHgbbA)GBYoh)!6wE_a4^~3AyBAdA@k|(qBI2F%anRRUWprX=6@35@)@nSB*aD+ zQEt(pWhttpQA2$B^Y4~xUe=0oKKCAvZ2KRYr^#Jo^2Ef%WOcZun_kDV1$zJQcRxc{OYzvR%q`*2A9c8Vu@J-Twkrx+2IL}R1rEYYn z`}q-bO%7L}GSS5NwOO+F02$Z1NBW0a^*lyM^@i%%cbl?So9HsiCf&;o71}n)%-5<;jjleqdnWj1DPG|5Iot{nGSgf?>c}oS%B|;v&&Ax)|1g!RDl0V9DT7r;&Fsf3sb|AwPfBO zg`yZvrUNErMXh$JWa4lUJ>R56?!P^b`Y`ZortJE+dK`oCgW+bu-s-p}X#7c=Vd_rI z-+P2_8I>@_pEIXfINOSQkH11n-+7s+v6eDbL80H^WC|kOZb? zCr3>_E>^C5R<8V3XM9@)b6ZX&7HSKjp4`shdKWJM!RPTQZK(d|@*w}X$KhG>zR z4@b_*8`O~7;3k+}rR1)%y`KQ!k~CFu>~+r7;nNj`d$7>P=60|U+d6!3c6w%WpE3{? zIeY>h{Bw_xPAUYyvgPKDl_(cQBA#$-lhCM$qn~s078Zc#Qx{{;^fM92b|eNX-}f~; z0Dfwf+~;++Up#0#5yCf^ zlxyqJF33D!&%1HaZNoBT-WBRp=;nS__)vP&A@_iDXWTNVk=EWSqT)14ZPkIcyx@Ta zjGCV|0c3B}&DeR>B7IZEknuCxS#f&jN2L-+#4@8GXdGBS4d}P`^H8yyZ|1H$@Xk9E z(_GmBgT(hUSWn`ZRAA)W0&uK9mGSR=ahH9V+2E`GD^r!q_dXWjQxpKs9h1{yYjjxo zwx`u?`N-(a+5@iX(7%Q9w96N85%N8E)G(bju76oyd(wY!5suZ9f6+8PMCf<3rhLiV zFVLJ{ShE06wE@5Q9q!-I`gC$BE=REyS0zUN7m%<&<@_%YRXlMm=hx!)-9FRfDw^Vu z_vTtJiR_d!@T~s23LHtPapr3C=Bfh~#OGrct_*rlZ$`|7W}o{YVvNLNTDr34m*{#I z(y>uuzojL{21rpUn(-c(lRIo{UHV%9L|;~uS2Y{I|HWR}nsfZ~=lFP+yqZ@of~GD$ zYMz`l<6C9#s%kj2b2w`}Kc83?_s895iOd^C-@`uMwbQ-1%BCh0xtYC!0c>A%ckO)9J#N?6aX<4NV9Tqs ztc4TJETex3+9kr1>-f-s872Ila6p-vr0O7KET~{W93L4O%tyV>M`STNTTx3sd*|>A zu@iu$F4ObC(uxqqk(h9;8*w#WO^L;ONVlG^26KNTcPlu4;{o=S@@iVS>5257vJL}N zjc#y7&e;t}yN;rXyUJ)5O>ky5q^1WRBSox$0v~-G2Yw4IuZyv>8V5@3_JTF%*w0rG z#!!L5NDJ$z2LS9F>HyAKnyaCo+FN=($w%n@^v^Mopu=vK{}m|B zU$EuLj^eElQ-OKYvn9VfpShm%e?+0i6Hj?}Db3r?yxJ^ypGn+ZjI5VqX;XLS*lBYv zIopmnDQ?H2d`-hi%9!nDJO1Zx+W{wC)q#h?yM~`6?)u-ba0|g5jXMc3M>yrY)7sim zBW3=66??icM=qE!iEBa+M7?f}J21SNxYII%CvVA}NnG^F^ND+S-F!o9SYc^%kLJ9i zsk~^YJ#$g2wR?#T{%nKjXUg^Yc7oCJynj10coeePXR zRXQcHuJmGfuQnsv>vCICEfF8+vp#l?d%~Z;C;=E)-2dQuc3D|f#e3!DHO>>cR!Ts3 zfgU2#-Vvw~_-fPp-hQg}o#m3?q(|MEQSTglt0e2A%g5o0-^q(8J>fbJ&rr-dS@=2(Iv z=yT|j>5~3t{4$iEqz_Uh5#)_~6icDl{RgkB4rWb@B$F8Kjs}oIJ--Jtx(-oC^{Y8j zvvow-;5;c4MuHACYA+p~Td6{oa~V}8E-1y_z#%)N$4LV(GX8Ak_@bQsXkA-{+Romt zX2`X9JN*irpv91$r1k!doLO&j&}+b~i(NeHIv$!!kxhSZa+e)SRbZ~`23R;ata{Ot zW={swd}*4nOjW}vci(*;8T7)tU55fmNTYey+5AQRZo~P99Tt)5~b62YxKbUzR|*xO`z$Z z*KZj14F7A~-PM0#`o79+4}3>~sUWvRFpz2vt*=VBf~>91CpeXY{(w+_ys z2LNTWIP0YhMN@&{cv!6(PbO66C?;)3c`eXd?_$%I5SnaSv|%Zbu!lcq?!Tt>abs*S zRhT8H=TrF^Iq#oLoJIT?h-!KRTk=8GX!s$gx7)|vjO{}4&F@B$gp=V{ffqNh1|m_X zuO%)kSKo!3J_?z;*dzAe(a1k@fws;LCog6KmU9K55pv`wPNp^rJA-vkQ@0V7HCRT@ zbs8vuY40k!Xv7i{7q-2PpjABw{~TAIzY79C7!U5P*ols+iDafCjvN%*12_HSD z>pV>A9rgW%_=(hvx-=;rkjD$GIHKPI2&rl}&~7KSN5WhC4cS--cCcs;FSjFR)0iQ$ zirwX0Z&wd`I=cR`U%dD?4pHie@G+^)Z^X*ojy?_3yW7XHU(o!uv9dF*IiUiVQuBhAh|%B9X=a(;p8xo?Bm3s! zr0;xu{M4%kmn(&f3%1Mw3xoM_aXe`dml~aWdQs9s`03f0`)cjW8A{AW`X!-Iou5tMlKc<7Ys{7ehiTDE6ctDpA4-u63XbLwUf=_t1~$2*`0B1y|L<)wUffJPpFE3YF%INd?xT4Wqzfua#gi; z&M)6DQL>6qbKyIikXe~4<|ft|@GDg^lNlYV0epn#QEA<@S*d1@d`mvwsjZ~=t9E0~ z@S`6kF!<2i9r-9?9>08VdaGD_yy#DSY`yU{~S(=%>(#u0b7U4AKV7>zlh z*oPL6%;g?O2Z2Wi1ZM|WI7%+{&R<6dcS9$o$frl(wLKv1lT7)N3g?O}#A6ds@EjSz zw6xN|9^LnaXuu+fkSXNUtZvCtiyBs~JMsB0xx*Q1WMgVeXmsA)(++PU5;@p+N-OUF zC}s^v0KZT>&HbS7jyEnr%P}HfP88f1HicRS0oe8|wMq%_)G0vmcCYrs`+&du+P!nO}$)rwV0 ze0_tTFANF#0jR&wu&kSiuN`O0T!;qV9h+S2Vp2VoPHt<#L6^~tYq)Ic2h~&J+?gx6 zmG93A9d+~++#(&)f#DXPqIdJj9JgEX{!an=7MEE`!mHIX6~uFBW3vVY?WyQJl?$+$&3i_@mtU;MEe+zQBJBGb2$odO#LTo4bv?Xx#9}m*egqFY^QTW#Dv;~|a~G|C z2ZbMkL#N%RSSCCwf2zYjG3X)VzVNS3;LakfrG*i6{ay$Wtm`67O9zz2BeMtz$^p*a zkwavT&HfDmV`SS3k`@G}PWDv=;benEikm&x85dWoZM>o+^z1-c5Y%2;v?q7y<~K(L zZY&*?Hs<}}LVC!$1=(-DkNSi5ylecOS628o4$0>dvE%jIMM83tKhfd+ zeQX;p7M`$7_58(^l}uV==?Xtb7w^5kcCDEX%ST9JlgB*kl5rzRVFVCjdOu>GiJ=2A zpuJeye+eDUhr~8X|8mu-4QIE}gM^Xa&WAfJ9=1h_L+bN*v(DB|(<@rzE(zlFeKnpx zpL$1gII!COjvPWk>K?$7PU#)Z8u*{f^YXe^SD}4R-b)V~)U$II+t2R*uDXYzqBtA* zB93&Y$K*yyw7kUfm5q{O5}fvpodKEf0-6vDOsdn$z&BNqQTN;U`vfE7Q;(NyiWT4G z54X``Jf?ItAP7&zQ{mq$a%PdSDC=-?4^$VdF4{r^4T=03<*I)dKA=f1t>~bq+nclZ zjZuXe1$*oIvPcn$!gl~{{C{k{WmMbS_Wj)!3T^SyLV`mm?(Vcu+>1LDFYXSdcnQIw zK(XTP?iSn~iiSXOcLGn&J?Grt9nbjlB4p%M#@OHNz1LiGeip~fbC8MLmq;ut*Yf_w z+vcjO%S0E=vhQ4)W;r&!vih^Di}ANN5cwuoekQ(Hd`|{O&0k_({2l@HG>y|-Wr{?) zD|wB;rQOCaoi|0hRnCwG`a{zaJW$NZd!n1HmU>S*|7&8x&8W7kJiX=NoLrz(cfe>j z`JekACS0^U7F$bdBq+#1L&>!6HH- zGJT;FObVV>m09-6vn?cil5J2bqOuI#-TpCFc^Z zUGvbyj016wfAWWBj*K{O@et|t71l~+YbPZbNbM3yweC=jm@6$Q78fJHZ9~}dHsz&t zw>uGw=m%kj7bZeuY-JWLQC8$};qt@BUY3ZMBaKNYxLi+erJd~s2aA(_DLG>n=tNJh z>s;8L)+L0HAAtR$`RNmWAI;UfNSNpONFNI6Gb`(YJ+9D4r03u`3OUrQdh+r1=)wJl z_Yw9;^LTRS&ww&2TxOl2@~i!MBfA(sc5%DP8*Gtmp-55={zGjHssJU z?QCYfcC)$ji8=lr6F@IKIrg8QU6pvoK}+9GGwLff-b-uLi9}!Sau1~V5VpLF^b#iu?*DTv{e9viM}i47Gh|o! z(5U3Y?dT`#FES%ydCJ*&Wv_i?8x*_TF-|OGUE#*wiY}>5IvJ&-*^R-nORw!*1My(%`1pVgpsHdR;g#7kdkj0-^PUj&OW!RauqSVmd%I zHMfnb*qT(^gtm0BXZ**u>p&kjkOW?Ykw0u1t6e4a=|x`$wwcgQG0VEQc~(itmMWP< z!BWc1OVNX`5q3Q>At$(qFc8)+Qkm|K$cZPSJ^3sY9)EDkSMKz3iapt7it;~&!mn0@ zMvp=nR>gFG%u6)BEPp*&D=2rZrP4~PNK6=b2O*cDhJ8jFT9AKTLtvMW3=!mG#)=1V zy;2JQNSm(>SSmtNkiz>U=+m}e>ecX;$eG7b6|RAN1YylK-IP*?4}?3ZmhH&P}MF7)Chd`1|+H=IgaxezxV4N6)x-_Xa_4!vyq*=9K3{KhQX7=8;X{%-*HhrL< zAyTBGJ%y*S+J=&6yzZz#x!ECy^j`AmR-jBovBO^|_`Q+-9e7|X_z?eG-;b$(^y8$! zf#OZEif`!nxkj>(U}f2nQjZ2k7qVhbVVjYsQc7mv*y+JTi@El9mI(^p^@fPgmnG zSEV-ztNx74OZ+&sH2KQn+SdF-DR+5CTG)DU7Nkb?`Vu4%Rq_x&G!YOl)ecXML}VXFN)QY;mb4o5Ee69r zN8K)>g@Sx}iRax3+1)0wz3<}1Z?4q)gj;!b=bU1y>myijYDzRp;e^*3QdCUT6{kD`S7XQsR*88{~Z$*R{k4@pUl%Yl}N#Lz>f$o|Iqp` zxq())zuz#w?lm* z$6e?s&-nPO_MjqBOVZK^Ij!NSCwx;@g1uJXt+;sGbZ0z)w*Zq(*xj#hOM4@W7 zh-*>bHMNejbd(qWEDL;-XV}h~OfXR}lWTCONBs?7#X43-!{Ul;3CK?UB{{ln{0&Kd zIJq!bO*L|C{-7_0Svw73Yu?lG)p$#V({egz!e$^hA_*BvT8TwQe)=F%uCQOMIRZuN z7SC-lqa(^=%qDH!b4mrwbZ9ZZStIwP$%BQH3Pd-EljO4papXefTy)~8_yyRl(Aqa; z3+cPk*4Cf0=12(j0i9eX?H&#qKT1OZL<_BRlTMc8r3B4y*;^tdO=hU$G^{1c*F);W zr7nt-@vy`V4dl;Lf?Y&PBLO{pZWDOB~f@<;L0o($A%VmgHfbg%+lJPBy29BsGQ3MX2qPIHf|)cVPqr?&9+-4X+#ldSSR2;S9=oW1XID#U>9q)YQrfex+*G78Z#g~+jZO|_ zp6Pi1Fpja7(&MMCjdC{r{gv@+Hocruzb08k3LyZ#IH}u8N4&inJ2FHrLOIsjpwM=bUm_4Ztr(9-#ix9r~vIL zGJEa&9)$Qd zS1el<{7#2&&ntq1fA9TqP`vm^yXh_X2_4gxAXasO$5wy#1xn>NB`|VHuTJ)2sl8(P@MKQj2AL8)*KNA~ej5^?KhQNTqxd zu?@^Iqs*m-W=08BD>=e3;#&=(Z@v}wuj3Xu%U}mj)VW)w8ZI00A6jQNowT}@=pA!5jNsV zf8zF3ho2i_V>3W~BrBpH=XLf|&kN?u?++K(ZoY0Kf$wo7zJ(v|$Vn@t>|!<)x`pfaE31EoL?3IWA8CWL$TYDpo}@H=qld)XU&TNJ@rjWZC6aH(6vxdbzz=1g+H zB@h!b+^}d#1HC5oQCcoa(i8QTLN z$yuwGRymtyEj_|npP+`pRl_V&lic>y{&D-U{=V2BVGn=2e!$tR5S=AUmua1-;^7V- zY?fYcYBIeg7R7d8enR=cFDCt{;)aQ_o5A6wLqxbe*{|v)*B1LuEP*#DD&cwm{shLi zLq~BP@lF_1KE4y-9B8GF4R*F_p zwmiNy9dhHW>SkF(5OD72n!)d@F9HeBjzCIM>b|eF$j~8dBtA1Bl3pP=v+bg7v&T`x9 zIQ3@s{$rTl=c|8_y5ikeedjPgFpZ0McHr$kXaz;^^f3{?#Kn`H{%}ESezo4VzfUrM zg@c2QW9nKCSCi z;L`})9Y34QmFv19b0<6OPcmGtt+En)Ax?Gx{n6o=4hR}YoWh566akzm`#;rI0t4Ib z_bo(u5#3in{#S7z_S%4&1iI`gTkB-Ttd->zn|vc-#;Ao7=EM7LBa9atICCnw3AX5T z`R5_$Yup|!#)-<8zCME;S3rfj74eh#?Nice@|$?{2J>Uoz&|b1^N&v5d!c&*qO$Jx zoKSG#ebnQne}ex-`2#u<8!;vt)BPa5B);^a?LFaUb8ZGD$lIh zOBd}^9kAKF;?Yzs$vQj7pP4(;WvH`P70V+*kC3=Edy@_KIop>IE^siVIUZ5n13tcT z<022G(%YgDCXvxIK&D-f?m--OancDx$su0R`fDy*OPuFU#vGbARz8UG8Om7EPFMSx zBZ@~RJvb!^m3;Oj`DAPW(x3ac&Ez#Ckbi2=!idT6>EGe1zh2X^mFjZ{;GfmwYx&=O zmecKe$p%?-Rr`kVgZVquM$UBDL1=}V$=Hy_^C|6HJQOm5&^_5(QLg8)GDat4;>MXf zHS`jtCd~wzW39}($O4Rq)nAH;@u;7=8Q{h;yJ*hUf&I0!%Al{GLuI2l?6xYKRp>%Y z#!&hD2g6$&a%n%0%=MT8mw|n%0<@IXm&CC+UabV6LX3#zdxQIWjiArByUsbFKaWRe!r!B ziQ{%47&wwQxMR8~S@hF@5ln*~>Z9anNTcJHTXmTl`nui3<^ykkW?eYVNb zMvh;;azp$4^_5?l|GWb5bogcv{O$#@)noEaB)tpWuKdD?V9j2&TYXG*)MH`Q5q@x*J>Y<~I z6nBjGV0Vvp(ZgnF)Sugf;Jw)pw|{p7B(H)aV|Nrdd1HRrkeubwX; zp9~2-w_9VbY@x-#+qKi>j$`JIV?^(Wb83~Now&xF*W{u3?$KcH5V6z2$XQiYNDN*e zRbRwbN(kxK2bl53L(DroTimDtr$$6FX_o7&zYoo(@*Dwz2#|6M#0lq*s zjwDZ8ZrE?9qc%A#_4 zI}(K%r+UITve~EHYNMz9g<{%6f!AFUJ87>V1V5dm5b@vL0Royz8u!<}HIzO6Y_}>@ znejnX@H+U!qlQ&V%6CDOF7d&M=ieh1H6qix*tHXP{7dN)OXgo1y4(A-86W70(3T92 z+vVokv9$Qaw|yHtK!I)uGmT=mXsQ-7H0d|0EEx`?%>_Rb_838O_U28O^E+~i(%0$| z{YUZ<7z=%bwL=c?9{3D9I2JDLDg7XxEt55y)e=r_Va6>(T)FfYR!e#%-n}&}utI2k zeNOcWM6cn}y2|fCGiRcirTbU@=Xp}PN#)OTpRqQYUE91>pytXy6+_J%81hh%9eyBO zoPUFFN<%#5Af(1iKjEz#=!@M{4D4+nyG$TKV3R8k<12Ev?s2wSQWc%VPa;Ip>>{yV z?9pe-;XcQbnr*H~U)&N&#K0&md_bKxEzqPtd(6217r9AA)g|Kq-W_>FX68dU{q%Fx zh0c!ogE~`Ji6O&Yt^U!v=tS;$Ai(W+7J1*dUm(ePBZob$AEZA3QYYx$OVft~4qR3Z zv?nO09qn~>=B{w>D8^!aEE7~ybkjVig_EQuZlWmu^cwoTy&U)4nQ51isRJ~VtlHGU z9G|(s<;(`M&@8+_kfe$Wbrk;XFLbXM?D8YJ-U}a+gFqo(wObE-!{VTFl$FDLtH+ef z!ovIRD1Qdg`*qQN3uM`1;+7Lz|NCXL<;Tsrr#Ta$ayOW-*vTLFZ@YD?-rx2eqCnAH z4-QpDZiidiJKkJ3s56s2eHDA6>l4PI<(Vt`WZ-*m|7#jb53F2&9+t1Tnh9PULaW)v zGlI{>1cm6il&;GQ{)lga@}DZHu5b*)OG+;{@3)|GqDs%kOv-BJ$cH8--si#Epx03* zqeW@|9A5_de@J+(7w+buw}XuAnqC^zC?*_iG=KY|;*A`+fB+>6qo2&fP^)VT{Nmp0 z8?mx853LW~Nf>$6!EUgJu_|EN~Aux6H<^7(<(cV=DM)^^OK^e25Gw50wt=jZ{A4u79%D_HdChc0Y2&Qq42}36 zCa}N^ip}D!A_+}{r3+;eZmbYf9U~*5*cO0vI*#ctt`tnJz*8Qg$%&-Ql(fQgTMIb7@@CVUd@`28WfYwl>^7ZfNp1#>_ zgUbucF`+o_%%UmSp(cV`Z>m5#7popU?wiDuc9q2JByV-ziDFMrwb}w1DT>QuiHRK3 za84`oWAeRxf4(+&v*qhCQTpwHEIY4$Pt9*14La5yJpc#{GZ5XwSUf2`1C_fRG@+dy zbr3~O-YMjtPFNGQL@LJW&6nZA~l{_=2r8KuG0mhxqR=3m{{gx$g1<7^k-tZ8qBK$=8 z;ChuAUk+4-z&%s~{f{QBPwnoWw3OqG*-dt?^|wicRUWN(hnh2OHiujaOT4@P6V-_a z+6Y9)0k1_yf{#x=FC1Ml8$K4;8@Ji=kyJh}yuZAEjJ#vUz4@)gApVg(S(cq;UwWqH_XUYxO=i_JbLoMzI~uRV22uAf9Y?t*IyD^SjXb87~or<+!J~Y zk_@V$Vu)D?pv{V}w?V6~pHH0($=oJ?QGqLJ9Me`ylNQMf|4rP^v`5&^Tsl*4#xY9#u2TsXGMZ8mfYUZ3d*r1R*K`8WRs>fpmUVd$H(m#ae%JdT$lgj&d2UE88 z26uNuY|@)4w(GAU8*dvu){C}0Rm=36SPo{3N-jqS;1QbeNZzsmC^U~t*LJ7CuB~`{ z{eX~|w3vcfvG3^M;G|LoujfR`RpE6y3Yj};gE{R5%9w7G`Sg?@s?|?ov=J%8aYt%p zm-wQnS1EH%QZ6Vl2IbWliS~Ww1lz0DKVu+R!O)ZDXQ!#H?4N)#SwXnK-*IbJF<+Bc zyYZO5ziul$wsw4$Uc0-xnfE`dI=m|T&z_C^`6)&&ZhSV;@zDF8D+!G38dsmr{C!_i zF&Cc)K)KN@mzx!)T^`x1a=g)<6ue5G7EChzv=?s5yiTV|ZE~)vF+ju}+0BGYbM5+e zCzaav`6_16J2;7jj&!0@Zh+w6yVawim9%CKp9aRMhxbHrdPJ&V@MdR0828t-??o0_ z@b^Td(r}RKP18Y$O^KTs5)xTbR+qc{r9hE8S^kyaVI0i;XmvFa9fxf3P{i$2fd-$` zWkSP_D7G@-c{GZ{~}8-H0F=Sb^p> z8_#V$(ZCqXhh2if7p~6lj=hN<@=o0a*S$k4vgEQC*aCl%t9+kG+^0cjSoe+ekSnH$ zS0&KC~9ceIaE!HxGumt`nEfjIvwqa2>K2M zUMp9BdEsK2a;La|OvKdGKFn*(e_!4H^D5Rd=+X5ZMz2No@>EEnP4h)mO}Ayr!DlAK zSKL)uMy+Xkmz-8ViCLDG;`0D5Z~HLQ?fC3$Cr+zrYgvKhxfVO}iZR+EdGI$yb6lpm zwVQM*H!*swAdtjWGkNNIG)P&2?1r5VGNbfh zMN{e}?p2ysaKrvkx+_m2;J9GZ}AaKvLG zl1fMAGGEBVcmRC3yuZcG`@HLiBpLUAAxI0*?|Ta?DzE& zw7kS}*>}vxOQC@kl5Vf9(^VWCJY+w|5v{M=F6wf8yc`ZyJ&j4)pCzv;)^1-HHQtDn z1)8GS3VU5kGsI@Px|#t(SV%d*#i#AQs;>GeGWx46fWqkGG zpdY6~LBON^{?68N)0!(~0WBOUDOnKnSY!m?ZEcB)9jaXON_?%N5(^TMUW+Vo>}nZF zz;Y&+P1V}95mHX+H z|Krsu&f_r-G9>Vz=64#G(Ld&Q$$7IGrz8vH-Hc#ui)L-VpWGD&U=FwXAGP`1%;+yI z-0b9MSgm9XjQKxQ@*w8HtWt=8{lopiiHQ!(hzEtfiak!iTLtG^m1(yjHxTrs14c6B zu|W!Z!ha+iA9?qbsV+aNdUV2ExvR27ea?#AG)7 zNVF{}p^{Q$XdVK^jjCh^;EShQd8#pj072ljL?KSE@RL7VO8+#AkTGOv)?XN#*6FFW z0aGeQMn<<9qyldefsJD~aCs@*=xf2G4UJGq{@a)zeZ2VX;!_)z>;E~EQcl*GI(*Qw zJG4iTDK3-r^OOAg&Cz9aqRE$&HnBZaPCHi;e>|SOJxSXXWf$dC!8FcY?+Tb0sUF5V zg+j4(GYpQ^q#Puh^ieh1psTdf z-|$s0f4A0b10|LDYwGMBNypeS7)qVhaOrk~pE8Z{s>R#h7DqjsVY@9Xp(4=~80q^& z2ftC?k%q$BE|c5beu9#*qo~QTO*!~tCp?$}eW;{1wGCsOk6M{E+s}q3%el?ej$~Pc zf!qANVWwWCix(j!TpT;*$-Bx)J2^BkP=cca9jsFe5z62%wX#6e|9HVWI`oKeFB`bw zEM_vg@$uRO2w|hJASy?EynBvNDsO;u#_Lmo z1J6_6-_laYpL9kT4pmVjvVGQdtMJ$$%19!XitW>*OtWewU` zWPF$!u59;^eYV>)2V)kBP{Y;CJKM{B-TqaB^^5E^PDXl%R<*YN#}*V0 z*_&lK;r{1Q_CREwJx$}CO)0+Af2c3h_jH{J3qbUSPbr@CiVU0b|cR|z0rqT?eqvw`ExI|hB>ka zas^XGYN6H#D}vQvlVg=B`vR{7qn=fA(laTBN?6aRz}ATmMdA^x_CtY!^*KCbverd# z`im<0SplqtKip>7OVM_!t`jyl4ouyFApXT8Ie&lZ!0s$Cy3SS(&1D+YijAiNVDJVX z7$sHb?a0PgMe0Ms|3&cExR|FNt)aZXfQNzJBCi{Jld?wU6V|b*aq%S{>mM=EN0d!5 zxErYvOd2L{f|HQ=v1?>1a4=Uc$<*2!Io3gtmYA5h4p%{^d@f<-)vDG0fUJG54Fk-P zWu&C^U}{n?#e|p*ojoykB$a9 zJKI_tKCjh)v}VR)O8kTv9sOJw1!+9ldvg!AeU0$OW*=U%qLh#)NmA}D-{z0H>#)Ds z6+VFS-8P+Yp#A7feG%K>E}p>)%6XM(c-{IMcM~3E8X8stojhNTeJX;?}Sg41~{bp z>np;1z_b*Q%iis;Qp{q39LyVqr{rTwTF5yf)WPqEkDBJM`sRhXMsj9fL>zcd#6zJ= zRjvo*Lo@CV;hVK*9Q0m;s|1`Zv*+c=sjv@JPzhZ-UdP5`xa8Y{(|No%m=S>U@83*# zXc@ezjcH9BFr;Az-hpwI;Azn=Tz-=NhJLdGGh2fes9f~VhYR^Q7~1)qH2Rzl!%$}G1l|JeWv-R_i9dDu+I0fA5IEh8QgLKtA@&TP!QHsqtLmFtnwZ%S z!jhP-KB0Iw0IKl7`)06WXehcQr7e@7R|Y8==J|^4;L2gl;Fd19aWhVy280==Ix$3r z=nf#+Cr=3oCDqm2p0G6P8zUn-OgbHCw~(syy7?3N(9?|l=iuXy6Xay_7T>MohL7b$ z#%$Pg(QRNt5T)>az9^#cFF;z%m`F2ycc<1}ih%{#2kvXEOUj({SkrE7R9@*lm(Ci2 z0FhPFC%N#_EY=gUzj$q!SBQJ@y4;5#N*|HV^`8|tYlt%6CT998{D=BYz{r7ZG8WfX%B9P+6zt8No6hXimk0Dzf8M4fIm1=-QhrGK|4nfv+1z~CVJOWr94?~H8eE& ziBlbImel2}7VlgTxt@N4K{E}Kb-zPSVzq$385*STmuvQ&TAKhe2gkk{){1E9w2hTR|DwF z&F=MFY}lq27Mci@R)1^cunHZ!so#>bi4W`2Q#kPT%k+Jr-!tAPrfVGgdQg3_fhUTUKMF1<;rI4oEs|@I(xsy+yh>n)*bnSQ8d{2 zWsI&ww6g${tO#B{;dRdom@3_d7CS*>%Q3uC&fyF6D>9<nQ$!X7i>_#e5b zgUTA&09HaVk#Y2!OayYSIVJ+d+8SBDn+QF1Ja4g49`MIB)9F!#i>7B(4EE|vzY6$4 zF8a88$$L#hf|#2YsrOSaYq`>`YPtvjM{rLR7xQz#2Dr%4K7O2uZ-w6ET!?7)jAFY^RJJQIkEM}w$C&OuJwHIexh{4(AZc2$=dQxPBeg7=+oEdB~wW`Wb zWid@5c{7>h!g+^$lYwju^ha>F)TbrN5^-Q#0vN019$-*%&TAacyH>Qs&*aG!>$Z%uu8Y{B%w1 zWBF~8fDIK3Wy{YZ48X|8pZmQb=n~=A zBERl~SBIPc;bw`5(Le;^zt$S?!SjdbW4-^%(qc%5>$Ym+|9ETiCz0No;j?RsE9CL! zd%wfn=zJ9r;_{6vm73i! z5Ms3d>PM386e9Ru{n`%5*#0r$(ZjEcLGzJ$7ylW%sNYg&L6ELICvYYuw$w1OcJEPo z<>8WC*7^cv;i#TVU#9D`U^B`{f58!cN$VU3W(0mhzhlA0xDSAE;jeeQkOZ3E4mU=E z=c@vna7ja1uBd@xi@Lz7W$gqFcZHNRS1XrU>hfAMzQO^v@}UWjqWEG=+i@#9xd)$@ z9E`j3yxfYqV5npOm8P$H#=Uga{ri;#f!N2bx%$n=%VldPV+A=fvOhvThS0dmSxP;0 zFd_1`z}5{Ad_vme-ArnKB(>&f&+}F#_n_xJyD>?Bu*oO%z_uIDWY`1T3?lJ`Ac=jt zQt)`C)jN+|Qh2vRZuR4l-0AycF%sQH8`H${@j8+y3|rL+>!nE#u%MSptti-e#KJc6 zrSWTUQ07R81+uKac<#@Cam;AH9P25~TA%98q8(KVB;SFgcHe zj*GzSfDca)mcP<$geF9C5j*}jh7YaxsYuHU_3GmTPL2JPDCfJ@v3Y*!3^o{*y9XNs z!Fg|$p%L}ZE8N=rsLKv~k=~ZW%cvtbpE1*qR$2STZV`XB`cUXGU-mMz4L8bs(L&>$tgIhZf?Bdc5g_ z3j;Uq{ggfhA?QM>-MOuZ>MEqzLe@C>J4M~!&RlE1e(+536s`pO!%jVKj$8Lw5kfC1 z?n<_0c@IekFE1gR2=7H|p-`)&-Tz+TTmQYlJDqGuc>e3;{}1)%AIM42>k^z?Qm|4} z-~_^PUZ}dJqQFO}4Ko45SsB&inOsn`edo2~U)M40dotDk-5KXNdr*Vk4@ZeQm<-nB z`V72_JG_->yj^k6sXfhmbKx3kEz?QWWT1m7`%}Ym?`A;_v8b`|F|RgeQj4YzKu)k3 zvGdUx9y^!EAcgT|n%bH-cV=&J@HVC7q*dIF(N16OD)yX*McVtIWqJ|m6DuRZ+^h2M zuYddqK?|0L7MaEDyeqdJl z5s@0=6Y6MT(T5pfXS(U3);1(9yw(|of#ksEAZZkuFE3I|#Ww5-)xek)LV^xTaHPaa&VmEH8cbo<$ zQ<|R=T3Jf1gCJhAf)txr)|-IC9l-(0N4+w3zIOIk9nkZP`|Itxh?BE1eyRj=lqzmHeSjlQcFNnrtIKaEui9gQuVfhYK~a5J56J=Sm_}MqxksUu?f~AP zw61xv)^F?VJc+@l`=XS0yrFln28o|PKS|IXRr0lV(1xrg-3x1gC0G>LnV>A&o}Y3^ z!B*)1+^UcuOYaA3B-9Q*MfYFv>aB#99>!3Map6@CyiO|DcZz-HyOOmk2*S|o&{O$K zAuYL{BZfxuqub7LWUnNpCr?ZZdn^^PtP1&nn#?Y~uj7OdR!oV0oMbsm=?rojGqUmK zVruIwG0R#q1np&ZWwpGna+zb1D|VNunteX7r_1r9Os-ukE=@&>jD#D$UV*$-gkaJj z4@`w*0%rA^!Y^Ds4<{r2O(8Retb~v3Xb#}41JEyqo;^7n!3>*$S`AfFc2m>I!XA+@e~c|% zvZ>lx-mRRiRxOK=6nMHYcnu# z_&va&OC|OL;pBXpw6=0dbzcm&XUcZu`h}cFEqimBm%R~rjea+3!akqc9_ap=0N~QL z?-!78CyLFheY_%%UiC#2E{VHb%8hhbxEcD{l;LtiKR^t9j?GbaKMI?rFZc7k%^o6i zT6vIb7_X?m>Vukg!oGHPl?5XCH1ccnDwj}^!O&z$0#ok}A48?%G4-Q0gzM8ky;SNy z=WL`ggG18)BSzIuA(QyGs$?+&N`j;AzsWs>O6as&pyQl1dkTZfpofwW-f5176)hqhj#56U#8Yi4 zH?~hW5Gkh9rZ+#i_~>gg2p8R*fX+d`@~~bOTSweZ$#WEp#};6UDdY+GoZ+<_FjyPD z!>0YIxKL}^m5^qF6_q2hkhDjPetOqlMfJEpH#T&W5DpH#bE;^!kmOr@+LhUP!rm6h z9#TJJf@M$!#^c~xjb+N^lNgYjzdlC&MTZ%J@G~S6@iA(~YHS~$aLh~XH_i@ig z;G9Cb8BtUW97y|)0&x9qAkx8ucVq+#uMQ3_XeI~JCdqrzZ^+7jBxpjDjPG=1ykVaN zs4gBZA#adFCH^rK16@Qi&!BS$VblL}vqpVx{TFD#22E0zS_E4EC*#Z`Wuumht>{~w ztX`Z5P&ctd{s{%W^h_z(5{Nrz3_d&$n@UB@w3{ds8}zl#q1yX?@dH?r$TCtb+GCN-&&=Yf6%Har-NAlH~7C@vgBy zY>*!2M>wPAN*-r?9^$f=uL7 zN31jXWmneFEAxneO;`Xp)Hit(q>yas&%%}Vbij^9y?MXy(tSn1S-HF_?TrY8A98hv z>z9lPo>%RTCWO9IRf$W7c35(JQ_5=7_I#%VtZPrG`JYt|V))P6BMa(*zi4XzqKl%H z|6cujOfc=1=KO}O>r;0qdFO^!Ja*?)ht>e^g?uH8ipxu|jXIe!mSD-KWTwU-s9l2Y zn?=A_i*XDOD$ydEExoA(OWRek(+y%Z8sq4pX)_HYmbdv6*KS=%hSiKMR`S-ya*F`J5m19`~Hkv+Tys7>+10X(H(N?or{vIMH0FBh>@0Fod@>s zBNiVdcAGye0&Xe%Ho%<)|D#0w`%q=YXr8mwiQu06b0b-+TqaUACrP7%e^kD`cq6yd;sqwoq<2(*` zXdP;CX=bROt3>3>AC>o;#h;5{<2;5zI|>l)0<+#vi3Uu4s2e|J^{7njA4740n8ILo z9lVj@v^Trx(F7Z^I1(&fhqVmfg09=pc}PZapPk^SK1&=xA@cw93DsX@;rdtEbMB1h z0I{AaAfP(~ce1@&U}LoVvOYEu6a0UR9z2SUga*L>f(HDb+VZvp>m3Sg&cujmnD1>~ z4uK%7^s5I!Q3kHY<+K^J$#S9ZJJshHbhYlM(|pH*J^}oEXCAuBR}K}U+F?3#`N<5E z(J~Y9x4X|58XjytVcDxO3A}Bf$!3aduPK5kYi<2vL!#$gAZUTiXqT6k8gKV{P1ebU zkycQ+7i?})3?KG+14Ih!dHzF3*4#*qij-7e$?c)SVQj*uvtJ7tFi$aPrr)i!HL4=3vv{Yy!MtD+(5B zd>tZKgT-OukGUbtoOs}r)ae-wzilMhXb~Daa-@Ku8$eWl`lt6ju;h>iR#ojy9QiLA z(`S5UaW5n13m08~hnB>o*Y@rh^#{dmDTI}zOwanu>X0ed=aMzS!o_xTG|4sJ56j1* zV2fEPHArM@Lr#C8Ec)#E`c=*#uKG5aNH*=jio41I^nTIQKuahL6(GhmuPnayG2 z&uI0(ejD{aJ`{g}Q;`TfqyL(+)c#|uZ}ULOW`0Tt__-ySg#RIhSymMIZTQonOC>lT zNttk9BN=7qWz#q%UKJXJkf_fQK+aN3YxB5Lg%`%0lglh0n{OFUN6R0wxJFxT3hRTDy&E%Pt6;mKcyF*~#-~SMD^0fD zeKa?+MA#K&cRlfrhpoxaAg}ujCKfL>9~prx+9w;MOm2c?KxHX?-O+nEhHsJBTN)n} zBNVA)wD}QW%X*o{MpGzz=n?Cz>%Apc)1u~LY}CcW93L@lO|gP-vGK|y<&e^2r#+fj zLbzT(X7F#R-7k;5qOfY0cbsp`iI}j!iG+l09ro}aKPkGwS-3a-IM+{V9}tTsJd7$>&7u(r#asfzT%*J}`O4KF=|x7v%2LH9yW!>8ANI6-4&6hz zf9!CiL7sK)!~9SePWg~?+Dk!uZvQS`QoXbB@{_R_FcHuTD6b!h(Uq(G`GhCmz2Hmd zbYyL1@(``8d6$2of@xw-GR5}jFvNDk-CRy_%N0m$Cs!q@DX@$+kis~)6l*ownt7E9 zdMtQZz{2-TNO^eUZFY#ULiYDAaCm6w9TMFK z!XX!lCUtdpcQdoFun0h2rs>ep(I=0tBHi5GnX$c&*8(OkFYAKWx92jYq@*~zso7v3 zW$d(^VLCsz9Q32nNYnEv#O72Ue33OH-Pz@fn8w`XEpcYQXu z{Bk@rYqG%-`Z50p?|8}Tnm}+^?3Na$@Uz)>7f}}qM`Mfi%mE%y?EKiV`!*B~0B$}2 zxMyosJDW3OkW_-4&j)~WE+tzvliSWwUj_YtWW8lv6zbMKtfGK4NOyNjr_?ZXcL@yL z9RefWF{FTiG}7JODbn2_rNq!Mz&rb#z4v+kzxUI`$NOG!t!u6OTB9HQueO@b5Aho2 zeS~u=J4`z6|Iyl`ZTI~+`1c}Dcwf`GF=BylMrc3sV_?==G$A2_M%)4J$Zx-C2wIbP z+ScP_0inGD%UI!3sa(hRnVV^AMkU~d9bAR!J+Q!9nOBrL26B{fK7|%d>^WV#R?@tw zEf>vQD^5NVN5y7h!el8-K=q#6OvGGgT{kSa^Y(RxOQlP&vdRfyYv})bMe5zv?9H}rL_WsCv*TH$gu6V zKpDV48n_sNeD-etJez|0cYD9^>Zvg82+4jh@~1nO^lSiOzRftne(Z<@arjk%;?6=VA7Hv9oyV#vQiXSCJZ9dA8}>-e$~KYb18g zg=vvMu%m1kcHu*my|EJH_d~Yxi(%*3pbSAwRKd=W2ZDJoKi;ZN`;WAnw6%&cI7YK- z!*f|0&|MqRO}rvwzzQD|PyhQ~qkx z*HX5@Um$d`K623MemP6~Rri8pYiBB(^y;A&+|94-t;X^0ACB9u8o8xWKh4-lW}o7i zn-pU#*$M$Z;ZOU2Cj9sQn(${mx~Gl2n_d++AstMAK$txDhF!cd^4Q@~Ww%TM8~?yb zxGuSTSN)A3Lz-K6(O7!3;>g9Y3M+e|OnStNwd*{^<>#CVP44LNYLFDk%K@<86jr$!mPE$Ko zFY>aN1gb@$0)^B%9d7CPaEf3~JmGMYh3LeO9-+{zw#t=$+LnJWmPH5T?_i{@t!?4p zp!8P@|M)mW2V`#EhZaOQb+FNY9_Z(9#bw;vyxtkY&(F_B@kl_>OBq>%(K0+_y*~&@ zgFDP>=I67$u`~-fLV)(|K!>G_M>hl9f~f%AaKXrtyNi9R+7VPWc4-mwx9uTS#vQiY z5KQ>?x2bqvb&74s)}X>}>sA8KE@iODt>~JE!r*`tr{#^kdskSd%iC9&k445OzgSSb zMZ2aI6=lNK%q?2)``9IWm0g-INx-<1pFyU7+Lrm(szyTu_G)T|Vf|`xM~8Q-g(gTc zm*PYDd_18}UCazVJa2H{Y-nXI^3xaMBYsz1`PM~52pM_o@wNf!Auua(4w(g6Mb;6Q z|A-$tY{pd}jEoxj&>|vbrWs@v+mMp|bz{~0a9?iIXFTQl-u#f_(9Lmmf$*N#`$uf{ ze`i0=P(D~y=#8yU^3Ch~|DIUpzP5||4`9?Hcm98GTwu?a7Xu)TA1+v#Pw4G)^Abw|Ct>-i7F=y&x-PYcZ_Z~AZjc-LTg)|TmB|8}+ zG5Y=C50bQzyeUUL%&G2^e*Fm)f$rRxt3bA{3jENj3))Plt`q=+PK@^UfusRhDxK>w zvOV1;UdNH}a=^xIXtb}YGS;q;iW4gUQ)g#x;LFg3+z47kX>h2O-=6Y7A_Wa-0w8f4 zB*C+*A*S)FQ!#j=J0Cn@UEQ8ULfu}VrXpg63F9ZKYc%KD^8Z`-Tl{R~e%eeux z80wa&?U`_1Paf{JCQj6wg!>7tc(xCHSnOB|zgU-d!m^T@>t4TC&CMkHRI2u}Cjzf? ztw^X&Bf?1*1(6N^YN@BhrEzog28k&*SwWF&F0CA*IJor?LO9{A)_Y|x0}&@?ngp5g z5Tb#=;Em2EAaR%gel%C5=_QS#F$hamfKNR!$FDsGqHH`#afFlH2b8!Yyi7ptN{eTm z9!BU<@agXhMoW8}bFtlO?_KKpb0&rlWm}Fxk&KhOH5c3Xh>#){Mf@r_N5DzEcUTU- zX5=Aiy=;i9OUkO6q>8rdJNij@bIV-A0}=C1DM-Y(Y8)DfW#x{huw82Frji^c!$1n2|QUl+c|UI+@_pu^(ZZMf>j*Bf>UYE{&PUL zU;oXq3*_aHUw4|7#x}!us00=kS4vAOD=Zp0=;Kxxn3$9H|LUI6{iS=RXVwlI^|LuK z0Y<|H-(ARvz*rFIRFL0eXDtUgeM$T=mfp8x5Al(^=O#^)5}2py_IygwEivzJQe;qR z+PO9pa7t!K)`L!L@1q`vD%QKU%-U(#C<@-I>@*18T5b#2$xn$fbl7##8f-jOmUlcK zbL)MQLYzoNt7}y}Dt&3DnOAYKQYp#3v*2CvEekgywtIdqC5iW%+a4fe=)D#ip|b#@ zT&Rrawl2y@eL3e}vu@3LbtvsIS*Vt2Eqbpm0?QS--F;5}L;*GdAT=fb0qR#MvfCRa z0P0NtY$NibnPUN(7r#a1#s(aA&4wT$Z1#m?#>N|kol%BA%*DEdETuV1NdEA+Ki$H>CGsjJV0Qqyxue6u|5iskeFpUj`_xG*~$rnp+H*lTPhAM;Y+INK}7cZ5| zY;qYUonpe3ob~eT>+SQ-FEXESvG4-K^t=j!Ma*3)kj_u@MStg@dVz^%JP|`Bxyg!!cUFB@HFva$x2kG)#XO@M0^pF z2Uf`pvl95@I{J?!?-}}EPx8AQDwmnwI~lcI%8#dHJ zSj9EluS9yG{MX1fT@VK??q4S#ma7jrKQZQvR9A%d#OKc9Z}U2pOwtnW+lGQh3D9DA znT|BlXWyrTjK1fzF&j`kHrfX~cohU3A_&^v>@v>qDCrEny^7N?dWc*}Kf zn(Y2O{-LDu-U<;A@z4_+l}i3VH9cZ-&#NMU&wF-|RiZ|ofE>KvpZM}Ve}tVyb|jj*4-i3QG4TJY%#!xbdYc_eyFq1`%`GUDKjx#LGaMw#bMKBa%@p%=dt;oCjA zvP1vrJJHgT4%szW@>P|Sc>f@lU>@84vV;6aO2=qJmQ#E=I==4rT2cCw37(iSY(dYe0#*Z3|ZW1tE zvN;J4yC!ZuqeD0j5^}(Yxe;L^aT8-q9B6%9WsN1$NRjw@THA+t_e0pwI9r#;%bdvN z>?4Q{?(t`*cgqmlY82v0=pH>O~**SJzQvbjDO3>c-e>H8w znFl3n*8@KmnW+`cAY8+P*o1;&#CgAxG{8s7_R+{DCawUYQZRz^K9eEYUQVF=5Q!N* zyb;xfhzRpjdXOnLGkpv0PNX6vYpy`A$}Yg7-#RqczE>?o zN=p8F>>HSNrw0g)#Q)}@{wMTQaak?=w`!j9Z*6rmg6vcL*MwuMoMEUwUmv)#w}j3( z#`f!3E9JSA<%OBZHD^jS2e`9m67q?4lvIEbrcxtlsDUW;m|FLcJ%3Gnl8?g(0|?PL zaXpG5bYuhso{U0zufg)uQ*wQl5v)Gr-PVq~3pF5pJHolzMjrh#b*G9iV4;b6P^Sk; zOboB*!}si-ZUGG_p7hcWE0krCfBM-}TbJ%uynKjiw$c3eNJlkPiwBD z5DW7-^j*g8@3YXFm>UZD=XHk>uTwd5Z^{Zk+9eP*Z;TJAOVrmy-F>fxgD!0aixWI3c6=_9D0z{PTQ1rF`?r>U3}lokBmVwPggEd zui`D3vzM!zN(2m^=aTO9+Q|w$)vcW@dtnH!55yyc3LGWvNIed#ZAcK4Omos}@4%}! zWrU8Qmb(^*7}(P}@;ArBJ+U2SR4)?e&W}I&^xi`Qi`>sMq8Somnf55_8NK54B3E}D zHCcx+7~WMFlQ8fy5fb;Em%kaRo?l7i)uFYkI24%H3R4_HSE51C!!A}2dU`vAz0CB# z!{Vtv^!S&Z3fj`Ni{=y*rLyn2Wx5E+=bWSOjv&Ba-{E_!a3)X8LqjZ#JePxsVF5d1 zA#&JA{B5lwbf*jAOjxE(YlZd;<2jIt8(+k4n~!R;1KLKs&64NfGnAIs6Se2gj8Z8k zieb|w1hw;aBLfv$E%kFrjx0$d&a7>i7$ETe2f$+_kDbF|gN}uRhZG#=7cLlS=o$HM zStqAVL66Y&3=God=Ct613lKy=6EfF7!U4fP{99e~uM+A^@&B5d z)rSiAoL7?xS6WE$hD7slo{++tX<++D28{1&D1#MCNNFJm8OCb_QCTH zwPt361JpW#d&HuZOE1raL%(5vwAtvSD~TkHAGIl*2|7iM)124MP=d^*gxNdRTex*F zi7HEGDeivsVw6Q1eV;AgG?&t_-fCa&Ff3RI=%C5Zm-KAB+1m;h6=&vFV6G!luv{tn}QLKrbS9^C5~1q5fpGYu3QxrNmTjcv}lC9z}4KWaK1R%Eue5 za_xx$at^7fWz{rAjHXWW?XZ;1^=w;Pa+HZd`fb^dJfaMUfDblS!wuux*@I1hi73vX zHu1itqfti!_}$zPY1d?L^T(aO7-j?od&5iT@$eW%d${(?{S^hHQs^%ejJc5jm!9c2 z1pzu9snVo2es)}hgmnOw+Fzx!b17dL@ZAT><7f`EAV*fpxZ1FFl|8mK+A_#t4 zI5#d&A=O`gcwyXSQ=(q5Hq?!iTd!;Hy%Iruk=1BmFP7~0oK5N%3OR4QEYkQ+(1M#3 z$@Z0i5Z$T(2P=2Ca)j|w8mF=i@`0&LrO;wS&wg~&RzoN&V=&f&hjhgGn?*dswBxKr z;Y^}&8(i{*%<*(RJWzM;*;g*D@r0EAC z`%^Y-eK;DBE_&z5UHa9~q68}@_I?97pEUZ|)QCcb^VKXBTa8|he6dzqLrQ9SC12qZ z4iWkgT-Sc&jFCToTfd6tm_^jaLWu|+WyxP4xy|d|_2E|_TvhqoR_7(=AUDyWMHZhX z`-bXx!60^+KC9;oPnv7(*4m)2+6rNPROn{Hg#N|b);x(F9imH1OOW7T1fuw%!5wEB zpdx(7A%8Q{*Ep$DoDLPvUS6JlN7F)~n__iDUMoi>qiIS{0Yq1XoZi9sO>~4P65OR& zhkP9(`iV!2<``}zt!xaJuxY`UqYgy3!4k=IXxr4&)qkEE_s|Eik4Ao252oXNU&s(5 zKeCSYwTze*iD$no9NL*HHZr?$5nwa$az^p0*q?}(746bF{piuYz+^Cd@OV)4gZ0`~G+YP;7G3~LW{=^x>*RKW_K zj*pT>NGsDBXmlj;g?voodAHA2r{XKS@^P#ZiH?1}VShopyHSOC0EMh##O&X4bw9TOO5Q zkqK?=o7N|3p+5Qbk_UaBw35hqY0!^TQurr37Yo2Zj+bhe+0n4n=`&990#?1BXnWpj zTD1maoqg>gf|%r{(tW#Fr<`$k-o=z)Kuy-l zyOc{EHclNOj~A86dc$3yL_;(k1C<^OmJIV@lFJ(NO&uP%(2mQQg~Dv;IE*#9g`EoZ z3#XgjjFNp&Y4*qHa`<(e7417oi~B*?N7@{+ubwKEu1N3d?q1-d_SY=Z;d>2i-AYI-p#OMaMB|3CR;sQPqEpZkYT!he%RwPPvE*!ZRlu1nk>hsq z$Nq<^*JP0ZIwG}j?MTehjb+6bFP<;uq$MQ=?Vg_tO$ShQeB`9L|BsGTS ziZF{o_DH;^b!Z&g9Oq9|@5?9dDU0<+MCUlJMy(U0)6w_uD+}-IcG~^Vb^UdJUgRt2 zD{D&gl&$H0?+7W@j9S7bEH9M~E5%KQuACLdVjVk36sM>dk(pgem~h4il!UaqkEr2Tj~_D0vIyp%l=NaK&(r57H!j6&fc z=4r`&cE`79i@T1OMAH@?T_l4nvpxep{8PN3|{Rm<&kP)- z3*LMyu88Dy;cGyeiMLX+LWKW+~Z6#yGiQW2znFANMngF>Kw zI);Ye@|cClCVC{b;ApV{ZDb5o5x)KSjpUIGJx4Yl^zvLiTU2j&=O*&k!H>RzKy%f?j zG%=O;hhg)&(TkgQd8c6KC2bLx6guotVY->GzHSwH0m3#WNLA^-m39EGQ~wE4aKpdl z4|^B$x6#L)l2#hj`tM`0-Y0`**PI;#F4iTnm*y%jOgyl zW1Wc&B<*L3_~?$+4W)d|(sUIpv*@rdaM0z5_v`?$t2e)_bl6&y))B>e^+!&F2qWB= z)wbR1e9dbk1+H*WB90Od>;OM^{w0nE-Jy8ag)i_-{s?*kG8z+v?>xkxWjoM*=(w(& zf=-4Uzu7sHh?dePPvk+vkCNxMgjkbGB9i2(h04;*(B%RHb7=G5PA54lQku!qC=6W% zYmXZws$DH&g_@G>_|8KN?Pn=Y9ae$E`N#RAC&W0P=?4;SkB+%P#-AMqTR&d~^_%?= zw*s#c`=`mq*~sS z0n@K*+jZp{4D%}iu9`f|8bqn(!YMn&4Sx4il44IYipn`RwZ>-$Gp~el#b(DQd|S^? z>d*s`(?EMCllTVUl}7H&iOWR|ea1u)+7_TB1o}hxv_t_4>8IHN|0PkdwUw*S!EG`` zV>F{#8{_*01I-}55aAVdi*?S{#7qb+;dxvV?l@c#nvs?Wp+y&st`H4C ze|B7xM@y!)x&Igou^vyrPox45!dP{hl^4}Ud|jDsbrK=3X>yXSW2Eyc>}+&c4omvY zX-OgT^D?$hY|BO}&AY0N)d7*~Y*WM4xW2y<31*2}smisobR+0p|A`5t8!wi!guR{& z&bm@IEhS)fdrk-zdh$j_!>%<6OLY7Uw*-?^(|>1S;#IfR%pz{`3xPrZ4vv$R7hRJH zgm;adlhW;xr*aHd?_0idocD78w-j*LB=T}91ALYTWxDhs4xPG2S59o>X5M~??o9&r zZ=I$c&Ry5pJZDVgnhc&WD$`V=yEBhgLkFB@+P|)6^TOnDDJoMb9_RA`xX$msl5AYt zy99OykL{>U@kjiOb*tzrM@(lnmsWVCj*e5PvHh)E7cMP8Iy_~})N~y#;;z-|!Ln8g zdF4YNY*<7$ZF*9^pY>I&YHw;^!N+BF1ja1|DLgYC2mvu170A%V+wavGwarWEQsK@C zFUANQq;Qtd{?SGT)Bm}DZ7lE_+SyW^LYS16OyK5n(pcsR<1+=n7eDa{T=Q~P- zk19E0b7yycm2TPhgf2CBaPPtBJa?I>rs$myOY7#u^Lu?fP%n_+?o27y$>1;a`DY%a zfadw*OS>qP$M!O8pD*#J#7DdL{XE*Ka+BijoBGmk!M7i}4(sv>OjJsHto%ykFSl>b z{sfC&tj&uX|LpJ4GQGnu_Q!h6_yM&eIuEzQn=eE&wV9S%U@bH@1{xSqzpzWjCv!)W z@nh=T>Ij|+dMHZ5jVFTHEXb!qhkFV&2_``vFxC5|8bzowMtJ&fOjn}3%o&uf1I?`6 zis1rA&=97)KG!9wV|CIQT2wYBd5U$0zuPoJ@#B1_sXR8rxnk+@ zy_F=*8Uw$P--br)GOU%B?p|JMDl01|+Z$GBySljKnsOMotExkGx0jaE*B6G()on%u zvXnjQZpZjn$>L5)ngNT&Ee0(?gw7Lt50WgMv_lWEH{yH#QA?`vz(P8j(15r2vAFjS ze%09eJlDe;GsIZah3W1`LqZa@I4-Zc=7<(vAjeB<*^FzI$&kk`+Z&?R2~3!SJ6?39 z)IFL9RcG59_QHr)>Rc;}ez}g(n18DIW#4Dk{$D)%SE`_Q4*Fl-$fU;JqHorJt$thh zb?8-wvqlF)OGFL^&B`R(qRR(agAx&3FE9X@1&4^F#Mys&zT{h#`D2ycHSl~@J{j3T;2oUE9ESnS! z@aOc?pfw$RL>TS(GO?KC*{lxz*nE;s|Nw=nXf zCSc)pB~mhw9U4!q2o!=gYvP3zQ~f|5`NC1o!hGpy<6c4loOY@A^V z-~qV&8`Z#~{|D^Ee$4F1jNPZ;Y-V$GJctfx+f(`#mm2MWa|nnUut1)K(8-cIP-YgT z>AQ{;g}d$-i>KXyuP|LtgE0$%u8`IgiNw(`@QKap8S)e|x=UJwuC7aBv_%6OLx)ZRs`9vNJJ0+ZdeMqN=c)fl4{CcK=-1frOr5S#~-KIJ9k z4O?&y7k=JlWF!G4XsWZy%Z1%=hVmt&Pa*3pyg3-VNe=Q#-8EGSf`F*AX_kh0)XsA6 z8iTAV!-Tg0JYnlU!MDhpzP$`lWNq?6*g;n;m5%>Q%$b30umAZqv_ZIG@0ON1v|&@$ z@PQi9AhUWccG5VXhgKii!{*Fx@P+^8uP5C>SB13wz z9(!MVLIJj(k*Di*J7gczPS9t0WKWOz%9hgqy>u2W;d|tIRkD(oY|L+uLht8}aN^r~ zG1ty8UH5$Wa~&R=lvwJP6yv31dp{BGJVsw$3~QpyoDXZ>`)D3r>`z|Z&hEK>A1X^U zdSP_oFa6c$VvCfd@E+>^TIR(7Z0 z86oc+DHO=IdggkS6+IH$DX{r0Gn=McMeYh})3heAzE_abS7h!X^q|5feEOX0G=sJfcc9Pl%C5@M)XcXUQd;^jcLsb6}`)Xn(VC21jBeEP1_YT_S@_47(tYjNA} zdh=`$$?rnt^>_ZY2zNa%3kOqq{l~ChI@7p1WsG`@^xVWhHa$t6@Slqw?%LC*UC?EF z@|m7nFgecKE}kI%i38U~+NtQkEMHnZt%)2RS=KmUZAcS4_HC|XQMk~p6~W4yjm09{ z{@;|F+~C9Se_7VBLBDt(o*LL%{KM)oZWO9WIOJ}mvdod9%`FFHU-y+gf!*r3J{LbT z-heOdn8KR4C;-EW3Xv_4!q9pp>beVna!wO;+lIz!D0a5YFwv7zF8+?@EWaIBynIA6 zkJ`l$Yn}=*o;b!i%JEEU>-B{y8>9e`N^FV;3O%!$uIx%coNjWXb*gVKvPl*Z5fyE5 zT`+5p=Nk1BTX1g=hU`+$h<>_O%wcM;o7%dil9C&o5PJ0!MX(%i#aYB$bohd6J~%g9 zeRnlRf5~$Jb|;-aDBIM%rl98=gRGKxfAU`UV?-* znGGOX_q%&+-F-{;fqHKBS@rAXq)MkPxe;-c`Noen)~z#hvl+(V-i#7Gulw$(KHEX> z*E8B&cn6WZ-}S$muC;y0K$J0?sO>6P+?xB*q%p1;HX={uH*l3X zg?bMDLxIqAza8Y4;LNb+m-XsH=zQ5T+{|e36U=MWe+8A}1Q^D*>7SI%3<#iaM7Cyt zQI!Ta3uGVd`6&d#8oxWxYj765Rt7X2~)tb{BGf|UL3ogZ@9&7 zKP>OQ_%55cCp8|8b0L^E(4LgEqaO#)DX@Z+IT0DJw8ZN-wsbWS6b*_zHU91aJP|f? zDq}JY_WhhwwNs9vyI<1jut#JLNr16(azQS!)rHtGcy9;80i4tmA61b9o)eHTPsZS+ z?Nx*(x!359s*gQ$JYY|)1YX`HVT#?pI3zz%D}~cmb0*UQ`*P9%SFY{`at@IGvmQ-KfBugLmiEZ2yHyfQHZwHf2e^CgAqiovi9ifDn z1W!>Z7#)aRso`^5?{Vj#U96XJyx^YxPdlS}v+-%e=@4)u)|0aY!F#{WoX)2EXMDq3 z2eQGs#7F=tx8Y6;-y3nTZqYqazjt}=uO{5`30r9<-JDD1q0U6!W!u;0baG)LBBNR< zHSH!*3%VxT`jPv!y0G|*bYkHgs=Y&Cqwr~Gs(8nAX{A?0(g?F)nwJvi|8eMQ?k$vc#9?#Euaw{Q zQIIqa`BU1Tg-`Du^IwEPv-TdQwWqaEZGgCya=7a31>r1LmE(osB!#Hc{O(qa2zeHU zz&atF>9}cCp0BBpl=*bJ@9QhNXHSD7XR-S1`k>UDHxOM{7WmsO{wlwN z96mpvb!!(-Ul4ZFhGzoP>Zj@PU~D0>3DipAx0MOmsj_lZhi4xKo5YhJz&AO&JseNb zt50X*K%u7(t?m>yi0Zh7ARj7^tkESohDmaMC`^uJpMmoQaK*ImAn*MdN>ASsYOrt~MNaT*-l0u%DlAQBj`nra0&43WA zqlqxi7#nJ$5#C)kL)mQ#-G7nP2HyV;*cqk-iNJ{vJtd|ITvQlBcUwnIb<^oeOC{Nc zQwvlM{0U}$vL}xR6uVYkch6&=x?mf08_$sOBT>DEPlzE862N?Usd4QO!fPvrKQO;1Gcca$M)1u4Pmg0$vqD6T{P^t>!}QO;?1clESc@NJLq$AZV7cC9$&X@^;ozFpU?#;L40$X+k_3t6ZxEH#ktAtuCP9 zqoz%@`x%Cgfq2P&s_t&9BsHYp(p?TeBLSodRg)WJG*v>uk9CNK@}C=Wlwz}~roKxj@8F<-t$|aK z#2+_6&+8isI;%-x+R=BqQCq4|GfJbRu~72J<>3(*nrI&mB?svuJ(?}MuBg!Ow4y=8 zKy>lY0!lEUiYs=WPYHv?PLDVZ(KdZ2B$iRZ$Z>n<)`2{^)Qc0UJOEz=^6iENS}C*M z2fVQoe@KVjFLb5;2m8lA-^N3uO<q#oYY-vf z#@Ou>(QU?=(o$lmch_7{2L3dHXi$2k9QO8?u-+yDI%r3j)x{8kJU5`Gq5J4hLSss0 zML~s*x{kuIJh8|HChD|EQaK}SaOTG>DazUe+SRDUX!p6J+D6VnrgTC>lw)ZlUy;%y zS=VV;DetQCTR_pk`-dK(-fXge;i(Ba1K~fvOkS;puDNu*-L7P(J@I`0&=c!~QsEVI zJ63qiy_M=c6d?Cb4zWi$eYOVY`5?8$1RFV96f?3|1mubwsO z>vLTINwSJH%=Vg|_iSf!h`;SKN4bg?FP)h|N}=smnU)y$odP0+l|3dT7-~`{-bu#b zykrgORq|gO?xLq9^{Cr`>b7X3gd4>xu%dLRxbP5v|NZCB2%M2g_VaswyxC(Azl;2f zp!=&$pdGI?V}D{C6Ow1ZE=1Z^?e#tpeElQTOM1Zo<@rnCP1SUUpsYP5p@wi+3;Icz zp(2yW52E82wRVwyk9pDuZsnMEQj}zWnyuQKl<1T?g31f&^dj7CQstu>DAl5E5vefc zKG41M0$q%U+J%D(=x7$wt)ZEke0z#>DM^zp%DB&U`k(dwKgS!m zmIWGWdPxKGZ7AJ3_ow|a&6CEnUlWo(Tc%78@6!gGz^b5S&oJ=FdRC5n4*76v?%X60 z(5FtnV>l|gyWO5N6z|P?B#D0^EmQ!ZpXu=8jx1+Tp+eqHdv@+fPhk2f`bchk+vnLX z<|WF6Lc@$j($Dv&iI#ccET@{4msA)df;i0xe7R}lpwURFP zJED}(!O;gFXlrecg0JF0CR$Zn^Tfs4G0qKSwpqG;-!*~k(?L_c6DVqI*jhm5Y1<6h zGRK|YjGB!3vQ=hyQeSXl3~#^DmT_^{N~Mz8;hCKa|43 ziLr%@n>@-97a=rbwKA=P@87j1lb+&-?3!cUYgHGOxO?ANTUG?oO4Q3&%$L{6p#Y}i z=Yt!6xlDA&q2hgjZ}jhFw^NH^f|dr{2o*NH<&THF`3t^ z_d&;gzfTIyl>)CeWf6^_ zl$RP#PxTRwb887FDsK-L2P^C)Bq4D2?Ma3_^gf^B5qN4MA|RlO z<06#B4EbV_eor*Slk7#&&LSHgo@hlYhBk`#a}Cl(yuo0=cOTM+SgA8TQ#U zTZC*3DIjT8@3|y$JKYj(Y-+jdsan0rE|%k0Fl0ND#0W#XYMj0HG%lSo03D+oX=8(X zy){}$9(lBUUczJ#uEB+y!;Hu1QIuU0b_!l%RRbFBES;e3x%TG0>M|JT-$3s5YW4h| z%Ms{&<7|GZm6^{U3Z4Vl#ylswdZY;qb_uPqxSEWdm-3*ji84?DBMoN8CF-OcSEcYm zRxlr78CgA(u|7Cn&SwR8ZxX3LldSnLw-c2+YSEY=s18x7^7@J_#8 zOhC9_-J(i}${6f**vZbk6hY)A4;@AKUxBH-nz9DbPTLAPC(H0M$bN!v(As;%6iYC9 zJfhg`f>Aun1UzDPrFK0mZTzKLjCu#3q)Hj(2slSgF?qgUfaW~yfTdfXr2;N8!O55q zj>(_W{uJp3#7y6Vu!Iffl?PZ;WVDy?J zN!~bywa0Yb+*#%@r_Q50rAf0(z-a zMBWrhVD4e16K5CXhwxohG+?XoeBdVVykmPE%XFE!rz%-Sy~{_PL`f*rX3YgV)n%-T9PP z`+FeVfs}9^sib~)uF1;P&x9TwMh0Iz4bYn+sPGBoC~1PId2x5-WV?bYm)Q<1ecqJU z>;BTA?R?v|V-K#RFUDHgUrX+< zoD{n=-?7Fq=j(1OYQ`^r*-B5XBZ(?OgV&Nrr%T`|v+x!thL#`+$1&1f0;ilGd7naw zlcQ|r>Wv*@C`(3#t)Ymn6R^i4_&9`J#1Jb8b*pvp0+T#L`&8Qk_cU(;DcG5U?I`z( z_tf2rMR? zA8V;XGN-0N&Hn}$3{V3G{_UT4zD(Qe=q+!vf-Fgv@!H9R$yo0kZ?@J zF{95SS+qBYv3MZp3JJ4-NZ1i-C6!Lv!Qdr++t7aF^_&@l5kT$WOIy~M%*RAKfjWXD zGR>J*ijzK}FDPth!KE_0trq!$cPP*c!A_~Zq(1f%YtYE%%h#j$VYb^+BuxE>qB$6(FXMF@Or%Z<7;A!__Qaq^(wl@h~D$W_rmyO?Dnkj}7 zZpBlGr!uJI4DaXo)Bm*;3wAdNPK|$pLj2AL2wYu#^StDijYY(DuPg1d*a*Lk_X1)n zTQX+C&|T!&2i@I?NW{_G0zS3MZSSX170iioS18swtS3nJv7NNqcYHoshirSc((R;a~PAu{CB2?jWHHa{3lJwTJnr17@Y&wmrG67e+#E zhD1imRa&kV#ko;oManZ2sR9joGJF-Z4CZvexPG~O$NlJe zHYG&!C6#H7HfN6JYe4l8Xdp=DJE-L7$Ah^XcVh}ISx9Ph1$IomEp4tfEe#v-A-{qw zPRxXFpu1gczVh42@PL6&=lp$2S~RSeQU5e%&a+;ES^k${5SxYXdHJmP& zjMQ)-Yp>exFYOzW-+zK%FM(T=PJpPzIS{h~cva7QAWYlIETWjC?MR;?He5s|aha_!`YZgf^2vT?`yz@H%|*>~+A*}5 zX?6J>z%o;`1Q@KrD}=t~ZcbPP8K8nIX4C7;dK>-z_4ZD)n6fI|E>sn=CRs^<4_gTC zA~jX+M5$TMI;#3OBWUtw-t2UEEMP|0NHM5l;6g`Xd?<%4PnkYrymT44k8$w3>0pRX zAiD}ciF+5d->f}n3VDEZ>pC1=1V80`ig@M39PLewqyG@2_v#yuh^Uf{cElgXmQs)7 z(fgIh1rFX;<{UPu3ThZNPv?v}vm-Q+^Ysg5Kr6gVOpI&@JI|Jhe&5S=sI+WLcV!z` zOEQbSu#=|s_(Xl#^{*X-b#I{jQ{lw%hm~cvtQ4RApy%LO!$Jf6KDVoPTnl4dxjpTV zBMx=1D0o{4P^5Fvp=wMLn<#{nlJ?Ynk4Vt<$>$_}4h;I!ktNm?Ed%6J*|G2z&>Q|| z8GT$O^>f$xF&xL0kR5cbEJvC^$K|`8q&Gc<`wHFOiJn}+D3Q|Z-xoI{=OvOquv5p` zn0@z^F1yBlWL5A#E6X?Quu@&)T`!PIcL*mB>gS|k`>Cw2!}PuvKcfT@C>dOg;V)sQ z+R7DxddqJv`%PuZ>pqepxrT~>Hzvn3rf6?z-skboR$#_yVB7P`H1;--9kMxVuB+9w z=BF0J8LHnC+v{GV9L>MQfR(3PE{~iKmSR5vlFHokIN%n)wCaM zT*vAi89O{9PPM(meXIfh9zqtsK++8&xhQ3r|Lzdy8?vusR?Oa>Nk*?vi#j)nB6!Dm zxk1Y+7NJcLp!g7xB^W9;eTTaULSOjlpms0Oh<%E?ke3}o{l+ft%yICxoR)?NNJE}t z9YXl_`#3FXQ1{xU+(DXA|F7R4G$>=LnmhNA)$HWkcQU?iQN@5kkVFuOl-_P*u_Kli z_m485&74b3FFgl8&d@2du>Q(0!#2EFcDDPG=6CVI~4g94VuT;p)c&<6HPvPhuiGv%&)R~s*4CDz3~kddfyokowm9vAD|6!)i|BK3+|1_1~1ckMdNW*}T^I{c-K=x*rMx zJlBj&b(1UVdQRNV4B}ly`p5$P)(i6YeW|3;;;#}lS5nCQ%}ktVKMp-KxKymT1IKArvEVr2T`b73 zM1J5(V-gG;dB?jGEw3U_x47J>u< z0Sb2s?(Xhz_`7@W?u&C@7vJ-&HCIg;^Br@R=R}c;)13nF{~n{GFU?u=`+sx9)ptUf zldD7tlXXgtcszkc%AN~7C6h?;do-M>0M-t-DQdL*XK{$H(aq_L#!36@shRJU$7E5n znNEDsfgA*v=9dTf3IOVZ*GY{w#80K35lpPvbP8Qsvk>O*PlwpETch=`eO{NlTGZ^= zugItR78FmJVFUxCT9SDNz-3&Ikf5amIlEd$ZzIi1IeGHs+HV|w70o?oFEgpDz!B9@ zev<#7#Y%avNcYX`g9{fkKt+@ecI)iOImj4 zhJt}ARq?>0T+EBwz01#T01EXb<>ZCX-+}Lw)l1dN9 zOO$JPsSkchAg&Fy#qVlXAe%<=>N{`@>TayiX+pJ)s4@d#jPCV%>+=&5IAx;x8vB{XfkMGm5?P7#>qwH4+MlFqQQm4pmFfdLKm zvDMV&{g0z-?pHLT5hYq8?jhTjq>LY00mMp$%(|gh!o;6ly2cvu&55YjfAi_y>k_w8 zM(~O5a2xl_YNK)y4S-sMuosJ)h-(|MMAh@u0r^#!i7HU|ho2_KB6#Rs&&vWXD4zq4?SMpxlqIxRo=EqLxwG z`_P#9Nnb&CGwZnk@_^?Y99x^eL3R!N5Zr%`VvIIq-u)C0u&OMP*3vI3_Q#der8!n zk~~X646cd)U}~e-aN8j#;({-oZ~S{bl)DoN`X`XX)V;eNkS&DnY8Dk{M;Gh zG;azqb~J!ERs&b~_RK?=*v*g8u0eXA*YyM-*P@?l=U?dQ^3PxPTTA_20L{P8`b(^% zo%#c7uR`XQC#6I&$+lBrz-BC<(C*entnHW!6fHtT(N2FW`s7jX@puXtI2~{n0hjES zi1J^7`QFV{1Ca2S{$oQ94iF^9_aOHc@{A0N%T?+eC{if#nzN5ZH4`OhE z7-pn5Mj=)h35v)d`oK@nn`P-xnke#A{g+BUM`Uqe?S12h3I*-fa=8!AC)IlHkkcfG zTrFeVA`4MI5ij%hbO|*Ee9FIQ^;#*~k zL|0gSecJhjB6lUTj2S=&V=oIY5-dP zo>^+F{PHXZ0Cv?=BrGbTnx~b?&gUCFC zRL~kc&C=V7VUJ+zV%VjsESi0(RiuSpzG>flT0pb+?FT6e?kBu)H)-S3 z9IBA=7fydYx&fJ{3=JxS422X7m@e%C!J^*BRgXp!Kt8Zei0JW$T4k?pyxjJ3G~T2K zWOo{mro@KCzp+N^@ZV*QkA@gGN{jy_ToDmI9ji<7#I8LPix zipJh}D2tdu8KXeLs1<_<4%*tr6T9cOCxfNU(n?|Y#ozBLBm+~gta zQS-;&g+YJr@plIo@W5PLLJp@NU z%Z>|QN5L?dE>o6UXN)@IVC9}@hfH0N>->uY}dw;J2zvdfj@1J52lUDPOwpOuOUSV0Z-`%#jfq$;SFwXST7nxGKX!SGGPP$Te( z3)|oEIz7}Vd=@ERORUy}q>o3NL~ySn5#n~f_xbSs;mo-6bgo(GaxbFlWFnkftg9Uy zRb51=S~W2<4RMR7J0A8q`VzU)I#ZCd&_TGMMnHIM@V{l%T=44JKa;pP3gKz49lEPl zyc)3|R6|PEi#@AbdpP+rSN4H6 z+?yIS4Id}aTj==lu4tW$9X7QOpN>>C9D`v84gP#STTyWzn!5eAol60 z(RS@{{rw|}m=C1@e(rr?q{feiBpPqX!GTI=nZ>=06Umf$!g-aSQ^1K zUNz+p9bH@+g&zqzu|SP3svN<-TlVyPU=u-8KzhZh)zb9$TI-|RAKd@E z(hh`Ae&hc{x8u?~`!-oB+s913Y5a<@Uv`n)n!WB#U}VX|URS26KNx1Gdr-BwlObo3 zgbL2?k-_L~hEpm(8Z}lS;w^@sP#Wd zo6Fs|nUoZ$hL>3#==qpDaNHr*xhKCDB9*hpd<*_AHQYK25zq{jMJ)fcs@!fCc0xz^ z4y2x?Sc;`&2wOyeHMd9P_tB`EHiBnWl3C3p>l8Vqo^ArOx+{E9(3NK9td07eE+ni94b)Hiky2B>UKOjqwE?F{mY2=AXmk4rs=Sq)f%AYsWeI#n+8_ojU_3Hh9QhTo{a;7@7Q zN*{jv@@a4YraXhHD5163tuR?ejq_L?$YziY)QfaQ`#_{TF>=mY{R2Q4hj&QE+v88+HbLll$}AA}F3F7bOn<{FB8_T6zaWAX^mheS zBv~rPm4|E}J}9u*nnZ~whwVkjr-?5a5%w1#1D-qu`lQKs_*3`AUdJ;;QzDZPi`l$P zR}1{nEFG}`XDQawIE#!S(;x7+1j7ZP`+^%7_oW)gpVojs=wV!oP7^*l(z_Y)P>_bR ziG5zQWE11?bFkV2i1DIE@%NRck4P6q>{1qKup1-1Kv{3T8{2l{j1ZzHz>Y+- zb`oUF$pDy_0i0<^>!5IrTx-COYV}p-TJ2f9yFA_dJ-MMzCr}f(KIQvuhc{BEiFEHb zDK0e?7Ssci>U>2_BquGqj+sT^j=utS-N$Z=vhOR+qD5vYVqTvALB5mctQ&&8CkZ%Z zbC8E{vGJR_WEe#CLan|rDarUeO@mx41Hl;#FpTpRf)+7NM6@zY$dQF0)yV1sn&(;G02X$o$8TPT}h<;<-#ZnZ9znXw{rsjS%cKOr~ zXMV7HNB^YT?Otb@E&n|EPIw(+UT8~8t0!_K0@I)hSgdDMDdM|iLm)PgZr}^`_Ein( z(o5Y|@M68bg&MEy28TL3nmmp9mn~&=dhcD6#W2=$G8>ud+}V$e1Dy69G?X9P3P|oM z67D_1A^z}kX<{XLPxU95|-?iOx?{nn*%TzMNXf#5h7hQBbM*+M^6Qm?K`IX(1_+25$}k zNLyKf@@HrV3+<665%w9Uv+pInL>7n+r#X7uaEl6o#0QcKuvW0!5KpB%^@3|j%oK5q zl{v=Y26c-n{?_c)s#J6M00*}TJYkz$>v@=I39*g8t0Jz_BK1?J6}i7>TCwK1m2s~I zQeLE2IO;g&srNlT17E;YRrp;ZXxe4ycBtry zs{h;sQ~EaeT_HKkZEMJ8kg9ULD_t<9&?Wy*L5p*8*R)r%9rWF#Q86;3QRdP2AyNx# zHxDb0ibNQxr>kr43}6RJRg6P^NP7HWM7g#QDu5PBz5>}QR@ydW+1i7Ca$$DG^Kfdw z9rn93M&@I&j1R^?n_UL^4Rlx-=?19QYOpe=haTe0DnlZ1v7;Nm7DZ2JsiJ637u&D~ zxLc#o_y^Q2Lb0^G*N6@APX4`8!~<`duA%0KOtUE-u5?Afu92!g%HP%1)cb9Mi;cS$ zVeiSc+mcLw(0{KsolC*+i-8W>eZ*21Jx&JA9y;{(^+WzT!29Q>kL|85+@`5Rs469`Cw~cbo$xKYJ}n9WW!oUwth~O;7zqOEnjM7EKLc9Q4seiUX$TgJlDf7G1Uz?F z-@g7bKq0Y{*Zg6aq4ctV*dKPTj*v>N<96u;hAV(iL%k zvdrf%k~5QJ=1~ga$@u1noccQbghaGnYNJoNFx5TfmUg>1;&pl1--WNbW0GRko>FQ) zY3+pO5qqVA59f}lYwMQb5!s;)%3#S~b=j{7pRA#X(%AKs)izR)SNp9CBY_$IZgpVl zeY}J;`($f`vGpKAsu^QGy6Y+jUY889A7IZolaqY-E3~D+Xj(ZJoU1D#Cqc=YyMXt^ zyd{x2&4nW-Z;84lX*nZv5qT+tWC)<~3X~s~MDusA(S$Amq4sD`a`KhTF&^wqjWd$* zE@rtFR$+~@^Aj)QaY-W+AwWqYtWqS(uUJqb+0L)sVxB5)a~xUTnWA>Tq&-Zt7Vw!c zs>$xwu^ug*aqONnN%HqM>2Ow5n~l7$ z4hlRy^T(PM_E$^Yb5;!II2m-gYFM)SIa|seJ<_?NXmB3Cu89I&j)R#otbfXaZs*{J zizRNXSxly4d@sTMdLL!`P}AH9+tY5jlg6FuX=Fid^Yq$WFtjT$i`w4CQ!CpFYu7Ur z+n#2c#w_v(@u)rcAVoI6i+e@nHqO`8NoC7;;}6oL-pAw$is95~w*W(b#+|o409n~w z_Vg~uDo4$3HjIjM{Fs(62p=Q~s%a9&e6g<3wSQ`xs<$@_9IQQQMXTTFeLepX_dS=P zRx$#`^#1er>mA;_%}cJD-MM_!m)fAwMJ2sGNxt5RP7;FeQ~rJpe5zE!TXjDPtxke{ znzwevp4X~hbELl?IXt#a?vCv^`#Li%Zx9;%3C(%FXf53SuMpmRMDn-jz8yAU`VWl& zW3}xz`>y6nX&tukAK~M>6EuOYJy_ExlP5KiOp7hmg0A2A96bwimF2UDT|B8Z6a!bI zW7{Y3FVVhdQ?E=zH!1CDrIU~?25iO)!}_<1l`5DzwO-M@1yiR+SEq&au zP{8+`4M(wb`c*o30hE-l7Us~q!!xy?BNiGfnbYxyU1W*FB3BN=$zi<2KuaYv85m;R z|IKrDU{DYAh}TW!7kX8Oa()x+3pjXaDnbH9aGM3hu|Od_E_Xy>nt5Yj6uWNvwi+Pq zo4xVRPWpY0RM&4Wv=eDGkgbug5q~MMnY!Xz2kIC=K`*M6DiuQ=-zx3;gp>+OrS$an zR;l6&wy2ki!bU6M%;=7z01Q`v@{EF)52v$^OkM)us;y-QVG~FZ;?*YZI8`{h@M=;B z+`*nouBrrKTSek^L5laXiEX$V>fgUj`Z>8kH-W?&!^5_rtE^2cNPd+XQY!hit9(a7 z+AtMR1{>cEQaGT^POMx|MfrZ#U9A>)XYz^406v>-EZ$s1DDi94f0Rj74+NLa0??o0 z$yKC4&h&1wLc4L85$(~OfrE>5jc9_eJ+crm&0<1K<-`)P8_)RM!K@RdDS;} zZ4?trSpR~-C7nA*SV`2k)1qN>r78vS4G{)FCc0EYLvY_34RHV>S!N(a`}s!O$Xfr) z%Z0({ly1d=nl(_$IW>wJZpv;}F$IK;v-!n*3WH$Vq3W8F^m4C0yDi1nRY;es@O6Oo z0t2-SL82f)L74g*Ru&K7hz>(K4CDI?=|vOAbHWdYvwGN#1lU4I^bDM#DRvClEQ`4% z%@r8#RVgj}ka6m>DiZ{@K{OI%f)f#7Td)_EtNWoVv~Ea67^`2DDIW8s=*uraS6ac* zfyP(%7nzJ`<)kl)9PBjrmH1EqehXp|ZVdM9EDJ>*YTVmk+Q9lU^-b^H$1W4GTjY!O zw1^$kwuWQY+#dVtohIU-I)FHT-BjLc8Z#0ColAkm-M>{1xJ z(sr}WtmtJl%kVb8E1Gi>=+x-x%)E8v2V`x4YQl6`r2tHv;h7K?)K*qi8`&N=d<)H( z8&ZF07dIR+O%29uG@ysD+)tUA4iXI@nt6ya2`Q|1J0hHo{+_f|Fiy;g9fOM`s@Y;%7uLHJYQts+8(uSWjK{4`q#q8tW^MSvuwO~Fy08!V$X zs_+YudWWoNu8XBeT_oe{0Q7w#&d?PQs~=k7O+QfG%aJEb`UA>+KtusvRM)*II=LcP zI@wh9_^5IHTbK`|gI`Wn2G4UKG44iW8_t$pb8!HQK9%ZwS1hVnuzX;@cj)blFV)bz z{9r-Cz9Az_%>Dc&lq=vx10+kEz(J8DE!nvR17VTczfkjzP=SX5saiw{KoVoNmn1s3 z$_Tin!x)4l9yL>48mqz12?LgCLj#G*+fM^h>A5-7uN{gv_6nSYgGWc&P<{$@^N^;R ztfPT1AG?L$7%sgQTtY9}JM5y#Jo(!+3-J3HcqLuL+2L_gyR;FTG1Ko=sIFoW?UPtd zDpEJsFir_%g(Qh=SP zZ0bt4u9qC$ADAmWrkM*x%}a}VUEyv)!6}cTIT{nIef$Vc+CK?K@i@Id)z^0G>WHoe zIo)Yj7peLH)f~{T&H_GkHc3iBU^}XF^KKoIL4YxFzbPK}9H~W&kb!Pe{V}Qq3CKF} z9UT=x{AWAPQ$ajf(-meTxP4AG*?KJ0>CZ6Nc`Hwtm&lWsW%@<=#S|B}ZowY!P37yq zw}j-v(tvth_EQO%-dcrS!2LtKN!cK<^a0zO!mBCUSAZe^m>(-<;RVP6e<(vsK)(kA zS;1`j!a`fh`w{f#AapqAHIb)5xyb0(H}b}a9SW8-I2tVi8-g8rBrjS51;jo)Z$~6s zoc2{;qx|%n#Z+p5W02Ek^GABZ?EgVvoO9h}BdvA@e1SD}-yO|<#eZ_3y(56ayr_+I zwm;#kq!drjgt8Ezq#L+1ydk9SZ^i$6eE9A*{HCNl28!eR`Zx93o6Mwx=+3XC=Fs8z zQL!iUF2~iGFL6i!3E(TS;0xNgEv^nwfFGZK;2lBR{}Do+y}XNA()Ren%BwgBvl9)* zy&YD5YV6Qc0Pv-mWvAn!J(#)66H)Lo{8zQI%KQ^Pl!t795cVQRdd0Lk;8D)`aM_6J zs77N1c#s3-pk^)D|L%{i@D-d)sl@(yF+CJ(a1Yx)N4+Y}v!`G-R&+|c=?fRDBzsr@ z)$tB=!**&xjVt_K0DegtgAF9VT*JS9_c!MwQnW5y=MKlab=jxyEa;{z^Me~W2a51# z7?@BWOs`bZQ#R7_%p`Tjn>aJq+m5ZrX27CQl9@LHmq3DlJB1n3v!yaDB<5!3^DCj% zov<`9Fz8mZSUm0FR^=GiAMp>R$Z3&6>E30z**vbFHgbHX-5Z;Q_;~x>MNZE;D@d-H zmSi=>*B8Z`oC>uy8NtzGkd?j+VLN#o;o7{6-(q=Qw9g5kq*t(9oMZ`&XuS!Y9@4b# z__~*vbgNNfDm*SDRBnVW!Z=M}t_r~p;wy3Fo=%qJx>|nsP$Y1=BxS%5ubFCkWjxf< zSTz#`+0qdemVEHrO9U=XI@ctbb^jm(1-j!Mb&|XMEYDxWK18vAe+=4+9ib&NsuFU_ z61Z?`Kh}{WW4l}!jyi|W4Bb(Cs~JJlQuO2=OpQCt6YPWpD|UzmjI&x&17|2cy5E1j zF@GT1ji#US8z3uL4Gb8jX&C67!nYjBC-RXUyMEC#-fWfk=~Y_0YBRR zOorVwh;WDI$07A4nr7f3K#XnS_lB@`jB-+2@!1Jd>kUVX%jXC^M*VaR)i_>UIT5bn zMo~A1g|H{kvlFwFX?O7Y!d>DZu>A64A4kQC4&SUcjAMji{F=FI&#~8u*x<&HTot8^ zCaAwlkzAd8`l0S6)}H!gs#kCSZq@XeJ1i$adYqEO}+soi+j6=*9i_t)g%4HU&S~|A$Ku z*Nn8JcY=f1At(jxwj|7V+M#7(6m1#nk3B9(^5uY(py0d5tjT(fS#ZX&j1^?XUZ)t5npRw^C1TF4TGEuj0Or7@vku~G=^`klV_PGxZ4j`kFI zbNzOg!GuNIID@i6f_Hi$O^zhO{Ejxlb7yl%8 zE~3>Gh?x-|xM+m)Ea^kA5fDYJ*a0C!^O1da#GA3KRQ8_rp=zi^t@NyLrBOHm{zW&B zW44;DFFwuctCJ zLJ&~KEJ20@;@6EfUSVP^?V*I@HkNZO8K1FGFg?ZCmA`ViQ3IaTDZcQsfr_afzJ}aK zwsN3n--Paqo76I(V?tYcMD2Hj6{Zae_X5p&^HEDN%wG5W(vOzGJPKwl zg2{=;HtILBubinWoJ%IBkN_$bh}N`i5AcXp^H?cR1$sRq9^M~nd@d7)A3#$ z&mSSR)Fi!0h<=afO`2X-=dV#y5zn55sgRkR4Ae# z39illBT^ebd;eabt3q=2yhIK(B1agE4J038U}vOu#XXX@VF&?l3DawUu8?h?ExC$OwDy z6_A6R^SNG9H)$Dm|3d#ECqIHb_7aGV#XdrI~%doT-5g4CCV7Qi2IAbrS4yc5MS;L<;iYZj}?p z@uAWCEW8jGSG6hDuXmt&4j(#3fhBX`Wxkk{&yX#Q<{xP`HM-G%X05Ntm+}HgVaNEK z=3`)tTL5q;*p9_$o|B5yme1l{$R_PVj4ge#+A)QG5V+{F!eJGeY!&{3v85SQaE=*5 z+=O2)V~^cEQ#%7Ln{Xu816m?Fq;MP%$yzSg=$&t0 z5V&MIher+jqva?DdN;)s8a%^8{GdLJCJb&>N`3Hh2bP#ZR0d>t_XX zZUeoirzA5b0(t(3SPhjo0)}TDO*i((zC2q{C2rHm|(`3u} z)D6GVCVJLqHPPKP?)6d07h~xtj}X6fmF~7lXI2GEoml@(3i%$1u(1?E1KyyaQ1Cd& z7@M4x4SCX8b>ji2!A_)g@N9IrQBQu7O-3m|h`f2Y1xw;Jj;(*J^W?`P^TaE$HPc@v zIkiMLm4D_4=ujgRf1CeiAH2}pEvH#d7IN-3bOZnlFDky9^PXacbKo8^B#;)1s=AWR}h0i{SZT5U;$#TjH@wm3v&LXY^Yc zhMD&O$w?R1;6g-?mcO9L6jSt;X&6Q8S`&{C`~E##eUBV1kryddbwncu@KcC8WtY9- ztVAXCR3fZG+)q?*2;xw2F|7t)0xqO%1ChQw1)iFd`Lic%33)O|QVkxHhJ_nKA@C$H zIII$>Yb2q~HaPAK(GQhVM+WSJ!{uz{8Ht7{Thh<9Wv5f)ibYB8mV6hjrV3ue^! zSHQ5xMy>`?pr;ulJl7~zHp-F3ofoYAf;pY_b~qoT9}t;zk*0&4*(l7tkp#P2FPY=4 z3_tZ|n@noC>bm}EFs6v<^ik^Z(T#PvKE-{x(4a-*7zkN6m~Xq~CL$O9%`p)Lezr8@ zh-aWp?=57Wm?y+Q{Yc-649!g(qLa#VIwA{m^rytrA0Z{FI}}8TQyLnnZeR#7f}&aO9$s z%_qR!xhacCj}egPI+8MFy4xOWu0sH? zzbPePHsPrLrwJ7j?E^tar%WpaNae@pWr^;K5w z9e<6%gmRe%**kx;NuI;|y5=3q@XdyC#hEcN8PKR^Aks|3sKaM^*O8}R)9FM$iOluK zS6N_;vpFqp!3n)$n=Z$$OIlArxmm{nx8kbx=gaHNTH9N5ko1!1^+A38}l}Vmo{s%eQz@KpC?oTJQ57lBM?FT77veA;C@rqmP6hxiS&^_H_<%n^ zwR}a0yKqpWOb5PKE4C?jLc1IhFqH};l1R6z>0TpaL&fZkjS%NgJ%3E0pt~aJMYEsK zDJ6ib%X6UFJC$okRhNV&$CX9?TMYbJeXu@|t2Q?=iN^KaTRY1UK4fkrc&NNKvz|>nqNj0EA3)KqMKd#?Qs$IN4p&peNFF}+ zY^Fa=mnLh(9kwiQt|>OEE)HJgi)8VNvGJ$e)Dwf8XJZtlEy;FXlxfrOjy$-Sgy1ih z;_wU;W%JXWbH7-AoN^W|`!X5Exk)%RsR8}a%DDb%17Vv$hEZnVV+c(_&77JR%6^7I z%poaG-R#Sh5LWnU|J@o4(P=0B_L+EvHR~=r`9L&%K+5$I79^*z1NnK*DuB5wxo=bX zHV@`hyXT|1Tv~23mOFvVTF2Jrtr>?O#`a1oQePDVw+`#4?W;Q+0iPQSE6p+0oyoz_ z7g>%1ee4)gibjQjUhHdBPH5lW6w+W0aaY<&S8u}`-L7K^#fJ!QTT!7snv_(A$@l{5-quLWMf-Y^{ZDwzJ<=-G60M^g&*9^8e3mCh(ddvw)Xm{(W z9$X7xT?`j~n0*tVq!9X5n!UICCaE_Bo?pi!sbNdsqXfZ%A<<%j*o9c)vp9~qk{JfXh@)3zy zyj-msQj@k6$Q8sM_ErON^yDlE(8i5Nl z&?Z?=Y|J~TSEvS5Gly_hN$BeV(VO=Y5Uirf$8e_;3$tQUAoJQ$T^%d6{8=l>CcXfW zXy3Sbfz;oG0oHLl7@oS{KP6Py{#@;;6&1PyI3~Lne$xYbJ>uBx~yrsuc zPR@B|5u@*qrJtr+Cb~j<5M!mbBRX+^+4cs~~ za`tR;9P%Qy8b+D06gpE2lQbEy7nkFwmD-eNXwC{F^W_e1ohX|*Uj=TpUt&I2rNj`z zkZWZ~1YidTb!Y^sfT+>=b`kxa)`hw$;2oF1VWz+!r0&8m*MC1jObHK5_KPK6zbom8 zLOwj4mwn=Ev)3dHRw!x_?;M^$ut6&|>^%d@BD_@<*%;>S0cB3~?4pTNr2$FX_ZFT6 z%A7_!g#7KnBigvAXUl9Nz|2G?}3S8+dch^mr zeOdMW@fH8yk3`4)>JVQhOVcRMl4J|zdd$mm){nAj4n%OKXsVMrJsA)iQk+J0R@nJY z7|Sq67Tl+{;C30s%)xh;?ubOjw&8?09ZIwpXjHU=jGTNhF%klV@;Y(m99etW^#Jx6 zK^-IS;5eZbFC4#d$GEaj#-fF7L0X^&!9;5> z>f@-*&RNe&p&Fnz%(+yhqDVoyOKg#kzLuomP~G$WOJMcCVe(dl^LzcPs6YJu!?lyV zqm3kYK^OA%Np*4bFeqGHTGB10#o&jw$gSLvLC*bK zHCr=C4$5`#sQkm38wE{dQkI{VHpf)(rIR>{92@)}tE3BC@jIw+qzGC4V`8Kq#6M6{ zMTJvzmk?HAG&7K5vu;^_vsl-BcOeFSk!bSxY5Pk~cH0H0!+z?Pk zrX}Wv1p6_1aVJ!f13Sop?*~#5jkY1GDd|PbNih661-8JkDZJD&lNkkFuqCK?PZ2%= zjLXFu=FG8>_~%)VE1eYBRVV~HY9g$yNcElvHk?Qwkb7@ge`dfWcd7{D(1qGX{7!-v zeWIm^paB*l6eF@A={iZQ(7ltXUuZEs~q?ZBP!v-&{2 zYygJ+(A~|L*=bj;%8uydf@+m;P_mirC=Cy&0I7Ta>z9PFM7f(HQha}=4$L11D{BqR0jW0&pokU%u|JLQmmVBu7$Sh zXIB9qmQ)Lhp@$2a#(fmjznp!R=x7;vL{M|oUw?1>cql#uWE`7jIpiCmtG~{ZYev0B{U9-x2-VaGa*!AY z1;Jj=(`B%0y!2+^Rbu%SVJ5muAq`T@dEpH8=_KG>7eFh|SiGh$_sZ;~`DKaf_}z!* zU6G>3Paz6wv9R>jh!bs=c2qD|9!Nya{vMGrobhr>^iprCRs#i{&z>H$o(_}>SI5qQ zw_m9Ske@YK&*E5BUv&o?6YCkwLR$3W(2EJ*x(FL&u~h`U(JK_0Upg+>SzKe+9=e*) ze^KDG>e*mcq{Kfs(=hrB?*tJWnhtZnIdX5(_Gam`vwe>nO+q}yvQJ-={;t@h-y>9u zpZoL&HttO;8SwrJZvDeka3996=l`kQ;~Zd~X8%prKH7h?>msh}8@Y`AO#YjF5)2#T zv%I7@7wejAcyKL`pSlaVvdM?TLyA->qf>RRb4dPTOM)E}i5)`%!P+lipof}BiRaQu z+{HwQb8)?4(OS>Rxx#%>`4w_06Z3=il4?#=va z#M^majY-m2CqqKq82QH9MnBFMmxBbbE=++j$;Kz`i(tRVD2NnoV*KM#=z9Tu&ZveT-hNN7R z2WPmLp==D%N{`k)!<$a2A;GO7<#X(Je?ae*$h^;P0C?i%(ee*gpGgECczg@1ve9e_ z`ZI>36I3HXK;|O|AlTo4F$HpIAjuZ3e}ph7}*B$*q*A zyDp0!Ai|o;GOLkm`DhgrcGCO__Av8xCGg`1w_9@Tuyc5bCiX^)nXdTK)r*3w^zwa2 zU2eo!S-l+geuvCv6FsE#*m@~Ium*FMl5OQ%V8oE1FcMNl?9j<%n*C^T4*aySE^N+C zU#)>Z6UBQCAD;E|lm#p(kwCnCQW(SUZi;aC)RO>G!{zmM=6^NRW)+C4*o(Du6hy;c zQpW(l#Kp2jl3uP{_CJZH(gEEb$~7!<^Q%2`M3U^!6(6qQc07x{aeFmb<)YVFhofP5 zJc1Z|Hv>88-FVIh1oEEkO{;8ZWXPg-C%-75%?d)s(pIpxj)xm*o; zt%i+9AV$5L%eXt<)Dzc9QPU!**Jm+vpU>BSQ6r@O?`r2MPa-(%mlf0IIqa&~jrlLb z@U;I3e##FY^d3cV&gnYnv$ICFoIl~PpFA9V`W}V-DQfwwx&h=OCHP`{@%z_>qW&t! z*Qn(?_O8Q{Me!-Q9&h{KGiG{PGFEUjay*D^PX}R`A{n)%v}o~O!U_9bkMcJ>h?`^~ zfct*M8}IMt0P+z@1}WjwuhU%Rxly9-Hoh)LYEB&{P?>`2{p79&}V|6l$}I+^wl57b(whB|ur@WFe=gAU-06 zAg{l>092LMl2f<1U0etQnLc?WGH5aIDq3+thiOEHy7H2Ia&V&xJR`$Agwonn#b%=; zrJ0InMq4>AnbM%3V>E1z*4+9tiP*kPUm@Hh`F0=Ai%kY(;>hA1PUR*Oo~TmbMihy! zi(fBhjOtZE1%?+Z*GAf zdTIG>&2f(WAsT>8tDe7&-zd%pQMG&H(3wrs!iE zM|2lDz#ZZN2sR&e4IqG-LJc_|;LvJ5lg=1B7~vAnw9Mm9f?^bAG`53=Xwa+MsZ>-J zw_(|vo&wh_Cnm)mao5(`lO6C7b&LDe`--W0eSD5^^T!DXK0|741ZolC(SW0~9^K<< z|J7b#QX-8e&Cq?_Fgv-iFh%|`eOi5LnM3GYG;f}LQ!DAlOj?1REQ7rNx0n2DgP%T5 zj(U)FAvHyc{yA%~gE;$Cv2o-FScr1i%qHaS^EIj!s8{Qrea?_>wV#BfNg(kUsYud>B{&RV&^=L1s>aJfs zAHq-3v+ZqP*~~KGMVY{t{&)OxxC7R@Bpa`sSH&Hmh@m=Bd>(V#)V){kVS~L`zAHOcF}d|4b_2oz#ejOGpl4nNnk*#Kqgl^&1cXfM|2ZTSc9K+I8(4U*Wj|EjR!PT|hba95A%{|{pN z4cq%aTx7X-x4qe4o?2l|ufk6?h)IR1zKLb_6PDP2vzI-!x9z*j=BfSt7N%dCR}Q_8 zOz6`Vr+qc+6>?jq;t?JZ>L{+Qh!=r#n=EdR0Su3Fry#+QcTYyjItNKhF}Um_=|NSE<)3rn%vcPB2-N5rcC{Shu^ zUjg6KQB*l&d#IWl)(~GNLk#;YOpB*S{Ssf$lv&0>*V#pY9<^5#jFWKdYEr+Wf!lu2*=c%;H65JhP)BmdSo z(5WsqtO0w_9`>qLRP^~Q%13{Nh!24NqRA4{&`36B5)v#*PD<~>L&>gVnKAckEQ;J#BvA|ExiG`nRj5RT)P25Ci*6Drztny`R4W$sOr z^ni1eakHsqi-@CAM5n9C11kni`lP5Bu8NvNC@sRY_t%Jix2UGRU0scns+}v~@|4hZ z;PjEo!v>-oSwZ%rEF1nKB-Y+^WjS?Y4Tcfpbm;E)iQdtHi%yO&Q>yYSgU!$5jZk1P z=Oice=bC}NkFE?vpR~}I{7~Km>&2OAVCx59$_H|?n%dPRGLWnvg8s*EkF$@I0#v$H z0JfEHw2P2wr*Rd)NYdZ(F*V4{e<9`iy+me$#lhSw3$MiL)dX?nO*QjkJ3eZewumn- zklBba9)Zfbbad9^~Pa17w=E#y;qbI1|37>YV*JGpk z(&V;OcF*Kj8xGyo3dP}1-Tq&lo&ARn3&E~C_jM&-qJLryszhnL2D|ANH1WmIzvm3I zc~h(2{*v_h2KRa0_))Qa8S)XT!wgXN=YWM=o{@)+X}XQ6^^HCgb5) zg+RZSVD?=4er5(CkqE7g_fy*k+T15pZc$$we-t(OkbGwqAyNUF#<>hdpav{}K8Rov z&U5Sjkl+Ip+81$U&58koQ90R%zAjexV^+ZF=9W=k*(ChH?vT`lV81yeC}@jj%X2Xm zW5AlOQ3G^s!1|%gYWPmXh^blAYJk4%6 z6IhyqnU*hhzzL8+=!=w|Ww~Gu>UrCMDV*AU0W)zAwe* zur$4hqNC|acJ>JbYE8e2v?;=*A{y&EJ|=J9m;VT#&DSyPcNCU+wxJ~y(hbM!uXV#8 z4}K1-rxf;1hGk~$$q3W56`m#77B`|Hj9rrGTA-ItE0-Z2EI8{|c_TfZ+H8r$2}>qv z{z95v0Ay182Ynn4He>PPOqOV2|1%MYN{_(xEl2n(K6ui-sS2OIK1&2VvyHPqJ7En@ zDP@p#qig|I$|MccUjwIUGy)<7K^zy_V>APO|JB?;rhR`p)$;g#Qk=>Q;&GmWGnSglc!@L9{+;;bFCPebJI%f5HeYw%A4}@xclXG; z`vnxvahy9!l-SL;g(fwYo$%D3d?u=J6=H1WzZ^S|FdoQXTuVZ>6(5Fhtj2Psa>SqI z>P4R=nFj9(tgHJAKV=R-Y47eEZk>xt_{}GxPPi%^zd`N03LirdNg&<3O;|lPd8KWO50Xp3q2!W+x>c6D`qJgABrDT3LKf_@#>m4n=_?+anq;b_bNd^F7kl z)}?4rUb~=}nX`bP1N7GM)1aGmxIXG2IVtda5bsFMvqWWG`%uvyGSQWk)tQL@xe2WW z#+dni0fczWE><`jtYf8FamFU3#_g`phytinwfyDoLB1J-`iJCQsx;xGB(w$%U@B8k z*UP<_nL$f)#TunnjXBTPx2N5}>RIBJgUtj`!;}qX8zow)9B3n6jPlEp7ofYAQy3_& z8dV-2g}(=fV>OVdr30B}C zZ+EuTUG^d>oaliR${1MkQ;#FPz29g5kF2+Bi1O{$hn4OaYCxKyySrm%=tjDgR!SPA zn}MMP=}v(Gq(j7i??|AmU_x~eYFV?lrb!5U*_#<16Rq8w-6Fj@8NSS8K zOu5=(pxgM{a0P~t85cAWhd(OODOj4EaE!*t{MLi(AjfD^dYg4R!18>P8(~d%cugb< zuMtb@J!nZNznOPx$fbr@%qo0I^_I@uJ&)wtgW3B%$If3wtD+q}m9fzX;>i9AS=2y* z8OCE)#Cu@%5F-_me!Mm!-K>MXsO+$f^z)D4EZPEDzUwR8Y}voXW`WP9#x$?m*l2#d zl-tMVW@L4kBfTmhKq%MpVKQN@ZFbwutycVbS=GV2{7fTtq9$9iV8f1o-^IxXj#CoT z7vUD)W5eN%HZJzy>L*-!1>)i_W17fkhi5F9oG&QM4z_tw4D04g_dc9v*W?9(j*<7U z@Veec;ccYQ1?y~Go|@%n)mbySJ>Sn1StzgfXMAF5LlfGIpQ-U9&;q z++iMhEKq2bn&%hR_zG1WDjUVVzGU8Kf~~K^P570Pf_%)$hQtjRsY;IPxxS0wb4L6*Vn8O^6_P1du{M1g&^|C;F(8X zl^p1wl-!>)xrYv1;o;JwLy7`5MQa!lcLKg+-N`RuDub6LyIa3}c`oLfy~twY08f)0 zKgC1>Rd}x1&0Mi@b;{sjr-|{;M!NWSjaIRx?TTQ5?xWVlE$=x=)SRdwtDp{XTGHnX zv=TTq2v{p>oR<;bd3wlS4~qX}5Z|D3tOfwF^_Y*|Ck)FOuJrf|u|R<;@B#g>lmW&_ zC8m6+Op(-O`jLD!1dvb>PQ|;Jek2G?6X5Z1%s{}U6s2K07MzZnjqn@VBCd}&az~K! zn__BP#nPETlerYTowZ-nDcfhH7peXrT?5Wd=~!;RnTTQiM)eLoK3*2xvNt3?z>DXT<6+4JEBiGVzJWfTVbCg1wNs zUGR0=1npl7a>BpHM;Fmqru!A)!*w3ra4+r|u&q8gj2n{VkC6-?ez1A|v#w%r0txoA zoPCmHoKu8GGab%MAzr(POXH?h4DgK&O4eo+WC@G!k(GYLV*`evkkrflxVW8*xbe=D zO5HuPHI@os%hZw$|LbYob*oUdtjDa_afEl_5XCMPy@=bHhv+mrfrN|5YtscxuJPG= zTNKaYLtboksj_4x1x$O#y*6>R!Jq5ile9g7(;AGm#h77Z4-IkAkp)t0KSW>VW;!{> zJ-+gw)}j0hFEF*yoGdZvPA2bZy_pWNZG*^5WXOko2EXw9w%jo;J}!*z-Ozpdhhv(D zd0|<_AoShIlDxxkYvfYR=J<`~%~QEJEv6OS$!aCS!sN2<0P3rK~`=WfzbGuBvUJA7aAQX5PT-&ORQti5ZVP z+OZ!SGeM($Ua((&*Y)~(jqR*#S(%>tfq%?8MO>vG>E|dp`eesaBgm=~cDb^&CKUB$ zvX?4-fYDs!b5d{tBlE4tWW{eA%~~RNkd?y|#AC*#*~4)W#F2s{k)a3=!(Z`W`R!kr zkqWwkWF@~AidSQ@oj~f=5(3MfD@2)e=H@o=r&g8@ig$7D0PJyQDyStV9LRDCfskwd zPvQK#?iqJzXIYu^&5k955)0nKjb}HYNjKLa!dhd;epLmyp{<{c(x*aN&Q)P4fpqdW zE|T0L(A$Ip&Y@KDcaHSH_}HCY{kWHFHVI-G{0dUoHYOsCggUfd4moNyIpw;wd1}qR zjFU&~_t8G6c{UUKkT=N7je!Ly21p3=PrscDpm!I(VdJE zwkEmdyV{4-A1Q8)yz9x}BJ#d%H@{!C>$MPF4I{wl3>q^DL#LK|%#BM-H`h@!Xk6`( zXR1UZgy-szq%w(a45z*JTi(dgR;7OC@GK8OE;(0|Bp{!Q{{d)z z#lG!E_F?=&+cpgsJ+q(w|JPaQKqyH9^2IoGditpQY5kP`^n&%ie!yKYb$|?;E6Twv z;;uf*d@xq7Ty$Tsm zJV78KN}3cKHdjMPf1^Q9Vx|F)G#+|3%nkC$tM>)GMGL7;v+s^mf^ojAyO<$aqA1!Q>BD!je z&pQuG=WY`7&{hjO))XasAs>$9frUc~1n(=7osrGpB znPc}#jl@m|y*aoxul5y|D_wB{_Us%=QiQEoOU8YwkaCEZ^hRhBIlKbX_1#e<;tGAu zw$f0mV9wUj5LQ~Bq`cx;fl!bEyhZZ{^$rZBnCi&^%OfVt=TRgkgP9# zzbT=ehp*Pq94dn539heeDU~*-^&HJb`>gqCZmQJM@~ETM(0e*{{tF-h`+;^lR}sTu zl}JD)%`Q%YU?aWv_l@>0>S)p*j<)X^iqZh&|BTf(s^KTF0YS~X^P+x^=t{36AlyX;iZ%vbV?XAP-)}X{$6Kv0@l4YpRCk_ILzU)zGMqVB z@}9RbSwTU)IN5IWuL3szdVd|yOl6$P-K7QeeF?9vZ>=lLO-xNJpc zd|IpV{ zH2QBx+XG9tVh8%RX~e(JVL*x|Uw4?*{M!r5*j4Nfg=^PGqFdpR(|6{p{Rv<rwZW}y{uZJdAc^j0Jrv!L$5>5GvdJ3-{Hj}QHd0aQhDf+ z9~t>T=P7@!%&U1Ap&E%mF`qO_T8b(U96{eZa-D)T?HZ_J;uA#^aE<-kH`a;ifk#n;Avl0NDtqY1lV+yuj2q4%j-_0`NgQGdmxRvamh~{!08!+#L>kZ&X zcM8HYLUF~#pVe1zXoia|^e%<>Y*O&;v$V8t0KW&?GxeuoJ48d0``2wLTJ!NY5wo-8 zddPe!{!e(NN|uMO4YBHVWKa5(mUBl`vx>!YWq%cmv`e`eLY>pbJ6Io7q0EloN}V+e zwi~>hA>LtM1PA7vQcyQIbilf8tm5nkn3op3Z`!hUz{wp4(*f{=jTE~;%f?Yj0V#hi zmevg$F&qMK(hA`m=MCmu->QVDp^!8gL$&7%8=JR|F-Z<_zwYLZ z+{(e90^o&fTi+huw0#Z1y-F$_FVy?SKR(?t-Onv_kcb0GFUz0gUn~;H9N#O7 z;#|CzY46G)8xKcikT1{p2%>N-%|0o_ci=Pw%y#$?R;BluHl_3 z(2Nu?7TFiv1DHKAy}0I$@SJ;os7m<|%AXI7=1&QZ^_rkq)B?b3P%kvFy(j#--v)km zQMTcbDsW*Vu(oaaLTb2pm9>O=5fbk^>11itk!da6cxExo@=JKtTbeTOrtE)>p#9H> zvi}!1aSM~|{i?{Pdl>*2Ej*2c_K5LINuAtY2?h^%_4Z7@OKRKPl$7JEdWKZ*6q)?s zd)a?*38=+0&LxlCV_R014L!*<2YW>IyeHMg^V8o^5H&nXo0OF z2~V?MUF-~2fN9*JUHp-9_P^jz-v_oN#&)OO1H3Bz>CxvoIEdsO(DK?!=~}N|GUHE- z-!Fv4Xk*fO`6yk?zz8>bD!`!_qhLjLHd{b~19QZ@83x&T9EfSQmc%%>-cGnW;xY1I z<`XECXxK*JARG^sls|jN!&fZ1ze}B^-w!mh;tXG~kl>S3}0{kJkA(^$CeS|*v{l)K>aQ+o07pcB<(n(1BcgP`eF@Erg+!jI+ zt9=@;-QUy%1 zl6pR(s;_I*ya9v!ao~$W77P4dI_R)<-;P*(1F1{r8MxuWT(b?qs}x#dz1Kvo|UK;DE^eak@g^rxouu z$Q;brP99F5Oj3Fc0c-p+f5u)4b1%P{4#2LQW_HbT7LTw^lA%w@)|}2zL^~6k4|qMX zK}^}jw7k)wi)^?l?)O28wX{@UY>urz9@mhb$A&F5ep>n~ zmR=a~Q+-AS2*`gU_V<*Q{B*yjBYXS^usyPEVnAprNSZa*P98ZJXS;IdFrVQX>Gk+` zIO$N>ibl>{Dnpce!XxE|cMJUs?LXkxGz?s;fkw)2X#z7m;;XglF)o7tYuKv4&s;G# zTh1gM_x_r%|M>5(&O@~A)yV&|>YOzBEJk*7bNU{`NV`Fs<8U`D%$}%s-Eyu^pY~Kc zBagR-Ncu$24v?f|??~V(-K7sWHY!gQuCq+3*a}!Q;aQr12 zn3(6hd5u4-E*8LkTISW;`L*peheE(%{NOGJ*f~LMi7|ITKqNH{smIq$)odQ+MOIyN zsg#97+w2}+wx)f{k-;XUok;v~n2`AT^&%1#oBUQ{F;Qx2G?qARl5_*yOUAn|eZSyD zjL+;yeQ4PH({}FX`N%vlPcc9L55l%{=G7PRS8 zG4PdT7p$p(nR*NyavCN1JgXWO4K9IO%?BR|NH3^W$Dol z`hQ?_2AHYR&fdGQ*+<>QJa*(PJ)6 zh;Fs#laQ00fhQNMDkOu*(P?5WW^Y~;=1MxPk4yM(EQl%s;PK_ETpt$L@A2;s&Ew5r zV$)|8>UaVtzDTggj`l=hEqaZZvXe<5kbd+w)NbxUfW84zJ@_OkK&5$k@U7EWRWyJx ze!FMnus@^^ar?S`kiQ+}DdHS(shoeF*Bk2vBELYrya-K+-&Q=l`2+E|BnVCkHi`?N zQ*}Q^x<$e8MBg;FSo_X$;40odxhr=#vLCfM&890kP&_qZVDk=_nY`Ne;Eej>OnePl z5-cs5`N5A}`ouCqM%6s}CeoFVMvm^|`vh#5;(BsiZ~c?9g2&un5E+9ij{=0p4NK)4 z#W&$P*+9ZO0RBwK);etJ+ zA$j|(7-G&QMuKdZ?H(bU2}72V+HE0xU8M0)J0OZ1Zy-s3_7tU62Fr_fVsEVk4}oO{zP~k;Woay7HHY+ zW~oafyJ~+a*?YOgS==_1SNVhM1Sr409A((3O&iM!V349s$#6la*zqhb8FKge3RyAq z&kSG*HLH(ntA2^HWnhZ~sjs#;K{HviX+uZ1Reo=%G@a^czUXreG*CCddUa_1!&fjk z;^R7-ODif+k8k(g*TzywAi6?GD$$4ZSXsoj6<#ZAYY8Wsca{5m;cIHj8g@Ok(? z{)TnRgAc0!4`(HX*6z+`{_ZIFFQXQ+i^=2u&JroDDC9!^fbX}|SMJm$0C5+Qi1AXP zi*$WoOmd3bpv^5^9-g<2B?b&DCTWogr{gyK)CxKlrKGYq(U~B}j5}HjIBb za7=-g+0&P9t1823fx~fJlEv|(u~+kir4;xgy<(oA8!@HA7!PV;RJf!EFtTgZ>MLQ*x&hPoq6b;|3?`rYuB*g6>#qAL3!RHYz1>-%A;ZE zLq+*!P*`UO9QmHL`ea_D#ndpeq1=%c0}g<4#Tf%xp!B_Qri`d2L^8=4P%Vi=?x&l5KUZ>-AG^hPmP<`Amu9=={vOUzy z8@azjLQv<~6M2CQO>YV9-PLu^P__|idEiBxB=^Lh)ME~xgT)Lk+m}l}F&34kifI{PgcnF`z3f?!?`PyOL*5l-)`$AXJI$}ua zaM51iQWTN}t{n9-e@hELWcA+1o1xwWE51~-#|n?hmU}?ixP7 zSIs-CTp1q8Mv?yi|B{#dYe>!i-yvP|@eD&|Rv=d*$Yn$2uZUCxdQaI(U_&F{!_OOT zPj0CZjJ4b*^KtG?irMoE)s^b+84sVn>Ke`;WBfuJrushaWuS*Y0PfR1$bY}R7DJ>0 zC+IbD^<`M|I&s{M)P{3wu+qdfw4_Rn|Cae0*4k8>BZ+OybId?lj7Cc9(4i6+nUUaM z!%%}B`bk>H>Jd}&Y!*aJAIuZodHsR0_CeK z+4~%m`*&qsde-Qk;76MvT)r`Fd_RBe0`}LKhc<|7Jat&tJWqApmesj))wLQUuts!q zrj#3;I6!BzmP$14tz?R5KqgPDm>jjtyzL4hwl%~nWIb64&r^5qLZ^^O75kQw1TL6; zHyjVovd1a2rs`l-!JxP*BW zvh?TUFQ(;^^#K#qGiJrq2)m^`cs$h4sBtC;X);lDA7Ik?kv`KKM5zI@(dTcXn+NbqeEJZ_gJE##pa z?;2(&S43$$)Ip6o-B!WFZ2B4M;m7rKM{=koleu>*Xe_&L9+y9QzD&^=d{;)d)&|D3Hu*52tW8eE%te5NiCFjJW0m`;n}miR$ciQ= zsD~~?q?cnI8abRjx;$rx+vy0x$D(RdxyvZf`rZUYKMGNljnWCny5GKVyB*icIB{}A zL`1weYW)gfq0E-|;Bu=u%IIOn2_tMr>yq?0HaWm8d{(bQ<5-Q2uHgceGt=x9Z!|A5 zVPdOn@Q-YZA6pn^6(29){5YP8J|H}2g075K5Q$5$?Otzc^T1>?De|A>HD#W{Yo_v{ z9eez_AY;fs2W;|bjgeXbhS($~4waDwNvQcV9*B-ZDrVquQjgFc{7gnH!5mT3he`GE ztgIW7DqkN4pKB-bFXnYjTxs}=^*c(5Y9l@7JeArJ6L@o_VEA@wW{~qhrHCMC;<1Ww z!-tsyDnvfJU&e|(lxuyU2Jq!z>o8wbZWcTmMTl7YiwJYRZJ`opbUe5KwP$wQKgYFuLcS>gC) z@4@hJL?BarcU4rc%S>qa2p8PoVbl-1PUMLYmQ_KhwVx~C~gYKC2g zuq4or9?tOo4uMYPHr8UMw4nEDs(^TOSEM=SN_}>>5|lZ`-1ZN(WB}LIsA47G4cqZ{ zbff>->kKJ^tF1^O-1&~7`>NjqNP4f8Ncvik$N}g~_IVyMG+I^J1}vC@4!B!SqlbY{ zw)_J!(!vC~JYD8401&dIhwAuelHY`Rot2VM|tVeuDC(wG@tRBVuqE zwb8f!_d>jvJ5p13D5AKPnNxN_cUV=Qi_KoC@fcMJ?zb(fZ9e5pXWj%hy1KBeQjf8= zRV>D5!4MhxVKf&}P1jmhS*!K@rto zw77aurtT}yjf1ZZ;t=|b{2)K9s1Cw?%(!ZW}`T| zMr2hDwxI00#a{iS>nH(rr@O72zp&hpGm67KLYys^x7dUdqCazt)apV;iIg^iH zE8Qrb+Te!@0~X0p5VdKTPZDN?jgt3c+)M5&735VQuK+wuYf-WQ1aL*4Aj5SUDzbnv zYKc~MVsZOtUuJ7c+NDy0g%$mrFXhXxZm^-`O|SJ8NZiWZ=mQ`VXu``w)a_mdoC|S= znFn+74E@$T#R4f;yST>YoykYPfUf%`3N(K27PB3E43Q-EaFKskwYP zSsCp;K*8npvham%m>s^c)SVLf6w>i<0dADq z4a(b}<)Q#$0#;wsiHV56u^93Tr-WOVY;}h9AC}GOWD?I%dbF^IZyg+#B>Uzo`HoW7%ynLr8VDF&?LVBb$s@AjzA zR{m|n^*1Xo*9r{#Mr}?jS2vL5IBRI-R}5oi%`kwaN)=@~dT$dMGW5o;HvrAlgq2{3 z$b=w$BrNa~*6tS*IFIYQ0n&Wq9sy`Yc0XY~x*i>85Na8|{2~gyFR&);tut+&4P#Vq zEDAHx8**PMfq5*I7C%;omrL!#C?e)$kEFBOJNPr~hN5wX=gIP&Q*PQ-r9hZX8o6tg zq%^It5uhsb%7*!PSNCWEM|rMDFtd?uXQQ@K-DAKqZ!Dfy27Wcz01*a%mf)!1d<}<7 zsr!Q1RnUUo+=#({g<8gPb6{B0Rp(J_9rXG(OT5B@v8KPL_)N^yiJD?F5Kj|5_AC$B z**u|1Bi{`45zhe8b*ykbLk95GI;Rjj)jXx$fuSut{E^xi=QnIQJFKzVaGo~{k(VI5 zpGM9Ch+h3arE)nC3&U!YMSPeQw{|d(@&>di7b+;5d3WaN0Ok~+6~+yfaS4gP%Pdo5 zZ%j$cN_CC@nvs!!ORBkrGu3;pja|$~A-1GZMB)1Tm1DBuYK-4R%1_>PV}7{JSKi%Q zIhf$*Uq8YE*c5N016ui?k-$wGQ}~%Vd)bZpwXf9SgMiq5B_2Tt=xzfQuUAGzB-Oty z&)H17|^tFC#LI6W75#v-P|-}Q`S#~{>~)8>7%9?>!AzY|?+JVM!Z|Ds4So?79^^04I%yv<&x{Ry5+8=n zc;=;;fkOS*k16l1?|`0Eo<^sCW4>WmtFlHcb}h))3cO@G#bqWFRF#j1F81D#xaVd{ zR3GkovZcoCMiWXHE&Y>4{~~zk1S3fJ^+jvUzf>&8z{~mWq>q0wuDD0>iQ|kS-))lr zZ@PW43T^u}!F4%u)bRh$sBI!gji(nfo%kbjB82%rW^MJB;ncL^uGI}qRM1t?Q|;Du z-F0?dD#{2D!Ta)1=+Nyxvj@{n2!C`tPv+)vAv&gj{h2cR?LbjVlv8y$8p1?hO%VS# zk-TYZG6o4ZTn_Z+Q+o=z0znGc?HoAD#d@bqpYA{LJGsKqMR2aBKpPd;el!L~<(SNP zP)#QCyfql!j_A}EvrZH zW7~W@NiSx+QdI@h80%RzSCVcw)sRxn7#2Q;Bg=2rh14ky2whG4e0%(M4Vrr4w#w%B z)2AKcVi3U3%t>=g2rRY&0DEJ2VD`+6%2ETN(vsM zH5o)DW+SqEDvL05Bx1;)%XtZ*TkmXK%UMHqFh@K)Cx9$@H#Z*}Y#N@1`LMtvsn;8!0kDT8PH%6I$4rI8xBayuJ3N8y;HaMV2;I!2Ljq+J9 zi<5FxsbvY`kVLbD@v0}Z{R1iQtdoDvyZbHnUZ7b*%r$oh(aC4z!-gVVAK8u##7*dB zNr+(FLw@pCgw@W&*cB=Ox0n_LOa*KcBl8G1I>bUx|0o0Et-G0A;qSlMI|aq>VqT;# zrg}OqvNq;PD_KhQPhT9E13rnc;&~bSRAkCgf?h)xQ}s)j`TqVB7F6nQN&k24 zuHiXzT?wud|8~!rPyavn9E#|Au2q5$ABv!^H^TzuufM_6mb%tbSGAz0T4$2X9 zB46#>3}qsP1+$8x(vC#K_{wZJUlWL~-PKHcVTC8Z83W2)lQ26Oj|>Q`)ah7%b)+(> zLytVeqcaihB%Re%Pb-jaa8pY<=g;)B0|`@~Nl&PaIy5ZN)9||3b)>*cmZ_e;Sa7FQ zr`lwV_s-}??P^nXIyc2rAR{!nejg#7q|Bs+VzqTOmM9Gs+;(CH3Q#FH9Ov)^iwYP; z72N%nD;kX$c`3{&w*n7nqMdfr-^6??WpfNt7C;IhP1K^!^2)A1q;bO&Jse#`IB7b9o9BF+P9Y&j1h z8|*1>4CC3k53^dB56QTcXFkB=4_;1?sa4h zcg!h~9q0Ywbfc%I!|%g?h0yPAbimW29YQMS8mpELwpAZKU9j$cE=!fB{Id=}+YHL4 zJ_9cNE81Dh?(YW7{_itv=jZ1eyT5;skwe~W+fRTK^TZF*sc+6AxwMchIBQ7qa`BJx z$Fmdrt4qR0|K}9_@_cAesJL(lgR6H^uz7*;FF|$H&vZaffUPQh->zhJnE1f^&vew) zp_kKLQx2uzuoZ|?jwz)6B4HQ3kgm8-ivaKBHA0eaQk7pP6U5ZltjH}xHstQYZ_%g} zOlw57$Y5?jFBECF&dyB+&YJ7=bjMkD=!N{n;yJNXlG>y4W-a{eX(2cD@>1;~9dWE@ zY%Y`L|BO}j^Rr@?3EdEoPUO$4LJSwCRcBC;VG{oo%K;-YLrS@`JWEZT=HfN4oOT{y zIbkKOmFa+Y5}S942A_q?>Eiav>Qf+Dk%cAutuOm848KVy)Z|;?+2fE_BO;V;fs+Na z|9$8Ed_blF|6db=Tc>!hFG=sniJECoWb}TbtjouDvI@EWb-SX&a)hEht`{CTZtLM`#0$=sFm5V|1scjHn5wd%nlYJ-trTK7c29igV%zf0rB_tQ< z$8dZ{;+VNFyaA@ILpG&3126gVtkf@Ly?j>?oRfbKrmx!ED3xQif&e1S{$eLUE?S*LHpUCT!v z5D+T2OxWA7o4a#X_6Gg6m1Ytj-ZZKwd@;rDR!sJLJi?*4nFXfc>RaNJMbYV*W?R-Z z$xwCxp+~P`gpN?oAr%%uJl;kS^vcyxec=**$I~@LWSOFe>)Sk5q%PA=f@XZPH*`&+ zojDo|ZVY)3ntMW})PmUwi6_rEpgcvdB-K^hHFPG&U+jCF|MCbRt3CsVS20yX9U%_nx#Povc3~Hf9NR!BmsG!3twVeT!M6Y zru#hy6hovL)4LJ`E`t{3KYo!hVNXglTU+ZI31IhA;@ECcssOA^GIh_iYsN(nqP!z0bb08<>5Lv3r!%E{-B%~e zm=Qw88+p|3?YXklf4sZkWP!Pg5g6~Qyi4Wc-hqTHjY^x||JyDLy24c9>kgt4|1Ssn zGk))6|I+%$wL!PMgC6#TkNK~rathYJiblUPR9jn23e#Gb`rD{W431(giDmcBF&pLB z@E+#A)bz!)$fzs%BnuyZ8TVC{evsw6+4BH+p0Fe*apH%}FBXcAeXiUnjZ zAO{y}eWwauiK=d1?_<<|`81=Akc~QE3W0Pkr0d5=3OUmnQNrw$sUL7DuSRrerAO)P zm>r#lVR1r;72Ac-gatINkYWsJmd6C)9#Bf!$7;t@;&oR#Ms)K_EzE`oO7WKI@`+OF z%;Z7<3!>4qSena&Z-gGyQNR{!%)I5Bd#J!o3nj)M3h-y8Dc6=t%J8ARHs=m9m0u*H z9f!*2VT8T!q9c*bHJwkndA4Uu2^xD=;y+NNT@ue2-Jluu`$1bf2N7w2y*e1_An(9+ zT%~9`63T)NCD^U2^HG1XC4*p4tMF-;4`_F6G_%z;+=S!5r!7oQN`2q){nFhE0^0BpI7q9a z;3=lT@mzRH&1uG+o+Brwp1Jn5{vspeo_jo!ZjQI&e~kW`p|iWb<@Mc10u-Yp#-Hhs z#v+#A9#Qv@>n07*#fK4r&JGn0xHjlcM2RR?41z#QC@~+iRT*|7{ywKMoW-hmt9B@0 zlDcJXDE}ihLH`)c#ObYGq7;dsRq{Kc3WXMBUwmT$fla|?k!TM21@#a)WW5gP74bKr z6|@81it4w^TonE+Ad=xeCT9{_olmL2QcV!O4&91cm+m)W(lE-TD=gb+aozg7pXNba zzgPaWtzD){+&4yG9_6ecQ%k}_r2g4<#|89={6*M-5_cFcltnX??(VhigXzCJ9($jp zyL}a3AHSW2{8x<6Fd?;DZ;a*hT}SqR=3iloimZq6oA7xEiUt2?mbK{G<8=*aCh_oK z{l3-D=KBZK3)S|IoZj!wfo`hxzU<%6tCA#r#X|z0tGr%P1$*Y**7zyvb444vlhP7G zbrYoJ7-PtxQc)hlvfvE;v7)q52g2u26SroXQT#M{0bJSRs*ILi&&-3*0b}nNXlD#7 z{wy+yZv!=zA>A_uYAj6mY&aO`4qWG}4Iz-wk3fw-iJPhz=UF33!wfCj_>SQP0w9HN z8rh2v`uS)m&dn>_3GVXdiLAu@z@$r_q4pN63^|h&JR3cO#;-ePFoYGC{fQNwgx#BE zUq6P)d;R;XNU!6_j9UEtlw?)lIoS1Rq8=w1q+VE`h>s0(;HTmqyL2!B7b_j*g{h3U&BsTgis<}!Z4=M58ZE{cB*kQ@Ert$vyx;v%Yw)Z z_u1{B?Z;Bu13LuClj1fW9*q^7@h?t`hmU(lL>$vQYp+nBkU!j# zRPJdNpw!0BM3Y{ZhMkZf+jrdZY(9P5Ii<{|m><`S`>6bbT2H z35x%BGur$5RqP?$wobFSAo;L^8_+`|f?@eXA1SZj8D;;6ZU^IM`ubaxmP%X9)i23D zn8*iMC#j2H{X5;BTv?eAgZ3BrJ>pt{i=7N(W6*^D&~c`h#u(gdkXbuN7~d_bqXMJG ziDa=s3S3R)qqlUWI1>XT?i5RhHhWBa<0kV$lE+y=8uac`vOdac;~=l$&ZiZ2xTL+# z%(|(FuNcSqyR{J!I3aIRo8nLcQYchrX`&Y$o1WFT#4ri2)xf6Vv>czkJeote>=#gv zy%%ceWD9?!kDaA`LP`c}_B;{88{vmubdI{sv!=YfkzmmeoF+w+&D<^&-Xyf4RRcCr z@2?rg2t3lQKn!6%@xkptPLoeFTk5r)^wKbIrF9@ZGfU9y1iA)Rk zFv*2GUs~^bE~yQ;?MSiC<_zL8)odrrQ_7bR#QGUN2INd!YKV>y`^H2|l5@(o78Rsm z9f_akxck+RG5LnJ<*IZ&^s7w&_dIBmSc-oz*8&n``-Vgd4_Q6Vws<|Tv-2O7Gv4Np z-Je$qankzv$F?sztvh%M;|#}vXzvq2z+u|WPDF=rp`Et8qqwl2c_Lh+KltYd5crViM0_ccu8k)XxetA6N5n#Gy! zm))*z=#$6u?W4gViqPYp)S2-`R7JJxVWM{bsWD%74hAPr*W1Jab945)fo(ZII$I08 zh!%5yLK=Z8Z}aF7?h{4O=EuM+id5)h)e^=SyMY2~Xx{#cCR`6B z0WlFa;6~!xutmE^UkT+f{ZF561bI+PNu`=pJ~mI9Uq6R#No61;l~; zzYovE>A=dA%xA)M9NHjoek^WaD&CzRA>(lR;LjU;X@X|QLQl?4LP1`!yviNm{)eux zZ=4RV8R~SU{ie*buVN%KuO87?%#B0N&7?>c& z>^V*zB{SYUn;ngpBcUj`({&r%e1X~SIeUH_JX@1jlt7Xu+`m?`z%*v4FvyalIm~w> z5+M+)Bu}?Rqn5tL)ZhT3!&Y%4Pj)G0-j33?^ZjyOTy4i_PAgaiPMpQJC1r*ucrCzu z=M^(|l{tqs?v5CfN{WxBWCk9F0vMniRW+vx&8D^FP`=s0&KV!LpO^}18cYNzFA;`R z{c-LvMl5C_@2{`tFuL=S493ldrh^Og`@3`E`&$&-HU<2e=wpfpAl5~iPsBNvK5gvS zjkul%vHwAC*!wEJ@;6PLEt;Pk0zU@S418VpP7Hjz9_!5~H8k#2tOgs-YXS9I zJhLI(&nhl+V*f+-AeV&j+4}m)f0d7HzJH{*UXAX^N$hye30e~6@X4Q}{{f4aY;-S!bHh!ZO!utD{?Pv~#?wBryW3gdeXZ&={ zF+}aE(d6v=bTil6bRo4g(;MB(*p2b5!h@Pa=6=Bt?1F<2Y%(LSj>7K?k*%qtd`KDA z@F7h&kwKarSVe(*qu8)W1B55`$;AkvYl~$a!C1KPQ*kg%$QWUvOJDTPk9AYma9kXj zEskD$$mYTx;$Ce3Q|{Pxp{Svk*8+>xxWo<*O2y<sqD8QXR|5*4&_jr$YyTG=qpxS6}~Tu5>mB0r_fQrmb-lg&qjt;c`5aj?CQf` zMhpjDOW9C_eMmlFFhG2clz5!{?^-to;CQU`9q+LU1z`3%6_1O7X zqzcG1!Yn`lXVT_03_o^P{8keP?xCTYqY>_e!N{Yo2}H0b`TpFjY8gq(N@eb%!!}F2 zw-iSx8l{j`#H@7VM}zrD9XjTS?D+Yh?C8;DtFHM^Y2!!v`y<==C#-&-xVA5SW*-G4 zEPzCK>iJm(n=$)=BFLs2suRiyJ|ACdu7@8HB|z@`34=m!%hOkdSUyaFDl47ZD6e5J zOHB(jaj=I`E*ighaU7K!a1Eirl_*cKEDm0T7*0ER5ef`;_I8dyWIS|jq{KzhJW-Cr z+d6g_S7|`qbg#AmyO{jW$_M}WfT8+;8lc9+vAV;Zc)yfbhW}Y)4X^BQny=f1)(?$E zt=`_v%*8I5mjv8eS{8-`eZ{*T}L`uwZY|NDFA+)eHb8(`EIZGIFO1%h!~-MFuu z>Pm=V`ZS5xAiY^GMc^oX#%i@Nko#fflbvaNBQO&Owpv0~yf~q;`K7Jq)#DNFG@2LC zX&~(~u#u?U?mOheU>+hHEKnuig(xU0HL31vaSGsd_`&LO8-zdN33iMT<8|G+QxPh_yUT(#M{W?s>tZ!5-0sujt*$DZ`o zY=N!xDhj)AdMoU7=p!8phXR0iv>Cnxi}A*8eOp+~EXw__pZv`aJ(C26`xO>DMZcIp z`UB7lS!4e}OxelF#8@{QpUj{nCpMkE=_y#M$TS)J{h9}^KUpyKcX%V@qgspE)%xj? z@A*zn{hzLOd8P<2W`<-XzD9WkG~1NTbUyN#pGObX!X&H9KhG8}OtxQ=W668T zV=hrt=zFjjw38t1?c)C*SMMFp)*HTow^g(iR0pxEsMd_VX{)rVsJ%(3oy4ZpsM^G+ z5u4h36GUrP(h@5OVpA*jUR6Jz@AtR=Ie(n%oLpCubD#UZpXYwxN4?37CqtCS^DiMl zZ*-=?YkO;W#r^o*amMBLI}g2z$QDoIy0J=PL7MI%u*8yG0#$IE%sh{yA%weTdsdH+ zm|Y1i&rHA&$k(<^<7LjGDXL$CgMWe-7|3XaQIyy;OihNPPOLiccg>&m&RT+OTmE!v zvUX8!Sn%>b#eO`xwy(MmUD*S94_o|{P$5vEgUu-_Mim>#fmgsFYbHWzPVfFyXZ*Nk7jG_BiRirhUEM-1#_1+@`e9_IX-~{GN zqOZq&IlHxfvgWViV}Py8vziE*uMpvxCVj{3nss~2(~OK}2=Tr)1_^qOHclXXeA~a- zsAY#vAeO6RM~=^XVz{Y_)<7DTzfDYh7*?vcW+S&8`BP1wt*0b|CiSXD1*YMwqHe4> z)1QrZT?9MZ!!N=zLpSvq5T!&F)pJ7v?Aa*2czG*~45ic91t{7lW*uD*OC#td>3v<+ zsdYQ0v#(SvIiLH23QLWGqeKyL*Xr)|eXOw3xf+da)!Fv>8@9C1aO57-P=+UHO;PIR z#o^-)GneYyEsWYuK6s->t(6lW!;60a(26yIqt-oEZUsy02ii`Jp zvn&-C-aK6oC|n;UPc0Kt)jJNOA;-<3)j=W-3OG9iBI@aEAYDUCiHonM&ar{5IxFfp zo~?}}!!X+REo@xbBUy}nDh<_A*|%VQ3rKYSzSeAsP0YP$xQM*44HZ9`DPC<;v{MW2 zEH*S3<0$R^_yaP82)DL}(b=KGdAo_2m;=l*z9Wf7q2XkE~ zb}mg)0VssPGviUeQf#8zLwUBj9ub3~#X>@Svx5?83C23Cz9u%dDI1RONNJx7bfY^b z2P;~oXS&c)7Op45+xot^PcGP4cG{=)&HNM&#`|oOR{bXw3b4QO@Wuh!lj!_S`1Tt$V!2ztMsDf$gHyl@KRGSKfa;XDhef*v#P^pvyB`5kJgA!C%T+HkU6)KClIBwCiwBt>!sYI zcSzj;)e2fQZ_Ci+Bl6h`s#%~Ir;SKDt!T|MR5sqHPdPY-(H?yfYN;@d=!BDfAND0J z4j@C6fs6T-_c2sz-_l@ZTuIH5IDu8*nnl?Jk{;1^n5Mf@iZTP;1EVY`DPCL*6bmF6 zTa3V-Ggc^JzX6o;`~qk(*igy068QkmtQZE3bz0Dey8gAmgOc_P$#DLQ5#n zq@v*qqm5e>@v^qwnEMb?ZW_mQRK%uf93cawY{(>_-dHJJP{X{;x|3m;c?~NwiAF-- zT-1c)VfRBL8TVKEH0%jWNu0Hx3v|{~=)ztEex*CVQ|AhK^ZncTslB~dzr$YydYF_o zBK&^rOTb%n->~sU`O#tqn#vfPMuS1dG{V~igrY9;Ji6K=8N+WV<;awj4c8>4VZJUS zqWT4jO|%=!?bXl&NT{b}QE6rFqSj~=8m>3&*Q7Jt)U3RXujZ;Hce}9?9ed>0W$b`( zr>UcycfWLyxAsUvyMYErM@Hw}XL0MTDcRWx-63iGj(TctW=6$c)*6yU%Ns-=(}fKD zZWv?;5OD2vG;1)EE@hcyzowM@YaG@aN|Pj&$B&HcE>5ZeIIZXY>SwgCP~_&-M-L(XM8S(hu)pepx zP7QtQcwS$gb&+B!cX)l`<5`}zV`hAJPbmMWjP|f4Xl`6PH6`%LLwoU-+J=d^hN$)0 zn$o34CT&>6h>V$=$7X=u#oHn)6&2i)TOEHU-L(tnx}|#dyOfmaA?i+@(Be|vQa9~v z3#0?}tZUgRpq0kmY;rJq6c)S4+yN7YcvUoldkFQ8U5fmE@2-D32W=&O#kI1YqU0)p{V zgaFVD2h($l)M1zI*3EkH>_V@!{#0Sr3lv&k=PfCJ6c2Gsb)m1Lg`BvnK^?;CZKGNF zn6uJ2Jqg?G;ANRWX(5xG} zdkMaAQ^RUv*;H(0C;v8+hy8#F@z0r#_^oGTrGuCZmfh3WW!S{!%^UJ*@_xL!`*yDB z>3nyn8h*zAB~#h4+WOuieg<89PBv=^o!E^u0}H)cJ?V;z<#vUonu-dhMQF!%#MdAG zd}CqQ{?FAmMLHp;@j3&Ff&6AzNYtig>Rk0yEams>|3M0k z*wO5*|1fg*B?9NxbyrK#|5ob2;_!k64;AEi@!ws5J!!#Lw8!5k7JJ$Mf;Eh($^ zxPYTqe~ExWmS?qbF_*35C*W@zhQGdTiEcLga_XX2KRaaJVV}-jCndG`m~D5`&EG>p zl=ecDj57lTsROR`z1I$f6nrsOQZXQ;J^&|vKBb<&^-BHE4It&TgTT#w^VjFCg3+0< zWE(xS)iYp!T;nuRI4t$^IGkV9s1kP@xmkaG$aVR#sZeK4s(YvPFbZaqp?o!*3X?n5 zERtD!25h~Pair13O5HVXSYc40Uq-xFa>B-WhaKZ;FQD%>+UDodYLNSx|+EK#< zb)19lDRQe9Nib7%HI1423uxYokzE=W7>FxaBV72brr?3`RCW+%Ey5+z`KhRVIGGN)1T08 zu2`hbSVfiHp|L*eUp&jg)2jZz+|gx0SFwm^l#-O}qW6-oi~*YTH*#bS{C%`O4VgLY zy6-cCTlW?%!nS`wKa^L9;V(`X>V5k|;BX6FFQNIHczXV4W05`4E!O{ypu(=Ik>Yu= zm|%9YhSj9`-Reb3C9AfXrs8u!e%dlt-LQ%D@i8i&4UQN_>^M2BWYxu_Y*jp`-g*`d ztyC23>y5p75hJ$#iL)Mu5+cj)5nVUIMl-H@1D`~5EpHnIY?(}w&J(&bhomSjyl*xa z6r>0b{p{!Y)NN7J2{d6b4-a}erI{5xttT9l0A$Pmj~v#xix$lHcbE|$!7qQr{l^w} zvKn@o5oNWlG23a%S7QgetQ>h_yXX|yE@d`a{oMspI|Ajt`>%sdff9N^-;AWkG zqHycP)3(7TvRy?H}caj>S zM6vDBK2=m2qM}qPJrOlM{+)j_Q=K`1*!e}2py$Zz__ifykD`@5%v#(4vL2a3x8`cm3|HR6Qg3VN=>%y7$qhvIjSgfS1TDbCAH14nj3`1D`zj zXhRxO@IuMr9qRLk;BR1BI%p6%WBcqcIj3?Mc(AzRC4`}^lpqI+VOd=V-wpy%(I#sS2!tIV7wKJ>Klm||0H|zogd;5tx z#+RrVzSijQOCG)a%1OzhF(8X1NVgM`0i`IRQHYW6D_^Bu2zOv=jfhB1FvOt>N(6wC z9;Q8q(j_E?FE8q3!u$#p5O|r;rM(Pfw?8#!K@z0xn@@N5AP~h$AqxC3np$;kYNm?) z#)VeIeU_+FKqi~vJEM#XWcC@p54%f=hFeiA#>W&bD=Vb;ts;fG@kQK=L!R!%jG&V}iZTy}s4t}}9KMpFk z@x$?>xeBjEOy%xJc18skJ`Z0$TG6goNcv^mPDoJOw5!T%py$SJE93plR7#9;VzhAA<3GkK>ADu=AVCkJ z4H#-wq7m)5-QD-)r$U!R{^9fZpM6RNxAFu}KqvOUS*Np@5XDp?l5NF@$Oh{Cv#mBB(TPGR8Ab1^^O{`TrX3vt6T<)7R#*hva&TV z$B+1NM#DLjOUN#7k7EOGt z`(!Pi_4XfyG6H2y%Cs~2)I7|w4iK&L{PU8M#YX=Z=ik-@GA?9Df#=3*?T+y$=W>j)Pl4mL*h0lSSS=Wh3z#JnmyUU=dz>`_IuIc zJOgUcYN0>i_pU$Nr>#8mjBi5joWtJqB!4T9=b))I->TILo5J|_z_-gwR(2W|Jx_i^ z*4y1;4j38~NQVuRIX}vW+p0EJqH@97|(@UV;4!LLiIfT>p`-ih`510;=^C7ChkIWDJ&85J(D@K z0g^?E^0hZ4Kh)g;{QDP8)pf4Q@@n3HFQ4TfM+QcRf47|(XdtxxYgu3ESm$*Zo9K#5 zRoxGjD_Ivu_U3)^H|oT7zS^dG{;=c~+Tg$%_q{*A5ojq`y|I9iu`&KKd|r_+&uw*( zV}khcWq)>nah6=grRv`0JkJ$we|2E8zIwfaH<$2YW3%Hz3QVkFu)d-gii6bX=;)d? z(LmKz)nmnzlnjOQdW`Oi$V4vNn|r&jvSP`oDQn0VTZPn!o!A)+K`M3EX{dtE-2#KTsU93|A*l zDXrJ1u=$hiE^UXMsAg~c+>mT!2b%`hRF-9SACnarO9rXl#>fEUz=@^(YLqI4 z&D>v4tv%H6W`@XnHu|0IRC$>(_66ocx!ffV;)d5BJef?388uZi%j4P{4L$PK={IZQ zdac<$HxiF2DEhNtMf=8aGj{}Z|G}kZ>agbuNY=%S$uYL%6Q0c`8RVvQK2l)3!Qpk-$2g~* zSz3T?f&eJ!Z0$r(%yjhoiH0pX#d}s;V5>)QzA>ipxmW%$G0t>iwv5sUi6Xe$cv&Y=`O)4ZhpTaNXRB5OIw3Rw4+@0Mfi zZshe=`|#9~%}h0)t&9W==9zuDqF_ZdwxHQh-`Ho$)8s^dsStinqwxUtI<`Ti^{e-r zDt0|leMxs5+6?FHAxcdx`fB|sX(v;al?t~ZmRE-46Iy#RdT7}Fe$}G@kN1(tZ*Vg= zo?LNPG_5s?VtOC8p3tI_Gv*`aXa?#RTy0QVPfbtOHapKbr(5~(J3xof?{cnwdkj7q z_fj{;F*9}v7BsPEZ^9elU?HqZ4DH6s0t9n~C4Ogr40Q~ zMpM#0RRZ1M$0aYF4Arv8_?pruXTKoJd-g^{%~gewJ@!uot)tS*Uu3j_QkrQtB@(i~ z89%;@FTsB8@%3IZ27y9PBd-qIY0V-`e8~mTuKvrpi4fBf-HPIoj(2&|eMScIC@uky z6Him`T@`8f3%3tztC=EgzI7X7>v)HOH5ZYp%Ex^afEd=2wT>CsV!F4iHo=Dhxh!`1 zWrTsgz^ufsC5>VE=Csg9^Ozh7PK#S*O38CzFn>eCW$F9mNdZw2l$XQ@+r?aHWoDz( zg@>%k)oz{*A!$48RXBWADBSkr>Xw9VnU_oB)MJ38+f^t@H)|J{kY>MRWxEtdIER7Yib)7cb7am}@SV5m*Bt;{<#;jHDNmmPKBrlPh#R z5F~*m0VWr-$u;Vh(e3Gauqt0yEQJx+mEst$1X!d`b zmYkiaVKvRFGm3WKnSM2WJbLx3vk??3-n=%m--^>+=QHk(FCSsZuW99F)>PzJFWO2V z?#1J>n_f(de$YBMAsQuYy3zg)!74nST-RKcf_=lvuz8diFf8qS&681JwcjZ3JtOK! znAGR_)mxkP%~5b>7?suoGvM{q6>w>OLu*{38-)u0O62y@{E2ci6Y^LuY$E=tK0fG9 zZ#`;qlGtBZpT>-bR<75yl)z15TSDE_eZH@{guM_MV7cR%XGk;BDiH1oxfukZ_H#QQ zKD!l^bEw|i?!0=w+Cw^8-KDcBN5h8YK#yL=)Pf#6uwY(^J|+DF&7RR(<@PkNeFw}{ z0zfGp9fn00P94Qf1(S8$tgOTRN8I)>vqa3Y4yoVn1Od-utJ+kP32&l>1k80`V|fU| zRoWfb48*1sPdluhRvfxZHu!yi{Mn6ih2e}kNE&kuqmP>zv1%wEqXItjkOQ0YC)Fs9 z^)=m6vMp*Z#kR*}h5Ac;Fo@MWbVjD6YOV9GHNP(rn7|iv<1#P}U4k?|4ezVQ+kpr} zBP06gmUqOos3*y{LntseD42kGG9rhEp>=&6x&0qFIHG6W7dyPQ$3SOKg(ID_Iz4xrN9=M_p) zXtlqxr+Hs}V#dWO>VL#M_=dHeeI@wjF0d&e#NWS+m8;UqX`vlL_7k}rc8vr-hCLI%#AbM zShZkqyDbhCEkNt7p@hkL`eI&Y=@)UpSi3a5RUN1rd-iHt{`@)|i0_#?#K(8x?F1dN z$R}p**%!~4V0XWys;0OETGN;DrdR#$?5XwZx*J-i&!CcAdX`oZ?e>$Is=j4;k&>Am zfJm#!XDqAs6hjp>H$O>t)a>miD0kqqPAW~B5u49hK>_Wb*D&0GB2iFjP!$brZ{|%E zmTCRzt>$Ly=F=EkRloV_m2z<)LL=BgYGFZR#Ve?axVT{2g zrPJ)EkzLaGX|Q9&mZG5)1T40gCJ9P&8QipjP099E!7SHI)W*c1v9RQ$UPi{R>=Y`d zRrQE7sTin4&Dkw0Y0J-S;~eEhH~ORF)mh;V7LBmet95lhy=(H$T|T+#9j|k*kv{gs z%s3H~#b?oM2c+a`7Qv}P%q~oMB#0<%6IL%9=Khh^J}u^j)XiX z?WLl9y6j!G7*75M;S{1FR!_d)7N>pv6C;TJBJ z*>UiD^(T46QMR$&0JlB7s@LOn@}ElC!T`N;7w0Qdj+OUm`&YE}-PCLPdp+^Yg4dTS ze@XPeyZ^Lb7tho0at&qmCQYGm0xZdsPHiinnSku-wxG^a9+NFPqwtUHT=QI3CocYv zRUW;1Jj*t2Am$neK#ZzF-D@L0?MQ|DOZ#3_xSp&=U-@zV zJ{2{TVCEI3HG7u!i}LkMkfc42TIZ7|Myaxo3$FCO!sX}kOrNTHLUtnD(X8>IRrz8u zHj@$T46qDt5V}$%j0iJ+Co2jJ`T-LVf~(`!hJZ5$1ioH9xFmfq8Er=|YqoQj7OrSD zY9sl)i=m4e-R+*;q)IveSxPA5aLm7=2a`^-9vM~Z{|4o!(N8P--0Z|M!SB9&tx*VbG9hfpOpKfAggG5nkj5bt8E`&? z`*@X1C@XLU_uOQ(HpPXKGf$>s*yg&!xBxrpPk%~@H5f7C12xi`R@k^N%K*M9#%^xl zK;o6s_>181%8+88UHQp4+}&&`dJke6ROKRC{~~6chF6JswJxRr6|rrc8~er$^U8xB zD;!?EKx0Y1xtN`mmx*#m3v6mkvMAgocGvzqp|LCDh^9dLjrtLFi?HCLA0_{gXIB}9 ziLoOT8>QhtJu`!0P|yPvOr<0!a?9znFrN^~+gTTDa@@$j>UV9Hefqt{KB*bOW;9!a zC}A{$JnD9lD^iGoj0Dz)7|r2xS995B&XX+D5y9IE8BEi2MT|P$*C{*NZ!NYQ ziY7+%*pPmQ_>Fig+rL0Y54WFu&XE43QDxLLBb3IzwXHk{-49d%Xlz@E{?}9q<+c-7 zd2;X8nTGI-s7*@qBNA9Sdl@<9JT2UOUMc&3varHQ`-SToUdQ#Mnm6!lR^c z8PRvu*EB@DY zCsx>9!n)u01vza(q(@@d!cIa{ZSVntta;jmPUjn4iHx$Kb4~3a3r2c{KBzbNl@wP2 z@v!#eAGTBj0}KB`v0iM!sCm3i-IGlfleZOxgxN%GFO%sQ!elL)w;^q0d8GhV{d80s z$heLtNbJHes4VuQFdNf>!P{`u+kSqDQg$!-m5(qyFi_w<(03n$wPw5A|I2_#*;cUijg_I7Z-le|xyKVgvVizm592$uO&V=S_UCfRSR$vx>v3 zKJY8Jl>S#9wzKN;EN??keWCWO!c9H$SyY)|yK|l3W@Z$=$z28eaS~IeQzlDhWjz5v z6v&)~D9kf|eGUCR^7f({*D+WeG-@u-$Dp{czEZQzZ~nfB!SFu`$q$5wy&EFuj}PE-YL>7NtX~n3EJ2Ict7&w=U$`X9R{@&OAPaqQ|UZO%!AOE{N1;^ z*lccC`U>|;p@caba_!+bEecnb*0@FEIpy0NaEuByv8PZ<!O z-%_VRNU$hGO9=BiwwaW{whj^@95gZb(&|sH*-d-q42#$d?pq~}fS>&q@_n6_6?gyC z4EC-raH#K$ z6x-bN$Hi#T9Dv44&9~HuM^AZ3CWG=*nty8c;{m<|{ zu-r~ZQ~4J^hLzZ^X|Yuo>n{2S^F3h)9j7lZwpLx1eAWp~7i#-?{9l%602;)Aif?9u zs%54~dYk-`YZwWHit;dTX8hU1zM`d(M(kKx6*uT$EdUJibuNB$$r(gW+cNEK@3l+a zYVu)gXS(*|M*c{$)9^cN{)BlP289Y7l?7j06U&EEsNmu{yVhdBs=Yl^88`ucHEaLh z2!}WJ9+SpZGMiu01H)0gOwT6w&m(PIX((`^^1NkzP5-7K>SenI&} zvaD;H&y7h`>6-8Hx0&vP0g-vB6155x7uM;!It^<}hfVaxm2-}Ei|s8CjaAh-Cze1a zFnO*Q9s`MJv4ZBKrgDW{^DCcQT;C{o2U-8~TSt5NrZYB6)Ki))??`>Ufm^%Ax2O*s z>@vg*oZq>)iuTP92&H_j$yY#%HaLO$3$DHkxSS*b_OvBGH>0e^j||P&^)62cY>vh7 z+hs9VRrO9_FI5Dye4a}TWX2mSpGUOn_i7uxQa*vtriopN3T-!~^Rm~0S?6Y(no#gY zzd#`c=8SGSm{Yro9Vr7)TVGjPxY!oYdvpZ5IAN`I|KnpcxMOP<|b{~!>a0LUyv4)QZ-w`3Ws|D)Q%g{J-e zt(<>B!gnz5a0%qUnD%(;KFapL4*~k$>v~AqJEv~t3qR6oG%;qN!Djd!4Hl9qnq=)xUIjnyEqF&4W*d@6(GW_NEAb)Ex-yLYsNmHxlts^Fh}#;=jVeJOM-q z8-ovPHK%4{AJS)(j7}|=sCJu`zoYEDG0(ahTFod|lQixL>+u)v?Ehmo8Cx@Il_RDo zqzA-1lIm%FI_>pYl@8S;K0TN$Uxb{GZ1Z%TYS0JnD|`k&8KSHG#^d=0IDylFfM5BY z3CSCu%}Ev)A2w~w01(u(niiPvO}-CeNb1L$?btpldlJvY-S&GWW9(3}#UNUGIUU#I z@75bl*m-Xv?8l}3*5}~yje10>E;F@p#ssDDz_YL3fqSfinEW?EkyPgyom5p>R;!`^Uy;I#hO++3Y zS(g~J)EWx?UNBYOQL%2+N%Cy0l>PxBFMuAYjX{m$#JqNX$od9UaEU+EZIBlzFp}}y znmg!lP0YzQepmhK5#pMmt6uDT`^k-pPu#A{vBQ zb&0iVpi#n_P9wkB!zsU#Kp$(|8gv6y?_It zeQj3c(-4;jDkZMJ{er3sPeCp2j++R9s1jM_9^wjjYTo{Fwv{rdUbzY!7~2>O{#`u%C9sPTzauayXk+9lao7}my_dOHhS}%DR3Zq7 z`~z(iOr6zgbNrXas5R-Fk~%ghCre68o)*bkCWvRJdxX`jejI~CrHib_;j1pQQv}#V zBB4KY^StoPGsCW_CIqJ2*eob(;#g~?*7}&ng7t&KkDL|Sp48!5{cOTIvD53J@c!L8 zI*)+46aKY-c(?8&3+1kzO`tPPi*SaO=l2Ph&6sUCgNiXCkMQgyE0<7~S0;Tp`<+mi ze@?2_0Yyws=YmP^vbe#m}l~H zaB!gX9+vJ(gS*}Zev>@Zi~#ETKR144XCYj-_s*VWu-)+aWtd)66VZR_AZI;f=$wZ1O%=PMSfevS;Z~o#)L+yrJSQWZzWk4lh%97o$bQ0T;svJ5ULX z+da(?Op>uZxV;M*^sU}_%qJW$34H$xvAK$WK}K>vn5u( z;l%(~_Ua5ZU zS%a93qh3ugXY1tnXnj#ZL&K9y3S>IK@3Ydm)KPUe+~gowyIH2q_sK#;;7}pg*+g`N z%TUPfkDuBVrQKrLXjeVQ`UPUB41yWOfC|2YF~XuI2U}sC&kN3#8!78f($XDk{dN&Z zH;l~Ru+dgEyIHOg4k)Zli4h1Ck2*9N-ZTj^u3PRdR|2wJl?d=DhEM8C{e-;IYwJ8! zWMmzU4`YsM%B>BA!wW3~pT*nYWhHIi^&q*DU_6$8X}g zyI1}+x_n7V;oD}SyW)E5%V&upE_7>f#jAB0E+IKTa?+PE+MgVnGlN!)yN~9%Z_0l= z95;`1g$=c~8Fn1A9Db}5vmie7%Co~LQ*qy>zp-}s@=}C=-EcxAG!eCD$E+ewB3N&= zT3)Pm_aEnkuWzl)H9Mb(e!VEXnO+|~r*gDb-jhHi(ymw_pE0KwKz-d9@o!}7#Z$H1I!97#fX zW31^G&A>0w0vC{Uxe(}aE}Gx0j*FA(LxBNaYHTXS!PxF58eM2oC6F!c zbj#%@EQE~%A%9be+R|srn1ZG4WIJETku2u(x|_B!nZKlibTSsIJu|3V(Y15aO3T30 z80~k+UD7A?IEb(T&;(seoqvE5ylNCr1uortJ_B>K00ZC-@+k#{G_zK9+W}&SKlLp# zmqrzI9nb+s`c*t=`aDEp$o;vt6==YF$x5Iia?1+lC!$*7_1?G6#Axa zC{9JGcU9OR)#590PgtO3F7z6vb1PH^*e+;4+|h9h&}c)m_Qi=ZtqbrPhfy*D0(Y}r zHUn;JoYUGa<_H4+jZFC8rokw%e43H$DnFfp*p!^6RYF*3h<;HmVu$m0HTEcqJRlnm zAXJBRP;H;7@_5XP6CXDF@qV5RGN!8but0{x38)HGQwd9h=@6J^HW4%>Yzl7M0ckM0 zEM()Lj4|WJ=EzMelLcMuow|E9io(~ne6AH)gQ0ua8-NB0H(}ugpRO9D(&jwC`L+AW zzAG!(M54KHrIwN5(6rOF;$$nA@v55lQ{y$`2E##j(l&WTH_Zp@7irzmUpCj->fdR; zbP?#PZ9Au_yhqd#xU<65{Q;}uW`q&*+8y7FN$PzN!>QF&6qqY^Q`_4!wlu3A6!7Sf z3yj9gAs-1A&JJZWFswa)Ms`2CquWbJ^Gaso#5iZy>;H!99sF3~qoQ0*#RsN$gkSQv zw|_i4u$QOV&2I5`xO4^>v<76+rT>@1sC;%*$w~hZX!`q`#22{pn3-3qh?HQ6v$j*Z z`YX+}?BrqFetQ7f!)LtmGEof0$=+NUT5!Bvj44y@#}nE-!)D7(?1qJ=(sWnirXR>` zNYGHtA9*|X^7 zm<=%|391qiFWqU#S|a$-XYX%(;(f&hkj{Hof4ZMi#d9L7JVW(gZktDsg%D3uYV<4Z znWc{AGNj+Dp;HcTYXfgKn40u9dgc$$XmKF!B31Vt;1=X;Jyxcj>;Ttg=z*+HaeI5Q z^?}?b*b@TNAoYgfeh!VoCR@Mr3dj%0q_KvwJrjCUVV>Zl*9bX}ua_8sRW<+PqTn6b zmi-2iM9DA#8DL}(Nm2F5vgi7}IOFJ{l zR&nFNKkt<+d6(#w$@r_U!7~%CIwWgijqc3V@@Q(1vHr@ds5Fk!5N=h;fz<1GfNlgg zO`X1YX;-ilEvkB|l3-FfS^yVv*}8?C`6*J!oenGZQx5n68MMKB=h>6;UdBc%`bM36 z+?e{;4v^otfAAYXYVx=H&hml&SVWfI6o{>0Z38kV&2y$s_=a}O8a9A~e#MJ+uZ3yK!F?)&7!xcI+roH%*rn0hsSmpw(wak&;XyOW z33U1eYV|>k?c{!zk!`Hk+}+EEGwKJ|E66HLH9s)r;MFhzG<|HnmHQ%*z@TR3eO+qo zK8WI4#qqXP9BsMeYdh`(ev5l+L)Av1f4a$j{rK|b(Ny&~zhR5QN?NK_m zvLoV6toY`}wAZx4{VSdKN3`I@+zBri=T@KS6vvq2@cZun%A=0K<%D?K=cSswIN{Zt zueNb6bm&equNi4kG`^Tcij32fS79ewrl!0*NmOJxhxlLk{lL~Mq%x&riDE6{1K|6#9t=?8oD$KPz2#lVK{ zv-%oIKec_Dq_)eTCAP;}PBIJ19@ckGKX=K0{OQz+u=G~)vqw{fG@aSU=hDeFZ#7X~ zg6QWI<$o zZ>6s z7x9F^C9Z~h^^Rez{!>Stf5W(KHd_*HSlubOWL0|gMBhMKG6P-u8CUpC-7v*WcyUE! z$Io|CWya?Sj$vwL-ENc|ul{p^#-7?AXxMDa&n7{k(I0`k!mOges|i9FpuHlv9Dj%R zq!r?*#A;Iok*$BZ&UX}HQ8|JDd$@rFJM|iz44)XF2G$KT#>{S9Epv=YtDOA84RSPA zC+|&138}d)A{g%oQ}y@h55tCaH^^nh4%=O^q0xoWJWrmF@yfJj3W$F8#7RZyCf{!* zd)Q<(<#&k>@#_|x{?ifSONxVEd6@f|!UK$ihJES9#~F;&i@vH;N!a*Y!75Q1Og|vn z#oMD&eKSl^aH{-OlF_9pQ-9+fe7XNLNkfeot!^(NsP<_k-kqsT233ZKIj#DK3e&BS z+dw;M>m<9nZjID@+iahgMfmhXpu5p({G5*1@R%|-3rKnAy{bx@6F9rnEHk}8Wj}_+ zx^Lf=>I7EtmU>pSVqpC}p&_48)!lV!k5N9+f3#t3;cpPv!eF5GRy*B{>V{SsqxbcQ zKw%TMfJYYoV`pb~--cv06WxBk?9Er)Y3PglV9CHjGsz*PNrf8zqC8n=!p1%jp6Rmt zr*11=iLX~QhbK@~QHR8c2C`Ol`lZs*%uKehQF-p&yAp9ffiGj3Q>;?<$oA%jfdl9j zHX|dWR7Nv<-M2iNSyO%^m5(d*dlMUZkxoqa$LWgQK7BILH!z^|k99HJQ2cpCPq&(T z4h$SUhwtyw!OOqKQmQaBGZ(f;Q>}^?yJegKQi`+che7hc{bFn03`BfTSpDuhAs^7~2z1s> zq0fOsm#mRK;u7o&{$2 zli`=kxWOxou2Yc)ZnyS~Z`diQtH}0?<%ejQ2SA(g8ahPTbo^8+e;=kWD@uS_^8na? z$N*~|y4k;DCtjlD2ZK%eUD8dU4SPKNwdiTG9%2;%`5xVifSLZ z9eSr$abDzJRVx!R8>oz1OOomo%2Z@=z8l=Doox7Ni)hsne+tDY;&V7Z`qx879l;@g}1 zp**Z^z&&tzCqUZ$1(QscBOXrj=&`ZNtrGVD(dR1m3v~dkY3lmv3o7>y zlV|Ma{H!Jx?!CGFRlj^I_?P;T^~?;`=L>mwVjvwrg*PLQNWp@+eOc2zKCxrZQg={l zZIm)h4XskM+K=C&!uh*XfHu0#-%A}m1SEEIu2|2nx{7S@ZHO{>x*jS?jaa$-@?-HE zbL%*&>h}9Ve|*@%5d$_Q{Jl%5k(F^g|4rXF^4~ldwtn&I*vL^$lYF`e#M=q76MZ0z zN~5G~c-U#!@&0BJq-AH-<*A#EDS!G^o!ev6F4J&XcfCd=M_&H&a7_N-vmC;2V^3tv zgmU5fuZ%!CHC6-X499T*f*@pofwfktO-4J8Cn-oS`wGCHE$4n;jiR*)4`GU_6rexW zY72AKvwi&O@w1Zak}qA%;AQtBm=&hGIp(ydoN1hL$&YfcBVUDXbIlkm2y#8R<7Suj zPTWkCmrdT)uJC~CGn%J>Z@%Sivf$?4J5{gcxr^rHA7<_0|4T!Wkdcf)K;^gCGl%lx zO7}m%zNQW*sVqHb0+NkSG%&S>1zx`U4{v`Sk!6xO1$RWJt3C@FNw{L8yRO_R%JR40 z8$ABcA|-+KJqom>2mg09ZyaAoe&P#~>VGgx^>}hRh(O=_ueoTGsY-gA_oV^+-~Csg z`u`k0JhcN~l_38==Yj#${~N^re_aT@kVWgSxj4i~8%{g;Ataq(w#% zWav~tVTKebDHV_sDG_jxZltB8OO%onC6$np9$EoGYG{y#p>xij!RPxv&+q)sb>4s8 z>%7N5yp;INUTd$t;$HXKA5lTQ6UUl|*jeVxs?jOh7THNuTHZ>aRI3@6kDE*@lUJ)xpE7}~?_t(Bn zc(}E7amV(V=W${Qie`h!S^RQ_A=t;1^@uJDYa^cUCU*AO-0})Pd-N-Q{Pz}Pf1mqF zgzKN@eiBgvPR`;fp=tGa!lQyY4xG$oavy#cS9ISfc}K9rj+LWJICdZw&xzyjzX#** znlDj=;|&gf{>)dHf=%e7lFxtZ+}+)kpAh|!Dv$kw-mLN;rB{D7kx?i~ zgBW|WfviPfcemOWXFj>sUuo?*w%Mis3W1F8i@$4fgFGD1|Mgc3p*+uJoFM(=j&y%` zb>A#2L;cRIMwrLI>i-eO?xth*iPmj5^laC&M~u3k#K`FB>9Zac=q2IQ@c4UE!A6iI zZ3EBO`>->?RPX4hsGlE*$8MtVs)3rJ6}&6XR|qeVx=<_s-q*)peN&xP__6CPH1vCM zUV-}b*MQnzt-npW@y|z#3fX?^GfGmzH@#ZpMVN;DxY_4^6&;f~3M5%)`miz?`A5M1 zM$skZCc*yy#-!o{t);QQ{{Ol0{a^yB@tAhP}(&T~u3*!@bT&(YLj4oVgkls)h-c)+do`H}79)YigH3QoYol!?PNgEG*cHNZ{k;z4!T1nIP5#kYDfu?X0ak8#RcF21YIa z8vUvP-#?c3#o?w?_KBbf;a#ZTs`DtVG}N!`*26fg2@w(f;REe4#_3h?Ms~jc<$)0v zv6i0X6M^~xEb74p?BNvtC9UJz<7Zycn1YV|yIhMvp3nctNmm$D_{A8wFGj+Ph-9n} z3g{x0aY@dSy(e|%hLG_;{v})&n~t&$b6~QNAev7E_oK|Z0zTf}-kBW$B*1-vO-J^h zQy6Bz_1D$ySd{ee=J=nvJLVnt@i^H(qBB8f>a$2zTKdPmBr7c|e-PdwysK+javz3M z+^6$~7Bq-=nrGhSzx8?76HBgQb2NM!wG#f_o$;il@`;05?d=c+~otAjuvwrX5cC8dDtmwIs4T8^G3Y5je+hd=`u^}T&wfpeKIEbgJ9{+0zNO*8nH zS{{!YCC-C9&Ex4NBzh4taQQ`L1B@lY9X};ZtbJsv+B1A5P|ljFW4hG};$XdCsuz}< z>fV8MNh}ZM7Z$vpIS->yyBR-|2JGnvVskFzlBGkLe`Ff}M^ju_o5p5jB_h*1W4&YB z3h2qQx}R;tu3)gr-mF1yIL*Mi1Ak#$u{`m)`S3Gmvnr#6)klgijy90)5lt0rX9|`+<`#LK}t4okW51i9Seb`<2kT$yLFRo8WQl zC#dzEeDKq+{R!`CA)O0&A`NVktQ8#$eD>AVJJWoI%H}Tn%$P{j$Jdp(aQMz)O4?XO zh*I}z7TQNqyX8_m0SM2T%W5)yeWIV=NxEsRRe^%i(D3VOVB~%zW5?1# zbTcxgX=QxZd}Kx4WKzx2 zXDVc5?ePr>Nf#$d$fp*}SL36v^L0~~>lzYzzQ-*>4x%BO5++;mw4^wyGwsB(wa@+txb{g#p3$*)*ZPy*7)E~S}vbYayQk7;& zX(%;ydmVF9ua0ixXJqu*67%Wz#QORbN~dgVb)ECZTQ`kOVIB3mUyE)MnQ}8aEAWAD z6X9cpP`CXun+W%881qQ`y{#3!j`2yoH;dWDNX=xk!4G@-(II7{=)Kc6xzca_n|%ds zi~YHCdp?*wKF^s5v9~^azN?-7V(aGy4f&@5JM}*7c{l>tp(yucxm|AFZT1xCp+Z%n? zla;1YuhY1|26i|yf&(tZLq+AYG5_!??>OE;6BXRXE&ak=V*V>liX%(|5hSj9?OUgc z_7gjgi6c~^XVg)!_n+X|J9RU6Y?O#!eL2>me*K{~iU?8fGkYBpjoE;l%4H&3PEKRt z2bT_75yyA+%W2(!m0^CPvLN)lwuc{eYC9TT`wQ>sg*WWcZGI;o-Svm>`x`C&5laQZ zo_|+Zo4Moae(L%G>sD@{73QkgPS&EoyH>}SWhLKq0h8TnqmkbH;=xL=&w&6Yn~4K6<8vH2s2<)_f2f1$SYQu`YL_wOGLHceHZ8oWrvYXp8wOJ?7QaiWD5E7q|G0<*r z9WEDDm|m1#42bz1sR4Uce!2+<#vZn~c-H#7d_pSESBteinfYhJf;h0W$p0tFC~ zhhQfwP6;OZp-|KdL@NqIt~KLy<-Y)}8w6kkgG| zwc+!d?r7sZCu2+RB-SgJM>kp-rVp(8*F6{RtVY}vhx$$?_j=|WXz=@I5|~qVaE)0T zZ82+$XZ*=PxOs0Y`V0&f24^zTBC+00tRAvYMT%~m%Dmt|<#SSmxv7aHxi+P79irp1`>j|6G$^1P7=YNQIayDEMAq;$5o|Qdi5-LzB#~y zd?nP#4B{|CU#kfT5^I;%;LmVvMTAaK2pZT)kHNkNH_z1Qy5mo#g!q5AXOJ0gc1~9d zKZh#k42beSUs&&Yhh<2nCYn%zdT1N7opu`AK3VrCtPZNVpH6)Go$B~i?fWp%ePhgy zF~VN95EQc%MVwO&kCQZu6K%mGto%V(ZIUyzaxq+_K)Cuxbf%!TZ-_t}8!AbLE4-I0 z(19+p$S&X%?LirCL0NN?4prwD6ZCa)MvT~d*V1PYwcm(;9V+FzMapmys#(o=| zQ*+Ff$$|WB{d2w>Q_EFV5?e0U2PAl13n&AKo&p%+^Tu%6$#8p$iQPd(({wifX*>LY z6TRkAuYWp(IW#t6qi?fUzzdx~oD3q`72$`PVNGp22XsZQfh{Cek3jBIlNyjr;;M1$ z4ORvvIjNASO=&}`;=+L8_>3OcM>oP#7)Acv-;5~$M~_cK=iBYG#eW5hZ`6NqImJO2 z4-c~q-W>7Zz#NJP3#HhYBtDRKC9`D-KyZ(FZgtPMO+F=b-ZycPB_6({G1!=5YPWB6 z4-eBGDdG4hs@9O6C-OB>6lI{`eX1eLGrg)OF})%R!j`xoF*B3Y&|&TZzRN2w(If(R z0Q;Nig^o_?zR?D;$4f=09}isZF3b@#T&xMCkF76W37j}xowx--cuv`tjPw~Btb)Y%Vvc(gD{5D5l}`5W ziIi6P5pZNa-R@}lh1JkBa23*Bil zx1YuU$xTR4l}A2faWq_X@!50f_BmNL7O3A=sW)3Q#w`2T3U|$Bt;qu;cg6k3QJcIWX!|cj%Sx(Iq{!pTT@h(@BZ?-53olv2B1xiK4L9to~qTNo_U3}}Y zna`CP@K>1!6cZa15B>n%y>+RXxl%5vP?G~|obn&tr@E6+@f!a91bFq>-D?P0;+?GG z8Z}pOfHw`%fYg!cJywa8A$3zJVZ9!xt*(sJiR12xm4h56P>it+#J4Ig&bG%ILQ<6< ze@^f^u6+F2z5Usf+wj5Lh>B4oHv8>AKh4@-iCFfqTW7>RrDtG>-E1T(6fmlJW}=b* zz{W>L=G({Ka=DC zyT1n2fH3($yw;6;o(R&!dmKZwu3=X{@lYvHThD7>#36ziI5dVD)F#-H9f`tPo5K^s z1KQ)Apd(2uh2mK-p}>8j>)zSfglxNQ0;iT%&R^O!V=wZhWG6f?qvBB z;IKP01U95Sd%{A`LiJflVrdGjk`m9g>3PDGf0>jtu5=&1G!RS4h})1TDd1agP159d z2zKf@?jXkOB*?&Whi=c=>n-hki|nS1xNG_e(W&-af^12tp9oh$H_1x13;mNN039;X z|1HlNnZo7Hx7d#PVDB_$5!|uvcAV-w-l_e#j zVBI#RAqdEc?LUJ!a5zPN*F34BJBKNp0)?lqt1B1=<2^cgwZlRr;c2treP6ZC7JKQ# zN`z9a?OiD=m$N(+i=&U_h!Q5x_b#5bbe%;x;?oo8g8~%<6Mf%wU(@ylK z6sk@`G1lnoDh`hz-%~6xtMw-pzRMSkZOsLtBF`)bU#w{m%6w{m>QM(==K~lzIufal z*;e;hoK3PYFMj6PdJY&r@|Oipue3`_luJqW`b(ePq2?1t2k)EwS9Wes!ZbP5~R_ zQtO*9BN~6c*()_Mh%tYJzCaQ|Je5x;@gtGFC!1}vX{U|GNFB`RM7-EZLvXCqR{iO6 zy^;4)u6IXce}_Zbk%0#fB`GIuirxY?*wotY`Z3gekD~`R5wJo53R~P6rN+Vqq-TfB z(~j_i@G2r@9K`B!Pkh>jwq67>@??#3mSm@T{LM#q<=m8j>MJ`Lzw#Tp=zD7 z&b{4=v&LRqD&Wqt$n?8z{V6DRY;I{fC8@JzTV^S>tcMN~t7$+n`>_$XY+y?Q&*yI` z=SaOLdrwz-RTs}sb${?o1?8M^Ec~P&z9Up&cK3;aiY2*w%2J!paht7V(`8E&{qs|{ zqBdfv`yV#H#Z`$@o z&-Lv-8syIMKRq!=6Npff7b|XdAKD@yl*+8M)X)n;8bPwGPzDWpSwjupt7MDT*48%! z&Uet!Cf5j;>7)}Aa@>LP{PFmMA9wQ$9naTu0U5+Cp-(i2+0vhlJM>B^p`sw9Psv*a zSua5?U$WZxynEvnTZG@i-iHpo`ig~=ouyGm!apY5mTX71UCwxVRc3T=!pA3u=;S*i z?Ul<{;Xp;Qcm3V_9D$oXgGG|>W1)wE_&gp>tch>R;?G2_NFo%=jlXySrNH(SKs#vG zG}16G68`eyVM>Rn%PviA%YFn!4!sG9p*H|;D9f9S) zOH4bhrFvW!A5V7x61wMR@3_->y{0dv6$_%+{hksN2vNP*K35|{NPv&fZIPZLlMV@8 z_CsHcyD#`hjU9T!cjMM@o@c+9S8VM$y84qK@i?xi3D$sX_|@?dzNHtk`B};E%t=X~ zs@C<0Q^mo)KxiMns^~{M9Zw6KW>QfQ#Th{3OVF=RSP@hst#zS$n%+LG7YH`7C<%mo zq#kI(Irx90339u=D=sORAKHm(9!;Z9#aL4lA^Ygw82c)l(CMMtS<0%J=9pRqdRjQc zT2g5u((_>2PUrNnU;VNEB+6rbCu0#$>?M@2r14yfV3FOc{kv2f<&3m7j8HnEBnwY) z*AJQ8@b^(m*ZxIinglHwCXUZmEls~`Nq&geLWg)4q2dO( zYxX)fE zmv#;H-*j326)L&Mq$m<67vB zOPWZo)@u_MH8(J#z9#{vpprXXtr#EzVR$M%)o};pOj1?`*w7cXDF;A2>}l?+#2)8s zT%zD4pZxsRB_-(c&_JUj_3^l7iyHpNN-uPKSV$k?$j6P^qkcCD zOV?h-?rG;_t-p#nb%Ap)2q3B?-=~jBSeoyab_F63 zZ@*uDsPT9@oARR&LsZ1&G zMTB$Mt^}|{kizkoz~l@;gr#xH_8fgy@hlA=o5{pvW3R@ts@dZNS7TL6gfDked462ZPqaD_IpiKdKHJV0qtFOz1H(SMojX)@=Wq?t8Ap| zkBaJ*UP#ojMM|PydoH+m=YGB7KXd4}+iyijb$J2nODp8w^gk-TT!^2|a|sAz&v211xQE`(8p zcYK2SV|G^|@h&Fqq)`@((&ZeF*Z3)#StL#I9Cb&)kg?#Wrw`Qe$p2P5FZG!`y$MY1?>Y>vU+Im zhlphJX`$ZvB|hBU=6tEd99PHYX7?yjo93*mPWA`vH%LvWWkY?z7UP<6GyWos@dYR4 z!yO%=UQhN9dVT7~019M3?lh#AwlV*xtLhiu@Ut(TswGmnqy{vE!{Y~?>&KVf+7ww; zXyGUA+;K+9U)*bi_mAL*e7og(7hTI%7IV`Q92Ro&5Dp`emUH5yH*s9P{O=vus4 zRatet;4;O-;&*-YJl6L^woI~SdK>REl^vf_l#13TS{wM#xWy=LUDtk%X~67ZV)WnG zgucUI^xiWmJ1jktpHJm1Jywpk|Am5iU{M2*0>E)4Ue>F>`;09r%X4@~(MFITSO;a~d}0F;m;8#j!>Ow^u%GGlubA9;JBLnqDMfP7y6{ zvQ-*BJs&RL<=d(&l&kS2B#nq}8Ud2ovV5C!Bnzne43)SHq zh*LNfvh{v{oJg)?z5_;8#zFZlLuH!iO8;gea>H6P_O|LIJB(3SqKd@%n&ySt`W^4+ zuM;I`&}NJqs+qsZkFDusk+8qTc;8ta1^VaMSh#fkVZM~c<>B$s8lAcw6yoa~FKTbH zA8m|!nYN_0#wVPcmrsTWPcEG|IGktPE~XBG+z|-t-=t?gRvov?sM$I)rTBO{q*cHA zZqQ0NUUGys7o>qx z&(d)%mDII66j0rdaWadfp^q~w&FOBPFa(oQ~4pz{=X->#ju{ERM6%fGiCi(kbd(Yyb@~Ap7y%HLz+S z)uRhhV87eWsdMu}c9*2~dH+npg=W}z+ZY`Aj!YO68z6W4)UV5%?|I)iNe3jMNIHa_ zW!8vm%(a4WT#T>|6bok^mZ)0UvnG5N948zIYv2E{rf1(=65j^d7 zEY#vKwo=|iyM;f5C{RF?)Zd=r*i$@)qa*XSac&iC%+p4Xdqh!tO_e0Te|n)Q#4qpu zk*RRN<=jt_>A2(mKMQAz749HY;E-)=$mOy9ZXf*vu3U8jb3W*E*tLkDR}P2P!txh| zEiqRe_>srzH23?%4)lAgy9u0O*>H{1r$h=GCt2PB8MGhk9nuadKc)C^xD8dK=HzDP zIK8JiyVU&jR<;C=8wK{Mfq25+d7Qv0D{+Dm<5dKFORF+ab+MLj>h@(5D53KXb57XpF^hXN0y+6l9FR_S;EueHn`4jDAwM&DJHvQ3Yw((&$3>==>bN~ze)qmTjDhY5cMbSF-hriI) z^}E*XBH43u=FCh0_T>h}72VSpFM5LI%P+6VjeV4o@Vyv!Q@|fZKtL&j?5+wBWj>!U zi9Xz>cEDT}F`?3B#y~K&y|Kop3&z)7#y#a{rv*a3^gIvML8~^9Il0aC_Q{Gv1D7fU ztPRY}&0CI@wjAJl4y9#frY8HZBgtw?oTeHHfMj7nGAxYTDMuw`hW%D7;xGph6A?k- zwyZy~geBZjG7rSIQtf2%mJM1;N>@(>UG@ZYH>6DPx4!)hRJ6I47wdvZc4FOjHULpP zF0|A^t6Qg zcHWp{zZyNvVLm)NGR0%9N)g*1d8C{jQ*%^ThBmD~xv2ePg+fS;3K3(4^bEUBkCG3Y zW3HV-)_5L}rE&FE&jheMeis{fyH)YhSp92O8QHH|3ColM9n+qMH)DHW8yu#wMJS3A zn5WNXTy2!u+^P$7aEo#t?adqXsOGv}OD{6#v%xiBPjRnfk z+Mu^@RO(W*hs&YZd_3PcqAs0@zl?Wy5=5gxWwZYKkB){>F}7GZ9I;Y;#1Em0=5ye6{3A|tEX zz-~s)7$owB`NT_Cxcm=~ufx&TLtfg!!?%*PT)iJWpm*;-*_%-J3Zb^|7XFLw6$S|B z&G5pvMBt_!lO7M4j(<)Z7IV4XuObUg)&8WFO+}g*8(g#VT%m4B!3DWjgErFB`ypgy z{6Naaurqs9JA9&hzREdk^v5|EXX%bf^s0IRdB>GFsjRj-mq&!F`(Hc{KVxLf7OS`~ zx%~_?GCQq&9WNNJ@Zo1vXQDu7wn}2n1Hh=gzMG?8YgF-)Qd)1R4USpB7@VRejyz!V zZz@(-Z6#dR4D7=}UR|~JZQ0D*8|J`5`H{hZ%*(s&4$6e8;^`a(DI1Ep8U%yS6TZ48 zEcBo1BQa2~i9N40a9bYoYdbC>xX+5#QkN|QRFdpoD%gH{;+mRz=+1S?0GygXpXJ2% z=%~bRG;gyDMQzgHn<47RkV~AZgwFkz=@l1#OmL>UKDFtMBV=N1qREGE%fZdSDK@ZH z)zV?6V`hx!$sm7fyPbwPNUOMf8qDhc7`3syE=F*UG<8vT={jq$-0e6y_N%9+6Nd!o z(q8YNxDoX*gTwWY_4)NYc>_E)N{mkKdTe_g=^3!W_F&2OU_ta%MAVUZV@185*{L%{ zq%qTRIpXNnK_OsBbfrA5_7$tbwqlUjc7>~w5a!4SgSgYvi2aT!aoY@!@qw}c*Zku@ zTY^+g>C#X2-t5(`dl?B!0^SO-1XNX-3Gg@p>rTBxn9nPS^{b8)SIr`XH5H59uw1y2 zjpfD-!~?DqZ_}=XHv$2u=SLN{K!KP0a^H;Sr*l4pq2trGRHIv)*b*_)WLY~qnRJ8-KjLog zH^{sUYg$qr-YS*fl>5CP)IudZux$Q1*qyKDs+OLXv6++8uj7{@pX|RfWOL)qk*Y|O zYZXQXVTJLvuIl~3$j|@~+p*|DG!}MQm6oz{%;Pjq4uY*eR6m@8oSJMMpy@y?0pzT^ z0I*FkIV1gw)a2gGdy4s2MTy#7nq zhlRyBd9NdNs7Upt{{n6Or0P7)tg-iuikV4aPUz(5RhIDhozTahh<7QfZ@rsd=zkh~ z$V=6zLFzwtCyNhNP=~)${wkl_ao1`>#he3{oUKcgEZn-lKEGYTL0~uqfIk zJ8Vvj@F3MrI4J=)v@zpPKwo8&sfJ zEAPsQ85b$k9#(64KwAGmA*Uvht}5Hn>zK-O5+5eYw2`s6|6x!l>be))bBe(`&D_ODbfwabPu zc66u*LMdMQI2q0G4zPcS**snI*GO-&I(k#dkdTM!6E94clrnT&Ao$q`tLF-<627rl z%9?AnwfF4XOtd2FW=6Ze*w^%xZI4)M0hT+?s^#V7yy50-*yPuN7$3-!*Yz}Q)0v6Y zX2;{mrf3p>r^y@dJ$A96*SQY}0e8GkLFcBfYjnTioF{^K3Y!7ZW9?HgqfpeF@+0cv z@6WwyhXc9TJfiV~;F_hf(8RXdgjsLm{>gLDj|L0@kl}WM29nwMF~W7xQ0v#x*N@A0T&nuc55wT4WBVTjsX6N&ZLS zq&iJ6FklOL%K~_jIT}}PJKn>F-QS+g*Cqs@6E?Tz67*jP;r|8=WmX4bxggQmVF8fo z){qc#Y&r$lloUL4Ex>Y@ax3uyec@$M!AYU3i2Q}(7zZBvPUTFEvy z`I{s2vEDeNy>CP29c*usac1@hoADHa2@4|=RD0roN**C3wW}KlBqZm*$O7w7ve7) zb801*O+rqmARTj^fR(DWaq&5nb83}y|25U2_|A(l@1s@w>1GlSeaeoJ$YW$=k{qKj z))qm2fSIH^O~>Y<6%|Y8aEj0%Eb(kP*jlIsOC^4JW|k~x3BMUN=&a-KP`17B0v$MG zsTfU1aI~i9X4e77?=pTNTAKLU88fUlN9g?%K0C(iI5sVz#eG{Fn|sw1=B+Qc|7cb% z=A`g?&UZ1Xq|r{Cj8E`Qp!p`APQee5rf6`9hxcOMc>rxwH|EfPwBOUKV2w52_brO+ zTf$HeA3(DXdwKjqWOb=;aR>&?h_0thleF*$L=(->EbtK%aZo=fVsINoEJi;lrFw%U z-j&sAinY%PL_*-OAL3v2-Qnp;V?LM@*rP5%x6mhPAU%HaA9<5oo>YlBW5miE za#8KP0lo#4KbQX%zjc|$P^g})h?JHVg@fd@1E&0;<&Qp2pk_M4M=L@+o4I_L#jf-Q zU-T8;U$JCKG**pkh)j}v*kMp-#L;tfPozrcFsR%Ai+ptWmJI#NCiuh8lb`{0{JRZi zfw*qsvw7qWw12MymyY1d^(eiwmL@jh{%iQBkweR&tG72rScFSQD|>Mj;Zwcz(2xxC zK?kO8wCOj>yY^0p^x;L3i8xWHiL@8=S#~e9(tS!PLWtDS9Kz9IJl}}@N7p6Gg1&)e~ofX1y zF8+%Wi`XzH^%$3*n|nfkT>V`X7W)K3Y`mzMZsw4tarqhviMCKpK`GY$z^NsUmE+a$ zFbTt;o?)NZF`O`8p3}j?xCT9b;It?u;~2;QamFEC?d*vsnON8l3q&TX{q6l3DWDE| zTt?ao(g0;PnI>?Kk5FRxFzVh`Ttax96j=e=v(ZbmO;>evBr>ORPCX2=Hj{4eFFCXB zyc7?BD4mQ%u$kBR=Gao&F}4|>{4$OgtJ{poAwGZB{ofWogCF1E;0WOqRrF`iCFT4N zIIyMb1`bITVa$C6dWP*oUgJaU*d8xnPHFU(qd+j_x0_l}xCNi2gF|0w>{Gw-T2~cn zzIFH|b^EF!YZ~k9-f_;o6ASGJCEIt&Db2zs@TnxP)`K=WXQX6ihv|ihTUeU0d-A}j z1-1?P7w*GipYmrqaQX`#i+r!1IC;S!jsEH`GmjaD4$ z$X8T(;Ho&2vwsbwhl~4;S=ZEw^=~(3)KLd#;-=Sx{m)np#EVpCBVOT5pzjfyUPHhk z2(@SKg?dNHlx!`&*4LZux3kim4T8|R4MM`kc74JI)}`mLPV$;a_)y@PxB;}2JJ)c$ z2x6v7qJllN98MbO0htnizeJau3ys%S3~zk08uH3T{w$)&?+W4dDMa$Yv+Th$u>7z8 zf+5xX_%4qB?v6_j0ryZoe{e+`x>ILAo4fI{B@kl4@Pz&sPlm4h$2Kp#Ki4#CQL_72 z#c;@?DB#^;m-P<>#`WyUyK}4_D?$uOK5w`kPCu7)q3Mk1Y2{-*^dkGetR89VD>n^M zJr~Q*)Ge7D8F_nv6RV%}46utj#S!Rbky+`!FA4VnU-HlStu&6(Z3SkH>>gS;)a56d zzQH`92pQNgjN!K5#AqfbjDAy}4e?o>eKLnQdWGbKZIVE+o{JbXe*c49BzuE^B3$G< zwiZ$$Ld2PngqlupYe^(<9iuRMx^jVgJWYLGR*UkM}hT_{}<1RzIm|G zHTx6m&+mWzdguoDaci@86XcGHXR8hSl;jQPpUz`MwYa0@f|=Gfloan5w~tJoyi zENbB}4R!RH<=i_r5D#){>=xpy&ozf!!n6kG($ttgEE>u-V2$K+^!7%@#XIZMVVk#*iHXV~VAS{kU#?9Ucsk*Kr?CW8QZ1dB%sS7Req zJeI4SaZ{BKke&WD;L-{(F4d~B-@i9vhR>ax?jkVGZr#>Ku~JFSsTzC5$ia!%pM0d7 zsPct>Z-iXT=7?@t$Y(o{jSlpXpI>{lx|*c!Xc|$`g-xs9%2w!Xz5Wm+A09u`4qre#{W9OW-uxuRA2WUT=FClCNqc#B3t8lm6iO5T=ndLy+ zPVCyE-z`YCq1L#wzH;|H3eM*5_;}$_4bKxx%QjeDgjg4BCtuxd5%r3#vbgw(@=_of zgT2Im?EKvNU@zw#uU!{7PqgZZ%jr^8o7&<`-)B*6TE8lM7qAt!M{h3ojT z5vPFX6xp5>4Cm3{m@T+~we{(Tu_HWNqHNk7=_)LR?r%&!IRo#z2yp{b*?$iRU`Aml zalqYSc!>9W{QPfe`u8F}Gfe^9!v17usIyyaf_D$)Q8Z@X$%k#3BYsUC;VmyO+iy-Q zfDws!K+e$s?cH8vvWVsE_F{i&Rn?;PFkBbIK{PPzR`TyUBg#WJ? zAp7qYsrGODQ(itkrLT{7Vm394hCZW|2Gp>wV)*=R#j;^hu@@S9t*x!Uod5$2yAM?~ zU71)~D0bIol?4kx4~pd;zG?o07=Y$3I^OPkwsNm}JZNC{u=j|0qg48y3wkowXKcy2X?*o4_Dpd@K4y!*j&ZMJlC_ym|r9k2M#4GOB2X($`+yMO%5zps4a? zV94H1a%6XBj{fi5hXr)`Lkn33{GEq~?lA}!aE{((fr}fSb&SkW=uM0WImzBkiE1if z$Y+ngmUN+J{m)NBcgJMtiv~~kiwC!B;j|tdl7aGVmTMa0L(%%WWI*(drKRTnZB?@kKdSGDvQ)_o@DdVy1rSgwmZwi``c-{aqA}M%1@W+${;UCs|^0& z1cvOw!@f^{l%B+V(<&>uo;WmQ=3yv ziQHATC1JngPYGf~?7rvg#>MG)8H|x^-htP%hpF&b^K`g@y1MYd%rooq#ELSeSf^)D*P zO>64RhO?)YZmJL`KRQg?`Ct?rq!}lhnpsoAnV_r{YUQEJH@XxT&c4PL!U8*$6^}}A zdC73UKlTE+tMGpJJVBM~t+G8LA=OkVK~<-zC#=z5-sUwLjC*v>aCME;Yp5T*wi$^E z%y}K+B%)Jd!^Vx-M!*=dN-O5>(wm~k_mcj3Dl9iM#Ov+WF(M9P;!#f9@^g(sY@DAb_)S+hb|kas zyKccR8>TQahMwgHrtsjNS4lV7>D%8y?x?giIlX@Fej@Shu-p6XC)fJSW!;HA zs!pCW`UG9l6`XzfOgyC3-mJ5AYw_;g2T`de7295dc^%t7SVL@X!V-4a*pwzDx!nIO zK=WQo6P(2M#mUTB`bJkzXv>J+LQRNy@%&g$p^A_<;b{6LnXt>*t?Fn`n*2T6QNSR2 zo=7z2#!m0-3*(kWsfzN~;`zqq-g7FO=RPx_Y|5i@ykjVQZI~d%c7U(rH15$Wk~Pje zLGuK(%x{qxlJo|x)vwPmkG51YHZp#dUz@r14(ZRU78U}?Utd-tqkChOw!E*wN_+e~h~%UP~x50_uaEfr^d zJ(q4Qo|DExu6+Hd&5-x7_~R;~JROU|8`v$Xm9Yu9@&FWCb;-I#uNQ#EgTKEBGs z-y_1aJ=|O?H2H^h=Q|ZcM8kHki0bCl$Zvt_UtT*d-`Oitqx{>}EC=!u-yPp9_`^)! zDO;KL$ynFtm!dc$(Tv^TtE7&;Z6m$5L=wW*LcVBb$Do(sHh4Q4_r9jcwCJ)0f#C>7 zAHv3|R&sbO;T7nZi2Z>lD}(CRRhFmMQmKPK7+hmaR8^uOgVMf9G)b`w-b@|-tQ%9< zhPZe`O~h>?I%F<%FDE<3U{IDYK8>JtWYoaC#c91v!Pv%baeR5LUC7ZTsOQ-Vm@7`w zZJGVpzrgH4P`DOoHnMtYaWy5@?8Qqr&&MzomUS*vF1eks%TwLoew!gQjZ2n&HHf`9 z(eQe^w5qA!rIIs2m;Ua$I&AZ`LCr?oTJHm%61(3J;@@!2;ym?jCD^+JFkHl^{&o_b z`x7PlgHtLho;GVQ)PCR8q;I9K>(oQ&ImYk+_Aw!oL{9W)3P%h%?>bE|QdrYHrSg1) zUtM<=$)#nboax#MVU)L;4Nv>c&O(MgFQMW`D!e_>@$+c*pXbbp=DGM2g`wlwb48m< z5Abt{I84B$fdXZfMYBJCF3%n=Ba%tL6v8pj0#TT*UKrhN2ItLBk>uC-F5frPGzxn= zVf~t=)%-|S5&Or*wsQZJK6r~iC4nNC!FyVA*bbTUO}tjeLS{?5%8e*N{v~De%uf;V zYN|)&$Y=fq9$mpt34cjE_K+({ym15d-h`Pk`;yi0$uHr}b4f47VF4_Ttv+G6#Mu^p`>77~BhT)-Q;cNk& z>VkgJ2Ri=#btho#uaZ)=kf;*Uy4TE3?Dks0jki8=Mojw@k4uHfp71)XIAonWFgQ*@ zgsERI{QlZ;l-Nn@Q=bKNpg3ijC`)IVi3V+NY+|-10~DG`OKKU@wM!xH*XCvyEJjUu zX|CNI@^M?kmb{bNDWdP)YQQ-<)k-&6Oqg%<_XW62?0}g-ZxjXR&lob zKVfz@BKCl!*O2{21VN3}Q&U$6=GwZA-r5DP{~+&3Ra(Bp6qjrK_%7=Qk}55!?W{Ha z-`TB;mQOHyl`r{^q5^|D5-gTdypZ$mn*=Ug_3KMT>>@wgnI=gMUhFmLe!FSLVO5^@ ziqIp>L&@ZAOzgsz*|a8m8kM-7dlcuUe1P=p+1VTs^CoA=kByKf75gJKA}_)j32pGU zVN(-$qZHbcb+5PmqO^E(w|XC$05LUl2lkewrTJAz^UR~ zn7{Hw!0T~QsJeR2gW`I$Z-z2eH(i14>mc{Cl@gchFS;~Zf?t?6_fVH24ktK**mOMY zZ27doB6l8DdExZX-FyW2c@ z>4%o0q#_YL)!PKlODb&n1G06hEQBE+b5a90sgzUNgEss-J1>^{82%!=H8&kdhTgxF zJBywJZ-HZpNqO;Y5qoul{E{}qqgdhNjWmW)YHM1N<1_EG0SfZ@0;R z2P+M=j7Z1qhR$+*REYBW4GE@x)h@kCuWfux=Y%#% zngpLny5kfDvOP4$ea%woi;t9EsM*!{w%i(m9nQMlV8?yeK{J!Eqhj|?K|z!q4@G$Y zclNjjMTpnEz3m{$BR#S91<#%ZOCY6>DrGamq~?vUb$J8^PkNn=|GVv zQM_XBk+xKgc@k4dRYf61b&gF{;+M~IqRt$cK#ZpXcc|M>SoXY*OPt*uU6UxoIBw8vqWl^m>}ArvAqLfMmde@Zu} zFK^Z*OUGmP&Hc_)f%hA`iL!fCn^$-z5&jqdec$TbXuj#`x!$(m)O2J^9&2-$vZG8B z|KgfX5uPjPzd0>&Mg62HeJOHpph|O%V=6%reFG= zY%>!p4Ie4^sB>g?@rz?O5Xv2|a(_K3mHln(<)#kl5=q#O+>iEc*d)P5lVL-nQC*Gw zgTfEKFK;IW2)mvxD$b@>BN8yn`gKZc-h*M_b(ohO**nCUa73Vvp z?u(x!HaQzEEg(fyD%*S9;ST{etdLIki}z_x@#8ozDlQIxY9Sex^k@8f9DrQ! zmvVk)e6l`#T01zswKq^k<^FNRR849)taH6&uvTP~5Gg-AH{uTR1N`>!RLOk7Sexjs zE4&%GsrRTk54gj<(MhS27l)Z5n0v-9OuJ$PQ9W>PViCs3D+c&8v61xr(U0FW=1Z%uBZ$iS#54Bg!!%^;o9Qj(HGcZYO`bT`u7 z-QC^Y4MPmgJO2LfCzw0;oO|!yXRq}v)g0O$HM{~cMUPEiJ!2q%sxo5HL3h4aBj;Pr z=eY^m5sBasa{XvjmNSLccs{IsU7PQiMtG{c(e)8fW+9`uEr|g%t$FN-%(cP&Uk75F z+OgK8NHT$jRXgw1*eDf)(_i~$V39$ogarQpws(5&j_EG*)H$~{)q*SN+q!3)&h3YKT~_MnRJgDNc};O*aw}vDafybRT?XG|c4k zy{{`triu7xGS*Jr>P-kV4dy0Zi+hO#Py2cc2sLG=u&`RbCDLi-&f9Nd>yBo_Xh*dU zx#eXz_KtkV|J|0wse-q6;F#m-z(8)16FWDE*gimD;r@saEYR}2WBY;v_3+mm4CsD# zM*L&$S%~~#AO9S-{M5R|p+DmB3bqo_dV=Io;5_Hw)zpl!8_Xv7*ZU*mQFJpcnf>0W zW@3Wq@)N5VnGKAeP=0e68EXaSveGS%jbKdYic)4*uvj;w57MFwZ+l{lmaWRsLPex< z{M|ox3Sdb-fptUjHsmN-8rX#KAe`om6f&}h)H(H!w-nB!G+T_osX%yN3-r%- z*1?SD6sFH+hCd`qOq*XFJ00Juc%HV#2HlB2|53&Je&&fihP?4uQn9C8ur0FSvWX$u zl^9YEOdjUJ=&1Yc2hjl__U4&CrrKtwpdArhAKWkD_NH0C(7kR&-9jRvwACe)+vJAo z>&xG11rN!FTRk58ycQA5|N1LXon=oVSRy*-`5Mry2o!%Gs_xM*?P|EME_S@tzA3Q@ z9zqfwW-Gsyvj=v~(~#rfWX=;FUYc$S z$F^-bWeOz0htA0vz;7JC!(VB7X$-CNe`w--?9+>+rLh%Ru>eHxnMAMsRkMlSm8=#( zPUM5mWxX+i6>O3@z66V(LagJcWIvNVop0r7&5naMM-$>v`VdTQB7lfnS+qu%eWSRdniwEf*0)>%Fq{KgH-!tsHBQ<=y46<ZM<=wvA_6l9UFqY`LAO`C-;Xt{sTUHQzHU# z5w2l!^gZ`Sf;1ARjE=q;8_q6GY_R5krU!~x$sd@QaXapw*AGz2vs=Zx?L1k+dF;?V zhGIneW$NDZEj;;_*pPR$ zd|?2dHd$?vwQBh{eiVCX8sT(A>?LB=W}UfzTHMnw8wgz?Gx1ZW;=eRQI%^=;m%pdl(`h z1io}ivE4ga-JIHP>BEEW-zs##rxKmu4|xq3eB2PW(@DL=!|#EVSbl77W(EQlEzdf* zAQeWix%DySF~;69mA@4@&6jzR;Sk!OLxIMk((U0k{|8O%BRQ_UJFedoW<+?-Yxv@k z98cOMEmLL(J*Y&jN`+i@Bd^ z(ZK=Uu?+p2sYQ2C@r7^oGRPh3)C;GI0QXSf#*B`Z&vT5$?<3pTH}4TSMqSN~fp2|C zHtWOvYwv5Y0HJ43MQibn3Gj{#zMzW;w47ASU^8&cDOo7hXDAik4l|)D!5*#%gosqu zV^TYPyI&ZuDVGu;c?sXRbn_ea4_xEX*%^TtA}BoqB6?bpv3r{mIqS^IWc`1yxA8&^ z*YtvD5pG^qIdXyTsQ(zx8M?6Ozw`Ok`x_CFELZh!rj4Pvw?XYNvj(my3Z$*=AU|&0zX;V>taaoN1gnDTp@?qtt)IZf!DGl z_U^|WsUGmSrMn+s%#zGz*2|_qcUnS88}zG1&DBcnULP;ZEshTh)Gt?qwxZ9zrFH1A z`ukIpl5z^3gd=r&9>>G;5e`r#SDqy{^n&7*oBcDoUK^i2^ewcLZN_i%itXL)v@mE- zs*Bp142yswJ&k+d#g{(iZK}&#whw(Ptdtx+7xO{M=)PWmFj2{Qjl0o1C-bc${g9&N zj+eV6><>xJtY6w$c>C>;KCB4XIH`s`wZR9#tXkH^03KW<=YZEIaP47zMF8eIi-FN(H;Cr+M5%5|fjw zT<_rkMc&8ruFA$n6RDpOt~_NDOrnR!z^st?iuP0nO!s zDJLA{j(oRc7SF&whUbv&d&T`t-e|jfJ-ts2BrFE&SACV8&KlKXIt=d(-zv+J$ad{! zeR~GJc!zi&o;M-Mf%i(OjLZ7HNVqfzgDbh?pI9L=#P5@ih|`HV#22>BlKzaWrx<-x z7?ewNk*GY9HGJv(9xO4-N8A}H?P7d0_~UHO7k9*REiHNIOF8#dU-$)bhec1me_KX}H*gplKAnKhb^itiG}O|7dT?hw62ew?1lUA(I^yB5 zKr!zh1QDW`ffs@==yM%Fk~ z3R49U!`40kKslMcp5Nj&7GcjG*fozt6l$<9I=xN&7@@qq4e#$~jG$D^XoqTxWsy;2 zJup#n28=v?s1sqgZe*C)PP9W79)+!E>Bf2!+nY)2_Q>uoJ-wuU4R2g2RKrf9_l5#| z-~{SVL$PL@VGTEW@GGl?eF`@N=0);3GOA>hKW0c)L0m1seKUk>AD7njE;1|kSkUNL zh5Z)jTnm<&>z{~e5~x&~+*zC{nj>ItfITSX#N*6x-}F#y|AvAl$0Un&{Y&bnoV!X0 zgmYE62=$G9sn(OoJk*ynYKkr0iD+H17Ma)14#^u~!=Z>Ai$N=DDsOBMLpCjnQYKZ| zQIfzDD&c$_M7h%uK=6k$otHkIv200bs^0At3vYFgl5+j|Is2OO>bv^^0lK4jO5kFj zkN)sx;6s!nJg}#JWfGB@$`WiYm-Y>>k6kx~dDr!w!Nz7|CkTyXEnR?!@ZLZ7hY(=^ zJzQkv(AeMB$5A3x(5XDnqY5nl9pMzZe+HO<%b^{9sG-7izRUb$P8edRMKrH>sJJb+w*lr!U*N z8ZkAEZ#MaHoLC~T3!U*d)?_60z+Uf^V5^lv0AiLInDR{p-iB&gj`8#mD>`%@5~P{( z3^>R#Y^E)=v_U^{HX4DwpmJ6ERhHIU#LRyC>xN@rFWv^lM0RHJgk$khcT!|kHYYFA z4QS|^wD$_7H3Y%L_CC*1ZcmHMf@Jo5JFXgdc3zt-Y2eKSvp5a&g>FGCOXY~E?sbh` zfzo{M{*#cb;Qdnkxqz(V-76zT3*$(Rc>bWqOX{A!>5x%2jMsB!G*z~gIYj|16c-zB zDVgHoR$yOLyl1!hA17Ub_f}Dc@NQrbZvS}>1Im&+jR)mY_I=%YHI%FA_)86LM3QN^ z#-_}jF`*D8;I#utd zIPdYSQOok)<7|2XJD{Wou`7QBgnr_Xo&|zaCUb1`FvvC3f{is z91P%|K=R#yM{g0-cIF3G2oo~dZo|YudLWwch;cq|+khBRhYNfP1Yc1AYHW`WL8m`mx}%HjQj&964I@ z@}wpw@fU8RTX8V`)|HW@hF3q=i6OE0`RLBjE?_5>^E)but#x06EiujFkU@nf3&*pHl#EY#iC_XaiDvGf#nKep$ zx=;Got^NGjmr55yL_AqiD>gtCJR5ksa#5l@_Z zl@C^;;co*lxYY9bIpf(G;%g_4f}s%|26YrqQ^NITyVGb(b)SWsr+jmYC9>K$OJtoN zgnrRL(OLGQxS?vpe$XfQsf)GWf`g-V@wmQQ* z<}*Q(6qrK%lN3Dv)wUF=KV>N9Y;XOf^HeSCJ~-vNDxI`jFF@$|7TJQW@~iN*C<^8< zUXgVruwZYrC}vyz!(RB<_nZK>bf6Yh{3Dm{W>ocuQ7)ATAX3A#UpZ+`Q+aMf;IxTt zWqCa>#(&ta`LXu=nCkDmW>2@2VB!eA`}`D_Pe9%D$h^h2E$b&3oQDC+llH?kztOr$1x!3L+4W zz%tB$g7kw4FAJR0kq`(4vF7MG*GG6V=&rq45&5iW{3hoWukLYmua6J!p1x^Y)^GSrKR65G9CkSA43~e;N4nl1J=Ogg z{LR@6>3(_)KJK13nimD7RD`{{dtJ+~%@8UJ5_?5>y*>|kAiQIG?hkQ?3;#uYkABqG zwvX3UR{omf;#^KgCj^_#H9uY(mu2vls??{iH-?!Wo7b%v!jLp*b?4s(MohH_no^&l z)O)Ujy-i6@-Qj{x4*XXKPm2Pc5S`^bFXkM9#PFR!1hgj3&Sy%+UT?`y4|#b1OY5$fQs{GEYmYkP+SkUD-=uzO9^=ipPd zhHn~{HjG!@7u5+xwBI}VrjcT^SQ71CFoHtOc*An9MYw`}P%f_zJJ^}DRwKORQ~j!- z-;^!1aAZB!Aw&{&+E_9^9a4u9gLV=ztsb!K+FcnPlGI*i}lx zQ4HCbWZp%~AqIS9%KAR6<129bZxTbvJS4QTGh}M>d~j)VI2{e0UZ}D;o|kt%HR4w} zZGB*HRmCOH*wg`gJ~uZXX`Zp@eVAk#`gj7zBLoyNp?5I7>%ugQB;qIN?d%gk$R;qv zA;Cwt0ky2_Xb58S*7vXz0k-fKJG*qNy^wOw;O$Nc1FvxFKkNbDnRCRlg%gq6%M)xUkN*iG72vw=g;eax#PBQK*SfPlllR__d!o#$Qdf<4+K*c{ zjTf?W&nJieB*@*1V4q2M*kKl5J{Fl5DCZFA_3f}9RM8^02KXq&NE~Lhfs5BDolS1LsLw~U__Rjj+yAe9_Nv&#zwCzQgfBS$vSleEJ zOe#ieVVN_;h4U)362zWkgG!qu6;usaE}Qj!QLcKQl&pZ)0_55h(U_0oh&B_xTFx43 zIOvZ0PlSa75S?LMP^zVFe@foyrx6YnBF9$er>y}XFB;jw4Q>{NY^P*CCGB^Ksj}~) zE6wtKM%x!Hi#*2DC$Q(4twY%F$bwFppn(*u1@&xIa6(gQE;HJlxSa}XXA4tg&_nr? zDAWuajdFrYme84Rml?_&$xnOAHcBjh?Sv+Y%Zc1;2ZxbUj@yyT5k`|3#q+YAYi2uI1T>G(77 z%JtT+!tMSy=Qx#Xw_$5c+0+Cy+2Cmeu1%2kFsA@te*_x{?~gxcT#HcZKIwh1c|hi8 zmMd5fqesO*JE`HcAKuc{5AEw8?BV-_i$_S%_Va)WXE;@l@t-=}yqRf~DgY{yK?ouQ zaqHTlJ=zkBa#1iVGDS>CheBc#lC zTy~kvmQ9Pb#j-3)!fKM@L^c zmb!r>nmD*W40cCn%>D_cmyL<>{eDP#?!6qit+rg*E@~4l>Jhnc7f~Kxz*EUa$&t#* z`!DF*x76-_TCdXO0#e8Si0*Bqd-;Q7WS}d}7Jl%Cf!=Ks`F*IT#qz{I!S9k&LgNfR z*czT8;R=6XH31?$dm1F%AZ=SyH%(WV-l4E|v!nmgfxr*Kn5Bz^p0sVIFP1Ft$gI0> zkeHR=*Dh$7h_d=B>OnS5+|1c#L4&P7T2;`k4I!}}xMWFoHlmoq*e_6<%7&K?#hgwj z5>&q>jPi4TQ!0YYNJkKr-B+6aPmlC>Y@5rV9U0kY4t_3Rj!6j6W-9Cuf7=y4qHfBr zxobs6&6#j+g#lE!Ai_W-2bJm^cMX5#wepik+mXj|1C8l$`o0GGlYl04sylt={(&C3 z4T-WWrhSlVnTR@HA(IjSO01$v*0 zZ{KcwJ8T4=S`^_)7zu>F+QPVhC4_(P=b!jsz}x=CtSCSlH{$4P0nu1>=ng24wF}RI^CwUQ)6Yth7#h^vlkP^=z+) z=0}k`ilg9KcXbVUPs%gs=N;_HFL;F6=E?jwn&a6Y*TRc%o#7FPU~;f!<(@n;4~uRX z*##AVKgX{;7YS=`fb(&l9~CJP%g7y-bc727&nb)f8xt!T!=^vAWT?0Nw*xHY&5Bwp za9JY(7jk7*wZtDw+hq%^DC_w$T>sb3s4$`6)D1rOVOA=%?t=oUGO{f@kbY4PO~2^0BQpLqKlAkck+d9tddDV6%HhiqWD!ga(W$}9M&8oomH4YZ*-lqI~-$j6xcwJ?r zU-`fv@*I4;df`I`shl)^&yEpJx2um0%?=CqZ@NIxO&#hY&pp<&YPC;}E6#a*R6RaY zQd3YSlaBs(q+ddVsZfP5AI~xI?|s$qo%Y|85(0vqK<~3Le_tT8GOQDct#p(J+{+W# zZ@gx}3-vNafQRVnH2Zj=BT90D2#H^c$L{GG;8dw%f~yPXG1s(fY{eX-eLeT@Tt#fBa=SVfay4sQI+HiM3+tu@lNg~fd5gqsy>@>W9jEUZJde-j}vmJ z-L}}0G1fIH(C}v#;69=?6K&eZ#+WCR9}sJdYTfUXiRD3X1@~Z#zK!{?PpjASjE}IUO#UvjP?7-cip5`d$^M~l zTr{piMf|2Gf6wf7>!7@;!%hfomGQmaye947p0~`u=@A-j{n?#(K5b5iBSa=@S4!gY z)@rnYP)syjJKf(wK0xGaxm-~{baPpn?%^x^6>01KeQ|_-hJHw)WF2?C&?l~i&~HQy z{|IeXq}F{&_l`US*upULsBUZnN2EXO6RL*#?&L^(RFki@y|zUt0BE&qFbS{!{Lf85TL z<}&`!1>d9_4@XMzC%^9&qj|)h^$bW@`bni~^k%KG5gH14ZDR3E*i^o$aQKVur4(!C ze?ayXgP`d?LQlcfd($=s&+9ap@hx+UbIeKmdpmB;cW@)5vL_Q@^EGZK z6R-QR9%0qO?*s!xA8dWqdyFdN3U|(L-qrwvajb1Gy!UkXZvw2_hxtIQR=e<1&zI?z4W zS(5c_i90Gnk1dyMlIOl0V&i(=3HkW9TUhUu^09KZi|axZas1I8oggw6ytORTTC+&*XI z1a7jyJnN5NVjJ;Gavj7mzSsZ&5QtZ}6_7(Vm$OmdD*JOHphky-zo2_Jwi+4epU zw8wdZKm#NMIvU3W#1J+2APM0d3UD6^V}k~nNYS4})R}x=->Q0iK~(VVVo9ZnXj~uH zGUFBU^l^nXt(m)fdwmoY1mQBfe%wOWBZrqAM2v^+wZx$=uBq4}zlo)W>PL^Pb5m<}D04hu&IR+$HF-2u+FohGNeZEFP zVlxznpF2Mx=n)*E9%P>KMs{QbR`g2CywW4b+f-#>1W6%euDE&L2=2?ur@ygo$sB37 z*ts#$0oVfzu^{=Vd#`#;Bmbq+_V16k@1upD;O>}R8$wV{c?yBoZ9h)Zw=tVwuH1>g zD6ESk-*ArmYVZK+fihe43NM5|X=`@wXQ>-X*q;7t7N%Fh^t9Jsxm@x|PHLaq@W+5| z_uCnxZ20E{(#XV9V?P>=OsWi?AO#lXvz%l+aHXIUTq$_|KT*$+0)k%E0+Sv(;HNGk zDS+pdf5!Y5ugVG@#qL>NM9kkl?1`LUd9PDKY_I7#GKoid#?o z5Y}@^S?tKjHQdmm=44FkmIu6IrNOk83k@M+um9Bqt30_#$Xcd?U*tYdXt3(+7gkUO z8EvT7g~KUUs7S&`uJC)fHuVaL6@-Nqzr*;lc>)#lyy}An$;!O=RKX2u5!IGaQ(r)! zi__HA=#$!Fn9<%z_)6*3s>Q#H^VPuE55vE_+8xAifLmUmS8ajs;788(j-&k>eqXt) z>*+?~JpH{qSIVO>mUX`O^C4X@epH0Oc>p$Y)^+2pw|%Irf)ay^Dj<+b9dM$ZlODbw zoA*vJpgo>PmIJ8Zy)Tt5E!3$pONQee?SbU{7v_S3H*cOXycR+@C%QNo{wX&x$G`6G zV(yRGY9m=3LQl4f{)z2xE7KbUxyM z%26)%k$)Hp1v$cEqCF#)e9->RVOyD`LA$eKut>=~Ys?-vs^?LF%eW;TBrvS=&f zn0Bv$;s5({4v>)*mE%(5xmntPrnsiox54^P-!Qkkpa=1_=mUoFh`j|mp9a^_=4N)% zTum6-8Hq&4d((5;BQongbB5km;Gr)J9J+*|$*@P2;-keNRf8piavT{=aY;b_z z$Z^iRMa=QK^_X$*6%4j*Ls)w0{tY}Wgs>IEjABq;V=Gfz%dy=_4)Z4fgwEe}c&%ep z;%;nu>mmA!)UPmb!tdOaWufb^rsq0ZsEcBiTIdieJdR+jMKjHP>DuP% zJecNArlXI~($uw&Ps6k>XUb&o<*pk8T0p71vni@*8Q%XRs_@xpqY;BvAv*ln`1$e( z4Wiqg>8kcU+h+x9ZU*BlE=QSO>IX;BjLFj5D3cNjF?4!K&4-zJNWWsyPlaG32Pdfg z3A*IIXJC>Au5RW^yh#uXeo3EUQ%2j5g6V61E$-8KBzo73g|=T)Vr(ty1^pFWLkb7A zIhk9YkSb!$70S!Y7tfpLs)Z;ro++WVk{ZsRc=U?#r-gCG(g+9{9mE0EJY@WUFb7Xm z$o3A>IpuP?)n1b3Jb(*?y9n@qg@cgMpL6bHg%yz+T=l@@F2F)CBgk%WhiPZ|qG5z(?pI8xrluvw9&LAb zMmRT9)!N?j<4XGNTT&~ah0t{ zFBzCe)ByxRwRgkmkP|^# z+!Nq9PS~MXpeZ3ge znEH3cHbC~YA)UFOBbt7Z4_wfC?Toj)cTk1eQ|K-_eP&kafUf~H(-7UWdwnN zM&(PZQwIk@4zP#O#QJ55w7uK6$mg&PXO8$+|JLQa=M_V{9rskPx?t>K6j#F0>ki{l z+wR7?U)+B^FJ`@KrBKNAh=&|E{WXa|4+uAvahKS6a9Uf*)Q*?9?LE zTN!gRDKXkZ%k&_7#nwJR@%zfE5J0aXLUz-p?w%JG%DH>R^J0G5)u85b8p2~wxSE?# zs~oJ(Kw0y!|1Hc~@XjyG=zN^vHQ@3;)oDkYrNgBc=sy`!C7Hb&Ue{W=YxXsaW zsay@f?=Utbgq4MZ^d;x&;;U0aXxI)9_6XJPD0OpfxK=c13p9r7J1VoY^;T9a3n%co z8veUGxdGQkW6fMb+^R3o1KeYNg23RUW&YbmH2Qd(MZVIeZ)v324r7|sd)F7)7*BhS zgdc7fcFdn7d2uGx$;&L;DoXfQX}>wqq<4$vQGhQqIf1+^~-Xb<%9?5Xq( z=B^~OqP<(K>NOZ>BbJ-FguNx_@=v|*7kV5y`XzXFhVQ5xRPp`jkf5H;W>3qWnI+bo zo#qUv={+HSyn@)%VKi}6g-Ysjblg)Lr}$wbjM9d|g$$+1Yn@UC2x0!_Gp2huiD451 zq>_w#7jJ!E8y;@5zVUn!~wX(^|i+iJlEIDc17zRRQTk2YA|dr z)kH4veDbMJZS>l5s?EAJ%eTlY4GCe5ADtR0W`|Kz2Sl$wDs@ZKX$b}?i8efXZ&u{{ z^U*%^RK&Vx8S|D%mu@d68tPp)(SJQOD%Ip&HDdkm(U9Xkv$|L#^Y}jhvI+t1UX%Q! zRlBrU?S*gh?x6KrO0(?DeY6FCW}J}-q|M|;Fsf5#n^ASCcya9WFbL?7Ox23e$}bK41r?a(4VCfz+G%QgXfE#0Y-x+@n^X=%_Sr)9u&dAPt~80t&Muk2)6|1(pSVTC zCVd*+9W+|r#5stXG;_OXt|3g8>2evYr>LCl0yd6h(8=Hzh~3 zlEM@&Ru8ov=NEqANeF(@>HpqRw=6!c)-2t8tEW9$kqC}^nb%+S9(FlX$6i@{7_op} zVZ2<|Y1u!mc;0r1$)NOSE3uTWy&T%}aW;>8-fr|Utc{tacsHNu)uc@EyYD5DiaBxZ zH?L02gayl-TrzsPXd8u-kp97q_!3C;`U1Fl5#w6WpN!AN%C}{~ zWXI0hHuy+!h}}t-s5#Z!8@%}^)8je2P0kZjrJ}JwMeCu^Wu);=rn#Jd^3-SP(2j=! z;b&;`O5L_KqGp`6l6ccB$U(^O6MZ037G2#?oB!9#*Ya_pbO`N*t z1#s{%TYxR6uPzNKvY2+-Vaeb94VUsi6{KL&45_P9nT{76oOieu*0~OTj<2b9`N4JR z)0J7^;&3vt0%I$OCUP7c&Asuyc-OVJ0T5(L6JjC&th|~qT4q3iS0ev@UHjWQ#};y_08kdvz5Jp7;bRd%5pU{+e`A@?`AxBc-jEP}cP@IZ#byHK3VRq&(a8Y*&zY`(Y1pC5*V0VeJJ;I+s}OtcAJ`hl){mK95G9i16Bh|_zdneDr} zJ^maL_krK_O;{ldbD|>uEEV2V_0sf!nx?0HS#DWNZ9%M{f*26SHh}qqVW-BR5=L-* z@T?}Ax8>XFZu-5f)bKNo{ng7|blb!;Ss8RP>-nxEXVgVLnrF(yET@rgoUKvFo?$Wg z3#xj5ZwyMrbv7^}X4s&nRau@H)5ho5)`C)^lG524Sl)%(WmoEWd`In)^NvdH2sJjTY()?D3V7XiN78PySUGBS*A@ ze!VW$uEpsqT$6My8MwG2^oBxkQ=MD!lcDxX#SUTck*W5A68Otx3-HWj?8+j{X^Y<~ z624~V6EAdCzkH?QSE^{jHy)Qhwsi_2TR`H!J(u+gt#w@*!H zEk>0mA%2w6)=zV59wL2M^iMsqXFT59toV6Eo)6;5 zDLw31JU8NDIBlmZ!J}dcnJhY(K=RD)3i%s6q*7zMg`Z1GTm;L%^Fn)i6nl|KT_qv{ z{o4qgop%(o9F@Y5!BfX!^k#tarkB1RWE@3GaO%R%|F@1lxMn1I(evt0IFOJA zGwi1)haGFLV`&TI>DS5#h@YR&&i!tWnKh*q19HcIbUtLVQD=6|Jt8-(erQF7fxaL>EgA%idP-x*Y@#U4NG&c?yn zoA@QArHxOIuYfeCCE$nApV!SDglOMqPOfK8%Tr8LIm+m0Ej_IBW)-Lu$7jMsS}N7$ zezBAzrTFFs(QdDThE4Qxv*tJ?2Stc@vLy{!CUw^1&@|Oc_YZBfaA&-0=_xK568v4)0$3^#xGlj}FC_}6{!rXa18XAf9)pIHN31j<%>LN>~QZA-dIVLoP zmzVIO`;gnzeuf~_&T#KZP1s=SiO15?loe|twAr88yoBL!<~mC9BJqAIkmVr8f+6oq zMSvipfHQ7eWH>cMRA*K?E7Fz~|KXETXPku;zynoAH;n!d)=EjE+Md+pkx$|h+FI~G!pgQ2D8CfN1fD9tXQlA_3smN zDB{XQP|l0mj|0YHnE3xjjy2qL6*uaW6u2?undD|Q`@vi^uOD`?Lj6bgFZ5*&q-6?( zRYw*pMrCiNEoNikOkG07AFFPeR=h=m5D{8amFh-o%?6E$$BJO(I*W$0J3+M&2Xp7A zB$^$Ap|%X@;Eyj@aZ3GPl++jH8yf#AKn6PFYMN`aXGV_HE7=T&vQ?|ID@$XqkJPnR zW;+E3Oo6+3^{69Tkt=94xf$f)fmUL$0w&1ghU*Q)Lwcef z!nl1$jH-AsB}0OfwH2w#3L7i85Ce)ra0}@Yn+Jo9*7PUu+)FiXctVqTRd#1g9gg!A z)Pyq>60;We3K#B@2ESCrANbQxP~*U(@~&6fD}K7noDv4=^`ORS$Eu2uY#R!(NJTr= z)D!&oohMmlZCaU2WKIyzi52&NuD9-vfgYDn4II+nHvfK;IeT~)KL>nueufSjm2@)vUbX%aU%LwM$Lbyi42qQ%)VZf|uO_=+| zoSo|zx|x~i|CC9wkpNAMv8gCe!uneGqTRxy^weAmwhUgXi4_!VQ68cfnqhIq+C#HP zQY2@ALmsK~)y1jPS@_;_i7|}Qts%K$B?)iRe6dxhrTB^;Hhr=r)CF4ECCld%&zaOX zIvR$$I=1QEhY!oA6f&pK5L9s9w3s{ZPC|At%@l5@ThUZshZ?w zM|O&%sxrY&R#{J|Lsc9~W&Go(9f>kY2qV8F>dN%NA19{?0vEF*D3KYDP@rHCqrmH=6 znrCMh;G?S!=f2ZA(mIWO-g~1rWoNn#Ln+sMMX}9}F_-GpJIgj}A6QEfp6GO;L|CW` zIa&?1#eWXYSD*Br@(5QQhJq~B`Q@nei_a=LJ+uIOQg1LX^cy(p;M_qpVA zycgubv0ueV3>6@zwTk3brv@{FXk_)6um^8HEZnR5AETd6>i2-0yI;H72GV18f7k5{3+7RVQbw1^4D{Q1VkH;O^ua^D z;7davJ8n|7v>2{bO}SqEn7Fd~Cz8vB6w$6U+;Rtmc?ZA)e$|C|g_6Kd4?XQ=k_}gg z(N0*eqB;|<(y@55XP+fYY#B{5Ew?r(ndzwaPl*Hi#vl>z^MwG-1;u(lx3gY@&5QfqTV{J>Gpje zS5ZKbuxJ>Ff=EhtDxj1I(xtR?=RgFcL8NPw?(Q1W-5q0e_ZVXvW4}Gm^Lc-N$FYC* z&yLq#_kCa2eVyldo!71Yoe3vs33cgSo(V)MQr0&abDCcl`G$v(a5NhRWxXkwLvnn zaE7MX$o6%DlBkKjCAo+qn_%5fes{J{P>A}-L~LGs@wR61CMRfN{USSO)Vgp=UlG&C zWl`g-_qa}Ra`cG~)(yD{&`$phvS_l(EvPKXds(mSmui5$cj$+0s}B96L?n#)?8m)a_}rsS=4Bubbo(4yWBymu3op+zqCxeh3#1CI(0ds zjQFr8IjV2@cVRoO?qIe(bKh4QQgDL1fYi?o&H}8A{1FO@L2(GWF$B8`b0ihXNJ4s@ z*26kuFX{V!jF8`~_Ahe?4wAcAVNp>wof@joUm`+hg+0;7FH6)~j*{-%*DdDDccy7h zAB7Mvq^O1@#JEG1-xs-QH_5#ZDo07NvZZntHv7FBm{+NJZ&D_uTwTB*N>kG;vCwwZ zU+L%lnFtBM zjD2SDSX&y~j5247P|W`tJ_AAhnZh>_gN+acZ#c{b+O7rPh=W0(*B!&XArW-T4n~J1 zW)|V*$xlJL2Etn@SQ2*Hx@`e^fkUadk5zcphJ^<9GL&-0oV<-+x-V( z@w(k{MYNfno;P#CY@;Sg>Q;xH&=}oIF^lr8hH<4y!^abIuL6B~Xcb zIp;f$6-yofeDj~YSl!7Yg4`L($yRJ?{fg}XA!J)-0WpaK+tAlC!;4nW9{e*d7hjcE z+6H7yD=qK@S6q~=zkEq;aJz&0|I+x?Q>VKGKhEOsvN$^Q_Dk)KHgDcJQ4W&Y_ zPJ|yb%pp!|i!_x3CXT-$bJt?@OG=1BcYJVbRg4+#(=_Q0+U+~;Q#++)+$=I#spud` zysyi|ry6Mw@UL{hQKs!lc9A?`&QT+;x1wJ|r4Q`)qI}=zrw;&NYXul4HBN+~68o0M zIfcuf(J2$2oj=@Te190*K1LwaTK8MqdVUIaeHC*|UrnwpXFK$+PEFm-3TcRpP2VT` znQtW@t3qYx{Ecq_6PJi-T$l>n^Y(JfTEYlg4YAZ5b-YuwvV?Ew>qJYLTPVlIjJoew zI{-?a9QrvpkBZA9QY`mC5v`a1K_Hfm9n2W%pjzUE4mKhl{qYL_p9J@AWD=lg!FmX0 z`FN?$!vukn1)u*#*I;JVosSPLIn20!=CLZq7a@okpfKsV5GaNypJ>Pdz-K!(YS0## zZjZZmVd2cRmf`hJGZm2e!EPz_(KFk!#w5;#tbzw9^BhhHu7>t7@AqF6Hu*2;?wjX!-<}lT7DpZnb#4aL)ZQp$u zEV?))u*pS`_TjDj#V&!7A$^H-#;bTPT?lC%EgNOud1@4t(`XQ8Gc)5bvwRbSQ0M~w z9Ep^u(3|(#Buvsw{gFpwW4C1%u1DOXUE|>IH7#YEB)vABgVN}N)Uem5jt=X`1q*o^ ze_lSPOFw=XI5$dGcFo1*usm7oS>C(Has&Vyw7nbYWp0q*x@#S)o&@VEZ;MH^Fo!It ztS#uulN`7m2?yFA()ynei+_r>gnJ2O2WB>;k(MA+N@|J{ea-9B_4NuvBWr*qB~?>c zZ-R+`3#0UIGgz>dRtrw@|;5p#KCW$9j)$dvYI;Vo6DqfeC!Coq?Q{RL} zXX^Y(tNFV*(POeygC7EVRlG0PB&DIAsA>~lo*`562C6*h!QL3SfS|*0!y9MuoLXMk zapj^li|T0%`%RSa=CQ}6yT5-vHYn@4gLg5i=bz|-zXbeMCdrVw)Y3DEE-|zW&#$BM zmp>lsQupE2n~*jC+@*JyXBPEg*mQXyjbGfZXwE*hYCgWtd+eA?it$5APl{TBn-s_H zSBlSV{M84IsVjWOBuxp=DPp?f^r2OfyxoaWiUNn^)50w+FW;)Za9q=*f@~bO*lez? zmM;mO1nUmI$l(*5p^IvjedQ?=bH3NZp1Z-?J=892Y4V;UXkeZ6;;fqyL~$~z`YSU^ zZ(ATyYw&ruyk>(PN371_P>*X;GHzIs_+>ST1FT!xD<}5^w+nJOG1_gF)|MDZ$9&N_ zKK`Bu>F;`(Tg6VR{7Oe}*3o2)si42lEtY!;~54Rd5Lc6lWE)9d*bidkv^*CpIUB(H& z`uAb7zXX@aSfV4{ory!{-5 zZ0hjS>GI65)cifUg^_DB%XdOLF8(8bmc~uTKXV#5Z!WkAXiej(iuXMugkMT*zky^w zC7B(0?r-Pm>Mq-vzxN!mgT zvh%jauN=JdCv9GS-A3u^&JD(3r_NFqwHXPW;HkN3nIO4|+y^Aeix6}gYd(B$MUggY zMDft8MvNm;`J1rXOlhWQ=M%b9^2QDWc)8qJDdh49_u+oDTNN^^ISI02{rc(q-Dt;a zs(n1-d6t7joaWm5=#(<#3eral@TJ$}VmZJ0r_ls$>2zIY!aB`2%kD74`x>K9TxrR%+WTLWSaW4>?bfz5irVoEGT34Nrb2}T} z=8F{%{GMMwQIfnI*+OM5BrwYM)%Z=9=ec!6vXnJT_UXeOonNPpQ4X7Cu$xpu_)_aI zzOc5{J6Z2>`mZY*C6*|ARn(1tdV|RBx<)(a`BeNlw%a3FaZ6Zd|{cUt|IL#c;D z-D6B;c%_)}qCAV6#*P)>8}U{kg%l|`_bbx~mx25JVBf z#C@8BR*x4sdoE1d%Pl?otrJ_ed*GYi-osy9^wwX32Cd)NR)-QuE|;)3)D|Xw&^~DT zIAX<>#McDz#W}+klDmU+oBUjiq>hP(uVv7tVKRfhBhtiXeQ6DuQ zImFTy-o;ljJe$K=lbSh(WpGOy?Q|H>ykw;(_jM4}9o#+{QqEVutGj?Ltg9X|IA;{tGdht5O4!Vs^;+A>|L^3^VU)C=kFO;*y#3gygl<^yQRQKF1|Hf;bu;TGVwdqK;%<9xsuSx(aWQexi zR{C`H6S1FJ81pbg7D5W5_|Y9?>QUuHLQHUF+}a&-mj|Fe%eGbB91Pf$+U`)#_O+3~ zKPvM68^Q}2o1GKXPV5>GS$79wy(*U}!6SM1MXJ}_j*UbX{N#(`A8t-90S3}(hYWA! z0ZeixXpF#x3+$vtlJ}B->tp6@>Q5GU&SRUrW&im1Bqc>%E>+#`=NWg@I?W^ooXQ(A zTPl^s#@0&LjVI;Q*B|W;Y=TR4AZsmwCb~cWec?_t>c>-3t-kC?1Ba&edV}JjC>~?* z>K10mLd|gS(fe{;{|yN01k!v=)W9Fks@pGtKTJ0_l3i$>i+4;+Xie$tdcJ?^ zHmToAuAbd+a~O}%`~6U0aqV|al-_C~;lE(_7~O^Fg=G7mlk>2=UytKbweyJ*cM`J95&_hGwfYmor-lKd@lrp>5%Qe!@eskYb;At0^l2m*-rwLt~JC^&~I*1s-3%A8}OaK zMsuA{iS18OXuv32d3r1Y{@wbO#p(%bE#)1;m{k#wtvaJ zzig{eI5^Z~P7*O7d2<#G?H~#8i^ScNQFXI0ESd;4H6$bMrMe9c<;QQ^|E?}F-wOh} z@ZTt+O2op-z4@sZ+)qO;pZFX~1O-4gHYzjCxV3>z2Q@7wBR9^@p>Vh}Ii- z8}iU7w^a&%HB)HZdpV3AMJiHj)1TlkXzCcD$Anzr^hk{R+sL1}5Us!Su3A&=`fZUnA6=hXkzM!fE@)nw?o8Kw8kFo63 z5$N2Jn>UxImd||HQJA+ND#m${f8`C=`>XFL(NDc{caWTh>tYbuwscLaX8arBxr0{_ zoklA0q8&SddN3zUb@GYDPm>0wLfAjqt)G}!VNBg;UUj$d$wZ~5j>w_C+o+VxL#cCx zM!L5(7*V=PSCasjWSrkBlKvr6)61Si@Y2Rlk|fl$+t)n~H}A)DL6KjZeSvXCU>?2g zB&NEG+>{YkN^o_sQR=cg5*hDQ-TE+f4%K)q1xnlo+%b7PcYz#!su z5(79udD02>V%`f)X`DmKPx-+?tDjdM?)~h z`(6RyO?6@)ACxaYu#K-d=?zao9-Ct)*Vp-r`v#aCZLR`u$wg7LuN+|K$v-R9&Rywe z&X+p9zMg$^+7eKhxApR5rT^?{V?)onv*f(wCVvbDHq#tvD z|1nJvzg3h_{D_!IILj9Zg&D;d!I)>x#9Q)9aUVB{|Lx%`i60YmetbE)-*F6$vXL-~ z@t`h%#Mu~7LcO72pI)a8v4)>@4d4uLLG+l@hOe@jjX*6qBs5aXA}r z-JljmpgxO7zkOEKDmPU{_YvOz$J^u!*aI0rk9C>9#^v$eG;+jteLs-ihC%%ma%*_K zWcS$~N3%PS0VQZ>op{GhMaHR*twFsA{@7=$C2Xm+v9eDwr|7)OY}VK|)&-oE04QF~ z5ScCJeI4}lK?qYgXEeJ&s><@&+Y7@=KF$#g?zq`2$-R&$RDqpEoIO?isFqj*hl z*vp6K({VoVLQsb2b-cRa>88l=)UAT_OjPlsy-zC1RHp}ojl3B02^($UbVaDC|NOqG z7-Nw%^(eyUIom(S&)pAqUBFxw3ey_uU%!dDnsN`pNCi z-NV`MCWxNT-)bWa3M7%|ar2|Bq?2)+bXKFm!eLt8AVM(>LNdaKMFj1B5RkuKn0$(~ zDV+RXwTKcfHqn`;|Bux8GrY$U^`DmIq_0&eB<&APh}O^cl3^9eL#OaFqMK{43^O{2 z85Nlub5xM)IZ>`6*-kLQ`qj~{p4ju`gJk%n1sZkb{X~IY8X*0!Y4_k@aHnSQU#y7d z4!)BJS@hjh!a8Kyp&{{bSu^JZ;h1W!(ih66ud6q=xSf<;CNC)_GBM#TuQE*=UBEZB z;CWDTKgAn+cO!oI^hd(OP|neLG(lv)irk#e{LVZ&ri!lr1?TqWNNGE@SOJv&Vz(8i z^NCJe$8Bpdi87l2+U9CNjwBNd&lNbV7p#_Ye;o1J^32G@>^aSg=$`lwd774`S?F!E zs8VH)rzEs);tv$R>bIQzP>qv7YAYG zj~Fr|7$-;k-LR143h5wHx<=QjP?zV)jl;LH4llwy7O)oIT_jTX7t>+mv)|rr>FP-P zBh3WGB~y$9_uWHOVCJvOw4Uc$cDXsYOSGgzE5(Hv4Q?|BjEGnH4TA~=1bxL=DXT}; zM_31S=IR<-OF5M915a=485lEdEcv{aCc*a9k?-i=Tn;qX-auoT7G1qI7dW3zt$%(0 zC>~ZkGfnd_vH$6arE>B1^JWq8nX`c=1^zKMxa5yLw^Aj}EG z^XQaONamG*x;)8N_5yS9Xit+^TVQ8+6lK!f=l3Dg_A_-20e`Z-zW$tCTiaNux1+*l zMI~0!pepya$3<^JMK0b!9^s*`IVIWfv0hu~Q~TWKwgu;-1fi?DNiA5w*z?yql!iA) za6Fl3WAT7Q->7`C2eiLaASNcJ{i^QIhn{^t@bttAfsp{_0b67OipIg zjRjD8^;#U}OxYaZt{ZS_IJ5~4{O{p|I}u91=N;vML7buqCr^-ofE`oQX!c5x800b3 z)#WP2;d?E824?gnpYvbn_eqHiS78}T7_+|9bX&)(*uNJ8G$w%Zf+-uLHlNQuUnlku zcz+UUhynrIa4h+?AJYqLt8W`9US5Q>O214j{YOv`fqRQl^61#o+a6zH*E+@cWb5^&>{Yz#zW(J~z=_9^F=+e) zdlukkb>}r_nGJlfK8+kU1r5cBweG$GjTRfeW@m`C9xp1Ip!r4_qmPTzd`&Y~2-8?X zH{J}RUmd8QqiPk7n)gTQ(OpG+sO;+0giih%jV^TTjaHSpLS6*IXalr3^0PBfKqK0UnKw$Q%RiDDD!#b` z-zA=Vhy(|!AaCGxF?iaFCwLw}y)ccKZjNhd90gKr-e>72Xsw81o zI1ACvN}!4bDc7n&JI1J{VPW?o#@}Vf5EW7_G)IN#fMI2_RP=hb+@IwaEJ`{QuVh+R zC1{oyYxbcxva$zvsy`I`j(8_moZc=@t@<>gpzb5*D*>9qIh+0LiK)dzgT-Y-9l@2^ zSpV}t4|1NT?=7^-)5ac=+Ai05A<8?ef~!L^CI?b}8kG!bYaW4Ss%(ysTNJ;;?KHL$ z8QQS>`Icq;zzffSl6V{at*vK9P<>CS!9VWh@C~E304rGB;I9;l=7<+uuy@c_Z=(TS zy!=Hb$5{2`=8$D3jlouZrMj4+cEan!%b^{FPW|UFwTlVZwN<9d?+=t5&E6IxZVyV9 zTE}|^AU<)eC|+&Ht?b|7VV8jAi7q1Y&){vujALs~^f&ELX^bsY>WITocRJm%z3i>4 zNel91ukQq=DZ&VM%P{-a-tbW%YkBfB5PL-T`Xw9s42)$XJwJG@om{J_D*E;8bbe7U zC#TGovY_!#!UDg9&E91uW>MOvu-0AK(a7ZU*To4i4u)&cC-5z&xa+)1cMqS`=ZIV4 zY98Mj^Pz|exKIqp6^8jug}{H@8w2J{%yZq_Zl~_9SqZp0_-U8V>Z)50MIQdG$@XRKr81QnfNVJ8ov*QH06g_M z(~idZGyCP4Jo|qf@OP!aRrvd4lV>8`IU34sjJXeLids7!^{3An`yRbXbw8NJ+crk$ zXuTGF990|3DCyGdMEc|B)i2&|dBPp~huKWYwjzK0siOmb-a3=>Y1jD0SU|-`Br4U^ zU>AM41iPvC#n2eYKxBX8)pbo?{VW+l*Hx|Hy!TsrLt(KL<>*#M(;fg>d6% zvBqArvskqIW1Hg@uWoK2ERkW#QoH>HVBwwl@J5KF2(m(&M5o+vLI>}2(-+KsUfH0| z>jGs{i3`je$B#C&-IX`qRHhk-_cGkbs7*lOCv>>%Tr)9WT>Gptjczr+l!OiJ@Qnw0 zZ4!Cc*Vk{agFqlL?_DzXsJ8d9SZp=M;;#@z8%2pqO@2AkCiSlu((74lC?;QDUyO6x z6LPvUhNX{yj3;V9dj|)xOfRO*ze3{T;@kj;Jn{1<3=@fd);bXX@4PZgc~Nw9bZSCd zS!$Ip9UV;x&i|D62emS*hAUG4IbsTGq?q&~U+YpW{$@Fr)WGUv;yEI;o7zaqL~ZOTN|o@XTKAU$QO#HzaapV zKG>TVzGY-9FcaFCj^y7MnBS|ec2$jRN?919$0^CpIYPArf?z&-Rg>uC~w5`%vK_mbF4?vo(HkQvm+iaLs*S^KIv_h&^7y8 zXfBxRZpf;StjrI#oVw3^9y;F8ws}O<@$+b z>00OO*BlXR1QhAOqZ0ZzKUZHkwtC1f^s68g$p!Rv=hF6EfNkHRZDqH<>W644kux6a zq1v`AQjKVav}>Coc@+?E=)PFK9OTc@NHH0bvB=_P#3`cdc!Btb^B3=~x{9rkQd*?c zEN?^U`ecN$5l3M~aCTMhf>?=NNb`VA$3?k=v4#qZ&Gd{wOZFVh$H<_>f;0xOUn{Ix z+L)W}2r1j@ev4I5^<-q!#Ry1af46@HrLL#`5OQqI7dC0n>XDNR1+-Tv*>o)){uWYp z&IDzaOwiaSz0%Dv(0|4GiZ;feEyZ!E=wS0yM$k1*JBh==@^mGr#gfFfec05^`<|lH zT}7wsG_sbR)5AT7B9Y)jz+HAKYq z#jj5JnL;MV0&d{{vdnmZcp<2l-j+BIx806%q<5C{hv8?pXTYOeNuA}W`74>`tzS`y zz^;0Q>E9D9+-oAxySsOXndnO}OH9p;K|8{Ln=yBEZ7quh6owfUKM|P>>FqeXTyks? zCSnFM!mv;3Zl0xW(F{{Bg!0`{9Z|yiU+e<qUfrGlUM+-)JDKy2##sd1_L&syoL037;36I*wgV0%A+2Z71{3RA|p;&Nu>th%1 zkFm8>okaxaEIc^Yzid956~kBZiWlFna;|qHvDfvnz%X^7srsRkNIk3MTL1SK7xrpK zZ|D+QD@it)n#UnwikRT(o}^7*gW$oFIUas z7sKA1;2<>w_7qLEM1wb{Yw~kRaU-H0m-hck`gmv$DR+r`-OyVvsfo@qCQ(1MtMB)i zdA!Yc7#Ij82e8L+6zdj!TNazuD=SIu!QvaU?YUmC(oUah4r+(7=S%d@8k2- zspzue&TVPIMad90v%GVQXUu14QVXi$*E|)r?s@q5T=7=IqPeF`dRfE0sW^KJyU5Y- zl#$%6wY_ADgjj)5o+(jc$yF#dq}B%O!71>$YtYR@Lq{M}r@T5_%R1Mv!?)w$qOp8t z#NNoP*W`6c-M1CgUHh$zvI@hwVnhq{i&oQS_l5q<;Q-?BZ;` zLmA~~+o)0%cKcEtx6@U;_MP^d?6$rdXW}s9~z3B0T>w6{k{j$_y@azp59jg%|S5GlV&RgKN8SO zZzY)GS0+4{ z-?~T45hhKR#2P5FE{=`^$r35iT}X(EI_I*OKibTMHHHPLFy0}S2g9&Xn0vMLb$5Z` zuCo7bZ|q$tN-dSCaQuYT2Yahu=xV6lo@4JXDuw1KRyu>&<~QQP_u9 z!IXbzhwr}CIqV@ITb1o)yZNOmMd7_UGAu=oCx6T5DI^2Vv$Y~5F;BL3yfwbahGk1+Zp>s!JiitFhn?9bbocmleG47qYVC$hC`{Jpxd7YL@v9nKZi|6s)ZtI>> z^`3QM4K~yV$tFEb?vLhg!|isiD+uliT>M=(a?>OI%SR_v8jDHY&x|`y{Ct#hQq`!d zZ9O@+mKp2jwEWSN_tSH+O8-L$OFkq16d2WWXV#C&E7$)8-|8B^ozO0I{5?`_ttaE@j`xdSDf5hn8BjEg!RFNmx(m))XeCj z_rrFCeyO&=H&Bs>N4CDN^}B`}sbmcSf!QwdQv5`bVsSF|M{z844dpA-!tGxmN_mCv zTe3p)kwgIKoD=2D_ULD>q{t85IS%<-1*^?N-eA#mA0AQ$6Km{t`l7CZw#%e;jw8h4 zbxDZbCuna7V&{-xMuU|`2Y&swLHa87X1fB{Iq0MgfHhTMJf&te?Ek1_6?2Fi;HLy| z!M~{UeEVvv0RQ?llCAdRaG{6SpEe?lwjzHd*frPi$Xo}ImNBJZFkwD8NTbn>_9ypK z6QsGEDH0T*RzDn;v%2!v$m8c6OZ&8OIF4c%;qG=)8gNrUeU)9%8eZ3Tjp(gwG@O}U ze2cx-WfOF~54DykQi1%*UJ!p2YmFy&Q|VSnlxM@fZu<(vT-I9ok7DyttID50E9)T) zNJC0NpHg!lua%RXS}8I=OA@NJaUOgrUd++#508l03uXmcdXSa1o$}GY%%*(4J!hVw zPTjyqHQb;Fou8bPTUm^+%cGi>JKHj)wnFL+-MwGQ@Q|Kk7kve!}~pp_HFMHuZ7D07=dXbbUb-5 zsDdq+MQBsZU0oC);kA0G-13~X8hf=V>vI^zX^s(occ^f)s{naO!AJKf^_H)!{-o4< zPti7>4R6H1?GCq%Ib}wpiHsOdq{pG+4RrxdrN>VBy3h08{+1HSYDH+K)5B-eo^y5B=c$}Is z*prc;Q-$Dp(le>oV>Y`JgQhIVe-iKM=an6DnwNhd0(ud!mx~x`OBx+hbNBPHJoly5UA&*GCsN#q zh(CNMLPt8&;8N56WpJ`5`%5(1l7Grpf`mPB#J1!5=}>Q{?<`X2bBVCZSmk-^(?q_d zcdZssX;P9JC$v>LU(NZ&?%Qy=g$tp8U?8`FeE}WzWcqNbF#W{*k~&tgc#hkx5~oCt zM^}zJibhB2_UjF_LoGE+x*q%Vj9C2@uDTJk@EEgVB9-4ZaeErmYa}&1et;y}RumYy zDG;lIw6E})4BE+#9s3}g&MvRR=?KHIhr593%UX^Wtx2GGoO zZsunk9E$?&&UK%(yp}!Z_JI{3)(wy%bptx$#fbFM{KO^tcLa@}bxp-y#(+80KfdR~ z!X$FqUPz0sD%fP2Yo^7P+&5G^RC4imqU(HMV{4^P+1~JVk#@;}Wt>6|C(7|?Zt?O5 z%95sJENWoHz&NWCm7e#`sL5Y-MoxR6vhK*gZ*e_b{|J;ndweB1%*xUrOw=Bqu$QRT zD|pbbtTItGlao5NI2}G}OX^N|2)8F)vAb+UOX{%y%Mop?`j6IdpX%(am@G*r;h*1LuDXcclJwLoKyq4HW4obp3vl zXZMqWg4^2eq0}~*83_zC{zI0@y`<<;+ypknu&Ba#Q$8eEMcA_b)Yy$l>{1&iRD%julNt%lmR3akFeSeiGOq zdC$Qh#`&Ll$`jG&GP-e8mp_-kE>OD3E9TSVdQ7fE(m(gPfMK{Bq>;p6w8O4iY8BO% zT#WjvM*ASK^wMyb?KhobdEaxbE?UyhDYwVA1Om}cjCqH z_Sxr4k2as5F*$~Zsw8RlKx%o&_QUithNoXt0B~1*qYAa`b}_0c&VzPZN(z(k?^kmH z*tysxDio$Up4=nQu*aC9A|a?ln{1I;j8FVo=0td{-*3v6n;8>q;?zim{2~#e%RS~_ zKJN5hAi^prMmW;(WDUrW0+`%?sHJN-)r=qzPv@8g99mbUXj$vd5h2w->$l}Q`W-C! zY%HctP86~9?3a~W9(s%Lg10U{k~4zXjr3;b0(K1aRY<4H8{B6ziu8>?@^whf5UBd9 z9!bw@`ch9sJK{jbZQ6JYajMTVMu7gIAU)~K-ld+d)+1HHYX9xiZZxKj!)K$cp{_1P zhmR73p_|18r>cr-x37Gv@h`@<5x~31W{xlM*mOW`b5@B#$zrXPi-nEGmSH!S_iWX{ zql2B$wivb8`Jitmap(C$dhfo}{aNV=WR#rO$pK92v}1gm>y5Mvee=Psz6J%exH&q( zqa((7E9en`TAAk+SlIx~bwC$No31wBE2cEIP39+@dBmd}@Hq4!$U%{cjmQDk<pRD-(Y4-+!zOQ{Z-nFFzhzxSWM zOdYYsB+k|87o~9}*ZR0CPDM%{L4E(U6cBLna9IoSfp?Ax1e?En7B1gIG(fWH=#(SK zzlk*>tNc%=Fb*^;Dy&&SM1X_c(mbd7Y}<;qJYmP9!s=h2yRVaGN`!0cTeB_T21(_I zg<9ON;=4^Ei{?aXgxn0IQF|@uGZ?naL;c$)kM|)7Zq2@mFibnn5Vxj|Qwgw=+Bj-K zUYs3a_EkFZJQ)Ig*<8%pU|41ibe64B`Vd)??t?innHv4}Iet4_>iP_c0N}295INwR zX}=syGv@STjgo%JWx5x(&LBd)S3w88 z`5Do|-KITZLn-C}rldwPXC>-xn$5?K%+*n^P`}91DaLq&ZI~mNUNPsrN>=yh!;txJ;$2dDu~<-w4Lb`QddQ1^=zjF^a^sF;;qS^e|un2As)sR1Gb zxr?*Pd$M7Mlb;yv?o5PYt2l(LgxJx)h?*z18+$z$32mx~$X)wc80!@r4+F7bkw(n) z*h@w1#ATuKxq|TFh-?!(!264V`LCFl_V)`ir}C=+VsaloIoPQz6e%96FwO^hgvTT> zEPV;Elb2ZJJ&Jg#C3-EkgA9^nG8`bGL)-tmF2*l-A(z!B9bPNed%LD4RH2yt*a_dl zG=!DlLGoyswEx8_=y=8VPtb;DotTjz_o%yvOKDe*S!U*(mSg>N_07fgVdo?7?^p`o z%zW-qb+^j)0$LcGd+My`X+7<6%N8ji)%X$YlDv>S+`96w}q`rx>Ea0); zwWi`-#uI5i;PL*%N+6^G1}$yGc%JNb9B0Lhjh2C> zXNnTBH*FZ!Cy#$E_**S50ds+at}+rQJ>|wNMP@Y|H?wEn&=LQ)lChsI78z@x^%d>= zN^^2wv-NW}`aAc`3*kAEl1??}``W#6J`}N5Y+`xs!a%x_`h~LmpNO4k%RVkMy6|ys zR?3F5#f7T9Ix8`TCZ9d`;bgJ-nZAaTl;~Jao~brVi#oow5{X7fNa2iUSs>m)$HTzB z#K3Oq%~B(Z3l8x!z7t)_9gAcX^Id815qI}VJu2fSzho4p0~=RH9cy9Bx7yoFg5q84 znt@0IabX5^G8M%sS4W(#B!@V^(LsUYw!D|k0>+uIx=|6MP1WGOvj$Qtg}RqUyzxKGzMiwl5HI=YA)wmB>S>b?7(!>k2t+P$s~6_zkNw=Y5vUyK&0tC zFtgiuevy-hKE|rH-c_@qy!17Lh4i2}Z6(!9F6Pr{{4M0vmT=7XX8yJ>@A>e6D`2cp zqWv}qct#!;I<|Jyan+&RMr78$6U~nD<^4}tcz(l(e_aNeJXAL~hQ18+M(sF0(b@J&6h5 zZ$8oN?|xG-Av-M7uR&SMhhO;46W70hk1S++ zzwYVXT?i?cV($~QWXUG-c2P4oGf z+R08%bk?8D>-Lt-9NOgC*P}=&Y|!s?p2Iyc=GgvEF?gEY;V^}-`@AL&iyV;W#_;74 z6*@hW8Nv4Z*;Pw6B^nJkxnCep`OjF*5S&r|1@=Vd)WGBM!`{iFm|cFT9B2CCNmHH} zooY;eqR^?ugTBqDSp^6n!=KeZ_07}K$rgf zBsFHXz<~M`Lt_~c{c~kV{i59{686n~T9_d;Cy?dOeiGg)qwZ#A&U!DO%@82plBvCKgrnIgBhlUe>lRVJT4-|0ONBWSR_GARx&RcJjF7;}b_} ziA%fkr5nZXO{SZCMXdB9-x!7F2fXM6fh4JBE$-_pNBS)i*@t6av;h5mx5r`>V=^4{ zurl0VOTq{21Y2Jsn2BtZ%VRi!Q-@16wYy3ZhcV#E>gt-g{Hdjzs3U#Y#h2Kzf$nSj z8mpy4=fGpjow$&Z(iOCJtRP9(@qF~PQF^sUWZAr{i@A#pY+Ag&%b22-fPco_L+=QB(Cft}{I}33_j#(z+&k^}lYRmMyBsTF+mQZ4O)Ae%-XRFo!~=UXuTG z_}+C=QTPh^%dT(hM1XqqHVpV9_yGd3zUbmfRXPI5sYu_i9llLAr1)>bFeXj zUq6E^bo?<50r*K?*QZQb{eA7nLuX^`1Tt2mKnCuElK@3BX{kx39Tz_wt#c8}{>_!mWD&*1J+%r^v7x#Ss+}Ie>MdGh}yS>wq3!@>+%9O=(DQA4pw7 zYkceAcS~!l`W>Ya_faD${&G0foMP<8d(C*5jqm;Oz)LBfOq4VCMz|r>M5aNQ^3J)F z58C_pO}Gkx0!YT~IQb+}TK(|tqDocvb6@KG=VD?KF1}o3Y)PT~tiO&{(oz|EZH%Xcg0 z0KX-GnH4>V$_5t@aNUR2!R?y>|CMTVJnTg={hc~xxKG<_QSjr$Kh&$qtaW+KhzyR{ zZV4D=vtdsMY==rSj7j^^+!WxT_|Ao^xsENr@8IooXT5yD965Xp+ZBs+qt1=TWfC+A z_>)OP0A$xEyM1)9;n${@bTA-I@|Ka*^~H^>1Rw*mbw`SZ@R}C~uU6}ZTNvG3kjqHm z#84eBy+PdKdww+PfXywF_EK^f zkSVq?c>{I2b!R;;Dg8CM>oBjAawh{oI>uG>DDq)@s~;NikF1)9r}16eAwP9GHheL& zT;b^FAcyU1N|z5mduhqaVypZKvmZVuI)6c_uAAZhZ1PQyoF?97RPSW#_$>AWZmD&A zy=J}41vlpPPV?gFk-4i7Pm`=DM&rs4DOJ>do~Th|s4Zbwrb;I(TR zwh$0|;q2`^j;wTRTrd;Tn7)Wiv+raTOfw$e-;WT|e!VYb;84%pO~${|ifP@UIt_6Z zE*Z6u3Ew_bArE^-75g_8=Ms}FxkeGAi8fR8(39SO8=Ux>^V`m%dz;Ha@wo=al+$LC zkA+ZJO+il%j-DL7Uz^rkD7YLYzNyPoW|);LCv|X1Yu-zbZb|hVC93jMiDBQ|Qxo|x za&U|8@fb@>sRTY6T)Y4&PCk0%>s#{TqX*cW<=D#(5yEReYX2SD_y2Kp)?rP)Z5UQj zKxt7CX;F|aVf5$_1eInqj1K7rkp}5*>CVw9(v0pN0wXqh)PTXa-}nEH_t=iTd!Ie` zbDih48J9BVk{Ytn>U5A^R+uLi-oVdGxhs`njMh43>VQn@`MaDhL*bje*~E~Qr258m zh2E8sIh}V^CayZz09v$W1dFURIRL`bP*ah`rgeshq8SYt`A&ls2t~(c(kT>TZ<|x% zo$`f-y^m$XQxR@e_G|)_mL{&FQ;lP^bF}@Y`@Cw4rv};|K2RQ(TXd0|>zb&>aJvho zW|4(+46L!Qx1!ti%>&cN`R6yuxoI-RXEJE&9|EU(ZB;N|=&D9rJltYkH(#OnyuJbwHYn{^H%c$&* zmdN;+wy)mzt0x)FJgqm4G-FLQ&cxR*F0DLTW1biQcWHhIs^;8Jfzyjom{<$=C0mco zRJH8ixB+xa=NSBQukN<&s&E(sU9YXmhVAUxbkC&00HBW*n2LS9mJ-m$vO5G~DUx;+TYP{O0cCt&3{PGD#QV{q5fI&f>2|#YMsFDiN$+ zH)Wj5{}TD~>R-xu?UPgVR_3jTb3DsJL0{EO6W}}OJ1hqq`p0BO<=l$OSqv*PtONFV|vP#hk?c5&cWZAiHr9g{&6nY*~T9r^~xJVx1Y6>RHcB_ z546#{{ZVYgOpMmEV>7ii*ch`dXSEb({`ate{F?Yaa3x2wxm#$f*Jvo+S$D#2oLUw`8qo6Q~ zqf+Nu!}(AtxSq*e^d+H61$GsgD=z#7N^d$h&Yl7KK19naa&Fgc^knr#mb@GrHZChsJ{-&IFdEYh8A$d z`emLLBtq3_k>fHTYBqDPqEe`j977l*u202%=*s&JHfBtAL!bw%-HB5Kh>}6swCLty zEV>b(X{O1yoZzm0qO1dOux%5V78G-Y=A_4sB-c}-xGFN$*tFig(HizMrG!|p8jFW6 zrqhr{zqGn414En6(@Y(yv4CQBRU3$UKX)o-^6 z_M-=sO9&~%hWlvno7aO8GN$Gtkc7P#F|wnyrm_i7D($ps?AXhl9j*PWRWJCyOt}o~ zm@ughF0C%jX;fCIYbZ-|rgw?(FzPHXEwofcHN52DG;7~^=p&mh*r-}uA#QTP*zfPc zbd{(w`P$7S=jvCUxd-5j<+);p5(r~7o(p~*-K$(&A3;FysrPkkpl#-dxG`2!bO8t5 z5_x0f66S5v5UZV?09ihNs#v8#OQ>?iXXazieGzeeR#1(H;`_Yq>Wn*1U*1X|*Uy0J zBg>XVje}ze>1n9$F!R}e_b>&{%8u{P6Kr1cViVlajIE42CXZS6HNCGWytzE;n0dVU z8`fBNdEn>3d*Bzok3T-)mQV~-ET|j1uUXM=c_2fCd3|}qe4L%z(SyWmKQea)W>W}~ zTt3?4!Z^pUpZ*nM_P;KDGS4idpJT*ye4I!~7d^pqADWW=;OokWuZZjBCrVUO#d!Xm zPRPpmjgx0=Xypk`Ph1HSsH}t<%_g;oVH6p`G$|RYZt14#`{d=~-M`_|uhpG0Y1zHD z8D!f4s#w6orm7QOAhYp2gu$lh}X%0tzeCosA3nj^R=gw_+s^QlC*Zwl&vSi$hK7_6FnbcE}Zj$ zW@4_@7O%G>r;6#Sp*cO(0Tg)Q14n^360ezK?w$4X=aNN5bk_!*{S=39RjlWxF$wT@ zzj)=?a}qPof5i+#oo>Z9E|wK_+Kx9IQ&p|NiVFcMSAVWPTA{kNwB|FptP9n4{HN^`pmBn8g7zj z)$-tZIX|HNV~LkIJAYqS0c{nlOt{DFwdaK70Nsw4aqX<_>^>ur$T7`W$PB=kFpn(e zdfQH|Dk0SWiZ^F2^g4GH;`Xtwgu*^HWttREp7uGpFFgt7VqEBg!Qt-%-i1s2W%@`r zwCI%p2JEQg?&AF_o5HU}c|6d8Zpo-r-3h#DXYiME=f8a_7ezBi`~G9o4!#+WR}J2V zI)J8E{8VoBZB5l*KjccaAZ{b987lWI*DokCd+U}K^|V@IzhcfLdWMvv)!JODgSS|@ zs!CexH+%v|3x6`2NYy5;d0_aF-pSZJflXoJmt|#Q$HsPB-=+SDb43Q{b??>-1X5Q= zSEKK`Y&7cqxiFD_W|q~*!u>NFvZ%zF`7R6xHp8{tR9n@4@sh)g{F%GWH{;K<-&D|7 z>X&qfR@_fn;y5h9cG5}&o`ojH4Z?O{0&r4Uq^^OkdR)EcuehYr*7mBtzKB<^&3J*| zCJT69x!c&NwbY{pAmQj_oR<~skxEcqeNHyfe}$zrZ-;)aq5J0>VlzwKTZ==PKWofY z?-eEO&1T60Y~nhoMdlpZBs*&Wg8&{HrR1YoE!f1E$r72EuZ=uLMZQ*j3}N~eS*{cT zCA4?TPE}EgR5IU`)ffS$eeVBM#9K67r>V)xYL*ZI(psVWrSUqn)^X@MFEZ$;Eu5&S%MVYck4;Tj6y? zZ=&JKoXAmot_=u^$fn!Po7D6-5x@K!FTiRQg)6q|eLP5HnN+5v+bEpvs-j_2uWoa` z@;eg=9W`&)r~6!x$mPYSSH6wMlaZ`bH>s?H+y>cIu_*|livz=&GYL*Sq`8% z;XhQ&U1T>{G%7eL&zN)6UBm@n1L(dxE5S`Phb$MCKF=>14{dOQXgHvvg7TWEHf=o~ zF^Y0l`1G3v2Ye@Pi}OxfSH0RZE0p5|K(!6Kidvp)a8M-H-8=}woFYQ9xSB6U9k|W+ z2;lE4ZS|+i=K&hZvS+)S%bMdC8S+hkfX_(R3GlL)Imv&CUS5s6r;w0_%O%!(_jP;j zU?-$EnCP2ql^uS84hEHH!Ff{CxvOk^!>^!AdU`dTcIy`}x3dw;@qRPHA}O?@wJ6a) zWJ)Mg+DGl&25%W=yrX@o%_W1rn>ooM6Ey2PJ2wo3|H&rDp6efipGOWTarZKF{K(vd zlPe6Fv2To}jgAq>^B^sr4+Wjm%mLGnC;*NY4IwGji_@b5H$lmKvZhbvNjY@xyCXrr zC?y0vTc1;Ka20z#0*)2KA2|>PrgUmn!d6#SCaz74?G399wEqRPYe$P_sI<0T4y5{6 z9ZruA>}~dlTrNMgf{>;qm7$9%o8~==m2_$VcqjVmc!t?r)Awfq(Xm~nwg!bJ-Em#} zaifva3(zRY@uQaaR4qx*zBAp5ie{WV*Qqt@wCui}lNmWs8+}H0w-6j@^_9|{A;%>9 zrPKx@12+7LKDIE)de%1KdoNw5mS~bjx6ki7bQBLk!I)frIGRckHA-+8%zxV*hTdP) zlhi=5ZPc@_l3#PKp?vuAjP?VUPjg403t&J%;qO~AKOc5TJ>6jUX=WhZJws@sJ( zr`LxIU+y-Ys=B>MO4ypHv3fcZH_d0b=>HR0wO-3c|415rpWx**UMC^m z<-l^219B5vW-fL0sf*QMjPh3x`gv&zzML@N&7;ReY6c8C^s-~)<5|Qm6T9mo>#>5c z+ik#V1^b(%qaYkJN8+dTwY9lNK06}O|F&<}*Z&ZW)VgsIi-M)at>P}XGaOoxBUeA$ zTe0Yb-;TTA01te9Ypb{K9F-R*&D(+Pnm!Z>l=|qVK(=u_MDpNKgxK)}bUcPG2sv|* ziSzvsInI3Y0WgoL&%6=7IuWWNo1YBCRqaf~dqf-`ZnHo%@RV|Q6UtnflRXZHgZ~eq z;<^5e@}=zUs$dKy=_C)e>5T4N)5{<6xg1A7PJuoe#EDII3lQH`@y)}#CbaP$ekLt+o>?y$Jr*sF0? zX>9VdlY0HtNgeqwii6sXy-a)krn}#+C4n9K2U+eKD@LB`&UJ#^&-Eds4|-;$uoDA%Z7~Yd&D< zm_wi6H%&)~yB_CC`zkj3&Jp&Hv)hO|+>Tn^tN{CVug^UfX$WS#GS`;sWwETA=AmV5 z-Xszp!P-*c{m^ozGK0>g$gvDD*p1BtlN^bvztfsrO3Jw21~nx{kIfv^yLwH|*ubus zvA{9F)vh!T{t~%askf-Csa0(&yuq!d{e?$dt+TZXURmySvmMee#-`O)Z1ABP0Q2Y@ zZmM!A`knMm5^bW>^2~1($!aljgv^Mt{``_+zTOOTotM;QP+o5C_cedE=-rroq80V1 zrL%>6wH|0XpYA?s&HKoAbx~wqP;*AZClINXIJVuOJ<=?hp;(va;J?XH-i9o4*XUCo ziPO?*C(?Q=zh>xp`Vr|#TB-o+KolAp?da`wF z%BCT$HqQUd<`Ap2SGu3YR>Zz51(}}`45!h^7`gDtjEqCs?f0(B9d=3l zFR56QG%K}dvhY#4tgl%8yS96QnP|sv z8?C1LhK^iWR3JaKm6fYBQe=LmBJ-Pgu5pu9*Q^L4y0X&iaF!3rfgQqdaeCmkDRZB) z4>)f?{wS9OF}_~Ljx8r8p0we?TF=W+bf4g5Rb8iLQu$TbyxaK`>}r`{Es!qUB>wzo z+>PCsPr^v%RUX7NIN%qWwe+1*t8;l)^Wqs=w4AY5Kj%U2t7uQIzZSe!vIhdl__z+NDYkCM6Ln9l!j&0~-T&ycij!IBguJ8e=@L_c=^M!&amja3DXOT3?AV*H<)_@=9$s>! z+L?9!iJD)V>L1RV%FQMo$2RVCSH?~XifFt`o5Vt(bF4xZ%my1Q94|P!JkxYK9$`3g zG8e~2e|%JuHJy_OWl7~hGCy!ZPn;HqhwEO&Pc3@tV*~aa=$P>*4E=~l?2F?go%IPR z&IRnyTu61B2Jh_te$OWo(qz!Q;UpWtEm2X<#m}ciyK!Ihs@d-#g3A39^Jw;FCyGsf zkp%#~1GQ*3VrD_xfxpQ?uY0AoBl!l!>MAN8>WH@&Bo4o5@Wmv150!pXK<<85P20#z zo(H(D`h-~*ZXxVUIzNG3)sR?2Xhu$lHj8zylEZ2hx(exqz21^8XlCzUXZ-f&q+C^6 zPKP?jV7vY7>&x2fGs!g106RNpkk&DI`Fro8Pi3&ZG9y3uaDOtIO)C*nC;yh`Go#gN ztLJEx^of(Su)y>L!uEND)#flq5-;g5{Z)UL-K9S}j{g5Q*mRLx$=(sl2~zY&q)kZY z{G>ZS>+Z<-_#a^X&J?R#dGN<02hctEfcQ^sQSL;G}ob`STH!6bCH&abOfz9P-{ab$pS^tYIIPd1M^sBlUn&T|? z4M}`oIGdrPaIT2gRBSlO*JmsZU0p{CbQ==tUug&F@p*Cvw|)q|B_ev&a(8Ap+~19Z zw>N}`?hWMj!JN`i;dBrp!%8k zku-T%ntJN10OHrFk<$3yn4nbH>H2R;KV#F*E^J#`)yiNIX9`P8>VP?=*Kih!p z>dxyjkq;#FgkS83RjK~;Z$+^yh<9bq@HI*@PbC11Nj+wAVdmK(h64*hJ|6%V%yj!w zG}Fm7T#p&e=i%%9mh^g+1U=g+V(?a^Nk}}_Gi2>$f>ofD#>tT@Y$7SU=-q*W_j9IfIId2G8C1g5V5y|U% zVbS&eQ(wxFae~BWzzYXag7Wru>q|2vb9$&SQX80JFp;4}Q8~U>0z;O68%E@l0M#u7 zHLNy6%1Yx9QAN?qd>wa7pXHb85fsBIO09wdu1{;b)X13)fWJ=k z<{(`-%Jd+cDCw7MQbg$4NfsU}r=6v*>1Xs}8m*{DLFi4QbDj-A?C;6$7~YadOKei_ zY59jaF+NZ#rz@&M(+L4GoI?^NjcSm( zwL*V(&O~m=N(*?uUIp=8^Wn0=XD#e0%gWlbc(qpRrI79rKh*28(~(mSc*dfy%LC-7 zF7UF}X^%N-QXgd2D0{KG-`rbL3P~^}0DdW-)fCOr7;*`<)E|7G^lJp0TnilrC#0){ zcwNc^=l-z-+T#$7RO=a(Sx+E$Esx@ykeZ>v_1^*sd|j%|F>ZQLHjSozi)v4^yOH3K zp$I098`~zAseMpp4af^Qy*4@0v6s!Fezv`A_*FdX%iHJQ3iW1&x^wrI=GpaKAWsk zpDEaOjf(b;9}0BQXOUZ#u=0Q2*h*ZQs>=3?7MUM&$d>j=o91(a`(>5> zPR1-~o$d+#aWKv}7;Bjz38Yec6IBVTK+LgKThGun>lkN%KyMlmpHfMZIFb{iez|(N zRq3|vB>TY@RwfX`@z2tNK#D&o^+mL*%B{uaJi9@4nS~u}v$B=dl}jj_MQpY5R5?Lp z1;S{&9{$snd=3_D%K8Gjw752BQn;_s5_J9$eVS*#fI5mQUw#(lh0y7u{%r1wnWHLu z!4Zv?7eh52w`gCdcP4ivLeTNabB*=&68ACZ0>xC-S z(ozdzxXo5L`O~k5eU&N1R(;uR3@IK}=5us@gX}My9iarWFA1JB&G-qwbT4?zCLl3( zdfR0*&{`OLYx4e~fmtAZJpy%Yi^H|~i)pHX3a}a}Oc8o{w%d#qb<1kGHEIC5xb48D z6;&C)7miAq+xtt6i^Nm$g@TMMsFw#mcCNBu6mx!VDO%Api9%~Nf;#O58!wTWehV8E z;iQo(sU%;_k78rg)rU=8Bg!D&JURRzoh%N`hK3HX>wq;GOOuIoc^_@xT63KAg3m++ z+_dw!;lMSxn2{#ETHT;)TT@9Jq{nSIWfVE-QX5AP0vl8yO*o%{+D-vV#7 zEaas7E_Z1)`@Cmi(7JmGSE)ctvqF>#dw7xG>V9LY0btLGBC32b;$J78Ls^cto%7K^ z1*1H%^70H#Kel!o*b`Kg$7G4+_5RVC`;9G%S7Uf79WrEFk&js&;8GM4JGfcej;_-0 zs&c}Wa_xqbXPr@7h57e5C+cSeZr3ex?|$+CWD*JvDfY zL>vbC+Te5xD*uPW@%`ayZI@y7BNzPv1L)%#uav(&3ITcP;P}rBZ0dD2GWdNT1^wyjq|Z}HrE`$bdZ=-i~TRejzLHV`RGVn%g1*}COJ>ioBvI2hjIHWnVpC&qykot{r}8R=^-kCLD-{hW%Ri2hDJ%U zHbq57?Ofz@6Sao_pm>lB$>L6ehicC%mxVEy4cY2-P-d^M^X+Csxq;wfEQ2+Bh=sE0 z2Kl?PCtr=oTv21*{cLO=_C*hee|%isfq2D8mlrJWvT@;M+t_Ln3A}!Z2hDijnX0b? z1kTx^x-Mc=XAf&voOeYv!aTAbWzO`?1baVu+Uf=!RFc^k&i z-$^-s4)Hy&SUFIE#mSh8ILwW?uI;kg^D4pPd3DC+@(l*a0PXGK)MqY^PQN!3$N~5+ zH5M56%73^tp1H+~wk>ex(770qO%acrT$XYv!ci4+cmy~JJGo1V80HP^Mp%gMmMxap zSl-DjTpyaTSEyk0NRD8Ws(#nxtDY_ek>;T3uc{5G^bFZQ8MhuF**%RjKyk2X|uFwCftgtti zV$anRsFaC#$#4GVe3UkMd;*c-^A{2T9q1sOZES5gZI$fu(2U$>to6~HkqWqB z>HLqKvFqS~*Z1%LaLuje>%}g3dt;2{EQGT(L`9wXt}aMaSCtG_HPvDcSF!diwbgEg z$-OT-7R6&JJC~0rKZAB%b%pEPgld!H4L`8tKtDtP_hZH$+CXn{LoYxgE8f2^*SxiW zH^EG2lByl1Y;S zukA832D5g9H7NIl3RhjOIQ3}(*sMX`ttAaF6m=={$>zsEqeUSXRBkuUqfCfYhjC@f zmrWTI#g@R)9{h_H%>{_GJYlWl!0bTAVa8kTz8?aE|#!?xxS|l*6L)@pgYY zYhgR+Yk&>N23n?`vT|voRc+aq9jLR>@omJ)#BbcvvLosoFA~b8G7#*eSsEnYDDIb? zb>mP$`o(PTe3avIgfLuvkQX`W9iC=klI))KnNj!s*lf9q>R?YLjmz@H*jz})lbj(l zeZ!XecI)v=P#Gt?2dv5c49k5}^9&QHi@Hl+RA$_bRCLuj_hnx;^>+4;tedr5sRG@- zxlD*ERQqD`Vt$4ynd!W7n>=WWs_r!iW*~d(C#&997&*M#2tNX-Arl z&{(cCv3Y>|%H5PrIaHVXhKK2=!(W0~vdqvgy&OPq%=Txt&AeCT8d}+(r_&rERP)-L zzKcmVHqNu>vne;yF6Kh|x6-%Yd=i`CwU%x=A2Z<7j(uvBO^64Or)dX@UhlZ=dpi>b z4O!tY03E3vt)`8`ptc_7Q%P}l=ZF|?h?jYcx%ohy`&+-~N^oWd`V>u9%r%jnLsfY! zbi=xZ<58n~72>+VM%UC~PpaEzIrG(ms!Ig0d)Si02DlKyQ{!3W{6+85BzY*%%+)&{ zBw}dDnRa9W24pQ&IQ3c1Bx&2?_kL8K)mRQf5JiZz45AvlUQw- zAfromtk__n*(S9VzQr^%TO3YY_(*;}BS0rYypi8kU@r=+pbdAzBd#ZY_OkJk=&qg{@0Nn9Bs7|j3P7l4fNC}6}A2|B{udB~{=R%@ zi6grt;(pkydivY%1NmOf6JaURIO0X%&Ej~b=*HWGx_0a@RK+2T8Nc-&d4JuN`MHD( zpH)H5Hd5K8x3l2f0wV~Kuoqr|9U9LC-oqN?->tX zK*(4@UvjJowlrR-1XUbB6h`n*PR};7YAaafhua^1pqTI%fxm*;xOO4e`5Zoe2`G0X{cdqBk9Ohr zn%GZuv=9XQbJ=z8Yr%$iwd@#mD)mN+@NEq5TY_aZ;*H5yzRMDCPHUt@1!iQmmKe^5 zU59(6$$v*P_)jJ^%Ilg>#M5=LVK<__zX39bC!`=tk_*V2-)2d&j z)+^`XM2eS`=d-}2*^a>Uzsd4UFK5>}M4rLt>wS?Nm?u{FT3bspU^VEMNcpunDy$$(DVU#)M!xYypBrSd{%I3P0&7r!CT zl(WoX!$}kGsK5E;miRCg-kns1{HsW=>d1xN2Oc#q5^x~9kd?XE28$4;jHbVo>?Vyc zk2l|3cZjeP7A39ulu7COKe_Ptehwr%U|rz4#%{GHFRv z*MY!WUyki*L}m`6U{1|~yYBjpmGGesOkc~L+nMjI^E?YSRavf--Vk$k7z0$dNuL`7 z8P58j7^cR&$l1F+mKi-%2z;uPtYc^ab~rDx*WBF5Lsy=>wy8^76H5TjeSf9V+FbIV zkN_J~;Rlp7p@%{Ce@^-v>{i?BO8@n>;O55;&v)g)(1F!fh3RuGi;y*1OG~iD_M-!$ z=Sdw8rVGojFOGcVVLm&qaH(ysRF0M9`&+<$fMmJ4K)w#_b|VlwJZi3n%xQa~7^(~| z4fdV5URGv|*QkF3gQq(b{V|AWdxNf`q{4^>i)1J4Q%v{6kMf zPUZ(irB!GE+++o<8AB^Rb(fE4O)S0b5H%wtHj%YVhpaJ&m)auSD@Rvb8%u4~5f^f- zm5UCWNZ1tJT|$%kSm8&0otz7)|Fp>K(7-S>75lP2L|mLYYEcZ9JwL9xlKr>C-f%P- z{beXI@8Z|fv_S-ZaK&mHh(cIgX!<+#bEpBN>!caRBSdr_LI%i>6LY$W;+t(Fhbz6b zbFgcLE0DXzgeDFxqmDw(?M6bBM--Mn(!{q~`|8JoxjY$$ufre-YFXKt&5n;RQac4j z9NAvXyuoG>_7~@bzGRcg0tI-x-X(EZ*_p~W+3U^Y7Q~`)C@d(f>#^-Z@e z#%ir5-c9BTdt2oByuA)EWwHiJU~2K^7o)Cj?cD;0zE@uKImLdr4|0wu=D5ud3M#d- zP>N(b})fB|SMzDTq>rlm#6P-r4(&)ibSykDZ(pljSc)t@k+Wy-VbC`uS6;2Md zEa^Mk+a&jlikOTpsda28*MRT$Q_(4;8T<0#MBnz4v_GWlKQGdPqF=Ln(lrV6M}89Q zogwQq>$3Ah4bbgP_=q$Gwa+@1f8~Rr)ro9!qS;5c)Eh4}I4QuR{kOkb(dE8LSYOH< z$ic=YO@q{giSM7nd`&;1aU_O2=KzbE$;&e%h(|AAgW&gx+rz36WH-oX1bC9)~|xHd%H&>*kyc5KyV;=A;3etMb5KEr=FHLXM8tw8CdYYE&|M^d>A25~of zuD^<*`nBXm-J_mrPTnmlPdsP zzG!VN_}Z(LzcMFdWTc;*$eV^pdu-~oOHgR0<0hseQ+kwrdcw8YJTZ3nT3a*ev3^lzm5#wRr`w9gHJ`SJk>#D06KZ~aK3_coecV06ixHmN znW^-*p5d$@lz-J^BM-vZt9i%JS{*V z>|#j>CT0S6Ks&iYd*$GTh9A2%e4ue>bfS6OJOFp)n%C zj=D1?<+|1;qc9n`tI3PqwhKrQw|95Us)6AZ9ntjcLG7Al3+DIhFVrr`rKZLjtaF_Y z0<_CcqnRP+qi$m=Hug&`hE8Bq7yt}>I)~>g`$O@z3nj~TZ99cUvoCRe-WCaK#%wL} zd(-ZVJ9W+T**K5H{_(4)NsguZ)e&G*J@+3;_qK;l1pA!Azyqoum&Sj3pAh9VsR%vc{s?;OBjs}2p(q^e7Ukr44 zSYA0S%(G`ZLfuu0xAD#fhRss596T+}JPTI$JI!3m#<&YS*efhO3P{8|cUsBJ>pLzJ z=xpwHwL4DKgNMuhCRCvn?2v#;AUE9)jR#@BfY14S`TFYY^<4-&E@Cv#@V{GVZxf0ThA zm3rB`YWI+p_}q|Nosguv?XCU4qsdA|i!r5{jBMZ}dPcj(ZjN^vjy z;2^!)bxpP(yFHgeqE)5ZI!+J*ibxh@%yNVr`O?x_z4-axy@WCIO3sRLTDRHKEW~OI z?cxzju9QHjcauZg%MV5NxY;}Iy`y7=!*y6Cpa%Fk8A@sVB^P^Z(yIu~t^-;&qEs&P zYkwDi!@@qW28aJenF^fEzH7gdAGJ5qWpv*=^t+ry{8nMw@|zMe;}gg`H9er84|2bO z752KW4(ITJXiF>(%w9#8>6L!S7#E~FTky%Z9A2KYF!!@x@MC62M^{hQ2xJY_btup5 zdlpE3fM1OI-9%CG4lMXAso5y;2Tyy-3s$qIXN|&ssQ+S$w+F}gh!+o)l!v+>DU{ZM z3@-XF;?dbVMKKsoXITy{r!fnomaBydi@V+MXfEAP*v}#+DZS}eBV+yFlr{ekm&pj4 zu2BXt6D8l%;6wJGsP$p@Ae+G4;`D=N+`R`p4<#iF;{am<5_oS&v3xxaAC%sQ-kpA% zUir2^IG>o|v2l-67UAQopcvI-27=X5<#~M)M|rNXA;DX(!fE|DZa3+1nb14v&@9#tB*b|Wi{QfFh_9V zNz0Zr4P#Em(}I_t-wbz09teG%`eDdpknHzQKhS}H8Wre& zQ#qAos^h}JlxVpG-M*(iNNE2+(#z->OXrwMB;n~R@_ZYqgq{dSinA!R!G(=?6-3@r z$5PnExrld%9n`#ZyjuNAkr>Q<|Hn;SQdM|~&aH=YH;6Ma?Lwx_NXK|d5H3;VKrpQ6 z`_*sjc8eM4*g7#b(c_@BB`frFC&6Yg_yL?lX{p%ITpU<_qxRp|iKxFK(# zoM;i$z-pcM%(eze6_^KQn^sKcZ_KzkwDhN?q!55{*PZUpe)AsHSc0mU6uFLM#-wOf zu9?QWidAdxUZp^B!qb{uNMtM83P;|EmWEE`v=?RA>PC}SV25sW@iOt%@-Hcc|K!?1 z8z$H84e#?MQ)lT+^p3te#^=0vQUSUQV!d`Jom7IpHJn=V6qOumN$(SV4A%S*uxBA0Kni%hj6afi|&rvB|H^ ztT8(^4)8j^U$@@LmlGh=Y#I?aQ(wmFLjLNZP+iGt5I%ofD*JV%ecQjVcHIu}!7Lla zRvxPI?NcNjPC^N!ULD-N|#bLf9-<^)~( z6Mi1tOQW;+)E!=b#o@!~^OFHOot?%(|84Y;2^OdRxx7hk)aM5Q!1)ms1n-5JZT0MT z&$VR+dQ&LbC(eq~8i- z8*VRMzyDtZ)!6`4uuE1v$jG{>*DvSus&v5gwAl1&LC;XVeliw@RmmxTg>;MUU6aJMz1OmK`rb;)VI>Uu5zW` zy&Ci1j!qVDTuJok>M`TE_7&UsqaaOD+G#%t?p6woxBt>W$(X|qyfXf_=yqeYt?Xum zWX%i6VKDhMT<0S^xrh*A+l*#9$d*qBt9|voy}J>vyZiAHAL~QUi;Fek4q~dFw`=X} z0;IF184XROp#}7zF&bq3pWd0e0ZB#;ae0CJcUA5VP1%Qs@^r|*hl{2nO7K^SCfa@1 z{K@8_>QuV^GX4WfO!iNmP`&`I@>srXzZs}s#var%oQv{Ow_s2Xb2O#XtOii$kb7!azTffbX+Af zV=3p7Pfasa@?W7;{%FFq_b>NQYzZKu{6f`J$<<3K5}Wrui5bt>#?w+~;cBkSNxT0< z6_rN!M_Hpd9v#*$ILB|8Yjx3#IUbx<8{XO%_xb(s@#acOt-*XYmyW$`lna z()DJ74$83^4Vlb8G@vUJ+Ya^p*ULYSA*>t@mZg>?uk))8*I-T8 zME~y)yEXrV0!eV+nLK`+f4-$Ijz=;|`f)@dQ2B@6&vpqs{3rN?_)q@Qe@)fdCjS!4 z6ie#2`S3~2v^kj!(J)J)-Cqob zw>BRQ-iQj*6HsmuNIIQS3{0p;K{G>y%N79d7Y^d8k?Dbh_ zsxi}hX{) zp#nSe0O7nCSif(}gRHazc|F?*&KVAPZpA`?SFm~?aY6B@n%vT(oW#h$I;jzc(AL6e zjMsZH#~Q}#1g_)r6Ceu??_>ry;ExTgRL!MZd@C}$Udg3^7)|tbd@IVXmZa;+)YTTF zu^uWwZ;8~b$nZY#C5V)+W%q}#&{Y(9iqjNRONi}MUX#Q0e+itE?n^ji|JPWCGUScRvi%=R?l+NQVGGVBu6_min~eNkSIpZPBS!~rDei%+MWrEuos2Tg zcumXtfP~1%5mH8Klb^niDb;^^IG^a+$^Yg~Q5o5-6My`-=l!|jZz#8Xw&b(%XwQS-*XKvDYpYS-QY>WO8Sn0d((az!S>; zilOj6W=`hsv&TSs~AFyj+j)c~(**o}N@Qv@!aJA`@ELXZ9EaW)mefXH8^A$upYs(_(ztSVFcUK3fTX#=f#=Bw2pN@w= zd9Yk+>T|C5i-AO79saUhPSZEt8 zrmxcuSG%es<;M5^L^AGcjYbNv!^CPk84^w|zM4H%GcW#U=*bo2$ko(2hyai!UASG= zx3xKB4~%T-&^cJG#^=t-Z)Whnah=cMLFS}rriLqYxtYUL<>ImV&KOalmD&72)7fR; zq;jy0EslIx$Nh=^PESolU;e7TjkK@+45AFMzX-E^oC~*g`)-LzM-y+8U%AQ~_C`u* z*|%@tuUyp^qtbVl{~=G54NYeQR^{#G#4zIUUb-J&0=dDBR@JK?4U;wSMh5u3Yd_iu zXF1)dq3XsK7lYF~Y9k0_;dLzY0+U&efeBvY!F_M}_{U>bp`Z$%fUfQ`>e#`n_Tpk& zDv40!W%ycMfl@hJv~B;upZnES7{IX14#Udz)z#IdraV*=j{`NpHe1G98nm=Ma1#H5 zi#UpXZE(2f4th(h%9;Mj9Hsjq=_5ir%Z2{6sjfcAky8k!6u58M(R@fg}e))(UuI&J$r zpS=f~OoV0>KiXXken^QxTpjn?zuVG{w5XA6uAHcaq79%&%Efn=bE|`3rKa6}Tj%#l)RQ2c~%%)_du2nfxVyQWR zP6V&FTcB6k0!W1Sk6LhgYt(g0?Nz498F=EMPOm(P{}&=rni%BZTf#4|h^L-YhzS)d z`=J$;);g8DG7A{EHcs~fUHm9(NO%V+I$GpXxf1I2@CJYT+^&~mrC#C>5y-&9*yM%D z`K;Cx|KEOVgJ(#pmR@N*mpqO~V{w})RKFRWVkO0Wm^pI%Zr~y(LydW(X z?>u+95cShBeJ_#Q8@}&WJExfM6mlyA|NL~_(P~#R!ad~ZoRQ_BcQ0C0wnc9h-yJy< zGlweqwYP{;9GZCwqtPdOdwWACe>((KfBb6sa_4ut!7L#P+@3}QhXx`yPt*Lr`Hu)2 zUo3-7hM*~`Tb{f*rTM{RhyiaOjN_G>t2l{&#kATU#^?4Ur|O261t;xQ(1_}vNL2V) z%>Sr*@1Q2PFKU=7C{08~x{83(LX#386cv=JNN+)U4ZRZ(5Rl%%&;G` z-a`!?Li=*>{k`8iZ~k~@awd~xl6{`D_gZ_e#jm=*>NwZ1-t}w%z(wnU_DSb1nToyk zf3P0H=ZybnbYM0u9A%vTKB=#kkR1yXfc!yHK$hO3J58#HowN_Jjh z%_O+ynVTCoqoCz77SQH?(*xUBAG1o+}Kj7idF&PSA;GTNjo|idTeDBMTXE20>LDsKG0? zyf*E6SsAMac+U{E&$&{JWaGC#iVWHk4^$E5L`nUo8o`>CYlf`~W)*uu@Uo6AS5GVR z-|vOsjVPu{_Gg8&0{bhlGe(AR1g)tDx);dXv20bek+#h5U6W1|(fG1cGF4{CLA3BU z+MwU!uQlcM&Cr0+YA##r&9`Ik#ux43?;0&%*Br-K_wR&^tp;VP3vcX_h#qMIpHOl< z7Acf1&w_d57i}a-njvKlgRd0XR#GD92pRM;h(!Wv0;)dQ|A>lUyMR6eu<@Vr4^Q0m zNTCL?acZLoUrg=3_3gQSyUu%*0%~fasS(BU3f7A_;Mk%3Deuh^QNUAryS^r1xa@y! zmMQn1|5VFVR@U!tT~uzZaP-{Fz{N;KSfO^AQ;MXvY|C6%lwd8+S1n_O)yP8A(cv=2 zTe9LhC-RrN_DcjTE(X^Btr#ZR9$P2rZu&@24C43BMsPiadXfwt<22#_dmW^H*a6B zd<6h&O7k&1qE&$7jGlh!iM36WT;w|&(!pfzdJY_(UL3~F-*na{(t|fQhncR|s1}@W zXiWtF8(h0%(&Zq1d+m3-u$_5b>9>Bxe*V)!^6Y+RQ`qHd<_$V?YvH=V?<@$D=&M0Q zw89n;+uH>*x%1=&fnddt`a3>q-(=_+A1?FhMNC=w<{)Ov&Z8to4$vW=C=Z{f5qdJ} z=M*=y?$fZ{;D49L_FdqC$44vtGc$xBU+>Bf9Uhckx~-+z{Kfy}31k-VnbJR7yKwYp z>Eu{jr{8EE#0eUINV7;Ji5XW#x|)8)O^}^d*x{eZH(}PhZ-67UOw^S!Pn#to+o5KN8{9Mboc$@9Dd9}V^Ny>^InGUUwx z#3TEjmatG640iOs^fgE zw_x>-*yxCpibS`Cbg<&IXEu5#ev?Uw078dpj-F_xDa^R`lv^04r2k(#*QCz&z8hvGM zc6Pj8zpy%Z#%qd;U{Ty;~_&mhi50^4fcZoz0B|d}CVWX%+7wZKw-+?ggSPfu^us$2_?BxIA-`$m6e^BfK*lc=iP!o~ zc97L_Jw`UU1kW3OF9PqZRx6ec)N`pgs=_CHU*%^euc`XD)H*K%XQny4OvDcz&uEtW z`&N9|vr8c%j#Err z3=iugTJgI8-y{#(|FQ5Kw@>Bk46AP;CR!mQia6VT`ow?Ynb%vw$R*Eo+5?|M|NXz- znmM@1;c)V4(JZ^mN{9N`iztJkbsTk%F(X9!G1ANmCzE!$i2jAi}WS25qs)$T>XBj>hzLpQ zJSx`%VPDN0>@bFQGL~;7r7#~ki6BRumpkE7_^Z=tX_bN^yk<^w50*e*zHCsFvR;yW z2qf(57b1Ncjy^nFJM7=fm?`)ye%^Iq@+oSooW^}%kei~2xa0Yk+T*&?E{^U8$LX1u z6&oCqXl7MzT3NH<@RHcyEQ zf$Db7?`#2`d3)ryXU?}=`89u^CT;X~(fg|F_MGK}!|#v-K-~5u;)y}P0{*8@Ex%b0 zR>bm2LY8U&Qed`8PFBPz@ox_5W@|h#reYs6J*cLA{>hF1iGY7;cpuM2DS7cj(;LqV zOh)-NE8hAK<-FcUy@k9yHU)?*%fG3w)(4VOXOy44TY1G(3b(X#)hQ?a8%UB-g8z-^ z_D}4$d%0obBDGZreGOpGsnD~I&pJFM#nwwX@h9O!u3+z~lUqi@bAFzL-s$;ibzUZS!8Luc zjkSYmyp6n)biqmVX|vmsVd|I1sj1a+X%|Z~e^Os>#A?Kp{Nji>zyI;TMTKiy4{_1U zHEjsie3pFDOK-u4ihm=f?N#aP2oDT2sTMaF^-ru^=G4;cXJ*g^8>j)-kODs04WlE6 z&!qAjn0WWQuoqbGUlTZm`%g*rlG?*x`M!&sCZDc}c@M15483?@=(`#yH~edSd_uX) zEH|5(cx|c`xe;nBvJziqg3P!PU5!`GU+4If9<(c%q|}huq(Jtrb^uS1u&B?*YrCYj zYJFO>zk`PdZn?3gF;`bpqBLSF=lF8eq(0_bn$FbqA(CoZS~N*L7x9~GCRKs$X}zRg zy+D?f8CjP)XR-z_kG{e_ilh%NTPNEZAJx>~P!fFV#)3ZIndK1=C)jkN~xt`#p#EF)#sw9Oo*pIn161+JLNjUGrPWHh>3>PH|LAl{)VWY};ag1=&vL zKC{CGNb{tTQrcb7#;U(<_mcn7bt{H<_x=Dpr#|<5rdFVSlYDVT`(U>2`g$BhR<^TZ zIq76mSUWxc;6d``Dxbe%DP?bY{uG{QcM-7eky7N0g9$F|W4hTdntrYp+YV zOD)SA7Y~g)B60dks7PfVfJUOi+t+lI4;5*vAYWz}Z0FAo3;T3pu&CBoFV&8#+Pr4gK-u`pj<~ksXN&c|6eG z-QDiPTyFamCH}HBH#1Y!KHHzgCn$}guDFgbdFZhe8CjU|J1t?Y*?HK81qZ$I(=3`K z;e6X^TdQV~7AXs`H}f-=Q~h5-=auAs!#~KaUYRsE7Vi$c)_Ck>t*#pUdq~h7^3tU#&^&6`M#tp4fW4^{} z_aFC9+XL69e|pok{+Tt5-(-r`sfYcfb9O3wKi1m`%Au|#G0PgLWAjj!7w!Bp_5GS% z~TJq=tz-y2QEpzz*yf$et5Ub=s?h&*=FdBo#5%a z|I+82xkW#jg)1`Z`#b>l-^p1Jkofs2`3^m9?n((x;OKU0vH;cv5Ya``jdP z0`B?O446GH1TTaF%;KkK=3X~(K-g!Om&4>|*;ck(fq536E`s9FpGRc*^MCY&)akzj z6zY~({)`#5wLQK2E?x46MmPBf&0xFKy&z&P#pOs;hn$l=C66?@>{BMe3K}R5Dmc|A0chtykWo=yyUwZ+>pXq0Fk)U0j#G1Gv2F z_0^{Sgas7`2mV|Rt>U^2Tgz0ER(MxkR#l)UQflRG_aXihl81#pluccCerVn4!{{gQ zrT1mZyEtAJ(p4ww=VPx58`0XrPz5q#vjI2OzAhda;H?$N-Zpr_a9?E+JS!~H)2*qAjSM=r+?Qr8qMGjN4XcI~PEAgKc&=9_TyJ8f2r++VWu;|R zwBSB}6PCnz>vwunsTlX7VgK7Loo>;XZsOL~-lva5@9}1#r#o7B&D0>W`LDBDmjMzX zxCdDPUMO9E6?bByuDq!w>|i$2Q(MEuO;hzui7L-x+CI^uE;ZG_ZhhTtu0JfyGOKwi zS*I#tL0crVhn?qIlV@I0{}F$xs>kyft(PfGKj^GLdfcl@NOQ7wJw7O$7x2o=&BZ$^ z1qtBhrjsJ$d?c_g&tx;S14Z_hYBwA6+JGch0-7$2doI?CFWi8M>LZi^OSQqN!ry=j z(hCDuJPFl}b&KY{DS_QWrN#xeu1*Hg^Ow?(iaxiiyz!Rb&=me*MlVbH>}s#g>I}{_cKMe4cps&vsM)h-z9z<(2z^%+K%X{i` zPja7rOzzQvDXG}>KTQLx*MC%>k9kq~PGdd!B!|T(%SSjb7M=4&0_1VtO&r6?)?iQK z)sxJLJy7-C2}lhzH^A{#y~qdBb3^NDAJQRRyCxkO;r)@Oa+!LAqaL%f)2K^TmQ+JZ zS2wq<-qS9A9-dOfnjzO(1x_kTuZA~+XL~r%t^{^Pyh3ve*4G_gUytJKXiPQh9mzg0 zop!0pMkPKU*MgxlgA8+&-Z=wN^jg~cO zTsBr_pXP#>_%0gWIEQ_>zEX=B9+6-9PPPT|J)9&Cis!HNEG;OqHn?8W4(gS?ZzP13 zx6q=e?Bq3-tCsx-q<;c%$tH6VD*=T(N*+ z|1z=2((K3|;FZr^>4^D*HBzpP_}ZX_pFH`f>K z4!8~^A3U@(&OBz2hf&R7k#=_q zAVF!KZKc$1_r1aq1C_b}OYVUFjIWW4un_oFVT`gBd!lorEu`4S)Ah};e~*jnPuh_D zK~4XrKm41xJz_w}Vr1H4O_{-VoViDcrS};d-9I}iI7w^<;Pw=={Qq{&|F+b>`wDl# zFcBraF|D68&dvTUx8*uxeTHK~9tXydt))S%C#;2ajnN;?KfR`>sGgP-If`CXT2+bh z?~`fSK6Np+sw01w>Swp3+Mo&RQfj3T*D*rYZ~`zZwZkvT&w91|r~d zb&H?t1vUr*1)GxSPY|h(>JWpr^~Ig-{#(1vNfYB$Wqdd>(IOXi(!GJf0V_|lH#U7o zxPBHyU7cE+18#|Pt)>v+ia)i5$}L0{Lg5MGstHMH$nrzQeJ$?pv7g9tC+};{jL^v?2A^T@L=`D^Cca?4hU<`&fzh#m8U06!D6ww)36 zi9;80CIdRC`5iZJgHf$^o&tK+7XyH7NbvfVzRvJWR7%rNoCj0JcLq5Q^Vwsd!5Wt$ zXYxG=xc@+DjAx~%A`LY3n(ZYBVZGuYv+)XCV)40yeFeI>9m#MNk(YcNH za+glE|BvaNt(m7kLX5__1fPTl$LG4xtYqk}bJ)d)9Qq`5#}#r10c*0Sd}I{aN3mOR zsT8Rna)s#0^%ooMZ@gWhIK7^ofRwG;F_8ru7#vbKVf~{7*4CYoMWh?PZo-X2Nc=L* z!)4r(B+?DEHTg|$Y){tn=GD1B4^4L_F-!Uwt%X5^cbAs~^g0uw<#i~lKXMjm^VYM4 zvq*WWhOc|~7whX9j;CF0F9%#GflN+n*SB_zJc=v@Rsx0?wu^LAxagV#)@hSZj(bc- zKXmK@>Jc??oHs23@2GAwZ~=JL+(YxI*H&|cJtjnWotx5#KF>>E{an<-#slr?GfR3!stW@ z0|F(l^oN!d{e$TS{w{MqR7^?bDVixRaQv*5-<1(`w>D(4Y(eW}U9PF^W2lR!^HF#h zzhZ@sR`tBoGMS_Z6^u7TvD9vYkL<@&)lOUXH=>(MVBDGwvLCH zU)R-(m)$$Et7vy|Yav}os76v`gypa4j&jOVs)+nNocNVM&u_W*=9JwGf%?W&M=_c& zI+`mJ9%)s4bB&Hi9W&WQsMaa1c4@;^boLlaAim(WliS+R(MGp8Q-9 zzQrVZqP!jBOxwf{ooP|3Sv(Dhknck9r^7}PxmGpGOx9~kQ@6>QroBtTw}Vqpk_A0= zZmOl8yn<0C)eqziYXC?m+2b^8vh;;>d>i0L@vJzD(jpW~YB6!`gfVBltLHtrS~pkt z_O=b}3$q$)r0s-AgX;i?HfN%l$Wd^SdSRW8TWvdBmpj#_hMhD?nWO(kBR_Ch>CaT$ zHSbD6W9pY4HTdA~_$XGXolhSe>a<}Rxj$U-<=G{8xl4cBiW+z(?YE1ly%MQRrc2u? z>Gl+kFJBOa9Lgc_>dM8uKMNOa0B08_4$$?}+&VTPGtL5Fm-D;Li36QPy8)7%A&}5f zl?JoZCV})Ox8_dr9+eff2~eG_{TF;NDHP zU7x>))g+gYyEBzXidwbzDvxvxbv`|#-Z4>l>h2Fq%d6EEnyih5rPH;G?6{7hUFMV& zMKkyf%U)GJgW2sQb5Z`A`au2pTA%zcW^oIDN{QOE25R>dH~n@eOf947#ssk~v^Yj| z#Z)HGVd($do}!U{Kat?Z@pmP; zzYjFIX=l~q#l(e$wGx%PB7OCmX6S0k3saRJhyO^kL%{*AE*`&=0fw6$eOf?K&}ZbT zd6G7NreH`J73<8?q(IGrlt%k2Un9sAGcBY{qCZ2SAqnn*U}IC zot;l6LTEp(nu0JikulMwYXQJpsGFZ~`xF_YQhm*Sm)T-4dUdsbR|eL*W>5wh+Ah>A zDx8CCF7GH^dV71FUcrX#tZjv~12ooYpnVg<3}AyahWTJ@9*y}3^_cNvCc!h(<|GS? z>hk7aGrmaT*ECZB?T+F*+tV)LzN)HG${bw?fy>Ij8Dvf=bM9_6a}P@T@BOtG#akUP z6@Z-1m(8f{hT+XeVigcj&I#PnhmhDe-yQ&P*R2_8jgRkoz1xxMY0fmOVgmSxQ9^p|sEdacU z+9pg-2N$5WfOGe&ic!`o?mOrYO^OU)qDS^5gc`6mYsCJK=y~<>lI!`|&E>IU-?CCI z^OX(uZHr7O+)-lJ+=7yRgZCWj>u7gAvzO!V)=

    • - { name, item_type } <-- { item_quantity } + { name, item_type } <-- { item_quantity }
    • - { name } <-- { level } + { name } <-- { level }
    @@ -636,6 +643,16 @@

    Requirements

    +
    +
      +
    • + { username, item_type } <-- { item_quantity } +
    • +
    • + { username } <-- { level } +
    • +
    +
    Requirements +
    +
      +
    • + { username } <-- { level } <-- { rank } +
    • +
    +
    Requirements data-rel-x="0" data-rel-y="-1000">
    -
    - { username } <-- { level } -
    +
      +
    • { username } <-- { level }
    • +
    @@ -777,9 +801,9 @@

    Requirements

    Player Level
    -
    - { level } <-- { rank } -
    +
      +
    • { level } <-- { rank }
    • +
    From d778135ad71364593d2478196ee9e7d6e239d9e2 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 15:14:14 +0200 Subject: [PATCH 663/689] Move normalization presentation to rdbms sources (fixes GH-202) --- .../index.html => rdbms/_presentations/normalization.html} | 4 ++-- webpack.config.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/{pres/normalization/index.html => rdbms/_presentations/normalization.html} (99%) diff --git a/src/pres/normalization/index.html b/src/rdbms/_presentations/normalization.html similarity index 99% rename from src/pres/normalization/index.html rename to src/rdbms/_presentations/normalization.html index 32758a71b..07eecf149 100644 --- a/src/pres/normalization/index.html +++ b/src/rdbms/_presentations/normalization.html @@ -440,8 +440,8 @@

    Requirements

    Player Inventory - username - item_type + username + item_type item_quantity diff --git a/webpack.config.js b/webpack.config.js index b7de0e3df..d5b85289d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,7 +21,7 @@ const config = { plugins: [ new MiniCSSExtractPlugin({filename: "css/main.min.css"}), new HTMLWebpackPlugin({ - template: path.resolve(BASE_DIR, "pres", "normalization", "index.html"), + template: path.resolve(BASE_DIR, "rdbms", "_presentations", "normalization.html"), filename: path.resolve(BUILD_DIR, "normalization", "index.html") }), ], From affd3901729192c4f58a6e192aa6599c865a2f7b Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 15:17:21 +0200 Subject: [PATCH 664/689] CI: Update test build workflow --- .github/workflows/test_build.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_build.yml b/.github/workflows/test_build.yml index fb5339f6c..e8ad3f047 100644 --- a/.github/workflows/test_build.yml +++ b/.github/workflows/test_build.yml @@ -24,14 +24,27 @@ jobs: uses: actions/checkout@v3 with: submodules: true - - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + + - name: Se tup Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + + - name: Set up NodeJS + uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Install dependencies run: | pip install -r requirements.txt + npm install + - name: Build documents run: | LANGUAGE=en make html LANGUAGE=uk make html + + - name: Build presentations + run: | + npm run build From ad0529dace633ed0a1a589fcd3b282682e8f6fc9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 15:28:07 +0200 Subject: [PATCH 665/689] CI: Update test build workflow --- .github/workflows/test_build.yml | 37 +++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test_build.yml b/.github/workflows/test_build.yml index e8ad3f047..59efeb7eb 100644 --- a/.github/workflows/test_build.yml +++ b/.github/workflows/test_build.yml @@ -12,8 +12,8 @@ on: - "requirements.txt" jobs: - check-build: - runs-on: ubuntu-latest + build-docs: + runs-on: ${{ matrix.os }} strategy: matrix: os: [ ubuntu-latest, macos-latest, windows-latest ] @@ -21,30 +21,43 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - - name: Se tup Python ${{ matrix.python-version }} + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - name: Set up NodeJS - uses: actions/setup-node@v4 - with: - node-version: 18 - - name: Install dependencies run: | pip install -r requirements.txt - npm install - name: Build documents run: | LANGUAGE=en make html LANGUAGE=uk make html + build-pres: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest, macos-latest, windows-latest ] + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Set up NodeJS + uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Install dependencies + run: npm install + - name: Build presentations - run: | - npm run build + run: npm run build From 8e5c1953825c5dd926083516a4400ea125c76584 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 15:31:47 +0200 Subject: [PATCH 666/689] CD: Add presentations to gh-pages deployment package --- .github/workflows/deploy_pages.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index fa7079687..c7c6eaca9 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -27,28 +27,37 @@ jobs: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true + - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 + - name: Install dependencies run: | pip install -r requirements.txt + - name: Build documents run: | LANGUAGE=en make html LANGUAGE=uk make html + npm run build + - name: Setup Pages uses: actions/configure-pages@v2 + - name: Upload artifact uses: actions/upload-pages-artifact@v1 with: # Upload entire repository path: "." + - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v1 From e41101be4d56cf2937b7847fd049a03d9c1524d7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 15:32:37 +0200 Subject: [PATCH 667/689] CD: Add presentations to gh-pages deployment package --- .github/workflows/deploy_pages.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index c7c6eaca9..437d44929 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -36,12 +36,16 @@ jobs: with: submodules: true - - name: Setup Python + - name: Set up Python uses: actions/setup-python@v4 + - name: Set up NodeJS + uses: actions/setup-node@v4 + - name: Install dependencies run: | pip install -r requirements.txt + npm install - name: Build documents run: | From 6e92feced950327400029d3830ac2d6e4f80d4b5 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 26 Feb 2024 19:46:08 +0200 Subject: [PATCH 668/689] Add MT for rdbms relationship doc --- .../uk/LC_MESSAGES/rdbms/relations.po | 141 +++++++++++++++--- 1 file changed, 124 insertions(+), 17 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po index b05eeb301..95b4620c8 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po @@ -4,21 +4,22 @@ # SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Project-Id-Version: Python Training Course 2024.02.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 04:00+0200\n" +"PO-Revision-Date: 2024-02-26 19:44+0200\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/relations.txt:-1 +#, fuzzy msgid "This document describes the database relationships" msgstr "Цей документ описує відносини в базах даних" @@ -31,202 +32,301 @@ msgid "" "sql, db, database, relationship, primary key, foreign key, pk, fk, one-to-" "one, one-to-many, many-to-many, 1-1, 1-n, n-m" msgstr "" +"sql, db, база даних, відношення, первинний ключ, зовнішній ключ, pk, fk, " +"один-до-одного, один-до-багатьох, багато-до-багатьох, 1-1, 1-n, n-m" #: ../../src/rdbms/relations.txt:9 msgid "Data Relationships" msgstr "Зв'язки даних" #: ../../src/rdbms/relations.txt:11 +#, fuzzy msgid "" "Before dive into relationships, there is a need explain core concepts on how " "data are referenced between different tables." msgstr "" +"Перш ніж зануритися у взаємозв'язки, необхідно пояснити основні поняття про " +"те, як дані посилаються між різними таблицями." #: ../../src/rdbms/relations.txt:15 msgid "Primary key" -msgstr "" +msgstr "Первинний ключ (Primary key)" #: ../../src/rdbms/relations.txt:17 +#, fuzzy msgid "" "A primary key constraint indicates that a column, or group of columns, can " "be used as a unique identifier for rows in the table. This requires that " "values be both unique and not null. So, the following two table definitions " "accept the same data:" msgstr "" +"Обмеження первинного ключа вказує на те, що стовпець або група стовпців може " +"використовуватися як унікальний ідентифікатор для рядків у таблиці. Це " +"вимагає, щоб значення були і унікальними, і не нульовими. Отже, наступні два " +"визначення таблиці приймають однакові дані:" #: ../../src/rdbms/relations.txt:36 +#, fuzzy msgid "" "Primary keys can span more than one column; the syntax is similar to unique " "constraint:" msgstr "" +"Первинні ключі можуть охоплювати більше одного стовпця; синтаксис подібний " +"до унікального обмеження:" #: ../../src/rdbms/relations.txt:49 +#, fuzzy msgid "" "Adding a primary key will automatically create a unique B-tree index on the " "column or group of columns listed in the primary key, and will force the " "column(s) to be marked ``NOT NULL``." msgstr "" +"Додавання первинного ключа автоматично створить унікальний індекс B-дерева " +"для стовпця або групи стовпців, перелічених у первинному ключі, і примусить " +"стовпець(и) позначити ``NOT NULL``." #: ../../src/rdbms/relations.txt:53 +#, fuzzy msgid "A table can have at most one primary key." -msgstr "" +msgstr "Таблиця може мати не більше одного первинного ключа." #: ../../src/rdbms/relations.txt:57 +#, fuzzy msgid "" "There can be any number of unique and not-null constraints, which are " "functionally almost the same thing, but only one can be identified as the " "primary key." msgstr "" +"Обмежень може бути будь-яка кількість унікальних і не нульових, які " +"функціонально майже однакові, але тільки одне з них може бути ідентифіковане " +"як первинний ключ." #: ../../src/rdbms/relations.txt:62 msgid "Foreign key (FK)" msgstr "Зовнішній ключ (FK)" #: ../../src/rdbms/relations.txt:64 +#, fuzzy msgid "" "A foreign key constraint specifies that the value in a column (or a group of " "columns) must match the values appearing in some row of another table. We " "say this maintains the *referential integrity* between two tables." msgstr "" +"Обмеження зовнішнього ключа визначає, що значення у стовпчику (або групі " +"стовпчиків) має збігатися зі значеннями, що з'являються у деякому рядку " +"іншої таблиці. Ми говоримо, що це підтримує *посилальну цілісність* між " +"двома таблицями." #: ../../src/rdbms/relations.txt:68 +#, fuzzy msgid "" "A table can have more than one foreign key constraint. Foreign key can also " "overlaps with the primary key." msgstr "" +"Таблиця може мати більше одного обмеження зовнішнього ключа. Зовнішній ключ " +"також може перекриватися з первинним ключем." #: ../../src/rdbms/relations.txt:71 +#, fuzzy msgid "To define a FK constraint:" -msgstr "" +msgstr "Визначити обмеження FK:" #: ../../src/rdbms/relations.txt:94 +#, fuzzy msgid "" "In this situation the ``book`` table is the *referencing* table, and the " "``publisher`` table is the *referenced* table. Similarly there are " "referencing and referenced columns." msgstr "" +"У цій ситуації таблиця ``книга`` є таблицею *посилання*, а таблиця " +"``видавець`` є таблицею *посилання*. Аналогічно існують стовпці, на які є " +"посилання, і стовпці, на які є посилання." #: ../../src/rdbms/relations.txt:98 +#, fuzzy msgid "" "In case the referenced column is not explicitly defined, the primary key of " "the referenced table will be used as the referenced column." msgstr "" +"Якщо стовпець, на який є посилання, не визначено явно, первинний ключ " +"таблиці, на яку є посилання, буде використано як стовпець, на який є " +"посилання." #: ../../src/rdbms/relations.txt:101 +#, fuzzy msgid "" "It is not possible to create a row with non-null foreign key, that does not " "appear in the referenced table." msgstr "" +"Неможливо створити рядок з ненульовим зовнішнім ключем, який не з'являється " +"в таблиці, на яку посилається." #: ../../src/rdbms/relations.txt:105 +#, fuzzy msgid "Self-referential foreign key" -msgstr "" +msgstr "Самореферентний зовнішній ключ" #: ../../src/rdbms/relations.txt:107 +#, fuzzy msgid "" "Sometimes it is useful to the referenced table to be the same table as " "referencing. This makes possible to create a tree-structures with nodes, " "there a top-level node would have ``NULL`` ``parent_id``." msgstr "" +"Іноді корисно, щоб таблиця, на яку посилаються, збігалася з таблицею, на яку " +"посилаються. Це дозволяє створювати деревоподібні структури з вузлами, де " +"вузол верхнього рівня матиме ``NULL`` ``parent_id``." #: ../../src/rdbms/relations.txt:120 +#, fuzzy msgid "Deleting referenced rows" -msgstr "" +msgstr "Видалення рядків з посиланнями" #: ../../src/rdbms/relations.txt:122 +#, fuzzy msgid "" "So far we know that the foreign keys disallows creation of rows that do not " "relate to any row inside the referenced table. But what if a referenced row " "needs to be removed? Intuitively, there are few options:" msgstr "" +"Досі ми знали, що зовнішні ключі не дозволяють створювати рядки, які не " +"пов'язані з жодним рядком всередині таблиці, на яку посилаються. Але що " +"робити, якщо рядок, на який є посилання, потрібно видалити? Інтуїтивно " +"зрозуміло, що варіантів небагато:" #: ../../src/rdbms/relations.txt:126 +#, fuzzy msgid "disallow deletion" -msgstr "" +msgstr "заборонити видалення" #: ../../src/rdbms/relations.txt:127 +#, fuzzy msgid "delete referencing rows as well" -msgstr "" +msgstr "видаліть також рядки посилань" #: ../../src/rdbms/relations.txt:128 +#, fuzzy msgid "something else..." -msgstr "" +msgstr "щось інше..." #: ../../src/rdbms/relations.txt:130 +#, fuzzy msgid "" "Restricting and cascading deletes are the two most common options. " "``RESTRICT`` prevents deletion of a referenced row. ``CASCADE`` will also " "delete all referencing rows as well as the referenced one." msgstr "" +"Обмеження та каскадне видалення є двома найпоширенішими варіантами. " +"``ОБМЕЖЕННЯ`` запобігає видаленню рядка, на який є посилання. ``КАСКАДНЕ`` " +"також видаляє всі рядки, на які є посилання, а також рядок, на який є " +"посилання." #: ../../src/rdbms/relations.txt:148 +#, fuzzy msgid "There are others options." -msgstr "" +msgstr "Є й інші варіанти." #: ../../src/rdbms/relations.txt:150 +#, fuzzy msgid "" "``NO ACTION`` means that if any referencing rows still exist when the " "constraint is checked, an error is raised; this is the default behavior." msgstr "" +"``NO ACTION`` означає, що якщо будь-які рядки посилань все ще існують, коли " +"перевіряється обмеження, буде видано помилку; це поведінка за замовчуванням." #: ../../src/rdbms/relations.txt:153 +#, fuzzy msgid "" "``SET NULL`` will replace all referencing rows foreign key values with " "``NULL`` values." msgstr "" +"``SET NULL`` замінить значення зовнішнього ключа у всіх рядках, що " +"посилаються, на значення ``NULL``." #: ../../src/rdbms/relations.txt:156 +#, fuzzy msgid "" "``SET DEFAULT`` will replace all referencing rows foreign key values with " "default values." msgstr "" +"``SET DEFAULT`` замінить значення зовнішніх ключів усіх посилальних рядків " +"значеннями за замовчуванням." #: ../../src/rdbms/relations.txt:160 +#, fuzzy msgid "Relationships" -msgstr "" +msgstr "Відносини" #: ../../src/rdbms/relations.txt:162 +#, fuzzy msgid "" "From the point of view of the RDBMS there are no other relationships between " "two tables except the **foreign key**. But the way the foreign keys are " "designed brings us three concepts of the data relations." msgstr "" +"З точки зору СУБД, між двома таблицями не існує інших зв'язків, окрім " +"**зовнішнього ключа**. Але те, як спроектовані зовнішні ключі, дає нам три " +"концепції зв'язків між даними." #: ../../src/rdbms/relations.txt:168 +#, fuzzy msgid "One-to-many" msgstr "" +"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " +"однією статтею." #: ../../src/rdbms/relations.txt:169 +#, fuzzy msgid "" "In a relational database, two tables have a one-to-many relationship if each " "row in one table references multiple rows of the other table. For example " "``publisher`` can publish many books, but a single ``book`` is published by " "some specific publisher." msgstr "" +"У реляційній базі даних дві таблиці мають зв'язок \"один до багатьох\", якщо " +"кожен рядок однієї таблиці посилається на декілька рядків іншої таблиці. " +"Наприклад, ``видавець`` може видавати багато книжок, але кожна окрема " +"``книжка`` видається певним видавництвом." #: ../../src/rdbms/relations.txt:180 +#, fuzzy msgid "One-to-one" msgstr "" +"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " +"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " +"відносини \"один до одного\"." #: ../../src/rdbms/relations.txt:183 +#, fuzzy msgid "" "You can think of one-to-one relationship as a limited version of *one-to-" "many*." msgstr "" +"Ви можете думати про відносини один-на-один як про обмежену версію \"один-до-" +"багатьох\"." #: ../../src/rdbms/relations.txt:186 +#, fuzzy msgid "" "In a relational database, two tables have a one-to-one relationship if each " "row in one table links to exactly one row in the other table, and vice " "versa. For example a table of ``members`` and a table of ``contacts`` might " "have a one-to-one relationship." msgstr "" +"У реляційній базі даних дві таблиці мають зв'язок \"один до одного\", якщо " +"кожен рядок в одній таблиці посилається на точно такий самий рядок в іншій " +"таблиці, і навпаки. Наприклад, таблиця \"учасники\" і таблиця \"контакти\" " +"можуть мати зв'язок \"один до одного\"." #: ../../src/rdbms/relations.txt:197 +#, fuzzy msgid "Many-to-many" -msgstr "" +msgstr "Багато до багатьох" #: ../../src/rdbms/relations.txt:198 +#, fuzzy msgid "" "In relational database, two table have many-to-many relationship if each row " "in one table can reference multiple rows in another table, and vice versa. " @@ -235,6 +335,13 @@ msgid "" "a many-to-many relationship requires creation of an intermediate table, that " "applies one-to-many relationship with both original tables." msgstr "" +"У реляційній базі даних дві таблиці мають зв'язок \"багато до багатьох\", " +"якщо кожен рядок в одній таблиці може посилатися на декілька рядків в іншій " +"таблиці, і навпаки. Наприклад, таблиця ``книга`` може містити записи про " +"книги, написані багатьма ``авторами``. З іншого боку, автор може написати " +"декілька книг. Реалізація зв'язку \"багато-до-багатьох\" вимагає створення " +"проміжної таблиці, яка застосовує зв'язок \"один-до-багатьох\" до обох " +"вихідних таблиць." #~ msgid "sql, db, database, relationship" #~ msgstr "sql, db, database, relationship" From c8f5654f7a1660f5cd5aaf6cea3ff0043c74e38a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 27 Feb 2024 12:58:48 +0200 Subject: [PATCH 669/689] Rename presentations directory (rdbms; patch GH-202) --- src/rdbms/{_presentations => presentations}/normalization.html | 0 webpack.config.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/rdbms/{_presentations => presentations}/normalization.html (100%) diff --git a/src/rdbms/_presentations/normalization.html b/src/rdbms/presentations/normalization.html similarity index 100% rename from src/rdbms/_presentations/normalization.html rename to src/rdbms/presentations/normalization.html diff --git a/webpack.config.js b/webpack.config.js index d5b85289d..5bc3f1f74 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,7 +21,7 @@ const config = { plugins: [ new MiniCSSExtractPlugin({filename: "css/main.min.css"}), new HTMLWebpackPlugin({ - template: path.resolve(BASE_DIR, "rdbms", "_presentations", "normalization.html"), + template: path.resolve(BASE_DIR, "rdbms", "presentations", "normalization.html"), filename: path.resolve(BUILD_DIR, "normalization", "index.html") }), ], From 120434a96b494a8e88a4c9c1eb749d940b5d444a Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Thu, 29 Feb 2024 13:40:18 +0200 Subject: [PATCH 670/689] Disable automated deployment to GitHub pages (fixes GH-217) --- .github/workflows/deploy_pages.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy_pages.yml b/.github/workflows/deploy_pages.yml index 437d44929..73eee7ee3 100644 --- a/.github/workflows/deploy_pages.yml +++ b/.github/workflows/deploy_pages.yml @@ -3,9 +3,9 @@ name: Deploy static content to Pages on: # Runs on pushes targeting the default branch - push: - branches: - - devel +# push: +# branches: +# - devel # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From 094a283d3b9cdea30ad5cc718293a431c0b2c4b6 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 16:19:42 +0200 Subject: [PATCH 671/689] [Presentation] Database normalization (w/o styling) (#223) --- assets/icons/moon-svgrepo-com.svg | 45 + assets/icons/sun-svgrepo-com.svg | 101 ++ src/_static/js/theme.js | 33 + src/_static/scss/presentation-common.scss | 231 --- .../scss/presentation-normalization.scss | 230 --- src/conf.js | 17 +- src/rdbms/presentations/normalization.html | 1475 ++++++++--------- .../presentations/normalization/_index.hbs | 118 ++ .../normalization/anomalies-delete.hbs | 15 + .../normalization/anomalies-insert.hbs | 15 + .../normalization/anomalies-update.hbs | 18 + .../normalization/definition.hbs | 8 + .../normalization/example-1nf.hbs | 23 + .../normalization/example-2nf.hbs | 12 + .../normalization/example-3nf.hbs | 13 + .../presentations/normalization/example.hbs | 3 + .../normalization/problem-1nf.hbs | 2 + .../normalization/problem-2nf.hbs | 7 + .../normalization/problem-3nf.hbs | 4 + .../presentations/normalization/req-1nf.hbs | 22 + .../presentations/normalization/req-2nf.hbs | 12 + .../presentations/normalization/req-3nf.hbs | 12 + .../normalization/tbl-1nf-itm.hbs | 49 + .../normalization/tbl-1nf-mxd.hbs | 32 + .../normalization/tbl-1nf-rpg.hbs | 35 + .../normalization/tbl-2nf-itm.hbs | 37 + .../normalization/tbl-2nf-lvl.hbs | 27 + .../normalization/tbl-2nf-nka.hbs | 50 + .../normalization/tbl-3nf-lvl.hbs | 23 + .../normalization/tbl-3nf-rtg.hbs | 47 + .../normalization/tbl-3nf-tdp.hbs | 28 + .../normalization/tbl-anomalies-delete.hbs | 31 + .../normalization/tbl-anomalies-insert.hbs | 31 + .../normalization/tbl-anomalies-update.hbs | 43 + .../normalization/tbl-example.hbs | 25 + webpack.config.js | 37 +- 36 files changed, 1627 insertions(+), 1284 deletions(-) create mode 100644 assets/icons/moon-svgrepo-com.svg create mode 100644 assets/icons/sun-svgrepo-com.svg create mode 100644 src/_static/js/theme.js delete mode 100644 src/_static/scss/presentation-common.scss delete mode 100644 src/_static/scss/presentation-normalization.scss create mode 100644 src/rdbms/presentations/normalization/_index.hbs create mode 100644 src/rdbms/presentations/normalization/anomalies-delete.hbs create mode 100644 src/rdbms/presentations/normalization/anomalies-insert.hbs create mode 100644 src/rdbms/presentations/normalization/anomalies-update.hbs create mode 100644 src/rdbms/presentations/normalization/definition.hbs create mode 100644 src/rdbms/presentations/normalization/example-1nf.hbs create mode 100644 src/rdbms/presentations/normalization/example-2nf.hbs create mode 100644 src/rdbms/presentations/normalization/example-3nf.hbs create mode 100644 src/rdbms/presentations/normalization/example.hbs create mode 100644 src/rdbms/presentations/normalization/problem-1nf.hbs create mode 100644 src/rdbms/presentations/normalization/problem-2nf.hbs create mode 100644 src/rdbms/presentations/normalization/problem-3nf.hbs create mode 100644 src/rdbms/presentations/normalization/req-1nf.hbs create mode 100644 src/rdbms/presentations/normalization/req-2nf.hbs create mode 100644 src/rdbms/presentations/normalization/req-3nf.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-1nf-itm.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-1nf-mxd.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-1nf-rpg.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-2nf-itm.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-2nf-lvl.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-2nf-nka.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-3nf-lvl.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-3nf-rtg.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-3nf-tdp.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-anomalies-delete.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-anomalies-insert.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-anomalies-update.hbs create mode 100644 src/rdbms/presentations/normalization/tbl-example.hbs diff --git a/assets/icons/moon-svgrepo-com.svg b/assets/icons/moon-svgrepo-com.svg new file mode 100644 index 000000000..af27a3ec1 --- /dev/null +++ b/assets/icons/moon-svgrepo-com.svg @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/assets/icons/sun-svgrepo-com.svg b/assets/icons/sun-svgrepo-com.svg new file mode 100644 index 000000000..a744c8f8e --- /dev/null +++ b/assets/icons/sun-svgrepo-com.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + diff --git a/src/_static/js/theme.js b/src/_static/js/theme.js new file mode 100644 index 000000000..0f6c68f0f --- /dev/null +++ b/src/_static/js/theme.js @@ -0,0 +1,33 @@ +// theme variables +const themeAttribute = "data-theme" +const theme = { + light: "light", + dark: "dark", +} +const userTheme = localStorage.getItem(themeAttribute) +const isSystemThemeDark = window.matchMedia("(prefers-color-scheme: dark)").matches + + +// initial theme check +const checkTheme = () => { + if (userTheme === theme.dark || (!userTheme && isSystemThemeDark)) { + document.documentElement.setAttribute(themeAttribute, theme.dark) + } else document.documentElement.setAttribute(themeAttribute, theme.light) +} + + +// manual theme select +const swapTheme = () => { + const currentTheme = document.documentElement.getAttribute(themeAttribute) + const themeValue = currentTheme === theme.light ? theme.dark : theme.light + localStorage.setItem(themeAttribute, themeValue) + document.documentElement.setAttribute(themeAttribute, themeValue) +} + + +const swapThemeBtn = document.getElementById("swap-theme-btn"); +if (swapThemeBtn) swapThemeBtn.addEventListener("click", swapTheme) + +document.addEventListener("DOMContentLoaded", () => { + checkTheme() +}) diff --git a/src/_static/scss/presentation-common.scss b/src/_static/scss/presentation-common.scss deleted file mode 100644 index d1fd7bb9f..000000000 --- a/src/_static/scss/presentation-common.scss +++ /dev/null @@ -1,231 +0,0 @@ -/** - Common presentation stylesheet - - */ - -/** - Fallback message is only visible when there is `impress-not-supported` class - on body. This class means, that browser doesn't support features required by - impress.js framework. - - If the script detects that browser supports all required features, this class - will be removed. - */ -.fallback-message { - font-family: sans-serif; - line-height: 1.3; - - width: 780px; - padding: 10px 10px 0; - margin: 20px auto; - - border: 1px solid #E4C652; - border-radius: 10px; - background: #EEDC94; - - p { - margin-bottom: 10px; - } -} - -.impress-supported { - .fallback-message { - display: none; - } -} - -// hide all presentation steps if impress.js is not supported -.impress-not-supported { - .step { - display: none; - } -} - -/* transitions */ -$transition: 2000ms; -$transition-delay: 1000ms; - -/* colors */ -// todo: adjust colors -$background: #212121; -$on-background: white; -$surface: #212121; -$on-surface: white; -$primary: #212121; -$on-primary: white; -$secondary: #212121; -$on-secondary: white; - -$invalid-data: red; -$lost-data: orange; - -body { - background: $background; -} - -/* fonts and icons */ -$base-font-size: 3.75rem; -$title: $base-font-size * 2.5; -$subtitle: $base-font-size *2; -$section: $base-font-size * 1.5; - -$checkMarkIcon: url("../../../assets/icons/check-mark-svgrepo-com.svg"); -$crossMarkIcon: url("../../../assets/icons/cross-mark-svgrepo-com.svg"); - -.i { - display: inline-block; - height: 1em; - width: 1em; - margin: auto 0.5em; -} - -.i-pass { - @extend .i; - background-image: $checkMarkIcon; - background-size: contain; -} - -.i-fail { - @extend .i; - background-image: $crossMarkIcon; - background-size: contain; -} - -body { - font-size: $base-font-size; - - h1 { - font-size: $title - } - - h2 { - font-size: $subtitle - } - - h3 { - font-size: $section - } - - small { - font-size: $base-font-size * 0.5; - } -} - -/* content align */ -.text-start { - text-align: start -} - -.text-center { - text-align: center -} - -.text-end { - text-align: end -} - -h1, h2, h3, caption { - @extend .text-center; - margin: 0 auto; -} - -/* impress presentation */ -$step-width: 1800px; - -#impress { - pointer-events: none; - - .step { - display: block; - position: relative; - width: $step-width; - padding: 60px; - - background-color: $surface; - color: $on-surface; - } - - .title, - #title { - h1 { - font-size: $title * 2; - } - - h2 { - font-size: $subtitle * 2; - } - } - - .overview, - #overview { - position: fixed; - background: none; - display: none; - } - - .db-table { - width: 75%; - - margin-bottom: 20px; - - font-family: Monospaced, monospace; - font-size: $base-font-size * 0.75; - - .primary-key { - background-color: rgba(125, 125, 125, 0.1); - } - - th, td { - padding: 1svh 3svw; - } - - th { - @extend .text-center; - - font-weight: bold; - font-size: $base-font-size * 0.8; - - background-color: $secondary; - color: $on-secondary; - } - } - - .description { - padding: 0 20px; - } -} - -/* 4th dimension */ -#impress { - .future { - .fade-in { - opacity: 0.0; - } - - .fly-in { - opacity: 0.0; - transform: translateY(2200px); - } - } - - .present { - .fade-in { - opacity: 1.0; - transition: $transition; - } - - .fly-in { - opacity: 1.0; - transform: translateY(0px); - transition: $transition; - } - } - - .past { - .fade-out { - opacity: 0.0; - transition: $transition; - } - } - -} \ No newline at end of file diff --git a/src/_static/scss/presentation-normalization.scss b/src/_static/scss/presentation-normalization.scss deleted file mode 100644 index 350668272..000000000 --- a/src/_static/scss/presentation-normalization.scss +++ /dev/null @@ -1,230 +0,0 @@ -@import "./presentation-common"; - -#normalization[aria-roledescription=presentation] { - #definition { - width: $step-width * 0.66; - padding: 0 0 120px 120px; - } - - .requirements { - h3 { - @extend .text-start; - text-decoration: underline; - } - } - - #update-anomalies { - .invalid-data { - position: relative; - - .updated-data { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - display: flex; - align-items: center; - justify-content: center; - } - } - } - - #update-anomalies.future { - span.fade-out { - opacity: 1.0; - } - - span.fade-in { - opacity: 0.0; - } - } - - #insertion-anomalies.future { - .invalid-data { - opacity: 0.0; - } - } - - #insertion-anomalies.present { - .invalid-data { - border: 1px solid $invalid-data; - opacity: 1.0; - transition: $transition; - transition-delay: $transition-delay + $transition; - } - - .lost-data { - color: $lost-data; - transition: $transition; - transition-delay: $transition-delay + $transition; - } - } - - #insertion-anomalies.past { - .invalid-data { - border: 1px solid $invalid-data; - } - - .lost-data { - color: $lost-data; - } - } - - #update-anomalies.present { - span.fade-out { - opacity: 0.0; - transition: $transition; - transition-delay: $transition-delay; - } - - span.fade-in { - opacity: 1.0; - transition: $transition; - transition-delay: $transition + $transition-delay; - } - - .invalid-data { - color: $invalid-data; - } - } - - #update-anomalies.past { - .invalid-data { - color: $invalid-data; - } - } - - #deletion-anomalies.future { - td.fade-out { - opacity: 1.0; - } - } - - #deletion-anomalies.present { - td.fade-out { - color: red; - opacity: 0.0; - transition: $transition; - transition-delay: $transition-delay; - } - - td.lost-data { - color: $lost-data; - transition: $transition; - transition-delay: $transition + $transition-delay; - - &:nth-child(odd) { - transform: rotate(-7deg); - } - - &:nth-child(even) { - transform: rotate(7deg); - } - } - } - - #deletion-anomalies.past { - td.lost-data { - color: $lost-data; - - &:nth-child(odd) { - transform: rotate(-7deg); - } - - &:nth-child(even) { - transform: rotate(7deg); - } - } - } - - #mixed-data-types--1nf, - #repeating-groups--1nf, - #table--1nf, - #non-key-attrs--2nf, - #table--2nf, - #transitive-deps--3nf, - #table--3nf { - ul { - list-style: none; - - li { - font-size: $base-font-size * 0.65; - } - } - } - - #mixed-data-types--1nf, - #repeating-groups--1nf { - section { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 20px; - } - - table { - margin-right: auto; - margin-left: auto; - width: 50%; - } - - } - - #mixed-data-types--1nf.future, - #repeating-groups--1nf.future { - .fly-in:first-of-type { - transform: translateX(-2200px); - - } - - .fly-in:last-of-type { - transform: translateX(2200px); - } - - .fly-in { - opacity: 0.0; - transition-delay: $transition-delay; - } - } - - #table--3nf { - display: grid; - grid-template-columns: repeat(2, 1fr); - grid-column-gap: 20px; - align-items: start; - - table { - margin: 30px auto; - } - } - - #table--3nf.future { - section:first-of-type { - .fly-in { - transform: translateY(-2200px); - } - } - - section:last-of-type { - .fly-in { - transform: translateY(2200px); - } - } - - section { - .fly-in { - opacity: 0.0; - } - } - } - - #table--3nf.present { - section { - .fly-in { - transform: translateY(0px); - opacity: 1.0; - transition: $transition; - transition-delay: 1000ms; - } - } - } -} diff --git a/src/conf.js b/src/conf.js index 085f00a7c..71b3fbb11 100644 --- a/src/conf.js +++ b/src/conf.js @@ -1,14 +1,21 @@ -import "../assets/favicon.ico" +/** + * Webpack entry point + */ -import "./_static/scss/presentation-common.scss" -import "./_static/scss/presentation-normalization.scss" +// add JS modules +// todo: GH-211 +// add stylesheets to webpack bundle +// todo: GH-211 + +// add assets/resources to webpack bundle import "../assets/icons/check-mark-svgrepo-com.svg" import "../assets/icons/cross-mark-svgrepo-com.svg" +import "../assets/icons/moon-svgrepo-com.svg" +import "../assets/icons/sun-svgrepo-com.svg" -// import impress.js presentation framework +// import and initialize impress.js presentation framework import "../assets/impress.js/js/impress" import "../assets/impress.js/css/impress-common.css" -// initialize impress.js presentation framework impress().init() diff --git a/src/rdbms/presentations/normalization.html b/src/rdbms/presentations/normalization.html index 07eecf149..f854adf09 100644 --- a/src/rdbms/presentations/normalization.html +++ b/src/rdbms/presentations/normalization.html @@ -1,822 +1,681 @@ - - - - - - - - Database Normalization - - - - -
    -

    - Your browser doesn't support the features required by impress.js, so you are presented with a simplified - version of this presentation. -

    -

    - For the best experience please use the latest Chrome, Safari or Firefox browser. -

    -
    -
    -
    + + + + + Database Normalization + + + - data-width="1920" - data-height="1080" - data-max-scale="3" - data-min-scale="0" - data-perspective="1000"> + - -
    -

    Database normalization

    -
    - -
    -

    - - Normalization is a process of organizing data in a database so that it is free from redundancy and dependency. - It helps to eliminate data inconsistencies and anomalies, thereby improving data integrity. Normalization is a - set of rules or guidelines to design a database schema in such a way that it avoids data duplication, data - redundancy, and data inconsistency. - +

    +

    + Your browser doesn't support the features required by impress.js, so you are presented with + a simplified + version of this presentation.

    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    -
    -
    - - -
    -

    Insertion anomalies

    -

    - - There are circumstances in which certain facts cannot be recorded at all. - +

    + For the best experience please use the latest Chrome, Safari or Firefox browser.

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    acen19991Beginner
    -
    -
    - When a new player acen1999 join the game, they have nothing in their inventory. - Therefore, the details of any player who have at least one item can be recorded, but a newly game member - who has no items cannot be recorded, except by setting the inventory to null. -
    -
    -

    Update anomalies

    -

    - - The same information can be expressed on multiple rows; therefore updates to - the relation may result in logical inconsistencies. - -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    acen1999 - 1 - 1 - Beginner - 1 wizard hat - 1 wizard hat -
    wheed1997 - Almost 7 - Greater than 7 - - Intermediate - Intermediate - 18 copper coins
    acen1999 - 1 - 2 - Beginner - 1 wizard hat - 1 wizard hat, 1 robe -
    -
    -
    - The same information can be expressed on multiple rows, therefore updates to the relation may result in - logical inconsistencies. If the wheed1997 increase their level, when the - rank should be updated as well. But if the update is only partial successful, then the - relation is left in an inconsistent state. Specifically. the relation provides conflicting information - on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999". -
    -
    +
    +
    -
    -

    Deletion anomalies

    -

    - - Under certain circumstances, the deletion of data representing certain facts - necessitates the deletion of data representing completely different facts. - -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    usernamelevelrankinventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    acen19991Beginner1 wizard hat, 1 robe
    -
    -
    - If a player looses their items completely, the record must be deleted, unless the inventory - field is set to null. This leads to the loosing all other information about a player. -
    -
    +
    +

    Database Normalization

    +
    +
    +

    + + Normalization is a process of organizing data in a database so that it is free from redundancy and + dependency. + It helps to eliminate data inconsistencies and anomalies, thereby improving data integrity.
    + Normalization is a set of rules or guidelines to design a database schema in such a way that it avoids + data + duplication, data redundancy, and data inconsistency. +
    +

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    +
    +
    +
    +

    Insertion anomalies

    +

    + + There are circumstances in which certain facts cannot be recorded at all. + +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    acen19971Beginner
    +
    +
    + When a new player acen1999 join the game, they have nothing in their inventory. + Therefore, the details of any player who have at least one item can be recorded, but a newly game member + who has no items cannot be recorded, except by setting the inventory to null. +
    +
    +
    +

    Update anomalies

    +

    + + The same information can be expressed on multiple rows;
    + therefore updates to the relation may result in logical inconsistencies. +
    +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    acen1997 + 1 + 1 + Beginner1 robe, 1 wizard hat
    wheed1997Almost 7Intermediate18 copper coins
    acen1997 + 2 + 1 + Beginner1 robe, 1 wizard hat
    +
    +
    + The same information can be expressed on multiple rows, therefore updates to the relation may result in + logical inconsistencies. If the wheed1997 increase their level, when the + rank should be updated as well. But if the update is only partial successful, then the + relation is left in an inconsistent state. Specifically. the relation provides conflicting information + on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999". +
    +
    +
    +

    Deletion anomalies

    +

    + + Under certain circumstances, the deletion of data representing certain facts + necessitates the deletion of data representing completely different facts. + +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    acen19971Beginner1 robe, 1 wizard hat
    +
    +
    + If a player looses their items completely, the record must be deleted, unless the inventory + field is set to null. This leads to the loosing all other information about a player. +
    +
    +
    +

    + First
    + normal form +

    +
    +

    Requirements

    +
      +
    • + Row order should not be used to convey information. +
    • +
    • + Data types should not be mixed within the same column.
      + (and the RDBMS won't let you do it anyway) +
    • +
    • + Tables should have their primary keys. +
    • +
    • + Repeating groups should be eliminated. +
    • +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery87 + 7.75 + 7 + Advanced1 sword, 4 rings
    wheed1997 + + 6 + Intermediate18 copper coins
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877Advanced + 1 sword, 4 rings + 1 sword +
    wheed19976Intermediate18 copper coins
    prombery877Advanced4 rings
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    namelevelratingitem_typeitem_quantity
    prombery877Advancedsword1
    prombery877Advancedring4
    wheed19976Intermediatecopper coin18
    acen19971Beginnerrobe1
    acen19971Beginnerwizard hat1
    +
    +
    +
      +
    • + icon-pass + Row order should not be used to convey information. +
    • +
    • + icon-pass + Data types should not be mixed within the same column. +
    • +
    • + icon-pass + Tables should have their primary keys. +
    • +
    • + icon-pass + Repeating groups should be eliminated. +
    • +
    +
    +
    +
    +

    + Second
    + normal form +

    +
    +

    Requirements

    +
      +
    • + Each non-key attribute must depend on the entire primary key. +
    • +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    namelevelratingitem_typeitem_quantity
    prombery877Advancedsword1
    prombery877Advancedring4
    wheed19976Intermediatecopper coin18
    acen19971Beginnerrobe1
    acen19971Beginnerwizard hat1
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    nameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997copper coin18
    acen1997robe1
    acen1997wizard hat1
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    namelevelrating
    prombery877Advanced
    wheed19976Intermediate
    acen19971Beginner
    +
    +
    +
      +
    • + icon-pass + Each non-key attribute must depend on the entire primary key. +
    • +
    +
    +
    +
    +

    + Third
    + normal form +

    +
    +

    Requirements

    +
      +
    • + Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key. +
    • +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    namelevelrating
    prombery877Advanced
    wheed19976Intermediate
    acen19971Beginner
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    namelevel
    prombery877
    wheed19976
    acen19971
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Level Ranking
    levelrating
    1Beginner
    2Beginner
    3Beginner
    4Intermediate
    5Intermediate
    6Intermediate
    7Advanced
    8Advanced
    9Advanced
    +
    +
    +
      +
    • + icon-pass + Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key. +
    • +
    +
    - -
    -

    First normal form

    -
    -

    Requirements

    -
      -
    • - Row order should not be used to convey information. -
    • -
    • - Data types should not be mixed within the same column.
      - (and the RDBMS won't let you do it anyway) -
    • -
    • - Tables should have their primary keys. -
    • -
    • - Repeating groups should be eliminated. -
    • -
    -
    -
    +
    +
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    Player Level
    usernamelevel
    prombery877.75
    wheed1997Almost 7
    acen19991
    - - - - - - - - - - - - - - - - - - - - - - -
    Player Level
    usernamelevel
    prombery877
    wheed19976
    acen19991
    -
    -
    -
      -
    • No mixed data types
    • -
    -
      -
    • No mixed data types
    • -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    Player Inventory
    usernameinventory
    prombery871 sword, 4 rings
    wheed199718 copper coins
    acen19991 wizard hat, 1 robe
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Player Inventory
    usernameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997copper coin18
    acen1999wizard hat1
    acen1999robe1
    -
    -
    -
      -
    • No mixed data types
    • -
    • No repeating groups
    • -
    -
      -
    • No mixed data types
    • -
    • No repeating groups
    • -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Player Inventory
    usernameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997copper coin18
    acen1999wizard hat1
    acen1999robe1
    -
    -
    -
      -
    • Primary key applied
    • -
    • No mixed data types
    • -
    • No repeating groups
    • -
    -
    -
    - -
    -
    - - -
    -

    Second normal form

    -
    -

    Requirements

    -
      -
    • - Each non-key attribute must depend on the entire primary key. -
    • -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    usernameitem_typeitem_quantitylevelrank
    prombery87sword17Advanced
    prombery87ring47Advanced
    wheed1997copper coin186Intermediate
    acen1999wizard hat11Beginner
    acen1999robe11Beginner
    -
    -
    -
      -
    • - { name, item_type } <-- { item_quantity } -
    • -
    • - { name } <-- { level } -
    • -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Player Inventory
    usernameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997copper coin1
    acen1999wizard hat1
    acen1999robe1
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Player Level
    usernamelevelrank
    prombery877Advanced
    wheed19976Intermediate
    acen19991Beginner
    -
    -
    -
      -
    • - { username, item_type } <-- { item_quantity } -
    • -
    • - { username } <-- { level } -
    • -
    -
    -
    - -
    -
    - - -
    -

    Third normal form

    -
    -

    Requirements

    -
      -
    • - Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key. -
    • -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Player Level
    usernamelevelrank
    prombery877Advanced
    wheed19976Intermediate
    acen19991Beginner
    -
    -
    -
      -
    • - { username } <-- { level } <-- { rank } -
    • -
    -
    -
    - -
    -
    -
      -
    • { username } <-- { level }
    • -
    - - - - - - - - - - - - - - - - - - - - - - -
    Player Level
    usernamelevel
    prombery877
    wheed19976
    acen19991
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Level Ranking
    levelrank
    1Beginner
    2Beginner
    3Beginner
    4Intermediate
    5Intermediate
    6Intermediate
    7Advanced
    8Advanced
    9Advanced
    -
      -
    • { level } <-- { rank }
    • -
    -
    -
    +
    +
    -
    -
    - -
    + + + -
    -
    - - + \ No newline at end of file diff --git a/src/rdbms/presentations/normalization/_index.hbs b/src/rdbms/presentations/normalization/_index.hbs new file mode 100644 index 000000000..6221251fd --- /dev/null +++ b/src/rdbms/presentations/normalization/_index.hbs @@ -0,0 +1,118 @@ +{{! + ********************************************************************* + Database Normalization - Presentation + ********************************************************************* + +}} + + + + + + + + + + Database Normalization + + + + +{{! + Presentation theme selector +}} +
    + +
    + +{{! + impress.js fallback message + + The fallback message is visible only in case there is `impress-not-supported` class on body. + If all required features are supported by the browser, this class is removed by impress.js script. + +}} +
    +

    + Your browser doesn't support the features required by impress.js, so you are presented with a simplified + version of this presentation. +

    +

    + For the best experience please use the latest Chrome, Safari or Firefox browser. +

    +
    + +
    +
    + + {{! introduction }} +
    +

    Database Normalization

    +
    +
    {{>definition}}
    +
    {{>example}}
    + {{! anomalies }} +
    {{>anomalies-insert}}
    +
    {{>anomalies-update}}
    +
    {{>anomalies-delete}}
    + {{! 1NF -- First Normal Form }} +
    {{>req-1nf}}
    +
    {{>problem-1nf}}
    +
    {{>example-1nf}}
    + {{! 2NF -- Second Normal Form }} +
    {{>req-2nf}}
    +
    {{>problem-2nf}}
    +
    {{>example-2nf}}
    + {{! 3NF -- Third Normal Form }} +
    {{>req-3nf}}
    +
    {{>problem-3nf}}
    +
    {{>example-3nf}}
    + {{! overview step }} +
    + +
    +
    + + + + diff --git a/src/rdbms/presentations/normalization/anomalies-delete.hbs b/src/rdbms/presentations/normalization/anomalies-delete.hbs new file mode 100644 index 000000000..2d889c5dc --- /dev/null +++ b/src/rdbms/presentations/normalization/anomalies-delete.hbs @@ -0,0 +1,15 @@ +

    Deletion anomalies

    +

    + + Under certain circumstances, the deletion of data representing certain facts + necessitates the deletion of data representing completely different facts. + +

    +
    +
    + {{>tbl-anomalies-delete}} +
    +
    + If a player looses their items completely, the record must be deleted, unless the inventory + field is set to null. This leads to the loosing all other information about a player. +
    diff --git a/src/rdbms/presentations/normalization/anomalies-insert.hbs b/src/rdbms/presentations/normalization/anomalies-insert.hbs new file mode 100644 index 000000000..23afd5a09 --- /dev/null +++ b/src/rdbms/presentations/normalization/anomalies-insert.hbs @@ -0,0 +1,15 @@ +

    Insertion anomalies

    +

    + + There are circumstances in which certain facts cannot be recorded at all. + +

    +
    +
    + {{>tbl-anomalies-insert}} +
    +
    + When a new player acen1999 join the game, they have nothing in their inventory. + Therefore, the details of any player who have at least one item can be recorded, but a newly game member + who has no items cannot be recorded, except by setting the inventory to null. +
    diff --git a/src/rdbms/presentations/normalization/anomalies-update.hbs b/src/rdbms/presentations/normalization/anomalies-update.hbs new file mode 100644 index 000000000..4fdbe1549 --- /dev/null +++ b/src/rdbms/presentations/normalization/anomalies-update.hbs @@ -0,0 +1,18 @@ +

    Update anomalies

    +

    + + The same information can be expressed on multiple rows;
    + therefore updates to the relation may result in logical inconsistencies. +
    +

    +
    +
    + {{>tbl-anomalies-update}} +
    +
    + The same information can be expressed on multiple rows, therefore updates to the relation may result in + logical inconsistencies. If the wheed1997 increase their level, when the + rank should be updated as well. But if the update is only partial successful, then the + relation is left in an inconsistent state. Specifically. the relation provides conflicting information + on "level -- rank" for "wheed1997" player, and on "inventory" and "level" for "acen1999". +
    diff --git a/src/rdbms/presentations/normalization/definition.hbs b/src/rdbms/presentations/normalization/definition.hbs new file mode 100644 index 000000000..1eb38b476 --- /dev/null +++ b/src/rdbms/presentations/normalization/definition.hbs @@ -0,0 +1,8 @@ +

    + + Normalization is a process of organizing data in a database so that it is free from redundancy and dependency. + It helps to eliminate data inconsistencies and anomalies, thereby improving data integrity.
    + Normalization is a set of rules or guidelines to design a database schema in such a way that it avoids data + duplication, data redundancy, and data inconsistency. +
    +

    diff --git a/src/rdbms/presentations/normalization/example-1nf.hbs b/src/rdbms/presentations/normalization/example-1nf.hbs new file mode 100644 index 000000000..4847ffb22 --- /dev/null +++ b/src/rdbms/presentations/normalization/example-1nf.hbs @@ -0,0 +1,23 @@ +
    + {{>tbl-1nf-itm}} +
    +
    +
      +
    • + icon-pass + Row order should not be used to convey information. +
    • +
    • + icon-pass + Data types should not be mixed within the same column. +
    • +
    • + icon-pass + Tables should have their primary keys. +
    • +
    • + icon-pass + Repeating groups should be eliminated. +
    • +
    +
    diff --git a/src/rdbms/presentations/normalization/example-2nf.hbs b/src/rdbms/presentations/normalization/example-2nf.hbs new file mode 100644 index 000000000..6050f03f9 --- /dev/null +++ b/src/rdbms/presentations/normalization/example-2nf.hbs @@ -0,0 +1,12 @@ +
    + {{>tbl-2nf-itm}} + {{>tbl-2nf-lvl}} +
    +
    +
      +
    • + icon-pass + Each non-key attribute must depend on the entire primary key. +
    • +
    +
    diff --git a/src/rdbms/presentations/normalization/example-3nf.hbs b/src/rdbms/presentations/normalization/example-3nf.hbs new file mode 100644 index 000000000..0c69bf719 --- /dev/null +++ b/src/rdbms/presentations/normalization/example-3nf.hbs @@ -0,0 +1,13 @@ +
    + {{>tbl-3nf-lvl}} + {{>tbl-3nf-rtg}} +
    +
    +
      +
    • + icon-pass + Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key. +
    • +
    +
    + diff --git a/src/rdbms/presentations/normalization/example.hbs b/src/rdbms/presentations/normalization/example.hbs new file mode 100644 index 000000000..fe19ef1ef --- /dev/null +++ b/src/rdbms/presentations/normalization/example.hbs @@ -0,0 +1,3 @@ +
    + {{>tbl-example}} +
    diff --git a/src/rdbms/presentations/normalization/problem-1nf.hbs b/src/rdbms/presentations/normalization/problem-1nf.hbs new file mode 100644 index 000000000..d78d22da7 --- /dev/null +++ b/src/rdbms/presentations/normalization/problem-1nf.hbs @@ -0,0 +1,2 @@ +
    {{>tbl-1nf-mxd}}
    +
    {{>tbl-1nf-rpg}}
    diff --git a/src/rdbms/presentations/normalization/problem-2nf.hbs b/src/rdbms/presentations/normalization/problem-2nf.hbs new file mode 100644 index 000000000..e8c8c2268 --- /dev/null +++ b/src/rdbms/presentations/normalization/problem-2nf.hbs @@ -0,0 +1,7 @@ +{{! + Each non-key attribute must depend on the entire primary key. + + *primary key*: `(name, item_type)` + `level` attribute depends on `(name)` key only, which violates 2NF. +}} +
    {{>tbl-2nf-nka}}
    diff --git a/src/rdbms/presentations/normalization/problem-3nf.hbs b/src/rdbms/presentations/normalization/problem-3nf.hbs new file mode 100644 index 000000000..71a36b2e3 --- /dev/null +++ b/src/rdbms/presentations/normalization/problem-3nf.hbs @@ -0,0 +1,4 @@ +{{! + transitive dependencies should be eliminated +}} +
    {{>tbl-3nf-tdp}}
    diff --git a/src/rdbms/presentations/normalization/req-1nf.hbs b/src/rdbms/presentations/normalization/req-1nf.hbs new file mode 100644 index 000000000..caa2127f2 --- /dev/null +++ b/src/rdbms/presentations/normalization/req-1nf.hbs @@ -0,0 +1,22 @@ +

    + First
    + normal form +

    +
    +

    Requirements

    +
      +
    • + Row order should not be used to convey information. +
    • +
    • + Data types should not be mixed within the same column.
      + (and the RDBMS won't let you do it anyway) +
    • +
    • + Tables should have their primary keys. +
    • +
    • + Repeating groups should be eliminated. +
    • +
    +
    diff --git a/src/rdbms/presentations/normalization/req-2nf.hbs b/src/rdbms/presentations/normalization/req-2nf.hbs new file mode 100644 index 000000000..32687bb67 --- /dev/null +++ b/src/rdbms/presentations/normalization/req-2nf.hbs @@ -0,0 +1,12 @@ +

    + Second
    + normal form +

    +
    +

    Requirements

    +
      +
    • + Each non-key attribute must depend on the entire primary key. +
    • +
    +
    diff --git a/src/rdbms/presentations/normalization/req-3nf.hbs b/src/rdbms/presentations/normalization/req-3nf.hbs new file mode 100644 index 000000000..20eef549c --- /dev/null +++ b/src/rdbms/presentations/normalization/req-3nf.hbs @@ -0,0 +1,12 @@ +

    + Third
    + normal form +

    +
    +

    Requirements

    +
      +
    • + Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key. +
    • +
    +
    diff --git a/src/rdbms/presentations/normalization/tbl-1nf-itm.hbs b/src/rdbms/presentations/normalization/tbl-1nf-itm.hbs new file mode 100644 index 000000000..0e39255b1 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-1nf-itm.hbs @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    namelevelratingitem_typeitem_quantity
    prombery877Advancedsword1
    prombery877Advancedring4
    wheed19976Intermediatecopper coin18
    acen19971Beginnerrobe1
    acen19971Beginnerwizard hat1
    diff --git a/src/rdbms/presentations/normalization/tbl-1nf-mxd.hbs b/src/rdbms/presentations/normalization/tbl-1nf-mxd.hbs new file mode 100644 index 000000000..53f16239b --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-1nf-mxd.hbs @@ -0,0 +1,32 @@ +{{! mixed data types }} + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery87 + 7.75 + 7 + Advanced1 sword, 4 rings
    wheed1997 + + 6 + Intermediate18 copper coins
    diff --git a/src/rdbms/presentations/normalization/tbl-1nf-rpg.hbs b/src/rdbms/presentations/normalization/tbl-1nf-rpg.hbs new file mode 100644 index 000000000..ae0e362f3 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-1nf-rpg.hbs @@ -0,0 +1,35 @@ +{{! repeating groups }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877Advanced + 1 sword, 4 rings + 1 sword +
    wheed19976Intermediate18 copper coins
    prombery877Advanced4 rings
    diff --git a/src/rdbms/presentations/normalization/tbl-2nf-itm.hbs b/src/rdbms/presentations/normalization/tbl-2nf-itm.hbs new file mode 100644 index 000000000..5dcaf8dc7 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-2nf-itm.hbs @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    nameitem_typeitem_quantity
    prombery87sword1
    prombery87ring4
    wheed1997copper coin18
    acen1997robe1
    acen1997wizard hat1
    diff --git a/src/rdbms/presentations/normalization/tbl-2nf-lvl.hbs b/src/rdbms/presentations/normalization/tbl-2nf-lvl.hbs new file mode 100644 index 000000000..87547c460 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-2nf-lvl.hbs @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    namelevelrating
    prombery877Advanced
    wheed19976Intermediate
    acen19971Beginner
    diff --git a/src/rdbms/presentations/normalization/tbl-2nf-nka.hbs b/src/rdbms/presentations/normalization/tbl-2nf-nka.hbs new file mode 100644 index 000000000..886dd6cfd --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-2nf-nka.hbs @@ -0,0 +1,50 @@ +{{! non-key attributes }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Inventory
    namelevelratingitem_typeitem_quantity
    prombery877Advancedsword1
    prombery877Advancedring4
    wheed19976Intermediatecopper coin18
    acen19971Beginnerrobe1
    acen19971Beginnerwizard hat1
    diff --git a/src/rdbms/presentations/normalization/tbl-3nf-lvl.hbs b/src/rdbms/presentations/normalization/tbl-3nf-lvl.hbs new file mode 100644 index 000000000..be923227c --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-3nf-lvl.hbs @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    namelevel
    prombery877
    wheed19976
    acen19971
    diff --git a/src/rdbms/presentations/normalization/tbl-3nf-rtg.hbs b/src/rdbms/presentations/normalization/tbl-3nf-rtg.hbs new file mode 100644 index 000000000..d416c74e9 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-3nf-rtg.hbs @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Level Ranking
    levelrating
    1Beginner
    2Beginner
    3Beginner
    4Intermediate
    5Intermediate
    6Intermediate
    7Advanced
    8Advanced
    9Advanced
    diff --git a/src/rdbms/presentations/normalization/tbl-3nf-tdp.hbs b/src/rdbms/presentations/normalization/tbl-3nf-tdp.hbs new file mode 100644 index 000000000..d6e98f629 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-3nf-tdp.hbs @@ -0,0 +1,28 @@ +{{! transitive dependencies }} + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Level
    namelevelrating
    prombery877Advanced
    wheed19976Intermediate
    acen19971Beginner
    diff --git a/src/rdbms/presentations/normalization/tbl-anomalies-delete.hbs b/src/rdbms/presentations/normalization/tbl-anomalies-delete.hbs new file mode 100644 index 000000000..07300f6cd --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-anomalies-delete.hbs @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    acen19971Beginner1 robe, 1 wizard hat
    diff --git a/src/rdbms/presentations/normalization/tbl-anomalies-insert.hbs b/src/rdbms/presentations/normalization/tbl-anomalies-insert.hbs new file mode 100644 index 000000000..69f2e0f77 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-anomalies-insert.hbs @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    acen19971Beginner
    diff --git a/src/rdbms/presentations/normalization/tbl-anomalies-update.hbs b/src/rdbms/presentations/normalization/tbl-anomalies-update.hbs new file mode 100644 index 000000000..41e4230ad --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-anomalies-update.hbs @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    acen1997 + 1 + 1 + Beginner1 robe, 1 wizard hat
    wheed1997Almost 7Intermediate18 copper coins
    acen1997 + 2 + 1 + Beginner1 robe, 1 wizard hat
    diff --git a/src/rdbms/presentations/normalization/tbl-example.hbs b/src/rdbms/presentations/normalization/tbl-example.hbs new file mode 100644 index 000000000..a81126a66 --- /dev/null +++ b/src/rdbms/presentations/normalization/tbl-example.hbs @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
    Player Info
    namelevelratinginventory
    prombery877.75Advanced1 sword, 4 rings
    wheed1997Almost 7Intermediate18 copper coins
    diff --git a/webpack.config.js b/webpack.config.js index 5bc3f1f74..06e5d9761 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,6 +4,19 @@ const HTMLWebpackPlugin = require("html-webpack-plugin") const BASE_DIR = path.resolve(__dirname, "src") const BUILD_DIR = path.resolve(__dirname, "_build", "webpack") +const ASSETS_DIR = path.resolve(__dirname, "assets") + +const commonHTMLWebpackPluginConfig = { + favicon: path.resolve(ASSETS_DIR, "favicon.ico"), + inject: "body", // inject scripts at the bottom of the body +} + +const icons = { + moonIcon: "../assets/moon-svgrepo-com.svg", + sunIcon: "../assets/sun-svgrepo-com.svg", + passIcon: "../assets/check-mark-svgrepo-com.svg", + failIcon: "../assets/cross-mark-svgrepo-com.svg", +} const config = { mode: "development", @@ -19,10 +32,14 @@ const config = { hot: true, }, plugins: [ - new MiniCSSExtractPlugin({filename: "css/main.min.css"}), + new MiniCSSExtractPlugin({ filename: "css/main.min.css" }), new HTMLWebpackPlugin({ - template: path.resolve(BASE_DIR, "rdbms", "presentations", "normalization.html"), - filename: path.resolve(BUILD_DIR, "normalization", "index.html") + ...commonHTMLWebpackPluginConfig, + template: path.resolve(BASE_DIR, "rdbms", "presentations", "normalization", "_index.hbs"), + filename: path.resolve(BUILD_DIR, "normalization", "index.html"), + templateParameters: { + ...icons, + }, }), ], module: { @@ -30,25 +47,25 @@ const config = { { test: /\.scss$/, use: [ - {loader: MiniCSSExtractPlugin.loader}, - {loader: "css-loader"}, - {loader: "sass-loader"}, + { loader: MiniCSSExtractPlugin.loader }, + { loader: "css-loader" }, + { loader: "sass-loader" }, ] }, { test: /\.css$/, use: [ - {loader: MiniCSSExtractPlugin.loader}, - {loader: "css-loader"}, + { loader: MiniCSSExtractPlugin.loader }, + { loader: "css-loader" }, ] }, { test: /\.(png|svg|jpg|jpeg|gif|ico)$/, type: "asset/resource", - generator: {filename: "assets/[name][ext]"}, + generator: { filename: "assets/[name][ext]" }, }, { - test: /\.hbs$/, + test: /\.(handlebars|hbs)$/, loader: "handlebars-loader", }, { From 049ea2f96b987fb0d39e9c2a687a01bc2a8cebae Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 17:00:22 +0200 Subject: [PATCH 672/689] Rename db normalization mindmap document --- mindmaps/{normalization.mmd => rdbms-normalization.mmd} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename mindmaps/{normalization.mmd => rdbms-normalization.mmd} (100%) diff --git a/mindmaps/normalization.mmd b/mindmaps/rdbms-normalization.mmd similarity index 100% rename from mindmaps/normalization.mmd rename to mindmaps/rdbms-normalization.mmd From b0157c6638cee85b9b10969169940b24d3217e71 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 19:21:42 +0200 Subject: [PATCH 673/689] Add Django introduction mindmap doc (GH-221) --- mindmaps/django-intro.mmd | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 mindmaps/django-intro.mmd diff --git a/mindmaps/django-intro.mmd b/mindmaps/django-intro.mmd new file mode 100644 index 000000000..94da25b99 --- /dev/null +++ b/mindmaps/django-intro.mmd @@ -0,0 +1,40 @@ +--- +Introduction to Django web framework +--- + +mindmap + root(Django Introduction) + about)About( + Frameworks + Libraries + hiw))How
    internet
    works(( + diagram[Request-Response cycle
    diagram] + response)What is
    RESPONSE?( + request)What is
    REQUEST?( + methods{{Request methods}} + mvc(Model, View, Controller
    design pattern) + mvc_m[Model] + ::{{Data manipulation}} + mvc_v[View] + ::{{Data representation}} + mvc_c[Controller] + ::{{Model-to-view mapper}} + mvt(Model, View, Template
    design pattern) + dj_m[Model] + ::{{Data manipulation}} + dj_v[View] + ::{{Request-response handlers}} + dj_t[Template] + ::{{Data representation}} + how_to)How to( + Install Django + Create project + Run project for the first time + structure[Django project structure] + ::{{Entry points}} + ::{{Settings}} + ::{{URL Configurations}} + apps[Django applications] + Create app + ::{{AppConfig}} + Install app From ca84b1d368b771ecc1993400a049168d0b421a1d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 19:30:40 +0200 Subject: [PATCH 674/689] Update db normalization mindmap (GH-202) --- mindmaps/rdbms-normalization.mmd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mindmaps/rdbms-normalization.mmd b/mindmaps/rdbms-normalization.mmd index 053c383b1..7b62dd095 100644 --- a/mindmaps/rdbms-normalization.mmd +++ b/mindmaps/rdbms-normalization.mmd @@ -1,3 +1,7 @@ +--- +Database normalization +--- + mindmap root((Normalization)) def)Definition( From aff2d217cfc689e15d59ac46cd4a6bd750961fa9 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 19:47:43 +0200 Subject: [PATCH 675/689] Add ACID mindmap (GH-206) --- mindmaps/rdbms-acid.mmd | 17 +++++++++++++++++ src/refs.bib | 6 ++++++ 2 files changed, 23 insertions(+) create mode 100644 mindmaps/rdbms-acid.mmd diff --git a/mindmaps/rdbms-acid.mmd b/mindmaps/rdbms-acid.mmd new file mode 100644 index 000000000..3b724e8ad --- /dev/null +++ b/mindmaps/rdbms-acid.mmd @@ -0,0 +1,17 @@ +--- +ACID - Atomicity, Consistency, Isolation, Durability +--- + +mindmap + root((ACID)) + term)transactions( + A(Atomicity) + Individual operations + ::[All or nothing] + C(Consistency) + ::{{valid state}} + From valid state to another valid state + I(Isolation) + Isolation principle + levels[Isolation levels] + D(Durability) diff --git a/src/refs.bib b/src/refs.bib index 8c6a65414..2967fbb60 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -225,3 +225,9 @@ @misc{medium:db-acid-cap date = {2017.1.12}, url = {https://cinish.medium.com/database-acid-cap-isolation-levels-371b7e06a112} } + +@misc{medium:db-acid-4, + title = {Database : ACID transactions}, + author = {Pier-Jean Malandrino}, + url = {https://medium.com/scub-lab/database-acid-transactions-d2fcc99d8834}, +} From 373b50dd4e454c1e3c2721811e0448fb38d69ee7 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 20:15:52 +0200 Subject: [PATCH 676/689] Add functions mindmap (GH-216) --- mindmaps/basics-function.mmd | 22 ++++++++++++++++++++++ src/refs.bib | 14 ++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 mindmaps/basics-function.mmd diff --git a/mindmaps/basics-function.mmd b/mindmaps/basics-function.mmd new file mode 100644 index 000000000..656ad4e3b --- /dev/null +++ b/mindmaps/basics-function.mmd @@ -0,0 +1,22 @@ +--- +Python functions +--- + +mindmap + root(Python functions) + term)Definition( + def[Function definition syntax] + example + scope{{Variables scopes}} + ::[Arguments] + positional arguments + keyword arguments + ::{{Special cases}} + default values + ::[Variable number of arguments] + pos(Positional arguments) + kw(Keyword arguments) + m_args{{Mutable arguments}} + ::{{special case: default values}} + return[return statement] + lambda(Lambda functions) diff --git a/src/refs.bib b/src/refs.bib index 2967fbb60..66dc309c1 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -231,3 +231,17 @@ @misc{medium:db-acid-4 author = {Pier-Jean Malandrino}, url = {https://medium.com/scub-lab/database-acid-transactions-d2fcc99d8834}, } + +@misc{realpython:functional, + title = {Functional Programming in Python: When and How to Use It}, + author = {John Sturtz}, + date = {2017.2.17}, + url = {https://realpython.com/python-functional-programming/}, +} + +@misc{medium:func, + title = {Python Function MindMap}, + author = {Ushadeep P.}, + date = {2021.9.25}, + url = {https://medium.com/@ushadeep123/python-function-mindmap-c1c747f5d4da}, +} From b0b7716c7c53a8d1827feb11945593fe10dcdd02 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 20:20:51 +0200 Subject: [PATCH 677/689] Update functions mindmap (GH-216) --- mindmaps/basics-function.mmd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mindmaps/basics-function.mmd b/mindmaps/basics-function.mmd index 656ad4e3b..fc7de8e9d 100644 --- a/mindmaps/basics-function.mmd +++ b/mindmaps/basics-function.mmd @@ -20,3 +20,6 @@ mindmap ::{{special case: default values}} return[return statement] lambda(Lambda functions) + recursion)Resive functions( + base case + recursive case From 89533cf54b377f63397f3abe179dc982206e029d Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 20:47:53 +0200 Subject: [PATCH 678/689] Add DTL mindmap (GH-89, GH-224) --- mindmaps/django-templates.mmd | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 mindmaps/django-templates.mmd diff --git a/mindmaps/django-templates.mmd b/mindmaps/django-templates.mmd new file mode 100644 index 000000000..07cea9539 --- /dev/null +++ b/mindmaps/django-templates.mmd @@ -0,0 +1,26 @@ +--- +Django templates +--- + +mindmap + root(Django templates) + settings + ::icon(fas fa-gear) + ::[Template directories] + ::icon(fas fa-folder) + ::{{Apps templates}} + render(render function) + ctx[context] + dtl)Django
    template
    language( + syntax((Syntax)) + tags + variables + filters + comments + ::(access data) + ::(conditions) + ::(loops) + ::(include) + ::(templates
    inheritance) + ctg{{Custom template tags}} + templatetags From 14f323ee54f5d51b425b208c5553a417c9a8e234 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 21:05:25 +0200 Subject: [PATCH 679/689] Add Django models mindmap (GH-90, GH-225) --- mindmaps/django-models.mmd | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 mindmaps/django-models.mmd diff --git a/mindmaps/django-models.mmd b/mindmaps/django-models.mmd new file mode 100644 index 000000000..ac9125229 --- /dev/null +++ b/mindmaps/django-models.mmd @@ -0,0 +1,49 @@ +--- +Django models +--- + +mindmap + root(Django models) + ::)Definition( + settings + ::icon(fas fa-gear) + ::{{connect to DB}} + dbs[sqlite
    postgres
    mysql] + ::icon(fas fa-database) + ::{{Define a model}} + models.Field + null + blank + choices + editable + help_text + primary_key + unique + verbose_name + validators + fields[Fields] + txt(Text fields) + CharField + max_length + SlugField + TextField + ::{{special cases}} + FileField + ImageField + URLField + num(Numeric fields) + IntegerField + DecimalField + datetime(Date/time fields) + DateField + TimeField + DateTimeField + rel(Relationships) + ::[1-to-1] + ::[1-to-N: foreign key] + ::[m2m: many to many] + through + ::icon(fas fa-table) + migrations + ::{{Schema migrations}} + ::{{Data migrations}} From 38154bf248efc106c470074645a9283062891bb4 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 21:38:33 +0200 Subject: [PATCH 680/689] Update Django models mindmap (GH-90, GH-225) --- mindmaps/django-models.mmd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mindmaps/django-models.mmd b/mindmaps/django-models.mmd index ac9125229..ea749ae6e 100644 --- a/mindmaps/django-models.mmd +++ b/mindmaps/django-models.mmd @@ -45,5 +45,7 @@ mindmap through ::icon(fas fa-table) migrations + makemigrations[Make migrations] + migrate[Migrate] ::{{Schema migrations}} ::{{Data migrations}} From b6b10301d1bb14db8146cf498283438445609615 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Mon, 4 Mar 2024 21:44:26 +0200 Subject: [PATCH 681/689] Update Django models mindmap (GH-90, GH-225) --- mindmaps/django-models.mmd | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mindmaps/django-models.mmd b/mindmaps/django-models.mmd index ea749ae6e..5fcc5f0f4 100644 --- a/mindmaps/django-models.mmd +++ b/mindmaps/django-models.mmd @@ -10,7 +10,7 @@ mindmap ::{{connect to DB}} dbs[sqlite
    postgres
    mysql] ::icon(fas fa-database) - ::{{Define a model}} + ::[Define a model] models.Field null blank @@ -49,3 +49,14 @@ mindmap migrate[Migrate] ::{{Schema migrations}} ::{{Data migrations}} + admin(Site admin) + register model to admin site + admin site configuration + ::icon(fas fa-user-tie) + usage + add + ::icon(fas fa-plus) + remove + ::icon(fas fa-trash) + modify + ::icon(fas fa-edit) From 70f38389e49375b835b988215c54f166a8994bd0 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Mar 2024 09:47:18 +0200 Subject: [PATCH 682/689] Add RDBMS relationships mindmap --- mindmaps/rdbms-relationship.mmd | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 mindmaps/rdbms-relationship.mmd diff --git a/mindmaps/rdbms-relationship.mmd b/mindmaps/rdbms-relationship.mmd new file mode 100644 index 000000000..1fb216d65 --- /dev/null +++ b/mindmaps/rdbms-relationship.mmd @@ -0,0 +1,29 @@ +--- +Database relationships +--- + +mindmap + root(Relationships) + ::{{Constraints}} + pk[Primary key] + ::icon(fas fa-key) + fk[Foreigh key] + ::(1-to-1) + ::{{unique foreign key}} + ::[table] + ::icon(fas fa-a) + ::[table] + ::icon(fas fa-b) + ::(1-to-N) + ::{{foreign key}} + ::[table] + ::icon(fas fa-a) + ::[table] + ::icon(fas fa-b) + m2m(Many-to-many) + ::[relation table] + ::icon(fas fa-table) + ::[table] + ::icon(fas fa-a) + ::[table] + ::icon(fas fa-b) From 53aa6db275c6b50b8a90b13a9ff04a39484a2029 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Mar 2024 14:07:26 +0200 Subject: [PATCH 683/689] Update submodules --- assets/impress.js | 2 +- libms-db | 2 +- src/rdbms/datatypes.txt | 2 +- src/rdbms/ddl.txt | 4 ++-- src/rdbms/dml.txt | 2 +- src/rdbms/query.txt | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/impress.js b/assets/impress.js index f7e19b459..fd945d557 160000 --- a/assets/impress.js +++ b/assets/impress.js @@ -1 +1 @@ -Subproject commit f7e19b459eb2d2a1f7d618bf11e55cd540e27ce6 +Subproject commit fd945d557498b9310d1d9ba20690b492578e0e15 diff --git a/libms-db b/libms-db index e026286d6..6aded892f 160000 --- a/libms-db +++ b/libms-db @@ -1 +1 @@ -Subproject commit e026286d6464ce67891de8dde231f20f2de94683 +Subproject commit 6aded892faa6b5aa6d130e8737b1bf8291e61f73 diff --git a/src/rdbms/datatypes.txt b/src/rdbms/datatypes.txt index 6db7dc85a..485695d50 100644 --- a/src/rdbms/datatypes.txt +++ b/src/rdbms/datatypes.txt @@ -9,7 +9,7 @@ Users can add new types to PostgreSQL using the ``CREATE TYPE`` command. .. literalinclude:: /../libms-db/libms.sql :caption: Custom data type definition :language: postgresql - :lines: 72-89 + :lines: 81-98 +-------------------------------+-------------------+------------------------------------------------------------------+ | Name | Aliases | Description | diff --git a/src/rdbms/ddl.txt b/src/rdbms/ddl.txt index 1eaac0f2b..b3841caa6 100644 --- a/src/rdbms/ddl.txt +++ b/src/rdbms/ddl.txt @@ -252,7 +252,7 @@ To add a column, use a command like: .. literalinclude:: /../libms-db/libms.sql :language: postgresql - :lines: 51-63,92-93 + :lines: 57-69,102-104 .. note:: @@ -370,7 +370,7 @@ can be used to avoid the error message, but this is not standard SQL. .. literalinclude:: /../libms-db/libms.sql :language: postgresql - :lines: 1-20 + :lines: 5-13 In case there are other objects referencing the object to drop ``CASCADE`` may be used to also remove any referencing objects. diff --git a/src/rdbms/dml.txt b/src/rdbms/dml.txt index 6e6a14402..4cb6b4f71 100644 --- a/src/rdbms/dml.txt +++ b/src/rdbms/dml.txt @@ -59,7 +59,7 @@ You can insert multiple rows in a single command. .. literalinclude:: /../libms-db/libms.sql :caption: Inserting multiple values at a time :language: postgresql - :lines: 251-260,400-402 + :lines: 250-251,278-286,428-429 .. note:: diff --git a/src/rdbms/query.txt b/src/rdbms/query.txt index f7ba21651..d5e2f0eb4 100644 --- a/src/rdbms/query.txt +++ b/src/rdbms/query.txt @@ -85,7 +85,7 @@ a comma-separated table reference list. A table reference can a table name, or derived table such as sub-query, a ``JOIN`` construct, or complex combinations of these. If more than one table reference is listed in the ``FROM`` clause, the table are cross-joined. The result of the ``FROM`` list -is an intermediate virtual table tant can then be subject to transformations +is an intermediate virtual table which can then be subject to transformations by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the result of the overall table expression. @@ -500,7 +500,7 @@ Joins between tables .. literalinclude:: /../libms-db/libms.sql :caption: Publishers and books tables definitions :language: postgresql - :lines: 14-23,50-62 + :lines: 15-23,57-69 Following tables are related via ``FOREIGN KEY`` constraint. Each record in the ``book`` table references some record in the ``publisher`` table. From 28a620b892626c2fc4a054faf5663d12f509e6db Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Mar 2024 14:10:51 +0200 Subject: [PATCH 684/689] Update project version and dependencies --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- requirements.txt | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 38760ca2b..4e0fde41c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -547,20 +547,20 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "69.1.0" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, - {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" diff --git a/pyproject.toml b/pyproject.toml index 3cf972348..4efc9306d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "python-course" -version = "2024.02.dev" +version = "2024.03.dev" description = "Python training course materials" license = "MIT" authors = [ diff --git a/requirements.txt b/requirements.txt index 2f830b158..1d3e35ea9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ pybtex==0.24.0 ; python_version >= "3.9" and python_version < "4.0" pygments==2.17.2 ; python_version >= "3.9" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.9" and python_version < "4.0" -setuptools==69.1.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools==69.1.1 ; python_version >= "3.9" and python_version < "4.0" six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" sphinx-copybutton==0.5.2 ; python_version >= "3.9" and python_version < "4.0" From c1f0810f4ea141a10a5c89bb9bb1ccf7fa255f2c Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Mar 2024 14:21:11 +0200 Subject: [PATCH 685/689] Update translations (Ukrainian) --- src/_locales/uk/LC_MESSAGES/rdbms/query.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/query.po b/src/_locales/uk/LC_MESSAGES/rdbms/query.po index 0e8d726a8..bf7c64135 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/query.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/query.po @@ -5,19 +5,19 @@ # SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.11.dev\n" +"Project-Id-Version: Python Training Course 2024.03.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2024-02-18 17:54+0200\n" +"POT-Creation-Date: 2024-03-05 14:17+0200\n" +"PO-Revision-Date: 2024-03-05 14:20+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"Generated-By: Babel 2.13.1\n" +"Generated-By: Babel 2.14.0\n" "X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/query.txt:-1 @@ -206,9 +206,9 @@ msgid "" "derived table such as sub-query, a ``JOIN`` construct, or complex " "combinations of these. If more than one table reference is listed in the " "``FROM`` clause, the table are cross-joined. The result of the ``FROM`` list " -"is an intermediate virtual table tant can then be subject to transformations " -"by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and is finally the " -"result of the overall table expression." +"is an intermediate virtual table which can then be subject to " +"transformations by the ``WHERE``, ``GROUP BY``, and ``HAVING`` clauses and " +"is finally the result of the overall table expression." msgstr "" "Речення ``FROM`` виводить таблицю з однієї або кількох інших таблиць, " "наведених у списку посилань на таблиці, розділених комами. Посилання на " From 1a390b741a2cd4c3e9e9958b5a9064f54aec8ee8 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Mar 2024 16:28:01 +0200 Subject: [PATCH 686/689] Update translations (Ukrainian) (fixes GH-212, fixes GH-213, fixes GH-215) --- .../uk/LC_MESSAGES/rdbms/functions.po | 28 +- src/_locales/uk/LC_MESSAGES/rdbms/index.po | 34 +- src/_locales/uk/LC_MESSAGES/rdbms/query.po | 4 +- .../uk/LC_MESSAGES/rdbms/relations.po | 397 +----------------- 4 files changed, 60 insertions(+), 403 deletions(-) diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po index 406f86cbd..500699963 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/functions.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/functions.po @@ -5,18 +5,18 @@ # SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.11.dev\n" +"Project-Id-Version: Python Training Course 2024.03.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2024-02-18 17:44+0200\n" +"PO-Revision-Date: 2024-03-05 16:23+0200\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: uk \n" -"Language: uk\n" +"Language-Team: \n" +"Language: uk_UA\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Babel 2.13.1\n" "X-Generator: Poedit 3.4.2\n" @@ -742,7 +742,7 @@ msgstr "Умовні вирази" #: ../../src/rdbms/functions.txt:369 msgid "CASE" -msgstr "" +msgstr "CASE" #: ../../src/rdbms/functions.txt:371 msgid "" @@ -754,7 +754,7 @@ msgstr "" #: ../../src/rdbms/functions.txt:377 msgid "COALESCE" -msgstr "НАГЛЕЮЄТЬСЯ" +msgstr "COALESCE" #: ../../src/rdbms/functions.txt:379 msgid "" @@ -875,17 +875,17 @@ msgstr "" #: ../../src/rdbms/functions.txt:532 ../../src/rdbms/functions.txt:564 #: ../../src/rdbms/functions.txt:602 msgid "year" -msgstr "рік" +msgstr "year" #: ../../src/rdbms/functions.txt:464 ../../src/rdbms/functions.txt:500 #: ../../src/rdbms/functions.txt:532 ../../src/rdbms/functions.txt:564 #: ../../src/rdbms/functions.txt:602 msgid "month" -msgstr "місяць" +msgstr "month" #: ../../src/rdbms/functions.txt:464 msgid "avg" -msgstr "в середньому" +msgstr "avg" #: ../../src/rdbms/functions.txt:466 ../../src/rdbms/functions.txt:468 #: ../../src/rdbms/functions.txt:502 ../../src/rdbms/functions.txt:504 @@ -971,7 +971,7 @@ msgstr "" #: ../../src/rdbms/functions.txt:500 msgid "count" -msgstr "рахувати" +msgstr "count" #: ../../src/rdbms/functions.txt:502 ../../src/rdbms/functions.txt:506 #: ../../src/rdbms/functions.txt:510 @@ -1000,7 +1000,7 @@ msgstr "" #: ../../src/rdbms/functions.txt:532 msgid "max" -msgstr "макс" +msgstr "max" #: ../../src/rdbms/functions.txt:534 msgid "12383" @@ -1036,7 +1036,7 @@ msgstr "" #: ../../src/rdbms/functions.txt:564 msgid "min" -msgstr "мін" +msgstr "min" #: ../../src/rdbms/functions.txt:566 msgid "3365" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/index.po b/src/_locales/uk/LC_MESSAGES/rdbms/index.po index 545693222..fff4021eb 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/index.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/index.po @@ -4,19 +4,19 @@ # SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2022.11.dev\n" +"Project-Id-Version: Python Training Course 2024.03.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2023-12-21 03:58+0200\n" +"PO-Revision-Date: 2024-03-05 16:17+0200\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: ua \n" -"Language: ua\n" +"Language-Team: \n" +"Language: uk_UA\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/index.txt:-1 msgid "Relational databases" @@ -32,15 +32,15 @@ msgstr "sql, db, database, intro, introduction, index" #: ../../src/rdbms/index.txt msgid "PostgreSQL" -msgstr "" +msgstr "PostgreSQL" #: ../../src/rdbms/index.txt msgid "SQLite" -msgstr "" +msgstr "SQLite" #: ../../src/rdbms/index.txt msgid "MySQL" -msgstr "" +msgstr "MySQL" #: ../../src/rdbms/index.txt:23 msgid "Relational Database" @@ -96,44 +96,60 @@ msgid "" "Security is a paramount aspect of managing databases. Even at the " "introductory level, it's crucial to be aware of the basic security measures:" msgstr "" +"Безпека - найважливіший аспект управління базами даних. Навіть на " +"початковому рівні важливо знати основні заходи безпеки:" #: ../../src/rdbms/index.txt:46 msgid "" "**Authentication and Authorization**: Ensuring that only authorized users " "have access to the database." msgstr "" +"**Аутентифікація та авторизація**: Забезпечення доступу до бази даних лише " +"авторизованим користувачам." #: ../../src/rdbms/index.txt:48 msgid "" "**Role-Based Access Control**: Assigning permissions based on roles within " "the organization." msgstr "" +"**Контроль доступу на основі ролей**: Призначення дозволів на основі ролей в " +"організації." #: ../../src/rdbms/index.txt:50 msgid "" "**Data Encryption**: Protecting sensitive data both at rest and in transit." msgstr "" +"**Шифрування даних**: Захист конфіденційних даних як у стані спокою, так і " +"під час передачі." #: ../../src/rdbms/index.txt:52 msgid "" "There are dozens of RDBMS, used in nowadays projects. But most widespread " "are:" msgstr "" +"Існують десятки СУБД, які використовуються в сучасних проектах. Але " +"найпоширенішими є наступні:" #: ../../src/rdbms/index.txt:54 msgid "" "|postgres| **PostgreSQL**: A Powerful, open source object-relational " "database system." msgstr "" +"|postgres| **PostgreSQL**: Потужна об'єктно-реляційна система баз даних з " +"відкритим вихідним кодом." #: ../../src/rdbms/index.txt:56 msgid "" "|sqlite| **SQLite**: A C-library that implements a small, full featured SQL " "database engine." msgstr "" +"|sqlite| **SQLite**: C-бібліотека, яка реалізує невеликий, проте " +"повнофункціональний рушій баз даних SQL." #: ../../src/rdbms/index.txt:58 msgid "" "|mysql| **MySQL**: A fast, multithread, multi-user, and robust SQL database " "server." msgstr "" +"|mysql| **MySQL**: Швидкий, багатопотоковий, багатокористувацький і надійний " +"сервер баз даних SQL." diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/query.po b/src/_locales/uk/LC_MESSAGES/rdbms/query.po index bf7c64135..79f1f1430 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/query.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/query.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Python Training Course 2024.03.dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-05 14:17+0200\n" -"PO-Revision-Date: 2024-03-05 14:20+0200\n" +"PO-Revision-Date: 2024-03-05 16:26+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: uk \n" "Language: uk\n" @@ -327,7 +327,7 @@ msgstr "" #: ../../src/rdbms/query.txt:173 msgid "Labels are often referenced as \"aliases\"." -msgstr "Етикетки часто називають \"псевдонімами\"." +msgstr "Мітки часто називають \"псевдонімами\"." #: ../../src/rdbms/query.txt:176 msgid "DISTINCT" diff --git a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po index 95b4620c8..f99345d48 100644 --- a/src/_locales/uk/LC_MESSAGES/rdbms/relations.po +++ b/src/_locales/uk/LC_MESSAGES/rdbms/relations.po @@ -4,11 +4,11 @@ # SERHII HORODILOV msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2024.02.dev\n" +"Project-Id-Version: Python Training Course 2024.03.dev\n" "Report-Msgid-Bugs-To: https://github.com/edu-python-course/edu-python-course." "github.io/issues\n" "POT-Creation-Date: 2023-12-16 13:55+0000\n" -"PO-Revision-Date: 2024-02-26 19:44+0200\n" +"PO-Revision-Date: 2024-03-05 16:13+0200\n" "Last-Translator: Serhii Horodilov \n" "Language-Team: \n" "Language: uk\n" @@ -19,7 +19,6 @@ msgstr "" "X-Generator: Poedit 3.4.2\n" #: ../../src/rdbms/relations.txt:-1 -#, fuzzy msgid "This document describes the database relationships" msgstr "Цей документ описує відносини в базах даних" @@ -40,7 +39,6 @@ msgid "Data Relationships" msgstr "Зв'язки даних" #: ../../src/rdbms/relations.txt:11 -#, fuzzy msgid "" "Before dive into relationships, there is a need explain core concepts on how " "data are referenced between different tables." @@ -53,20 +51,18 @@ msgid "Primary key" msgstr "Первинний ключ (Primary key)" #: ../../src/rdbms/relations.txt:17 -#, fuzzy msgid "" "A primary key constraint indicates that a column, or group of columns, can " "be used as a unique identifier for rows in the table. This requires that " "values be both unique and not null. So, the following two table definitions " "accept the same data:" msgstr "" -"Обмеження первинного ключа вказує на те, що стовпець або група стовпців може " +"Первинний ключ вказує на те, що стовпець або група стовпців може " "використовуватися як унікальний ідентифікатор для рядків у таблиці. Це " "вимагає, щоб значення були і унікальними, і не нульовими. Отже, наступні два " "визначення таблиці приймають однакові дані:" #: ../../src/rdbms/relations.txt:36 -#, fuzzy msgid "" "Primary keys can span more than one column; the syntax is similar to unique " "constraint:" @@ -75,7 +71,6 @@ msgstr "" "до унікального обмеження:" #: ../../src/rdbms/relations.txt:49 -#, fuzzy msgid "" "Adding a primary key will automatically create a unique B-tree index on the " "column or group of columns listed in the primary key, and will force the " @@ -86,12 +81,10 @@ msgstr "" "стовпець(и) позначити ``NOT NULL``." #: ../../src/rdbms/relations.txt:53 -#, fuzzy msgid "A table can have at most one primary key." msgstr "Таблиця може мати не більше одного первинного ключа." #: ../../src/rdbms/relations.txt:57 -#, fuzzy msgid "" "There can be any number of unique and not-null constraints, which are " "functionally almost the same thing, but only one can be identified as the " @@ -106,19 +99,16 @@ msgid "Foreign key (FK)" msgstr "Зовнішній ключ (FK)" #: ../../src/rdbms/relations.txt:64 -#, fuzzy msgid "" "A foreign key constraint specifies that the value in a column (or a group of " "columns) must match the values appearing in some row of another table. We " "say this maintains the *referential integrity* between two tables." msgstr "" -"Обмеження зовнішнього ключа визначає, що значення у стовпчику (або групі " -"стовпчиків) має збігатися зі значеннями, що з'являються у деякому рядку " -"іншої таблиці. Ми говоримо, що це підтримує *посилальну цілісність* між " -"двома таблицями." +"Зовнішній ключ визначає, що значення у стовпчику (або групі стовпчиків) має " +"збігатися зі значеннями, що з'являються у деякому рядку іншої таблиці. Ми " +"говоримо, що це підтримує *посилальну цілісність* між двома таблицями." #: ../../src/rdbms/relations.txt:68 -#, fuzzy msgid "" "A table can have more than one foreign key constraint. Foreign key can also " "overlaps with the primary key." @@ -127,33 +117,28 @@ msgstr "" "також може перекриватися з первинним ключем." #: ../../src/rdbms/relations.txt:71 -#, fuzzy msgid "To define a FK constraint:" -msgstr "Визначити обмеження FK:" +msgstr "Щоб визначити FK:" #: ../../src/rdbms/relations.txt:94 -#, fuzzy msgid "" "In this situation the ``book`` table is the *referencing* table, and the " "``publisher`` table is the *referenced* table. Similarly there are " "referencing and referenced columns." msgstr "" -"У цій ситуації таблиця ``книга`` є таблицею *посилання*, а таблиця " -"``видавець`` є таблицею *посилання*. Аналогічно існують стовпці, на які є " +"У цій ситуації таблиця ``book`` є таблицею *посилання*, а таблиця " +"``publisher`` є таблицею *посилання*. Аналогічно існують стовпці, на які є " "посилання, і стовпці, на які є посилання." #: ../../src/rdbms/relations.txt:98 -#, fuzzy msgid "" "In case the referenced column is not explicitly defined, the primary key of " "the referenced table will be used as the referenced column." msgstr "" -"Якщо стовпець, на який є посилання, не визначено явно, первинний ключ " -"таблиці, на яку є посилання, буде використано як стовпець, на який є " -"посилання." +"Якщо стовпець, на який є посилання, не визначено явно, буде використано " +"первинний ключ таблиці, на яку посилаються." #: ../../src/rdbms/relations.txt:101 -#, fuzzy msgid "" "It is not possible to create a row with non-null foreign key, that does not " "appear in the referenced table." @@ -162,12 +147,10 @@ msgstr "" "в таблиці, на яку посилається." #: ../../src/rdbms/relations.txt:105 -#, fuzzy msgid "Self-referential foreign key" msgstr "Самореферентний зовнішній ключ" #: ../../src/rdbms/relations.txt:107 -#, fuzzy msgid "" "Sometimes it is useful to the referenced table to be the same table as " "referencing. This makes possible to create a tree-structures with nodes, " @@ -178,12 +161,10 @@ msgstr "" "вузол верхнього рівня матиме ``NULL`` ``parent_id``." #: ../../src/rdbms/relations.txt:120 -#, fuzzy msgid "Deleting referenced rows" msgstr "Видалення рядків з посиланнями" #: ../../src/rdbms/relations.txt:122 -#, fuzzy msgid "" "So far we know that the foreign keys disallows creation of rows that do not " "relate to any row inside the referenced table. But what if a referenced row " @@ -195,39 +176,33 @@ msgstr "" "зрозуміло, що варіантів небагато:" #: ../../src/rdbms/relations.txt:126 -#, fuzzy msgid "disallow deletion" msgstr "заборонити видалення" #: ../../src/rdbms/relations.txt:127 -#, fuzzy msgid "delete referencing rows as well" -msgstr "видаліть також рядки посилань" +msgstr "також видалити рядки посилань" #: ../../src/rdbms/relations.txt:128 -#, fuzzy msgid "something else..." msgstr "щось інше..." #: ../../src/rdbms/relations.txt:130 -#, fuzzy msgid "" "Restricting and cascading deletes are the two most common options. " "``RESTRICT`` prevents deletion of a referenced row. ``CASCADE`` will also " "delete all referencing rows as well as the referenced one." msgstr "" "Обмеження та каскадне видалення є двома найпоширенішими варіантами. " -"``ОБМЕЖЕННЯ`` запобігає видаленню рядка, на який є посилання. ``КАСКАДНЕ`` " +"``ОБМЕЖЕННЯ`` запобігає видаленню рядка, на який є посилання. ``CASCADE`` " "також видаляє всі рядки, на які є посилання, а також рядок, на який є " "посилання." #: ../../src/rdbms/relations.txt:148 -#, fuzzy msgid "There are others options." msgstr "Є й інші варіанти." #: ../../src/rdbms/relations.txt:150 -#, fuzzy msgid "" "``NO ACTION`` means that if any referencing rows still exist when the " "constraint is checked, an error is raised; this is the default behavior." @@ -236,7 +211,6 @@ msgstr "" "перевіряється обмеження, буде видано помилку; це поведінка за замовчуванням." #: ../../src/rdbms/relations.txt:153 -#, fuzzy msgid "" "``SET NULL`` will replace all referencing rows foreign key values with " "``NULL`` values." @@ -245,7 +219,6 @@ msgstr "" "посилаються, на значення ``NULL``." #: ../../src/rdbms/relations.txt:156 -#, fuzzy msgid "" "``SET DEFAULT`` will replace all referencing rows foreign key values with " "default values." @@ -254,31 +227,27 @@ msgstr "" "значеннями за замовчуванням." #: ../../src/rdbms/relations.txt:160 -#, fuzzy msgid "Relationships" msgstr "Відносини" #: ../../src/rdbms/relations.txt:162 -#, fuzzy msgid "" "From the point of view of the RDBMS there are no other relationships between " "two tables except the **foreign key**. But the way the foreign keys are " "designed brings us three concepts of the data relations." msgstr "" "З точки зору СУБД, між двома таблицями не існує інших зв'язків, окрім " -"**зовнішнього ключа**. Але те, як спроектовані зовнішні ключі, дає нам три " +"**зовнішнього ключа**. Але те, як спроектовані зовнішні ключі, надає три " "концепції зв'язків між даними." #: ../../src/rdbms/relations.txt:168 -#, fuzzy msgid "One-to-many" msgstr "" -"``article`` та ``comment`` мають *один-до-багатьох* відношення. Стаття може " +"``article`` та ``comment`` мають відношення *один-до-багатьох*. Стаття може " "бути контейнером для багатьох коментарів, але коментар пов'язаний лише з " "однією статтею." #: ../../src/rdbms/relations.txt:169 -#, fuzzy msgid "" "In a relational database, two tables have a one-to-many relationship if each " "row in one table references multiple rows of the other table. For example " @@ -291,15 +260,10 @@ msgstr "" "``книжка`` видається певним видавництвом." #: ../../src/rdbms/relations.txt:180 -#, fuzzy msgid "One-to-one" -msgstr "" -"Книга\" може бути позичена \"Користувачем\", але в будь-який момент часу " -"кожна \"Книга\" може бути позичена тільки одним користувачем. Це формує " -"відносини \"один до одного\"." +msgstr "Один-до-одного" #: ../../src/rdbms/relations.txt:183 -#, fuzzy msgid "" "You can think of one-to-one relationship as a limited version of *one-to-" "many*." @@ -308,7 +272,6 @@ msgstr "" "багатьох\"." #: ../../src/rdbms/relations.txt:186 -#, fuzzy msgid "" "In a relational database, two tables have a one-to-one relationship if each " "row in one table links to exactly one row in the other table, and vice " @@ -317,16 +280,14 @@ msgid "" msgstr "" "У реляційній базі даних дві таблиці мають зв'язок \"один до одного\", якщо " "кожен рядок в одній таблиці посилається на точно такий самий рядок в іншій " -"таблиці, і навпаки. Наприклад, таблиця \"учасники\" і таблиця \"контакти\" " +"таблиці, і навпаки. Наприклад, таблиця ``members`` і таблиця ``contacts`` " "можуть мати зв'язок \"один до одного\"." #: ../../src/rdbms/relations.txt:197 -#, fuzzy msgid "Many-to-many" msgstr "Багато до багатьох" #: ../../src/rdbms/relations.txt:198 -#, fuzzy msgid "" "In relational database, two table have many-to-many relationship if each row " "in one table can reference multiple rows in another table, and vice versa. " @@ -337,328 +298,8 @@ msgid "" msgstr "" "У реляційній базі даних дві таблиці мають зв'язок \"багато до багатьох\", " "якщо кожен рядок в одній таблиці може посилатися на декілька рядків в іншій " -"таблиці, і навпаки. Наприклад, таблиця ``книга`` може містити записи про " -"книги, написані багатьма ``авторами``. З іншого боку, автор може написати " +"таблиці, і навпаки. Наприклад, таблиця ``book`` може містити записи про " +"книги, написані багатьма ``authors``. З іншого боку, автор може написати " "декілька книг. Реалізація зв'язку \"багато-до-багатьох\" вимагає створення " "проміжної таблиці, яка застосовує зв'язок \"один-до-багатьох\" до обох " "вихідних таблиць." - -#~ msgid "sql, db, database, relationship" -#~ msgstr "sql, db, database, relationship" - -#~ msgid "It's time to talk about **data relations**." -#~ msgstr "Настав час поговорити про **відносини даних**." - -#~ msgid "" -#~ "For example your database contains two tables: ``weather`` and ``city``. " -#~ "The diagram below demonstrates the overall data structure:" -#~ msgstr "" -#~ "Наприклад, ваша база даних містить дві таблиці: ``weather`` і ``city``. " -#~ "Діаграма нижче демонструє загальну структуру даних:" - -#~ msgid "" -#~ "Consider the following problem: you want to make sure no one can insert a " -#~ "record into ``weather`` without a matching entry in ``city`` table. This " -#~ "is called maintaining the *referential integrity* of your data. In " -#~ "simplistic database systems this would be implemented (if at all) by " -#~ "first looking at the cities table to check if a matching record exists, " -#~ "and then inserting or rejecting the new weather records. This approach " -#~ "has a number of problems and is very inconvenient." -#~ msgstr "" -#~ "Розглянемо таку проблему: ви хочете переконатися, що ніхто не може " -#~ "вставити запис до ``weather`` без відповідного запису в ``city`` таблиці. " -#~ "Ценазивається підтримкою посилальної цілісності ваші дані. У спрощених " -#~ "системах баз даних це було б реалізовано (якщо взагалі) спочатку " -#~ "переглядаючи таблицю міст, щоб перевірити, чи існує відповідний запис, а " -#~ "потім вставляв або відхиляв нові записи погоди. Цей підхід має низку " -#~ "проблем і дуже незручно." - -#~ msgid "" -#~ "This declaration creates a relationship between two (or even more) tables." -#~ msgstr "" -#~ "Це оголошення створює зв'язок між двома (або навіть більше) таблицями." - -#~ msgid "" -#~ "So far, you have knowledge about **primary** keys. The **foreign** key is " -#~ "a column, that *references* some another table. In common, it's a " -#~ "reference to another table's PK; but there is no limitation of this kind, " -#~ "any column can be referenced by another one. FKs handle data integrity " -#~ "only, it's not required for FK to be non-NULL value." -#~ msgstr "" -#~ "Поки що ви знаєте про первинні ключі. Зовнішній ключ - це стовпець, який " -#~ "посилається на іншу таблицю. Загалом, це посилання на PK іншої таблиці; " -#~ "але такого роду обмежень немає , на будь-який стовпець може посилатися " -#~ "інший. FK обробляє лише цілісність даних, не обов'язково, щоб значення FK " -#~ "було відмінним від NULL." - -#~ msgid "" -#~ "The relation's properties are described by CONSTRAINTS and the database's " -#~ "structure." -#~ msgstr "" -#~ "Властивості відношення описуються ОБМЕЖЕННЯМИ та структурою бази даних." - -#~ msgid "" -#~ "For example, modifying declaration with ``NOT NULL`` constraint grants " -#~ "that each record within a table has a matching one entity in another " -#~ "table." -#~ msgstr "" -#~ "Наприклад, зміна декларації з обмеженням ``NOT NULL`` гарантує, що кожний " -#~ "запис у таблиці має відповідну сутність в іншій таблиці." - -#~ msgid "This brings us to various relationship models." -#~ msgstr "Це підводить нас до різних моделей відносин." - -#~ msgid "One-to-many relationship (1-to-N)" -#~ msgstr "Зв'язок один-до-багатьох (1-до-N)" - -#~ msgid "This is the most common relationship." -#~ msgstr "Це найпоширеніший зв'язок." - -#~ msgid "" -#~ "For the example above there are no limitations on temperature " -#~ "measurements in a specified city. So, a single city may has 0 or N " -#~ "related records in ``weather`` table. But each weather record is related " -#~ "to the only one city." -#~ msgstr "" -#~ "Для наведеного вище прикладу немає обмежень на вимірювання температури у " -#~ "визначеному місті. Отже, окреме місто може мати 0 або N пов'язаних " -#~ "записів у таблиці ``погода``. Але кожен запис погоди пов'язаний до " -#~ "єдиного міста." - -#~ msgid "" -#~ "Another example is employees and office buildings they work in. Some big " -#~ "company may have multiple offices and employee across the globe. Multiple " -#~ "employees can be present in a single office building at a time. But each " -#~ "employee can be physically located only in a single office at a time." -#~ msgstr "" -#~ "Іншим прикладом є співробітники та офісні будівлі, в яких вони працюють. " -#~ "Деякі великі компанії можуть мати кілька офісів і співробітників по " -#~ "всьому світу. Декілька працівників можуть бути присутні в одній офісній " -#~ "будівлі одночасно. Але кожен працівник може фізично перебувати лише в " -#~ "одному офісі одночасно." - -#~ msgid "One-to-one relationship (1-to-1)" -#~ msgstr "One-to-one relationship (1-to-1)" - -#~ msgid "" -#~ "``UNIQUE`` and ``NOT NULL`` constraints are used together to ensure there " -#~ "is and only one matching record. Back to the example with employees. " -#~ "Multiple workstations (personal computers) are located in each office " -#~ "building. The only one person can occupy the only one work station at a " -#~ "time." -#~ msgstr "" -#~ "Обмеження ``UNIQUE`` і ``NOT NULL`` використовуються разом, щоб " -#~ "забезпечити наявність лише одного відповідного запису. Повернемося до " -#~ "прикладу зі співробітниками. Кілька робочих станцій (персональних " -#~ "комп'ютерів) розташовані в у кожній офісній будівлі. Лише одна особа може " -#~ "займати лише одну робочу станцію одночасно." - -#~ msgid "Many-to-many relationship (N-to-N)" -#~ msgstr "Зв'язок багато-до-багатьох (N-до-N)" - -#~ msgid "" -#~ "These relationships require additional table. A good example may be a " -#~ "*project role*. There are many of them in a production team. And some " -#~ "employees may be assigned to the same role (e.g. developers, testers " -#~ "etc.). But also a single person can be a developer and tester at a time." -#~ msgstr "" -#~ "Ці зв'язки потребують додаткової таблиці. Хорошим прикладом може бути " -#~ "роль у проекті. Їх багато у виробничій команді. І деяким працівникам може " -#~ "бути призначено ту саму роль (наприклад, розробники, тестувальники і т. " -#~ "д.). Але також одна людина може бути розробником і тестувальником " -#~ "одночасно." - -#~ msgid "Joining data" -#~ msgstr "Об'єднання даних" - -#~ msgid "" -#~ "``JOIN`` is used to *join* data fetched from multiple related tables. To " -#~ "build a valid query you are to set the tables to join and parameter to " -#~ "use for this operation." -#~ msgstr "" -#~ "``JOIN`` використовується для об'єднання даних, отриманих з кількох " -#~ "пов'язаних таблиць. Щоб побудувати дійсний запит, вам потрібно встановити " -#~ "таблиці для об'єднання та параметр, який використовується для цієї " -#~ "операції." - -#~ msgid "Common syntax is:" -#~ msgstr "Загальний синтаксис:" - -#~ msgid "" -#~ "There are various join types available. Here are is some dummy data to " -#~ "demonstrate their purpose." -#~ msgstr "" -#~ "Існують різні типи об'єднань. Ось деякі фіктивні дані, щоб " -#~ "продемонструвати їх призначення." - -#~ msgid "poem" -#~ msgstr "poem" - -#~ msgid "id" -#~ msgstr "id" - -#~ msgid "title" -#~ msgstr "title" - -#~ msgid "author_id" -#~ msgstr "author_id" - -#~ msgid "1" -#~ msgstr "1" - -#~ msgid "On the Field of Battle" -#~ msgstr "On the Field of Battle" - -#~ msgid "2" -#~ msgstr "2" - -#~ msgid "Moses" -#~ msgstr "Moses" - -#~ msgid "3" -#~ msgstr "3" - -#~ msgid "The Forest Song" -#~ msgstr "The Forest Song" - -#~ msgid "4" -#~ msgstr "4" - -#~ msgid "In the Catacombs" -#~ msgstr "In the Catacombs" - -#~ msgid "null" -#~ msgstr "null" - -#~ msgid "5" -#~ msgstr "5" - -#~ msgid "The Singing Stones" -#~ msgstr "The Singing Stones" - -#~ msgid "6" -#~ msgstr "6" - -#~ msgid "Ancient Fairy Tales" -#~ msgstr "Ancient Fairy Tales" - -#~ msgid "7" -#~ msgstr "7" - -#~ msgid "My Thoughts" -#~ msgstr "My Thoughts" - -#~ msgid "8" -#~ msgstr "8" - -#~ msgid "To Shevchenko" -#~ msgstr "To Shevchenko" - -#~ msgid "author" -#~ msgstr "author" - -#~ msgid "name" -#~ msgstr "name" - -#~ msgid "Larysa Kosach" -#~ msgstr "Larysa Kosach" - -#~ msgid "Ivan Franko" -#~ msgstr "Ivan Franko" - -#~ msgid "John Doe" -#~ msgstr "John Doe" - -#~ msgid "Join types" -#~ msgstr "Join types" - -#~ msgid "Cross join" -#~ msgstr "Cross join" - -#~ msgid "" -#~ "For every possible combination of rows from T1 and T2 (i.e., a Cartesian " -#~ "product), the joined table will contain a row consisting of all columns " -#~ "in T1 followed by all columns in T2. If the tables have N and M rows " -#~ "respectively, the joined table will have N * M rows." -#~ msgstr "" -#~ "Для будь-якої можливої комбінації рядків з T1 і T2 (тобто декартового " -#~ "добутку) об’єднана таблиця міститиме рядок, що складається з усіх " -#~ "стовпців у T1, за якими йдуть усі стовпці в T2. Якщо таблиці мають N і M " -#~ "рядків відповідно, об’єднана таблиця матиме N * M рядків." - -#~ msgid "Qualified joins" -#~ msgstr "Qualified joins" - -#~ msgid "" -#~ "The words ``INNER`` and ``OUTER`` are optional for all forms. ``INNER`` " -#~ "is the default; ``LEFT``, ``RIGHT`` and ``FULL`` imply ``OUTER`` join." -#~ msgstr "" -#~ "Слова ``INNER`` і ``OUTER`` є необов'язковими для всіх форм. ``INNER`` є " -#~ "типовим; ``LEFT``, ``RIGHT`` і ``FULL` ` означає ``OUTER`` приєднання." - -#~ msgid "INNER JOIN" -#~ msgstr "INNER JOIN" - -#~ msgid "" -#~ "For each row R1 of T1, the joined table has a row for each row in T2 that " -#~ "satisfies the join condition with R1." -#~ msgstr "" -#~ "Для кожного рядка R1 T1 об'єднана таблиця має рядок для кожного рядка T2, " -#~ "який задовольняє умову об'єднання з R1." - -#~ msgid "Inner join" -#~ msgstr "Inner join" - -#~ msgid "LEFT OUTER JOIN" -#~ msgstr "LEFT OUTER JOIN" - -#~ msgid "" -#~ "First, an inner join is performed. Then, for each row in T1 that does not " -#~ "satisfy the join condition with any row in T2, a joined row is added with " -#~ "null values in columns of T2. Thus, the joined table always has at least " -#~ "one row for each row in T1." -#~ msgstr "" -#~ "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -#~ "який не задовольняє умови з'єднання з будь-яким рядком у T2, додається " -#~ "об'єднаний рядок із нульовими значеннями в стовпцях T2. Таким чином, " -#~ "об'єднана таблиця завжди має щонайменше один рядок для кожного рядка в T1." - -#~ msgid "Left join" -#~ msgstr "Left join" - -#~ msgid "RIGHT OUTER JOIN" -#~ msgstr "RIGHT OUTER JOIN" - -#~ msgid "" -#~ "First, an inner join is performed. Then, for each row in T2 that does not " -#~ "satisfy the join condition with any row in T1, a joined row is added with " -#~ "null values in columns of T1. This is the converse of a left join: the " -#~ "result table will always have a row for each row in T2." -#~ msgstr "" -#~ "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T2, " -#~ "який не задовольняє умови об'єднання з будь-яким рядком у T1, об'єднаний " -#~ "рядок додається з нульовими значеннями в стовпцях T1. Це є протилежністю " -#~ "лівого об'єднання: таблиця результатів завжди матиме рядок для кожного " -#~ "рядка в T2." - -#~ msgid "Right join" -#~ msgstr "Right join" - -#~ msgid "FULL OUTER JOIN" -#~ msgstr "FULL OUTER JOIN" - -#~ msgid "" -#~ "First, an inner join is performed. Then, for each row in T1 that does not " -#~ "satisfy the join condition with any row in T2, a joined row is added with " -#~ "null values in columns of T2. Also, for each row of T2 that does not " -#~ "satisfy the join condition with any row in T1, a joined row with null " -#~ "values in the columns of T1 is added." -#~ msgstr "" -#~ "Спочатку виконується внутрішнє об'єднання. Потім для кожного рядка в T1, " -#~ "який не задовольняє умови об'єднання з будь-яким рядком у T2, додається " -#~ "об'єднаний рядок із нульовими значеннями в стовпцях T2. Також , для " -#~ "кожного рядка T2, який не задовольняє умову з'єднання з будь-яким рядком " -#~ "T1, додається об'єднаний рядок із нульовими значеннями в стовпцях T1." - -#~ msgid "Full join" -#~ msgstr "Full join" From 09168381cdc9a999a383c5b2a95b52b3720f2873 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Tue, 5 Mar 2024 16:51:22 +0200 Subject: [PATCH 687/689] Update refs --- src/refs.bib | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/refs.bib b/src/refs.bib index 66dc309c1..e4f38ef8d 100644 --- a/src/refs.bib +++ b/src/refs.bib @@ -245,3 +245,24 @@ @misc{medium:func date = {2021.9.25}, url = {https://medium.com/@ushadeep123/python-function-mindmap-c1c747f5d4da}, } + +@misc{medium:db-idx, + title = {Understanding Database Indexing}, + author = {Aditya Barik}, + date = {2023.6.11}, + url = {https://medium.com/@aditya.barik32/database-indexing-secrets-d1f93e67bb1b}, +} + +@misc{freecodecamp:db-idx, + title = {An in-depth look at Database Indexing}, + author = {Kousik Nath}, + date = {2019.4.16}, + url = {https://www.freecodecamp.org/news/database-indexing-at-a-glance-bb50809d48bd/}, +} + +@misc{codecademy:db-idx, + title = {What is a Database Index?}, + author = {Codecademy Team}, + date = {}, + url = {https://www.codecademy.com/article/sql-indexes}, +} From d138033bbde616434f9280d9d7495366c71976cc Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 8 Mar 2024 10:59:45 +0200 Subject: [PATCH 688/689] Minor fixes to Git part documents --- assets/mermaid/git/merge-1.mmd | 4 +- assets/mermaid/git/merge-1.mmd.png | Bin 9478 -> 11948 bytes assets/mermaid/git/merge-2.mmd | 12 +-- assets/mermaid/git/merge-2.mmd.png | Bin 17428 -> 20971 bytes src/_locales/uk/LC_MESSAGES/vcs/branch.po | 90 +++++++++++----------- src/vcs/branch.txt | 42 +++++----- 6 files changed, 74 insertions(+), 74 deletions(-) diff --git a/assets/mermaid/git/merge-1.mmd b/assets/mermaid/git/merge-1.mmd index 2a3260d0f..fa93e1433 100644 --- a/assets/mermaid/git/merge-1.mmd +++ b/assets/mermaid/git/merge-1.mmd @@ -1,8 +1,8 @@ %%{init: {'gitGraph': {'mainBranchName': 'master'}} }%% gitGraph commit id: "Initial commit" - branch feature/issue53 + branch feature/GH-53 commit commit checkout master - merge feature/issue53 + merge feature/GH-53 diff --git a/assets/mermaid/git/merge-1.mmd.png b/assets/mermaid/git/merge-1.mmd.png index 3d97f653a764788d6870ce60390fcbcc6a8275f0..e394a7e30066e1b1cf4223726308b7270cef877f 100644 GIT binary patch literal 11948 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 R8Fw`1hKUvIy%FN+{{R6sN)rG8 literal 17428 zcmcG0Ra9I}&@I8;JxB(f5Zqk`_rVEnA-Dv02!nedXz<`3+(WPgNpN>}cl{6FzwWxP z_vJpFSu=gAyX#c%s@hd&BA_a=Sm@;FaBy%~@^Vt@aB%QMaB#0sQIUafcBGICfy*lw zby)~pJV*xr*Cho#K=Q1_7BGP--RDb~M@Z$~@i_0&H3nKz}g*^CE`OXMXp<5}qBUo}GM z#ndN889pTklY_xsfze&bzGKHY@(s-U7Wv&Qw~tM%#%~r;0vtyCmf8GN8kz7Tq;Mgq zAXt;so;ry*@B#O$1SI6;t24;|<2A2k0twm@^y=oX2eRkWEojNxwr-;LZA)*ImhYa% zr0~NDg?0r~Rb14($dIEySEP2?+IV(lpGh&3TLKK%E7>z^|5D5M$Ys+lvy_`D?SZNG z>dHUM&%Jn}7c5XuE}Z4%yTvsiYAPg%?0L6~+un{>r$-bVjAvt`si`GlYz(ulR6Ach z<{g>R*5AvEmGrE>Iyn?r|GTgOjF@W*Y5cMO*7nzcS2`4gc;smo%0DV+;(|M-4|V5Ch~RE0gC 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

    ZXaay_0wg6pKnPxg0KDHV&~X9$tg#ZXRFKvq&a zh2V!f95db{@#%JIeOt;KoDm1%=-GR4;ajdx(|DPKknmlA`GetpU`bJ<;^<05B;aT5_-+~yEkV*H+oN(g$Epg3w}ucvdQ z4T21Pd)XCOan=^xcE!>(?~Zq3FX3`+SU2mF*Us>{%B1nqe0M2aBC#n15#8DP`>iA( zR0U95-+Voh?X~4Ilbp2i|eT?!9uEJBX!%&zy5H&4cfL@r=e31a`H5g$N`)R8}5&CPl5 zIEjhdmS@8{@BPbjEBNQT_ObFEfu2fq#dI+s%{UzcS_mat9&0-Hr%W2}tof+lJSBH5 zDn*@R!KYhd;)A8|fPf!@Dm@65#1rhho4N40_zQcGPF$ zAy&khU=_80p)!d0nOiiE!{#OR&SBI=A&SK!-%izF0CCk}gUZL?tY0 z#lfmf+Ka~^MM=KYZ#pM8as@y2R+StH5H<6k6)3O*#BodG=+Y^&|1m*b1LYg`j_<76 zT%*w{op6Uq){Xi5zzTaA#$7Q$Qt}11XFI*?6XUy07znnb_Z}-4AE)zO zcd3606qpwxqN|br_bllX^{LSzVKwBGBbEKjZqeFd!PwnozE2E#dg))ZfyFBPx7Z}9 z*dUrT4?bjluF9iHPK`n+h4mAVPv#90gT0-FuGX+v#U1q&^%WOyzCd>{Tc)&tT$e^( zRvEDP(u1I1*8YT@rXrTKuJ5nb5pt-j%rWd6kY<<_6B`o5K}ixX){5nAkhm}n}vaim4vG&8E z*Lv^!;Ka9=Mr_z8fIEPMeg6S$(dvsIx%4f()c8m|8|(O zCr^oJGs+IjH7B7Ait#N!#C?jsf6;*Ii$xF`l!{lw8IHvLThDn{m(XsHQmwLUo?z_* zN|Lpl0BDN5a2yoM@W)x0N@LjHBYXaX#=QRUuIcQ&TS?$JQ~!rUkxWX$x-ef6M7?Cr zO;G;->@hHLe^LUKv0Zse5let04O8U7UUQwUYXD3&Pl1aKfhD2Kt_KQ0DSdDt8l7Zx z0-Bd^^b1%7d1={crHBC2;vH~o3OGG!1r99&!$wIToUcfr|JBb+w))AX_G>cmm=6X| LS3j3^P6H>bw diff --git a/src/_locales/uk/LC_MESSAGES/vcs/branch.po b/src/_locales/uk/LC_MESSAGES/vcs/branch.po index 678468287..e833e4a02 100644 --- a/src/_locales/uk/LC_MESSAGES/vcs/branch.po +++ b/src/_locales/uk/LC_MESSAGES/vcs/branch.po @@ -4,15 +4,15 @@ # SERHII HORODILOV , 2023. msgid "" msgstr "" -"Project-Id-Version: Python Training Course 2023.06.dev\n" +"Project-Id-Version: Python Training Course 2024.03.dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-01-09 03:59+0200\n" -"PO-Revision-Date: 2024-01-09 04:05+0200\n" +"POT-Creation-Date: 2024-03-08 08:45+0000\n" +"PO-Revision-Date: 2024-03-08 10:56+0200\n" "Last-Translator: Serhii Horodilov \n" -"Language-Team: uk \n" +"Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -150,15 +150,15 @@ msgstr "Основи розгалуження та злиття" msgid "" "First, let's say you're working on your project and have a couple of commits " "already on the ``master`` branch. You've decided that you're going to work " -"on issue #53 in whatever issue-tracking system your company uses. To create " -"a new branch and switch to it at the same time, you can run the ``git " +"on **feature #53** in whatever issue-tracking system your company uses. To " +"create a new branch and switch to it at the same time, you can run the ``git " "checkout`` command with the ``-b`` switch:" msgstr "" "По-перше, припустимо, що ви працюєте над своїм проектом і вже маєте кілька " -"комітів на гілці ``master``. Ви вирішили, що будете працювати над issue #53 " -"в будь-якій системі відстеження проблем, яку використовує ваша компанія. Щоб " -"створити нову гілку і одночасно переключитися на неї, ви можете виконати " -"команду ``git checkout`` з ключем ``-b``:" +"комітів на гілці ``master``. Ви вирішили, що будете працювати над **feature " +"#53** в будь-якій системі моніторінгу завдань, яку використовує ваша " +"компанія. Щоб створити нову гілку і одночасно переключитися на неї, ви " +"можете виконати команду ``git checkout`` з ключем ``-b``:" #: ../../src/vcs/branch.txt:131 msgid "This is shorthand for:" @@ -168,21 +168,21 @@ msgstr "Це скорочено означає:" msgid "" "In deed this creates a new branch pointer, aimed to the latest commit " "present on ``master`` branch. But, from now your branch is ``feature/" -"issue53``. So, doing commits moves the feature branch pointer forward, " -"because you have it checkout out (that is, your ``HEAD`` is pointing to it)." +"GH-53``. So, doing commits moves the feature branch pointer forward, because " +"you have it checkout out (that is, your ``HEAD`` is pointing to it)." msgstr "" "Насправді це створить новий покажчик гілки, спрямований на останню фіксацію, " "наявну у гілці ``master``. Але відтепер ваша гілка називається ``feature/" -"issue53``. Отже, виконання коммітів пересуває вказівник гілки feature " -"вперед, тому що ви її вилучили (тобто ваша ``HEAD`` вказує на неї)." +"GH-53``. Отже, створення коммітів пересуває вказівник гілки вперед, тому що " +"ви її вилучили (тобто ``HEAD`` вказує на неї)." #: ../../src/vcs/branch.txt:143 msgid "" -"Now, lets assume the \"issue53\" is fixed, and you need to bring commits " -"from the ``feature/issue53`` branch back to ``master``." +"Now, lets assume the \"GH-53\" is done, and you need to bring commits from " +"the ``feature/GH-53`` branch back to ``master``." msgstr "" -"Тепер припустимо, що \"issue53\" виправлено, і вам потрібно перенести коміти " -"з гілки ``feature/issue53`` назад до ``master``." +"Тепер припустимо, що працю над \"GH-53\" завершено, і вам потрібно перенести " +"коміти з гілки ``feature/GH-53`` назад до ``master``." #: ../../src/vcs/branch.txt:147 msgid "Merging branches" @@ -199,21 +199,21 @@ msgstr "" #: ../../src/vcs/branch.txt:161 msgid "" "You'll notice phrase \"fast-forward\" in that merge. Because the commit " -"pointed to by the branch ``feature/issue53`` you merged in was directly " -"ahead of the last commit on ``master`` branch, Git simply moves the pointer " +"pointed to by the branch ``feature/GH-53`` you merged in was directly ahead " +"of the last commit on ``master`` branch, Git simply moves the pointer " "forward." msgstr "" -"Ви помітите фразу \"перемотування вперед\" у цьому злитті. Оскільки коміт, " -"на який вказує гілка ``feature/issue53``, до якої ви приєдналися, був " -"безпосередньо перед останнім комітом у гілці ``master``, Git просто пересуне " -"вказівник вперед." +"Ви помітите фразу \"fast-forward\" у цьому злитті. Оскільки коміт, на який " +"вказує гілка ``feature/GH-53``, до якої ви приєдналися, був безпосередньо " +"перед останнім комітом у гілці ``master``, Git просто пересуне вказівник " +"вперед." #: ../../src/vcs/branch.txt:165 msgid "" -"Changes from ``feature/issue53`` are now in the snapshot of the commit " -"pointed to by the ``master`` branch." +"Changes from ``feature/GH-53`` are now in the snapshot of the commit pointed " +"to by the ``master`` branch." msgstr "" -"Зміни з ``feature/issue53`` тепер містяться у знімку коміту, на який вказує " +"Зміни з ``feature/GH-53`` тепер містяться у знімку коміту, на який вказує " "гілка ``master``." #: ../../src/vcs/branch.txt:179 @@ -222,26 +222,26 @@ msgstr "Злиття fast-forward" #: ../../src/vcs/branch.txt:181 msgid "" -"Now, lets assume another developer started working on ``feature/issue54`` at " +"Now, lets assume another developer started working on ``feature/GH-54`` at " "the same time. And there are few commits on this feature branch. Suppose, " -"the developer decided that work on **issue54** is finished and they want to " +"the developer decided that work on **GH-54** is finished and they want to " "merge their feature branch into ``master``." msgstr "" -"Тепер припустимо, що інший розробник почав працювати над ``feature/issue54`` " -"в той самий час. І у цій гілці мало комітів. Припустимо, що розробник " -"вирішив, що робота над **issue54** завершена і він хоче об'єднати свою гілку " -"з ``master``." +"Тепер припустимо, що інший розробник почав працювати над ``feature/GH-54`` в " +"той самий час. І у цій гілці мало комітів. Припустимо, що розробник вирішив, " +"що робота над **GH-54** завершена і він хоче об'єднати свою гілку з " +"``master``." #: ../../src/vcs/branch.txt:197 msgid "" -"This looks a bit different than the ``feature/issue53`` merge. In this case, " +"This looks a bit different than the ``feature/GH-53`` merge. In this case, " "development history has diverged from some older point. Because the commit " "on the branch you're on isn't a direct ancestor of the branch you're merging " "in, Git has to do some work. In this case, Git does a simple three-way " "merge, using two snapshots pointed to by the branch tips and the common " "ancestor of the two." msgstr "" -"Це виглядає дещо інакше, ніж злиття ``функція/випуск53``. У цьому випадку " +"Це виглядає дещо інакше, ніж злиття ``feature/GH-53``. У цьому випадку " "історія розробки розійшлася з якоїсь давнішої точки. Оскільки коміт на " "гілці, в якій ви перебуваєте, не є прямим предком гілки, в яку ви виконуєте " "злиття, Git'у доведеться виконати деяку роботу. У цьому випадку Git виконує " @@ -340,7 +340,7 @@ msgid "" "another: the ``merge`` and the ``rebase``." msgstr "" "У Git'і існує два основних способи інтеграції змін з однієї гілки в іншу: " -"\"злиття\" і \"перебазування\"." +"``merge`` (злиття) і ``rebase`` (перебазування)." #: ../../src/vcs/branch.txt:298 msgid "" @@ -397,9 +397,9 @@ msgid "" "of their ``master`` branch, rather then merging it in, to keep a mostly " "linear history." msgstr "" -"Інші супроводжувачі надають перевагу перезавантаженню (або вилученню) " -"внесених напрацювань на вершині своєї \"головної\" гілки, замість того, щоб " -"об'єднувати їх, щоб зберегти переважно лінійну історію." +"Інші супроводжувачі надають перевагу перебазуванню (або вилученню) внесених " +"напрацювань на кінці своєї ``master`` гілки, замість того, щоб об'єднувати " +"їх, щоб зберегти переважно лінійну історію." #: ../../src/vcs/branch.txt:356 msgid "Cherry-picking" @@ -416,9 +416,9 @@ msgid "" "it rather than run rebase." msgstr "" "Інший спосіб перенесення внесеної роботи з однієї гілки в іншу - це " -"\"збирання коммітів\" (cherry-pick). Збирання вишень у Git'і - це " -"відновлення бази для одного коміту. Він бере патч, який було внесено в " -"комміті, і намагається повторно застосувати його на гілці, на якій ви зараз " +"*збирання коммітів* (cherry-pick). Збирання вишень у Git'і - це відновлення " +"бази для одного коміту. Він бере патч, який було внесено в комміті, і " +"намагається повторно застосувати його на гілці, на якій ви зараз " "перебуваєте. Це корисно, якщо ви маєте декілька коммітів у гілці теми і " "хочете інтегрувати лише один з них, або якщо ви маєте лише один комміт у " "гілці теми і вважаєте за краще вибрати його замість того, щоб запускати " @@ -489,7 +489,7 @@ msgid "" "\"feature\" branch is created off the \"develop\" branch. These branches are " "short-lived and exist only for the duration of the feature development." msgstr "" -"**Вітки функцій**: Для кожної нової функції або виправлення помилки " +"**Гілки функцій**: Для кожної нової функції або виправлення помилки " "створюється окрема гілка \"feature\" у гілці \"develop\". Ці гілки " "недовговічні і існують лише на час розробки функції." @@ -499,7 +499,7 @@ msgid "" "ready for a release, a \"release\" branch is created. The release branch is " "used for testing, bug fixing, and preparing for deployment." msgstr "" -"**Вітки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " +"**Гілки релізу**: Коли розробка на гілці \"develop\" готова до релізу, " "створюється гілка \"release\". Релізна гілка використовується для " "тестування, виправлення помилок і підготовки до розгортання." diff --git a/src/vcs/branch.txt b/src/vcs/branch.txt index d66fa62ea..23742933f 100644 --- a/src/vcs/branch.txt +++ b/src/vcs/branch.txt @@ -119,29 +119,29 @@ Basic branching and merging First, let's say you're working on your project and have a couple of commits already on the ``master`` branch. You've decided that you're going to work on -issue #53 in whatever issue-tracking system your company uses. To create a new -branch and switch to it at the same time, you can run the ``git checkout`` -command with the ``-b`` switch: +**feature #53** in whatever issue-tracking system your company uses. To create +a new branch and switch to it at the same time, you can run the +``git checkout`` command with the ``-b`` switch: :: - $ git checkout -b feature/issue53 - Switched to a new branch "feature/issue53" + $ git checkout -b feature/GH-53 + Switched to a new branch "feature/GH-53" This is shorthand for: :: - $ git branch feature/issue53 - $ git checkout feature/issue53 + $ git branch feature/GH-53 + $ git checkout feature/GH-53 In deed this creates a new branch pointer, aimed to the latest commit present -on ``master`` branch. But, from now your branch is ``feature/issue53``. So, -doing commits moves the feature branch pointer forward, because you have it -checkout out (that is, your ``HEAD`` is pointing to it). +on ``master`` branch. But, from now your branch is ``feature/GH-53``. So, doing +commits moves the feature branch pointer forward, because you have it checkout +out (that is, your ``HEAD`` is pointing to it). -Now, lets assume the "issue53" is fixed, and you need to bring commits from -the ``feature/issue53`` branch back to ``master``. +Now, lets assume the "GH-53" is done, and you need to bring commits from +the ``feature/GH-53`` branch back to ``master``. Merging branches ---------------- @@ -152,17 +152,17 @@ merge changes (commits) from the source branch into target. :: $ git checkout master - $ git merge feature/issue53 + $ git merge feature/GH-53 Updating f42c576..3a0874c Fast-forward index.html | 2 ++ 1 file changed, 2 insertions(+) You'll notice phrase "fast-forward" in that merge. Because the commit pointed -to by the branch ``feature/issue53`` you merged in was directly ahead of the -last commit on ``master`` branch, Git simply moves the pointer forward. +to by the branch ``feature/GH-53`` you merged in was directly ahead of the last +commit on ``master`` branch, Git simply moves the pointer forward. -Changes from ``feature/issue53`` are now in the snapshot of the commit pointed +Changes from ``feature/GH-53`` are now in the snapshot of the commit pointed to by the ``master`` branch. .. only:: html @@ -178,23 +178,23 @@ to by the ``master`` branch. Fast-forward merge -Now, lets assume another developer started working on ``feature/issue54`` at +Now, lets assume another developer started working on ``feature/GH-54`` at the same time. And there are few commits on this feature branch. Suppose, -the developer decided that work on **issue54** is finished and they want to +the developer decided that work on **GH-54** is finished and they want to merge their feature branch into ``master``. :: $ git branch master - * feature/issue54 + * feature/GH-54 $ git checkout master - $ git merge feature/issue54 + $ git merge feature/GH-54 Merge made by the 'recursive' strategy. index.html | 1 + 1 file changed, 1 insertion(+) -This looks a bit different than the ``feature/issue53`` merge. In this case, +This looks a bit different than the ``feature/GH-53`` merge. In this case, development history has diverged from some older point. Because the commit on the branch you're on isn't a direct ancestor of the branch you're merging in, Git has to do some work. In this case, Git does a simple three-way merge, From b12c27bced3d843fcb37acd22fbc36528fb54d46 Mon Sep 17 00:00:00 2001 From: Serhii Horodilov Date: Fri, 8 Mar 2024 11:08:46 +0200 Subject: [PATCH 689/689] Make transparent background for mermaid pngs --- assets/mermaid/git/cherry-pick.mmd.png | Bin 19830 -> 25444 bytes assets/mermaid/git/commits.mmd.png | Bin 13323 -> 16030 bytes assets/mermaid/git/gitflow.mmd.png | Bin 46771 -> 53179 bytes assets/mermaid/git/lifecycle.mmd.png | Bin 14060 -> 16020 bytes assets/mermaid/git/rebase-1.mmd.png | Bin 12066 -> 15404 bytes assets/mermaid/git/rebase-2.mmd.png | Bin 11990 -> 15439 bytes assets/mermaid/git/states.mmd.png | Bin 13171 -> 14790 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/mermaid/git/cherry-pick.mmd.png b/assets/mermaid/git/cherry-pick.mmd.png index 77502df0d6c160ff66841b91c01b0cbbac4d9d60..2a18add477ecbb549aade7a99b90e55452b40d95 100644 GIT binary patch literal 25444 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≻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 KV_IqK9``>k?p!+n diff --git a/assets/mermaid/git/commits.mmd.png b/assets/mermaid/git/commits.mmd.png index b591bdefcb560788e6c1c265c31feebce1d02025..345cb97a0573103eee09ff874bed96a97eb47b8f 100644 GIT binary patch literal 16030 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 DZ3J(I diff --git a/assets/mermaid/git/gitflow.mmd.png b/assets/mermaid/git/gitflow.mmd.png index 4e3be39dabd3ef181a51141d56cee32ebd25bae0..8a0ef24deea6e2c89d52c56e6e92e7a3c342572f 100644 GIT binary patch literal 53179 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 sY`@KmW^F6S=6tkd~H)OZTPW0{^2Q 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�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

    1uQVrX4=8xrrI8+)UNWh8vo6v_N~JbQ;+0@2f+? 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 diff --git a/assets/mermaid/git/rebase-1.mmd.png b/assets/mermaid/git/rebase-1.mmd.png index 334ab8611c3e1bc427a38f58ebdc9a301b9d2166..bb030e5a80ff5718a67eb5bf84b222c7a7451df6 100644 GIT binary patch literal 15404 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 literal 12066 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 G|NjAEZXyi; diff --git a/assets/mermaid/git/rebase-2.mmd.png b/assets/mermaid/git/rebase-2.mmd.png index cb0dc09c29641f57fe6d9c1be5dc5ca9e1c3c7cb..c71e1f7902d3a29196ac477302a4c8801584c161 100644 GIT binary patch literal 15439 zcmaKTWn2|qy!AQc0qK1%W{5;$K7*Kp?O%@cT3b3HUB~yz+7YwpS2?fy#zS zcR?UZkhsVvC6~0rbXT=F<@???(;(y7PePyNRKWQ09b{TUEYj}}Yuu`SPkv-S%&#>w zS2;3HE=)E#O3^efFWmGq`^rS`mlD$78g{_K$TrBgecj8&6A8!0(!~eAZLh6$IhbZ& zAEoNmIC7Q-&+-}#$-hJI|N6m4_RBrKQ_hD8&WzKidfNMoN017*9$k-frLli@%nTDB zgxCQ>M+$HP;ef&|d=@u5 zg7Dy#avmZ|khBs=*d&6!W*4Jf!)@Sq1sH^JEx_e;&dT$pcb0>s5DFCe5sSeo=n!Q1 zQq~kI*2TZeXwe@)r29-_1E3u6FS>T7HhL<a{qOj2b@$3U!eA)PpO=vkdTm?!2mQurB!fdI;Cox;r#nzmr87 zZ@4FNMI3dFVsLwp3MRyT5CIPJL&J_g!uy99g6V(@joS>|_BD_d7U?!?-JugkYNJoW z#3~p4sQ2ny?_1mfLAgmEQFp@K;rWi{jViE<&jVaPD{WaGwdWHUQkf$PsvdiY`A{?-Dfc3bAE6w zF(|)0NCcDz@9;s${9=kO`}WuMpj>?J<5enIf4_#Wg6WssVYTL2Vt?dRYK8%nI39lm zQ_CgG`-+S$=Xozd>$JDi<#oR4WS@+3xak~4RT6NKFgd&#$(6~J8Q=ZNK9pCPMy;%j z#2iR62@>y$AOmA!!+n10!SK^3er=gVN^TvwJHa6I1?qJ8!(f^bJAtvXXS!4YOCclx z0kP+Ml?Pqk?RjZ*QUM4WNST9`FEhn=+S0<`L1OcTJR$j`xSw`YPLePYj8=+liVLLiH`Zi8Mvrws#4+{PC>#$0QQjM5| zM3bH%To6gGbl=|A_H?bfy4t)_?EwW8Q#%5MLNgU4-sdXpnxdefuv%rVudNAyDG9^7 z!$C>=C(Q^xEKE#ChM+Wzk#n#RBLOoqXsU|i#C({AXP!JJW=r?8`48ydLtA0AFkCBAZleC6nJ&^?%_1B4b#LB=31Ha52OjPtXz$;{10f#P}UfH-*x z<9PwWo$|^4eu;cjzAu;bxtjr4Y*v{l(9Jl7Pw*Mauiac!qY?2&8@+nIGvpf^lYWm( zn7W-?>yB4?m+Nr8WsZtBn##HPa&WrVud!d?t)r_xWy)#OzaPQLqaixb&&6Y{<(j@} zejEDngrXh;kB%5i5YzkYaxMemuc?jHhiX5G11HrG}rWl#p(=lX!`$k!l@YUqs2Pe?or}8c%452gu5~Gj0E>Pk4`hWl8 zRwGDELqj0;czAqwQmJ>ozMa8q;h}{c0PyP@Q7fz$vkR-c!%MMAG)FATXiy#(X0cB& z6;SJQUh|>`eQgit28P)hu7S%Pren^3LBBszvY?hc20FXDrGUJ$Xw6Pmk@sGlo#tS| zdj+YKH(;OO!y+yZwV)3FA!(P6jju`Gkjduho1uOs)aY_hV$>yWVi}%0IBZ|8m3$Ur z#_i*183h&AbRdnzGXj6({PHGG9B-vFd#3fM?N#(KM_JK{NTR?Ga+(nrMnXeHC-7d{{zg z4$B&H*?cIe%%;RV$nYVG7z>Vma0J#qhLzA?1|M}D;-K$Yq+aKRMd$YpHHpC8!1;)T zcW#21;D;l9_N}^lav7MQAQc#qVLAjMOab)4rwZ#E9jl93gh_DOHW3X84Vq&2X;~$8 z0a@av4+{i~6wd5zoB?AXt07~s-GVr=kRYO#8+^`q(%5w5J}v0(;?P~i;Hx^Kg$0VG z)qtL%B8KJyD+n(mqwwTfR;%plG}Rt|Al1A;>OuZ0rfsx1b1Z|6T+_bP^sdhvn8B#t$3#!m}!{kpamC`39g%rMjbf4Hk(%3~6)dwgs1yLVh z2GyV>v{aOu@Dpf@^rw)TP`SV_lZhxX`dGl9!5SfQh~Q znggSYQG#e|9~z5AYMtpeyO=(IFhnxq&qdKO0v@)aTFF2~`#pZO#kSVtZI#-Ov zSYd37sCN6j8y4ex|5QdD(euE*QG~3ET1hLS)n?ZPzqY5lZ4ffDg{zB8oe~>cmcirQ zGveRPv;1_q$<*45lnWj_?$R??gOa_^>whMFH3MB~&S-b+(8I}}3V z6uxuB!5nPWr&{{pOg~B{p-H3VLWV5TskQ2?MJ+Q0w2wwIS}J>yDVja*w=)I#2`DlT zYQL@4mNhg45=`WIPVjQpjlxPLY$(5)O^7^)GzRrdPpkav@DDe5$B=7cG4r(d+)ZfH z>wRlHa@OL`W_x7`wzDs;@N_3OH^;-Ahhuy%j06DBKGw-^tVECXBa}QedfH7VONxe? zka@{GJtJfLqjCS9my?r9SURs@n7GXF*QxxGi_;dj+hu!u`-DQ}Lb$;)_D?sMSr=vX zt=&J?3_{fn3>p=s29=isU)4ETEzbX7QXeNm#xya!yWk24Y-s=YFeV)ur?Lfq`>=dSf1QF6r&l{T!hP)j)nruofc3 z8D}ltV&#P5OekO^JK_1NzyDpp^ZoLilao^|`w0IGXL-Gv!Br1QCZ^Yu>!+>uG`oPnob=m2etxX>n3$@U!V0dmum&v|4067Gr;DAp$2P6Ww&HYe9C{)gJrUu+ zi}ki!-Q(kjin$7*#p#RL?%$NCa+FYE?M8pi@H+3pSt0^Ch*taK@8LOYp7^;0+x}$b zi1>B*cV8o85-hhlGAz2yl*KZ(p$b16 z9cB6~FAwDwi_$UoKGO0Vh=y*F6A=9CvcQ=73;_k`J*Keh1!J-iqYa?BhH+5w*=>02 zXL{WguWx6{wpyCdS0~-W2InlT2x;K|6I|cM}4&LBBILoR1KtPi$=I#okoY;q%kIZoUs_q#rmj zeZKD4VRSg1c3x9WP42Q`I6pMHV-)$okuM|bJ7j(BXg-}cafQdjW#k_)da(mNbRLKD`BK^YhkEiRw#^n5Nt(TpFyq&6LX>LWH_bSR99Mh<+ z<-{{}cj?KlBmD~t+2ehEDxPE8IvN^@$#E*k(^u|uY0&J-3T|QYpWh+OT3^0-oDap1 zyrD5^JesrTp#x%$!Jm-Pd&z`mSCiGw_x|q~jA5XPy1z8Q)xB5pZOw+0YXa{62)_+&S?IftisgU-yt^3GIdW|sk;6dp0%=f ze`7q)5}2PWCmQUZ-K-ZlXnTf+)MYt}g>;1f!Uct6qb0qlXk#o_u|E0<%Rghcei`qqHGl9YFJUkcQ9JjUEp70(=+?oEXhpHPJ<9DW{5c^hD z8GhHOp%wYdDjbxhpPYp~DjJY4t7}zbHkKhE9DFrg?{S;35Jz9!mB^UkwQ`wLoa7Mx1XL$Ez3u8##LTqp9DdA(1&Hzt-noeQqZv}ySd4z2Jm0VtcH z&I)wVh>`%8^~I_#>U!9=mu_bsCteS-L2rT0*tq=k_(6w+V~{5^CB@hZm81x~axmw; zNGnZj%l1w}YqnfBe`39-G-Pm?sd}mPvCHrUG2hpu0?@KMSi5LMNU&*WO*M0KHq^Me zX8R2c)_9dvB@wA&-f~)NO&(58YKhU(YPx>;qL-|JuM@@sg?7=rWGPC@i;LY^C(_=I zsj14X+{8|s#rl}>ca-f_3e;7`R7S7yX}V~D4P!lb7QDUDr;9l}*lfdYyH*kR?;kAq z>%{a$i_>A*Vg~<*CwL@>iROU-XQ~Y@j7-nkmVsth!3zeaGL}sK`&@6?jAr5ry^aKH z)pDA73U0eG=fBa>mfy`^UZ9IWE(K&Il9Z`yAYe7W_r#zg)i_yccrPL3I)C2i*mjej zx5XVvPL}ZS&;IcY!7upvc`Y3R-Xvj_Og!2KR;^Ivc29<+ds>A_t7%XV0 z*2)_JB~a-c9ft;nR1PG0teVi5RoU7vzjiJuOAxp+WyXS3*lotCfgot4&sRR+s-8%q ziDwxRkuNbCA9O;nKtF!4S}l3q7efUf9eSi6?cLo;y60;qMzmYpdKV|or|8#v-cty; zUnLcT!5Q)9-ANFlX8$1~VxLCVPGGmqRexO$Xl$r?r(3yJYEh##dGXPO8ir5E^oFbT zdMPO6dWppT6o5p{_u@}4@eG(lR$+d{< zX5l2LUEjcb1Gk)yTkowfRaKjcWCdK=R_AM)oUV`JHS%&cW{ph=XAuxx2}`va%AZqh zFutd=8jHNcTw*U%3?S`YU36|cR9B(FUTjjeJU%+oV0E&*N$0lr3VHXwv;rOVOlG6H1q|BMaUiw6jY+gNqu#5%D^;{Uw+tNJ{4EI*rb`zb~&x;W!Nja zWVPI?tUOb;G#3-I#;1t&U(N@|SY%i(9~`JrOWxjwBWr6o^4CYLw~Bcs zWEv_e#-~f}%sNSe-WE46BYxF6!2sfe)N2mY0(eK`000|v&kyJ7%PV@%zfVreu5-sz zCI%7?caQh>9ExN!WpYhSV0Vko$2yGfek55yfVhd^GdSoW@9G-A*>oHk>S*^n-rcP> zzC`WRu~H)ux;7VP{i?BMy9b_^R7goZ+Y za^=JzCDC64&`XT&^NtxnXjTj|4$}BJWPk#q!$Sq|_vbQK^7;b#oApZ?m6752ZPR*N zvpt%{e;i3VM=M*(b^Koxf4W*IMshmXkv}=@Eq}h>D~{pZ8h#WgDkwN82@H&8U?~25 zFqUn&yIxZ-Md^)+3+g^W*{6erMJmYgr?jZc!L0F2SMbRFOY3(SE9(@ny+xp#!sjY-cecrOzMIc` z-_%gU)8)@AS?$(+wA6xQ5%c$9^{w6cWA)AAZ#$W!0wPSnvHIy) zaC}}gUnL|WmG$*2KbPxhON^v9tyVi7c90*pJ&(sjh201)jusot9&Sc55#!XA)zn7y z71bE~1{kUfii)sBK8M8HnsWKHiVGJezzsae14 zz&`3#dT8_*pMGjtjnDWSK~Q-?fXl-TKA|I&Nvpop!o%bD!b@*v)|^`G$4M18uqi@` zCFd*TV=;3y?|Iq{J`F-=8!6Xtq?7|XIUoeC=gsFT62F!Wu$*A;8m%a0*ANQP#qse3 z#lyD)Kzh}BV<2(ihq!=5A@~%v|I(fS@31A4Qf;oMo_rQZ%gg6M#Z8 zfT^MbeUMC$s+U)%$2VjA_^|;JFNZ3JL5XSXa(gBnOfANAN6z2)pvuW9v~u-3f8$D7>25z6R?l9I+I0F9$=ha(<%veCyiGp-PN`|Gofj#{&eDuws+DQ{YDO{S(4IwlJ(?lQP+8=8`n z<*mie>*gEIvvH$d$su}+{M|w$3JU70@STK;=!D1xHe!K)R#g1?*U_P3 zZDJx?T%7B7y54pm_;oxaRbJlUJ8sb}HO!|kTHgi8VDQi!L%8-wwDtnzs%c~>SuD6w zwdUp}R2l-;f>$OB)e`To!w(-G{=FkF?`FnkeJu@a0%|#2Dn!iB1u(@BP=(|EF&P2l zEOzC$RSUvdQmB7NP@kLcc-)cCiU7sug2=7tTk#tP7>AU}YvKf=Juu9p>{L6z$1UhD z|7WKMd?-jREPt`8Q*Q^Iri&m*A;f5A9kx*ip^#G;xsH^^LCl`(G@6Bj{$W0k!IFjr zfTC4LuB}qupo&%nS~Xf{0gEsGbY&F1bK zia`IauF9N8NV-5d`P5Qb?G26na$ys#t*`$nefW@qsnN&s7Eu@MvfN&ogd;XM$dW6J zoHS@|X%FQlN<=Aiw~kh5Uf&N#m&T7}l0yyOFuHk#fCUesL6}BGTtkHWq{ z6}75&Crp4r;kYpjvameq0zvJ@k-}-^%unp`UImKfXtA-U*if}GypE*Ty`CN{gR`Hi zKUVi)faxHglIl2_*u~{Ee*Eym1P%VglK~+Fv=e~nK668Vf(Gfjb#!&5Sj~T4M*r{& z1m(%2T7Y26f}l7>R4h0|9|{i-mR=Y6J((6(De+HyK1b46;eDSVX|vG{yW%oE*f5q~ z83uuHU_d1345UFR!cb6L{X%a5x`C@G&v(JkEx`)GFkYrK3|ng|Nz=!b2!W7wDsK!=cPV6Ovd7Zx))Ax=#Ib$)6+*A2kiQQ?WF* zqLqLQeel18&$7F5fz!$u}VtMddgNlr2MHiGgts04?hUG^Q z8*9tLPbMIZHIMrxw;s8@5v+U&CKZeNj? zocNz*qM)>29Rg&CfTk%6`RclVE(pU+F#)UjryM0WH&N#HMtgUA7XKS=qBh*|0#%*E z4ZE~aO(FC*?D%5=Lg%Pj+7-BvZxS|OB1lV1YT6GtQeGrR4TKPpJ9Fi}c!u`;Ot}4N z`YIVDc+lX`ht@nK@Ti?kD%N0WSqcj{y1<9r5n)MrhE)4jK(MStBRtyNjjSQyM zE?TaOuYv>ZcRr*P1&1%v-T6yPYB`yIFQS%=)Bv5cNJf@={_3BVQK0Yvpm52%6 ztk{Ylh9yoAwl4rGkpKTKQiE5A=5e)?oLh}Rbw|xRE z{L2lG)hyxu2${<&>&5j;WunYIpp+0>)^0d+S=d`H*UV4LE-CYBeh9(tmr`aAzP;U! z+G15+2KReMzCPW#t_^S<-U%w&;qkn|Q z5$;!Zys_x_@%OFLsXjU_agI^s%3;U-__^n#+E?>U<6#x+g zL_hcR^h}!xgmz)@!o*TylrkmVU zr^6$F2ld*DL7*6o0;3T~zGbhbCqvuHTTBcL zcK(YC(}7WVRKyKXKRMsiU)wYm0RbKPfpezFbp$z`uHpeUkk5L3dSj2ODXT1fKw)9@ zjIwB;gc&jhUw(mHh*e+LvX8kB!4 zGB1=Z##({*U7J#rC5~T=Sn9mm=rC&OYc^ zPQDw?`-qCf-#M_T-Efkn@pU?{}^WQ>JZ1zKQ{p*{ng}ZfyAsU$xJ0b5|rtjFI@z_GXbmPe3aej}+1~L_Wm=#8e3Qpt7CpQly6?N+BB?jYr`S zCu(U!y^~j2N?nSVu3g(1@EM*ex5wpeWq2mr!~L!zQ?;qi%ZN{ps`N?}6r0gbSC*SV z`_$hZC7&HPmtJ(}3-3Fl1K)a^_f)S`JjvYlV764DNUOKR_jr-oAv<3q{MLsp=!sul z{aZp`G)j9>j5I#@_5QkHS_uabTTv0qgl{#p4e6*6+_X?e1>I8FEJFbzR8%`B&wwUZ z4X(Y+S6T^t)7^`_e(^eCI44IB?87~J^fQ$9C*Bmu>E_O$NC$p`?O@g$sY}Sk-4Na9 z9KBQ)688N)40LkZ!3sKkIUK)bdMSN6Sm-b@Kmy_rb9GUVcT*sM48E}!NsGcn0@tJc z)LP()gQ2cO*42IeC#jf^hT`j|5I3!y_m&!qa$)uZ%S}`iX2vQPBZzY1mkT}grl%Kq zDd1<%XyvY76s8-lpDakpT)r7b*=|QcfxyRgn{sUyOEm5L$4xSKbb%xkFjsVV)3tnE zU5~v zai!AZtW|18HX|0|P!6hpzc(>QtQH~>n;Ll%wm0#)Ef=mjP64F?IW_S%25L^-*?6x% zPee6vfX7DP z58mwnihne+G0}iJn|w|0i?J=QY|+3)B0(=T6Whu^2mY8GSA33p=Fwk_p!YZHGX^@| zo?j9)itRx6kW)!>KPEcwYyzsu7K%JxoB!6whvUEgj;0uT++0;=BQ5>?+du;56VN|4 z@T6>l8iQ@9;`)pN*6EUY9KY8-vZ!OjStbqYnSBSY>oeLYt!qVHtX$98c3y6AAN%)D z>%)tPIW;vt|5RoRx@KDzQBzYhcp8_Kq>@b!bDXQU&Et4v`3e+o6;D)XNWu%~Q?M+o zbly5S6m)9uzNt`h_^B^$@7|7gvWN0V)=H1Ip!o>Q&SUS zu`pe^F(K=WVY$4NyYl>W9LOsc^`xjND5Vns0^lRh9G6iCcc5D?8E||1c58oz;%t9@ zs_D<-qA~&TJiVlL$YP@_VXf8vFRywA=Fdsd(fU<3%gI;#Za48aca5sIceO)`ga$KZ zIw_B41XKt~05Evu!zzYSLAEmwGBmN+fv`__sEF7QA?E|GUGIyX+$(^5BXxFGO|GgE z-u?BN_ZN?oWhO4cbd6f+yK)gVb@jJcsDaf*MH-ZNs5^nKqz@j6#CyXG*cax=b;hO4U0MrS9s72d@M5zFyqv=m8<+3F+lHqG?K9v#=0oVF;>hZNl+3ZZ+JOkXiECx0Gij|g|MXh{fxf5NN(S<-pvysQ zREnp|wcP*YF`ZgVS-H=FaU!2D>2{U{>D(Xhx;he>mu+X8u9d_BVNgtrD~l_lEL30* zuY>2qzK!Q7`~O=^9{>ylbE|(s8LWX3hlxM@l4Z(`?l-dQc(^TJuCA$3u#(xz{ZBjq zxF9FFe3^_}_p7wMjI=bX)6Q3q_Cc7(u}=3+K~`;EpBlKArug=^~~M^qDkS(Qj5VW1_t{wX%f@9!Q|zu z*WABt8l$2#yZ6h>U2087+Ao+}T^NSvQ9F^4f%0lDgdNjFyUyCp0ic0)?k<&r>+9bnUN5=tb^@~X zMuGCz55UftCKi2_$AJy7?rK)^4u8Ve-=69CMVLsrrlY!zj~9yY1z$5S7N#K>^H7IgHl3b zQ5edJI^j6bc2;50SGi>o-=>N(n?yvBObf4&0Vzns#B^Jeg6kX4x4GYagz4#4=1({4 zcB%fzgz0PNO+EKl>AN>;;qb9TgM$T18q{)RgDG)whXp)IHH{ifA))GyO4;V&xc@VH zPHWbOURyuSI#$x{;l;@oz%0YzU=|heoh0falgDwgrd=p1%yA#%c6&2k?OZ(oq-SCA zcCq!*C0|unn`5-62bQ(jQSu&ue=IaRFl&f(mBfb6emj`L3$v>Fqaqg|AOZrV-0=Nz zn}bPD1UogalZU;5ZKcRZ`>j{bQ$;5-0U#Cwk>x@AZEK|3uj@)j8%E5!4R#VGb#+`jI0W2HC79uGMv^qvw^|Rs@|#^pTqxyvl)1Y z3g)P#O=f;~`Kn*5(LpsSJlxP$Na!B5rrh;C%+b%Eu*ql0N1cHGzygt+7Uk;$2;{C1H7B%nSRBCry1 zd2}l}1Uw(^e9s*tz~fJ7=wA;Ba_CLFMab6JO^S=rg8%_Sv2 z78)s zmQzRtIJR?Wv!$TVhg1Oe9uCL7lqV*p+NrWKnRw>bdY8D&Om`rW3$Nu%Ymz1Z_+gkU zANZnlWO_eUE#97UE@F~t*wtI8F5esWGLd}H6RNv+yzmdLAfIjOi!kx66<(j6ZNi9* z{J5M7&$r94+?L-DR#i1qeY3OccN!2V{BX#C`1Xu)$h^+lEfS^gaI+#`xXK@Qtev{v{4-8tzsOdZn65To z5i~nNsi<ZxGdKi!l82bB*M6BlP zztor|a8g+s0eB&S0EsdQ574!M3e0MrOTyCXJ)W{M>uQO*p*38N`R=&3{^K2@v4%#9 z?e@s?{>JWHp2T`7+EPeG%**W%q=L|5Kc#l#*xR#N-(6h#I~|4{5#Vhk^P3E||4Shb zba;B8KmrUwpD_!SKC$b_ug61_KmG*Z^*sPUsuY~I%6DT{B5v2Su>J8|_d8}?fm10! z2$wf7NRigj2{i^xLzVO3d|)4;lHGNP6d(iEq!s@8kdv!JhkaEYbq=E!YuD{v<01t| ziEL|Xs^MyW<`L=6i+e}4T*ml?ZI@boUG{RS$Me&~Qi~hn*46QHX?=zl3-%rgkig5w zIH#vWs-s2X!eGTYcYySli&Uu-uS8KvjAIKN5nE>IX%7=T#TZ^ZiBWayd4 z`(|~ZvaAeaGo0{vZ#i46w*)BK!Yy9lNUqOnbOHp3Bw$~#yPm1S10J+pPA?Co&Yz#w zsC0Fs+yU8(=wNj?#~yC7b@hW zWRk87M?Ya@h04~^;#fLRP~d$Q4chn&gkM=Hsk**Cdc4b>)sZ81YpNH_ zpwB}#+I=SuRmvXdBi8Y9fKk8ddYq~pL=f%Y!?ov0S22f(B&3;CdEjN42of;9cDL#b zD5rA2#`vrC+h`5lDcy9UEAqtP1kMUUL5uMNuP4tEP={}m^E;YPbpWmlGe869Z+&#S z`wa6@F7`T`u>>B|Lqjm({lbFhLM^6DclX<-!v*IaZQ$kgaoYhsB0KxLP_2#Nv=<;6 zioJbf-=1%-D3a8pzSOqWW@m) zS^j&IyTzqp>5G#L$N-}d0K_SzRtR>0*q8{csaLd+(8i0Q#NOGNDKY|0T)WZX+UI2q zAjrlf`9VlVF==4b9ktUeDR@@Faf*2!i`ziYLxV{)UPbxhtO5E@55O5WGa{bL4igiz zNbU&*67T;c#P1LwSxW~o^{PIe4XDdnSV*du>ww<^`<7iLfBP zZT`0`=sU=`P)t3*lF%_GO8L@k0v-*N``bs{k66eR@UF2eud2 zWeq3W|ISJ@ZG~qLn*XoE=(G76C3gmfffVb-2XYfB&pU^A+@5YztNG0-J^wrX(P9-d zr>~KO6C2nC1?$2tE}B*HWx9Fcg&b>?SiX)IRRAfs$(&p&fuexJ{+fB3OTu6W^V90>A21U8l_|oj$gsS z!e(>80+0iqM3JE@>G78b0}Nn9 zZo;Wqwuwvvn`FFh8^)&Fyny>#X-Y+=MZGl?3lvG#bU=)Yy9{NrUXL6dl_4r`Yh`=~ z)Bw$qCdm+23;-f-pGbU3x$RmnJN&)tp3esQR39G~?YBmjS!ZWv)-w`SQ;T+X)CirO zx6Nyse83q%U4lV&x1jyzcQg>Bu9tp(T0EwGYaBjZ%1cMiQR3X_7IXumf#CwYWZITmy<8$r|5WEk$~DB_{n(s1|ozJ|Lp3H{o61?Ziht>EO}#}yEK86UT^LWKJ! z`21jc54gIK>_}x zxwp6U9pz6?S0GI%3kmHsyBe<3=Z??LzDXR*M&1Hor6eH0x0U%{&H)TtjU&nD%W8mG zu@5-7YkPhgQ0?k!GL@6qoh+orb-UdABU8Yk4^SQ1@>pwRnBRIo3XT9lo+@CJ+nz&I zRIHbKVPS!8YuI!1%Kf;-p{}~R^8g^K-I0**3CxwULCztVRDiz@b$t9N^u@gNV()P^ z)m|=oSNM6kHC+-oaM;Tcr#3JhRO9`#w3KJE_Ggs{FrDI?PbEX7v1&)6vk2*=k1#1E zE+6*Gx93fa{?&b*DO27AdTHbmE$&MtrMUWNz+a(xWk_2&Tla0_uUxjyc3}kXF1`;! zk+;+C`1@eMXMrWJ#aL-IGu&V{l7UDIUYSx&M3--CvA(}DJbZ;J@tMNoWVy+Fsu;YB z0pr=`Fcy6MJ-9DAi<7Q}1Ow8^F8KW7McadUXeb+oV7aie0Ti3j+Mn`H9WU;+Bes!% zjkdeJvy%ck+daVeDl;^~{9y*~7ZM}&M}44+$>N0Ux*)9#n|T3z+iJu4)_4AtHP zY;BznKelqDK)^oHOgKNyd4?&mmD%N@Cnb1T7dp--A3JFGsw<;KP34{+vKv>Yq&`vJ@_dn7du-!(p@Li^UEU ztU)i?2SMUk0F!b8Po&@%0hAS+L-9XeZxo9P7qBsyHORRwg^lNM(o1{JM<@T^AGZDf gAH9&art?XD_yE2sUX<9_bb@=Bw@{ z*bFbRWgO{bEGkXE(r=2L0ypK99pcY8=6}xq8jtXdom_mD`KoOyyO9s_E(X@|Oc5v2 zur)qq8Bb9uE;IcElRC+9q+QbLJ;%r;yHSJbuhns77T@CS!27_pvBA~t!CSHR0Es*~ zLUi+tsit{UP$+{PYH|Ss2n{0rh7kR=6&olNB?=eg4I#>ZPZ@Yg(BGh#SvQksONbAo zs=eJH@21$u@lKl~>Yu4JUu+=_IF0qYJT&?`k1VqZpdpH;iSDD&tNHymOj5rm$GhhD z6Z)SoVRkw^f|$UIXqkjcz4L%SMeKF@x(#lYmd(;XS=#N%O!8jw4TxWLj$iwTOWWgK z9tjYFnmAw-eD0SA6u}pIdVfz72lZQ3J>|Avt{(Y9@?87y#CQh zoMJgOv3?3m4EW7U&b2jcHBB%`fqSx7=@f8axj@{J?^NMuf%){)90k(RxV`x6X{hM2 z_RevwDqMXBwi4Wp;0i8}H-&XS-hO%&9Mt&&jAq5_di?d1@BYif`(@CAY)~L4BR*ZH z1Q(X^S8M{YlOQ~%OzPV!Q>L6;f6*F~u-jwPI~XXwpD5WJr*>1w{qG0!`X>hbD}D|% z-H#%AHKSbq-2s%BM_&z#$||KpNScc|-;ppvOt~?38~Re6bAfc8#|xR%`Wxj=pRIH`aD`Wff;9C)_A@RcNSy zs*JJz-VtTsRPt2nk^f$poRs4HR8(GGZs9wYDG-;KSTwb}rR|)dA84v#@OetdgmZFo z5)nhnUcpIzTn{@mZ1`2Rca|yOpx-UA)CumHda{cXkU!=W1 zrcc7h^h7i?RTG-f(sf7GZFgO74;OqqtRALovX-WcH)=Z4zURfNyYNGLL)+p?*TWVO z4*2q_H_H7NXGh!^ zIY#ck)(fN^e(rAv(|@Jwx|x|tP2+y~TXK8670~6~;>1G52G;|E!2uUzh9em|7aNu~ zfQ#zq$4evZ8jnPNA)s?!Ug+z7^f$sQs>ls{TDx&&YHMeAbO>Ov>rr-nga(!pZM;>4 z)XVwCLGD@;&p&>`UiN|iaO5d|)mF>m)`MM*A%^75#Cof=9fwSWQXKuGkNDMUcg*bU z9t%Xb2A=oWslw+^^>DWxemGHae6y|aS?K31i$4|ijK)lA_q$Xvvl7RpGCa2r=Vv4P zCw_XB3qF7w&@Q&t{=UBwYH-SGS@1Z@POc5G7I2vR@vzj~9N%a;_+nsCsNOtG?6cH` z_Qjvz>t0?yz3*}oh0BtOPoCZ+Tb-ck-);7oo4D`FLyj$0k{r0&vLl_ zH9p&DGiD)YoZ%AWfhT#t>jyjV!T9p*ixWrD{o;4ajuXZunl#?`! zR25?zO|D>3e;epUQhA{$zVVKtDHu}`p8^BhW%X`LXoH!^(zq*o+mhaB7|3(^3P#au z{8k}uoW}D%c6J<$+fEpR?)MXU#g@L)df&x}9$h~}F>2`?sL=VSSBf1vGPXI(7fX&8_+-!Z5*$rQtPld8wyI92f7tw@CmRfe0u!j0l~5PHLVk zOR}y4Ml=3$)@s~Aws~`rr(N}umt;#x+VcZ?vo;YUNqc5|)Bd>?m~3Ld)slOu@dODP zK}$xan2UhP$~h?kkrDn(cDUy-+tmJn^eI}5zedHNWW^3Tc$8C@ga9}>gD`(D)GK=oyQsE zDu8ab>TeTBqYMku8)0=5$4wc4>up6iFCXba@VHEZAg4>;l7NC=&hAz0!o_5!7ops! z6oQs+$6GxQd^GpJraj)qNKFq{vLeL5l!7#TiC|b;9+QnSF2&@7W|B?;ISM|IwGnmS6z#lPA>3CItmBN~&Kv*U zF^uR;9#x+zBQ*b`klmHa{E-|>d6X(E=c~+N;Jo*Pvl6-t z9)BT_-tt1jr>9&6ch1gId({~KHFE!gSU**Sd>BrEeXhV8sB0r?(y&6JpWDJIL1j6o$0-)vmnO^5_xh+=)o zWzIxXlmR7;n4|%0us0~`@Rbo3xaay@`^K&G3RkZ+T_T%~!*cUKinQ>HUWP4`IR2WvkImy{ff^=1)+#lnKBCaTyr-eCY?1Oo}udEwC76 z)C686h`0>v!)-Np4vBMZ`Q?~~pk{03qf5u1=%bGk3{B(OMVxotEl zMk1QMDM!66_PGK{z7AMd^45fqk>3r82)6S4)BNuErR9I}x@u^A;i)ud!rbIQ4((f^ zG~QFgjcr|Dsiov<8e~D>_O{(FG3tb5Xv4VVcmj}hoS1v% z^dB7eWL+XbB)omHgyt+0VeG>2nH2?=rl&@Aq^og_t0`dY*f6UIoP_ooH<8Y)q%Y*P zqzp<+kD#6eLPohX?F!OHgIfrC)U9`_`^7pxDlQ@Hi1AST{a`@u^aq8!T_{^dfx64@ zx#Q46=fBE|sA2UV<*V8jCIiC}0>A#z7ttNVroQHf{>2Tb={Y#-BVPVK(Jv zfrK%G&&P!P6yCwTeC-%wca5%K%}2H^J+E9sUPfHtnHuiL3dva+D)v}O zc}}v(DONh*(}<3;N%UO$yf~-%qZM|lB>~LR*LoO)amb)%Zc@G#a;19kgWUCYJRgPo z_57pQ_Yda^O%Md*`9-}^zoD{m6L+ezVD-F--4cvgwMx_6C&um%#Y^7XWVF%%m~Ob zIKcb~ag?*+8N7%$7AxZDqWDDa%YtKXR6hPp0>!d@KAlfA$D$pWDY%4x{SvJ{fD6di zo$2ty(PTqq{!Y9t^{H$43)?6y16*(d?>Pk$1w7u!CdkL*U4mOr1o*@PH1~UEAuO(r zijgx76lq&SBq{rIi|O|<3yClMca;`gK3M3|z{RQEe|f z!vK!az-%Gy$@aAV7AK1{U6f%*96slT9#$Ef05z2>bB=SJbj#Jk_u-P0VdJN3_~EKL z%8XzvT%mIne+_X3>(${98>|PBzr`oKfTbv0rt-opCOScp@=!G*h246Q_BuA}L0{cs z3CIVp2&u2hrpr2fIiRNsEKlF-R>4k|Cc=h|ma1O=m-HB=`91kVL5<9Jw;-FN0q0>N zcM0X!yO{ym+a%0PBvjewuK(o|8R)3CevU5q#}yd#%Q;wlJ2DM zlt_f-IB+a1&o3Z9+MQ+Az$25cikDPCDcvqC3rg=eng5ZZ9A^F=$_B!DFZQ)UozDP` z&Cl_H)1qb>u4PsyrpW9ggtgilZA7q^`=QNF1O7zD*c3re4e1qJLgho-1#ZJN8&t(; ziOXM!W35>q(h0<#NyP;|xh*E0p&~W60YNDdc8lRXjd>?Bx4fser_W?xIP$STNYdya zy_DrAl7Tm$uARbp-YAQ@if|#%b2uCu%y#;y&)*+&*JBQYw36@Vm&b|D4tv+>dZ?Sh z&B2-Y`d1XAvkrcvC z9gMTFQ@@lD8bL=B7Ewu30XymZr$yNa;(2AZFWWYk_U#1Z1Z(maNhdAj_%3Ik>*T&4 zvjS2`q)_TYHKK?~_+)GePH`#70vn3u`BHfeLPojYN$$3%aumJoYYh2c^@10~i@ z?*ECr%Q7CVL&B_~5M>BvR6bhRulLJi-5f^5H^WWRiEiaf>7OqOqct)AGjnm4m~D&{ z2UH2dp(*%RtG!I*0#fjM+1md_Xq38sLKN;cw4AV+4FR#1LXV;^?DfLblOF(KpcZEt zKZz+ccrOUmFLo4MT2SHDeG8xghbc2(71o%Y5ghu$DoW^QJ7`mbbT3xSd?dkQu1nj` zkercUfYSCZD4=s)(d~_T{E(}G<_pQgSVFV@nANP)TjL{d9Fpid?PQ)_YbA|Pc3=fm z-I{FPO>wN`0&ZY+sm_ehgj%uj zqx;W~-ow|QR(PJ=+C3mEO3yJA1GyX4gW_{c7fLlR#{0;a^qlU5q3q3ouo zdq8Dk>Nd`|gO^0?nK+#N-H%J?>Z+Ra*!8S5XtrOha#(@iB#k}5-@jKI(;qaetM@%G z$B2>FS1e0G`X76pKio!=Lvka`#xlnn-%T}E>GMpH{go2;xjj6Li^~Q!9f)7GUT){& zQkR+GMeOWQTQzP|P`(i0GdDbOh0ul`gr(g`Y_%G2XGN2EB6>55M(#dE|PatEo@U9Nu({*g$@s($vDrl{z#MZKP%#?rF<7dw`KZEu7N-=f9o z>8TPfZa^jy8LXe4Zxgj4)cwxZ>i1F=1bt|m50GMg9ZLP{K$7b9HaCiFvsY62G@I>@d5Korh2_$PfxBK38*3 zA9TA&aK7UIc3|-7KFu$c$=z|(FRx7V#tA%5*KHlhf6@Tz;`?@;T|2%VNlDSx4MUxY zHW}|e)nKb{mV+SSzh6A`nw0QuFqH6_-Hr zbA^K#v4{zu>_$+WtZ6)?QoMPwc?+!*Js?PF?1&A-S2$HYVCDC|b@f5`i?QK_SH|dw z6))EuPs2j;cp|r0Kz5~GA{UJ99Fj->MguJ~&0M8@`1q2PS19D`l`<_?Kxe}DNwe>wRhm)*XEJSaPf*PmX3~qds(~oaqXbFMFM@sC65bojdA%M3unc3V7HW z-)S#7@n}``+>g!6^Ff1s{H_UrO^u`N`Ier3;}%XV?RUJigm3ndsFs?!YviKCA$k923b^q=BEl=aKY8*5C16{0HACxF4yUIn0lkE=&R>^@ zEtj36qpck86%8E;&z<0tX)XGKFMp#K9+B7r<^gxS8KYb%^WDLc%gf7g@$otw!JF)+ z1sxq(KonJchqiZguzs9TpUbIPjVB)fo3?-E9ua%_%mhh2-7shQUg4bc7=gppqr}xS zi~auP!=1@Rz*%bE?;`qpHYX=1(viHI>CbKMo7nqvwY3$U&dVYw4?BquQAi}RVx+n{ zyp{doI`OfsqG8NtV{fLi%A}*E;w%DBSGUS1{d{|wUr1=+re#w~qC16@9eaFmTjJ`K z`xhD&6&2DE0*Pyejg5^R7EQX9C3T zoMsA-DqmK>5#{{H5WT#Y$tDKN&#ywM`BufmBRRdXc(baUcrz$Iae9s4aC(RjZGV#0 z`;vC}bJy@!=ig0(t5Rc*y#9-}>|td%<$1LR7!|0e`mkk^StigH@xXwd29dfdR~a_$hb^8*444ru?fj zM&=_V(40T#Qak*$!rH1h@AUM_-kmE9No@BQx4m5sHunjMURUY4bkgX$UXZmaSxo-$LlO0v^!E4n{EN`!#Xq?pJz;*QS-Cctx?4z14%L2Yj zC(*>`4z>ACp6vn@xGn9E*$B~LBLH~M+tswRsOhg?`%E+})Yl7raV-GUve0={G}YW- zE}bu{F%!8EPsu551vGP_+4azXKGU3wqnpl40RGd`OqSe7R_BBp_S8RgZ{1(zWeys# zVHz4e@?{B%8%?#@$2;C~fxIl1MF=o^13kLB%FCT5prG)pZ&_K#+2KC(-;%`<}VLWchkQ47+b>y8=feKs1rxuARK4VEvj=uT>CeT-{q zaRG2Ix4A}jPReKzwZ+l*iN40;n*FybQIpDFIzF!^r<;`hI*Ls)6@n8ym-`EB>ZPAhTLH9*Bu7 zFGRy|8{Id_{@kcFnD@5oe>v-orFGRAebGBHF$dHYYNNh{KIQHsFD15ML>H> zw=PRf8!>qtOSx`=t)T)FG7^osvQuVM6fz*(io*t%KGmRL$(cw67LWM_@)hMNRwY)k z9yw~(H?bjwXfG!W9P-BEVwkIzQ8I~@Ce9k6py0#*%>snY-HR!d5O>_8Utx}-cjiz~ zFdT?t$-eCLDzu5K126Cd18z=OAsY|6#q!I;kmGWu{>E_n4b`}ZF>XNDxQA{jO*5Kf zpsj!kth<;nKr2K7=t-x{L?ZRskvCG~5`6A5$gOl3`kJ3bD!(1ZUjus6J{+o!VK0;Z z?C6o`;Tojt5*2dF4GWg!b9tzRg7Jag7EAVIrK6l>ETK$9Xg*OhWdU8~HVWpdr4W2) zdkq&dQ3yg^aJ%sadn}Wz|2eb^0Ec>}V!XlFAhGeYB|@T1oS^7#!{Sgf=CFhVtODdt z46_tI_gKBiv-_FZ|bBFYH5oDhT>8pdhjsw2YTbOHn*t z6p@d(*dgZBxoeyj3CrlIHv@!>A?8dGQ8>0f`Ranl3~LU9mi{SrrJb}&a&TZc0Zy3? zWr!}CUmnEr^(L0*p7_}LyifZ8FS~x*)%$~K*-J1Bnkj--Bw^0?1Nxz`6l3;8Az@^c zTo%@|?)QO{2g8#@jKH{qIhD4RW?GK0*6Kjs5yE`pN&j#Jq3+b@Q!5y9x($TNk-({$ zNXK}%6pdjf6;*Q`G+H_sHBV=720^FfBY|U=1;*ZfLROcGVl;X{m=7a$nx;{d~CfZ1*k~OOX<7!DPn#pFU;vs(DN@v zurGy;aHISP8&QM;&Cm z(o1ac7$bEZcbWPQ#);flbdfJpOSq&6DY4P^&{LoqvfqBjOrS)6lSoPE6&}04u8x#{ z)p6=CG6FAq^Djbq&A3}E%%aL}4dQy7t9B)pexy=}Jq3}>QJ{@L;S9Hw*dufwO%w+k ziw|u+3>k=^F&<=)L{BrcOe;*TybVp5ZHR4RMU+!FN+`=JBrD^aD`yul{fr&d^y@zZ zGY+K})Kz83GGv^~SZuqHXd!KRuKlsvyeG}u35+7?Vz(J+kxzVx1p^F8&G$%F%pPUT zEi7kGP?r*5$}k|-RfO*nlP-^$qHwNw$r$Br*f@+z$BT)2dW#Rg3Vm1f14(b;2FYi4jY9f2#&&M&}C_&J5;wfAl4XI8(})(FftU@^AU$@| zq1Cp~J}efTQs<$CEV|Y(uG!XztEMn{iq+BjF8HtV4Rg)dQ}qNo*7f%Il1?6nmw+8c zKp#hJKLl9}Gp?`DokX4(+Ahw%4TGTPyB6CnbtEPoa+}-U;(C2*{pWxj)LX9V8h~Tm zuW?9CSAdi#8TN7&q9FeaIuh!eJ)gEa=pqT{DZ5{`wXq2)+va|EWp13hzzE@h@RFnn zzd%nBQQ>wc3%f8ko>h5qT=@p9yNnMuf6kl5!C|gV7q;t98#^Y;Qn$ZVTFO`WzqhX- z(&o{HrAoilhL*#I@7Z*fSdUK5g&_pv5F)&ox;ZAMG}^~M$`)n8 zEh29aysXA%P~Jrb1B?f#n$?el1;aQ(aj*?*efF zkz~Z&s@%XHV*gk4a~>m688{zfMnN51ofQ$azsNj#Wg(Q)@3bs8I<3-|*S{|;TevQ; zK+G6j)MnATK@fRj^kcn&7V<8moEC!k_0OP?vIEW1TUYp~OlJ;?)p{h*MvabuSqz1k zE6SF<0i*4nI7@B4?VOc*MY<9%>Jd^_nKSwUkZ1;ou{!iJi~Ah&m!(6)(e(n{`t&_T ze^QIxWI$&8&BVBWk~7(|s)01Zg$hA@0rX3i{em1q?Y(wU>?-0HRT3dTm;i1eQwwK@ zb^uN@e+h1(={*uwWQJwtb45)3GSF3$(Z`!qA)`vCL{FiVF(;PARA|J~GMN1gv;qe; z&4N%qTV}z$%W|t}hl7aTaT|&7sM*7#>I`Kfq{4WWSU!qHj4dbrT8f*x!aJ~OzM4q_ znI{|)f`4ED2!l7|i8h=9I$*D=-mgRQ=Cb52z$c0?y9~j|0Kgxz*;9Z%$iQfZHj5Ws zKPbkXn$|{ry~N=-LY}43(^K2eMUNfA!QBdIVml0IxG-qvIvjW+RaTX_wRd#MWZbbT zH;LX=CjR{3RMqqhfi}|unAh|lW9pk#ZWRQd_i<~mlJm1!lULv+(nXO%Dv=eyS`P2y zfNeuEO^n{M?)Xt;-7_SUm>ofA7F35Wm?ucgI;(+>t4R3Z1GnHD4-xhYfYT~cVAO4+ zY@}EdNlX#ISlFWqxmQXQ@_=uCAT*?1_u7h*q76GxJishMN;4%5i$}kI-4+DHfXmjJzYEKFCDcB zsBo4lxgcL-+8Q3c1}2$%gLoqzG^jyD`K>cmy(w1vj~B02jolj$h*ebCF;pZ#9G>&p ztwSvt4R=;t=Kip6Jq65(&ifu>N7$T2deBQ%561B}x3OrMX-$6pTZ4nNway+j(}C{r zPuV`z;CmUSPC%JyNeDKf|Ux2`eXgFfNw}!lShH}qXGH|_146^Fc747vriZY8Wj{&$90GHsRcunVFA-KQvR>K1%#H=+($lZMhv7$C-=e{|mt(1w{4)?K@! zQs{cX5`u1Jw+uYTbayuN;HwsFgMv#L{Xig?al(hx^{u8kL@60)#1ta0G&nMX?k>aD z2$l&IM80B8eNe##^2OdFBg9y~7{DaRo=rSoc`6)2uD~8rKcIuVB|`SWcFsbNM2B}gtp*Dccie+b$f0<`ckUN8Un!MM#c+H-{H zLwmi)A7n}}p)HF47$i399u2tqKlaKHrZ~_6$(k zbn=UVS>;yC*l=urLbRl3TfTAX6`I!ZF@zO%kx}XnfN;~%FUD_Bcu(mLYJv{BOwx&2 zqYPirt`vj8r3o7+yIAn{QpZLCe}H>K87sEw_Zc$6@WLhwe*6?&L37@;!0K$)+&1(r zC;hQa+cY~FIB_xLwl301rdKOm_@9{#frjjKx&g1$CW-U@x!JOObLp-%9_TkJtUwDRA7v9~{lus}gpDfebyX_?Gm zG%O-Tgiv^V$dGy&>K^a&&o1bZmPQ4R0Nyl%TO=a}I|$UQ+7M9S&^4r>C{_9TBlQ^{ zaQ>qHmi2k#0N%*=e*D*Vo~6X{ZiU6_--}lmoc5SW_nBxUWVOFgo0es{t~(Pc?9?@V za@1Ag)Ow8Jlossn^h$GEc;KlUIJbR|esKr#E%{Gb6(uNMLo31XC}HM-ZG^xdyy zD_F7$W<|L^2MTig5ITMFzf7A%w4C$>Ltj%_6j4$p z$a#Dc*6Kg3+7@&Spvdn| zolp?k6l?#xjQe+Koh@b4feA)V0$~9P4XNV$H>3^xZ({%fu1ScF3RG{Q3@HEqiEflf Z`aAO@A(}WTI$%&8MFFZRQzK;-`hRpj$~FK1 diff --git a/assets/mermaid/git/states.mmd.png b/assets/mermaid/git/states.mmd.png index 62b7594432b963685b10da8bbf1809d156319170..138a637b8b9f58246f0cea879903e6e283543e80 100644 GIT binary patch literal 14790 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 Sx9k^jqoSbss`{nHhyMo7te_kK

    RQU!?6H@4jptd0 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%0AvxZB2C-aERra0927a9TL< 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